From 0f6a794a0da3a3e236046e1b2533c07e1e4d7261 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 19:58:28 +0530 Subject: [PATCH 01/70] chore(npm): bump @headlessui/react from 2.0.1 to 2.0.3 in /Website (#510) Bumps [@headlessui/react](https://github.com/tailwindlabs/headlessui/tree/HEAD/packages/@headlessui-react) from 2.0.1 to 2.0.3. - [Release notes](https://github.com/tailwindlabs/headlessui/releases) - [Changelog](https://github.com/tailwindlabs/headlessui/blob/main/packages/@headlessui-react/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/headlessui/commits/@headlessui/react@v2.0.3/packages/@headlessui-react) --- updated-dependencies: - dependency-name: "@headlessui/react" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 8 ++++---- Website/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index 72b4157c6..0cfe3b288 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -8,7 +8,7 @@ "name": "website", "version": "0.1.0", "dependencies": { - "@headlessui/react": "^2.0.1", + "@headlessui/react": "^2.0.3", "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.3", @@ -152,9 +152,9 @@ "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" }, "node_modules/@headlessui/react": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.0.1.tgz", - "integrity": "sha512-GxFvHHk27AYELf0WIMa0LgSeVqJ0SOvIwg7USTptMFbtLz31jNGQoolHiQPnvsI/IMmEeJ4ybzQlqV69/uvQ8A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.0.3.tgz", + "integrity": "sha512-Xd1h0YZgfhxZ7W1w4TvK0/TZ1c4qaX4liYVUkAXqW1HCLcXSqnMeYAUGJS/BBroBAUL9HErjyFcRpCWRQZ/0lA==", "dependencies": { "@floating-ui/react": "^0.26.13", "@react-aria/focus": "^3.16.2", diff --git a/Website/package.json b/Website/package.json index 740e98481..d5a276a60 100644 --- a/Website/package.json +++ b/Website/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@headlessui/react": "^2.0.1", + "@headlessui/react": "^2.0.3", "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.3", From b21c6246db4ecf32b35709b2644b9737e20ce565 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 14:04:31 +0530 Subject: [PATCH 02/70] chore(ci): bump aquasecurity/trivy-action from 0.19.0 to 0.20.0 (#514) Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.19.0 to 0.20.0. - [Release notes](https://github.com/aquasecurity/trivy-action/releases) - [Commits](https://github.com/aquasecurity/trivy-action/compare/0.19.0...0.20.0) --- updated-dependencies: - dependency-name: aquasecurity/trivy-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dev-docker-build.yml | 2 +- .github/workflows/docker-publish.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev-docker-build.yml b/.github/workflows/dev-docker-build.yml index a50ee2b1f..7ee3d3929 100644 --- a/.github/workflows/dev-docker-build.yml +++ b/.github/workflows/dev-docker-build.yml @@ -34,7 +34,7 @@ jobs: docker compose build runner docker compose build ${{ matrix.image_name_suffix }} - name: Run Trivy security scan - uses: aquasecurity/trivy-action@0.19.0 + uses: aquasecurity/trivy-action@0.20.0 continue-on-error: true with: image-ref: drifty-${{ matrix.image_name_suffix }} diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 175470838..c7aa32abc 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -182,7 +182,7 @@ jobs: run: docker build -t ${{ matrix.image_name }} -f Docker/prod/${{ matrix.docker_context }}/Dockerfile build/${{ matrix.docker_context }} - name: Run Trivy security scan - uses: aquasecurity/trivy-action@0.19.0 + uses: aquasecurity/trivy-action@0.20.0 continue-on-error: true with: image-ref: ${{ matrix.image_name }} From cab9441ba731405a79fdafa41fd8b8348a4bc9fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 14:05:03 +0530 Subject: [PATCH 03/70] chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin from 5.29.0 to 5.30.0 (#513) chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin Bumps [org.openrewrite.maven:rewrite-maven-plugin](https://github.com/openrewrite/rewrite-maven-plugin) from 5.29.0 to 5.30.0. - [Release notes](https://github.com/openrewrite/rewrite-maven-plugin/releases) - [Commits](https://github.com/openrewrite/rewrite-maven-plugin/compare/v5.29.0...v5.30.0) --- updated-dependencies: - dependency-name: org.openrewrite.maven:rewrite-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6b5c86e85..ba5ee9b78 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ org.openrewrite.maven rewrite-maven-plugin - 5.29.0 + 5.30.0 org.openrewrite.staticanalysis.CommonStaticAnalysis From 32dbf9534e9351d48293d94c7bba74de19079d81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 14:05:27 +0530 Subject: [PATCH 04/70] chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis from 1.5.0 to 1.6.0 (#512) chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis Bumps [org.openrewrite.recipe:rewrite-static-analysis](https://github.com/openrewrite/rewrite-static-analysis) from 1.5.0 to 1.6.0. - [Release notes](https://github.com/openrewrite/rewrite-static-analysis/releases) - [Commits](https://github.com/openrewrite/rewrite-static-analysis/compare/v1.5.0...v1.6.0) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-static-analysis dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ba5ee9b78..6d1f42158 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ org.openrewrite.recipe rewrite-static-analysis - 1.5.0 + 1.6.0 org.openrewrite.recipe From 94a1975d8ae11847c53f2f0212781629196c7b91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 14:05:55 +0530 Subject: [PATCH 05/70] chore(maven): bump org.openrewrite.recipe:rewrite-recommendations from 1.4.1 to 1.4.2 (#511) chore(maven): bump org.openrewrite.recipe:rewrite-recommendations Bumps [org.openrewrite.recipe:rewrite-recommendations](https://github.com/openrewrite/rewrite-recommendations) from 1.4.1 to 1.4.2. - [Release notes](https://github.com/openrewrite/rewrite-recommendations/releases) - [Commits](https://github.com/openrewrite/rewrite-recommendations/compare/v1.4.1...v1.4.2) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-recommendations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6d1f42158..063c93c79 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ org.openrewrite.recipe rewrite-recommendations - 1.4.1 + 1.4.2 From 7d602bfd96daaa8a6487c79db52af11e003a3065 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 08:20:18 +0530 Subject: [PATCH 06/70] chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis from 1.6.0 to 1.7.0 (#516) chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis Bumps [org.openrewrite.recipe:rewrite-static-analysis](https://github.com/openrewrite/rewrite-static-analysis) from 1.6.0 to 1.7.0. - [Release notes](https://github.com/openrewrite/rewrite-static-analysis/releases) - [Commits](https://github.com/openrewrite/rewrite-static-analysis/compare/v1.6.0...v1.7.0) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-static-analysis dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 063c93c79..e900cc8da 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ org.openrewrite.recipe rewrite-static-analysis - 1.6.0 + 1.7.0 org.openrewrite.recipe From 3e7aa0a345008744d79355a844ce7f1f65f5e0c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 08:21:48 +0530 Subject: [PATCH 07/70] chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin from 5.30.0 to 5.31.0 (#517) chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin Bumps [org.openrewrite.maven:rewrite-maven-plugin](https://github.com/openrewrite/rewrite-maven-plugin) from 5.30.0 to 5.31.0. - [Release notes](https://github.com/openrewrite/rewrite-maven-plugin/releases) - [Commits](https://github.com/openrewrite/rewrite-maven-plugin/compare/v5.30.0...v5.31.0) --- updated-dependencies: - dependency-name: org.openrewrite.maven:rewrite-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e900cc8da..bed42b60b 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ org.openrewrite.maven rewrite-maven-plugin - 5.30.0 + 5.31.0 org.openrewrite.staticanalysis.CommonStaticAnalysis From 99d30ee06d59c8c8884e560df45b413c9efb523c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 May 2024 16:58:02 +0530 Subject: [PATCH 08/70] chore(ci): bump aquasecurity/trivy-action from 0.20.0 to 0.21.0 (#523) Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.20.0 to 0.21.0. - [Release notes](https://github.com/aquasecurity/trivy-action/releases) - [Commits](https://github.com/aquasecurity/trivy-action/compare/0.20.0...0.21.0) --- updated-dependencies: - dependency-name: aquasecurity/trivy-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dev-docker-build.yml | 2 +- .github/workflows/docker-publish.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev-docker-build.yml b/.github/workflows/dev-docker-build.yml index 7ee3d3929..9a6160ff8 100644 --- a/.github/workflows/dev-docker-build.yml +++ b/.github/workflows/dev-docker-build.yml @@ -34,7 +34,7 @@ jobs: docker compose build runner docker compose build ${{ matrix.image_name_suffix }} - name: Run Trivy security scan - uses: aquasecurity/trivy-action@0.20.0 + uses: aquasecurity/trivy-action@0.21.0 continue-on-error: true with: image-ref: drifty-${{ matrix.image_name_suffix }} diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index c7aa32abc..f675557c9 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -182,7 +182,7 @@ jobs: run: docker build -t ${{ matrix.image_name }} -f Docker/prod/${{ matrix.docker_context }}/Dockerfile build/${{ matrix.docker_context }} - name: Run Trivy security scan - uses: aquasecurity/trivy-action@0.20.0 + uses: aquasecurity/trivy-action@0.21.0 continue-on-error: true with: image-ref: ${{ matrix.image_name }} From 5cc05f7461e20f76ac4e4da65314bfd50128010a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 May 2024 16:58:43 +0530 Subject: [PATCH 09/70] chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin from 5.31.0 to 5.32.1 (#521) chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin Bumps [org.openrewrite.maven:rewrite-maven-plugin](https://github.com/openrewrite/rewrite-maven-plugin) from 5.31.0 to 5.32.1. - [Release notes](https://github.com/openrewrite/rewrite-maven-plugin/releases) - [Commits](https://github.com/openrewrite/rewrite-maven-plugin/compare/v5.31.0...v5.32.1) --- updated-dependencies: - dependency-name: org.openrewrite.maven:rewrite-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bed42b60b..4e5fda0b4 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ org.openrewrite.maven rewrite-maven-plugin - 5.31.0 + 5.32.1 org.openrewrite.staticanalysis.CommonStaticAnalysis From 06ca17b8bdf1d4f4242df7ad04d65db03dd77d8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 May 2024 16:59:04 +0530 Subject: [PATCH 10/70] chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis from 1.7.0 to 1.8.1 (#522) chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis Bumps [org.openrewrite.recipe:rewrite-static-analysis](https://github.com/openrewrite/rewrite-static-analysis) from 1.7.0 to 1.8.1. - [Release notes](https://github.com/openrewrite/rewrite-static-analysis/releases) - [Commits](https://github.com/openrewrite/rewrite-static-analysis/compare/v1.7.0...v1.8.1) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-static-analysis dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4e5fda0b4..653fd2647 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ org.openrewrite.recipe rewrite-static-analysis - 1.7.0 + 1.8.1 org.openrewrite.recipe From b4bc8983be38cd4fb9e81752425d042040531006 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 May 2024 16:59:28 +0530 Subject: [PATCH 11/70] chore(maven): bump org.openrewrite.recipe:rewrite-recommendations from 1.4.2 to 1.4.3 (#520) chore(maven): bump org.openrewrite.recipe:rewrite-recommendations Bumps [org.openrewrite.recipe:rewrite-recommendations](https://github.com/openrewrite/rewrite-recommendations) from 1.4.2 to 1.4.3. - [Release notes](https://github.com/openrewrite/rewrite-recommendations/releases) - [Commits](https://github.com/openrewrite/rewrite-recommendations/compare/v1.4.2...v1.4.3) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-recommendations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 653fd2647..aa675a375 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ org.openrewrite.recipe rewrite-recommendations - 1.4.2 + 1.4.3 From 35f6559438896ceb1f9ee0bfbf3b86853b421c05 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 May 2024 17:00:06 +0530 Subject: [PATCH 12/70] chore(maven): bump org.graalvm.buildtools:native-maven-plugin from 0.10.1 to 0.10.2 (#519) chore(maven): bump org.graalvm.buildtools:native-maven-plugin Bumps [org.graalvm.buildtools:native-maven-plugin](https://github.com/graalvm/native-build-tools) from 0.10.1 to 0.10.2. - [Release notes](https://github.com/graalvm/native-build-tools/releases) - [Commits](https://github.com/graalvm/native-build-tools/compare/0.10.1...0.10.2) --- updated-dependencies: - dependency-name: org.graalvm.buildtools:native-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- CLI/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CLI/pom.xml b/CLI/pom.xml index e5b4bc354..133c18f1e 100644 --- a/CLI/pom.xml +++ b/CLI/pom.xml @@ -45,7 +45,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.1 + 0.10.2 true Drifty CLI @@ -85,7 +85,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.1 + 0.10.2 true Drifty CLI @@ -125,7 +125,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.1 + 0.10.2 true Drifty CLI From 79a9fa0225a454496073fae5ffe6bc56d3437a44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 May 2024 17:01:33 +0530 Subject: [PATCH 13/70] chore(maven): bump com.google.code.gson:gson from 2.10.1 to 2.11.0 (#518) Bumps [com.google.code.gson:gson](https://github.com/google/gson) from 2.10.1 to 2.11.0. - [Release notes](https://github.com/google/gson/releases) - [Changelog](https://github.com/google/gson/blob/main/CHANGELOG.md) - [Commits](https://github.com/google/gson/compare/gson-parent-2.10.1...gson-parent-2.11.0) --- updated-dependencies: - dependency-name: com.google.code.gson:gson dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/pom.xml b/Core/pom.xml index 6505bd4ff..5299030fe 100644 --- a/Core/pom.xml +++ b/Core/pom.xml @@ -32,7 +32,7 @@ com.google.code.gson gson - 2.10.1 + 2.11.0 org.apache.commons From 361579acf1e14bc960e2c1642f6a2098d1ef51ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 10:58:31 +0530 Subject: [PATCH 14/70] chore(npm): bump @headlessui/react from 2.0.3 to 2.0.4 in /Website (#524) Bumps [@headlessui/react](https://github.com/tailwindlabs/headlessui/tree/HEAD/packages/@headlessui-react) from 2.0.3 to 2.0.4. - [Release notes](https://github.com/tailwindlabs/headlessui/releases) - [Changelog](https://github.com/tailwindlabs/headlessui/blob/main/packages/@headlessui-react/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/headlessui/commits/@headlessui/react@v2.0.4/packages/@headlessui-react) --- updated-dependencies: - dependency-name: "@headlessui/react" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 8 ++++---- Website/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index 0cfe3b288..1fa3a882a 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -8,7 +8,7 @@ "name": "website", "version": "0.1.0", "dependencies": { - "@headlessui/react": "^2.0.3", + "@headlessui/react": "^2.0.4", "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.3", @@ -152,9 +152,9 @@ "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" }, "node_modules/@headlessui/react": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.0.3.tgz", - "integrity": "sha512-Xd1h0YZgfhxZ7W1w4TvK0/TZ1c4qaX4liYVUkAXqW1HCLcXSqnMeYAUGJS/BBroBAUL9HErjyFcRpCWRQZ/0lA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.0.4.tgz", + "integrity": "sha512-16d/rOLeYsFsmPlRmXGu8DCBzrWD0zV1Ccx3n73wN87yFu8Y9+X04zflv8EJEt9TAYRyLKOmQXUnOnqQl6NgpA==", "dependencies": { "@floating-ui/react": "^0.26.13", "@react-aria/focus": "^3.16.2", diff --git a/Website/package.json b/Website/package.json index d5a276a60..7a753272d 100644 --- a/Website/package.json +++ b/Website/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@headlessui/react": "^2.0.3", + "@headlessui/react": "^2.0.4", "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.3", From 2803edd4a18701f3cec33901de6d6141703121c2 Mon Sep 17 00:00:00 2001 From: Saptarshi Sarkar Date: Tue, 11 Jun 2024 11:06:36 +0530 Subject: [PATCH 15/70] fix(docs): Fixed Markdown lint error (MD027/no-multiple-space-blockquote) --- Docker/macOS Docker Build Instructions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Docker/macOS Docker Build Instructions.md b/Docker/macOS Docker Build Instructions.md index cd1ff17a0..67438b83c 100644 --- a/Docker/macOS Docker Build Instructions.md +++ b/Docker/macOS Docker Build Instructions.md @@ -44,7 +44,7 @@ After the Docker image of Drifty GUI has been built/pulled, we need to provide a > Why static IP address is preferred for running Drifty GUI in Docker on macOS? > > Now that the image is built/pulled, we need to talk about how the GUI itself is going to be shown on your desktop. The only real relevant issue here pertains to your local IP address assigned to your network interface card on your Mac. You see, in a Linux environment (which macOS is modeled after), programs that run in the Terminal do not have direct access to your graphical environment (Graphical User Interface), so we are going to have to provide the Docker instance with a pathway to access the GUI and that has to be done by telling it what your local IP address is. -> +> > On most home networks, the typical setup is to have a router where your computer is connected to the LAN (Local Area network) side of the router either via Wi-Fi or an Ethernet cable. And most people just make that connection, find that they can access the Internet and don't look back. > > We, however, need to look back... @@ -107,4 +107,4 @@ We have finally set up everything required to run the Docker image of **Drifty G socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"& open -a Xquartz docker compose run -e DISPLAY=192.168.1.10:0 gui - ``` \ No newline at end of file + ``` From eebec7042e8e3b528ef0dbee73713e5bca84559d Mon Sep 17 00:00:00 2001 From: Saptarshi Sarkar Date: Tue, 11 Jun 2024 12:16:22 +0530 Subject: [PATCH 16/70] fix(CI): Fixed Drifty macOS build issue by downgrading maven from 3.9.7 to 3.8.8 --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e44675040..f7b6a29e8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,8 +59,8 @@ jobs: if: ${{ matrix.mode == 'CLI' }} shell: bash run: mvn -P build-drifty-cli-for-${{ matrix.os }} package - - name: Set Up Maven version 3.8.8 # For GUI build issues, maven version 3.8.8 needs to be used - if: ${{ matrix.mode == 'GUI' }} + - name: Set Up Maven version 3.8.8 # For GUI and macOS build issues, maven version 3.8.8 needs to be used + if: ${{ matrix.mode == 'GUI' && matrix.os == 'macos-latest' }} uses: stCarolas/setup-maven@v5 with: maven-version: 3.8.8 @@ -241,4 +241,4 @@ jobs: gh release create v$VERSION --generate-notes --notes-start-tag ${{ env.PREVIOUS_RELEASE_VERSION }} 'linux/build/CLI/Drifty-CLI_linux#Drifty-CLI_linux' 'linux/build/GUI/Drifty-GUI_linux#Drifty-GUI_linux' 'macos/build/CLI/Drifty-CLI_macos#Drifty-CLI_macos' 'macos/build/GUI/Drifty-GUI.pkg#Drifty-GUI.pkg' 'windows/build/CLI/Drifty-CLI.exe#Drifty-CLI.exe' 'windows/build/GUI/Drifty-GUI.msi#Drifty-GUI.msi' 'windows/build/GUI/Drifty-GUI.exe#Drifty-GUI.exe' --title "Drifty v$VERSION Stable Release" echo "[Released :white_check_mark: Drifty v$VERSION Stable](https://github.com/SaptarshiSarkar12/Drifty/releases/tag/v$VERSION) successfully :rocket:!" >> $GITHUB_STEP_SUMMARY env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} From dd6e1a4eca6db38252665324b525287da732e91f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 12:24:39 +0530 Subject: [PATCH 17/70] chore(npm): bump braces from 3.0.2 to 3.0.3 in /Website in the npm_and_yarn group (#533) chore(npm): bump braces in /Website in the npm_and_yarn group Bumps the npm_and_yarn group in /Website with 1 update: [braces](https://github.com/micromatch/braces). Updates `braces` from 3.0.2 to 3.0.3 - [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3) --- updated-dependencies: - dependency-name: braces dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index 1fa3a882a..8017f72b3 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -1140,11 +1140,11 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -2257,9 +2257,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2350,6 +2350,19 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", From ab3998a0ab3f484319c89015cc341d1a09848285 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:04:57 +0530 Subject: [PATCH 18/70] chore(ci): bump docker/build-push-action from 5.3.0 to 5.4.0 (#532) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.3.0 to 5.4.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v5.3.0...v5.4.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Saptarshi Sarkar --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index f675557c9..8cb638676 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -163,7 +163,7 @@ jobs: # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v5.3.0 + uses: docker/build-push-action@v5.4.0 with: context: build/${{ matrix.docker_context }} push: ${{ github.event_name != 'pull_request_target' && github.repository == 'SaptarshiSarkar12/Drifty' && !contains(github.ref_name, 'dependabot') }} From f8156d99c654230827e4b109ec1e814a5b2ccc80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:05:35 +0530 Subject: [PATCH 19/70] chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin from 5.32.1 to 5.33.0 (#531) chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin Bumps [org.openrewrite.maven:rewrite-maven-plugin](https://github.com/openrewrite/rewrite-maven-plugin) from 5.32.1 to 5.33.0. - [Release notes](https://github.com/openrewrite/rewrite-maven-plugin/releases) - [Commits](https://github.com/openrewrite/rewrite-maven-plugin/compare/v5.32.1...v5.33.0) --- updated-dependencies: - dependency-name: org.openrewrite.maven:rewrite-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Saptarshi Sarkar --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index aa675a375..16f176232 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ org.openrewrite.maven rewrite-maven-plugin - 5.32.1 + 5.33.0 org.openrewrite.staticanalysis.CommonStaticAnalysis From a24e784f22a57ce7edb1656c30f68762925fa418 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:05:53 +0530 Subject: [PATCH 20/70] chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis from 1.8.1 to 1.9.0 (#530) chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis Bumps [org.openrewrite.recipe:rewrite-static-analysis](https://github.com/openrewrite/rewrite-static-analysis) from 1.8.1 to 1.9.0. - [Release notes](https://github.com/openrewrite/rewrite-static-analysis/releases) - [Commits](https://github.com/openrewrite/rewrite-static-analysis/compare/v1.8.1...v1.9.0) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-static-analysis dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Saptarshi Sarkar --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 16f176232..062766b1a 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ org.openrewrite.recipe rewrite-static-analysis - 1.8.1 + 1.9.0 org.openrewrite.recipe From 0b43f005ed92568508bffa5cc612a5e9baa676dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:06:49 +0530 Subject: [PATCH 21/70] chore(maven): bump org.openrewrite.recipe:rewrite-recommendations from 1.4.3 to 1.5.0 (#529) chore(maven): bump org.openrewrite.recipe:rewrite-recommendations Bumps [org.openrewrite.recipe:rewrite-recommendations](https://github.com/openrewrite/rewrite-recommendations) from 1.4.3 to 1.5.0. - [Release notes](https://github.com/openrewrite/rewrite-recommendations/releases) - [Commits](https://github.com/openrewrite/rewrite-recommendations/compare/v1.4.3...v1.5.0) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-recommendations dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 062766b1a..14e687d38 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ org.openrewrite.recipe rewrite-recommendations - 1.4.3 + 1.5.0 From 07a6cfa3b39010eb5bab22a4dd1061fda9b22342 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:07:22 +0530 Subject: [PATCH 22/70] chore(ci): bump aquasecurity/trivy-action from 0.21.0 to 0.22.0 (#528) Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.21.0 to 0.22.0. - [Release notes](https://github.com/aquasecurity/trivy-action/releases) - [Commits](https://github.com/aquasecurity/trivy-action/compare/0.21.0...0.22.0) --- updated-dependencies: - dependency-name: aquasecurity/trivy-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Saptarshi Sarkar --- .github/workflows/dev-docker-build.yml | 2 +- .github/workflows/docker-publish.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev-docker-build.yml b/.github/workflows/dev-docker-build.yml index 9a6160ff8..494e9826f 100644 --- a/.github/workflows/dev-docker-build.yml +++ b/.github/workflows/dev-docker-build.yml @@ -34,7 +34,7 @@ jobs: docker compose build runner docker compose build ${{ matrix.image_name_suffix }} - name: Run Trivy security scan - uses: aquasecurity/trivy-action@0.21.0 + uses: aquasecurity/trivy-action@0.22.0 continue-on-error: true with: image-ref: drifty-${{ matrix.image_name_suffix }} diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 8cb638676..5e71d7d2a 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -182,7 +182,7 @@ jobs: run: docker build -t ${{ matrix.image_name }} -f Docker/prod/${{ matrix.docker_context }}/Dockerfile build/${{ matrix.docker_context }} - name: Run Trivy security scan - uses: aquasecurity/trivy-action@0.21.0 + uses: aquasecurity/trivy-action@0.22.0 continue-on-error: true with: image-ref: ${{ matrix.image_name }} From 85c5ee98bae46c3ccd2de1e64856d3c1287a28df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:08:39 +0530 Subject: [PATCH 23/70] chore(npm): bump tailwindcss from 3.4.3 to 3.4.4 in /Website (#527) Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.4.3 to 3.4.4. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.4/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.3...v3.4.4) --- updated-dependencies: - dependency-name: tailwindcss dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Saptarshi Sarkar --- Website/package-lock.json | 8 ++++---- Website/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index 8017f72b3..c41d2cca1 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -18,7 +18,7 @@ "react-dom": "18.3.1", "remark": "^15.0.1", "remark-html": "^16.0.1", - "tailwindcss": "3.4.3" + "tailwindcss": "3.4.4" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -5369,9 +5369,9 @@ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, "node_modules/tailwindcss": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", - "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", + "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", diff --git a/Website/package.json b/Website/package.json index 7a753272d..48334c270 100644 --- a/Website/package.json +++ b/Website/package.json @@ -19,6 +19,6 @@ "react-dom": "18.3.1", "remark": "^15.0.1", "remark-html": "^16.0.1", - "tailwindcss": "3.4.3" + "tailwindcss": "3.4.4" } } From ede3812abca9589254b1db05d039f7815ba335c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:09:41 +0530 Subject: [PATCH 24/70] chore(ci): bump docker/login-action from 3.1.0 to 3.2.0 (#525) Bumps [docker/login-action](https://github.com/docker/login-action) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v3.1.0...v3.2.0) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Saptarshi Sarkar --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 5e71d7d2a..de019187f 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -121,7 +121,7 @@ jobs: # Login to GitHub Container Registry # https://github.com/docker/login-action - name: Log into registry - uses: docker/login-action@v3.1.0 + uses: docker/login-action@v3.2.0 if: github.event_name != 'pull_request_target' with: registry: ${{ env.REGISTRY }} From 7a822838a4d73da19919d60ab4bdec1ec2546ebe Mon Sep 17 00:00:00 2001 From: Saptarshi Sarkar Date: Tue, 11 Jun 2024 13:16:21 +0530 Subject: [PATCH 25/70] fix(CI): Fixed Drifty macOS build issue by upgrading JavaFX to EA builds --- .github/workflows/build.yml | 4 ++-- pom.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f7b6a29e8..1534ad5d6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,8 +59,8 @@ jobs: if: ${{ matrix.mode == 'CLI' }} shell: bash run: mvn -P build-drifty-cli-for-${{ matrix.os }} package - - name: Set Up Maven version 3.8.8 # For GUI and macOS build issues, maven version 3.8.8 needs to be used - if: ${{ matrix.mode == 'GUI' && matrix.os == 'macos-latest' }} + - name: Set Up Maven version 3.8.8 # For GUI build issues, maven version 3.8.8 needs to be used + if: ${{ matrix.mode == 'GUI' }} uses: stCarolas/setup-maven@v5 with: maven-version: 3.8.8 diff --git a/pom.xml b/pom.xml index aa675a375..647ab4a48 100644 --- a/pom.xml +++ b/pom.xml @@ -26,12 +26,12 @@ org.openjfx javafx-controls - 22.0.1 + 23-ea+20 org.openjfx javafx-graphics - 22.0.1 + 23-ea+20 From 9adf041242940484eb07444f3785450eee04b75b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Jun 2024 08:37:01 +0530 Subject: [PATCH 26/70] chore(maven): bump org.apache.maven.plugins:maven-dependency-plugin from 3.6.1 to 3.7.0 (#536) chore(maven): bump org.apache.maven.plugins:maven-dependency-plugin Bumps [org.apache.maven.plugins:maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) from 3.6.1 to 3.7.0. - [Release notes](https://github.com/apache/maven-dependency-plugin/releases) - [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.6.1...maven-dependency-plugin-3.7.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-dependency-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a43d83029..377588b82 100644 --- a/pom.xml +++ b/pom.xml @@ -69,7 +69,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.6.1 + 3.7.0 From eccc43dc21896715dd0b001811b2f1508d7e7de7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Jun 2024 08:42:00 +0530 Subject: [PATCH 27/70] chore(npm): bump next from 14.2.3 to 14.2.4 in /Website (#535) Bumps [next](https://github.com/vercel/next.js) from 14.2.3 to 14.2.4. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v14.2.3...v14.2.4) --- updated-dependencies: - dependency-name: next dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 88 +++++++++++++++++++-------------------- Website/package.json | 2 +- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index c41d2cca1..1fb2f9c89 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -12,7 +12,7 @@ "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.3", - "next": "14.2.3", + "next": "14.2.4", "postcss": "8.4.38", "react": "18.3.1", "react-dom": "18.3.1", @@ -289,9 +289,9 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@next/env": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", - "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==" + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.4.tgz", + "integrity": "sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg==" }, "node_modules/@next/eslint-plugin-next": { "version": "14.2.3", @@ -345,9 +345,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", - "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz", + "integrity": "sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg==", "cpu": [ "arm64" ], @@ -360,9 +360,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", - "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz", + "integrity": "sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg==", "cpu": [ "x64" ], @@ -375,9 +375,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", - "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz", + "integrity": "sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ==", "cpu": [ "arm64" ], @@ -390,9 +390,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", - "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz", + "integrity": "sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A==", "cpu": [ "arm64" ], @@ -405,9 +405,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", - "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.4.tgz", + "integrity": "sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q==", "cpu": [ "x64" ], @@ -420,9 +420,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", - "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.4.tgz", + "integrity": "sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ==", "cpu": [ "x64" ], @@ -435,9 +435,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", - "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz", + "integrity": "sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A==", "cpu": [ "arm64" ], @@ -450,9 +450,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", - "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz", + "integrity": "sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag==", "cpu": [ "ia32" ], @@ -465,9 +465,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", - "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.4.tgz", + "integrity": "sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg==", "cpu": [ "x64" ], @@ -4009,11 +4009,11 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", - "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.4.tgz", + "integrity": "sha512-R8/V7vugY+822rsQGQCjoLhMuC9oFj9SOi4Cl4b2wjDrseD0LRZ10W7R6Czo4w9ZznVSshKjuIomsRjvm9EKJQ==", "dependencies": { - "@next/env": "14.2.3", + "@next/env": "14.2.4", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -4028,15 +4028,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.3", - "@next/swc-darwin-x64": "14.2.3", - "@next/swc-linux-arm64-gnu": "14.2.3", - "@next/swc-linux-arm64-musl": "14.2.3", - "@next/swc-linux-x64-gnu": "14.2.3", - "@next/swc-linux-x64-musl": "14.2.3", - "@next/swc-win32-arm64-msvc": "14.2.3", - "@next/swc-win32-ia32-msvc": "14.2.3", - "@next/swc-win32-x64-msvc": "14.2.3" + "@next/swc-darwin-arm64": "14.2.4", + "@next/swc-darwin-x64": "14.2.4", + "@next/swc-linux-arm64-gnu": "14.2.4", + "@next/swc-linux-arm64-musl": "14.2.4", + "@next/swc-linux-x64-gnu": "14.2.4", + "@next/swc-linux-x64-musl": "14.2.4", + "@next/swc-win32-arm64-msvc": "14.2.4", + "@next/swc-win32-ia32-msvc": "14.2.4", + "@next/swc-win32-x64-msvc": "14.2.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", diff --git a/Website/package.json b/Website/package.json index 48334c270..37ae570c3 100644 --- a/Website/package.json +++ b/Website/package.json @@ -13,7 +13,7 @@ "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.3", - "next": "14.2.3", + "next": "14.2.4", "postcss": "8.4.38", "react": "18.3.1", "react-dom": "18.3.1", From ba3839859480ff516cf6efc85e5d01682775d6d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Jun 2024 08:52:28 +0530 Subject: [PATCH 28/70] chore(npm): bump eslint-config-next from 14.2.3 to 14.2.4 in /Website (#534) Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 14.2.3 to 14.2.4. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/commits/v14.2.4/packages/eslint-config-next) --- updated-dependencies: - dependency-name: eslint-config-next dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 36 ++++++++++++++++++------------------ Website/package.json | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index 1fb2f9c89..658beefbb 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -11,7 +11,7 @@ "@headlessui/react": "^2.0.4", "autoprefixer": "10.4.19", "eslint": "8.57.0", - "eslint-config-next": "14.2.3", + "eslint-config-next": "14.2.4", "next": "14.2.4", "postcss": "8.4.38", "react": "18.3.1", @@ -294,9 +294,9 @@ "integrity": "sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg==" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz", - "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.4.tgz", + "integrity": "sha512-svSFxW9f3xDaZA3idQmlFw7SusOuWTpDTAeBlO3AEPDltrraV+lqs7mAc6A27YdnpQVVIA3sODqUAAHdWhVWsA==", "dependencies": { "glob": "10.3.10" } @@ -1800,11 +1800,11 @@ } }, "node_modules/eslint-config-next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz", - "integrity": "sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.4.tgz", + "integrity": "sha512-Qr0wMgG9m6m4uYy2jrYJmyuNlYZzPRQq5Kvb9IDlYwn+7yq6W6sfMNFgb+9guM1KYwuIo6TIaiFhZJ6SnQ/Efw==", "dependencies": { - "@next/eslint-plugin-next": "14.2.3", + "@next/eslint-plugin-next": "14.2.4", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", "eslint-import-resolver-node": "^0.3.6", @@ -3964,9 +3964,9 @@ } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { "node": ">=16 || 14 >=14.17" } @@ -4382,24 +4382,24 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "engines": { "node": "14 || >=16.14" } diff --git a/Website/package.json b/Website/package.json index 37ae570c3..871d19671 100644 --- a/Website/package.json +++ b/Website/package.json @@ -12,7 +12,7 @@ "@headlessui/react": "^2.0.4", "autoprefixer": "10.4.19", "eslint": "8.57.0", - "eslint-config-next": "14.2.3", + "eslint-config-next": "14.2.4", "next": "14.2.4", "postcss": "8.4.38", "react": "18.3.1", From 7bfa6d23d1af43723170150bdaabcbd3b46032a6 Mon Sep 17 00:00:00 2001 From: Saptarshi Sarkar Date: Mon, 17 Jun 2024 16:09:26 +0530 Subject: [PATCH 29/70] fix(Website): Fixed the outdated download count for Pre-Releases (Beta in this case) --- Website/app/Releases.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Website/app/Releases.js b/Website/app/Releases.js index 4a19fb4ce..9bb28ee2f 100644 --- a/Website/app/Releases.js +++ b/Website/app/Releases.js @@ -108,7 +108,7 @@ export default function Releases({ props }) { const releases = []; props.release.map((item) => { if ( - item.tag_name.startsWith("v2") && + !item.tag_name.startsWith("v1") && item.prerelease === false && item.latest === false && releases.length <= maxReleasesToDisplay @@ -127,7 +127,7 @@ export default function Releases({ props }) { noOfReleases < maxReleasesToDisplay && index !== 0 ) { - if (!item.tag_name.startsWith("v2") && item.prerelease === false) { + if (item.tag_name.startsWith("v1") && item.prerelease === false) { releases.push(item); noOfReleases++; } @@ -276,12 +276,15 @@ export default function Releases({ props }) { {item.tag_name}

{new Date(item.published_at).toString()} with{" "} - {item.assets[0].download_count + + { + item.assets[0].download_count + item.assets[1].download_count + item.assets[2].download_count + item.assets[3].download_count + item.assets[4].download_count + - item.assets[5].download_count}{" "} + item.assets[5].download_count + + item.assets[6].download_count + }{" "} Downloads

{applicationType === "GUI" && (
@@ -228,6 +242,9 @@ export default function Releases({ props }) { onClick={() => downloadLatestRelease("Linux", applicationType)} > Download Now +
+ {latestVersion} +
@@ -238,6 +255,9 @@ export default function Releases({ props }) { onClick={() => downloadLatestRelease("MacOS", applicationType)} > Download Now +
+ {latestVersion} +
From 60ed3d2b2a489bebb7b5db27e07ea5667ffb7a60 Mon Sep 17 00:00:00 2001 From: Saptarshi Sarkar Date: Tue, 18 Jun 2024 20:51:36 +0530 Subject: [PATCH 33/70] fix(Website): Fixed the poor contrast of the `Send Message` button in the Contact Us page, when hovered --- Website/app/contact/page.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Website/app/contact/page.js b/Website/app/contact/page.js index 312cbdf08..79bc0e93d 100644 --- a/Website/app/contact/page.js +++ b/Website/app/contact/page.js @@ -21,15 +21,16 @@ export default function contact() { action="https://formsubmit.co/e94b201f9a607081e9f9f8ee09ff5e25" > - From e8e27214cd3b2742f4223b770992ef8d9bf703f4 Mon Sep 17 00:00:00 2001 From: Saptarshi Sarkar Date: Tue, 18 Jun 2024 21:28:49 +0530 Subject: [PATCH 34/70] fix(Website): Fixed the overflow in the download page due to display of full changelog Now, the changelog is truncated to 7 lines for mobile phones and 15 lines for the rest --- Website/app/Releases.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Website/app/Releases.js b/Website/app/Releases.js index 1ae22a654..f54f86768 100644 --- a/Website/app/Releases.js +++ b/Website/app/Releases.js @@ -153,7 +153,12 @@ export default function Releases({ props }) { [index]: !prevState[index], })); }; - const markerToHtml = async (itemBody, i) => { + const markerToHtml = async (itemBody, itemTagName, i) => { + const maxLines = window.innerWidth < 768 ? 7 : 15; + if (itemBody.split("\n").length > maxLines) { + itemBody = itemBody.split("\n").slice(0, maxLines).join("\n"); + itemBody += "\n\n...[Read More](https://github.com/SaptarshiSarkar12/Drifty/releases/tag/" + itemTagName + ")"; + } const cont = await remark().use(html).process(itemBody); setContent((prev) => { prev[i] = cont.toString(); @@ -162,13 +167,13 @@ export default function Releases({ props }) { }; useEffect(() => { filteredPreReleases.forEach(async (item, index) => { - await markerToHtml(item.body, index); + await markerToHtml(item.body, item.tag_name, index); }); filteredReleases.forEach(async (item, index) => { - await markerToHtml(item.body, index + filteredPreReleases.length); + await markerToHtml(item.body, item.tag_name, index + filteredPreReleases.length); }); filterOlderReleases.forEach(async (item, index) => { - await markerToHtml(item.body, index + filteredPreReleases.length + filteredReleases.length); + await markerToHtml(item.body, item.tag_name, index + filteredPreReleases.length + filteredReleases.length); }); }, [filteredPreReleases, filteredReleases, filterOlderReleases]); From 3775d70b3054351c6fb88f2ee3c30a0c73c85b0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jun 2024 07:40:06 +0530 Subject: [PATCH 35/70] chore(ci): bump docker/build-push-action from 6.0.0 to 6.0.1 (#540) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.0.0...v6.0.1) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index fd7559723..e291d6d69 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -163,7 +163,7 @@ jobs: # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v6.0.0 + uses: docker/build-push-action@v6.0.1 with: context: build/${{ matrix.docker_context }} push: ${{ github.event_name != 'pull_request_target' && github.repository == 'SaptarshiSarkar12/Drifty' && !contains(github.ref_name, 'dependabot') }} From 6d2f3cd9a093f52ab252d3760abc957dccfc51d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 08:54:44 +0530 Subject: [PATCH 36/70] chore(ci): bump docker/build-push-action from 6.0.1 to 6.0.2 (#545) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.0.1...v6.0.2) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index e291d6d69..106dc6b9b 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -163,7 +163,7 @@ jobs: # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v6.0.1 + uses: docker/build-push-action@v6.0.2 with: context: build/${{ matrix.docker_context }} push: ${{ github.event_name != 'pull_request_target' && github.repository == 'SaptarshiSarkar12/Drifty' && !contains(github.ref_name, 'dependabot') }} From 9942e1d992913861c0bcba3a3ff64cfd43e0ac87 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 09:02:51 +0530 Subject: [PATCH 37/70] chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin from 5.33.0 to 5.34.1 (#543) chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin Bumps [org.openrewrite.maven:rewrite-maven-plugin](https://github.com/openrewrite/rewrite-maven-plugin) from 5.33.0 to 5.34.1. - [Release notes](https://github.com/openrewrite/rewrite-maven-plugin/releases) - [Commits](https://github.com/openrewrite/rewrite-maven-plugin/compare/v5.33.0...v5.34.1) --- updated-dependencies: - dependency-name: org.openrewrite.maven:rewrite-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 377588b82..41c805896 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ org.openrewrite.maven rewrite-maven-plugin - 5.33.0 + 5.34.1 org.openrewrite.staticanalysis.CommonStaticAnalysis From 3802434e0030ea34d50e6dd6ed22bc272f1dea66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 09:03:22 +0530 Subject: [PATCH 38/70] chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis from 1.9.0 to 1.10.1 (#542) chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis Bumps [org.openrewrite.recipe:rewrite-static-analysis](https://github.com/openrewrite/rewrite-static-analysis) from 1.9.0 to 1.10.1. - [Release notes](https://github.com/openrewrite/rewrite-static-analysis/releases) - [Commits](https://github.com/openrewrite/rewrite-static-analysis/compare/v1.9.0...v1.10.1) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-static-analysis dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 41c805896..1ee5e5b30 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ org.openrewrite.recipe rewrite-static-analysis - 1.9.0 + 1.10.1 org.openrewrite.recipe From 7fa74aae81bd8e524257db6d05eb0b0ed0b9a260 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 09:03:46 +0530 Subject: [PATCH 39/70] chore(maven): bump org.openrewrite.recipe:rewrite-recommendations from 1.5.0 to 1.6.1 (#541) chore(maven): bump org.openrewrite.recipe:rewrite-recommendations Bumps [org.openrewrite.recipe:rewrite-recommendations](https://github.com/openrewrite/rewrite-recommendations) from 1.5.0 to 1.6.1. - [Release notes](https://github.com/openrewrite/rewrite-recommendations/releases) - [Commits](https://github.com/openrewrite/rewrite-recommendations/compare/v1.5.0...v1.6.1) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-recommendations dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ee5e5b30..16aab0ff6 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ org.openrewrite.recipe rewrite-recommendations - 1.5.0 + 1.6.1 From 4fa548c45f7ae0a79fd0b4b376cdffe504f35a21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 10:52:54 +0530 Subject: [PATCH 40/70] chore(maven): bump org.apache.maven.plugins:maven-dependency-plugin from 3.7.0 to 3.7.1 (#549) chore(maven): bump org.apache.maven.plugins:maven-dependency-plugin Bumps [org.apache.maven.plugins:maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) from 3.7.0 to 3.7.1. - [Release notes](https://github.com/apache/maven-dependency-plugin/releases) - [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.7.0...maven-dependency-plugin-3.7.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-dependency-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 16aab0ff6..12e5565ae 100644 --- a/pom.xml +++ b/pom.xml @@ -69,7 +69,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.7.0 + 3.7.1 From e1933df201b06a4992674a45225824c26ab617c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 11:02:13 +0530 Subject: [PATCH 41/70] chore(ci): bump docker/build-push-action from 6.0.2 to 6.1.0 (#548) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.0.2 to 6.1.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.0.2...v6.1.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 106dc6b9b..e974bbcf1 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -163,7 +163,7 @@ jobs: # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v6.0.2 + uses: docker/build-push-action@v6.1.0 with: context: build/${{ matrix.docker_context }} push: ${{ github.event_name != 'pull_request_target' && github.repository == 'SaptarshiSarkar12/Drifty' && !contains(github.ref_name, 'dependabot') }} From 43bb883366673d3ce9431dea14e598c78a0b8505 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 11:10:45 +0530 Subject: [PATCH 42/70] chore(npm): bump @headlessui/react from 2.0.4 to 2.1.0 in /Website (#547) Bumps [@headlessui/react](https://github.com/tailwindlabs/headlessui/tree/HEAD/packages/@headlessui-react) from 2.0.4 to 2.1.0. - [Release notes](https://github.com/tailwindlabs/headlessui/releases) - [Changelog](https://github.com/tailwindlabs/headlessui/blob/main/packages/@headlessui-react/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/headlessui/commits/@headlessui/react@v2.1.0/packages/@headlessui-react) --- updated-dependencies: - dependency-name: "@headlessui/react" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 88 +++++++++++++++++++-------------------- Website/package.json | 2 +- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index 658beefbb..97f0aee80 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -8,7 +8,7 @@ "name": "website", "version": "0.1.0", "dependencies": { - "@headlessui/react": "^2.0.4", + "@headlessui/react": "^2.1.0", "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.4", @@ -104,9 +104,9 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz", - "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", + "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", "dependencies": { "@floating-ui/utils": "^0.2.0" } @@ -121,11 +121,11 @@ } }, "node_modules/@floating-ui/react": { - "version": "0.26.13", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.13.tgz", - "integrity": "sha512-kBa9wntpugzrZ8t/4yWelvSmEKZdeTXTJzrxqyrLmcU/n1SM4nvse8yQh2e1b37rJGvtu0EplV9+IkBrCJ1vkw==", + "version": "0.26.17", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.17.tgz", + "integrity": "sha512-ESD+jYWwqwVzaIgIhExrArdsCL1rOAzryG/Sjlu8yaD3Mtqi3uVyhbE2V7jD58Mo52qbzKz2eUY/Xgh5I86FCQ==", "dependencies": { - "@floating-ui/react-dom": "^2.0.0", + "@floating-ui/react-dom": "^2.1.0", "@floating-ui/utils": "^0.2.0", "tabbable": "^6.0.0" }, @@ -135,9 +135,9 @@ } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz", - "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz", + "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -152,13 +152,13 @@ "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" }, "node_modules/@headlessui/react": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.0.4.tgz", - "integrity": "sha512-16d/rOLeYsFsmPlRmXGu8DCBzrWD0zV1Ccx3n73wN87yFu8Y9+X04zflv8EJEt9TAYRyLKOmQXUnOnqQl6NgpA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.1.0.tgz", + "integrity": "sha512-/MizQk2xqR5ELkmCI1xWy3VgJULvR8gcAXtZhcK7sY53TNRCPeMdeODEXKSv9LPSSRlEAyzW1+NGJiaXq6dLRw==", "dependencies": { - "@floating-ui/react": "^0.26.13", - "@react-aria/focus": "^3.16.2", - "@react-aria/interactions": "^3.21.1", + "@floating-ui/react": "^0.26.16", + "@react-aria/focus": "^3.17.1", + "@react-aria/interactions": "^3.21.3", "@tanstack/react-virtual": "3.5.0" }, "engines": { @@ -540,13 +540,13 @@ } }, "node_modules/@react-aria/focus": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.17.0.tgz", - "integrity": "sha512-aRzBw1WTUkcIV3xFrqPA6aB8ZVt3XyGpTaSHAypU0Pgoy2wRq9YeJYpbunsKj9CJmskuffvTqXwAjTcaQish1Q==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.17.1.tgz", + "integrity": "sha512-FLTySoSNqX++u0nWZJPPN5etXY0WBxaIe/YuL/GTEeuqUIuC/2bJSaw5hlsM6T2yjy6Y/VAxBcKSdAFUlU6njQ==", "dependencies": { - "@react-aria/interactions": "^3.21.2", - "@react-aria/utils": "^3.24.0", - "@react-types/shared": "^3.23.0", + "@react-aria/interactions": "^3.21.3", + "@react-aria/utils": "^3.24.1", + "@react-types/shared": "^3.23.1", "@swc/helpers": "^0.5.0", "clsx": "^2.0.0" }, @@ -555,13 +555,13 @@ } }, "node_modules/@react-aria/interactions": { - "version": "3.21.2", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.21.2.tgz", - "integrity": "sha512-Ju706DtoEmI/2vsfu9DCEIjDqsRBVLm/wmt2fr0xKbBca7PtmK8daajxFWz+eTq+EJakvYfLr7gWgLau9HyWXg==", + "version": "3.21.3", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.21.3.tgz", + "integrity": "sha512-BWIuf4qCs5FreDJ9AguawLVS0lV9UU+sK4CCnbCNNmYqOWY+1+gRXCsnOM32K+oMESBxilAjdHW5n1hsMqYMpA==", "dependencies": { - "@react-aria/ssr": "^3.9.3", - "@react-aria/utils": "^3.24.0", - "@react-types/shared": "^3.23.0", + "@react-aria/ssr": "^3.9.4", + "@react-aria/utils": "^3.24.1", + "@react-types/shared": "^3.23.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { @@ -569,9 +569,9 @@ } }, "node_modules/@react-aria/ssr": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.3.tgz", - "integrity": "sha512-5bUZ93dmvHFcmfUcEN7qzYe8yQQ8JY+nHN6m9/iSDCQ/QmCiE0kWXYwhurjw5ch6I8WokQzx66xKIMHBAa4NNA==", + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.4.tgz", + "integrity": "sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==", "dependencies": { "@swc/helpers": "^0.5.0" }, @@ -583,13 +583,13 @@ } }, "node_modules/@react-aria/utils": { - "version": "3.24.0", - "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.24.0.tgz", - "integrity": "sha512-JAxkPhK5fCvFVNY2YG3TW3m1nTzwRcbz7iyTSkUzLFat4N4LZ7Kzh7NMHsgeE/oMOxd8zLY+XsUxMu/E/2GujA==", + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.24.1.tgz", + "integrity": "sha512-O3s9qhPMd6n42x9sKeJ3lhu5V1Tlnzhu6Yk8QOvDuXf7UGuUjXf9mzfHJt1dYzID4l9Fwm8toczBzPM9t0jc8Q==", "dependencies": { - "@react-aria/ssr": "^3.9.3", - "@react-stately/utils": "^3.10.0", - "@react-types/shared": "^3.23.0", + "@react-aria/ssr": "^3.9.4", + "@react-stately/utils": "^3.10.1", + "@react-types/shared": "^3.23.1", "@swc/helpers": "^0.5.0", "clsx": "^2.0.0" }, @@ -598,9 +598,9 @@ } }, "node_modules/@react-stately/utils": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.0.tgz", - "integrity": "sha512-nji2i9fTYg65ZWx/3r11zR1F2tGya+mBubRCbMTwHyRnsSLFZaeq/W6lmrOyIy1uMJKBNKLJpqfmpT4x7rw6pg==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.1.tgz", + "integrity": "sha512-VS/EHRyicef25zDZcM/ClpzYMC5i2YGN6uegOeQawmgfGjb02yaCX0F0zR69Pod9m2Hr3wunTbtpgVXvYbZItg==", "dependencies": { "@swc/helpers": "^0.5.0" }, @@ -609,9 +609,9 @@ } }, "node_modules/@react-types/shared": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.23.0.tgz", - "integrity": "sha512-GQm/iPiii3ikcaMNR4WdVkJ4w0mKtV3mLqeSfSqzdqbPr6vONkqXbh3RhPlPmAJs1b4QHnexd/wZQP3U9DHOwQ==", + "version": "3.23.1", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.23.1.tgz", + "integrity": "sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } diff --git a/Website/package.json b/Website/package.json index 871d19671..900fc40f9 100644 --- a/Website/package.json +++ b/Website/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@headlessui/react": "^2.0.4", + "@headlessui/react": "^2.1.0", "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.4", From f37d90b6da027f642746d2a62b0a94995b5c9188 Mon Sep 17 00:00:00 2001 From: Saptarshi Sarkar Date: Wed, 26 Jun 2024 12:15:07 +0530 Subject: [PATCH 43/70] fix(CI): Updated Formatter CI to run in PRs as well --- .github/workflows/formatter.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/formatter.yml b/.github/workflows/formatter.yml index 8a5aa51ca..70ccde519 100644 --- a/.github/workflows/formatter.yml +++ b/.github/workflows/formatter.yml @@ -6,7 +6,7 @@ on: - "Website/**" - "*.md" - "*.txt" - pull_request: + pull_request_target: paths-ignore: - "Website/**" - "*.md" @@ -39,5 +39,4 @@ jobs: git commit -m "style: Formatted Java files" fi - name: Push changes - if: github.event_name != 'pull_request' run: git push From a5c4b581cb1b2384cdd9fdac389c3f0bd7a630e7 Mon Sep 17 00:00:00 2001 From: Saptarshi Sarkar Date: Wed, 26 Jun 2024 12:25:37 +0530 Subject: [PATCH 44/70] fix(CI): Reverted the change as pushes on PRs do not work --- .github/workflows/formatter.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/formatter.yml b/.github/workflows/formatter.yml index 70ccde519..8a5aa51ca 100644 --- a/.github/workflows/formatter.yml +++ b/.github/workflows/formatter.yml @@ -6,7 +6,7 @@ on: - "Website/**" - "*.md" - "*.txt" - pull_request_target: + pull_request: paths-ignore: - "Website/**" - "*.md" @@ -39,4 +39,5 @@ jobs: git commit -m "style: Formatted Java files" fi - name: Push changes + if: github.event_name != 'pull_request' run: git push From ebbbb0c2263825998b606b7aa7ee847049ce5034 Mon Sep 17 00:00:00 2001 From: Ziad Ashraf <155207557+ziad-ashraf7@users.noreply.github.com> Date: Wed, 26 Jun 2024 13:38:31 +0300 Subject: [PATCH 45/70] feat: Added Settings menu to Drifty GUI (#544) * added the Settings.java file - done with Auto-Paste box * added the Settings.java file - done with Auto-Paste box * ended the page , added heading , added dark theme CSS , added dark theme choiceBox * added the btnSave/Start png , added the banner Dark png , added the splash dark png and make the dark theme apply on them * testing the splash * ended the select directory feat. , edited the labels styles * Fromating code * Fromating code * Fromating code 2 * solved most of the AI bots errors * Solved an About-stage bug * Added the applyTheme() method in Settings.java * modified the handelDirectory method , added messageBroker getter * Done the bidirectionally bind between tow checbox (Settign , Main) * modifing the autoPaste main , Settings Logic * Fixed an Save/Start icons bug , improved the icons methods readablty * removed the unsafe getClass().getResources() * Refactoring the Settings code * fix: Fixed duplicate code, linter issues, redundant method calls and removed spelling mistakes * fix: Fixed a method spacing issue * fix: Fixed a minor linter issue * Add: Added the Theme.java Class , migrating the theme logic into it * Removing unused imports and the Arralist declaration * fix: Fixed linter issues and applied all CodeRabbitAI reviews * fix: Fixed a minor linter issue * Refactoring the code * Solving some of linter errors * fix: Implemented all of the reviews except one * fix: Fixed linter issue * fix: implemented all the reviews * added the dark theme to info window * fix: solved the lint error * fix: sovlving the ai reveiws * fix: linter error fixed * fix: Fixed failure to initialise About scene in Drifty GUI native image --------- Co-authored-by: Ziad Ashraf Co-authored-by: Saptarshi Sarkar --- .idea/inspectionProfiles/Project_Default.xml | 1 + GUI/src/main/java/gui/preferences/Clear.java | 4 + GUI/src/main/java/gui/preferences/Get.java | 5 + GUI/src/main/java/gui/preferences/Labels.java | 2 +- GUI/src/main/java/gui/preferences/Set.java | 8 +- GUI/src/main/java/gui/support/Constants.java | 52 +++-- .../java/gui/utils/UIComponentBuilder.java | 72 +++++++ GUI/src/main/java/main/Drifty_GUI.java | 76 +++---- GUI/src/main/java/ui/About.java | 103 ++++++++++ GUI/src/main/java/ui/ConfirmationDialog.java | 31 ++- GUI/src/main/java/ui/MainGridPane.java | 74 ++----- GUI/src/main/java/ui/Settings.java | 185 ++++++++++++++++++ GUI/src/main/java/ui/Theme.java | 134 +++++++++++++ GUI/src/main/java/ui/UIController.java | 122 ++++++------ .../resources/Backgrounds/DriftyMainDark.png | Bin 0 -> 67874 bytes .../{DriftyMain.png => DriftyMainLight.png} | Bin .../resources/Buttons/Save/SaveDownDark.png | Bin 0 -> 19080 bytes .../Save/{SaveDown.png => SaveDownLight.png} | Bin .../resources/Buttons/Save/SaveUpDark.png | Bin 0 -> 22266 bytes .../Save/{SaveUp.png => SaveUpLight.png} | Bin .../resources/Buttons/Start/StartDownDark.png | Bin 0 -> 18433 bytes .../{StartDown.png => StartDownLight.png} | Bin .../resources/Buttons/Start/StartUpDark.png | Bin 0 -> 23443 bytes .../Start/{StartUp.png => StartUpLight.png} | Bin GUI/src/main/resources/CSS/Button.css | 3 +- GUI/src/main/resources/CSS/DarkTheme.css | 33 ++++ .../CSS/{Scene.css => LightTheme.css} | 2 +- .../META-INF/native-image/jni-config.json | 20 +- .../META-INF/native-image/reflect-config.json | 15 +- .../native-image/resource-config.json | 84 ++++++-- GUI/src/main/resources/SplashDark.png | Bin 0 -> 56978 bytes .../resources/{Splash.png => SplashLight.png} | Bin 32 files changed, 810 insertions(+), 216 deletions(-) create mode 100644 GUI/src/main/java/gui/utils/UIComponentBuilder.java create mode 100644 GUI/src/main/java/ui/About.java create mode 100644 GUI/src/main/java/ui/Settings.java create mode 100644 GUI/src/main/java/ui/Theme.java create mode 100644 GUI/src/main/resources/Backgrounds/DriftyMainDark.png rename GUI/src/main/resources/Backgrounds/{DriftyMain.png => DriftyMainLight.png} (100%) create mode 100644 GUI/src/main/resources/Buttons/Save/SaveDownDark.png rename GUI/src/main/resources/Buttons/Save/{SaveDown.png => SaveDownLight.png} (100%) create mode 100644 GUI/src/main/resources/Buttons/Save/SaveUpDark.png rename GUI/src/main/resources/Buttons/Save/{SaveUp.png => SaveUpLight.png} (100%) create mode 100644 GUI/src/main/resources/Buttons/Start/StartDownDark.png rename GUI/src/main/resources/Buttons/Start/{StartDown.png => StartDownLight.png} (100%) create mode 100644 GUI/src/main/resources/Buttons/Start/StartUpDark.png rename GUI/src/main/resources/Buttons/Start/{StartUp.png => StartUpLight.png} (100%) create mode 100644 GUI/src/main/resources/CSS/DarkTheme.css rename GUI/src/main/resources/CSS/{Scene.css => LightTheme.css} (51%) create mode 100644 GUI/src/main/resources/SplashDark.png rename GUI/src/main/resources/{Splash.png => SplashLight.png} (100%) diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index c6d927e7e..7e62176b7 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -6,5 +6,6 @@ + \ No newline at end of file diff --git a/GUI/src/main/java/gui/preferences/Clear.java b/GUI/src/main/java/gui/preferences/Clear.java index f8a5357f1..0daa6d612 100644 --- a/GUI/src/main/java/gui/preferences/Clear.java +++ b/GUI/src/main/java/gui/preferences/Clear.java @@ -20,6 +20,10 @@ public void mainAutoPaste() { preferences.remove(MAIN_AUTO_PASTE.toString()); } + public void mainTheme() { + preferences.remove(MAIN_THEME.toString()); + } + public void jobs() { preferences.remove(JOBS.toString()); } diff --git a/GUI/src/main/java/gui/preferences/Get.java b/GUI/src/main/java/gui/preferences/Get.java index 5b3072bdb..befec1b5f 100644 --- a/GUI/src/main/java/gui/preferences/Get.java +++ b/GUI/src/main/java/gui/preferences/Get.java @@ -25,6 +25,7 @@ static Get getInstance() { return INSTANCE; } + public Folders folders() { GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = FxGson.addFxSupport(gsonBuilder).setPrettyPrinting().create(); @@ -41,6 +42,10 @@ public boolean mainAutoPaste() { return preferences.getBoolean(MAIN_AUTO_PASTE.toString(), false); } + public String mainTheme() { + return preferences.get(MAIN_THEME.toString(), "Light"); + } + public Jobs jobs() { GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = FxGson.addFxSupport(gsonBuilder).setPrettyPrinting().create(); diff --git a/GUI/src/main/java/gui/preferences/Labels.java b/GUI/src/main/java/gui/preferences/Labels.java index 7f15ce99a..8fc0541d7 100644 --- a/GUI/src/main/java/gui/preferences/Labels.java +++ b/GUI/src/main/java/gui/preferences/Labels.java @@ -1,5 +1,5 @@ package gui.preferences; public enum Labels implements preferences.Labels { - FOLDERS, MAIN_AUTO_PASTE, JOBS, ALWAYS_AUTO_PASTE + FOLDERS, MAIN_AUTO_PASTE, JOBS, ALWAYS_AUTO_PASTE, MAIN_THEME } diff --git a/GUI/src/main/java/gui/preferences/Set.java b/GUI/src/main/java/gui/preferences/Set.java index 5ec37f027..862a6c4f3 100644 --- a/GUI/src/main/java/gui/preferences/Set.java +++ b/GUI/src/main/java/gui/preferences/Set.java @@ -14,8 +14,7 @@ import java.nio.file.Paths; import java.util.prefs.Preferences; -import static gui.preferences.Labels.FOLDERS; -import static gui.preferences.Labels.MAIN_AUTO_PASTE; +import static gui.preferences.Labels.*; import static properties.Program.JOB_FILE; public final class Set extends preferences.Set { @@ -42,6 +41,11 @@ public void mainAutoPaste(boolean isMainAutoPasteEnabled) { preferences.putBoolean(MAIN_AUTO_PASTE.toString(), isMainAutoPasteEnabled); } + public void mainTheme(String theme) { + AppSettings.CLEAR.mainTheme(); + preferences.put(MAIN_THEME.toString(), theme); + } + public void jobs(Jobs jobs) { GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = FxGson.addFxSupport(gsonBuilder).setPrettyPrinting().create(); diff --git a/GUI/src/main/java/gui/support/Constants.java b/GUI/src/main/java/gui/support/Constants.java index 2e7590e50..00e1307fd 100644 --- a/GUI/src/main/java/gui/support/Constants.java +++ b/GUI/src/main/java/gui/support/Constants.java @@ -1,6 +1,8 @@ package gui.support; import gui.init.Environment; +import gui.preferences.AppSettings; +import gui.utils.UIComponentBuilder; import javafx.geometry.Rectangle2D; import javafx.scene.Parent; import javafx.scene.Scene; @@ -13,6 +15,17 @@ import java.util.Objects; public class Constants extends support.Constants { + public static final UIComponentBuilder UI_COMPONENT_BUILDER_INSTANCE = UIComponentBuilder.getInstance(); + public static final String BUTTON_RELEASED = + "-fx-text-fill: white;" + + "-fx-font-weight: Bold;" + + "-fx-background-color: linear-gradient(rgb(0, 53, 105) 20%, rgb(26, 21, 129) 65%, rgb(0, 0, 65) 100%);" + + "-fx-border-color: white;"; + public static final String BUTTON_PRESSED = + "-fx-text-fill: white;" + + "-fx-font-weight: Bold;" + + " -fx-background-color: linear-gradient(rgb(11, 118, 220) 20%, rgb(33, 31, 131) 65%, rgb(2, 2, 168) 100%);\n" + + "-fx-border-color: white;"; public static final String GUI_APPLICATION_TERMINATED = "Drifty GUI (Graphical User Interface) Application Terminated!"; public static final String TRYING_TO_DOWNLOAD_F = "Trying to download \"%s\" ..."; public static final String WRITE_ACCESS_DENIED_F = "Write Access To \"%s\" DENIED!"; @@ -22,20 +35,25 @@ public class Constants extends support.Constants { public static final double SCREEN_HEIGHT = SCREEN_SIZE.getHeight(); // Graphics Files - public static final URL DRIFTY_MAIN_PNG = Constants.class.getResource("/Backgrounds/DriftyMain.png"); - public static final URL SAVE_UP_PNG = Constants.class.getResource("/Buttons/Save/SaveUp.png"); - public static final URL SAVE_DOWN_PNG = Constants.class.getResource("/Buttons/Save/SaveDown.png"); - public static final URL START_UP_PNG = Constants.class.getResource("/Buttons/Start/StartUp.png"); - public static final URL START_DOWN_PNG = Constants.class.getResource("/Buttons/Start/StartDown.png"); + public static final URL DRIFTY_MAIN_PNG = AppSettings.GET.mainTheme().equals("Dark") ? Constants.class.getResource("/Backgrounds/DriftyMainDark.png") : Constants.class.getResource("/Backgrounds/DriftyMainLight.png"); + public static final URL SAVE_UP_LIGHT_PNG = Constants.class.getResource("/Buttons/Save/SaveUpLight.png"); + public static final URL SAVE_UP_DARK_PNG = Constants.class.getResource("/Buttons/Save/SaveUpDark.png"); + public static final URL SAVE_DOWN_LIGHT_PNG = Constants.class.getResource("/Buttons/Save/SaveDownLight.png"); + public static final URL SAVE_DOWN_DARK_PNG = Constants.class.getResource("/Buttons/Save/SaveDownDark.png"); + public static final URL START_UP_LIGHT_PNG = Constants.class.getResource("/Buttons/Start/StartUpLight.png"); + public static final URL START_UP_DARK_PNG = Constants.class.getResource("/Buttons/Start/StartUpDark.png"); + public static final URL START_DOWN_LIGHT_PNG = Constants.class.getResource("/Buttons/Start/StartDownLight.png"); + public static final URL START_DOWN_DARK_PNG = Constants.class.getResource("/Buttons/Start/StartDownDark.png"); public static final URL LINK_PNG = Constants.class.getResource("/Labels/Link.png"); public static final URL AUTO_PASTE_PNG = Constants.class.getResource("/Labels/AutoPaste.png"); public static final URL DIRECTORY_PNG = Constants.class.getResource("/Labels/Directory.png"); public static final URL FILENAME_PNG = Constants.class.getResource("/Labels/Filename.png"); public static final URL DRIFTY_ICON = Constants.class.getResource("/Icons/AppIcon.png"); - public static final URL SPLASH = Constants.class.getResource("/Splash.png"); + public static final URL SPLASH = AppSettings.GET.mainTheme().equals("Dark") ? Constants.class.getResource("/SplashDark.png") : Constants.class.getResource("/SplashLight.png"); // Stylesheets - public static final URL SCENE_CSS = Constants.class.getResource("/CSS/Scene.css"); + public static final URL LIGHT_THEME_CSS = Constants.class.getResource("/CSS/LightTheme.css"); + public static final URL DARK_THEME_CSS = Constants.class.getResource("/CSS/DarkTheme.css"); public static final URL LIST_VIEW_CSS = Constants.class.getResource("/CSS/ListView.css"); public static final URL TEXT_FIELD_CSS = Constants.class.getResource("/CSS/TextField.css"); public static final URL CONTEXT_MENU_CSS = Constants.class.getResource("/CSS/ContextMenu.css"); @@ -51,18 +69,22 @@ public class Constants extends support.Constants { public static final URL MONACO_TTF = Constants.class.getResource("/Fonts/Monaco.ttf"); // JavaFX Image Objects - public static final Image IMG_MAIN_GUI_BANNER = new Image(Objects.requireNonNull(DRIFTY_MAIN_PNG).toExternalForm()); - public static final Image IMG_SPLASH = new Image(Objects.requireNonNull(SPLASH).toExternalForm()); + public static Image imgMainGuiBanner = new Image(Objects.requireNonNull(DRIFTY_MAIN_PNG).toExternalForm()); + public static Image imgSplash = new Image(Objects.requireNonNull(SPLASH).toExternalForm()); public static final Image IMG_LINK_LABEL = new Image(Objects.requireNonNull(LINK_PNG).toExternalForm()); public static final Image IMG_DIR_LABEL = new Image(Objects.requireNonNull(DIRECTORY_PNG).toExternalForm()); public static final Image IMG_FILENAME_LABEL = new Image(Objects.requireNonNull(FILENAME_PNG).toExternalForm()); public static final Image IMG_AUTO_PASTE_LABEL = new Image(Objects.requireNonNull(AUTO_PASTE_PNG).toExternalForm()); - public static final Image IMG_START_UP = new Image(Objects.requireNonNull(START_UP_PNG).toExternalForm()); - public static final Image IMG_START_DOWN = new Image(Objects.requireNonNull(START_DOWN_PNG).toExternalForm()); - public static final Image IMG_SAVE_UP = new Image(Objects.requireNonNull(SAVE_UP_PNG).toExternalForm()); - public static final Image IMG_SAVE_DOWN = new Image(Objects.requireNonNull(SAVE_DOWN_PNG).toExternalForm()); + public static final Image IMG_START_UP_LIGHT = new Image(Objects.requireNonNull(START_UP_LIGHT_PNG).toExternalForm()); + public static final Image IMG_START_UP_DARK = new Image(Objects.requireNonNull(START_UP_DARK_PNG).toExternalForm()); + public static final Image IMG_START_DOWN_LIGHT = new Image(Objects.requireNonNull(START_DOWN_LIGHT_PNG).toExternalForm()); + public static final Image IMG_START_DOWN_DARK = new Image(Objects.requireNonNull(START_DOWN_DARK_PNG).toExternalForm()); + public static final Image IMG_SAVE_UP_LIGHT = new Image(Objects.requireNonNull(SAVE_UP_LIGHT_PNG).toExternalForm()); + public static final Image IMG_SAVE_UP_DARK = new Image(Objects.requireNonNull(SAVE_UP_DARK_PNG).toExternalForm()); + public static final Image IMG_SAVE_DOWN_LIGHT = new Image(Objects.requireNonNull(SAVE_DOWN_LIGHT_PNG).toExternalForm()); + public static final Image IMG_SAVE_DOWN_DARK = new Image(Objects.requireNonNull(SAVE_DOWN_DARK_PNG).toExternalForm()); - // Methods for obtaining consistent Stages and Scenes + // Methods for getting consistent Stages and Scenes public static Stage getStage(String title, boolean isPrimaryStage) { Stage stage = new Stage(); Image icon = new Image(Objects.requireNonNull(DRIFTY_ICON).toExternalForm()); @@ -82,7 +104,7 @@ public static Stage getStage(String title, boolean isPrimaryStage) { public static Scene getScene(Parent root) { Scene scene = new Scene(root); - addCSS(scene, CHECK_BOX_CSS, CONTEXT_MENU_CSS, LABEL_CSS, LIST_VIEW_CSS, MENU_CSS, PROGRESS_BAR_CSS, SCENE_CSS, SCROLL_PANE_CSS, TEXT_FIELD_CSS, V_BOX_CSS, BUTTON_CSS); + addCSS(scene, CHECK_BOX_CSS, CONTEXT_MENU_CSS, LABEL_CSS, LIST_VIEW_CSS, MENU_CSS, LIGHT_THEME_CSS, PROGRESS_BAR_CSS, SCROLL_PANE_CSS, TEXT_FIELD_CSS, V_BOX_CSS, BUTTON_CSS); return scene; } diff --git a/GUI/src/main/java/gui/utils/UIComponentBuilder.java b/GUI/src/main/java/gui/utils/UIComponentBuilder.java new file mode 100644 index 000000000..66be5f215 --- /dev/null +++ b/GUI/src/main/java/gui/utils/UIComponentBuilder.java @@ -0,0 +1,72 @@ +package gui.utils; + +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.control.Hyperlink; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; +import javafx.scene.paint.LinearGradient; +import javafx.scene.paint.Paint; +import javafx.scene.text.Font; +import main.Drifty_GUI; + +import java.util.Objects; + +import static gui.support.Constants.MONACO_TTF; + +public class UIComponentBuilder { + private static UIComponentBuilder instance; + + public static UIComponentBuilder getInstance() { + if (instance == null) { + instance = new UIComponentBuilder(); + } + return instance; + } + + public Label buildLabel() { + Label label = new Label(""); + label.setFont(new Font(Objects.requireNonNull(MONACO_TTF).toExternalForm(), 20 * .75)); + label.prefWidth(Double.MAX_VALUE); + label.setAlignment(Pos.CENTER); + return label; + } + + public Label buildLabel(String text, Font font, Paint textFill) { + Label label = new Label(text); + label.setAlignment(Pos.TOP_CENTER); + label.setFont(font); + label.setTextFill(textFill); + return label; + } + + public HBox buildHBox(Node node) { + HBox hbox = new HBox(node); + hbox.setAlignment(Pos.CENTER); + return hbox; + } + + public ImageView buildImageView(Image image, double scale) { + ImageView imageView = new ImageView(image); + imageView.setPreserveRatio(true); + imageView.setFitWidth(image.getWidth() * scale); + return imageView; + } + + public TextField buildTextField() { + TextField tf = new TextField(""); + tf.setPrefWidth(Double.MAX_VALUE); + return tf; + } + + public Hyperlink buildHyperlink(String text, Font font, LinearGradient fill, String url) { + Hyperlink link = new Hyperlink(text); + link.setFont(font); + link.setTextFill(fill); + link.setOnAction(e -> Drifty_GUI.INSTANCE.openWebsite(url)); + return link; + } +} \ No newline at end of file diff --git a/GUI/src/main/java/main/Drifty_GUI.java b/GUI/src/main/java/main/Drifty_GUI.java index 6f6ad07d4..13402802b 100644 --- a/GUI/src/main/java/main/Drifty_GUI.java +++ b/GUI/src/main/java/main/Drifty_GUI.java @@ -6,18 +6,14 @@ import gui.utils.MessageBroker; import javafx.application.Application; import javafx.application.Preloader; -import javafx.geometry.Insets; -import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.Scene; -import javafx.scene.control.*; -import javafx.scene.image.ImageView; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.Menu; +import javafx.scene.control.MenuBar; +import javafx.scene.control.MenuItem; import javafx.scene.input.Clipboard; import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.VBox; -import javafx.scene.paint.LinearGradient; -import javafx.scene.text.Font; -import javafx.scene.text.FontWeight; import javafx.stage.Stage; import properties.Mode; import ui.*; @@ -26,12 +22,14 @@ import static gui.support.Constants.GUI_APPLICATION_TERMINATED; import static javafx.scene.layout.AnchorPane.*; import static support.Constants.DRIFTY_WEBSITE_URL; -import static support.Constants.VERSION_NUMBER; public class Drifty_GUI extends Application { + public static final Drifty_GUI INSTANCE = new Drifty_GUI(); private static MessageBroker msgBroker; + private static Scene scene; + private final Settings settingsInstance = new Settings(); + private About aboutInstance; private Stage primaryStage; - private Scene scene; public static void main(String[] args) { System.setProperty("javafx.preloader", Splash.class.getCanonicalName()); @@ -65,9 +63,13 @@ private void createScene() { MenuBar menu = menuBar(getMenuItemsOfMenu(), getEditMenu(), getWindowMenu(), getHelpMenu()); ap.getChildren().add(gridPane); ap.getChildren().add(menu); + placeControl(gridPane, 40, 40, 40, 40); placeControl(menu, 0, 0, 0, -1); scene = Constants.getScene(ap); + if (AppSettings.GET.mainTheme().equals("Dark")) { + Constants.addCSS(scene, Constants.DARK_THEME_CSS); + } scene.setOnContextMenuRequested(e -> getRightClickContextMenu().show(scene.getWindow(), e.getScreenX(), e.getScreenY())); menu.setUseSystemMenuBar(true); UIController.initLogic(gridPane); @@ -116,6 +118,10 @@ private MenuBar menuBar(Menu... menus) { return new MenuBar(menus); } + public static Scene getScene() { + return scene; + } + private Menu getWindowMenu() { Menu menu = new Menu("Window"); MenuItem fullScreen = new MenuItem("Toggle Full Screen"); @@ -138,48 +144,10 @@ private Menu getHelpMenu() { securityVulnerability.setOnAction(e -> openWebsite("https://github.com/SaptarshiSarkar12/Drifty/security/advisories/new")); feature.setOnAction(e -> openWebsite("https://github.com/SaptarshiSarkar12/Drifty/issues/new?assignees=&labels=feature+%E2%9C%A8%2CApp+%F0%9F%92%BB&projects=&template=feature-request-application.yaml&title=%5BFEATURE%5D+")); about.setOnAction(event -> { - Stage stage = Constants.getStage("About Drifty", false); - VBox root = new VBox(10); - root.setPadding(new Insets(10)); - root.setAlignment(Pos.TOP_CENTER); - ImageView appIcon = new ImageView(Constants.IMG_SPLASH); - appIcon.setFitWidth(Constants.SCREEN_WIDTH * .2); - appIcon.setFitHeight(Constants.SCREEN_HEIGHT * .2); - appIcon.setPreserveRatio(true); - Label lblDescription = new Label("An Open-Source Interactive File Downloader System"); - lblDescription.setFont(Font.font("Arial", FontWeight.BOLD, 24)); - lblDescription.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #8e2de2, #4a00e0)")); - Label lblDriftyVersion = new Label("Drifty " + VERSION_NUMBER); - Label lblYtDlpVersion = new Label("yt-dlp version: " + AppSettings.GET.ytDlpVersion()); - lblDriftyVersion.setFont(Font.font("Arial", FontWeight.BOLD, 20)); - lblDriftyVersion.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); - lblYtDlpVersion.setFont(Font.font("Arial", FontWeight.BOLD, 14)); - lblYtDlpVersion.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); - Hyperlink websiteLink = new Hyperlink("Website"); - websiteLink.setFont(Font.font("Arial", FontWeight.BOLD, 18)); - websiteLink.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #fc466b, #3f5efb)")); - websiteLink.setOnAction(e -> openWebsite("https://saptarshisarkar12.github.io/Drifty")); - Hyperlink discordLink = new Hyperlink("Join Discord"); - discordLink.setFont(Font.font("Arial", FontWeight.BOLD, 18)); - discordLink.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #00d956, #0575e6)")); - discordLink.setOnAction(e -> openWebsite("https://discord.gg/DeT4jXPfkG")); - Hyperlink githubLink = new Hyperlink("Contribute to Drifty"); - githubLink.setFont(Font.font("Arial", FontWeight.BOLD, 18)); - githubLink.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #009fff, #ec2f4b)")); - githubLink.setOnAction(e -> openWebsite("https://github.com/SaptarshiSarkar12/Drifty")); - root.getChildren().addAll(appIcon, lblDescription, lblDriftyVersion, lblYtDlpVersion); - if (AppSettings.GET.isFfmpegWorking() && AppSettings.GET.ffmpegVersion() != null && !AppSettings.GET.ffmpegVersion().isEmpty()) { - Label lblFfmpegVersion = new Label("FFMPEG version: " + AppSettings.GET.ffmpegVersion()); - lblFfmpegVersion.setFont(Font.font("Arial", FontWeight.BOLD, 14)); - lblFfmpegVersion.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); - root.getChildren().add(lblFfmpegVersion); + if (aboutInstance == null) { + aboutInstance = new About(); } - root.getChildren().addAll(websiteLink, discordLink, githubLink); - Scene aboutScene = Constants.getScene(root); - stage.setMinHeight(Constants.SCREEN_HEIGHT * .55); - stage.setMinWidth(Constants.SCREEN_WIDTH * .5); - stage.setScene(aboutScene); - stage.show(); + aboutInstance.show(); }); menu.getItems().setAll(contactUs, contribute, bug, securityVulnerability, feature, about); return menu; @@ -188,13 +156,15 @@ private Menu getHelpMenu() { private Menu getEditMenu() { Menu menu = new Menu("Edit"); MenuItem wipeHistory = new MenuItem("Clear Download History"); + MenuItem settings = new MenuItem("Settings"); wipeHistory.setOnAction(e -> { ConfirmationDialog ask = new ConfirmationDialog("Clear Download History", "Are you sure you wish to wipe out all of your download history?\n(This will NOT delete any downloaded files)", false); if (ask.getResponse().isYes()) { UIController.clearJobHistory(); } }); - menu.getItems().addAll(wipeHistory); + settings.setOnAction(e -> settingsInstance.show()); + menu.getItems().addAll(wipeHistory, settings); return menu; } @@ -212,7 +182,7 @@ private ContextMenu getRightClickContextMenu() { return contextMenu; } - protected void openWebsite(String websiteURL) { + public void openWebsite(String websiteURL) { getHostServices().showDocument(websiteURL); } diff --git a/GUI/src/main/java/ui/About.java b/GUI/src/main/java/ui/About.java new file mode 100644 index 000000000..2d156d84a --- /dev/null +++ b/GUI/src/main/java/ui/About.java @@ -0,0 +1,103 @@ +package ui; + +import gui.preferences.AppSettings; +import gui.support.Constants; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Hyperlink; +import javafx.scene.control.Label; +import javafx.scene.image.ImageView; +import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; +import javafx.scene.paint.LinearGradient; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.stage.Stage; + +import static gui.support.Constants.UI_COMPONENT_BUILDER_INSTANCE; +import static support.Constants.VERSION_NUMBER; + +public class About { + private static Scene aboutScene; + private static final ImageView IV_SPLASH = new ImageView(Constants.imgSplash); + private Label lblDescription; + private Label lblDriftyVersion; + private Label lblYtDlpVersion; + private Hyperlink websiteLink; + private Hyperlink discordLink; + private Hyperlink githubLink; + private Stage stage; + + private void setupLayout() { + VBox aboutRoot = new VBox(10); + aboutRoot.setPadding(new Insets(10)); + aboutRoot.setAlignment(Pos.TOP_CENTER); + setupImageView(); + createLabels(); + createHyperlinks(); + setupStage(); + aboutRoot.getChildren().addAll(IV_SPLASH, lblDescription, lblDriftyVersion, lblYtDlpVersion); + if (AppSettings.GET.isFfmpegWorking() && AppSettings.GET.ffmpegVersion() != null && !AppSettings.GET.ffmpegVersion().isEmpty()) { + Label lblFfmpegVersion = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("FFMPEG version: " + AppSettings.GET.ffmpegVersion(), Font.font("Arial", FontWeight.BOLD, 14), LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); + aboutRoot.getChildren().add(lblFfmpegVersion); + } + aboutRoot.getChildren().addAll(websiteLink, discordLink, githubLink); + aboutScene = Constants.getScene(aboutRoot); + applyThemeSettings(aboutRoot); + } + + private void setupImageView() { + IV_SPLASH.setFitWidth(Constants.SCREEN_WIDTH * .2); + IV_SPLASH.setFitHeight(Constants.SCREEN_HEIGHT * .2); + IV_SPLASH.setPreserveRatio(true); + } + + private void setupStage() { + stage = Constants.getStage("About Drifty", false); + stage.setMinHeight(Constants.SCREEN_HEIGHT * .55); + stage.setMinWidth(Constants.SCREEN_WIDTH * .5); + } + + private void applyThemeSettings(VBox aboutRoot) { + if (AppSettings.GET.mainTheme().equals("Dark")) { + Constants.addCSS(aboutScene, Constants.DARK_THEME_CSS); + for (Node node : aboutRoot.getChildren()) { + if (node instanceof Label) { + ((Label) node).setTextFill(Color.WHITE); + } + } + } + } + + public void show() { + if (stage != null && stage.isShowing()) { + stage.toFront(); + } else { + setupLayout(); + stage.setScene(aboutScene); + stage.showAndWait(); + } + } + + private void createLabels() { + lblDescription = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("An Open-Source Interactive File Downloader System", Font.font("Arial", FontWeight.BOLD, 24), LinearGradient.valueOf("linear-gradient(to right, #8e2de2, #4a00e0)")); + lblDriftyVersion = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("Drifty " + VERSION_NUMBER, Font.font("Arial", FontWeight.BOLD, 20), LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); + lblYtDlpVersion = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("yt-dlp version: " + AppSettings.GET.ytDlpVersion(), Font.font("Arial", FontWeight.BOLD, 14), LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); + } + + private void createHyperlinks() { + websiteLink = UI_COMPONENT_BUILDER_INSTANCE.buildHyperlink("Website", Font.font("Arial", FontWeight.BOLD, 18), LinearGradient.valueOf("linear-gradient(to right, #fc466b, #3f5efb)"), "https://saptarshisarkar12.github.io/Drifty"); + discordLink = UI_COMPONENT_BUILDER_INSTANCE.buildHyperlink("Join Discord", Font.font("Arial", FontWeight.BOLD, 18), LinearGradient.valueOf("linear-gradient(to right, #00d956, #0575e6)"), "https://discord.gg/DeT4jXPfkG"); + githubLink = UI_COMPONENT_BUILDER_INSTANCE.buildHyperlink("Contribute to Drifty", Font.font("Arial", FontWeight.BOLD, 18), LinearGradient.valueOf("linear-gradient(to right, #009fff, #ec2f4b)"), "https://github.com/SaptarshiSarkar12/Drifty"); + } + + public static Scene getScene() { + return aboutScene; + } + + public static ImageView getIvSplash() { + return IV_SPLASH; + } +} diff --git a/GUI/src/main/java/ui/ConfirmationDialog.java b/GUI/src/main/java/ui/ConfirmationDialog.java index a0a3c33db..52ba5589d 100644 --- a/GUI/src/main/java/ui/ConfirmationDialog.java +++ b/GUI/src/main/java/ui/ConfirmationDialog.java @@ -1,6 +1,8 @@ package ui; import gui.init.Environment; + +import gui.preferences.AppSettings; import gui.support.Constants; import javafx.application.Platform; import javafx.event.ActionEvent; @@ -24,8 +26,11 @@ enum State { YES_NO, OK, FILENAME } + private static Scene scene; private final State state; private final String lf = System.lineSeparator(); + private static Button btnNo; + private static Button btnYes; private double width = 200; private double height = 150; private Stage stage; @@ -78,7 +83,6 @@ private void finish() { private Button newButton(String text, EventHandler event) { Button button = new Button(text); - button.setFont(Constants.getMonaco(17)); button.setMinWidth(80); button.setMaxWidth(80); button.setPrefWidth(80); @@ -101,11 +105,11 @@ private void createControls() { message.setWrapText(true); message.setTextAlignment(TextAlignment.CENTER); } - Button btnYes = newButton("Yes", e -> { + btnYes = newButton("Yes", e -> { answer.setAnswer(true); stage.close(); }); - Button btnNo = newButton("No", e -> { + btnNo = newButton("No", e -> { answer.setAnswer(false); stage.close(); }); @@ -146,7 +150,14 @@ public GetConfirmationDialogResponse getResponse() { private void showScene() { stage = Constants.getStage(windowTitle, false); - Scene scene = Constants.getScene(vbox); + scene = Constants.getScene(vbox); + if (AppSettings.GET.mainTheme().equals("Dark")) { + Theme.applyTheme("Dark", scene); + Theme.changeButtonStyle(true, btnYes); + Theme.changeButtonStyle(true, btnNo); + } else { + Theme.applyTheme("Light", scene); + } stage.setWidth(width); stage.setHeight(height); stage.setScene(scene); @@ -163,4 +174,16 @@ private void showScene() { public String getFilename() { return filename; } + + static Button getBtnNo() { + return btnNo; + } + + static Scene getScene() { + return scene; + } + + static Button getBtnYes() { + return btnYes; + } } diff --git a/GUI/src/main/java/ui/MainGridPane.java b/GUI/src/main/java/ui/MainGridPane.java index 4e930ae8e..a2e47d566 100644 --- a/GUI/src/main/java/ui/MainGridPane.java +++ b/GUI/src/main/java/ui/MainGridPane.java @@ -1,10 +1,10 @@ package ui; +import gui.preferences.AppSettings; import gui.support.Constants; import javafx.application.Platform; import javafx.geometry.Insets; import javafx.geometry.Pos; -import javafx.scene.Node; import javafx.scene.control.*; import javafx.scene.image.Image; import javafx.scene.image.ImageView; @@ -12,33 +12,30 @@ import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; -import javafx.scene.text.Font; import support.Job; -import java.util.Objects; - -import static gui.support.Constants.MONACO_TTF; +import static gui.support.Constants.UI_COMPONENT_BUILDER_INSTANCE; public class MainGridPane extends GridPane { - public final ImageView ivLogo = newImageView(Constants.IMG_MAIN_GUI_BANNER, .45); + public static ImageView ivLogo = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.imgMainGuiBanner, .45); public final ProgressBar pBar = pBar(); public final ListView listView = listView(); - public final ImageView ivLink = newImageView(Constants.IMG_LINK_LABEL, .7); - public final ImageView ivDir = newImageView(Constants.IMG_DIR_LABEL, .7); - public final ImageView ivFilename = newImageView(Constants.IMG_FILENAME_LABEL, .7); - public final ImageView ivAutoPaste = newImageView(Constants.IMG_AUTO_PASTE_LABEL, .7); - public final Button btnStart = newButton(Constants.IMG_START_UP, Constants.IMG_START_DOWN); - public final Button btnSave = newButton(Constants.IMG_SAVE_UP, Constants.IMG_SAVE_DOWN); + public final ImageView ivLink = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.IMG_LINK_LABEL, .7); + public final ImageView ivDir = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.IMG_DIR_LABEL, .7); + public final ImageView ivFilename = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.IMG_FILENAME_LABEL, .7); + public final ImageView ivAutoPaste = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.IMG_AUTO_PASTE_LABEL, .7); + public final Button btnStart = AppSettings.GET.mainTheme().equals("Dark") ? newButton(Constants.IMG_START_UP_DARK, Constants.IMG_START_DOWN_DARK) : newButton(Constants.IMG_START_UP_LIGHT, Constants.IMG_START_DOWN_LIGHT); + public final Button btnSave = AppSettings.GET.mainTheme().equals("Dark") ? newButton(Constants.IMG_SAVE_UP_DARK, Constants.IMG_SAVE_DOWN_DARK) : newButton(Constants.IMG_SAVE_UP_LIGHT, Constants.IMG_SAVE_DOWN_LIGHT); public final CheckBox cbAutoPaste = new CheckBox(); private final HBox boxAutoPaste = boxAutoPaste(); - private final HBox boxLogo = newHBox(ivLogo); - public final Label lblLinkOut = newLabel(); - public final Label lblDirOut = newLabel(); - public final Label lblFilenameOut = newLabel(); - public final Label lblDownloadInfo = newLabel(); - public final TextField tfLink = newTextField(); - public final TextField tfDir = newTextField(); - public final TextField tfFilename = newTextField(); + public static HBox boxLogo = UI_COMPONENT_BUILDER_INSTANCE.buildHBox(ivLogo); + public final Label lblLinkOut = UI_COMPONENT_BUILDER_INSTANCE.buildLabel(); + public final Label lblDirOut = UI_COMPONENT_BUILDER_INSTANCE.buildLabel(); + public final Label lblFilenameOut = UI_COMPONENT_BUILDER_INSTANCE.buildLabel(); + public final Label lblDownloadInfo = UI_COMPONENT_BUILDER_INSTANCE.buildLabel(); + public final TextField tfLink = UI_COMPONENT_BUILDER_INSTANCE.buildTextField(); + public final TextField tfDir = UI_COMPONENT_BUILDER_INSTANCE.buildTextField(); + public final TextField tfFilename = UI_COMPONENT_BUILDER_INSTANCE.buildTextField(); public MainGridPane() { super(); @@ -127,20 +124,6 @@ protected void updateItem(Job item, boolean empty) { return listView; } - private Label newLabel() { - Label label = new Label(""); - label.setFont(new Font(Objects.requireNonNull(MONACO_TTF).toExternalForm(), 20 * .75)); - label.setPrefWidth(Double.MAX_VALUE); - label.getStyleClass().add("outline"); - return label; - } - - private TextField newTextField() { - TextField tf = new TextField(""); - tf.setPrefWidth(Double.MAX_VALUE); - return tf; - } - private ProgressBar pBar() { ProgressBar pb = new ProgressBar(0.0); pb.setPrefWidth(Double.MAX_VALUE); @@ -148,35 +131,16 @@ private ProgressBar pBar() { return pb; } - private HBox newHBox(Node node) { - HBox box = new HBox(node); - box.setAlignment(Pos.CENTER); - return box; - } - private HBox boxAutoPaste() { HBox box = new HBox(10, ivAutoPaste, cbAutoPaste); box.setAlignment(Pos.CENTER_RIGHT); return box; } - private ImageView newImageView(Image image, double scale) { - ImageView iv = new ImageView(image); - double width = image.getWidth(); - iv.setPreserveRatio(true); - iv.setFitWidth(width * scale); - return iv; - } - private Button newButton(Image imageUp, Image imageDown) { Button button = new Button(); - ImageView imageViewUp = new ImageView(imageUp); - ImageView imageViewDn = new ImageView(imageDown); - double width = imageUp.getWidth(); - imageViewUp.setPreserveRatio(true); - imageViewUp.setFitWidth(width * 0.45); - imageViewDn.setPreserveRatio(true); - imageViewDn.setFitWidth(width * 0.45); + ImageView imageViewUp = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(imageUp, 0.45); + ImageView imageViewDn = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(imageDown, 0.45); button.setOnMousePressed(e -> button.setGraphic(imageViewDn)); button.setOnMouseReleased(e -> button.setGraphic(imageViewUp)); button.setGraphic(imageViewUp); diff --git a/GUI/src/main/java/ui/Settings.java b/GUI/src/main/java/ui/Settings.java new file mode 100644 index 000000000..1439b9a8e --- /dev/null +++ b/GUI/src/main/java/ui/Settings.java @@ -0,0 +1,185 @@ +package ui; + +import gui.preferences.AppSettings; +import gui.support.Constants; +import javafx.geometry.HPos; +import javafx.geometry.Insets; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.ColumnConstraints; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.Priority; +import javafx.scene.paint.Color; +import javafx.scene.paint.LinearGradient; +import javafx.scene.paint.Paint; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.stage.DirectoryChooser; +import javafx.stage.Stage; +import main.Drifty_GUI; + +import java.io.File; + +import static gui.support.Constants.UI_COMPONENT_BUILDER_INSTANCE; + +public class Settings { + private static Button selectDirectoryButton; + private static Scene settingsScene; + private static TextField tfCurrentDirectory; + private CheckBox autoPasteCheckbox; + private Label lblDefaultDownloadDir; + private Label lblTheme; + private Label lblSettingsHeading; + private Label lblAutoPaste; + private ChoiceBox themeChoiceBox; + private Stage stage; + private GridPane root; + + private void initializeComponents() { + initializeUIComponents(); + configureScene(); + } + + private void initializeUIComponents() { + setupThemeChoice(); + createTfDirectory(); + createLabels(); + createAutoPasteCheck(); + createDirectoryButton(); + } + + private void configureScene() { + stage = Constants.getStage("Settings", false); + stage.setMinHeight(Constants.SCREEN_HEIGHT * .55); + stage.setMinWidth(Constants.SCREEN_WIDTH * .5); + stage.setMaxHeight(Constants.SCREEN_HEIGHT * .6); + stage.setMaxWidth(Constants.SCREEN_WIDTH * .6); + configureLayout(); + settingsScene = Constants.getScene(root); + Constants.addCSS(settingsScene, Constants.LIGHT_THEME_CSS); + setInitialTheme(AppSettings.GET.mainTheme()); + } + + private void configureLayout() { + root = new GridPane(); + ColumnConstraints column1 = new ColumnConstraints(); // For the first column, it will take 50% the width of the window + column1.setPercentWidth(50); + ColumnConstraints column2 = new ColumnConstraints(); // For the second column, it will take 50% the width of the window + column2.setPercentWidth(50); + root.getColumnConstraints().addAll(column1, column2); + root.setHgap(20); + root.setVgap(10); + root.setPadding(new Insets(10, 20, 20, 20)); + addComponents(); + setHAlignments(); + setHGrowsAlways(lblSettingsHeading, lblAutoPaste, autoPasteCheckbox, lblTheme, themeChoiceBox, lblDefaultDownloadDir, tfCurrentDirectory, selectDirectoryButton); + } + + public void show() { + if (stage != null && stage.isShowing()) { + stage.toFront(); + } else { + initializeComponents(); + stage.setScene(settingsScene); + stage.showAndWait(); + } + } + + private void setHAlignments() { + GridPane.setHalignment(lblSettingsHeading, HPos.CENTER); + GridPane.setHalignment(lblAutoPaste, HPos.RIGHT); + GridPane.setHalignment(lblTheme, HPos.RIGHT); + GridPane.setHalignment(lblDefaultDownloadDir, HPos.RIGHT); + GridPane.setHalignment(selectDirectoryButton, HPos.CENTER); + } + + private void setHGrowsAlways(Node... nodes) { + for (Node node : nodes) { + GridPane.setHgrow(node, Priority.ALWAYS); + } + } + + private void addComponents() { + root.add(lblSettingsHeading, 0, 0, 2, 1); + root.add(lblAutoPaste, 0, 1); + root.add(autoPasteCheckbox, 1, 1); + root.add(lblTheme, 0, 2); + root.add(themeChoiceBox, 1, 2); + root.add(lblDefaultDownloadDir, 0, 3); + root.add(tfCurrentDirectory, 1, 3); + root.add(selectDirectoryButton, 1, 4, 2, 1); + } + + private void setInitialTheme(String theme) { + boolean isDark = theme.equals("Dark"); + Constants.addCSS(settingsScene, isDark ? Constants.DARK_THEME_CSS : Constants.LIGHT_THEME_CSS); + applyStyleToLabels(isDark, lblTheme, lblAutoPaste, lblDefaultDownloadDir, lblSettingsHeading); + tfCurrentDirectory.setStyle("-fx-text-fill: " + (isDark ? "white" : "black") + " ; -fx-font-weight: Bold"); + } + + private void applyStyleToLabels(boolean isDark, Label... labels) { + Color darkThemeTextFill = Color.WHITE; + LinearGradient lightThemeTextFill = LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)"); + for (Label label : labels) { + label.setTextFill(isDark ? darkThemeTextFill : lightThemeTextFill); + } + } + + private void setupThemeChoice() { + themeChoiceBox = new ChoiceBox<>(); + themeChoiceBox.getItems().addAll("Dark Theme", "Light Theme"); + themeChoiceBox.setValue(AppSettings.GET.mainTheme().equals("Dark") ? "Dark Theme" : "Light Theme"); + themeChoiceBox.setOnAction(e -> Theme.applyTheme(themeChoiceBox.getValue().equals("Dark Theme") ? "Dark" : "Light", settingsScene, Drifty_GUI.getScene(), About.getScene(), UIController.getInfoScene(), ConfirmationDialog.getScene())); + } + + private void createAutoPasteCheck() { + autoPasteCheckbox = new CheckBox(); + autoPasteCheckbox.setSelected(AppSettings.GET.mainAutoPaste()); + autoPasteCheckbox.setMaxWidth(5.0); + autoPasteCheckbox.selectedProperty().addListener(((observable, oldValue, newValue) -> AppSettings.SET.mainAutoPaste(newValue))); + } + + private void createLabels() { + Paint textFill = LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)"); + lblSettingsHeading = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("Settings", Font.font("monospace", FontWeight.EXTRA_BOLD, 100), textFill); + lblAutoPaste = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("Auto-Paste", Font.font("Arial", FontWeight.EXTRA_BOLD, 20), textFill); + lblTheme = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("Theme", Font.font("Arial", FontWeight.EXTRA_BOLD, 20), textFill); + lblDefaultDownloadDir = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("Default Download Directory", Font.font("Arial", FontWeight.BOLD, 20), textFill); + } + + private void createTfDirectory() { + tfCurrentDirectory = new TextField(UIController.form.tfDir.getText()); + tfCurrentDirectory.setMaxWidth(Double.MAX_VALUE); + tfCurrentDirectory.setEditable(false); + } + + private void createDirectoryButton() { + selectDirectoryButton = new Button("Select Directory"); + if (AppSettings.GET.mainTheme().equals("Dark")) { + selectDirectoryButton.setStyle(Constants.BUTTON_RELEASED); + selectDirectoryButton.setOnMousePressed(e -> selectDirectoryButton.setStyle(Constants.BUTTON_PRESSED)); + selectDirectoryButton.setOnMouseReleased(e -> selectDirectoryButton.setStyle(Constants.BUTTON_RELEASED)); + } else { + selectDirectoryButton.getStyleClass().add("button"); + } + selectDirectoryButton.setOnAction(e -> handleDirectorySelection()); + } + + private void handleDirectorySelection() { + DirectoryChooser chooser = new DirectoryChooser(); + chooser.setInitialDirectory(new File(System.getProperty("user.home"))); + File selectedDirectory = chooser.showDialog(this.stage); + String directoryPath = (selectedDirectory != null ? selectedDirectory.getAbsolutePath() : AppSettings.GET.lastDownloadFolder()); + UIController.form.tfDir.setText(directoryPath); + tfCurrentDirectory.setText(directoryPath); + } + + public static TextField getTfCurrentDirectory() { + return tfCurrentDirectory; + } + + public static Button getSelectDirectoryButton() { + return selectDirectoryButton; + } +} diff --git a/GUI/src/main/java/ui/Theme.java b/GUI/src/main/java/ui/Theme.java new file mode 100644 index 000000000..7b5240f0d --- /dev/null +++ b/GUI/src/main/java/ui/Theme.java @@ -0,0 +1,134 @@ +package ui; + +import gui.preferences.AppSettings; +import gui.support.Constants; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.paint.Color; +import javafx.scene.paint.LinearGradient; +import javafx.scene.paint.Paint; +import javafx.scene.text.Text; + +import java.util.Objects; + +import static gui.support.Constants.UI_COMPONENT_BUILDER_INSTANCE; + +public class Theme { + public static void applyTheme(String theme, Scene... scenes) { + boolean isDark = theme.equals("Dark"); + AppSettings.SET.mainTheme(theme); + updateCSS(isDark, scenes); + updateTextColors(isDark, scenes); + changeImages(theme); + updateButtonStyles(isDark, theme); + } + + private static void setupButton(Image imageUp, Image imageDown, Button button) { + ImageView imageViewUp = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(imageUp, 0.45); + ImageView imageViewDown = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(imageDown, 0.45); + button.setOnMousePressed(ev -> button.setGraphic(imageViewDown)); + button.setOnMouseReleased(ev -> button.setGraphic(imageViewUp)); + button.setGraphic(imageViewUp); + } + + private static void setupButtonGraphics(String theme) { + Image imageStartUp = getImageForButton(theme, "Start", "StartUp"); + Image imageStartDown = getImageForButton(theme, "Start", "StartDown"); + setupButton(imageStartUp, imageStartDown, UIController.form.btnStart); + + Image imageSaveUp = getImageForButton(theme, "Save", "SaveUp"); + Image imageSaveDown = getImageForButton(theme, "Save", "SaveDown"); + setupButton(imageSaveUp, imageSaveDown, UIController.form.btnSave); + } + + private static Image getImageForButton(String theme, String buttonCategory, String buttonType) { + String imagePath = "/Buttons/" + buttonCategory + "/" + buttonType + theme + ".png"; + return new Image(Objects.requireNonNull(Constants.class.getResource(imagePath)).toExternalForm()); + } + + private static void changeImages(String theme) { + String bannerPath = "/Backgrounds/DriftyMain" + theme + ".png"; + String splashPath = "/Splash" + theme + ".png"; + Constants.imgMainGuiBanner = new Image(Objects.requireNonNull(Constants.class.getResource(bannerPath)).toExternalForm()); + MainGridPane.ivLogo.setImage(Constants.imgMainGuiBanner); + Constants.imgSplash = new Image(Objects.requireNonNull(Constants.class.getResource(splashPath)).toExternalForm()); + About.getIvSplash().setImage(Constants.imgSplash); + } + + private static void updateTextColors(boolean isDark, Scene... scenes) { + // Labels + Paint color = isDark ? Color.WHITE : LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)"); + for (Scene scene : scenes) { + if (scene != null) { + for (Node node : scene.getRoot().getChildrenUnmodifiable()) { + if (node instanceof Label) { + ((Label) node).setTextFill(color); + } else if (node instanceof Text) { + ((Text) node).setFill(color); + } + } + } + } + changeInfoTextFlow(color); + // TextFields + String style = isDark ? "-fx-text-fill: White;" : "-fx-text-fill: Black;"; + UIController.form.tfDir.setStyle(style); + UIController.form.tfFilename.setStyle(style); + UIController.form.tfLink.setStyle(style); + if (Settings.getTfCurrentDirectory() != null) { + Settings.getTfCurrentDirectory().setStyle(style + "-fx-font-weight: Bold"); + } + } + + private static void changeInfoTextFlow(Paint color) { + Color headingsColor = AppSettings.GET.mainTheme().equals("Dark") ? Color.LIGHTGREEN : Color.DARKBLUE; + for (int i = 0; i < UIController.getInfoTf().getChildren().size(); i++) { + if (UIController.getInfoTf().getChildren().get(i) instanceof Text) { + Text text = (Text) UIController.getInfoTf().getChildren().get(i); + if (text.getFont().getSize() == 16) { + ((Text) UIController.getInfoTf().getChildren().get(i)).setFill(color); + } else { + ((Text) UIController.getInfoTf().getChildren().get(i)).setFill(headingsColor); + + } + } + } + } + + private static void updateButtonStyles(boolean isDark, String theme) { + changeButtonStyle(isDark, Settings.getSelectDirectoryButton()); + changeButtonStyle(isDark, ConfirmationDialog.getBtnYes()); + changeButtonStyle(isDark, ConfirmationDialog.getBtnNo()); + setupButtonGraphics(theme); + } + + static void changeButtonStyle(boolean isDark, Button button) { + if (button != null) { + if (isDark) { + button.setStyle(Constants.BUTTON_RELEASED); + button.setOnMousePressed(ev -> button.setStyle(Constants.BUTTON_PRESSED)); + button.setOnMouseReleased(ev -> button.setStyle(Constants.BUTTON_RELEASED)); + } else { + String style = "-fx-text-fill: Black;"; + String backColorReleased = "-fx-background-color: linear-gradient(rgb(54,151,225) 18%, rgb(121,218,232) 90%, rgb(126,223,255) 95%);"; + String backColorPressed = "-fx-background-color: linear-gradient(rgb(126,223,255) 20%, rgb(121,218,232) 20%, rgb(54,151,225) 100%);"; + button.setStyle(style + backColorReleased); + button.setOnMousePressed(ev -> button.setStyle(style + backColorPressed)); + button.setOnMouseReleased(ev -> button.setStyle(style + backColorReleased)); + } + } + } + + private static void updateCSS(boolean isDark, Scene... scenes) { + for (Scene scene : scenes) { + if (scene != null) { + Constants.addCSS(scene, isDark ? Constants.DARK_THEME_CSS : Constants.LIGHT_THEME_CSS); + scene.getStylesheets().remove(isDark ? Objects.requireNonNull(Constants.LIGHT_THEME_CSS).toExternalForm() : Objects.requireNonNull(Constants.DARK_THEME_CSS).toExternalForm()); + } + } + } +} \ No newline at end of file diff --git a/GUI/src/main/java/ui/UIController.java b/GUI/src/main/java/ui/UIController.java index d4bf73bca..e9dccc1b8 100644 --- a/GUI/src/main/java/ui/UIController.java +++ b/GUI/src/main/java/ui/UIController.java @@ -42,10 +42,8 @@ import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.stream.Collectors; import static gui.support.Colors.*; -import static gui.support.Constants.MONACO_TTF; import static utils.Utility.*; public final class UIController { @@ -59,15 +57,25 @@ public final class UIController { private final String nl = System.lineSeparator(); private int speedValueUpdateCount; private int speedValue; + private static final TextFlow INFO_TF = new TextFlow(); + private static Scene infoScene; private String songMetadataJson; private String filename; private String songLink; private Folders folders; private Job selectedJob; + public static Scene getInfoScene() { + return infoScene; + } + + public static TextFlow getInfoTf() { + return INFO_TF; + } + /* - Single instance model only constructor - */ + Single instance model-only constructor + */ private UIController() { folders = AppSettings.GET.folders(); } @@ -89,15 +97,19 @@ private void setControlProperties() { BooleanBinding disableStartButton = form.listView.itemsProperty().isNotNull().not().or(PROCESSING_BATCH).or(DIRECTORY_EXISTS.not()).or(VERIFYING_LINKS); BooleanBinding disableInputs = PROCESSING_BATCH.or(VERIFYING_LINKS); - form.btnSave.visibleProperty().bind(UPDATING_BATCH); form.btnStart.disableProperty().bind(disableStartButton); form.tfDir.disableProperty().bind(disableInputs); form.tfFilename.disableProperty().bind(disableInputs); form.tfLink.disableProperty().bind(disableInputs); - form.listView.setContextMenu(getListMenu()); + if (AppSettings.GET.mainTheme().equals("Dark")) { + form.tfDir.setStyle("-fx-text-fill: White;"); + form.tfFilename.setStyle("-fx-text-fill: White;"); + form.tfLink.setStyle("-fx-text-fill: White;"); + } + Tooltip.install(form.cbAutoPaste, new Tooltip("When checked, will paste contents of clipboard into" + nl + "Link field when switching back to this screen.")); Tooltip.install(form.tfLink, new Tooltip("URL must be a valid URL without spaces." + nl + " Add multiple URLs by pasting them in from the clipboard and separating each URL with a space.")); Tooltip.install(form.tfFilename, new Tooltip("If the filename you enter already exists in the download folder, it will" + nl + "automatically be renamed to avoid file over-writes.")); @@ -110,7 +122,6 @@ private void setControlProperties() { selectJob(job); }); form.cbAutoPaste.setSelected(AppSettings.GET.mainAutoPaste()); - form.cbAutoPaste.selectedProperty().addListener(((observable, oldValue, newValue) -> AppSettings.SET.mainAutoPaste(newValue))); form.tfDir.textProperty().addListener(((observable, oldValue, newValue) -> { if (!newValue.equals(oldValue)) { DIRECTORY_EXISTS.setValue(false); @@ -280,13 +291,10 @@ private Runnable verifyLink(String link) { String folder = fileExists(filename); String windowTitle; if (!folder.isEmpty()) { - message = intro + "And the file exists in this download folder:" + nl + folder + nl.repeat(2) + - "If you wish to download it again, it will be given the name shown below, or you can change it as you wish." + nl.repeat(2) + - "YES will add the job to the list with new filename. NO will do nothing."; + message = intro + "The file already exists in the selected download folder:" + nl + folder + nl.repeat(2) + "Choose 'YES' to download and automatically rename the file to avoid overwriting the existing one. Alternatively, you can manually change the filename below to your preference." + nl.repeat(2) + "Choose 'NO' if you do not wish to download the file again."; windowTitle = "File Already Exists"; } else { - message = intro + "However, the file does not exist in any of your download folders." + nl.repeat(2) + - "Do you still wish to download this file?"; + message = intro + "The file does not exist in any of your designated download folders." + nl.repeat(2) + "This is a good opportunity to download it without concerns of duplicating existing files. Click 'YES' to proceed with the download, or 'NO' if you decide not to download."; windowTitle = "File Already Downloaded"; } ConfirmationDialog ask = new ConfirmationDialog(windowTitle, message, renameFile(filename, dir)); @@ -490,12 +498,8 @@ private void updateBatch() { private void checkHistoryAddJobs(Worker> worker) { String pastJobNoFile = "You have downloaded %s in the past, but the file does not exist in your download folder." + nl.repeat(2) + " Click Yes if you still wish to download this file. Otherwise, click No."; - String pastJobFileExists = "You have downloaded %s in the past, and the file exists in your download folder." + nl.repeat(2) + - "It will be renamed as shown here, or you may change the filename to your liking." + nl.repeat(2) + - "Clicking Yes will commit the job with the shown filename, while clicking No will not add this file to the job list."; - String fileExistsString = "This file:" + nl.repeat(2) + "%s" + nl.repeat(2) + "Exists in in the download folder." + nl.repeat(2) + - "It will be renamed as shown here, or you may change the filename to your liking." + nl.repeat(2) + - "Clicking Yes will commit the job with the shown filename, while clicking No will not add this file to the job list."; + String pastJobFileExists = "You have downloaded %s in the past, and the file exists in your download folder." + nl.repeat(2) + "It will be renamed as shown here, or you may change the filename to your liking." + nl.repeat(2) + "Clicking Yes will commit the job with the shown filename, while clicking No will not add this file to the job list."; + String fileExistsString = "This file:" + nl.repeat(2) + "%s" + nl.repeat(2) + "Exists in in the download folder." + nl.repeat(2) + "It will be renamed as shown here, or you may change the filename to your liking." + nl.repeat(2) + "Clicking Yes will commit the job with the shown filename, while clicking No will not add this file to the job list."; Platform.runLater(() -> { String message; ConfirmationDialog ask = new ConfirmationDialog("", ""); @@ -571,6 +575,7 @@ private ContextMenu getListMenu() { clearLink(); clearFilename(); form.listView.getItems().clear(); + form.listView.getItems(); M.msgLinkInfo(""); M.msgFilenameInfo(""); M.msgDirInfo(""); @@ -765,18 +770,10 @@ private void commitJobListToListView() { if (getJobs().isEmpty()) { form.listView.getItems().clear(); } else { - // Remove duplicate jobs if any - Set encounteredLinks = new HashSet<>(); - ConcurrentLinkedDeque duplicates = getJobs().jobList().stream() - .filter(job -> !encounteredLinks.add(job.getLink())) - .collect(Collectors.toCollection(ConcurrentLinkedDeque::new)); - for (Job job : duplicates) { - removeJobFromList(job); - } - // Sort the Job list - ArrayList sortList = new ArrayList<>(getJobs().jobList()); - sortList.sort(Comparator.comparing(Job::toString)); - getJobs().setList(new ConcurrentLinkedDeque<>(sortList)); + // Use TreeSet to remove duplicates and sort simultaneously + Set sortedJobs = new TreeSet<>(Comparator.comparing(Job::toString)); + sortedJobs.addAll(getJobs().jobList()); + getJobs().setList(new ConcurrentLinkedDeque<>(sortedJobs)); } // Assign the jobList to the ListView form.listView.getItems().setAll(getJobs().jobList()); @@ -785,32 +782,33 @@ private void commitJobListToListView() { } private void help() { + Color textColor = AppSettings.GET.mainTheme().equals("Dark") ? Color.WHITE : Color.BLACK; + Color headingsColor = AppSettings.GET.mainTheme().equals("Dark") ? Color.LIGHTGREEN : Color.DARKBLUE; double h = 20; double n = 16; - TextFlow tf = new TextFlow(); - tf.getChildren().add(text("Link:\n", true, BLUE, h)); - tf.getChildren().add(text("The Drifty GUI lets you easily create batches for downloading, or download a single file. You start by pasting your web links into the Link field. Once a link has been put into Link field, Drifty will start to process it where it will attempt to determine the name of the file being downloaded. Once it has done that, you will see the filename show up in the batch list on the left.\n\n", false, BLACK, n)); - tf.getChildren().add(text("The URLs you paste into the link field must be valid URLs or Drifty wont process them.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Checking the ", false, BLACK, n)); - tf.getChildren().add(text("Auto Paste ", true, BLACK, n)); - tf.getChildren().add(text("option will let you go to another window and put a link in the clipboard then when you come back to Drifty, the link will be pasted into the Link field automatically and processed then added to the batch list.\n\n", false, BLACK, n)); - tf.getChildren().add(text("If you paste in a link that happens to extract multiple files for downloading, such as a Youtube play list, Drifty will first attempt to get the number of files in the list, then it will ask you if you would like it to obtain all of the filenames in the list. The progress bar will indicate how many filenames have been obtained and the batch list will populate with download jobs with each new filename discovered.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Directory:\n", true, BLUE, h)); - tf.getChildren().add(text("Right clicking anywhere on the form brings up a menu where you can add directories to use as download folders. As you add more directories, they accumulate and persist between reloads. The last directory that you add last will be considered the current download directory. When you click start which begins the download process for all jobs in the batch list, Drifty will look through all of the added folders for a matching filenames and it will let you know when it finds duplicates and give you the option to not download them again.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Right clicking on the form and choosing to edit the directory list pulls up a form with all of the directories you have added. Click on one to remove it if necessary.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Filename:\n", true, BLUE, h)); - tf.getChildren().add(text("Drifty tries to get the name of the file from the link. This process can take a little time but not usually more than 10 to 20 seconds. By default, Drifty adds the extension of 'mp4' to video file downloads because these have the highest chance of success. If Drifty cannot determine the name of the file, you can type in whatever filename you'd like, then click on Save to commit that to the job in the list. You can also determine the download format of the file by setting the filename extension to one of these options: 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Job list:\n", true, BLUE, h)); - tf.getChildren().add(text("Once the list box on the left has the jobs in it that you want, you can click on each one in turn and the link, download directory and filename will be placed into the related fields so you can edit them if you need to. Just click on Save when you're done editing.\n\n", false, BLACK, n)); - tf.getChildren().add(text("You can right click on any item in the list to remove it or clear out the job list completely.\n\n", false, BLACK, n)); - tf.getChildren().add(text("The Job list and the directory list will persist between program reloads. The job list will empty out one at a time as each file in the list is downloaded. You start the batch by clicking on the Start button. Any files that fail to download will get recycled back into the list on this form. I found that they will download usually after a second attempt.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Auto Paste:\n", true, BLUE, h)); - tf.getChildren().add(text("The whole point of Auto Paste is to help speed things up. When you check the box, then go out to your browser and find links that you want to download, just copy them into your clip board then ALT+TAB back to Drifty or just click on it to make it the active window. Drifty will sense that it has been made the active screen and the contents of your clipboard will be analyzed to make sure it is a valid URL, then it will process it if so.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Multi-link pasting:\n", true, BLUE, h)); - tf.getChildren().add(text("Another way to speed things up it to copy and paste links into a notepad of some kind, then just put a single space between each link so that all the links are on a single line, then paste that line into the Link field and Drifty will start processing them in turn and build up your batch for you.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Youtube Playlists:\n", true, BLUE, h)); - tf.getChildren().add(text("Another thing you can do is grab a YouTube playlist and Drifty will extract all of the videos from the playlist and build a batch from the list (or add to your existing batch).\n\n", false, BLACK, n)); - tf.setStyle("-fx-background-color: transparent"); + INFO_TF.getChildren().add(text("Link:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("The Drifty GUI lets you easily create batches for downloading, or download a single file. You start by pasting your web links into the Link field. Once a link has been put into Link field, Drifty will start to process it where it will attempt to determine the name of the file being downloaded. Once it has done that, you will see the filename show up in the batch list on the left.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("The URLs you paste into the link field must be valid URLs or Drifty wont process them.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Checking the ", false, textColor, n)); + INFO_TF.getChildren().add(text("Auto Paste ", true, textColor, n)); + INFO_TF.getChildren().add(text("option will let you go to another window and put a link in the clipboard then when you come back to Drifty, the link will be pasted into the Link field automatically and processed then added to the batch list.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("If you paste in a link that happens to extract multiple files for downloading, such as a Youtube play list, Drifty will first attempt to get the number of files in the list, then it will ask you if you would like it to obtain all of the filenames in the list. The progress bar will indicate how many filenames have been obtained and the batch list will populate with download jobs with each new filename discovered.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Directory:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("Right clicking anywhere on the form brings up a menu where you can add directories to use as download folders. As you add more directories, they accumulate and persist between reloads. The last directory that you add last will be considered the current download directory. When you click start which begins the download process for all jobs in the batch list, Drifty will look through all of the added folders for a matching filenames and it will let you know when it finds duplicates and give you the option to not download them again.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Right clicking on the form and choosing to edit the directory list pulls up a form with all of the directories you have added. Click on one to remove it if necessary.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Filename:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("Drifty tries to get the name of the file from the link. This process can take a little time but not usually more than 10 to 20 seconds. By default, Drifty adds the extension of 'mp4' to video file downloads because these have the highest chance of success. If Drifty cannot determine the name of the file, you can type in whatever filename you'd like, then click on Save to commit that to the job in the list. You can also determine the download format of the file by setting the filename extension to one of these options: 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Job list:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("Once the list box on the left has the jobs in it that you want, you can click on each one in turn and the link, download directory and filename will be placed into the related fields so you can edit them if you need to. Just click on Save when you're done editing.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("You can right click on any item in the list to remove it or clear out the job list completely.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("The Job list and the directory list will persist between program reloads. The job list will empty out one at a time as each file in the list is downloaded. You start the batch by clicking on the Start button. Any files that fail to download will get recycled back into the list on this form. I found that they will download usually after a second attempt.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Auto Paste:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("The whole point of Auto Paste is to help speed things up. When you check the box, then go out to your browser and find links that you want to download, just copy them into your clip board then ALT+TAB back to Drifty or just click on it to make it the active window. Drifty will sense that it has been made the active screen and the contents of your clipboard will be analyzed to make sure it is a valid URL, then it will process it if so.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Multi-link pasting:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("Another way to speed things up it to copy and paste links into a notepad of some kind, then just put a single space between each link so that all the links are on a single line, then paste that line into the Link field and Drifty will start processing them in turn and build up your batch for you.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Youtube Playlists:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("Another thing you can do is grab a YouTube playlist and Drifty will extract all of the videos from the playlist and build a batch from the list (or add to your existing batch).\n\n", false, textColor, n)); + INFO_TF.setStyle("-fx-background-color: transparent"); double width = 500; double height = 700; @@ -818,7 +816,7 @@ private void help() { Stage stage = Constants.getStage("Help", false); stage.setWidth(width); stage.setHeight(height + 100); - VBox vox = new VBox(20, tf); + VBox vox = new VBox(20, INFO_TF); vox.setPrefWidth(width - 35); vox.setPrefHeight(height - 75); vox.setPadding(new Insets(30)); @@ -830,14 +828,18 @@ private void help() { scrollPane.setPrefWidth(width); scrollPane.setPrefHeight(height); scrollPane.setFitToWidth(true); - Scene scene = Constants.getScene(scrollPane); - scene.setFill(Color.TRANSPARENT); - stage.setScene(scene); + infoScene = Constants.getScene(scrollPane); + if (AppSettings.GET.mainTheme().equals("Dark")) { + Theme.applyTheme("Dark", infoScene); + } + + infoScene.setFill(Color.TRANSPARENT); + stage.setScene(infoScene); stage.setAlwaysOnTop(true); stage.setTitle("Help"); stage.setOnCloseRequest(e -> stage.close()); VBox.setVgrow(vox, Priority.ALWAYS); - VBox.setVgrow(tf, Priority.ALWAYS); + VBox.setVgrow(INFO_TF, Priority.ALWAYS); btnOK.setOnAction(e -> stage.close()); scrollPane.setVvalue(0.0); stage.showAndWait(); @@ -846,7 +848,7 @@ private void help() { private Text text(String string, boolean bold, Color color, double size) { // This is used by the help() method for custom text formatting Text text = new Text(string); - text.setFont(new Font(Objects.requireNonNull(MONACO_TTF).toExternalForm(), size)); + text.setFont(new Font("monospace", size)); text.setFill(color); if (bold) { text.setStyle("-fx-font-weight: bold;"); diff --git a/GUI/src/main/resources/Backgrounds/DriftyMainDark.png b/GUI/src/main/resources/Backgrounds/DriftyMainDark.png new file mode 100644 index 0000000000000000000000000000000000000000..dc124f59d0c1036df8c86b696fb51dde3be89d4e GIT binary patch literal 67874 zcmbTc1yo$YvMxNhy9Q@)cXuBgCPqwCJ&MZ0|2n`Z|y=v__yovp&ilN57H-) zjtc;Qg7fza1xWu!2mrthTWfr9{h+KQXzFOsYHa3cV$SMm|LKhy01y`Q{A6ruYwk*6 zVs2^eAObvV?*>v>n~4Cmd6e0eKS`NeS%bWt&EI>gXqbB2nhKZ!#Y8EDJq6zw*qgf= zQ+V3jIk*UViU9w?SMaU<_cj}l;vXcgwjw}@zXB;fD63IOIXatD@Ue2Rn6k68Q}79} zny_2&o0tnQQ*g3#aJnE?y3<#-1z=E>!=)LE7BK)YSAyIZxJr8GVX7~ z_?JQcm((sAUZ2d_z~(NFZqBCWGVX6`QvDsxCqXG^b7NOWXAMV3yZ`W%+JC4_!O6wS zNkOk|?O^8U;ll8rI+#lvyPAst-@L}n!p_UW!L7l;FUZa%$ic<*c4cS(C#kZdnYD%2 ze<9`9;NTSG;Qp_qZ`8ds4cr19h zSWJ1i`B?bP*g09a+0FUc1^A7*xGeH5d>Mgyt&TnU+>3zbEki`?5rvNfeArl z)4y030h<1Gvbh=XU$?FQ7xwsnlKij!9#-aWO#ctg|EF{pM+;XEV`p;-%QxHoU%|!p zzf<1D*!};k`v03N|Ebe|QT@Mz@&AwN|1yiIm9c}R`CH^<1O6Qh+usoLPp7c`SAYHE z*?$U0|3Us13?S~Yv{T9LJ|C7^y;sqAAut5*F^N8UTk3%f0ou{>(;dD{?(@z7xC6k z%=4GA*k9F6MtALsunCUw0%D9dgaS;^+x_X&D=t~_j%cr=?JyFGhyd#wM5 z2(_t29XzfZB2!y^{c{0Im^fVwpO_M3qh>Dx#;Tmf&&$G%K7GzxzYXrCs#8OgyuJdh}E7YS4V;}@5s}H=Z z9)~NWcbx)o%tCx_%d3<+zz=7`oI&If>>Un+eo11Fx+ zHcy;NMEmwWM~b}SSTRTCp3-y=ashU8PF1>iDwvYy(z6q7K-5pV)=d{E=+>(rm zWW&_}W}6kajKpXXU~XjOpzL63PdF;zV`NA^O*%$ob1P#T zTI3D3t_T>{vQTzmhokLK$HD2pnvg?J665{*kJIin+XLL+^Ug2omLSvqxc&kPfk!QM z<Nmt{T!JQ*)N3j`0V_Qy}C&ax1Oh9`Q^)LV|ua9tD zoUqNxzu*)rm+*gHesTZ^<@{(N%0R&ibWwZWvQ8E4bIGklk7$)D5eT3g)31TC$@*|M zq}DZA4D~H60t5J*l@8*p8T{^4;+5?}cO(Z<#Bcb%i&rlei+@)tP5%%A$NsV9ueo(oa=See_6 zYL~py(-b|NReTe7lV{fcF$o$tT0Bh&`#f*B?K_%yQIkZ{u)urS3Nr%7a!xx-i^zkNxn$BJx&v6(7CDwv0&X?oVO zKi+oh^*#^&ile02Sm8FfE?A>2QzGWb18rTJlYXm}(rwB99P_Z*;XgI0`JBLn9Mq=j zKzpql{w}mf-!`f*saYWjX-*JwijEBQD{(TxW(==DDu{-xsyY1>*1!~ry-|0rTkC<$ z$`cmKM2}-AB<;i1wu9B_=ANO{X3iJ|gisH~Wf<&07oWxu!)9%Zub{ z=mER2-?eT4I|B3TQjtlYkHmyn4r-G4_-ck3%4|#IzmJ=9ME{nYIYsk~q0mP@AS zp?_#hN>3As@wK{bo6GS{ZjJqLKqNj!T6y#m;ZOhxz_y+rOWu}0jI0+gbfI)v;z4vY zsoKnoiy9=S?I0RHZcncUL!-$ngFmwkMAt0L9~1U-$RD;Bm&60sQpNAuBzp$F7gvcq z4W32Gp;UCH(eM-741l=1!G%t6G$V?xbnhsmBkhbQX!VMJw|0$w&P@<;1DRfPMphbN z+Bh}e>=L)S6fUEAw%WCYhWObJGv<&v1_r=DLKlJ=_-S8EephxVe($2Em<^WixM%_X z<*sUfOu_}E<7aT#DNx7!vzsoC^F5>@ih?F?ln`t&RF4Rz9lFBxBBPwdxfudd%M=Wfy405(;Vsa3=9^rJ^9p8;opZsb znxrz*31-%lPG_c&$EVm)Snxn`O;8k268rWO<5WzF)}3Q!PHDz1K>u~4zY?0x!NX{a zrC$x(kE|@SjBS@6KrgY_7der6w?bx08Wp`BV{zo(g1*sWbL{$&OssT)^+#%(CZ+j( z{GRyNQp+?L9rQ7!SGeU!!_Vrub;K+cqBS8??c?R(6pJJ0DAkVMe%!to7Nv}o)=VZ; z7+t%(AP|j_hNIUOOTVoad1DW#Kkp#f!l@3~BWH?!eX<IdP_1Fa+bVa=f-__6Li^b=@7+=A|Kw6ul@gIEL4?j$bV<)<#) zKHW(?H+hDNJd^T2tF6(;I4P7*dqb`q!!Ejk{yD)C!oHx1E<_5s{8o%EF{sJ+P*~lB zt`Yz@Cq5uN(Q!o#-+sM<*-9LkuId1~&JN0pH;g$$?kfw0{BB$kN_f7tnNA(_I{h3* z7f=u-vE!2ZD~QHCPnWKSm;iS_trv1iu55P&0DJm}Qy?lnr_u8KF4;ny78pVksztkc zaey(scOw9UKM}Yqg^J4fvuu6T)^kH8gx#l|BVcLvUvK{|le>#(*CrB%pSbP> zf`d+*_ddc~zBX@cL&Qvz0gr0-qj7y$&R1-#NEzZlnq6M{j5wGL^W*4UbfpttQsHX# zG)t&*vDXzBLxbt+*|}@`ATB@`Y;p=SAiNw|;vpV{i#hN>L4X+=NM7>e%xl+V>I*GF zS6`DZ%ozoNk9_vW3o&7}CM2Nv9l?*~+4WI~jg(l0scyMRD3Sx!WKnz(qnC1mb-^(A z<{#$eNXz&lMNPhGbP0s(vsw1x^30yH%Vxo#)xesEJm`2(B*0?ID)r^qJFxh%wz%_3 zKa#=FM!bn+(XVCYjP!Zt&~mOB_EAhBXZ-uM`kL6uow-i1aE3&>fjCLF40g5*Zl;9K z1@oq-JJNars8EVsDEpg?4xA*lW2KsI>;}{I&Wkt-2V;(1Q6<#z+T9Cn*Y*hS1RGpIx0`CCo9l~A1!7RL*flXWMJ?4>y*92m!|otDoa>O$YU zjsmNzB>FqsD=<8!i5D^2^`Vd=xtv^l5z434x(L_$n1CiQ)Xa4}wWc4fvUSW*j&q1i zi9igZjEiCOvI&fyc!EvtduV>T;MBp^`d1VLbOWgMSA0Cjqn4HVU~KK9CFJDfm|7ux zbr+Xzh*A#6^cBW;Cj$r_c>uXkpJ=Lb7HT~1Ahtve1VZgcjvGX66xBeN%M3slzYk{c zGzfo2cwu?Unf74b?ig0cq2il)o}&H2uG#63@ zHI(t6*`?lAM;M-6lwqY}E?y^Knv_u)Htf=}0Oz+0`DJ#wLH>*8ycmjr2bttZ=Fnwk zU`H7>)Wj8`P8q0>-kV7Mkzs5y`)!^;{S$4ym)NO>^z`nQVjZgfr0p=)%}}2JbBD9g zIXeS^J(?Z25O%aNd?lg54-a~fk-^37Z}N!!Q3bPL(OcdXK``9AZC#pZqW8{nlq1pc zREX`4!yL79+U_*Co{aBig<``AH|2~DV)H7WN7kiE^P2gF1|>u1{-5%3P#STW9pg;c z!*_cM_G>rSE|a`xlDkO3^&R6rp&$3lygRvett67$ESGIeuM$9klz5(Exzb$o&s54m z6d!`sfi&#W<=lQ|R69XT$WRt#EQMo$vFCNMm!^Q%m~P)QDA?Zm4X+WyxS;~c%zlNH zz26kA8mq^N##DXLP!(KXIaxh%(e^hj?zURQ*m}0&kdj&Xgn__9*-X zCqr?<=STpZqW_>96?IB~+Gsl9muViw=maicAon5Znd=7!EWUk$|FkNhPUDS-7Aq zAtq3Wip=atPU`zM*eLZ1ZE_LL*&=Vx*^(w#>`HazYqtcD1p60@_tCY+Lt5FZb$LFY zHb1?S&D5jJJ(|X+p;Gn2R0h9LLv0d%qUyP_exJZ=Cl)R#Qjb?<2`4B|jWoNv_ZtDl ziaQ6t;ZhgC4}vjwfA%3n45eYvgS&954TOKeo*W za^lRf@@}`R*!|}Xz*8q7J^Ca`MKk8gxp6P55P@uA;Q%N zaNt%?DusVg2id>VQz>8Xq^+O-!0>wm2dwV6UdiTuzjRto>X-8HwZh`;q)TU>%|09L zW|^O;l8P{!KkrLDuG2O3a%8Nr!>Rh%xM zCq!>;4_f9IFPf9yJB=3I8I@=2knkmm1glAeO~i9yg}l)n;l!1Kvb6O+d2YEzY{w&R&Nc_4-X zLd_w4_*Fhmoz`#UqEmrnzA;^H@dN#`a4b{Ha%yRo&PwNElIUiVTz*sAN()K=8yl8}$*Qz;)8}LNb|>pS}I`6v1#~ss7CSc=?$*7|q4;KorM% z2yghirV|UaGnB&W?mnjx2Ikm?0Wyfe^<|T4@;T<^TVVw1?UUVIRjp6g3WyQl9-n_cLUW^6KZKe1OTHkSKhn8XPd8b>p;3o?o{hg!cPfr5*GMd*KI<079N0yu^@*6e4|FvP%ei)U-`0FFCJ< z4|&NrOrS7Ya;m#fQ13+Tx^3r=DhEx3-MbUDi>g3fyO1{6jGSuqUwx3D)VwaznDi#S zPJ!&y@lbr)S{qlvxEY4E%cayi7w+g%w5@<`jEhl$6k}r`{mGE(oKHvvozCGYP}Hpn^vi zT&OAp@=e><%Sf@iQTCJf;?Xavm@*AZ=HPYYae>%DIi zEALvh+C}_K;ve_@?)@JF_(|2@{0zZ~^~o5GZmpR4YB0YJbF+b^5#pP#gOD5(qssk^ zZ%HSzr}z=wWAssFh}7+dj3E@-G|7JObC1M`#0sSiwyH6=o7x;gSC|vokI;1$dI7)k z$yK2|vCG5~IOQ`w(dkltNR%&+IaMf_2ual%P4dBw?Pn zH#+OeBZ@ux`Z%BkHd!or3$XsPeW9^mW75)=U-kOWUw=Vdsg`hwH)*ijmFV(NvT(7>i1flC48@!?RVIpff<^oRv8zTI@yuXqF`RA zu+p+@pu!LC;D7H{J)GIf}0DcQSe&61G+yI~RO;zWoAXw4lGIvX|bsU0nhB zSYF&(*y3uF`ctK|U>GmTVp>==!lttXS&T|xww(JBWU)m!P2JE6J&uA;on%<0?|2G* zsnj_@xYk{?{5L-x{Ri}_g*@enWuekPGpmm5lz|Z`Ti478vE?c4Qip@K%eW<`7{AyP zYCgnB@fOUJ1bSyG@&QZt>Ul1vY~hBfg&eDrl!lFHs*_wV&AvK*SAsCC>(K3p6-Vh< z$X7qN0h49lQnJDArme+JJ~^KY#ni5I3f6D0Cb4zR>Huv?`}Z%n8qhvOBSMg&f)?6D zR_Ky-S8dob_$52RHZhb2S=hcQ1{#51u)jj)*c&W=b z$jq$5QCEASU(yZ++w|``)i~!!)y!sQ*`L+s%ZlYcZZ@TFjC8AjCGca*LI`#J3f|%z zZKWCJ#0n1vz7#3*vV6nYtk;U+9QCxGI;2-!83>u7LL|20RvMe5aD%TDtmkMt|9%L? zwJQLc%?@1goeuq2qi0)E`=E#7NWi#o4&2hDX)x(K!Y0#BCbM%-hEr3~FJI{h+ADRc zT$0p@FIW*a{8UB8HYqu7t~f|xQ{cZ}2%3=#2F7K{Hm92B2eC!OA2^UOR0~&sjA8ha z^XRnSl|W=2DRG>daC!WW5lJ^N!j1G9F=sFA(f`&ypy4@e-F@4aNQ_)!N+`R@<4kwL zt^pKQ5D)U@bEgzmIuVY7LFkU4>r#0Etr$JUmsBWYS%-*W*VID8kL1HX_eD2& zyv4c4i01aHNZaa1{HW+yN<13-qgUL#C z9k7fBb&V#H?Qs48m{xrwduJ!KcOIiaO`(CLHt8GZ01V$q{<;v(;&(z)p{S2OKxS57 zD1r&G@U(;KytZwYU`Ce}3>jK=FEqMD8}k|6{71%Cs2j^JumNY#d^u%|kX1H5<^Zvk zC346M?4>rK1H0$Un1LG12R+=;`;@xkH+5LgYb-5|bC+1FD2Kv1e3)Wg_Gk{K{Zz^- zFgdo)8EFPClqLIoPXFUaY~HHqmje`!tzT)Az)`z=A@Uw`wZwbaK)M{zDhmCBQNr7T zwvCMED+1YvyK?KZCd}D!CQBM)#h-}9^yValqt_iUu&rz0lE)#N z?F6QYovu~*`F&Fj9wP*v0tk&>hf+_v3QIa=9Ak|Jr7u&C(<4TFQJZFeI&4IGZ-2;R zQy>GxOzg=I&pJT`6Ca=EY%^F-;{d^0JMK{{*o+LZMu^mm1eZ5w_uBpsaseifs?U9A z3hSLpES&6Y91HI`prrQ}>-Djb_M_YqKO~}YV9MG!K^&jd7j?t2^u3oN+5LXYk4=1A zkXwbB$MDq2=nuV?Gl5OGkU%z$Y8VFh{R*~?^~Y(l7t3)eg{8`e(xnQeqa>#AcPwpa zwjt4v5X&29z$6!skbFRegq&2?s{Xq9zW&;*b`sY-uR{pU@EI7#=(v3TC6hcAW!kQ6 zyS~KBq2^D5Y!b@7yF|Rab_3V?XZ&6Litt3HIqI~_2qup08{Q;AeUA$K71>pDdV&vjqKSm1Q zF-4!2k1Se+p=33@|McULBqcgA*O){vfT?LNQ?mSq({BC3cT6b&xj6epBgA8ddQO@T zI{#b{AsrJLXq~ULON<(mzuV=o--d}pw8?v}o-|%jfDI|%@ur!!j;LB0(#~AaQZsRt z+9TA{0^SF)cOlwE(cqq8j5L)&{vH6{UrxN@;VM;UVZ|Ay;tg%+4p+Q{h zH)ZlJ`RF}~$x7n30OsM#ESg@j84U=j);2b&SOwZ*PZAhUQu1dEfr6Ge`svH-@AcO` zg4f@MPgueMbszfextU=sMC7La)c?92PyQ34Z7JnrNFzRmdeI6T@f}9e_jtCwI8f~% z_R1>7`EHQ9x*V0V8G0#KMjZ!T;=>DPT0n~b>O7#?Y`kzv>?+C=S$n||6+?ubiJP_^ zt#Rydrt3S5{iqy2yG=iWdqr~Y7NeRW0T9pH8|r^g{;=lw>XrIIMsl^<>-=N34<@Jw z459{;gxE>u1cuvW3A8umYBTsKkrbv|f3<_ol()SQ{b^j zj94tT4$9-BK|Ny)VnN+B`Ku1TG}hT{K}^oVa62GR(OFoD{LHD^ML_VnU@;j~CpxM1 z&h2_WV!gCO<39BSdc&gxruB0iu3VF3sT!ksCM?)kKP^?WTT*i3a0Ugtl)c#wXeUgb zxRM3A+Izt(R`H)<6mo;oN5@-)XAeSA!;vrlGJ|Z40nD+X3{3IV|gw z94-H8lFt(uUQ&ki!(>)|qyCh)2KzH_3oA4~A_-%ZDFK%cOZ^NXw1s#K$GYX}*CG9K zH|tKr^I*Z8lWN{>Uln!PzONn6^~)NVII+A*xxlLydwq)O!Y&M$#h=D27U@7eL$TmX zL(nne1dl=(C#Ap$C7(MY;(ZUP3Q$7|$Ri-!BqY6~Q=V@+^T)s**4lHxI};w|lsN8| z9-$*gh?+#zrk>_9a2+V*a`fqSc{y4+>$=N4_v@y2qs7_HJ09k`kb!`RnmYA3*vN^W z#iPH($H>r&=6F?oD?c4*lD~9QYad6Zu-_~NLO)-Zr_B($CfdylPA6=59gGW+Kq?Z%!A) z4wS~7K65gAM{+2aN|-oGjs6>9J#g55vM235c~9DGQ-Uq|h>$R*4bYm09b{si*c5Hy zMOn01(kHhQ6Rs#zyIHaanAEl(GY_Iv&1;VbHL-oyk`8c0zJjKKy52zIxyyDDsq{Z^ z{)iBx!}t=wv{qgQrd9~-Y^Vs#-4Ils)B0&_s`-)q;R_V3LzRvHT8@b zgPNu}Q-^Ml-vqRtDpW?nv`M!7lB;mB__du}9>?qVM~(q6q=q4sap6x{VGPEmG~ufp z!jSDlJg!N;DBTOIbfN&=-%CpSn&hjM1(gXJpId)-;H=1YH-Q;ucM9F1Z66!dVDh{{ z3P!DWSkEMboj8lM@1-$w`(No0Z}WK`SQcxqP$#mV5ht?l_2JUEbIFBrh6;*v++C<} zb{cMNbYzkcsCB$?+r|GV`Qau(sC7A*wN_GaaIZU>%lFW2?^N3hDor(u6kiLvv=565 z02TWw`Wzoh;++$RR%qLd}J;J?$d-RYAiH66*P~7U&1! zfN;Ol(=@1$x_{ToCT$<}_ST&D=p{W7>-x$}gBYm&j;YICIAFtl}PHZ@JOI<^HRA}Xhj z_fk&5mEl4#O6cb9h_PM|ctj?@Pn)iPj*tJ!sEtAu6%%U3-3V>1A(H3@#Wzo@ z%D=+xSDNFq$%#%8>ODRhI0hH&;$JuY@Mm!CPg!>uM4ft02qMmS(*N_!G>k4joCNtp zevv#S;#|M@kL7Y>)HeM6#!bstmeG51p>^#>yjDM9q1+Q0`U`Kl2Rl~7`~?&mX&D`~ zJ9#4RAR0Gpdl+S8NM6T}Y{~i?UAt^=vWcu0%s1Rf4$QB>&>(yZ1}0{OGB`!X(?;A^ zXv#Bvksx@kWvU%sJ-_B})9 z)_cXGQ|-X8RJjsuf!Wdg;0>y`UGdJC;v=+k9?0=ke`M(ot}yWDiE6ALo7+fC!AdK* zq;AWoPTZPPK+Uo7-Eo84{q2=|nRKpnxl_B{Rs*$fS|l2k;8R{6Usi=z8aG7p)gZ9} zF(-N9*LDZ89@sdSgWgLi0tqPB8YIk??BR+%uY5Cr(_}p1NK=bVQ%G{ux~fKE>i!#C zZOITflZVIDe99+Qxp&q!GgR0_XHjdC1%pnNP$j~+LqIk%WjWZCxPCh>cGkV;rw!GD zA82sygqEujCm0hk+CE6uX*}3e%6c_kH*qPTLg9oB!Bx`Xh2#&e2dV} zN+&SBy7mh)*_y(Fmk@?|XLzGuhHln_A;XQwG{ z#u{_UK2aa9=GKGj+hjXzAr3P_>)xG)GrvyKG*GW~C*WY{J@kd*S={!2kwm(GX7puu zg|>=Y^3YAN(mAWDusXv+9R_H)n3i@7QsdRUJ})d?2iPT zlh8K0{c{2-gQkxQSPB*^CdU|@X8clhPk!eIURQI$@Vtr3^q%!FizA`8f+E~E;R^|7R{a{* zDO_9#H~Nle0JcIhH%9W@PXqbU0SdoZE&btN(OSb^HENvqAImuNFj{rLVaPsY2UMT& zZ0u<;z}^RstZ$7@bO|VRAD^?0j@a~4OANO&BeJ*|!CU zI?A$3ew;T&A96KPk`_CW9NJnK0b{{uNH1YO=S-St97Kz&haOE$Na0~*(N%1-CjBgR z9Yh{?(iG_JSvT)&B#p2Hi}0CQRBW1lRc6&NR=h@m9#DR;EKfq~V+em&DGM#=Vds)N zmhlm=xl5XeBIfb5eD*jU*8S8DdS7T!n40vEf>{<2Z)7@*BK-4SFotsF!1I@Gq1w;l zB4k++l;dA+XjL5#TE6%3?Ke=eQ`QZgFHi9!vdd(1os00M1tRJl9($)!{GJDjn7l*$ zD>AkPb_J_8wP@Vw;`QqIOG)lUxL@0R0!hMtkjBG+Q=js-4U1e}xU;>MvR1|JUiCfZ z6WL+G@NTNRMvoNgFC2hSy7-dc_=!QL&>xA+f=#JEbwcOeL=+BbKc=A1^p=Z_s@Rlc z>t>B<(bQ=uNXav6(-rD?#qFo`?4~JjTM=Yim?V4vOH0RtC1BO>-Z0dSpP#S&`#3Fj za~l$SWKV%qpgU1QJKe&fLhRXo;h_}f2;A0&7As-eWvC67 zuU|xDFxQYNIem9V$&Cy@ktZEiqjkc-1p4|_qS}ADW_qm94gcN64};Y#wML#LjS%GB zlxUSc_((IY$0)HMqyp@Xfrbm7r3VQRncDaDx$y*TfBiCSU`j|X3j554|OL}|G{}_R;cZ=Re}qu9Se(v z_fF4fV9`HIBtOXCD&|90D_*1VOkFR(XZO}$deaWFWzz)_ecwBLh(nYX-}k9a0=wt} zXq@9VVITREY?psBZ1WULBT=H0_@ck^XHC7fl13Edq|T-;GsUu${u*bM9V_iN z^`JU|QS%2OQ{|hs+_o*`PrI^nLc{g~We3w~pi7rH&F!Qq;BwVTQifdI*8^YfCMFa~ z0BMawlQx16$sqctHrhu0`JRLY2Z&v1SMmv_Ou!y(kC#Da57=4{)BS6Ux{e+RgB!LN zwPx}HY&z)D7o+P{Qb}no5J&Y%Sq8E~Mvq;JL_;79XGG-YwQ`uB8W?=Pgr&8PxAXGr zgg>~8$>sRWVeo=6F9Axl9$REtp|o48BQ_vxq)SJJTk~3xjqfZ!85#`z@Y6`OAN!uZ zux%_U>ICJo$$lgzuZaQU9L7kUi3lH`zc%3Q02r3xBV%$CoLV{4m6~4^?afUiXG5zI zt5tIdVY*yoNGcR$#X(w%@kL1geif4+RU85Gps^otOr4%MVBHmo60W3)HJ#J#5IZ2Xq&vX@|W9)DvFd8Fc@Lo7{)2Etx>r zZzOR^-#MTmY*uqL<9HO%DzD%6c14SphYa^+yaq$~{p*wN0zz@*S;u1R(frsig7#LO z_p0vvwyRZ&FKn^6-0GBRp)zd>f>z=SF0h6&oqd&1RD5yX`4D?Oq$SB)3x1P;{xN2&Y9sra1Xl zywR^%Cmlq*QG+xmEyS?&@4lwsf?(E|a;xLNTuNfo#YVvGd*Z7uQtA>CgBQ z&oZfw8LUZ4{|l3Bx!PYV2OI;bvY(2$&q7NeqxXo^o6W)NPh?IVOwaXdL2 z5NmNJReuA=e`<_ZvCSyX?3a}}hsKU>*Dv6A(o<)SCikb%R`KM^x@`OSHK|ls3xeK( z|4qAtq_5P@qiqFya5|QkPw_fa_5DB>#`C5^uYa6|_x2a2;?YI;jqbzO*+enUXV9XQ z>JuVGKfT6r`-D^N*}R}!uB@|?K0*zg4%b2?v19yYmydH&bd!8M?!Kk(3Et$3VP*Hr zInSrOBL&go4zX6XE1%k*LdSmC^v7TAfe_w&h7;kjPLKN{Ww>5$$Wd%JnMc6ooss+T zuDN|EsEwY{QVs_&BpMQNKMFf@kx_^RvC_+c zs(GNE(KS7Q99?o)iO<~mX@N%(kZw%w&jMxGhgp#-v}CUpjow={C;frX?mFSnhAU5cjeS~?+D*@BER8a*35Phl8)o~)NHYkr8KUG0(bFu%aeWd37icp z3eg(AXKmG$^ac9*KVLmgwDEPR0sw$7%ssm% zw@OTXOrLoOnfQ=BhijkHpSb{t62utia?$gBIa|vkMm-O$4#5jKdknpG(g+crHX7ZH zu1ZK7By%L4P5WA1Y&v}GdkR~mrS(moV$;+h3F=Zh#N5vKKbz_j@Y6ih`S!s0p$s|h zk9@EDR}K#WSw0JvFMyc(m84&9=YFc#z4;GSzp%D|8K~$If~9MbK+KJd@)Rxz~KSjPN_=pHJaSAogK2@-a*jE+KSAWDve%*atAo=A3 zMgPtkC#V5%`b8Q~mYPt9N44N4cm%0fPOat}cC>^rg5ZQ@;Ojw{Lpg7g$!EGc5lEqL z4eZws=9h{JuBCc;cv$jzzOkNO%7oC7QNq9g>Pdvpyi*qKGoCNJ`cCs6zpqPUH--n# zOq6&4`q25ZK(9S!)cB-@;S(Ygf#FSd=>#uB@_UbzN6`{F5MG&0_dGegi1=Qu_pN+} z#z>=gcyh-yI*M0SM`@kX%>uWkS;E<4S+)~7sdk^6jC#6sVff)UUwyYfZY{5C9>7s> z36e8{#=$4NODXHyEq$PU#_I z-yXcHlDoUmp+%mL52-3>c}HVfzkk+ph^#|xBY$vH*@p@|)AsUA5&|nvVU?UPLC?Es zFtIMN_vmkNV&w)jV>D}^&UU3d2uR_`OOY8OgJ3_t+H0xSo$B?C5<~~A6QIEf^jaIxS=9=!aMSYhr zI&MZ|JKvT{c_ir?heLCFZ81cp`hH}JGzk>*wVV)>t1xEmd%YpwEazK&L=0rZNkID@ z$@l9Jy7TQV!>Md;D48jZd#cLJOvyCy%eQ^7yZx&S=CyX01t^lX;SGxj= zI8cc6VZK_1)#J}T*5qJxDGIkO4o-KBaPhpu9Cz23hnoBLvzD9vFK_uV`g~WJUtGeX zU5U({6TnU%dpIlbk8P*B!C`BpZfp!K)5}k%S)ZqFmV=X&0@lI;aoqry%HfQt+5K@} zZHBC#1j%8y`7;A}&o=e@pry`eT&$uF*~bQH@d6<=Lg?tG3y@87bXwk?zBS)6Q># zjmYfc0i$ItewgNf4PvD}mR z<^I@;D^M;yPRm&3s^Ci4uYzaS8N}3;%SH6QRMrtiuJcAX|g&nbqVsV25eYcI@QrTa97XnlXB-S8m$|x~#dYQgFKjxrA(q+)& z5V?F$9Edf^c^rzu|7i#>cGc_f*Xz^N*qCac+c(L5S?Po^4a2-&$^b>Ggq&eEKjsIO zTrHqHqwVO(?y|;kU%7sr9j>Y1o67**yGMq#zD{ee5X$(eF6k^5&8W{U!i1PJ0F0qxcNxx9{ z3kOx)CZUy_<(Cisw?Wz>N2==f1#|q z9xJYGWl5ti*%IP>&8gcJ86TCjG|@iG@76^ul*haW^PoxU-#la#eqf}j>A=!Mvdb!$ zom6fUo*cqU)To^<2rmI9E(axCv#@gBV6BMyJE_xk0Ke>g3}SyW@O`co`+f~)u-1fD z))5V&7PPkA<9#Nzsle3Y?;+ACazHdFu6G=r@Hdpf#}WKIL*_T}B6L>V`QT6pW!r5# z_$tSE&v7&Od3y(zjZ3wl(!^SmDtA8Gq;QMj&zb?h3Sc2Kj7k^tY5SVzSNmBS|MRsJ zzsD^@>aYtoBcTSFnYe-Pt8R1ySZ!-TMp=Ak!^JRqt)?nJ30o2oNVNR0gX*=$IE3t= zE1&gc+cDmH;J3nwh9({pGlPyH8xo&)B8=Z41L;ct_FYM~OOta}eXy0YGf{;8WG)`B zE;~zq7ffB9u!Aiyj3IFd(0~Pd1!t{r(g_meDs+#Yl&~#;^+51z9D?~?){IYaa2>BN_47|nzyi* zp&PQ@#>iJhDkk4!?3grjly%-U;TPB9!KjHy!+|Li8NRus+Hu~L4b}drw%`G^Gwzy- z0k)e{()Z&Bu);$coMFKsUU3L8R`Dl9=TK;kQqR=_T%z zrO3{uhu84bUkh%C=#o95_4EgSC3WDnH=E0%8K*1|R^xx{E1CzzyBFX2ZGq3c%18#C zK1!d!_Pra#)AmEi@_cgqbhs^bOdJK%g1v(d<%%ias0-cmz@oV?L%o#XA(QtFZaW5i zK!dT2q9Z)!^3!zci09MY;b37GlM=ZbY~1^R9jHR zGeOM0wg^=+*#!t^uQBX%MgXBaS)_DJW1y4*S6=-JeEJjb)F(0m)z8MD)P8E!T?kp5 zY;P1)+#9>(x#z#v_jWi~V~-{mq?7{2bT|0ZPk(0n8{hLMZ2l~EO#vb*H)RV)Sz0EM zmaLdq<~-1EN5GZFS|~%LG(=INeI8?dFL;uy1M}Ux_luKKwqcSRfClER-e2_hmtTHF z0FXim+M!I5r_I)!Q6n&tj&Ifi0I6Oeah#P=BV`qfJXP^F&EusKczVk)i$cSo#~59; z2riKWS;Zn6s^cGl9T?2Uq{k`Bvht|dNJl@LG9@5Q(Fj_NMa8UADWin8c<%U)TNT`B zo9Ch2(?~xCHQN62%bxYWCf@gvtKr1g7iDd9%+)g5?&XhE`14q*q=InFfIQoQBgei8 z58V6L`U8A)8f}vrDO-7eBt{@96_N{eO-EsjwD;@tQn>c$H)8vagJ@~OsMX5RY`R8$ zRAHp;`6@OK0v?~Eg98ADoA_&4a29 z0Ewt=c3$W6-#RCemX2-&5^ZBoq(|Xc&g6DH=O9Ljn4kntzmZfzOdH|Gf!a%C7G*%L*^*9`|Md>Q+TzY@M`h250dYzRaSDT z_kG$uO2BnJ?d9U((50_Mt2KqkzVcyqrlSBZN9WnA$;%OI?CM`*N$9IcDzWXd=*vZk zrH)Z}e+J5ZnSQ6wBP8g2ty}-)L1tCI6+#88v;tH`Di!3fb?ojJhn*86luCUuS37J8 z0py+<_#FpGTtGN(QEP1w05U_C#{hyt4Iw2Ux9`U#hmPR!uYDe7A{~RO3!euNV{t*E z(X2bv@=>umz@XY|3Mu~?z)M%;6SsQczNRR~9|6^uT2TFIbgU5`C^n}^^`;c0#x-7L zI??u&8Gg0jQg^Jzdz1ceSrg)CB|n2F$W%%aM=B7fU1^Bm%QD<@*(Fm@tJB;YNhiy) z?qlZrJDNNNR3Gqny!od_&vBI(`F41*F_$g=yJ82*rNCv0G(GcJo91fiKq+)92qj0) zy92d5{+=bYg>DrTHRsa;8pS_coxRd1$_{nKK@yvdbCSfA%%n=mx3|?Chw_kV zqpT{Ckg_IQJN%KEs?1dtbMvC`da_A`b?z^op()RsXjEs&c52VrFM%tk!kczR+8f)kp_X6iT z`0jW`MNp#0*F^guwHIH$ecMmJ<;WF}n-9^xjK&A4Adtk7>rEM3l9bEXax2H`fz>CG z1|E=yM2SG^B#vGXHh=v?hxgtCRjSd1YA~gZxF3&_FlRHt`6Tt`vfKlJb7>YtxpdB^ zS(r&F&ZJo*lTutrvT!=f!t-e!&gFSHlVpvVEDz^$8JW+c-QxN;N%UTG3b?ZD7# zRJ4;)Y0`6g5KG-iB`Z-MM5R;=7Ip$l+dMiZanCX%%}i35@)}Jhk%Z4{8^S0IfJNQ8 z`~X;>pMAh_6L?;Lc{hXWy4v66dGP&leEE_0!x(N8ktEpz0NNL4d&n9~f=wiq$Y5#u za+Z%!dkbQ5*Pmax`!5BseJ;%=T);n-q%8r6={WTh0kETDdw}h=Qilmm7aP~ z{W6!BPqHA-;0WnJNEgEK0WXx&%cKZ$+4f?$?X+>@{=Fkm3Gxio#vbG)u{DwBDk-uT zZA_bQK(+hUo@QhBxw%=bUeQU8V45U@b8O7O-iLs@gr(H+QtMoG` zl7>bvLaE|!rRyilu}@)Yo#%Vteq;nr7zp@|=Q@s*LP%yJ#qPz54D|w#kPvVH&w&sQ zAY2H~hje`jKahD4=2;M=Nf5-hO>KV~%0FfnsvMq5KeLX-`Yj8aNYVrn!2FSfO6CVM z+V%iAFWS9h_Q$R~^yZ)a%GZA#5M%v~wpqS66p@7P{z#Ej`5v`f?k$%we?_uoub9ocGCJ?ZiA4GV)D%Fl^Ic; ztoBqupm+J(APS{IodlM^LJuB{q@nVf4l>DAzq_t3W%HFsl0)7tL?C%2@tcF^ZHMEy zaNP)wtAgpNT{pt@TKLk#f1!7h0u+&S8BlB|N{>~NKh{_~uvIwKr$aK0lez!3S534Y zf?6%u219hLTFu2mF5S=0Esotc-=4U8c45~;bJ4DcqjdLt7Vm@OcqOHh=dnKO&`KxZ zIJi^)2nk8!Ox>qe998q;l7jAvF|U_Ww&UfRY+4dJ6D6G~ z05B`Z9`p?w5By|2@N-!4$Q7-|X4uMTBR3+tZwXYeJq_SIRLnshC1$?Kw`g+QsrVHr zuj)?#7=Qgu$G-BJQ)mCMF*e@xTdlxtG+g+B5Md~!>p}P)q~oc1h2q@hLX(@4)D}WO zQ7%HJIkH3`UdXZd!I|h9H1eAO3FXD4OX*5P5|(jJ1O8v-;+a+o#|e<-*;BV%{dSnR zX9Onhxfp$o`bY|uoX$ddhK;~@t~jN)^Y$`eQo1?8iKI;BL%CL!7erD5M5^8PG1{iz z#m`)S)uW#{d*K&8G&A!y2;mhTzm9& zxaX7aK)X$(e0P7OBCuI%UMK8dJd};J%RWd!(7=)F--t%jM{5LVG$qEyo4TA$Jw`?b zFw%CGMj#bnszdH4SCj=OWTbroi|Lmie9iOUf%4eEjkFh`ud6tIlT_-$r0ii;B9O9y z>8t@?3 zo68vKn^loXnE*Vdh$zS;QD$OkCpI$wCAlA|mmD`QI-lo;0OlaXsQ!+Jarnr;!xumQ zN60b~*pCCa6s887ba!!?NUE`J!B;pswyV^SIB}4r5_v9?IGG1<0-dB0Th{FVsl)uO z<%s-_@z%LJ##`sGcl%eN2eh+k=Dqvm`Ah!p?Cj+qo@-wRKijERm2@!ddxk`k4jzO2 z?{Gv@1rT7tX`i8}8<|8Cx$8jfKquT{EQl>)ik_7ORv^p9ki^qywI+(mpi~-PBuF|-DD761>Yr&DH$yc6 zKFp0->6^G78pXvt2TG7Bp5P=OU$D~emZ%^Qw+=d2syUg|{K;3o?CVe@!x;E{vi4B1 zp-Q4I064YxzQh~qa&dH=mcB=t1f-tjjdzTsTdehnN)thmuO^!tnWlldb7 zs;veABO%IFL6u}umQCWiWB&%9`Sc&@4{*@wkEGhuvMNm|e-_*aDTK-+cR~?J`%3?E z{SB|d*w{9<^ID8nD=Zml2ca?24nspA6-L^wRbD#;fh0A*!OK>;x{J!sq8Lcx7*V|N z!ROxiwsGHMU%2Fhv;eK}631_rrSeq13*(SwY=qTSA`R0>`@NT6So*zc;7t=CPNMJK zv+WTmc991HBkcEHM3DU+{@m;5Zhy010|0R-^cN59np}M2uE`VpL>_C$jSrlk+x?;G z`Th6KEFAc9oE(6MNws348)hY`#E7RVLaD0ct?HVWN{+gaNsjvyfV=__-){U`9F)9T z$WV+**V}EJrnhgY z#MoN&Fyxt@XjmDOxlZ&NDakK}f`*c*3jj_5c=F`J;tT?)xset%iAa(ip)Py2+Y=5Mv z?2j~Pj8jP<1yDS|4j3bCQyzWz$n&sc>S|?}-2!}n2Cb2CW2D_Q4=QB~f(j#TW^KW* zV?UIXdlbX7>qg^4k^pfe(Qd~-eEB7Be(|2ES(rO(6G#zA(M7ws@!i;Hvk4-QXjjbv zvGOF+at4h-NGIE&TuP%rN;Nwdwa*D5rT{!8rKDBB1t?__ACS8xk^FbZdY!*k_1x=k z-Hul}k4qcD;`i>|{@C~K-ToL|nY*UvxBcm<3zvRmdf~E%+R;_;FlI<4K}wzqLP^W% zatA%tN%nQ`NL1MWIRLWkg#flIHrg>t5+ak*w0vGf9&uHYDt{AjT?x+>?7T-YePI@k zGo}Z@OL5J0Z@?EG`V-_i?cuRY-&a1^m^#{e$F_|FYCDChP_yGvB#@@S(H zILxa40@UE&j}-3J$E*6a-G}Yh_~+!`xo6ws-??YoAKrOk?)~5P@RP4TA>&&L16SI~ z0upd!7s-6psrN!bBrPJB%21Izq=bQ*GJLigl%_yKPv(sT7)`e!NzNl|Y(pag4qkQ) z7tYg)rw29Bnw4YQXQ{?Ihdu7Gg@AfITsahK%A6vs{6L}tVk8&{T@FB7&OQb8cG9Rkw?h}w=2 z!j)1!f$}vT!NpT`5h+MsE98YV2a~Mk#oIg7dRwTUR6>&=w$V0#PxvaaVL-G^9-e3+l=9U3w!t7g6RuS;N*#~=ueu2 zB6e)@K3S5{cBhec3&u$M0F+WvVekGcamm5wBWx(bC=A<}m>gGSY$Hm6)M)DRHOojl z@X^;uyC152kctY8%#@#z4^lgtdG6TQul)QC*L)dfY|Wv@;5n3ikfbTT{`<*qC_OQ(hyf9BMw8e3Y5?;Q6t+BN7D$y z3GCT(4IaSz^${pAF+soMsGahPlC~OaimGV1PAx8MJ+)c+0gUAz4+Cy^+2U4TlI7r}S6 z*|kTOljAKEUvw|wr1nnphJ^9t;L6q^va02uE!2HG2jD3HCxj4f{Mp}*VCOFN4j*RI z8y6~8?v;adY=W_zvy+{RX9a;20qsQrV7CzBtd#PrQ0;LVD)GHoBoZl+NTs)^&x_PZ z#>2)YT5D+7M3O+KKav>6XxjxKzH!gg^nW|F?`^;Q^%K7Yh{^s&+kN6r8=Q0^@~h;J zq~lJCJwvNh$}VkFKab(6!>`8N?C)T1c3OYZ9#k7`v%$7sUZ=lL*+{zqW2C(w%FtV3 zYjj|x0Qrgvx6G*lK>0&C8)L^|AD!~he_`kULsavDwt3IXD z7o8kM5fCi`3kxySKTm4J3rDsXm~C!zciRJ>*pwcED$B;6^HCIQ-uz}&0@Rm1EEA$$NAq?G4i#;<-!O;x`J zs{1jKNYqzD{b*PZ@_C?Al@vhof3808vFlsmm;UpkPy7^QJ_V__LJjp$NFEIKicl|f z24N=vv9Fp)Vk;QF6`&@G3MP_RO@bq%6NsZ}j87cG$Y=xebF=z-&^0hC$EA`s_Bl0H zAASAnYFrdhf}{guv1^Zn?@RbT5QG`RFh&?c-t(z$LLLLugBe=e7E)i1B}r&&+Fu1 zd7b_q4t=@82WbMTf~D+(LOPM33tk|!T}<#T@(=1xd`ow$*9*#{|(jEOdlH*_CL*KxSMx*8;syTkz_ zfNC(RKCx?~rg@w-&QvEzX{^fG78iLZD<&@?1n_-7C<{4PmdT=_bBIzSgz7YmXt95G z9LV4LwW>t5o5F#JqYx%hr3p7=uM^>9lS`EF0)Tk-#K?tbPmFvRz@2~e^!a_i`1qOI z?~4|1g6D>M2Q;HjDpU~kx?_@AI{Weuy-{2%{dnl<(m?gUMneUu zjfUDa(GPNjslb7Qhw#PEKMfN#n}FZ0-LJ8JP!mZP5p0#6j4xAbYylu{xlJMnS>Wl( z!Y7axc^p^A8=`ZZ;;7tyyvKOaFMu61z#T@Vw%UreL08SIPMaiz zIo`dG#6Wvdy=M23yrPfPakvFeP+IZTa7Noik_Z6elP|jc{o{ZA;bXH=`xSs-M%%g@ zF2`uw_D3QjNob{g;4Afg5UB5zvGz^nn$*@MmA2&$vUCTIT>nx$_}RbHpA?{Mv~8-H zdhW!{a(7e47D990&oPx zzx{Tp2@-XnqEQ)=M85MkIMKujCh{TSgc5DHO%EcO=zW}2D!$*h?%wv~x9;Bd7mr8D z`+o4z6VLeb)6>sKAhtnLQc0z5x%!#PYpBeva=IU4BIRTf?I2ZLC&%m)HyZovjITCGS^LkKS{T)^UD zii*B0zUM#7qC6|>(wBkGfxOh0RsV(KKz!?WNH{|3zMH{u6Zx*+|oY{nwZA* zqXDz>8U5Jh`@Zn!C(iur{c-ze0jNnQNzCUug7uAFm#3r6rr<_^#qnVJ9EqbyUYw?Y z7XW?&c(F-lgAfQp6^!oObr4_t{3l>Ki5WkO721oD1Jvk?<*tZV5)(DLLmKjzldE|S zIJrsefHG-8$rq7F9$VDm8)6W;mA2Zj=f^?*XDRPl4wicSVOGZnf;9Jp$B(w>1SQ0A zYy$8+GfBT)2C$V-t-u3(Um^(AZo8r0y{OU9?Ohws`o1asAdgJGn6p&S|5IY;dcd#z zynvdoN1^6x<U+-z!WrWbk z@-6Dz+@R8EyOKbvGSY4q-{p#{o`F4kjxoQZ7!#A@g(8W}v>OfeOk-Fv&ai49$|d-9 z>W4}rZKe>SK1Ka3ilXm3wEr!yKd|RKOtwwFi*ry)BvX2QOgW zVgI*u#mj?T>*W2uY{kR09A3*COUR}XnW$W%4r z4c{i=I)HE_94Ck4q;OrxcmEcBATO!ma=8L-V?klzQI z&l682lu67~cTU-AVY%&u2qZ@zGw9)@p-RRCJP*ixO&)osoGq77TbM8Jlq%2B9)t7T zB#kNaMIvIR8)j$A>Vm?|c!k=dv~nz7iWJ8tK1%Z76(Peh}5ckrnW2EH!EXHJG_!capG@&ds#_Kz%RYH%g>cG1AsVTO6DI7DYh2eg2No(ck>ln~!`BWx0lJq^*3AuD?OW z_EChw%$(18%kV+sSPc@X)%{OZCt14S4vcATHF6dN08ELL@`=8MP6A0i=I7Ogr4l%5 z;8jW_dsR@fp9O2QRY@qlj}uBlpy7*^|_M|Qa?PvkfO ztS1Wb>eoy7zLbCdM|#FrK1eXz+>YvVi=m{Yiz7LHem;)=SowYF;}`Ym0>=DaqGL6v z9Dv2>AdreLgMvt+XG%;1UtQaxq%Af0Y}KBZfB@yiF3$rpPmLvsWBdU-;)4p(y9&M3N5iz0rA~z_k@PPW11smM-p3Xp ziQMb-=rA5~om*3vRY<@VEYp!jnM&Ed6XAfT>#E^U4G!you|(IkN2E9^L9XND-=m&D*~v`bscr@sB&f~ zA_*o-Efz4f(YCAUgXe*-@KiFY6_Sk%4f+(1c!Ox($n*APfT zUxNnJ;_hxJ0?AZ4wMIs9?R9TJqv;f7Y>nm|8qHDTgG6O)p($arjkF637ArpPcm28= zY3pkfF#;)$fp&CuyL3MCu@~OZY@#gxZ#`S-d69*dRwtXTgdW0zDW4Ng>j8?n$hYIWAA;=%rw=lPPLIRS#EN zL^;&ZoX+5}m{85?j3$;OJTI4j^t%~MVoD4v)k+hYG^QUTFg`7XIc`&k{7e(^uzp;U+D7A4_;!FrbAdVLy#2kc} zDjR(BL&-+*I#;4?+kOC7UGsc=@$(WJ!d zRI|P~KY#u&(P*BB<7_J?9IzlkIRB?IFYo>vXrjp*3nM}>?4(G zhZ@!3L{f&nM%%}3l=6Z5DCTU#*rE`5;s6kTaQm@)?)k@${o%uL^dI0ljbgzRV)cx+ zg`WGu0Ena_UyAlX{mg3b<{^-!W4Qi?e}m6_`j5>AboED)Xf!0K98iI-!8odnv>nI6 z(POX2$mnQMw&wdY7#STe8)-KckrXz{K1hMD=Wf^dAPqwx@q5k*q(Tfs1g*|%qG%CO z`qYE3c=oS==RRd4?FFbDAuo)ylen5_UZ#<@jWrrAi8LDslNGPcKs5vy^@22wG0&*3 zk{Til|(}E?;VMo ztwy3gKm?3ur1|3I-z??d{|!y#1Q&XXXdy%npo#aq_Y-j4mzVl>lA@@Ar-_7@w3SKi ziZZq;*poRMV_aADZ%!n69^h+}U(X+b<7CKlP9murQ<>z}eP~Uv9B+;qtBYdg*il`f zAXy#b&*nI4JQ9wMQ!L_$N&q@y3snDJg%we$4T)80lgm8jpy$MmOiM9^WZNERCbpzR zhbPlpwM?hf=JoY(977}#aY}8UNTk#%+jN}HIb~UGN~qFM&ohdFZlLmaDyb<57`;7jiKqvm_>JeoS~=R!D6(dYUZZ4Uy<%R2m#pvWXr_XUB;+qme1 z+B@apsvQT&vVAyw-oyVc1b~wO_OKVP zt^C}AOwcuiWFniTLDzF$TtvarQR3OHcDJfQRH~BDS^CzENaDZSiX>LzR!oXTgEfhu z_~zG1_tTz&1U zasJ%@L7JveWEv-u$Y`6HY}b?7x&T)o(eIhQKYUk^OAbB*z^Bn!o~nYVI5P6|DvvXu zdva#?U%P*Db+@w@$=D2p5XTZQ<;hN6=`#yifq8sqRlX zAaX;jRucv(%41=F2qJh`qUvh@70)lq^HjhcO1O*a=WW{qoIOJ%k|}BHrVy;LcA!2| z--mSqzH)34NxUD^YBKo^7D+Q3e+CUgFUGxJ?ay54;}0Cfqa629aGmiW+e(^CWo#=O zh;Iz=Bp2p-0ERFk@(6mtkVqt(JgVBPW~rdq+Hq9unj}D&b$>sVjq${-P)S(1z^ak> z(maPPCW65{-kjzqirf{V?@#-ow*N{?{0_jK^iH}_0VNUv2Xuvh03Va0!Bt1WuiS& zCXgBp6uYXDvZ~lkl@Un8jAOiiRvBrNa;We@iss(5f6rUK<>20P?9QYxJF$@ma0)<* z>yF7nfy8~Ei+-6~eRBDIvmc3+LnRXl4BII?>Rs*0IL{@rTv3xww?lV>1SBRpcnMxJ zSZau@LDG(ENh)D>>f$w&vM7CtBE!;E8PW}+VzB>ad#qHclWf1FZeB@+DXuA_vDF0P z<=-sz%8N}Xk?AjyNfY|ff?{-C0NCMs$-TE-`^Vq^@Yg^8Yfqj2PssC;!dXAiHRXZ^ z2Yt>tDu^U2xF|yc;wb>TATV0;N#boI6za@N|H)TDva^u+o}wdg_EzTGarL#&!{;CT z7yX};P=m-cxLbX@EzoF4WeiNCWR3L$3RtW@E<~gJ1_qmTw>^Oz=-Wbpg9}1Bq|?FHNY95&W>3o1fhRR39D? z`WUqP8!u^t9%uM?;yCJ@d>?R}1f3;q(wH)WCB!{~^ct&&noL@Mu+mtpOLX;DM zZVHT*CXiOGjclg2XC=yZG7OYot4xl!SRB!fIORz%DU@g-1~4o4w)z)Xep{tQkt|gU zCB4WL+Rc>~or=7Ik;v$tmqcI1U75bwi$v0`xbXML^~q<&$qZ+z%0 zZ-LDB!P6yeL?-3p0eJEf2xnV|>2~)4<}4H|JdUCsRp?LDNp9|#!778Up|y@ejb6%D zp&v60IbC9Kuo2!H7-8tGPiXA zM)*?DPjDO*{(rp)qov-%)x7uXrCqJ|d6Y_*P@Xe-CC0!OjvsWJuOd!~NFoB2RCx5r zy2ZxJ1s$Kw{k@LOOKA#!mb|(htObg=mL=4XD!zr~=}Mr*a4O{|pQ4pIce^iCy;kZQ z=+j5GYJXV@>^>$;U+QhNO=@^fBsKN3`0?wm{Mx^sx$r9=n4b9ofO*gs0tekkSJEHJ zrSAisPg0v<>KjO=O6qt7IC}hzxcd|DK$1|s%085dB&nZ$7+>52;1&=;(7=)F--t%j zFFcRJ#wkcbK){D1Q8H2<2AMMhH=iher;A=lv@~IqG6e!n z3|T4woKYvJjg^5^N(phrRpui1WAOVWpS^zOzgH!vcA^Tf8q10jH%j_q$B;-=1MccN z@Hm2a*()VHU&{Btmy>{0?luqA$tIwZ+yJ_}f6JcjC$DSP!SN;oT3A>ZEA3|D2ReY&=83MXny54I-6RG9mlfO6 zXEOCC15z`#IB>l&9XO=WV)i`f7Q z^-~onVJ*~V6(q@8k%YGTsaT-z62lPq?t%0(SI@09dXh?YA6a>DA}K?)(RQj7E5hMM z+e9RBHBtk5;`ztt-E!x?_kZNtr{d_faGh3>Z^l}Y7GW_Dt0F!HD{(he_{k#>wYd-9=|KkNSky9?-Nq|H@{9SiD`sgPE-KlUtVlTzj| zjGqI*5kL52qF}xwy}C}sPLfbbSAZxp+j%Yx6Fd$p$=s4e6G-|wVQK`mOH(eToP(CS ziRZjP%De7VH=2k~nM!_)_9f+M;4=N}X(8~RN` z$!I44G~l^=)VLI~^Uc+|2~8?O>Q$QpbNc@W{2JZbG#gK7;%yWR70EFx@BF~zN>BB`Xl2FgShQz>*q zvG|=EH9q~m+Nk@-8bK2>^mC=rwov4O5M;DXx!xjFeos5L1^Qsl!!Lc-Z%(}LBiF!* zZh~;!f*2vAZD=xSxklTrqxu&2M+ySfUOXQNbCfM=s68jF(j)`M^AP|CarL#&!6RR| zOMg-b;1Z~e(SyoqTTtqw1K>LuA3pLtOzph7@H}d^fUudN)pConwq{d#AT>0BMBbr6 zVDj#gkv99j{ZJx^IiaI-ma>tyL=?~b$*tGDxxz@BDvO9fQc9jUDytGZ%Gl`ou1=rq zMIupRMBB-S07B%_EBuE-O&rBhS)GzgMQ*G#E6x=Majb}w!bB=DHzLayz$9<-t~*Wr zWR}UIT!to+l*%f5V9*<22Zp7|tPhD~|L! zT9;+f^jXva)kJ>=dA=8!MII4>nPtG0SHBo1p7=8IJcsh6Aw|dxj2bDg)ky0Z9rwc~ zkPMMjs`b?aX4)lb>j&O<9X6p-e;S3#M#e5L5!U4C zRq{h9VYo6jJ4lyZ`XL`zNS)-m%JWFdb5P@gZCWTGMBPCyCWN>Ip7&pRzNaRV))@xq zGHaoB$W<4vu~gJUUw3p-;Sp)tjU-)hVw2`PeQc4M`MDB&?xmMVAz+g`Yk=H3k0RN$ zmX%8XLj)KrkI&MzQ&1JC`^V}+Vj!b!9n)!}?F^>u$@WJQbe6<@;+t5{Z{*i~$%O@x1d3 zxd>$L2qbV2OTdMI$bmdn4J8rU&MRNJz_uWK^o44tK%4`S1QJN30wNVsNGJD%I}Igw z<9|z5Ci^SX%H9HtB}2tRiIM^VVBfUgLYX1r|rjGPZ27G0dN5E!f%ua0xAFT zZz*FXGKq|IiAZt*vMa8~qhGooiug3%G_@LOqoR{M z8t7k!MA3Jxe(MO+=cqkSU!a-9foW$up~juPP->(m0D;ME*O>`2M=4;gY=)v}|0-^AoU1q+>T_;HGxPXVraYZ7~cvU!#VNI?=1Kn&_tJvR|h~ z<|Quj^n&M^g`UD!s0(beXst=3Zpf|k>2+TA;uBXn)YyEmjkbkA$!MGBh$tCtb0Uen zaGh7~-#z{Pht9tBSHFJZ7a*J+#lm7j$H-9Rm^p?w+EyoJBILp!NrQF+&vHfJ5aGdn zj>{(7K$bbU=E&=?F#p?_nLe+N)C6#-^5e%Rw&9v1uSKH?R<<^W@rlXeciN4Oc4YGd z^&nveJ+Fih5`Et)Bkgt@Xh&zBF*^D?zj4zMGSU|MMnvdmq@5;)Kr$5^t4<&R{dZ?0 zBB=pgrZM*mZ~qyn)%F(D>N~NV7Zbc>YXNGT`$?$tCuyHLM=mW}^~s~xvBjyYxAIOCz@sw15aLBImGYnekz`kN&4^IqilqFO$+6i#yWy%Idc%DW zzZ1ZA2+>9mgh=9@N|H$D0hH^{hfR2FBFSN`Nt#`(f&h^DsM=94D=U%W#O$<}Ccwc< zpN+44`2k27z>uJ$;A$ixq`JgxMy7rRt}S0NRUOKj%Y@jpI-R(gFRL z0)2_=j$MLAW6A`5Z0xC0AxSv{Atnbp&4CD{zDH4WK%RdUYO*RwBzga5I#)t#waeO} zqugPDpryV)7awWL31$l5d1-;3w0W&UfvTUoJ=4#!%g^?+O~hCIT=f7vubv=lEEB8M zgh(cV!HJ>O@(!v|W5uE8e%ojpFho+80LSk~9J}$~;?p1h9mKJ{4U>WI z`#5&v8_^nR6ogT0B*)0;NQpqAGPbax&V_bi3;eQ?Hhrg+GSa5}mCUfCXm*TISzyYgyaeKr1 z++M^IkxHCIB9pZ&L$T$ydz?e5Dg=Q1_4{_7 z`mU2_f9zeSPXBKJ4G6IaA)1I2UU6#49t+*$5Z9s$kz{WVnPm>bFh-UIMLlVf81jh9 z9LFc7aQT%-@aUI5r@zk#6p7S?V&+pUE=V+*bzr>SQ01Q>FXmFAZp&#xGYFOVlKN;H zjG5nl{WpVWJo5$WFzhRIGyYcIV!KxM{QE+U=Sln!Oo?kO)irlv#(stMvTD1TVN0Nk z9s6oU(z=Htkf?MZgqm|m4Lb(4_!dHq6ZYy$KjJ6v@;d)}zrXRhzT4lkj`yYMM(X%W zIahvd$P6#)u>TpO~HvIwlc_#wjopwR5sd9P&V3jVRAft^2N`5-?qQL z^XP>rdOjRytWYFHu`1_s1yZGenG#1q37!XDvwNxcM2c#V0@Z z$6a%S8*lk$Oib=VYXrrk(TFiR+E68IT7eXVK-kn}Y(cTxIUG$OkzW+I>sbjSZQ5Ni ziGiq{BFetr#YlSr{fx9pK(R(f+BW(rk+{N#R;kHPhlF*sRXk8y5-2dp6(8hVb~_GT zrEcd*UO*}USdTK+0yeQk&sis-L_d>H3!pjxsgr0IDPK2SYG`2s@to&NdDn*l!&LL2 zbsUBw%75pkYd-Vg4_^3ZV)c;(@gx+2Izsx;IKCf`B2T zIdMcu;Utvr(Jm0`ExwaUC)2t|5D(S1;3 zL0d{m+ojf6cc6PG0N`n;F>TEJd4S+(<-ozC55bGg&H+#tS$H=k~BgBzz|8X$qlv9 zHmO-?VZ(#*@Du=?`(J$fFC6-Zf4vfpxDu}87rAEUn&U6qXd9iIDDg@Ydgf{!Zn(`C zUL7$C&$|>i-tr>cd-p$eeCDwmpM%|duPaQmM@IoaIFHd$vpXA=ur-@1ucQhddZx$f z8)*Yka@I1^7BCf5v#^b{iF~?9M%p$8A(4p5oQGLG%b^l+Ue0#0f=#}97Q;B0^T}WP z;J`G-bw?mofv-r@Gb5A=b~-nmmDEYamZuqzxPY&{q_pf!Jo7nHe&Q~`Y>~(@3e`4p z0Qo&HxaHm3|L(45!-;Q%19jxNpBgH4tLt~Y|f2hu?8 zc11?(iSAGh-NCkPKY(3(_TbdX$D!J36J`~70YC~NB&0B(S7ZI5+Jw_Iv?m|u1h(k- zd*|==`zh(;gb|gW1Sq$iQ7Dpi5@vV9Y8*at1+G8-iVhz$GRQA^69G^=2yW|oywbNB zqMuQ_&h!9MR$wk7&vWFNi!XigE&vfDkVu6jyKd=Q<6>hP!w`>4N2#IKut9-)afxU* zoG~ck=m6ACGHXR1@e`}>+wh10oPi=~PeSXWLBv{`2zWjXiWlh=YixQ5l5fVFVT={NP60J^&mXX{Nt()3tB;?gt)z7u;wYgd<8u+jMNII2qO-NeIJ# zaqnBZ(uByCFg1!KB1JOmdkV)zqj3k??KAlNgZCAGJAC9Qt~&fe1fe2`Mn(WXSir=@ zHnc{Skv2WZ11Z!b5-E|^)=2y8n-1-J>%d0ZM~|!B*t!~Na|M#VrmKv8Z1Ko3I6aTJL|otp1fmFLRf+%_r8CB$uaNcpLc z1BOVVZZ1Hkz(Bsu_mUsFY~Ndc@v+C>2Z$*M%))WTlyp)6A}u^>)X67c)JQG;>;p)!FfY+;Nux%pv4J39 zJVs~-NqX=V7v@}FJUi$ljy!#w@@|x>9}tPu8tBZ99=`!M-26%efnyB%=%H(@ozet- z3J|;W&r7-(onYgI?E^{7NG>jXs`xq4L&-IV`jcHh-NtAHIx#YU@$zu*bk+AV47GVmGz4@DhJ03^QX%Y)9>ci5jqb` zbNe`!ztfCporTuT-BtxSWN(nHqJVybB9y@hFCT;0)u!H`wQEeRyk}~x_qxtYeUH%A zDX+Bb^BP-PXS3KGYUX$#seg*QCvs~|7&}bN{Swg-ArphpD7O(z6b4=Q^)9C|F^nWh zysx@N&G&{4d3#S5QxWy<{^$7{vB2BPmp^J+osMhvFDk9SqC`q4z$6!KnO3^}y!*e2 zkL3Tezwb#R%7)iPyTNXS7-9OANrlGJgT&t)Cx~yKACiELf-AuQG_X!OIkz~3=U=d^ zbm2h>(V60|6sfjqt{Zzl5j3JX+L`YP8oL{3U1V+Dy1AGB?j?j7OVReDmL#i09C(XM zIhU(|Wc)k-r{H0IkbkPe2%WD4GMLijx&=v>gN4|B_JZu84^l=`nW+2Mnoq|f-V?do zuP7APy0r(@e{_?E7F&-W7uLvL{?WbKvPP$9Kq*86h@Cu00^Pw<5)mWlyAlQ8ZM^45 zFV!e%ooYsvdwf0`Jnp(dWeA%1vouA!DWP{@9sa8h4RNz}eB*X&`j}4bocy^oO5Eh| zFP5Gc1qkJ>Sm;?ahwzM))QF3TK(>kn(}^;+GkD1$22q}^57YR zX%Z`y1~N>oXzsNu?6ZUG{gdjeNIn*eXQTpnHhS^13i*th=c=_fi?m-sXS7#gXXgF^ zBBu^f@%owT`lyGx$l8*r_$oly@V;Aw1K7|#4e}%)l9U(@#lbUAbe2wMZ7N)sjp2S` z>iW6q*Cbm&xb0??oBF#tam7$UTC-%TpRezib5fig!A= zz5$e%&8Pa}n;Xo}aPUcdjeXl)8y&!WlOi;rLNV7Ioi1?pj|)V#pMoMJx6^s9o(st`X6=#W8WD!~9GMWUoP)XQi! zEgsydY77LKK2PM`lZ+Gx!w>W^mtMmkFcj^_=nCUM;qTwC$SRUGLv3-X81kqd6)mUz3-(ml z7sd=ZD$cDk$c|0~RD|c)eSMncju8=9MQi`wBo%r+6XgES)1{n$x&)touP!0J(V060 zz20Yxsia?_Q&kqt8*(UUMasCc%{H?p2C3ln$;yb;1nK?#Ayneg0E4XfkF&yj z24`jeO^e73weAI1R2|*8^gK(~-t~38kk@qJ)^y-UXaDr1XZ9V#*E{0fd`^!7ejiz) zlLHI$-*;atod@?BReb_Gz4me-a$SgTy4seU3aq!x`M>Ay}v&w#haOZ~> z$CDDM4-b(UCd-|75{>^Rcy0E;FVW60{u}vqwq6W7j>eOxj>oDlsbQrpYb_(cs>WxZ zHLs%j218jVJimB%zzWY#=_UntL`qXR>zf>;^-AXo}&}UxI(aL z$=mWp2APS*brpkVJo;RA7S&o9&B#(u?(HMcHc&Iu2lj3`COyW&icSP$(xacH7Kh@2 zSgvqz-6zO$9pUp0vpTssz5RmusN`ham%_VePRLp2Qq)*0qMh=6zN}8y_^cmJV}@d& zyxeF;`XnNKaJaohAg71u|NbsWA42ICni^s;tsKJ+fW?@8?>k(wB?T8VzH4Ar?9(=@ zfLp$qU*V&%d6zLQqRTd9#IPcoD0%X{?z-JlNp9eR@lnu(e+w`VQ_R;FmBg!v0)ju* zAN6`#?^tT%VIX3M+f&8~Q#fthrhXQT*8ZTB4I&(29kc1o@jP_bwhk!xOvl7B&91-o zulHt<>m@IJ4rdUNsBrH|sNmyD$52E2!_DCQ(0BW^6LBSrNd-wt)uL}Ayg z_R>vXNhmx^=eNWlOT(Uo!N&7%)tD1+mScl6&)vVAcXSTVB zGo?c0GG6;-tbD6nW&db?Is`O%Y4X9WR^87!)h&E4yZ>~psn)N^@P(Cr-6&bR=q+oR zo!$vX!N1yajO?|a*uV)%-1)D9gMXghwQU!JhG%Qx3+f@SW0T%%00n3?Z_U>IX0Aw7 zr<5ub&wKTl(V>;}lBOT8&pb%;h5l+G=R^wTyU5)|d8*7N+)f#u&x*)oxF;P&7RloZ z?8pkleq)+)s1WGA8I{3P;^$JwGl*sa7bXNXVcY3*CEXLN(q@9UKw@`4-Gu!rS}d=n zQn`I!y`eTNM*l>*pR3l^H~kaw0G>6*UI3Bs?0Wz>IQA&r4wX3=S`*FEPvdQACVi(K z^866E`uRxZ<q2d&kq;5kCli*bPcc@aFaxrXOoByz4V*tIXXOfS<8FD-rDcj@RK_} z0cDjCB^Z@KhiL7~cXWb;r!%m7oBXF@KWS9+x|q$P4kwgXjz_T1g5jWd$eX97CfkLK zUlt?k@U1X@KvMD2;${0kerQj~dPqDq2*OUo!cml%dcc9L2&k2Wl!%|NtN((fJR&+so+f7hxc#j7Qhb!W|6O_yIZMpL8>IZQ|GJP z)t0-M5~u~KC~t`Qq}|WG_`l14VZdU}Zze+!xf~5GIgeaYG^&;5owG{xaQYt1+#8FS zP6*PxS@@rLatHXkDb0MTULI6i;pwQg^6}ZG&)p_}SumCegY6tKn@^|)+Zs6Y`A*as z<8U}sj$#{sX-ntpEvw7xY7b^A6QvC^n8p)PP@|pFoW-1t9^f{v{a(FjDZ>T(Igm7f3&8Y~0Qyb05=g zH)R(5^Oj%#=_4W)z=Lm>SbDj%F4q7YhA}fhnUH={G3U9IQmmbW(WtNzX~~4aSZA&3 z{&NZOdPSU~v4rIwlwY^qMk&lTn9!op*^kZS#QDyVqTJS#8T^m&T^LE}f>b!&7)PwX;a9ol?* zV!EB;#UgAoz2HOow#a;I$w?3eg4x#nUiH1bIn}_QvRToNBya$^3VE$3bK-BIa{Y+u z&>~jY2cvbMp&@=QA;{TNmL{Ic_MOG5UY6vCrhqVuNW{_V^iF>09x5fDlE z2)eJ5Je1J*v7aATER4#YPq}pc(}#7f|9;kS7TVw7<$+Tm$@(H*8SkL+kp$40T=hA)W; zt3F%mn3W&4bD{op$tIC+rV3GEIRd1>$o6m^8(mYE+1Yo=l)CAuN%Hq<^X-RYNh(U2$~jEY zUW|~^^{X7SKpfR_g?YiqgY6W42*RIJU)I6P0d=S%xUd!koyQ-8jAn8D0WEA`d-Es(`?q=l6F=j=4bN1!M#JcNv zx~%8N`%ECo1fdlq)>j3;v4&2QrYNQa`cLIH;m*}Z4;94asZ=^9 zk!I>3r)dsVP2=UQ3iyv9=_D+La(}H*x?H|ZUvYCS#?!ERoRRY9z)_~8p%46;W16XM z60tyPMY=yP$CDu~0e_l|EQ2|9Qng8`eDkOwJagU`^&32rb~Us)U)p7t^HDnYV(8mM zskKSLU6X&KXYaf@J)GmISV+n#!jd>(m;NTg7qJizV)vF7UQ!2S(3`EMn zyItw2giE>tY&c?O#K84anXxBH6Tu^g!)#gI+;@*o^<5=;L?#k9BZACrmWAOK8+s#& zG5BseGb~(m6TZ3mB>9=i{Jj~mN^RtnS2UP}vzfe+mX!li-WVI-0m3^Q@Ai>eC-&xp z${o1CziO)fQM8C_{8Jb5-@{Tq8r~M35d8ODe>yp3GNw{0>BD^+G9~73M%0YpvV~)j zf>g23q(|1-xJ+c&7ZWeH*qvv~9^uhpKtsr8!+lKZqkiTXq4T;(A4&!8N7o4XNKdf=_T)k5djsvEp1Pn+&psVqoh`_sVnOcJsFH z+gT-5CzwoE62yKqv^c-)-gItc<|$>$0fddvvL+Eh>2sj8?79@0WSPnVQ-n6t=#Lj8 zRZ*9#Z5n?h512AWTsZM?jT=Q}uM2}|PW^E;dYcKNk>a=OEzlGdkq=7gq3)ctr&m{e zPBe&3bYjHtg%o`CL+?M3LhsYfGAb@W45>2_Yl>?gW{9SBmPFbK<7?ZV_v(5nGWrp} zTS0>m%ZF35atgQiSEj9F@_!5_;+lh<;aYt>nnQ;}B4nKZw{2t}+Ym0SbSn_9)w~x4 z?E>QTBLM?dSw&(}yq_#CuR>zvOV}Mp)v4o9SpE?_s9-YOZvZSWBKh*CS`(a8X}>4O zhw_xbnpwWS+wICm=C?GhCXWN1H`azv!2BmrLtV-ABnMshE<0ri@bzq2bOk1f-OR1W zwg3A5M%FoN2;RnOG*y6t+x5d$M<3;&GL2nq()&csbzb(xCY4Et691-u1?OnHYh-)S zU1aeTqet>tSDuF!VaKb#8(!ek)CJl{!n^3*;<8l+)&k~7^KJ;Wtz~ZH92BdgGMuaI z(c%23)=dk-hO`{PGuq)gsJ*$uce4`ImMA_wM_8)1XY63OcA|z&XYJE8Som+fTk*_X z`#l*3(`SkM>ZhB)ohjBV%sGNo&cOKLg-+*zcewaqV{RPcg+1ow2K-Fyy4}uu;%WUQMfV;K-z(UzVu!-tc>kr6z~?cb9X=1`Hi|l@ zTHf5g{>BMx&;1=*?F?T{(0Y94ng3|Y>`ePJ8T{`Mch;Eou)dia6#;cf=FQo5f94gD zi0r@DJ#974=pnSWp69?2MxM^cm(7z)`)id!jLJpw344Od>0fwf5qz9ie)<4v;peqA z_P2E5J6?37X$SUiV~Ni`Rnabi^!OkU3Qjow{9!QM=#Dl^duur$ZR`qEN)ts2@w%gC zD;Oeb`Cxtj{_~p+TKj6AVtPB3sE<3ulWlGoxB=y~!4%*I9_6x)-pSX+oZ5I3=L?`#@ zheTl3un%@1GS_qikCEk|w8XPPMA18Pq!7L(A>kV}l^UN5LaE1nmtJD(a97DFPe8yS z{c@TrFyyP>+j-m)IoPh-N*7Xs>VVWFZ zZb8Z_ERK0J7g^H|rbi|N22K>n_xDHOz8To@A}8a*5auE=UBWJge>SD~6{afT1ED3B z%jK1>(2ezZ#oy+v8bm0;8NImP6)yahEF!A)x+Rju&F(m@C`&5gagwvvqDYZt(xH^hVDD*P4~FEVHnhFk7}%|kl)_Z#GBcZ1j0V|G z3j69KR=OvCHkd>?9)vJuRGevI9fxI?1##aoLj@s^vh(KGee)E{E_bPedG~q2R3Vj5 zO4ilwP2Nu1|2N?d>}7`{U3_glA6CY6vk7?qCIb$(g@4V^6){L?c5R&Undr!KdwSx( zvqdylS&M!IBX)prbmOjkSllbC7>u0k;L%PfDZgs`r}I8$F`pq|o(TnDob0^@9_Nh` z%vkeOSoe7j5C}%rO`*TDjTpMU^*R*{+hQy;BA*wMIEn7{dr85tzZ&EoC62Vz8Tsu* zb786rAh%lpVbn<+la%+x-Owo``PSU^z+l4y!+9F7$b}cn(x#Wz>#|LI4HGhkA35?f1wT*lqabs$zSkYy#;<{nS8Y88#{12HQAlMH-#xYf{I3vv-H zI!X)l3cMR|>~Uq)47w)Fleu6fdRISmMWd7nnpjTFggO2732Ue*~o<3y!w+Izr429wGK-^Ce zfQ5S7&GD95ki+T28{iY;Zqm;oz-KQs)#SI3)SZlL`4~|@Oe}4)#v$fsaf74EY(i|d zM4T%fJJxIsO`ZQ0eKrOIhiYG;jK^R9_=9$37_8P&hc=nv_8_QtRkt3bBBI z5*(Jd79-6L+B+*INRoWl<+D^I&7ZoniAA2iQV8GL5rR0;oxZ4WemU}#vT_9szQHhQ zT$HmR=AkL0oOA51#rrkP7Ck{Ia-YhF5L$``+EFNR#RgC*`RhJ9QS2Zr(*)az@N?;_ z4+raKxyv;#mwyxe_e5pIgl?o=`x0~s$Z^Ok?f5|?#Ij*a*{3(ImC-XgJ)8zS+0xsNeVm`fWd&8q;Cch_6@fD?a{c9L zfYH&&fR`Pvg7Y_e8o)3DX`H>kie(Bnk5%U+R-qV1!&81`5Xkb0De)4>%2J*P6l@EI zODDWWUiv#0B=hZo@cCwn>o|l%7G3>r>2)x!_TD9~cCtBZjdaC9eKd$O^ZsnO>X?u# z*qzxm=jh6FHJ^%=eOFRwS_rDj%hk5mp+XS)Hab7#Pou^HYw>G%5M6d151xUz{1_Ry zX8!5bY|Ji=V`BUFIb#__lqLsEcS$aq2Oj$_HTMyUHX_+9eA#f@d-3tPbosc`?{Eee zcb#A}j{Jo|{=~E@ajTs(fyMUan@pRd@E&3uD?7f3oB0Uq!=TpFQeEYmyN!Q}KOAX0 ztPdNm@%De8mde!y2%E`-iHrc0{t5&zDZ+A8vJR~{F|adZ>q}$k0w?*!A~+|Keozi; zZe$8ZV;;$i;V1%9qk*N?NY!f&O({ffO>BUuG6y0p!!D& z=!Rx&>qx?)n>MSG8J9GG46{Llz*eU}tlbT^yb5?pWghpvE-(-Hggl}bhXtpSV?}i3 zfUjayf8n(|l21G2uTY&oqO?P|x$euIu4-|f^!bD__F1BcE=t?*6SzeAu z0aly%^A*$6V>#u@{n}54+rB<#$fL5@53YAH`V-bQNbp~y@IGzjWyfd&X6F=2R}M{9 zgwyfU^ZMb+Gw#c7g(92P`8!RxFOl~O!~i*2v~8U=s65`*yyIXf8W;%Q9{YKr zqCbq4T6-7FP(e=o=46rrW8ihu$fsI|mS)S61vNlIa7_jCa(dhdKbh~WG9tCljnssb zkNml-=ksO7O_%%4b!o^nK@70?YX~5bcR#P3S5j{vunszF7bjPdGwHxh{NwY!QAE$@ zJTW=i#&x~Kpi0cFbe~M_8#88DboQyo%a_z2=c6OkA`7kBw~im)@xH;-B-!OOs9fz%dO;O%6Ft50pO=F9-KHBeqU+pT$_47#hLl|{aY|FG%x>iXAU zb{|4S)d0+~Gf#|jvcFd$j{+6SgQTZzB8kDlW2E4}lnxl@Ab`hFAjHe}>I&HI?5i;> z#mB?htW&zah}|xbR@+=0c8nIZD$uYMcw~khuhr zyM;T<5kpn%IiYU}?4?4vof$PQM(JL<^E&p9w-LC?so}3Ru74B8;D}XE}9g zR~GmZbU3XmD@L0qItIQW@;i_@(BWfDec+QI`s-v2=dgc_R?8!0oasD0Z^O#We_ym2 zgj5J|+m`>tlCj+CBm*=n$EPY1mOj%6r{Uy=K@WXR+B}WyNvqpD`?6;$!8=-+ABImuvWf-g zOc_hE_cY=+fT1E@#%wSfmC0kV9dv{3ckdRm{=O4lH0UVz?GC(7;VfrNzdR69F)-2E z{X;0Z=*g6TGtAAFcnQyi%ca>4^-G=m&>;#FU%RX?Ijua+%$wg&rK@Y?DzN#IeW$u} zyP67pM#N>m>RF_ESoBM& z>|Is%@tZO}>eqj6LBLm9NmB^Y;@zM~jWUV$gIlc5#CV?nUuT!qhY+nt3C0@UJLc31 zB{WsZW{X2#s9DXW;B>;}4@b$TC6(Nu8LiKSpU&aWd8jRMjLb*CH8KR6bs#BMMyCov z+s})IH4BEI`3wmaNSNt7UwaPu`?aMw_x=(n!zo8|Jmnfe4QIj)N0Ksf6yrfDzw8kf z;f{e3={#rl3Mm|ynjE*b zU$!ey^H$04i6w@Ms2twqg$YdLMgo$-0V&9Gm?0p~MT_yqMep)DvW3152eFzC=f5iE zyKWWNU{h?@E!U@aj1$H2OE1-GZ~FLiX6Lufe~m=_b*Z6MjIVwjxcA=&iysf=EOO3o z7*WLPwx(r+?F*pvvqedd^LPF66@6+kJH8(~L0&N7J{YX4&&YRM^c)4j`uc~zbH+Dj z;zXz1LkhcpzWa1AZe)JGJ+a#MRjLqib09_exJLK0BI$5iq(&9c)_!nk9uFLUv38|?7y!Mu zAGZr_pC?gRms82WyrJJbvgy|;mZ%5TcbZo-CJ08GbIX-5!GNI1yX@@v#GsdAgqC{U zCHd+LlT`UCi7%+wQHVWRrIDm?R;6W?X(~axTyAS1kk;6+;7J8)wP+rQZ^luK{A z5?o>>f_~cO(OvV_!XP(8+3l~RX#9M<=e&J!BI9+dv3@s6`9f4fN`a;W%jk^rn)_9d z0_j~!Z!)-Jv|Yl4>_y4}7~o!h*9mpd^+$$5LRlQrnO$u+F=8-+9k&_j8m4e^M65fu zb93JTq)4pKmumh>t6>#k&L|(`qjccI=qq>{wLo^ZlNjw)7E_Q%xowT@_T;c76) zu){GZV(`!L+h!$>Y&gW zAHzfB@(aPiA$}s#a|04&B!>|;by=gzq3VhdDGB-X zi@wkx5hk4CpbQ%dUm7wH3tqA$?Z<`l&Xyw?v2pwy6Nw`!Untg)IsZnKPPddH?eo|8 zi_UY5oajdES)CPxn#*idFk1>XG-b${kM|{PV`}~|=kq=$;qm=e$_Wd91v4N~_Y+K| zLA!4Xk8_9_Nq6PU+@ih2Nayxy7y-(VCz!FeMvTEDsTge+9)?V>RfAAl!yskOC@|L=qh$_R$^ zmL-k-^lV{rdcAp9qG)%A7?&S=A)JF~zRl2W-a5<>EO&Tt$ebt&1yx85?Dg+)S#P&y zeDBg=bi2~YLV^5_Od;Mmr5= z_Vj9w^L^j-{ALmh<5|1FI!Fds*NhbGh_8u95InxD)Pgi3>f-P3I_)ZKrFJbj#LQaB zw$AuDUSx2?W?ET?W64(GwTK4_NA#T6XpZ`H`1BFx_0erviXMMAm_vW%n>?=^f-Q8w zLy1O+T_}9c+c9u6mxxh$qbYhkPWcY`;QRc#P39KM;nx zn+OV&|BIRH`KZBnxAXo5uPdM5C6{y)Z|OBr8{ZW5=<7XI;mY1lC6fC!$HDw^%^NUKY%b^sm@;_?)K> zsV|caTl;k2@3R+9eW&u~SvjHAAPFx$0=?z-RK{=C6>~4n|6bWfd`S`K-TU3TlAj7o z6B}r8$?H73sacpo`9|NH66h3mKeS zRhV8wQv_H@Qk$xahrP<_C-H-(x2NWKiP}ro}gXPCoOiwXoc>`k#^;Zo^}AJ z*XgUo;Hy~v&x*#*a!QHh;YMc04E5vaSj3T0(y<+=a*C?n=JtJ7_0kldA-^`jkRB4A|Al|R^3 zb9!W^u_I+=XN`hBZXYv90Yfw}WN?&0bCYrZgEdcQ`Sj&I3`L8^KFQ+LCPNQtdm3k{?BN4oO`)KO1O zV(-3O@Q(j&iDQ)=#eLTWzh}L{2Wujfa>@?|N$|bm&qmlek~ie8EYtK8EkdSq`6TtgVPZDk+>1xi&28_y+npX6Y+>ZD zlnPSl8`$hZchpFADPvKGbG7LaOHu02QDDFicD3QxLHniraO2m40dhtJFY`dQnB-9|;SfNIm&&&7znZ)@_lvl5d?^~V7TmS~BhJGML zU1}D`SWu>G!YM~^^4Sz3P@p^5syRm!d~|kR0*rxiz1u|IpNg{aP7K5 z+EFnWghFq3ew@BrZaKoS$Rq3Pqn zV$R@?6))pq2=3wSclS+MzsU4@;RR;24Qr>va{`oM;$1ix!l;5|j>NyX8@9~v5cjH7 z^spD8LGm=G!hp_a`>>!AqrvjeYH}bF?BM%DSzWWc`34q1A)3!}&Z-dt{6(z7J3Tw- z?LX17Ri_d}%a(VJ9EZ9A zwXpBNl&v4v(pf6r?&YEqUfG*m;p$8<+tRa$FTZ{aP3uuD2J+}&ilh|OK8CFmZ%LmN zu8!%q!5bHfgjv+6Ad1WHD9;zfl(O!@i2soFRQhEX|CT}a?g5-k=YS^z??GJ`&_)3Z zh?cUlS4^>Zl7m;TagGjVb5cWK&%$Vs0Gk0pjzctVtMe?d|8JzL_XoHeNx#h#SLez^<+ra_xy&0V> z76sJ-jH!Vu+XB{j$GG6pAF<*JsYF%8;5>cm?_T;Q8x}g8G<+0MiT?iQw2;0Pl9CD#7xmVfA$ zd;iDS9)|V(r#n!U;b|nx%utr4@B{-AqcjYG)5l#ZxYR}4f?GoZgJlFYH^^exR)i^p zW4Du~BdN-d-e#7$_IzW&XYLWn24DV?^+PH%43swWFPRg)u2!mqAJlYMikrOO7^|f; zLwQ*%(8T$K)k4D3rBNq>rXc>ec_%X`ACbg@1)*@e0zRpf%}Lv7D!V_dP^LvEjaSax zm*;Y(iQ%C5_;_=gpFubof5j6*#86xAW2nUxH?M9&12-%r&1m%Y6hZVyQ! z!#SjI_2!18Vt^st-j=T%FM|hs`z@+t8>v#Am-7QvxqGY z(V)V(I5yEY^vTyVEN+furF-0(B}x=A6V@68_q%5*3-86Ev2^_-x zg#EAD*l%e_wX70WZ*io~uJmrtnY9jj5>Q*w>{J++@WES-Z^r99TDT9YEA>@`eH#TP z{X|D;vZ*PL0{=0J&#_=j87Ck{z+}{}k?h{bWy-SU8^*%l#5)2(f9NJe0caXWfED{T1LUX+kvawg$>6QU!Q~n1o@ik;^G^{yNf%Q-q@jU=-w8zXj$%byoPQK&&dxI5REx>t+3V_y?!DuEBxi;NQ+) z2RY^|XE~w>8Gijo#D&K_pWb~32r=AF!1(=dX~-G22_Ui6rkOPn;TwK2RzoDLOh(*i zhT6RvQXx(%u|1FCmsJVkQ@b`Y``czZU*33L^#{AA9&rId@Iq|Za6CE85Rbh79HS8F z%z6&E8#AxhD z(=O-aw>NLJHoSkWNKY)Uc)KrJfhK-P)eXw%-z|xyoL!;mL(HN^Yg(~uDh-49BjbEUcEpp42{&paCy>ESlqBUzv$CFOOJ*3fSGbh6X}YQa z)4jgLmoe;}J6k)(`RGu&%nyxS3Wh+F@}Zs~!ZA-)yv&h%bR?f=_G6#pmW{BWn+`C9 zH8`N`Tm?mUr;VFMo<4H1cc81<3=e@h222aFGCWB4Js6_Icri!9?|h4f3Sg$^1_z?= zEvrPw+C67l7gRsx)w3Y z2$fRDKR$ zGp*N&coaJdpcI5dO9nwS3_gR~{Q}zovyk9W4V-BGtt$5{e-xP+RXmqvJJ~V(R?%hp zfg0_fb*2l--#p2X&gWlAT+Vn)J>RnFkd-1g{Ny9R=?RX(6FTug-Kvl?2P&HUv3Q#Q zC8W-=$3StbJ;7r}up!>^$S(7;*kdC*65p(sBs;z08#c@_!=1hgx-w)W;zo7y-{FM2 z$9*F8i#?EAwY*%D`wBOM&fpfw!G4cw6T0l#ND(W7D9$8zrNWIB7ST|?m!Px3+!;94 zne5S-BeHsVsKMAvv$Yg<&iKt-HstZBP1)F8y@O~q3QK6pOP<`tAb{`)&>uV_(lXxq z)X2{8Y2aIqkXl~#OLIj)Nw9?z4@w5AD@8AL%Xr%pwp08YJ7N)3y6;88-&*DR-s1j7 zwZ{xzJ$55Oa$SwiCRQ4OsX*D1K5ZC4Oi7vMMoH~^3$N~T&+H2LMRHT4P(~OPZKhXN z-XO?d_U_d1jAp>>i6#mySDI&A@|{k`BkJ66AUTa;f#TI`wBVl4581hGSF%Bu?|Tq- zC`{-sJ(*JFmM<~Ic=F5Ja%dw;+%gJ284VUHDt#I3!yGb^iX4^x@VtfJ$KHY>tqtgx z?!&-pL~OZ+jaWnzH8<~0M#hHv!NDjm6>pkFo-%wK+Ync?H!jklL*^|nIU;{|OjnCt zxL_4S!uf<8l-D)c9rBYVopYElhDLmcLL|qj@&VD2_7wkGiwFxXG^F=q?|GA+X22d2 z8lL(Mest%zxSysZU~`tfIrxfJ3%7Ocx>ew3Prg+R5mv-^E*vu#Lh?dcz|7WhB&=FI zX9u94k_EGEyfBoftn6zgL&rVqvcI$19f|bp&3x;dvNR^Kr$GAVxy(&q{u!q_jX8-f z8e~@9J?T|Y)hIjQFa*ynTh-V(bj?C8xs`c7?C~E~u1jUL$4LwSMxL)e-0cgDvL*<8 zLRsi$N6MFZ(Q|p;+HDEix#|8|{6b=4$T;C?H0BB6r${>tF{OvX=>)2C?y-1BLAj`^ zlvttpz&KNZN$ikT^l)d!7-w1pK0oKOjBj|K`y+Y%rTJmkus$s zvx`$9L<-q-MI1*}m7Z;cXuc+|ncPf9TBly$eBbkKLNcuZakY+?iH7nIzz zFZ^_PtDM_Fy6fVi$$uz?l{0=U4mDO|$)KpcawFt3jWWXD6k}@AnGAT9{geB*UwnfU zdvS_e$&!sswN-6hOe3$%&4AJ4ba~J7!!nez0Sx{0EjU)(^Et) zNbkm|iZ7J&6}{&B&-`;^F0vk9^@FxuYFuW{*(}uLI{41}WhU$t zsEd^H%CxzEUZY8ruwCn%odnWV3qevVYup@v<}eo!YkU9xVP4bnrY6sKV{;kWUkbIA zOnRU8IOg$Z(Eusr+?4eI$8hU?kyTGs3Y%6D(a;5%j?F*2*ocHiR%2EB^fPvECKjb` zLY2fGf}8ax0k5Q|(`T@ZwHb`6uZ{@9jNXQU63I^o#66CXmwt^XeIpy0L(9F+t^a-M zT6@*!FiE zj|`|!j?Bh={E-cpE08^WrZr+ZOUnN^GZudot1sOqBqa1tKVdHP{{NA5RdG>%e{<=U zE=iY_R=OJ&b{C{WLQ1+tx=T`ODWx0fl5PQ!l9Fzu8|mhKe((Q=8?N?zp7V{FIWtB0 zI=Os=s*LJ_i2H^0@Xo6ntC5c5(QN-)w1{qb$QlH7Ye8O$)Y^asb$X`U+*$U8gMMpE zL6ERwJk^3=)a;d}xgm*&|s`yC#?A;k{c>%8xtepQHy{^IyY&8HE=+#a6&gFXBkI5V= z9Hx$bl3eH{zyw2*nTzT^&P$jRB0Oy|OJYIC{ztd9^+ex?FwoR$vbZ&8MzdPKUIs6P z^=tS`g8QjyZ~mj43Yr#d$Wf3hPawzQ7S|&ATZX=uUzUQKEXc{uXFsBA(4v_h{I2K7 zwMQdCpv@$<9E>5bBc%t2#EQ080)}D&!W_v-Qp;)FHm8a{QZ@|HI`rh;#l_^^7RPQi zlu9p43*Lc|OV4$@icwZOJ2tjPjqkn$JmrQbjC4ZD$l-D^jMcp{(}4pH4pd=M8aCAx zC>FH2xSD-Blzm}Ib+wkKt&jH;L&ia8+gZJds=h;XrkL9K4%wWH2wYX*)Pmi5cLcg+ zy79b&$VA9@A4Scr_Az$P&>z(4`gfV@q#1Q3aLs<#E8*ur_b4A~vg}+`m)qm+-11PC+u3nzW83{wZ>dh@h!?E9Px zWEnAvElrtFcP9qlx*slo?t!i7CMb}Sc0q?o5Y9tKc-^Ih8f3Lk)X3;NG=dFGH3g>Fz+T_xR6 z2KrFVw6uauIMrzGq9hB(w+u)tv6X=M#%5&K@}X3CQ*!>)$GyaUQiSOaIiirOpD426 zH7N&k8S^Qtl7q+u8EB;Ewooe>zCFq|JUk!$&H_$T{f|W_>W(3__<0dSAc5(E!Oh_C z0mZw3Q-`lvj(Vro6F?#%XDZYP{%Si8YEJTMA|y?9x^zGIUrYzd;8uS=e@$Fw!I>0; z*!2rf)JWdif6+#jNA@O~hf^k6WQt1t3R6Hj%katr!G-$S$(sH16vz}P3d_iA2&?kC zSIP)A^W7)LS)*y?Wf+DoHF85KgqIE_v>pY+#Qu&u7S6t(_RsP}SrKBu#q!~x*T8w3 z(h-(YcqDzd_*B7>z?)s8+&w={K9m*MUq9bOh3wE`B#I`5+ytAP1#&3Pq<85Zug4Js zy>T4X0Y&;#WMp>&PPA}NJhO6Y+&gQU6h@>DFOW}Pt!|mWXd$xa8kmDNJ8bXpVIoi( z@0W6}0{Z|{*E2=pKm^DDpF zkI)3Bg6MQS1>|ApdkRqmZUN_+xwXt-fktv2*00JZo<)}#*qpj&pWxm)1s7tW-%+2x$a`ZVkCt9gBwsn2w@}<}joM#5JfpS({=YD>B z`psvxazV3l_joK@=7sM4ToEO*_JXSU;Wwjh=(u}Kle*|9-b%8*%VZ0>*QJV(9^d7` z+rz!>BMI1tlYYFDof*k}e-YX5zZ=FNr+0@)bc?`p%sYsR~?wcwe884TFfO>hW_S13rbzjq~+ z71s&XXrqU1y+4P;HKr}D0dmnQU$F=EFj(lc+Oh78KE1F-0-4w9Z9tQJJ(!+3Do^mIZfh~EO3DTq`}cjf|+MXU?|Za ze$r;3167y(+sAq>5nER2MORcL_eRxV!rFVDB+T`9^AGn8Ex73tVPsjHjtu1E`)?+D z1ZJhC(R%OqWzzhfV&8V2xC4bKyvB?4FX!1{+(fY-+T9CnN}-GGqd9CYM_-AZ*qArp zPfJAIzVmqaMPkbh&K9Zvo-LBP$@*j%h_pP&Y$Fbj?cD6^rJ3f)D`x$Qi`U%=)xFA2A&4y7c``MYY_s9FN5iHF za+P9@K0yp=srym`r}Ud^tJg!wBUnxq>%QIAZP}E$eaIarevX#za|bLfGEX4iNu6Xv zYv%LwngN`bX8KK+*9OirluodOx}_hNd1*DjAE-2dL^XuHT7&+o+99Ls??8+EVKMaJ zf5G^Hs6o=)P|j?qZ9S(m|4+FL=2ChD+5BW&xt`-Sk+E88Hwlb*hzRy;kanQj@0Sti zs#|5&MjZoGq+i67Ii~j)`{eTmwvGc2T9x=bTAAeh@|lPGK^xgyqX*1k$GM>CPfXE8 zK?oSFa`OyXpMqim>!pz{&sq0hy(%3SN2PUBP3;%Nk-BeRSnU1rc$npo!cb+Tp54#t zN`zzT=_{9v5Y!8$GiVSgB+ukGG*K7CG0GC3teH%G0-Y7JCxAh=VEm|7WA{BjmdD2t zLhzU>$ktfTI6S3B8HGCtAO!i&UC}j6?HL5u_KZd%KWadxq8pTJNM|yyo&T%fCWDD} z3{x#Cxeo8^B)sE4S0lNtJ4I}9Rf9~{&BR&UCf))!kEd%8QP8wG$)+h;{wnIAJA$`? zKrEwzJ4+m!iDrVL>CFd4uLL%wpn(#K($8$FkP;qku-8vyFiWg{b!onyZml&-`SG}; zu0{zpDXC`D`RNza?IW6@eIbd%?wO*XRB9#qaVEp<)7xK?(XY&N?JX1p!;>@Cy{TxZ zg1#0=au}D$DsKDlZ;U^oHAwzp&m@Bb?p4J-Gie{yjQ}Hr7^*>q?Z?3~f{vSuBGp+^ z33k$y7HS`%7M4%)rgvyy_vj!|_jVq_MLf^^Ly_z1X`7~Kzh8~N8=S=aPcol+(Bgcl zo^R(~aModp4opxl6vw_c?6hM?PpSD$m9v=y7cZY6)6V1bfa<0AB-qRx*?rjAQTlfh zlKruhRyw)?Si5ChimQRS(y1Q=l&!FE<%5z|UlO)xTIAU2vT&lNWN*plJ+hzFCjLW% zj7hYy?n@k^LYe~u>+m@;8ZoJX%1ht-OJ*s@K&r2_Jg|pi#0m1IS zVQ;3-7HPI<(A@4Z&5k<5qZ=Y!3mr%*kMEAFS~dp6vL&vv7CN6coKWGp+U5^P65uPF z>nIXyr{bJ(vQ6qz^ z6gSRsTvFGS7fu3%5^MumrCDOm^0XJW{{)Oyv)Az|z%GrCy32vtH3&pu_R7xc8)bI4 ze^iXidqHEj-K^c=Dr%$-wX6eRtgoV78yo0tFnDTnKNVWNNA|;jx(1V1cf?&&e5X2| zdr*I5ens_QzQa-bvLSIlf+O1%-ygvK7q2E;m`|u8Q2GV=%IRAbkW{D|Um7B6&_8PSy{3SMO)#}BY#1xD_T(S8V7)AA2{cAJ4};IEw?HK*#Whgn zGIO-^bovRD9U0U1VcuHfg|pn@1fEUED2GBQ#1IFQ%?DAv(J-=OTbwHDJn{9eL-r9q zxfKCT`w(}%ION!|{#Q)WWs~%9qzqJF5BVw8GJ_3&G(}43D;@YPW2-)&gd)wE-g)J?0@=Ua^O6GjK7D)x_wN ztNnwd8L3Fi88cqhr8Wh3v1`1i?4S_)z8TS-vAAAMQBzl~s9D9xixK}*`am`#p+D6j zoLcfUyc1oik4Q7;U%y6+a+d~Wvd>>cAj zd;79yW@hLlp_gh+8h`QY64Bve(yiaGJM!Ol?r&5c(s@V{v=L5#IU^_Ik*}&sMWf!Y zQ`=rSy5x%}=_@nHm@`@kefO5T%i>#jE3|ArykyJ_wn6Ejvz@*CX2RF-Fftt%u!W00 zM~ah?AMIJjOTdTGhh0HwHb98INkDHGMw6Q0N??m_Y?uCsF+|iG1u5gVnb?v ztJ8mNHvc>x&X2QhO0Ty^kkvzk&4jT}jP98ip`%oHpZ`EDexrutCzlNW8|Ow+LLaR2 zmb`v;zu#fQsaLA8B~d`)JIz7^L(jCsOzzaY5s75MMAZ8vdU$~}n71UsVKlTtS!JF` z@Kkya9Pe#zX5dUkBc7Z1J(MrB=H7O3}0pq{IMJshq=jlP+5{6d|%+1}NgoVG0 zWWl~?`^uE&0~j`{|J688(*~1pFd_S~U^ZZf45a%iHuI(Mu&CVU zUg3t%to|9SwVT*-(sl&dnb8dt-W=Zj5vkZORlq3iI1pJ)>*vH!yBX`cXWXruAj?MD z?%{(My%lsRW1kV^3eQ-?`JDCiu|oTR8+viRvFci`K) zO{%>NS9_VD+t<()+VJCg*ul$)@5`t|QNx7LK$QmP*8q~0+dhdS=~w(T4m3RT z9XZx5)Guaf)p(sKuz><6T|HinstReLIqrwFXsT8rGNEiMZ%O}Zp$HkeqighIbBHzw z`09WzyTd{WP{9ETG>TYXQ|H1{QRkJ ztu?iWRem>uFM6hy#S7NvUNV{+l})w!MgO5Y?e;t^9{QA?1TO`Oe*{E>Nx5ZvPXbnT zduceDb+;n*IJ|p>#;RCb@xHgpx38fvvLLJ@lo-MNnsd^X#(@&kx`xxC5cPZb?&ap& zN7k(oshDrsw^?FioW0gQT4R2BFXa{#LP{l`ov25@4FDKT;O?zbb)t-XeZNbHqoV@; zw|(IUanHer_DEAlZ$+?yOW@>%sl0<}-h_&bG0ee?-IM3^Z{8Sv(y`-WX5o@0JC>sg z8=DV5B6fz_mNTAj5K?FTs=49^*AtgS@AZ!NqVutN^lEWj_L@kc+K7;@6=D}~em51% zjAcU3&+6=S`drtKK6S2=TezXxpr|Ze`aeNcT)|TJ@wJc}iP8cF6;e?Ya{ZekW#S*CG0zd*T2gR>W=*|+FINsP#VPE@}z0p-y9UQ`5#pVb63 zwd5!4=blqo(=lSkH#6kvQ=z}+qiw4#7Ijo;$2*X$A|INyEN748tsiF+npe>)`T?#Y zRpt}+e=zvB$@R#xA(HvY54f-5=0b8QxJXx-7amQ51f~0`?-fOIN~GhZGK9Np<6Z%|NZ+AUhP1`Eri86jE09NJ>mQ)N@w!%qmZR# z6&s~dAdBc8F_tnhcByHNp>g#@aK_-9&$=r9)ZFCc3xn|z3XD@ibi*%Vt;#ItU)hb& zG?wPtkdjIczp{jo-q6X9FiN<0=Ic^NsM4?pnFGGNltJba@$TDuf1b|gx1aiwrpfqw z$>G~3hywY>Dz%x+6JRpw{a0?ETq-U)rO*9_YCGkpmZRdF=-PaC%ViS};WD9COhY6* zE$onH3i*mJbEWffOl-yZsi%{$qVes#8wX}m6v)2u>YXc>{6z1BMI|vp-yq+i2fsnN zgunK%2;YXIZQ`}nU~9Wi+*+EPDj)=vJbp&KW3dR7tJX;zw6xVUNhN@|{k7(nCbq^Qd;DAhq2WQ-_)WsVF)GG)`T>{8g0hWqZ+y zfXCzhb`FD%EaOW$TKvCa^qxOUR^kr5Hqj@<1HV^860T%K{X=9DuJ;GO*Cek==gD>} zB!4}%D|hp-P6xC(sB{Kje9Y~cz&0eW%@#VF08>N{NuQ%_sq<^nCzc#p^vcYla%Hum z`eo<@Xcd}JIq&@IHMr=*q2)wqfX336tyt;07eLwH3^_mEYkHpE8GCf{V>s3Q=4)^R zy29@oo`p;k>Hba1{~Bcu-hLXj{#F}6gu)BPMTasz;ZXk|L85*$-dUhbpKRg4 z4N8ykLX*Kp6~a~&ocB@4!i44%@XWVUGzcmwA4*^_#J3*+NLy4E+CF%1#YsNg?@Ot` zLWIVdQFl3ogIxa>yo@KY>dhoY_EJonyl`dG$>btx;nH8(7gqS378%$spd{6Zg$U_tao4L{H2zEE zkwM`aULR@RIVrXR#=2ze#=%X~(-(mr4T#1=FEXzGHban-W7PMKjCurYIC^=7c@GsUjl5O8z`QMW4?6grxDuGwAG?3%z0=L4EUEq&CFi z6*&URKkh>ua0D-6J@1tJ6~PpMUs1NlWODroE6o0Eu)`ebx3mkm&p$G7&7UnWh&!JQ zo&1n65B8<+`d*DrLT$7CUt36kWp3Hqi|3Ok+nmWd0O!Hih(ex! zs58`&&6jwcfh;t9gcpU{0g&<0?ZhEGp+T&l9zaXTE?F^C;3WBn^+8gpd6&isrvQSIa6hmR_wL5-xXFISV{Jd}!oDWg z4$AmnHcsLwn<8qI>|6vb;IvT6uW0BGA3 zz0MYpcv_VZP#ImFWeU4LsIDGyJyE8-?-;ON0QLX3hwg-0Tqf&dp($O=Xisnv*?Yp# z05F>)=*=gZYFZK-S5e~%Q2rrB(@$+O)KI>hO>>kI&%D`h(W-o3nm?Ds@2%M@D;C^R zvxcIHmt!n-z>+H>h2L+@EpA6%&hU-uZH~QAeLbb6C|bQOHv?xqs+yFipOTxIWiX1o z#r~j(!+o3*e8W(f)vrWy@Om;c+y60gA$Iu9@1Cl6F1i-|di-qhDogKjmfUfRVui>n ziQsMwkXU4ws0T%oMg;Qt(l|vOnZ=G{~*RxVn{<%BSaw#HI1S6H8t%ocM6%)Hm z&}z2~Gd~U0x>>pMXO4=%U}9c%YsxpK8{}NRBq~LJ5Wij*57r&)T^#u>uSP<5gi4&$ z1hllo$=B^G6(olggiAhI9!sE`t0qm&hX1+7X*ka}(PNjz(xg|pn7m{dHWJIRAr)X17CB#%v_Wd(= zRmHvw268SPm@c9n^yhB#$tK-cqHp&6q#MTty&$2WlVHPz?Z+Nu+499P{bOHv&ZKMp zajJVMq|jDjA>@9D85~LNfE7mV@SW3P(Ym!?!V7xHI28DR<@mGvp77+*Y3UeHpB=|R zO&tJ#&;P^$L&37`*%}AUMq9J&0O*Ke^8si8QX9<6wcL^r5>RKn`tp9Su;xzpEUXk% zILLzjcldQnKL?AFoyT$dL}$K8c|{q#K=SXprY2STsU&Wp5D8LlKH%Gcc{)d8`O_aq zrRO$PYNhdS4t&&gwIvLRPO+Ev044{WJ~gfJ^YQ&aO_~3(!<~oJ$g`{-c9|_8vqYOQ z6HREmW49UeumLFk+SGifiwTN4>YcTW$hZa_AA3MacZO00<@sVbNpBTe~BYH*2TrD1>(8=j8}1o?jBO(Kkh z#SNs&PK+R{o`DjL?=xPbBrO}LzfN8gE)Xp}Z?? zqf$#bJhJHg>x^)v<|RI_r#p8Dfw35tDr2U{9SKMt!I&(mh!6^z+zF{e%s)|zz)Ko0HlY&D8fLw@FF?Hbr#k8E6fYZfw56SxhuE(vn6qJtys4*SX3%NZ8UFLFob;%4L)3baROGP46%84eo_R0&l1q> zdQ(bQ7wHzg*I*Z^-zkF_uuc;IAeG7#Do+NPbv zj)7-t_6VjOdWpPtpC2J#jf+&nHkXv&=AX<< z8jen6L3?yV+&rJu>h3mFBgcV;Bc@?(>PsJpbog_*N{VI^P3Upjdx{x4K>77?J3ux| zv+uVAAd~{wv^;KuNM-Z4V44!k&{Y#lJDxP;UlD!0GnE5xGRe~O-qvr}y&22@_gbK{piBnUTo zjVR7gA_OXm+_C%6-P}%al02X;j$yQ}@F2$Qyx zM?DC5s84#xj2d~TPwrJe9Lzi$r9t+aJh$w1rC6Bji+yOq9uR%@Cjq)=R!29>P)ohg z@Jsz)^MBoJ+i#150Xo)P*F81vh5zoUt~C8KZVdGT@X%PGDuZ~dkUcW1l{3ui*};+z z-7`8ria7Cej|1s1Ii>JC!E_mp|A5lH;>#~nBYcjBj@QvJ#$dD{lbD()8Z}Cye1T&? z4FQ}A7fH#uJw>#Z#z;WHi6X@DwNe4r66MC+>}_b}D;6=DfJ&_^|JHo5a!!+|{J!H- zmfR^xX}{-+?Zvk=c5vEp$;yM0@CtH_cuS+h_#)|)R1P=SnPd9attz8-y9L6vb){w- zXG1@JLi!H(Aw2x~&w{=&wbcTt)@S%yfh^7Fv{4QeGOG(utlz!}G8^B@p*>LnBt&{C zUMBlz=__Vj?hS4Ii3w~!r zI=sa0!2zY8906bq!6O_BDH̷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 YOEn#|R{G?(mjMVoUHx3vIVCg!0IbLNR{#J2 literal 0 HcmV?d00001 diff --git a/GUI/src/main/resources/Backgrounds/DriftyMain.png b/GUI/src/main/resources/Backgrounds/DriftyMainLight.png similarity index 100% rename from GUI/src/main/resources/Backgrounds/DriftyMain.png rename to GUI/src/main/resources/Backgrounds/DriftyMainLight.png diff --git a/GUI/src/main/resources/Buttons/Save/SaveDownDark.png b/GUI/src/main/resources/Buttons/Save/SaveDownDark.png new file mode 100644 index 0000000000000000000000000000000000000000..bd175531b89e359a99d84c203c0685bd3718b8b0 GIT binary patch literal 19080 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 literal 0 HcmV?d00001 diff --git a/GUI/src/main/resources/Buttons/Save/SaveDown.png b/GUI/src/main/resources/Buttons/Save/SaveDownLight.png similarity index 100% rename from GUI/src/main/resources/Buttons/Save/SaveDown.png rename to GUI/src/main/resources/Buttons/Save/SaveDownLight.png diff --git a/GUI/src/main/resources/Buttons/Save/SaveUpDark.png b/GUI/src/main/resources/Buttons/Save/SaveUpDark.png new file mode 100644 index 0000000000000000000000000000000000000000..2571866d0d3fd7fa7f918ba3e482ea28a0fae3ef GIT binary patch literal 22266 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 OY+X$wjRrNxsQ&}xtDph^ literal 0 HcmV?d00001 diff --git a/GUI/src/main/resources/Buttons/Start/StartUp.png b/GUI/src/main/resources/Buttons/Start/StartUpLight.png similarity index 100% rename from GUI/src/main/resources/Buttons/Start/StartUp.png rename to GUI/src/main/resources/Buttons/Start/StartUpLight.png diff --git a/GUI/src/main/resources/CSS/Button.css b/GUI/src/main/resources/CSS/Button.css index ccd49f6f3..77c05bb45 100644 --- a/GUI/src/main/resources/CSS/Button.css +++ b/GUI/src/main/resources/CSS/Button.css @@ -1,11 +1,12 @@ .button { -fx-background-color: linear-gradient(rgb(54,151,225) 18%, rgb(121,218,232) 90%, rgb(126,223,255) 95%); -fx-border-color: black; + -fx-font-weight: Bold; } .button:pressed { -fx-background-color: linear-gradient(rgb(126,223,255) 20%, rgb(121,218,232) 20%, rgb(54,151,225) 100%); - + -fx-font-weight: Bold; } .glassButton { diff --git a/GUI/src/main/resources/CSS/DarkTheme.css b/GUI/src/main/resources/CSS/DarkTheme.css new file mode 100644 index 000000000..0d2fe025a --- /dev/null +++ b/GUI/src/main/resources/CSS/DarkTheme.css @@ -0,0 +1,33 @@ +.root { + -fx-background-color: linear-gradient(rgb(0, 53, 105) 20%, rgb(26, 21, 129) 65%, rgb(0, 0, 65) 100%); + /*-fx-background-color: linear-gradient(rgba(54,151,225,1) 18%, rgba(121,218,232,1) 90%, rgba(126,223,255,1) 95%);*/ +} +.list-cell { + -fx-background-color: transparent; + -fx-text-fill: rgb(255, 255, 255); +} +.progress-bar .bar { + -fx-background-color: #17e500; + -fx-border-color: black; + -fx-border-width: 1.5px; +} +.normalLabel { + -fx-font-family: Arial; + -fx-font-weight: bold; + -fx-font-size: 20; + -fx-text-fill: ghostwhite +} +.check-box { + -fx-background-color: #22ff00; + -fx-border-width:2px; + -fx-padding: 0px; + -fx-font-size: 20; +} +.check-box:selected .box{ + -fx-background-color: #22ff00; +} +.check-box:selected .box .mark{ + -fx-background-color: white; + -fx-border-color: black; + -fx-border-width: 1px; +} diff --git a/GUI/src/main/resources/CSS/Scene.css b/GUI/src/main/resources/CSS/LightTheme.css similarity index 51% rename from GUI/src/main/resources/CSS/Scene.css rename to GUI/src/main/resources/CSS/LightTheme.css index fea1d934b..497a8a70e 100644 --- a/GUI/src/main/resources/CSS/Scene.css +++ b/GUI/src/main/resources/CSS/LightTheme.css @@ -1,4 +1,4 @@ .root { - /*-fx-background-color: linear-gradient(rgb(179, 182, 182) 20%, rgb(125, 130, 130) 65%, rgb(102, 106, 106) 100%);*/ + /*-fx-background-color: linear-gradient(rgb(0, 53, 105) 20%, rgb(26, 21, 129) 65%, rgb(0, 0, 65) 100%);*/ -fx-background-color: linear-gradient(rgba(54,151,225,1) 18%, rgba(121,218,232,1) 90%, rgba(126,223,255,1) 95%); } diff --git a/GUI/src/main/resources/META-INF/native-image/jni-config.json b/GUI/src/main/resources/META-INF/native-image/jni-config.json index 354fa6135..ebcad8ace 100644 --- a/GUI/src/main/resources/META-INF/native-image/jni-config.json +++ b/GUI/src/main/resources/META-INF/native-image/jni-config.json @@ -64,10 +64,18 @@ "name":"com.sun.javafx.geom.Path2D", "methods":[{"name":"","parameterTypes":["int","byte[]","int","float[]","int"] }] }, +{ + "name":"java.lang.Boolean", + "fields":[{"name":"FALSE"}, {"name":"TRUE"}] +}, { "name":"java.lang.Iterable", "methods":[{"name":"iterator","parameterTypes":[] }] }, +{ + "name":"java.lang.Object", + "methods":[{"name":"equals","parameterTypes":["java.lang.Object"] }] +}, { "name":"java.lang.Runnable", "methods":[{"name":"run","parameterTypes":[] }] @@ -84,9 +92,13 @@ "name":"java.util.ArrayList", "methods":[{"name":"","parameterTypes":[] }, {"name":"","parameterTypes":["int"] }, {"name":"add","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["int"] }] }, +{ + "name":"java.util.Collections", + "methods":[{"name":"unmodifiableMap","parameterTypes":["java.util.Map"] }] +}, { "name":"java.util.HashMap", - "methods":[{"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["java.lang.Object"] }, {"name":"put","parameterTypes":["java.lang.Object","java.lang.Object"] }] + "methods":[{"name":"","parameterTypes":[] }, {"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["java.lang.Object"] }, {"name":"put","parameterTypes":["java.lang.Object","java.lang.Object"] }] }, { "name":"java.util.HashSet", @@ -98,10 +110,14 @@ }, { "name":"java.util.Map", - "methods":[{"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["java.lang.Object"] }, {"name":"keySet","parameterTypes":[] }] + "methods":[{"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["java.lang.Object"] }, {"name":"keySet","parameterTypes":[] }, {"name":"put","parameterTypes":["java.lang.Object","java.lang.Object"] }] }, { "name":"java.util.Set", "methods":[{"name":"add","parameterTypes":["java.lang.Object"] }, {"name":"size","parameterTypes":[] }, {"name":"toArray","parameterTypes":["java.lang.Object[]"] }] +}, +{ + "name":"javafx.scene.paint.Color", + "methods":[{"name":"rgb","parameterTypes":["int","int","int","double"] }] } ] diff --git a/GUI/src/main/resources/META-INF/native-image/reflect-config.json b/GUI/src/main/resources/META-INF/native-image/reflect-config.json index 603c2a609..c5bae7363 100644 --- a/GUI/src/main/resources/META-INF/native-image/reflect-config.json +++ b/GUI/src/main/resources/META-INF/native-image/reflect-config.json @@ -107,6 +107,10 @@ "name":"com.sun.prism.shader.Mask_TextureSuper_Loader", "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] }, +{ + "name":"com.sun.prism.shader.Solid_Color_Loader", + "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] +}, { "name":"com.sun.prism.shader.Solid_TextureFirstPassLCD_Loader", "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] @@ -131,6 +135,10 @@ "name":"com.sun.scenario.effect.impl.prism.PrRenderer", "methods":[{"name":"createRenderer","parameterTypes":["com.sun.scenario.effect.FilterContext"] }] }, +{ + "name":"com.sun.scenario.effect.impl.prism.ps.PPSBlend_SRC_INPeer", + "methods":[{"name":"","parameterTypes":["com.sun.scenario.effect.FilterContext","com.sun.scenario.effect.impl.Renderer","java.lang.String"] }] +}, { "name":"com.sun.scenario.effect.impl.prism.ps.PPSLinearConvolveShadowPeer", "methods":[{"name":"","parameterTypes":["com.sun.scenario.effect.FilterContext","com.sun.scenario.effect.impl.Renderer","java.lang.String"] }] @@ -264,6 +272,9 @@ { "name":"javafx.scene.control.Control" }, +{ + "name":"javafx.scene.control.Labeled" +}, { "name":"javafx.scene.effect.Effect" }, @@ -418,10 +429,6 @@ "name":"sun.security.rsa.RSASignature$SHA256withRSA", "methods":[{"name":"","parameterTypes":[] }] }, -{ - "name":"sun.security.rsa.RSASignature$SHA384withRSA", - "methods":[{"name":"","parameterTypes":[] }] -}, { "name":"sun.security.ssl.KeyManagerFactoryImpl$SunX509", "methods":[{"name":"","parameterTypes":[] }] diff --git a/GUI/src/main/resources/META-INF/native-image/resource-config.json b/GUI/src/main/resources/META-INF/native-image/resource-config.json index a4f938af8..0f645362a 100644 --- a/GUI/src/main/resources/META-INF/native-image/resource-config.json +++ b/GUI/src/main/resources/META-INF/native-image/resource-config.json @@ -1,31 +1,43 @@ { "resources":{ "includes":[{ - "pattern":"GUI:\\QBackgrounds/DriftyMain.png\\E" + "pattern":"GUI:\\QBackgrounds/DriftyMainDark.png\\E" }, { - "pattern":"GUI:\\QButtons/Save/SaveDown.png\\E" + "pattern":"GUI:\\QBackgrounds/DriftyMainLight.png\\E" }, { - "pattern":"GUI:\\QButtons/Save/SaveUp.png\\E" + "pattern":"GUI:\\QButtons/Save/SaveDownDark.png\\E" }, { - "pattern":"GUI:\\QButtons/Start/StartDown.png\\E" + "pattern":"GUI:\\QButtons/Save/SaveDownLight.png\\E" }, { - "pattern":"GUI:\\QButtons/Start/StartUp.png\\E" + "pattern":"GUI:\\QButtons/Save/SaveUpDark.png\\E" + }, { + "pattern":"GUI:\\QButtons/Save/SaveUpLight.png\\E" + }, { + "pattern":"GUI:\\QButtons/Start/StartDownDark.png\\E" + }, { + "pattern":"GUI:\\QButtons/Start/StartDownLight.png\\E" + }, { + "pattern":"GUI:\\QButtons/Start/StartUpDark.png\\E" + }, { + "pattern":"GUI:\\QButtons/Start/StartUpLight.png\\E" }, { "pattern":"GUI:\\QCSS/Button.css\\E" }, { "pattern":"GUI:\\QCSS/CheckBox.css\\E" }, { "pattern":"GUI:\\QCSS/ContextMenu.css\\E" + }, { + "pattern":"GUI:\\QCSS/DarkTheme.css\\E" }, { "pattern":"GUI:\\QCSS/Label.css\\E" + }, { + "pattern":"GUI:\\QCSS/LightTheme.css\\E" }, { "pattern":"GUI:\\QCSS/ListView.css\\E" }, { "pattern":"GUI:\\QCSS/Menu.css\\E" }, { "pattern":"GUI:\\QCSS/ProgressBar.css\\E" - }, { - "pattern":"GUI:\\QCSS/Scene.css\\E" }, { "pattern":"GUI:\\QCSS/ScrollPane.css\\E" }, { @@ -45,7 +57,9 @@ }, { "pattern":"GUI:\\QLabels/Link.png\\E" }, { - "pattern":"GUI:\\QSplash.png\\E" + "pattern":"GUI:\\QSplashDark.png\\E" + }, { + "pattern":"GUI:\\QSplashLight.png\\E" }, { "pattern":"\\QMETA-INF/fonts.mf\\E" }, { @@ -58,8 +72,6 @@ "pattern":"\\QMETA-INF/services/java.nio.channels.spi.SelectorProvider\\E" }, { "pattern":"\\QMETA-INF/services/java.nio.charset.spi.CharsetProvider\\E" - }, { - "pattern":"\\QMETA-INF/services/java.time.zone.ZoneRulesProvider\\E" }, { "pattern":"\\QMETA-INF/services/java.util.prefs.PreferencesFactory\\E" }, { @@ -67,21 +79,47 @@ }, { "pattern":"\\QMETA-INF/services/javax.xml.transform.TransformerFactory\\E" }, { - "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/nfkc.nrm\\E" + "pattern":"\\Qcom/sun/javafx/scene/control/skin/resources/controls_en.properties\\E" }, { - "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/ubidi.icu\\E" + "pattern":"\\Qcom/sun/javafx/scene/control/skin/resources/controls_en_US.properties\\E" }, { - "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/uprops.icu\\E" + "pattern":"\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en.properties\\E" }, { - "pattern":"java.base:\\Qsun/net/idn/uidna.spp\\E" + "pattern":"\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en_US.properties\\E" + }, { + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt74b/nfkc.nrm\\E" }, { - "pattern":"java.base:\\Qsun/text/resources/WordBreakIteratorData\\E" + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt74b/ubidi.icu\\E" + }, { + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt74b/uprops.icu\\E" + }, { + "pattern":"java.base:\\Qsun/net/idn/uidna.spp\\E" }, { "pattern":"java.xml:\\Qcom/sun/org/apache/xml/internal/serializer/Encodings.properties\\E" + }, { + "pattern":"java.xml:\\Qcom/sun/org/apache/xml/internal/serializer/XMLEntities.properties\\E" + }, { + "pattern":"java.xml:\\Qcom/sun/org/apache/xml/internal/serializer/XMLEntities_en.properties\\E" + }, { + "pattern":"java.xml:\\Qcom/sun/org/apache/xml/internal/serializer/XMLEntities_en_US.properties\\E" + }, { + "pattern":"java.xml:\\Qjdk/xml/internal/jdkcatalog/JDKCatalog.xml\\E" }, { "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/modena/modena.bss\\E" + }, { + "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/resources/controls.properties\\E" + }, { + "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/resources/controls_en.properties\\E" + }, { + "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/resources/controls_en_US.properties\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/glass/utils/NativeLibLoader.class\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle.properties\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en.properties\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en_US.properties\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/DrawPgram_Color.frag\\E" }, { @@ -92,6 +130,8 @@ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/FillRoundRect_Color.frag\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Mask_TextureSuper.frag\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Solid_Color.frag\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Solid_TextureFirstPassLCD.frag\\E" }, { @@ -102,6 +142,8 @@ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Texture_Color.frag\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Texture_LinearGradient_PAD.frag\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/scenario/effect/impl/es2/glsl/Blend_SRC_IN.frag\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/scenario/effect/impl/es2/glsl/LinearConvolveShadow_20.frag\\E" }, { @@ -123,12 +165,18 @@ }]}, "bundles":[{ "name":"com.sun.javafx.tk.quantum.QuantumMessagesBundle", - "locales":[""] + "locales":["en-US"] }, { "name":"com.sun.org.apache.xml.internal.serializer.XMLEntities", - "locales":[""] + "locales":["en-US"] }, { "name":"com/sun/javafx/scene/control/skin/resources/controls", - "locales":[""] + "locales":["en-US"] + }, { + "name":"sun.text.resources.cldr.FormatData", + "locales":["en", "en-US", "und"] + }, { + "name":"sun.util.resources.cldr.CalendarData", + "locales":["und"] }] } diff --git a/GUI/src/main/resources/SplashDark.png b/GUI/src/main/resources/SplashDark.png new file mode 100644 index 0000000000000000000000000000000000000000..401c399378f2d0dfc55660bdeaca1bb54a8f8985 GIT binary patch literal 56978 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

k&{wv%`0c4su(T7|?_O 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 F@jsA Date: Wed, 26 Jun 2024 10:39:22 +0000 Subject: [PATCH 46/70] style: Formatted Java files --- GUI/src/main/java/gui/support/Constants.java | 16 ++++++++-------- GUI/src/main/java/main/Drifty_GUI.java | 2 +- GUI/src/main/java/ui/About.java | 2 +- GUI/src/main/java/ui/ConfirmationDialog.java | 2 +- GUI/src/main/java/ui/MainGridPane.java | 4 ++-- GUI/src/main/java/ui/Settings.java | 8 ++++---- GUI/src/main/java/ui/Theme.java | 4 ++-- GUI/src/main/java/ui/UIController.java | 8 ++++---- 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/GUI/src/main/java/gui/support/Constants.java b/GUI/src/main/java/gui/support/Constants.java index 00e1307fd..77bdf374d 100644 --- a/GUI/src/main/java/gui/support/Constants.java +++ b/GUI/src/main/java/gui/support/Constants.java @@ -18,14 +18,14 @@ public class Constants extends support.Constants { public static final UIComponentBuilder UI_COMPONENT_BUILDER_INSTANCE = UIComponentBuilder.getInstance(); public static final String BUTTON_RELEASED = "-fx-text-fill: white;" + - "-fx-font-weight: Bold;" + - "-fx-background-color: linear-gradient(rgb(0, 53, 105) 20%, rgb(26, 21, 129) 65%, rgb(0, 0, 65) 100%);" + - "-fx-border-color: white;"; + "-fx-font-weight: Bold;" + + "-fx-background-color: linear-gradient(rgb(0, 53, 105) 20%, rgb(26, 21, 129) 65%, rgb(0, 0, 65) 100%);" + + "-fx-border-color: white;"; public static final String BUTTON_PRESSED = "-fx-text-fill: white;" + - "-fx-font-weight: Bold;" + - " -fx-background-color: linear-gradient(rgb(11, 118, 220) 20%, rgb(33, 31, 131) 65%, rgb(2, 2, 168) 100%);\n" + - "-fx-border-color: white;"; + "-fx-font-weight: Bold;" + + " -fx-background-color: linear-gradient(rgb(11, 118, 220) 20%, rgb(33, 31, 131) 65%, rgb(2, 2, 168) 100%);\n" + + "-fx-border-color: white;"; public static final String GUI_APPLICATION_TERMINATED = "Drifty GUI (Graphical User Interface) Application Terminated!"; public static final String TRYING_TO_DOWNLOAD_F = "Trying to download \"%s\" ..."; public static final String WRITE_ACCESS_DENIED_F = "Write Access To \"%s\" DENIED!"; @@ -35,7 +35,7 @@ public class Constants extends support.Constants { public static final double SCREEN_HEIGHT = SCREEN_SIZE.getHeight(); // Graphics Files - public static final URL DRIFTY_MAIN_PNG = AppSettings.GET.mainTheme().equals("Dark") ? Constants.class.getResource("/Backgrounds/DriftyMainDark.png") : Constants.class.getResource("/Backgrounds/DriftyMainLight.png"); + public static final URL DRIFTY_MAIN_PNG = "Dark".equals(AppSettings.GET.mainTheme()) ? Constants.class.getResource("/Backgrounds/DriftyMainDark.png") : Constants.class.getResource("/Backgrounds/DriftyMainLight.png"); public static final URL SAVE_UP_LIGHT_PNG = Constants.class.getResource("/Buttons/Save/SaveUpLight.png"); public static final URL SAVE_UP_DARK_PNG = Constants.class.getResource("/Buttons/Save/SaveUpDark.png"); public static final URL SAVE_DOWN_LIGHT_PNG = Constants.class.getResource("/Buttons/Save/SaveDownLight.png"); @@ -49,7 +49,7 @@ public class Constants extends support.Constants { public static final URL DIRECTORY_PNG = Constants.class.getResource("/Labels/Directory.png"); public static final URL FILENAME_PNG = Constants.class.getResource("/Labels/Filename.png"); public static final URL DRIFTY_ICON = Constants.class.getResource("/Icons/AppIcon.png"); - public static final URL SPLASH = AppSettings.GET.mainTheme().equals("Dark") ? Constants.class.getResource("/SplashDark.png") : Constants.class.getResource("/SplashLight.png"); + public static final URL SPLASH = "Dark".equals(AppSettings.GET.mainTheme()) ? Constants.class.getResource("/SplashDark.png") : Constants.class.getResource("/SplashLight.png"); // Stylesheets public static final URL LIGHT_THEME_CSS = Constants.class.getResource("/CSS/LightTheme.css"); diff --git a/GUI/src/main/java/main/Drifty_GUI.java b/GUI/src/main/java/main/Drifty_GUI.java index 13402802b..aab8ec7a4 100644 --- a/GUI/src/main/java/main/Drifty_GUI.java +++ b/GUI/src/main/java/main/Drifty_GUI.java @@ -67,7 +67,7 @@ private void createScene() { placeControl(gridPane, 40, 40, 40, 40); placeControl(menu, 0, 0, 0, -1); scene = Constants.getScene(ap); - if (AppSettings.GET.mainTheme().equals("Dark")) { + if ("Dark".equals(AppSettings.GET.mainTheme())) { Constants.addCSS(scene, Constants.DARK_THEME_CSS); } scene.setOnContextMenuRequested(e -> getRightClickContextMenu().show(scene.getWindow(), e.getScreenX(), e.getScreenY())); diff --git a/GUI/src/main/java/ui/About.java b/GUI/src/main/java/ui/About.java index 2d156d84a..528979ea1 100644 --- a/GUI/src/main/java/ui/About.java +++ b/GUI/src/main/java/ui/About.java @@ -61,7 +61,7 @@ private void setupStage() { } private void applyThemeSettings(VBox aboutRoot) { - if (AppSettings.GET.mainTheme().equals("Dark")) { + if ("Dark".equals(AppSettings.GET.mainTheme())) { Constants.addCSS(aboutScene, Constants.DARK_THEME_CSS); for (Node node : aboutRoot.getChildren()) { if (node instanceof Label) { diff --git a/GUI/src/main/java/ui/ConfirmationDialog.java b/GUI/src/main/java/ui/ConfirmationDialog.java index 52ba5589d..966096a2e 100644 --- a/GUI/src/main/java/ui/ConfirmationDialog.java +++ b/GUI/src/main/java/ui/ConfirmationDialog.java @@ -151,7 +151,7 @@ public GetConfirmationDialogResponse getResponse() { private void showScene() { stage = Constants.getStage(windowTitle, false); scene = Constants.getScene(vbox); - if (AppSettings.GET.mainTheme().equals("Dark")) { + if ("Dark".equals(AppSettings.GET.mainTheme())) { Theme.applyTheme("Dark", scene); Theme.changeButtonStyle(true, btnYes); Theme.changeButtonStyle(true, btnNo); diff --git a/GUI/src/main/java/ui/MainGridPane.java b/GUI/src/main/java/ui/MainGridPane.java index a2e47d566..de0a01909 100644 --- a/GUI/src/main/java/ui/MainGridPane.java +++ b/GUI/src/main/java/ui/MainGridPane.java @@ -24,8 +24,8 @@ public class MainGridPane extends GridPane { public final ImageView ivDir = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.IMG_DIR_LABEL, .7); public final ImageView ivFilename = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.IMG_FILENAME_LABEL, .7); public final ImageView ivAutoPaste = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.IMG_AUTO_PASTE_LABEL, .7); - public final Button btnStart = AppSettings.GET.mainTheme().equals("Dark") ? newButton(Constants.IMG_START_UP_DARK, Constants.IMG_START_DOWN_DARK) : newButton(Constants.IMG_START_UP_LIGHT, Constants.IMG_START_DOWN_LIGHT); - public final Button btnSave = AppSettings.GET.mainTheme().equals("Dark") ? newButton(Constants.IMG_SAVE_UP_DARK, Constants.IMG_SAVE_DOWN_DARK) : newButton(Constants.IMG_SAVE_UP_LIGHT, Constants.IMG_SAVE_DOWN_LIGHT); + public final Button btnStart = "Dark".equals(AppSettings.GET.mainTheme()) ? newButton(Constants.IMG_START_UP_DARK, Constants.IMG_START_DOWN_DARK) : newButton(Constants.IMG_START_UP_LIGHT, Constants.IMG_START_DOWN_LIGHT); + public final Button btnSave = "Dark".equals(AppSettings.GET.mainTheme()) ? newButton(Constants.IMG_SAVE_UP_DARK, Constants.IMG_SAVE_DOWN_DARK) : newButton(Constants.IMG_SAVE_UP_LIGHT, Constants.IMG_SAVE_DOWN_LIGHT); public final CheckBox cbAutoPaste = new CheckBox(); private final HBox boxAutoPaste = boxAutoPaste(); public static HBox boxLogo = UI_COMPONENT_BUILDER_INSTANCE.buildHBox(ivLogo); diff --git a/GUI/src/main/java/ui/Settings.java b/GUI/src/main/java/ui/Settings.java index 1439b9a8e..8111f48cb 100644 --- a/GUI/src/main/java/ui/Settings.java +++ b/GUI/src/main/java/ui/Settings.java @@ -112,7 +112,7 @@ private void addComponents() { } private void setInitialTheme(String theme) { - boolean isDark = theme.equals("Dark"); + boolean isDark = "Dark".equals(theme); Constants.addCSS(settingsScene, isDark ? Constants.DARK_THEME_CSS : Constants.LIGHT_THEME_CSS); applyStyleToLabels(isDark, lblTheme, lblAutoPaste, lblDefaultDownloadDir, lblSettingsHeading); tfCurrentDirectory.setStyle("-fx-text-fill: " + (isDark ? "white" : "black") + " ; -fx-font-weight: Bold"); @@ -129,7 +129,7 @@ private void applyStyleToLabels(boolean isDark, Label... labels) { private void setupThemeChoice() { themeChoiceBox = new ChoiceBox<>(); themeChoiceBox.getItems().addAll("Dark Theme", "Light Theme"); - themeChoiceBox.setValue(AppSettings.GET.mainTheme().equals("Dark") ? "Dark Theme" : "Light Theme"); + themeChoiceBox.setValue("Dark".equals(AppSettings.GET.mainTheme()) ? "Dark Theme" : "Light Theme"); themeChoiceBox.setOnAction(e -> Theme.applyTheme(themeChoiceBox.getValue().equals("Dark Theme") ? "Dark" : "Light", settingsScene, Drifty_GUI.getScene(), About.getScene(), UIController.getInfoScene(), ConfirmationDialog.getScene())); } @@ -156,7 +156,7 @@ private void createTfDirectory() { private void createDirectoryButton() { selectDirectoryButton = new Button("Select Directory"); - if (AppSettings.GET.mainTheme().equals("Dark")) { + if ("Dark".equals(AppSettings.GET.mainTheme())) { selectDirectoryButton.setStyle(Constants.BUTTON_RELEASED); selectDirectoryButton.setOnMousePressed(e -> selectDirectoryButton.setStyle(Constants.BUTTON_PRESSED)); selectDirectoryButton.setOnMouseReleased(e -> selectDirectoryButton.setStyle(Constants.BUTTON_RELEASED)); @@ -170,7 +170,7 @@ private void handleDirectorySelection() { DirectoryChooser chooser = new DirectoryChooser(); chooser.setInitialDirectory(new File(System.getProperty("user.home"))); File selectedDirectory = chooser.showDialog(this.stage); - String directoryPath = (selectedDirectory != null ? selectedDirectory.getAbsolutePath() : AppSettings.GET.lastDownloadFolder()); + String directoryPath = selectedDirectory != null ? selectedDirectory.getAbsolutePath() : AppSettings.GET.lastDownloadFolder(); UIController.form.tfDir.setText(directoryPath); tfCurrentDirectory.setText(directoryPath); } diff --git a/GUI/src/main/java/ui/Theme.java b/GUI/src/main/java/ui/Theme.java index 7b5240f0d..8e08a7961 100644 --- a/GUI/src/main/java/ui/Theme.java +++ b/GUI/src/main/java/ui/Theme.java @@ -19,7 +19,7 @@ public class Theme { public static void applyTheme(String theme, Scene... scenes) { - boolean isDark = theme.equals("Dark"); + boolean isDark = "Dark".equals(theme); AppSettings.SET.mainTheme(theme); updateCSS(isDark, scenes); updateTextColors(isDark, scenes); @@ -85,7 +85,7 @@ private static void updateTextColors(boolean isDark, Scene... scenes) { } private static void changeInfoTextFlow(Paint color) { - Color headingsColor = AppSettings.GET.mainTheme().equals("Dark") ? Color.LIGHTGREEN : Color.DARKBLUE; + Color headingsColor = "Dark".equals(AppSettings.GET.mainTheme()) ? Color.LIGHTGREEN : Color.DARKBLUE; for (int i = 0; i < UIController.getInfoTf().getChildren().size(); i++) { if (UIController.getInfoTf().getChildren().get(i) instanceof Text) { Text text = (Text) UIController.getInfoTf().getChildren().get(i); diff --git a/GUI/src/main/java/ui/UIController.java b/GUI/src/main/java/ui/UIController.java index e9dccc1b8..0141a8145 100644 --- a/GUI/src/main/java/ui/UIController.java +++ b/GUI/src/main/java/ui/UIController.java @@ -104,7 +104,7 @@ private void setControlProperties() { form.tfLink.disableProperty().bind(disableInputs); form.listView.setContextMenu(getListMenu()); - if (AppSettings.GET.mainTheme().equals("Dark")) { + if ("Dark".equals(AppSettings.GET.mainTheme())) { form.tfDir.setStyle("-fx-text-fill: White;"); form.tfFilename.setStyle("-fx-text-fill: White;"); form.tfLink.setStyle("-fx-text-fill: White;"); @@ -782,8 +782,8 @@ private void commitJobListToListView() { } private void help() { - Color textColor = AppSettings.GET.mainTheme().equals("Dark") ? Color.WHITE : Color.BLACK; - Color headingsColor = AppSettings.GET.mainTheme().equals("Dark") ? Color.LIGHTGREEN : Color.DARKBLUE; + Color textColor = "Dark".equals(AppSettings.GET.mainTheme()) ? Color.WHITE : Color.BLACK; + Color headingsColor = "Dark".equals(AppSettings.GET.mainTheme()) ? Color.LIGHTGREEN : Color.DARKBLUE; double h = 20; double n = 16; INFO_TF.getChildren().add(text("Link:\n", true, headingsColor, h)); @@ -829,7 +829,7 @@ private void help() { scrollPane.setPrefHeight(height); scrollPane.setFitToWidth(true); infoScene = Constants.getScene(scrollPane); - if (AppSettings.GET.mainTheme().equals("Dark")) { + if ("Dark".equals(AppSettings.GET.mainTheme())) { Theme.applyTheme("Dark", infoScene); } From 04361747601bc91113d5f441ed2408d8d5ad2602 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:29:30 +0530 Subject: [PATCH 47/70] chore(ci): bump docker/build-push-action from 6.1.0 to 6.2.0 (#551) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.1.0 to 6.2.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.1.0...v6.2.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index e974bbcf1..c1cdd7867 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -163,7 +163,7 @@ jobs: # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v6.1.0 + uses: docker/build-push-action@v6.2.0 with: context: build/${{ matrix.docker_context }} push: ${{ github.event_name != 'pull_request_target' && github.repository == 'SaptarshiSarkar12/Drifty' && !contains(github.ref_name, 'dependabot') }} From 64b8dcbad82ebf98e049fa5f65e0d17810b2f1d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:34:28 +0530 Subject: [PATCH 48/70] chore(npm): bump @headlessui/react from 2.1.0 to 2.1.1 in /Website (#552) Bumps [@headlessui/react](https://github.com/tailwindlabs/headlessui/tree/HEAD/packages/@headlessui-react) from 2.1.0 to 2.1.1. - [Release notes](https://github.com/tailwindlabs/headlessui/releases) - [Changelog](https://github.com/tailwindlabs/headlessui/blob/main/packages/@headlessui-react/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/headlessui/commits/@headlessui/react@v2.1.1/packages/@headlessui-react) --- updated-dependencies: - dependency-name: "@headlessui/react" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 8 ++++---- Website/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index 97f0aee80..817fdf3f4 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -8,7 +8,7 @@ "name": "website", "version": "0.1.0", "dependencies": { - "@headlessui/react": "^2.1.0", + "@headlessui/react": "^2.1.1", "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.4", @@ -152,9 +152,9 @@ "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" }, "node_modules/@headlessui/react": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.1.0.tgz", - "integrity": "sha512-/MizQk2xqR5ELkmCI1xWy3VgJULvR8gcAXtZhcK7sY53TNRCPeMdeODEXKSv9LPSSRlEAyzW1+NGJiaXq6dLRw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.1.1.tgz", + "integrity": "sha512-808gVNUbRDbDR3GMNPHy+ON0uvR8b9H7IA+Q2UbhOsNCIjgwuwb2Iuv8VPT/1AW0UzLX8g10tN6LhF15GaUJCQ==", "dependencies": { "@floating-ui/react": "^0.26.16", "@react-aria/focus": "^3.17.1", diff --git a/Website/package.json b/Website/package.json index 900fc40f9..9cffb25fe 100644 --- a/Website/package.json +++ b/Website/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@headlessui/react": "^2.1.0", + "@headlessui/react": "^2.1.1", "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.4", From 50219c97d905099b5f67c96c0e1b5c86216636e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jul 2024 09:03:44 +0530 Subject: [PATCH 49/70] chore(maven): bump org.codehaus.mojo:versions-maven-plugin from 2.16.2 to 2.17.0 (#554) chore(maven): bump org.codehaus.mojo:versions-maven-plugin Bumps [org.codehaus.mojo:versions-maven-plugin](https://github.com/mojohaus/versions) from 2.16.2 to 2.17.0. - [Release notes](https://github.com/mojohaus/versions/releases) - [Changelog](https://github.com/mojohaus/versions/blob/master/ReleaseNotes.md) - [Commits](https://github.com/mojohaus/versions/compare/2.16.2...2.17.0) --- updated-dependencies: - dependency-name: org.codehaus.mojo:versions-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 12e5565ae..5dc690db8 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ org.codehaus.mojo versions-maven-plugin - 2.16.2 + 2.17.0 From 1f1ef7074cd46edcd00073fb6961a87771578e1c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jul 2024 09:04:06 +0530 Subject: [PATCH 50/70] chore(ci): bump docker/build-push-action from 6.2.0 to 6.3.0 (#557) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.2.0 to 6.3.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.2.0...v6.3.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index c1cdd7867..4d30f3b2b 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -163,7 +163,7 @@ jobs: # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v6.2.0 + uses: docker/build-push-action@v6.3.0 with: context: build/${{ matrix.docker_context }} push: ${{ github.event_name != 'pull_request_target' && github.repository == 'SaptarshiSarkar12/Drifty' && !contains(github.ref_name, 'dependabot') }} From 2e2fd9f1297951a4063548920a7991b43266abaf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jul 2024 09:13:20 +0530 Subject: [PATCH 51/70] chore(npm): bump postcss from 8.4.38 to 8.4.39 in /Website (#556) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.38 to 8.4.39. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.38...8.4.39) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 16 ++++++++-------- Website/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index 817fdf3f4..8c4c0da7c 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -13,7 +13,7 @@ "eslint": "8.57.0", "eslint-config-next": "14.2.4", "next": "14.2.4", - "postcss": "8.4.38", + "postcss": "8.4.39", "react": "18.3.1", "react-dom": "18.3.1", "remark": "^15.0.1", @@ -4413,9 +4413,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -4445,9 +4445,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "funding": [ { "type": "opencollective", @@ -4464,7 +4464,7 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "source-map-js": "^1.2.0" }, "engines": { diff --git a/Website/package.json b/Website/package.json index 9cffb25fe..0c31be510 100644 --- a/Website/package.json +++ b/Website/package.json @@ -14,7 +14,7 @@ "eslint": "8.57.0", "eslint-config-next": "14.2.4", "next": "14.2.4", - "postcss": "8.4.38", + "postcss": "8.4.39", "react": "18.3.1", "react-dom": "18.3.1", "remark": "^15.0.1", From d18debad8a35244a458959d1a82da14c635d042e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jul 2024 09:29:23 +0530 Subject: [PATCH 52/70] chore(maven): bump org.openrewrite.recipe:rewrite-recommendations from 1.6.1 to 1.7.0 (#560) chore(maven): bump org.openrewrite.recipe:rewrite-recommendations Bumps [org.openrewrite.recipe:rewrite-recommendations](https://github.com/openrewrite/rewrite-recommendations) from 1.6.1 to 1.7.0. - [Release notes](https://github.com/openrewrite/rewrite-recommendations/releases) - [Commits](https://github.com/openrewrite/rewrite-recommendations/compare/v1.6.1...v1.7.0) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-recommendations dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5dc690db8..ccf3757ef 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ org.openrewrite.recipe rewrite-recommendations - 1.6.1 + 1.7.0 From cc58ee4dc0cef8987024f5cfd9eec628b66edaf2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jul 2024 09:29:57 +0530 Subject: [PATCH 53/70] chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin from 5.34.1 to 5.35.0 (#559) chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin Bumps [org.openrewrite.maven:rewrite-maven-plugin](https://github.com/openrewrite/rewrite-maven-plugin) from 5.34.1 to 5.35.0. - [Release notes](https://github.com/openrewrite/rewrite-maven-plugin/releases) - [Commits](https://github.com/openrewrite/rewrite-maven-plugin/compare/v5.34.1...v5.35.0) --- updated-dependencies: - dependency-name: org.openrewrite.maven:rewrite-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ccf3757ef..93e96c09e 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ org.openrewrite.maven rewrite-maven-plugin - 5.34.1 + 5.35.0 org.openrewrite.staticanalysis.CommonStaticAnalysis From 908ae25fd5ef3a9e5f9a85cef882f042a0420c36 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jul 2024 09:30:30 +0530 Subject: [PATCH 54/70] chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis from 1.10.1 to 1.11.0 (#558) chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis Bumps [org.openrewrite.recipe:rewrite-static-analysis](https://github.com/openrewrite/rewrite-static-analysis) from 1.10.1 to 1.11.0. - [Release notes](https://github.com/openrewrite/rewrite-static-analysis/releases) - [Commits](https://github.com/openrewrite/rewrite-static-analysis/compare/v1.10.1...v1.11.0) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-static-analysis dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 93e96c09e..3de1bfb0a 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ org.openrewrite.recipe rewrite-static-analysis - 1.10.1 + 1.11.0 org.openrewrite.recipe From 007f13fdcf5a52eae9abad34d226c36aa1cabd12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Jul 2024 11:21:49 +0530 Subject: [PATCH 55/70] chore(ci): bump docker/setup-buildx-action from 3.3.0 to 3.4.0 (#561) Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.3.0 to 3.4.0. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v3.3.0...v3.4.0) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 4d30f3b2b..bed4652f1 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -116,7 +116,7 @@ jobs: # multi-platform images and export cache # https://github.com/docker/setup-buildx-action - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3.3.0 + uses: docker/setup-buildx-action@v3.4.0 # Login to GitHub Container Registry # https://github.com/docker/login-action From c49209757fa7cb9db6ff0ae125015a21ab5a6e1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 11:07:00 +0530 Subject: [PATCH 56/70] chore(npm): bump @headlessui/react from 2.1.1 to 2.1.2 in /Website (#563) Bumps [@headlessui/react](https://github.com/tailwindlabs/headlessui/tree/HEAD/packages/@headlessui-react) from 2.1.1 to 2.1.2. - [Release notes](https://github.com/tailwindlabs/headlessui/releases) - [Changelog](https://github.com/tailwindlabs/headlessui/blob/main/packages/@headlessui-react/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/headlessui/commits/@headlessui/react@v2.1.2/packages/@headlessui-react) --- updated-dependencies: - dependency-name: "@headlessui/react" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 24 ++++++++++++------------ Website/package.json | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index 8c4c0da7c..6b61148e0 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -8,7 +8,7 @@ "name": "website", "version": "0.1.0", "dependencies": { - "@headlessui/react": "^2.1.1", + "@headlessui/react": "^2.1.2", "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.4", @@ -152,14 +152,14 @@ "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" }, "node_modules/@headlessui/react": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.1.1.tgz", - "integrity": "sha512-808gVNUbRDbDR3GMNPHy+ON0uvR8b9H7IA+Q2UbhOsNCIjgwuwb2Iuv8VPT/1AW0UzLX8g10tN6LhF15GaUJCQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.1.2.tgz", + "integrity": "sha512-Kb3hgk9gRNRcTZktBrKdHhF3xFhYkca1Rk6e1/im2ENf83dgN54orMW0uSKTXFnUpZOUFZ+wcY05LlipwgZIFQ==", "dependencies": { "@floating-ui/react": "^0.26.16", "@react-aria/focus": "^3.17.1", "@react-aria/interactions": "^3.21.3", - "@tanstack/react-virtual": "3.5.0" + "@tanstack/react-virtual": "^3.8.1" }, "engines": { "node": ">=10" @@ -636,11 +636,11 @@ } }, "node_modules/@tanstack/react-virtual": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.5.0.tgz", - "integrity": "sha512-rtvo7KwuIvqK9zb0VZ5IL7fiJAEnG+0EiFZz8FUOs+2mhGqdGmjKIaT1XU7Zq0eFqL0jonLlhbayJI/J2SA/Bw==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.8.1.tgz", + "integrity": "sha512-dP5a7giEM4BQWLJ7K07ToZv8rF51mzbrBMkf0scg1QNYuFx3utnPUBPUHdzaowZhIez1K2XS78amuzD+YGRA5Q==", "dependencies": { - "@tanstack/virtual-core": "3.5.0" + "@tanstack/virtual-core": "3.8.1" }, "funding": { "type": "github", @@ -652,9 +652,9 @@ } }, "node_modules/@tanstack/virtual-core": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.5.0.tgz", - "integrity": "sha512-KnPRCkQTyqhanNC0K63GBG3wA8I+D1fQuVnAvcBF8f13akOKeQp1gSbu6f77zCxhEk727iV5oQnbHLYzHrECLg==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.8.1.tgz", + "integrity": "sha512-uNtAwenT276M9QYCjTBoHZ8X3MUeCRoGK59zPi92hMIxdfS9AyHjkDWJ94WroDxnv48UE+hIeo21BU84jKc8aQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" diff --git a/Website/package.json b/Website/package.json index 0c31be510..1cb442fbb 100644 --- a/Website/package.json +++ b/Website/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@headlessui/react": "^2.1.1", + "@headlessui/react": "^2.1.2", "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.4", From cb8975325655accb545373a7fa37bcaaf21d7051 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 11:38:54 +0530 Subject: [PATCH 57/70] chore(npm): bump eslint-config-next from 14.2.4 to 14.2.5 in /Website (#565) Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 14.2.4 to 14.2.5. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/commits/v14.2.5/packages/eslint-config-next) --- updated-dependencies: - dependency-name: eslint-config-next dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 37 +++++++++++++++++-------------------- Website/package.json | 2 +- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index 6b61148e0..e3fc42dfe 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -11,7 +11,7 @@ "@headlessui/react": "^2.1.2", "autoprefixer": "10.4.19", "eslint": "8.57.0", - "eslint-config-next": "14.2.4", + "eslint-config-next": "14.2.5", "next": "14.2.4", "postcss": "8.4.39", "react": "18.3.1", @@ -294,9 +294,9 @@ "integrity": "sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg==" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.4.tgz", - "integrity": "sha512-svSFxW9f3xDaZA3idQmlFw7SusOuWTpDTAeBlO3AEPDltrraV+lqs7mAc6A27YdnpQVVIA3sODqUAAHdWhVWsA==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.5.tgz", + "integrity": "sha512-LY3btOpPh+OTIpviNojDpUdIbHW9j0JBYBjsIp8IxtDFfYFyORvw3yNq6N231FVqQA7n7lwaf7xHbVJlA1ED7g==", "dependencies": { "glob": "10.3.10" } @@ -331,9 +331,9 @@ } }, "node_modules/@next/eslint-plugin-next/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1800,11 +1800,11 @@ } }, "node_modules/eslint-config-next": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.4.tgz", - "integrity": "sha512-Qr0wMgG9m6m4uYy2jrYJmyuNlYZzPRQq5Kvb9IDlYwn+7yq6W6sfMNFgb+9guM1KYwuIo6TIaiFhZJ6SnQ/Efw==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.5.tgz", + "integrity": "sha512-zogs9zlOiZ7ka+wgUnmcM0KBEDjo4Jis7kxN1jvC0N4wynQ2MIx/KBkg4mVF63J5EK4W0QMCn7xO3vNisjaAoA==", "dependencies": { - "@next/eslint-plugin-next": "14.2.4", + "@next/eslint-plugin-next": "14.2.5", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", "eslint-import-resolver-node": "^0.3.6", @@ -2308,9 +2308,9 @@ } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -4397,12 +4397,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/path-type": { "version": "4.0.0", diff --git a/Website/package.json b/Website/package.json index 1cb442fbb..9b5253c95 100644 --- a/Website/package.json +++ b/Website/package.json @@ -12,7 +12,7 @@ "@headlessui/react": "^2.1.2", "autoprefixer": "10.4.19", "eslint": "8.57.0", - "eslint-config-next": "14.2.4", + "eslint-config-next": "14.2.5", "next": "14.2.4", "postcss": "8.4.39", "react": "18.3.1", From 44bc7f291b6fa06c0e9bc5522393abe232f90714 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 11:42:39 +0530 Subject: [PATCH 58/70] chore(ci): bump aquasecurity/trivy-action from 0.23.0 to 0.24.0 (#564) Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.23.0 to 0.24.0. - [Release notes](https://github.com/aquasecurity/trivy-action/releases) - [Commits](https://github.com/aquasecurity/trivy-action/compare/0.23.0...0.24.0) --- updated-dependencies: - dependency-name: aquasecurity/trivy-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dev-docker-build.yml | 2 +- .github/workflows/docker-publish.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev-docker-build.yml b/.github/workflows/dev-docker-build.yml index f35049570..da0b7f7b0 100644 --- a/.github/workflows/dev-docker-build.yml +++ b/.github/workflows/dev-docker-build.yml @@ -34,7 +34,7 @@ jobs: docker compose build runner docker compose build ${{ matrix.image_name_suffix }} - name: Run Trivy security scan - uses: aquasecurity/trivy-action@0.23.0 + uses: aquasecurity/trivy-action@0.24.0 continue-on-error: true with: image-ref: drifty-${{ matrix.image_name_suffix }} diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index bed4652f1..6809af31c 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -182,7 +182,7 @@ jobs: run: docker build -t ${{ matrix.image_name }} -f Docker/prod/${{ matrix.docker_context }}/Dockerfile build/${{ matrix.docker_context }} - name: Run Trivy security scan - uses: aquasecurity/trivy-action@0.23.0 + uses: aquasecurity/trivy-action@0.24.0 continue-on-error: true with: image-ref: ${{ matrix.image_name }} From 5347d6a90ccb9891c4b734170bb09f14e6d24a7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 11:45:03 +0530 Subject: [PATCH 59/70] chore(npm): bump next from 14.2.4 to 14.2.5 in /Website (#566) Bumps [next](https://github.com/vercel/next.js) from 14.2.4 to 14.2.5. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v14.2.4...v14.2.5) --- updated-dependencies: - dependency-name: next dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 88 +++++++++++++++++++-------------------- Website/package.json | 2 +- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index e3fc42dfe..3b496493a 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -12,7 +12,7 @@ "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.5", - "next": "14.2.4", + "next": "14.2.5", "postcss": "8.4.39", "react": "18.3.1", "react-dom": "18.3.1", @@ -289,9 +289,9 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@next/env": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.4.tgz", - "integrity": "sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg==" + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.5.tgz", + "integrity": "sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA==" }, "node_modules/@next/eslint-plugin-next": { "version": "14.2.5", @@ -345,9 +345,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz", - "integrity": "sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.5.tgz", + "integrity": "sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==", "cpu": [ "arm64" ], @@ -360,9 +360,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz", - "integrity": "sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.5.tgz", + "integrity": "sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==", "cpu": [ "x64" ], @@ -375,9 +375,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz", - "integrity": "sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.5.tgz", + "integrity": "sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==", "cpu": [ "arm64" ], @@ -390,9 +390,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz", - "integrity": "sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.5.tgz", + "integrity": "sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==", "cpu": [ "arm64" ], @@ -405,9 +405,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.4.tgz", - "integrity": "sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.5.tgz", + "integrity": "sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==", "cpu": [ "x64" ], @@ -420,9 +420,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.4.tgz", - "integrity": "sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.5.tgz", + "integrity": "sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==", "cpu": [ "x64" ], @@ -435,9 +435,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz", - "integrity": "sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.5.tgz", + "integrity": "sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==", "cpu": [ "arm64" ], @@ -450,9 +450,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz", - "integrity": "sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.5.tgz", + "integrity": "sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==", "cpu": [ "ia32" ], @@ -465,9 +465,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.4.tgz", - "integrity": "sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.5.tgz", + "integrity": "sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==", "cpu": [ "x64" ], @@ -4009,11 +4009,11 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/next": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.4.tgz", - "integrity": "sha512-R8/V7vugY+822rsQGQCjoLhMuC9oFj9SOi4Cl4b2wjDrseD0LRZ10W7R6Czo4w9ZznVSshKjuIomsRjvm9EKJQ==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.5.tgz", + "integrity": "sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==", "dependencies": { - "@next/env": "14.2.4", + "@next/env": "14.2.5", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -4028,15 +4028,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.4", - "@next/swc-darwin-x64": "14.2.4", - "@next/swc-linux-arm64-gnu": "14.2.4", - "@next/swc-linux-arm64-musl": "14.2.4", - "@next/swc-linux-x64-gnu": "14.2.4", - "@next/swc-linux-x64-musl": "14.2.4", - "@next/swc-win32-arm64-msvc": "14.2.4", - "@next/swc-win32-ia32-msvc": "14.2.4", - "@next/swc-win32-x64-msvc": "14.2.4" + "@next/swc-darwin-arm64": "14.2.5", + "@next/swc-darwin-x64": "14.2.5", + "@next/swc-linux-arm64-gnu": "14.2.5", + "@next/swc-linux-arm64-musl": "14.2.5", + "@next/swc-linux-x64-gnu": "14.2.5", + "@next/swc-linux-x64-musl": "14.2.5", + "@next/swc-win32-arm64-msvc": "14.2.5", + "@next/swc-win32-ia32-msvc": "14.2.5", + "@next/swc-win32-x64-msvc": "14.2.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", diff --git a/Website/package.json b/Website/package.json index 9b5253c95..127604e1e 100644 --- a/Website/package.json +++ b/Website/package.json @@ -13,7 +13,7 @@ "autoprefixer": "10.4.19", "eslint": "8.57.0", "eslint-config-next": "14.2.5", - "next": "14.2.4", + "next": "14.2.5", "postcss": "8.4.39", "react": "18.3.1", "react-dom": "18.3.1", From b7a366c241aa67c5fe6b9375e05ca2ace4e7e0fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:14:57 +0530 Subject: [PATCH 60/70] chore(maven): bump org.codehaus.mojo:versions-maven-plugin from 2.17.0 to 2.17.1 (#567) chore(maven): bump org.codehaus.mojo:versions-maven-plugin Bumps [org.codehaus.mojo:versions-maven-plugin](https://github.com/mojohaus/versions) from 2.17.0 to 2.17.1. - [Release notes](https://github.com/mojohaus/versions/releases) - [Changelog](https://github.com/mojohaus/versions/blob/master/ReleaseNotes.md) - [Commits](https://github.com/mojohaus/versions/compare/2.17.0...2.17.1) --- updated-dependencies: - dependency-name: org.codehaus.mojo:versions-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3de1bfb0a..47d41eb8e 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ org.codehaus.mojo versions-maven-plugin - 2.17.0 + 2.17.1 From a85fed00cb93fcf00c40df9ea163d7d75d2e6f7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:41:43 +0530 Subject: [PATCH 61/70] chore(npm): bump tailwindcss from 3.4.4 to 3.4.6 in /Website (#573) Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.4.4 to 3.4.6. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.6/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.4...v3.4.6) --- updated-dependencies: - dependency-name: tailwindcss dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Website/package-lock.json | 8 ++++---- Website/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Website/package-lock.json b/Website/package-lock.json index 3b496493a..4af38cf90 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -18,7 +18,7 @@ "react-dom": "18.3.1", "remark": "^15.0.1", "remark-html": "^16.0.1", - "tailwindcss": "3.4.4" + "tailwindcss": "3.4.6" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -5366,9 +5366,9 @@ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, "node_modules/tailwindcss": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", - "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.6.tgz", + "integrity": "sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", diff --git a/Website/package.json b/Website/package.json index 127604e1e..5cd678c36 100644 --- a/Website/package.json +++ b/Website/package.json @@ -19,6 +19,6 @@ "react-dom": "18.3.1", "remark": "^15.0.1", "remark-html": "^16.0.1", - "tailwindcss": "3.4.4" + "tailwindcss": "3.4.6" } } From 60bc2b861abcb36ea16e42a751c37e748a9b7436 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:46:58 +0530 Subject: [PATCH 62/70] chore(ci): bump docker/build-push-action from 6.3.0 to 6.4.0 (#571) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.3.0 to 6.4.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.3.0...v6.4.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 6809af31c..1ada8cd62 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -163,7 +163,7 @@ jobs: # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v6.3.0 + uses: docker/build-push-action@v6.4.0 with: context: build/${{ matrix.docker_context }} push: ${{ github.event_name != 'pull_request_target' && github.repository == 'SaptarshiSarkar12/Drifty' && !contains(github.ref_name, 'dependabot') }} From 0683703e051f77746ee4c945d61bfad45dc8d87b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:56:25 +0530 Subject: [PATCH 63/70] chore(maven): bump org.openrewrite.recipe:rewrite-recommendations from 1.7.0 to 1.8.0 (#570) chore(maven): bump org.openrewrite.recipe:rewrite-recommendations Bumps [org.openrewrite.recipe:rewrite-recommendations](https://github.com/openrewrite/rewrite-recommendations) from 1.7.0 to 1.8.0. - [Release notes](https://github.com/openrewrite/rewrite-recommendations/releases) - [Commits](https://github.com/openrewrite/rewrite-recommendations/compare/v1.7.0...v1.8.0) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-recommendations dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 47d41eb8e..e18eb399d 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ org.openrewrite.recipe rewrite-recommendations - 1.7.0 + 1.8.0 From 08e1bf809cb25c71ff1d46ca198d82af948192e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 12:06:20 +0530 Subject: [PATCH 64/70] chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis from 1.11.0 to 1.12.0 (#568) chore(maven): bump org.openrewrite.recipe:rewrite-static-analysis Bumps [org.openrewrite.recipe:rewrite-static-analysis](https://github.com/openrewrite/rewrite-static-analysis) from 1.11.0 to 1.12.0. - [Release notes](https://github.com/openrewrite/rewrite-static-analysis/releases) - [Commits](https://github.com/openrewrite/rewrite-static-analysis/compare/v1.11.0...v1.12.0) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-static-analysis dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e18eb399d..4e3608c61 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ org.openrewrite.recipe rewrite-static-analysis - 1.11.0 + 1.12.0 org.openrewrite.recipe From 253f14ee6a77efc763dcc5686b0bfae7e873afb8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 12:17:32 +0530 Subject: [PATCH 65/70] chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin from 5.35.0 to 5.36.0 (#569) chore(maven): bump org.openrewrite.maven:rewrite-maven-plugin Bumps [org.openrewrite.maven:rewrite-maven-plugin](https://github.com/openrewrite/rewrite-maven-plugin) from 5.35.0 to 5.36.0. - [Release notes](https://github.com/openrewrite/rewrite-maven-plugin/releases) - [Commits](https://github.com/openrewrite/rewrite-maven-plugin/compare/v5.35.0...v5.36.0) --- updated-dependencies: - dependency-name: org.openrewrite.maven:rewrite-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4e3608c61..4bbcb138f 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ org.openrewrite.maven rewrite-maven-plugin - 5.35.0 + 5.36.0 org.openrewrite.staticanalysis.CommonStaticAnalysis From eb955ad1d10e505ec11c11cdbbd7c8f655aa5be2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Jul 2024 08:36:47 +0530 Subject: [PATCH 66/70] chore(ci): bump docker/build-push-action from 6.4.0 to 6.4.1 (#575) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.4.0 to 6.4.1. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.4.0...v6.4.1) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 1ada8cd62..4b983d327 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -163,7 +163,7 @@ jobs: # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v6.4.0 + uses: docker/build-push-action@v6.4.1 with: context: build/${{ matrix.docker_context }} push: ${{ github.event_name != 'pull_request_target' && github.repository == 'SaptarshiSarkar12/Drifty' && !contains(github.ref_name, 'dependabot') }} From 3c18d3fb33e57eeb1f4b615419ce173bc6630f93 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 08:40:13 +0530 Subject: [PATCH 67/70] chore(ci): bump docker/build-push-action from 6.4.1 to 6.5.0 (#579) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.4.1 to 6.5.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.4.1...v6.5.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 4b983d327..162b7cd8a 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -163,7 +163,7 @@ jobs: # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v6.4.1 + uses: docker/build-push-action@v6.5.0 with: context: build/${{ matrix.docker_context }} push: ${{ github.event_name != 'pull_request_target' && github.repository == 'SaptarshiSarkar12/Drifty' && !contains(github.ref_name, 'dependabot') }} From c757ed66b68fad252a7a2e7dba715d89b417f468 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 08:48:18 +0530 Subject: [PATCH 68/70] chore(ci): bump docker/login-action from 3.2.0 to 3.3.0 (#577) Bumps [docker/login-action](https://github.com/docker/login-action) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v3.2.0...v3.3.0) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 162b7cd8a..51f4ae901 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -121,7 +121,7 @@ jobs: # Login to GitHub Container Registry # https://github.com/docker/login-action - name: Log into registry - uses: docker/login-action@v3.2.0 + uses: docker/login-action@v3.3.0 if: github.event_name != 'pull_request_target' with: registry: ${{ env.REGISTRY }} From 9647c71afb0ef42556b33f301e764fa89c341f9d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 08:57:03 +0530 Subject: [PATCH 69/70] chore(ci): bump docker/setup-buildx-action from 3.4.0 to 3.5.0 (#578) Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.4.0 to 3.5.0. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v3.4.0...v3.5.0) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 51f4ae901..cf5e45b50 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -116,7 +116,7 @@ jobs: # multi-platform images and export cache # https://github.com/docker/setup-buildx-action - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3.4.0 + uses: docker/setup-buildx-action@v3.5.0 # Login to GitHub Container Registry # https://github.com/docker/login-action From 8a7bbe912c6577834e4018e93b6d8e8ac8a50eda Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 09:05:41 +0530 Subject: [PATCH 70/70] chore(maven): bump com.gluonhq:gluonfx-maven-plugin from 1.0.22 to 1.0.23 (#576) chore(maven): bump com.gluonhq:gluonfx-maven-plugin Bumps [com.gluonhq:gluonfx-maven-plugin](https://github.com/gluonhq/gluonfx-maven-plugin) from 1.0.22 to 1.0.23. - [Release notes](https://github.com/gluonhq/gluonfx-maven-plugin/releases) - [Commits](https://github.com/gluonhq/gluonfx-maven-plugin/compare/1.0.22...1.0.23) --- updated-dependencies: - dependency-name: com.gluonhq:gluonfx-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- GUI/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GUI/pom.xml b/GUI/pom.xml index d502a5faa..3f8340c52 100644 --- a/GUI/pom.xml +++ b/GUI/pom.xml @@ -48,7 +48,7 @@ com.gluonhq gluonfx-maven-plugin - 1.0.22 + 1.0.23 true ${gui.main-class}