Compare commits

...
Author SHA1 Message Date
Maurizio Vitale 1e40e5effd fix(core): fix ResizableDirective memory leak from orphaned document listeners [AAE-50892] (#12197)
* fix(core): fix ResizableDirective memory leak from orphaned document listeners [AAE-50892]

Return unlisten teardown from Observable subscribers so RxJS properly
removes document event listeners when share() refcount drops to zero.

Previously, renderer.listen() unlisten functions were stored in mutable
fields that got overwritten on each drag cycle, orphaning old listeners
and retaining entire detached DOM subtrees via the closure chain.

* fix after second report
2026-08-27 12:47:49 +01:00
Tomasz Gnyp 3f2c81de86 AAE-50899 Improve form renderer for loop track (#12198) 2026-08-26 16:12:40 +02:00
dependabot[bot] 6816205f75 build(deps): bump SonarSource/sonarqube-scan-action from 5.1.0 to 8.2.1 (#12193)
Bumps [SonarSource/sonarqube-scan-action](https://github.com/sonarsource/sonarqube-scan-action) from 5.1.0 to 8.2.1.
- [Release notes](https://github.com/sonarsource/sonarqube-scan-action/releases)
- [Commits](https://github.com/sonarsource/sonarqube-scan-action/compare/aa494459d7c39c106cc77b166de8b4250a32bb97...22918119ff8e1ca75a623e15c8296b6ea4fbe28f)

---
updated-dependencies:
- dependency-name: SonarSource/sonarqube-scan-action
  dependency-version: 8.2.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-26 13:17:45 +01:00
dependabot[bot] ce15f8f410 build(deps): bump actions/upload-artifact from 4.6.2 to 7.0.1 (#12194)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.2 to 7.0.1.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.6.2...043fb46d1a93c77aae656e7c1c64a875d1fc6a0a)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-26 13:14:30 +01:00
dependabot[bot] f2f3edb6c3 build(deps): bump actions/download-artifact from 4.3.0 to 8.0.1 (#12195)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.3.0 to 8.0.1.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v4.3.0...3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 8.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-26 13:14:07 +01:00
Alex Molodyh f9940f0db8 AAE-46057 Refine form field status spacing (#12196) 2026-08-25 13:19:19 -07:00
dependabot[bot]andDomenico Sibilio 9f37f22702 build(deps): bump @cspell/eslint-plugin from 10.0.0 to 10.0.1 (#12191)
Bumps [@cspell/eslint-plugin](https://github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell-eslint-plugin) from 10.0.0 to 10.0.1.
- [Release notes](https://github.com/streetsidesoftware/cspell/releases)
- [Changelog](https://github.com/streetsidesoftware/cspell/blob/main/packages/cspell-eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/streetsidesoftware/cspell/commits/v10.0.1/packages/cspell-eslint-plugin)

---
updated-dependencies:
- dependency-name: "@cspell/eslint-plugin"
  dependency-version: 10.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Domenico Sibilio <domenicosibilio@gmail.com>
2026-08-24 08:03:57 +00:00
dependabot[bot] 4d8d760e43 build(deps): bump the github-actions group across 2 directories with 9 updates (#12192)
Bumps the github-actions group with 8 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [github/codeql-action/init](https://github.com/github/codeql-action) | `4.37.7` | `4.37.8` |
| [github/codeql-action/autobuild](https://github.com/github/codeql-action) | `4.37.7` | `4.37.8` |
| [github/codeql-action/analyze](https://github.com/github/codeql-action) | `4.37.7` | `4.37.8` |
| [Alfresco/alfresco-build-tools/.github/actions/send-teams-notification](https://github.com/alfresco/alfresco-build-tools) | `18.23.0` | `18.24.1` |
| [crowdin/github-action](https://github.com/crowdin/github-action) | `2.17.0` | `2.17.1` |
| [Alfresco/alfresco-build-tools/.github/workflows/stale-pr-cleanup.yml](https://github.com/alfresco/alfresco-build-tools) | `18.23.0` | `18.24.1` |
| [Alfresco/alfresco-build-tools/.github/actions/github-upsert-comment](https://github.com/alfresco/alfresco-build-tools) | `18.23.0` | `18.24.1` |
| [github/gh-aw-actions/setup](https://github.com/github/gh-aw-actions) | `0.86.2` | `0.87.2` |

Bumps the github-actions group with 1 update in the /.github/actions/setup directory: [Alfresco/alfresco-build-tools/.github/actions/git-latest-tag](https://github.com/alfresco/alfresco-build-tools).


Updates `github/codeql-action/init` from 4.37.7 to 4.37.8
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd...db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28)

Updates `github/codeql-action/autobuild` from 4.37.7 to 4.37.8
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd...db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28)

Updates `github/codeql-action/analyze` from 4.37.7 to 4.37.8
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd...db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28)

Updates `Alfresco/alfresco-build-tools/.github/actions/send-teams-notification` from 18.23.0 to 18.24.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/98bcfbe06aafffdc0e9a790f352602316f82303b...da99ab845e78301fcb0680d16cbc185a40a1938c)

Updates `crowdin/github-action` from 2.17.0 to 2.17.1
- [Release notes](https://github.com/crowdin/github-action/releases)
- [Commits](https://github.com/crowdin/github-action/compare/c7af9bc98b01694653031fef2a0dc6c7888ce9bc...8f01d54f70f1713ee3f09d82c2bbb2daeac28689)

Updates `Alfresco/alfresco-build-tools/.github/workflows/stale-pr-cleanup.yml` from 18.23.0 to 18.24.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/98bcfbe06aafffdc0e9a790f352602316f82303b...da99ab845e78301fcb0680d16cbc185a40a1938c)

Updates `Alfresco/alfresco-build-tools/.github/actions/github-upsert-comment` from 18.23.0 to 18.24.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/98bcfbe06aafffdc0e9a790f352602316f82303b...da99ab845e78301fcb0680d16cbc185a40a1938c)

Updates `github/gh-aw-actions/setup` from 0.86.2 to 0.87.2
- [Release notes](https://github.com/github/gh-aw-actions/releases)
- [Changelog](https://github.com/github/gh-aw-actions/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/gh-aw-actions/compare/6aab9e5b5c91c615506061f09bedd81a23babe3c...b304200a0ef4b3998673bfc7945acb08ab8c88b7)

Updates `Alfresco/alfresco-build-tools/.github/actions/git-latest-tag` from 18.23.0 to 18.24.1
- [Release notes](https://github.com/alfresco/alfresco-build-tools/releases)
- [Commits](https://github.com/alfresco/alfresco-build-tools/compare/98bcfbe06aafffdc0e9a790f352602316f82303b...da99ab845e78301fcb0680d16cbc185a40a1938c)

---
updated-dependencies:
- dependency-name: github/codeql-action/init
  dependency-version: 4.37.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: github/codeql-action/autobuild
  dependency-version: 4.37.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.37.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: Alfresco/alfresco-build-tools/.github/actions/send-teams-notification
  dependency-version: 18.24.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: crowdin/github-action
  dependency-version: 2.17.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: Alfresco/alfresco-build-tools/.github/workflows/stale-pr-cleanup.yml
  dependency-version: 18.24.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: Alfresco/alfresco-build-tools/.github/actions/github-upsert-comment
  dependency-version: 18.24.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: github/gh-aw-actions/setup
  dependency-version: 0.87.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: Alfresco/alfresco-build-tools/.github/actions/git-latest-tag
  dependency-version: 18.24.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 09:46:14 +02:00
33 changed files with 324 additions and 273 deletions
+1 -1
View File
@@ -35,7 +35,7 @@ runs:
- name: get latest tag sha
if: ${{ inputs.full-setup == 'true' }}
id: tag-sha
uses: Alfresco/alfresco-build-tools/.github/actions/git-latest-tag@98bcfbe06aafffdc0e9a790f352602316f82303b # v18.23.0
uses: Alfresco/alfresco-build-tools/.github/actions/git-latest-tag@da99ab845e78301fcb0680d16cbc185a40a1938c # v18.24.1
- name: load "NPM TAG"
if: ${{ inputs.full-setup == 'true' }}
id: set-npm-tag
+3 -3
View File
@@ -30,7 +30,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v3.29.5
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v3.29.5
# Override language selection by uncommenting this and choosing your languages
with:
languages: javascript
@@ -39,7 +39,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v3.29.5
uses: github/codeql-action/autobuild@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v3.29.5
# ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -53,4 +53,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v3.29.5
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v3.29.5
+1 -1
View File
@@ -53,7 +53,7 @@ jobs:
- name: Send Teams notification
if: steps.check_label_timing.outputs.should_notify == 'true'
uses: Alfresco/alfresco-build-tools/.github/actions/send-teams-notification@98bcfbe06aafffdc0e9a790f352602316f82303b # v18.23.0
uses: Alfresco/alfresco-build-tools/.github/actions/send-teams-notification@da99ab845e78301fcb0680d16cbc185a40a1938c # v18.24.1
with:
webhook-url: ${{ secrets.TEAMS_NOTIFICATION_ADF_BDU_WEBHOOK }}
skip_checkout: true
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
ref: develop
token: ${{ steps.app-token.outputs.token }}
- name: Pull translations from Crowdin
uses: crowdin/github-action@c7af9bc98b01694653031fef2a0dc6c7888ce9bc # v2.17.0
uses: crowdin/github-action@8f01d54f70f1713ee3f09d82c2bbb2daeac28689 # v2.17.1
with:
skip_ref_checkout: true
upload_sources: false
+1 -1
View File
@@ -147,7 +147,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Push Source Files to Crowdin
uses: crowdin/github-action@c7af9bc98b01694653031fef2a0dc6c7888ce9bc # v2.17.0
uses: crowdin/github-action@8f01d54f70f1713ee3f09d82c2bbb2daeac28689 # v2.17.1
with:
upload_sources: true
upload_sources_args: --delete-obsolete
+1 -1
View File
@@ -11,4 +11,4 @@ permissions:
jobs:
stale-pr-cleanup:
uses: Alfresco/alfresco-build-tools/.github/workflows/stale-pr-cleanup.yml@98bcfbe06aafffdc0e9a790f352602316f82303b # v18.23.0
uses: Alfresco/alfresco-build-tools/.github/workflows/stale-pr-cleanup.yml@da99ab845e78301fcb0680d16cbc185a40a1938c # v18.24.1
@@ -16,7 +16,7 @@ jobs:
permissions:
pull-requests: write
steps:
- uses: Alfresco/alfresco-build-tools/.github/actions/github-upsert-comment@98bcfbe06aafffdc0e9a790f352602316f82303b # v18.23.0
- uses: Alfresco/alfresco-build-tools/.github/actions/github-upsert-comment@da99ab845e78301fcb0680d16cbc185a40a1938c # v18.24.1
with:
comment-identifier: supply-chain-review-instructions
comment-body: |
+7 -7
View File
@@ -41,7 +41,7 @@
# - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 (source v9)
# - actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
# - actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
# - github/gh-aw-actions/setup@6aab9e5b5c91c615506061f09bedd81a23babe3c # v0.86.2
# - github/gh-aw-actions/setup@b304200a0ef4b3998673bfc7945acb08ab8c88b7 # v0.87.2
#
# Container images used:
# - ghcr.io/github/gh-aw-firewall/agent:0.27.44@sha256:0d727725c737b58c7bdf51f640cffb928385ec46517e0917c7f1a02f1bada8b4
@@ -125,7 +125,7 @@ jobs:
steps:
- name: Setup Scripts
id: setup
uses: github/gh-aw-actions/setup@6aab9e5b5c91c615506061f09bedd81a23babe3c # v0.86.2
uses: github/gh-aw-actions/setup@b304200a0ef4b3998673bfc7945acb08ab8c88b7 # v0.87.2
with:
destination: ${{ runner.temp }}/gh-aw/actions
job-name: ${{ github.job }}
@@ -494,7 +494,7 @@ jobs:
steps:
- name: Setup Scripts
id: setup
uses: github/gh-aw-actions/setup@6aab9e5b5c91c615506061f09bedd81a23babe3c # v0.86.2
uses: github/gh-aw-actions/setup@b304200a0ef4b3998673bfc7945acb08ab8c88b7 # v0.87.2
with:
destination: ${{ runner.temp }}/gh-aw/actions
job-name: ${{ github.job }}
@@ -1128,7 +1128,7 @@ jobs:
steps:
- name: Setup Scripts
id: setup
uses: github/gh-aw-actions/setup@6aab9e5b5c91c615506061f09bedd81a23babe3c # v0.86.2
uses: github/gh-aw-actions/setup@b304200a0ef4b3998673bfc7945acb08ab8c88b7 # v0.87.2
with:
destination: ${{ runner.temp }}/gh-aw/actions
job-name: ${{ github.job }}
@@ -1404,7 +1404,7 @@ jobs:
steps:
- name: Setup Scripts
id: setup
uses: github/gh-aw-actions/setup@6aab9e5b5c91c615506061f09bedd81a23babe3c # v0.86.2
uses: github/gh-aw-actions/setup@b304200a0ef4b3998673bfc7945acb08ab8c88b7 # v0.87.2
with:
destination: ${{ runner.temp }}/gh-aw/actions
job-name: ${{ github.job }}
@@ -1653,7 +1653,7 @@ jobs:
steps:
- name: Setup Scripts
id: setup
uses: github/gh-aw-actions/setup@6aab9e5b5c91c615506061f09bedd81a23babe3c # v0.86.2
uses: github/gh-aw-actions/setup@b304200a0ef4b3998673bfc7945acb08ab8c88b7 # v0.87.2
with:
destination: ${{ runner.temp }}/gh-aw/actions
job-name: ${{ github.job }}
@@ -1732,7 +1732,7 @@ jobs:
steps:
- name: Setup Scripts
id: setup
uses: github/gh-aw-actions/setup@6aab9e5b5c91c615506061f09bedd81a23babe3c # v0.86.2
uses: github/gh-aw-actions/setup@b304200a0ef4b3998673bfc7945acb08ab8c88b7 # v0.87.2
with:
destination: ${{ runner.temp }}/gh-aw/actions
job-name: ${{ github.job }}
+3 -3
View File
@@ -91,7 +91,7 @@ jobs:
xvfb-run --auto-servernum pnpm nx run ${{ matrix.project }}:test
- name: Upload coverage report
if: ${{ always() }}
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: coverage-${{ matrix.project }}
path: coverage/${{ matrix.project }}/lcov.info
@@ -117,7 +117,7 @@ jobs:
with:
fetch-depth: 0
- name: Download all coverage artifacts
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
pattern: coverage-*
path: coverage-reports
@@ -138,7 +138,7 @@ jobs:
echo "Coverage files found:"
find coverage -name 'lcov.info' -type f
- name: SonarCloud Scan
uses: SonarSource/sonarqube-scan-action@aa494459d7c39c106cc77b166de8b4250a32bb97 # v5.1.0
uses: SonarSource/sonarqube-scan-action@22918119ff8e1ca75a623e15c8296b6ea4fbe28f # v8.2.1
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: https://sonarcloud.io
@@ -16,7 +16,7 @@
*/
import { TestBed } from '@angular/core/testing';
import { ElementRef, Injector, NgZone, Renderer2, runInInjectionContext } from '@angular/core';
import { ElementRef, EnvironmentInjector, NgZone, Renderer2, createEnvironmentInjector, runInInjectionContext } from '@angular/core';
import { ResizableDirective } from './resizable.directive';
describe('ResizableDirective', () => {
@@ -24,6 +24,7 @@ describe('ResizableDirective', () => {
let renderer: Renderer2;
let element: ElementRef;
let directive: ResizableDirective;
let testEnvInjector: EnvironmentInjector;
const scrollTop = 0;
const scrollLeft = 0;
@@ -39,8 +40,14 @@ describe('ResizableDirective', () => {
scrollLeft
};
let unlistenSpies: jasmine.Spy[];
const rendererMock = {
listen: jasmine.createSpy('listen'),
listen: jasmine.createSpy('listen').and.callFake(() => {
const spy = jasmine.createSpy(`unlisten-${unlistenSpies.length}`);
unlistenSpies.push(spy);
return spy;
}),
setStyle: jasmine.createSpy('setStyle')
};
@@ -53,6 +60,10 @@ describe('ResizableDirective', () => {
};
beforeEach(() => {
unlistenSpies = [];
rendererMock.listen.calls.reset();
rendererMock.setStyle.calls.reset();
TestBed.configureTestingModule({
imports: [ResizableDirective],
providers: [
@@ -64,29 +75,28 @@ describe('ResizableDirective', () => {
element = TestBed.inject(ElementRef);
renderer = TestBed.inject(Renderer2);
ngZone = TestBed.inject(NgZone);
const injector = TestBed.inject(Injector);
spyOn(ngZone, 'runOutsideAngular').and.callFake((fn) => fn());
spyOn(ngZone, 'run').and.callFake((fn) => fn());
const testInjector = Injector.create({
providers: [
testEnvInjector = createEnvironmentInjector(
[
{ provide: Renderer2, useValue: renderer },
{ provide: ElementRef, useValue: element },
{ provide: NgZone, useValue: ngZone }
],
parent: injector
});
TestBed.inject(EnvironmentInjector)
);
directive = runInInjectionContext(testInjector, () => new ResizableDirective());
directive = runInInjectionContext(testEnvInjector, () => new ResizableDirective());
directive.ngOnInit();
});
it('should attach mousedown event to document', () => {
expect(renderer.listen).toHaveBeenCalledWith('document', 'mousedown', jasmine.any(Function));
it('should not attach any document listeners on init', () => {
expect(renderer.listen).not.toHaveBeenCalled();
});
it('should attach mousemove event to document', () => {
it('should attach document mousemove listener only during active drag', () => {
const mouseDownEvent = new MouseEvent('mousedown');
directive.mousedown.next({ ...mouseDownEvent, resize: true });
@@ -94,10 +104,6 @@ describe('ResizableDirective', () => {
expect(renderer.listen).toHaveBeenCalledWith('document', 'mousemove', jasmine.any(Function));
});
it('should attach mouseup event to document', () => {
expect(renderer.listen).toHaveBeenCalledWith('document', 'mouseup', jasmine.any(Function));
});
it('should should set the cursor on mouse down', () => {
spyOn(directive.resizeStart, 'emit');
const mouseDownEvent = new MouseEvent('mousedown');
@@ -174,4 +180,35 @@ describe('ResizableDirective', () => {
expect(directive.keyboardResizing.emit).toHaveBeenCalledWith({ rectangle: { top: 0, left: 0, bottom: 0, right: step, width: step } });
});
it('should unregister document listeners on destroy', () => {
directive.mousedown.next({ ...new MouseEvent('mousedown'), resize: true });
expect(unlistenSpies.length).toBeGreaterThan(0);
testEnvInjector.destroy();
unlistenSpies.forEach((spy) => expect(spy).toHaveBeenCalledTimes(1));
});
it('should not accumulate mousemove listeners across repeated drag cycles', () => {
const listenCountAfterInit = rendererMock.listen.calls.count();
const mouseDownEvent = new MouseEvent('mousedown');
const mouseUpEvent = new MouseEvent('mouseup');
directive.mousedown.next({ ...mouseDownEvent, resize: true });
const listenCountAfterFirstDrag = rendererMock.listen.calls.count();
expect(listenCountAfterFirstDrag).toBeGreaterThan(listenCountAfterInit);
directive.mouseup.next(mouseUpEvent);
const unlistenedAfterFirstDrag = unlistenSpies.filter((spy) => spy.calls.count() > 0).length;
directive.mousedown.next({ ...mouseDownEvent, resize: true });
directive.mouseup.next(mouseUpEvent);
const unlistenedAfterSecondDrag = unlistenSpies.filter((spy) => spy.calls.count() > 0).length;
expect(unlistenedAfterSecondDrag).toBeGreaterThan(unlistenedAfterFirstDrag);
testEnvInjector.destroy();
unlistenSpies.forEach((spy) => expect(spy).toHaveBeenCalledTimes(1));
});
});
@@ -61,53 +61,35 @@ export class ResizableDirective implements OnInit, OnDestroy {
mousemove = new Subject<IResizeMouseEvent>();
private readonly pointerDown: Observable<IResizeMouseEvent>;
private readonly pointerMove: Observable<IResizeMouseEvent>;
private readonly pointerUp: Observable<IResizeMouseEvent>;
private startingRect: BoundingRectangle;
private currentRect: BoundingRectangle;
private unsubscribeMouseDown?: () => void;
private unsubscribeMouseMove?: () => void;
private unsubscribeMouseUp?: () => void;
private readonly destroyRef = inject(DestroyRef);
constructor() {
const renderer = this.renderer;
const zone = this.zone;
this.pointerDown = new Observable((observer: Observer<IResizeMouseEvent>) => {
zone.runOutsideAngular(() => {
this.unsubscribeMouseDown = renderer.listen('document', 'mousedown', (event: MouseEvent) => {
observer.next(event);
});
});
}).pipe(share());
// Document-level mousemove is needed for smooth drag tracking when cursor leaves the handle element.
// Only subscribed during active drag via share() refcount.
this.pointerMove = new Observable((observer: Observer<IResizeMouseEvent>) => {
let stopListening: () => void = () => {};
zone.runOutsideAngular(() => {
this.unsubscribeMouseMove = renderer.listen('document', 'mousemove', (event: MouseEvent) => {
observer.next(event);
});
});
}).pipe(share());
this.pointerUp = new Observable((observer: Observer<IResizeMouseEvent>) => {
zone.runOutsideAngular(() => {
this.unsubscribeMouseUp = renderer.listen('document', 'mouseup', (event: MouseEvent) => {
stopListening = renderer.listen('document', 'mousemove', (event: MouseEvent) => {
observer.next(event);
});
});
return stopListening;
}).pipe(share());
}
ngOnInit(): void {
const mousedown$ = merge(this.pointerDown, this.mousedown);
const mousedown$ = this.mousedown.asObservable();
const mousemove$ = merge(this.pointerMove, this.mousemove);
const mouseup$ = merge(this.pointerUp, this.mouseup);
const mouseup$ = this.mouseup.asObservable();
const mouseDrag: Observable<IResizeMouseEvent | ICoordinateX> = mousedown$
.pipe(
@@ -184,9 +166,6 @@ export class ResizableDirective implements OnInit, OnDestroy {
this.mousedown.complete();
this.mousemove.complete();
this.mouseup.complete();
this.unsubscribeMouseDown?.();
this.unsubscribeMouseMove?.();
this.unsubscribeMouseUp?.();
}
resizeByKeyboard(delta: number): void {
@@ -98,7 +98,7 @@
[hidden]="!currentRootElement?.isVisible"
>
<adf-repeat-widget [element]="currentRootElement" [isEditor]="false">
@for (row of currentRootElement.field.rows; track row; let rowIndex = $index) {
@for (row of currentRootElement.field.rows; track row.id; let rowIndex = $index) {
@let hasMultipleRows = currentRootElement.field.rows.length > 1;
<div
class="adf-grid-list-container"
@@ -125,11 +125,11 @@
}
</div>
<section class="adf-grid-list-column-view">
@for (column of row.columns; track column; let columnIndex = $index) {
@for (column of row.columns; track column.id; let columnIndex = $index) {
<div
class="adf-grid-list-single-column"
[style.width.%]="getColumnWidth(currentRootElement, row.columns, columnIndex)">
@for (field of column?.fields; track field) {
@for (field of column?.fields; track field.id) {
@if (field.type === 'section') {
<adf-form-section [field]="field"/>
} @else {
@@ -21,10 +21,10 @@
width: auto;
}
.adf-form-field-input:not(.adf-inplace-input-mat-form-field, .adf-people-cloud, .adf-cloud-group) {
#{ms.$mat-form-field-subscript-wrapper} {
height: 40px;
}
.adf-form-field-status-slot {
display: block;
height: 40px;
box-sizing: border-box;
}
}
@@ -10,7 +10,11 @@
>
</div>
<div class="adf-amount-widget-container">
<mat-form-field class="adf-amount-widget__input adf-form-field-input" [floatLabel]="placeholder ? 'always' : null">
<mat-form-field
class="adf-amount-widget__input adf-form-field-input"
subscriptSizing="dynamic"
[floatLabel]="placeholder ? 'always' : null"
>
@if ( (field.name || field?.required) && !field.leftLabels) { <mat-label class="adf-label" [attr.for]="field.id">{{field.name | translate }}</mat-label> }
@if(!enableDisplayBasedOnLocale) {
<span matTextPrefix class="adf-amount-widget__prefix-spacing">{{ currency }}&nbsp;</span>
@@ -32,12 +36,13 @@
(blur)="amountWidgetOnBlur()"
/>
@if (field.validationSummary?.message || (isInvalidFieldRequired() && isTouched())) {
<mat-error>
<mat-error class="adf-form-field-status-slot">
<mat-icon class="adf-error-icon">error_outline</mat-icon>
<span class="adf-error-text"
>@if (field.validationSummary?.message) {{{ field.validationSummary.message | translate:translateParameters }}} @else {{{ 'FORM.FIELD.REQUIRED' | translate }}}</span>
</mat-error>
}
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
</mat-form-field>
</div>
</div>
@@ -10,6 +10,7 @@
</div>
<div class="adf-date-time-widget-container">
<mat-form-field class="adf-date-time-widget adf-form-field-input"
subscriptSizing="dynamic"
[class.adf-left-label-input-datepicker]="field.leftLabels"
[floatLabel]="field.placeholder ? 'always' : null">
@if( (field.name || field?.required) && !field.leftLabels) {
@@ -38,11 +39,12 @@
[timeInterval]="5"
[disabled]="field.readOnly" />
@if (datetimeInputControl.invalid && datetimeInputControl.touched && field.validationSummary?.message) {
<mat-error>
<mat-error class="adf-form-field-status-slot">
<mat-icon class="adf-error-icon">error_outline</mat-icon>
<span class="adf-error-text">{{ field.validationSummary.message | translate:translateParameters }}</span>
</mat-error>
}
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
</mat-form-field>
</div>
</div>
@@ -1,7 +1,7 @@
<div class="{{ field.className }} date-widget-container" id="data-widget"
[class.adf-invalid]="dateInputControl.invalid && dateInputControl.touched"
[class.adf-readonly]="field.readOnly">
<mat-form-field class="adf-date-widget adf-form-field-input" [floatLabel]="field.placeholder ? 'always' : null">
<mat-form-field class="adf-date-widget adf-form-field-input" subscriptSizing="dynamic" [floatLabel]="field.placeholder ? 'always' : null">
<mat-label class="adf-label"
[id]="field.id + '-label'"
[attr.for]="field.id">
@@ -22,11 +22,12 @@
[startAt]="startAt"
[disabled]="field.readOnly" />
@if (dateInputControl.invalid && dateInputControl.touched) {
<mat-error>
<mat-error class="adf-form-field-status-slot">
<mat-icon class="adf-error-icon">error_outline</mat-icon>
<span class="adf-error-text"
>@if (dateInputControl.hasError('required')) {{{ 'FORM.FIELD.REQUIRED' | translate }}} @else if (dateInputControl.hasError('matDatepickerParse')) {{{ 'FORM.FIELD.VALIDATOR.INVALID_DATE_FORMAT' | translate: { format: field.dateDisplayFormat || field.defaultDateTimeFormat } }}} @else if (dateInputControl.hasError('matDatepickerMin')) {{{ 'FORM.FIELD.VALIDATOR.NOT_LESS_THAN' | translate: { minValue: formattedMinDate } }}} @else if (dateInputControl.hasError('matDatepickerMax')) {{{ 'FORM.FIELD.VALIDATOR.NOT_GREATER_THAN' | translate: { maxValue: formattedMaxDate } }}}</span>
</mat-error>
}
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
</mat-form-field>
</div>
@@ -9,7 +9,7 @@
</div>
<div class="adf-decimal-widget-container">
<mat-form-field class="adf-form-field-input" [floatLabel]="field.placeholder ? 'always' : null">
<mat-form-field class="adf-form-field-input" subscriptSizing="dynamic" [floatLabel]="field.placeholder ? 'always' : null">
@if ( (field.name || field?.required) && !field.leftLabels) { <mat-label class="adf-label" [attr.for]="field.id">{{ field.name | translate }}</mat-label> }
<input matInput
class="adf-input"
@@ -25,12 +25,13 @@
[errorStateMatcher]="errorStateMatcher"
(blur)="onBlur()" />
@if (field.validationSummary?.message || (isInvalidFieldRequired() && isTouched())) {
<mat-error>
<mat-error class="adf-form-field-status-slot">
<mat-icon class="adf-error-icon">error_outline</mat-icon>
<span class="adf-error-text"
>@if (field.validationSummary?.message) {{{ field.validationSummary.message | translate:translateParameters }}} @else {{{ 'FORM.FIELD.REQUIRED' | translate }}}</span>
</mat-error>
}
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
</mat-form-field>
</div>
</div>
@@ -1,7 +1,6 @@
.adf-hyperlink-widget {
padding: 0.4375em 0;
border-top: 0.8438em solid transparent;
margin-bottom: 20px;
margin-bottom: 40px;
a {
color: var(--mat-sys-primary);
@@ -7,6 +7,7 @@
<mat-form-field
floatPlaceholder="never"
class="adf-form-field-input"
subscriptSizing="dynamic"
[class.adf-has-counter]="field.maxLength > 0"
[floatLabel]="field.placeholder ? 'always' : null"
>
@@ -31,14 +32,16 @@
>
</textarea>
@if (field.validationSummary?.message || (isInvalidFieldRequired() && isTouched())) {
<mat-error>
<mat-error class="adf-form-field-status-slot">
@if (field.maxLength > 0) {<span class="adf-multiline-counter-block">{{ field?.value?.length || 0 }}/{{ field.maxLength }}</span>}
<mat-icon class="adf-error-icon">error_outline</mat-icon>
<span class="adf-error-text"
>@if (field.validationSummary?.message) {{{ field.validationSummary.message | translate:translateParameters }}} @else {{{ 'FORM.FIELD.REQUIRED' | translate }}}</span>
</mat-error>
} @else if (field.maxLength > 0) {
<mat-hint class="adf-multiline-hint">{{ field?.value?.length || 0 }}/{{ field.maxLength }}</mat-hint>
<mat-hint class="adf-multiline-hint adf-form-field-status-slot">{{ field?.value?.length || 0 }}/{{ field.maxLength }}</mat-hint>
} @else {
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
}
</mat-form-field>
</div>
@@ -9,7 +9,7 @@
</label>
</div>
<div class="adf-number-widget-container">
<mat-form-field class="adf-form-field-input" [floatLabel]="field.placeholder ? 'always' : null">
<mat-form-field class="adf-form-field-input" subscriptSizing="dynamic" [floatLabel]="field.placeholder ? 'always' : null">
@if( (field.name || this.field?.required) && !field.leftLabels) {
<mat-label class="adf-label" [attr.for]="field.id">
{{ field.name | translate }}
@@ -30,12 +30,13 @@
[errorStateMatcher]="errorStateMatcher"
(blur)="onBlur()">
@if (field.validationSummary?.message || (isInvalidFieldRequired() && isTouched())) {
<mat-error>
<mat-error class="adf-form-field-status-slot">
<mat-icon class="adf-error-icon">error_outline</mat-icon>
<span class="adf-error-text"
>@if (field.validationSummary?.message) {{{ field.validationSummary.message | translate:translateParameters }}} @else {{{ 'FORM.FIELD.REQUIRED' | translate }}}</span>
</mat-error>
}
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
</mat-form-field>
</div>
</div>
@@ -8,7 +8,11 @@
</label>
</div>
<div class="adf-text-widget-container">
<mat-form-field class="adf-form-field-input" [floatLabel]="placeholder ? 'always' : null">
<mat-form-field
class="adf-form-field-input"
subscriptSizing="dynamic"
[floatLabel]="placeholder ? 'always' : null"
>
@if ( (field.name || this.field?.required) && !field.leftLabels) { <mat-label class="adf-label" [attr.for]="field.id">
{{ field.name | translate }}
</mat-label>
@@ -30,7 +34,7 @@
(paste)="onPaste($event)"
(blur)="onBlur()">
@if (!fieldStatusTemplate && (maxLengthPasteError.isActive() || field.validationSummary?.message || (isInvalidFieldRequired() && isTouched()))) {
<mat-error>
<mat-error class="adf-form-field-status-slot">
<mat-icon class="adf-error-icon" adf-icon="error_outline" />
<span class="adf-error-text">
@if (maxLengthPasteError.isActive()) {
@@ -43,6 +47,9 @@
</span>
</mat-error>
}
@if (!fieldStatusTemplate) {
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
}
</mat-form-field>
<ng-container *ngTemplateOutlet="maxLengthPasteError.isActive() && fieldStatusTemplate ? maxLengthPasteErrorTemplate : (fieldStatusTemplate ?? null); context: { $implicit: this }" />
<ng-template #maxLengthPasteErrorTemplate>
@@ -17,7 +17,6 @@ $mat-button: '.mat-mdc-button';
$mat-button-label: '.mdc-button__label';
$mat-form-field: '.mat-mdc-form-field';
$mat-form-field-wrapper: '.mat-mdc-text-field-wrapper';
$mat-form-field-subscript-wrapper: '.mat-mdc-form-field-subscript-wrapper';
$mat-line-ripple: '.mdc-line-ripple';
$mat-form-field-prefix: '.mat-mdc-form-field-text-prefix';
$mat-form-field-suffix: '.mat-mdc-form-field-text-suffix';
@@ -1,11 +1,12 @@
.adf-data-table-widget-failed-message {
display: block;
margin: 10px;
}
.adf-preview-placeholder {
height: 100%;
width: 100%;
min-height: 100px;
margin-bottom: 10px;
.adf-data-table-widget-container {
.adf-preview-placeholder {
height: 100%;
width: 100%;
min-height: 100px;
margin-bottom: 10px;
}
}
@@ -15,7 +15,11 @@
>
</div>
<div class="adf-date-widget-container">
<mat-form-field class="adf-date-widget adf-form-field-input" [class.adf-left-label-input-datepicker]="field.leftLabels">
<mat-form-field
class="adf-date-widget adf-form-field-input"
subscriptSizing="dynamic"
[class.adf-left-label-input-datepicker]="field.leftLabels"
>
@if ( (field.name || field?.required) && !field.leftLabels) {
<mat-label class="adf-label" [attr.for]="field.id">
{{field.name | translate }} ({{field.dateDisplayFormat}})
@@ -36,12 +40,13 @@
<mat-datepicker-toggle matSuffix [for]="datePicker" [disabled]="field.readOnly" />
<mat-datepicker #datePicker [startAt]="startAt" [disabled]="field.readOnly" />
@if (dateInputControl.invalid && dateInputControl.touched) {
<mat-error>
<mat-error class="adf-form-field-status-slot">
<mat-icon class="adf-error-icon">error_outline</mat-icon>
<span class="adf-error-text"
>@if (dateInputControl.hasError('required')) {{{ 'FORM.FIELD.REQUIRED' | translate }}} @else if (dateInputControl.hasError('matDatepickerParse')) {{{ 'FORM.FIELD.VALIDATOR.INVALID_DATE_FORMAT' | translate: { format: field.dateDisplayFormat || field.defaultDateTimeFormat } }}} @else if (dateInputControl.hasError('matDatepickerMin')) {{{ 'FORM.FIELD.VALIDATOR.NOT_LESS_THAN' | translate: { minValue: formattedMinDate } }}} @else if (dateInputControl.hasError('matDatepickerMax')) {{{ 'FORM.FIELD.VALIDATOR.NOT_GREATER_THAN' | translate: { maxValue: formattedMaxDate } }}}</span>
</mat-error>
}
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
</mat-form-field>
</div>
</div>
@@ -11,7 +11,7 @@
</div>
<div>
<mat-form-field class="adf-form-field-input" [floatLabel]="field.placeholder ? 'always' : null">
<mat-form-field class="adf-form-field-input" subscriptSizing="dynamic" [floatLabel]="field.placeholder ? 'always' : null">
@if( (field.name || field?.required) && !field.leftLabels) {
<mat-label class="adf-label" [attr.for]="field.id"> {{ field.name | translate }} </mat-label>
}
@@ -32,8 +32,9 @@
</span>
</ng-container>
@if (propertyLoadFailed && !previewState) {
<mat-error><mat-icon class="adf-error-icon">error_outline</mat-icon><span class="adf-error-text">{{ 'FORM.FIELD.EXTERNAL_PROPERTY_LOAD_FAILED' | translate }}</span></mat-error>
<mat-error class="adf-form-field-status-slot"><mat-icon class="adf-error-icon">error_outline</mat-icon><span class="adf-error-text">{{ 'FORM.FIELD.EXTERNAL_PROPERTY_LOAD_FAILED' | translate }}</span></mat-error>
}
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
</mat-form-field>
</div>
</div>
@@ -12,7 +12,7 @@
</div>
}
<div class="adf-dropdown-widget-container">
<mat-form-field class="adf-form-field-input">
<mat-form-field class="adf-form-field-input" subscriptSizing="dynamic">
@if ( (field.name || this.field?.required) && !field.leftLabels) {
<mat-label class="adf-label" [attr.for]="field.id">{{ field.name | translate }}</mat-label>
}
@@ -49,12 +49,13 @@
}
</mat-select>
@if ((dropdownControl.hasError('required') && !isRestApiFailed && !variableOptionsFailed) || (!previewState && !field.readOnly && (isRestApiFailed || variableOptionsFailed))) {
<mat-error>
<mat-error class="adf-form-field-status-slot">
<mat-icon class="adf-error-icon">error_outline</mat-icon>
<span class="adf-error-text"
>@if (dropdownControl.hasError('required') && !isRestApiFailed && !variableOptionsFailed) {{{ 'FORM.FIELD.REQUIRED' | translate }}} @else if (isRestApiFailed) {{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}} @else if (variableOptionsFailed) {{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}}</span>
</mat-error>
}
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
</mat-form-field>
</div>
</div>
@@ -45,8 +45,4 @@
word-break: break-word;
}
}
&-radio-group-error-message .adf-error-container {
margin-top: 5px;
}
}
@@ -63,6 +63,7 @@
}
.adf-error {
padding-top: 3px;
animation: slide-down-fade-in 300ms cubic-bezier(0.55, 0, 0.55, 0.2);
}
}
@@ -66,6 +66,10 @@
@include mixins.adf-error-icon;
}
.adf-error {
padding-top: 3px;
}
.adf-error-animate {
animation: adf-people-cloud-slide-in-down 300ms cubic-bezier(0.55, 0, 0.55, 0.2);
}
@@ -6,17 +6,18 @@
<label class="adf-label" [attr.for]="field.id"
>{{field.name | translate }}<span class="adf-asterisk" [style.visibility]="isRequired() ? 'visible' : 'hidden'">*</span></label
>
<mat-form-field class="adf-form-field-input">
<mat-form-field class="adf-form-field-input" subscriptSizing="dynamic">
<mat-select class="adf-select" [id]="field.id" [formControl]="dropdownControl">
<mat-option *ngFor="let opt of field.options" [value]="opt" [id]="opt.id">{{opt.name}}</mat-option>
<mat-option id="readonlyOption" *ngIf="dropdownControl.disabled" [value]="field.value">{{field.value}}</mat-option>
</mat-select>
@if (!isReadOnlyField && dropdownControl.touched && (field.validationSummary?.message || dropdownControl.hasError('required'))) {
<mat-error data-automation-id="adf-dropdown-error">
<mat-error class="adf-form-field-status-slot" data-automation-id="adf-dropdown-error">
<mat-icon class="adf-error-icon">error_outline</mat-icon>
<span class="adf-error-text"
>@if (field.validationSummary?.message) {{{ field.validationSummary.message | translate }}} @else {{{ 'FORM.FIELD.REQUIRED' | translate }}}</span>
</mat-error>
}
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
</mat-form-field>
</div>
@@ -4,7 +4,7 @@
[class.adf-invalid]="!field.isValid"
[class.adf-readonly]="field.readOnly"
id="typehead-div">
<mat-form-field class="adf-form-field-input">
<mat-form-field class="adf-form-field-input" subscriptSizing="dynamic">
<label class="adf-label" [attr.for]="field.id">{{field.name | translate }}</label>
<input matInput class="adf-input"
type="text"
@@ -23,12 +23,13 @@
</mat-option>
</mat-autocomplete>
@if (field.validationSummary?.message || isInvalidFieldRequired()) {
<mat-error>
<mat-error class="adf-form-field-status-slot">
<mat-icon class="adf-error-icon">error_outline</mat-icon>
<span class="adf-error-text"
>@if (field.validationSummary?.message) {{{ field.validationSummary.message | translate }}} @else {{{ 'FORM.FIELD.REQUIRED' | translate }}}</span>
</mat-error>
}
<mat-hint class="adf-form-field-status-slot" aria-hidden="true" />
</mat-form-field>
</div>
</div>
+1 -1
View File
@@ -52,7 +52,7 @@
"@angular/platform-browser-dynamic": "20.3.27",
"@angular/router": "20.3.27",
"@apollo/client": "3.13.1",
"@cspell/eslint-plugin": "10.0.0",
"@cspell/eslint-plugin": "10.0.1",
"@mat-datetimepicker/core": "16.0.1",
"@ngx-translate/core": "17.0.0",
"angular-oauth2-oidc": "19.0.0",
+173 -167
View File
@@ -69,8 +69,8 @@ importers:
specifier: 3.13.1
version: 3.13.1(graphql-ws@6.0.8(graphql@16.14.0)(ws@8.21.0))(graphql@16.14.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@cspell/eslint-plugin':
specifier: 10.0.0
version: 10.0.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))
specifier: 10.0.1
version: 10.0.1(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))
'@mat-datetimepicker/core':
specifier: 16.0.1
version: 16.0.1(@angular/cdk@20.2.14(@angular/common@20.3.27(@angular/core@20.3.27(@angular/compiler@20.3.27)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.27(@angular/compiler@20.3.27)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/common@20.3.27(@angular/core@20.3.27(@angular/compiler@20.3.27)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.27(@angular/compiler@20.3.27)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/material@20.2.14(7fc7dc26a5364b20a95267fc7b4f10c7))
@@ -1288,28 +1288,28 @@ packages:
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
'@cspell/cspell-bundled-dicts@10.0.0':
resolution: {integrity: sha512-ci410HEkng2582oOjlRHQtlGXwh+rUC/mVcN9dObLHpKhvPgzn2S6vT56pARstxxZpcCUG/oLhn3dCqdJlVzmA==}
'@cspell/cspell-bundled-dicts@10.0.1':
resolution: {integrity: sha512-WvkSDNX4Uyyj/ZgbPO6L38iFNMfK1EqsH1FteRiI2qLz6QZMXRFrIt12OqiWIplzZDDaVpBH9FCJOPJll0fjCQ==}
engines: {node: '>=22.18.0'}
'@cspell/cspell-performance-monitor@10.0.0':
resolution: {integrity: sha512-2vMh2pLt2dg/ArYvWjMP4v9HCm0pRhONsEJyc8oHdZyOYvX7trixX894I0M39+VBf3yWtPCEgYRh1UDXNIZRig==}
'@cspell/cspell-performance-monitor@10.0.1':
resolution: {integrity: sha512-9tVcHXwRnbazUv4WSG0h3MqV4+LgmLNgSALAQUflPPW0EMxTf7C4Dmv9cgxJyCEQrdnVKCr58nPPaahhz9LJUg==}
engines: {node: '>=22.18.0'}
'@cspell/cspell-pipe@10.0.0':
resolution: {integrity: sha512-qcgHhQvtEX8LSwIVsWrdUgiGim52lN3jT+ghlkdp72v+nBcGKsS2frEKTmbGLug+xcqppkzs6Q6VmsFp1MGtfA==}
'@cspell/cspell-pipe@10.0.1':
resolution: {integrity: sha512-HPeXMD9AZ3V/qPkvQaPcak+C7cJ2z7JTHN8smd6J8L2aThLRky2cHc2OyeaHPSHB7WA47b4z2n5u5nawZhv5VQ==}
engines: {node: '>=22.18.0'}
'@cspell/cspell-resolver@10.0.0':
resolution: {integrity: sha512-8H+IUDB7SmrpcRugQ5f55qG81ZShk6nQRk+natLz41TEY98D8/LCmjHEkh/vhDPph9pVJmNUp7JcM2E1UHEa2g==}
'@cspell/cspell-resolver@10.0.1':
resolution: {integrity: sha512-PIzkZHD1fGUQx1XteK2d1iQ0Mzq/maYcoB4jkvAiiR6WqP3MWYNKFdI9z+R5pOq5KgMfW+5Ig1q0oSR6h8irlA==}
engines: {node: '>=22.18.0'}
'@cspell/cspell-service-bus@10.0.0':
resolution: {integrity: sha512-V7eigqg/TOoKwNK4Q18wr9KGxA8U5SFcoWVS8RyAxv4mQ+yNKHhvHEbRBifjPbQDer66afOrclb2UbqkIy2SOw==}
'@cspell/cspell-service-bus@10.0.1':
resolution: {integrity: sha512-y6NcIGP2IdXaBL4PVH8vxsr7K27wzz3Ech87UtUtrDSXAiVEOvXgAIknEOUVp59rTlUE8Rn4IRURC6f/hgMyfw==}
engines: {node: '>=22.18.0'}
'@cspell/cspell-types@10.0.0':
resolution: {integrity: sha512-IQA++Idqb8fZzkCbHq3+T+9yG9WpeaBxomOrG2KcR/Pj0CgnovzuApYKL2cc35UWLePboKinMeqEPiweFpHVug==}
'@cspell/cspell-types@10.0.1':
resolution: {integrity: sha512-kLgLShnWADDVreKC63pBrWkcvxgZzFIfO34Jhx/SWfuOIA3cD8AXT+HjyuLfoGJ7mUb58hv2kUziKzEy4INb1w==}
engines: {node: '>=22.18.0'}
'@cspell/dict-ada@4.1.1':
@@ -1324,11 +1324,11 @@ packages:
'@cspell/dict-bash@4.2.3':
resolution: {integrity: sha512-ljUZoKHbDqw5Sx0qpL2qTUlmkmr+vhZH/sCNrNaBZKTbdgiswErSnIF1jRbGmEitJNxHRHWsuZyVgnTGfVO1Yw==}
'@cspell/dict-companies@3.2.11':
resolution: {integrity: sha512-0cmafbcz2pTHXLd59eLR1gvDvN6aWAOM0+cIL4LLF9GX9yB2iKDNrKsvs4tJRqutoaTdwNFBbV0FYv+6iCtebQ==}
'@cspell/dict-companies@3.2.12':
resolution: {integrity: sha512-mjiz/N3zWOCsz5VfwMUydSl7uW0OU9H2PnbCNc3RV44Vj6Q59CSp6EYGSGZQxrXU1gpsuZUrwr6QCjNjFOOg5A==}
'@cspell/dict-cpp@7.0.2':
resolution: {integrity: sha512-dfbeERiVNeqmo/npivdR6rDiBCqZi3QtjH2Z0HFcXwpdj6i97dX1xaKyK2GUsO/p4u1TOv63Dmj5Vm48haDpuA==}
'@cspell/dict-cpp@7.1.0':
resolution: {integrity: sha512-rcjycobioQUd9Jm/Y1n8U+sq6ytpZ0iV8AYIo+vyEFfutC5x7g6hL6Fh3bCdh6IporGHRqfEutGK/4sfopD2ZA==}
'@cspell/dict-cryptocurrencies@5.0.5':
resolution: {integrity: sha512-R68hYYF/rtlE6T/dsObStzN5QZw+0aQBinAXuWCVqwdS7YZo0X33vGMfChkHaiCo3Z2+bkegqHlqxZF4TD3rUA==}
@@ -1342,8 +1342,8 @@ packages:
'@cspell/dict-dart@2.3.2':
resolution: {integrity: sha512-sUiLW56t9gfZcu8iR/5EUg+KYyRD83Cjl3yjDEA2ApVuJvK1HhX+vn4e4k4YfjpUQMag8XO2AaRhARE09+/rqw==}
'@cspell/dict-data-science@2.0.14':
resolution: {integrity: sha512-jl6Ds4u5u5JT+yY30pWQpAbdCHfy3lCcNkLbpL/AZKoUaLEoXbaYsps9xQtvD7DyaiXxiLZkdH2yHHXtoFtZyg==}
'@cspell/dict-data-science@2.0.16':
resolution: {integrity: sha512-M72mxv5asuAnORurz4iXRJ+Tw9XBq6eu7D2Ne7biP0Z1RciKGNxXWu9JycA/KlVvK1hAlKj/fANlXhuEWpXKFg==}
'@cspell/dict-django@4.1.6':
resolution: {integrity: sha512-SdbSFDGy9ulETqNz15oWv2+kpWLlk8DJYd573xhIkeRdcXOjskRuxjSZPKfW7O3NxN/KEf3gm3IevVOiNuFS+w==}
@@ -1357,14 +1357,14 @@ packages:
'@cspell/dict-elixir@4.0.8':
resolution: {integrity: sha512-CyfphrbMyl4Ms55Vzuj+mNmd693HjBFr9hvU+B2YbFEZprE5AG+EXLYTMRWrXbpds4AuZcvN3deM2XVB80BN/Q==}
'@cspell/dict-en-common-misspellings@2.1.12':
resolution: {integrity: sha512-14Eu6QGqyksqOd4fYPuRb58lK1Va7FQK9XxFsRKnZU8LhL3N+kj7YKDW+7aIaAN/0WGEqslGP6lGbQzNti8Akw==}
'@cspell/dict-en-common-misspellings@2.2.0':
resolution: {integrity: sha512-5PmCHv+AhY0LVNo3bE1FdRKMmw1esKj83GPwLymnVPYNtlI2Jf6y27EjC0azg4zny5keWmku0GQiMf55Fi+qeA==}
'@cspell/dict-en-gb-mit@3.1.24':
resolution: {integrity: sha512-Oowb/Uzkh7OmDRdCcETzMc9imEb4IpLlHJXoYjX8A8DS2X/54gqSjI915JFB8hKtFjBko5OM0BLQ+6cZhFEMmQ==}
'@cspell/dict-en-gb-mit@3.1.25':
resolution: {integrity: sha512-zGODptk24CMrXi49ieG2SUm94CKxEsVF0dYNF+1ZYH0MSsQDZ/PKDlrrbvtBqSupKdPSj0Z9sjOmMNfHHW9ZSg==}
'@cspell/dict-en_us@4.4.35':
resolution: {integrity: sha512-xWpxBCc/FzzMMo/A+0qwARVaIIhR0Ql8yhhv4rvsvg+GfQF+LG9yzg2GwTM5N2rjvzmM3nKuR9zxFZq2I6fJSg==}
'@cspell/dict-en_us@4.4.36':
resolution: {integrity: sha512-2yOhI/+7d1DbfvMljGW4jw8pLqDEsVmnvUXBOCFXtLU2BWgQkrqOJDCNseYjEiEbTp0OtdrWEWWPFSP1TNugQw==}
'@cspell/dict-filetypes@3.0.18':
resolution: {integrity: sha512-yU7RKD/x1IWmDLzWeiItMwgV+6bUcU/af23uS0+uGiFUbsY1qWV/D4rxlAAO6Z7no3J2z8aZOkYIOvUrJq0Rcw==}
@@ -1387,8 +1387,8 @@ packages:
'@cspell/dict-git@3.1.0':
resolution: {integrity: sha512-KEt9zGkxqGy2q1nwH4CbyqTSv5nadpn8BAlDnzlRcnL0Xb3LX9xTgSGShKvzb0bw35lHoYyLWN2ZKAqbC4pgGQ==}
'@cspell/dict-golang@6.0.26':
resolution: {integrity: sha512-YKA7Xm5KeOd14v5SQ4ll6afe9VSy3a2DWM7L9uBq4u3lXToRBQ1W5PRa+/Q9udd+DTURyVVnQ+7b9cnOlNxaRg==}
'@cspell/dict-golang@6.0.27':
resolution: {integrity: sha512-rRDb2JL8EefaezHGTEclKXCs4eMOS0q/datk94Lm7KQOhlGlzS9FDVZiR1/guh0o+iJCmejQuf5NR2FQeQSWsg==}
'@cspell/dict-google@1.0.9':
resolution: {integrity: sha512-biL65POqialY0i4g6crj7pR6JnBkbsPovB2WDYkj3H4TuC/QXv7Pu5pdPxeUJA6TSCHI7T5twsO4VSVyRxD9CA==}
@@ -1399,8 +1399,8 @@ packages:
'@cspell/dict-html-symbol-entities@4.0.5':
resolution: {integrity: sha512-429alTD4cE0FIwpMucvSN35Ld87HCyuM8mF731KU5Rm4Je2SG6hmVx7nkBsLyrmH3sQukTcr1GaiZsiEg8svPA==}
'@cspell/dict-html@4.0.15':
resolution: {integrity: sha512-GJYnYKoD9fmo2OI0aySEGZOjThnx3upSUvV7mmqUu8oG+mGgzqm82P/f7OqsuvTaInZZwZbo+PwJQd/yHcyFIw==}
'@cspell/dict-html@4.0.16':
resolution: {integrity: sha512-9B6/Cpb5YVcYgsEAlKudun1yd4ONllYS/ZibKLYea2apPR+l2vQdARnPrP9kTqa7NUNfRKl7m9Fb6k9rjimnow==}
'@cspell/dict-java@5.0.12':
resolution: {integrity: sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A==}
@@ -1408,8 +1408,8 @@ packages:
'@cspell/dict-julia@1.1.1':
resolution: {integrity: sha512-WylJR9TQ2cgwd5BWEOfdO3zvDB+L7kYFm0I9u0s9jKHWQ6yKmfKeMjU9oXxTBxIufhCXm92SKwwVNAC7gjv+yA==}
'@cspell/dict-k8s@1.0.12':
resolution: {integrity: sha512-2LcllTWgaTfYC7DmkMPOn9GsBWsA4DZdlun4po8s2ysTP7CPEnZc1ZfK6pZ2eI4TsZemlUQQ+NZxMe9/QutQxg==}
'@cspell/dict-k8s@1.0.13':
resolution: {integrity: sha512-ELGkS13k7K/NEfVimBSrxVTfqXvOF/Kvxj4I62YxRm8bvHbfoXgrGaOx28lPiNRz+dmu+yYtvuXbnURKtYbC6g==}
'@cspell/dict-kotlin@1.1.1':
resolution: {integrity: sha512-J3NzzfgmxRvEeOe3qUXnSJQCd38i/dpF9/t3quuWh6gXM+krsAXP75dY1CzDmS8mrJAlBdVBeAW5eAZTD8g86Q==}
@@ -1426,22 +1426,22 @@ packages:
'@cspell/dict-makefile@1.0.5':
resolution: {integrity: sha512-4vrVt7bGiK8Rx98tfRbYo42Xo2IstJkAF4tLLDMNQLkQ86msDlYSKG1ZCk8Abg+EdNcFAjNhXIiNO+w4KflGAQ==}
'@cspell/dict-markdown@2.0.17':
resolution: {integrity: sha512-H8bAxih6U8NOnSPL7R8My+tqjaB4tmnJTjERuz4zYqmf+cH+5xshX3UVgKlwWFcyjsYfv/zEDuRdMctQv1q6HQ==}
'@cspell/dict-markdown@2.0.18':
resolution: {integrity: sha512-KLRSwVrwKDz4n7bl2XQjzvaBZbGgx5QKkP5Ok1b24xaO3TpXsLhAbAn1mItvFlI2tF6Rkt83iYjQcYppywuf5Q==}
peerDependencies:
'@cspell/dict-css': ^4.1.2
'@cspell/dict-html': ^4.0.15
'@cspell/dict-html': ^4.0.16
'@cspell/dict-html-symbol-entities': ^4.0.5
'@cspell/dict-typescript': ^3.2.3
'@cspell/dict-monkeyc@1.0.12':
resolution: {integrity: sha512-MN7Vs11TdP5mbdNFQP5x2Ac8zOBm97ARg6zM5Sb53YQt/eMvXOMvrep7+/+8NJXs0jkp70bBzjqU4APcqBFNAw==}
'@cspell/dict-monkeyc@1.1.0':
resolution: {integrity: sha512-mc/hgvSy/emOIYtc8kuVEaLUlnaERunfAubfJ5plUXq6s0A69bcukJzUzSt9C0UTCwS28641ILRPv80m3L9QbA==}
'@cspell/dict-node@5.0.9':
resolution: {integrity: sha512-hO+ga+uYZ/WA4OtiMEyKt5rDUlUyu3nXMf8KVEeqq2msYvAPdldKBGH7lGONg6R/rPhv53Rb+0Y1SLdoK1+7wQ==}
'@cspell/dict-npm@5.2.41':
resolution: {integrity: sha512-To3xsfRmMBYVXtWVEdUgV35M9a/JZ54dSuoY6m6D3uHKKL3I326Wmy4xifZ3PU8MQaWhyEH7zbIcUEtKwTQMcA==}
'@cspell/dict-npm@5.2.46':
resolution: {integrity: sha512-Z5GG59c17UEk6BPZ3lVD/++GvPBI+O05OTGm4sRA/0I/qszbstuYRw+j2//5f8SWzOFXKaGYI8kygwKX9EQZ9Q==}
'@cspell/dict-php@4.1.1':
resolution: {integrity: sha512-EXelI+4AftmdIGtA8HL8kr4WlUE11OqCSVlnIgZekmTkEGSZdYnkFdiJ5IANSALtlQ1mghKjz+OFqVs6yowgWA==}
@@ -1452,14 +1452,14 @@ packages:
'@cspell/dict-public-licenses@2.0.16':
resolution: {integrity: sha512-EQRrPvEOmwhwWezV+W7LjXbIBjiy6y/shrET6Qcpnk3XANTzfvWflf9PnJ5kId/oKWvihFy0za0AV1JHd03pSQ==}
'@cspell/dict-python@4.2.27':
resolution: {integrity: sha512-Rj6xQgYS4X6ienjgAZF+njA0GRY4oSPouJWv0vfikCTn6EWlfk0V6Dy1HP3Migj1O+IC2NmespgVq+BZNSp8OA==}
'@cspell/dict-python@4.4.0':
resolution: {integrity: sha512-49Eju/a97V6ExAeMJDM2Tk4jsYr0pm+kQzqQrKLAZdrRd6VrLIgseI481EQSmgoVkPPdsuwK1xj9ZlpDQIF4qg==}
'@cspell/dict-r@2.1.1':
resolution: {integrity: sha512-71Ka+yKfG4ZHEMEmDxc6+blFkeTTvgKbKAbwiwQAuKl3zpqs1Y0vUtwW2N4b3LgmSPhV3ODVY0y4m5ofqDuKMw==}
'@cspell/dict-ruby@5.1.1':
resolution: {integrity: sha512-LHrp84oEV6q1ZxPPyj4z+FdKyq1XAKYPtmGptrd+uwHbrF/Ns5+fy6gtSi7pS+uc0zk3JdO9w/tPK+8N1/7WUA==}
'@cspell/dict-ruby@5.1.2':
resolution: {integrity: sha512-f6Slf11N91ittf71AWlfVVG9GZPezVRBfcMPCTNTWhUsY/VEspkBRZYDhPXjV4df3jqHy5YJs8nlsFcFVF/bMA==}
'@cspell/dict-rust@4.1.2':
resolution: {integrity: sha512-O1FHrumYcO+HZti3dHfBPUdnDFkI+nbYK3pxYmiM1sr+G0ebOd6qchmswS0Wsc6ZdEVNiPYJY/gZQR6jfW3uOg==}
@@ -1470,8 +1470,8 @@ packages:
'@cspell/dict-shell@1.2.0':
resolution: {integrity: sha512-PVctvT22lJ49niMiakO8xieY7ELCAzjSqhejWR7bAMb5AZ9F4WDEs+XdGMnoVHWeXq7K5rcepLPmEJb+37zzIw==}
'@cspell/dict-software-terms@5.2.2':
resolution: {integrity: sha512-0CaYd6TAsKtEoA7tNswm1iptEblTzEe3UG8beG2cpSTHk7afWIVMtJLgXDv0f/Li67Lf3Z1Jf3JeXR7GsJ2TRw==}
'@cspell/dict-software-terms@5.4.1':
resolution: {integrity: sha512-tY88gnOWj2ax6h+i7BjU7dIH1f3fvY4WypS0a+TpjBgXC318AdOMmy0zK1SzxGNOjhWJfCeCZNVoLFM/DuOG4g==}
'@cspell/dict-sql@2.2.1':
resolution: {integrity: sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg==}
@@ -1482,8 +1482,8 @@ packages:
'@cspell/dict-swift@2.0.6':
resolution: {integrity: sha512-PnpNbrIbex2aqU1kMgwEKvCzgbkHtj3dlFLPMqW1vSniop7YxaDTtvTUO4zA++ugYAEL+UK8vYrBwDPTjjvSnA==}
'@cspell/dict-terraform@1.1.3':
resolution: {integrity: sha512-gr6wxCydwSFyyBKhBA2xkENXtVFToheqYYGFvlMZXWjviynXmh+NK/JTvTCk/VHk3+lzbO9EEQKee6VjrAUSbA==}
'@cspell/dict-terraform@1.1.4':
resolution: {integrity: sha512-Ere42ilvMFvQA4GlcN0OKlruMPR6EsvaB+iTHzj2xc+NJGRK64V7yApUcWrOrSgTiM/vhWXPIsK3OMfiAiNdmA==}
'@cspell/dict-typescript@3.2.3':
resolution: {integrity: sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==}
@@ -1494,30 +1494,30 @@ packages:
'@cspell/dict-zig@1.0.0':
resolution: {integrity: sha512-XibBIxBlVosU06+M6uHWkFeT0/pW5WajDRYdXG2CgHnq85b0TI/Ks0FuBJykmsgi2CAD3Qtx8UHFEtl/DSFnAQ==}
'@cspell/dynamic-import@10.0.0':
resolution: {integrity: sha512-fMqu/5Ma1Q5ZCR/Par+Q4pvaTKmx5pKZzQmkwld2hNounVdk2OaIPM9MzpNn6I1mLk5J+wTnIZmfcWNAzNP9aQ==}
'@cspell/dynamic-import@10.0.1':
resolution: {integrity: sha512-mP1gdq00aIcH8HxNMqnH11X6BKxLcneDtFgl/ecjIKnaGKwi44m8AndP5Kr4ODaYdl8UUw9O3dJh7KaQXnLHZQ==}
engines: {node: '>=22.18.0'}
'@cspell/eslint-plugin@10.0.0':
resolution: {integrity: sha512-NXXismQgYtAg9w399Oa57TYZpm1u9VLX5LZADjgYz0ZwR/9FVwbOP2yiUisQXODCTAP+fnWGJPmYRiHmSYrW9Q==}
'@cspell/eslint-plugin@10.0.1':
resolution: {integrity: sha512-VgRVWIWyM5bz2d7eC3/F4ON1fhMdrFB0R6slXmJewDDbJMDloSsMsWCSktiFET3a0TX/DTjOGGDzBN9tqGDGPw==}
engines: {node: '>=22.18.0'}
peerDependencies:
eslint: ^8 || ^9 || ^10
'@cspell/filetypes@10.0.0':
resolution: {integrity: sha512-UP57j9yrDtlCHpFxc/eGho1m8DP5olfu9KRWwd5fiqL9nMSE2rUJtPzQyvqmDwO5bVZt3B+fTVdo4gxuiqw25A==}
'@cspell/filetypes@10.0.1':
resolution: {integrity: sha512-Z5S35giU5IW49fBBq6BksUbE8PC4IYPfaKuwl5Nl9jkf/OkAKiBmCowKX45NzRUQInwK/GSqqIUifrNeI6LdLw==}
engines: {node: '>=22.18.0'}
'@cspell/rpc@10.0.0':
resolution: {integrity: sha512-QrpOZMwz2pAjvl6Hky2PauYoMpLCASn3osjn7uKUbgFV70sahyj6tmx4rRgRX7vHu2WQLZev+YsuO4EujiBDOg==}
'@cspell/rpc@10.0.1':
resolution: {integrity: sha512-axSRKv3zEAmBm66iD/FV/MPmE4/Yf7c3PZiwTW894Yd3iEhtn3KPKeTrqQ2/tDrhB1Z2qTsap/Hue0MK4o5WXg==}
engines: {node: '>=22.18.0'}
'@cspell/strong-weak-map@10.0.0':
resolution: {integrity: sha512-JRsato0s2IjYdsng+AGL6oAqgZVQgih5aWKdmxs21H6EdhMaoFDmRE5kXm/RT5a6OMdtnzQM9DqeToqBChWIOQ==}
'@cspell/strong-weak-map@10.0.1':
resolution: {integrity: sha512-lenN1DVyPi8nJLSMSJJ670ddTjyiruLueuSZO1qLcxBqUhgxDt/mALu9N/1m6WdOVcg6m/5cLiZVg2KOo2UzRw==}
engines: {node: '>=22.18.0'}
'@cspell/url@10.0.0':
resolution: {integrity: sha512-q+0pHQ8DbqjemyaOn/mTtBRbCuKDqhnsVbZ6J9zkTsxPgMpccjy0s5oLXwomfrrxMRBH+UcbERwtUmE+SbnoIQ==}
'@cspell/url@10.0.1':
resolution: {integrity: sha512-abYYgI29wJhWIfWTYrYuzRYDcHQUQ1N5ylnhxYn1NJnIQMqUWGLbDmt12JABtZ+R6h6UNatQrS7rhP86etvJyQ==}
engines: {node: '>=22.18.0'}
'@cspotcode/source-map-support@0.8.1':
@@ -5183,8 +5183,8 @@ packages:
resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
engines: {node: '>= 12'}
comment-json@4.6.2:
resolution: {integrity: sha512-R2rze/hDX30uul4NZoIZ76ImSJLFxn/1/ZxtKC1L77y2X1k+yYu1joKbAtMA2Fg3hZrTOiw0I5mwVMo0cf250w==}
comment-json@5.0.0:
resolution: {integrity: sha512-uiqLcOiVDJtBP8WGkZHEP+FZIhTzP1dxvn59EfoYUi9gqupjrBWVQkO2atDrbnKPwLeotFYDsuNb26uBMqB+hw==}
engines: {node: '>= 6'}
comment-parser@1.4.7:
@@ -5323,36 +5323,36 @@ packages:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
cspell-config-lib@10.0.0:
resolution: {integrity: sha512-HWK7SRnJ3N/kOThw/uzmXmQYCzBxu58Jkq2hHyte1voDl118BeNFoaNRWMpYdHbBi3kCj8gaZu8wGtm+Zmdhxw==}
cspell-config-lib@10.0.1:
resolution: {integrity: sha512-hMpo/0j6k7pbiqrLDOLJKD2IGP9XwhjKf2miiM6p84Xeo4nyuFZaxxDCQ68R851HSYFrrdltgpoipMbj1h2Tnw==}
engines: {node: '>=22.18.0'}
cspell-dictionary@10.0.0:
resolution: {integrity: sha512-KubSoEAJO+77KPSSWjoLCz0+MIWVNq3joGTSyxucAZrBSJD64Y1O4BHHr1aj6XHIZwXhWWNScQlrQR3OcIulng==}
cspell-dictionary@10.0.1:
resolution: {integrity: sha512-3cZ659vgsZWkzGQJR/sNqGDVt/OnvTSieLKI76V++4t1bHJfochb9ZrrwsuMsb1VPGiyqClUP1/O6WrefF/FVg==}
engines: {node: '>=22.18.0'}
cspell-glob@10.0.0:
resolution: {integrity: sha512-bXS35fMcA9X7GEkfnWBfoPd/vTnxxfXW+YHt6tWxu5fejfs00qUbjWp1oLC9FxRaXWxIkfsYp2mi1k1jYl4RVw==}
cspell-glob@10.0.1:
resolution: {integrity: sha512-7bII9J3aSSpZDwhx7w+zfQXbMxHZQ3be0ilUp5bHrsjz6o07v/NqOHMGcwKdPn1sw2dxDz9sv057xE5pqXnSdw==}
engines: {node: '>=22.18.0'}
cspell-grammar@10.0.0:
resolution: {integrity: sha512-49udtYzkcCYEIDJbFOb4IwiAJebOYZnYvG6o6Ep19Tq0Xwjk7i4vxUprNiFNDCWFbcbJRPE9cpwQUVwp5WFGLw==}
cspell-grammar@10.0.1:
resolution: {integrity: sha512-xC9AFYmaI9wsO//a7S5tdDGKGJVD5UEEsTg+Up2fi7lPfXIryisYmV6tePNL1SEg0idYss4ja8LUZ3Mib09BjQ==}
engines: {node: '>=22.18.0'}
hasBin: true
cspell-io@10.0.0:
resolution: {integrity: sha512-NQCAUhx9DwKApxPuFl7EK1K1XSaQEAPld45yjjwv93xF8rJkEGkgzOwjbqafwAD20eKYv1a7oj/9EC0S5jETSw==}
cspell-io@10.0.1:
resolution: {integrity: sha512-8C2ka07faxflnaqEBO3pektS21XViE/SEHT7F5ZD1ou7FyMR5u3xawTBJSczClfsxLt/WYeztBYrpmGAjmjksw==}
engines: {node: '>=22.18.0'}
cspell-lib@10.0.0:
resolution: {integrity: sha512-PowW6JEjuv/F2aFEirZvBxpzHdchOnpsUJbeIcFcai0++taLTbHQObROBEBf7e0S8DnHpVD5TZkqrTME5e44wg==}
cspell-lib@10.0.1:
resolution: {integrity: sha512-RpsIPiLzc4/YMW8BMRKpyJ81x439qjYWcqgdKeXnMkbKM88J9PexzutfFf/4v97v96KzfNitEzMpbI0uj8OeUg==}
engines: {node: '>=22.18.0'}
cspell-trie-lib@10.0.0:
resolution: {integrity: sha512-R8qrMx10E/bm3Lecslwxn9XYo5NzSRK1rtandEX5n9UmEYHoBXjZELkg5+TOnV8VgrVaJSK57XtcGrbKp/4kSg==}
cspell-trie-lib@10.0.1:
resolution: {integrity: sha512-BFvhalSkRQFjKrZ//FKK7fRGrZFpifnxB5AwCkzsIsBZqicsfafcQ1xP21qpb0QqyV/IomjNgviG+tRJs+0rMw==}
engines: {node: '>=22.18.0'}
peerDependencies:
'@cspell/cspell-types': 10.0.0
'@cspell/cspell-types': 10.0.1
css-declaration-sorter@7.4.0:
resolution: {integrity: sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==}
@@ -5984,8 +5984,8 @@ packages:
fast-diff@1.3.0:
resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
fast-equals@6.0.0:
resolution: {integrity: sha512-PFhhIGgdM79r5Uztdj9Zb6Tt1zKafqVfdMGwVca1z5z6fbX7DmsySSuJd8HiP6I1j505DCS83cLxo5rmSNeVEA==}
fast-equals@6.0.2:
resolution: {integrity: sha512-sAjhj9ZhOxYCGiNMnZLaucOqf5ZeFnHNoKoAZiD9thhJ0N8RP85qJK759/97C/3L7NzzmGVB5uiX9AUpySZmUQ==}
engines: {node: '>=6.0.0'}
fast-glob@3.3.3:
@@ -8460,6 +8460,10 @@ packages:
resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==}
engines: {node: '>= 18'}
smol-toml@1.8.0:
resolution: {integrity: sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==}
engines: {node: '>= 18'}
socket.io-adapter@2.5.8:
resolution: {integrity: sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw==}
@@ -11177,26 +11181,26 @@ snapshots:
'@colors/colors@1.5.0': {}
'@cspell/cspell-bundled-dicts@10.0.0':
'@cspell/cspell-bundled-dicts@10.0.1':
dependencies:
'@cspell/dict-ada': 4.1.1
'@cspell/dict-al': 1.1.1
'@cspell/dict-aws': 4.0.17
'@cspell/dict-bash': 4.2.3
'@cspell/dict-companies': 3.2.11
'@cspell/dict-cpp': 7.0.2
'@cspell/dict-companies': 3.2.12
'@cspell/dict-cpp': 7.1.0
'@cspell/dict-cryptocurrencies': 5.0.5
'@cspell/dict-csharp': 4.0.8
'@cspell/dict-css': 4.1.2
'@cspell/dict-dart': 2.3.2
'@cspell/dict-data-science': 2.0.14
'@cspell/dict-data-science': 2.0.16
'@cspell/dict-django': 4.1.6
'@cspell/dict-docker': 1.1.17
'@cspell/dict-dotnet': 5.0.13
'@cspell/dict-elixir': 4.0.8
'@cspell/dict-en-common-misspellings': 2.1.12
'@cspell/dict-en-gb-mit': 3.1.24
'@cspell/dict-en_us': 4.4.35
'@cspell/dict-en-common-misspellings': 2.2.0
'@cspell/dict-en-gb-mit': 3.1.25
'@cspell/dict-en_us': 4.4.36
'@cspell/dict-filetypes': 3.0.18
'@cspell/dict-flutter': 1.1.1
'@cspell/dict-fonts': 4.0.6
@@ -11204,52 +11208,52 @@ snapshots:
'@cspell/dict-fullstack': 3.2.9
'@cspell/dict-gaming-terms': 1.1.2
'@cspell/dict-git': 3.1.0
'@cspell/dict-golang': 6.0.26
'@cspell/dict-golang': 6.0.27
'@cspell/dict-google': 1.0.9
'@cspell/dict-haskell': 4.0.6
'@cspell/dict-html': 4.0.15
'@cspell/dict-html': 4.0.16
'@cspell/dict-html-symbol-entities': 4.0.5
'@cspell/dict-java': 5.0.12
'@cspell/dict-julia': 1.1.1
'@cspell/dict-k8s': 1.0.12
'@cspell/dict-k8s': 1.0.13
'@cspell/dict-kotlin': 1.1.1
'@cspell/dict-latex': 5.1.0
'@cspell/dict-lorem-ipsum': 4.0.5
'@cspell/dict-lua': 4.0.8
'@cspell/dict-makefile': 1.0.5
'@cspell/dict-markdown': 2.0.17(@cspell/dict-css@4.1.2)(@cspell/dict-html-symbol-entities@4.0.5)(@cspell/dict-html@4.0.15)(@cspell/dict-typescript@3.2.3)
'@cspell/dict-monkeyc': 1.0.12
'@cspell/dict-markdown': 2.0.18(@cspell/dict-css@4.1.2)(@cspell/dict-html-symbol-entities@4.0.5)(@cspell/dict-html@4.0.16)(@cspell/dict-typescript@3.2.3)
'@cspell/dict-monkeyc': 1.1.0
'@cspell/dict-node': 5.0.9
'@cspell/dict-npm': 5.2.41
'@cspell/dict-npm': 5.2.46
'@cspell/dict-php': 4.1.1
'@cspell/dict-powershell': 5.0.15
'@cspell/dict-public-licenses': 2.0.16
'@cspell/dict-python': 4.2.27
'@cspell/dict-python': 4.4.0
'@cspell/dict-r': 2.1.1
'@cspell/dict-ruby': 5.1.1
'@cspell/dict-ruby': 5.1.2
'@cspell/dict-rust': 4.1.2
'@cspell/dict-scala': 5.0.9
'@cspell/dict-shell': 1.2.0
'@cspell/dict-software-terms': 5.2.2
'@cspell/dict-software-terms': 5.4.1
'@cspell/dict-sql': 2.2.1
'@cspell/dict-svelte': 1.0.7
'@cspell/dict-swift': 2.0.6
'@cspell/dict-terraform': 1.1.3
'@cspell/dict-terraform': 1.1.4
'@cspell/dict-typescript': 3.2.3
'@cspell/dict-vue': 3.0.5
'@cspell/dict-zig': 1.0.0
'@cspell/cspell-performance-monitor@10.0.0': {}
'@cspell/cspell-performance-monitor@10.0.1': {}
'@cspell/cspell-pipe@10.0.0': {}
'@cspell/cspell-pipe@10.0.1': {}
'@cspell/cspell-resolver@10.0.0':
'@cspell/cspell-resolver@10.0.1':
dependencies:
global-directory: 5.0.0
'@cspell/cspell-service-bus@10.0.0': {}
'@cspell/cspell-service-bus@10.0.1': {}
'@cspell/cspell-types@10.0.0': {}
'@cspell/cspell-types@10.0.1': {}
'@cspell/dict-ada@4.1.1': {}
@@ -11261,9 +11265,9 @@ snapshots:
dependencies:
'@cspell/dict-shell': 1.2.0
'@cspell/dict-companies@3.2.11': {}
'@cspell/dict-companies@3.2.12': {}
'@cspell/dict-cpp@7.0.2': {}
'@cspell/dict-cpp@7.1.0': {}
'@cspell/dict-cryptocurrencies@5.0.5': {}
@@ -11273,7 +11277,7 @@ snapshots:
'@cspell/dict-dart@2.3.2': {}
'@cspell/dict-data-science@2.0.14': {}
'@cspell/dict-data-science@2.0.16': {}
'@cspell/dict-django@4.1.6': {}
@@ -11283,11 +11287,11 @@ snapshots:
'@cspell/dict-elixir@4.0.8': {}
'@cspell/dict-en-common-misspellings@2.1.12': {}
'@cspell/dict-en-common-misspellings@2.2.0': {}
'@cspell/dict-en-gb-mit@3.1.24': {}
'@cspell/dict-en-gb-mit@3.1.25': {}
'@cspell/dict-en_us@4.4.35': {}
'@cspell/dict-en_us@4.4.36': {}
'@cspell/dict-filetypes@3.0.18': {}
@@ -11303,7 +11307,7 @@ snapshots:
'@cspell/dict-git@3.1.0': {}
'@cspell/dict-golang@6.0.26': {}
'@cspell/dict-golang@6.0.27': {}
'@cspell/dict-google@1.0.9': {}
@@ -11311,13 +11315,13 @@ snapshots:
'@cspell/dict-html-symbol-entities@4.0.5': {}
'@cspell/dict-html@4.0.15': {}
'@cspell/dict-html@4.0.16': {}
'@cspell/dict-java@5.0.12': {}
'@cspell/dict-julia@1.1.1': {}
'@cspell/dict-k8s@1.0.12': {}
'@cspell/dict-k8s@1.0.13': {}
'@cspell/dict-kotlin@1.1.1': {}
@@ -11329,18 +11333,18 @@ snapshots:
'@cspell/dict-makefile@1.0.5': {}
'@cspell/dict-markdown@2.0.17(@cspell/dict-css@4.1.2)(@cspell/dict-html-symbol-entities@4.0.5)(@cspell/dict-html@4.0.15)(@cspell/dict-typescript@3.2.3)':
'@cspell/dict-markdown@2.0.18(@cspell/dict-css@4.1.2)(@cspell/dict-html-symbol-entities@4.0.5)(@cspell/dict-html@4.0.16)(@cspell/dict-typescript@3.2.3)':
dependencies:
'@cspell/dict-css': 4.1.2
'@cspell/dict-html': 4.0.15
'@cspell/dict-html': 4.0.16
'@cspell/dict-html-symbol-entities': 4.0.5
'@cspell/dict-typescript': 3.2.3
'@cspell/dict-monkeyc@1.0.12': {}
'@cspell/dict-monkeyc@1.1.0': {}
'@cspell/dict-node@5.0.9': {}
'@cspell/dict-npm@5.2.41': {}
'@cspell/dict-npm@5.2.46': {}
'@cspell/dict-php@4.1.1': {}
@@ -11348,13 +11352,13 @@ snapshots:
'@cspell/dict-public-licenses@2.0.16': {}
'@cspell/dict-python@4.2.27':
'@cspell/dict-python@4.4.0':
dependencies:
'@cspell/dict-data-science': 2.0.14
'@cspell/dict-data-science': 2.0.16
'@cspell/dict-r@2.1.1': {}
'@cspell/dict-ruby@5.1.1': {}
'@cspell/dict-ruby@5.1.2': {}
'@cspell/dict-rust@4.1.2': {}
@@ -11362,7 +11366,7 @@ snapshots:
'@cspell/dict-shell@1.2.0': {}
'@cspell/dict-software-terms@5.2.2': {}
'@cspell/dict-software-terms@5.4.1': {}
'@cspell/dict-sql@2.2.1': {}
@@ -11370,7 +11374,7 @@ snapshots:
'@cspell/dict-swift@2.0.6': {}
'@cspell/dict-terraform@1.1.3': {}
'@cspell/dict-terraform@1.1.4': {}
'@cspell/dict-typescript@3.2.3': {}
@@ -11378,26 +11382,26 @@ snapshots:
'@cspell/dict-zig@1.0.0': {}
'@cspell/dynamic-import@10.0.0':
'@cspell/dynamic-import@10.0.1':
dependencies:
'@cspell/url': 10.0.0
'@cspell/url': 10.0.1
import-meta-resolve: 4.2.0
'@cspell/eslint-plugin@10.0.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))':
'@cspell/eslint-plugin@10.0.1(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))':
dependencies:
'@cspell/cspell-types': 10.0.0
'@cspell/url': 10.0.0
cspell-lib: 10.0.0
'@cspell/cspell-types': 10.0.1
'@cspell/url': 10.0.1
cspell-lib: 10.0.1
eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0)
synckit: 0.11.13
'@cspell/filetypes@10.0.0': {}
'@cspell/filetypes@10.0.1': {}
'@cspell/rpc@10.0.0': {}
'@cspell/rpc@10.0.1': {}
'@cspell/strong-weak-map@10.0.0': {}
'@cspell/strong-weak-map@10.0.1': {}
'@cspell/url@10.0.0': {}
'@cspell/url@10.0.1': {}
'@cspotcode/source-map-support@0.8.1':
dependencies:
@@ -15030,7 +15034,7 @@ snapshots:
commander@8.3.0: {}
comment-json@4.6.2:
comment-json@5.0.0:
dependencies:
array-timsort: 1.0.3
esprima: 4.0.1
@@ -15173,54 +15177,54 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
cspell-config-lib@10.0.0:
cspell-config-lib@10.0.1:
dependencies:
'@cspell/cspell-types': 10.0.0
comment-json: 4.6.2
smol-toml: 1.6.1
'@cspell/cspell-types': 10.0.1
comment-json: 5.0.0
smol-toml: 1.8.0
yaml: 2.9.0
cspell-dictionary@10.0.0:
cspell-dictionary@10.0.1:
dependencies:
'@cspell/cspell-performance-monitor': 10.0.0
'@cspell/cspell-pipe': 10.0.0
'@cspell/cspell-types': 10.0.0
cspell-trie-lib: 10.0.0(@cspell/cspell-types@10.0.0)
fast-equals: 6.0.0
'@cspell/cspell-performance-monitor': 10.0.1
'@cspell/cspell-pipe': 10.0.1
'@cspell/cspell-types': 10.0.1
cspell-trie-lib: 10.0.1(@cspell/cspell-types@10.0.1)
fast-equals: 6.0.2
cspell-glob@10.0.0:
cspell-glob@10.0.1:
dependencies:
'@cspell/url': 10.0.0
'@cspell/url': 10.0.1
picomatch: 4.0.5
cspell-grammar@10.0.0:
cspell-grammar@10.0.1:
dependencies:
'@cspell/cspell-pipe': 10.0.0
'@cspell/cspell-types': 10.0.0
'@cspell/cspell-pipe': 10.0.1
'@cspell/cspell-types': 10.0.1
cspell-io@10.0.0:
cspell-io@10.0.1:
dependencies:
'@cspell/cspell-service-bus': 10.0.0
'@cspell/url': 10.0.0
'@cspell/cspell-service-bus': 10.0.1
'@cspell/url': 10.0.1
cspell-lib@10.0.0:
cspell-lib@10.0.1:
dependencies:
'@cspell/cspell-bundled-dicts': 10.0.0
'@cspell/cspell-performance-monitor': 10.0.0
'@cspell/cspell-pipe': 10.0.0
'@cspell/cspell-resolver': 10.0.0
'@cspell/cspell-types': 10.0.0
'@cspell/dynamic-import': 10.0.0
'@cspell/filetypes': 10.0.0
'@cspell/rpc': 10.0.0
'@cspell/strong-weak-map': 10.0.0
'@cspell/url': 10.0.0
cspell-config-lib: 10.0.0
cspell-dictionary: 10.0.0
cspell-glob: 10.0.0
cspell-grammar: 10.0.0
cspell-io: 10.0.0
cspell-trie-lib: 10.0.0(@cspell/cspell-types@10.0.0)
'@cspell/cspell-bundled-dicts': 10.0.1
'@cspell/cspell-performance-monitor': 10.0.1
'@cspell/cspell-pipe': 10.0.1
'@cspell/cspell-resolver': 10.0.1
'@cspell/cspell-types': 10.0.1
'@cspell/dynamic-import': 10.0.1
'@cspell/filetypes': 10.0.1
'@cspell/rpc': 10.0.1
'@cspell/strong-weak-map': 10.0.1
'@cspell/url': 10.0.1
cspell-config-lib: 10.0.1
cspell-dictionary: 10.0.1
cspell-glob: 10.0.1
cspell-grammar: 10.0.1
cspell-io: 10.0.1
cspell-trie-lib: 10.0.1(@cspell/cspell-types@10.0.1)
env-paths: 4.0.0
gensequence: 8.0.8
import-fresh: 4.0.0
@@ -15229,9 +15233,9 @@ snapshots:
vscode-uri: 3.1.0
xdg-basedir: 5.1.0
cspell-trie-lib@10.0.0(@cspell/cspell-types@10.0.0):
cspell-trie-lib@10.0.1(@cspell/cspell-types@10.0.1):
dependencies:
'@cspell/cspell-types': 10.0.0
'@cspell/cspell-types': 10.0.1
css-declaration-sorter@7.4.0(postcss@8.5.25):
dependencies:
@@ -16071,7 +16075,7 @@ snapshots:
fast-diff@1.3.0: {}
fast-equals@6.0.0: {}
fast-equals@6.0.2: {}
fast-glob@3.3.3:
dependencies:
@@ -18862,6 +18866,8 @@ snapshots:
smol-toml@1.6.1: {}
smol-toml@1.8.0: {}
socket.io-adapter@2.5.8(supports-color@7.2.0):
dependencies:
debug: 4.4.3(supports-color@7.2.0)