From 3f7b6b7e6446fd646547604fb822a935b0b7c424 Mon Sep 17 00:00:00 2001 From: Wagner Maciel Date: Wed, 2 Jul 2025 12:24:56 -0400 Subject: [PATCH 01/77] release: cut the v20.1.0-rc.0 release --- CHANGELOG.md | 25 +++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c38630b90ad5..8d15e9f32ee6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,28 @@ + +# 20.1.0-rc.0 "aguilarite-axe" (2025-07-02) +### cdk +| Commit | Type | Description | +| -- | -- | -- | +| [6dc2f3ba5](https://github.com/angular/components/commit/6dc2f3ba50ba4a42708b32c8ae67461bdf982eaa) | fix | **a11y:** allow mixed types to be passed into setActiveItem ([#31462](https://github.com/angular/components/pull/31462)) | +| [69e660064](https://github.com/angular/components/commit/69e6600647b5c98236d87843a29a69acc990065b) | fix | **tree:** remove leaking subscription ([#31457](https://github.com/angular/components/pull/31457)) | +### material +| Commit | Type | Description | +| -- | -- | -- | +| [20ac2b2bd](https://github.com/angular/components/commit/20ac2b2bd8bf551c6efccd149c21280df18cc31b) | fix | **core:** improve disabled psuedo checkbox contrast ([#31464](https://github.com/angular/components/pull/31464)) | +| [1bba60785](https://github.com/angular/components/commit/1bba607856641542993cc4068dd353796b763332) | fix | **schematics:** typo in prompt question ([#31449](https://github.com/angular/components/pull/31449)) | +| [7bb0a82a4](https://github.com/angular/components/commit/7bb0a82a434c40d01a0d1aa35bcddaa3f725eccb) | fix | **snack-bar:** use inverse primary for button color ([#31465](https://github.com/angular/components/pull/31465)) | +### google-maps +| Commit | Type | Description | +| -- | -- | -- | +| [4052130ee](https://github.com/angular/components/commit/4052130ee0dc627242a7f863f84eced4a0af048f) | fix | fix update schematic ([#31448](https://github.com/angular/components/pull/31448)) | +### cdk-experimental +| Commit | Type | Description | +| -- | -- | -- | +| [06d7384a2](https://github.com/angular/components/commit/06d7384a23d0ded675f3df92be0487279de097ff) | fix | **accordion:** fix disabled trigger button can't be focused when skipDisabled=false ([#31379](https://github.com/angular/components/pull/31379)) | +| [8a091a7ea](https://github.com/angular/components/commit/8a091a7ea8bf9b0c51d1e25d8ac2df49b0feb942) | fix | **tabs:** set tabpanel tabindex to -1 if hidden ([#31401](https://github.com/angular/components/pull/31401)) | + + + # 20.0.5 "agardite-ant" (2025-07-02) ### cdk diff --git a/package.json b/package.json index a7e5dda11231..a19edd38492c 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "ci-docs-monitor-test": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/docs-deploy/monitoring/ci-test.mts", "prepare": "husky" }, - "version": "20.1.0-next.2", + "version": "20.1.0-rc.0", "dependencies": { "@angular-devkit/core": "catalog:", "@angular-devkit/schematics": "catalog:", From 405a0d242c53149de59b044b3be9882f50798a93 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Tue, 8 Jul 2025 00:12:18 -0700 Subject: [PATCH 02/77] test(cdk/scrolling): Change test spying on tick (#31247) tick is not called by schedulers anymore (they use an internal _tick) (cherry picked from commit 905835c0ba1cf0eb495fbab2cba0dd188f6956db) --- src/cdk/scrolling/virtual-scroll-viewport.spec.ts | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/cdk/scrolling/virtual-scroll-viewport.spec.ts b/src/cdk/scrolling/virtual-scroll-viewport.spec.ts index a023cb718439..2357db6d4f29 100644 --- a/src/cdk/scrolling/virtual-scroll-viewport.spec.ts +++ b/src/cdk/scrolling/virtual-scroll-viewport.spec.ts @@ -7,7 +7,6 @@ import { ScrollingModule, } from '../scrolling'; import { - ApplicationRef, Component, Directive, TrackByFunction, @@ -814,25 +813,17 @@ describe('CdkVirtualScrollViewport', () => { })); describe('viewChange change detection behavior', () => { - let appRef: ApplicationRef; - - beforeEach(() => { - appRef = TestBed.inject(ApplicationRef); - }); - - it('should not run change detection if there are no viewChange listeners', fakeAsync(() => { + it('should not emit viewChange if there are no listeners', fakeAsync(() => { + const viewChangeSpy = spyOn(testComponent.virtualForOf.viewChange, 'next'); finishInit(fixture); testComponent.items = Array(10).fill(0); fixture.changeDetectorRef.markForCheck(); fixture.detectChanges(); flush(); - spyOn(appRef, 'tick'); - viewport.scrollToIndex(5); triggerScroll(viewport); - - expect(appRef.tick).not.toHaveBeenCalled(); + expect(viewChangeSpy).not.toHaveBeenCalled(); })); }); }); From eb04b6de4839481c36028886ac95d6af30cd6806 Mon Sep 17 00:00:00 2001 From: anglarett Date: Tue, 8 Jul 2025 19:06:08 +0200 Subject: [PATCH 03/77] Terms of Service (#31495) Adding a Terms of Service section. See for reference other repositories https://github.com/googlemaps/js-api-loader?tab=readme-ov-file#terms-of-service https://github.com/googlemaps/google-maps-services-js#terms-of-service (cherry picked from commit 1316951e8e1d868ca9d9e026140dac0482553a08) --- src/google-maps/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/google-maps/README.md b/src/google-maps/README.md index e43b0cdb4df3..5b4488a6b575 100644 --- a/src/google-maps/README.md +++ b/src/google-maps/README.md @@ -86,3 +86,14 @@ zoom = 4; Not every option has its own input. See the API for each component to see if the option has a dedicated input or if it should be set in the options input. + +## Terms of Service + +This library uses Google Maps Platform services. Use of Google Maps Platform services through this library is subject to the Google Maps Platform [Terms of Service]. + +This library is not a Google Maps Platform Core Service. Therefore, the Google Maps Platform Terms of Service (e.g. Technical Support Services, Service Level Agreements, and Deprecation Policy) do not apply to the code in this library. + +### European Economic Area (EEA) developers + +If your billing address is in the European Economic Area, effective on 8 July 2025, the [Google Maps Platform EEA Terms of Service](https://cloud.google.com/terms/maps-platform/eea) will apply to your use of the Services. Functionality varies by region. [Learn more](https://developers.google.com/maps/comms/eea/faq). + From 01e09d1cf8d2a8137833c343d6ef5f92bceaec0d Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Tue, 8 Jul 2025 19:07:29 +0200 Subject: [PATCH 04/77] build: clean up animations references in build files (#31498) Removes unnecessary references to the animations module from BUILD files. (cherry picked from commit efea6041e057607efbfa4ec7caf0d2952150038f) --- src/cdk/dialog/BUILD.bazel | 1 - src/e2e-app/BUILD.bazel | 1 - src/material/badge/BUILD.bazel | 1 - src/material/checkbox/BUILD.bazel | 1 - src/material/chips/BUILD.bazel | 2 -- src/material/slide-toggle/BUILD.bazel | 1 - 6 files changed, 7 deletions(-) diff --git a/src/cdk/dialog/BUILD.bazel b/src/cdk/dialog/BUILD.bazel index 252e8c6b2ee7..95735b0b92b3 100644 --- a/src/cdk/dialog/BUILD.bazel +++ b/src/cdk/dialog/BUILD.bazel @@ -17,7 +17,6 @@ ng_project( ), assets = [":dialog-container.css"] + glob(["**/*.html"]), deps = [ - "//:node_modules/@angular/animations", "//:node_modules/@angular/common", "//:node_modules/@angular/core", "//:node_modules/rxjs", diff --git a/src/e2e-app/BUILD.bazel b/src/e2e-app/BUILD.bazel index 659b2c473d52..9d6e7e992781 100644 --- a/src/e2e-app/BUILD.bazel +++ b/src/e2e-app/BUILD.bazel @@ -34,7 +34,6 @@ ng_project( exclude = ["index.html"], ), deps = [ - "//:node_modules/@angular/animations", "//:node_modules/@angular/core", "//:node_modules/@angular/forms", "//:node_modules/@angular/platform-browser", diff --git a/src/material/badge/BUILD.bazel b/src/material/badge/BUILD.bazel index b44cb37fab25..42c911bc9f0b 100644 --- a/src/material/badge/BUILD.bazel +++ b/src/material/badge/BUILD.bazel @@ -71,7 +71,6 @@ ng_project( ], assets = [":badge_css"], deps = [ - "//:node_modules/@angular/animations", "//:node_modules/@angular/common", "//:node_modules/@angular/core", "//:node_modules/@angular/platform-browser", diff --git a/src/material/checkbox/BUILD.bazel b/src/material/checkbox/BUILD.bazel index 443e706556eb..7316d2d58227 100644 --- a/src/material/checkbox/BUILD.bazel +++ b/src/material/checkbox/BUILD.bazel @@ -87,7 +87,6 @@ ng_project( ":css", ], deps = [ - "//:node_modules/@angular/animations", "//:node_modules/@angular/core", "//:node_modules/@angular/forms", "//src/material/core", diff --git a/src/material/chips/BUILD.bazel b/src/material/chips/BUILD.bazel index 9b5d385a2155..ff69bad4d322 100644 --- a/src/material/chips/BUILD.bazel +++ b/src/material/chips/BUILD.bazel @@ -96,7 +96,6 @@ ng_project( ":chip_set_css", ], deps = [ - "//:node_modules/@angular/animations", "//:node_modules/@angular/common", "//:node_modules/@angular/core", "//:node_modules/@angular/forms", @@ -116,7 +115,6 @@ ts_project( ), deps = [ ":chips", - "//:node_modules/@angular/animations", "//:node_modules/@angular/common", "//:node_modules/@angular/core", "//:node_modules/@angular/forms", diff --git a/src/material/slide-toggle/BUILD.bazel b/src/material/slide-toggle/BUILD.bazel index 6481aa1e20d9..f1c00a4dcd8d 100644 --- a/src/material/slide-toggle/BUILD.bazel +++ b/src/material/slide-toggle/BUILD.bazel @@ -77,7 +77,6 @@ ng_project( ":css", ], deps = [ - "//:node_modules/@angular/animations", "//:node_modules/@angular/core", "//:node_modules/@angular/forms", "//:node_modules/rxjs", From 2bfe12e88243b4be6f92b821f9eb95d8ab3424c3 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Tue, 8 Jul 2025 20:12:23 +0200 Subject: [PATCH 05/77] fix(material/tabs): remove delay on touch devices (#31489) Fixes that the tabs had a small delay on touch devices. Fixes #31488. (cherry picked from commit 15d9ef55d3287b42a1a69029345451d5ed114c3b) --- src/material/tabs/_tabs-common.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/material/tabs/_tabs-common.scss b/src/material/tabs/_tabs-common.scss index ed8f1c06247e..7523f6010dfd 100644 --- a/src/material/tabs/_tabs-common.scss +++ b/src/material/tabs/_tabs-common.scss @@ -21,6 +21,7 @@ $mat-tab-animation-duration: 500ms !default; white-space: nowrap; cursor: pointer; z-index: 1; + touch-action: manipulation; } .mdc-tab__content { From 24f86fd5e7f1be18b20cbab5b4bc4d3f10a62318 Mon Sep 17 00:00:00 2001 From: Andrew Seguin Date: Wed, 9 Jul 2025 11:40:53 -0600 Subject: [PATCH 06/77] release: cut the v20.1.0 release --- CHANGELOG.md | 214 +++++++++++++++++++-------------------------------- package.json | 2 +- 2 files changed, 81 insertions(+), 135 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d15e9f32ee6..8e6fb9e954b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,25 +1,92 @@ - -# 20.1.0-rc.0 "aguilarite-axe" (2025-07-02) + +# 20.1.0 "metal-brownie" (2025-07-09) +There have been some internal mapping changes in Material 2 theme config maps generated by `mat.define-light-theme` and `mat.define-dark-theme`. + +If your app was directly modifying these internal properties to alter styles, such as setting new color values used in the foreground and background palette maps, then your changes may no longer be applied to the components. The supported path for changing theme values is through each component’s overrides API. + +The Material 2 component styles have undergone minor adjustments to enhance consistency across components and better align with the latest Material 2 specification. These changes result in a closer adherence to system-level colors such as `surface`, `background`, `disabled`, and `surface` variants. In general, these changes are slight hue differences for grey colors that aren’t very noticeable. + ### cdk | Commit | Type | Description | | -- | -- | -- | -| [6dc2f3ba5](https://github.com/angular/components/commit/6dc2f3ba50ba4a42708b32c8ae67461bdf982eaa) | fix | **a11y:** allow mixed types to be passed into setActiveItem ([#31462](https://github.com/angular/components/pull/31462)) | -| [69e660064](https://github.com/angular/components/commit/69e6600647b5c98236d87843a29a69acc990065b) | fix | **tree:** remove leaking subscription ([#31457](https://github.com/angular/components/pull/31457)) | +| [f446d7c412](https://github.com/angular/components/commit/f446d7c4126fc253fa9e51664360bcd02245f005) | feat | **drag-drop:** add opt-in indicator of pick-up position ([#31288](https://github.com/angular/components/pull/31288)) | +| [5564d7d016](https://github.com/angular/components/commit/5564d7d0163d3ab56429b3059c4c572f74214ab2) | feat | **menu:** add setActiveMenuItem to cdkMenu ([#31371](https://github.com/angular/components/pull/31371)) | +| [6dc2f3ba50](https://github.com/angular/components/commit/6dc2f3ba50ba4a42708b32c8ae67461bdf982eaa) | fix | **a11y:** allow mixed types to be passed into setActiveItem ([#31462](https://github.com/angular/components/pull/31462)) | +| [cfa97bb785](https://github.com/angular/components/commit/cfa97bb785f8faab1e209899695c1e187020b391) | fix | **dialog:** avoid setting aria-hidden before focus has moved ([#31030](https://github.com/angular/components/pull/31030)) | ### material | Commit | Type | Description | | -- | -- | -- | -| [20ac2b2bd](https://github.com/angular/components/commit/20ac2b2bd8bf551c6efccd149c21280df18cc31b) | fix | **core:** improve disabled psuedo checkbox contrast ([#31464](https://github.com/angular/components/pull/31464)) | -| [1bba60785](https://github.com/angular/components/commit/1bba607856641542993cc4068dd353796b763332) | fix | **schematics:** typo in prompt question ([#31449](https://github.com/angular/components/pull/31449)) | -| [7bb0a82a4](https://github.com/angular/components/commit/7bb0a82a434c40d01a0d1aa35bcddaa3f725eccb) | fix | **snack-bar:** use inverse primary for button color ([#31465](https://github.com/angular/components/pull/31465)) | -### google-maps +| [243845460d](https://github.com/angular/components/commit/243845460d3842beee3f58b1bdb0679bd16e81f3) | feat | **chips:** add (optional) edit icon to input chips ([#31041](https://github.com/angular/components/pull/31041)) | +| [9e942b4ba2](https://github.com/angular/components/commit/9e942b4ba2d31e7af70b3468b2c9b42364f47998) | feat | **menu:** add support for context menu | +| [4de7c0fb2d](https://github.com/angular/components/commit/4de7c0fb2d033bd81074764a52cc46edd02e6774) | feat | **testing:** Extend Angular harness testing functionality ([#30960](https://github.com/angular/components/pull/30960)) | +| [512433b6d1](https://github.com/angular/components/commit/512433b6d1c51d567e120b539da0053bc189fbaf) | fix | **badge:** remove badge opacity color mix ([#31213](https://github.com/angular/components/pull/31213)) | +| [92a8253e28](https://github.com/angular/components/commit/92a8253e28a676c41c5ca87382aad6006a48d212) | fix | **badge:** use system disabled states ([#31266](https://github.com/angular/components/pull/31266)) | +| [a7150d42cf](https://github.com/angular/components/commit/a7150d42cf0d423fe89679e2366a32830bf4aaf3) | fix | **button-toggle:** simplify divider color ([#31214](https://github.com/angular/components/pull/31214)) | +| [1f8b1302f2](https://github.com/angular/components/commit/1f8b1302f26d66e46896f433697822ebc410a98f) | fix | **button-toggle:** use system colors ([#31231](https://github.com/angular/components/pull/31231)) | +| [5ee7d79e4c](https://github.com/angular/components/commit/5ee7d79e4cfc1a466a3b1630f0f95c1f545966d3) | fix | **button:** FAB emitting invalid elevation tokens ([#31028](https://github.com/angular/components/pull/31028)) | +| [8523397fd2](https://github.com/angular/components/commit/8523397fd29a1cb5c08c88420367d0def020bf12) | fix | **button:** prevents mat-icon being cut off by text-spacing ([#30891](https://github.com/angular/components/pull/30891)) | +| [afe36e4d42](https://github.com/angular/components/commit/afe36e4d425ff365fc2aaf1f57368ffdefe51ef8) | fix | **button:** remove internal-only M2 styles ([#31017](https://github.com/angular/components/pull/31017)) | +| [589ea5905e](https://github.com/angular/components/commit/589ea5905eef43a671f519a13d566a151e5578fa) | fix | **button:** remove internal-only M2 styles ([#31018](https://github.com/angular/components/pull/31018)) | +| [0d47628d2e](https://github.com/angular/components/commit/0d47628d2eb1a5d72198769fbc7cfb978c8074d6) | fix | **button:** use system colors for state layers and text ([#31278](https://github.com/angular/components/pull/31278)) | +| [203c1737eb](https://github.com/angular/components/commit/203c1737eb6853c2e1b92afc8ed5f2756d5484de) | fix | **card:** subtitle text token should be on-surface-variant ([#31261](https://github.com/angular/components/pull/31261)) | +| [55b7ba0814](https://github.com/angular/components/commit/55b7ba0814863765f42e079dd72ba0313087fc3e) | fix | **card:** use system outline ([#31218](https://github.com/angular/components/pull/31218)) | +| [eb9abc366f](https://github.com/angular/components/commit/eb9abc366fcda8057d5b958231f518435f965e1e) | fix | **checkbox:** remove internal-only M2 styles ([#31019](https://github.com/angular/components/pull/31019)) | +| [458a17ba46](https://github.com/angular/components/commit/458a17ba4680cc4ed90965f2a71f655699f2bc11) | fix | **checkbox:** update tokens to system colors ([#31279](https://github.com/angular/components/pull/31279)) | +| [68d7ea0351](https://github.com/angular/components/commit/68d7ea0351b489bfb9419e1fe28e560ed7280d3f) | fix | **chips:** provide ability to edit for all screen readers with a click on already focused chip ([#30983](https://github.com/angular/components/pull/30983)) | +| [8c9cae0a8c](https://github.com/angular/components/commit/8c9cae0a8c61939dcab325be597ee2ee0eec72d4) | fix | **chips:** sync with g3 ([#31393](https://github.com/angular/components/pull/31393)) | +| [be48108bc2](https://github.com/angular/components/commit/be48108bc2b0939af496c8e82482b4b7326ef85d) | fix | **chips:** update tokens to system colors ([#31280](https://github.com/angular/components/pull/31280)) | +| [20ac2b2bd8](https://github.com/angular/components/commit/20ac2b2bd8bf551c6efccd149c21280df18cc31b) | fix | **core:** improve disabled psuedo checkbox contrast ([#31464](https://github.com/angular/components/pull/31464)) | +| [576a008b09](https://github.com/angular/components/commit/576a008b09ce377da892fbd54720947269deb6c6) | fix | **core:** remove unused form field mixins ([#31283](https://github.com/angular/components/pull/31283)) | +| [4d67427cef](https://github.com/angular/components/commit/4d67427cef1442f2c66feb821a2f2cf20a01001b) | fix | **core:** update ripple tokens to system colors ([#31282](https://github.com/angular/components/pull/31282)) | +| [28f2763f96](https://github.com/angular/components/commit/28f2763f96427239514b03a87ad6543c7bf1ce98) | fix | **core:** update tokens to system colors ([#31281](https://github.com/angular/components/pull/31281)) | +| [009424c73e](https://github.com/angular/components/commit/009424c73ec97769edbed440336d0e7386c49d13) | fix | **datepicker:** use system colors ([#31300](https://github.com/angular/components/pull/31300)) | +| [a24081f2bd](https://github.com/angular/components/commit/a24081f2bd66fd686c2751f9a429131ae0ff0acc) | fix | **dialog:** remove internal-only M2 styles ([#31020](https://github.com/angular/components/pull/31020)) | +| [d52ede5627](https://github.com/angular/components/commit/d52ede5627ceeed33122838c89afd38a1bfff4a4) | fix | **expansion:** add token for box shadow ([#31340](https://github.com/angular/components/pull/31340)) | +| [ecc6a09ca5](https://github.com/angular/components/commit/ecc6a09ca5fcbb4bc5e92056cc6102e956a544a8) | fix | **expansion:** align state layer colors ([#31236](https://github.com/angular/components/pull/31236)) | +| [e57aef2912](https://github.com/angular/components/commit/e57aef291240c952aa854ea1fb731b05a8792094) | fix | **expansion:** use correct typography ([#31347](https://github.com/angular/components/pull/31347)) | +| [82ab91e58a](https://github.com/angular/components/commit/82ab91e58ad03207c6dfa25f5995dde1bd5760cf) | fix | **form-field:** remove internal-only M2 styles ([#31021](https://github.com/angular/components/pull/31021)) | +| [6d27e04051](https://github.com/angular/components/commit/6d27e0405150855dc5027ebccf356951af2f7c6f) | fix | **form-field:** use system for neutral colors ([#31272](https://github.com/angular/components/pull/31272)) | +| [918b625438](https://github.com/angular/components/commit/918b6254385ef35c6d95621f6c0c04f294974710) | fix | **list:** update tokens to system colors ([#31284](https://github.com/angular/components/pull/31284)) | +| [a62164db5b](https://github.com/angular/components/commit/a62164db5b60b4e77132b3d5d18de84d3e7e74c1) | fix | **menu:** do not auto-focus when hover opens menu ([#31257](https://github.com/angular/components/pull/31257)) | +| [623030b50d](https://github.com/angular/components/commit/623030b50df52162e4a5c931b6d12226c44a4897) | fix | **menu:** update tokens to system colors ([#31285](https://github.com/angular/components/pull/31285)) | +| [0f26b91425](https://github.com/angular/components/commit/0f26b91425b5b7f34fdabf877e0f84929a6c8032) | fix | **paginator:** update tokens to system colors ([#31286](https://github.com/angular/components/pull/31286)) | +| [9a96db3233](https://github.com/angular/components/commit/9a96db32338dc13407b58ebb29de0a67db34cc52) | fix | **select:** remove internal-only M2 styles ([#31022](https://github.com/angular/components/pull/31022)) | +| [010122ff2a](https://github.com/angular/components/commit/010122ff2adebb7f7b6aff330044591ff771a966) | fix | **select:** use system color for arrow ([#31302](https://github.com/angular/components/pull/31302)) | +| [89d9cd07bc](https://github.com/angular/components/commit/89d9cd07bcf4e4c47d3f0966b22fb634b17c0d77) | fix | **slide-toggle:** use system colors ([#31303](https://github.com/angular/components/pull/31303)) | +| [c10f376a5f](https://github.com/angular/components/commit/c10f376a5fce0e88f41364e1507da13441eff754) | fix | **slide-toggle:** use token system for label text ([#31366](https://github.com/angular/components/pull/31366)) | +| [029e39cced](https://github.com/angular/components/commit/029e39ccedc01e931f4a2dc762b26bc8c87ec857) | fix | **slider:** use system color ([#31305](https://github.com/angular/components/pull/31305)) | +| [7bb0a82a43](https://github.com/angular/components/commit/7bb0a82a434c40d01a0d1aa35bcddaa3f725eccb) | fix | **snack-bar:** use inverse primary for button color ([#31465](https://github.com/angular/components/pull/31465)) | +| [d22191a619](https://github.com/angular/components/commit/d22191a61907bff5d01c1278a38382af5236f7c2) | fix | **sort:** simplify m2 sort color ([#31165](https://github.com/angular/components/pull/31165)) | +| [680dd6fa80](https://github.com/angular/components/commit/680dd6fa8094657e62755cc3b46123b6e539e547) | fix | **stepper:** align state colors ([#31227](https://github.com/angular/components/pull/31227)) | +| [0a47244b6c](https://github.com/angular/components/commit/0a47244b6c7a7fa4c37a5acdbab35c7366094be5) | fix | **stepper:** use system color for error text ([#31333](https://github.com/angular/components/pull/31333)) | +| [ea76df6040](https://github.com/angular/components/commit/ea76df6040bf648679d2e2d91608b29ad10deb55) | fix | **tabs:** fix missing token values ([#31345](https://github.com/angular/components/pull/31345)) | +| [951f37e656](https://github.com/angular/components/commit/951f37e6564c5d0701acdad992b0e0ca23b99882) | fix | **tabs:** update tokens to system colors ([#31287](https://github.com/angular/components/pull/31287)) | +| [f26ff4ece4](https://github.com/angular/components/commit/f26ff4ece4a5092578f1e268a22583d904af725a) | fix | **toolbar:** use correct typography ([#31348](https://github.com/angular/components/pull/31348)) | +| [4b85f9f62b](https://github.com/angular/components/commit/4b85f9f62bb944a2dcf2ad5ab80a47151161c5dc) | fix | **toolbar:** use system surface for neutral background ([#31234](https://github.com/angular/components/pull/31234)) | +| [ae3b0bfcf3](https://github.com/angular/components/commit/ae3b0bfcf3d84b353c08fb9ca9731ea1562a83c5) | fix | **tree:** use correct typography ([#31349](https://github.com/angular/components/pull/31349)) | +### cdk-experimental | Commit | Type | Description | | -- | -- | -- | -| [4052130ee](https://github.com/angular/components/commit/4052130ee0dc627242a7f863f84eced4a0af048f) | fix | fix update schematic ([#31448](https://github.com/angular/components/pull/31448)) | -### cdk-experimental +| [4f9ab216c1](https://github.com/angular/components/commit/4f9ab216c17107044a8f9a1b2f72d4b364e599e5) | feat | **accordion:** add accordion directives, example, and tests ([#31134](https://github.com/angular/components/pull/31134)) | +| [3704b7e32f](https://github.com/angular/components/commit/3704b7e32f1ae8c26307024004ffa93e9b90b82d) | feat | **radio:** add radio demo to dev-app ([#31180](https://github.com/angular/components/pull/31180)) | +| [50c3e0e12d](https://github.com/angular/components/commit/50c3e0e12d33f76e02531ee6300aca086800cedf) | feat | **radio:** create radio group and button directives ([#31050](https://github.com/angular/components/pull/31050)) | +| [cdc0dab261](https://github.com/angular/components/commit/cdc0dab26179c9e0b48b1e519dd3ed9b924dab3c) | feat | **tabs:** add setDefaultState and unit tests, refactor the content children strategy ([#31374](https://github.com/angular/components/pull/31374)) | +| [97d60c5378](https://github.com/angular/components/commit/97d60c5378c54d2e68bd18e794b40bf0dab08da5) | feat | **tree:** add tree directives, example, and tests ([#31350](https://github.com/angular/components/pull/31350)) | +| [ff0f6c61b5](https://github.com/angular/components/commit/ff0f6c61b54c9d5e3ac378b4b9ce338bc638818f) | feat | **ui-patterns:** accordion ([#31034](https://github.com/angular/components/pull/31034)) | +| [c5b2f0ac6d](https://github.com/angular/components/commit/c5b2f0ac6d40cc3dde466a925328c66cd7ff77ed) | feat | **ui-patterns:** create grid navigation behavior ([#31290](https://github.com/angular/components/pull/31290)) | +| [ce145fa9a3](https://github.com/angular/components/commit/ce145fa9a30b1f75f8c20ac7eb837cb007ce2695) | feat | **ui-patterns:** create the grid focus behavior ([#31055](https://github.com/angular/components/pull/31055)) | +| [9f249d0a25](https://github.com/angular/components/commit/9f249d0a25a665b705f5e1e2d9de363b9c2492dc) | feat | **ui-patterns:** radio button and group ([#31016](https://github.com/angular/components/pull/31016)) | +| [70841dbb5b](https://github.com/angular/components/commit/70841dbb5bc4d356d017f8dd944a89f52a8bbcc9) | feat | **ui-patterns:** tree ([#31308](https://github.com/angular/components/pull/31308)) | +| [06d7384a23](https://github.com/angular/components/commit/06d7384a23d0ded675f3df92be0487279de097ff) | fix | **accordion:** fix disabled trigger button can't be focused when skipDisabled=false ([#31379](https://github.com/angular/components/pull/31379)) | +| [9a856ad559](https://github.com/angular/components/commit/9a856ad5592d2447d82b4f774acc75216488f94c) | fix | **tabs:** fix tabs example styles ([#31382](https://github.com/angular/components/pull/31382)) | +| [8a091a7ea8](https://github.com/angular/components/commit/8a091a7ea8bf9b0c51d1e25d8ac2df49b0feb942) | fix | **tabs:** set tabpanel tabindex to -1 if hidden ([#31401](https://github.com/angular/components/pull/31401)) | +| [ea700e6d81](https://github.com/angular/components/commit/ea700e6d817699b99af15276affac3a4013e61fb) | fix | **ui-patterns:** add guardrails to selectOne for edge cases ([#31402](https://github.com/angular/components/pull/31402)) | +### multiple | Commit | Type | Description | | -- | -- | -- | -| [06d7384a2](https://github.com/angular/components/commit/06d7384a23d0ded675f3df92be0487279de097ff) | fix | **accordion:** fix disabled trigger button can't be focused when skipDisabled=false ([#31379](https://github.com/angular/components/pull/31379)) | -| [8a091a7ea](https://github.com/angular/components/commit/8a091a7ea8bf9b0c51d1e25d8ac2df49b0feb942) | fix | **tabs:** set tabpanel tabindex to -1 if hidden ([#31401](https://github.com/angular/components/pull/31401)) | +| [dc3ae8d945](https://github.com/angular/components/commit/dc3ae8d945450fe603de514c31b5cca5e4d4d9c9) | fix | update goldens ([#31123](https://github.com/angular/components/pull/31123)) | +| [e462301f8f](https://github.com/angular/components/commit/e462301f8f6c53f9b54deff0f4684e21ef4ec183) | fix | use inline m2 token definitions ([#31359](https://github.com/angular/components/pull/31359)) | +| [5546d10992](https://github.com/angular/components/commit/5546d10992cd0a822854ae29a3d80029217d3680) | fix | use system on-surface ([#31225](https://github.com/angular/components/pull/31225)) | @@ -40,48 +107,6 @@ - -# 20.1.0-next.2 "strontium-snack" (2025-06-25) -### cdk -| Commit | Type | Description | -| -- | -- | -- | -| [5564d7d01](https://github.com/angular/components/commit/5564d7d0163d3ab56429b3059c4c572f74214ab2) | feat | **menu:** add setActiveMenuItem to cdkMenu ([#31371](https://github.com/angular/components/pull/31371)) | -| [423029287](https://github.com/angular/components/commit/423029287ca82d9ac834f309258056dd5815b6bb) | fix | **menu:** close sibling triggers when opening a menu ([#30894](https://github.com/angular/components/pull/30894)) | -### material -| Commit | Type | Description | -| -- | -- | -- | -| [9e942b4ba](https://github.com/angular/components/commit/9e942b4ba2d31e7af70b3468b2c9b42364f47998) | feat | **menu:** add support for context menu | -| [5f4fa6218](https://github.com/angular/components/commit/5f4fa621894c7eff6a4d78b6ed9ea2c9ce0f7920) | fix | **button:** harness not picking up buttons with dynamic appearance ([#31327](https://github.com/angular/components/pull/31327)) | -| [3bde4f78f](https://github.com/angular/components/commit/3bde4f78f49048b3231a89bacdeda232ce1fec76) | fix | **button:** update button golden ([#31346](https://github.com/angular/components/pull/31346)) | -| [8c9cae0a8](https://github.com/angular/components/commit/8c9cae0a8c61939dcab325be597ee2ee0eec72d4) | fix | **chips:** sync with g3 ([#31393](https://github.com/angular/components/pull/31393)) | -| [d52ede562](https://github.com/angular/components/commit/d52ede5627ceeed33122838c89afd38a1bfff4a4) | fix | **expansion:** add token for box shadow ([#31340](https://github.com/angular/components/pull/31340)) | -| [e57aef291](https://github.com/angular/components/commit/e57aef291240c952aa854ea1fb731b05a8792094) | fix | **expansion:** use correct typography ([#31347](https://github.com/angular/components/pull/31347)) | -| [0bdf51275](https://github.com/angular/components/commit/0bdf5127542572e41160a8d8e3e1784000ea5e9a) | fix | **input:** remove native clear button ([#31394](https://github.com/angular/components/pull/31394)) | -| [663d8160e](https://github.com/angular/components/commit/663d8160eea50cf7c90207cc2611bbc2bac5813e) | fix | **input:** revert wheel workaround ([#31391](https://github.com/angular/components/pull/31391)) | -| [89d9cd07b](https://github.com/angular/components/commit/89d9cd07bcf4e4c47d3f0966b22fb634b17c0d77) | fix | **slide-toggle:** use system colors ([#31303](https://github.com/angular/components/pull/31303)) | -| [c10f376a5](https://github.com/angular/components/commit/c10f376a5fce0e88f41364e1507da13441eff754) | fix | **slide-toggle:** use token system for label text ([#31366](https://github.com/angular/components/pull/31366)) | -| [0a47244b6](https://github.com/angular/components/commit/0a47244b6c7a7fa4c37a5acdbab35c7366094be5) | fix | **stepper:** use system color for error text ([#31333](https://github.com/angular/components/pull/31333)) | -| [ea76df604](https://github.com/angular/components/commit/ea76df6040bf648679d2e2d91608b29ad10deb55) | fix | **tabs:** fix missing token values ([#31345](https://github.com/angular/components/pull/31345)) | -| [f26ff4ece](https://github.com/angular/components/commit/f26ff4ece4a5092578f1e268a22583d904af725a) | fix | **toolbar:** use correct typography ([#31348](https://github.com/angular/components/pull/31348)) | -| [ae3b0bfcf](https://github.com/angular/components/commit/ae3b0bfcf3d84b353c08fb9ca9731ea1562a83c5) | fix | **tree:** use correct typography ([#31349](https://github.com/angular/components/pull/31349)) | -### youtube-player -| Commit | Type | Description | -| -- | -- | -- | -| [2c87ec31b](https://github.com/angular/components/commit/2c87ec31b5a3c6ca6fdfc19d99166aa20865f6e0) | fix | invalid URL when playlist is passed in without videoId ([#31403](https://github.com/angular/components/pull/31403)) | -### cdk-experimental -| Commit | Type | Description | -| -- | -- | -- | -| [cdc0dab26](https://github.com/angular/components/commit/cdc0dab26179c9e0b48b1e519dd3ed9b924dab3c) | feat | **tabs:** add setDefaultState and unit tests, refactor the content children strategy ([#31374](https://github.com/angular/components/pull/31374)) | -| [97d60c537](https://github.com/angular/components/commit/97d60c5378c54d2e68bd18e794b40bf0dab08da5) | feat | **tree:** add tree directives, example, and tests ([#31350](https://github.com/angular/components/pull/31350)) | -| [9a856ad55](https://github.com/angular/components/commit/9a856ad5592d2447d82b4f774acc75216488f94c) | fix | **tabs:** fix tabs example styles ([#31382](https://github.com/angular/components/pull/31382)) | -| [ea700e6d8](https://github.com/angular/components/commit/ea700e6d817699b99af15276affac3a4013e61fb) | fix | **ui-patterns:** add guardrails to selectOne for edge cases ([#31402](https://github.com/angular/components/pull/31402)) | -### multiple -| Commit | Type | Description | -| -- | -- | -- | -| [e462301f8](https://github.com/angular/components/commit/e462301f8f6c53f9b54deff0f4684e21ef4ec183) | fix | use inline m2 token definitions ([#31359](https://github.com/angular/components/pull/31359)) | - - - # 20.0.4 "strontium-shack" (2025-06-25) ### cdk @@ -111,36 +136,6 @@ - -# 20.1.0-next.1 "plastic-straw" (2025-06-11) -### material -| Commit | Type | Description | -| -- | -- | -- | -| [8523397fd2](https://github.com/angular/components/commit/8523397fd29a1cb5c08c88420367d0def020bf12) | fix | **button:** prevents mat-icon being cut off by text-spacing ([#30891](https://github.com/angular/components/pull/30891)) | -| [0d47628d2e](https://github.com/angular/components/commit/0d47628d2eb1a5d72198769fbc7cfb978c8074d6) | fix | **button:** use system colors for state layers and text ([#31278](https://github.com/angular/components/pull/31278)) | -| [458a17ba46](https://github.com/angular/components/commit/458a17ba4680cc4ed90965f2a71f655699f2bc11) | fix | **checkbox:** update tokens to system colors ([#31279](https://github.com/angular/components/pull/31279)) | -| [be48108bc2](https://github.com/angular/components/commit/be48108bc2b0939af496c8e82482b4b7326ef85d) | fix | **chips:** update tokens to system colors ([#31280](https://github.com/angular/components/pull/31280)) | -| [21df04e787](https://github.com/angular/components/commit/21df04e78743ac961bdb8d8e309417a80842238b) | fix | **core:** output tokens from theme under same selector ([#31295](https://github.com/angular/components/pull/31295)) | -| [576a008b09](https://github.com/angular/components/commit/576a008b09ce377da892fbd54720947269deb6c6) | fix | **core:** remove unused form field mixins ([#31283](https://github.com/angular/components/pull/31283)) | -| [4d67427cef](https://github.com/angular/components/commit/4d67427cef1442f2c66feb821a2f2cf20a01001b) | fix | **core:** update ripple tokens to system colors ([#31282](https://github.com/angular/components/pull/31282)) | -| [28f2763f96](https://github.com/angular/components/commit/28f2763f96427239514b03a87ad6543c7bf1ce98) | fix | **core:** update tokens to system colors ([#31281](https://github.com/angular/components/pull/31281)) | -| [009424c73e](https://github.com/angular/components/commit/009424c73ec97769edbed440336d0e7386c49d13) | fix | **datepicker:** use system colors ([#31300](https://github.com/angular/components/pull/31300)) | -| [918b625438](https://github.com/angular/components/commit/918b6254385ef35c6d95621f6c0c04f294974710) | fix | **list:** update tokens to system colors ([#31284](https://github.com/angular/components/pull/31284)) | -| [623030b50d](https://github.com/angular/components/commit/623030b50df52162e4a5c931b6d12226c44a4897) | fix | **menu:** update tokens to system colors ([#31285](https://github.com/angular/components/pull/31285)) | -| [0f26b91425](https://github.com/angular/components/commit/0f26b91425b5b7f34fdabf877e0f84929a6c8032) | fix | **paginator:** update tokens to system colors ([#31286](https://github.com/angular/components/pull/31286)) | -| [3f7d2778fb](https://github.com/angular/components/commit/3f7d2778fb0cae09a49802102ad6c994984ddb93) | fix | **radio:** color tokens excluded when passing in variant ([#31321](https://github.com/angular/components/pull/31321)) | -| [010122ff2a](https://github.com/angular/components/commit/010122ff2adebb7f7b6aff330044591ff771a966) | fix | **select:** use system color for arrow ([#31302](https://github.com/angular/components/pull/31302)) | -| [9ce023d977](https://github.com/angular/components/commit/9ce023d9771b07229df59c6aa360ae0462980b60) | fix | **slider:** ensure disabled slider thumb input has 'auto' c… ([#31311](https://github.com/angular/components/pull/31311)) | -| [029e39cced](https://github.com/angular/components/commit/029e39ccedc01e931f4a2dc762b26bc8c87ec857) | fix | **slider:** use system color ([#31305](https://github.com/angular/components/pull/31305)) | -| [951f37e656](https://github.com/angular/components/commit/951f37e6564c5d0701acdad992b0e0ca23b99882) | fix | **tabs:** update tokens to system colors ([#31287](https://github.com/angular/components/pull/31287)) | -### cdk-experimental -| Commit | Type | Description | -| -- | -- | -- | -| [c5b2f0ac6d](https://github.com/angular/components/commit/c5b2f0ac6d40cc3dde466a925328c66cd7ff77ed) | feat | **ui-patterns:** create grid navigation behavior ([#31290](https://github.com/angular/components/pull/31290)) | -| [70841dbb5b](https://github.com/angular/components/commit/70841dbb5bc4d356d017f8dd944a89f52a8bbcc9) | feat | **ui-patterns:** tree ([#31308](https://github.com/angular/components/pull/31308)) | - - - # 20.0.3 "plastic-tube" (2025-06-11) ### material @@ -152,55 +147,6 @@ - -# 20.1.0-next.0 "amicite-amp" (2025-06-04) -### cdk -| Commit | Type | Description | -| -- | -- | -- | -| [f446d7c41](https://github.com/angular/components/commit/f446d7c4126fc253fa9e51664360bcd02245f005) | feat | **drag-drop:** add opt-in indicator of pick-up position ([#31288](https://github.com/angular/components/pull/31288)) | -| [cfa97bb78](https://github.com/angular/components/commit/cfa97bb785f8faab1e209899695c1e187020b391) | fix | **dialog:** avoid setting aria-hidden before focus has moved ([#31030](https://github.com/angular/components/pull/31030)) | -### material -| Commit | Type | Description | -| -- | -- | -- | -| [243845460](https://github.com/angular/components/commit/243845460d3842beee3f58b1bdb0679bd16e81f3) | feat | **chips:** add (optional) edit icon to input chips ([#31041](https://github.com/angular/components/pull/31041)) | -| [4de7c0fb2](https://github.com/angular/components/commit/4de7c0fb2d033bd81074764a52cc46edd02e6774) | feat | **testing:** Extend Angular harness testing functionality ([#30960](https://github.com/angular/components/pull/30960)) | -| [512433b6d](https://github.com/angular/components/commit/512433b6d1c51d567e120b539da0053bc189fbaf) | fix | **badge:** remove badge opacity color mix ([#31213](https://github.com/angular/components/pull/31213)) | -| [92a8253e2](https://github.com/angular/components/commit/92a8253e28a676c41c5ca87382aad6006a48d212) | fix | **badge:** use system disabled states ([#31266](https://github.com/angular/components/pull/31266)) | -| [a7150d42c](https://github.com/angular/components/commit/a7150d42cf0d423fe89679e2366a32830bf4aaf3) | fix | **button-toggle:** simplify divider color ([#31214](https://github.com/angular/components/pull/31214)) | -| [1f8b1302f](https://github.com/angular/components/commit/1f8b1302f26d66e46896f433697822ebc410a98f) | fix | **button-toggle:** use system colors ([#31231](https://github.com/angular/components/pull/31231)) | -| [5ee7d79e4](https://github.com/angular/components/commit/5ee7d79e4cfc1a466a3b1630f0f95c1f545966d3) | fix | **button:** FAB emitting invalid elevation tokens ([#31028](https://github.com/angular/components/pull/31028)) | -| [afe36e4d4](https://github.com/angular/components/commit/afe36e4d425ff365fc2aaf1f57368ffdefe51ef8) | fix | **button:** remove internal-only M2 styles ([#31017](https://github.com/angular/components/pull/31017)) | -| [589ea5905](https://github.com/angular/components/commit/589ea5905eef43a671f519a13d566a151e5578fa) | fix | **button:** remove internal-only M2 styles ([#31018](https://github.com/angular/components/pull/31018)) | -| [203c1737e](https://github.com/angular/components/commit/203c1737eb6853c2e1b92afc8ed5f2756d5484de) | fix | **card:** subtitle text token should be on-surface-variant ([#31261](https://github.com/angular/components/pull/31261)) | -| [55b7ba081](https://github.com/angular/components/commit/55b7ba0814863765f42e079dd72ba0313087fc3e) | fix | **card:** use system outline ([#31218](https://github.com/angular/components/pull/31218)) | -| [eb9abc366](https://github.com/angular/components/commit/eb9abc366fcda8057d5b958231f518435f965e1e) | fix | **checkbox:** remove internal-only M2 styles ([#31019](https://github.com/angular/components/pull/31019)) | -| [68d7ea035](https://github.com/angular/components/commit/68d7ea0351b489bfb9419e1fe28e560ed7280d3f) | fix | **chips:** provide ability to edit for all screen readers with a click on already focused chip ([#30983](https://github.com/angular/components/pull/30983)) | -| [a24081f2b](https://github.com/angular/components/commit/a24081f2bd66fd686c2751f9a429131ae0ff0acc) | fix | **dialog:** remove internal-only M2 styles ([#31020](https://github.com/angular/components/pull/31020)) | -| [ecc6a09ca](https://github.com/angular/components/commit/ecc6a09ca5fcbb4bc5e92056cc6102e956a544a8) | fix | **expansion:** align state layer colors ([#31236](https://github.com/angular/components/pull/31236)) | -| [82ab91e58](https://github.com/angular/components/commit/82ab91e58ad03207c6dfa25f5995dde1bd5760cf) | fix | **form-field:** remove internal-only M2 styles ([#31021](https://github.com/angular/components/pull/31021)) | -| [6d27e0405](https://github.com/angular/components/commit/6d27e0405150855dc5027ebccf356951af2f7c6f) | fix | **form-field:** use system for neutral colors ([#31272](https://github.com/angular/components/pull/31272)) | -| [a62164db5](https://github.com/angular/components/commit/a62164db5b60b4e77132b3d5d18de84d3e7e74c1) | fix | **menu:** do not auto-focus when hover opens menu ([#31257](https://github.com/angular/components/pull/31257)) | -| [9a96db323](https://github.com/angular/components/commit/9a96db32338dc13407b58ebb29de0a67db34cc52) | fix | **select:** remove internal-only M2 styles ([#31022](https://github.com/angular/components/pull/31022)) | -| [d22191a61](https://github.com/angular/components/commit/d22191a61907bff5d01c1278a38382af5236f7c2) | fix | **sort:** simplify m2 sort color ([#31165](https://github.com/angular/components/pull/31165)) | -| [680dd6fa8](https://github.com/angular/components/commit/680dd6fa8094657e62755cc3b46123b6e539e547) | fix | **stepper:** align state colors ([#31227](https://github.com/angular/components/pull/31227)) | -| [4b85f9f62](https://github.com/angular/components/commit/4b85f9f62bb944a2dcf2ad5ab80a47151161c5dc) | fix | **toolbar:** use system surface for neutral background ([#31234](https://github.com/angular/components/pull/31234)) | -### cdk-experimental -| Commit | Type | Description | -| -- | -- | -- | -| [4f9ab216c](https://github.com/angular/components/commit/4f9ab216c17107044a8f9a1b2f72d4b364e599e5) | feat | **accordion:** add accordion directives, example, and tests ([#31134](https://github.com/angular/components/pull/31134)) | -| [3704b7e32](https://github.com/angular/components/commit/3704b7e32f1ae8c26307024004ffa93e9b90b82d) | feat | **radio:** add radio demo to dev-app ([#31180](https://github.com/angular/components/pull/31180)) | -| [50c3e0e12](https://github.com/angular/components/commit/50c3e0e12d33f76e02531ee6300aca086800cedf) | feat | **radio:** create radio group and button directives ([#31050](https://github.com/angular/components/pull/31050)) | -| [ff0f6c61b](https://github.com/angular/components/commit/ff0f6c61b54c9d5e3ac378b4b9ce338bc638818f) | feat | **ui-patterns:** accordion ([#31034](https://github.com/angular/components/pull/31034)) | -| [ce145fa9a](https://github.com/angular/components/commit/ce145fa9a30b1f75f8c20ac7eb837cb007ce2695) | feat | **ui-patterns:** create the grid focus behavior ([#31055](https://github.com/angular/components/pull/31055)) | -| [9f249d0a2](https://github.com/angular/components/commit/9f249d0a25a665b705f5e1e2d9de363b9c2492dc) | feat | **ui-patterns:** radio button and group ([#31016](https://github.com/angular/components/pull/31016)) | -### multiple -| Commit | Type | Description | -| -- | -- | -- | -| [dc3ae8d94](https://github.com/angular/components/commit/dc3ae8d945450fe603de514c31b5cca5e4d4d9c9) | fix | update goldens ([#31123](https://github.com/angular/components/pull/31123)) | -| [5546d1099](https://github.com/angular/components/commit/5546d10992cd0a822854ae29a3d80029217d3680) | fix | use system on-surface ([#31225](https://github.com/angular/components/pull/31225)) | - - - # 20.0.2 "amesite-armoire" (2025-06-04) ### material @@ -6264,4 +6210,4 @@ _Breaking changes:_ # Changes Prior to 12.0.0 -To view changes that occurred prior to 12.0.0, see [CHANGELOG_ARCHIVE.md](https://github.com/angular/components/blob/main/CHANGELOG_ARCHIVE.md). \ No newline at end of file +To view changes that occurred prior to 12.0.0, see [CHANGELOG_ARCHIVE.md](https://github.com/angular/components/blob/main/CHANGELOG_ARCHIVE.md). diff --git a/package.json b/package.json index a19edd38492c..06d796c25849 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "ci-docs-monitor-test": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/docs-deploy/monitoring/ci-test.mts", "prepare": "husky" }, - "version": "20.1.0-rc.0", + "version": "20.1.0", "dependencies": { "@angular-devkit/core": "catalog:", "@angular-devkit/schematics": "catalog:", From 4515f24d5b74a3719f8ed910f7ddc936405cf04e Mon Sep 17 00:00:00 2001 From: Miles Malerba Date: Wed, 9 Jul 2025 15:38:41 -0400 Subject: [PATCH 07/77] ci: add gemini code assist config (#31512) Configures gemini to not interact with new pull requests, only review on demand (cherry picked from commit a9f91e6a90044485291fb3a64f234ada776439a9) --- .gemini/config.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .gemini/config.yaml diff --git a/.gemini/config.yaml b/.gemini/config.yaml new file mode 100644 index 000000000000..28eab0db4d88 --- /dev/null +++ b/.gemini/config.yaml @@ -0,0 +1,10 @@ +have_fun: false +code_review: + disable: false + comment_severity_threshold: MEDIUM + max_review_comments: -1 + pull_request_opened: + help: false + summary: false + code_review: false +ignore_patterns: [] From cb350479e53b5b873c8b813129ea5cb2b6d623ed Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 10 Jul 2025 13:08:49 -0600 Subject: [PATCH 08/77] build: update dependency parse5 to v8 (#31516) See associated pull request for more information. (cherry picked from commit 42f2b4cf07dc5ea6d34c956f70e5335c527cd8bb) --- package.json | 2 +- pnpm-lock.yaml | 15 +++++++++++---- src/cdk/package.json | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 06d796c25849..b62bcbcefb4c 100644 --- a/package.json +++ b/package.json @@ -124,7 +124,7 @@ "magic-string": "0.30.17", "marked": "^16.0.0", "minimatch": "^10.0.3", - "parse5": "^7.1.2", + "parse5": "^8.0.0", "postcss": "^8.4.17", "postcss-scss": "^4.0.4", "prettier": "^3.5.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 03b19f59db7d..54808d6fbe62 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -276,8 +276,8 @@ importers: specifier: ^10.0.3 version: 10.0.3 parse5: - specifier: ^7.1.2 - version: 7.2.1 + specifier: ^8.0.0 + version: 8.0.0 postcss: specifier: ^8.4.17 version: 8.5.3 @@ -532,8 +532,8 @@ importers: src/cdk: dependencies: parse5: - specifier: ^7.1.2 - version: 7.2.1 + specifier: ^8.0.0 + version: 8.0.0 tslib: specifier: ^2.3.0 version: 2.8.1 @@ -6760,6 +6760,9 @@ packages: parse5@7.2.1: resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + parse5@8.0.0: + resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -15862,6 +15865,10 @@ snapshots: dependencies: entities: 4.5.0 + parse5@8.0.0: + dependencies: + entities: 6.0.0 + parseurl@1.3.3: {} pascal-case@2.0.1: diff --git a/src/cdk/package.json b/src/cdk/package.json index 0cb0dc83ae09..5923d56a28b0 100644 --- a/src/cdk/package.json +++ b/src/cdk/package.json @@ -50,7 +50,7 @@ "rxjs": "^6.5.3 || ^7.4.0" }, "dependencies": { - "parse5": "^7.1.2", + "parse5": "^8.0.0", "tslib": "^2.3.0" }, "schematics": "./schematics/collection.json", From 857295377a0ffa1a63ea050908ddd58220da9e33 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 10 Jul 2025 21:13:05 +0200 Subject: [PATCH 09/77] docs: remove formatting from theming guide headers (#31491) The headers in the theming guide were using bold or italic formatting which overrides the docs site styling and makes them look inconsistent. These changes remove the formatting. (cherry picked from commit 9fb7b1b7dfc386f6eb23031e106989b0572e3b9e) --- guides/theming.md | 72 +++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/guides/theming.md b/guides/theming.md index 22b154549d8d..59d25f9e7bd0 100644 --- a/guides/theming.md +++ b/guides/theming.md @@ -5,12 +5,12 @@ defining a custom theme. Angular Material’s theming system is inspired by Google’s [Material Design](https://m3.material.io/styles). This guide describes how to set up theming for your application using -Sass APIs introduced in Angular Material v19. +Sass APIs introduced in Angular Material v19. If your application depends on a version before v19, or if your application's -theme is applied using a theme config created with `mat.define-theme`, +theme is applied using a theme config created with `mat.define-theme`, `mat.define-light-theme`, or `mat.define-dark-theme`, -then you can refer to the theming guides at +then you can refer to the theming guides at [v18.material.angular.dev/guides](https://v18.material.angular.dev/guides). ## Getting Started @@ -62,7 +62,7 @@ The `mat.theme` mixin will only declare CSS variables for the categories included in the input. For example, if `typography` is not defined, then typography CSS variables will not be included in the output. -### **Color** +### Color The `theme`‘s color determines the component color styles, such as the fill color of checkboxes or ripple color of buttons. It depends on color palettes of @@ -74,14 +74,14 @@ palettes. You can set the color in one of two ways: as a single color palette, or as a color map. -#### *Single Color Palette* +#### Single Color Palette If you provide a single color palette, Angular Material uses its values for the theme’s primary, secondary, and tertiary colors. The CSS color values will be defined using `light-dark` CSS color function. Your application styles should define an explicit value declaration for the `color-scheme` CSS property. -#### *Color Map* +#### Color Map If you provide a color map, then the tertiary color palette can be configured separately from the primary palette. The tertiary palette can be used to add a @@ -121,7 +121,7 @@ html { } ``` -### **Typography** +### Typography The `mat.theme` ‘s typography determines the text styles used in components, such as the font for dialog titles or menu list items. @@ -129,13 +129,13 @@ such as the font for dialog titles or menu list items. You can set the typography in one of two ways: as a single font family value, or as a typography map. -#### *Single Font Family Value* +#### Single Font Family Value If you provide a font family, Angular Material uses it for all the text in its components. The font weights used in components are set to 700 for bold text, 500 for medium text, and 400 for regular text. -#### *Typography Map* +#### Typography Map If you provide a typography map, then distinct font families are set for plain and brand text. The plain font family is typically used for most of the @@ -168,7 +168,7 @@ html { } ``` -### **Density** +### Density The `mat.theme` ‘s density value determines the spacing within components, such as how much padding is used around a button’s text or the height of form fields. @@ -202,31 +202,31 @@ pop-up contexts, such as the date picker. The Material Design density guidance explicitly discourages changes to density for such interactions because they don't compete for space in the application's layout. -## **Color Palettes** +## Color Palettes A color palette is a set of similar colors with different hues ranging from light to dark. The Angular Material theme uses color palettes to create a color scheme to communicate an application’s hierarchy, state, and brand. -### **Prebuilt Color Palettes** +### Prebuilt Color Palettes Angular Material provides twelve prebuilt color palettes that can be used for your application’s theme: -* `$red-palette` -* `$green-palette` -* `$blue-palette` -* `$yellow-palette` -* `$cyan-palette` -* `$magenta-palette` -* `$orange-palette` -* `$chartreuse-palette` -* `$spring-green-palette` -* `$azure-palette` -* `$violet-palette` -* `$rose-palette` - -### **Custom Color Palettes** +* `$red-palette` +* `$green-palette` +* `$blue-palette` +* `$yellow-palette` +* `$cyan-palette` +* `$magenta-palette` +* `$orange-palette` +* `$chartreuse-palette` +* `$spring-green-palette` +* `$azure-palette` +* `$violet-palette` +* `$rose-palette` + +### Custom Color Palettes The Angular Material [palette generation schematic](https://github.com/angular/components/blob/main/src/material/schematics/ng-generate/theme-color/README.md) @@ -238,7 +238,7 @@ neutral palettes: ng generate @angular/material:theme-color ``` -## **Loading Fonts** +## Loading Fonts You can use Google Fonts as one option to load fonts in your application. For example, the following code in an application’s `` loads the font family @@ -256,7 +256,7 @@ default, projects created with the Angular CLI are [configured](https://angular.dev/reference/configs/workspace-config#fonts-optimization-options) to inline assets from Google Fonts to reduce render-blocking requests. -## **Supporting Light and Dark Mode** +## Supporting Light and Dark Mode By default, the `mat.theme` mixin defines colors using the CSS color function `light-dark` to make it easy for your application to switch between light and @@ -310,12 +310,12 @@ define your own queries to apply the styles that make sense for your users. This may mean relying on `color-scheme: light dark`, defining custom media queries, or reading a saved user preference to apply styles. -## **Multiple Themes** +## Multiple Themes You can call the `mat.theme` mixin more than once to apply multiple different color schemes in your application. -### **Context-specific Themes** +### Context-specific Themes The following example theme file customizes the theme for components in different contexts. In this case, a cyan-based palette is applied to a container @@ -340,7 +340,7 @@ html { } ``` -## **Using Theme Styles** +## Using Theme Styles An application’s custom components can use the CSS variables defined by `mat.theme` to apply the theme’s colors and typography. @@ -369,7 +369,7 @@ See the [Theme Variables](https://material.angular.dev/guide/system-variables) g comprehensive list of these variables, examples of where they are used, and how components can depend on them. -## **Customizing Tokens** +## Customizing Tokens Angular Material components also allow for narrowly targeted customization of specific tokens through the `overrides` mixins. This enables fine-grained @@ -380,7 +380,7 @@ The `overrides` API validates that the customized tokens are correctly spelled and can be used to ensure backwards compatibility if tokens are added, moved, or renamed in future versions. -### **System Tokens** +### System Tokens System-level tokens can be changed to different values through the `mat.theme-overrides` mixin, which will redefine CSS variables that are used in @@ -426,7 +426,7 @@ html { } ``` -### **Component Tokens** +### Component Tokens Each Angular Material component defines an `overrides` mixin that can be used to customize tokenized styles for their color, typography, and density. @@ -449,7 +449,7 @@ html { } ``` -### **Direct Style Overrides** +### Direct Style Overrides Angular Material supports customizing color, typography, and density as outlined in this document. Angular strongly discourages, and does not directly support, @@ -458,7 +458,7 @@ structure and CSS classes are considered private implementation details that may change at any time. CSS variables used by the Angular Material components should be defined through the `overrides` API instead of defined explicitly. -## **Shadow DOM** +## Shadow DOM Angular Material assumes that, by default, all theme styles are loaded as global CSS. If you want to use From 6a0578f82dbfa07a7cb9309da13475d8b04bbaad Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 10 Jul 2025 21:58:04 +0200 Subject: [PATCH 10/77] fix(material/timepicker): allow timepicker to opt out of opening on click (#31492) Currently any click on an enabled timepicker input will open the associated timepicker. In some cases that might not be desirable so these changes add an input that allows users to opt out of it. Fixes #31398. (cherry picked from commit 1c4d95b9d2ee84316fb2fced018f9a5233e15c91) --- goldens/material/timepicker/index.api.md | 3 ++- src/material/timepicker/timepicker-input.ts | 12 +++++++++++- src/material/timepicker/timepicker.spec.ts | 11 +++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/goldens/material/timepicker/index.api.md b/goldens/material/timepicker/index.api.md index f563743b636f..e63bc279182b 100644 --- a/goldens/material/timepicker/index.api.md +++ b/goldens/material/timepicker/index.api.md @@ -94,6 +94,7 @@ export class MatTimepickerInput implements ControlValueAccessor, Validator, O readonly min: InputSignalWithTransform; // (undocumented) ngOnDestroy(): void; + readonly openOnClick: InputSignalWithTransform; registerOnChange(fn: (value: any) => void): void; registerOnTouched(fn: () => void): void; registerOnValidatorChange(fn: () => void): void; @@ -103,7 +104,7 @@ export class MatTimepickerInput implements ControlValueAccessor, Validator, O readonly value: ModelSignal; writeValue(value: any): void; // (undocumented) - static ɵdir: i0.ɵɵDirectiveDeclaration, "input[matTimepicker]", ["matTimepickerInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "timepicker": { "alias": "matTimepicker"; "required": true; "isSignal": true; }; "min": { "alias": "matTimepickerMin"; "required": false; "isSignal": true; }; "max": { "alias": "matTimepickerMax"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>; + static ɵdir: i0.ɵɵDirectiveDeclaration, "input[matTimepicker]", ["matTimepickerInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "timepicker": { "alias": "matTimepicker"; "required": true; "isSignal": true; }; "min": { "alias": "matTimepickerMin"; "required": false; "isSignal": true; }; "max": { "alias": "matTimepickerMax"; "required": false; "isSignal": true; }; "openOnClick": { "alias": "matTimepickerOpenOnClick"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>; // (undocumented) static ɵfac: i0.ɵɵFactoryDeclaration, never>; } diff --git a/src/material/timepicker/timepicker-input.ts b/src/material/timepicker/timepicker-input.ts index 3912a236e2d8..93e695139fde 100644 --- a/src/material/timepicker/timepicker-input.ts +++ b/src/material/timepicker/timepicker-input.ts @@ -140,6 +140,16 @@ export class MatTimepickerInput implements ControlValueAccessor, Validator, O transform: (value: unknown) => this._transformDateInput(value), }); + /** + * Whether to open the timepicker overlay when clicking on the input. Enabled by default. + * Note that when disabling this option, you'll have to provide your own logic for opening + * the overlay. + */ + readonly openOnClick: InputSignalWithTransform = input(true, { + alias: 'matTimepickerOpenOnClick', + transform: booleanAttribute, + }); + /** Whether the input is disabled. */ readonly disabled: Signal = computed( () => this.disabledInput() || this._accessorDisabled(), @@ -254,7 +264,7 @@ export class MatTimepickerInput implements ControlValueAccessor, Validator, O /** Handles clicks on the input or the containing form field. */ private _handleClick = (): void => { - if (!this.disabled()) { + if (!this.disabled() && this.openOnClick()) { this.timepicker().open(); } }; diff --git a/src/material/timepicker/timepicker.spec.ts b/src/material/timepicker/timepicker.spec.ts index baf1d2ee7df1..3fa080efb157 100644 --- a/src/material/timepicker/timepicker.spec.ts +++ b/src/material/timepicker/timepicker.spec.ts @@ -480,6 +480,15 @@ describe('MatTimepicker', () => { fixture.detectChanges(); expect(getPanel()).toBeTruthy(); })); + + it('should be able to opt out of opening on click', () => { + const fixture = TestBed.createComponent(StandaloneTimepicker); + fixture.componentInstance.openOnClick.set(false); + fixture.detectChanges(); + getInput(fixture).click(); + fixture.detectChanges(); + expect(getPanel()).toBeFalsy(); + }); }); // Note: these tests intentionally don't cover the full option generation logic @@ -1313,6 +1322,7 @@ describe('MatTimepicker', () => { [disabled]="disabled()" [matTimepickerMin]="min()" [matTimepickerMax]="max()" + [matTimepickerOpenOnClick]="openOnClick()" [value]="value()"/> (false); readonly toggleTabIndex = signal(0); readonly customOptions = signal[] | null>(null); + readonly openOnClick = signal(true); readonly openedSpy = jasmine.createSpy('opened'); readonly closedSpy = jasmine.createSpy('closed'); readonly selectedSpy = jasmine.createSpy('selected'); From d4328183de4424f83e9d0ca5d0c1c00fd733e85f Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Fri, 11 Jul 2025 17:03:03 +0200 Subject: [PATCH 11/77] docs: specify language in code snippets (#31523) Some snippets were being interpreted as HTML, because we hadn't set a language. Fixes #31520. (cherry picked from commit 3202089f196dbea6e734ec95019c7cb2fde57246) --- guides/schematics.md | 18 +++++++++--------- guides/theming.md | 28 ++++++++++++++-------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/guides/schematics.md b/guides/schematics.md index c8c351074768..0c080d051b6a 100644 --- a/guides/schematics.md +++ b/guides/schematics.md @@ -12,13 +12,13 @@ Using the command below will install Angular Material, the [Component Dev Kit](h and [Angular Animations](https://angular.dev/guide/animations) in your project. Then it will run the installation schematic. -``` +```bash ng add @angular/material ``` In case you just want to install the `@angular/cdk`, there are also schematics for the [Component Dev Kit](https://material.angular.dev/cdk) -``` +```bash ng add @angular/cdk ``` @@ -65,7 +65,7 @@ started with a Material Design form group consisting of: * Material Design radio controls * Material Design buttons -``` +```bash ng generate @angular/material:address-form ``` @@ -75,7 +75,7 @@ The `navigation` schematic will create a new component that includes a toolbar with the app name, and a responsive side nav based on Material breakpoints. -``` +```bash ng generate @angular/material:navigation ``` @@ -84,7 +84,7 @@ ng generate @angular/material:navigation The table schematic will create a component that renders an Angular Material `` which has been pre-configured with a datasource for sorting and pagination. -``` +```bash ng generate @angular/material:table ``` @@ -93,7 +93,7 @@ ng generate @angular/material:table The `dashboard` schematic will create a new component that contains a dynamic grid list of Material Design cards. -``` +```bash ng generate @angular/material:dashboard ``` @@ -102,7 +102,7 @@ ng generate @angular/material:dashboard The `tree` schematic can be used to quickly generate an Angular component that uses the Angular Material `` component to visualize a nested folder structure. -``` +```bash ng generate @angular/material:tree ``` @@ -111,7 +111,7 @@ ng generate @angular/material:tree The `drag-drop` schematic is provided by the `@angular/cdk` and can be used to generate a component that uses the CDK drag and drop directives. -``` +```bash ng generate @angular/cdk:drag-drop ``` @@ -121,7 +121,7 @@ The `theme-color` schematic will generate a file with Material 3 palettes from t that can be used in a theme file. It also generates high contrast color override mixins if specified. -``` +```bash ng generate @angular/material:theme-color ``` diff --git a/guides/theming.md b/guides/theming.md index 59d25f9e7bd0..6b70dca2deda 100644 --- a/guides/theming.md +++ b/guides/theming.md @@ -35,7 +35,7 @@ entire application. The `color-scheme` is explicitly set to `light dark` so that the end user's system preferences are used to determine whether the application appears in light or dark mode. -``` +```scss @use '@angular/material' as mat; html { @@ -51,7 +51,7 @@ html { You can use the following styles to apply the theme’s surface background and on-surface text colors as a default across your application: -``` +```scss body { background: var(--mat-sys-surface); color: var(--mat-sys-on-surface); @@ -105,7 +105,7 @@ tertiary color. The theme-type is set to `light` which means that only the light color values will be set for the application. The typography is set to Roboto with a standard density setting. -``` +```scss @use '@angular/material' as mat; html { @@ -150,7 +150,7 @@ and the Open Sans font family to brand text. It specifies that bold weight is 900, medium weight is 500, and regular weight is 300\. The color scheme uses the violet color palette with a standard density. -``` +```scss @use '@angular/material' as mat; html { @@ -182,7 +182,7 @@ The following example theme file has a density setting of \-2 which causes most components to include less whitespace in their layout. The color scheme uses the violet color palette and applies Roboto as the font-family. -``` +```scss @use '@angular/material' as mat; html { @@ -234,7 +234,7 @@ builds custom color palettes based on a single color input for the primary color, and optionally color inputs to further customize secondary, tertiary, and neutral palettes: -``` +```bash ng generate @angular/material:theme-color ``` @@ -244,7 +244,7 @@ You can use Google Fonts as one option to load fonts in your application. For example, the following code in an application’s `` loads the font family Roboto with the font weights 700, 500, and 400: -``` +```html @@ -268,7 +268,7 @@ You can define `color-scheme: light` or `color-scheme: dark` to explicitly define your application’s mode. To set the mode depending on the user’s system preferences, use `color-scheme: light-dark` as shown in the following example: -``` +```scss @use '@angular/material' as mat; html { @@ -286,7 +286,7 @@ that the mode depends on whether that class has been applied. In the following example, the application always displays the light mode theme unless the class “dark-mode” is added to the HTML body. -``` +```scss @use '@angular/material' as mat; html { @@ -322,7 +322,7 @@ different contexts. In this case, a cyan-based palette is applied to a container of information about deleting data, causing buttons and other components to have a unique and attention-grabbing style applied: -``` +```scss @use '@angular/material' as mat; html { @@ -356,7 +356,7 @@ The following example styles demonstrate a component using the color and typography variables to create an application-wide banner presenting important information to the user: -``` +```scss :host { background: var(--mat-sys-primary-container); color: var(--mat-sys-on-primary-container); @@ -389,7 +389,7 @@ the application. The following example applies a violet color palette for the application, but alters the `primary-container` token to a specific shade of blue. -``` +```scss @use '@angular/material' as mat; html { @@ -411,7 +411,7 @@ html { Alternatively, an optional override map can be provided in the `mat.theme` mixin to replace values applied by the mixin: -``` +```scss @use '@angular/material' as mat; html { @@ -439,7 +439,7 @@ The following example demonstrates the Card’s `overrides` API to change the background color to red, increase the corner border radius, and specify a larger title font size. -``` +```scss html { @include mat.card-overrides(( elevated-container-color: red, From 347912324409509c939d9385ba75334ede28d615 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Fri, 11 Jul 2025 20:41:05 +0200 Subject: [PATCH 12/77] fix(cdk/drag-drop): ensure container is registered in addItem (#31518) Currently we only sync drop container in the `CdkDrag` container. These changes move the logic into `addItem` to ensure that it always happens. Fixes #31514. (cherry picked from commit a38487041134211d179b97c0c8d3359c9631aa67) --- src/cdk/drag-drop/directives/drag.ts | 1 - src/cdk/drag-drop/directives/drop-list.ts | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cdk/drag-drop/directives/drag.ts b/src/cdk/drag-drop/directives/drag.ts index 9ac4ef7f1261..9e8c738a3b60 100644 --- a/src/cdk/drag-drop/directives/drag.ts +++ b/src/cdk/drag-drop/directives/drag.ts @@ -248,7 +248,6 @@ export class CdkDrag implements AfterViewInit, OnChanges, OnDestroy { // is too late since the two modes save different kinds of information. We work around it by // assigning the drop container both from here and the list. if (dropContainer) { - this._dragRef._withDropContainer(dropContainer._dropListRef); dropContainer.addItem(this); // The drop container reads this so we need to sync it here. diff --git a/src/cdk/drag-drop/directives/drop-list.ts b/src/cdk/drag-drop/directives/drop-list.ts index 06f235c3aca9..bab8a65c91d1 100644 --- a/src/cdk/drag-drop/directives/drop-list.ts +++ b/src/cdk/drag-drop/directives/drop-list.ts @@ -235,6 +235,7 @@ export class CdkDropList implements OnDestroy { /** Registers an items with the drop list. */ addItem(item: CdkDrag): void { this._unsortedItems.add(item); + item._dragRef._withDropContainer(this._dropListRef); // Only sync the items while dragging since this method is // called when items are being initialized one-by-one. From fbe893ec0a3bc5010b5f576637b41dbac4c4dc06 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 15 Jul 2025 09:17:15 -0600 Subject: [PATCH 13/77] build: update all non-major dependencies (#31476) See associated pull request for more information. (cherry picked from commit 54edb6c228e83cf7c9ed6f553c4452addbfecdb3) --- docs/package.json | 2 +- package.json | 4 +-- pnpm-lock.yaml | 67 +++++++++++++++++++++++++++++------------------ 3 files changed, 45 insertions(+), 28 deletions(-) diff --git a/docs/package.json b/docs/package.json index 9f7d92ba290d..cd659c7ae641 100644 --- a/docs/package.json +++ b/docs/package.json @@ -60,7 +60,7 @@ "@bazel/bazelisk": "^1.12.1", "@types/jasmine": "5.1.8", "@types/node": "^22.14.1", - "@types/shelljs": "0.8.16", + "@types/shelljs": "0.8.17", "firebase-tools": "^14.0.0", "jasmine-core": "5.8.0", "jasmine-spec-reporter": "7.0.0", diff --git a/package.json b/package.json index b62bcbcefb4c..75254b4f55fc 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "dgeni": "^0.4.14", "dgeni-packages": "^0.30.0", "esbuild": "^0.25.0", - "firebase-tools": "14.9.0", + "firebase-tools": "14.10.1", "fs-extra": "^11.0.0", "glob": "^11.0.3", "highlight.js": "^11.0.0", @@ -132,7 +132,7 @@ "requirejs": "^2.3.6", "rollup": "^4.0.0", "rollup-plugin-dts": "6.2.1", - "rollup-plugin-sourcemaps2": "0.5.2", + "rollup-plugin-sourcemaps2": "0.5.3", "sass": "^1.80.6", "selenium-webdriver": "^3.6.0", "semver": "^7.3.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54808d6fbe62..21f98f26944e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -222,8 +222,8 @@ importers: specifier: ^0.25.0 version: 0.25.4 firebase-tools: - specifier: 14.9.0 - version: 14.9.0(@types/node@22.14.1)(encoding@0.1.13) + specifier: 14.10.1 + version: 14.10.1(@types/node@22.14.1)(encoding@0.1.13) fs-extra: specifier: ^11.0.0 version: 11.3.0 @@ -300,8 +300,8 @@ importers: specifier: 6.2.1 version: 6.2.1(rollup@4.40.2)(typescript@5.8.3) rollup-plugin-sourcemaps2: - specifier: 0.5.2 - version: 0.5.2(@types/node@22.14.1)(rollup@4.40.2) + specifier: 0.5.3 + version: 0.5.3(@types/node@22.14.1)(rollup@4.40.2) sass: specifier: ^1.80.6 version: 1.86.3 @@ -448,8 +448,8 @@ importers: specifier: ^22.14.1 version: 22.14.1 '@types/shelljs': - specifier: 0.8.16 - version: 0.8.16 + specifier: 0.8.17 + version: 0.8.17 firebase-tools: specifier: ^14.0.0 version: 14.4.0(@types/node@22.14.1)(encoding@0.1.13) @@ -2648,6 +2648,15 @@ packages: rollup: optional: true + '@rollup/pluginutils@5.2.0': + resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/rollup-android-arm-eabi@4.40.2': resolution: {integrity: sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==} cpu: [arm] @@ -2991,8 +3000,8 @@ packages: '@types/shelljs@0.8.15': resolution: {integrity: sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==} - '@types/shelljs@0.8.16': - resolution: {integrity: sha512-40SUXiH0tZfAg/oKkkGF1kdHPAmE4slv2xAmbfa8VtE6ztHYwdpW2phlzHTVdJh5JOGqA3Cx1Hzp7kxFalKHYA==} + '@types/shelljs@0.8.17': + resolution: {integrity: sha512-IDksKYmQA2W9MkQjiyptbMmcQx+8+Ol6b7h6dPU5S05JyiQDSb/nZKnrMrZqGwgV6VkVdl6/SPCKPDlMRvqECg==} '@types/sockjs@0.3.36': resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} @@ -4666,13 +4675,13 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - firebase-tools@14.4.0: - resolution: {integrity: sha512-avJJrEoWdlntCc1OWo55pt53CDWPmTMMkh4vKsQEgMxVPLIesUg2OqP3XdlUZuOe4o2yP/58r+73BTyJjQKoVA==} + firebase-tools@14.10.1: + resolution: {integrity: sha512-KUwA/HyJhiOLgsHwsanQmXI5j7J12IkA+JnA+oMpmyOv/gBzJxp3LRuxHTdfv/MY17w29ppUMDqS2+jR3ViSzw==} engines: {node: '>=20.0.0 || >=22.0.0'} hasBin: true - firebase-tools@14.9.0: - resolution: {integrity: sha512-8si+bTK9WJ82zr/wiwbfqlMeuqIQgRfwFOzGE+9OA+m9pRnN7fuFvMiE1UEfQmsbmLrVsD9Tv22AFsU6vaBUVA==} + firebase-tools@14.4.0: + resolution: {integrity: sha512-avJJrEoWdlntCc1OWo55pt53CDWPmTMMkh4vKsQEgMxVPLIesUg2OqP3XdlUZuOe4o2yP/58r+73BTyJjQKoVA==} engines: {node: '>=20.0.0 || >=22.0.0'} hasBin: true @@ -7394,8 +7403,8 @@ packages: rollup: ^3.29.4 || ^4 typescript: 5.8.3 - rollup-plugin-sourcemaps2@0.5.2: - resolution: {integrity: sha512-NTz5Y5ySYH9cZZF+qteTHN2x3dnFggTKzCtiN3NhtMvIEXdkOsZVBh6r6xrwsyDnZAhmKRsttwTfXfJVoanM6w==} + rollup-plugin-sourcemaps2@0.5.3: + resolution: {integrity: sha512-KmD8A50Lvi/FVkmu8Xo1LXFfhE5tCK/CIAWcnN44cJlgjyGR1l8WqYrSpJ+SQ3e6KNSj7GBvwqUg/4nQt3Agow==} engines: {node: '>=18.0.0'} peerDependencies: '@types/node': '>=18.0.0' @@ -10993,6 +11002,14 @@ snapshots: optionalDependencies: rollup: 4.40.2 + '@rollup/pluginutils@5.2.0(rollup@4.40.2)': + dependencies: + '@types/estree': 1.0.7 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.40.2 + '@rollup/rollup-android-arm-eabi@4.40.2': optional: true @@ -11351,10 +11368,10 @@ snapshots: '@types/glob': 7.2.0 '@types/node': 22.14.1 - '@types/shelljs@0.8.16': + '@types/shelljs@0.8.17': dependencies: - '@types/glob': 7.2.0 '@types/node': 22.14.1 + glob: 11.0.3 '@types/sockjs@0.3.36': dependencies: @@ -13314,9 +13331,10 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - firebase-tools@14.4.0(@types/node@22.14.1)(encoding@0.1.13): + firebase-tools@14.10.1(@types/node@22.14.1)(encoding@0.1.13): dependencies: - '@electric-sql/pglite': 0.2.17 + '@electric-sql/pglite': 0.3.3 + '@electric-sql/pglite-tools': 0.2.8(@electric-sql/pglite@0.3.3) '@google-cloud/cloud-sql-connector': 1.8.0(encoding@0.1.13) '@google-cloud/pubsub': 4.11.0(encoding@0.1.13) '@inquirer/prompts': 7.5.1(@types/node@22.14.1) @@ -13365,6 +13383,8 @@ snapshots: ora: 5.4.1 p-limit: 3.1.0 pg: 8.16.0 + pg-gateway: 0.3.0-beta.4 + pglite-2: '@electric-sql/pglite@0.2.17' portfinder: 1.0.35 progress: 2.0.3 proxy-agent: 6.5.0 @@ -13395,10 +13415,9 @@ snapshots: - supports-color - utf-8-validate - firebase-tools@14.9.0(@types/node@22.14.1)(encoding@0.1.13): + firebase-tools@14.4.0(@types/node@22.14.1)(encoding@0.1.13): dependencies: - '@electric-sql/pglite': 0.3.3 - '@electric-sql/pglite-tools': 0.2.8(@electric-sql/pglite@0.3.3) + '@electric-sql/pglite': 0.2.17 '@google-cloud/cloud-sql-connector': 1.8.0(encoding@0.1.13) '@google-cloud/pubsub': 4.11.0(encoding@0.1.13) '@inquirer/prompts': 7.5.1(@types/node@22.14.1) @@ -13447,8 +13466,6 @@ snapshots: ora: 5.4.1 p-limit: 3.1.0 pg: 8.16.0 - pg-gateway: 0.3.0-beta.4 - pglite-2: '@electric-sql/pglite@0.2.17' portfinder: 1.0.35 progress: 2.0.3 proxy-agent: 6.5.0 @@ -16551,9 +16568,9 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.26.2 - rollup-plugin-sourcemaps2@0.5.2(@types/node@22.14.1)(rollup@4.40.2): + rollup-plugin-sourcemaps2@0.5.3(@types/node@22.14.1)(rollup@4.40.2): dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.40.2) + '@rollup/pluginutils': 5.2.0(rollup@4.40.2) rollup: 4.40.2 optionalDependencies: '@types/node': 22.14.1 From 555439817bab15e79073fd55b4e5ee1df200fe9a Mon Sep 17 00:00:00 2001 From: cutiepoka <101752379+cutiepoka@users.noreply.github.com> Date: Tue, 15 Jul 2025 08:26:11 -0700 Subject: [PATCH 14/77] docs(cdk/drag-drop): Add an example of scrolling in CDK Drag and Drop (#31528) * Add an example of scrolling in CDK Drag and Drop * fixup! Add an example of scrolling in CDK Drag and Drop (cherry picked from commit 5b5808d930af381b5f65947e8e021c7cec4aee75) --- src/cdk/drag-drop/drag-drop.md | 7 + .../cdk-drag-drop-scrollable-example.css | 54 +++++++ .../cdk-drag-drop-scrollable-example.html | 7 + .../cdk-drag-drop-scrollable-example.ts | 138 ++++++++++++++++++ 4 files changed, 206 insertions(+) create mode 100644 src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.css create mode 100644 src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.html create mode 100644 src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.ts diff --git a/src/cdk/drag-drop/drag-drop.md b/src/cdk/drag-drop/drag-drop.md index 44d9f791d23d..0aca4d30d639 100644 --- a/src/cdk/drag-drop/drag-drop.md +++ b/src/cdk/drag-drop/drag-drop.md @@ -280,3 +280,10 @@ This example shows how you can set up a table which supports re-ordering of tabs #### Sortable tabs Example of how to add sorting support to a `mat-tab-group`. + +#### Scrollable container +If your draggable items are inside a scrollable container (e.g., a div with overflow: auto) +automatic scrolling will not work unless the scrollable container has the `cdkScrollable` directive. +Without it, the CDK cannot detect or control the scroll behavior of the container during drag +operations. + diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.css new file mode 100644 index 000000000000..1288a030736c --- /dev/null +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.css @@ -0,0 +1,54 @@ +.example-container { + height: 20rem; + overflow: auto; +} + +.example-list { + width: 500px; + max-width: 100%; + border: solid 1px #ccc; + min-height: 60px; + display: block; + background: white; + border-radius: 4px; + overflow: hidden; +} + +.example-box { + padding: 20px 10px; + border-bottom: solid 1px #ccc; + color: rgba(0, 0, 0, 0.87); + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + box-sizing: border-box; + cursor: move; + background: white; + font-size: 14px; +} + +.cdk-drag-preview { + border: none; + box-sizing: border-box; + border-radius: 4px; + box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2), + 0 8px 10px 1px rgba(0, 0, 0, 0.14), + 0 3px 14px 2px rgba(0, 0, 0, 0.12); +} + +.cdk-drag-placeholder { + opacity: 0; +} + +.cdk-drag-animating { + transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); +} + +.example-box:last-child { + border: none; +} + +.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder) { + transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); +} diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.html b/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.html new file mode 100644 index 000000000000..1c35951951ac --- /dev/null +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.html @@ -0,0 +1,7 @@ +
+
+ @for (elementName of elementNames; track elementName) { +
{{elementName}}
+ } +
+
\ No newline at end of file diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.ts b/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.ts new file mode 100644 index 000000000000..02712a7eac5e --- /dev/null +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.ts @@ -0,0 +1,138 @@ +import {Component} from '@angular/core'; +import {CdkDragDrop, CdkDropList, CdkDrag, moveItemInArray} from '@angular/cdk/drag-drop'; +import {CdkScrollable} from '@angular/cdk/scrolling'; + +/** + * @title Drag&Drop scrollable + */ +@Component({ + selector: 'cdk-drag-drop-scrollable-example', + templateUrl: 'cdk-drag-drop-scrollable-example.html', + styleUrl: 'cdk-drag-drop-scrollable-example.css', + imports: [CdkDropList, CdkDrag, CdkScrollable], +}) +export class CdkDragDropScrollableExample { + elementNames = [ + 'Hydrogen', + 'Helium', + 'Lithium', + 'Beryllium', + 'Boron', + 'Carbon', + 'Nitrogen', + 'Oxygen', + 'Fluorine', + 'Neon', + 'Sodium', + 'Magnesium', + 'Aluminum', + 'Silicon', + 'Phosphorus', + 'Sulfur', + 'Chlorine', + 'Argon', + 'Potassium', + 'Calcium', + 'Scandium', + 'Titanium', + 'Vanadium', + 'Chromium', + 'Manganese', + 'Iron', + 'Cobalt', + 'Nickel', + 'Copper', + 'Zinc', + 'Gallium', + 'Germanium', + 'Arsenic', + 'Selenium', + 'Bromine', + 'Krypton', + 'Rubidium', + 'Strontium', + 'Yttrium', + 'Zirconium', + 'Niobium', + 'Molybdenum', + 'Technetium', + 'Ruthenium', + 'Rhodium', + 'Palladium', + 'Silver', + 'Cadmium', + 'Indium', + 'Tin', + 'Antimony', + 'Tellurium', + 'Iodine', + 'Xenon', + 'Cesium', + 'Barium', + 'Lanthanum', + 'Cerium', + 'Praseodymium', + 'Neodymium', + 'Promethium', + 'Samarium', + 'Europium', + 'Gadolinium', + 'Terbium', + 'Dysprosium', + 'Holmium', + 'Erbium', + 'Thulium', + 'Ytterbium', + 'Lutetium', + 'Hafnium', + 'Tantalum', + 'Tungsten', + 'Rhenium', + 'Osmium', + 'Iridium', + 'Platinum', + 'Gold', + 'Mercury', + 'Thallium', + 'Lead', + 'Bismuth', + 'Polonium', + 'Astatine', + 'Radon', + 'Francium', + 'Radium', + 'Actinium', + 'Thorium', + 'Protactinium', + 'Uranium', + 'Neptunium', + 'Plutonium', + 'Americium', + 'Curium', + 'Berkelium', + 'Californium', + 'Einsteinium', + 'Fermium', + 'Mendelevium', + 'Nobelium', + 'Lawrencium', + 'Rutherfordium', + 'Dubnium', + 'Seaborgium', + 'Bohrium', + 'Hassium', + 'Meitnerium', + 'Darmstadtium', + 'Roentgenium', + 'Copernicium', + 'Nihonium', + 'Flerovium', + 'Moscovium', + 'Livermorium', + 'Tennessine', + 'Oganesson', + ]; + drop(event: CdkDragDrop) { + moveItemInArray(this.elementNames, event.previousIndex, event.currentIndex); + } +} From 7b64d34eff02fc6acb99c81252d82bd0d453aa02 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 15 Jul 2025 09:28:19 -0600 Subject: [PATCH 15/77] build: update github/codeql-action action to v3.29.2 (#31470) See associated pull request for more information. (cherry picked from commit 8ab7a90e8fd4aec2efeef13059b239eb8d8d0b9f) --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 4a7f801b2bea..a1a5915e59aa 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -47,6 +47,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@39edc492dbe16b1465b0cafca41432d857bdb31a # v3.29.1 + uses: github/codeql-action/upload-sarif@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2 with: sarif_file: results.sarif From 0c6a4017dad7e99dbfe611df0df78762a8482171 Mon Sep 17 00:00:00 2001 From: Miles Malerba Date: Tue, 15 Jul 2025 09:06:25 -0700 Subject: [PATCH 16/77] build: remove @types/glob (#31541) (cherry picked from commit 4bb8e1f6aff994a9f5ec5863bb2d5ebe928ded54) --- package.json | 1 - pnpm-lock.yaml | 11 ----------- src/cdk/schematics/BUILD.bazel | 3 +-- src/cdk/schematics/testing/BUILD.bazel | 1 - 4 files changed, 1 insertion(+), 15 deletions(-) diff --git a/package.json b/package.json index 75254b4f55fc..33b101763abe 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,6 @@ "@schematics/angular": "catalog:", "@types/babel__core": "^7.1.18", "@types/fs-extra": "^11.0.0", - "@types/glob": "^8.0.0", "@types/jasmine": "^5.0.0", "@types/luxon": "^3.0.0", "@types/node": "^22.14.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 21f98f26944e..8b7a3c52e0e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -179,9 +179,6 @@ importers: '@types/fs-extra': specifier: ^11.0.0 version: 11.0.4 - '@types/glob': - specifier: ^8.0.0 - version: 8.1.0 '@types/jasmine': specifier: ^5.0.0 version: 5.1.8 @@ -2909,9 +2906,6 @@ packages: '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - '@types/glob@8.1.0': - resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} - '@types/google.maps@3.58.1': resolution: {integrity: sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ==} @@ -11275,11 +11269,6 @@ snapshots: '@types/minimatch': 5.1.2 '@types/node': 22.14.1 - '@types/glob@8.1.0': - dependencies: - '@types/minimatch': 5.1.2 - '@types/node': 22.14.1 - '@types/google.maps@3.58.1': {} '@types/http-errors@2.0.4': {} diff --git a/src/cdk/schematics/BUILD.bazel b/src/cdk/schematics/BUILD.bazel index 2499dea4b11e..a47a9c8bf73b 100644 --- a/src/cdk/schematics/BUILD.bazel +++ b/src/cdk/schematics/BUILD.bazel @@ -1,6 +1,6 @@ load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") -load("//tools:defaults.bzl", "jasmine_test", "npm_package", "ts_project") load("@aspect_rules_ts//ts:defs.bzl", rules_js_tsconfig = "ts_config") +load("//tools:defaults.bzl", "jasmine_test", "npm_package", "ts_project") package(default_visibility = [":__subpackages__"]) @@ -44,7 +44,6 @@ ts_project( "//:node_modules/@angular-devkit/core", "//:node_modules/@angular-devkit/schematics", "//:node_modules/@schematics/angular", - "//:node_modules/@types/glob", "//:node_modules/@types/node", "//:node_modules/glob", "//:node_modules/parse5", diff --git a/src/cdk/schematics/testing/BUILD.bazel b/src/cdk/schematics/testing/BUILD.bazel index b018fffc8680..ab868ebd40eb 100644 --- a/src/cdk/schematics/testing/BUILD.bazel +++ b/src/cdk/schematics/testing/BUILD.bazel @@ -18,7 +18,6 @@ ts_project( "//:node_modules/@bazel/runfiles", "//:node_modules/@schematics/angular", "//:node_modules/@types/fs-extra", - "//:node_modules/@types/glob", "//:node_modules/@types/jasmine", "//:node_modules/@types/node", "//:node_modules/fs-extra", From ced4165db98a3dd4ebd28b68b56ac296351a3e7c Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Tue, 15 Jul 2025 18:36:29 +0200 Subject: [PATCH 17/77] docs: simplify stackblitz template (#31530) Simplifies the Stackblitz template by: 1. Removing the native date adapter since the individual examples add it themselves. 2. Dropping animations both from the code and the package.json. 3. Updating a dependency that was causing an error to be logged when installed. (cherry picked from commit 2efed4ae32a7a1fedb1a34b6d7cc046460a0e5d4) --- docs/src/assets/stackblitz/package-lock.json | 4520 ++++++++++-------- docs/src/assets/stackblitz/package.json | 31 +- docs/src/assets/stackblitz/src/main.ts | 5 +- 3 files changed, 2449 insertions(+), 2107 deletions(-) diff --git a/docs/src/assets/stackblitz/package-lock.json b/docs/src/assets/stackblitz/package-lock.json index cfe5e8f00922..f098be4214e3 100644 --- a/docs/src/assets/stackblitz/package-lock.json +++ b/docs/src/assets/stackblitz/package-lock.json @@ -8,35 +8,34 @@ "name": "example-app", "version": "0.0.0", "dependencies": { - "@angular/animations": "^20.0.0-rc", - "@angular/cdk": "^20.0.0-rc", - "@angular/common": "^20.0.0-rc", - "@angular/compiler": "^20.0.0-rc", - "@angular/core": "^20.0.0-rc", - "@angular/forms": "^20.0.0-rc", - "@angular/localize": "^20.0.0-rc", - "@angular/material": "^20.0.0-rc", - "@angular/material-moment-adapter": "^20.0.0-rc", - "@angular/platform-browser": "^20.0.0-rc", - "@angular/platform-browser-dynamic": "^20.0.0-rc", - "@angular/router": "^20.0.0-rc", + "@angular/cdk": "^20.1.0", + "@angular/common": "^20.1.0", + "@angular/compiler": "^20.1.0", + "@angular/core": "^20.1.0", + "@angular/forms": "^20.1.0", + "@angular/localize": "^20.1.0", + "@angular/material": "^20.1.0", + "@angular/material-moment-adapter": "^20.1.0", + "@angular/platform-browser": "^20.1.0", + "@angular/platform-browser-dynamic": "^20.1.0", + "@angular/router": "^20.1.0", "moment": "^2.18.1", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^20.0.0-rc", - "@angular/cli": "^20.0.0-rc", - "@angular/compiler-cli": "^20.0.0-rc", + "@angular-devkit/build-angular": "^20.1.0", + "@angular/cli": "^20.1.0", + "@angular/compiler-cli": "^20.1.0", "@types/jasmine": "~5.1.0", "@types/node": "^12.11.1", - "jasmine-core": "~5.7.0", + "jasmine-core": "~5.8.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", - "karma-jasmine": "~4.0.0", - "karma-jasmine-html-reporter": "~1.7.0", + "karma-jasmine": "~5.0.0", + "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.8.2" } }, @@ -54,52 +53,51 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.2000.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2000.0-rc.0.tgz", - "integrity": "sha512-O3sVOvEou7+d0YbIE/OzHs6EU/xrHjSwi3z1djyNSJflhwTe6qyY4wdzdggwWt6z6iS5sLsMolsnhR6hYfuK+A==", + "version": "0.2001.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2001.0.tgz", + "integrity": "sha512-IDBG+YP0nPaA/tIjtJ1ZPh0VEfbxSn0yCvbS7dTfqyrnmanPUFpU5qsT9vJTU6yzkuzBEhNFRzkUCQaUAziLRA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.0.0-rc.0", + "@angular-devkit/core": "20.1.0", "rxjs": "7.8.2" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular-devkit/build-angular": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.0.0-rc.0.tgz", - "integrity": "sha512-dFiKXZTPV2Uiq938eHSxepCrZKPY3ZbS3L08Q6bgPTInq1hFIceaVty7Ujq90PD6DYEaY3bGKv+aynN8occcCw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.1.0.tgz", + "integrity": "sha512-u0v5X5djZnW7K9HW+tsroyYVNnoX9Q2fCw9+kTBo7kOppM1p+bQ/krLWE2joWhgC++TZV1q0y/T/uEbAP0wyMg==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2000.0-rc.0", - "@angular-devkit/build-webpack": "0.2000.0-rc.0", - "@angular-devkit/core": "20.0.0-rc.0", - "@angular/build": "20.0.0-rc.0", - "@babel/core": "7.27.1", - "@babel/generator": "7.27.1", - "@babel/helper-annotate-as-pure": "7.27.1", + "@angular-devkit/architect": "0.2001.0", + "@angular-devkit/build-webpack": "0.2001.0", + "@angular-devkit/core": "20.1.0", + "@angular/build": "20.1.0", + "@babel/core": "7.27.7", + "@babel/generator": "7.27.5", + "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", "@babel/plugin-transform-async-generator-functions": "7.27.1", "@babel/plugin-transform-async-to-generator": "7.27.1", - "@babel/plugin-transform-runtime": "7.27.1", + "@babel/plugin-transform-runtime": "7.27.4", "@babel/preset-env": "7.27.2", - "@babel/runtime": "7.27.1", + "@babel/runtime": "7.27.6", "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "20.0.0-rc.0", - "@vitejs/plugin-basic-ssl": "2.0.0", + "@ngtools/webpack": "20.1.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.21", "babel-loader": "10.0.0", "browserslist": "^4.21.5", "copy-webpack-plugin": "13.0.0", "css-loader": "7.1.2", - "esbuild-wasm": "0.25.4", + "esbuild-wasm": "0.25.5", "fast-glob": "3.3.3", "http-proxy-middleware": "3.0.5", "istanbul-lib-instrument": "6.0.3", @@ -111,49 +109,49 @@ "loader-utils": "3.3.1", "mini-css-extract-plugin": "2.9.2", "open": "10.1.2", - "ora": "5.4.1", + "ora": "8.2.0", "picomatch": "4.0.2", - "piscina": "5.0.0", - "postcss": "8.5.3", + "piscina": "5.1.2", + "postcss": "8.5.6", "postcss-loader": "8.1.1", "resolve-url-loader": "5.0.0", "rxjs": "7.8.2", - "sass": "1.87.0", + "sass": "1.89.2", "sass-loader": "16.0.5", - "semver": "7.7.1", + "semver": "7.7.2", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.39.0", + "terser": "5.43.1", "tree-kill": "1.2.2", "tslib": "2.8.1", - "webpack": "5.99.8", + "webpack": "5.99.9", "webpack-dev-middleware": "7.4.2", - "webpack-dev-server": "5.2.1", + "webpack-dev-server": "5.2.2", "webpack-merge": "6.0.1", "webpack-subresource-integrity": "5.1.0" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.25.4" + "esbuild": "0.25.5" }, "peerDependencies": { - "@angular/compiler-cli": "^20.0.0 || ^20.0.0-next.0", - "@angular/core": "^20.0.0 || ^20.0.0-next.0", - "@angular/localize": "^20.0.0 || ^20.0.0-next.0", - "@angular/platform-browser": "^20.0.0 || ^20.0.0-next.0", - "@angular/platform-server": "^20.0.0 || ^20.0.0-next.0", - "@angular/service-worker": "^20.0.0 || ^20.0.0-next.0", - "@angular/ssr": "^20.0.0-rc.0", + "@angular/compiler-cli": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/localize": "^20.0.0", + "@angular/platform-browser": "^20.0.0", + "@angular/platform-server": "^20.0.0", + "@angular/service-worker": "^20.0.0", + "@angular/ssr": "^20.1.0", "@web/test-runner": "^0.20.0", "browser-sync": "^3.0.2", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "karma": "^6.3.0", - "ng-packagr": "^20.0.0 || ^20.0.0-next.0", + "ng-packagr": "^20.0.0", "protractor": "^7.0.0", "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", "typescript": ">=5.8 <5.9" @@ -204,22 +202,22 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/@angular/build": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.0.0-rc.0.tgz", - "integrity": "sha512-cVKDaoloiiN06dMnsS0ARDP5QMKVpQSijTBHr2Fpvxi6615rTEQAhj/VgTECVYhkRRNm4cILP1RX1KvqWkawEA==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.1.0.tgz", + "integrity": "sha512-Sl4rkq5PQIrbVNk8cXx2JQhQ156H4bXLvfAYpgXPHAfSfbIIzaV25LJIfTdWSEjMzBGdIX5E0Vpi0SGwcNS7Uw==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2000.0-rc.0", - "@babel/core": "7.27.1", - "@babel/helper-annotate-as-pure": "7.27.1", + "@angular-devkit/architect": "0.2001.0", + "@babel/core": "7.27.7", + "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", - "@inquirer/confirm": "5.1.9", - "@vitejs/plugin-basic-ssl": "2.0.0", - "beasties": "0.3.3", + "@inquirer/confirm": "5.1.13", + "@vitejs/plugin-basic-ssl": "2.1.0", + "beasties": "0.3.4", "browserslist": "^4.23.0", - "esbuild": "0.25.4", + "esbuild": "0.25.5", "https-proxy-agent": "7.0.6", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", @@ -228,35 +226,35 @@ "mrmime": "2.0.1", "parse5-html-rewriting-stream": "7.1.0", "picomatch": "4.0.2", - "piscina": "5.0.0", - "rollup": "4.40.2", - "sass": "1.87.0", - "semver": "7.7.1", + "piscina": "5.1.2", + "rollup": "4.44.1", + "sass": "1.89.2", + "semver": "7.7.2", "source-map-support": "0.5.21", - "tinyglobby": "0.2.13", - "vite": "6.3.5", - "watchpack": "2.4.2" + "tinyglobby": "0.2.14", + "vite": "7.0.0", + "watchpack": "2.4.4" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "optionalDependencies": { - "lmdb": "3.3.0" + "lmdb": "3.4.1" }, "peerDependencies": { - "@angular/compiler": "^20.0.0 || ^20.0.0-next.0", - "@angular/compiler-cli": "^20.0.0 || ^20.0.0-next.0", - "@angular/core": "^20.0.0 || ^20.0.0-next.0", - "@angular/localize": "^20.0.0 || ^20.0.0-next.0", - "@angular/platform-browser": "^20.0.0 || ^20.0.0-next.0", - "@angular/platform-server": "^20.0.0 || ^20.0.0-next.0", - "@angular/service-worker": "^20.0.0 || ^20.0.0-next.0", - "@angular/ssr": "^20.0.0-rc.0", + "@angular/compiler": "^20.0.0", + "@angular/compiler-cli": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/localize": "^20.0.0", + "@angular/platform-browser": "^20.0.0", + "@angular/platform-server": "^20.0.0", + "@angular/service-worker": "^20.0.0", + "@angular/ssr": "^20.1.0", "karma": "^6.4.0", "less": "^4.2.0", - "ng-packagr": "^20.0.0 || ^20.0.0-next.0", + "ng-packagr": "^20.0.0", "postcss": "^8.4.0", "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", "tslib": "^2.3.0", @@ -302,56 +300,15 @@ } } }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", - "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helpers": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/@inquirer/confirm": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.9.tgz", - "integrity": "sha512-NgQCnHqFTjF7Ys2fsqK2WtnA8X1kHyInyG+nMIuHowVTIgIuS10T4AznI/PvbqSpJqjCUqNBlKGh1v3bwLFL4w==", + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.13.tgz", + "integrity": "sha512-EkCtvp67ICIVVzjsquUiVSd+V5HRGOGQfsqA4E4vMWhYnB7InUL0pa0TIWt1i+OfP16Gkds8CdIu6yGZwOM1Yw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.10", - "@inquirer/type": "^3.0.6" + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7" }, "engines": { "node": ">=18" @@ -366,14 +323,14 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/@inquirer/core": { - "version": "10.1.11", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.11.tgz", - "integrity": "sha512-BXwI/MCqdtAhzNQlBEFE7CEflhPkl/BqvAuV/aK6lW3DClIfYVDWPP/kXuXHtBWC7/EEbNqd/1BGq2BGBBnuxw==", + "version": "10.1.14", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.14.tgz", + "integrity": "sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.6", + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", @@ -394,9 +351,9 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/@inquirer/type": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.6.tgz", - "integrity": "sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.7.tgz", + "integrity": "sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==", "dev": true, "license": "MIT", "engines": { @@ -412,28 +369,28 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/@types/node": { - "version": "22.15.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz", - "integrity": "sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==", + "version": "24.0.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.13.tgz", + "integrity": "sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==", "dev": true, "license": "MIT", "optional": true, "peer": true, "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.8.0" } }, "node_modules/@angular-devkit/build-angular/node_modules/@vitejs/plugin-basic-ssl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.0.0.tgz", - "integrity": "sha512-gc9Tjg8bUxBVSTzeWT3Njc0Cl3PakHFKdNfABnZWiUgbxqmHDEn7uECv3fHVylxoYgNzAcmU7ZrILz+BwSo3sA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", + "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", "dev": true, "license": "MIT", "engines": { "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "peerDependencies": { - "vite": "^6.0.0" + "vite": "^6.0.0 || ^7.0.0" } }, "node_modules/@angular-devkit/build-angular/node_modules/ansi-escapes": { @@ -462,12 +419,21 @@ "node": ">=8" } }, - "node_modules/@angular-devkit/build-angular/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "node_modules/@angular-devkit/build-angular/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, "node_modules/@angular-devkit/build-angular/node_modules/emoji-regex": { "version": "8.0.0", @@ -515,24 +481,24 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.0.tgz", + "integrity": "sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.4.4", + "fdir": "^6.4.6", "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -541,14 +507,14 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", - "less": "*", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" @@ -605,17 +571,17 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.2000.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2000.0-rc.0.tgz", - "integrity": "sha512-pejJMhyzxetoJ5GpXOkybh6oJOPgKs+wMLA/U3F4oxT4EpwcUY+kl0VoANtqDDkHEC1cDmsWzI6XyBesmIQIfw==", + "version": "0.2001.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2001.0.tgz", + "integrity": "sha512-41dGClWoMAL+SoEazyw7AghvVHhbxF6LRSMjlgEiFmSy0aGVyEsYTeH+TlBwClS0KUKXtGx16C5cKch21CuAXA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2000.0-rc.0", + "@angular-devkit/architect": "0.2001.0", "rxjs": "7.8.2" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -625,9 +591,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.0-rc.0.tgz", - "integrity": "sha512-Crj0G0occyB1ftUQoAj4ONouJuQ336FryWhehslIzZCOGxzwPWUw/ersaIKHmGr80sQ39fL4iUUaiFmm5EyG/A==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.1.0.tgz", + "integrity": "sha512-i2t22bklvKsqdwmUtjXltRyxmJ+lJW8isrdc7XeN0N6VW/lDHSJqFlucT1+pO9+FxXJQyz3Hc1dpRd6G65mGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -639,7 +605,7 @@ "source-map": "0.7.4" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -653,98 +619,84 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.0.0-rc.0.tgz", - "integrity": "sha512-VJMahL7uvTT4L5fzzIrcv4bSnsXQG+2HNLQK4EWmG4j2vdKOcpCXL6EbE+ZD2ZDSqmNGSIAV0YHnsMD7mjTNYw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.1.0.tgz", + "integrity": "sha512-0UtJAptrqsfABi0DxrY7cyvlGe5kHRiqVwB+h3g2DEv3ikXKZh1dOFR3o2bK+sVhUqgFaV8qgSnCmR9a48xY0g==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.0.0-rc.0", + "@angular-devkit/core": "20.1.0", "jsonc-parser": "3.3.1", "magic-string": "0.30.17", - "ora": "5.4.1", + "ora": "8.2.0", "rxjs": "7.8.2" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, - "node_modules/@angular/animations": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.0.0-rc.0.tgz", - "integrity": "sha512-+vrpMe9NJ4QmW8iBh/cf/9sDHTOcJk7UW4jCf8y9s9HLk38MgUiCE0WAZz6RmnIrFGUCfewPzp9OsSf8duG4ww==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0" - }, - "peerDependencies": { - "@angular/common": "20.0.0-rc.0", - "@angular/core": "20.0.0-rc.0" - } - }, "node_modules/@angular/cdk": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-20.0.0-rc.0.tgz", - "integrity": "sha512-dvSacjyg5+6GCQiQpXIfguFcjrtR2R0uweUL8R9ZpGRi35jA0HqUYYY99asqyvhMS/G7F0etxRaPWu/d6sHpzg==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-20.1.0.tgz", + "integrity": "sha512-JhgbSOv7xZqWNZjuCh8A3A7pGv0mhtmGjHo36157LrxRO6R7x2yJJjxC5nQeroKZWhgN+X/jG/EJlzEvl9PxTw==", "license": "MIT", "dependencies": { "parse5": "^7.1.2", "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/common": "^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0", - "@angular/core": "^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0", + "@angular/common": "^20.0.0 || ^21.0.0", + "@angular/core": "^20.0.0 || ^21.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/cli": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.0.0-rc.0.tgz", - "integrity": "sha512-fP+OWXhxjNVHSQbofoQv5mEB1JKc+Dh/q/1tUMk+T2VM3QsMZpelWRXb3Wk6jlScwDMChyr3VjaEngAUnoEF3A==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.1.0.tgz", + "integrity": "sha512-jZudpHlPVAvrywVZuhUkUr5K7ThW/6CPjT7qxZBSdOvu7cD49JPpDivCdlMh0kCBSHsJ0ZbLx35oi6zF8PegiA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2000.0-rc.0", - "@angular-devkit/core": "20.0.0-rc.0", - "@angular-devkit/schematics": "20.0.0-rc.0", - "@inquirer/prompts": "7.5.0", + "@angular-devkit/architect": "0.2001.0", + "@angular-devkit/core": "20.1.0", + "@angular-devkit/schematics": "20.1.0", + "@inquirer/prompts": "7.6.0", "@listr2/prompt-adapter-inquirer": "2.0.22", - "@schematics/angular": "20.0.0-rc.0", + "@modelcontextprotocol/sdk": "1.13.3", + "@schematics/angular": "20.1.0", "@yarnpkg/lockfile": "1.1.0", "ini": "5.0.0", "jsonc-parser": "3.3.1", "listr2": "8.3.3", "npm-package-arg": "12.0.2", "npm-pick-manifest": "10.0.0", - "pacote": "20.0.0", + "pacote": "21.0.0", "resolve": "1.22.10", - "semver": "7.7.1", - "yargs": "17.7.2" + "semver": "7.7.2", + "yargs": "18.0.0", + "zod": "3.25.75" }, "bin": { "ng": "bin/ng.js" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular/cli/node_modules/@inquirer/checkbox": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.6.tgz", - "integrity": "sha512-62u896rWCtKKE43soodq5e/QcRsA22I+7/4Ov7LESWnKRO6BVo2A1DFLDmXL9e28TB0CfHc3YtkbPm7iwajqkg==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.9.tgz", + "integrity": "sha512-DBJBkzI5Wx4jFaYm221LHvAhpKYkhVS0k9plqHwaHhofGNxvYB7J3Bz8w+bFJ05zaMb0sZNHo4KdmENQFlNTuQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.11", - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.6", + "@inquirer/core": "^10.1.14", + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, @@ -761,14 +713,14 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/confirm": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.10.tgz", - "integrity": "sha512-FxbQ9giWxUWKUk2O5XZ6PduVnH2CZ/fmMKMBkH71MHJvWr7WL5AHKevhzF1L5uYWB2P548o1RzVxrNd3dpmk6g==", + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.13.tgz", + "integrity": "sha512-EkCtvp67ICIVVzjsquUiVSd+V5HRGOGQfsqA4E4vMWhYnB7InUL0pa0TIWt1i+OfP16Gkds8CdIu6yGZwOM1Yw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.11", - "@inquirer/type": "^3.0.6" + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7" }, "engines": { "node": ">=18" @@ -783,14 +735,14 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/core": { - "version": "10.1.11", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.11.tgz", - "integrity": "sha512-BXwI/MCqdtAhzNQlBEFE7CEflhPkl/BqvAuV/aK6lW3DClIfYVDWPP/kXuXHtBWC7/EEbNqd/1BGq2BGBBnuxw==", + "version": "10.1.14", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.14.tgz", + "integrity": "sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.6", + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", @@ -811,14 +763,14 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/editor": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.11.tgz", - "integrity": "sha512-YoZr0lBnnLFPpfPSNsQ8IZyKxU47zPyVi9NLjCWtna52//M/xuL0PGPAxHxxYhdOhnvY2oBafoM+BI5w/JK7jw==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.14.tgz", + "integrity": "sha512-yd2qtLl4QIIax9DTMZ1ZN2pFrrj+yL3kgIWxm34SS6uwCr0sIhsNyudUjAo5q3TqI03xx4SEBkUJqZuAInp9uA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.11", - "@inquirer/type": "^3.0.6", + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", "external-editor": "^3.1.0" }, "engines": { @@ -834,14 +786,14 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/expand": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.13.tgz", - "integrity": "sha512-HgYNWuZLHX6q5y4hqKhwyytqAghmx35xikOGY3TcgNiElqXGPas24+UzNPOwGUZa5Dn32y25xJqVeUcGlTv+QQ==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.16.tgz", + "integrity": "sha512-oiDqafWzMtofeJyyGkb1CTPaxUkjIcSxePHHQCfif8t3HV9pHcw1Kgdw3/uGpDvaFfeTluwQtWiqzPVjAqS3zA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.11", - "@inquirer/type": "^3.0.6", + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -857,14 +809,14 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/input": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.10.tgz", - "integrity": "sha512-kV3BVne3wJ+j6reYQUZi/UN9NZGZLxgc/tfyjeK3mrx1QI7RXPxGp21IUTv+iVHcbP4ytZALF8vCHoxyNSC6qg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.0.tgz", + "integrity": "sha512-opqpHPB1NjAmDISi3uvZOTrjEEU5CWVu/HBkDby8t93+6UxYX0Z7Ps0Ltjm5sZiEbWenjubwUkivAEYQmy9xHw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.11", - "@inquirer/type": "^3.0.6" + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7" }, "engines": { "node": ">=18" @@ -879,14 +831,14 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/number": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.13.tgz", - "integrity": "sha512-IrLezcg/GWKS8zpKDvnJ/YTflNJdG0qSFlUM/zNFsdi4UKW/CO+gaJpbMgQ20Q58vNKDJbEzC6IebdkprwL6ew==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.16.tgz", + "integrity": "sha512-kMrXAaKGavBEoBYUCgualbwA9jWUx2TjMA46ek+pEKy38+LFpL9QHlTd8PO2kWPUgI/KB+qi02o4y2rwXbzr3Q==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.11", - "@inquirer/type": "^3.0.6" + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7" }, "engines": { "node": ">=18" @@ -901,14 +853,14 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/password": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.13.tgz", - "integrity": "sha512-NN0S/SmdhakqOTJhDwOpeBEEr8VdcYsjmZHDb0rblSh2FcbXQOr+2IApP7JG4WE3sxIdKytDn4ed3XYwtHxmJQ==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.16.tgz", + "integrity": "sha512-g8BVNBj5Zeb5/Y3cSN+hDUL7CsIFDIuVxb9EPty3lkxBaYpjL5BNRKSYOF9yOLe+JOcKFd+TSVeADQ4iSY7rbg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.11", - "@inquirer/type": "^3.0.6", + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", "ansi-escapes": "^4.3.2" }, "engines": { @@ -924,22 +876,22 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/prompts": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.5.0.tgz", - "integrity": "sha512-tk8Bx7l5AX/CR0sVfGj3Xg6v7cYlFBkEahH+EgBB+cZib6Fc83dwerTbzj7f2+qKckjIUGsviWRI1d7lx6nqQA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.6.0.tgz", + "integrity": "sha512-jAhL7tyMxB3Gfwn4HIJ0yuJ5pvcB5maYUcouGcgd/ub79f9MqZ+aVnBtuFf+VC2GTkCBF+R+eo7Vi63w5VZlzw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^4.1.5", - "@inquirer/confirm": "^5.1.9", - "@inquirer/editor": "^4.2.10", - "@inquirer/expand": "^4.0.12", - "@inquirer/input": "^4.1.9", - "@inquirer/number": "^3.0.12", - "@inquirer/password": "^4.0.12", - "@inquirer/rawlist": "^4.1.0", - "@inquirer/search": "^3.0.12", - "@inquirer/select": "^4.2.0" + "@inquirer/checkbox": "^4.1.9", + "@inquirer/confirm": "^5.1.13", + "@inquirer/editor": "^4.2.14", + "@inquirer/expand": "^4.0.16", + "@inquirer/input": "^4.2.0", + "@inquirer/number": "^3.0.16", + "@inquirer/password": "^4.0.16", + "@inquirer/rawlist": "^4.1.4", + "@inquirer/search": "^3.0.16", + "@inquirer/select": "^4.2.4" }, "engines": { "node": ">=18" @@ -954,14 +906,14 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/rawlist": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.1.tgz", - "integrity": "sha512-VBUC0jPN2oaOq8+krwpo/mf3n/UryDUkKog3zi+oIi8/e5hykvdntgHUB9nhDM78RubiyR1ldIOfm5ue+2DeaQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.4.tgz", + "integrity": "sha512-5GGvxVpXXMmfZNtvWw4IsHpR7RzqAR624xtkPd1NxxlV5M+pShMqzL4oRddRkg8rVEOK9fKdJp1jjVML2Lr7TQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.11", - "@inquirer/type": "^3.0.6", + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -977,15 +929,15 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/search": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.13.tgz", - "integrity": "sha512-9g89d2c5Izok/Gw/U7KPC3f9kfe5rA1AJ24xxNZG0st+vWekSk7tB9oE+dJv5JXd0ZSijomvW0KPMoBd8qbN4g==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.16.tgz", + "integrity": "sha512-POCmXo+j97kTGU6aeRjsPyuCpQQfKcMXdeTMw708ZMtWrj5aykZvlUxH4Qgz3+Y1L/cAVZsSpA+UgZCu2GMOMg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.11", - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.6", + "@inquirer/core": "^10.1.14", + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -1001,15 +953,15 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.2.1.tgz", - "integrity": "sha512-gt1Kd5XZm+/ddemcT3m23IP8aD8rC9drRckWoP/1f7OL46Yy2FGi8DSmNjEjQKtPl6SV96Kmjbl6p713KXJ/Jg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.2.4.tgz", + "integrity": "sha512-unTppUcTjmnbl/q+h8XeQDhAqIOmwWYWNyiiP2e3orXrg6tOaa5DHXja9PChCSbChOsktyKgOieRZFnajzxoBg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.11", - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.6", + "@inquirer/core": "^10.1.14", + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, @@ -1026,9 +978,9 @@ } }, "node_modules/@angular/cli/node_modules/@inquirer/type": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.6.tgz", - "integrity": "sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.7.tgz", + "integrity": "sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==", "dev": true, "license": "MIT", "engines": { @@ -1083,15 +1035,15 @@ } }, "node_modules/@angular/cli/node_modules/@types/node": { - "version": "22.15.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz", - "integrity": "sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==", + "version": "24.0.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.13.tgz", + "integrity": "sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==", "dev": true, "license": "MIT", "optional": true, "peer": true, "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.8.0" } }, "node_modules/@angular/cli/node_modules/ansi-escapes": { @@ -1120,6 +1072,22 @@ "node": ">=8" } }, + "node_modules/@angular/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@angular/cli/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1181,110 +1149,179 @@ } }, "node_modules/@angular/common": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.0.0-rc.0.tgz", - "integrity": "sha512-aaEjRPtVv0DF3q6wPHRfephY1kMYTefmFH35z+hzcUVIrVyYQdT/LIUX3L+C9ITfYyLmFWlENf3HxmVUILfXAg==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.1.0.tgz", + "integrity": "sha512-RsHClHJux+4lXrHdGHVw22wekRbSjYtx6Xwjox2S+IRPP51CbX0KskAALZ9ZmtCttkYSFVtvr0S+SQrU2cu5WA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "20.0.0-rc.0", + "@angular/core": "20.1.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.0.0-rc.0.tgz", - "integrity": "sha512-MJ2rJVQ/H6m9P3kIL9+wrwLnY2N48GM6vBhZ5+hVvtTPKLM0qcMwfTd/1SaG5e17tpg4mDWcr+pmnoGFgkXHvg==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.1.0.tgz", + "integrity": "sha512-sM8H3dJotIDDmI1u8qGuAn16XVfR7A4+/5s5cKLI/osnnIjafi5HHqAf76R5IlGoIv0ZHVQIYaJ/Qdvfyvdhfg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/@angular/compiler-cli": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.0.0-rc.0.tgz", - "integrity": "sha512-0+nEw4JXRSdBPDJvtBwQlMYd3dVsM0XOzc1hpg+1E7RWIXsxGb2WE8gEvNjNdR0oE7kjdUWSOKlDMJfE3AWVLA==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.1.0.tgz", + "integrity": "sha512-ajbCmvYYFxeXRdKSfdHjp62MZ2lCMUS0UzswBDAbT9sPd/ThppbvLXLsMBj8SlwaXSSBeTAa1oSHEO1MeuVvGQ==", "license": "MIT", "dependencies": { - "@babel/core": "7.26.10", + "@babel/core": "7.28.0", "@jridgewell/sourcemap-codec": "^1.4.14", "chokidar": "^4.0.0", "convert-source-map": "^1.5.1", "reflect-metadata": "^0.2.0", "semver": "^7.0.0", "tslib": "^2.3.0", - "yargs": "^17.2.1" + "yargs": "^18.0.0" }, "bin": { "ng-xi18n": "bundles/src/bin/ng_xi18n.js", "ngc": "bundles/src/bin/ngc.js" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.0.0-rc.0", + "@angular/compiler": "20.1.0", "typescript": ">=5.8 <5.9" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@angular/core": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.0.0-rc.0.tgz", - "integrity": "sha512-RKIXYA129vdrRKrnac2XOgpWuYusWqwM4KsQ7b5qKIMZabJ0a2GoOlezT6+NhPkOSsyygYuZtaia5wzQeU1acA==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.1.0.tgz", + "integrity": "sha512-/dJooZi+OAACkjWgGMPrOOGikdtlTJXwdeXPJTgZSUD5L8oQMbhZFG0XW/1Hldvsti87wPjZPz67ivB7zR86VA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.0.0-rc.0", + "@angular/compiler": "20.1.0", "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.15.0" }, "peerDependenciesMeta": { "@angular/compiler": { "optional": true + }, + "zone.js": { + "optional": true } } }, "node_modules/@angular/forms": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.0.0-rc.0.tgz", - "integrity": "sha512-RH95gg+WBBHS+m6y2XDTCCUZMg6Xih1Y4G91tnBdzSxV32evqyNDrSA9IxOhC6Ztxcd+2aLg1S1hsaiMbF2Alw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.1.0.tgz", + "integrity": "sha512-NgQxowyyG2yiSOXxtQS1xK1vAQT+4GRoMFuzmS3uBshIifgCgFckSxJHQXhlQOInuv2NsZ1Q0HuCvao+yZfIow==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.0.0-rc.0", - "@angular/core": "20.0.0-rc.0", - "@angular/platform-browser": "20.0.0-rc.0", + "@angular/common": "20.1.0", + "@angular/core": "20.1.0", + "@angular/platform-browser": "20.1.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/localize": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.0.0-rc.0.tgz", - "integrity": "sha512-x6NmY9VCjSh0IPgTBF8SMIasy97ChOZfYgi1iDZwDNaAVug+jQm8XB3zC/SmDGN4yluTA9f2dvOMRhYVaenUNw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.1.0.tgz", + "integrity": "sha512-ZTAxJkLmYxBxeHVSf3VMY1qivlypxGsJy90LRzZl8KeYROt6g8NQ0MXO8M4Y+0+dXUTZDQcYcGq8TFxpMw1fqQ==", "license": "MIT", "dependencies": { - "@babel/core": "7.26.10", + "@babel/core": "7.28.0", "@types/babel__core": "7.20.5", "tinyglobby": "^0.2.12", - "yargs": "^17.2.1" + "yargs": "^18.0.0" }, "bin": { "localize-extract": "tools/bundles/src/extract/cli.js", @@ -1292,59 +1329,120 @@ "localize-translate": "tools/bundles/src/translate/cli.js" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.0.0-rc.0", - "@angular/compiler-cli": "20.0.0-rc.0" + "@angular/compiler": "20.1.0", + "@angular/compiler-cli": "20.1.0" + } + }, + "node_modules/@angular/localize/node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/localize/node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular/localize/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/@angular/localize/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, "node_modules/@angular/material": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-20.0.0-rc.0.tgz", - "integrity": "sha512-Z6uaTLaTdfMoT2RnL8GB1na/n2/0d9Dk5h2wSsymyZFJz/U20btCQuor9Cvb/mUlrPs/uu/5SWDMpigRXlaomg==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-20.1.0.tgz", + "integrity": "sha512-LfGz/V/kZwRIhzIZBiurM4Wc5CQiiJkiOChUfoEOvQLN2hckPFZbbvtg6JwxxA6nhzsDhuGHbj7Xj5dNsLfZLw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/cdk": "20.0.0-rc.0", - "@angular/common": "^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0", - "@angular/core": "^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0", - "@angular/forms": "^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0", - "@angular/platform-browser": "^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0", + "@angular/cdk": "20.1.0", + "@angular/common": "^20.0.0 || ^21.0.0", + "@angular/core": "^20.0.0 || ^21.0.0", + "@angular/forms": "^20.0.0 || ^21.0.0", + "@angular/platform-browser": "^20.0.0 || ^21.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/material-moment-adapter": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-20.0.0-rc.0.tgz", - "integrity": "sha512-mwIacKwdCtNuRa9GCEyX+hkWspDj9Hxp3ab9cUXX681sD+H5UpvFTJHatBNaUchqWhX921hRyrl2y1mR09DlqQ==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-20.1.0.tgz", + "integrity": "sha512-clus5EAlvUvTy6e5VlbvFbRC1mv1wYr+GafKOhIFG+af2eKQz5VSsfKMmBkk7ZigtFklP2BTi9RD2QYMmb6qHQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/core": "^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0", - "@angular/material": "20.0.0-rc.0", + "@angular/core": "^20.0.0 || ^21.0.0", + "@angular/material": "20.1.0", "moment": "^2.18.1" } }, "node_modules/@angular/platform-browser": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.0.0-rc.0.tgz", - "integrity": "sha512-mu2g1PNJkGCJxyCA366nGQt3abX9jx+VTcPR1PRaLqY/sGzA42sYJTG/M74CIpfnx9Sxb1hD3/XCB3xbN5rPhw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.1.0.tgz", + "integrity": "sha512-l3+Ijq5SFxT0v10DbOyMc7NzGdbK76yot2i8pXyArlPSPmpWvbbjXbiBqzrv3TSTrksHBhG3mMvyhTmHQ1cQFA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "20.0.0-rc.0", - "@angular/common": "20.0.0-rc.0", - "@angular/core": "20.0.0-rc.0" + "@angular/animations": "20.1.0", + "@angular/common": "20.1.0", + "@angular/core": "20.1.0" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1353,38 +1451,38 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.0.0-rc.0.tgz", - "integrity": "sha512-wkPfi5dYJippGMGDtkUZUY5hOGvwW9gumkO4CH8b0xH4D5I58LSbvaq2LwvNrM8VDJ7K7NCSjjjOzQ+0o5FLaA==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.1.0.tgz", + "integrity": "sha512-s+Rm2akzYTE2UFdXZPvf02TxDCDskGdUxAxa/jmJbVuOpniuY0RlbnxIKDUD0qj3bYMUkbr7f2KJwHVldqJP6w==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.0.0-rc.0", - "@angular/compiler": "20.0.0-rc.0", - "@angular/core": "20.0.0-rc.0", - "@angular/platform-browser": "20.0.0-rc.0" + "@angular/common": "20.1.0", + "@angular/compiler": "20.1.0", + "@angular/core": "20.1.0", + "@angular/platform-browser": "20.1.0" } }, "node_modules/@angular/router": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.0.0-rc.0.tgz", - "integrity": "sha512-QkViBejo2xZwyGMHcM7NJh8QxhrAEeNq58Yoph6owzGb1/LMArVvZgoJAJC8HW3ojHN8xFUIfgxM4sFjjcw0dA==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.1.0.tgz", + "integrity": "sha512-fuUX1+AhcVSDgSSx85o6VOtXKM3oXAza+44jQ+nJGf316P0xpLKA586DKRNPjS4sRsWM7otKuOOTXXc4AMUHpQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.0.0-rc.0", - "@angular/core": "20.0.0-rc.0", - "@angular/platform-browser": "20.0.0-rc.0", + "@angular/common": "20.1.0", + "@angular/core": "20.1.0", + "@angular/platform-browser": "20.1.0", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -1403,30 +1501,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", - "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.7.tgz", + "integrity": "sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.27.7", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.7", + "@babel/types": "^7.27.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1457,13 +1555,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", - "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.1", - "@babel/types": "^7.27.1", + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -1473,13 +1571,13 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz", - "integrity": "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.1" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -1571,22 +1669,31 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.10" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", @@ -1615,14 +1722,14 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", - "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -1760,25 +1867,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", - "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", - "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.1" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -2002,9 +2109,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.1.tgz", - "integrity": "sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", + "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2052,18 +2159,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", - "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", + "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.27.1", - "globals": "^11.1.0" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -2090,13 +2197,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.1.tgz", - "integrity": "sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -2438,16 +2546,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.2.tgz", - "integrity": "sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", + "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.1", - "@babel/plugin-transform-parameters": "^7.27.1" + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -2507,9 +2616,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", - "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dev": true, "license": "MIT", "dependencies": { @@ -2574,9 +2683,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.1.tgz", - "integrity": "sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.0.tgz", + "integrity": "sha512-LOAozRVbqxEVjSKfhGnuLoE4Kz4Oc5UJzuvFUhSsQzdCdaAQu06mG8zDv2GFSerM62nImUZ7K92vxnQcLSDlCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2623,9 +2732,9 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.1.tgz", - "integrity": "sha512-TqGF3desVsTcp3WrJGj4HfKokfCXCLcHpt4PJF0D8/iT6LPd9RS82Upw3KPeyr6B22Lfd3DO8MVrmp0oRkUDdw==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz", + "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==", "dev": true, "license": "MIT", "dependencies": { @@ -2911,9 +3020,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", - "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", "dev": true, "license": "MIT", "engines": { @@ -2935,27 +3044,43 @@ } }, "node_modules/@babel/traverse": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", - "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", - "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz", + "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -2986,9 +3111,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", - "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", "cpu": [ "ppc64" ], @@ -3003,9 +3128,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", - "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", "cpu": [ "arm" ], @@ -3020,9 +3145,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", - "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", "cpu": [ "arm64" ], @@ -3037,9 +3162,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", - "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", "cpu": [ "x64" ], @@ -3054,9 +3179,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", - "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", "cpu": [ "arm64" ], @@ -3071,9 +3196,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", - "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", "cpu": [ "x64" ], @@ -3088,9 +3213,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", - "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", "cpu": [ "arm64" ], @@ -3105,9 +3230,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", - "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", "cpu": [ "x64" ], @@ -3122,9 +3247,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", - "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", "cpu": [ "arm" ], @@ -3139,9 +3264,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", - "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", "cpu": [ "arm64" ], @@ -3156,9 +3281,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", - "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", "cpu": [ "ia32" ], @@ -3173,9 +3298,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", - "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", "cpu": [ "loong64" ], @@ -3190,9 +3315,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", - "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", "cpu": [ "mips64el" ], @@ -3207,9 +3332,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", - "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", "cpu": [ "ppc64" ], @@ -3224,9 +3349,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", - "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", "cpu": [ "riscv64" ], @@ -3241,9 +3366,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", - "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", "cpu": [ "s390x" ], @@ -3258,9 +3383,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", - "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", "cpu": [ "x64" ], @@ -3275,9 +3400,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", - "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", "cpu": [ "arm64" ], @@ -3292,9 +3417,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", - "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", "cpu": [ "x64" ], @@ -3309,9 +3434,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", - "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", "cpu": [ "arm64" ], @@ -3326,9 +3451,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", - "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", "cpu": [ "x64" ], @@ -3343,9 +3468,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", - "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", "cpu": [ "x64" ], @@ -3360,9 +3485,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", - "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", "cpu": [ "arm64" ], @@ -3377,9 +3502,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", - "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", "cpu": [ "ia32" ], @@ -3394,9 +3519,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", - "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", "cpu": [ "x64" ], @@ -3411,9 +3536,9 @@ } }, "node_modules/@inquirer/figures": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz", - "integrity": "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.12.tgz", + "integrity": "sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==", "dev": true, "license": "MIT", "engines": { @@ -3438,19 +3563,6 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -3518,17 +3630,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -3540,19 +3648,10 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", + "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3561,15 +3660,15 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -3594,9 +3693,9 @@ } }, "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.1.tgz", - "integrity": "sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz", + "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3617,9 +3716,9 @@ } }, "node_modules/@jsonjoy.com/util": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", - "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.6.0.tgz", + "integrity": "sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3641,9 +3740,9 @@ "license": "MIT" }, "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.3.0.tgz", - "integrity": "sha512-LipbQobyEfQtu8WixasaFUZZ+JCGlho4OWwWIQ5ol0rB1RKkcZvypu7sS1CBvofBGVAa3vbOh8IOGQMrbmL5dg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.4.1.tgz", + "integrity": "sha512-kKeP5PaY3bFrrF6GY5aDd96iuh1eoS+5CHJ+7hIP629KIEwzGNwbIzBmEX9TAhRJOivSRDTHCIsbu//+NsYKkg==", "cpu": [ "arm64" ], @@ -3655,9 +3754,9 @@ ] }, "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.3.0.tgz", - "integrity": "sha512-yA+9P+ZeA3vg76BLXWeUomIAjxfmSmR2eg8fueHXDg5Xe1Xmkl9JCKuHXUhtJ+mMVcH12d5k4kJBLbyXTadfGQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.4.1.tgz", + "integrity": "sha512-9CMB3seTyHs3EOVWdKiB8IIEDBJ3Gq00Tqyi0V7DS3HL90BjM/AkbZGuhzXwPrfeFazR24SKaRrUQF74f+CmWw==", "cpu": [ "x64" ], @@ -3669,9 +3768,9 @@ ] }, "node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.3.0.tgz", - "integrity": "sha512-EDYrW9kle+8wI19JCj/PhRnGoCN9bked5cdOPdo1wdgH/HzjgoLPFTn9DHlZccgTEVhp3O+bpWXdN/rWySVvjw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.4.1.tgz", + "integrity": "sha512-1Mi69vU0akHgCI7tF6YbimPaNEKJiBm/p5A+aM8egr0joj27cQmCCOm2mZQ+Ht2BqmCfZaIgQnMg4gFYNMlpCA==", "cpu": [ "arm" ], @@ -3683,9 +3782,9 @@ ] }, "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.3.0.tgz", - "integrity": "sha512-OeWvSgjXXZ/zmtLqqL78I3910F6UYpUubmsUU+iBHo6nTtjkpXms95rJtGrjkWQqwswKBD7xSMplbYC4LEsiPA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.4.1.tgz", + "integrity": "sha512-d0vuXOdoKjHHJYZ/CRWopnkOiUpev+bgBBW+1tXtWsYWUj8uxl9ZmTBEmsL5mjUlpQDrlYiJSrhOU1hg5QWBSw==", "cpu": [ "arm64" ], @@ -3697,9 +3796,9 @@ ] }, "node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.3.0.tgz", - "integrity": "sha512-wDd02mt5ScX4+xd6g78zKBr6ojpgCJCTrllCAabjgap5FzuETqOqaQfKhO+tJuGWv/J5q+GIds6uY7rNFueOxg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.4.1.tgz", + "integrity": "sha512-00RbEpvfnyPodlICiGFuiOmyvWaL9nzCRSqZz82BVFsGTiSQnnF0gpD1C8tO6OvtptELbtRuM7BS9f97LcowZw==", "cpu": [ "x64" ], @@ -3711,9 +3810,9 @@ ] }, "node_modules/@lmdb/lmdb-win32-arm64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.3.0.tgz", - "integrity": "sha512-COotWhHJgzXULLiEjOgWQwqig6PoA+6ji6W+sDl6M1HhMXWIymEVHGs0edsVSNtsNSCAWMxJgR3asv6FNX/2EA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.4.1.tgz", + "integrity": "sha512-4h8tm3i1ODf+28UyqQZLP7c2jmRM26AyEEyYp994B4GiBdGvGAsYUu3oiHANYK9xFpvLuFzyGeqFm1kdNC0D1A==", "cpu": [ "arm64" ], @@ -3725,9 +3824,9 @@ ] }, "node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.3.0.tgz", - "integrity": "sha512-kqUgQH+l8HDbkAapx+aoko7Ez4X4DqkIraOqY/k0QY5EN/iialVlFpBUXh4wFXzirdmEVjbIUMrceUh0Kh8LeA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.4.1.tgz", + "integrity": "sha512-HqqKIhTbq6piJhkJpTTf3w1m/CgrmwXRAL9R9j7Ru5xdZSeO7Mg4AWiBC9B00uXR+LvVZKtUyRMVZfhmIZztmQ==", "cpu": [ "x64" ], @@ -3738,6 +3837,54 @@ "win32" ] }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.13.3.tgz", + "integrity": "sha512-bGwA78F/U5G2jrnsdRkPY3IwIwZeWUEfb5o764b79lb0rJmMT76TLwKhdNZOWakOQtedYefwIR4emisEMvInKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.6", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", @@ -3823,9 +3970,9 @@ ] }, "node_modules/@napi-rs/nice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz", - "integrity": "sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.4.tgz", + "integrity": "sha512-Sqih1YARrmMoHlXGgI9JrrgkzxcaaEso0AH+Y7j8NHonUs+xe4iDsgC3IBIDNdzEewbNpccNN6hip+b5vmyRLw==", "dev": true, "license": "MIT", "optional": true, @@ -3837,28 +3984,28 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.0.1", - "@napi-rs/nice-android-arm64": "1.0.1", - "@napi-rs/nice-darwin-arm64": "1.0.1", - "@napi-rs/nice-darwin-x64": "1.0.1", - "@napi-rs/nice-freebsd-x64": "1.0.1", - "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", - "@napi-rs/nice-linux-arm64-gnu": "1.0.1", - "@napi-rs/nice-linux-arm64-musl": "1.0.1", - "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", - "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", - "@napi-rs/nice-linux-s390x-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-musl": "1.0.1", - "@napi-rs/nice-win32-arm64-msvc": "1.0.1", - "@napi-rs/nice-win32-ia32-msvc": "1.0.1", - "@napi-rs/nice-win32-x64-msvc": "1.0.1" + "@napi-rs/nice-android-arm-eabi": "1.0.4", + "@napi-rs/nice-android-arm64": "1.0.4", + "@napi-rs/nice-darwin-arm64": "1.0.4", + "@napi-rs/nice-darwin-x64": "1.0.4", + "@napi-rs/nice-freebsd-x64": "1.0.4", + "@napi-rs/nice-linux-arm-gnueabihf": "1.0.4", + "@napi-rs/nice-linux-arm64-gnu": "1.0.4", + "@napi-rs/nice-linux-arm64-musl": "1.0.4", + "@napi-rs/nice-linux-ppc64-gnu": "1.0.4", + "@napi-rs/nice-linux-riscv64-gnu": "1.0.4", + "@napi-rs/nice-linux-s390x-gnu": "1.0.4", + "@napi-rs/nice-linux-x64-gnu": "1.0.4", + "@napi-rs/nice-linux-x64-musl": "1.0.4", + "@napi-rs/nice-win32-arm64-msvc": "1.0.4", + "@napi-rs/nice-win32-ia32-msvc": "1.0.4", + "@napi-rs/nice-win32-x64-msvc": "1.0.4" } }, "node_modules/@napi-rs/nice-android-arm-eabi": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz", - "integrity": "sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.4.tgz", + "integrity": "sha512-OZFMYUkih4g6HCKTjqJHhMUlgvPiDuSLZPbPBWHLjKmFTv74COzRlq/gwHtmEVaR39mJQ6ZyttDl2HNMUbLVoA==", "cpu": [ "arm" ], @@ -3873,9 +4020,9 @@ } }, "node_modules/@napi-rs/nice-android-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz", - "integrity": "sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.4.tgz", + "integrity": "sha512-k8u7cjeA64vQWXZcRrPbmwjH8K09CBnNaPnI9L1D5N6iMPL3XYQzLcN6WwQonfcqCDv5OCY3IqX89goPTV4KMw==", "cpu": [ "arm64" ], @@ -3890,9 +4037,9 @@ } }, "node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz", - "integrity": "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-GsLdQvUcuVzoyzmtjsThnpaVEizAqH5yPHgnsBmq3JdVoVZHELFo7PuJEdfOH1DOHi2mPwB9sCJEstAYf3XCJA==", "cpu": [ "arm64" ], @@ -3907,9 +4054,9 @@ } }, "node_modules/@napi-rs/nice-darwin-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz", - "integrity": "sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.4.tgz", + "integrity": "sha512-1y3gyT3e5zUY5SxRl3QDtJiWVsbkmhtUHIYwdWWIQ3Ia+byd/IHIEpqAxOGW1nhhnIKfTCuxBadHQb+yZASVoA==", "cpu": [ "x64" ], @@ -3924,9 +4071,9 @@ } }, "node_modules/@napi-rs/nice-freebsd-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz", - "integrity": "sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.4.tgz", + "integrity": "sha512-06oXzESPRdXUuzS8n2hGwhM2HACnDfl3bfUaSqLGImM8TA33pzDXgGL0e3If8CcFWT98aHows5Lk7xnqYNGFeA==", "cpu": [ "x64" ], @@ -3941,9 +4088,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz", - "integrity": "sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.4.tgz", + "integrity": "sha512-CgklZ6g8WL4+EgVVkxkEvvsi2DSLf9QIloxWO0fvQyQBp6VguUSX3eHLeRpqwW8cRm2Hv/Q1+PduNk7VK37VZw==", "cpu": [ "arm" ], @@ -3958,9 +4105,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz", - "integrity": "sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.4.tgz", + "integrity": "sha512-wdAJ7lgjhAlsANUCv0zi6msRwq+D4KDgU+GCCHssSxWmAERZa2KZXO0H2xdmoJ/0i03i6YfK/sWaZgUAyuW2oQ==", "cpu": [ "arm64" ], @@ -3975,9 +4122,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm64-musl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz", - "integrity": "sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.4.tgz", + "integrity": "sha512-4b1KYG+sriufhFrpUS9uNOEYYJqSfcbnwGx6uGX7JjrH8tELG90cOpCawz5THNIwlS3DhLgnCOcn0+4p6z26QA==", "cpu": [ "arm64" ], @@ -3992,9 +4139,9 @@ } }, "node_modules/@napi-rs/nice-linux-ppc64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz", - "integrity": "sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.4.tgz", + "integrity": "sha512-iaf3vMRgr23oe1PUaKpxaH3DS0IMN0+N9iEiWVwYPm/U15vZFYdqVegGfN2PzrZLUl5lc8ZxbmEKDfuqslhAMA==", "cpu": [ "ppc64" ], @@ -4009,9 +4156,9 @@ } }, "node_modules/@napi-rs/nice-linux-riscv64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz", - "integrity": "sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.4.tgz", + "integrity": "sha512-UXoREY6Yw6rHrGuTwQgBxpfjK34t6mTjibE9/cXbefL9AuUCJ9gEgwNKZiONuR5QGswChqo9cnthjdKkYyAdDg==", "cpu": [ "riscv64" ], @@ -4026,9 +4173,9 @@ } }, "node_modules/@napi-rs/nice-linux-s390x-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz", - "integrity": "sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.4.tgz", + "integrity": "sha512-eFbgYCRPmsqbYPAlLYU5hYTNbogmIDUvknilehHsFhCH1+0/kN87lP+XaLT0Yeq4V/rpwChSd9vlz4muzFArtw==", "cpu": [ "s390x" ], @@ -4043,9 +4190,9 @@ } }, "node_modules/@napi-rs/nice-linux-x64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz", - "integrity": "sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.4.tgz", + "integrity": "sha512-4T3E6uTCwWT6IPnwuPcWVz3oHxvEp/qbrCxZhsgzwTUBEwu78EGNXGdHfKJQt3soth89MLqZJw+Zzvnhrsg1mQ==", "cpu": [ "x64" ], @@ -4060,9 +4207,9 @@ } }, "node_modules/@napi-rs/nice-linux-x64-musl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz", - "integrity": "sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.4.tgz", + "integrity": "sha512-NtbBkAeyBPLvCBkWtwkKXkNSn677eaT0cX3tygq+2qVv71TmHgX4gkX6o9BXjlPzdgPGwrUudavCYPT9tzkEqQ==", "cpu": [ "x64" ], @@ -4077,9 +4224,9 @@ } }, "node_modules/@napi-rs/nice-win32-arm64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz", - "integrity": "sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.4.tgz", + "integrity": "sha512-vubOe3i+YtSJGEk/++73y+TIxbuVHi+W8ZzrRm2eETCjCRwNlgbfToQZ85dSA+4iBB/NJRGNp+O4hfdbbttZWA==", "cpu": [ "arm64" ], @@ -4094,9 +4241,9 @@ } }, "node_modules/@napi-rs/nice-win32-ia32-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz", - "integrity": "sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.4.tgz", + "integrity": "sha512-BMOVrUDZeg1RNRKVlh4eyLv5djAAVLiSddfpuuQ47EFjBcklg0NUeKMFKNrKQR4UnSn4HAiACLD7YK7koskwmg==", "cpu": [ "ia32" ], @@ -4111,9 +4258,9 @@ } }, "node_modules/@napi-rs/nice-win32-x64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz", - "integrity": "sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.4.tgz", + "integrity": "sha512-kCNk6HcRZquhw/whwh4rHsdPyOSCQCgnVDVik+Y9cuSVTDy3frpiCJTScJqPPS872h4JgZKkr/+CwcwttNEo9Q==", "cpu": [ "x64" ], @@ -4128,18 +4275,18 @@ } }, "node_modules/@ngtools/webpack": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.0.0-rc.0.tgz", - "integrity": "sha512-bawbfDlbvFz6De4oV2n9wpFNTWOSIxmbs+fqZcrSenP1SUiN1iVGRQBibk/q1rvutN0nWdPRsQFmRe4JeTDgkw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.1.0.tgz", + "integrity": "sha512-v+Mdg+NIvkWJYWcuHCQeRC4/Wov8RxNEF8eiCPFmQGmXJllIWUybY/o9lysG1TY4j/2H56VinIBYbeK/VIBYvg==", "dev": true, "license": "MIT", "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^20.0.0 || ^20.0.0-next.0", + "@angular/compiler-cli": "^20.0.0", "typescript": ">=5.8 <5.9", "webpack": "^5.54.0" } @@ -4300,9 +4447,9 @@ } }, "node_modules/@npmcli/package-json": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.1.1.tgz", - "integrity": "sha512-d5qimadRAUCO4A/Txw71VM7UrRZzV+NPclxz/dc+M6B2oYwjWTjqh8HA/sGQgs9VZuJ6I/P7XIAlJvgrl27ZOw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", + "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", "dev": true, "license": "ISC", "dependencies": { @@ -4319,9 +4466,9 @@ } }, "node_modules/@npmcli/package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4405,9 +4552,9 @@ } }, "node_modules/@npmcli/redact": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.1.1.tgz", - "integrity": "sha512-3Hc2KGIkrvJWJqTbvueXzBeZlmvoOxc2jyX00yzr3+sNFquJg0N8hH4SAPLPVrkWIRQICVpVgjrss971awXVnA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", "dev": true, "license": "ISC", "engines": { @@ -4415,9 +4562,9 @@ } }, "node_modules/@npmcli/run-script": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.0.2.tgz", - "integrity": "sha512-cJXiUlycdizQwvqE1iaAb4VRUM3RX09/8q46zjvy+ct9GhfZRWd7jXYVc1tn/CfRlGPVkX/u4sstRlepsm7hfw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", "dev": true, "license": "ISC", "dependencies": { @@ -4780,9 +4927,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", - "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.1.tgz", + "integrity": "sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==", "cpu": [ "arm" ], @@ -4794,9 +4941,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz", - "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.1.tgz", + "integrity": "sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==", "cpu": [ "arm64" ], @@ -4808,9 +4955,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz", - "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.1.tgz", + "integrity": "sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==", "cpu": [ "arm64" ], @@ -4822,9 +4969,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz", - "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.1.tgz", + "integrity": "sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==", "cpu": [ "x64" ], @@ -4836,9 +4983,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz", - "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.1.tgz", + "integrity": "sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==", "cpu": [ "arm64" ], @@ -4850,9 +4997,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz", - "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.1.tgz", + "integrity": "sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==", "cpu": [ "x64" ], @@ -4864,9 +5011,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz", - "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.1.tgz", + "integrity": "sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==", "cpu": [ "arm" ], @@ -4878,9 +5025,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz", - "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.1.tgz", + "integrity": "sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==", "cpu": [ "arm" ], @@ -4892,9 +5039,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz", - "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.1.tgz", + "integrity": "sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==", "cpu": [ "arm64" ], @@ -4906,9 +5053,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz", - "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.1.tgz", + "integrity": "sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==", "cpu": [ "arm64" ], @@ -4920,9 +5067,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz", - "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.1.tgz", + "integrity": "sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==", "cpu": [ "loong64" ], @@ -4934,9 +5081,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", - "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.1.tgz", + "integrity": "sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==", "cpu": [ "ppc64" ], @@ -4948,9 +5095,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", - "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.1.tgz", + "integrity": "sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==", "cpu": [ "riscv64" ], @@ -4962,9 +5109,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", - "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.1.tgz", + "integrity": "sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==", "cpu": [ "riscv64" ], @@ -4976,9 +5123,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", - "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.1.tgz", + "integrity": "sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==", "cpu": [ "s390x" ], @@ -4990,9 +5137,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", - "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.1.tgz", + "integrity": "sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==", "cpu": [ "x64" ], @@ -5004,9 +5151,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", - "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.1.tgz", + "integrity": "sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==", "cpu": [ "x64" ], @@ -5018,9 +5165,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", - "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.1.tgz", + "integrity": "sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==", "cpu": [ "arm64" ], @@ -5032,9 +5179,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", - "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.1.tgz", + "integrity": "sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==", "cpu": [ "ia32" ], @@ -5046,9 +5193,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", - "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.1.tgz", + "integrity": "sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==", "cpu": [ "x64" ], @@ -5060,18 +5207,18 @@ ] }, "node_modules/@schematics/angular": { - "version": "20.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.0.0-rc.0.tgz", - "integrity": "sha512-LLsoqOO5waTnqvpa5zI9PyltHr/mKRrzznGzQ5IDDHKk8Vm1KgVd0+MHOPXHPCNPDgARbARM/yXwPa5dqeOYlA==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.1.0.tgz", + "integrity": "sha512-sAEwygjY/j0tvo+EDFUAc54Hfp++K43ISe1/fdCU/M3Pseuf7oPPIm6VxxTrRc6fu4Lp5DBaD/PBkXNt/FqZpg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.0.0-rc.0", - "@angular-devkit/schematics": "20.0.0-rc.0", + "@angular-devkit/core": "20.1.0", + "@angular-devkit/schematics": "20.1.0", "jsonc-parser": "3.3.1" }, "engines": { - "node": "^20.11.1 || ^22.11.0 || >=24.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } @@ -5100,9 +5247,9 @@ } }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.0.tgz", - "integrity": "sha512-o09cLSIq9EKyRXwryWDOJagkml9XgQCoCSRjHOnHLnvsivaW7Qznzz6yjfV7PHJHhIvyp8OH7OX8w0Dc5bQK7A==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", + "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -5128,13 +5275,13 @@ } }, "node_modules/@sigstore/tuf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.0.tgz", - "integrity": "sha512-suVMQEA+sKdOz5hwP9qNcEjX6B45R+hFFr4LAWzbRc5O+U2IInwvay/bpG5a4s+qR35P/JK/PiKiRGjfuLy1IA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", + "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/protobuf-specs": "^0.4.1", "tuf-js": "^3.0.1" }, "engines": { @@ -5142,15 +5289,15 @@ } }, "node_modules/@sigstore/verify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.0.tgz", - "integrity": "sha512-kAAM06ca4CzhvjIZdONAL9+MLppW3K48wOFy1TbuaWFW/OMfl8JuTgW0Bm02JB1WJGT/ET2eqav0KTEKmxqkIA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", + "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", "dev": true, "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0" + "@sigstore/protobuf-specs": "^0.4.1" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -5188,9 +5335,9 @@ } }, "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5227,9 +5374,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" @@ -5246,18 +5393,18 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, "license": "MIT", "dependencies": { @@ -5297,9 +5444,9 @@ } }, "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", "dev": true, "license": "MIT", "dependencies": { @@ -5329,16 +5476,16 @@ } }, "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5349,19 +5496,6 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { "version": "4.19.6", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", @@ -5375,9 +5509,9 @@ } }, "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", "dev": true, "license": "MIT" }, @@ -5420,9 +5554,9 @@ "license": "MIT" }, "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.13.tgz", + "integrity": "sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww==", "dev": true, "license": "MIT", "dependencies": { @@ -5430,9 +5564,9 @@ } }, "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "dev": true, "license": "MIT" }, @@ -5451,9 +5585,9 @@ "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", "dev": true, "license": "MIT", "dependencies": { @@ -5472,9 +5606,9 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", "dev": true, "license": "MIT", "dependencies": { @@ -5494,9 +5628,9 @@ } }, "node_modules/@types/ws": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", - "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, "license": "MIT", "dependencies": { @@ -5686,9 +5820,9 @@ "license": "BSD-2-Clause" }, "node_modules/abbrev": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.0.tgz", - "integrity": "sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "dev": true, "license": "ISC", "engines": { @@ -5696,33 +5830,23 @@ } }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "dev": true, "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -5762,9 +5886,9 @@ } }, "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", "engines": { @@ -5862,7 +5986,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -5872,15 +5995,12 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -5983,14 +6103,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { @@ -6022,13 +6142,13 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" + "@babel/helper-define-polyfill-provider": "^0.6.5" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -6041,27 +6161,6 @@ "dev": true, "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -6080,9 +6179,9 @@ "license": "MIT" }, "node_modules/beasties": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.3.tgz", - "integrity": "sha512-Mba3V4hTPrM7P2CSidueg71JZ0G+DyK7maBqp4/uax/PQznwdFti9cOW6Z3lTxBRH84kRICN0TyQ0MSSmufaAw==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.4.tgz", + "integrity": "sha512-NmzN1zN1cvGccXFyZ73335+ASXwBlVWcUPssiUDIlFdfyatHPRRufjCd5w8oPaQPvVnf9ELklaCGb1gi9FBwIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6122,60 +6221,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node": ">=18" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, "node_modules/bonjour-service": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", @@ -6195,9 +6261,9 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -6219,9 +6285,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "funding": [ { "type": "opencollective", @@ -6238,10 +6304,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -6250,31 +6316,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -6333,9 +6374,9 @@ } }, "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6455,14 +6496,14 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -6482,9 +6523,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001717", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz", - "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==", + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", "funding": [ { "type": "opencollective", @@ -6502,17 +6543,13 @@ "license": "CC-BY-4.0" }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" @@ -6617,140 +6654,65 @@ } }, "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=12" + "node": ">=20" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "node": ">=7.0.0" } }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/colorette": { @@ -6869,6 +6831,35 @@ "ms": "2.0.0" } }, + "node_modules/connect/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -6876,10 +6867,33 @@ "dev": true, "license": "MIT" }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "dev": true, "license": "MIT", "dependencies": { @@ -6916,11 +6930,14 @@ } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } }, "node_modules/copy-anything": { "version": "2.0.6", @@ -6960,13 +6977,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", - "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "version": "3.44.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz", + "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.4" + "browserslist": "^4.25.1" }, "funding": { "type": "opencollective", @@ -7036,22 +7053,6 @@ "node": ">= 8" } }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/css-loader": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", @@ -7089,9 +7090,9 @@ } }, "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7106,9 +7107,9 @@ } }, "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -7149,9 +7150,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -7195,19 +7196,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", @@ -7311,6 +7299,19 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -7385,16 +7386,15 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.109", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.109.tgz", - "integrity": "sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ==", + "version": "1.5.182", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.182.tgz", + "integrity": "sha512-Lv65Btwv9W4J9pyODI6EWpdnhfvrve/us5h1WspW8B2Fb0366REPtY3hX7ounk1CkV/TBjWCEvCBBbYbmV0qCA==", "license": "ISC" }, "node_modules/emoji-regex": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, "license": "MIT" }, "node_modules/emojis-list": { @@ -7408,9 +7408,9 @@ } }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, "license": "MIT", "engines": { @@ -7428,20 +7428,6 @@ "iconv-lite": "^0.6.2" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/engine.io": { "version": "6.6.4", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", @@ -7473,6 +7459,20 @@ "node": ">=10.0.0" } }, + "node_modules/engine.io/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/engine.io/node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -7491,10 +7491,43 @@ } } }, + "node_modules/engine.io/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7522,9 +7555,9 @@ } }, "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -7608,9 +7641,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, @@ -7628,9 +7661,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", - "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -7641,37 +7674,37 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.4", - "@esbuild/android-arm": "0.25.4", - "@esbuild/android-arm64": "0.25.4", - "@esbuild/android-x64": "0.25.4", - "@esbuild/darwin-arm64": "0.25.4", - "@esbuild/darwin-x64": "0.25.4", - "@esbuild/freebsd-arm64": "0.25.4", - "@esbuild/freebsd-x64": "0.25.4", - "@esbuild/linux-arm": "0.25.4", - "@esbuild/linux-arm64": "0.25.4", - "@esbuild/linux-ia32": "0.25.4", - "@esbuild/linux-loong64": "0.25.4", - "@esbuild/linux-mips64el": "0.25.4", - "@esbuild/linux-ppc64": "0.25.4", - "@esbuild/linux-riscv64": "0.25.4", - "@esbuild/linux-s390x": "0.25.4", - "@esbuild/linux-x64": "0.25.4", - "@esbuild/netbsd-arm64": "0.25.4", - "@esbuild/netbsd-x64": "0.25.4", - "@esbuild/openbsd-arm64": "0.25.4", - "@esbuild/openbsd-x64": "0.25.4", - "@esbuild/sunos-x64": "0.25.4", - "@esbuild/win32-arm64": "0.25.4", - "@esbuild/win32-ia32": "0.25.4", - "@esbuild/win32-x64": "0.25.4" + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" } }, "node_modules/esbuild-wasm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.4.tgz", - "integrity": "sha512-2HlCS6rNvKWaSKhWaG/YIyRsTsL3gUrMP2ToZMBIjw9LM7vVcIs+rz8kE2vExvTJgvM8OKPqNpcHawY/BQc/qQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.5.tgz", + "integrity": "sha512-V/rbdOws2gDcnCAECfPrajhuafI0WY4WumUgc8ZHwOLnvmM0doLQ+dqvVFI2qkVxQsvo6880aC9IjpyDqcwwTw==", "dev": true, "license": "MIT", "bin": { @@ -7781,124 +7814,93 @@ "node": ">=0.8.x" } }, - "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", "dev": true, "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "eventsource-parser": "^3.0.1" }, "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=18.0.0" } }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "node_modules/eventsource-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.3.tgz", + "integrity": "sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node": ">=20.0.0" } }, - "node_modules/express/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "license": "Apache-2.0" }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">= 0.8" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" } }, "node_modules/extend": { @@ -7923,6 +7925,19 @@ "node": ">=4" } }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/external-editor/node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -7973,6 +7988,13 @@ "node": ">= 6" } }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-uri": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", @@ -8014,9 +8036,9 @@ } }, "node_modules/fdir": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", - "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" @@ -8041,49 +8063,18 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "dev": true, "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { "node": ">= 0.8" @@ -8186,13 +8177,13 @@ } }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/fs-extra": { @@ -8277,7 +8268,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -8367,15 +8357,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -8456,9 +8437,9 @@ } }, "node_modules/hosted-git-info": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz", - "integrity": "sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", "dev": true, "license": "ISC", "dependencies": { @@ -8548,23 +8529,10 @@ "entities": "^6.0.0" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", - "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, "license": "BSD-2-Clause" }, @@ -8603,9 +8571,9 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", - "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", "dev": true, "license": "MIT" }, @@ -8681,13 +8649,13 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -8706,27 +8674,6 @@ "postcss": "^8.1.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, "node_modules/ignore-walk": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", @@ -8741,9 +8688,9 @@ } }, "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8781,9 +8728,9 @@ } }, "node_modules/immutable": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", - "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", "dev": true, "license": "MIT" }, @@ -8858,13 +8805,13 @@ } }, "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 0.10" } }, "node_modules/is-arrayish": { @@ -8975,13 +8922,16 @@ } }, "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-network-error": { @@ -9030,6 +8980,13 @@ "node": ">=0.10.0" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -9050,13 +9007,13 @@ } }, "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9220,9 +9177,9 @@ } }, "node_modules/jasmine-core": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.7.1.tgz", - "integrity": "sha512-QnurrtpKsPoixxG2R3d1xP0St/2kcX5oTZyDyQJMY+Vzi/HUlu1kGm+2V8Tz+9lV991leB1l0xcsyz40s9xOOw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.8.0.tgz", + "integrity": "sha512-Q9dqmpUAfptwyueW3+HqBOkSuYd9I/clZSSfN97wXE/Nr2ROFNCwIBEC1F6kb3QXS9Fcz0LjFYSDQT+BiwjuhA==", "dev": true, "license": "MIT" }, @@ -9410,6 +9367,19 @@ "which": "^1.2.1" } }, + "node_modules/karma-chrome-launcher/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/karma-coverage": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", @@ -9456,37 +9426,37 @@ } }, "node_modules/karma-jasmine": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.2.tgz", - "integrity": "sha512-ggi84RMNQffSDmWSyyt4zxzh2CQGwsxvYYsprgyR1j8ikzIduEdOlcLvXjZGwXG/0j41KUXOWsUCBfbEHPWP9g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.0.1.tgz", + "integrity": "sha512-FkL1Kk+JAKmim8VWU8RXKZBpl0lLI7J8LijM0/q7oP7emfB6QMZV1Az+JgqGKSLpF0tYaav+KUVFQroZUxQTHA==", "dev": true, "license": "MIT", "dependencies": { - "jasmine-core": "^3.6.0" + "jasmine-core": "^4.1.0" }, "engines": { - "node": ">= 10" + "node": ">=12" }, "peerDependencies": { - "karma": "*" + "karma": "^6.0.0" } }, "node_modules/karma-jasmine-html-reporter": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", - "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", "dev": true, "license": "MIT", "peerDependencies": { - "jasmine-core": ">=3.8", - "karma": ">=0.9", - "karma-jasmine": ">=1.1" + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" } }, "node_modules/karma-jasmine/node_modules/jasmine-core": { - "version": "3.99.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz", - "integrity": "sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", + "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", "dev": true, "license": "MIT" }, @@ -9510,11 +9480,52 @@ "node": ">=8" } }, - "node_modules/karma/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, + "node_modules/karma/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/karma/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/karma/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -9547,6 +9558,16 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/karma/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, "node_modules/karma/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -9567,6 +9588,19 @@ "node": ">= 6" } }, + "node_modules/karma/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/karma/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -9577,6 +9611,46 @@ "node": ">=8" } }, + "node_modules/karma/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/karma/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/karma/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/karma/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/karma/node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -9590,6 +9664,38 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/karma/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/karma/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/karma/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -9641,6 +9747,20 @@ "node": ">=8" } }, + "node_modules/karma/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/karma/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -9865,9 +9985,9 @@ "license": "MIT" }, "node_modules/lmdb": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.3.0.tgz", - "integrity": "sha512-MgJocUI6QEiSXQBFWLeyo1R7eQj8Rke5dlPxX0KFwli8/bsCxpM/KbXO5y0qmV/5llQ3wpneDWcTYxa+4vn8iQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.4.1.tgz", + "integrity": "sha512-hoG9RIv42kdGJiieyElgWcKCTaw5S6Jqwyd1gLSVdsJ3+8MVm8e4yLronThiRJI9DazFAAs9xfB9nWeMQ2DWKA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -9883,13 +10003,13 @@ "download-lmdb-prebuilds": "bin/download-prebuilds.js" }, "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "3.3.0", - "@lmdb/lmdb-darwin-x64": "3.3.0", - "@lmdb/lmdb-linux-arm": "3.3.0", - "@lmdb/lmdb-linux-arm64": "3.3.0", - "@lmdb/lmdb-linux-x64": "3.3.0", - "@lmdb/lmdb-win32-arm64": "3.3.0", - "@lmdb/lmdb-win32-x64": "3.3.0" + "@lmdb/lmdb-darwin-arm64": "3.4.1", + "@lmdb/lmdb-darwin-x64": "3.4.1", + "@lmdb/lmdb-linux-arm": "3.4.1", + "@lmdb/lmdb-linux-arm64": "3.4.1", + "@lmdb/lmdb-linux-x64": "3.4.1", + "@lmdb/lmdb-win32-arm64": "3.4.1", + "@lmdb/lmdb-win32-x64": "3.4.1" } }, "node_modules/lmdb/node_modules/node-addon-api": { @@ -9951,17 +10071,30 @@ "license": "MIT" }, "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9987,19 +10120,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", @@ -10119,19 +10239,19 @@ } }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/memfs": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.0.tgz", - "integrity": "sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.2.tgz", + "integrity": "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10149,11 +10269,14 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "dev": true, "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -10226,9 +10349,9 @@ } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, "license": "MIT", "engines": { @@ -10236,28 +10359,18 @@ } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/mimic-function": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", @@ -10463,82 +10576,18 @@ "license": "ISC" }, "node_modules/minizlib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", - "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" + "minipass": "^7.1.2" }, "engines": { "node": ">= 18" } }, - "node_modules/minizlib/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/minizlib/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minizlib/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minizlib/node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -10578,9 +10627,9 @@ "license": "MIT" }, "node_modules/msgpackr": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.2.tgz", - "integrity": "sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==", + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.4.tgz", + "integrity": "sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg==", "dev": true, "license": "MIT", "optional": true, @@ -10636,9 +10685,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -10672,20 +10721,6 @@ "node": ">= 4.4.x" } }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -10722,21 +10757,21 @@ } }, "node_modules/node-gyp": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.1.0.tgz", - "integrity": "sha512-/+7TuHKnBpnMvUQnsYEb0JOozDZqarQbfNuSGLXIjhStMT0fbw7IdSqWgopOP5xhRZE+lsbIvAHcekddruPZgQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz", + "integrity": "sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==", "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", "make-fetch-happen": "^14.0.3", "nopt": "^8.0.0", "proc-log": "^5.0.0", "semver": "^7.3.5", "tar": "^7.4.3", + "tinyglobby": "^0.2.12", "which": "^5.0.0" }, "bin": { @@ -10763,9 +10798,9 @@ } }, "node_modules/node-gyp-build-optional-packages/node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -10773,16 +10808,6 @@ "node": ">=8" } }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/node-gyp/node_modules/chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", @@ -10793,27 +10818,6 @@ "node": ">=18" } }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/node-gyp/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -10824,22 +10828,6 @@ "node": ">=16" } }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/node-gyp/node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", @@ -10995,16 +10983,16 @@ } }, "node_modules/npm-packlist": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-9.0.0.tgz", - "integrity": "sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.0.tgz", + "integrity": "sha512-rht9U6nS8WOBDc53eipZNPo5qkAV4X2rhKE2Oj1DYUQ3DieXfj0mKkVmjnf3iuNdtMd8WfLdi2L6ASkD/8a+Kg==", "dev": true, "license": "ISC", "dependencies": { "ignore-walk": "^7.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-pick-manifest": { @@ -11155,106 +11143,33 @@ } }, "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ordered-binary": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.3.tgz", - "integrity": "sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.0.tgz", + "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==", "dev": true, "license": "MIT", "optional": true @@ -11350,9 +11265,9 @@ "license": "BlueOak-1.0.0" }, "node_modules/pacote": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-20.0.0.tgz", - "integrity": "sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.0.tgz", + "integrity": "sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA==", "dev": true, "license": "ISC", "dependencies": { @@ -11365,7 +11280,7 @@ "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^12.0.0", - "npm-packlist": "^9.0.0", + "npm-packlist": "^10.0.0", "npm-pick-manifest": "^10.0.0", "npm-registry-fetch": "^18.0.0", "proc-log": "^5.0.0", @@ -11378,7 +11293,7 @@ "pacote": "bin/index.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/parent-module": { @@ -11431,12 +11346,12 @@ } }, "node_modules/parse5": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", - "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "license": "MIT", "dependencies": { - "entities": "^4.5.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -11457,19 +11372,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parse5-html-rewriting-stream/node_modules/entities": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", - "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/parse5-sax-parser": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", @@ -11555,11 +11457,14 @@ "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=16" + } }, "node_modules/picocolors": { "version": "1.1.1", @@ -11591,22 +11496,32 @@ } }, "node_modules/piscina": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.0.0.tgz", - "integrity": "sha512-R+arufwL7sZvGjAhSMK3TfH55YdGOqhpKXkcwQJr432AAnJX/xxX19PA4QisrmJ+BTTfZVggaz6HexbkQq1l1Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.2.tgz", + "integrity": "sha512-9cE/BTA/xhDiyNUEj6EKWLEQC17fh/24ydYzQwcA7QdYh75K6kzL2GHvxDF5i9rFGtUaaKk7/u4xp07qiKXccQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=18.x" + "node": ">=20.x" }, "optionalDependencies": { "@napi-rs/nice": "^1.0.1" } }, + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -11624,7 +11539,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -11800,16 +11715,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -11836,13 +11741,13 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -11893,15 +11798,15 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" }, "engines": { @@ -12024,6 +11929,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12182,13 +12088,13 @@ } }, "node_modules/rollup": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", - "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.1.tgz", + "integrity": "sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.7" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -12198,29 +12104,46 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.40.2", - "@rollup/rollup-android-arm64": "4.40.2", - "@rollup/rollup-darwin-arm64": "4.40.2", - "@rollup/rollup-darwin-x64": "4.40.2", - "@rollup/rollup-freebsd-arm64": "4.40.2", - "@rollup/rollup-freebsd-x64": "4.40.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", - "@rollup/rollup-linux-arm-musleabihf": "4.40.2", - "@rollup/rollup-linux-arm64-gnu": "4.40.2", - "@rollup/rollup-linux-arm64-musl": "4.40.2", - "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", - "@rollup/rollup-linux-riscv64-gnu": "4.40.2", - "@rollup/rollup-linux-riscv64-musl": "4.40.2", - "@rollup/rollup-linux-s390x-gnu": "4.40.2", - "@rollup/rollup-linux-x64-gnu": "4.40.2", - "@rollup/rollup-linux-x64-musl": "4.40.2", - "@rollup/rollup-win32-arm64-msvc": "4.40.2", - "@rollup/rollup-win32-ia32-msvc": "4.40.2", - "@rollup/rollup-win32-x64-msvc": "4.40.2", + "@rollup/rollup-android-arm-eabi": "4.44.1", + "@rollup/rollup-android-arm64": "4.44.1", + "@rollup/rollup-darwin-arm64": "4.44.1", + "@rollup/rollup-darwin-x64": "4.44.1", + "@rollup/rollup-freebsd-arm64": "4.44.1", + "@rollup/rollup-freebsd-x64": "4.44.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.44.1", + "@rollup/rollup-linux-arm-musleabihf": "4.44.1", + "@rollup/rollup-linux-arm64-gnu": "4.44.1", + "@rollup/rollup-linux-arm64-musl": "4.44.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.44.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.44.1", + "@rollup/rollup-linux-riscv64-gnu": "4.44.1", + "@rollup/rollup-linux-riscv64-musl": "4.44.1", + "@rollup/rollup-linux-s390x-gnu": "4.44.1", + "@rollup/rollup-linux-x64-gnu": "4.44.1", + "@rollup/rollup-linux-x64-musl": "4.44.1", + "@rollup/rollup-win32-arm64-msvc": "4.44.1", + "@rollup/rollup-win32-ia32-msvc": "4.44.1", + "@rollup/rollup-win32-x64-msvc": "4.44.1", "fsevents": "~2.3.2" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/run-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", @@ -12314,9 +12237,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.87.0.tgz", - "integrity": "sha512-d0NoFH4v6SjEK7BoX810Jsrhj7IQSYHAHLi/iSpgqKc7LaIDshFRlSg5LOymf9FqQhxEHs2W5ZQXlvy0KD45Uw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", + "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", "dev": true, "license": "MIT", "dependencies": { @@ -12443,9 +12366,9 @@ } }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -12455,68 +12378,26 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node": ">= 18" } }, "node_modules/serialize-javascript": { @@ -12548,6 +12429,20 @@ "node": ">= 0.8.0" } }, + "node_modules/serve-index/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-index/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -12591,44 +12486,77 @@ "dev": true, "license": "ISC" }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/serve-index/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true, "license": "ISC" }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.6" } }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "dev": true, "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, "engines": { - "node": ">= 0.8" + "node": ">= 18" } }, "node_modules/setprototypeof": { @@ -12675,9 +12603,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "dev": true, "license": "MIT", "engines": { @@ -12811,19 +12739,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -12915,6 +12830,20 @@ } } }, + "node_modules/socket.io/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/socket.io/node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -12933,6 +12862,39 @@ } } }, + "node_modules/socket.io/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socket.io/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socket.io/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -12946,9 +12908,9 @@ } }, "node_modules/socks": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", - "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.6.tgz", + "integrity": "sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==", "dev": true, "license": "MIT", "dependencies": { @@ -13016,19 +12978,6 @@ "webpack": "^5.72.1" } }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -13139,13 +13088,26 @@ } }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/streamroller": { @@ -13177,7 +13139,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -13251,7 +13212,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -13314,9 +13274,9 @@ } }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", "dev": true, "license": "MIT", "engines": { @@ -13425,14 +13385,14 @@ "license": "ISC" }, "node_modules/terser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.14.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -13444,9 +13404,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.12", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.12.tgz", - "integrity": "sha512-jDLYqo7oF8tJIttjXO6jBY5Hk8p3A8W4ttih7cCEq64fQFWmgJ4VqAQjKr7WwIDlmXKEc6QeoRb5ecjZ+2afcg==", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", "dependencies": { @@ -13499,9 +13459,9 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", - "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", "license": "MIT", "dependencies": { "fdir": "^6.4.4", @@ -13548,9 +13508,9 @@ } }, "node_modules/tree-dump": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", - "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz", + "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -13581,15 +13541,15 @@ "license": "0BSD" }, "node_modules/tuf-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.0.1.tgz", - "integrity": "sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", + "integrity": "sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==", "dev": true, "license": "MIT", "dependencies": { "@tufjs/models": "3.0.1", - "debug": "^4.3.6", - "make-fetch-happen": "^14.0.1" + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -13609,14 +13569,15 @@ } }, "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "dev": true, "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" @@ -13630,9 +13591,10 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -13670,9 +13632,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", "dev": true, "license": "MIT", "optional": true, @@ -13798,6 +13760,26 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -13837,9 +13819,9 @@ } }, "node_modules/validate-npm-package-name": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz", - "integrity": "sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.1.tgz", + "integrity": "sha512-OaI//3H0J7ZkR1OqlhGA8cA+Cbk/2xFOQpJOt5+s27/ta9eZwpeervh4Mxh4w0im/kdgktowaqVNR7QOrUd7Yg==", "dev": true, "license": "ISC", "engines": { @@ -13867,9 +13849,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, "license": "MIT", "dependencies": { @@ -13890,16 +13872,6 @@ "minimalistic-assert": "^1.0.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/weak-lru-cache": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", @@ -13909,9 +13881,9 @@ "optional": true }, "node_modules/webpack": { - "version": "5.99.8", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", - "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "dev": true, "license": "MIT", "dependencies": { @@ -13986,10 +13958,33 @@ } } }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/webpack-dev-server": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.1.tgz", - "integrity": "sha512-ml/0HIj9NLpVKOMq+SuBPLHcmbG+TGIjXRHsYfZwocUBIqEvws8NnS/V9AFQ5FKP+tgn5adwVwRrTEpGL33QFQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "dev": true, "license": "MIT", "dependencies": { @@ -14009,7 +14004,7 @@ "connect-history-api-fallback": "^2.0.0", "express": "^4.21.2", "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.7", + "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", @@ -14044,17 +14039,43 @@ } } }, - "node_modules/webpack-dev-server/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "node_modules/webpack-dev-server/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/webpack-dev-server/node_modules/chokidar": { @@ -14082,25 +14103,148 @@ "fsevents": "~2.3.2" } }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/webpack-dev-server/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">= 6" + "node": ">= 0.6" } }, - "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", - "dev": true, - "license": "MIT", + "node_modules/webpack-dev-server/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/webpack-dev-server/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -14120,6 +14264,102 @@ } } }, + "node_modules/webpack-dev-server/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-server/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true, + "license": "MIT" + }, "node_modules/webpack-dev-server/node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -14133,6 +14373,38 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/webpack-dev-server/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/webpack-dev-server/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/webpack-dev-server/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -14146,10 +14418,85 @@ "node": ">=8.10.0" } }, + "node_modules/webpack-dev-server/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/webpack-dev-server/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/webpack-dev-server/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", "engines": { @@ -14184,9 +14531,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, "license": "MIT", "engines": { @@ -14222,6 +14569,29 @@ "dev": true, "license": "MIT" }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -14248,16 +14618,19 @@ } }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/wildcard": { @@ -14271,7 +14644,6 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -14314,6 +14686,22 @@ "node": ">=8" } }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -14359,19 +14747,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -14417,80 +14792,29 @@ "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", "license": "MIT", "dependencies": { - "cliui": "^8.0.1", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "yargs-parser": "^22.0.0" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", "license": "ISC", "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/yocto-queue": { @@ -14519,10 +14843,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "3.25.75", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.75.tgz", + "integrity": "sha512-OhpzAmVzabPOL6C3A3gpAifqr9MqihV/Msx3gor2b2kviCgcb+HM9SEOpMWwwNp9MRunWnhtAKUoo0AHhjyPPg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, "node_modules/zone.js": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.0.tgz", - "integrity": "sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", + "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", "license": "MIT" } } diff --git a/docs/src/assets/stackblitz/package.json b/docs/src/assets/stackblitz/package.json index f81ea0334fbd..3a11027ba15c 100644 --- a/docs/src/assets/stackblitz/package.json +++ b/docs/src/assets/stackblitz/package.json @@ -10,34 +10,33 @@ }, "private": true, "dependencies": { - "@angular/animations": "^20.0.0-rc", - "@angular/cdk": "^20.0.0-rc", - "@angular/common": "^20.0.0-rc", - "@angular/compiler": "^20.0.0-rc", - "@angular/core": "^20.0.0-rc", - "@angular/forms": "^20.0.0-rc", - "@angular/localize": "^20.0.0-rc", - "@angular/material": "^20.0.0-rc", - "@angular/material-moment-adapter": "^20.0.0-rc", - "@angular/platform-browser": "^20.0.0-rc", - "@angular/platform-browser-dynamic": "^20.0.0-rc", - "@angular/router": "^20.0.0-rc", + "@angular/cdk": "^20.1.0", + "@angular/common": "^20.1.0", + "@angular/compiler": "^20.1.0", + "@angular/core": "^20.1.0", + "@angular/forms": "^20.1.0", + "@angular/localize": "^20.1.0", + "@angular/material": "^20.1.0", + "@angular/material-moment-adapter": "^20.1.0", + "@angular/platform-browser": "^20.1.0", + "@angular/platform-browser-dynamic": "^20.1.0", + "@angular/router": "^20.1.0", "moment": "^2.18.1", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^20.0.0-rc", - "@angular/cli": "^20.0.0-rc", - "@angular/compiler-cli": "^20.0.0-rc", + "@angular-devkit/build-angular": "^20.1.0", + "@angular/cli": "^20.1.0", + "@angular/compiler-cli": "^20.1.0", "@types/jasmine": "~5.1.0", "@types/node": "^12.11.1", "jasmine-core": "~5.8.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", - "karma-jasmine": "~4.0.0", + "karma-jasmine": "~5.0.0", "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.8.2" } diff --git a/docs/src/assets/stackblitz/src/main.ts b/docs/src/assets/stackblitz/src/main.ts index d31ab0acc4f3..99e5cb0fcab4 100644 --- a/docs/src/assets/stackblitz/src/main.ts +++ b/docs/src/assets/stackblitz/src/main.ts @@ -8,14 +8,13 @@ import {bootstrapApplication} from '@angular/platform-browser'; import {provideHttpClient} from '@angular/common/http'; -import {provideAnimations} from '@angular/platform-browser/animations'; import {VERSION as CDK_VERSION} from '@angular/cdk'; -import {VERSION as MAT_VERSION, provideNativeDateAdapter} from '@angular/material/core'; +import {VERSION as MAT_VERSION} from '@angular/material/core'; import {MaterialDocsExample} from './example/material-docs-example'; console.info('Angular CDK version', CDK_VERSION.full); console.info('Angular Material version', MAT_VERSION.full); bootstrapApplication(MaterialDocsExample, { - providers: [provideAnimations(), provideHttpClient(), provideNativeDateAdapter()], + providers: [provideHttpClient()], }).catch(err => console.error(err)); From a516806e476381fee98470a6be18e1330ad1380c Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Wed, 16 Jul 2025 09:00:04 +0200 Subject: [PATCH 18/77] fix(material/tabs): glitchy animation in rtl with lazy-loaded content (#31535) When the tabs have lazy-loaded content, their height can be zero to begin with. This appeared to hit a Chrome bug where animating the `transform` on a zero-height element in RTL was interrupting the animation. These changes fix the bug by setting a minimum height. Fixes #31503. (cherry picked from commit 892c281d2e8689f62b2ad8aceb16d1fc901fe80f) --- src/material/tabs/tab-body.scss | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/material/tabs/tab-body.scss b/src/material/tabs/tab-body.scss index 4a589ccc2ead..89db99c45976 100644 --- a/src/material/tabs/tab-body.scss +++ b/src/material/tabs/tab-body.scss @@ -35,6 +35,14 @@ visibility: visible; } + // Chrome appears to have a bug where the animation glitches in RTL if the element + // has a height of 0px which can happen with lazy-loaded content or when it's off-screen. + // See: https://github.com/angular/components/issues/31503. We can work around it by setting + // a minimum height on it. + .mat-tab-body-animating > & { + min-height: 1px; + } + .mat-mdc-tab-group-dynamic-height & { overflow: hidden; } From d025368e9885f2ec4e23e8ece45058f2820c57f6 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 16 Jul 2025 09:44:14 -0600 Subject: [PATCH 19/77] build: update dependency node to v22.17.1 (#31544) See associated pull request for more information. (cherry picked from commit 27200304ab8e0a2d1bd028b3af514e156713441f) --- .nvmrc | 2 +- docs/.nvmrc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.nvmrc b/.nvmrc index fc37597bccdb..7377d130eda5 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.17.0 +22.17.1 diff --git a/docs/.nvmrc b/docs/.nvmrc index fc37597bccdb..7377d130eda5 100644 --- a/docs/.nvmrc +++ b/docs/.nvmrc @@ -1 +1 @@ -22.17.0 +22.17.1 From d833f7c24a2d9593a3d34d1808210b36088099ed Mon Sep 17 00:00:00 2001 From: Andrew Seguin Date: Wed, 16 Jul 2025 10:55:58 -0600 Subject: [PATCH 20/77] fix(material/schematics): always add a custom theme with ng add (#31522) * fix(material/schematics): always add a custom theme with ng add * fix(material/schematics): add link to system vars (cherry picked from commit ce40c02dda979e7c3c7d4a2c63cd9f8907d99cdd) --- src/material/schematics/ng-add/index.spec.ts | 247 +----------------- src/material/schematics/ng-add/schema.json | 11 +- .../schematics/ng-add/setup-project.ts | 5 +- .../ng-add/theming/create-custom-theme.ts | 32 ++- .../schematics/ng-add/theming/theming.ts | 49 +--- 5 files changed, 44 insertions(+), 300 deletions(-) diff --git a/src/material/schematics/ng-add/index.spec.ts b/src/material/schematics/ng-add/index.spec.ts index e8c240462a10..9101f6a017c9 100644 --- a/src/material/schematics/ng-add/index.spec.ts +++ b/src/material/schematics/ng-add/index.spec.ts @@ -87,7 +87,7 @@ describe('ng-add schematic', () => { const workspace = await readWorkspace(tree); const project = getProjectFromWorkspace(workspace, baseOptions.project); - expectProjectStyleFile(project, '@angular/material/prebuilt-themes/azure-blue.css'); + expectProjectStyleFile(project, 'projects/material/src/custom-theme.scss'); }); it('should support adding a custom theme', async () => { @@ -96,7 +96,7 @@ describe('ng-add schematic', () => { const tree = await runner.runSchematic( 'ng-add-setup-project', - {...baseOptions, theme: 'custom'}, + {...baseOptions, theme: 'azure-blue'}, appTree, ); const workspace = await readWorkspace(tree); @@ -116,7 +116,7 @@ describe('ng-add schematic', () => { const tree = await runner.runSchematic( 'ng-add-setup-project', - {...baseOptions, theme: 'custom'}, + {...baseOptions, theme: 'azure-blue'}, appTree, ); const workspace = await readWorkspace(tree); @@ -213,108 +213,14 @@ describe('ng-add schematic', () => { runner.runSchematic('ng-add-setup-project', baseOptions, appTree), ).toBeRejected(); }); - - it('should warn if the "test" target has been changed', async () => { - overwriteTargetBuilder(appTree, 'test', 'thirdparty-test-builder'); - await runner.runSchematic('ng-add-setup-project', baseOptions, appTree); - - expect(errorOutput.length).toBe(0); - expect(warnOutput.length).toBe(1); - expect(warnOutput[0]).toMatch( - /not using the default builders.*cannot add the configured theme/, - ); - }); }); describe('theme files', () => { - /** Path to the default prebuilt theme file that will be added when running ng-add. */ - const defaultPrebuiltThemePath = '@angular/material/prebuilt-themes/azure-blue.css'; - - /** Writes a specific style file to the workspace in the given tree */ - function writeStyleFileToWorkspace(tree: Tree, stylePath: string) { - tree.overwrite( - '/angular.json', - JSON.stringify( - { - version: 1, - projects: { - material: { - projectType: 'application', - root: 'projects/material', - sourceRoot: 'projects/material/src', - prefix: 'app', - architect: { - build: { - builder: '@angular-devkit/build-angular:application', - options: { - outputPath: 'dist/material', - index: 'projects/material/src/index.html', - browser: 'projects/material/src/main.ts', - styles: ['projects/material/src/styles.css', stylePath], - }, - }, - }, - }, - }, - }, - null, - 2, - ), - ); - } - - it('should replace existing prebuilt theme files', async () => { - const existingThemePath = '@angular/material/prebuilt-themes/purple-green.css'; - writeStyleFileToWorkspace(appTree, existingThemePath); - - const tree = await runner.runSchematic('ng-add-setup-project', baseOptions, appTree); - const workspace = await readWorkspace(tree); - const project = getProjectFromWorkspace(workspace, baseOptions.project); - const styles = getProjectTargetOptions(project, 'build')['styles']; - - expect(styles) - .not.withContext('Expected the existing prebuilt theme file to be removed.') - .toContain(existingThemePath); - expect(styles) - .withContext('Expected the default prebuilt theme to be added.') - .toContain(defaultPrebuiltThemePath); - }); - - it('should not replace existing custom theme files', async () => { - writeStyleFileToWorkspace(appTree, './projects/material/custom-theme.scss'); - - const tree = await runner.runSchematic('ng-add-setup-project', baseOptions, appTree); - const workspace = await readWorkspace(tree); - const project = getProjectFromWorkspace(workspace, baseOptions.project); - const styles = getProjectTargetOptions(project, 'build')['styles']; - - expect(styles) - .not.withContext('Expected the default prebuilt theme to be not configured.') - .toContain(defaultPrebuiltThemePath); - expect(errorOutput.length).toBe(1); - expect(errorOutput[0]).toMatch(/Could not add the selected theme/); - }); - - it('should not add a theme file multiple times', async () => { - writeStyleFileToWorkspace(appTree, defaultPrebuiltThemePath); - - const tree = await runner.runSchematic('ng-add-setup-project', baseOptions, appTree); - const workspace = await readWorkspace(tree); - const project = getProjectFromWorkspace(workspace, baseOptions.project); - const styles = getProjectTargetOptions(project, 'build')['styles']; - - expect(styles) - .withContext( - 'Expected the "styles.css" file and default prebuilt theme to be ' + 'the only styles', - ) - .toEqual(['projects/material/src/styles.css', defaultPrebuiltThemePath]); - }); - it('should not overwrite existing custom theme files', async () => { appTree.create('/projects/material/custom-theme.scss', 'custom-theme'); const tree = await runner.runSchematic( 'ng-add-setup-project', - {...baseOptions, theme: 'custom'}, + {...baseOptions, theme: 'azure-blue'}, appTree, ); expect(tree.readContent('/projects/material/custom-theme.scss')) @@ -323,117 +229,6 @@ describe('ng-add schematic', () => { }); }); - it('should add the global typography class if the body has no classes', async () => { - const tree = await runner.runSchematic( - 'ng-add-setup-project', - { - ...baseOptions, - typography: true, - }, - appTree, - ); - const workspace = await readWorkspace(tree); - const project = getProjectFromWorkspace(workspace, baseOptions.project); - - const indexFiles = getProjectIndexFiles(project); - expect(indexFiles.length).toBe(1); - - indexFiles.forEach(indexPath => { - const buffer = tree.read(indexPath)!; - expect(buffer.toString()).toContain(''); - }); - }); - - it('should add the global typography class if the body has existing classes', async () => { - appTree.overwrite( - 'projects/material/src/index.html', - ` - - - - - `, - ); - - const tree = await runner.runSchematic( - 'ng-add-setup-project', - { - ...baseOptions, - typography: true, - }, - appTree, - ); - const workspace = await readWorkspace(tree); - const project = getProjectFromWorkspace(workspace, baseOptions.project); - const indexFiles = getProjectIndexFiles(project); - expect(indexFiles.length).toBe(1); - - indexFiles.forEach(indexPath => { - const buffer = tree.read(indexPath)!; - expect(buffer.toString()).toContain(''); - }); - }); - - it('should not add the global typography class if it exists already', async () => { - appTree.overwrite( - 'projects/material/src/index.html', - ` - - - - - `, - ); - - const tree = await runner.runSchematic( - 'ng-add-setup-project', - { - ...baseOptions, - typography: true, - }, - appTree, - ); - const workspace = await readWorkspace(tree); - const project = getProjectFromWorkspace(workspace, baseOptions.project); - const indexFiles = getProjectIndexFiles(project); - expect(indexFiles.length).toBe(1); - - indexFiles.forEach(indexPath => { - const buffer = tree.read(indexPath)!; - expect(buffer.toString()).toContain(''); - }); - }); - - it('should not add the global typography class if the user did not opt into it', async () => { - appTree.overwrite( - 'projects/material/src/index.html', - ` - - - - - `, - ); - - const tree = await runner.runSchematic( - 'ng-add-setup-project', - { - ...baseOptions, - typography: false, - }, - appTree, - ); - const workspace = await readWorkspace(tree); - const project = getProjectFromWorkspace(workspace, baseOptions.project); - const indexFiles = getProjectIndexFiles(project); - expect(indexFiles.length).toBe(1); - - indexFiles.forEach(indexPath => { - const buffer = tree.read(indexPath)!; - expect(buffer.toString()).toContain(''); - }); - }); - describe('using browser builder', () => { beforeEach(() => { const config = { @@ -476,21 +271,7 @@ describe('ng-add schematic', () => { const workspace = await readWorkspace(tree); const project = getProjectFromWorkspace(workspace, baseOptions.project); - expectProjectStyleFile(project, '@angular/material/prebuilt-themes/azure-blue.css'); - }); - - it('should add material app styles', async () => { - const tree = await runner.runSchematic('ng-add-setup-project', baseOptions, appTree); - const workspace = await readWorkspace(tree); - const project = getProjectFromWorkspace(workspace, baseOptions.project); - - const defaultStylesPath = getProjectStyleFile(project)!; - const htmlContent = tree.read(defaultStylesPath)!.toString(); - - expect(htmlContent).toContain('html, body { height: 100%; }'); - expect(htmlContent).toContain( - 'body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }', - ); + expectProjectStyleFile(project, 'projects/material/src/custom-theme.scss'); }); }); @@ -536,21 +317,7 @@ describe('ng-add schematic', () => { const workspace = await readWorkspace(tree); const project = getProjectFromWorkspace(workspace, baseOptions.project); - expectProjectStyleFile(project, '@angular/material/prebuilt-themes/azure-blue.css'); - }); - - it('should add material app styles', async () => { - const tree = await runner.runSchematic('ng-add-setup-project', baseOptions, appTree); - const workspace = await readWorkspace(tree); - const project = getProjectFromWorkspace(workspace, baseOptions.project); - - const defaultStylesPath = getProjectStyleFile(project)!; - const htmlContent = tree.read(defaultStylesPath)!.toString(); - - expect(htmlContent).toContain('html, body { height: 100%; }'); - expect(htmlContent).toContain( - 'body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }', - ); + expectProjectStyleFile(project, 'projects/material/src/custom-theme.scss'); }); }); @@ -587,7 +354,7 @@ describe('ng-add schematic', () => { const workspace = await readWorkspace(tree); const project = getProjectFromWorkspace(workspace, baseOptions.project); - expectProjectStyleFile(project, '@angular/material/prebuilt-themes/azure-blue.css'); + expectProjectStyleFile(project, 'projects/material/src/custom-theme.scss'); }); }); }); diff --git a/src/material/schematics/ng-add/schema.json b/src/material/schematics/ng-add/schema.json index 7017356a89ff..683e954780f6 100644 --- a/src/material/schematics/ng-add/schema.json +++ b/src/material/schematics/ng-add/schema.json @@ -16,7 +16,7 @@ "type": "string", "default": "azure-blue", "x-prompt": { - "message": "Choose a prebuilt theme name, or \"custom\" for a custom theme:", + "message": "Select a pair of starter prebuilt color palettes for your Angular Material theme", "type": "list", "items": [ { @@ -34,16 +34,9 @@ { "value": "cyan-orange", "label": "Cyan/Orange [Preview: https://material.angular.dev?theme=cyan-orange]" - }, - {"value": "custom", "label": "Custom"} + } ] } - }, - "typography": { - "type": "boolean", - "default": false, - "description": "Whether to set up global typography styles.", - "x-prompt": "Set up global Angular Material typography styles?" } }, "required": [] diff --git a/src/material/schematics/ng-add/setup-project.ts b/src/material/schematics/ng-add/setup-project.ts index dfb077b7f227..f0897ade7206 100644 --- a/src/material/schematics/ng-add/setup-project.ts +++ b/src/material/schematics/ng-add/setup-project.ts @@ -6,13 +6,13 @@ * found in the LICENSE file at https://angular.dev/license */ -import {chain, noop, Rule, SchematicContext, Tree} from '@angular-devkit/schematics'; +import {chain, Rule, SchematicContext, Tree} from '@angular-devkit/schematics'; import {getProjectFromWorkspace, getProjectStyleFile} from '@angular/cdk/schematics'; import {readWorkspace} from '@schematics/angular/utility'; import {ProjectType} from '@schematics/angular/utility/workspace-models'; import {addFontsToIndex} from './fonts/material-fonts'; import {Schema} from './schema'; -import {addThemeToAppStyles, addTypographyClass} from './theming/theming'; +import {addThemeToAppStyles} from './theming/theming'; /** * Scaffolds the basics of a Angular Material application, this includes: @@ -29,7 +29,6 @@ export default function (options: Schema): Rule { addThemeToAppStyles(options), addFontsToIndex(options), addMaterialAppStyles(options), - options.typography ? addTypographyClass(options) : noop(), ]); } context.logger.warn( diff --git a/src/material/schematics/ng-add/theming/create-custom-theme.ts b/src/material/schematics/ng-add/theming/create-custom-theme.ts index d490edef7b90..91c8b0ad9660 100644 --- a/src/material/schematics/ng-add/theming/create-custom-theme.ts +++ b/src/material/schematics/ng-add/theming/create-custom-theme.ts @@ -7,21 +7,41 @@ */ /** Create custom theme for the given application configuration. */ -export function createCustomTheme(name: string = 'app') { +export function createCustomTheme(userPaletteChoice: string) { + const colorPalettes = new Map([ + ['azure-blue', {primary: 'azure', tertiary: 'blue'}], + ['rose-red', {primary: 'rose', tertiary: 'red'}], + ['magenta-violet', {primary: 'magenta', tertiary: 'violet'}], + ['cyan-orange', {primary: 'cyan', tertiary: 'orange'}], + ]); return ` -// Custom Theming for Angular Material -// For more information: https://material.angular.dev/guide/theming +// Include theming for Angular Material with \`mat.theme()\`. +// This Sass mixin will define CSS variables that are used for styling Angular Material +// components according to the Material 3 design spec. +// Learn more about theming and how to use it for your application's +// custom components at https://material.angular.dev/guide/theming @use '@angular/material' as mat; html { @include mat.theme(( color: ( - theme-type: light, - primary: mat.$azure-palette, - tertiary: mat.$blue-palette, + primary: mat.$${colorPalettes.get(userPaletteChoice)!.primary}-palette, + tertiary: mat.$${colorPalettes.get(userPaletteChoice)!.tertiary}-palette, ), typography: Roboto, density: 0, )); + + // Default the application to a light color theme. This can be changed to + // \`dark\` to enable the dark color theme, or to \`light dark\` to defer to the + // user's system settings. + color-scheme: light; + + // Set a default background, font and text colors for the application using + // Angular Material's system-level CSS variables. Learn more about these + // variables at https://material.angular.dev/guide/system-variables + background-color: var(--mat-sys-surface); + color: var(--mat-sys-on-surface); + font: var(--mat-sys-body-medium); }`; } diff --git a/src/material/schematics/ng-add/theming/theming.ts b/src/material/schematics/ng-add/theming/theming.ts index 7be0e02ff941..ed9263dfd49a 100644 --- a/src/material/schematics/ng-add/theming/theming.ts +++ b/src/material/schematics/ng-add/theming/theming.ts @@ -7,20 +7,11 @@ */ import {normalize, logging} from '@angular-devkit/core'; +import {noop, Rule, SchematicContext, SchematicsException, Tree} from '@angular-devkit/schematics'; import { - chain, - noop, - Rule, - SchematicContext, - SchematicsException, - Tree, -} from '@angular-devkit/schematics'; -import { - addBodyClass, getProjectFromWorkspace, getProjectStyleFile, getProjectTargetOptions, - getProjectIndexFiles, getProjectTestTargets, getProjectBuildTargets, } from '@angular/cdk/schematics'; @@ -39,33 +30,17 @@ const defaultCustomThemeFilename = 'custom-theme.scss'; /** Add pre-built styles to the main project style file. */ export function addThemeToAppStyles(options: Schema): Rule { return (host: Tree, context: SchematicContext) => { - const themeName = options.theme || 'azure-blue'; - return themeName === 'custom' - ? insertCustomTheme(options.project, host, context.logger) - : insertPrebuiltTheme(options.project, themeName, context.logger); - }; -} - -/** Adds the global typography class to the body element. */ -export function addTypographyClass(options: Schema): Rule { - return async (host: Tree) => { - const workspace = await readWorkspace(host); - const project = getProjectFromWorkspace(workspace, options.project); - const projectIndexFiles = getProjectIndexFiles(project); - - if (!projectIndexFiles.length) { - throw new SchematicsException('No project index HTML file could be found.'); - } - - projectIndexFiles.forEach(path => addBodyClass(host, path, 'mat-typography')); + const palettes = options.theme || 'azure-blue'; + return insertCustomTheme(palettes, options.project, host, context.logger); }; } /** - * Insert a custom theme to project style file. If no valid style file could be found, a new + * Insert an Angular Material theme to project style file. If no valid style file could be found, a new * Scss file for the custom theme will be created. */ async function insertCustomTheme( + palettes: string, projectName: string, host: Tree, logger: logging.LoggerApi, @@ -73,7 +48,7 @@ async function insertCustomTheme( const workspace = await readWorkspace(host); const project = getProjectFromWorkspace(workspace, projectName); const stylesPath = getProjectStyleFile(project, 'scss'); - const themeContent = createCustomTheme(projectName); + const themeContent = createCustomTheme(palettes); if (!stylesPath) { if (!project.sourceRoot) { @@ -89,7 +64,7 @@ async function insertCustomTheme( if (host.exists(customThemePath)) { logger.warn(`Cannot create a custom Angular Material theme because - ${customThemePath} already exists. Skipping custom theme generation.`); + ${customThemePath} already exists. Skipping theme generation.`); return noop(); } @@ -105,16 +80,6 @@ async function insertCustomTheme( return noop(); } -/** Insert a pre-built theme into the angular.json file. */ -function insertPrebuiltTheme(project: string, theme: string, logger: logging.LoggerApi): Rule { - const themePath = `@angular/material/prebuilt-themes/${theme}.css`; - - return chain([ - addThemeStyleToTarget(project, 'build', themePath, logger), - addThemeStyleToTarget(project, 'test', themePath, logger), - ]); -} - /** Adds a theming style entry to the given project target options. */ function addThemeStyleToTarget( projectName: string, From 57c245e9e2209dc7d86d59ffbf912cb1583c7fb1 Mon Sep 17 00:00:00 2001 From: Miles Malerba Date: Wed, 16 Jul 2025 17:48:36 +0000 Subject: [PATCH 21/77] release: cut the v20.1.1 release --- CHANGELOG.md | 17 ++++++++++++++++- package.json | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e6fb9e954b3..ebf2035e044f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ + +# 20.1.1 "wicker-whirligig" (2025-07-16) +### cdk +| Commit | Type | Description | +| -- | -- | -- | +| [3479123244](https://github.com/angular/components/commit/347912324409509c939d9385ba75334ede28d615) | fix | **drag-drop:** ensure container is registered in addItem ([#31518](https://github.com/angular/components/pull/31518)) | +### material +| Commit | Type | Description | +| -- | -- | -- | +| [d833f7c24a](https://github.com/angular/components/commit/d833f7c24a2d9593a3d34d1808210b36088099ed) | fix | **schematics:** always add a custom theme with ng add ([#31522](https://github.com/angular/components/pull/31522)) | +| [a516806e47](https://github.com/angular/components/commit/a516806e476381fee98470a6be18e1330ad1380c) | fix | **tabs:** glitchy animation in rtl with lazy-loaded content ([#31535](https://github.com/angular/components/pull/31535)) | +| [6a0578f82d](https://github.com/angular/components/commit/6a0578f82dbfa07a7cb9309da13475d8b04bbaad) | fix | **timepicker:** allow timepicker to opt out of opening on click ([#31492](https://github.com/angular/components/pull/31492)) | + + + # 20.1.0 "metal-brownie" (2025-07-09) There have been some internal mapping changes in Material 2 theme config maps generated by `mat.define-light-theme` and `mat.define-dark-theme`. @@ -6210,4 +6225,4 @@ _Breaking changes:_ # Changes Prior to 12.0.0 -To view changes that occurred prior to 12.0.0, see [CHANGELOG_ARCHIVE.md](https://github.com/angular/components/blob/main/CHANGELOG_ARCHIVE.md). +To view changes that occurred prior to 12.0.0, see [CHANGELOG_ARCHIVE.md](https://github.com/angular/components/blob/main/CHANGELOG_ARCHIVE.md). \ No newline at end of file diff --git a/package.json b/package.json index 33b101763abe..a6a1bacb2c6b 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "ci-docs-monitor-test": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/docs-deploy/monitoring/ci-test.mts", "prepare": "husky" }, - "version": "20.1.0", + "version": "20.1.1", "dependencies": { "@angular-devkit/core": "catalog:", "@angular-devkit/schematics": "catalog:", From af6cb6d041babf4c3accca50b8177ec3d9029a44 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Wed, 16 Jul 2025 20:38:57 +0200 Subject: [PATCH 22/77] fix(youtube-player): update to latest types and fix error (#31546) Updates the YouTube player package to the latest types and resolves a breakage. (cherry picked from commit cab17104523884421ff81dcead93e97d01390452) --- package.json | 2 +- pnpm-lock.yaml | 14 +++++++------- src/youtube-player/fake-youtube-player.ts | 1 + src/youtube-player/package.json | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index a6a1bacb2c6b..1a674af5d287 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "@angular/forms": "catalog:", "@angular/platform-browser": "catalog:", "@types/google.maps": "^3.54.10", - "@types/youtube": "^0.1.0", + "@types/youtube": "0.1.2", "date-fns": "^4.1.0", "luxon": "^3.0.0", "moment": "^2.29.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b7a3c52e0e0..f7332ba2766f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,8 +98,8 @@ importers: specifier: ^3.54.10 version: 3.58.1 '@types/youtube': - specifier: ^0.1.0 - version: 0.1.0 + specifier: 0.1.2 + version: 0.1.2 date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -698,8 +698,8 @@ importers: src/youtube-player: dependencies: '@types/youtube': - specifier: ^0.1.0 - version: 0.1.0 + specifier: 0.1.2 + version: 0.1.2 safevalues: specifier: ^1.2.0 version: 1.2.0 @@ -3038,8 +3038,8 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@types/youtube@0.1.0': - resolution: {integrity: sha512-Pg33m3X2mFgdmhtvzOlAfUfgOa3341N3/2JCrVY/mXVxb4hagcqqEG6w4vGCfB64StQNWHSj/T8Eotb1Rko/FQ==} + '@types/youtube@0.1.2': + resolution: {integrity: sha512-n1/KqusanheyQRWHamNZv8K3kydlRqyEsZEKxMTeNWXQTC15lZprITCUt+WgL1vAIvKHCjPBIWz/gf/KQLsB3g==} '@vitejs/plugin-basic-ssl@2.0.0': resolution: {integrity: sha512-gc9Tjg8bUxBVSTzeWT3Njc0Cl3PakHFKdNfABnZWiUgbxqmHDEn7uECv3fHVylxoYgNzAcmU7ZrILz+BwSo3sA==} @@ -11405,7 +11405,7 @@ snapshots: '@types/node': 22.14.1 optional: true - '@types/youtube@0.1.0': {} + '@types/youtube@0.1.2': {} '@vitejs/plugin-basic-ssl@2.0.0(vite@6.3.5(@types/node@22.14.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.39.1)(yaml@2.8.0))': dependencies: diff --git a/src/youtube-player/fake-youtube-player.ts b/src/youtube-player/fake-youtube-player.ts index c71c329d13db..aed13d65412a 100644 --- a/src/youtube-player/fake-youtube-player.ts +++ b/src/youtube-player/fake-youtube-player.ts @@ -108,6 +108,7 @@ export function createFakeYtNamespace(): FakeYtNamespace { onPlaybackRateChange: eventHandlerFactory('onPlaybackRateChange'), onError: eventHandlerFactory('onError'), onApiChange: eventHandlerFactory('onApiChange'), + onAutoplayBlocked: eventHandlerFactory('onAutoplayBlocked'), }; return { diff --git a/src/youtube-player/package.json b/src/youtube-player/package.json index b74c23ab1786..0b93c4704694 100644 --- a/src/youtube-player/package.json +++ b/src/youtube-player/package.json @@ -17,7 +17,7 @@ }, "homepage": "https://github.com/angular/components/tree/main/src/youtube-player#readme", "dependencies": { - "@types/youtube": "^0.1.0", + "@types/youtube": "0.1.2", "tslib": "^2.3.0", "safevalues": "^1.2.0" }, From 4f5273222aa8c9e32d6262801a8e178e5c908969 Mon Sep 17 00:00:00 2001 From: Andrew Seguin Date: Wed, 16 Jul 2025 15:48:41 -0600 Subject: [PATCH 23/77] fix(material/schematics): access custom as a theme palette (#31555) Co-authored-by: Andrew Seguin (cherry picked from commit f0accd1ff0e9121ac6f9dd756399b4dfa8116814) --- src/material/schematics/ng-add/theming/theming.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/material/schematics/ng-add/theming/theming.ts b/src/material/schematics/ng-add/theming/theming.ts index ed9263dfd49a..7486d1b61114 100644 --- a/src/material/schematics/ng-add/theming/theming.ts +++ b/src/material/schematics/ng-add/theming/theming.ts @@ -30,7 +30,16 @@ const defaultCustomThemeFilename = 'custom-theme.scss'; /** Add pre-built styles to the main project style file. */ export function addThemeToAppStyles(options: Schema): Rule { return (host: Tree, context: SchematicContext) => { - const palettes = options.theme || 'azure-blue'; + let palettes = options.theme || 'azure-blue'; + + // For a long time, theme param could be "custom" which meant to add a custom theme. This option + // was removed since we always add a custom theme, and we expect this option to be the + // user's preferred palettes. However it's possible that users will have hardcoded CLI commands + // that pass "--theme custom" and we can gracefully handle this by assuming azure-blue. + if (palettes === 'custom') { + palettes = 'azure-blue'; + } + return insertCustomTheme(palettes, options.project, host, context.logger); }; } From 1ddec5d57e2fca1e5bf5d4728b9e8b3cab91b724 Mon Sep 17 00:00:00 2001 From: Miles Malerba Date: Wed, 16 Jul 2025 21:50:43 +0000 Subject: [PATCH 24/77] release: cut the v20.1.2 release --- CHANGELOG.md | 13 +++++++++++++ package.json | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebf2035e044f..640a5beeb5af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ + +# 20.1.2 "coral-dragon" (2025-07-16) +### material +| Commit | Type | Description | +| -- | -- | -- | +| [4f5273222a](https://github.com/angular/components/commit/4f5273222aa8c9e32d6262801a8e178e5c908969) | fix | **schematics:** access custom as a theme palette ([#31555](https://github.com/angular/components/pull/31555)) | +### youtube-player +| Commit | Type | Description | +| -- | -- | -- | +| [af6cb6d041](https://github.com/angular/components/commit/af6cb6d041babf4c3accca50b8177ec3d9029a44) | fix | update to latest types and fix error ([#31546](https://github.com/angular/components/pull/31546)) | + + + # 20.1.1 "wicker-whirligig" (2025-07-16) ### cdk diff --git a/package.json b/package.json index 1a674af5d287..668968db8554 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "ci-docs-monitor-test": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/docs-deploy/monitoring/ci-test.mts", "prepare": "husky" }, - "version": "20.1.1", + "version": "20.1.2", "dependencies": { "@angular-devkit/core": "catalog:", "@angular-devkit/schematics": "catalog:", From 9abb864f9c0fd9f0b0006a2db6aad2a766ad6ca7 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 17 Jul 2025 10:40:11 -0600 Subject: [PATCH 25/77] build: update dependency firebase-tools to v14.11.0 (#31558) See associated pull request for more information. (cherry picked from commit 0d26886575e8f144c9b153bef26dc11313df151c) --- package.json | 2 +- pnpm-lock.yaml | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 668968db8554..30553aa0dca0 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "dgeni": "^0.4.14", "dgeni-packages": "^0.30.0", "esbuild": "^0.25.0", - "firebase-tools": "14.10.1", + "firebase-tools": "14.11.0", "fs-extra": "^11.0.0", "glob": "^11.0.3", "highlight.js": "^11.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f7332ba2766f..9a8a8210867f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -219,8 +219,8 @@ importers: specifier: ^0.25.0 version: 0.25.4 firebase-tools: - specifier: 14.10.1 - version: 14.10.1(@types/node@22.14.1)(encoding@0.1.13) + specifier: 14.11.0 + version: 14.11.0(@types/node@22.14.1)(encoding@0.1.13) fs-extra: specifier: ^11.0.0 version: 11.3.0 @@ -4669,8 +4669,8 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - firebase-tools@14.10.1: - resolution: {integrity: sha512-KUwA/HyJhiOLgsHwsanQmXI5j7J12IkA+JnA+oMpmyOv/gBzJxp3LRuxHTdfv/MY17w29ppUMDqS2+jR3ViSzw==} + firebase-tools@14.11.0: + resolution: {integrity: sha512-wfedQpQAltiyubU+xXv0H6zSVmfmyKbH0N72zfqu0JBFd5PMgfdP9us8gSY9b73TAzJ0j9szO21eN723scnDhw==} engines: {node: '>=20.0.0 || >=22.0.0'} hasBin: true @@ -10354,7 +10354,7 @@ snapshots: '@inquirer/core@10.1.11(@types/node@22.14.1)': dependencies: '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.14.1) + '@inquirer/type': 3.0.7(@types/node@22.14.1) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -10563,8 +10563,8 @@ snapshots: express-rate-limit: 7.5.0(express@5.1.0) pkce-challenge: 5.0.0 raw-body: 3.0.0 - zod: 3.25.20 - zod-to-json-schema: 3.24.5(zod@3.25.20) + zod: 3.25.75 + zod-to-json-schema: 3.24.5(zod@3.25.75) transitivePeerDependencies: - supports-color @@ -12155,7 +12155,7 @@ snapshots: dependencies: devtools-protocol: 0.0.1425554 mitt: 3.0.1 - zod: 3.25.20 + zod: 3.25.75 ci-info@2.0.0: {} @@ -13320,14 +13320,14 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - firebase-tools@14.10.1(@types/node@22.14.1)(encoding@0.1.13): + firebase-tools@14.11.0(@types/node@22.14.1)(encoding@0.1.13): dependencies: '@electric-sql/pglite': 0.3.3 '@electric-sql/pglite-tools': 0.2.8(@electric-sql/pglite@0.3.3) '@google-cloud/cloud-sql-connector': 1.8.0(encoding@0.1.13) '@google-cloud/pubsub': 4.11.0(encoding@0.1.13) - '@inquirer/prompts': 7.5.1(@types/node@22.14.1) - '@modelcontextprotocol/sdk': 1.12.0 + '@inquirer/prompts': 7.6.0(@types/node@22.14.1) + '@modelcontextprotocol/sdk': 1.13.3 abort-controller: 3.0.0 ajv: 8.17.1 ajv-formats: 3.0.1 @@ -13394,8 +13394,8 @@ snapshots: winston-transport: 4.9.0 ws: 7.5.10 yaml: 2.8.0 - zod: 3.25.20 - zod-to-json-schema: 3.24.5(zod@3.25.20) + zod: 3.25.75 + zod-to-json-schema: 3.24.5(zod@3.25.75) transitivePeerDependencies: - '@types/node' - bufferutil From 2e0234a3976f43dc50dd54fdf4001f0cad2bb6c3 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 17 Jul 2025 09:14:30 +0200 Subject: [PATCH 26/77] refactor(material/core): granular animations disabled state Adds a function that provides more granular information about why animations are disabled. (cherry picked from commit d1083d7775e2031f4479fe4f71d8166a86a44d06) --- goldens/material/core/index.api.md | 3 +++ src/material/core/animation/animation.ts | 20 +++++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/goldens/material/core/index.api.md b/goldens/material/core/index.api.md index 1d16f9ab5ec9..cc5512058715 100644 --- a/goldens/material/core/index.api.md +++ b/goldens/material/core/index.api.md @@ -132,6 +132,9 @@ export class _ErrorStateTracker { updateErrorState(): void; } +// @public +export function _getAnimationsState(): 'enabled' | 'di-disabled' | 'reduced-motion'; + // @public export function _getOptionScrollPosition(optionOffset: number, optionHeight: number, currentScrollPosition: number, panelHeight: number): number; diff --git a/src/material/core/animation/animation.ts b/src/material/core/animation/animation.ts index c228579047ab..aa20e2d8f919 100644 --- a/src/material/core/animation/animation.ts +++ b/src/material/core/animation/animation.ts @@ -41,18 +41,28 @@ export class AnimationDurations { static EXITING = '195ms'; } +let reducedMotion: boolean | null = null; + /** - * Returns whether animations have been disabled by DI. Must be called in a DI context. + * Gets the the configured animations state. * @docs-private */ -export function _animationsDisabled(): boolean { +export function _getAnimationsState(): 'enabled' | 'di-disabled' | 'reduced-motion' { if ( inject(MATERIAL_ANIMATIONS, {optional: true})?.animationsDisabled || inject(ANIMATION_MODULE_TYPE, {optional: true}) === 'NoopAnimations' ) { - return true; + return 'di-disabled'; } - const mediaMatcher = inject(MediaMatcher); - return mediaMatcher.matchMedia('(prefers-reduced-motion)').matches; + reducedMotion ??= inject(MediaMatcher).matchMedia('(prefers-reduced-motion)').matches; + return reducedMotion ? 'reduced-motion' : 'enabled'; +} + +/** + * Returns whether animations have been disabled by DI. Must be called in a DI context. + * @docs-private + */ +export function _animationsDisabled(): boolean { + return _getAnimationsState() !== 'enabled'; } From 9cd6f10b9442dbe94269bc092da72a163a11a36d Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 17 Jul 2025 09:45:43 +0200 Subject: [PATCH 27/77] fix(material/progress-bar): slow down animations instead of fully stopping them Reworks the progress bar to slow down its animations, instead of fully stopping them when `prefers-reduced-motion` is enabled. Stopping the animations completely appears to be confusing for users. (cherry picked from commit 9507900574159279e15e4c00cbec20826f42fadd) --- src/material/progress-bar/progress-bar.scss | 26 ++++++++++++++++----- src/material/progress-bar/progress-bar.ts | 12 ++++++++-- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/material/progress-bar/progress-bar.scss b/src/material/progress-bar/progress-bar.scss index 228019f64469..235cb73664da 100644 --- a/src/material/progress-bar/progress-bar.scss +++ b/src/material/progress-bar/progress-bar.scss @@ -6,6 +6,8 @@ $fallbacks: m3-progress-bar.get-tokens(); .mat-mdc-progress-bar { + --mat-progress-bar-animation-multiplier: 1; + // Explicitly set to `block` since the browser defaults custom elements to `inline`. display: block; @@ -35,6 +37,12 @@ $fallbacks: m3-progress-bar.get-tokens(); } } +// Slow down the animation by 100% when the user configured their OS to reduce +// motion since some animations like the indeterminate one can be quite dynamic. +.mat-progress-bar-reduced-motion { + --mat-progress-bar-animation-multiplier: 2; +} + .mdc-linear-progress { position: relative; width: 100%; @@ -105,7 +113,8 @@ $fallbacks: m3-progress-bar.get-tokens(); background-repeat: repeat-x; flex: auto; transform: rotate(180deg); - animation: mdc-linear-progress-buffering 250ms infinite linear; + animation: mdc-linear-progress-buffering + calc(250ms * var(--mat-progress-bar-animation-multiplier)) infinite linear; background-color: token-utils.slot(progress-bar-track-color, $fallbacks); @include cdk.high-contrast { @@ -113,7 +122,8 @@ $fallbacks: m3-progress-bar.get-tokens(); } [dir='rtl'] & { - animation: mdc-linear-progress-buffering-reverse 250ms infinite linear; + animation: mdc-linear-progress-buffering-reverse + calc(250ms * var(--mat-progress-bar-animation-multiplier)) infinite linear; transform: rotate(0); } } @@ -132,12 +142,14 @@ $fallbacks: m3-progress-bar.get-tokens(); } .mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready & { - animation: mdc-linear-progress-primary-indeterminate-translate 2s infinite linear; + animation: mdc-linear-progress-primary-indeterminate-translate + calc(2s * var(--mat-progress-bar-animation-multiplier)) infinite linear; } .mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready & { > .mdc-linear-progress__bar-inner { - animation: mdc-linear-progress-primary-indeterminate-scale 2s infinite linear; + animation: mdc-linear-progress-primary-indeterminate-scale + calc(2s * var(--mat-progress-bar-animation-multiplier)) infinite linear; } } @@ -160,12 +172,14 @@ $fallbacks: m3-progress-bar.get-tokens(); } .mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready & { - animation: mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear; + animation: mdc-linear-progress-secondary-indeterminate-translate + calc(2s * var(--mat-progress-bar-animation-multiplier)) infinite linear; } .mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready & { > .mdc-linear-progress__bar-inner { - animation: mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear; + animation: mdc-linear-progress-secondary-indeterminate-scale + calc(2s * var(--mat-progress-bar-animation-multiplier)) infinite linear; } } diff --git a/src/material/progress-bar/progress-bar.ts b/src/material/progress-bar/progress-bar.ts index 5c94e128205c..190eeac642ff 100644 --- a/src/material/progress-bar/progress-bar.ts +++ b/src/material/progress-bar/progress-bar.ts @@ -25,7 +25,7 @@ import { DOCUMENT, } from '@angular/core'; -import {_animationsDisabled, ThemePalette} from '../core'; +import {_getAnimationsState, ThemePalette} from '../core'; /** Last animation end data. */ export interface ProgressAnimationEnd { @@ -121,10 +121,18 @@ export class MatProgressBar implements AfterViewInit, OnDestroy { constructor(...args: unknown[]); constructor() { + const animationsState = _getAnimationsState(); + const defaults = inject(MAT_PROGRESS_BAR_DEFAULT_OPTIONS, { optional: true, }); + this._isNoopAnimation = animationsState === 'di-disabled'; + + if (animationsState === 'reduced-motion') { + this._elementRef.nativeElement.classList.add('mat-progress-bar-reduced-motion'); + } + if (defaults) { if (defaults.color) { this.color = this._defaultColor = defaults.color; @@ -135,7 +143,7 @@ export class MatProgressBar implements AfterViewInit, OnDestroy { } /** Flag that indicates whether NoopAnimations mode is set to true. */ - _isNoopAnimation = _animationsDisabled(); + _isNoopAnimation: boolean; // TODO: should be typed as `ThemePalette` but internal apps pass in arbitrary strings. /** From de59f35cefead84b037a29d8f4edd89051cc7d2c Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 17 Jul 2025 09:46:33 +0200 Subject: [PATCH 28/77] fix(material/progress-spinner): slow down animations instead of fully stopping them Reworks the progress spinner to slow down its animations, instead of fully stopping them when `prefers-reduced-motion` is enabled. Stopping the animations completely appears to be confusing for users. (cherry picked from commit 062c5eb9d3521b25f3e519e7fe160c3a949b73c2) --- .../progress-spinner/progress-spinner.scss | 21 +++++++++++++++---- .../progress-spinner/progress-spinner.ts | 16 ++++++++------ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/material/progress-spinner/progress-spinner.scss b/src/material/progress-spinner/progress-spinner.scss index b0992804873f..e27428fdf46d 100644 --- a/src/material/progress-spinner/progress-spinner.scss +++ b/src/material/progress-spinner/progress-spinner.scss @@ -5,6 +5,8 @@ $fallbacks: m3-progress-spinner.get-tokens(); .mat-mdc-progress-spinner { + --mat-progress-spinner-animation-multiplier: 1; + // Explicitly set to `block` since the browser defaults custom elements to `inline`. display: block; @@ -54,6 +56,11 @@ $fallbacks: m3-progress-spinner.get-tokens(); } } +// Slow down the animation by 25% when the user configured their OS to reduce motion. +.mat-progress-spinner-reduced-motion { + --mat-progress-spinner-animation-multiplier: 1.25; +} + .mdc-circular-progress__determinate-container, .mdc-circular-progress__indeterminate-circle-graphic, .mdc-circular-progress__indeterminate-container, @@ -79,7 +86,8 @@ $fallbacks: m3-progress-spinner.get-tokens(); .mdc-circular-progress--indeterminate & { opacity: 1; - animation: mdc-circular-progress-container-rotate 1568.2352941176ms linear infinite; + animation: mdc-circular-progress-container-rotate + calc(1568.2352941176ms * var(--mat-progress-spinner-animation-multiplier)) linear infinite; } } @@ -127,11 +135,15 @@ $fallbacks: m3-progress-spinner.get-tokens(); } .mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left & { - animation: mdc-circular-progress-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdc-circular-progress-left-spin + calc(1333ms * var(--mat-progress-spinner-animation-multiplier)) + cubic-bezier(0.4, 0, 0.2, 1) infinite both; } .mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right & { - animation: mdc-circular-progress-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdc-circular-progress-right-spin + calc(1333ms * var(--mat-progress-spinner-animation-multiplier)) + cubic-bezier(0.4, 0, 0.2, 1) infinite both; } } @@ -145,7 +157,8 @@ $fallbacks: m3-progress-spinner.get-tokens(); .mdc-circular-progress__spinner-layer { .mdc-circular-progress--indeterminate & { - animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) + animation: mdc-circular-progress-spinner-layer-rotate + calc(5332ms * var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both; } } diff --git a/src/material/progress-spinner/progress-spinner.ts b/src/material/progress-spinner/progress-spinner.ts index d24223ead811..ecec729e465a 100644 --- a/src/material/progress-spinner/progress-spinner.ts +++ b/src/material/progress-spinner/progress-spinner.ts @@ -17,7 +17,7 @@ import { numberAttribute, inject, } from '@angular/core'; -import {_animationsDisabled, ThemePalette} from '../core'; +import {_getAnimationsState, ThemePalette} from '../core'; import {NgTemplateOutlet} from '@angular/common'; /** Possible mode for a progress spinner. */ @@ -128,12 +128,16 @@ export class MatProgressSpinner { constructor() { const defaults = inject(MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS); + const animationsState = _getAnimationsState(); + const element = this._elementRef.nativeElement; - this._noopAnimations = _animationsDisabled() && !!defaults && !defaults._forceAnimations; - this.mode = - this._elementRef.nativeElement.nodeName.toLowerCase() === 'mat-spinner' - ? 'indeterminate' - : 'determinate'; + this._noopAnimations = + animationsState === 'di-disabled' && !!defaults && !defaults._forceAnimations; + this.mode = element.nodeName.toLowerCase() === 'mat-spinner' ? 'indeterminate' : 'determinate'; + + if (!this._noopAnimations && animationsState === 'reduced-motion') { + element.classList.add('mat-progress-spinner-reduced-motion'); + } if (defaults) { if (defaults.color) { From 4cdf5f33b399056350d7e713c487a441bc8a910f Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Thu, 17 Jul 2025 14:49:56 -0700 Subject: [PATCH 29/77] fix(cdk/scrolling): Prevent virtual scroll 'flickering' with zoneless (#31316) * fix(cdk/scrolling): Prevent virtual scroll 'flickering' with zoneless This commit reworks the change detection coalescing to use signal and effects, which ensures the transform and the afterNextRender are applied within the same application tick without any awkward workarounds or fiddling with being inside or outside the zone * fixup! fix(cdk/scrolling): Prevent virtual scroll 'flickering' with zoneless * fixup! fix(cdk/scrolling): Prevent virtual scroll 'flickering' with zoneless (cherry picked from commit cea7989a96ad6031ab383e2e33a69b9400556e1c) --- src/cdk/scrolling/virtual-scroll-viewport.ts | 39 ++++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/src/cdk/scrolling/virtual-scroll-viewport.ts b/src/cdk/scrolling/virtual-scroll-viewport.ts index 693c3cd92553..d37e3675607d 100644 --- a/src/cdk/scrolling/virtual-scroll-viewport.ts +++ b/src/cdk/scrolling/virtual-scroll-viewport.ts @@ -10,10 +10,13 @@ import {ListRange} from '../collections'; import {Platform} from '../platform'; import { afterNextRender, + ApplicationRef, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, + DestroyRef, + effect, ElementRef, inject, Inject, @@ -24,6 +27,7 @@ import { Optional, Output, signal, + untracked, ViewChild, ViewEncapsulation, } from '@angular/core'; @@ -170,8 +174,7 @@ export class CdkVirtualScrollViewport extends CdkVirtualScrollable implements On */ private _renderedContentOffsetNeedsRewrite = false; - /** Whether there is a pending change detection cycle. */ - private _isChangeDetectionPending = false; + private _changeDetectionNeeded = signal(false); /** A list of functions to run after the next change detection cycle. */ private _runAfterChangeDetection: Function[] = []; @@ -202,6 +205,18 @@ export class CdkVirtualScrollViewport extends CdkVirtualScrollable implements On this.elementRef.nativeElement.classList.add('cdk-virtual-scrollable'); this.scrollable = this; } + + const ref = effect( + () => { + if (this._changeDetectionNeeded()) { + this._doChangeDetection(); + } + }, + // Using ApplicationRef injector is important here because we want this to be a root + // effect that runs before change detection of any application views (since we're depending on markForCheck marking parents dirty) + {injector: inject(ApplicationRef).injector}, + ); + inject(DestroyRef).onDestroy(() => void ref.destroy()); } override ngOnInit() { @@ -488,16 +503,16 @@ export class CdkVirtualScrollViewport extends CdkVirtualScrollable implements On this._runAfterChangeDetection.push(runAfter); } - // Use a Promise to batch together calls to `_doChangeDetection`. This way if we set a bunch of - // properties sequentially we only have to run `_doChangeDetection` once at the end. - if (!this._isChangeDetectionPending) { - this._isChangeDetectionPending = true; - this.ngZone.runOutsideAngular(() => - Promise.resolve().then(() => { - this._doChangeDetection(); - }), - ); + if (untracked(this._changeDetectionNeeded)) { + return; } + this.ngZone.runOutsideAngular(() => { + Promise.resolve().then(() => { + this.ngZone.run(() => { + this._changeDetectionNeeded.set(true); + }); + }); + }); } /** Run change detection. */ @@ -520,7 +535,7 @@ export class CdkVirtualScrollViewport extends CdkVirtualScrollable implements On afterNextRender( () => { - this._isChangeDetectionPending = false; + this._changeDetectionNeeded.set(false); const runAfterChangeDetection = this._runAfterChangeDetection; this._runAfterChangeDetection = []; for (const fn of runAfterChangeDetection) { From ce3994c717a8e8b71780bb12fe25eaabda8390b4 Mon Sep 17 00:00:00 2001 From: aceArt-GmbH <33117017+aceArt-GmbH@users.noreply.github.com> Date: Fri, 18 Jul 2025 17:44:25 +0200 Subject: [PATCH 30/77] fix(cdk/table): improve error message (#31545) Co-authored-by: lukas (cherry picked from commit 27dae25a420e76817a1209f373326084ae6dd11c) --- src/cdk/table/table-errors.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cdk/table/table-errors.ts b/src/cdk/table/table-errors.ts index 7ffadecad258..53c9be1c5b95 100644 --- a/src/cdk/table/table-errors.ts +++ b/src/cdk/table/table-errors.ts @@ -28,7 +28,10 @@ export function getTableDuplicateColumnNameError(name: string) { * @docs-private */ export function getTableMultipleDefaultRowDefsError() { - return Error(`There can only be one default row without a when predicate function.`); + return Error( + `There can only be one default row without a when predicate function. ` + + 'Or set `multiTemplateDataRows`.' + ); } /** @@ -37,7 +40,7 @@ export function getTableMultipleDefaultRowDefsError() { */ export function getTableMissingMatchingRowDefError(data: any) { return Error( - `Could not find a matching row definition for the` + + `Could not find a matching row definition for the ` + `provided row data: ${JSON.stringify(data)}`, ); } From 734a7bcc2f54f09718d4f59b145b010729d4aa3a Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Mon, 21 Jul 2025 22:12:01 +0200 Subject: [PATCH 31/77] fix(material/datepicker): toggle button active color not showing up in M3 (#31565) There were two issues preventing the active styles for the datepicker toggle from showing up in M3: 1. In M2 the inner button had a `color: inherit` which allowed it to inherit the color from the toggle, however in M3 the button has a specific color. 2. The M3 tokens for the datepicker weren't setting the right color. (cherry picked from commit 5bd42eaed46444b372f8db2f3a7d2da036cd5abf) --- src/material/datepicker/_m3-datepicker.scss | 5 +---- src/material/datepicker/datepicker-toggle.scss | 4 ++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/material/datepicker/_m3-datepicker.scss b/src/material/datepicker/_m3-datepicker.scss index faee749ee433..262c93b0f958 100644 --- a/src/material/datepicker/_m3-datepicker.scss +++ b/src/material/datepicker/_m3-datepicker.scss @@ -56,7 +56,7 @@ datepicker-range-input-disabled-state-text-color: m3-utils.color-with-opacity(map.get($system, on-surface), 38%), datepicker-range-input-separator-color: map.get($system, on-surface), - datepicker-toggle-active-state-icon-color: map.get($system, on-surface-variant), + datepicker-toggle-active-state-icon-color: map.get($system, primary), datepicker-toggle-icon-color: map.get($system, on-surface-variant), ), typography: ( @@ -71,7 +71,4 @@ ), density: (), ); - - $tokens: ( - ); } diff --git a/src/material/datepicker/datepicker-toggle.scss b/src/material/datepicker/datepicker-toggle.scss index 11fc04332a9d..f12d390eb3db 100644 --- a/src/material/datepicker/datepicker-toggle.scss +++ b/src/material/datepicker/datepicker-toggle.scss @@ -9,6 +9,10 @@ $fallbacks: m3-datepicker.get-tokens(); .mat-datepicker-toggle { pointer-events: auto; color: token-utils.slot(datepicker-toggle-icon-color, $fallbacks); + + button { + color: inherit; + } } .mat-datepicker-toggle-active { From 7b26aaa75731d90555484e8cc2bec89a15824a24 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Tue, 22 Jul 2025 14:47:36 +0200 Subject: [PATCH 32/77] fix(material/datepicker): focus lost when hitting the end of calendar (#31572) If the user hits the end of the calendar (e.g. when a min/max date is set), we disable the calendar button which causes focus to be returned to the `body`. These changes use `disabledInteractive` on the buttons so that focus stays on the button. (cherry picked from commit e8b28fa6ba15f536e72d13c0b22765924efaf1f6) --- src/material/datepicker/calendar-header.html | 4 +-- .../datepicker/calendar-header.spec.ts | 12 +++---- src/material/datepicker/calendar.spec.ts | 16 +++++++--- src/material/datepicker/calendar.ts | 32 +++++++++++-------- 4 files changed, 38 insertions(+), 26 deletions(-) diff --git a/src/material/datepicker/calendar-header.html b/src/material/datepicker/calendar-header.html index 2ffe6c6d1dd6..ee72dd31189c 100644 --- a/src/material/datepicker/calendar-header.html +++ b/src/material/datepicker/calendar-header.html @@ -20,7 +20,7 @@ - @for (step of steps; track step) { - } From b67ed8fb77eb241ee186214c5e72aeeed6a6b2f2 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Wed, 23 Jul 2025 16:06:28 +0200 Subject: [PATCH 37/77] build: broken lock file in patch branch (#31582) Fixes that the lock file in the patch branch was out of sync. --- pnpm-lock.yaml | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a8a8210867f..9932aedc3342 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3179,11 +3179,6 @@ packages: ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} @@ -10354,7 +10349,7 @@ snapshots: '@inquirer/core@10.1.11(@types/node@22.14.1)': dependencies: '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.7(@types/node@22.14.1) + '@inquirer/type': 3.0.6(@types/node@22.14.1) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -10563,8 +10558,8 @@ snapshots: express-rate-limit: 7.5.0(express@5.1.0) pkce-challenge: 5.0.0 raw-body: 3.0.0 - zod: 3.25.75 - zod-to-json-schema: 3.24.5(zod@3.25.75) + zod: 3.25.20 + zod-to-json-schema: 3.24.5(zod@3.25.20) transitivePeerDependencies: - supports-color @@ -11557,8 +11552,8 @@ snapshots: indent-string: 4.0.0 optional: true - ajv-formats@2.1.1(ajv@8.17.1): - optionalDependencies: + ajv-formats@2.1.1: + dependencies: ajv: 8.17.1 ajv-formats@3.0.1: @@ -12155,7 +12150,7 @@ snapshots: dependencies: devtools-protocol: 0.0.1425554 mitt: 3.0.1 - zod: 3.25.75 + zod: 3.25.20 ci-info@2.0.0: {} @@ -13103,7 +13098,7 @@ snapshots: dependencies: '@apidevtools/json-schema-ref-parser': 9.1.2 ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) + ajv-formats: 2.1.1 body-parser: 1.20.3 content-type: 1.0.5 deep-freeze: 0.0.1 @@ -13326,8 +13321,8 @@ snapshots: '@electric-sql/pglite-tools': 0.2.8(@electric-sql/pglite@0.3.3) '@google-cloud/cloud-sql-connector': 1.8.0(encoding@0.1.13) '@google-cloud/pubsub': 4.11.0(encoding@0.1.13) - '@inquirer/prompts': 7.6.0(@types/node@22.14.1) - '@modelcontextprotocol/sdk': 1.13.3 + '@inquirer/prompts': 7.5.1(@types/node@22.14.1) + '@modelcontextprotocol/sdk': 1.12.0 abort-controller: 3.0.0 ajv: 8.17.1 ajv-formats: 3.0.1 @@ -13394,8 +13389,8 @@ snapshots: winston-transport: 4.9.0 ws: 7.5.10 yaml: 2.8.0 - zod: 3.25.75 - zod-to-json-schema: 3.24.5(zod@3.25.75) + zod: 3.25.20 + zod-to-json-schema: 3.24.5(zod@3.25.20) transitivePeerDependencies: - '@types/node' - bufferutil @@ -16713,7 +16708,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) + ajv-formats: 2.1.1 ajv-keywords: 5.1.0(ajv@8.17.1) select-hose@2.0.0: {} From 1db77804e4f42684dce613c4ecc2caa3e0431de8 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Wed, 23 Jul 2025 14:09:17 +0000 Subject: [PATCH 38/77] release: cut the v20.1.3 release --- CHANGELOG.md | 19 +++++++++++++++++++ package.json | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 640a5beeb5af..b9e44ec33698 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ + +# 20.1.3 "tantalum-potato" (2025-07-23) +### cdk +| Commit | Type | Description | +| -- | -- | -- | +| [4cdf5f33b](https://github.com/angular/components/commit/4cdf5f33b399056350d7e713c487a441bc8a910f) | fix | **scrolling:** Prevent virtual scroll 'flickering' with zoneless ([#31316](https://github.com/angular/components/pull/31316)) | +| [ce3994c71](https://github.com/angular/components/commit/ce3994c717a8e8b71780bb12fe25eaabda8390b4) | fix | **table:** improve error message ([#31545](https://github.com/angular/components/pull/31545)) | +### material +| Commit | Type | Description | +| -- | -- | -- | +| [7b26aaa75](https://github.com/angular/components/commit/7b26aaa75731d90555484e8cc2bec89a15824a24) | fix | **datepicker:** focus lost when hitting the end of calendar ([#31572](https://github.com/angular/components/pull/31572)) | +| [734a7bcc2](https://github.com/angular/components/commit/734a7bcc2f54f09718d4f59b145b010729d4aa3a) | fix | **datepicker:** toggle button active color not showing up in M3 ([#31565](https://github.com/angular/components/pull/31565)) | +| [7aa5e0bc7](https://github.com/angular/components/commit/7aa5e0bc7cc6f6479e7739684414f2bed7e624af) | fix | **form-field:** ensure that focused classes are in sync ([#31568](https://github.com/angular/components/pull/31568)) | +| [9cd6f10b9](https://github.com/angular/components/commit/9cd6f10b9442dbe94269bc092da72a163a11a36d) | fix | **progress-bar:** slow down animations instead of fully stopping them | +| [de59f35ce](https://github.com/angular/components/commit/de59f35cefead84b037a29d8f4edd89051cc7d2c) | fix | **progress-spinner:** slow down animations instead of fully stopping them | +| [f1ccf6b10](https://github.com/angular/components/commit/f1ccf6b10ad24d8c6caba2cca286c88bbc3686be) | fix | **table:** add missing sort tests ([#30876](https://github.com/angular/components/pull/30876)) | + + + # 20.1.2 "coral-dragon" (2025-07-16) ### material diff --git a/package.json b/package.json index 30553aa0dca0..c04b4e1c77eb 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "ci-docs-monitor-test": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/docs-deploy/monitoring/ci-test.mts", "prepare": "husky" }, - "version": "20.1.2", + "version": "20.1.3", "dependencies": { "@angular-devkit/core": "catalog:", "@angular-devkit/schematics": "catalog:", From 512066a907555f0e31ab2315c90b0f07f860a023 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 24 Jul 2025 16:24:39 +0200 Subject: [PATCH 39/77] fix(cdk/drag-drop): incorrect index when returning item in mixed list (#31592) When an item enters a mixed orientation list, we were figuring out its index, removing the item from the list and then trying to insert it in that index. The problem is that by removing the item, we might have changed the array in a way where the index isn't valid anymore. These changes resolve the issue by removing the item first before making any index calculations. Fixes #31505. (cherry picked from commit 88d4ffda6904661a49b9de973ba640a1cde24ee8) --- src/cdk/drag-drop/sorting/mixed-sort-strategy.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/cdk/drag-drop/sorting/mixed-sort-strategy.ts b/src/cdk/drag-drop/sorting/mixed-sort-strategy.ts index f5cb575d8686..d863fec910d6 100644 --- a/src/cdk/drag-drop/sorting/mixed-sort-strategy.ts +++ b/src/cdk/drag-drop/sorting/mixed-sort-strategy.ts @@ -141,6 +141,14 @@ export class MixedSortStrategy implements DropListSortStrategy { * out automatically. */ enter(item: DragRef, pointerX: number, pointerY: number, index?: number): void { + // Remove the item from current set of items first so that it doesn't throw off the indexes + // further down in this method. See https://github.com/angular/components/issues/31505 + const currentIndex = this._activeItems.indexOf(item); + + if (currentIndex > -1) { + this._activeItems.splice(currentIndex, 1); + } + let enterIndex = index == null || index < 0 ? this._getItemIndexFromPointerPosition(item, pointerX, pointerY) @@ -154,11 +162,6 @@ export class MixedSortStrategy implements DropListSortStrategy { } const targetItem = this._activeItems[enterIndex] as DragRef | undefined; - const currentIndex = this._activeItems.indexOf(item); - - if (currentIndex > -1) { - this._activeItems.splice(currentIndex, 1); - } if (targetItem && !this._dragDropRegistry.isDragging(targetItem)) { this._activeItems.splice(enterIndex, 0, item); From 6e252739b0dd0d6990bdf6c08545e2df6c9949e2 Mon Sep 17 00:00:00 2001 From: Dragon Wrangler <81990996+wildcardalice@users.noreply.github.com> Date: Fri, 25 Jul 2025 03:10:17 -0400 Subject: [PATCH 40/77] fix(material/testing): Modify input filtering to more broadly search for (#31596) a label, including fallback functionality that checks `mat-label` (cherry picked from commit 092c0f73d8838ac23daeb1772b4a40fa68bebb98) --- .../testing/date-range-input-harness.ts | 28 +++++++++---------- .../control/form-field-control-harness.ts | 25 ++++++++--------- .../input/testing/input-harness.spec.ts | 23 +++++++++++++-- 3 files changed, 46 insertions(+), 30 deletions(-) diff --git a/src/material/datepicker/testing/date-range-input-harness.ts b/src/material/datepicker/testing/date-range-input-harness.ts index 4504717007fe..d1cbee84b930 100644 --- a/src/material/datepicker/testing/date-range-input-harness.ts +++ b/src/material/datepicker/testing/date-range-input-harness.ts @@ -48,8 +48,6 @@ export class MatEndDateHarness extends MatDatepickerInputHarnessBase { export class MatDateRangeInputHarness extends DatepickerTriggerHarnessBase { static hostSelector = '.mat-date-range-input'; - private readonly _floatingLabelSelector = '.mdc-floating-label'; - /** * Gets a `HarnessPredicate` that can be used to search for a `MatDateRangeInputHarness` * that meets certain criteria. @@ -91,26 +89,28 @@ export class MatDateRangeInputHarness extends DatepickerTriggerHarnessBase { return this.locatorFor(MatEndDateHarness)(); } - /** Gets the floating label text for the range input, if it exists. */ + /** + * Gets the label for the range input, if it exists. This might be provided by a label element or + * by the `aria-label` attribute. + */ async getLabel(): Promise { - // Copied from MatFormFieldControlHarnessBase since this class cannot extend two classes + // Directly copied from MatFormFieldControlHarnessBase. This class already has a parent so it + // cannot extend MatFormFieldControlHarnessBase for the functionality. const documentRootLocator = this.documentRootLocatorFactory(); const labelId = await (await this.host()).getAttribute('aria-labelledby'); + const labelText = await (await this.host()).getAttribute('aria-label'); const hostId = await (await this.host()).getAttribute('id'); if (labelId) { - // First option, try to fetch the label using the `aria-labelledby` - // attribute. - const labelEl = await documentRootLocator.locatorForOptional( - `${this._floatingLabelSelector}[id="${labelId}"]`, - )(); + // First, try to find the label by following [aria-labelledby] + const labelEl = await documentRootLocator.locatorForOptional(`[id="${labelId}"]`)(); return labelEl ? labelEl.text() : null; + } else if (labelText) { + // If that doesn't work, return [aria-label] if it exists + return labelText; } else if (hostId) { - // Fallback option, try to match the id of the input with the `for` - // attribute of the label. - const labelEl = await documentRootLocator.locatorForOptional( - `${this._floatingLabelSelector}[for="${hostId}"]`, - )(); + // Finally, search the DOM for a label that points to the host element + const labelEl = await documentRootLocator.locatorForOptional(`[for="${hostId}"]`)(); return labelEl ? labelEl.text() : null; } return null; diff --git a/src/material/form-field/testing/control/form-field-control-harness.ts b/src/material/form-field/testing/control/form-field-control-harness.ts index 39f2874e090b..ad357f061bad 100644 --- a/src/material/form-field/testing/control/form-field-control-harness.ts +++ b/src/material/form-field/testing/control/form-field-control-harness.ts @@ -18,27 +18,26 @@ export abstract class MatFormFieldControlHarness extends ComponentHarness {} * Shared behavior for `MatFormFieldControlHarness` implementations */ export abstract class MatFormFieldControlHarnessBase extends MatFormFieldControlHarness { - private readonly _floatingLabelSelector = '.mdc-floating-label'; - - /** Gets the text content of the floating label, if it exists. */ + /** + * Gets the label for the control, if it exists. This might be provided by a label element or by + * the `aria-label` attribute. + */ async getLabel(): Promise { const documentRootLocator = this.documentRootLocatorFactory(); const labelId = await (await this.host()).getAttribute('aria-labelledby'); + const labelText = await (await this.host()).getAttribute('aria-label'); const hostId = await (await this.host()).getAttribute('id'); if (labelId) { - // First option, try to fetch the label using the `aria-labelledby` - // attribute. - const labelEl = await documentRootLocator.locatorForOptional( - `${this._floatingLabelSelector}[id="${labelId}"]`, - )(); + // First, try to find the label by following [aria-labelledby] + const labelEl = await documentRootLocator.locatorForOptional(`[id="${labelId}"]`)(); return labelEl ? labelEl.text() : null; + } else if (labelText) { + // If that doesn't work, return [aria-label] if it exists + return labelText; } else if (hostId) { - // Fallback option, try to match the id of the input with the `for` - // attribute of the label. - const labelEl = await documentRootLocator.locatorForOptional( - `${this._floatingLabelSelector}[for="${hostId}"]`, - )(); + // Finally, search the DOM for a label that points to the host element + const labelEl = await documentRootLocator.locatorForOptional(`[for="${hostId}"]`)(); return labelEl ? labelEl.text() : null; } return null; diff --git a/src/material/input/testing/input-harness.spec.ts b/src/material/input/testing/input-harness.spec.ts index 3d93514de9fa..88b5609ee145 100644 --- a/src/material/input/testing/input-harness.spec.ts +++ b/src/material/input/testing/input-harness.spec.ts @@ -38,11 +38,21 @@ describe('MatInputHarness', () => { expect(inputs.length).toBe(1); }); - it('should load input with a specific label', async () => { + it('should load input with a specific floating label', async () => { const inputs = await loader.getAllHarnesses(MatInputHarness.with({label: 'Favorite food'})); expect(inputs.length).toBe(1); }); + it('should load input with a specific external label', async () => { + const inputs = await loader.getAllHarnesses(MatInputHarness.with({label: 'Favorite drink'})); + expect(inputs.length).toBe(1); + }); + + it('should load input with a specific aria label', async () => { + const inputs = await loader.getAllHarnesses(MatInputHarness.with({label: 'Comment box'})); + expect(inputs.length).toBe(1); + }); + it('should load input with a value that matches a regex', async () => { const inputs = await loader.getAllHarnesses(MatInputHarness.with({value: /shi$/})); expect(inputs.length).toBe(1); @@ -66,7 +76,7 @@ describe('MatInputHarness', () => { const inputs = await loader.getAllHarnesses(MatInputHarness); expect(inputs.length).toBe(7); expect(await inputs[0].getId()).toMatch(/mat-input-\w+\d+/); - expect(await inputs[1].getId()).toMatch(/mat-input-\w+\d+/); + expect(await inputs[1].getId()).toMatch('favorite-drink-input'); expect(await inputs[2].getId()).toBe('myTextarea'); expect(await inputs[3].getId()).toBe('nativeControl'); expect(await inputs[4].getId()).toMatch(/mat-input-\w+\d+/); @@ -239,9 +249,11 @@ describe('MatInputHarness', () => { + { - + From 7f85e6829175edf560176f3c303798710ef72d3d Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Fri, 25 Jul 2025 02:20:39 -0600 Subject: [PATCH 41/77] build: update github/codeql-action action to v3.29.4 (#31589) See associated pull request for more information. (cherry picked from commit 8f03c16017cd928f446c8f37576b3c834b6e14ac) --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 2b65d18ca0dd..04d2f841a6b2 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -47,6 +47,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@d6bbdef45e766d081b84a2def353b0055f728d3e # v3.29.3 + uses: github/codeql-action/upload-sarif@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4 with: sarif_file: results.sarif From 3e4625d1cf8c87313465633c0843892d34da0130 Mon Sep 17 00:00:00 2001 From: Andrew Seguin Date: Fri, 25 Jul 2025 11:16:45 -0600 Subject: [PATCH 42/77] fix(material/core): align gm3 colors (#31485) (cherry picked from commit 3dfe50aefeb3561b1992d186302db9af380aab07) --- src/material/core/tokens/m3/_md-sys-color.scss | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/material/core/tokens/m3/_md-sys-color.scss b/src/material/core/tokens/m3/_md-sys-color.scss index 9eb5802a6231..55f59cd2803f 100644 --- a/src/material/core/tokens/m3/_md-sys-color.scss +++ b/src/material/core/tokens/m3/_md-sys-color.scss @@ -1,8 +1,3 @@ -// -// Design system display name: Material 3 -// Design system version: v0.161 -// - @use 'sass:map'; // Indicates whether alternative tokens should be used @@ -63,9 +58,7 @@ $_alternate-tokens: false; @if ($_alternate-tokens) { $values: map.merge($values, ( - background: map.get($palettes, neutral, 10), on-surface-variant: map.get($palettes, neutral-variant, 80), - surface: map.get($palettes, neutral, 10), surface-bright: #37393b, surface-container: #1e1f20, surface-container-high: #282a2c, @@ -136,17 +129,12 @@ $_alternate-tokens: false; @if ($_alternate-tokens) { $values: map.merge($values, ( background: map.get($palettes, neutral, 100), - on-error-container: map.get($palettes, error, 10), - on-primary-container: map.get($palettes, primary, 10), - on-secondary-container: map.get($palettes, secondary, 10), - on-tertiary-container: map.get($palettes, tertiary, 10), surface: map.get($palettes, neutral, 100), surface-bright: map.get($palettes, neutral, 100), surface-container: #f0f4f9, surface-container-high: #e9eef6, surface-container-highest: #dde3ea, surface-container-low: #f8fafd, - surface-container-lowest: map.get($palettes, primary, 100), surface-dim: #d3dbe5, surface-tint: #6991d6, )); From b5fb4cb479d73e01c51eac05af634cbbe1d7ce98 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Sat, 26 Jul 2025 06:20:00 +0200 Subject: [PATCH 43/77] fix(cdk/listbox): coerce tabindex value (#31597) Fixes that the CDK listbox option wasn't coercing its `tabindex` value. Fixes #31595. (cherry picked from commit c386d0ee146a6b29479f2d4761d8a06df942524d) --- goldens/cdk/listbox/index.api.md | 2 ++ src/cdk/listbox/listbox.ts | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/goldens/cdk/listbox/index.api.md b/goldens/cdk/listbox/index.api.md index e4e97db2e089..16d788cf44e5 100644 --- a/goldens/cdk/listbox/index.api.md +++ b/goldens/cdk/listbox/index.api.md @@ -122,6 +122,8 @@ export class CdkOption implements ListKeyManagerOption, Highlightab // (undocumented) static ngAcceptInputType_disabled: unknown; // (undocumented) + static ngAcceptInputType_enabledTabIndex: unknown; + // (undocumented) ngOnDestroy(): void; select(): void; setActiveStyles(): void; diff --git a/src/cdk/listbox/listbox.ts b/src/cdk/listbox/listbox.ts index b4405757ea89..8a327f9a15c4 100644 --- a/src/cdk/listbox/listbox.ts +++ b/src/cdk/listbox/listbox.ts @@ -39,6 +39,7 @@ import { inject, Input, NgZone, + numberAttribute, OnDestroy, Output, QueryList, @@ -130,7 +131,10 @@ export class CdkOption implements ListKeyManagerOption, Highlightab private _disabled = signal(false); /** The tabindex of the option when it is enabled. */ - @Input('tabindex') + @Input({ + alias: 'tabindex', + transform: (value: unknown) => (value == null ? undefined : numberAttribute(value)), + }) get enabledTabIndex() { return this._enabledTabIndex() === undefined ? this.listbox.enabledTabIndex From 4ae4fe22d54f139dcd606b71d489f9678acf5ce0 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Tue, 29 Jul 2025 06:42:21 +0200 Subject: [PATCH 44/77] fix(material/slider): tick marks not showing dynamically (#31608) Fixes that if `showTickMarks` is `false` initially and then switches to `true`, the slider wasn't updating to show the tick marks. Fixes #31590. (cherry picked from commit 9e14c5566535601620c9bfa29786c828ddf3dc2d) --- goldens/material/slider/index.api.md | 3 ++- src/material/slider/slider.ts | 13 ++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/goldens/material/slider/index.api.md b/goldens/material/slider/index.api.md index 9e67a17760dc..e614b53c21f4 100644 --- a/goldens/material/slider/index.api.md +++ b/goldens/material/slider/index.api.md @@ -103,7 +103,8 @@ export class MatSlider implements AfterViewInit, OnDestroy, _MatSlider { }): void; // (undocumented) _setTransition(withAnimation: boolean): void; - showTickMarks: boolean; + get showTickMarks(): boolean; + set showTickMarks(value: boolean); // (undocumented) _startThumbTransform: string; protected startValueIndicatorText: string; diff --git a/src/material/slider/slider.ts b/src/material/slider/slider.ts index 823870215ca1..1250ff837768 100644 --- a/src/material/slider/slider.ts +++ b/src/material/slider/slider.ts @@ -132,7 +132,18 @@ export class MatSlider implements AfterViewInit, OnDestroy, _MatSlider { /** Whether the slider displays tick marks along the slider track. */ @Input({transform: booleanAttribute}) - showTickMarks: boolean = false; + get showTickMarks(): boolean { + return this._showTickMarks; + } + set showTickMarks(value: boolean) { + this._showTickMarks = value; + + if (this._hasViewInitialized) { + this._updateTickMarkUI(); + this._updateTickMarkTrackUI(); + } + } + private _showTickMarks: boolean = false; /** The minimum value that the slider can have. */ @Input({transform: numberAttribute}) From d18da5664c9a85f48d3d44aad98264cc2d031e1b Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Tue, 29 Jul 2025 22:23:17 +0200 Subject: [PATCH 45/77] fix(material/radio): rendering artifacts at some zoom levels (#31612) Currently the circle inside the radio button is rendered out as an element with a solid border. Presumably MDC did it this way, because it allows more CSS rules to be combined and it handles high contrast mode automatically. The problem with this approach is that depending on the user's screen and zoom level, there can be rendering artifacts on Windows like a dot in the middle of the radio button. These changes resolve the rendering artifacts by using a background color for the circle and which is overridden to `CanvasText` for high contrast mode. Fixes #31466. (cherry picked from commit 471d3237e247a2cac939624adf4ef757bcaf214d) --- src/material/radio/BUILD.bazel | 1 + src/material/radio/_radio-common.scss | 79 ++++++++++++++++++++------- 2 files changed, 60 insertions(+), 20 deletions(-) diff --git a/src/material/radio/BUILD.bazel b/src/material/radio/BUILD.bazel index 63b3aa9b60dc..a56d47629d13 100644 --- a/src/material/radio/BUILD.bazel +++ b/src/material/radio/BUILD.bazel @@ -56,6 +56,7 @@ sass_library( srcs = ["_radio-common.scss"], deps = [ ":m2", + "//src/cdk:sass_lib", "//src/material/core/tokens:token_utils", ], ) diff --git a/src/material/radio/_radio-common.scss b/src/material/radio/_radio-common.scss index b96ef04c5093..517a2f3cc734 100644 --- a/src/material/radio/_radio-common.scss +++ b/src/material/radio/_radio-common.scss @@ -1,3 +1,4 @@ +@use '@angular/cdk'; @use './m3-radio'; @use '../core/tokens/token-utils'; @@ -47,9 +48,14 @@ $fallbacks: m3-radio.get-tokens(); } &:hover > .mdc-radio__native-control:enabled:checked + .mdc-radio__background { - > .mdc-radio__outer-circle, + $token: 'radio-selected-hover-icon-color'; + + > .mdc-radio__outer-circle { + border-color: token-utils.slot($token, $fallbacks); + } + > .mdc-radio__inner-circle { - border-color: token-utils.slot(radio-selected-hover-icon-color, $fallbacks); + background-color: token-utils.slot($token, $fallbacks, currentColor); } } @@ -60,9 +66,14 @@ $fallbacks: m3-radio.get-tokens(); } &:active > .mdc-radio__native-control:enabled:checked + .mdc-radio__background { - > .mdc-radio__outer-circle, + $token: 'radio-selected-pressed-icon-color'; + + > .mdc-radio__outer-circle { + border-color: token-utils.slot($token, $fallbacks); + } + > .mdc-radio__inner-circle { - border-color: token-utils.slot(radio-selected-pressed-icon-color, $fallbacks); + background-color: token-utils.slot($token, $fallbacks, currentColor); } } } @@ -113,11 +124,16 @@ $fallbacks: m3-radio.get-tokens(); box-sizing: border-box; width: 100%; height: 100%; - transform: scale(0, 0); - border-width: 10px; - border-style: solid; + transform: scale(0); border-radius: 50%; - transition: _exit-transition(transform), _exit-transition(border-color); + transition: _exit-transition(transform), _exit-transition(background-color); + + @include cdk.high-contrast { + // Override the color, because solid colors don't show up by default in + // high contrast mode. We need !important here, because the various state + // selectors are really specific and duplicating them will be brittle. + background-color: CanvasText !important; + } } .mdc-radio__native-control { @@ -142,7 +158,7 @@ $fallbacks: m3-radio.get-tokens(); } > .mdc-radio__inner-circle { - transition: _enter-transition(transform), _enter-transition(border-color); + transition: _enter-transition(transform), _enter-transition(background-color); } } } @@ -162,12 +178,18 @@ $fallbacks: m3-radio.get-tokens(); } + .mdc-radio__background { + $color-token: 'radio-disabled-selected-icon-color'; + $opacity-token: token-utils.slot(radio-disabled-selected-icon-opacity, $fallbacks); cursor: default; - > .mdc-radio__inner-circle, > .mdc-radio__outer-circle { - border-color: token-utils.slot(radio-disabled-selected-icon-color, $fallbacks); - opacity: token-utils.slot(radio-disabled-selected-icon-opacity, $fallbacks); + border-color: token-utils.slot($color-token, $fallbacks); + opacity: $opacity-token; + } + + > .mdc-radio__inner-circle { + background-color: token-utils.slot($color-token, $fallbacks, currentColor); + opacity: $opacity-token; } } } @@ -178,17 +200,27 @@ $fallbacks: m3-radio.get-tokens(); } &:checked + .mdc-radio__background { - > .mdc-radio__outer-circle, + $token: 'radio-selected-icon-color'; + + > .mdc-radio__outer-circle { + border-color: token-utils.slot($token, $fallbacks); + } + > .mdc-radio__inner-circle { - border-color: token-utils.slot(radio-selected-icon-color, $fallbacks); + background-color: token-utils.slot($token, $fallbacks, currentColor); } } @if ($is-interactive) { &:focus:checked + .mdc-radio__background { - > .mdc-radio__inner-circle, + $token: 'radio-selected-focus-icon-color'; + > .mdc-radio__outer-circle { - border-color: token-utils.slot(radio-selected-focus-icon-color, $fallbacks); + border-color: token-utils.slot($token, $fallbacks); + } + + > .mdc-radio__inner-circle { + background-color: token-utils.slot($token, $fallbacks, currentColor); } } } @@ -196,7 +228,7 @@ $fallbacks: m3-radio.get-tokens(); &:checked + .mdc-radio__background > .mdc-radio__inner-circle { transform: scale(0.5); - transition: _enter-transition(transform), _enter-transition(border-color); + transition: _enter-transition(transform), _enter-transition(background-color); } } @@ -215,10 +247,17 @@ $fallbacks: m3-radio.get-tokens(); &: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, + $color-token: 'radio-disabled-selected-icon-color'; + $opacity-token: token-utils.slot(radio-disabled-selected-icon-opacity, $fallbacks); + > .mdc-radio__outer-circle { - border-color: token-utils.slot(radio-disabled-selected-icon-color, $fallbacks); - opacity: token-utils.slot(radio-disabled-selected-icon-opacity, $fallbacks); + border-color: token-utils.slot($color-token, $fallbacks); + opacity: $opacity-token; + } + + > .mdc-radio__inner-circle { + background-color: token-utils.slot($color-token, $fallbacks, currentColor); + opacity: $opacity-token; } } } From b0f13799384e2e4355ed8c13301b6b94932a7717 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Tue, 29 Jul 2025 22:23:47 +0200 Subject: [PATCH 46/77] test(multiple): clean up some unnecessary imports (#31605) Cleaning up some `imports` from `configureTestingModule` that aren't necessary now that we're fully standalone. This is an initial test to see if anything goes wrong. I'll roll it out to the other tests in a follow-up. (cherry picked from commit 409948f39781c74dc2f69c1501180a17b10492a2) --- .../accordion/accordion.spec.ts | 2 - .../combobox/combobox.spec.ts | 18 +-------- .../deferred-content/deferred-content.spec.ts | 8 +--- src/cdk-experimental/listbox/listbox.spec.ts | 4 +- .../radio-group/radio-group.spec.ts | 4 +- .../scrolling/virtual-scroll-viewport.spec.ts | 8 +--- .../selection/selection.spec.ts | 26 +------------ .../table-scroll-container.spec.ts | 13 ++----- src/cdk-experimental/tabs/tabs.spec.ts | 3 +- src/cdk-experimental/tree/tree.spec.ts | 3 +- .../aria-describer/aria-describer.spec.ts | 1 - .../a11y/focus-monitor/focus-monitor.spec.ts | 20 ---------- .../focus-monitor/focus-monitor.zone.spec.ts | 1 - .../configurable-focus-trap.spec.ts | 2 - .../event-listener-inert-strategy.spec.ts | 6 +-- src/cdk/a11y/focus-trap/focus-trap.spec.ts | 18 --------- .../high-contrast-mode-detector.spec.ts | 3 +- .../live-announcer/live-announcer.spec.ts | 14 +------ src/cdk/accordion/accordion-item.spec.ts | 8 +--- src/cdk/accordion/accordion.spec.ts | 8 +--- src/cdk/bidi/directionality.spec.ts | 7 ---- src/cdk/clipboard/copy-to-clipboard.spec.ts | 6 --- src/cdk/dialog/dialog.spec.ts | 1 - .../drag-drop/directives/test-utils.spec.ts | 1 - src/cdk/drag-drop/drag-drop-registry.spec.ts | 4 -- src/cdk/drag-drop/drag-drop.spec.ts | 5 --- src/cdk/layout/breakpoints-observer.spec.ts | 2 - src/cdk/menu/menu-bar.spec.ts | 38 +------------------ src/cdk/menu/menu-group.spec.ts | 8 ---- src/cdk/menu/menu-item-checkbox.spec.ts | 1 - src/cdk/menu/menu-item-radio.spec.ts | 1 - src/cdk/menu/menu-stack.spec.ts | 8 +--- src/cdk/menu/menu.spec.ts | 28 -------------- src/cdk/menu/pointer-focus-tracker.spec.ts | 8 +--- src/cdk/observers/observe-content.spec.ts | 12 +----- .../private/shared-resize-observer.spec.ts | 3 -- src/cdk/overlay/overlay-directives.spec.ts | 1 - .../overlay/overlay-directives.zone.spec.ts | 12 ------ src/cdk/overlay/overlay.spec.ts | 2 +- ...exible-connected-position-strategy.spec.ts | 4 -- .../position/global-position-strategy.spec.ts | 4 -- .../scroll/block-scroll-strategy.spec.ts | 2 - .../scroll/close-scroll-strategy.spec.ts | 1 - .../scroll/close-scroll-strategy.zone.spec.ts | 1 - .../scroll/reposition-scroll-strategy.spec.ts | 1 - src/cdk/portal/portal.spec.ts | 13 ------- 46 files changed, 23 insertions(+), 321 deletions(-) diff --git a/src/cdk-experimental/accordion/accordion.spec.ts b/src/cdk-experimental/accordion/accordion.spec.ts index 60f721d72ee1..54da825ad6d7 100644 --- a/src/cdk-experimental/accordion/accordion.spec.ts +++ b/src/cdk-experimental/accordion/accordion.spec.ts @@ -1,7 +1,6 @@ import {Component, DebugElement, signal, model} from '@angular/core'; import {ComponentFixture, TestBed} from '@angular/core/testing'; import {By} from '@angular/platform-browser'; -import {BidiModule} from '@angular/cdk/bidi'; import {provideFakeDirectionality, runAccessibilityChecks} from '@angular/cdk/testing/private'; import {_IdGenerator} from '@angular/cdk/a11y'; import { @@ -97,7 +96,6 @@ describe('CdkAccordionGroup', () => { beforeEach(() => { TestBed.configureTestingModule({ providers: [provideFakeDirectionality('ltr'), _IdGenerator], - imports: [BidiModule, AccordionGroupExample], }); fixture = TestBed.createComponent(AccordionGroupExample); diff --git a/src/cdk-experimental/combobox/combobox.spec.ts b/src/cdk-experimental/combobox/combobox.spec.ts index f264de9024d0..0b6e0ea1ec01 100644 --- a/src/cdk-experimental/combobox/combobox.spec.ts +++ b/src/cdk-experimental/combobox/combobox.spec.ts @@ -23,12 +23,6 @@ describe('Combobox', () => { let applyButton: DebugElement; let applyButtonElement: HTMLElement; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkComboboxModule, ComboboxToggle], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(ComboboxToggle); fixture.detectChanges(); @@ -189,11 +183,7 @@ describe('Combobox', () => { let combobox: DebugElement; let comboboxInstance: CdkCombobox; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkComboboxModule, ComboboxToggle], - }); - })); + beforeEach(waitForAsync(() => {})); beforeEach(() => { fixture = TestBed.createComponent(ComboboxToggle); @@ -259,11 +249,7 @@ describe('Combobox', () => { let comboboxInstance: CdkCombobox; let comboboxElement: HTMLElement; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkComboboxModule, ComboboxToggle], - }); - })); + beforeEach(waitForAsync(() => {})); beforeEach(() => { fixture = TestBed.createComponent(ComboboxToggle); diff --git a/src/cdk-experimental/deferred-content/deferred-content.spec.ts b/src/cdk-experimental/deferred-content/deferred-content.spec.ts index 88a8d5e3b95f..75262e77ae34 100644 --- a/src/cdk-experimental/deferred-content/deferred-content.spec.ts +++ b/src/cdk-experimental/deferred-content/deferred-content.spec.ts @@ -1,5 +1,5 @@ import {Component, DebugElement, Directive, effect, inject, signal} from '@angular/core'; -import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; import {DeferredContent, DeferredContentAware} from './deferred-content'; import {By} from '@angular/platform-browser'; @@ -7,12 +7,6 @@ describe('DeferredContent', () => { let fixture: ComponentFixture; let collapsible: DebugElement; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [TestComponent], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(TestComponent); collapsible = fixture.debugElement.query(By.directive(Collapsible)); diff --git a/src/cdk-experimental/listbox/listbox.spec.ts b/src/cdk-experimental/listbox/listbox.spec.ts index 0d89b5705c17..4aa1935e4063 100644 --- a/src/cdk-experimental/listbox/listbox.spec.ts +++ b/src/cdk-experimental/listbox/listbox.spec.ts @@ -2,7 +2,7 @@ import {Component, DebugElement, signal} from '@angular/core'; import {CdkListbox, CdkOption} from './listbox'; import {ComponentFixture, TestBed, fakeAsync, tick} from '@angular/core/testing'; import {By} from '@angular/platform-browser'; -import {BidiModule, Direction} from '@angular/cdk/bidi'; +import {Direction} from '@angular/cdk/bidi'; import {provideFakeDirectionality, runAccessibilityChecks} from '@angular/cdk/testing/private'; interface ModifierKeys { @@ -65,7 +65,6 @@ describe('CdkListbox', () => { }) { TestBed.configureTestingModule({ providers: [provideFakeDirectionality(opts?.textDirection ?? 'ltr')], - imports: [BidiModule, ListboxExample], }); fixture = TestBed.createComponent(ListboxExample); @@ -98,7 +97,6 @@ describe('CdkListbox', () => { function setupDefaultListbox() { TestBed.configureTestingModule({ providers: [provideFakeDirectionality('ltr')], - imports: [BidiModule, DefaultListboxExample], }); const defaultFixture = TestBed.createComponent(DefaultListboxExample); diff --git a/src/cdk-experimental/radio-group/radio-group.spec.ts b/src/cdk-experimental/radio-group/radio-group.spec.ts index d4bfed343f3f..ac2639fbf84a 100644 --- a/src/cdk-experimental/radio-group/radio-group.spec.ts +++ b/src/cdk-experimental/radio-group/radio-group.spec.ts @@ -2,7 +2,7 @@ import {Component, DebugElement, signal} from '@angular/core'; import {CdkRadioButton, CdkRadioGroup} from './radio-group'; import {ComponentFixture, TestBed} from '@angular/core/testing'; import {By} from '@angular/platform-browser'; -import {BidiModule, Direction} from '@angular/cdk/bidi'; +import {Direction} from '@angular/cdk/bidi'; import {provideFakeDirectionality, runAccessibilityChecks} from '@angular/cdk/testing/private'; describe('CdkRadioGroup', () => { @@ -45,7 +45,6 @@ describe('CdkRadioGroup', () => { }) { TestBed.configureTestingModule({ providers: [provideFakeDirectionality(opts?.textDirection ?? 'ltr')], - imports: [BidiModule, RadioGroupExample], }); fixture = TestBed.createComponent(RadioGroupExample); @@ -85,7 +84,6 @@ describe('CdkRadioGroup', () => { function setupDefaultRadioGroup() { TestBed.configureTestingModule({ providers: [provideFakeDirectionality('ltr')], - imports: [BidiModule, DefaultRadioGroupExample], }); const fixture = TestBed.createComponent(DefaultRadioGroupExample); diff --git a/src/cdk-experimental/scrolling/virtual-scroll-viewport.spec.ts b/src/cdk-experimental/scrolling/virtual-scroll-viewport.spec.ts index e0aa8068ac75..7692cbc5c2b3 100644 --- a/src/cdk-experimental/scrolling/virtual-scroll-viewport.spec.ts +++ b/src/cdk-experimental/scrolling/virtual-scroll-viewport.spec.ts @@ -1,6 +1,6 @@ import {CdkVirtualScrollViewport, ScrollingModule} from '@angular/cdk/scrolling'; import {Component, Input, ViewChild, ViewEncapsulation} from '@angular/core'; -import {ComponentFixture, TestBed, fakeAsync, flush, waitForAsync} from '@angular/core/testing'; +import {ComponentFixture, TestBed, fakeAsync, flush} from '@angular/core/testing'; import {ScrollingModule as ExperimentalScrollingModule} from './scrolling-module'; describe('CdkVirtualScrollViewport', () => { @@ -9,12 +9,6 @@ describe('CdkVirtualScrollViewport', () => { let testComponent: AutoSizeVirtualScroll; let viewport: CdkVirtualScrollViewport; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ScrollingModule, ExperimentalScrollingModule, AutoSizeVirtualScroll], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(AutoSizeVirtualScroll); testComponent = fixture.componentInstance; diff --git a/src/cdk-experimental/selection/selection.spec.ts b/src/cdk-experimental/selection/selection.spec.ts index 179688d1615e..c9742d3ad3f1 100644 --- a/src/cdk-experimental/selection/selection.spec.ts +++ b/src/cdk-experimental/selection/selection.spec.ts @@ -1,7 +1,7 @@ import {AsyncPipe} from '@angular/common'; import {CdkTableModule} from '@angular/cdk/table'; import {ChangeDetectorRef, Component, ElementRef, ViewChild, inject} from '@angular/core'; -import {waitForAsync, ComponentFixture, fakeAsync, flush, TestBed} from '@angular/core/testing'; +import {ComponentFixture, fakeAsync, flush, TestBed} from '@angular/core/testing'; import {CdkSelection} from './selection'; import {CdkSelectionModule} from './selection-module'; @@ -11,12 +11,6 @@ describe('CdkSelection', () => { let fixture: ComponentFixture; let component: ListWithMultiSelection; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkSelectionModule, ListWithMultiSelection], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(ListWithMultiSelection); component = fixture.componentInstance; @@ -237,12 +231,6 @@ describe('CdkSelection with multiple = false', () => { let fixture: ComponentFixture; let component: ListWithSingleSelection; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkSelectionModule, ListWithSingleSelection], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(ListWithSingleSelection); component = fixture.componentInstance; @@ -302,12 +290,6 @@ describe('cdkSelectionColumn', () => { let fixture: ComponentFixture; let component: MultiSelectTableWithSelectionColumn; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkSelectionModule, CdkTableModule, MultiSelectTableWithSelectionColumn], - }); - })); - beforeEach(fakeAsync(() => { fixture = TestBed.createComponent(MultiSelectTableWithSelectionColumn); component = fixture.componentInstance; @@ -397,12 +379,6 @@ describe('cdkSelectionColumn with multiple = false', () => { let fixture: ComponentFixture; let component: SingleSelectTableWithSelectionColumn; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkSelectionModule, CdkTableModule, SingleSelectTableWithSelectionColumn], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(SingleSelectTableWithSelectionColumn); component = fixture.componentInstance; diff --git a/src/cdk-experimental/table-scroll-container/table-scroll-container.spec.ts b/src/cdk-experimental/table-scroll-container/table-scroll-container.spec.ts index cf83cb16bd5e..dea23f2b09b9 100644 --- a/src/cdk-experimental/table-scroll-container/table-scroll-container.spec.ts +++ b/src/cdk-experimental/table-scroll-container/table-scroll-container.spec.ts @@ -18,19 +18,12 @@ describe('CdkTableScrollContainer', () => { let headerRows: HTMLElement[]; let footerRows: HTMLElement[]; - function createComponent( - componentType: Type, - declarations: any[] = [], - ): ComponentFixture { - TestBed.configureTestingModule({ - imports: [CdkTableModule, CdkTableScrollContainerModule, componentType, ...declarations], - }); - + function createComponent(componentType: Type): ComponentFixture { return TestBed.createComponent(componentType); } - function setupTableTestApp(componentType: Type, declarations: any[] = []) { - fixture = createComponent(componentType, declarations); + function setupTableTestApp(componentType: Type) { + fixture = createComponent(componentType); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/src/cdk-experimental/tabs/tabs.spec.ts b/src/cdk-experimental/tabs/tabs.spec.ts index 260d9da3f314..bef066505fa1 100644 --- a/src/cdk-experimental/tabs/tabs.spec.ts +++ b/src/cdk-experimental/tabs/tabs.spec.ts @@ -1,7 +1,7 @@ import {Component, DebugElement, signal} from '@angular/core'; import {ComponentFixture, TestBed} from '@angular/core/testing'; import {By} from '@angular/platform-browser'; -import {BidiModule, Direction} from '@angular/cdk/bidi'; +import {Direction} from '@angular/cdk/bidi'; import {provideFakeDirectionality, runAccessibilityChecks} from '@angular/cdk/testing/private'; import {CdkTabs, CdkTabList, CdkTab, CdkTabPanel, CdkTabContent} from './tabs'; @@ -63,7 +63,6 @@ describe('CdkTabs', () => { function setupTestTabs(options: {textDirection?: Direction} = {}) { TestBed.configureTestingModule({ providers: [provideFakeDirectionality(options.textDirection ?? 'ltr')], - imports: [BidiModule, TestTabsComponent], }); fixture = TestBed.createComponent(TestTabsComponent); diff --git a/src/cdk-experimental/tree/tree.spec.ts b/src/cdk-experimental/tree/tree.spec.ts index 22d33e0ede77..511714407683 100644 --- a/src/cdk-experimental/tree/tree.spec.ts +++ b/src/cdk-experimental/tree/tree.spec.ts @@ -1,7 +1,7 @@ import {Component, signal} from '@angular/core'; import {ComponentFixture, TestBed} from '@angular/core/testing'; import {By} from '@angular/platform-browser'; -import {BidiModule, Direction} from '@angular/cdk/bidi'; +import {Direction} from '@angular/cdk/bidi'; import {provideFakeDirectionality, runAccessibilityChecks} from '@angular/cdk/testing/private'; import {CdkTree, CdkTreeItem, CdkTreeItemGroup, CdkTreeItemGroupContent} from './tree'; @@ -53,7 +53,6 @@ describe('CdkTree', () => { function setupTestTree(textDirection: Direction = 'ltr') { TestBed.configureTestingModule({ - imports: [TestTreeComponent, BidiModule], providers: [provideFakeDirectionality(textDirection)], }); diff --git a/src/cdk/a11y/aria-describer/aria-describer.spec.ts b/src/cdk/a11y/aria-describer/aria-describer.spec.ts index eea223a7f2a6..787dc25d3a76 100644 --- a/src/cdk/a11y/aria-describer/aria-describer.spec.ts +++ b/src/cdk/a11y/aria-describer/aria-describer.spec.ts @@ -10,7 +10,6 @@ describe('AriaDescriber', () => { function createFixture(providers: Provider[] = []) { TestBed.configureTestingModule({ - imports: [A11yModule, TestApp], providers: [AriaDescriber, ...providers], }); diff --git a/src/cdk/a11y/focus-monitor/focus-monitor.spec.ts b/src/cdk/a11y/focus-monitor/focus-monitor.spec.ts index 67e20cd8237d..e2cc98c05010 100644 --- a/src/cdk/a11y/focus-monitor/focus-monitor.spec.ts +++ b/src/cdk/a11y/focus-monitor/focus-monitor.spec.ts @@ -31,7 +31,6 @@ describe('FocusMonitor', () => { fakeActiveElement = null; TestBed.configureTestingModule({ - imports: [A11yModule, PlainButton], providers: [ { provide: DOCUMENT, @@ -466,7 +465,6 @@ describe('FocusMonitor with "eventual" detection', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [A11yModule, PlainButton], providers: [ { provide: FOCUS_MONITOR_DEFAULT_OPTIONS, @@ -499,20 +497,6 @@ describe('FocusMonitor with "eventual" detection', () => { }); describe('cdkMonitorFocus', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ - A11yModule, - ButtonWithFocusClasses, - ComplexComponentWithMonitorElementFocus, - ComplexComponentWithMonitorSubtreeFocus, - ComplexComponentWithMonitorSubtreeFocusAndMonitorElementFocus, - FocusMonitorOnCommentNode, - ExportedFocusMonitor, - ], - }); - }); - describe('button with cdkMonitorElementFocus', () => { let fixture: ComponentFixture; let buttonElement: HTMLElement; @@ -820,7 +804,6 @@ describe('FocusMonitor observable stream', () => { beforeEach(() => { fakePlatform = {isBrowser: true} as Platform; TestBed.configureTestingModule({ - imports: [A11yModule, PlainButton], providers: [{provide: Platform, useValue: fakePlatform}], }); fixture = TestBed.createComponent(PlainButton); @@ -854,9 +837,6 @@ describe('FocusMonitor input label detection', () => { let focusMonitor: FocusMonitor; beforeEach(() => { - TestBed.configureTestingModule({ - imports: [A11yModule, CheckboxWithLabel], - }); fixture = TestBed.createComponent(CheckboxWithLabel); focusMonitor = TestBed.inject(FocusMonitor); fixture.detectChanges(); diff --git a/src/cdk/a11y/focus-monitor/focus-monitor.zone.spec.ts b/src/cdk/a11y/focus-monitor/focus-monitor.zone.spec.ts index d599886e5201..fda5a31dd5c4 100644 --- a/src/cdk/a11y/focus-monitor/focus-monitor.zone.spec.ts +++ b/src/cdk/a11y/focus-monitor/focus-monitor.zone.spec.ts @@ -14,7 +14,6 @@ describe('FocusMonitor observable stream Zone.js integration', () => { beforeEach(() => { fakePlatform = {isBrowser: true} as Platform; TestBed.configureTestingModule({ - imports: [A11yModule, PlainButton], providers: [{provide: Platform, useValue: fakePlatform}, provideZoneChangeDetection()], }); fixture = TestBed.createComponent(PlainButton); diff --git a/src/cdk/a11y/focus-trap/configurable-focus-trap.spec.ts b/src/cdk/a11y/focus-trap/configurable-focus-trap.spec.ts index b19ad2c90ad6..88f441664f80 100644 --- a/src/cdk/a11y/focus-trap/configurable-focus-trap.spec.ts +++ b/src/cdk/a11y/focus-trap/configurable-focus-trap.spec.ts @@ -9,7 +9,6 @@ import { } from '@angular/core'; import {ComponentFixture, TestBed} from '@angular/core/testing'; import { - A11yModule, ConfigurableFocusTrap, ConfigurableFocusTrapFactory, FOCUS_TRAP_INERT_STRATEGY, @@ -101,7 +100,6 @@ function createComponent( providers: Provider[] = [], ): ComponentFixture { TestBed.configureTestingModule({ - imports: [A11yModule, componentType], providers: providers, }); diff --git a/src/cdk/a11y/focus-trap/event-listener-inert-strategy.spec.ts b/src/cdk/a11y/focus-trap/event-listener-inert-strategy.spec.ts index 709877c1219c..7d4dd3d53c2f 100644 --- a/src/cdk/a11y/focus-trap/event-listener-inert-strategy.spec.ts +++ b/src/cdk/a11y/focus-trap/event-listener-inert-strategy.spec.ts @@ -10,7 +10,6 @@ import { import {ComponentFixture, TestBed, fakeAsync, flush} from '@angular/core/testing'; import {patchElementFocus} from '../../testing/private'; import { - A11yModule, ConfigurableFocusTrap, ConfigurableFocusTrapFactory, EventListenerFocusTrapInertStrategy, @@ -69,10 +68,7 @@ function createComponent( componentType: Type, providers: Provider[] = [], ): ComponentFixture { - TestBed.configureTestingModule({ - imports: [A11yModule, componentType], - providers: providers, - }); + TestBed.configureTestingModule({providers}); return TestBed.createComponent(componentType); } diff --git a/src/cdk/a11y/focus-trap/focus-trap.spec.ts b/src/cdk/a11y/focus-trap/focus-trap.spec.ts index fac1eb3cc9d8..428ca86c3337 100644 --- a/src/cdk/a11y/focus-trap/focus-trap.spec.ts +++ b/src/cdk/a11y/focus-trap/focus-trap.spec.ts @@ -13,24 +13,6 @@ import {By} from '@angular/platform-browser'; import {A11yModule, CdkTrapFocus, FocusTrap} from '../index'; describe('FocusTrap', () => { - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ - A11yModule, - PortalModule, - FocusTrapWithBindings, - SimpleFocusTrap, - FocusTrapTargets, - FocusTrapWithSvg, - FocusTrapWithoutFocusableElements, - FocusTrapWithAutoCapture, - FocusTrapUnfocusableTarget, - FocusTrapInsidePortal, - FocusTrapWithAutoCaptureInShadowDom, - ], - }); - })); - describe('with default element', () => { let fixture: ComponentFixture; let focusTrapInstance: FocusTrap; diff --git a/src/cdk/a11y/high-contrast-mode/high-contrast-mode-detector.spec.ts b/src/cdk/a11y/high-contrast-mode/high-contrast-mode-detector.spec.ts index 607e2d8fef48..1bb990251adf 100644 --- a/src/cdk/a11y/high-contrast-mode/high-contrast-mode-detector.spec.ts +++ b/src/cdk/a11y/high-contrast-mode/high-contrast-mode-detector.spec.ts @@ -8,7 +8,6 @@ import { import {Platform} from '../../platform'; import {TestBed} from '@angular/core/testing'; import {Provider, DOCUMENT} from '@angular/core'; -import {A11yModule} from '../a11y-module'; describe('HighContrastModeDetector', () => { function getDetector(document: unknown, platform?: Platform) { @@ -18,7 +17,7 @@ describe('HighContrastModeDetector', () => { providers.push({provide: Platform, useValue: platform}); } - TestBed.configureTestingModule({imports: [A11yModule], providers}); + TestBed.configureTestingModule({providers}); return TestBed.inject(HighContrastModeDetector); } diff --git a/src/cdk/a11y/live-announcer/live-announcer.spec.ts b/src/cdk/a11y/live-announcer/live-announcer.spec.ts index 7c9195fbd6a7..0be11cf45cf4 100644 --- a/src/cdk/a11y/live-announcer/live-announcer.spec.ts +++ b/src/cdk/a11y/live-announcer/live-announcer.spec.ts @@ -18,12 +18,6 @@ describe('LiveAnnouncer', () => { let fixture: ComponentFixture; describe('with default element', () => { - beforeEach(() => - TestBed.configureTestingModule({ - imports: [A11yModule, TestApp, TestModal], - }), - ); - beforeEach(fakeAsync(() => { announcer = TestBed.inject(LiveAnnouncer); ariaLiveElement = getLiveElement(); @@ -123,10 +117,7 @@ describe('LiveAnnouncer', () => { it('should ensure that there is only one live element at a time', fakeAsync(() => { fixture.destroy(); - - TestBed.resetTestingModule().configureTestingModule({ - imports: [A11yModule], - }); + TestBed.resetTestingModule().configureTestingModule({}); const extraElement = document.createElement('div'); extraElement.classList.add('cdk-live-announcer-element'); @@ -219,7 +210,6 @@ describe('LiveAnnouncer', () => { customLiveElement = document.createElement('div'); return TestBed.configureTestingModule({ - imports: [A11yModule, TestApp], providers: [{provide: LIVE_ANNOUNCER_ELEMENT_TOKEN, useValue: customLiveElement}], }); }); @@ -242,7 +232,6 @@ describe('LiveAnnouncer', () => { describe('with a default options', () => { beforeEach(() => { return TestBed.configureTestingModule({ - imports: [A11yModule, TestApp], providers: [ { provide: LIVE_ANNOUNCER_DEFAULT_OPTIONS, @@ -290,7 +279,6 @@ describe('CdkAriaLive', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - imports: [A11yModule, DivWithCdkAriaLive], providers: [ { provide: MutationObserverFactory, diff --git a/src/cdk/accordion/accordion-item.spec.ts b/src/cdk/accordion/accordion-item.spec.ts index 441ec3f46f3c..688e54dbb828 100644 --- a/src/cdk/accordion/accordion-item.spec.ts +++ b/src/cdk/accordion/accordion-item.spec.ts @@ -1,15 +1,9 @@ -import {waitForAsync, TestBed, ComponentFixture} from '@angular/core/testing'; +import {TestBed, ComponentFixture} from '@angular/core/testing'; import {Component} from '@angular/core'; import {By} from '@angular/platform-browser'; import {CdkAccordionModule, CdkAccordionItem} from './public-api'; describe('CdkAccordionItem', () => { - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkAccordionModule, SingleItem, ItemGroupWithoutAccordion, ItemGroupWithAccordion], - }); - })); - describe('single item', () => { let fixture: ComponentFixture; let item: CdkAccordionItem; diff --git a/src/cdk/accordion/accordion.spec.ts b/src/cdk/accordion/accordion.spec.ts index 81984fe39c80..024fe4f3ad01 100644 --- a/src/cdk/accordion/accordion.spec.ts +++ b/src/cdk/accordion/accordion.spec.ts @@ -1,4 +1,4 @@ -import {waitForAsync, TestBed} from '@angular/core/testing'; +import {TestBed} from '@angular/core/testing'; import {Component, QueryList, ViewChild, ViewChildren} from '@angular/core'; import {By} from '@angular/platform-browser'; import {CdkAccordion} from './accordion'; @@ -6,12 +6,6 @@ import {CdkAccordionItem} from './accordion-item'; import {CdkAccordionModule} from './accordion-module'; describe('CdkAccordion', () => { - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkAccordionModule, SetOfItems, NestedItems], - }); - })); - it('should ensure only one item is expanded at a time', () => { const fixture = TestBed.createComponent(SetOfItems); const [firstPanel, secondPanel] = fixture.debugElement diff --git a/src/cdk/bidi/directionality.spec.ts b/src/cdk/bidi/directionality.spec.ts index a4b3f03b6af5..ea813342008b 100644 --- a/src/cdk/bidi/directionality.spec.ts +++ b/src/cdk/bidi/directionality.spec.ts @@ -10,13 +10,6 @@ describe('Directionality', () => { fakeDocument = {body: {}, documentElement: {}}; TestBed.configureTestingModule({ - imports: [ - BidiModule, - ElementWithDir, - ElementWithPredefinedAutoDir, - InjectsDirectionality, - ElementWithPredefinedUppercaseDir, - ], providers: [{provide: DIR_DOCUMENT, useFactory: () => fakeDocument}], }); })); diff --git a/src/cdk/clipboard/copy-to-clipboard.spec.ts b/src/cdk/clipboard/copy-to-clipboard.spec.ts index 215f832838e7..56724a76df1b 100644 --- a/src/cdk/clipboard/copy-to-clipboard.spec.ts +++ b/src/cdk/clipboard/copy-to-clipboard.spec.ts @@ -26,12 +26,6 @@ describe('CdkCopyToClipboard', () => { let fixture: ComponentFixture; let clipboard: Clipboard; - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [ClipboardModule, CopyToClipboardHost], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(CopyToClipboardHost); diff --git a/src/cdk/dialog/dialog.spec.ts b/src/cdk/dialog/dialog.spec.ts index c36e70516fb4..1f9e65b3b891 100644 --- a/src/cdk/dialog/dialog.spec.ts +++ b/src/cdk/dialog/dialog.spec.ts @@ -1306,7 +1306,6 @@ describe('Dialog with a parent Dialog', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - imports: [DialogModule, ComponentThatProvidesMatDialog], providers: [ { provide: OverlayContainer, diff --git a/src/cdk/drag-drop/directives/test-utils.spec.ts b/src/cdk/drag-drop/directives/test-utils.spec.ts index 77d741971b5c..9a8874e95d3c 100644 --- a/src/cdk/drag-drop/directives/test-utils.spec.ts +++ b/src/cdk/drag-drop/directives/test-utils.spec.ts @@ -30,7 +30,6 @@ export function createComponent( }; TestBed.configureTestingModule({ - imports: [componentType], providers: [ { provide: CDK_DRAG_CONFIG, diff --git a/src/cdk/drag-drop/drag-drop-registry.spec.ts b/src/cdk/drag-drop/drag-drop-registry.spec.ts index 8a85a6b2537f..f32e9d295153 100644 --- a/src/cdk/drag-drop/drag-drop-registry.spec.ts +++ b/src/cdk/drag-drop/drag-drop-registry.spec.ts @@ -16,10 +16,6 @@ describe('DragDropRegistry', () => { let registry: DragDropRegistry; beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [DragDropModule, BlankComponent], - }); - fixture = TestBed.createComponent(BlankComponent); fixture.detectChanges(); registry = TestBed.inject(DragDropRegistry); diff --git a/src/cdk/drag-drop/drag-drop.spec.ts b/src/cdk/drag-drop/drag-drop.spec.ts index 89f67d796dc8..12c797f49345 100644 --- a/src/cdk/drag-drop/drag-drop.spec.ts +++ b/src/cdk/drag-drop/drag-drop.spec.ts @@ -1,7 +1,6 @@ import {Component, ElementRef, inject} from '@angular/core'; import {TestBed, fakeAsync} from '@angular/core/testing'; import {DragDrop} from './drag-drop'; -import {DragDropModule} from './drag-drop-module'; import {DragRef} from './drag-ref'; import {DropListRef} from './drop-list-ref'; @@ -9,10 +8,6 @@ describe('DragDrop', () => { let service: DragDrop; beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [DragDropModule, TestComponent], - }); - service = TestBed.inject(DragDrop); })); diff --git a/src/cdk/layout/breakpoints-observer.spec.ts b/src/cdk/layout/breakpoints-observer.spec.ts index db2619b51ddd..89374f8bff19 100644 --- a/src/cdk/layout/breakpoints-observer.spec.ts +++ b/src/cdk/layout/breakpoints-observer.spec.ts @@ -6,7 +6,6 @@ * found in the LICENSE file at https://angular.dev/license */ -import {LayoutModule} from './layout-module'; import {BreakpointObserver, BreakpointState} from './breakpoints-observer'; import {MediaMatcher} from './media-matcher'; import {fakeAsync, TestBed, flush, tick} from '@angular/core/testing'; @@ -20,7 +19,6 @@ describe('BreakpointObserver', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - imports: [LayoutModule], providers: [{provide: MediaMatcher, useClass: FakeMediaMatcher}], }); breakpointObserver = TestBed.inject(BreakpointObserver); diff --git a/src/cdk/menu/menu-bar.spec.ts b/src/cdk/menu/menu-bar.spec.ts index ea016465a9e1..b396f0e7a2a0 100644 --- a/src/cdk/menu/menu-bar.spec.ts +++ b/src/cdk/menu/menu-bar.spec.ts @@ -45,9 +45,7 @@ describe('MenuBar', () => { let menuItems: CdkMenuItemRadio[]; beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, MenuBarRadioGroup], - }); + TestBed.configureTestingModule({}); fixture = TestBed.createComponent(MenuBarRadioGroup); fixture.detectChanges(); @@ -105,9 +103,7 @@ describe('MenuBar', () => { } beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, MultiMenuWithSubmenu], - }); + TestBed.configureTestingModule({}); })); beforeEach(() => { @@ -528,12 +524,6 @@ describe('MenuBar', () => { detectChanges(); } - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, MultiMenuWithSubmenu], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(MultiMenuWithSubmenu); detectChanges(); @@ -655,12 +645,6 @@ describe('MenuBar', () => { detectChanges(); } - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, MenuWithCheckboxes], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(MenuWithCheckboxes); detectChanges(); @@ -721,12 +705,6 @@ describe('MenuBar', () => { detectChanges(); } - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, MenuWithRadioButtons], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(MenuWithRadioButtons); detectChanges(); @@ -776,12 +754,6 @@ describe('MenuBar', () => { grabElementsForTesting(); } - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, MenuBarWithMenusAndInlineMenu], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(MenuBarWithMenusAndInlineMenu); detectChanges(); @@ -895,12 +867,6 @@ describe('MenuBar', () => { detectChanges(); } - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, MultiMenuWithSubmenu], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(MultiMenuWithSubmenu); detectChanges(); diff --git a/src/cdk/menu/menu-group.spec.ts b/src/cdk/menu/menu-group.spec.ts index 4b0659e00011..f23620d3d379 100644 --- a/src/cdk/menu/menu-group.spec.ts +++ b/src/cdk/menu/menu-group.spec.ts @@ -12,10 +12,6 @@ describe('MenuGroup', () => { let menuItems: CdkMenuItemCheckbox[]; beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, CheckboxMenu], - }); - fixture = TestBed.createComponent(CheckboxMenu); fixture.detectChanges(); @@ -39,10 +35,6 @@ describe('MenuGroup', () => { let menuItems: CdkMenuItemRadio[]; beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, MenuWithMultipleRadioGroups], - }); - fixture = TestBed.createComponent(MenuWithMultipleRadioGroups); fixture.detectChanges(); diff --git a/src/cdk/menu/menu-item-checkbox.spec.ts b/src/cdk/menu/menu-item-checkbox.spec.ts index d811b89f0178..d35bb43976e3 100644 --- a/src/cdk/menu/menu-item-checkbox.spec.ts +++ b/src/cdk/menu/menu-item-checkbox.spec.ts @@ -10,7 +10,6 @@ describe('MenuItemCheckbox', () => { let checkboxElement: HTMLButtonElement; beforeEach(() => { - TestBed.configureTestingModule({imports: [CdkMenuModule, SingleCheckboxButton]}); fixture = TestBed.createComponent(SingleCheckboxButton); fixture.detectChanges(); diff --git a/src/cdk/menu/menu-item-radio.spec.ts b/src/cdk/menu/menu-item-radio.spec.ts index 47b685ebd370..84fc0a845427 100644 --- a/src/cdk/menu/menu-item-radio.spec.ts +++ b/src/cdk/menu/menu-item-radio.spec.ts @@ -10,7 +10,6 @@ describe('MenuItemRadio', () => { let radioElement: HTMLButtonElement; beforeEach(() => { - TestBed.configureTestingModule({imports: [CdkMenuModule, SimpleRadioButton]}); fixture = TestBed.createComponent(SimpleRadioButton); fixture.detectChanges(); diff --git a/src/cdk/menu/menu-stack.spec.ts b/src/cdk/menu/menu-stack.spec.ts index e2e946869e3b..4cedd983fc2c 100644 --- a/src/cdk/menu/menu-stack.spec.ts +++ b/src/cdk/menu/menu-stack.spec.ts @@ -1,7 +1,7 @@ import {QueryList, ViewChild, ViewChildren, Component} from '@angular/core'; import {CdkMenu} from './menu'; import {CdkMenuBar} from './menu-bar'; -import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; import {CdkMenuTrigger} from './menu-trigger'; import {MenuStack} from './menu-stack'; import {CdkMenuModule} from './menu-module'; @@ -20,12 +20,6 @@ describe('MenuStack', () => { menuStack = fixture.componentInstance.menuBar.menuStack; } - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, MultiMenuWithSubmenu], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(MultiMenuWithSubmenu); fixture.detectChanges(); diff --git a/src/cdk/menu/menu.spec.ts b/src/cdk/menu/menu.spec.ts index c602ff677f22..27e27ba0daf9 100644 --- a/src/cdk/menu/menu.spec.ts +++ b/src/cdk/menu/menu.spec.ts @@ -26,10 +26,6 @@ describe('Menu', () => { let menuItems: CdkMenuItemCheckbox[]; beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, MenuCheckboxGroup], - }); - fixture = TestBed.createComponent(MenuCheckboxGroup); fixture.detectChanges(); @@ -60,12 +56,6 @@ describe('Menu', () => { let nativeMenu: HTMLElement; let nativeMenuItems: HTMLElement[]; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, InlineMenu], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(InlineMenu); fixture.detectChanges(); @@ -135,12 +125,6 @@ describe('Menu', () => { let nativeMenus: HTMLElement[]; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, WithComplexNestedMenus], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(WithComplexNestedMenus); detectChanges(); @@ -326,12 +310,6 @@ describe('Menu', () => { let nativeMenus: HTMLElement[]; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, WithComplexNestedMenusOnBottom], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(WithComplexNestedMenusOnBottom); detectChanges(); @@ -507,12 +485,6 @@ describe('Menu', () => { let fixture: ComponentFixture; let nativeMenuItems: HTMLElement[]; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [CdkMenuModule, MenuWithActiveItem], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(MenuWithActiveItem); fixture.detectChanges(); diff --git a/src/cdk/menu/pointer-focus-tracker.spec.ts b/src/cdk/menu/pointer-focus-tracker.spec.ts index b747512e442a..6fba4431e432 100644 --- a/src/cdk/menu/pointer-focus-tracker.spec.ts +++ b/src/cdk/menu/pointer-focus-tracker.spec.ts @@ -7,7 +7,7 @@ import { inject, Renderer2, } from '@angular/core'; -import {waitForAsync, ComponentFixture, TestBed} from '@angular/core/testing'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; import {createMouseEvent, dispatchEvent} from '../../cdk/testing/private'; import {Observable} from 'rxjs'; import {FocusableElement, PointerFocusTracker} from './pointer-focus-tracker'; @@ -25,12 +25,6 @@ describe('FocusMouseManger', () => { mockElements = fixture.componentInstance._allItems.toArray(); } - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [MultiElementWithConditionalComponent, MockWrapper], - }); - })); - beforeEach(() => { fixture = TestBed.createComponent(MultiElementWithConditionalComponent); fixture.detectChanges(); diff --git a/src/cdk/observers/observe-content.spec.ts b/src/cdk/observers/observe-content.spec.ts index ba7543a4fa35..82a6ea4678c5 100644 --- a/src/cdk/observers/observe-content.spec.ts +++ b/src/cdk/observers/observe-content.spec.ts @@ -4,12 +4,6 @@ import {ContentObserver, MutationObserverFactory, ObserversModule} from './obser describe('Observe content directive', () => { describe('basic usage', () => { - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ObserversModule, ComponentWithTextContent, ComponentWithChildTextContent], - }); - })); - it('should trigger the callback when the content of the element changes', done => { let fixture = TestBed.createComponent(ComponentWithTextContent); fixture.detectChanges(); @@ -82,7 +76,6 @@ describe('Observe content directive', () => { callbacks = []; TestBed.configureTestingModule({ - imports: [ObserversModule, ComponentWithDebouncedListener], providers: [ { provide: MutationObserverFactory, @@ -124,7 +117,6 @@ describe('ContentObserver injectable', () => { callbacks = []; TestBed.configureTestingModule({ - imports: [ObserversModule, UnobservedComponentWithTextContent], providers: [ { provide: MutationObserverFactory, @@ -193,9 +185,7 @@ describe('ContentObserver injectable', () => { let contentObserver: ContentObserver; beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ObserversModule, UnobservedComponentWithTextContent], - }); + TestBed.configureTestingModule({}); const fixture = TestBed.createComponent(UnobservedComponentWithTextContent); fixture.autoDetectChanges(); diff --git a/src/cdk/observers/private/shared-resize-observer.spec.ts b/src/cdk/observers/private/shared-resize-observer.spec.ts index 73ef98a55ba8..15e38cbdb79b 100644 --- a/src/cdk/observers/private/shared-resize-observer.spec.ts +++ b/src/cdk/observers/private/shared-resize-observer.spec.ts @@ -50,9 +50,6 @@ describe('SharedResizeObserver', () => { beforeEach(() => { originalResizeObserver = ResizeObserver; window.ResizeObserver = MockResizeObserver; - TestBed.configureTestingModule({ - imports: [TestComponent], - }); fixture = TestBed.createComponent(TestComponent); fixture.detectChanges(); instance = fixture.componentInstance; diff --git a/src/cdk/overlay/overlay-directives.spec.ts b/src/cdk/overlay/overlay-directives.spec.ts index 1969e38e05ed..7db6aa293b4a 100644 --- a/src/cdk/overlay/overlay-directives.spec.ts +++ b/src/cdk/overlay/overlay-directives.spec.ts @@ -35,7 +35,6 @@ describe('Overlay directives', () => { dir = signal('ltr'); TestBed.configureTestingModule({ - imports: [OverlayModule, ConnectedOverlayDirectiveTest, ConnectedOverlayPropertyInitOrder], providers: [ provideFakeDirectionality(dir), { diff --git a/src/cdk/overlay/overlay-directives.zone.spec.ts b/src/cdk/overlay/overlay-directives.zone.spec.ts index 3cec7fd804f0..53907bac554d 100644 --- a/src/cdk/overlay/overlay-directives.zone.spec.ts +++ b/src/cdk/overlay/overlay-directives.zone.spec.ts @@ -14,7 +14,6 @@ describe('Overlay directives Zone.js integration', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [OverlayModule, ConnectedOverlayDirectiveTest, ConnectedOverlayPropertyInitOrder], providers: [provideZoneChangeDetection()], }); }); @@ -111,14 +110,3 @@ class ConnectedOverlayDirectiveTest { attachResult: HTMLElement; transformOriginSelector: string; } - -@Component({ - template: ` - - Menu content`, - imports: [OverlayModule], -}) -class ConnectedOverlayPropertyInitOrder { - @ViewChild(CdkConnectedOverlay) connectedOverlayDirective: CdkConnectedOverlay; - @ViewChild('trigger') trigger: CdkOverlayOrigin; -} diff --git a/src/cdk/overlay/overlay.spec.ts b/src/cdk/overlay/overlay.spec.ts index b63cefa746ef..b33f7514bb91 100644 --- a/src/cdk/overlay/overlay.spec.ts +++ b/src/cdk/overlay/overlay.spec.ts @@ -50,7 +50,7 @@ describe('Overlay', () => { function setup(imports: Type[] = []) { dir = signal('ltr'); TestBed.configureTestingModule({ - imports: [OverlayModule, ...imports], + imports, providers: [ provideFakeDirectionality(dir), { diff --git a/src/cdk/overlay/position/flexible-connected-position-strategy.spec.ts b/src/cdk/overlay/position/flexible-connected-position-strategy.spec.ts index 757dd8f92038..cc96b41fec7e 100644 --- a/src/cdk/overlay/position/flexible-connected-position-strategy.spec.ts +++ b/src/cdk/overlay/position/flexible-connected-position-strategy.spec.ts @@ -35,10 +35,6 @@ describe('FlexibleConnectedPositionStrategy', () => { let injector: Injector; beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ScrollingModule, OverlayModule, PortalModule, TestOverlay], - }); - injector = TestBed.inject(Injector); overlayContainer = TestBed.inject(OverlayContainer); viewport = TestBed.inject(ViewportRuler); diff --git a/src/cdk/overlay/position/global-position-strategy.spec.ts b/src/cdk/overlay/position/global-position-strategy.spec.ts index e0c7f8080420..7897d619beb2 100644 --- a/src/cdk/overlay/position/global-position-strategy.spec.ts +++ b/src/cdk/overlay/position/global-position-strategy.spec.ts @@ -14,10 +14,6 @@ describe('GlobalPositonStrategy', () => { let injector: Injector; beforeEach(() => { - TestBed.configureTestingModule({ - imports: [OverlayModule, PortalModule, BlankPortal], - }); - injector = TestBed.inject(Injector); }); diff --git a/src/cdk/overlay/scroll/block-scroll-strategy.spec.ts b/src/cdk/overlay/scroll/block-scroll-strategy.spec.ts index c7aaa6a2b826..fdc60bcbe89f 100644 --- a/src/cdk/overlay/scroll/block-scroll-strategy.spec.ts +++ b/src/cdk/overlay/scroll/block-scroll-strategy.spec.ts @@ -22,8 +22,6 @@ describe('BlockScrollStrategy', () => { let overlayContainer: OverlayContainer; beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({imports: [OverlayModule, PortalModule, FocacciaMsg]}); - const injector = TestBed.inject(Injector); const overlayConfig = new OverlayConfig({scrollStrategy: createBlockScrollStrategy(injector)}); diff --git a/src/cdk/overlay/scroll/close-scroll-strategy.spec.ts b/src/cdk/overlay/scroll/close-scroll-strategy.spec.ts index 60c338a39fa6..5fe2444268ba 100644 --- a/src/cdk/overlay/scroll/close-scroll-strategy.spec.ts +++ b/src/cdk/overlay/scroll/close-scroll-strategy.spec.ts @@ -24,7 +24,6 @@ describe('CloseScrollStrategy', () => { scrollPosition = 0; TestBed.configureTestingModule({ - imports: [OverlayModule, PortalModule, MozarellaMsg], providers: [ { provide: ScrollDispatcher, diff --git a/src/cdk/overlay/scroll/close-scroll-strategy.zone.spec.ts b/src/cdk/overlay/scroll/close-scroll-strategy.zone.spec.ts index d695f1a309ff..3fd78945b815 100644 --- a/src/cdk/overlay/scroll/close-scroll-strategy.zone.spec.ts +++ b/src/cdk/overlay/scroll/close-scroll-strategy.zone.spec.ts @@ -25,7 +25,6 @@ describe('CloseScrollStrategy Zone.js integration', () => { scrollPosition = 0; TestBed.configureTestingModule({ - imports: [OverlayModule, PortalModule, MozarellaMsg], providers: [ provideZoneChangeDetection(), { diff --git a/src/cdk/overlay/scroll/reposition-scroll-strategy.spec.ts b/src/cdk/overlay/scroll/reposition-scroll-strategy.spec.ts index 8a1c9effce12..f822c91971b3 100644 --- a/src/cdk/overlay/scroll/reposition-scroll-strategy.spec.ts +++ b/src/cdk/overlay/scroll/reposition-scroll-strategy.spec.ts @@ -21,7 +21,6 @@ describe('RepositionScrollStrategy', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [OverlayModule, PortalModule, PastaMsg], providers: [ { provide: ScrollDispatcher, diff --git a/src/cdk/portal/portal.spec.ts b/src/cdk/portal/portal.spec.ts index 44f4a37992d0..8726f014d4f0 100644 --- a/src/cdk/portal/portal.spec.ts +++ b/src/cdk/portal/portal.spec.ts @@ -22,19 +22,6 @@ import {ComponentPortal, DomPortal, Portal, TemplatePortal} from './portal'; import {CdkPortal, CdkPortalOutlet, PortalModule} from './portal-directives'; describe('Portals', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ - PortalModule, - PortalTestApp, - UnboundPortalTestApp, - ArbitraryViewContainerRefComponent, - PizzaMsg, - SaveParentNodeOnInit, - ], - }); - }); - describe('CdkPortalOutlet', () => { let fixture: ComponentFixture; From 3de927f9d003312604a833e80df8eff77c4a96d7 Mon Sep 17 00:00:00 2001 From: Andrew Seguin Date: Wed, 30 Jul 2025 09:54:21 -0600 Subject: [PATCH 47/77] fix(material/core): fill in m2 system token values (#31615) (cherry picked from commit 993a9a39301f757b78a97641f5863b8fa1f83f8c) --- .../core/tokens/m2/_md-sys-color.scss | 137 ++++++++---------- .../core/tokens/m2/_md-sys-elevation.scss | 18 +-- .../core/tokens/m2/_md-sys-motion.scss | 58 ++++---- .../core/tokens/m2/_md-sys-shape.scss | 30 ++-- .../core/tokens/m2/_md-sys-state.scss | 9 +- 5 files changed, 109 insertions(+), 143 deletions(-) diff --git a/src/material/core/tokens/m2/_md-sys-color.scss b/src/material/core/tokens/m2/_md-sys-color.scss index 7e6c238cdaf6..a4c37db77bc5 100644 --- a/src/material/core/tokens/m2/_md-sys-color.scss +++ b/src/material/core/tokens/m2/_md-sys-color.scss @@ -1,8 +1,3 @@ -// -// Design system display name: Material 3 -// Design system version: v0.161 -// - @use 'sass:map'; @use '../../m2/palette'; @@ -27,40 +22,38 @@ inverse-on-surface: rgba(black, 0.87), outline: rgba(white, 0.12), outline-variant: rgba(white, 0.38), - - // TBD - error-container: null, - on-background: null, - on-error-container: null, - on-primary-container: null, - on-primary-fixed: null, - on-primary-fixed-variant: null, - on-secondary-container: null, - on-secondary-fixed: null, - on-secondary-fixed-variant: null, - on-tertiary: null, - on-tertiary-container: null, - on-tertiary-fixed: null, - on-tertiary-fixed-variant: null, - primary-container: null, - primary-fixed: null, - primary-fixed-dim: null, - scrim: null, - secondary-container: null, - secondary-fixed: null, - secondary-fixed-dim: null, - surface-bright: null, - surface-container: null, - surface-container-high: null, - surface-container-highest: null, - surface-container-low: null, - surface-container-lowest: null, - surface-dim: null, - surface-tint: null, - tertiary: null, - tertiary-container: null, - tertiary-fixed: null, - tertiary-fixed-dim: null, + error-container: map.get($palettes, warn, default), + on-background: white, + on-error-container: map.get($palettes, warn, default-contrast), + on-primary-container: map.get($palettes, primary, default-contrast), + on-primary-fixed: map.get($palettes, primary, default-contrast), + on-primary-fixed-variant: map.get($palettes, primary, default-contrast), + on-secondary-container: map.get($palettes, accent, default), + on-secondary-fixed: map.get($palettes, accent, default), + on-secondary-fixed-variant: map.get($palettes, accent, default), + on-tertiary: map.get($palettes, accent, default-contrast), + on-tertiary-container: map.get($palettes, accent, default-contrast), + on-tertiary-fixed: map.get($palettes, accent, default-contrast), + on-tertiary-fixed-variant: map.get($palettes, accent, default-contrast), + primary-container: map.get($palettes, primary, default), + primary-fixed: map.get($palettes, primary, default), + primary-fixed-dim: map.get($palettes, primary, default), + scrim: black, + secondary-container: map.get($palettes, accent, default-contrast), + secondary-fixed: map.get($palettes, accent, default-contrast), + secondary-fixed-dim: map.get($palettes, accent, default-contrast), + surface-bright: map.get(palette.$grey-palette, 800), + surface-container: map.get(palette.$grey-palette, 800), + surface-container-high: map.get(palette.$grey-palette, 800), + surface-container-highest: map.get(palette.$grey-palette, 800), + surface-container-low: map.get(palette.$grey-palette, 800), + surface-container-lowest: map.get(palette.$grey-palette, 800), + surface-dim: map.get(palette.$grey-palette, 800), + surface-tint: map.get(palette.$grey-palette, 800), + tertiary: map.get($palettes, accent, default), + tertiary-container: map.get($palettes, accent, default), + tertiary-fixed: map.get($palettes, accent, default), + tertiary-fixed-dim: map.get($palettes, accent, default), ); } @@ -85,39 +78,37 @@ inverse-on-surface: white, outline: rgba(black, 0.12), outline-variant: rgba(black, 0.38), - - // TBD - error-container: null, - on-background: null, - on-error-container: null, - on-primary-container: null, - on-primary-fixed: null, - on-primary-fixed-variant: null, - on-secondary-container: null, - on-secondary-fixed: null, - on-secondary-fixed-variant: null, - on-tertiary: null, - on-tertiary-container: null, - on-tertiary-fixed: null, - on-tertiary-fixed-variant: null, - primary-container: null, - primary-fixed: null, - primary-fixed-dim: null, - scrim: null, - secondary-container: null, - secondary-fixed: null, - secondary-fixed-dim: null, - surface-bright: null, - surface-container: null, - surface-container-high: null, - surface-container-highest: null, - surface-container-low: null, - surface-container-lowest: null, - surface-dim: null, - surface-tint: null, - tertiary: null, - tertiary-container: null, - tertiary-fixed: null, - tertiary-fixed-dim: null, + error-container: map.get($palettes, warn, default), + on-background: rgba(black, 0.87), + on-error-container: map.get($palettes, warn, default-contrast), + on-primary-container: map.get($palettes, primary, default-contrast), + on-primary-fixed: map.get($palettes, primary, default-contrast), + on-primary-fixed-variant: map.get($palettes, primary, default-contrast), + on-secondary-container: map.get($palettes, accent, default), + on-secondary-fixed: map.get($palettes, accent, default), + on-secondary-fixed-variant: map.get($palettes, accent, default), + on-tertiary: map.get($palettes, accent, default-contrast), + on-tertiary-container: map.get($palettes, accent, default-contrast), + on-tertiary-fixed: map.get($palettes, accent, default-contrast), + on-tertiary-fixed-variant: map.get($palettes, accent, default-contrast), + primary-container: map.get($palettes, primary, default), + primary-fixed: map.get($palettes, primary, default), + primary-fixed-dim: map.get($palettes, primary, default), + scrim: black, + secondary-container: map.get($palettes, accent, default-contrast), + secondary-fixed: map.get($palettes, accent, default-contrast), + secondary-fixed-dim: map.get($palettes, accent, default-contrast), + surface-bright: map.get(palette.$grey-palette, 800), + surface-container: map.get(palette.$grey-palette, 800), + surface-container-high: map.get(palette.$grey-palette, 800), + surface-container-highest: map.get(palette.$grey-palette, 800), + surface-container-low: map.get(palette.$grey-palette, 800), + surface-container-lowest: map.get(palette.$grey-palette, 800), + surface-dim: map.get(palette.$grey-palette, 800), + surface-tint: map.get(palette.$grey-palette, 800), + tertiary: map.get($palettes, accent, default), + tertiary-container: map.get($palettes, accent, default), + tertiary-fixed: map.get($palettes, accent, default), + tertiary-fixed-dim: map.get($palettes, accent, default), ); } diff --git a/src/material/core/tokens/m2/_md-sys-elevation.scss b/src/material/core/tokens/m2/_md-sys-elevation.scss index 338dae2ea8e7..2986702a7776 100644 --- a/src/material/core/tokens/m2/_md-sys-elevation.scss +++ b/src/material/core/tokens/m2/_md-sys-elevation.scss @@ -1,16 +1,10 @@ -// -// Design system display name: Material 3 -// Design system version: v0.161 -// - @function md-sys-elevation-values() { @return ( - // TBD - level0: null, - level1: null, - level2: null, - level3: null, - level4: null, - level5: null, + level0: 0, + level1: 1, + level2: 3, + level3: 6, + level4: 8, + level5: 12 ); } diff --git a/src/material/core/tokens/m2/_md-sys-motion.scss b/src/material/core/tokens/m2/_md-sys-motion.scss index 233682c6c359..b2a2c3da4c80 100644 --- a/src/material/core/tokens/m2/_md-sys-motion.scss +++ b/src/material/core/tokens/m2/_md-sys-motion.scss @@ -1,36 +1,30 @@ -// -// Design system display name: Material 3 -// Design system version: v0.161 -// - @function md-sys-motion-values() { @return ( - // TBD - duration-extra-long1: null, - duration-extra-long2: null, - duration-extra-long3: null, - duration-extra-long4: null, - duration-long1: null, - duration-long2: null, - duration-long3: null, - duration-long4: null, - duration-medium1: null, - duration-medium2: null, - duration-medium3: null, - duration-medium4: null, - duration-short1: null, - duration-short2: null, - duration-short3: null, - duration-short4: null, - easing-emphasized: null, - easing-emphasized-accelerate: null, - easing-emphasized-decelerate: null, - easing-legacy: null, - easing-legacy-accelerate: null, - easing-legacy-decelerate: null, - easing-linear: null, - easing-standard: null, - easing-standard-accelerate: null, - easing-standard-decelerate: null, + duration-extra-long1: 700ms, + duration-extra-long2: 800ms, + duration-extra-long3: 900ms, + duration-extra-long4: 1000ms, + duration-long1: 450ms, + duration-long2: 500ms, + duration-long3: 550ms, + duration-long4: 600ms, + duration-medium1: 250ms, + duration-medium2: 300ms, + duration-medium3: 350ms, + duration-medium4: 400ms, + duration-short1: 50ms, + duration-short2: 100ms, + duration-short3: 150ms, + duration-short4: 200ms, + easing-emphasized: cubic-bezier(0.2, 0, 0, 1), + easing-emphasized-accelerate: cubic-bezier(0.3, 0, 0.8, 0.15), + easing-emphasized-decelerate: cubic-bezier(0.05, 0.7, 0.1, 1), + easing-legacy: cubic-bezier(0.4, 0, 0.2, 1), + easing-legacy-accelerate: cubic-bezier(0.4, 0, 1, 1), + easing-legacy-decelerate: cubic-bezier(0, 0, 0.2, 1), + easing-linear: cubic-bezier(0, 0, 1, 1), + easing-standard: cubic-bezier(0.2, 0, 0, 1), + easing-standard-accelerate: cubic-bezier(0.3, 0, 1, 1), + easing-standard-decelerate: cubic-bezier(0, 0, 0, 1) ); } diff --git a/src/material/core/tokens/m2/_md-sys-shape.scss b/src/material/core/tokens/m2/_md-sys-shape.scss index 17499bf4ee24..0f82a9b36800 100644 --- a/src/material/core/tokens/m2/_md-sys-shape.scss +++ b/src/material/core/tokens/m2/_md-sys-shape.scss @@ -1,22 +1,16 @@ -// -// Design system display name: Material 3 -// Design system version: v0.161 -// - @function md-sys-shape-values() { @return ( - // TBD - corner-extra-large: null, - corner-extra-large-top: null, - corner-extra-small: null, - corner-extra-small-top: null, - corner-full: null, - corner-large: null, - corner-large-end: null, - corner-large-start: null, - corner-large-top: null, - corner-medium: null, - corner-none: null, - corner-small: null, + corner-extra-large: 28px, + corner-extra-large-top: (28px 28px 0 0), + corner-extra-small: 4px, + corner-extra-small-top: (4px 4px 0 0), + corner-full: 9999px, + corner-large: 16px, + corner-large-end: (0 16px 16px 0), + corner-large-start: (16px 0 0 16px), + corner-large-top: (16px 16px 0 0), + corner-medium: 12px, + corner-none: 0, + corner-small: 8px ); } diff --git a/src/material/core/tokens/m2/_md-sys-state.scss b/src/material/core/tokens/m2/_md-sys-state.scss index 5733370c9470..c70e69832460 100644 --- a/src/material/core/tokens/m2/_md-sys-state.scss +++ b/src/material/core/tokens/m2/_md-sys-state.scss @@ -1,15 +1,8 @@ -// -// Design system display name: Material 3 -// Design system version: v0.161 -// - @function md-sys-state-values($exclude-hardcoded-values: false) { @return ( + dragged-state-layer-opacity: 0.16, focus-state-layer-opacity: 0.12, hover-state-layer-opacity: 0.04, pressed-state-layer-opacity: 0.12, - - // TBD - dragged-state-layer-opacity: 0.16, ); } From 25d12df5b6af747c560dbd678a999ae96e3c7b13 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Wed, 30 Jul 2025 18:57:39 +0200 Subject: [PATCH 48/77] fix(material/schematics): set generated font family on body (#31618) The custom theme that we generate during `ng add` adds changes the `font` on the `html` element which is problematic, because it affects all the components where we use `rem` units. These changes move the styles to the `body` to resolve the issue. I've also changed the selector for the variables from `html` to `:root`. In practice they're the same, but `:root` seems to be the standard target for global variables. Fixes #31611. (cherry picked from commit 8576ccf1df6f1c898044d8587e51469c7c27ba31) --- .../schematics/ng-add/theming/create-custom-theme.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/material/schematics/ng-add/theming/create-custom-theme.ts b/src/material/schematics/ng-add/theming/create-custom-theme.ts index 91c8b0ad9660..9a648ead5f45 100644 --- a/src/material/schematics/ng-add/theming/create-custom-theme.ts +++ b/src/material/schematics/ng-add/theming/create-custom-theme.ts @@ -7,7 +7,7 @@ */ /** Create custom theme for the given application configuration. */ -export function createCustomTheme(userPaletteChoice: string) { +export function createCustomTheme(userPaletteChoice: string): string { const colorPalettes = new Map([ ['azure-blue', {primary: 'azure', tertiary: 'blue'}], ['rose-red', {primary: 'rose', tertiary: 'red'}], @@ -31,7 +31,9 @@ html { typography: Roboto, density: 0, )); +} +body { // Default the application to a light color theme. This can be changed to // \`dark\` to enable the dark color theme, or to \`light dark\` to defer to the // user's system settings. @@ -43,5 +45,9 @@ html { background-color: var(--mat-sys-surface); color: var(--mat-sys-on-surface); font: var(--mat-sys-body-medium); -}`; + + // Reset the user agent margin. + margin: 0; +} +`; } From d526019de155af2096d79c96e4f16b1a94fcbdb3 Mon Sep 17 00:00:00 2001 From: Wagner Maciel Date: Wed, 30 Jul 2025 14:38:42 -0400 Subject: [PATCH 49/77] release: cut the v20.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 b9e44ec33698..33a7f404d0c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ + +# 20.1.4 "alabandite-animal" (2025-07-30) +### cdk +| Commit | Type | Description | +| -- | -- | -- | +| [512066a90](https://github.com/angular/components/commit/512066a907555f0e31ab2315c90b0f07f860a023) | fix | **drag-drop:** incorrect index when returning item in mixed list ([#31592](https://github.com/angular/components/pull/31592)) | +| [b5fb4cb47](https://github.com/angular/components/commit/b5fb4cb479d73e01c51eac05af634cbbe1d7ce98) | fix | **listbox:** coerce tabindex value ([#31597](https://github.com/angular/components/pull/31597)) | +### material +| Commit | Type | Description | +| -- | -- | -- | +| [3e4625d1c](https://github.com/angular/components/commit/3e4625d1cf8c87313465633c0843892d34da0130) | fix | **core:** align gm3 colors ([#31485](https://github.com/angular/components/pull/31485)) | +| [3de927f9d](https://github.com/angular/components/commit/3de927f9d003312604a833e80df8eff77c4a96d7) | fix | **core:** fill in m2 system token values ([#31615](https://github.com/angular/components/pull/31615)) | +| [d18da5664](https://github.com/angular/components/commit/d18da5664c9a85f48d3d44aad98264cc2d031e1b) | fix | **radio:** rendering artifacts at some zoom levels ([#31612](https://github.com/angular/components/pull/31612)) | +| [25d12df5b](https://github.com/angular/components/commit/25d12df5b6af747c560dbd678a999ae96e3c7b13) | fix | **schematics:** set generated font family on body ([#31618](https://github.com/angular/components/pull/31618)) | +| [4ae4fe22d](https://github.com/angular/components/commit/4ae4fe22d54f139dcd606b71d489f9678acf5ce0) | fix | **slider:** tick marks not showing dynamically ([#31608](https://github.com/angular/components/pull/31608)) | +| [6e252739b](https://github.com/angular/components/commit/6e252739b0dd0d6990bdf6c08545e2df6c9949e2) | fix | **testing:** Modify input filtering to more broadly search for ([#31596](https://github.com/angular/components/pull/31596)) | + + + # 20.1.3 "tantalum-potato" (2025-07-23) ### cdk diff --git a/package.json b/package.json index c04b4e1c77eb..4e1d68e3c79e 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "ci-docs-monitor-test": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/docs-deploy/monitoring/ci-test.mts", "prepare": "husky" }, - "version": "20.1.3", + "version": "20.1.4", "dependencies": { "@angular-devkit/core": "catalog:", "@angular-devkit/schematics": "catalog:", From d6c47b966a25c471449813c37069dfc3eb8bc9d9 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Fri, 1 Aug 2025 10:50:06 +0200 Subject: [PATCH 50/77] docs(cdk/drag-drop): scrollable example not showing (#31627) Fixes that the scrollable example wasn't showing up properly, because it wasn't exported from the index file. Fixes #31619. (cherry picked from commit 84aea8751b63e43f276234ae8f9dbb7bfee5019e) --- src/components-examples/cdk/drag-drop/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components-examples/cdk/drag-drop/index.ts b/src/components-examples/cdk/drag-drop/index.ts index e54c8b6a3f8d..de8bfb538f06 100644 --- a/src/components-examples/cdk/drag-drop/index.ts +++ b/src/components-examples/cdk/drag-drop/index.ts @@ -19,3 +19,4 @@ export {CdkDragDropTableExample} from './cdk-drag-drop-table/cdk-drag-drop-table export {CdkDragDropMixedSortingExample} from './cdk-drag-drop-mixed-sorting/cdk-drag-drop-mixed-sorting-example'; export {CdkDragDropTabsExample} from './cdk-drag-drop-tabs/cdk-drag-drop-tabs-example'; export {CdkDragDropCopyListExample} from './cdk-drag-drop-copy-list/cdk-drag-drop-copy-list-example'; +export {CdkDragDropScrollableExample} from './cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example'; From f2bb6f0a8297984bd2d49271271d937350dcb6d9 Mon Sep 17 00:00:00 2001 From: Walter Breakell Date: Sat, 2 Aug 2025 04:29:33 -0700 Subject: [PATCH 51/77] docs: correct grammatical errors in custom stepper guide (#31635) (cherry picked from commit 3a308a8f2aa43159e786c768c9cbe5f0f3817cd7) --- docs/src/app/shared/guide-items/guide-items.ts | 2 +- guides/creating-a-custom-stepper-using-the-cdk-stepper.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/src/app/shared/guide-items/guide-items.ts b/docs/src/app/shared/guide-items/guide-items.ts index 296825e0d3ff..feb5aac17361 100644 --- a/docs/src/app/shared/guide-items/guide-items.ts +++ b/docs/src/app/shared/guide-items/guide-items.ts @@ -52,7 +52,7 @@ const GUIDES: GuideItem[] = [ 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.md.html', - overview: 'Create a custom stepper components using Angular CDK.', + overview: 'Create a custom stepper component using Angular CDK.', }, { id: 'using-component-harnesses', 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 8438de47e8a1..dd550c55a0cb 100644 --- a/guides/creating-a-custom-stepper-using-the-cdk-stepper.md +++ b/guides/creating-a-custom-stepper-using-the-cdk-stepper.md @@ -1,8 +1,8 @@ # Creating a custom stepper using the CDK stepper -The [CDK stepper](https://material.angular.dev/cdk/stepper/overview) allows to build a custom stepper which you can completely style yourself without any specific Material Design styling. +The [CDK stepper](https://material.angular.dev/cdk/stepper/overview) allows you to build a custom stepper which you can completely style yourself without any specific Material Design styling. -In this guide, we'll learn how we can build our own custom stepper using the CDK stepper. Here is what we'll build by the end of this guide: +In this guide, we'll learn how to build our own custom stepper using the CDK stepper. Here is what we'll build by the end of this guide: @@ -126,7 +126,7 @@ If you want to iterate over your steps and use your own custom component you can The above example allows the user to freely navigate between all steps. The `CdkStepper` additionally provides the linear mode which requires the user to complete previous steps before proceeding. -A simple example without using forms could look this way: +A simple example without using forms could look like this: **app.component.html** From 935cbc291fca74b72c0c4f44837c14f2e1820e83 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Sun, 3 Aug 2025 22:09:51 +0200 Subject: [PATCH 52/77] build: enable stricter checking of inputs and outputs (#31638) Enables flags for stricter type checking of inputs and outputs, as well as a flag that will prevent us from declaring private/protected inputs. (cherry picked from commit 11f9228e1b4c18c86bb3de43d02fe40a39fcfff7) --- docs/tsconfig.json | 3 +++ src/bazel-tsconfig-build.json | 4 ++++ src/cdk-experimental/radio-group/radio-group.ts | 2 +- src/material/chips/chip-action.ts | 2 +- src/tsconfig-legacy.json | 6 +++++- tsconfig.json | 4 ++++ 6 files changed, 18 insertions(+), 3 deletions(-) diff --git a/docs/tsconfig.json b/docs/tsconfig.json index f999763b7602..b7d48a9bc450 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -32,6 +32,9 @@ "strictInjectionParameters": true, "strictInputAccessModifiers": true, "strictTemplates": true, + "strictInputTypes": true, + "strictOutputEventTypes": true, + "strictDomEventTypes": true, "typeCheckHostBindings": true } } diff --git a/src/bazel-tsconfig-build.json b/src/bazel-tsconfig-build.json index 7b525501ea27..8a956fdee70a 100644 --- a/src/bazel-tsconfig-build.json +++ b/src/bazel-tsconfig-build.json @@ -51,6 +51,10 @@ "angularCompilerOptions": { "strictTemplates": true, "typeCheckHostBindings": true, + "strictInputAccessModifiers": true, + "strictInputTypes": true, + "strictOutputEventTypes": true, + "strictDomEventTypes": true, "extendedDiagnostics": { "defaultCategory": "error" } diff --git a/src/cdk-experimental/radio-group/radio-group.ts b/src/cdk-experimental/radio-group/radio-group.ts index 40553d753616..effbfdffc3c1 100644 --- a/src/cdk-experimental/radio-group/radio-group.ts +++ b/src/cdk-experimental/radio-group/radio-group.ts @@ -186,7 +186,7 @@ export class CdkRadioButton { protected id = computed(() => this._generatedId); /** The value associated with the radio button. */ - protected value = input.required(); + readonly value = input.required(); /** The parent RadioGroup UIPattern. */ protected group = computed(() => this._cdkRadioGroup.pattern); diff --git a/src/material/chips/chip-action.ts b/src/material/chips/chip-action.ts index 432f75f97951..a2e866e46409 100644 --- a/src/material/chips/chip-action.ts +++ b/src/material/chips/chip-action.ts @@ -77,7 +77,7 @@ export class MatChipAction { * Private API to allow focusing this chip when it is disabled. */ @Input() - private _allowFocusWhenDisabled = false; + _allowFocusWhenDisabled = false; /** * Determine the value of the disabled attribute for this chip action. diff --git a/src/tsconfig-legacy.json b/src/tsconfig-legacy.json index 11eefadf0c9e..b898a99551ef 100644 --- a/src/tsconfig-legacy.json +++ b/src/tsconfig-legacy.json @@ -30,6 +30,10 @@ // not find an associated module for test components and error out. "compileNonExportedClasses": false, "typeCheckHostBindings": true, - "strictTemplates": true + "strictTemplates": true, + "strictInputAccessModifiers": true, + "strictInputTypes": true, + "strictOutputEventTypes": true, + "strictDomEventTypes": true } } diff --git a/tsconfig.json b/tsconfig.json index 84b08be1dcab..99743a98f8f8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -44,6 +44,10 @@ "angularCompilerOptions": { "strictTemplates": true, "typeCheckHostBindings": true, + "strictInputAccessModifiers": true, + "strictInputTypes": true, + "strictOutputEventTypes": true, + "strictDomEventTypes": true, "extendedDiagnostics": { "defaultCategory": "error" } From 24ae3777233f63da35ba9106bf554d6dba20bb88 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Mon, 4 Aug 2025 16:45:16 +0200 Subject: [PATCH 53/77] fix(material/form-field): resolve memory leak (#31643) Inside the form field we have a `afterRenderEffect` that updates the label offset when in outlined mode. The logic for calculating the label offset depends on reading `Directionality.valueSignal` which ends up triggering a memory leak in the framework (https://github.com/angular/angular/issues/62980). These changes add a temporary workaround that removes the `valueSignal` from the signal graph in order to avoid the leak until it's fixed on the framework side. (cherry picked from commit 96117bcedad66f21257e043f83e90a77dc56deef) --- src/material/form-field/form-field.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/material/form-field/form-field.ts b/src/material/form-field/form-field.ts index 241d22409a60..cc16af869f0c 100644 --- a/src/material/form-field/form-field.ts +++ b/src/material/form-field/form-field.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ import {_IdGenerator} from '@angular/cdk/a11y'; -import {Directionality} from '@angular/cdk/bidi'; +import {Direction, Directionality} from '@angular/cdk/bidi'; import {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion'; import {Platform} from '@angular/cdk/platform'; import {NgTemplateOutlet} from '@angular/common'; @@ -30,6 +30,7 @@ import { afterRenderEffect, computed, contentChild, + effect, inject, signal, viewChild, @@ -190,13 +191,13 @@ export class MatFormField { _elementRef = inject(ElementRef); private _changeDetectorRef = inject(ChangeDetectorRef); - private _dir = inject(Directionality); private _platform = inject(Platform); private _idGenerator = inject(_IdGenerator); private _ngZone = inject(NgZone); private _defaults = inject(MAT_FORM_FIELD_DEFAULT_OPTIONS, { optional: true, }); + private _currentDirection: Direction; @ViewChild('textField') _textField: ElementRef; @ViewChild('iconPrefixContainer') _iconPrefixContainer: ElementRef; @@ -346,6 +347,7 @@ export class MatFormField constructor() { const defaults = this._defaults; + const dir = inject(Directionality); if (defaults) { if (defaults.appearance) { @@ -357,6 +359,10 @@ export class MatFormField } } + // We need this value inside a `afterRenderEffect`, however at the time of writing, reading the + // signal directly causes a memory leak (see https://github.com/angular/angular/issues/62980). + // TODO(crisbeto): clean this up once the framework issue is resolved. + effect(() => (this._currentDirection = dir.valueSignal())); this._syncOutlineLabelOffset(); } @@ -752,7 +758,6 @@ export class MatFormField * incorporate the horizontal offset into their default text-field styles. */ private _getOutlinedLabelOffset(): OutlinedLabelStyles { - const dir = this._dir.valueSignal(); if (!this._hasOutline() || !this._floatingLabel) { return null; } @@ -776,7 +781,7 @@ export class MatFormField const textSuffixContainerWidth = textSuffixContainer?.getBoundingClientRect().width ?? 0; // If the directionality is RTL, the x-axis transform needs to be inverted. This // is because `transformX` does not change based on the page directionality. - const negate = dir === 'rtl' ? '-1' : '1'; + const negate = this._currentDirection === 'rtl' ? '-1' : '1'; const prefixWidth = `${iconPrefixContainerWidth + textPrefixContainerWidth}px`; const labelOffset = `var(--mat-mdc-form-field-label-offset-x, 0px)`; const labelHorizontalOffset = `calc(${negate} * (${prefixWidth} + ${labelOffset}))`; From dbdcc7dcb77a1f86446e8ced2359717d3af00e1f Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Wed, 6 Aug 2025 07:24:17 +0200 Subject: [PATCH 54/77] fix(material/autocomplete): default to transparent backdrop (#31647) The autocomplete was leaving the `backdropClass` as undefined which meant that it would default to a dark one, if the user opted into it having a backdrop. Fixes #31614. (cherry picked from commit 845a6910a60a652dd7d171ee026ee8a8887a2459) --- src/material/autocomplete/autocomplete-trigger.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/material/autocomplete/autocomplete-trigger.ts b/src/material/autocomplete/autocomplete-trigger.ts index 7ddf9fc79ef4..942637ca6c4e 100644 --- a/src/material/autocomplete/autocomplete-trigger.ts +++ b/src/material/autocomplete/autocomplete-trigger.ts @@ -912,7 +912,7 @@ export class MatAutocompleteTrigger width: this._getPanelWidth(), direction: this._dir ?? undefined, hasBackdrop: this._defaults?.hasBackdrop, - backdropClass: this._defaults?.backdropClass, + backdropClass: this._defaults?.backdropClass || 'cdk-overlay-transparent-backdrop', panelClass: this._overlayPanelClass, disableAnimations: this._animationsDisabled, }); From ae9e8d2f846f605dc77154e7f3d7df75cc22ae06 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Wed, 6 Aug 2025 16:55:06 +0200 Subject: [PATCH 55/77] fix(material/chips): focus not moved on destroy (#31653) We have some logic that moves focus if a chip is destroyed so that it doesn't go back to the `body`. The removal timing seems to have changed at some point which broke the focus restoration, because the element is blurred before it is destroyed. These changes make the logic a bit more robust by checking the key manager for the removed chip. (cherry picked from commit 4bf8ebf5f3b874ae2f512dc684506f017f022f69) --- goldens/material/chips/index.api.md | 1 + src/material/chips/chip-set.ts | 19 +++++++++++++++---- src/material/chips/chip.ts | 4 ++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/goldens/material/chips/index.api.md b/goldens/material/chips/index.api.md index fdcc60891262..d16b9b97b32e 100644 --- a/goldens/material/chips/index.api.md +++ b/goldens/material/chips/index.api.md @@ -79,6 +79,7 @@ export class MatChip implements OnInit, AfterViewInit, AfterContentInit, DoCheck focus(): void; _getActions(): MatChipAction[]; _getSourceAction(target: Node): MatChipAction | undefined; + _hadFocusOnRemove: boolean; _handleKeydown(event: KeyboardEvent): void; _handlePrimaryActionInteraction(): void; // (undocumented) diff --git a/src/material/chips/chip-set.ts b/src/material/chips/chip-set.ts index 3da48d94badb..45ea6692bea1 100644 --- a/src/material/chips/chip-set.ts +++ b/src/material/chips/chip-set.ts @@ -288,14 +288,25 @@ export class MatChipSet implements AfterViewInit, OnDestroy { /** Starts tracking the destroyed chips in order to capture the focused one. */ private _trackDestroyedFocusedChip() { this.chipDestroyedChanges.pipe(takeUntil(this._destroyed)).subscribe((event: MatChipEvent) => { - const chipArray = this._chips.toArray(); - const chipIndex = chipArray.indexOf(event.chip); - // If the focused chip is destroyed, save its index so that we can move focus to the next // chip. We only save the index here, rather than move the focus immediately, because we want // to wait until the chip is removed from the chip list before focusing the next one. This // allows us to keep focus on the same index if the chip gets swapped out. - if (this._isValidIndex(chipIndex) && event.chip._hasFocus()) { + const chipArray = this._chips.toArray(); + const chipIndex = chipArray.indexOf(event.chip); + const hasFocus = event.chip._hasFocus(); + const wasLastFocused = + event.chip._hadFocusOnRemove && + this._keyManager.activeItem && + event.chip._getActions().includes(this._keyManager.activeItem); + + // Note that depending on the timing, the chip might've already lost focus by the + // time we check this. We need the `wasLastFocused` as a fallback to detect such cases. + // In `wasLastFocused` we also need to ensure that the chip actually had focus when it was + // deleted so that we don't steal away the user's focus after they've moved on from the chip. + const shouldMoveFocus = hasFocus || wasLastFocused; + + if (this._isValidIndex(chipIndex) && shouldMoveFocus) { this._lastDestroyedFocusedChipIndex = chipIndex; } }); diff --git a/src/material/chips/chip.ts b/src/material/chips/chip.ts index 85e2cde30552..57671670a4de 100644 --- a/src/material/chips/chip.ts +++ b/src/material/chips/chip.ts @@ -172,6 +172,9 @@ export class MatChip implements OnInit, AfterViewInit, AfterContentInit, DoCheck /** Whether the chip list is disabled. */ _chipListDisabled: boolean = false; + /** Whether the chip was focused when it was removed. */ + _hadFocusOnRemove = false; + private _textElement!: HTMLElement; /** @@ -316,6 +319,7 @@ export class MatChip implements OnInit, AfterViewInit, AfterContentInit, DoCheck */ remove(): void { if (this.removable) { + this._hadFocusOnRemove = this._hasFocus(); this.removed.emit({chip: this}); } } From 422f050231d48b4b038aef924ec2029270759c40 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Wed, 6 Aug 2025 18:23:29 +0200 Subject: [PATCH 56/77] refactor(cdk-experimental/listbox): update visibility on value field The `value` field is an input, but is `protected` which isn't supported. --- src/cdk-experimental/listbox/listbox.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cdk-experimental/listbox/listbox.ts b/src/cdk-experimental/listbox/listbox.ts index 243ca3e3f36f..2220202b28b5 100644 --- a/src/cdk-experimental/listbox/listbox.ts +++ b/src/cdk-experimental/listbox/listbox.ts @@ -161,7 +161,7 @@ export class CdkOption { protected id = computed(() => this._generatedId); /** The value of the option. */ - protected value = input.required(); + readonly value = input.required(); // TODO(wagnermaciel): See if we want to change how we handle this since textContent is not // reactive. See https://github.com/angular/components/pull/30495#discussion_r1961260216. From 319ae9166a1c2e33b3fd0f89aac60dccdbcb2a41 Mon Sep 17 00:00:00 2001 From: Andrew Seguin Date: Wed, 6 Aug 2025 13:45:42 -0600 Subject: [PATCH 57/77] release: cut the v20.1.5 release --- CHANGELOG.md | 11 +++++++++++ package.json | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33a7f404d0c4..d9b374667c1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ + +# 20.1.5 "plastic-car" (2025-08-06) +### material +| Commit | Type | Description | +| -- | -- | -- | +| [dbdcc7dcb7](https://github.com/angular/components/commit/dbdcc7dcb77a1f86446e8ced2359717d3af00e1f) | fix | **autocomplete:** default to transparent backdrop ([#31647](https://github.com/angular/components/pull/31647)) | +| [ae9e8d2f84](https://github.com/angular/components/commit/ae9e8d2f846f605dc77154e7f3d7df75cc22ae06) | fix | **chips:** focus not moved on destroy ([#31653](https://github.com/angular/components/pull/31653)) | +| [24ae377723](https://github.com/angular/components/commit/24ae3777233f63da35ba9106bf554d6dba20bb88) | fix | **form-field:** resolve memory leak ([#31643](https://github.com/angular/components/pull/31643)) | + + + # 20.1.4 "alabandite-animal" (2025-07-30) ### cdk diff --git a/package.json b/package.json index 4e1d68e3c79e..70f3a3937396 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "ci-docs-monitor-test": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/docs-deploy/monitoring/ci-test.mts", "prepare": "husky" }, - "version": "20.1.4", + "version": "20.1.5", "dependencies": { "@angular-devkit/core": "catalog:", "@angular-devkit/schematics": "catalog:", From 60952f4ddbcd81dd6f14d2e6a93d5a891dc44239 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 7 Aug 2025 15:50:10 +0200 Subject: [PATCH 58/77] fix(material/stepper): handle empty label in horizontal stepper (#31665) Fixes that the horizontal stepper was leaving a blank space if the step's label is empty. Fixes #31655. (cherry picked from commit 24e191a301104600c40b4911d3f1921bea53f446) --- goldens/material/stepper/index.api.md | 6 ++++++ src/material/stepper/step-header.html | 4 ++-- src/material/stepper/step-header.scss | 4 ++++ src/material/stepper/step-header.ts | 18 ++++++++++++++++++ src/material/stepper/stepper.scss | 4 ++++ 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/goldens/material/stepper/index.api.md b/goldens/material/stepper/index.api.md index b511e57b2aae..21ee4ffd5695 100644 --- a/goldens/material/stepper/index.api.md +++ b/goldens/material/stepper/index.api.md @@ -82,6 +82,12 @@ export class MatStepHeader extends CdkStepHeader implements AfterViewInit, OnDes // (undocumented) _getDefaultTextForState(state: StepState): string; _getHostElement(): HTMLElement; + // (undocumented) + protected _hasEmptyLabel(): boolean; + // (undocumented) + protected _hasErrorLabel(): boolean; + // (undocumented) + protected _hasOptionalLabel(): boolean; iconOverrides: { [key: string]: TemplateRef; }; diff --git a/src/material/stepper/step-header.html b/src/material/stepper/step-header.html index 99b65a5643a4..0835eff4349d 100644 --- a/src/material/stepper/step-header.html +++ b/src/material/stepper/step-header.html @@ -41,11 +41,11 @@
{{label}}
} - @if (optional && state != 'error') { + @if (_hasOptionalLabel()) {
{{_intl.optionalLabel}}
} - @if (state === 'error') { + @if (_hasErrorLabel()) {
{{errorMessage}}
} diff --git a/src/material/stepper/step-header.scss b/src/material/stepper/step-header.scss index 5c4f025dbf8c..346e8ea3f09a 100644 --- a/src/material/stepper/step-header.scss +++ b/src/material/stepper/step-header.scss @@ -143,6 +143,10 @@ $fallbacks: m3-stepper.get-tokens(); font-size: token-utils.slot(stepper-header-selected-state-label-text-size, $fallbacks); font-weight: token-utils.slot(stepper-header-selected-state-label-text-weight, $fallbacks); } + + .mat-step-header-empty-label & { + min-width: 0; + } } .mat-step-text-label { diff --git a/src/material/stepper/step-header.ts b/src/material/stepper/step-header.ts index 998e5d3610ad..eb95f01ad708 100644 --- a/src/material/stepper/step-header.ts +++ b/src/material/stepper/step-header.ts @@ -34,6 +34,7 @@ import {_CdkPrivateStyleLoader, _VisuallyHiddenLoader} from '@angular/cdk/privat styleUrl: 'step-header.css', host: { 'class': 'mat-step-header', + '[class.mat-step-header-empty-label]': '_hasEmptyLabel()', '[class]': '"mat-" + (color || "primary")', 'role': 'tab', }, @@ -140,4 +141,21 @@ export class MatStepHeader extends CdkStepHeader implements AfterViewInit, OnDes } return state; } + + protected _hasEmptyLabel() { + return ( + !this._stringLabel() && + !this._templateLabel() && + !this._hasOptionalLabel() && + !this._hasErrorLabel() + ); + } + + protected _hasOptionalLabel() { + return this.optional && this.state !== 'error'; + } + + protected _hasErrorLabel() { + return this.state === 'error'; + } } diff --git a/src/material/stepper/stepper.scss b/src/material/stepper/stepper.scss index eace322adeb1..7dc209dd91e5 100644 --- a/src/material/stepper/stepper.scss +++ b/src/material/stepper/stepper.scss @@ -81,6 +81,10 @@ $fallbacks: m3-stepper.get-tokens(); } } + &.mat-step-header-empty-label .mat-step-icon { + margin: 0; + } + $vertical-padding: _get-vertical-padding-calc(); &::before, From c68988b0d85b0214e193593b00dfece69999dc6d Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Mon, 11 Aug 2025 05:27:56 -0600 Subject: [PATCH 59/77] build: update dependency node to v22.18.0 (#31633) See associated pull request for more information. (cherry picked from commit ec9440dd1f64231a2af2cf8c23cd5d38f25c2105) --- .nvmrc | 2 +- docs/.nvmrc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.nvmrc b/.nvmrc index 7377d130eda5..91d5f6ff8e3f 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.17.1 +22.18.0 diff --git a/docs/.nvmrc b/docs/.nvmrc index 7377d130eda5..91d5f6ff8e3f 100644 --- a/docs/.nvmrc +++ b/docs/.nvmrc @@ -1 +1 @@ -22.17.1 +22.18.0 From b8b565f140eb04774b7b04984ac11b548cd465a4 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Mon, 11 Aug 2025 05:35:31 -0600 Subject: [PATCH 60/77] build: update scorecard action dependencies (#31617) See associated pull request for more information. (cherry picked from commit 0e2617deb9309b7fc60d9849c73ae329181b37d8) --- .github/workflows/scorecard.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 04d2f841a6b2..d5af6e741cb2 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -25,7 +25,7 @@ jobs: steps: - name: 'Checkout code' - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: persist-credentials: false @@ -47,6 +47,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4 + uses: github/codeql-action/upload-sarif@76621b61decf072c1cee8dd1ce2d2a82d33c17ed # v3.29.8 with: sarif_file: results.sarif From 72a3ca78c02d1eb15d11f70150d3b374eec52fb9 Mon Sep 17 00:00:00 2001 From: Danil Anapreychik Date: Mon, 11 Aug 2025 14:41:58 +0300 Subject: [PATCH 61/77] docs(material/cdk/observers): Documentation supplement due to extended capabilities of the directive (#31352) (cherry picked from commit 223e1146ac3861a508241bef31aa1b42beb4af55) --- src/cdk/observers/observers.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/cdk/observers/observers.md b/src/cdk/observers/observers.md index 4b622846169a..627028e4b2f5 100644 --- a/src/cdk/observers/observers.md +++ b/src/cdk/observers/observers.md @@ -12,3 +12,10 @@ mutation to the content is observed. ``` + +Directive also can be used for observing any type of content +```html +
+ {{ text }} +
+``` From 5f6f30b8480e4eb5a44a7df3b3aabfb8eb5cad40 Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Mon, 11 Aug 2025 13:36:42 -0600 Subject: [PATCH 62/77] build: update to latest version of dev-infra (#31649) Update to the latest dev-infra workspace. --- WORKSPACE | 2 +- goldens/BUILD.bazel | 2 +- src/cdk-experimental/BUILD.bazel | 2 +- src/cdk/BUILD.bazel | 4 ++-- src/components-examples/BUILD.bazel | 2 +- src/google-maps/BUILD.bazel | 2 +- src/material-experimental/BUILD.bazel | 2 +- src/material-moment-adapter/BUILD.bazel | 2 +- src/youtube-player/BUILD.bazel | 2 +- tools/bazel/web_test_suite.bzl | 2 +- tools/defaults.bzl | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index a2ad417398e0..534588dae7f6 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -185,7 +185,7 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") git_repository( name = "devinfra", - commit = "fd57e38fdd95d2d145adb87a1ff0cbbc231316bc", + commit = "5bd41ae2d8be51c3f98010714f8eaaab6d82fb62", remote = "https://github.com/angular/dev-infra.git", ) diff --git a/goldens/BUILD.bazel b/goldens/BUILD.bazel index 73386e61fbda..d26af032d4ae 100644 --- a/goldens/BUILD.bazel +++ b/goldens/BUILD.bazel @@ -1,4 +1,4 @@ -load("@devinfra//bazel/api-golden:index_rjs.bzl", "api_golden_test_npm_package") +load("@devinfra//bazel/api-golden:index.bzl", "api_golden_test_npm_package") exports_files([ "tsec-exemption.json", diff --git a/src/cdk-experimental/BUILD.bazel b/src/cdk-experimental/BUILD.bazel index d437cba9ccf3..986064d8603f 100644 --- a/src/cdk-experimental/BUILD.bazel +++ b/src/cdk-experimental/BUILD.bazel @@ -1,6 +1,6 @@ +load("@npm//:defs.bzl", "npm_link_all_packages") load("//src/cdk-experimental:config.bzl", "CDK_EXPERIMENTAL_TARGETS") load("//tools:defaults.bzl", "ng_package", "ts_project") -load("@npm//:defs.bzl", "npm_link_all_packages") package(default_visibility = ["//visibility:public"]) diff --git a/src/cdk/BUILD.bazel b/src/cdk/BUILD.bazel index 4ba6388d6d99..f259d341b810 100644 --- a/src/cdk/BUILD.bazel +++ b/src/cdk/BUILD.bazel @@ -1,7 +1,7 @@ +load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory") +load("@npm//:defs.bzl", "npm_link_all_packages") load("//src/cdk:config.bzl", "CDK_ENTRYPOINTS", "CDK_ENTRYPOINTS_WITH_STYLES", "CDK_SCSS_LIBS", "CDK_TARGETS") load("//tools:defaults.bzl", "ng_package", "sass_library", "ts_project") -load("@npm//:defs.bzl", "npm_link_all_packages") -load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory") package(default_visibility = ["//visibility:public"]) diff --git a/src/components-examples/BUILD.bazel b/src/components-examples/BUILD.bazel index 6920798c3ea7..2bc05f8f3da4 100644 --- a/src/components-examples/BUILD.bazel +++ b/src/components-examples/BUILD.bazel @@ -1,8 +1,8 @@ +load("@npm//:defs.bzl", "npm_link_all_packages") load("//tools:defaults.bzl", "ng_package", "ng_project") load("//tools/highlight-files:index.bzl", "highlight_files") load("//tools/package-docs-content:index.bzl", "package_docs_content") load(":config.bzl", "ALL_EXAMPLES") -load("@npm//:defs.bzl", "npm_link_all_packages") package(default_visibility = ["//visibility:public"]) diff --git a/src/google-maps/BUILD.bazel b/src/google-maps/BUILD.bazel index 641b320740ad..0acda7c735dc 100644 --- a/src/google-maps/BUILD.bazel +++ b/src/google-maps/BUILD.bazel @@ -1,5 +1,5 @@ -load("//tools:defaults.bzl", "ng_package", "ng_project", "ng_web_test_suite", "ts_project") load("@aspect_rules_ts//ts:defs.bzl", rules_js_tsconfig = "ts_config") +load("//tools:defaults.bzl", "ng_package", "ng_project", "ng_web_test_suite", "ts_project") package(default_visibility = ["//visibility:public"]) diff --git a/src/material-experimental/BUILD.bazel b/src/material-experimental/BUILD.bazel index 4e3f9f8b86e5..c49595850efb 100644 --- a/src/material-experimental/BUILD.bazel +++ b/src/material-experimental/BUILD.bazel @@ -1,3 +1,4 @@ +load("@npm//:defs.bzl", "npm_link_all_packages") load( "//src/material-experimental:config.bzl", "MATERIAL_EXPERIMENTAL_SCSS_LIBS", @@ -5,7 +6,6 @@ load( "MATERIAL_EXPERIMENTAL_TESTING_TARGETS", ) load("//tools:defaults.bzl", "ng_package", "sass_library", "ts_project") -load("@npm//:defs.bzl", "npm_link_all_packages") package(default_visibility = ["//visibility:public"]) diff --git a/src/material-moment-adapter/BUILD.bazel b/src/material-moment-adapter/BUILD.bazel index 5b05c4ad9eae..54f4912820d9 100644 --- a/src/material-moment-adapter/BUILD.bazel +++ b/src/material-moment-adapter/BUILD.bazel @@ -1,5 +1,5 @@ -load("//tools:defaults.bzl", "ng_package", "ng_project", "ng_web_test_suite", "ts_project") load("@npm//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults.bzl", "ng_package", "ng_project", "ng_web_test_suite", "ts_project") package(default_visibility = ["//visibility:public"]) diff --git a/src/youtube-player/BUILD.bazel b/src/youtube-player/BUILD.bazel index 7d720e16dbc8..037d1573da5b 100644 --- a/src/youtube-player/BUILD.bazel +++ b/src/youtube-player/BUILD.bazel @@ -1,3 +1,4 @@ +load("@aspect_rules_ts//ts:defs.bzl", rules_js_tsconfig = "ts_config") load( "//tools:defaults.bzl", "ng_package", @@ -6,7 +7,6 @@ load( "sass_binary", "ts_project", ) -load("@aspect_rules_ts//ts:defs.bzl", rules_js_tsconfig = "ts_config") package(default_visibility = ["//visibility:public"]) diff --git a/tools/bazel/web_test_suite.bzl b/tools/bazel/web_test_suite.bzl index c2177119ffe1..c184afcff499 100644 --- a/tools/bazel/web_test_suite.bzl +++ b/tools/bazel/web_test_suite.bzl @@ -1,5 +1,5 @@ +load("@devinfra//bazel/spec-bundling:index.bzl", "spec_bundle") load("@rules_browsers//src/wtr:index.bzl", "wtr_test") -load("@devinfra//bazel/spec-bundling:index_rjs.bzl", "spec_bundle") def _web_test(name, tags = [], deps = [], bootstrap = [], **kwargs): spec_bundle( diff --git a/tools/defaults.bzl b/tools/defaults.bzl index 7d033f2935ce..04f3af2cf61a 100644 --- a/tools/defaults.bzl +++ b/tools/defaults.bzl @@ -3,7 +3,7 @@ load("@aspect_rules_jasmine//jasmine:defs.bzl", _jasmine_test = "jasmine_test") load("@aspect_rules_js//npm:defs.bzl", _npm_package = "npm_package") load("@devinfra//bazel/http-server:index.bzl", _http_server = "http_server") -load("@devinfra//bazel/spec-bundling:index_rjs.bzl", _spec_bundle = "spec_bundle") +load("@devinfra//bazel/spec-bundling:index.bzl", _spec_bundle = "spec_bundle") load("@devinfra//bazel/ts_project:index.bzl", "strict_deps_test") load("@rules_angular//src/ng_package:index.bzl", _ng_package = "ng_package") load("@rules_angular//src/ng_package/text_replace:index.bzl", _text_replace = "text_replace") From 3fec8a7a853c3f6204ae1f2454d6734d6146771c Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Mon, 11 Aug 2025 21:44:17 +0200 Subject: [PATCH 63/77] docs(cdk/drag-drop): ensure that examples look good on adev (#31673) Fixes the following issues with how the drag-drop examples look on adev: * They're using Times New Roman as the font because all the styles are reset. * The handle isn't visible in one of the examples, because its color is reset. (cherry picked from commit 5ffea29c3a20e7002e4b0ea79d16412331eb642a) --- .../cdk-drag-drop-axis-lock-example.css | 1 + .../cdk-drag-drop-boundary-example.css | 1 + .../cdk-drag-drop-connected-sorting-group-example.css | 2 ++ .../cdk-drag-drop-connected-sorting-example.css | 2 ++ .../cdk-drag-drop-copy-list-example.css | 2 ++ .../cdk-drag-drop-custom-placeholder-example.css | 2 ++ .../cdk-drag-drop-custom-preview-example.css | 2 ++ .../cdk-drag-drop-delay/cdk-drag-drop-delay-example.css | 1 + .../cdk-drag-drop-disabled-sorting-example.css | 2 ++ .../cdk-drag-drop-disabled-example.css | 2 ++ .../cdk-drag-drop-enter-predicate-example.css | 2 ++ .../cdk-drag-drop-free-drag-position-example.css | 1 + .../cdk-drag-drop-handle/cdk-drag-drop-handle-example.css | 6 +++++- .../cdk-drag-drop-handle/cdk-drag-drop-handle-example.html | 2 +- .../cdk-drag-drop-horizontal-sorting-example.css | 2 ++ .../cdk-drag-drop-mixed-sorting-example.css | 2 ++ .../cdk-drag-drop-overview-example.css | 1 + .../cdk-drag-drop-root-element-example.css | 1 + .../cdk-drag-drop-scrollable-example.css | 2 ++ .../cdk-drag-drop-sort-predicate-example.css | 2 ++ .../cdk-drag-drop-sorting/cdk-drag-drop-sorting-example.css | 2 ++ .../cdk-drag-drop-table/cdk-drag-drop-table-example.css | 1 + 22 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-axis-lock/cdk-drag-drop-axis-lock-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-axis-lock/cdk-drag-drop-axis-lock-example.css index 7123ff1f8681..2fff94ff117b 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-axis-lock/cdk-drag-drop-axis-lock-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-axis-lock/cdk-drag-drop-axis-lock-example.css @@ -14,6 +14,7 @@ position: relative; z-index: 1; transition: box-shadow 200ms cubic-bezier(0, 0, 0.2, 1); + font-family: sans-serif; box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-boundary/cdk-drag-drop-boundary-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-boundary/cdk-drag-drop-boundary-example.css index aa7b8cb7a090..0489d9d0ec48 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-boundary/cdk-drag-drop-boundary-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-boundary/cdk-drag-drop-boundary-example.css @@ -16,6 +16,7 @@ box-sizing: border-box; padding: 10px; transition: box-shadow 200ms cubic-bezier(0, 0, 0.2, 1); + font-family: sans-serif; box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-connected-sorting-group/cdk-drag-drop-connected-sorting-group-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-connected-sorting-group/cdk-drag-drop-connected-sorting-group-example.css index 81ffa9305f01..af4470456b4a 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-connected-sorting-group/cdk-drag-drop-connected-sorting-group-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-connected-sorting-group/cdk-drag-drop-connected-sorting-group-example.css @@ -4,6 +4,7 @@ margin: 0 25px 25px 0; display: inline-block; vertical-align: top; + font-family: sans-serif; } .example-list { @@ -27,6 +28,7 @@ cursor: move; background: white; font-size: 14px; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-connected-sorting/cdk-drag-drop-connected-sorting-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-connected-sorting/cdk-drag-drop-connected-sorting-example.css index 81ffa9305f01..af4470456b4a 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-connected-sorting/cdk-drag-drop-connected-sorting-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-connected-sorting/cdk-drag-drop-connected-sorting-example.css @@ -4,6 +4,7 @@ margin: 0 25px 25px 0; display: inline-block; vertical-align: top; + font-family: sans-serif; } .example-list { @@ -27,6 +28,7 @@ cursor: move; background: white; font-size: 14px; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-copy-list/cdk-drag-drop-copy-list-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-copy-list/cdk-drag-drop-copy-list-example.css index 831122b5e934..69c23ec04896 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-copy-list/cdk-drag-drop-copy-list-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-copy-list/cdk-drag-drop-copy-list-example.css @@ -4,6 +4,7 @@ margin: 0 25px 25px 0; display: inline-block; vertical-align: top; + font-family: sans-serif; } .example-list { @@ -27,6 +28,7 @@ cursor: move; background: white; font-size: 14px; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-custom-placeholder/cdk-drag-drop-custom-placeholder-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-custom-placeholder/cdk-drag-drop-custom-placeholder-example.css index ff2e445b8ccc..c8ae685d5f09 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-custom-placeholder/cdk-drag-drop-custom-placeholder-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-custom-placeholder/cdk-drag-drop-custom-placeholder-example.css @@ -7,6 +7,7 @@ background: white; border-radius: 4px; overflow: hidden; + font-family: sans-serif; } .example-box { @@ -21,6 +22,7 @@ cursor: move; background: white; font-size: 14px; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-custom-preview/cdk-drag-drop-custom-preview-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-custom-preview/cdk-drag-drop-custom-preview-example.css index 8e55bdbb9a65..62cc39f5cc89 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-custom-preview/cdk-drag-drop-custom-preview-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-custom-preview/cdk-drag-drop-custom-preview-example.css @@ -7,6 +7,7 @@ background: white; border-radius: 4px; overflow: hidden; + font-family: sans-serif; } .example-box { @@ -21,6 +22,7 @@ cursor: move; background: white; font-size: 14px; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-delay/cdk-drag-drop-delay-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-delay/cdk-drag-drop-delay-example.css index 1e725e0ee13c..bc7616b91eb7 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-delay/cdk-drag-drop-delay-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-delay/cdk-drag-drop-delay-example.css @@ -12,6 +12,7 @@ border-radius: 4px; position: relative; z-index: 1; + font-family: sans-serif; transition: box-shadow 200ms cubic-bezier(0, 0, 0.2, 1); box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-disabled-sorting/cdk-drag-drop-disabled-sorting-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-disabled-sorting/cdk-drag-drop-disabled-sorting-example.css index 81ffa9305f01..af4470456b4a 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-disabled-sorting/cdk-drag-drop-disabled-sorting-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-disabled-sorting/cdk-drag-drop-disabled-sorting-example.css @@ -4,6 +4,7 @@ margin: 0 25px 25px 0; display: inline-block; vertical-align: top; + font-family: sans-serif; } .example-list { @@ -27,6 +28,7 @@ cursor: move; background: white; font-size: 14px; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-disabled/cdk-drag-drop-disabled-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-disabled/cdk-drag-drop-disabled-example.css index ba8046b9093e..aa61e07b1e13 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-disabled/cdk-drag-drop-disabled-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-disabled/cdk-drag-drop-disabled-example.css @@ -7,6 +7,7 @@ background: white; border-radius: 4px; overflow: hidden; + font-family: sans-serif; } .example-box { @@ -21,6 +22,7 @@ cursor: move; background: white; font-size: 14px; + font-family: sans-serif; } .example-box.cdk-drag-disabled { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-enter-predicate/cdk-drag-drop-enter-predicate-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-enter-predicate/cdk-drag-drop-enter-predicate-example.css index 81ffa9305f01..af4470456b4a 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-enter-predicate/cdk-drag-drop-enter-predicate-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-enter-predicate/cdk-drag-drop-enter-predicate-example.css @@ -4,6 +4,7 @@ margin: 0 25px 25px 0; display: inline-block; vertical-align: top; + font-family: sans-serif; } .example-list { @@ -27,6 +28,7 @@ cursor: move; background: white; font-size: 14px; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-free-drag-position/cdk-drag-drop-free-drag-position-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-free-drag-position/cdk-drag-drop-free-drag-position-example.css index 1e725e0ee13c..bc7616b91eb7 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-free-drag-position/cdk-drag-drop-free-drag-position-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-free-drag-position/cdk-drag-drop-free-drag-position-example.css @@ -12,6 +12,7 @@ border-radius: 4px; position: relative; z-index: 1; + font-family: sans-serif; transition: box-shadow 200ms cubic-bezier(0, 0, 0.2, 1); box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-handle/cdk-drag-drop-handle-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-handle/cdk-drag-drop-handle-example.css index a11481e2585f..f99e4c193e4b 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-handle/cdk-drag-drop-handle-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-handle/cdk-drag-drop-handle-example.css @@ -13,6 +13,7 @@ border-radius: 4px; position: relative; z-index: 1; + font-family: sans-serif; transition: box-shadow 200ms cubic-bezier(0, 0, 0.2, 1); box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), @@ -29,8 +30,11 @@ position: absolute; top: 10px; right: 10px; - color: #ccc; cursor: move; width: 24px; height: 24px; } + +.example-handle svg { + color: #ccc; +} diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-handle/cdk-drag-drop-handle-example.html b/src/components-examples/cdk/drag-drop/cdk-drag-drop-handle/cdk-drag-drop-handle-example.html index 368f748ea396..2d1798df80d1 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-handle/cdk-drag-drop-handle-example.html +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-handle/cdk-drag-drop-handle-example.html @@ -2,7 +2,7 @@ I can only be dragged using the handle
- + diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-horizontal-sorting/cdk-drag-drop-horizontal-sorting-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-horizontal-sorting/cdk-drag-drop-horizontal-sorting-example.css index d093c86edf43..a26a6ea87cfb 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-horizontal-sorting/cdk-drag-drop-horizontal-sorting-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-horizontal-sorting/cdk-drag-drop-horizontal-sorting-example.css @@ -8,6 +8,7 @@ background: white; border-radius: 4px; overflow: hidden; + font-family: sans-serif; } .example-box { @@ -24,6 +25,7 @@ font-size: 14px; flex-grow: 1; flex-basis: 0; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-mixed-sorting/cdk-drag-drop-mixed-sorting-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-mixed-sorting/cdk-drag-drop-mixed-sorting-example.css index eec65dd76c5c..b1bf6ae2644f 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-mixed-sorting/cdk-drag-drop-mixed-sorting-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-mixed-sorting/cdk-drag-drop-mixed-sorting-example.css @@ -9,6 +9,7 @@ min-height: 60px; border-radius: 4px; overflow: hidden; + font-family: sans-serif; } .example-box { @@ -23,6 +24,7 @@ text-align: center; font-size: 14px; min-width: 115px; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-overview/cdk-drag-drop-overview-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-overview/cdk-drag-drop-overview-example.css index 1e725e0ee13c..65c3220c3cfe 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-overview/cdk-drag-drop-overview-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-overview/cdk-drag-drop-overview-example.css @@ -13,6 +13,7 @@ position: relative; z-index: 1; transition: box-shadow 200ms cubic-bezier(0, 0, 0.2, 1); + font-family: sans-serif; box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-root-element/cdk-drag-drop-root-element-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-root-element/cdk-drag-drop-root-element-example.css index b54b269f0564..30d7e2d45c1f 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-root-element/cdk-drag-drop-root-element-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-root-element/cdk-drag-drop-root-element-example.css @@ -10,6 +10,7 @@ background: #fff; border-radius: 4px; transition: box-shadow 200ms cubic-bezier(0, 0, 0.2, 1); + font-family: sans-serif; box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.css index 1288a030736c..f429431be37b 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-scrollable/cdk-drag-drop-scrollable-example.css @@ -12,6 +12,7 @@ background: white; border-radius: 4px; overflow: hidden; + font-family: sans-serif; } .example-box { @@ -26,6 +27,7 @@ cursor: move; background: white; font-size: 14px; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-sort-predicate/cdk-drag-drop-sort-predicate-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-sort-predicate/cdk-drag-drop-sort-predicate-example.css index 46153339de4c..2adc2bddddbd 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-sort-predicate/cdk-drag-drop-sort-predicate-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-sort-predicate/cdk-drag-drop-sort-predicate-example.css @@ -7,6 +7,7 @@ display: block; width: 400px; max-width: 100%; + font-family: sans-serif; } .example-box { @@ -21,6 +22,7 @@ cursor: move; background: white; font-size: 14px; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-sorting/cdk-drag-drop-sorting-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-sorting/cdk-drag-drop-sorting-example.css index 56f580a8e8d6..7d15c22d18d9 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-sorting/cdk-drag-drop-sorting-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-sorting/cdk-drag-drop-sorting-example.css @@ -7,6 +7,7 @@ background: white; border-radius: 4px; overflow: hidden; + font-family: sans-serif; } .example-box { @@ -21,6 +22,7 @@ cursor: move; background: white; font-size: 14px; + font-family: sans-serif; } .cdk-drag-preview { diff --git a/src/components-examples/cdk/drag-drop/cdk-drag-drop-table/cdk-drag-drop-table-example.css b/src/components-examples/cdk/drag-drop/cdk-drag-drop-table/cdk-drag-drop-table-example.css index d1c7b844f677..d11a28880ac1 100644 --- a/src/components-examples/cdk/drag-drop/cdk-drag-drop-table/cdk-drag-drop-table-example.css +++ b/src/components-examples/cdk/drag-drop/cdk-drag-drop-table/cdk-drag-drop-table-example.css @@ -1,5 +1,6 @@ table { width: 100%; + font-family: sans-serif; } .example-drag-cursor { From 36ad509d0438f7fd9359e245e077033be1ad2523 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Mon, 11 Aug 2025 21:44:30 +0200 Subject: [PATCH 64/77] docs(material/datepicker): fix up dialog example (#31674) The example that shows a datepicker inside a dialog looked weird. These changes fix it up. (cherry picked from commit e47820819594f37025d67544b8f6c47e7ed663a3) --- .../datepicker-dialog-example-dialog.html | 10 +++++----- .../datepicker-dialog/datepicker-dialog-example.html | 2 +- .../datepicker-dialog/datepicker-dialog-example.ts | 1 - 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example-dialog.html b/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example-dialog.html index df858cc9d79e..8c74f7e052b3 100644 --- a/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example-dialog.html +++ b/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example-dialog.html @@ -1,13 +1,13 @@

Datepicker in a Dialog

- - + + Select a date - - - + + + diff --git a/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example.html b/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example.html index 2584be348a1a..622dcd1f5155 100644 --- a/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example.html +++ b/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example.html @@ -1,2 +1,2 @@

Selected date: {{selectedDate()}}

- + diff --git a/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example.ts b/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example.ts index cb2ea22a71ad..481569cc28cf 100644 --- a/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example.ts +++ b/src/components-examples/material/datepicker/datepicker-dialog/datepicker-dialog-example.ts @@ -29,7 +29,6 @@ export class DatepickerDialogExample { openDialog() { const dialogRef = this.dialog.open(DatepickerDialogExampleDialog, { - minWidth: '500px', data: {selectedDate: this.selectedDate()}, }); From 41ec280a2073129c7b40baf504b7980589ef06a4 Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Tue, 12 Aug 2025 07:34:47 -0600 Subject: [PATCH 65/77] build: update to bazel 7.6.0 (#31677) Update to later version of bazel (cherry picked from commit 6cbe4b21707c29db83b9730e3783ea3388d4fbe1) --- .bazelversion | 2 +- MODULE.bazel | 5 + MODULE.bazel.lock | 110 ++++++++++++++++++ integration/module-tests/index.mts | 3 + src/dev-app/BUILD.bazel | 2 +- src/e2e-app/BUILD.bazel | 2 +- .../ng-update/test-cases/index.spec.ts | 2 +- src/universal-app/BUILD.bazel | 2 +- .../npm-package-output/output-validations.mts | 2 +- 9 files changed, 124 insertions(+), 6 deletions(-) create mode 100644 MODULE.bazel create mode 100644 MODULE.bazel.lock diff --git a/.bazelversion b/.bazelversion index f22d756da39d..18bb4182dd01 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -6.5.0 +7.5.0 diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 000000000000..db7708481a9b --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,5 @@ +# TODO: Investigate bzlmod and use it where possible. + +module( + name = "angular_material", +) \ No newline at end of file diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock new file mode 100644 index 000000000000..3137c9f1d3fc --- /dev/null +++ b/MODULE.bazel.lock @@ -0,0 +1,110 @@ +{ + "lockFileVersion": 13, + "registryFileHashes": { + "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", + "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", + "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/MODULE.bazel": "70390338f7a5106231d20620712f7cccb659cd0e9d073d1991c038eb9fc57589", + "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/source.json": "7e3a9adf473e9af076ae485ed649d5641ad50ec5c11718103f34de03170d94ad", + "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", + "https://bcr.bazel.build/modules/apple_support/1.5.0/source.json": "eb98a7627c0bc486b57f598ad8da50f6625d974c8f723e9ea71bd39f709c9862", + "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", + "https://bcr.bazel.build/modules/bazel_features/1.11.0/source.json": "c9320aa53cd1c441d24bd6b716da087ad7e4ff0d9742a9884587596edfe53015", + "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", + "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a", + "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5", + "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917", + "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/source.json": "082ed5f9837901fada8c68c2f3ddc958bb22b6d654f71dd73f3df30d45d4b749", + "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", + "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", + "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", + "https://bcr.bazel.build/modules/googletest/1.11.0/source.json": "c73d9ef4268c91bd0c1cd88f1f9dfa08e814b1dbe89b5f594a9f08ba0244d206", + "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", + "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", + "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", + "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814", + "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", + "https://bcr.bazel.build/modules/platforms/0.0.9/source.json": "cd74d854bf16a9e002fb2ca7b1a421f4403cda29f824a765acd3a8c56f8d43e6", + "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", + "https://bcr.bazel.build/modules/protobuf/21.7/source.json": "bbe500720421e582ff2d18b0802464205138c06056f443184de39fbb8187b09b", + "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", + "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858", + "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", + "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c", + "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", + "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", + "https://bcr.bazel.build/modules/rules_cc/0.0.9/source.json": "1f1ba6fea244b616de4a554a0f4983c91a9301640c8fe0dd1d410254115c8430", + "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", + "https://bcr.bazel.build/modules/rules_java/7.6.5/MODULE.bazel": "481164be5e02e4cab6e77a36927683263be56b7e36fef918b458d7a8a1ebadb1", + "https://bcr.bazel.build/modules/rules_java/7.6.5/source.json": "a805b889531d1690e3c72a7a7e47a870d00323186a9904b36af83aa3d053ee8d", + "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", + "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/source.json": "a075731e1b46bc8425098512d038d416e966ab19684a10a34f4741295642fc35", + "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", + "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", + "https://bcr.bazel.build/modules/rules_license/0.0.7/source.json": "355cc5737a0f294e560d52b1b7a6492d4fff2caf0bef1a315df5a298fca2d34a", + "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", + "https://bcr.bazel.build/modules/rules_pkg/0.7.0/source.json": "c2557066e0c0342223ba592510ad3d812d4963b9024831f7f66fd0584dd8c66c", + "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", + "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", + "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/source.json": "d57902c052424dfda0e71646cb12668d39c4620ee0544294d9d941e7d12bc3a9", + "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", + "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7", + "https://bcr.bazel.build/modules/rules_python/0.22.1/source.json": "57226905e783bae7c37c2dd662be078728e48fa28ee4324a7eabcafb5a43d014", + "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", + "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", + "https://bcr.bazel.build/modules/stardoc/0.5.1/source.json": "a96f95e02123320aa015b956f29c00cb818fa891ef823d55148e1a362caacf29", + "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", + "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/source.json": "f1ef7d3f9e0e26d4b23d1c39b5f5de71f584dd7d1b4ef83d9bbba6ec7a6a6459", + "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", + "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d" + }, + "selectedYankedVersions": {}, + "moduleExtensions": { + "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { + "general": { + "bzlTransitiveDigest": "PjIds3feoYE8SGbbIq2SFTZy3zmxeO2tQevJZNDo7iY=", + "usagesDigest": "+hz7IHWN6A1oVJJWNDB6yZRG+RYhF76wAYItpAeIUIg=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "local_config_apple_cc_toolchains": { + "bzlFile": "@@apple_support~//crosstool:setup.bzl", + "ruleClassName": "_apple_cc_autoconf_toolchains", + "attributes": {} + }, + "local_config_apple_cc": { + "bzlFile": "@@apple_support~//crosstool:setup.bzl", + "ruleClassName": "_apple_cc_autoconf", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [ + [ + "apple_support~", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@platforms//host:extension.bzl%host_platform": { + "general": { + "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", + "usagesDigest": "pCYpDQmqMbmiiPI1p2Kd3VLm5T48rRAht5WdW0X2GlA=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "host_platform": { + "bzlFile": "@@platforms//host:extension.bzl", + "ruleClassName": "host_platform_repo", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [] + } + } + } +} diff --git a/integration/module-tests/index.mts b/integration/module-tests/index.mts index e8db8b42e042..8eb9f379d14c 100644 --- a/integration/module-tests/index.mts +++ b/integration/module-tests/index.mts @@ -6,6 +6,9 @@ import ts from 'typescript'; import {findAllEntryPointsAndExportedModules} from './find-all-modules.mjs'; async function main() { + // Touch the TEST_SHARD_FILE to mark for bazel that sharding is supported. + await fs.writeFile(process.env.TEST_SHARD_STATUS_FILE!, '', {encoding: 'utf-8'}); + const [configPath] = process.argv.slice(2); const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'ng-module-test-')); const config = JSON.parse(await fs.readFile(configPath, 'utf8')) as { diff --git a/src/dev-app/BUILD.bazel b/src/dev-app/BUILD.bazel index 87dc40f20802..a79f97a716fb 100644 --- a/src/dev-app/BUILD.bazel +++ b/src/dev-app/BUILD.bazel @@ -168,7 +168,7 @@ http_server( name = "devserver", srcs = [":dev_app_static_files"], additional_root_paths = [ - "angular_material/", + "_main/", ], enable_dev_ui = True, # List of environment variables that will be made available as `window.` in the diff --git a/src/e2e-app/BUILD.bazel b/src/e2e-app/BUILD.bazel index 9d6e7e992781..51e091c66d12 100644 --- a/src/e2e-app/BUILD.bazel +++ b/src/e2e-app/BUILD.bazel @@ -84,7 +84,7 @@ http_server( testonly = True, srcs = devserverIndexHtmlDependencies, additional_root_paths = [ - "angular_material/", + "_main/", ], tags = ["manual"], deps = [ diff --git a/src/material/schematics/ng-update/test-cases/index.spec.ts b/src/material/schematics/ng-update/test-cases/index.spec.ts index 45af0a6c271d..2ae5866517ec 100644 --- a/src/material/schematics/ng-update/test-cases/index.spec.ts +++ b/src/material/schematics/ng-update/test-cases/index.spec.ts @@ -8,7 +8,7 @@ import {MIGRATION_PATH} from '../../paths'; describe('Material upgrade test cases', () => { const versionNames = getAllVersionNames().map(versionName => versionName.toLowerCase()); const testCasesMap = findBazelVersionTestCases( - 'angular_material/src/material/schematics/ng-update/test-cases', + '_main/src/material/schematics/ng-update/test-cases', ); // Setup the test cases for each target version. The test cases will be automatically diff --git a/src/universal-app/BUILD.bazel b/src/universal-app/BUILD.bazel index caf61fa1fed9..6c59e8619211 100644 --- a/src/universal-app/BUILD.bazel +++ b/src/universal-app/BUILD.bazel @@ -145,7 +145,7 @@ http_server( "//:node_modules/zone.js", ], additional_root_paths = [ - "angular_material/", + "_main/", ], tags = ["manual"], deps = [ diff --git a/tools/release-checks/npm-package-output/output-validations.mts b/tools/release-checks/npm-package-output/output-validations.mts index 09f987e3f03c..daafda01ba54 100644 --- a/tools/release-checks/npm-package-output/output-validations.mts +++ b/tools/release-checks/npm-package-output/output-validations.mts @@ -12,7 +12,7 @@ const inlineStylesSourcemapRegex = /styles: ?\[["'].*sourceMappingURL=.*["']/; const externalReferencesRegex = /(templateUrl|styleUrls): *["'[]/; /** RegExp that matches common Bazel manifest paths in this workspace */ -const bazelManifestPath = /(angular_material|external)\//; +const bazelManifestPath = /(_main|external)\//; /** * List of fields which are mandatory in entry-point "package.json" files and refer From 011fb785ae2a327ef206f0c0f764db762c4da845 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Tue, 12 Aug 2025 16:28:22 +0200 Subject: [PATCH 66/77] fix(cdk/menu): picking up items from child menu (#31684) Fixes that the CDK menu was picking up items from nested menu instances which in turn were throwing off the keyboard navigation. Fixes #31678. (cherry picked from commit cd532b2b06dc1289f5e8f1a938a4a2fabc0cd618) --- goldens/cdk/menu/index.api.md | 4 +++- src/cdk/menu/menu-base.ts | 22 +++++++++++++++++++--- src/cdk/menu/menu-item.ts | 2 +- src/cdk/menu/menu.spec.ts | 30 ++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/goldens/cdk/menu/index.api.md b/goldens/cdk/menu/index.api.md index 1146342cbced..43399c063e66 100644 --- a/goldens/cdk/menu/index.api.md +++ b/goldens/cdk/menu/index.api.md @@ -84,6 +84,7 @@ export class CdkMenuBar extends CdkMenuBase implements AfterContentInit { // @public export abstract class CdkMenuBase extends CdkMenuGroup implements Menu, AfterContentInit, OnDestroy { + protected _allItems: QueryList; protected closeOpenMenu(menu: MenuStackItem, options?: { focusParentTrigger?: boolean; }): void; @@ -110,7 +111,7 @@ export abstract class CdkMenuBase extends CdkMenuGroup implements Menu, AfterCon setActiveMenuItem(item: number | CdkMenuItem): void; protected triggerItem?: CdkMenuItem; // (undocumented) - static ɵdir: i0.ɵɵDirectiveDeclaration; + static ɵdir: i0.ɵɵDirectiveDeclaration; // (undocumented) static ɵfac: i0.ɵɵFactoryDeclaration; } @@ -146,6 +147,7 @@ export class CdkMenuItem implements FocusableOption, FocusableElement, Toggler, // (undocumented) protected _ngZone: NgZone; _onKeydown(event: KeyboardEvent): void; + readonly _parentMenu: Menu | null; _resetTabIndex(): void; _setTabIndex(event?: MouseEvent): void; _tabindex: 0 | -1; diff --git a/src/cdk/menu/menu-base.ts b/src/cdk/menu/menu-base.ts index 3fbe591977cd..6c050c81868b 100644 --- a/src/cdk/menu/menu-base.ts +++ b/src/cdk/menu/menu-base.ts @@ -67,12 +67,15 @@ export abstract class CdkMenuBase /** The directionality (text direction) of the current page. */ protected readonly dir = inject(Directionality, {optional: true}); + /** All items inside the menu, including ones that belong to other menus. */ + @ContentChildren(CdkMenuItem, {descendants: true}) + protected _allItems: QueryList; + /** The id of the menu's host element. */ @Input() id: string = inject(_IdGenerator).getId('cdk-menu-'); - /** All child MenuItem elements nested in this Menu. */ - @ContentChildren(CdkMenuItem, {descendants: true}) - readonly items: QueryList; + /** All child MenuItem elements belonging to this Menu. */ + readonly items: QueryList = new QueryList(); /** The direction items in the menu flow. */ orientation: 'horizontal' | 'vertical' = 'vertical'; @@ -107,6 +110,7 @@ export abstract class CdkMenuBase if (!this.isInline) { this.menuStack.push(this); } + this._setItems(); this._setKeyManager(); this._handleFocus(); this._subscribeToMenuStackHasFocus(); @@ -178,6 +182,18 @@ export abstract class CdkMenuBase } } + /** Sets up the subscription that keeps the items list in sync. */ + private _setItems() { + // Since the items query has `descendants: true`, we need + // to filter out items belonging to a different menu. + this._allItems.changes + .pipe(startWith(this._allItems), takeUntil(this.destroyed)) + .subscribe((items: QueryList) => { + this.items.reset(items.filter(item => item._parentMenu === this)); + this.items.notifyOnChanges(); + }); + } + /** Setup the FocusKeyManager with the correct orientation for the menu. */ private _setKeyManager() { this.keyManager = new FocusKeyManager(this.items).withWrap().withTypeAhead().withHomeAndEnd(); diff --git a/src/cdk/menu/menu-item.ts b/src/cdk/menu/menu-item.ts index 3b81ffb3d740..58ed42e5b5d7 100644 --- a/src/cdk/menu/menu-item.ts +++ b/src/cdk/menu/menu-item.ts @@ -63,7 +63,7 @@ export class CdkMenuItem implements FocusableOption, FocusableElement, Toggler, private readonly _menuStack = inject(MENU_STACK); /** The parent menu in which this menuitem resides. */ - private readonly _parentMenu = inject(CDK_MENU, {optional: true}); + readonly _parentMenu = inject(CDK_MENU, {optional: true}); /** Reference to the CdkMenuItemTrigger directive if one is added to the same element */ private readonly _menuTrigger = inject(CdkMenuTrigger, {optional: true, self: true}); diff --git a/src/cdk/menu/menu.spec.ts b/src/cdk/menu/menu.spec.ts index 27e27ba0daf9..faf38d7255c3 100644 --- a/src/cdk/menu/menu.spec.ts +++ b/src/cdk/menu/menu.spec.ts @@ -499,6 +499,16 @@ describe('Menu', () => { expect(document.activeElement).toEqual(nativeMenuItems[2]); }); }); + + it('should not pick up items from nested menu', () => { + const getItemsText = (menu: CdkMenu) => + menu.items.map(i => i._elementRef.nativeElement.textContent?.trim()); + const fixture = TestBed.createComponent(NestedMenuDefinition); + fixture.detectChanges(); + + expect(getItemsText(fixture.componentInstance.root)).toEqual(['One', 'Two']); + expect(getItemsText(fixture.componentInstance.inner)).toEqual(['Three', 'Four', 'Five']); + }); }); @Component({ @@ -667,3 +677,23 @@ class WithComplexNestedMenusOnBottom { class MenuWithActiveItem { @ViewChild(CdkMenu) menu: CdkMenu; } + +@Component({ + template: ` +
+ + + +
+ + + +
+
+ `, + imports: [CdkMenuModule], +}) +class NestedMenuDefinition { + @ViewChild('root', {read: CdkMenu}) root: CdkMenu; + @ViewChild('inner', {read: CdkMenu}) inner: CdkMenu; +} From cb09841692092d6441ec9bbd58710d6024df732a Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 12 Aug 2025 18:10:27 -0600 Subject: [PATCH 67/77] build: update github/codeql-action action to v3.29.9 (#31685) See associated pull request for more information. (cherry picked from commit 65b169186f1f7b46376c81a04e9aea8c843acb85) --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index d5af6e741cb2..1a84cf5fec2c 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -47,6 +47,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@76621b61decf072c1cee8dd1ce2d2a82d33c17ed # v3.29.8 + uses: github/codeql-action/upload-sarif@df559355d593797519d70b90fc8edd5db049e7a2 # v3.29.9 with: sarif_file: results.sarif From 63263fbeda3a3ed16173be7eacbd00d8529c09d6 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 12 Aug 2025 18:11:45 -0600 Subject: [PATCH 68/77] build: update actions/checkout action to v5 (#31681) See associated pull request for more information. (cherry picked from commit 223fb2cb887e895b55d7c544d06bcc47b6934549) --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 1a84cf5fec2c..a57aa1e6d5bc 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -25,7 +25,7 @@ jobs: steps: - name: 'Checkout code' - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false From ba351c0a3d38d582d7851534bb98023359620fdd Mon Sep 17 00:00:00 2001 From: Karan Mistry Date: Wed, 13 Aug 2025 05:49:56 +0530 Subject: [PATCH 69/77] docs(material/form-field): update documentation to replace 'mat-chip-list' with 'mat-chip-grid' (#30830) * docs(material/form-field): update documentation to replace mat-chip-list with mat-chip-grid Remove deprecated object from the form-field.md Fixes #30122 * docs(material/chips): update interface description to reflect mat-chip-grid usage (cherry picked from commit 3cf5bb797de6d54133aebb368b57dfdf8320148a) --- src/material/chips/chip-text-control.ts | 2 +- src/material/form-field/form-field.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/material/chips/chip-text-control.ts b/src/material/chips/chip-text-control.ts index cf7b9e7a20d2..da91c1958695 100644 --- a/src/material/chips/chip-text-control.ts +++ b/src/material/chips/chip-text-control.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -/** Interface for a text control that is used to drive interaction with a mat-chip-list. */ +/** Interface for a text control that is used to drive interaction with a mat-chip-grid. */ export interface MatChipTextControl { /** Unique identifier for the text control. */ id: string; diff --git a/src/material/form-field/form-field.md b/src/material/form-field/form-field.md index 3a0aa7a00f74..87e25dcec8bc 100644 --- a/src/material/form-field/form-field.md +++ b/src/material/form-field/form-field.md @@ -154,5 +154,5 @@ This error occurs if you have added multiple hints for the same side. Keep in mi This error occurs when you have not added a form field control to your form field. If your form field contains a native `` or `