From 1b458535baee3d7ef5cce50ecc7ce88849d67db4 Mon Sep 17 00:00:00 2001 From: Ben Stein Date: Mon, 9 Oct 2023 14:52:27 -0400 Subject: [PATCH 1/3] Restyle solution guide callout for better readability. --- .../challenge-solution-guide.component.html | 5 ++++- .../challenge-solution-guide.component.scss | 7 +++++++ .../challenge-solution-guide.component.ts | 4 ++++ .../gameboard-ui/src/app/services/font-awesome.service.ts | 2 ++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.scss diff --git a/projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.html b/projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.html index 3afda2b5..17f1c178 100644 --- a/projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.html +++ b/projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.html @@ -1,5 +1,8 @@ -

Need help?

+

+ + Solution Guide +

We've created a step-by-step solution guide for this challenge. If you get stuck, you diff --git a/projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.scss b/projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.scss new file mode 100644 index 00000000..f2b19115 --- /dev/null +++ b/projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.scss @@ -0,0 +1,7 @@ +::ng-deep .alert.alert-info { + border: 1px solid #dedede !important; +} + +h2 a { + margin-left: 1rem; +} diff --git a/projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.ts b/projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.ts index 1b7be1aa..c4541762 100644 --- a/projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.ts +++ b/projects/gameboard-ui/src/app/core/components/challenge-solution-guide/challenge-solution-guide.component.ts @@ -2,14 +2,18 @@ import { ChallengeSolutionGuide } from '@/api/challenges.models'; import { ChallengesService } from '@/api/challenges.service'; import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'; import { firstValueFrom } from 'rxjs'; +import { fa } from '@/services/font-awesome.service'; @Component({ selector: 'app-challenge-solution-guide', + styleUrls: ["./challenge-solution-guide.component.scss"], templateUrl: './challenge-solution-guide.component.html' }) export class ChallengeSolutionGuideComponent implements OnChanges { @Input() challengeId?: string; + protected guide: ChallengeSolutionGuide | null = null; + protected fa = fa; constructor(private challengeService: ChallengesService) { } diff --git a/projects/gameboard-ui/src/app/services/font-awesome.service.ts b/projects/gameboard-ui/src/app/services/font-awesome.service.ts index 382a91a2..328a8c94 100644 --- a/projects/gameboard-ui/src/app/services/font-awesome.service.ts +++ b/projects/gameboard-ui/src/app/services/font-awesome.service.ts @@ -4,6 +4,7 @@ import { IconDefinition, faArrowLeft, faArrowUp, + faBook, faBolt, faCaretDown, faCaretLeft, @@ -51,6 +52,7 @@ export const fa = { arrowLeft: faArrowLeft, arrowUp: faArrowUp, bolt: faBolt, + book: faBook, caretDown: faCaretDown, caretLeft: faCaretLeft, caretRight: faCaretRight, From b4833c8c197cbf23df71406ba21d04275339ce84 Mon Sep 17 00:00:00 2001 From: Ben Stein Date: Mon, 9 Oct 2023 14:59:30 -0400 Subject: [PATCH 2/3] Update angular to 15.2.10. --- package-lock.json | 138 ++++++++++++++++++++++++++++------------------ package.json | 20 +++---- 2 files changed, 94 insertions(+), 64 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9c452070..63bc8080 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,14 +8,14 @@ "name": "gameboard-ui", "version": "0.0.0", "dependencies": { - "@angular/animations": "^15.2.5", - "@angular/common": "^15.2.5", - "@angular/compiler": "^15.2.5", - "@angular/core": "^15.2.5", - "@angular/forms": "^15.2.5", - "@angular/platform-browser": "^15.2.5", - "@angular/platform-browser-dynamic": "^15.2.5", - "@angular/router": "^15.2.5", + "@angular/animations": "^15.2.10", + "@angular/common": "^15.2.10", + "@angular/compiler": "^15.2.10", + "@angular/core": "^15.2.10", + "@angular/forms": "^15.2.10", + "@angular/platform-browser": "^15.2.10", + "@angular/platform-browser-dynamic": "^15.2.10", + "@angular/router": "^15.2.10", "@fortawesome/angular-fontawesome": "^0.12.0", "@fortawesome/fontawesome-svg-core": "^6.1.2", "@fortawesome/free-brands-svg-icons": "^6.1.2", @@ -52,7 +52,7 @@ "devDependencies": { "@angular-devkit/build-angular": "^15.2.5", "@angular/cli": "^15.2.5", - "@angular/compiler-cli": "^15.2.5", + "@angular/compiler-cli": "^15.2.10", "@types/jasmine": "^4.3.1", "@types/luxon": "^3.2.0", "@types/marked": "^4.3.0", @@ -351,8 +351,9 @@ "license": "0BSD" }, "node_modules/@angular/animations": { - "version": "15.2.9", - "license": "MIT", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-15.2.10.tgz", + "integrity": "sha512-yxfN8qQpMaukRU5LjFkJBmy85rqrOp86tYVCsf+hmPEFRiXBMUj6xYLeCMcpk3Mt1JtnWGBR34ivGx+7bNeAow==", "dependencies": { "tslib": "^2.3.0" }, @@ -360,7 +361,7 @@ "node": "^14.20.0 || ^16.13.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "15.2.9" + "@angular/core": "15.2.10" } }, "node_modules/@angular/cdk": { @@ -437,8 +438,9 @@ } }, "node_modules/@angular/common": { - "version": "15.2.9", - "license": "MIT", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-15.2.10.tgz", + "integrity": "sha512-jdBn3fctkqoNrJn9VLsUHpcCEhCxWSczdsR+BBbD6T0oLl6vMrAVNjPwfBejnlgfWN1KoRU9kgOYsMxa5apIWQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -446,13 +448,14 @@ "node": "^14.20.0 || ^16.13.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "15.2.9", + "@angular/core": "15.2.10", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "15.2.9", - "license": "MIT", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-15.2.10.tgz", + "integrity": "sha512-M0XkeU0O73UlJZwDvOyp8/apetz9UKj78eTFDseMYJDLcxe6MpkbkxqpsGZnKYDj7LIep8PmCAKEkhtenE82zw==", "dependencies": { "tslib": "^2.3.0" }, @@ -460,7 +463,7 @@ "node": "^14.20.0 || ^16.13.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "15.2.9" + "@angular/core": "15.2.10" }, "peerDependenciesMeta": { "@angular/core": { @@ -469,9 +472,10 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "15.2.9", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.10.tgz", + "integrity": "sha512-mCFIxrs60XicKfA2o42hA7LrQvhybi9BQveWuZn/2iIEOXx7R62Iemz8E21pLWftAZHGxEW3NECfBrY1d3gVmA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "7.19.3", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -493,7 +497,7 @@ "node": "^14.20.0 || ^16.13.0 || >=18.10.0" }, "peerDependencies": { - "@angular/compiler": "15.2.9", + "@angular/compiler": "15.2.10", "typescript": ">=4.8.2 <5.0" } }, @@ -546,8 +550,9 @@ } }, "node_modules/@angular/core": { - "version": "15.2.9", - "license": "MIT", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-15.2.10.tgz", + "integrity": "sha512-meGGidnitQJGDxYd9/LrqYiVlId+vGaLoiLgJdKBz+o2ZO6OmXQGuNw2VBqf17/Cc0/UjzrOY7+kILNFKkk/WQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -560,8 +565,9 @@ } }, "node_modules/@angular/forms": { - "version": "15.2.9", - "license": "MIT", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-15.2.10.tgz", + "integrity": "sha512-NIntGsNcN6o8L1txsbWXOf6f3K/CUBizdKsxsYVYGJIXEW5qU6UnWmfAZffNNXsT/XvbgUCjgDwT0cAwcqZPuQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -569,15 +575,16 @@ "node": "^14.20.0 || ^16.13.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "15.2.9", - "@angular/core": "15.2.9", - "@angular/platform-browser": "15.2.9", + "@angular/common": "15.2.10", + "@angular/core": "15.2.10", + "@angular/platform-browser": "15.2.10", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "15.2.9", - "license": "MIT", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.2.10.tgz", + "integrity": "sha512-9tbgVGSJqwfrOzT8aA/kWBLNhJSQ9gUg0CJxwFBSJm8VkBUJrszoBlDsnSvlxx8/W2ejNULKHFTXeUzq0O/+RQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -585,9 +592,9 @@ "node": "^14.20.0 || ^16.13.0 || >=18.10.0" }, "peerDependencies": { - "@angular/animations": "15.2.9", - "@angular/common": "15.2.9", - "@angular/core": "15.2.9" + "@angular/animations": "15.2.10", + "@angular/common": "15.2.10", + "@angular/core": "15.2.10" }, "peerDependenciesMeta": { "@angular/animations": { @@ -596,8 +603,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "15.2.9", - "license": "MIT", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.10.tgz", + "integrity": "sha512-JHP6W+FX715Qv7DhqvfZLuBZXSDJrboiQsR06gUAgDSjAUyhbqmpVg/2YOtgeWpPkzNDtXdPU2PhcRdIv5J3Yg==", "dependencies": { "tslib": "^2.3.0" }, @@ -605,15 +613,16 @@ "node": "^14.20.0 || ^16.13.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "15.2.9", - "@angular/compiler": "15.2.9", - "@angular/core": "15.2.9", - "@angular/platform-browser": "15.2.9" + "@angular/common": "15.2.10", + "@angular/compiler": "15.2.10", + "@angular/core": "15.2.10", + "@angular/platform-browser": "15.2.10" } }, "node_modules/@angular/router": { - "version": "15.2.9", - "license": "MIT", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-15.2.10.tgz", + "integrity": "sha512-LmuqEg0iIXSw7bli6HKJ19cbxP91v37GtRwbGKswyLihqzTgvjBYpvcfMnB5FRQ5LWkTwq5JclkX03dZw290Yg==", "dependencies": { "tslib": "^2.3.0" }, @@ -621,9 +630,9 @@ "node": "^14.20.0 || ^16.13.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "15.2.9", - "@angular/core": "15.2.9", - "@angular/platform-browser": "15.2.9", + "@angular/common": "15.2.10", + "@angular/core": "15.2.10", + "@angular/platform-browser": "15.2.10", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -2791,8 +2800,9 @@ }, "node_modules/@ngtools/webpack": { "version": "15.2.9", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.9.tgz", + "integrity": "sha512-nOXUGqKkAEMlCcrhkDwWDzcVdKNH7MNRUXfNzsFc9zdeR/5p3qt6SVMN7OOE3NREyI7P6nzARc3S+6QDBjf3Jg==", "dev": true, - "license": "MIT", "engines": { "node": "^14.20.0 || ^16.13.0 || >=18.10.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", @@ -13581,7 +13591,9 @@ } }, "@angular/animations": { - "version": "15.2.9", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-15.2.10.tgz", + "integrity": "sha512-yxfN8qQpMaukRU5LjFkJBmy85rqrOp86tYVCsf+hmPEFRiXBMUj6xYLeCMcpk3Mt1JtnWGBR34ivGx+7bNeAow==", "requires": { "tslib": "^2.3.0" } @@ -13634,19 +13646,25 @@ } }, "@angular/common": { - "version": "15.2.9", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-15.2.10.tgz", + "integrity": "sha512-jdBn3fctkqoNrJn9VLsUHpcCEhCxWSczdsR+BBbD6T0oLl6vMrAVNjPwfBejnlgfWN1KoRU9kgOYsMxa5apIWQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "15.2.9", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-15.2.10.tgz", + "integrity": "sha512-M0XkeU0O73UlJZwDvOyp8/apetz9UKj78eTFDseMYJDLcxe6MpkbkxqpsGZnKYDj7LIep8PmCAKEkhtenE82zw==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "15.2.9", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.10.tgz", + "integrity": "sha512-mCFIxrs60XicKfA2o42hA7LrQvhybi9BQveWuZn/2iIEOXx7R62Iemz8E21pLWftAZHGxEW3NECfBrY1d3gVmA==", "dev": true, "requires": { "@babel/core": "7.19.3", @@ -13698,31 +13716,41 @@ } }, "@angular/core": { - "version": "15.2.9", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-15.2.10.tgz", + "integrity": "sha512-meGGidnitQJGDxYd9/LrqYiVlId+vGaLoiLgJdKBz+o2ZO6OmXQGuNw2VBqf17/Cc0/UjzrOY7+kILNFKkk/WQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "15.2.9", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-15.2.10.tgz", + "integrity": "sha512-NIntGsNcN6o8L1txsbWXOf6f3K/CUBizdKsxsYVYGJIXEW5qU6UnWmfAZffNNXsT/XvbgUCjgDwT0cAwcqZPuQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser": { - "version": "15.2.9", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.2.10.tgz", + "integrity": "sha512-9tbgVGSJqwfrOzT8aA/kWBLNhJSQ9gUg0CJxwFBSJm8VkBUJrszoBlDsnSvlxx8/W2ejNULKHFTXeUzq0O/+RQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "15.2.9", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.10.tgz", + "integrity": "sha512-JHP6W+FX715Qv7DhqvfZLuBZXSDJrboiQsR06gUAgDSjAUyhbqmpVg/2YOtgeWpPkzNDtXdPU2PhcRdIv5J3Yg==", "requires": { "tslib": "^2.3.0" } }, "@angular/router": { - "version": "15.2.9", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-15.2.10.tgz", + "integrity": "sha512-LmuqEg0iIXSw7bli6HKJ19cbxP91v37GtRwbGKswyLihqzTgvjBYpvcfMnB5FRQ5LWkTwq5JclkX03dZw290Yg==", "requires": { "tslib": "^2.3.0" } @@ -15081,6 +15109,8 @@ }, "@ngtools/webpack": { "version": "15.2.9", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.9.tgz", + "integrity": "sha512-nOXUGqKkAEMlCcrhkDwWDzcVdKNH7MNRUXfNzsFc9zdeR/5p3qt6SVMN7OOE3NREyI7P6nzARc3S+6QDBjf3Jg==", "dev": true, "requires": {} }, diff --git a/package.json b/package.json index e84c0c52..6e29fb97 100644 --- a/package.json +++ b/package.json @@ -10,14 +10,14 @@ }, "private": true, "dependencies": { - "@angular/animations": "^15.2.5", - "@angular/common": "^15.2.5", - "@angular/compiler": "^15.2.5", - "@angular/core": "^15.2.5", - "@angular/forms": "^15.2.5", - "@angular/platform-browser": "^15.2.5", - "@angular/platform-browser-dynamic": "^15.2.5", - "@angular/router": "^15.2.5", + "@angular/animations": "^15.2.10", + "@angular/common": "^15.2.10", + "@angular/compiler": "^15.2.10", + "@angular/core": "^15.2.10", + "@angular/forms": "^15.2.10", + "@angular/platform-browser": "^15.2.10", + "@angular/platform-browser-dynamic": "^15.2.10", + "@angular/router": "^15.2.10", "@fortawesome/angular-fontawesome": "^0.12.0", "@fortawesome/fontawesome-svg-core": "^6.1.2", "@fortawesome/free-brands-svg-icons": "^6.1.2", @@ -54,7 +54,7 @@ "devDependencies": { "@angular-devkit/build-angular": "^15.2.5", "@angular/cli": "^15.2.5", - "@angular/compiler-cli": "^15.2.5", + "@angular/compiler-cli": "^15.2.10", "@types/jasmine": "^4.3.1", "@types/luxon": "^3.2.0", "@types/marked": "^4.3.0", @@ -76,4 +76,4 @@ "karma-jasmine-html-reporter": "^2.0.0", "typescript": "^4.9.5" } -} +} \ No newline at end of file From 8eede67250bd9489c6876918ff4e3cf03d2affef Mon Sep 17 00:00:00 2001 From: Ben Stein Date: Mon, 9 Oct 2023 15:12:15 -0400 Subject: [PATCH 3/3] Add icon for external game mode --- .../src/assets/img/engineModeIcons/external.png | Bin 0 -> 12113 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 projects/gameboard-ui/src/assets/img/engineModeIcons/external.png diff --git a/projects/gameboard-ui/src/assets/img/engineModeIcons/external.png b/projects/gameboard-ui/src/assets/img/engineModeIcons/external.png new file mode 100644 index 0000000000000000000000000000000000000000..9407e918c006a7aae4770f991c0a4ad540937701 GIT binary patch literal 12113 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 literal 0 HcmV?d00001