From 42acc542b7b3539d9fcf9bf0d5c282b706acffdf Mon Sep 17 00:00:00 2001
From: "Nicholas Carrigan (he/him)"
Date: Fri, 10 Dec 2021 03:23:26 -0800
Subject: [PATCH 01/63] fix: handle uppercase and missing user verification
(#44444)
* fix: hotfix for isHonest null
* fix: early return if no user?
* fix: handle invalid input on api
Also lowerCases the username it receives since the client could send any
case.
* fix: report errors to user when verification fails
Co-authored-by: Oliver Eyton-Williams
---
api-server/src/common/models/user.js | 2 +-
api-server/src/server/boot/certificate.js | 28 +++++++++++++++++--
.../components/cert-challenge.tsx | 20 +++++++++----
client/src/utils/ajax.ts | 2 ++
4 files changed, 43 insertions(+), 9 deletions(-)
diff --git a/api-server/src/common/models/user.js b/api-server/src/common/models/user.js
index d34f95e9d8..a3c545f087 100644
--- a/api-server/src/common/models/user.js
+++ b/api-server/src/common/models/user.js
@@ -55,7 +55,7 @@ function destroyAll(id, Model) {
return Observable.fromNodeCallback(Model.destroyAll, Model)({ userId: id });
}
-function ensureLowerCaseString(maybeString) {
+export function ensureLowerCaseString(maybeString) {
return (maybeString && maybeString.toLowerCase()) || '';
}
diff --git a/api-server/src/server/boot/certificate.js b/api-server/src/server/boot/certificate.js
index 1d5637ad43..dd9240dcad 100644
--- a/api-server/src/server/boot/certificate.js
+++ b/api-server/src/server/boot/certificate.js
@@ -20,6 +20,7 @@ import { reportError } from '../middlewares/sentry-error-handler.js';
import { getChallenges } from '../utils/get-curriculum';
import { ifNoUser401 } from '../utils/middleware';
import { observeQuery } from '../utils/rx';
+import { ensureLowerCaseString } from '../../common/models/user';
const {
legacyFrontEndChallengeId,
@@ -523,7 +524,7 @@ function createVerifyCanClaim(certTypeIds, app) {
let certType = superBlockCertTypeMap[superBlock];
log(certType);
- return findUserByUsername$(username, {
+ return findUserByUsername$(ensureLowerCaseString(username), {
isFrontEndCert: true,
isBackEndCert: true,
isFullStackCert: true,
@@ -544,15 +545,36 @@ function createVerifyCanClaim(certTypeIds, app) {
isHonest: true,
completedChallenges: true
}).subscribe(user => {
+ if (!user) {
+ return res.status(404).json({
+ message: {
+ type: 'info',
+ message: 'flash.username-not-found',
+ variables: { username }
+ }
+ });
+ }
+
+ if (!certTypeIds[certType]) {
+ return res.status(404).json({
+ message: {
+ type: 'info',
+ // TODO: create a specific 'flash.cert-not-found' message
+ message: 'flash.could-not-find'
+ }
+ });
+ }
+
return Observable.of(certTypeIds[certType])
.flatMap(challenge => {
const certName = certTypeTitleMap[certType];
const { tests = [] } = challenge;
- const { isHonest, completedChallenges } = user;
- const isProjectsCompleted = canClaim(tests, completedChallenges);
let result = 'incomplete-requirements';
let status = false;
+ const { isHonest, completedChallenges } = user;
+ const isProjectsCompleted = canClaim(tests, completedChallenges);
+
if (isHonest && isProjectsCompleted) {
status = true;
result = 'requirements-met';
diff --git a/client/src/templates/Introduction/components/cert-challenge.tsx b/client/src/templates/Introduction/components/cert-challenge.tsx
index 3cfd947466..1b0b2a989f 100644
--- a/client/src/templates/Introduction/components/cert-challenge.tsx
+++ b/client/src/templates/Introduction/components/cert-challenge.tsx
@@ -91,12 +91,22 @@ const CertChallenge = ({
void (async () => {
try {
const data = await getVerifyCanClaimCert(username, superBlock);
- const { status, result } = data?.response?.message;
- setCanClaimCert(status);
- setCertVerificationMessage(result);
- setVerificationComplete(true);
+ if (data?.message) {
+ setCanClaimCert(false);
+ createFlashMessage(data.message);
+ } else {
+ const { status, result } = data?.response?.message;
+ setCanClaimCert(status);
+ setCertVerificationMessage(result);
+ }
} catch (e) {
- // TODO: How do we handle errors...?
+ console.error(e);
+ createFlashMessage({
+ type: 'danger',
+ message: FlashMessages.ReallyWeird
+ });
+ } finally {
+ setVerificationComplete(true);
}
})();
}
diff --git a/client/src/utils/ajax.ts b/client/src/utils/ajax.ts
index cdfd17f6d4..594b82a08f 100644
--- a/client/src/utils/ajax.ts
+++ b/client/src/utils/ajax.ts
@@ -1,5 +1,6 @@
import cookies from 'browser-cookies';
import envData from '../../../config/env.json';
+import { FlashMessageArg } from '../components/Flash/redux';
import type {
ChallengeFile,
@@ -172,6 +173,7 @@ export interface GetVerifyCanClaimCert {
};
isCertMap: ClaimedCertifications;
completedChallenges: CompletedChallenge[];
+ message?: FlashMessageArg;
}
export function getVerifyCanClaimCert(
From 466224fb24ed16c60292aabc922a15104499ec6e Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 10 Dec 2021 19:42:45 +0530
Subject: [PATCH 02/63] chore(deps): update dependency jest to v27.4.4 (#44451)
Co-authored-by: Renovate Bot
---
package-lock.json | 510 +++++++++++++++++++++++-----------------------
package.json | 2 +-
2 files changed, 256 insertions(+), 256 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index afff0606e6..76354593ea 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -83,7 +83,7 @@
"execa": "5.1.1",
"faker": "5.5.3",
"husky": "7.0.4",
- "jest": "27.4.3",
+ "jest": "27.4.4",
"js-yaml": "3.14.1",
"lint-staged": "12.1.2",
"lodash": "4.17.21",
@@ -3787,15 +3787,15 @@
}
},
"node_modules/@jest/core": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.3.tgz",
- "integrity": "sha512-V9ms3zSxUHxh1E/ZLAiXF7SLejsdFnjWTFizWotMOWvjho0lW5kSjZymhQSodNW0T0ZMQRiha7f8+NcFVm3hJQ==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.4.tgz",
+ "integrity": "sha512-xBNPVqYAdAiAMXnb4ugx9Cdmr0S52lBsLbQMR/sGBRO0810VSPKiuSDtuup6qdkK1e9vxbv3KK3IAP1QFAp8mw==",
"dev": true,
"dependencies": {
"@jest/console": "^27.4.2",
- "@jest/reporters": "^27.4.2",
+ "@jest/reporters": "^27.4.4",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
@@ -3804,15 +3804,15 @@
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-changed-files": "^27.4.2",
- "jest-config": "^27.4.3",
- "jest-haste-map": "^27.4.2",
+ "jest-config": "^27.4.4",
+ "jest-haste-map": "^27.4.4",
"jest-message-util": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.2",
- "jest-resolve-dependencies": "^27.4.2",
- "jest-runner": "^27.4.3",
- "jest-runtime": "^27.4.2",
- "jest-snapshot": "^27.4.2",
+ "jest-resolve": "^27.4.4",
+ "jest-resolve-dependencies": "^27.4.4",
+ "jest-runner": "^27.4.4",
+ "jest-runtime": "^27.4.4",
+ "jest-snapshot": "^27.4.4",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"jest-watcher": "^27.4.2",
@@ -3913,9 +3913,9 @@
}
},
"node_modules/@jest/environment": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.2.tgz",
- "integrity": "sha512-uSljKxh/rGlHlmhyeG4ZoVK9hOec+EPBkwTHkHKQ2EqDu5K+MaG9uJZ8o1CbRsSdZqSuhXvJCYhBWsORPPg6qw==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.4.tgz",
+ "integrity": "sha512-q+niMx7cJgt/t/b6dzLOh4W8Ef/8VyKG7hxASK39jakijJzbFBGpptx3RXz13FFV7OishQ9lTbv+dQ5K3EhfDQ==",
"dev": true,
"dependencies": {
"@jest/fake-timers": "^27.4.2",
@@ -3945,12 +3945,12 @@
}
},
"node_modules/@jest/globals": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.2.tgz",
- "integrity": "sha512-KkfaHEttlGpXYAQTZHgrESiEPx2q/DKAFLGLFda1uGVrqc17snd3YVPhOxlXOHIzVPs+lQ/SDB2EIvxyGzb3Ew==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.4.tgz",
+ "integrity": "sha512-bqpqQhW30BOreXM8bA8t8JbOQzsq/WnPTnBl+It3UxAD9J8yxEAaBEylHx1dtBapAr/UBk8GidXbzmqnee8tYQ==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/types": "^27.4.2",
"expect": "^27.4.2"
},
@@ -3959,15 +3959,15 @@
}
},
"node_modules/@jest/reporters": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.2.tgz",
- "integrity": "sha512-sp4aqmdBJtjKetEakzDPcZggPcVIF6w9QLkYBbaWDV6e/SIsHnF1S4KtIH91eEc2fp7ep6V/e1xvdfEoho1d2w==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.4.tgz",
+ "integrity": "sha512-ssyJSw9B9Awb1QaxDhIPSs4de1b7SE2kv7tqFehQL13xpn5HUkMYZK/ufTOXiCAnXFOZS+XDl1GaQ/LmJAzI1A==",
"dev": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^27.4.2",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -3980,10 +3980,10 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.4.2",
- "jest-resolve": "^27.4.2",
+ "jest-haste-map": "^27.4.4",
+ "jest-resolve": "^27.4.4",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.2",
+ "jest-worker": "^27.4.4",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
@@ -4061,9 +4061,9 @@
}
},
"node_modules/@jest/reporters/node_modules/jest-worker": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
- "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
+ "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -4158,24 +4158,24 @@
}
},
"node_modules/@jest/test-sequencer": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.2.tgz",
- "integrity": "sha512-HmHp5mlh9f9GyNej5yCS1JZIFfUGnP9+jEOH5zoq5EmsuZeYD+dGULqyvGDPtuzzbyAFJ6R4+z4SS0VvnFwwGQ==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.4.tgz",
+ "integrity": "sha512-mCh+d4JTGTtX7vr13d7q2GHJy33nAobEwtEJ8X3u7R8+0ImVO2eAsQzsLfX8lyvdYHBxYABhqbYuaUNo42/pQw==",
"dev": true,
"dependencies": {
"@jest/test-result": "^27.4.2",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
- "jest-runtime": "^27.4.2"
+ "jest-haste-map": "^27.4.4",
+ "jest-runtime": "^27.4.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/@jest/transform": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.2.tgz",
- "integrity": "sha512-RTKcPZllfcmLfnlxBya7aypofhdz05+E6QITe55Ex0rxyerkgjmmpMlvVn11V0cP719Ps6WcDYCnDzxnnJUwKg==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.4.tgz",
+ "integrity": "sha512-7U/nDSrGsGzL7+X8ScNFV71w8u8knJQWSa9C2xsrrKLMOgb+rWuCG4VAyWke/53BU96GnT+Ka81xCAHA5gk6zA==",
"dev": true,
"dependencies": {
"@babel/core": "^7.1.0",
@@ -4185,7 +4185,7 @@
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
+ "jest-haste-map": "^27.4.4",
"jest-regex-util": "^27.4.0",
"jest-util": "^27.4.2",
"micromatch": "^4.0.4",
@@ -17430,12 +17430,12 @@
}
},
"node_modules/babel-jest": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.2.tgz",
- "integrity": "sha512-MADrjb3KBO2eyZCAc6QaJg6RT5u+6oEdDyHO5HEalnpwQ6LrhTsQF2Kj1Wnz2t6UPXIXPk18dSXXOT0wF5yTxA==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.4.tgz",
+ "integrity": "sha512-+6RVutZxOQgJkt4svgTHPFtOQlVe9dUg3wrimIAM38pY6hL/nsL8glfFSUjD9jNVjaVjzkCzj6loFFecrjr9Qw==",
"dev": true,
"dependencies": {
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.0.0",
@@ -33099,14 +33099,14 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
"node_modules/jest": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.3.tgz",
- "integrity": "sha512-jwsfVABBzuN3Atm+6h6vIEpTs9+VApODLt4dk2qv1WMOpb1weI1IIZfuwpMiWZ62qvWj78MvdvMHIYdUfqrFaA==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.4.tgz",
+ "integrity": "sha512-AXwEIFa58Uf1Jno3/KSo5HZZ0/2Xwqvfrz0/3bmTwImkFlbOvz5vARAW9nTrxRLkojjkitaZ1KNKAtw3JRFAaA==",
"dev": true,
"dependencies": {
- "@jest/core": "^27.4.3",
+ "@jest/core": "^27.4.4",
"import-local": "^3.0.2",
- "jest-cli": "^27.4.3"
+ "jest-cli": "^27.4.4"
},
"bin": {
"jest": "bin/jest.js"
@@ -33138,12 +33138,12 @@
}
},
"node_modules/jest-circus": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.2.tgz",
- "integrity": "sha512-2ePUSru1BGMyzxsMvRfu+tNb+PW60rUyMLJBfw1Nrh5zC8RoTPfF+zbE0JToU31a6ZVe4nnrNKWYRzlghAbL0A==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.4.tgz",
+ "integrity": "sha512-4DWhvQerDq5X4GaqhEUoZiBhuNdKDGr0geW0iJwarbDljAmGaGOErKQG+z2PBr0vgN05z7tsGSY51mdWr8E4xg==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/test-result": "^27.4.2",
"@jest/types": "^27.4.2",
"@types/node": "*",
@@ -33155,8 +33155,8 @@
"jest-each": "^27.4.2",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-runtime": "^27.4.2",
- "jest-snapshot": "^27.4.2",
+ "jest-runtime": "^27.4.4",
+ "jest-snapshot": "^27.4.4",
"jest-util": "^27.4.2",
"pretty-format": "^27.4.2",
"slash": "^3.0.0",
@@ -33247,19 +33247,19 @@
}
},
"node_modules/jest-cli": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.3.tgz",
- "integrity": "sha512-zZSJBXNC/i8UnJPwcKWsqnhGgIF3uoTYP7th32Zej7KNQJdxzOMj+wCfy2Ox3kU7nXErJ36DtYyXDhfiqaiDRw==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.4.tgz",
+ "integrity": "sha512-+MfsHnZPUOBigCBURuQFRpgYoPCgmIFkICkqt4SrramZCUp/UAuWcst4pMZb84O3VU8JyKJmnpGG4qH8ClQloA==",
"dev": true,
"dependencies": {
- "@jest/core": "^27.4.3",
+ "@jest/core": "^27.4.4",
"@jest/test-result": "^27.4.2",
"@jest/types": "^27.4.2",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
- "jest-config": "^27.4.3",
+ "jest-config": "^27.4.4",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"prompts": "^2.0.1",
@@ -33398,28 +33398,28 @@
}
},
"node_modules/jest-config": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.3.tgz",
- "integrity": "sha512-DQ10HTSqYtC2pO7s9j2jw+li4xUnm2wLYWH2o7K1ftB8NyvToHsXoLlXxtsGh3AW9gUQR6KY/4B7G+T/NswJBw==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.4.tgz",
+ "integrity": "sha512-6lxg0ugO6KS2zKEbpdDwBzu1IT0Xg4/VhxXMuBu+z/5FvBjLCEMTaWQm3bCaGCZUR9j9FK4DzUIxyhIgn6kVEg==",
"dev": true,
"dependencies": {
"@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.4.2",
+ "@jest/test-sequencer": "^27.4.4",
"@jest/types": "^27.4.2",
- "babel-jest": "^27.4.2",
+ "babel-jest": "^27.4.4",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.1",
"graceful-fs": "^4.2.4",
- "jest-circus": "^27.4.2",
- "jest-environment-jsdom": "^27.4.3",
- "jest-environment-node": "^27.4.2",
+ "jest-circus": "^27.4.4",
+ "jest-environment-jsdom": "^27.4.4",
+ "jest-environment-node": "^27.4.4",
"jest-get-type": "^27.4.0",
- "jest-jasmine2": "^27.4.2",
+ "jest-jasmine2": "^27.4.4",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.2",
- "jest-runner": "^27.4.3",
+ "jest-resolve": "^27.4.4",
+ "jest-runner": "^27.4.4",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"micromatch": "^4.0.4",
@@ -33707,12 +33707,12 @@
}
},
"node_modules/jest-environment-jsdom": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.3.tgz",
- "integrity": "sha512-x1AUVz3G14LpEJs7KIFUaTINT2n0unOUmvdAby3s/sldUpJJetOJifHo1O/EUQC5fNBowggwJbVulko18y6OWw==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.4.tgz",
+ "integrity": "sha512-cYR3ndNfHBqQgFvS1RL7dNqSvD//K56j/q1s2ygNHcfTCAp12zfIromO1w3COmXrxS8hWAh7+CmZmGCIoqGcGA==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/fake-timers": "^27.4.2",
"@jest/types": "^27.4.2",
"@types/node": "*",
@@ -33725,12 +33725,12 @@
}
},
"node_modules/jest-environment-node": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.2.tgz",
- "integrity": "sha512-nzTZ5nJ+FabuZPH2YVci7SZIHpvtNRHPt8+vipLkCnAgXGjVzHm7XJWdnNqXbAkExIgiKeVEkVMNZOZE/LeiIg==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.4.tgz",
+ "integrity": "sha512-D+v3lbJ2GjQTQR23TK0kY3vFVmSeea05giInI41HHOaJnAwOnmUHTZgUaZL+VxUB43pIzoa7PMwWtCVlIUoVoA==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/fake-timers": "^27.4.2",
"@jest/types": "^27.4.2",
"@types/node": "*",
@@ -33751,9 +33751,9 @@
}
},
"node_modules/jest-haste-map": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.2.tgz",
- "integrity": "sha512-foiyAEePORUN2eeJnOtcM1y8qW0ShEd9kTjWVL4sVaMcuCJM6gtHegvYPBRT0mpI/bs4ueThM90+Eoj2ncoNsA==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.4.tgz",
+ "integrity": "sha512-kvspmHmgPIZoDaqUsvsJFTaspuxhATvdO6wsFNGNSi8kfdiOCEEvECNbht8xG+eE5Ol88JyJmp2D7RF4dYo85Q==",
"dev": true,
"dependencies": {
"@jest/types": "^27.4.2",
@@ -33765,7 +33765,7 @@
"jest-regex-util": "^27.4.0",
"jest-serializer": "^27.4.0",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.2",
+ "jest-worker": "^27.4.4",
"micromatch": "^4.0.4",
"walker": "^1.0.7"
},
@@ -33786,9 +33786,9 @@
}
},
"node_modules/jest-haste-map/node_modules/jest-worker": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
- "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
+ "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -33815,13 +33815,13 @@
}
},
"node_modules/jest-jasmine2": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.2.tgz",
- "integrity": "sha512-VO/fyAJSH9u0THjbteFiL8qc93ufU+yW+bdieDc8tzTCWwlWzO53UHS5nFK1qmE8izb5Smkn+XHlVt6/l06MKQ==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.4.tgz",
+ "integrity": "sha512-ygk2tUgtLeN3ouj4KEYw9p81GLI1EKrnvourPULN5gdgB482PH5op9gqaRG0IenbJhBbbRwiSvh5NoBoQZSqdA==",
"dev": true,
"dependencies": {
"@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/source-map": "^27.4.0",
"@jest/test-result": "^27.4.2",
"@jest/types": "^27.4.2",
@@ -33833,8 +33833,8 @@
"jest-each": "^27.4.2",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-runtime": "^27.4.2",
- "jest-snapshot": "^27.4.2",
+ "jest-runtime": "^27.4.4",
+ "jest-snapshot": "^27.4.4",
"jest-util": "^27.4.2",
"pretty-format": "^27.4.2",
"throat": "^6.0.1"
@@ -34337,15 +34337,15 @@
}
},
"node_modules/jest-resolve": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.2.tgz",
- "integrity": "sha512-d/zqPjxCzMqHlOdRTg8cTpO9jY+1/T74KazT8Ws/LwmwxV5sRMWOkiLjmzUCDj/5IqA5XHNK4Hkmlq9Kdpb9Sg==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.4.tgz",
+ "integrity": "sha512-Yh5jK3PBmDbm01Rc8pT0XqpBlTPEGwWp7cN61ijJuwony/tR2Taof3TLy6yfNiuRS8ucUOPO7NBYm3ei38kkcg==",
"dev": true,
"dependencies": {
"@jest/types": "^27.4.2",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
+ "jest-haste-map": "^27.4.4",
"jest-pnp-resolver": "^1.2.2",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
@@ -34358,14 +34358,14 @@
}
},
"node_modules/jest-resolve-dependencies": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.2.tgz",
- "integrity": "sha512-hb++cTpqvOWfU49MCP/JQkxmnrhKoAVqXWFjgYXswRSVGk8Q6bDTSvhbCeYXDtXaymY0y7WrrSIlKogClcKJuw==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.4.tgz",
+ "integrity": "sha512-iAnpCXh81sd9nbyqySvm5/aV9X6JZKE0dQyFXTC8tptXcdrgS0vjPFy+mEgzPHxXw+tq4TQupuTa0n8OXwRIxw==",
"dev": true,
"dependencies": {
"@jest/types": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-snapshot": "^27.4.2"
+ "jest-snapshot": "^27.4.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -34451,15 +34451,15 @@
}
},
"node_modules/jest-runner": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.3.tgz",
- "integrity": "sha512-JgR6Om/j22Fd6ZUUIGTWNcCtuZVYbNrecb4k89W4UyFJoRtHpo2zMKWkmFFFJoqwWGrfrcPLnVBIgkJiTV3cyA==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.4.tgz",
+ "integrity": "sha512-AXv/8Q0Xf1puWnDf52m7oLrK7sXcv6re0V/kItwTSVHJbX7Oebm07oGFQqGmq0R0mhO1zpmB3OpqRuaCN2elPA==",
"dev": true,
"dependencies": {
"@jest/console": "^27.4.2",
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -34467,15 +34467,15 @@
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-docblock": "^27.4.0",
- "jest-environment-jsdom": "^27.4.3",
- "jest-environment-node": "^27.4.2",
- "jest-haste-map": "^27.4.2",
+ "jest-environment-jsdom": "^27.4.4",
+ "jest-environment-node": "^27.4.4",
+ "jest-haste-map": "^27.4.4",
"jest-leak-detector": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-resolve": "^27.4.2",
- "jest-runtime": "^27.4.2",
+ "jest-resolve": "^27.4.4",
+ "jest-runtime": "^27.4.4",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.2",
+ "jest-worker": "^27.4.4",
"source-map-support": "^0.5.6",
"throat": "^6.0.1"
},
@@ -34542,9 +34542,9 @@
}
},
"node_modules/jest-runner/node_modules/jest-worker": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
- "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
+ "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -34583,17 +34583,17 @@
}
},
"node_modules/jest-runtime": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.2.tgz",
- "integrity": "sha512-eqPgcBaUNaw6j8T5M+dnfAEh6MIrh2YmtskCr9sl50QYpD22Sg+QqHw3J3nmaLzVMbBtOMHFFxLF0Qx8MsZVFQ==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.4.tgz",
+ "integrity": "sha512-tZGay6P6vXJq8t4jVFAUzYHx+lzIHXjz+rj1XBk6mAR1Lwtf5kz0Uun7qNuU+oqpZu4+hhuxpUfXb6j30bEPqA==",
"dev": true,
"dependencies": {
"@jest/console": "^27.4.2",
- "@jest/environment": "^27.4.2",
- "@jest/globals": "^27.4.2",
+ "@jest/environment": "^27.4.4",
+ "@jest/globals": "^27.4.4",
"@jest/source-map": "^27.4.0",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/yargs": "^16.0.0",
"chalk": "^4.0.0",
@@ -34603,12 +34603,12 @@
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
+ "jest-haste-map": "^27.4.4",
"jest-message-util": "^27.4.2",
"jest-mock": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.2",
- "jest-snapshot": "^27.4.2",
+ "jest-resolve": "^27.4.4",
+ "jest-snapshot": "^27.4.4",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"slash": "^3.0.0",
@@ -34759,9 +34759,9 @@
}
},
"node_modules/jest-snapshot": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.2.tgz",
- "integrity": "sha512-DI7lJlNIu6WSQ+esqhnJzEzU70+dV+cNjoF1c+j5FagWEd3KtOyZvVliAH0RWNQ6KSnAAnKSU0qxJ8UXOOhuUQ==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.4.tgz",
+ "integrity": "sha512-yy+rpCvYMOjTl7IMuaMI9OP9WT229zi8BhdNHm6e6mttAOIzvIiCxFoZ6yRxaV3HDPPgMryi+ReX2b8+IQJdPA==",
"dev": true,
"dependencies": {
"@babel/core": "^7.7.2",
@@ -34770,7 +34770,7 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.0.0",
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/babel__traverse": "^7.0.4",
"@types/prettier": "^2.1.5",
@@ -34780,10 +34780,10 @@
"graceful-fs": "^4.2.4",
"jest-diff": "^27.4.2",
"jest-get-type": "^27.4.0",
- "jest-haste-map": "^27.4.2",
+ "jest-haste-map": "^27.4.4",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-resolve": "^27.4.2",
+ "jest-resolve": "^27.4.4",
"jest-util": "^27.4.2",
"natural-compare": "^1.4.0",
"pretty-format": "^27.4.2",
@@ -58859,15 +58859,15 @@
}
},
"@jest/core": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.3.tgz",
- "integrity": "sha512-V9ms3zSxUHxh1E/ZLAiXF7SLejsdFnjWTFizWotMOWvjho0lW5kSjZymhQSodNW0T0ZMQRiha7f8+NcFVm3hJQ==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.4.tgz",
+ "integrity": "sha512-xBNPVqYAdAiAMXnb4ugx9Cdmr0S52lBsLbQMR/sGBRO0810VSPKiuSDtuup6qdkK1e9vxbv3KK3IAP1QFAp8mw==",
"dev": true,
"requires": {
"@jest/console": "^27.4.2",
- "@jest/reporters": "^27.4.2",
+ "@jest/reporters": "^27.4.4",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
@@ -58876,15 +58876,15 @@
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-changed-files": "^27.4.2",
- "jest-config": "^27.4.3",
- "jest-haste-map": "^27.4.2",
+ "jest-config": "^27.4.4",
+ "jest-haste-map": "^27.4.4",
"jest-message-util": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.2",
- "jest-resolve-dependencies": "^27.4.2",
- "jest-runner": "^27.4.3",
- "jest-runtime": "^27.4.2",
- "jest-snapshot": "^27.4.2",
+ "jest-resolve": "^27.4.4",
+ "jest-resolve-dependencies": "^27.4.4",
+ "jest-runner": "^27.4.4",
+ "jest-runtime": "^27.4.4",
+ "jest-snapshot": "^27.4.4",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"jest-watcher": "^27.4.2",
@@ -58952,9 +58952,9 @@
}
},
"@jest/environment": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.2.tgz",
- "integrity": "sha512-uSljKxh/rGlHlmhyeG4ZoVK9hOec+EPBkwTHkHKQ2EqDu5K+MaG9uJZ8o1CbRsSdZqSuhXvJCYhBWsORPPg6qw==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.4.tgz",
+ "integrity": "sha512-q+niMx7cJgt/t/b6dzLOh4W8Ef/8VyKG7hxASK39jakijJzbFBGpptx3RXz13FFV7OishQ9lTbv+dQ5K3EhfDQ==",
"dev": true,
"requires": {
"@jest/fake-timers": "^27.4.2",
@@ -58978,26 +58978,26 @@
}
},
"@jest/globals": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.2.tgz",
- "integrity": "sha512-KkfaHEttlGpXYAQTZHgrESiEPx2q/DKAFLGLFda1uGVrqc17snd3YVPhOxlXOHIzVPs+lQ/SDB2EIvxyGzb3Ew==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.4.tgz",
+ "integrity": "sha512-bqpqQhW30BOreXM8bA8t8JbOQzsq/WnPTnBl+It3UxAD9J8yxEAaBEylHx1dtBapAr/UBk8GidXbzmqnee8tYQ==",
"dev": true,
"requires": {
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/types": "^27.4.2",
"expect": "^27.4.2"
}
},
"@jest/reporters": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.2.tgz",
- "integrity": "sha512-sp4aqmdBJtjKetEakzDPcZggPcVIF6w9QLkYBbaWDV6e/SIsHnF1S4KtIH91eEc2fp7ep6V/e1xvdfEoho1d2w==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.4.tgz",
+ "integrity": "sha512-ssyJSw9B9Awb1QaxDhIPSs4de1b7SE2kv7tqFehQL13xpn5HUkMYZK/ufTOXiCAnXFOZS+XDl1GaQ/LmJAzI1A==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^27.4.2",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -59010,10 +59010,10 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.4.2",
- "jest-resolve": "^27.4.2",
+ "jest-haste-map": "^27.4.4",
+ "jest-resolve": "^27.4.4",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.2",
+ "jest-worker": "^27.4.4",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
@@ -59062,9 +59062,9 @@
"dev": true
},
"jest-worker": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
- "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
+ "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -59138,21 +59138,21 @@
}
},
"@jest/test-sequencer": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.2.tgz",
- "integrity": "sha512-HmHp5mlh9f9GyNej5yCS1JZIFfUGnP9+jEOH5zoq5EmsuZeYD+dGULqyvGDPtuzzbyAFJ6R4+z4SS0VvnFwwGQ==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.4.tgz",
+ "integrity": "sha512-mCh+d4JTGTtX7vr13d7q2GHJy33nAobEwtEJ8X3u7R8+0ImVO2eAsQzsLfX8lyvdYHBxYABhqbYuaUNo42/pQw==",
"dev": true,
"requires": {
"@jest/test-result": "^27.4.2",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
- "jest-runtime": "^27.4.2"
+ "jest-haste-map": "^27.4.4",
+ "jest-runtime": "^27.4.4"
}
},
"@jest/transform": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.2.tgz",
- "integrity": "sha512-RTKcPZllfcmLfnlxBya7aypofhdz05+E6QITe55Ex0rxyerkgjmmpMlvVn11V0cP719Ps6WcDYCnDzxnnJUwKg==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.4.tgz",
+ "integrity": "sha512-7U/nDSrGsGzL7+X8ScNFV71w8u8knJQWSa9C2xsrrKLMOgb+rWuCG4VAyWke/53BU96GnT+Ka81xCAHA5gk6zA==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
@@ -59162,7 +59162,7 @@
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
+ "jest-haste-map": "^27.4.4",
"jest-regex-util": "^27.4.0",
"jest-util": "^27.4.2",
"micromatch": "^4.0.4",
@@ -69456,12 +69456,12 @@
}
},
"babel-jest": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.2.tgz",
- "integrity": "sha512-MADrjb3KBO2eyZCAc6QaJg6RT5u+6oEdDyHO5HEalnpwQ6LrhTsQF2Kj1Wnz2t6UPXIXPk18dSXXOT0wF5yTxA==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.4.tgz",
+ "integrity": "sha512-+6RVutZxOQgJkt4svgTHPFtOQlVe9dUg3wrimIAM38pY6hL/nsL8glfFSUjD9jNVjaVjzkCzj6loFFecrjr9Qw==",
"dev": true,
"requires": {
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.0.0",
@@ -81717,14 +81717,14 @@
}
},
"jest": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.3.tgz",
- "integrity": "sha512-jwsfVABBzuN3Atm+6h6vIEpTs9+VApODLt4dk2qv1WMOpb1weI1IIZfuwpMiWZ62qvWj78MvdvMHIYdUfqrFaA==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.4.tgz",
+ "integrity": "sha512-AXwEIFa58Uf1Jno3/KSo5HZZ0/2Xwqvfrz0/3bmTwImkFlbOvz5vARAW9nTrxRLkojjkitaZ1KNKAtw3JRFAaA==",
"dev": true,
"requires": {
- "@jest/core": "^27.4.3",
+ "@jest/core": "^27.4.4",
"import-local": "^3.0.2",
- "jest-cli": "^27.4.3"
+ "jest-cli": "^27.4.4"
}
},
"jest-changed-files": {
@@ -81739,12 +81739,12 @@
}
},
"jest-circus": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.2.tgz",
- "integrity": "sha512-2ePUSru1BGMyzxsMvRfu+tNb+PW60rUyMLJBfw1Nrh5zC8RoTPfF+zbE0JToU31a6ZVe4nnrNKWYRzlghAbL0A==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.4.tgz",
+ "integrity": "sha512-4DWhvQerDq5X4GaqhEUoZiBhuNdKDGr0geW0iJwarbDljAmGaGOErKQG+z2PBr0vgN05z7tsGSY51mdWr8E4xg==",
"dev": true,
"requires": {
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/test-result": "^27.4.2",
"@jest/types": "^27.4.2",
"@types/node": "*",
@@ -81756,8 +81756,8 @@
"jest-each": "^27.4.2",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-runtime": "^27.4.2",
- "jest-snapshot": "^27.4.2",
+ "jest-runtime": "^27.4.4",
+ "jest-snapshot": "^27.4.4",
"jest-util": "^27.4.2",
"pretty-format": "^27.4.2",
"slash": "^3.0.0",
@@ -81823,19 +81823,19 @@
}
},
"jest-cli": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.3.tgz",
- "integrity": "sha512-zZSJBXNC/i8UnJPwcKWsqnhGgIF3uoTYP7th32Zej7KNQJdxzOMj+wCfy2Ox3kU7nXErJ36DtYyXDhfiqaiDRw==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.4.tgz",
+ "integrity": "sha512-+MfsHnZPUOBigCBURuQFRpgYoPCgmIFkICkqt4SrramZCUp/UAuWcst4pMZb84O3VU8JyKJmnpGG4qH8ClQloA==",
"dev": true,
"requires": {
- "@jest/core": "^27.4.3",
+ "@jest/core": "^27.4.4",
"@jest/test-result": "^27.4.2",
"@jest/types": "^27.4.2",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
- "jest-config": "^27.4.3",
+ "jest-config": "^27.4.4",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"prompts": "^2.0.1",
@@ -81932,28 +81932,28 @@
}
},
"jest-config": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.3.tgz",
- "integrity": "sha512-DQ10HTSqYtC2pO7s9j2jw+li4xUnm2wLYWH2o7K1ftB8NyvToHsXoLlXxtsGh3AW9gUQR6KY/4B7G+T/NswJBw==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.4.tgz",
+ "integrity": "sha512-6lxg0ugO6KS2zKEbpdDwBzu1IT0Xg4/VhxXMuBu+z/5FvBjLCEMTaWQm3bCaGCZUR9j9FK4DzUIxyhIgn6kVEg==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.4.2",
+ "@jest/test-sequencer": "^27.4.4",
"@jest/types": "^27.4.2",
- "babel-jest": "^27.4.2",
+ "babel-jest": "^27.4.4",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.1",
"graceful-fs": "^4.2.4",
- "jest-circus": "^27.4.2",
- "jest-environment-jsdom": "^27.4.3",
- "jest-environment-node": "^27.4.2",
+ "jest-circus": "^27.4.4",
+ "jest-environment-jsdom": "^27.4.4",
+ "jest-environment-node": "^27.4.4",
"jest-get-type": "^27.4.0",
- "jest-jasmine2": "^27.4.2",
+ "jest-jasmine2": "^27.4.4",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.2",
- "jest-runner": "^27.4.3",
+ "jest-resolve": "^27.4.4",
+ "jest-runner": "^27.4.4",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"micromatch": "^4.0.4",
@@ -82161,12 +82161,12 @@
}
},
"jest-environment-jsdom": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.3.tgz",
- "integrity": "sha512-x1AUVz3G14LpEJs7KIFUaTINT2n0unOUmvdAby3s/sldUpJJetOJifHo1O/EUQC5fNBowggwJbVulko18y6OWw==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.4.tgz",
+ "integrity": "sha512-cYR3ndNfHBqQgFvS1RL7dNqSvD//K56j/q1s2ygNHcfTCAp12zfIromO1w3COmXrxS8hWAh7+CmZmGCIoqGcGA==",
"dev": true,
"requires": {
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/fake-timers": "^27.4.2",
"@jest/types": "^27.4.2",
"@types/node": "*",
@@ -82176,12 +82176,12 @@
}
},
"jest-environment-node": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.2.tgz",
- "integrity": "sha512-nzTZ5nJ+FabuZPH2YVci7SZIHpvtNRHPt8+vipLkCnAgXGjVzHm7XJWdnNqXbAkExIgiKeVEkVMNZOZE/LeiIg==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.4.tgz",
+ "integrity": "sha512-D+v3lbJ2GjQTQR23TK0kY3vFVmSeea05giInI41HHOaJnAwOnmUHTZgUaZL+VxUB43pIzoa7PMwWtCVlIUoVoA==",
"dev": true,
"requires": {
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/fake-timers": "^27.4.2",
"@jest/types": "^27.4.2",
"@types/node": "*",
@@ -82196,9 +82196,9 @@
"dev": true
},
"jest-haste-map": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.2.tgz",
- "integrity": "sha512-foiyAEePORUN2eeJnOtcM1y8qW0ShEd9kTjWVL4sVaMcuCJM6gtHegvYPBRT0mpI/bs4ueThM90+Eoj2ncoNsA==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.4.tgz",
+ "integrity": "sha512-kvspmHmgPIZoDaqUsvsJFTaspuxhATvdO6wsFNGNSi8kfdiOCEEvECNbht8xG+eE5Ol88JyJmp2D7RF4dYo85Q==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
@@ -82211,7 +82211,7 @@
"jest-regex-util": "^27.4.0",
"jest-serializer": "^27.4.0",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.2",
+ "jest-worker": "^27.4.4",
"micromatch": "^4.0.4",
"walker": "^1.0.7"
},
@@ -82223,9 +82223,9 @@
"dev": true
},
"jest-worker": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
- "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
+ "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -82245,13 +82245,13 @@
}
},
"jest-jasmine2": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.2.tgz",
- "integrity": "sha512-VO/fyAJSH9u0THjbteFiL8qc93ufU+yW+bdieDc8tzTCWwlWzO53UHS5nFK1qmE8izb5Smkn+XHlVt6/l06MKQ==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.4.tgz",
+ "integrity": "sha512-ygk2tUgtLeN3ouj4KEYw9p81GLI1EKrnvourPULN5gdgB482PH5op9gqaRG0IenbJhBbbRwiSvh5NoBoQZSqdA==",
"dev": true,
"requires": {
"@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/source-map": "^27.4.0",
"@jest/test-result": "^27.4.2",
"@jest/types": "^27.4.2",
@@ -82263,8 +82263,8 @@
"jest-each": "^27.4.2",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-runtime": "^27.4.2",
- "jest-snapshot": "^27.4.2",
+ "jest-runtime": "^27.4.4",
+ "jest-snapshot": "^27.4.4",
"jest-util": "^27.4.2",
"pretty-format": "^27.4.2",
"throat": "^6.0.1"
@@ -82639,15 +82639,15 @@
"dev": true
},
"jest-resolve": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.2.tgz",
- "integrity": "sha512-d/zqPjxCzMqHlOdRTg8cTpO9jY+1/T74KazT8Ws/LwmwxV5sRMWOkiLjmzUCDj/5IqA5XHNK4Hkmlq9Kdpb9Sg==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.4.tgz",
+ "integrity": "sha512-Yh5jK3PBmDbm01Rc8pT0XqpBlTPEGwWp7cN61ijJuwony/tR2Taof3TLy6yfNiuRS8ucUOPO7NBYm3ei38kkcg==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
+ "jest-haste-map": "^27.4.4",
"jest-pnp-resolver": "^1.2.2",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
@@ -82714,26 +82714,26 @@
}
},
"jest-resolve-dependencies": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.2.tgz",
- "integrity": "sha512-hb++cTpqvOWfU49MCP/JQkxmnrhKoAVqXWFjgYXswRSVGk8Q6bDTSvhbCeYXDtXaymY0y7WrrSIlKogClcKJuw==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.4.tgz",
+ "integrity": "sha512-iAnpCXh81sd9nbyqySvm5/aV9X6JZKE0dQyFXTC8tptXcdrgS0vjPFy+mEgzPHxXw+tq4TQupuTa0n8OXwRIxw==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-snapshot": "^27.4.2"
+ "jest-snapshot": "^27.4.4"
}
},
"jest-runner": {
- "version": "27.4.3",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.3.tgz",
- "integrity": "sha512-JgR6Om/j22Fd6ZUUIGTWNcCtuZVYbNrecb4k89W4UyFJoRtHpo2zMKWkmFFFJoqwWGrfrcPLnVBIgkJiTV3cyA==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.4.tgz",
+ "integrity": "sha512-AXv/8Q0Xf1puWnDf52m7oLrK7sXcv6re0V/kItwTSVHJbX7Oebm07oGFQqGmq0R0mhO1zpmB3OpqRuaCN2elPA==",
"dev": true,
"requires": {
"@jest/console": "^27.4.2",
- "@jest/environment": "^27.4.2",
+ "@jest/environment": "^27.4.4",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -82741,15 +82741,15 @@
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-docblock": "^27.4.0",
- "jest-environment-jsdom": "^27.4.3",
- "jest-environment-node": "^27.4.2",
- "jest-haste-map": "^27.4.2",
+ "jest-environment-jsdom": "^27.4.4",
+ "jest-environment-node": "^27.4.4",
+ "jest-haste-map": "^27.4.4",
"jest-leak-detector": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-resolve": "^27.4.2",
- "jest-runtime": "^27.4.2",
+ "jest-resolve": "^27.4.4",
+ "jest-runtime": "^27.4.4",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.2",
+ "jest-worker": "^27.4.4",
"source-map-support": "^0.5.6",
"throat": "^6.0.1"
},
@@ -82795,9 +82795,9 @@
"dev": true
},
"jest-worker": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
- "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
+ "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -82828,17 +82828,17 @@
}
},
"jest-runtime": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.2.tgz",
- "integrity": "sha512-eqPgcBaUNaw6j8T5M+dnfAEh6MIrh2YmtskCr9sl50QYpD22Sg+QqHw3J3nmaLzVMbBtOMHFFxLF0Qx8MsZVFQ==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.4.tgz",
+ "integrity": "sha512-tZGay6P6vXJq8t4jVFAUzYHx+lzIHXjz+rj1XBk6mAR1Lwtf5kz0Uun7qNuU+oqpZu4+hhuxpUfXb6j30bEPqA==",
"dev": true,
"requires": {
"@jest/console": "^27.4.2",
- "@jest/environment": "^27.4.2",
- "@jest/globals": "^27.4.2",
+ "@jest/environment": "^27.4.4",
+ "@jest/globals": "^27.4.4",
"@jest/source-map": "^27.4.0",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/yargs": "^16.0.0",
"chalk": "^4.0.0",
@@ -82848,12 +82848,12 @@
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.2",
+ "jest-haste-map": "^27.4.4",
"jest-message-util": "^27.4.2",
"jest-mock": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.2",
- "jest-snapshot": "^27.4.2",
+ "jest-resolve": "^27.4.4",
+ "jest-snapshot": "^27.4.4",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"slash": "^3.0.0",
@@ -82967,9 +82967,9 @@
}
},
"jest-snapshot": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.2.tgz",
- "integrity": "sha512-DI7lJlNIu6WSQ+esqhnJzEzU70+dV+cNjoF1c+j5FagWEd3KtOyZvVliAH0RWNQ6KSnAAnKSU0qxJ8UXOOhuUQ==",
+ "version": "27.4.4",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.4.tgz",
+ "integrity": "sha512-yy+rpCvYMOjTl7IMuaMI9OP9WT229zi8BhdNHm6e6mttAOIzvIiCxFoZ6yRxaV3HDPPgMryi+ReX2b8+IQJdPA==",
"dev": true,
"requires": {
"@babel/core": "^7.7.2",
@@ -82978,7 +82978,7 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.0.0",
- "@jest/transform": "^27.4.2",
+ "@jest/transform": "^27.4.4",
"@jest/types": "^27.4.2",
"@types/babel__traverse": "^7.0.4",
"@types/prettier": "^2.1.5",
@@ -82988,10 +82988,10 @@
"graceful-fs": "^4.2.4",
"jest-diff": "^27.4.2",
"jest-get-type": "^27.4.0",
- "jest-haste-map": "^27.4.2",
+ "jest-haste-map": "^27.4.4",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-resolve": "^27.4.2",
+ "jest-resolve": "^27.4.4",
"jest-util": "^27.4.2",
"natural-compare": "^1.4.0",
"pretty-format": "^27.4.2",
diff --git a/package.json b/package.json
index 2c017174de..ac39b34e7e 100644
--- a/package.json
+++ b/package.json
@@ -158,7 +158,7 @@
"execa": "5.1.1",
"faker": "5.5.3",
"husky": "7.0.4",
- "jest": "27.4.3",
+ "jest": "27.4.4",
"js-yaml": "3.14.1",
"lint-staged": "12.1.2",
"lodash": "4.17.21",
From ecc964996bb1930bd7d9fad1c7e07956bc3f255e Mon Sep 17 00:00:00 2001
From: camperbot
Date: Fri, 10 Dec 2021 20:15:49 +0530
Subject: [PATCH 03/63] chore(i18n,curriculum): processed translations (#44457)
---
...a-more-complex-shape-using-css-and-html.md | 146 +++++++++++++
.../basic-javascript/counting-cards.md | 201 ++++++++++++++++++
2 files changed, 347 insertions(+)
create mode 100644 curriculum/challenges/ukrainian/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
create mode 100644 curriculum/challenges/ukrainian/02-javascript-algorithms-and-data-structures/basic-javascript/counting-cards.md
diff --git a/curriculum/challenges/ukrainian/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md b/curriculum/challenges/ukrainian/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
new file mode 100644
index 0000000000..1ad0052da2
--- /dev/null
+++ b/curriculum/challenges/ukrainian/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
@@ -0,0 +1,146 @@
+---
+id: 587d78a6367417b2b2512ade
+title: Створіть складнішу форму за допомогою CSS і HTML
+challengeType: 0
+videoUrl: 'https://scrimba.com/c/cPpz4fr'
+forumTopicId: 301050
+dashedName: create-a-more-complex-shape-using-css-and-html
+---
+
+# --description--
+
+Однією з найпопулярніших форм у світі є серце, і в цьому завданні ви створите його за допомогою CSS. Проте, спочатку вам потрібно зрозуміти, що собою являють псевдоелементи `::before` і `::after`. `::before` створює псевдоелемент, який є першим обраним дочірнім елементом, `::after` створює псевдоелемент, який є останнім обраним дочірнім елементом. У наступному прикладі псевдоелемент `::before` використовується, щоб додати прямокутник до елемента класу `heart`:
+
+```css
+.heart::before {
+ content: "";
+ background-color: yellow;
+ border-radius: 25%;
+ position: absolute;
+ height: 50px;
+ width: 70px;
+ top: -50px;
+ left: 5px;
+}
+```
+
+Для нормального функціонування псевдоелементів `::before` і `::after` необхідно, щоб вони мали визначену властивість `content`. Ця властивість зазвичай використовується, щоб додавати об'єкти на кшталт світлин або тексту до обраного елемента. Коли псевдоелементи `::before` і `::after` використовуються для створення форм, властивість `content` також необхідна, але вона встановлена як порожній рядок. У попередньому прикладі елемент з класом `heart` має псевдоелемент `::before`, що створює жовтий прямокутник зі значеннями висоти та ширини `50px` і `70px` відповідно. Цей прямокутник має заокруглені кути завдяки значенню `border-radius`, рівним 25%, і розташований на `5px` ліворуч від елемента і на `50px` над вершиною елемента.
+
+# --instructions--
+
+Перетворіть елемент на екрані на серце. У селекторі `heart::after` замініть фоновий колір `background-color` на `pink` і встановіть значення `border-radius` на 50%.
+
+Потім оберіть елемент з класом `heart` (тільки `heart`) і заповніть властивість `transform`. Використовуйте функцію `rotate()` з -45 градусами.
+
+Нарешті, у селекторі `heart::before` встановіть його властивість `content` на порожній рядок.
+
+# --hints--
+
+Властивість `background-color` селектора `heart::after` має бути `pink`.
+
+```js
+const heartAfter = code.match(/\.heart::after\s*{[\s\S]+?[^\}]}/g)[0];
+assert(
+ /({|;)\s*background-color\s*:\s*pink\s*(;|})/g.test(heartAfter)
+);
+```
+
+`border-radius` селектора `heart::after` повинен мати значення 50%.
+
+```js
+assert(code.match(/border-radius\s*?:\s*?50%/gi).length == 2);
+```
+
+Властивість `transform` класу `heart` повинна використовувати функцію `rotate()`, встановлену на -45 градусів.
+
+```js
+assert(code.match(/transform\s*?:\s*?rotate\(\s*?-45deg\s*?\)/gi));
+```
+
+Елемент `content` селектора `heart::before` має бути порожнім рядком.
+
+```js
+assert(code.match(/\.heart::before\s*?{\s*?content\s*?:\s*?("|')\1\s*?;/gi));
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+```
+
+# --solutions--
+
+```html
+
+
+```
diff --git a/curriculum/challenges/ukrainian/02-javascript-algorithms-and-data-structures/basic-javascript/counting-cards.md b/curriculum/challenges/ukrainian/02-javascript-algorithms-and-data-structures/basic-javascript/counting-cards.md
new file mode 100644
index 0000000000..eb9043c6e1
--- /dev/null
+++ b/curriculum/challenges/ukrainian/02-javascript-algorithms-and-data-structures/basic-javascript/counting-cards.md
@@ -0,0 +1,201 @@
+---
+id: 565bbe00e9cc8ac0725390f4
+title: Підрахунок карт
+challengeType: 1
+videoUrl: 'https://scrimba.com/c/c6KE7ty'
+forumTopicId: 16809
+dashedName: counting-cards
+---
+
+# --description--
+
+У казино грі Blackjack гравець може здобути перевагу над казино, відстежуючи відносне число старших та молодших карт, що залишились в колоді. Це називається [Підрахунок карт](https://en.wikipedia.org/wiki/Card_counting).
+
+Чим більше старших карт у колоді, тим краще для гравця. Кожній карті присвоєно значення відповідно до нижчеподаної таблиці. Коли рахунок є більшим за нуль, гравець повинен ставити старшу карту. Коли рахунок дорівнює нулю або є меншим, гравець повинен ставити молодшу карту.
+
+Зміна рахунку Карти +1 2, 3, 4, 5, 6 0 7, 8, 9 -1 10, 'J', 'Q', 'К', 'A'
+
+Ви писатимете функцію підрахунку карт. Вона матиме параметр `card`, який може бути числом або рядком, а також збільшить або зменшить загальну змінну `count` відповідно до значення карти (див. таблицю). Тоді функція поверне рядок з поточним рахунком і рядок `Bet`, якщо рахунок більше нуля, або `Hold`, якщо рахунок дорівнює або менше нуля. Між поточним рахунком та рішенням гравця (`Bet` чи `Hold`) повиннен бути один пробіл.
+
+**Приклад результатів:** `-3 Hold` або `5 Bet`
+
+**Підказка**
+НЕ скидайте `count` до 0, коли значення 7, 8 або 9. Не повертайте масив.
+Не вставляйте лапки (одинарні чи подвійні) у результаті.
+
+# --hints--
+
+Послідовність карт 2, 3, 4, 5, 6 має повернути рядок `5 Bet`
+
+```js
+assert(
+ (function () {
+ count = 0;
+ cc(2);
+ cc(3);
+ cc(4);
+ cc(5);
+ var out = cc(6);
+ if (out === '5 Bet') {
+ return true;
+ }
+ return false;
+ })()
+);
+```
+
+Послідовність карт 7, 8, 9 має повернути рядок `0 Hold`
+
+```js
+assert(
+ (function () {
+ count = 0;
+ cc(7);
+ cc(8);
+ var out = cc(9);
+ if (out === '0 Hold') {
+ return true;
+ }
+ return false;
+ })()
+);
+```
+
+Послідовність карт 10, J, Q, K, A має повернути рядок `-5 Hold`
+
+```js
+assert(
+ (function () {
+ count = 0;
+ cc(10);
+ cc('J');
+ cc('Q');
+ cc('K');
+ var out = cc('A');
+ if (out === '-5 Hold') {
+ return true;
+ }
+ return false;
+ })()
+);
+```
+
+Послідовність карт 3, 7, Q, 8, A має повернути рядок `-1 Hold`
+
+```js
+assert(
+ (function () {
+ count = 0;
+ cc(3);
+ cc(7);
+ cc('Q');
+ cc(8);
+ var out = cc('A');
+ if (out === '-1 Hold') {
+ return true;
+ }
+ return false;
+ })()
+);
+```
+
+Послідовність карт 2, J, 9, 2, 7 має повернути рядок `1 Bet`
+
+```js
+assert(
+ (function () {
+ count = 0;
+ cc(2);
+ cc('J');
+ cc(9);
+ cc(2);
+ var out = cc(7);
+ if (out === '1 Bet') {
+ return true;
+ }
+ return false;
+ })()
+);
+```
+
+Послідовність карт 2, 2, 10 має повернути рядок `1 Bet`
+
+```js
+assert(
+ (function () {
+ count = 0;
+ cc(2);
+ cc(2);
+ var out = cc(10);
+ if (out === '1 Bet') {
+ return true;
+ }
+ return false;
+ })()
+);
+```
+
+Послідовність карт 3, 2, A, 10, K має повернути рядок `-1 Hold`
+
+```js
+assert(
+ (function () {
+ count = 0;
+ cc(3);
+ cc(2);
+ cc('A');
+ cc(10);
+ var out = cc('K');
+ if (out === '-1 Hold') {
+ return true;
+ }
+ return false;
+ })()
+);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+let count = 0;
+
+function cc(card) {
+ // Only change code below this line
+
+
+ return "Change Me";
+ // Only change code above this line
+}
+
+cc(2); cc(3); cc(7); cc('K'); cc('A');
+```
+
+# --solutions--
+
+```js
+let count = 0;
+function cc(card) {
+ switch(card) {
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ count++;
+ break;
+ case 10:
+ case 'J':
+ case 'Q':
+ case 'K':
+ case 'A':
+ count--;
+ }
+ if(count > 0) {
+ return count + " Bet";
+ } else {
+ return count + " Hold";
+ }
+}
+```
From efe5d419f34031fe5670ef021401d87ff0795ccc Mon Sep 17 00:00:00 2001
From: camperbot
Date: Fri, 10 Dec 2021 20:16:21 +0530
Subject: [PATCH 04/63] chore(i18n,client): processed translations (#44456)
---
client/i18n/locales/chinese-traditional/translations.json | 5 +++++
client/i18n/locales/chinese/translations.json | 5 +++++
client/i18n/locales/espanol/translations.json | 5 +++++
client/i18n/locales/italian/translations.json | 5 +++++
client/i18n/locales/portuguese/translations.json | 5 +++++
client/i18n/locales/ukrainian/translations.json | 5 +++++
6 files changed, 30 insertions(+)
diff --git a/client/i18n/locales/chinese-traditional/translations.json b/client/i18n/locales/chinese-traditional/translations.json
index 4f129bcf41..2e550db5b7 100644
--- a/client/i18n/locales/chinese-traditional/translations.json
+++ b/client/i18n/locales/chinese-traditional/translations.json
@@ -287,11 +287,16 @@
"info": "信息",
"code": "編程",
"tests": "測試",
+ "restart": "Restart",
+ "restart-step": "Restart Step",
+ "console": "Console",
+ "notes": "Notes",
"preview": "預覽"
},
"help-translate": "我們仍然在翻譯以下證書。",
"help-translate-link": "幫助我們翻譯。",
"season-greetings": "Season's Greetings to you and your family.",
+ "season-greetings-fcc": "Season's Greetings from the freeCodeCamp community 🎉",
"if-getting-value": "If you're getting a lot out of freeCodeCamp, now is a great time to donate to support our nonprofit's mission.",
"project-preview-title": "下面是你將構建的項目的預覽"
},
diff --git a/client/i18n/locales/chinese/translations.json b/client/i18n/locales/chinese/translations.json
index cca9d43ad6..1e991f3ea4 100644
--- a/client/i18n/locales/chinese/translations.json
+++ b/client/i18n/locales/chinese/translations.json
@@ -287,11 +287,16 @@
"info": "信息",
"code": "编程",
"tests": "测试",
+ "restart": "Restart",
+ "restart-step": "Restart Step",
+ "console": "Console",
+ "notes": "Notes",
"preview": "预览"
},
"help-translate": "我们仍然在翻译以下证书。",
"help-translate-link": "帮助我们翻译。",
"season-greetings": "Season's Greetings to you and your family.",
+ "season-greetings-fcc": "Season's Greetings from the freeCodeCamp community 🎉",
"if-getting-value": "If you're getting a lot out of freeCodeCamp, now is a great time to donate to support our nonprofit's mission.",
"project-preview-title": "下面是你将构建的项目的预览"
},
diff --git a/client/i18n/locales/espanol/translations.json b/client/i18n/locales/espanol/translations.json
index b7129dac53..c3ae663afc 100644
--- a/client/i18n/locales/espanol/translations.json
+++ b/client/i18n/locales/espanol/translations.json
@@ -287,11 +287,16 @@
"info": "Info",
"code": "Código",
"tests": "Pruebas",
+ "restart": "Restart",
+ "restart-step": "Restart Step",
+ "console": "Console",
+ "notes": "Notes",
"preview": "Vista"
},
"help-translate": "Todavía estamos traduciendo las siguientes certificaciones.",
"help-translate-link": "Ayúdanos a traducir.",
"season-greetings": "Deseamos felices festividades a ti y a tu familia.",
+ "season-greetings-fcc": "Season's Greetings from the freeCodeCamp community 🎉",
"if-getting-value": "Si estás obteniendo mucho de freeCodeCamp, ahora es un buen momento para donar para apoyar nuestra misión sin fines de lucro.",
"project-preview-title": "Aquí hay una vista previa de lo que construirás"
},
diff --git a/client/i18n/locales/italian/translations.json b/client/i18n/locales/italian/translations.json
index e31524f5a1..810a99a62a 100644
--- a/client/i18n/locales/italian/translations.json
+++ b/client/i18n/locales/italian/translations.json
@@ -287,11 +287,16 @@
"info": "Informazioni",
"code": "Codice",
"tests": "Test",
+ "restart": "Restart",
+ "restart-step": "Restart Step",
+ "console": "Console",
+ "notes": "Notes",
"preview": "Anteprima"
},
"help-translate": "Stiamo ancora traducendo le seguenti certificazioni.",
"help-translate-link": "Aiutaci con le traduzioni...",
"season-greetings": "Season's Greetings to you and your family.",
+ "season-greetings-fcc": "Season's Greetings from the freeCodeCamp community 🎉",
"if-getting-value": "If you're getting a lot out of freeCodeCamp, now is a great time to donate to support our nonprofit's mission.",
"project-preview-title": "Here's a preview of what you will build"
},
diff --git a/client/i18n/locales/portuguese/translations.json b/client/i18n/locales/portuguese/translations.json
index 3f4f1802b0..f904713164 100644
--- a/client/i18n/locales/portuguese/translations.json
+++ b/client/i18n/locales/portuguese/translations.json
@@ -287,11 +287,16 @@
"info": "Informações",
"code": "Código",
"tests": "Testes",
+ "restart": "Restart",
+ "restart-step": "Restart Step",
+ "console": "Console",
+ "notes": "Notes",
"preview": "Pré-visualizar"
},
"help-translate": "Ainda estamos traduzindo as certificações a seguir.",
"help-translate-link": "Ajude-nos a traduzir.",
"season-greetings": "Boas festas de fim de ano para você e sua família.",
+ "season-greetings-fcc": "Season's Greetings from the freeCodeCamp community 🎉",
"if-getting-value": "Se você está conseguindo tirar proveito do conteúdo do freeCodeCamp, agora é um ótimo momento para fazer sua doação e apoiar nossa missão sem fins lucrativos.",
"project-preview-title": "Aqui está uma prévia do que você vai criar"
},
diff --git a/client/i18n/locales/ukrainian/translations.json b/client/i18n/locales/ukrainian/translations.json
index 4e1886c368..611391edd8 100644
--- a/client/i18n/locales/ukrainian/translations.json
+++ b/client/i18n/locales/ukrainian/translations.json
@@ -287,11 +287,16 @@
"info": "Інформація",
"code": "Код",
"tests": "Тести",
+ "restart": "Restart",
+ "restart-step": "Restart Step",
+ "console": "Console",
+ "notes": "Notes",
"preview": "Попередній перегляд"
},
"help-translate": "Ми все ще перекладаємо такі сертифікати.",
"help-translate-link": "Допоможіть нам з перекладом.",
"season-greetings": "Season's Greetings to you and your family.",
+ "season-greetings-fcc": "Season's Greetings from the freeCodeCamp community 🎉",
"if-getting-value": "If you're getting a lot out of freeCodeCamp, now is a great time to donate to support our nonprofit's mission.",
"project-preview-title": "Here's a preview of what you will build"
},
From f8eec5d3fb4d84fe2548053f51ce646def6a9505 Mon Sep 17 00:00:00 2001
From: "Nicholas Carrigan (he/him)"
Date: Fri, 10 Dec 2021 07:22:45 -0800
Subject: [PATCH 05/63] chore: migrate required files (#44461)
---
client/i18n/locales/ukrainian/links.json | 28 +
client/i18n/locales/ukrainian/meta-tags.json | 32 +
client/i18n/locales/ukrainian/motivation.json | 819 ++++++++++++++++++
client/i18n/locales/ukrainian/trending.json | 65 ++
4 files changed, 944 insertions(+)
create mode 100644 client/i18n/locales/ukrainian/links.json
create mode 100644 client/i18n/locales/ukrainian/meta-tags.json
create mode 100644 client/i18n/locales/ukrainian/motivation.json
create mode 100644 client/i18n/locales/ukrainian/trending.json
diff --git a/client/i18n/locales/ukrainian/links.json b/client/i18n/locales/ukrainian/links.json
new file mode 100644
index 0000000000..65f62b29c1
--- /dev/null
+++ b/client/i18n/locales/ukrainian/links.json
@@ -0,0 +1,28 @@
+{
+ "help-translate-link-url": "https://contribute.freecodecamp.org/#/how-to-translate-files",
+ "top-contributors": "https://www.freecodecamp.org/news/freecodecamp-top-contributors/",
+ "footer": {
+ "about-url": "https://www.freecodecamp.org/news/about/",
+ "shop-url": "https://www.freecodecamp.org/shop/",
+ "support-url": "https://www.freecodecamp.org/news/support/",
+ "sponsors-url": "https://www.freecodecamp.org/news/sponsors/",
+ "honesty-url": "https://www.freecodecamp.org/news/academic-honesty-policy/",
+ "coc-url": "https://www.freecodecamp.org/news/code-of-conduct/",
+ "privacy-url": "https://www.freecodecamp.org/news/privacy-policy/",
+ "tos-url": "https://www.freecodecamp.org/news/terms-of-service/",
+ "copyright-url": "https://www.freecodecamp.org/news/copyright-policy/"
+ },
+ "donate": {
+ "other-ways-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp"
+ },
+ "nav": {
+ "forum": "https://forum.freecodecamp.org/",
+ "news": "https://freecodecamp.org/news/"
+ },
+ "help": {
+ "HTML-CSS": "HTML-CSS",
+ "JavaScript": "JavaScript",
+ "Python": "Python",
+ "Relational Databases": "Relational Databases"
+ }
+}
diff --git a/client/i18n/locales/ukrainian/meta-tags.json b/client/i18n/locales/ukrainian/meta-tags.json
new file mode 100644
index 0000000000..cf2020dbfb
--- /dev/null
+++ b/client/i18n/locales/ukrainian/meta-tags.json
@@ -0,0 +1,32 @@
+{
+ "title": "Learn to Code — For Free — Coding Courses for Busy People",
+ "description": "Learn to Code — For Free",
+ "social-description": "Learn to Code — For Free",
+ "keywords": [
+ "python",
+ "javascript",
+ "js",
+ "git",
+ "github",
+ "website",
+ "web",
+ "development",
+ "free",
+ "code",
+ "camp",
+ "course",
+ "courses",
+ "html",
+ "css",
+ "react",
+ "redux",
+ "api",
+ "front",
+ "back",
+ "end",
+ "learn",
+ "tutorial",
+ "programming"
+ ],
+ "youre-unsubscribed": "You have been unsubscribed"
+}
diff --git a/client/i18n/locales/ukrainian/motivation.json b/client/i18n/locales/ukrainian/motivation.json
new file mode 100644
index 0000000000..d0cf5c66ae
--- /dev/null
+++ b/client/i18n/locales/ukrainian/motivation.json
@@ -0,0 +1,819 @@
+{
+ "compliments": [
+ "Over the top!",
+ "Down the rabbit hole we go!",
+ "Bring that rain!",
+ "Target acquired.",
+ "Feel that need for speed!",
+ "You've got guts!",
+ "We have liftoff!",
+ "To infinity and beyond!",
+ "Encore!",
+ "Onward!",
+ "Challenge destroyed!",
+ "It's on like Donkey Kong!",
+ "Power level? It's over 9000!",
+ "Coding spree!",
+ "Code long and prosper.",
+ "The crowd goes wild!",
+ "One for the guinness book!",
+ "Flawless victory!",
+ "Most efficient!",
+ "You've got the touch!",
+ "You're on fire!",
+ "The town is now red!",
+ "To the nines!",
+ "To the Batmobile!",
+ "Pull out all the stops!",
+ "You're a wizard, Harry!",
+ "You're an all star!",
+ "Way to go!",
+ "Outta sight!",
+ "You're crushing it!",
+ "What sorcery is this?",
+ "The world rejoices!",
+ "That's the way it's done!",
+ "You rock!",
+ "Woo-hoo!",
+ "We knew you could do it!",
+ "Hyper Combo Finish!",
+ "Nothing but net!",
+ "Boom-shakalaka!",
+ "You're a shooting star!",
+ "You're unstoppable!",
+ "Way cool!",
+ "Walk on that sunshine!",
+ "Keep on trucking!",
+ "Off the charts!",
+ "There is no spoon!",
+ "Cranked it up to 11!",
+ "Escape velocity reached!",
+ "You make this look easy!",
+ "Passed with flying colors!",
+ "You've got this!",
+ "Happy, happy, joy, joy!",
+ "Tomorrow, the world!",
+ "Your powers combined!",
+ "It's alive. It's alive!",
+ "Sonic Boom!",
+ "Here's looking at you, Code!",
+ "Ride like the wind!",
+ "Legen - wait for it - dary!",
+ "Ludicrous Speed! Go!",
+ "Most triumphant!",
+ "One loop to rule them all!",
+ "By the power of Grayskull!",
+ "You did it!",
+ "Storm that castle!",
+ "Face-melting guitar solo!",
+ "Checkmate!",
+ "Bodacious!",
+ "Tubular!",
+ "You're outta sight!",
+ "Keep calm and code on!",
+ "Even sad panda smiles!",
+ "Even grumpy cat approves!",
+ "Kool Aid Man says oh yeah!",
+ "Bullseye!",
+ "Far out!",
+ "You're heating up!",
+ "Standing ovation!",
+ "Nice one!",
+ "All right!",
+ "Hasta la vista, challenge!",
+ "Terminated.",
+ "Off the hook!",
+ "Thundercats, Hooo!",
+ "Shiver me timbers!",
+ "Raise the roof!",
+ "Bingo!",
+ "Even honeybadger cares!",
+ "Helm, Warp Nine. Engage!",
+ "Gotta code 'em all!",
+ "Spool up the FTL drive!",
+ "Cool beans!",
+ "They're in another castle.",
+ "Power UP!",
+ "Pikachu chooses you!",
+ "I gotta have more cow bell.",
+ "Gotta go fast!",
+ "Yipee!",
+ "Cowabunga!",
+ "Moon Prism Power!",
+ "Plus Ultra!"
+ ],
+ "motivationalQuotes": [
+ {
+ "quote": "Whatever you are, be a good one.",
+ "author": "Abraham Lincoln"
+ },
+ {
+ "quote": "A change in perspective is worth 80 IQ points.",
+ "author": "Alan Kay"
+ },
+ {
+ "quote": "The best way to predict the future is to invent it.",
+ "author": "Alan Kay"
+ },
+ {
+ "quote": "The future is not laid out on a track. It is something that we can decide, and to the extent that we do not violate any known laws of the universe, we can probably make it work the way that we want to.",
+ "author": "Alan Kay"
+ },
+ {
+ "quote": "We can only see a short distance ahead, but we can see plenty there that needs to be done.",
+ "author": "Alan Turing"
+ },
+ {
+ "quote": "In the depth of winter, I finally learned that within me there lay an invincible summer.",
+ "author": "Albert Camus"
+ },
+ {
+ "quote": "A person who never made a mistake never tried anything new.",
+ "author": "Albert Einstein"
+ },
+ {
+ "quote": "Creativity is intelligence having fun.",
+ "author": "Albert Einstein"
+ },
+ {
+ "quote": "I have no special talents. I am only passionately curious.",
+ "author": "Albert Einstein"
+ },
+ {
+ "quote": "Life is like riding a bicycle. To keep your balance, you must keep moving.",
+ "author": "Albert Einstein"
+ },
+ {
+ "quote": "Make everything as simple as possible, but not simpler.",
+ "author": "Albert Einstein"
+ },
+ {
+ "quote": "Never memorize something that you can look up.",
+ "author": "Albert Einstein"
+ },
+ {
+ "quote": "Once we accept our limits, we go beyond them.",
+ "author": "Albert Einstein"
+ },
+ {
+ "quote": "Play is the highest form of research.",
+ "author": "Albert Einstein"
+ },
+ {
+ "quote": "We cannot solve our problems with the same thinking we used when we created them.",
+ "author": "Albert Einstein"
+ },
+ {
+ "quote": "Wisdom is not a product of schooling but of the lifelong attempt to acquire it.",
+ "author": "Albert Einstein"
+ },
+ {
+ "quote": "Your imagination is your preview of life's coming attractions.",
+ "author": "Albert Einstein"
+ },
+ {
+ "quote": "There is only one corner of the universe you can be certain of improving, and that's your own self.",
+ "author": "Aldous Huxley"
+ },
+ {
+ "quote": "The most common way people give up their power is by thinking they don't have any.",
+ "author": "Alice Walker"
+ },
+ {
+ "quote": "Follow your inner moonlight. Don't hide the madness.",
+ "author": "Allen Ginsberg"
+ },
+ {
+ "quote": "The most difficult thing is the decision to act. The rest is merely tenacity.",
+ "author": "Amelia Earhart"
+ },
+ {
+ "quote": "Life shrinks or expands in proportion with one's courage.",
+ "author": "Anaïs Nin"
+ },
+ {
+ "quote": "Weeks of programming can save you hours of planning.",
+ "author": "Unknown"
+ },
+ {
+ "quote": "Quality is not an act, it is a habit.",
+ "author": "Aristotle"
+ },
+ {
+ "quote": "Start where you are. Use what you have. Do what you can.",
+ "author": "Arthur Ashe"
+ },
+ {
+ "quote": "Nothing is impossible, the word itself says \"I'm possible\"!",
+ "author": "Audrey Hepburn"
+ },
+ {
+ "quote": "Every strike brings me closer to the next home run.",
+ "author": "Babe Ruth"
+ },
+ {
+ "quote": "By failing to prepare, you are preparing to fail.",
+ "author": "Benjamin Franklin"
+ },
+ {
+ "quote": "Tell me and I forget. Teach me and I remember. Involve me and I learn.",
+ "author": "Benjamin Franklin"
+ },
+ {
+ "quote": "Well done is better than well said.",
+ "author": "Benjamin Franklin"
+ },
+ {
+ "quote": "There are no short cuts to any place worth going.",
+ "author": "Beverly Sills"
+ },
+ {
+ "quote": "Controlling complexity is the essence of computer programming.",
+ "author": "Brian Kernighan"
+ },
+ {
+ "quote": "I fear not the man who has practiced 10,000 kicks once, but I fear the man who has practiced one kick 10,000 times.",
+ "author": "Bruce Lee"
+ },
+ {
+ "quote": "There are far, far better things ahead than any we leave behind.",
+ "author": "C.S. Lewis"
+ },
+ {
+ "quote": "We are what we believe we are.",
+ "author": "C.S. Lewis"
+ },
+ {
+ "quote": "With the possible exception of the equator, everything begins somewhere.",
+ "author": "C.S. Lewis"
+ },
+ {
+ "quote": "You are never too old to set another goal, or to dream a new dream.",
+ "author": "C.S. Lewis"
+ },
+ {
+ "quote": "Somewhere, something incredible is waiting to be known.",
+ "author": "Carl Sagan"
+ },
+ {
+ "quote": "If you're not making mistakes, then you're not making decisions.",
+ "author": "Catherine Cook"
+ },
+ {
+ "quote": "Find what you love and let it kill you.",
+ "author": "Charles Bukowski"
+ },
+ {
+ "quote": "What matters most is how well you walk through the fire.",
+ "author": "Charles Bukowski"
+ },
+ {
+ "quote": "It is not the strongest of the species that survive, nor the most intelligent, but the one most responsive to change.",
+ "author": "Charles Darwin"
+ },
+ {
+ "quote": "Life is 10% what happens to you and 90% how you react to it.",
+ "author": "Charles R. Swindoll"
+ },
+ {
+ "quote": "You will do foolish things, but do them with enthusiasm.",
+ "author": "Colette"
+ },
+ {
+ "quote": "It does not matter how slowly you go as long as you do not stop.",
+ "author": "Confucius"
+ },
+ {
+ "quote": "Real knowledge is to know the extent of one's ignorance.",
+ "author": "Confucius"
+ },
+ {
+ "quote": "The past cannot be changed. The future is yet in your power.",
+ "author": "Confucius"
+ },
+ {
+ "quote": "Looking at code you wrote more than two weeks ago is like looking at code you are seeing for the first time.",
+ "author": "Dan Hurvitz"
+ },
+ {
+ "quote": "Someday is not a day of the week.",
+ "author": "Denise Brennan-Nelson"
+ },
+ {
+ "quote": "UNIX is simple. It just takes a genius to understand its simplicity.",
+ "author": "Dennis Ritchie"
+ },
+ {
+ "quote": "Computers are good at following instructions, but not at reading your mind.",
+ "author": "Donald Knuth"
+ },
+ {
+ "quote": "A good programmer is someone who always looks both ways before crossing a one-way street.",
+ "author": "Doug Linder"
+ },
+ {
+ "quote": "Tough times never last, but tough people do.",
+ "author": "Dr. Robert Schuller"
+ },
+ {
+ "quote": "If things start happening, don't worry, don't stew, just go right along and you'll start happening too.",
+ "author": "Dr. Seuss"
+ },
+ {
+ "quote": "Do not go gentle into that good night. Rage, rage against the dying of the light.",
+ "author": "Dylan Thomas"
+ },
+ {
+ "quote": "The question of whether computers can think is like the question of whether submarines can swim.",
+ "author": "E.W. Dijkstra"
+ },
+ {
+ "quote": "Any code of your own that you haven't looked at for six or more months might as well have been written by someone else.",
+ "author": "Eagleson's Law"
+ },
+ {
+ "quote": "Do one thing every day that scares you.",
+ "author": "Eleanor Roosevelt"
+ },
+ {
+ "quote": "With the new day comes new strength and new thoughts.",
+ "author": "Eleanor Roosevelt"
+ },
+ {
+ "quote": "You must do the things you think you cannot do.",
+ "author": "Eleanor Roosevelt"
+ },
+ {
+ "quote": "Light tomorrow with today.",
+ "author": "Elizabeth Barrett Browning"
+ },
+ {
+ "quote": "Forever is composed of nows.",
+ "author": "Emily Dickinson"
+ },
+ {
+ "quote": "Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter.",
+ "author": "Eric Raymond"
+ },
+ {
+ "quote": "If you don't risk anything, you risk even more.",
+ "author": "Erica Jong"
+ },
+ {
+ "quote": "The world breaks everyone, and afterward, many are strong at the broken places.",
+ "author": "Ernest Hemingway"
+ },
+ {
+ "quote": "There is nothing noble in being superior to your fellow man; true nobility is being superior to your former self.",
+ "author": "Ernest Hemingway"
+ },
+ {
+ "quote": "Never confuse a single defeat with a final defeat.",
+ "author": "F. Scott Fitzgerald"
+ },
+ {
+ "quote": "I attribute my success to this - I never gave or took any excuse.",
+ "author": "Florence Nightingale"
+ },
+ {
+ "quote": "The best revenge is massive success.",
+ "author": "Frank Sinatra"
+ },
+ {
+ "quote": "The only limit to our realization of tomorrow, will be our doubts of today.",
+ "author": "Franklin D. Roosevelt"
+ },
+ {
+ "quote": "Right or wrong, it's very pleasant to break something from time to time.",
+ "author": "Fyodor Dostoevsky"
+ },
+ {
+ "quote": "The harder I work, the luckier I get.",
+ "author": "Gary Player"
+ },
+ {
+ "quote": "Giving up is the only sure way to fail.",
+ "author": "Gena Showalter"
+ },
+ {
+ "quote": "The only truly secure system is one that is powered off, cast in a block of concrete and sealed in a lead-lined room with armed guards.",
+ "author": "Gene Spafford"
+ },
+ {
+ "quote": "A life spent making mistakes is not only more honorable, but more useful than a life spent doing nothing.",
+ "author": "George Bernard Shaw"
+ },
+ {
+ "quote": "First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack.",
+ "author": "George Carrette"
+ },
+ {
+ "quote": "Discovering the unexpected is more important than confirming the known.",
+ "author": "George Box"
+ },
+ {
+ "quote": "We only see what we know.",
+ "author": "Goethe"
+ },
+ {
+ "quote": "Without hard work, nothing grows but weeds.",
+ "author": "Gordon B. Hinckley"
+ },
+ {
+ "quote": "The function of good software is to make the complex appear to be simple.",
+ "author": "Grady Booch"
+ },
+ {
+ "quote": "When you know that you're capable of dealing with whatever comes, you have the only security the world has to offer.",
+ "author": "Harry Browne"
+ },
+ {
+ "quote": "Pain is inevitable. Suffering is optional.",
+ "author": "Haruki Murakami"
+ },
+ {
+ "quote": "Optimism is the faith that leads to achievement. Nothing can be done without hope and confidence.",
+ "author": "Helen Keller"
+ },
+ {
+ "quote": "The price of anything is the amount of life you exchange for it.",
+ "author": "Henry David Thoreau"
+ },
+ {
+ "quote": "Whether you think you can or think you can't, you're right.",
+ "author": "Henry Ford"
+ },
+ {
+ "quote": "The most exciting phrase to hear in science, the one that heralds discoveries, is not 'Eureka!' but 'Now that's funny…'",
+ "author": "Isaac Asimov"
+ },
+ {
+ "quote": "We are all failures. At least the best of us are.",
+ "author": "J.M. Barrie"
+ },
+ {
+ "quote": "You can't wait for inspiration. You have to go after it with a club.",
+ "author": "Jack London"
+ },
+ {
+ "quote": "Don't wish it were easier, wish you were better.",
+ "author": "Jim Rohn"
+ },
+ {
+ "quote": "By seeking and blundering we learn.",
+ "author": "Johann Wolfgang von Goethe"
+ },
+ {
+ "quote": "Knowing is not enough; we must apply. Wishing is not enough; we must do.",
+ "author": "Johann Wolfgang von Goethe"
+ },
+ {
+ "quote": "We first make our habits, then our habits make us.",
+ "author": "John Dryden"
+ },
+ {
+ "quote": "The power of imagination makes us infinite.",
+ "author": "John Muir"
+ },
+ {
+ "quote": "May you live every day of your life.",
+ "author": "Jonathan Swift"
+ },
+ {
+ "quote": "Perseverance is failing 19 times and succeeding the 20th.",
+ "author": "Julie Andrews"
+ },
+ {
+ "quote": "The work of today is the history of tomorrow, and we are its makers.",
+ "author": "Juliette Gordon Low"
+ },
+ {
+ "quote": "If you reveal your secrets to the wind, you should not blame the wind for revealing them to the trees.",
+ "author": "Kahlil Gibran"
+ },
+ {
+ "quote": "Optimism is an occupational hazard of programming; feedback is the treatment.",
+ "author": "Kent Beck"
+ },
+ {
+ "quote": "Opportunity does not knock, it presents itself when you beat down the door.",
+ "author": "Kyle Chandler"
+ },
+ {
+ "quote": "To iterate is human, to recurse divine.",
+ "author": "Peter Deutsch"
+ },
+ {
+ "quote": "A good traveler has no fixed plans and is not intent on arriving.",
+ "author": "Lao Tzu"
+ },
+ {
+ "quote": "An ant on the move does more than a dozing ox.",
+ "author": "Lao Tzu"
+ },
+ {
+ "quote": "Do the difficult things while they are easy and do the great things while they are small. A journey of a thousand miles must begin with a single step.",
+ "author": "Lao Tzu"
+ },
+ {
+ "quote": "That's the thing about people who think they hate computers. What they really hate is lousy programmers.",
+ "author": "Larry Niven"
+ },
+ {
+ "quote": "It had long since come to my attention that people of accomplishment rarely sat back and let things happen to them. They went out and happened to things.",
+ "author": "Leonardo da Vinci"
+ },
+ {
+ "quote": "If you're any good at all, you know you can be better.",
+ "author": "Lindsay Buckingham"
+ },
+ {
+ "quote": "If people never did silly things, nothing intelligent would ever get done.",
+ "author": "Ludwig Wittgenstein"
+ },
+ {
+ "quote": "You only live once, but if you do it right, once is enough.",
+ "author": "Mae West"
+ },
+ {
+ "quote": "Live as if you were to die tomorrow. Learn as if you were to live forever.",
+ "author": "Mahatma Gandhi"
+ },
+ {
+ "quote": "Strength does not come from physical capacity. It comes from an indomitable will.",
+ "author": "Mahatma Gandhi"
+ },
+ {
+ "quote": "One person's 'paranoia' is another person's 'engineering redundancy'.",
+ "author": "Marcus J. Ranum"
+ },
+ {
+ "quote": "Nothing in life is to be feared, it is only to be understood. Now is the time to understand more, so that we may fear less.",
+ "author": "Marie Curie"
+ },
+ {
+ "quote": "If you have everything under control, you're not moving fast enough.",
+ "author": "Mario Andretti"
+ },
+ {
+ "quote": "Education: the path from cocky ignorance to miserable uncertainty.",
+ "author": "Mark Twain"
+ },
+ {
+ "quote": "It ain't what you don't know that gets you into trouble. It's what you know for sure that just ain't so.",
+ "author": "Mark Twain"
+ },
+ {
+ "quote": "The secret of getting ahead is getting started.",
+ "author": "Mark Twain"
+ },
+ {
+ "quote": "The two most important days in your life are the day you are born and the day you find out why.",
+ "author": "Mark Twain"
+ },
+ {
+ "quote": "Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did do. So throw off the bowlines. Sail away from the safe harbor. Catch the trade winds in your sails.",
+ "author": "Mark Twain"
+ },
+ {
+ "quote": "Any fool can write code that a computer can understand. Good programmers write code that humans can understand.",
+ "author": "Martin Fowler"
+ },
+ {
+ "quote": "I know, somehow, that only when it is dark enough can you see the stars.",
+ "author": "Martin Luther King Jr."
+ },
+ {
+ "quote": "It is never too late to be what you might have been.",
+ "author": "Mary Anne Evans"
+ },
+ {
+ "quote": "Nothing will work unless you do.",
+ "author": "Maya Angelou"
+ },
+ {
+ "quote": "We delight in the beauty of the butterfly, but rarely admit the changes it has gone through to achieve that beauty.",
+ "author": "Maya Angelou"
+ },
+ {
+ "quote": "We may encounter many defeats, but we must not be defeated.",
+ "author": "Maya Angelou"
+ },
+ {
+ "quote": "Everybody has talent, but ability takes hard work.",
+ "author": "Michael Jordan"
+ },
+ {
+ "quote": "I've missed more than 9,000 shots during my career. I've lost almost 300 games. 26 times, I've been trusted to take the game winning shot and missed. I've failed over and over and over again in my life. And that is why I succeed.",
+ "author": "Michael Jordan"
+ },
+ {
+ "quote": "Impossible is just a big word thrown around by small men who find it easier to live in the world they've been given than to explore the power they have to change it. Impossible is not a fact. It's an opinion. Impossible is not a declaration. It's a dare. Impossible is potential. Impossible is temporary. Impossible is nothing.",
+ "author": "Muhammad Ali"
+ },
+ {
+ "quote": "A winner is a dreamer who never gives up.",
+ "author": "Nelson Mandela"
+ },
+ {
+ "quote": "It always seems impossible until it's done.",
+ "author": "Nelson Mandela"
+ },
+ {
+ "quote": "Failure will never overtake me if my determination to succeed is strong enough.",
+ "author": "Og Mandino"
+ },
+ {
+ "quote": "I am not young enough to know everything.",
+ "author": "Oscar Wilde"
+ },
+ {
+ "quote": "There is only one thing that makes a dream impossible to achieve: the fear of failure.",
+ "author": "Paulo Coelho"
+ },
+ {
+ "quote": "Never go to bed mad. Stay up and fight.",
+ "author": "Phyllis Diller"
+ },
+ {
+ "quote": "You can't cross the sea merely by standing and staring at the water.",
+ "author": "Rabindranath Tagore"
+ },
+ {
+ "quote": "The only person you are destined to become is the person you decide to be.",
+ "author": "Ralph Waldo Emerson"
+ },
+ {
+ "quote": "What you do speaks so loudly that I cannot hear what you say.",
+ "author": "Ralph Waldo Emerson"
+ },
+ {
+ "quote": "People who are crazy enough to think they can change the world, are the ones who do.",
+ "author": "Rob Siltanen"
+ },
+ {
+ "quote": "The best way out is always through.",
+ "author": "Robert Frost"
+ },
+ {
+ "quote": "Today's accomplishments were yesterday's impossibilities.",
+ "author": "Robert H. Schuller"
+ },
+ {
+ "quote": "Don't be satisfied with stories, how things have gone with others. Unfold your own myth.",
+ "author": "Rumi"
+ },
+ {
+ "quote": "Forget safety. Live where you fear to live. Destroy your reputation. Be notorious.",
+ "author": "Rumi"
+ },
+ {
+ "quote": "Sell your cleverness and buy bewilderment.",
+ "author": "Rumi"
+ },
+ {
+ "quote": "The cure for pain is in the pain.",
+ "author": "Rumi"
+ },
+ {
+ "quote": "Have no fear of perfection - you'll never reach it.",
+ "author": "Salvador Dalí"
+ },
+ {
+ "quote": "Don't watch the clock. Do what it does. Keep going.",
+ "author": "Sam Levenson"
+ },
+ {
+ "quote": "Ever Tried. Ever failed. No matter. Try again. Fail again. Fail better.",
+ "author": "Samuel Beckett"
+ },
+ {
+ "quote": "The more you know, the more you realize you know nothing.",
+ "author": "Socrates"
+ },
+ {
+ "quote": "The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge.",
+ "author": "Stephen Hawking"
+ },
+ {
+ "quote": "The universe doesn't allow perfection.",
+ "author": "Stephen Hawking"
+ },
+ {
+ "quote": "Whether you want to uncover the secrets of the universe, or you want to pursue a career in the 21st century, basic computer programming is an essential skill to learn.",
+ "author": "Stephen Hawking"
+ },
+ {
+ "quote": "The scariest moment is always just before you start.",
+ "author": "Stephen King"
+ },
+ {
+ "quote": "You can, you should, and if you're brave enough to start, you will.",
+ "author": "Stephen King"
+ },
+ {
+ "quote": "Arise, Awake and Stop not until the goal is reached.",
+ "author": "Swami Vivekananda"
+ },
+ {
+ "quote": "It is said that your life flashes before your eyes just before you die. That is true, it's called Life.",
+ "author": "Terry Pratchett"
+ },
+ {
+ "quote": "Believe you can and you're halfway there.",
+ "author": "Theodore Roosevelt"
+ },
+ {
+ "quote": "I have not failed. I've just found 10,000 ways that won't work.",
+ "author": "Thomas A. Edison"
+ },
+ {
+ "quote": "Our greatest weakness lies in giving up. The most certain way to succeed is always to try just one more time.",
+ "author": "Thomas A. Edison"
+ },
+ {
+ "quote": "The harder the conflict, the more glorious the triumph.",
+ "author": "Thomas Paine"
+ },
+ {
+ "quote": "The Web as I envisaged it, we have not seen it yet. The future is still so much bigger than the past.",
+ "author": "Tim Berners-Lee"
+ },
+ {
+ "quote": "Failure is the condiment that gives success its flavor.",
+ "author": "Truman Capote"
+ },
+ {
+ "quote": "Those who says it cannot be done should not interrupt the person doing it.",
+ "author": "Unknown"
+ },
+ {
+ "quote": "Even if you fall on your face, you're still moving forward.",
+ "author": "Victor Kiam"
+ },
+ {
+ "quote": "It's not whether you get knocked down, it's whether you get up.",
+ "author": "Vince Lombardi"
+ },
+ {
+ "quote": "I dream my painting and I paint my dream.",
+ "author": "Vincent van Gogh"
+ },
+ {
+ "quote": "Let us cultivate our garden.",
+ "author": "Voltaire"
+ },
+ {
+ "quote": "Aim for the moon. If you miss, you may hit a star.",
+ "author": "W. Clement Stone"
+ },
+ {
+ "quote": "The way to get started is to quit talking and begin doing.",
+ "author": "Walt Disney"
+ },
+ {
+ "quote": "You miss 100% of the shots you don't take.",
+ "author": "Wayne Gretzky"
+ },
+ {
+ "quote": "Don't let yesterday take up too much of today.",
+ "author": "Will Rogers"
+ },
+ {
+ "quote": "Even if you're on the right track, you'll get run over if you just sit there.",
+ "author": "Will Rogers"
+ },
+ {
+ "quote": "Do not wait to strike till the iron is hot; but make it hot by striking.",
+ "author": "William Butler Yeats"
+ },
+ {
+ "quote": "You cannot swim for new horizons until you have courage to lose sight of the shore.",
+ "author": "William Faulkner"
+ },
+ {
+ "quote": "Be not afraid of greatness. Some are born great, some achieve greatness, and others have greatness thrust upon them.",
+ "author": "William Shakespeare"
+ },
+ {
+ "quote": "We know what we are, but not what we may be.",
+ "author": "William Shakespeare"
+ },
+ {
+ "quote": "In theory there is no difference between theory and practice. In practice there is.",
+ "author": "Yogi Berra"
+ },
+ {
+ "quote": "You can see a lot by just looking.",
+ "author": "Yogi Berra"
+ },
+ {
+ "quote": "There is no elevator to success, you have to take the stairs.",
+ "author": "Zig Ziglar"
+ },
+ {
+ "quote": "You don't have to be great to start, but you have to start to be great.",
+ "author": "Zig Ziglar"
+ }
+ ]
+}
diff --git a/client/i18n/locales/ukrainian/trending.json b/client/i18n/locales/ukrainian/trending.json
new file mode 100644
index 0000000000..750086aece
--- /dev/null
+++ b/client/i18n/locales/ukrainian/trending.json
@@ -0,0 +1,65 @@
+{
+ "article0link": "https://www.freecodecamp.org/news/what-is-javascript-javascript-code-explained-in-plain-english/",
+ "article0title": "What is JavaScript?",
+ "article1link": "https://www.freecodecamp.org/news/linux-list-processes-how-to-check-running-processes/",
+ "article1title": "Linux List Processes",
+ "article2link": "https://www.freecodecamp.org/news/web-page-text-editor-how-to-open-html-code-in-mac-textedit/",
+ "article2title": "Web Page Text Editor",
+ "article3link": "https://www.freecodecamp.org/news/what-is-open-source-software-explained-in-plain-english/",
+ "article3title": "What is Open Source?",
+ "article4link": "https://www.freecodecamp.org/news/protect-yourself-against-sim-swapping-attacks/",
+ "article4title": "Sim Swapping Attacks",
+ "article5link": "https://www.freecodecamp.org/news/rng-meaning-what-does-rng-stand-for-in-gaming/",
+ "article5title": "RNG Meaning in Gaming",
+ "article6link": "https://www.freecodecamp.org/news/the-model-view-controller-pattern-mvc-architecture-and-frameworks-explained/",
+ "article6title": "Model View Controller",
+ "article7link": "https://www.freecodecamp.org/news/front-end-developer-what-is-front-end-development-explained-in-plain-english/",
+ "article7title": "Front End Development",
+ "article8link": "https://www.freecodecamp.org/news/what-is-a-full-stack-developer-back-end-front-end-full-stack-engineer/",
+ "article8title": "Full Stack Developer?",
+ "article9link": "https://www.freecodecamp.org/news/javascript-switch-case-js-switch-statement-example/",
+ "article9title": "JavaScript Switch Case",
+ "article10link": "https://www.freecodecamp.org/news/bash-sleep-how-to-make-a-shell-script-wait-n-seconds-example-command/",
+ "article10title": "Bash Sleep",
+ "article11link": "https://www.freecodecamp.org/news/bash-array-how-to-declare-an-array-of-strings-in-a-bash-script/",
+ "article11title": "Bash Array",
+ "article12link": "https://www.freecodecamp.org/news/what-is-a-cv-and-how-is-it-different-from-a-resume/",
+ "article12title": "What is a CV?",
+ "article13link": "https://www.freecodecamp.org/news/coding-programs-101-ways-to-learn-to-code-for-free/",
+ "article13title": "Coding Programs",
+ "article14link": "https://www.freecodecamp.org/news/how-to-exit-vim/",
+ "article14title": "How to Exit Vim",
+ "article15link": "https://www.freecodecamp.org/news/html-line-break-how-to-break-a-line-with-the-html-br-tag/",
+ "article15title": "HTML Line Break",
+ "article16link": "https://www.freecodecamp.org/news/how-to-convert-a-string-to-an-int-in-c-tutorial-with-example-code/",
+ "article16title": "C# String to Int",
+ "article17link": "https://www.freecodecamp.org/news/logical-fallacies-definition-fallacy-examples/",
+ "article17title": "Logical fallacies",
+ "article18link": "https://www.freecodecamp.org/news/javascript-online-html-css-js-code-editor-list-browser-ide-tools/",
+ "article18title": "JavaScript Online",
+ "article19link": "https://www.freecodecamp.org/news/sql-case-statement-tutorial-with-when-then-clause-example-queries/",
+ "article19title": "SQL Case Statement",
+ "article20link": "https://www.freecodecamp.org/news/javascript-tolowercase-how-to-convert-a-string-to-lowercase-and-uppercase-in-js/",
+ "article20title": "JavaScript toLowerCase",
+ "article21link": "https://www.freecodecamp.org/news/angular-ngclass-example/",
+ "article21title": "Angular NgClass Example",
+ "article22link": "https://www.freecodecamp.org/news/sql-aggregate-functions-with-example-data-queries-for-beginners/",
+ "article22title": "SQL Aggregate Functions",
+ "article23link": "https://www.freecodecamp.org/news/what-is-web-development-how-to-become-a-web-developer-career-path/",
+ "article23title": "What is Web Development?",
+ "article24link": "https://www.freecodecamp.org/news/the-best-way-to-learn-python-python-programming-tutorial-for-beginners/",
+ "article24title": "Best Way to Learn Python",
+ "article25link": "https://www.freecodecamp.org/news/word-count-in-google-docs-tutorial-counting-words-and-characters-in-a-google-doc-or-word-file/",
+ "article25title": "Word Count in Google Docs",
+ "article26link": "https://www.freecodecamp.org/news/how-to-use-node-environment-variables-with-a-dotenv-file-for-node-js-and-npm/",
+ "article26title": "Node Environment Variables",
+ "article27link": "https://www.freecodecamp.org/news/event-viewer-how-to-access-the-windows-10-activity-log/",
+ "article27title": "Event Viewer in Windows 10",
+ "article28link": "https://www.freecodecamp.org/news/combine-first-last-names-excel/",
+ "article28title": "Combine 1st/Last Name Excel",
+ "article29link": "https://www.freecodecamp.org/news/javascript-if-else-and-if-then-js-conditional-statements/",
+ "article29title": "JavaScript if-else & if-then"
+}
+
+
+
From 010e09ffb7ebe466cfc726994b4b966f7e20927b Mon Sep 17 00:00:00 2001
From: "Nicholas Carrigan (he/him)"
Date: Fri, 10 Dec 2021 07:58:00 -0800
Subject: [PATCH 06/63] chore: migrate untranslated files (#44462)
---
.../file-metadata-microservice.md | 88 +++++++++
.../timestamp-microservice.md | 156 ++++++++++++++++
.../url-shortener-microservice.md | 119 ++++++++++++
.../demographic-data-analyzer.md | 78 ++++++++
...-variance-standard-deviation-calculator.md | 80 ++++++++
.../medical-data-visualizer.md | 90 +++++++++
.../page-view-time-series-visualizer.md | 60 ++++++
.../sea-level-predictor.md | 64 +++++++
.../anonymous-message-board.md | 172 ++++++++++++++++++
.../port-scanner.md | 95 ++++++++++
.../sha-1-password-cracker.md | 72 ++++++++
.../stock-price-checker.md | 136 ++++++++++++++
...sh-and-compare-passwords-asynchronously.md | 81 +++++++++
.../problem-124-ordered-radicals.md | 142 +++++++++++++++
.../problem-199-iterative-circle-packing.md | 75 ++++++++
...h-the-area--perimeter-ratio-is-integral.md | 48 +++++
.../problem-29-distinct-powers.md | 86 +++++++++
.../project-euler/problem-331-cross-flips.md | 52 ++++++
18 files changed, 1694 insertions(+)
create mode 100644 curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md
create mode 100644 curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
create mode 100644 curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md
create mode 100644 curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/demographic-data-analyzer.md
create mode 100644 curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/mean-variance-standard-deviation-calculator.md
create mode 100644 curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/medical-data-visualizer.md
create mode 100644 curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/page-view-time-series-visualizer.md
create mode 100644 curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/sea-level-predictor.md
create mode 100644 curriculum/challenges/ukrainian/09-information-security/information-security-projects/anonymous-message-board.md
create mode 100644 curriculum/challenges/ukrainian/09-information-security/information-security-projects/port-scanner.md
create mode 100644 curriculum/challenges/ukrainian/09-information-security/information-security-projects/sha-1-password-cracker.md
create mode 100644 curriculum/challenges/ukrainian/09-information-security/information-security-projects/stock-price-checker.md
create mode 100644 curriculum/challenges/ukrainian/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.md
create mode 100644 curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-124-ordered-radicals.md
create mode 100644 curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-199-iterative-circle-packing.md
create mode 100644 curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-283-integer-sided-triangles-for-which-the-area--perimeter-ratio-is-integral.md
create mode 100644 curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-29-distinct-powers.md
create mode 100644 curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-331-cross-flips.md
diff --git a/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md
new file mode 100644
index 0000000000..73a21855f9
--- /dev/null
+++ b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md
@@ -0,0 +1,88 @@
+---
+id: bd7158d8c443edefaeb5bd0f
+title: File Metadata Microservice
+challengeType: 4
+forumTopicId: 301506
+dashedName: file-metadata-microservice
+---
+
+# --description--
+
+Build a full stack JavaScript app that is functionally similar to this: . Working on this project will involve you writing your code using one of the following methods:
+
+- Clone [this GitHub repo](https://github.com/freeCodeCamp/boilerplate-project-filemetadata/) and complete your project locally.
+- Use [our Replit starter project](https://replit.com/github/freeCodeCamp/boilerplate-project-filemetadata) to complete your project.
+- Use a site builder of your choice to complete the project. Be sure to incorporate all the files from our GitHub repo.
+
+When you are done, make sure a working demo of your project is hosted somewhere public. Then submit the URL to it in the `Solution Link` field. Optionally, also submit a link to your project's source code in the `GitHub Link` field.
+
+# --instructions--
+
+**HINT:** You can use the `multer` npm package to handle file uploading.
+
+# --hints--
+
+You should provide your own project, not the example URL.
+
+```js
+(getUserInput) => {
+ assert(
+ !/.*\/file-metadata-microservice\.freecodecamp\.rocks/.test(
+ getUserInput('url')
+ )
+ );
+};
+```
+
+You can submit a form that includes a file upload.
+
+```js
+async (getUserInput) => {
+ const site = await fetch(getUserInput('url'));
+ const data = await site.text();
+ const doc = new DOMParser().parseFromString(data, 'text/html');
+ assert(doc.querySelector('input[type="file"]'));
+};
+```
+
+The form file input field has the `name` attribute set to `upfile`.
+
+```js
+async (getUserInput) => {
+ const site = await fetch(getUserInput('url'));
+ const data = await site.text();
+ const doc = new DOMParser().parseFromString(data, 'text/html');
+ assert(doc.querySelector('input[name="upfile"]'));
+};
+```
+
+When you submit a file, you receive the file `name`, `type`, and `size` in bytes within the JSON response.
+
+```js
+async (getUserInput) => {
+ const formData = new FormData();
+ const fileData = await fetch(
+ 'https://cdn.freecodecamp.org/weather-icons/01d.png'
+ );
+ const file = await fileData.blob();
+ formData.append('upfile', file, 'icon');
+ const data = await fetch(getUserInput('url') + '/api/fileanalyse', {
+ method: 'POST',
+ body: formData
+ });
+ const parsed = await data.json();
+ assert.property(parsed, 'size');
+ assert.equal(parsed.name, 'icon');
+ assert.equal(parsed.type, 'image/png');
+};
+```
+
+# --solutions--
+
+```js
+/**
+ Backend challenges don't need solutions,
+ because they would need to be tested against a full working project.
+ Please check our contributing guidelines to learn more.
+*/
+```
diff --git a/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
new file mode 100644
index 0000000000..3e27c39463
--- /dev/null
+++ b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
@@ -0,0 +1,156 @@
+---
+id: bd7158d8c443edefaeb5bdef
+title: Timestamp Microservice
+challengeType: 4
+forumTopicId: 301508
+dashedName: timestamp-microservice
+---
+
+# --description--
+
+Build a full stack JavaScript app that is functionally similar to this: . Working on this project will involve you writing your code using one of the following methods:
+
+- Clone [this GitHub repo](https://github.com/freeCodeCamp/boilerplate-project-timestamp/) and complete your project locally.
+- Use [our Replit starter project](https://replit.com/github/freeCodeCamp/boilerplate-project-timestamp) to complete your project.
+- Use a site builder of your choice to complete the project. Be sure to incorporate all the files from our GitHub repo.
+
+When you are done, make sure a working demo of your project is hosted somewhere public. Then submit the URL to it in the `Solution Link` field. Optionally, also submit a link to your project's source code in the `GitHub Link` field.
+
+**Note:** Time zones conversion is not a purpose of this project, so assume all sent valid dates will be parsed with `new Date()` as GMT dates.
+
+# --hints--
+
+You should provide your own project, not the example URL.
+
+```js
+(getUserInput) => {
+ assert(
+ !/.*\/timestamp-microservice\.freecodecamp\.rocks/.test(getUserInput('url'))
+ );
+};
+```
+
+A request to `/api/:date?` with a valid date should return a JSON object with a `unix` key that is a Unix timestamp of the input date in milliseconds
+
+```js
+(getUserInput) =>
+ $.get(getUserInput('url') + '/api/2016-12-25').then(
+ (data) => {
+ assert.equal(
+ data.unix,
+ 1482624000000,
+ 'Should be a valid unix timestamp'
+ );
+ },
+ (xhr) => {
+ throw new Error(xhr.responseText);
+ }
+ );
+```
+
+A request to `/api/:date?` with a valid date should return a JSON object with a `utc` key that is a string of the input date in the format: `Thu, 01 Jan 1970 00:00:00 GMT`
+
+```js
+(getUserInput) =>
+ $.get(getUserInput('url') + '/api/2016-12-25').then(
+ (data) => {
+ assert.equal(
+ data.utc,
+ 'Sun, 25 Dec 2016 00:00:00 GMT',
+ 'Should be a valid UTC date string'
+ );
+ },
+ (xhr) => {
+ throw new Error(xhr.responseText);
+ }
+ );
+```
+
+A request to `/api/1451001600000` should return `{ unix: 1451001600000, utc: "Fri, 25 Dec 2015 00:00:00 GMT" }`
+
+```js
+(getUserInput) =>
+ $.get(getUserInput('url') + '/api/1451001600000').then(
+ (data) => {
+ assert(
+ data.unix === 1451001600000 &&
+ data.utc === 'Fri, 25 Dec 2015 00:00:00 GMT'
+ );
+ },
+ (xhr) => {
+ throw new Error(xhr.responseText);
+ }
+ );
+```
+
+Your project can handle dates that can be successfully parsed by `new Date(date_string)`
+
+```js
+(getUserInput) =>
+ $.get(getUserInput('url') + '/api/05 October 2011, GMT').then(
+ (data) => {
+ assert(
+ data.unix === 1317772800000 &&
+ data.utc === 'Wed, 05 Oct 2011 00:00:00 GMT'
+ );
+ },
+ (xhr) => {
+ throw new Error(xhr.responseText);
+ }
+ );
+```
+
+If the input date string is invalid, the api returns an object having the structure `{ error : "Invalid Date" }`
+
+```js
+(getUserInput) =>
+ $.get(getUserInput('url') + '/api/this-is-not-a-date').then(
+ (data) => {
+ assert.equal(data.error.toLowerCase(), 'invalid date');
+ },
+ (xhr) => {
+ assert(xhr.responseJSON.error.toLowerCase() === 'invalid date');
+ }
+ );
+```
+
+An empty date parameter should return the current time in a JSON object with a `unix` key
+
+```js
+(getUserInput) =>
+ $.get(getUserInput('url') + '/api').then(
+ (data) => {
+ var now = Date.now();
+ assert.approximately(data.unix, now, 20000);
+ },
+ (xhr) => {
+ throw new Error(xhr.responseText);
+ }
+ );
+```
+
+An empty date parameter should return the current time in a JSON object with a `utc` key
+
+```js
+(getUserInput) =>
+ $.get(getUserInput('url') + '/api').then(
+ (data) => {
+ var now = Date.now();
+ var serverTime = new Date(data.utc).getTime();
+ assert.approximately(serverTime, now, 20000);
+ },
+ (xhr) => {
+ throw new Error(xhr.responseText);
+ }
+ );
+```
+
+# --solutions--
+
+```js
+/**
+ Backend challenges don't need solutions,
+ because they would need to be tested against a full working project.
+ Please check our contributing guidelines to learn more.
+*/
+```
diff --git a/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md
new file mode 100644
index 0000000000..b10b50c3a9
--- /dev/null
+++ b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md
@@ -0,0 +1,119 @@
+---
+id: bd7158d8c443edefaeb5bd0e
+title: URL Shortener Microservice
+challengeType: 4
+forumTopicId: 301509
+dashedName: url-shortener-microservice
+---
+
+# --description--
+
+Build a full stack JavaScript app that is functionally similar to this: . Working on this project will involve you writing your code using one of the following methods:
+
+- Clone [this GitHub repo](https://github.com/freeCodeCamp/boilerplate-project-urlshortener/) and complete your project locally.
+- Use [our Replit starter project](https://replit.com/github/freeCodeCamp/boilerplate-project-urlshortener) to complete your project.
+- Use a site builder of your choice to complete the project. Be sure to incorporate all the files from our GitHub repo.
+
+When you are done, make sure a working demo of your project is hosted somewhere public. Then submit the URL to it in the `Solution Link` field. Optionally, also submit a link to your project's source code in the `GitHub Link` field.
+
+# --instructions--
+
+**HINT:** Do not forget to use a body parsing middleware to handle the POST requests. Also, you can use the function `dns.lookup(host, cb)` from the `dns` core module to verify a submitted URL.
+
+# --hints--
+
+You should provide your own project, not the example URL.
+
+```js
+(getUserInput) => {
+ assert(
+ !/.*\/url-shortener-microservice\.freecodecamp\.rocks/.test(
+ getUserInput('url')
+ )
+ );
+};
+```
+
+You can POST a URL to `/api/shorturl` and get a JSON response with `original_url` and `short_url` properties. Here's an example: `{ original_url : 'https://freeCodeCamp.org', short_url : 1}`
+
+```js
+async (getUserInput) => {
+ const url = getUserInput('url');
+ const urlVariable = Date.now();
+ const fullUrl = `${url}/?v=${urlVariable}`
+ const res = await fetch(url + '/api/shorturl', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+ body: `url=${fullUrl}`
+ });
+ if (res.ok) {
+ const { short_url, original_url } = await res.json();
+ assert.isNotNull(short_url);
+ assert.strictEqual(original_url, `${url}/?v=${urlVariable}`);
+ } else {
+ throw new Error(`${res.status} ${res.statusText}`);
+ }
+};
+```
+
+When you visit `/api/shorturl/`, you will be redirected to the original URL.
+
+```js
+async (getUserInput) => {
+ const url = getUserInput('url');
+ const urlVariable = Date.now();
+ const fullUrl = `${url}/?v=${urlVariable}`
+ let shortenedUrlVariable;
+ const postResponse = await fetch(url + '/api/shorturl', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+ body: `url=${fullUrl}`
+ });
+ if (postResponse.ok) {
+ const { short_url } = await postResponse.json();
+ shortenedUrlVariable = short_url;
+ } else {
+ throw new Error(`${postResponse.status} ${postResponse.statusText}`);
+ }
+ const getResponse = await fetch(
+ url + '/api/shorturl/' + shortenedUrlVariable
+ );
+ if (getResponse) {
+ const { redirected, url } = getResponse;
+ assert.isTrue(redirected);
+ assert.strictEqual(url,fullUrl);
+ } else {
+ throw new Error(`${getResponse.status} ${getResponse.statusText}`);
+ }
+};
+```
+
+If you pass an invalid URL that doesn't follow the valid `http://www.example.com` format, the JSON response will contain `{ error: 'invalid url' }`
+
+```js
+async (getUserInput) => {
+ const url = getUserInput('url');
+ const res = await fetch(url + '/api/shorturl', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+ body: `url=ftp:/john-doe.org`
+ });
+ if (res.ok) {
+ const { error } = await res.json();
+ assert.isNotNull(error);
+ assert.strictEqual(error.toLowerCase(), 'invalid url');
+ } else {
+ throw new Error(`${res.status} ${res.statusText}`);
+ }
+};
+```
+
+# --solutions--
+
+```js
+/**
+ Backend challenges don't need solutions,
+ because they would need to be tested against a full working project.
+ Please check our contributing guidelines to learn more.
+*/
+```
diff --git a/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/demographic-data-analyzer.md b/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/demographic-data-analyzer.md
new file mode 100644
index 0000000000..9b67fad630
--- /dev/null
+++ b/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/demographic-data-analyzer.md
@@ -0,0 +1,78 @@
+---
+id: 5e46f7e5ac417301a38fb929
+title: Demographic Data Analyzer
+challengeType: 10
+forumTopicId: 462367
+dashedName: demographic-data-analyzer
+---
+
+# --description--
+
+You will be [working on this project with our Replit starter code](https://replit.com/github/freeCodeCamp/boilerplate-demographic-data-analyzer).
+
+We are still developing the interactive instructional part of the Python curriculum. For now, here are some videos on the freeCodeCamp.org YouTube channel that will teach you everything you need to know to complete this project:
+
+- [Python for Everybody Video Course](https://www.freecodecamp.org/news/python-for-everybody/) (14 hours)
+- [Learn Python Video Course](https://www.freecodecamp.org/news/learn-python-video-course/) (10 hours)
+
+# --instructions--
+
+In this challenge you must analyze demographic data using Pandas. You are given a dataset of demographic data that was extracted from the 1994 Census database. Here is a sample of what the data looks like:
+
+```markdown
+| | age | workclass | fnlwgt | education | education-num | marital-status | occupation | relationship | race | sex | capital-gain | capital-loss | hours-per-week | native-country | salary |
+|---:|------:|:-----------------|---------:|:------------|----------------:|:-------------------|:------------------|:---------------|:-------|:-------|---------------:|---------------:|-----------------:|:-----------------|:---------|
+| 0 | 39 | State-gov | 77516 | Bachelors | 13 | Never-married | Adm-clerical | Not-in-family | White | Male | 2174 | 0 | 40 | United-States | <=50K |
+| 1 | 50 | Self-emp-not-inc | 83311 | Bachelors | 13 | Married-civ-spouse | Exec-managerial | Husband | White | Male | 0 | 0 | 13 | United-States | <=50K |
+| 2 | 38 | Private | 215646 | HS-grad | 9 | Divorced | Handlers-cleaners | Not-in-family | White | Male | 0 | 0 | 40 | United-States | <=50K |
+| 3 | 53 | Private | 234721 | 11th | 7 | Married-civ-spouse | Handlers-cleaners | Husband | Black | Male | 0 | 0 | 40 | United-States | <=50K |
+| 4 | 28 | Private | 338409 | Bachelors | 13 | Married-civ-spouse | Prof-specialty | Wife | Black | Female | 0 | 0 | 40 | Cuba | <=50K |
+```
+
+You must use Pandas to answer the following questions:
+
+- How many people of each race are represented in this dataset? This should be a Pandas series with race names as the index labels. (`race` column)
+- What is the average age of men?
+- What is the percentage of people who have a Bachelor's degree?
+- What percentage of people with advanced education (`Bachelors`, `Masters`, or `Doctorate`) make more than 50K?
+- What percentage of people without advanced education make more than 50K?
+- What is the minimum number of hours a person works per week?
+- What percentage of the people who work the minimum number of hours per week have a salary of more than 50K?
+- What country has the highest percentage of people that earn >50K and what is that percentage?
+- Identify the most popular occupation for those who earn >50K in India.
+
+Use the starter code in the file `demographic_data_analyzer`. Update the code so all variables set to "None" are set to the appropriate calculation or code. Round all decimals to the nearest tenth.
+
+Unit tests are written for you under `test_module.py`.
+
+## Development
+
+For development, you can use `main.py` to test your functions. Click the "run" button and `main.py` will run.
+
+## Testing
+
+We imported the tests from `test_module.py` to `main.py` for your convenience. The tests will run automatically whenever you hit the "run" button.
+
+## Submitting
+
+Copy your project's URL and submit it to freeCodeCamp.
+
+## Dataset Source
+
+Dua, D. and Graff, C. (2019). [UCI Machine Learning Repository](http://archive.ics.uci.edu/ml). Irvine, CA: University of California, School of Information and Computer Science.
+
+# --hints--
+
+It should pass all Python tests.
+
+```js
+
+```
+
+# --solutions--
+
+```py
+ # Python challenges don't need solutions,
+ # because they would need to be tested against a full working project.
+ # Please check our contributing guidelines to learn more.
+```
diff --git a/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/mean-variance-standard-deviation-calculator.md b/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/mean-variance-standard-deviation-calculator.md
new file mode 100644
index 0000000000..447e9ece0b
--- /dev/null
+++ b/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/mean-variance-standard-deviation-calculator.md
@@ -0,0 +1,80 @@
+---
+id: 5e46f7e5ac417301a38fb928
+title: Mean-Variance-Standard Deviation Calculator
+challengeType: 10
+forumTopicId: 462366
+dashedName: mean-variance-standard-deviation-calculator
+---
+
+# --description--
+
+You will be [working on this project with our Replit starter code](https://replit.com/github/freeCodeCamp/boilerplate-mean-variance-standard-deviation-calculator).
+
+We are still developing the interactive instructional part of the Python curriculum. For now, here are some videos on the freeCodeCamp.org YouTube channel that will teach you everything you need to know to complete this project:
+
+- [Python for Everybody Video Course](https://www.freecodecamp.org/news/python-for-everybody/) (14 hours)
+- [Learn Python Video Course](https://www.freecodecamp.org/news/learn-python-video-course/) (10 hours)
+
+# --instructions--
+
+Create a function named `calculate()` in `mean_var_std.py` that uses Numpy to output the mean, variance, standard deviation, max, min, and sum of the rows, columns, and elements in a 3 x 3 matrix.
+
+The input of the function should be a list containing 9 digits. The function should convert the list into a 3 x 3 Numpy array, and then return a dictionary containing the mean, variance, standard deviation, max, min, and sum along both axes and for the flattened matrix.
+
+The returned dictionary should follow this format:
+
+```py
+{
+ 'mean': [axis1, axis2, flattened],
+ 'variance': [axis1, axis2, flattened],
+ 'standard deviation': [axis1, axis2, flattened],
+ 'max': [axis1, axis2, flattened],
+ 'min': [axis1, axis2, flattened],
+ 'sum': [axis1, axis2, flattened]
+}
+```
+
+If a list containing less than 9 elements is passed into the function, it should raise a `ValueError` exception with the message: "List must contain nine numbers." The values in the returned dictionary should be lists and not Numpy arrays.
+
+For example, `calculate([0,1,2,3,4,5,6,7,8])` should return:
+
+```py
+{
+ 'mean': [[3.0, 4.0, 5.0], [1.0, 4.0, 7.0], 4.0],
+ 'variance': [[6.0, 6.0, 6.0], [0.6666666666666666, 0.6666666666666666, 0.6666666666666666], 6.666666666666667],
+ 'standard deviation': [[2.449489742783178, 2.449489742783178, 2.449489742783178], [0.816496580927726, 0.816496580927726, 0.816496580927726], 2.581988897471611],
+ 'max': [[6, 7, 8], [2, 5, 8], 8],
+ 'min': [[0, 1, 2], [0, 3, 6], 0],
+ 'sum': [[9, 12, 15], [3, 12, 21], 36]
+}
+```
+
+The unit tests for this project are in `test_module.py`.
+
+## Development
+
+For development, you can use `main.py` to test your `calculate()` function. Click the "run" button and `main.py` will run.
+
+## Testing
+
+We imported the tests from `test_module.py` to `main.py` for your convenience. The tests will run automatically whenever you hit the "run" button.
+
+## Submitting
+
+Copy your project's URL and submit it to freeCodeCamp.
+
+# --hints--
+
+It should pass all Python tests.
+
+```js
+
+```
+
+# --solutions--
+
+```py
+ # Python challenges don't need solutions,
+ # because they would need to be tested against a full working project.
+ # Please check our contributing guidelines to learn more.
+```
diff --git a/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/medical-data-visualizer.md b/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/medical-data-visualizer.md
new file mode 100644
index 0000000000..540499ebf5
--- /dev/null
+++ b/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/medical-data-visualizer.md
@@ -0,0 +1,90 @@
+---
+id: 5e46f7f8ac417301a38fb92a
+title: Medical Data Visualizer
+challengeType: 10
+forumTopicId: 462368
+dashedName: medical-data-visualizer
+---
+
+# --description--
+
+You will be [working on this project with our Replit starter code](https://replit.com/github/freeCodeCamp/boilerplate-medical-data-visualizer).
+
+We are still developing the interactive instructional part of the Python curriculum. For now, here are some videos on the freeCodeCamp.org YouTube channel that will teach you everything you need to know to complete this project:
+
+- [Python for Everybody Video Course](https://www.freecodecamp.org/news/python-for-everybody/) (14 hours)
+- [Learn Python Video Course](https://www.freecodecamp.org/news/learn-python-video-course/) (10 hours)
+
+# --instructions--
+
+In this project, you will visualize and make calculations from medical examination data using matplotlib, seaborn, and pandas. The dataset values were collected during medical examinations.
+
+## Data description
+
+The rows in the dataset represent patients and the columns represent information like body measurements, results from various blood tests, and lifestyle choices. You will use the dataset to explore the relationship between cardiac disease, body measurements, blood markers, and lifestyle choices.
+
+File name: medical_examination.csv
+
+| Feature | Variable Type | Variable | Value Type |
+|:-------:|:------------:|:-------------:|:----------:|
+| Age | Objective Feature | age | int (days) |
+| Height | Objective Feature | height | int (cm) |
+| Weight | Objective Feature | weight | float (kg) |
+| Gender | Objective Feature | gender | categorical code |
+| Systolic blood pressure | Examination Feature | ap_hi | int |
+| Diastolic blood pressure | Examination Feature | ap_lo | int |
+| Cholesterol | Examination Feature | cholesterol | 1: normal, 2: above normal, 3: well above normal |
+| Glucose | Examination Feature | gluc | 1: normal, 2: above normal, 3: well above normal |
+| Smoking | Subjective Feature | smoke | binary |
+| Alcohol intake | Subjective Feature | alco | binary |
+| Physical activity | Subjective Feature | active | binary |
+| Presence or absence of cardiovascular disease | Target Variable | cardio | binary |
+
+## Tasks
+
+Create a chart similar to `examples/Figure_1.png`, where we show the counts of good and bad outcomes for the `cholesterol`, `gluc`, `alco`, `active`, and `smoke` variables for patients with cardio=1 and cardio=0 in different panels.
+
+Use the data to complete the following tasks in `medical_data_visualizer.py`:
+
+- Add an `overweight` column to the data. To determine if a person is overweight, first calculate their BMI by dividing their weight in kilograms by the square of their height in meters. If that value is > 25 then the person is overweight. Use the value 0 for NOT overweight and the value 1 for overweight.
+- Normalize the data by making 0 always good and 1 always bad. If the value of `cholesterol` or `gluc` is 1, make the value 0. If the value is more than 1, make the value 1.
+- Convert the data into long format and create a chart that shows the value counts of the categorical features using seaborn's `catplot()`. The dataset should be split by 'Cardio' so there is one chart for each `cardio` value. The chart should look like `examples/Figure_1.png`.
+- Clean the data. Filter out the following patient segments that represent incorrect data:
+ - diastolic pressure is higher than systolic (Keep the correct data with `(df['ap_lo'] <= df['ap_hi'])`)
+ - height is less than the 2.5th percentile (Keep the correct data with `(df['height'] >= df['height'].quantile(0.025))`)
+ - height is more than the 97.5th percentile
+ - weight is less than the 2.5th percentile
+ - weight is more than the 97.5th percentile
+- Create a correlation matrix using the dataset. Plot the correlation matrix using seaborn's `heatmap()`. Mask the upper triangle. The chart should look like `examples/Figure_2.png`.
+
+Any time a variable is set to `None`, make sure to set it to the correct code.
+
+Unit tests are written for you under `test_module.py`.
+
+## Development
+
+For development, you can use `main.py` to test your functions. Click the "run" button and `main.py` will run.
+
+## Testing
+
+We imported the tests from `test_module.py` to `main.py` for your convenience. The tests will run automatically whenever you hit the "run" button.
+
+## Submitting
+
+Copy your project's URL and submit it to freeCodeCamp.
+
+# --hints--
+
+It should pass all Python tests.
+
+```js
+
+```
+
+# --solutions--
+
+```py
+ # Python challenges don't need solutions,
+ # because they would need to be tested against a full working project.
+ # Please check our contributing guidelines to learn more.
+```
diff --git a/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/page-view-time-series-visualizer.md b/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/page-view-time-series-visualizer.md
new file mode 100644
index 0000000000..2ca374ca72
--- /dev/null
+++ b/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/page-view-time-series-visualizer.md
@@ -0,0 +1,60 @@
+---
+id: 5e46f802ac417301a38fb92b
+title: Page View Time Series Visualizer
+challengeType: 10
+forumTopicId: 462369
+dashedName: page-view-time-series-visualizer
+---
+
+# --description--
+
+You will be [working on this project with our Replit starter code](https://replit.com/github/freeCodeCamp/boilerplate-page-view-time-series-visualizer).
+
+We are still developing the interactive instructional part of the Python curriculum. For now, here are some videos on the freeCodeCamp.org YouTube channel that will teach you everything you need to know to complete this project:
+
+- [Python for Everybody Video Course](https://www.freecodecamp.org/news/python-for-everybody/) (14 hours)
+- [Learn Python Video Course](https://www.freecodecamp.org/news/learn-python-video-course/) (10 hours)
+
+# --instructions--
+
+For this project you will visualize time series data using a line chart, bar chart, and box plots. You will use Pandas, Matplotlib, and Seaborn to visualize a dataset containing the number of page views each day on the freeCodeCamp.org forum from 2016-05-09 to 2019-12-03. The data visualizations will help you understand the patterns in visits and identify yearly and monthly growth.
+
+Use the data to complete the following tasks:
+
+- Use Pandas to import the data from "fcc-forum-pageviews.csv". Set the index to the "date" column.
+- Clean the data by filtering out days when the page views were in the top 2.5% of the dataset or bottom 2.5% of the dataset.
+- Create a `draw_line_plot` function that uses Matplotlib to draw a line chart similar to "examples/Figure_1.png". The title should be "Daily freeCodeCamp Forum Page Views 5/2016-12/2019". The label on the x axis should be "Date" and the label on the y axis should be "Page Views".
+- Create a `draw_bar_plot` function that draws a bar chart similar to "examples/Figure_2.png". It should show average daily page views for each month grouped by year. The legend should show month labels and have a title of "Months". On the chart, the label on the x axis should be "Years" and the label on the y axis should be "Average Page Views".
+- Create a `draw_box_plot` function that uses Searborn to draw two adjacent box plots similar to "examples/Figure_3.png". These box plots should show how the values are distributed within a given year or month and how it compares over time. The title of the first chart should be "Year-wise Box Plot (Trend)" and the title of the second chart should be "Month-wise Box Plot (Seasonality)". Make sure the month labels on bottom start at "Jan" and the x and x axis are labeled correctly. The boilerplate includes commands to prepare the data.
+
+For each chart, make sure to use a copy of the data frame. Unit tests are written for you under `test_module.py`.
+
+The boilerplate also includes commands to save and return the image.
+
+## Development
+
+For development, you can use `main.py` to test your functions. Click the "run" button and `main.py` will run.
+
+## Testing
+
+We imported the tests from `test_module.py` to `main.py` for your convenience. The tests will run automatically whenever you hit the "run" button.
+
+## Submitting
+
+Copy your project's URL and submit it to freeCodeCamp.
+
+# --hints--
+
+It should pass all Python tests.
+
+```js
+
+```
+
+# --solutions--
+
+```py
+ # Python challenges don't need solutions,
+ # because they would need to be tested against a full working project.
+ # Please check our contributing guidelines to learn more.
+```
diff --git a/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/sea-level-predictor.md b/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/sea-level-predictor.md
new file mode 100644
index 0000000000..04742507b6
--- /dev/null
+++ b/curriculum/challenges/ukrainian/08-data-analysis-with-python/data-analysis-with-python-projects/sea-level-predictor.md
@@ -0,0 +1,64 @@
+---
+id: 5e4f5c4b570f7e3a4949899f
+title: Sea Level Predictor
+challengeType: 10
+forumTopicId: 462370
+dashedName: sea-level-predictor
+---
+
+# --description--
+
+You will be [working on this project with our Replit starter code](https://replit.com/github/freeCodeCamp/boilerplate-sea-level-predictor).
+
+We are still developing the interactive instructional part of the Python curriculum. For now, here are some videos on the freeCodeCamp.org YouTube channel that will teach you everything you need to know to complete this project:
+
+- [Python for Everybody Video Course](https://www.freecodecamp.org/news/python-for-everybody/) (14 hours)
+- [Learn Python Video Course](https://www.freecodecamp.org/news/learn-python-video-course/) (10 hours)
+
+# --instructions--
+
+You will analyze a dataset of the global average sea level change since 1880. You will use the data to predict the sea level change through year 2050.
+
+Use the data to complete the following tasks:
+
+- Use Pandas to import the data from `epa-sea-level.csv`.
+- Use matplotlib to create a scatter plot using the "Year" column as the x-axis and the "CSIRO Adjusted Sea Level" column as the y-axix.
+- Use the `linregress` function from `scipy.stats` to get the slope and y-intercept of the line of best fit. Plot the line of best fit over the top of the scatter plot. Make the line go through the year 2050 to predict the sea level rise in 2050.
+- Plot a new line of best fit just using the data from year 2000 through the most recent year in the dataset. Make the line also go through the year 2050 to predict the sea level rise in 2050 if the rate of rise continues as it has since the year 2000.
+- The x label should be "Year", the y label should be "Sea Level (inches)", and the title should be "Rise in Sea Level".
+
+Unit tests are written for you under `test_module.py`.
+
+The boilerplate also includes commands to save and return the image.
+
+## Development
+
+For development, you can use `main.py` to test your functions. Click the "run" button and `main.py` will run.
+
+## Testing
+
+We imported the tests from `test_module.py` to `main.py` for your convenience. The tests will run automatically whenever you hit the "run" button.
+
+## Submitting
+
+Copy your project's URL and submit it to freeCodeCamp.
+
+## Data Source
+[Global Average Absolute Sea Level Change](https://datahub.io/core/sea-level-rise), 1880-2014 from the US Environmental Protection Agency using data from CSIRO, 2015; NOAA, 2015.
+
+
+# --hints--
+
+It should pass all Python tests.
+
+```js
+
+```
+
+# --solutions--
+
+```py
+ # Python challenges don't need solutions,
+ # because they would need to be tested against a full working project.
+ # Please check our contributing guidelines to learn more.
+```
diff --git a/curriculum/challenges/ukrainian/09-information-security/information-security-projects/anonymous-message-board.md b/curriculum/challenges/ukrainian/09-information-security/information-security-projects/anonymous-message-board.md
new file mode 100644
index 0000000000..b7be38cf5f
--- /dev/null
+++ b/curriculum/challenges/ukrainian/09-information-security/information-security-projects/anonymous-message-board.md
@@ -0,0 +1,172 @@
+---
+id: 587d824a367417b2b2512c45
+title: Anonymous Message Board
+challengeType: 4
+forumTopicId: 301568
+dashedName: anonymous-message-board
+---
+
+# --description--
+
+Build a full stack JavaScript app that is functionally similar to this: .
+
+Working on this project will involve you writing your code using one of the following methods:
+
+- Clone [this GitHub repo](https://github.com/freeCodeCamp/boilerplate-project-messageboard/) and complete your project locally.
+- Use [our Replit starter project](https://replit.com/github/freeCodeCamp/boilerplate-project-messageboard) to complete your project.
+- Use a site builder of your choice to complete the project. Be sure to incorporate all the files from our GitHub repo.
+
+When you are done, make sure a working demo of your project is hosted somewhere public. Then submit the URL to it in the `Solution Link` field. Optionally, also submit a link to your project's source code in the `GitHub Link` field.
+
+# --instructions--
+
+1. Set `NODE_ENV` to test without quotes when ready to write tests and DB to your databases connection string (in `.env`)
+2. Recommended to create controllers/handlers and handle routing in `routes/api.js`
+3. You will add any security features to `server.js`
+
+Write the following tests in `tests/2_functional-tests.js`:
+
+- Creating a new thread: POST request to `/api/threads/{board}`
+- Viewing the 10 most recent threads with 3 replies each: GET request to `/api/threads/{board}`
+- Deleting a thread with the incorrect password: DELETE request to `/api/threads/{board}` with an invalid `delete_password`
+- Deleting a thread with the correct password: DELETE request to `/api/threads/{board}` with a valid `delete_password`
+- Reporting a thread: PUT request to `/api/threads/{board}`
+- Creating a new reply: POST request to `/api/replies/{board}`
+- Viewing a single thread with all replies: GET request to `/api/replies/{board}`
+- Deleting a reply with the incorrect password: DELETE request to `/api/replies/{board}` with an invalid `delete_password`
+- Deleting a reply with the correct password: DELETE request to `/api/replies/{board}` with a valid `delete_password`
+- Reporting a reply: PUT request to `/api/replies/{board}`
+
+# --hints--
+
+You can provide your own project, not the example URL.
+
+```js
+(getUserInput) => {
+ assert(
+ !/.*\/anonymous-message-board\.freecodecamp\.rocks/.test(
+ getUserInput('url')
+ )
+ );
+};
+```
+
+Only allow your site to be loaded in an iFrame on your own pages.
+
+```js
+async (getUserInput) => {
+ const data = await fetch(getUserInput('url') + '/_api/app-info');
+ const parsed = await data.json();
+ assert.isTrue(parsed.headers['x-frame-options']?.includes('SAMEORIGIN'));
+};
+```
+
+Do not allow DNS prefetching.
+
+```js
+async (getUserInput) => {
+ const data = await fetch(getUserInput('url') + '/_api/app-info');
+ const parsed = await data.json();
+ assert.isTrue(parsed.headers['x-dns-prefetch-control']?.includes('off'));
+};
+```
+
+Only allow your site to send the referrer for your own pages.
+
+```js
+async (getUserInput) => {
+ const data = await fetch(getUserInput('url') + '/_api/app-info');
+ const parsed = await data.json();
+ assert.isTrue(parsed.headers['referrer-policy']?.includes('same-origin'));
+};
+```
+
+You can send a POST request to `/api/threads/{board}` with form data including `text` and `delete_password`. The saved database record will have at least the fields `_id`, `text`, `created_on`(date & time), `bumped_on`(date & time, starts same as `created_on`), `reported` (boolean), `delete_password`, & `replies` (array).
+
+```js
+async (getUserInput) => {
+ const date = new Date();
+ const text = `fcc_test_${date}`;
+ const deletePassword = 'delete_me';
+ const data = { text, delete_password: deletePassword };
+ const url = getUserInput('url');
+ const res = await fetch(url + '/api/threads/fcc_test', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(data)
+ });
+ if (res.ok) {
+ const checkData = await fetch(url + '/api/threads/fcc_test');
+ const parsed = await checkData.json();
+ try {
+ assert.equal(parsed[0].text, text);
+ assert.isNotNull(parsed[0]._id);
+ assert.equal(new Date(parsed[0].created_on).toDateString(), date.toDateString());
+ assert.equal(parsed[0].bumped_on, parsed[0].created_on);
+ assert.isArray(parsed[0].replies);
+ } catch (err) {
+ throw new Error(err.responseText || err.message);
+ }
+ } else {
+ throw new Error(`${res.status} ${res.statusText}`);
+ }
+};
+```
+
+You can send a POST request to `/api/replies/{board}` with form data including `text`, `delete_password`, & `thread_id`. This will update the `bumped_on` date to the comment's date. In the thread's `replies` array, an object will be saved with at least the properties `_id`, `text`, `created_on`, `delete_password`, & `reported`.
+
+```js
+
+```
+
+You can send a GET request to `/api/threads/{board}`. Returned will be an array of the most recent 10 bumped threads on the board with only the most recent 3 replies for each. The `reported` and `delete_password` fields will not be sent to the client.
+
+```js
+
+```
+
+You can send a GET request to `/api/replies/{board}?thread_id={thread_id}`. Returned will be the entire thread with all its replies, also excluding the same fields from the client as the previous test.
+
+```js
+
+```
+
+You can send a DELETE request to `/api/threads/{board}` and pass along the `thread_id` & `delete_password` to delete the thread. Returned will be the string `incorrect password` or `success`.
+
+```js
+
+```
+
+You can send a DELETE request to `/api/replies/{board}` and pass along the `thread_id`, `reply_id`, & `delete_password`. Returned will be the string `incorrect password` or `success`. On success, the text of the `reply_id` will be changed to `[deleted]`.
+
+```js
+
+```
+
+You can send a PUT request to `/api/threads/{board}` and pass along the `thread_id`. Returned will be the string `success`. The `reported` value of the `thread_id` will be changed to `true`.
+
+```js
+
+```
+
+You can send a PUT request to `/api/replies/{board}` and pass along the `thread_id` & `reply_id`. Returned will be the string `success`. The `reported` value of the `reply_id` will be changed to `true`.
+
+```js
+
+```
+
+All 10 functional tests are complete and passing.
+
+```js
+
+```
+
+# --solutions--
+
+```js
+/**
+ Backend challenges don't need solutions,
+ because they would need to be tested against a full working project.
+ Please check our contributing guidelines to learn more.
+*/
+```
diff --git a/curriculum/challenges/ukrainian/09-information-security/information-security-projects/port-scanner.md b/curriculum/challenges/ukrainian/09-information-security/information-security-projects/port-scanner.md
new file mode 100644
index 0000000000..10c950657d
--- /dev/null
+++ b/curriculum/challenges/ukrainian/09-information-security/information-security-projects/port-scanner.md
@@ -0,0 +1,95 @@
+---
+id: 5e46f979ac417301a38fb932
+title: Port Scanner
+challengeType: 10
+forumTopicId: 462372
+helpCategory: Python
+dashedName: port-scanner
+---
+
+# --description--
+
+You will be [working on this project with our Replit starter code](https://replit.com/github/freeCodeCamp/boilerplate-port-scanner).
+
+We are still developing the interactive instructional part of the Python curriculum. For now, here are some videos on the freeCodeCamp.org YouTube channel that will teach you everything you need to know to complete this project:
+
+- [Python for Everybody Video Course](https://www.freecodecamp.org/news/python-for-everybody/) (14 hours)
+
+- [Learn Python Video Course](https://www.freecodecamp.org/news/learn-python-video-course/) (10 hours)
+
+# --instructions--
+
+Create a port scanner using Python.
+
+In the `port_scanner.py` file, create a function called `get_open_ports` that takes a `target` argument and a `port_range` argument. `target` can be a URL or IP address. `port_range` is a list of two numbers indicating the first and last numbers of the range of ports to check.
+
+Here are examples of how the function may be called:
+
+```py
+get_open_ports("209.216.230.240", [440, 445])
+get_open_ports("www.stackoverflow.com", [79, 82])
+```
+
+The function should return a list of open ports in the given range.
+
+The `get_open_ports` function should also take an optional third argument of `True` to indicate "Verbose" mode. If this is set to true, the function should return a descriptive string instead of a list of ports.
+
+Here is the format of the string that should be returned in verbose mode (text inside `{}` indicates the information that should appear):
+
+```bash
+Open ports for {URL} ({IP address})
+PORT SERVICE
+{port} {service name}
+{port} {service name}
+```
+
+You can use the dictionary in `common_ports.py` to get the correct service name for each port.
+
+For example, if the function is called like this:
+
+```py
+port_scanner.get_open_ports("scanme.nmap.org", [20, 80], True)
+```
+
+It should return the following:
+
+```bash
+Open ports for scanme.nmap.org (45.33.32.156)
+PORT SERVICE
+22 ssh
+80 http
+```
+
+Make sure to include proper spacing and new line characters.
+
+If the URL passed into the `get_open_ports` function is invalid, the function should return the string: "Error: Invalid hostname".
+
+If the IP address passed into the `get_open_ports` function is invalid, the function should return the string: "Error: Invalid IP address".
+
+## Development
+
+Write your code in `port_scanner.py`. For development, you can use `main.py` to test your code. Click the "run" button and `main.py` will run.
+
+## Testing
+
+The unit tests for this project are in `test_module.py`. We imported the tests from `test_module.py` to `main.py` for your convenience. The tests will run automatically whenever you hit the "run" button.
+
+## Submitting
+
+Copy your project's URL and submit it to freeCodeCamp.
+
+# --hints--
+
+It should pass all Python tests.
+
+```js
+
+```
+
+# --solutions--
+
+```py
+ # Python challenges don't need solutions,
+ # because they would need to be tested against a full working project.
+ # Please check our contributing guidelines to learn more.
+```
diff --git a/curriculum/challenges/ukrainian/09-information-security/information-security-projects/sha-1-password-cracker.md b/curriculum/challenges/ukrainian/09-information-security/information-security-projects/sha-1-password-cracker.md
new file mode 100644
index 0000000000..5d297ce139
--- /dev/null
+++ b/curriculum/challenges/ukrainian/09-information-security/information-security-projects/sha-1-password-cracker.md
@@ -0,0 +1,72 @@
+---
+id: 5e46f983ac417301a38fb933
+title: SHA-1 Password Cracker
+challengeType: 10
+forumTopicId: 462374
+helpCategory: Python
+dashedName: sha-1-password-cracker
+---
+
+# --description--
+
+You will be [working on this project with our Replit starter code](https://replit.com/github/freeCodeCamp/boilerplate-SHA-1-password-cracker).
+
+We are still developing the interactive instructional part of the Python curriculum. For now, here are some videos on the freeCodeCamp.org YouTube channel that will teach you everything you need to know to complete this project:
+
+- [Python for Everybody Video Course](https://www.freecodecamp.org/news/python-for-everybody/) (14 hours)
+
+- [Learn Python Video Course](https://www.freecodecamp.org/news/learn-python-video-course/) (10 hours)
+
+# --instructions--
+
+Passwords should never be stored in plain text. They should be stored as hashes, just in case the password list is discovered. However, not all hashes are created equal.
+
+For this project you will learn about the importance of good security by creating a password cracker to figure out passwords that were hashed using SHA-1.
+
+Create a function that takes in a SHA-1 hash of a password and returns the password if it is one of the top 10,000 passwords used. If the SHA-1 hash is NOT of a password in the database, return "PASSWORD NOT IN DATABASE".
+
+The function should hash each password from `top-10000-passwords.txt` and compare it to the hash passed into the function.
+
+The function should take an optional second argument named `use_salts`. If set to true, each salt string from the file `known-salts.txt` should be appended AND prepended to each password from `top-10000-passwords.txt` before hashing and before comparing it to the hash passed into the function.
+
+Here are some hashed passwords to test the function with:
+
+- `b305921a3723cd5d70a375cd21a61e60aabb84ec` should return "sammy123"
+- `c7ab388a5ebefbf4d550652f1eb4d833e5316e3e` should return "abacab"
+- `5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8` should return "password"
+
+Here are some hashed passwords to test the function with when `use_salts` is set to `True`:
+
+- `53d8b3dc9d39f0184144674e310185e41a87ffd5` should return "superman"
+- `da5a4e8cf89539e66097acd2f8af128acae2f8ae` should return "q1w2e3r4t5"
+- `ea3f62d498e3b98557f9f9cd0d905028b3b019e1` should return "bubbles1"
+
+The `hashlib` library has been imported for you. You should condider using it in your code. [Learn more about "hashlib" here.](https://docs.python.org/3/library/hashlib.html)
+
+## Development
+
+Write your code in `password_cracker.py`. For development, you can use `main.py` to test your code. Click the "run" button and `main.py` will run.
+
+## Testing
+
+The unit tests for this project are in `test_module.py`. We imported the tests from `test_module.py` to `main.py` for your convenience. The tests will run automatically whenever you hit the "run" button.
+
+## Submitting
+
+Copy your project's URL and submit it to freeCodeCamp.
+
+# --hints--
+
+It should pass all Python tests.
+
+```js
+
+```
+
+# --solutions--
+
+```py
+ # Python challenges don't need solutions,
+ # because they would need to be tested against a full working project.
+ # Please check our contributing guidelines to learn more.
+```
diff --git a/curriculum/challenges/ukrainian/09-information-security/information-security-projects/stock-price-checker.md b/curriculum/challenges/ukrainian/09-information-security/information-security-projects/stock-price-checker.md
new file mode 100644
index 0000000000..c982308617
--- /dev/null
+++ b/curriculum/challenges/ukrainian/09-information-security/information-security-projects/stock-price-checker.md
@@ -0,0 +1,136 @@
+---
+id: 587d824a367417b2b2512c44
+title: Stock Price Checker
+challengeType: 4
+forumTopicId: 301572
+dashedName: stock-price-checker
+---
+
+# --description--
+
+Build a full stack JavaScript app that is functionally similar to this: .
+
+Since all reliable stock price APIs require an API key, we've built a workaround. Use to get up-to-date stock price information without needing to sign up for your own key.
+
+Working on this project will involve you writing your code using one of the following methods:
+
+- Clone [this GitHub repo](https://github.com/freeCodeCamp/boilerplate-project-stockchecker/) and complete your project locally.
+- Use [our Replit starter project](https://replit.com/github/freeCodeCamp/boilerplate-project-stockchecker) to complete your project.
+- Use a site builder of your choice to complete the project. Be sure to incorporate all the files from our GitHub repo.
+
+When you are done, make sure a working demo of your project is hosted somewhere public. Then submit the URL to it in the `Solution Link` field. Optionally, also submit a link to your project's source code in the `GitHub Link` field.
+
+# --instructions--
+
+1. SET `NODE_ENV` to `test` without quotes and set `DB` to your MongoDB connection string
+2. Complete the project in `routes/api.js` or by creating a handler/controller
+3. You will add any security features to `server.js`
+4. You will create all of the functional tests in `tests/2_functional-tests.js`
+
+**Note** Privacy Considerations: Due to the requirement that only 1 like per IP should be accepted, you will have to save IP addresses. It is important to remain compliant with data privacy laws such as the General Data Protection Regulation. One option is to get permission to save the user's data, but it is much simpler to anonymize it. For this challenge, remember to anonymize IP addresses before saving them to the database. If you need ideas on how to do this, you may choose to hash the data, truncate it, or set part of the IP address to 0.
+
+Write the following tests in `tests/2_functional-tests.js`:
+
+- Viewing one stock: GET request to `/api/stock-prices/`
+- Viewing one stock and liking it: GET request to `/api/stock-prices/`
+- Viewing the same stock and liking it again: GET request to `/api/stock-prices/`
+- Viewing two stocks: GET request to `/api/stock-prices/`
+- Viewing two stocks and liking them: GET request to `/api/stock-prices/`
+
+# --hints--
+
+You can provide your own project, not the example URL.
+
+```js
+(getUserInput) => {
+ assert(
+ !/.*\/stock-price-checker\.freecodecamp\.rocks/.test(getUserInput('url'))
+ );
+};
+```
+
+You should set the content security policies to only allow loading of scripts and CSS from your server.
+
+```js
+async (getUserInput) => {
+ const data = await fetch(getUserInput('url') + '/_api/app-info');
+ const parsed = await data.json();
+ assert.isTrue(
+ parsed.headers['content-security-policy'].includes("script-src 'self'")
+ );
+ assert.isTrue(
+ parsed.headers['content-security-policy'].includes("style-src 'self'")
+ );
+};
+```
+
+You can send a `GET` request to `/api/stock-prices`, passing a NASDAQ stock symbol to a `stock` query parameter. The returned object will contain a property named `stockData`.
+
+```js
+async (getUserInput) => {
+ const data = await fetch(
+ getUserInput('url') + '/api/stock-prices?stock=GOOG'
+ );
+ const parsed = await data.json();
+ assert.property(parsed, 'stockData');
+};
+```
+
+The `stockData` property includes the `stock` symbol as a string, the `price` as a number, and `likes` as a number.
+
+```js
+async (getUserInput) => {
+ const data = await fetch(
+ getUserInput('url') + '/api/stock-prices?stock=GOOG'
+ );
+ const parsed = await data.json();
+ const ticker = parsed.stockData;
+ assert.typeOf(ticker.price, 'number');
+ assert.typeOf(ticker.likes, 'number');
+ assert.typeOf(ticker.stock, 'string');
+};
+```
+
+You can also pass along a `like` field as `true` (boolean) to have your like added to the stock(s). Only 1 like per IP should be accepted.
+
+```js
+
+```
+
+If you pass along 2 stocks, the returned value will be an array with information about both stocks. Instead of `likes`, it will display `rel_likes` (the difference between the likes on both stocks) for both `stockData` objects.
+
+```js
+async (getUserInput) => {
+ const data = await fetch(
+ getUserInput('url') + '/api/stock-prices?stock=GOOG&stock=MSFT'
+ );
+ const parsed = await data.json();
+ const ticker = parsed.stockData;
+ assert.typeOf(ticker, 'array');
+ assert.property(ticker[0], 'rel_likes');
+ assert.property(ticker[1], 'rel_likes');
+};
+```
+
+All 5 functional tests are complete and passing.
+
+```js
+async (getUserInput) => {
+ const tests = await fetch(getUserInput('url') + '/_api/get-tests');
+ const parsed = await tests.json();
+ assert.isTrue(parsed.length >= 5);
+ parsed.forEach((test) => {
+ assert.equal(test.state, 'passed');
+ });
+};
+```
+
+# --solutions--
+
+```js
+/**
+ Backend challenges don't need solutions,
+ because they would need to be tested against a full working project.
+ Please check our contributing guidelines to learn more.
+*/
+```
diff --git a/curriculum/challenges/ukrainian/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.md b/curriculum/challenges/ukrainian/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.md
new file mode 100644
index 0000000000..1d72070146
--- /dev/null
+++ b/curriculum/challenges/ukrainian/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.md
@@ -0,0 +1,81 @@
+---
+id: 58a25bcff9fc0f352b528e7d
+title: Hash and Compare Passwords Asynchronously
+challengeType: 2
+forumTopicId: 301578
+dashedName: hash-and-compare-passwords-asynchronously
+---
+
+# --description--
+
+As a reminder, this project is being built upon the following starter project on [Replit](https://replit.com/github/freeCodeCamp/boilerplate-bcrypt), or cloned from [GitHub](https://github.com/freeCodeCamp/boilerplate-bcrypt/).
+
+As hashing is designed to be computationally intensive, it is recommended to do so asynchronously on your server as to avoid blocking incoming connections while you hash. All you have to do to hash a password asynchronous is call
+
+```js
+bcrypt.hash(myPlaintextPassword, saltRounds, (err, hash) => {
+ /*Store hash in your db*/
+});
+```
+
+# --instructions--
+
+Add this hashing function to your server (we've already defined the variables used in the function for you to use) and log it to the console for you to see! At this point you would normally save the hash to your database.
+
+Now when you need to figure out if a new input is the same data as the hash you would just use the compare function.
+
+```js
+bcrypt.compare(myPlaintextPassword, hash, (err, res) => {
+ /*res == true or false*/
+});
+```
+
+Add this into your existing hash function (since you need to wait for the hash to complete before calling the compare function) after you log the completed hash and log 'res' to the console within the compare. You should see in the console a hash then 'true' is printed! If you change 'myPlaintextPassword' in the compare function to 'someOtherPlaintextPassword' then it should say false.
+
+```js
+bcrypt.hash('passw0rd!', 13, (err, hash) => {
+ console.log(hash);
+ //$2a$12$Y.PHPE15wR25qrrtgGkiYe2sXo98cjuMCG1YwSI5rJW1DSJp0gEYS
+ bcrypt.compare('passw0rd!', hash, (err, res) => {
+ console.log(res); //true
+ });
+});
+
+```
+
+Submit your page when you think you've got it right.
+
+# --hints--
+
+Async hash should be generated and correctly compared.
+
+```js
+(getUserInput) =>
+ $.get(getUserInput('url') + '/_api/server.js').then(
+ (data) => {
+ assert.match(
+ data,
+ /START_ASYNC[^]*bcrypt.hash.*myPlaintextPassword( |),( |)saltRounds( |),( |).*err( |),( |)hash[^]*END_ASYNC/gi,
+ 'You should call bcrypt.hash on myPlaintextPassword and saltRounds and handle err and hash as a result in the callback'
+ );
+ assert.match(
+ data,
+ /START_ASYNC[^]*bcrypt.hash[^]*bcrypt.compare.*myPlaintextPassword( |),( |)hash( |),( |).*err( |),( |)res[^]*}[^]*}[^]*END_ASYNC/gi,
+ 'Nested within the hash function should be the compare function comparing myPlaintextPassword to hash'
+ );
+ },
+ (xhr) => {
+ throw new Error(xhr.statusText);
+ }
+ );
+```
+
+# --solutions--
+
+```js
+/**
+ Backend challenges don't need solutions,
+ because they would need to be tested against a full working project.
+ Please check our contributing guidelines to learn more.
+*/
+```
diff --git a/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-124-ordered-radicals.md b/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-124-ordered-radicals.md
new file mode 100644
index 0000000000..08779282a3
--- /dev/null
+++ b/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-124-ordered-radicals.md
@@ -0,0 +1,142 @@
+---
+id: 5900f3e81000cf542c50fefb
+title: 'Problem 124: Ordered radicals'
+challengeType: 5
+forumTopicId: 301751
+dashedName: problem-124-ordered-radicals
+---
+
+# --description--
+
+The radical of $n$, $rad(n)$, is the product of the distinct prime factors of $n$. For example, $504 = 2^3 × 3^2 × 7$, so $rad(504) = 2 × 3 × 7 = 42$.
+
+If we calculate $rad(n)$ for $1 ≤ n ≤ 10$, then sort them on $rad(n)$, and sorting on $n$ if the radical values are equal, we get:
+
+
+
+
+
+ $Unsorted$
+
+ $Sorted$
+
+
+ $n$
+ $rad(n)$
+
+ $n$
+ $rad(n)$
+ $k$
+
+
+ 1
+ 1
+
+ 1
+ 1
+ 1
+
+
+ 2
+ 2
+
+ 2
+ 2
+ 2
+
+
+ 3
+ 3
+
+ 4
+ 2
+ 3
+
+
+ 4
+ 2
+
+ 8
+ 2
+ 4
+
+
+ 5
+ 5
+
+ 3
+ 3
+ 5
+
+
+ 6
+ 6
+
+ 9
+ 3
+ 6
+
+
+ 7
+ 7
+
+ 5
+ 5
+ 7
+
+
+ 8
+ 2
+
+ 6
+ 6
+ 8
+
+
+ 9
+ 3
+
+ 7
+ 7
+ 9
+
+
+ 10
+ 10
+
+ 10
+ 10
+ 10
+
+
+
+
+
+Let $E(k)$ be the $k$th element in the sorted $n$ column; for example, $E(4) = 8$ and $E(6) = 9$. If $rad(n)$ is sorted for $1 ≤ n ≤ 100000$, find $E(10000)$.
+
+# --hints--
+
+`orderedRadicals()` should return `21417`.
+
+```js
+assert.strictEqual(orderedRadicals(), 21417);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+function orderedRadicals() {
+
+ return true;
+}
+
+orderedRadicals();
+```
+
+# --solutions--
+
+```js
+// solution required
+```
diff --git a/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-199-iterative-circle-packing.md b/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-199-iterative-circle-packing.md
new file mode 100644
index 0000000000..d2fc26383f
--- /dev/null
+++ b/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-199-iterative-circle-packing.md
@@ -0,0 +1,75 @@
+---
+id: 5900f4341000cf542c50ff46
+title: 'Problem 199: Iterative Circle Packing'
+challengeType: 5
+forumTopicId: 301837
+dashedName: problem-199-iterative-circle-packing
+---
+
+# --description--
+
+Three circles of equal radius are placed inside a larger circle such that each pair of circles is tangent to one another and the inner circles do not overlap. There are four uncovered "gaps" which are to be filled iteratively with more tangent circles.
+
+
+
+At each iteration, a maximally sized circle is placed in each gap, which creates more gaps for the next iteration. After 3 iterations (pictured), there are 108 gaps and the fraction of the area which is not covered by circles is 0.06790342, rounded to eight decimal places.
+
+What fraction of the area is not covered by circles after `n` iterations? Give your answer rounded to eight decimal places using the format x.xxxxxxxx .
+
+# --hints--
+
+`iterativeCirclePacking(10)` should return a number.
+
+```js
+assert(typeof iterativeCirclePacking(10) === 'number');
+```
+
+`iterativeCirclePacking(10)` should return `0.00396087`.
+
+```js
+assert.strictEqual(iterativeCirclePacking(10), 0.00396087);
+```
+
+`iterativeCirclePacking(3)` should return `0.06790342`.
+
+```js
+assert.strictEqual(iterativeCirclePacking(3), 0.06790342);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+function iterativeCirclePacking(n) {
+
+ return true;
+}
+
+iterativeCirclePacking(10);
+```
+
+# --solutions--
+
+```js
+function iterativeCirclePacking(n) {
+ let k1 = 1;
+ let k0 = k1 * (3 - 2 * Math.sqrt(3));
+ let a0 = 1 / (k0 * k0);
+ let a1 = 3 / (k1 * k1);
+ a1 += 3 * getArea(k0, k1, k1, n);
+ a1 += getArea(k1, k1, k1, n);
+ let final = ((a0 - a1) / a0).toFixed(8);
+
+ return parseFloat(final);
+ function getArea(k1, k2, k3, depth) {
+ if (depth == 0) return 0.0;
+ let k4 = k1 + k2 + k3 + 2 * Math.sqrt(k1 * k2 + k2 * k3 + k3 * k1);
+ let a = 1 / (k4 * k4);
+ a += getArea(k1, k2, k4, depth - 1);
+ a += getArea(k2, k3, k4, depth - 1);
+ a += getArea(k3, k1, k4, depth - 1);
+ return a;
+ }
+}
+```
diff --git a/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-283-integer-sided-triangles-for-which-the-area--perimeter-ratio-is-integral.md b/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-283-integer-sided-triangles-for-which-the-area--perimeter-ratio-is-integral.md
new file mode 100644
index 0000000000..d88415d481
--- /dev/null
+++ b/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-283-integer-sided-triangles-for-which-the-area--perimeter-ratio-is-integral.md
@@ -0,0 +1,48 @@
+---
+id: 5900f4881000cf542c50ff9a
+title: >-
+ Problem 283: Integer sided triangles for which the area / perimeter ratio is integral
+challengeType: 5
+forumTopicId: 301934
+dashedName: >-
+ problem-283-integer-sided-triangles-for-which-the-area--perimeter-ratio-is-integral
+---
+
+# --description--
+
+Consider the triangle with sides 6, 8 and 10. It can be seen that the perimeter and the area are both equal to 24.
+
+So the $\frac{\text{area}}{\text{perimeter}}$ ratio is equal to 1.
+
+Consider also the triangle with sides 13, 14 and 15. The perimeter equals 42 while the area is equal to 84.
+
+So for this triangle the $\frac{\text{area}}{\text{perimeter}}$ ratio is equal to 2.
+
+Find the sum of the perimeters of all integer sided triangles for which the area/perimeter ratios are equal to positive integers not exceeding 1000.
+
+# --hints--
+
+`integralAreaPerimeterRatio()` should return `28038042525570324`.
+
+```js
+assert.strictEqual(integralAreaPerimeterRatio(), 28038042525570324);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+function integralAreaPerimeterRatio() {
+
+ return true;
+}
+
+integralAreaPerimeterRatio();
+```
+
+# --solutions--
+
+```js
+// solution required
+```
diff --git a/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-29-distinct-powers.md b/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-29-distinct-powers.md
new file mode 100644
index 0000000000..0fc363ab98
--- /dev/null
+++ b/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-29-distinct-powers.md
@@ -0,0 +1,86 @@
+---
+id: 5900f3891000cf542c50fe9c
+title: 'Problem 29: Distinct powers'
+challengeType: 5
+forumTopicId: 301941
+dashedName: problem-29-distinct-powers
+---
+
+# --description--
+
+Consider all integer combinations of $a^b$ for 2 ≤ a ≤ 5 and 2 ≤ b ≤ 5:
+
+
+ 22 =4, 23 =8, 24 =16, 25 =32
+ 32 =9, 33 =27, 34 =81, 35 =243
+ 42 =16, 43 =64, 44 =256, 45 =1024
+ 52 =25, 53 =125, 54 =625, 55 =3125
+
+
+If they are then placed in numerical order, with any repeats removed, we get the following sequence of 15 distinct terms:
+
+
+ 4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125
+
+
+How many distinct terms are in the sequence generated by $a^b$ for 2 ≤ `a` ≤ `n` and 2 ≤ `b` ≤ `n`?
+
+# --hints--
+
+`distinctPowers(15)` should return a number.
+
+```js
+assert(typeof distinctPowers(15) === 'number');
+```
+
+`distinctPowers(15)` should return 177.
+
+```js
+assert.strictEqual(distinctPowers(15), 177);
+```
+
+`distinctPowers(20)` should return 324.
+
+```js
+assert.strictEqual(distinctPowers(20), 324);
+```
+
+`distinctPowers(25)` should return 519.
+
+```js
+assert.strictEqual(distinctPowers(25), 519);
+```
+
+`distinctPowers(30)` should return 755.
+
+```js
+assert.strictEqual(distinctPowers(30), 755);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+function distinctPowers(n) {
+
+ return n;
+}
+
+distinctPowers(30);
+```
+
+# --solutions--
+
+```js
+const distinctPowers = (n) => {
+ let list = [];
+ for (let a=2; a<=n; a++) {
+ for (let b=2; b<=n; b++) {
+ let term = Math.pow(a, b);
+ if (list.indexOf(term)===-1) list.push(term);
+ }
+ }
+ return list.length;
+};
+```
diff --git a/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-331-cross-flips.md b/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-331-cross-flips.md
new file mode 100644
index 0000000000..024faedcfd
--- /dev/null
+++ b/curriculum/challenges/ukrainian/10-coding-interview-prep/project-euler/problem-331-cross-flips.md
@@ -0,0 +1,52 @@
+---
+id: 5900f4b71000cf542c50ffca
+title: 'Problem 331: Cross flips'
+challengeType: 5
+forumTopicId: 301989
+dashedName: problem-331-cross-flips
+---
+
+# --description--
+
+N×N disks are placed on a square game board. Each disk has a black side and white side.
+
+At each turn, you may choose a disk and flip all the disks in the same row and the same column as this disk: thus $2 × N - 1$ disks are flipped. The game ends when all disks show their white side. The following example shows a game on a 5×5 board.
+
+
+
+It can be proven that 3 is the minimal number of turns to finish this game.
+
+The bottom left disk on the $N×N$ board has coordinates (0, 0); the bottom right disk has coordinates ($N - 1$,$0$) and the top left disk has coordinates ($0$,$N - 1$).
+
+Let $C_N$ be the following configuration of a board with $N × N$ disks: A disk at ($x$, $y$) satisfying $N - 1 \le \sqrt{x^2 + y^2} \lt N$, shows its black side; otherwise, it shows its white side. $C_5$ is shown above.
+
+Let $T(N)$ be the minimal number of turns to finish a game starting from configuration $C_N$ or 0 if configuration $C_N$ is unsolvable. We have shown that $T(5) = 3$. You are also given that $T(10) = 29$ and $T(1\\,000) = 395\\,253$.
+
+Find $\displaystyle \sum_{i = 3}^{31} T(2^i - i)$.
+
+# --hints--
+
+`crossFlips()` should return `467178235146843500`.
+
+```js
+assert.strictEqual(crossFlips(), 467178235146843500);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+function crossFlips() {
+
+ return true;
+}
+
+crossFlips();
+```
+
+# --solutions--
+
+```js
+// solution required
+```
From 3f62615f8db73303479f5f4f9f3e2dbaf0fdfe4e Mon Sep 17 00:00:00 2001
From: Mrugesh Mohapatra <1884376+raisedadead@users.noreply.github.com>
Date: Fri, 10 Dec 2021 22:56:21 +0530
Subject: [PATCH 07/63] docs(devops): update npm version to v8 (#44455)
---
docs/devops.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/devops.md b/docs/devops.md
index 68dca48f68..bbe9507773 100644
--- a/docs/devops.md
+++ b/docs/devops.md
@@ -563,7 +563,7 @@ Provisioning VMs with the Code
2. Update `npm` and install PM2 and setup `logrotate` and startup on boot
```console
- npm i -g npm@6
+ npm i -g npm@8
npm i -g pm2
npm install -g serve
pm2 install pm2-logrotate
From 40def2d291fcfcf3cf1c1d16204d83d3a35401a0 Mon Sep 17 00:00:00 2001
From: camperbot
Date: Fri, 10 Dec 2021 23:02:33 +0530
Subject: [PATCH 08/63] chore(i18n,docs): update translations (#44453)
---
.../how-to-work-on-coding-challenges.md | 4 +
.../how-to-work-on-coding-challenges.md | 4 +
.../how-to-work-on-coding-challenges.md | 90 ++++++++++---------
.../how-to-work-on-coding-challenges.md | 4 +
.../how-to-work-on-coding-challenges.md | 90 ++++++++++---------
.../how-to-work-on-coding-challenges.md | 4 +
6 files changed, 110 insertions(+), 86 deletions(-)
diff --git a/docs/i18n/chinese/how-to-work-on-coding-challenges.md b/docs/i18n/chinese/how-to-work-on-coding-challenges.md
index af03d7fd4b..36ade2941a 100644
--- a/docs/i18n/chinese/how-to-work-on-coding-challenges.md
+++ b/docs/i18n/chinese/how-to-work-on-coding-challenges.md
@@ -73,6 +73,10 @@ assert.equal(
);
```
+# --notes--
+
+Extra information for a challenge, in markdown
+
# --seed--
## --before-user-code--
diff --git a/docs/i18n/espanol/how-to-work-on-coding-challenges.md b/docs/i18n/espanol/how-to-work-on-coding-challenges.md
index 6e3cf6c840..4338884d99 100644
--- a/docs/i18n/espanol/how-to-work-on-coding-challenges.md
+++ b/docs/i18n/espanol/how-to-work-on-coding-challenges.md
@@ -77,6 +77,10 @@ assert.equal(
);
```
+# --notes--
+
+Extra information for a challenge, in markdown
+
# --seed--
## --before-user-code--
diff --git a/docs/i18n/italian/how-to-work-on-coding-challenges.md b/docs/i18n/italian/how-to-work-on-coding-challenges.md
index c90988f549..7993fd7442 100644
--- a/docs/i18n/italian/how-to-work-on-coding-challenges.md
+++ b/docs/i18n/italian/how-to-work-on-coding-challenges.md
@@ -73,6 +73,10 @@ assert.equal(
);
```
+# --notes--
+
+Extra information for a challenge, in markdown
+
# --seed--
## --before-user-code--
@@ -89,7 +93,7 @@ Codice eseguito dopo il codice dell'utente, ma prima dei test
## --seed-contents--
-Codice di partenza da far apparire nell'editor. Questa sezione deve contenere solo codice in backtick, come il seguente:
+Boilerplate code to render to the editor. This section should only contain code inside backticks, like the following:
```html
@@ -114,7 +118,7 @@ console.log('freeCodeCamp is awesome!');
# --solutions--
-Le soluzioni sono usate dai test CI per assicurarsi che i cambiamenti alla sezione hints facciano eseguire i test correttamente
+Solutions are used for the CI tests to ensure that changes to the hints will still pass as intended
```js
// prima soluzione - il linguaggio deve combaciare con il seed.
@@ -134,27 +138,27 @@ Le soluzioni sono usate dai test CI per assicurarsi che i cambiamenti alla sezio
# --question--
-Questi campi sono usati per le domande a scelta multipla delle sfide di Python.
+These fields are currently used for the multiple-choice Python challenges.
## --text--
-Il testo della domanda va qui.
+The question text goes here.
## --answers--
-Risposa 1
+Answer 1
---
-Risposta 2
+Answer 2
---
-Altre risposte
+More answers
## --video-solution--
-Il numero della risposta corretta va qui.
+The number for the correct answer goes here.
````
> [!NOTE]
@@ -186,9 +190,9 @@ $ ObjectId()
ObjectId("5a474d78df58bafeb3535d34")
````
-Il risultato è un nuovo id, per esempio sopra `5a474d78df58bafeb3535d34`.
+The result is a new id, for example `5a474d78df58bafeb3535d34` above.
-Una volta che hai il tuo id, mettilo nel file markdown nel campo `id` in cima, per esempio
+Once you have your id, put it into the markdown file as the `id` field at the top, e.g.
```yml
---
@@ -198,13 +202,13 @@ title: Challenge Title
## Dare un nome alle sfide
-Dare un nome alle cose è difficile. Lo abbiamo reso più semplice dando dei limiti.
+Naming things is hard. We've made it easier by imposing some constraints.
-Tutti i titoli delle sfide devono essere espliciti e seguire questo schema:
+All challenge titles should be explicit and should follow this pattern:
-\[verbo\]\[complemento oggetto\]
+\[verb\]\[object clause\]
-Ecco alcuni esempi di nomi di sfide:
+Here are some example challenge names:
- Usare la notazione in senso orario per specificare il padding di un elemento
- Condensare array usando .reduce
@@ -212,19 +216,19 @@ Ecco alcuni esempi di nomi di sfide:
## Istruzioni e descrizione di una sfida
-Le frasi dovrebbero essere chiare e concise con minimo utilizzo di linguaggio tecnico. Se il linguaggio tecnico è usato, deve essere subito seguito da una definizione in linguaggio comune.
+Sentences should be clear and concise with minimal jargon. If used, jargon should be immediately defined in plain English.
-I paragrafi devono essere corti (1-4 frasi circa). È più probabile che vengano lette alcune frasi corte invece di un muro di testo.
+Keep paragraphs short (around 1-4 sentences). People are more likely to read several short paragraphs than a wall of text.
-Il testo della sfida dovrebbe usare la seconda persona ("tu") per aiutare ad avere un tono colloquiale. In questo modo il testo e le istruzioni sembrano parlare direttamente al camper che lavora sulle sfide. Cerca di evitare la prima persona ("io", "noi", "facciamo").
+Challenge text should use the second person ("you") to help to give it a conversational tone. This way the text and instructions seem to speak directly to the camper working through the challenge. Try to avoid using the first person ("I", "we", "let's", and "us").
-Non usare link a siti esterni. Questi interrompono il flusso. I camper non dovrebbero mai cercare qualcosa su Google durante queste sfide. Se ci sono risorse di cui pensi che il camper possa beneficiare, aggiungile all'articolo della sfida nella guida.
+Don't use outbound links. These interrupt the flow. Campers should never have to google anything during these challenges. If there are resources you think campers would benefit from, add them to the challenge's Guide-related article.
-Puoi aggiugere diagrammi se necessario.
+You can add diagrams if necessary.
-Non usare emoji o emoticon nelle sfide. freeCodeCamp ha una comunità globale, e il significato culturare di una emoji o emoticon può essere differente nelle varie parti del mondo. In più, le emoji possono avere un aspetto diverso su diversi sistemi.
+Don't use emojis or emoticons in challenges. freeCodeCamp has a global community, and the cultural meaning of an emoji or emoticon may be different around the world. Also, emojis can render differently on different systems.
-I nomi propri dovrebbero usare le maiuscole correttamente quando possibile. Qui sotto trovi una lista di parole come dovrebbero apparire nelle sfide.
+Proper nouns should use correct capitalization when possible. Below is a list of words as they should appear in the challenges.
- JavaScript (lettere maiuscole in "J" e "S" e senza abbreviazioni)
- Node.js
@@ -232,28 +236,28 @@ I nomi propri dovrebbero usare le maiuscole correttamente quando possibile. Qui
### La regola dei due minuti
-Ogni sfida dovrebbe essere risolvibile entro 120 secondi da un nativo inglese che ha completato tutte le sfide precedenti. Questo include l'ammontare di tempo necessario a leggere le istruzioni, comprendere il codice di partenza, scrivere il loro codice e avere tutti i test superati.
+Each challenge should be solvable within 120 seconds by a native English speaker who has completed the challenges leading up to it. This includes the amount of time it takes to read the directions/instructions understand the seeded code, write their code and get all the tests to pass.
-Se servono più di due minuti a completare la sfida hai due possibilità:
+If it takes longer than two minutes to complete the challenge, you have two options:
- Semplificare la sfida, o
- Dividere la sfida in due sfide.
-La regola dei due minuti obbliga te, designer della sfida, a rendere le tue istruzioni concise, il tuo codice seed chiaro, e i tuoi test diretti.
+The 2-minute rule forces you, the challenge designer, to make your directions concise, your seed code clear, and your tests straight-forward.
-Teniamo traccia di quanto tempo serve ai camper per risolvere le sfide e usiamo questa informazione per identificare sfide che devono essere semplificate o divise.
+We track how long it takes for campers to solve changes and use this information to identify challenges that need to be simplified or split.
### Modularità
-Ogni sfida dovrebbe insegnare esattamente un concetto, e quel concetto dovrebbe apparire nel titolo della sfida.
+Each challenge should teach exactly one concept, and that concept should be apparent from the challenge's name.
-Possiamo rinforzare concetti introdotti in precedenza tramite ripetizione e variazioni, per esempio introducendo gli elementi h1 in una sfida e gli elementi h3 alcune sfide più tardi.
+We can reinforce previously covered concepts through repetition and variations - for example, introducing h1 elements in one challenge, then h3 elements a few challenges later.
-Il nostro obbiettivo è di avere migliaia di sfide da due minuti. Queste possono scorrere insieme e rinforzare concetti già introdotti in precedenza.
+Our goal is to have thousands of 2-minute challenges. These can flow together and reiterate previously-covered concepts.
### Formattare il testo delle sfide
-Ecco le linee guidee di formattazione specifiche per il testo delle sfide e degli esempi:
+Here are specific formatting guidelines for challenge text and examples:
- Le parole chiave del linguaggio vanno in `` \` `` backtick. Per esempio i nomi dei tag HTML o i nomi delle proprietà CSS.
- Riferimenti a parti di codice (come nomi di funzioni, metodi o variabili) dovrebbero essere in `` \` `` backtick. Vedi gli esempi seguenti:
@@ -266,9 +270,9 @@ Usa `parseInt` per convertire la variabile `realNumber` a un numero intero.
- I blocchi di codice multi-riga **devono essere preceduti da una riga vuota**. La riga successiva deve iniziare con tre backticks seguiti immediatamente da uno dei [linguaggi supportati](https://prismjs.com/#supported-languages). Per completare il blocco di codice devi iniziare una nuova riga, scrivere tre backtick e poi **un'altra riga vuota**. Vedi l'esempio seguente:
- Gli spazi bianchi hanno significato in Markdown, raccomandiamo di renderli visibili nel tuo editor.
-**Nota:** Se devi usare un esempio di codice in YAML, usa `yaml` invece di `yml` per il linguaggio a fianco dei tre backtick.
+**Note:** If you are going to use an example code in YAML, use `yaml` instead of `yml` for the language to the right of the backticks.
-Il seguente è un esempio di codice:
+The following is an example of code:
````md
```{language}
@@ -312,13 +316,13 @@ Esempio di un commento a linea singola in JavaScript:
// Only change code below this line
````
-Esempio di un commento CSS valido:
+Example of a valid CSS comment:
```css
/* Only change code above this line */
```
-Se la sfida ha un unico punto dove il codice ha bisogno di cambiamenti, per favore usa i commenti nel seguente esempio per istruire l'utente su dove dovrebbe fare i cambiamenti.
+If a challenge only has a single place where code changes are needed, please use the comments in the following example to instruct the user where changes should be made.
```js
var a = 3;
@@ -331,7 +335,7 @@ b = 9 + b;
c = c + 7;
```
-Se la sfida ha diversi punti dove l'utente deve fare cambiamenti al codice (come in una sfida React)
+If a challenge has multiple places where the user is expected to change code (i.e. the React challenges)
```jsx
class MyComponent extends React.Component {
@@ -364,9 +368,9 @@ class MyComponent extends React.Component {
### Traduzione dei commenti nel codice seed
-Ci sono directory separate per ogni lingua. La [versione inglese della directory dei commenti](/curriculum/dictionaries/english/comments.js) è la base per le traduzioni trovate nelle corrispondenti versioni non-inglesi del file. La versione non-inglese della directory dei commenti cinese si trova in `/curriculum/dictionaries/chinese/comments.js`. Ogni directory consiste di un array di oggetti con una proprietà `id` unica e una proprietà `text` che contiene il testo del commento. Solo `text` dovrebbe essere modificato per includere la traduzione del corrispondente commento inglese.
+There are separate comment dictionaries for each language. The [English version of the comment dictionary](/curriculum/dictionaries/english/comments.js) is the basis for the translations found in the corresponding non-English versions of the files. The non-English version of the Chinese comment dictionary would be located at `/curriculum/dictionaries/chinese/comments.js`. Each dictionary consists of an array of objects with a unique `id` property and a `text` property. Only the `text` should be modified to encompass the translation of the corresponding English comment.
-Alcuni commenti potrebbero contenere delle parole o frasi che non devono essere tradotte. Per esempio, nomi di variabili o nomi propri di librerie come "React" non dovrebbero essere tradotti. Vedi il commento seguente come esempio. La parola `myGlobal` non deve essere tradotta.
+Some comments may contain a word/phrase that should not be translated. For example, variable names or proper library names like "React" should not be translated. See the comment below as an example. The word `myGlobal` should not be translated.
```text
Declare the myGlobal variable below this line
@@ -378,13 +382,13 @@ Declare the myGlobal variable below this line
## Suggerimenti e soluzioni
-Ogni sfida ha un pulsante `Get a Hint` (Ottieni un suggerimento), cosicché un utente possa avere accesso a suggerimenti e soluzioni che sono stati creati per la sfida. I suggerimenti e le soluzioni del curriculum si trovano nei topic [del nostro forum](https://forum.freecodecamp.org/c/guide) nella categoria `Guide`.
+Each challenge has a `Get a Hint` button, so a user can access any hints/solutions which have been created for the challenge. Curriculum hints/solutions topics are located on [our forum](https://forum.freecodecamp.org/c/guide) under the `Guide` category.
-Se trovi un problema con i suggerimenti e le soluzioni delle sfide puoi inviare i tuoi suggerimenti aprendo un topic nella [categoria contributors](https://forum.freecodecamp.org/c/contributors) sul forum. Moderatori e utenti con un livello di fiducia 3 rivedranno i tuoi commenti e decideranno se includere o meno i cambiamenti nel topic corrispondente.
+If you find a problem with an existing challenge's hints/solutions topic, you can make suggestions in the [contributors category](https://forum.freecodecamp.org/c/contributors) on the forum. Moderators and users with trust level 3 will review the comments and decide whether or not to include the changes in the corresponding hint/solutions topic.
### Aggiungere nuovi topic per i suggerimenti e le soluzioni delle sfide
-Segui i seguenti step quando crei un nuovo topic per le soluzioni e i suggerimenti di una sfida.
+Take the following steps when adding a new challenge hints/solutions related topic.
1. Inizia seguendo gli stessi passaggi per creare un nuovo argomento, ma rivedi il successivo per creare il titolo.
2. Il titolo dell'argomento dovrebbe iniziare con `freeCodeCamp Challenge Guide:` concatenato con il titolo effettivo della sfida del curriculum. Ad esempio, se la sfida è chiamata "`Chunky Monkey`", il titolo dell'argomento sarebbe "`freeCodeCamp Challenge Guide: Chunky Monkey`".
@@ -393,7 +397,7 @@ Segui i seguenti step quando crei un nuovo topic per le soluzioni e i suggerimen
### Linee guida per il contenuto dei topic dei suggerimenti e delle soluzioni
-Quando proponi una soluzione da aggiungere al topic relativo a una sfida, devi includere tutto il codice. Questo include sia il codice seed originale sia i cambiamenti necessari per superare i test. Dovresti usare il seguente template per creare nuovi topic per suggerimenti e soluzioni:
+When proposing a solution for a curriculum challenge related Guide topic, the full code must be added. This includes all the original seed code plus any changes needed to pass all the challenge tests. The following template should be used when creating new hints/solutions topics:
````md
# [Qui il nome della sfida]
@@ -474,12 +478,12 @@ Puoi anche testare una sfida singola con i seguenti step:
cd curriculum
```
-2. Esegui i seguenti comandi per ogni singolo file in cui hai fatto cambiamenti (rimpiazziando `challenge-title-goes-here` con il titolo intero della sfida):
+2. Run the following for each challenge file for which you have changed (replacing `challenge-title-goes-here` with the full title of the challenge):
```
npm run test -- -g challenge-title-goes-here ```
-Una volta che avrai verificato che ogni sfida su cui hai lavorato passi i test, [per favore crea una pull request](how-to-open-a-pull-request.md).
+Once you have verified that each challenge you've worked on passes the tests, [please create a pull request](how-to-open-a-pull-request.md).
> [!TIP] Puoi impostare la variabile d'ambiente `LOCALE` nel file `.env` alla lingua usata nelle sfide che devi testare.
>
@@ -487,7 +491,7 @@ Una volta che avrai verificato che ogni sfida su cui hai lavorato passi i test,
### Link utili
-Creare e modificare sfide:
+Creating and Editing Challenges:
1. [Tipo della sfida (challenge type)](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/utils/challenge-types.js#L1-L13) - cosa significa il tipo di sfida numerico (enum).
diff --git a/docs/i18n/japanese/how-to-work-on-coding-challenges.md b/docs/i18n/japanese/how-to-work-on-coding-challenges.md
index af03d7fd4b..36ade2941a 100644
--- a/docs/i18n/japanese/how-to-work-on-coding-challenges.md
+++ b/docs/i18n/japanese/how-to-work-on-coding-challenges.md
@@ -73,6 +73,10 @@ assert.equal(
);
```
+# --notes--
+
+Extra information for a challenge, in markdown
+
# --seed--
## --before-user-code--
diff --git a/docs/i18n/portuguese/how-to-work-on-coding-challenges.md b/docs/i18n/portuguese/how-to-work-on-coding-challenges.md
index ff764ba282..2fe19fdbbe 100644
--- a/docs/i18n/portuguese/how-to-work-on-coding-challenges.md
+++ b/docs/i18n/portuguese/how-to-work-on-coding-challenges.md
@@ -73,6 +73,10 @@ assert.equal(
);
```
+# --notes--
+
+Extra information for a challenge, in markdown
+
# --seed--
## --before-user-code--
@@ -89,7 +93,7 @@ Código avaliado após o código do usuário, e pouco antes dos testes
## --seed-contents--
-Código Boilerplate para renderizar para o editor. Esta seção deve somente conter código dentro de crases, como o seguinte exemplo:
+Boilerplate code to render to the editor. This section should only contain code inside backticks, like the following:
```html
@@ -114,7 +118,7 @@ console.log('freeCodeCamp is awesome!');
# --solutions--
-Soluções são usadas para os testes CI a fim de garantir que mudanças nas dicas ainda passem conforme o esperado
+Solutions are used for the CI tests to ensure that changes to the hints will still pass as intended
```js
// primeira solução - a(s) linguagem(ns) deve(m) ser a mesma do código fornecido.
@@ -134,27 +138,27 @@ Soluções são usadas para os testes CI a fim de garantir que mudanças nas dic
# --question--
-Esses espaços são utilizados geralmente para questões de múltipla escolha dos desafios de Python.
+These fields are currently used for the multiple-choice Python challenges.
## --text--
-O texto da pergunta vêm aqui.
+The question text goes here.
## --answers--
-Resposta 1
+Answer 1
---
-Resposta 2
+Answer 2
---
-Mais respostas
+More answers
## --video-solution--
-O número da resposta correta fica aqui.
+The number for the correct answer goes here.
````
> [!NOTE]
@@ -186,9 +190,9 @@ $ ObjectId()
ObjectId("5a474d78df58bafeb3535d34")
````
-O resultado é um novo id, por exemplo `5a474d78df58bafeb3535d34` acima.
+The result is a new id, for example `5a474d78df58bafeb3535d34` above.
-Quando tiver seu id, coloque-o no arquivo markdown como campo `id` no topo, ex.
+Once you have your id, put it into the markdown file as the `id` field at the top, e.g.
```yml
---
@@ -198,13 +202,13 @@ title: Título do desafio
## Nomeando desafios
-Nomear coisas é difícil. Nós facilitamos com algumas restrições.
+Naming things is hard. We've made it easier by imposing some constraints.
-Todos os títulos dos desafios devem estar explícitos e devem seguir este padrão:
+All challenge titles should be explicit and should follow this pattern:
-\[verb\]\[frase objetiva\]
+\[verb\]\[object clause\]
-Aqui estão alguns exemplos de nomes para desafios:
+Here are some example challenge names:
- Usar a notação de sentido horário para especificar o preenchimento (padding) de um elemento
- Condensar arrays com .reduce
@@ -212,19 +216,19 @@ Aqui estão alguns exemplos de nomes para desafios:
## Descrições/instruções do desafio
-As frases devem ser claras e resumidas com o mínimo de termos técnicos. Se usado, o termo técnico deve ser imediatamente definido em inglês simples.
+Sentences should be clear and concise with minimal jargon. If used, jargon should be immediately defined in plain English.
-Mantenha os parágrafos curtos (em torno de 1-4 frases). É mais provável que as pessoas leiam vários parágrafos curtos do que um parágrafo enorme.
+Keep paragraphs short (around 1-4 sentences). People are more likely to read several short paragraphs than a wall of text.
-O texto do desafio deve usar a segunda pessoa ("você") para ajudar a dar um tom de conversa. Dessa forma, o texto e as instruções parecem falar diretamente ao usuário freeCodeCamp que está resolvendo o desafio. Tente evitar usar a primeira pessoa ("eu", "nós", "vamos").
+Challenge text should use the second person ("you") to help to give it a conversational tone. This way the text and instructions seem to speak directly to the camper working through the challenge. Try to avoid using the first person ("I", "we", "let's", and "us").
-Não use links externos. Eles interrompem o fluxo. Os usuários freeCodeCamp nunca devem precisar pesquisar nada no Google durante esses desafios. Se há recursos que você acha que os usuários irão se beneficiar, adicione-os no artigo relacionado ao guia do desafio.
+Don't use outbound links. These interrupt the flow. Campers should never have to google anything during these challenges. If there are resources you think campers would benefit from, add them to the challenge's Guide-related article.
-Você pode adicionar diagramas se necessário.
+You can add diagrams if necessary.
-Não use emojis ou emoticons em desafios. O freeCodeCamp possui uma comunidade global, e o significado cultural de um emoji ou emoticon pode ser diferente ao redor do mundo. Além disso, emojis podem ser mostrados de maneiras diferentes em diferentes sistemas.
+Don't use emojis or emoticons in challenges. freeCodeCamp has a global community, and the cultural meaning of an emoji or emoticon may be different around the world. Also, emojis can render differently on different systems.
-Substantivos próprios devem começar com letra maiúscula quando possível. Abaixo está uma lista de palavras e como devem aparecem nos desafios.
+Proper nouns should use correct capitalization when possible. Below is a list of words as they should appear in the challenges.
- JavaScript (letras maiúsculas em "J" e "S" e sem abreviações)
- Node.js
@@ -232,28 +236,28 @@ Substantivos próprios devem começar com letra maiúscula quando possível. Aba
### A regra dos 2 minutos
-Cada desafio deve ser resolvido em 120 segundos por um nativo da língua inglesa que tenha concluído os desafios anteriores. Isso inclui a quantidade de tempo que leva para ler as instruções, entender o código fornecido, escrever o código e passar nos testes.
+Each challenge should be solvable within 120 seconds by a native English speaker who has completed the challenges leading up to it. This includes the amount of time it takes to read the directions/instructions understand the seeded code, write their code and get all the tests to pass.
-Se levar mais do que dois minutos para completar um desafio, você tem duas opções:
+If it takes longer than two minutes to complete the challenge, you have two options:
- Simplifique o desafio, ou
- Divida o desafio em dois desafios.
-A regra dos 2 minutos força quem criou o desafio a deixar as instruções resumidas, o código fornecido limpo e seus testes diretos.
+The 2-minute rule forces you, the challenge designer, to make your directions concise, your seed code clear, and your tests straight-forward.
-Acompanhamos quanto dura para os usuários resolverem mudanças e usamos essa informação para identificar desafios que precisam ser simplificados ou divididos.
+We track how long it takes for campers to solve changes and use this information to identify challenges that need to be simplified or split.
### Modularidade
-Cada desafio deve ensinar exatamente um conceito, e esse conceito deve estar aparente a partir do nome do desafio.
+Each challenge should teach exactly one concept, and that concept should be apparent from the challenge's name.
-Podemos reforçar conceitos citados anteriormente através de repetição e variações - por exemplo, introduzir elementos h1 em um desafio, então elementos h3 depois.
+We can reinforce previously covered concepts through repetition and variations - for example, introducing h1 elements in one challenge, then h3 elements a few challenges later.
-Nossa meta é ter vários desafios de 2 minutos. Eles podem se completar e relembrar conceitos anteriormente citados.
+Our goal is to have thousands of 2-minute challenges. These can flow together and reiterate previously-covered concepts.
### Formatando o texto do desafio
-Aqui estão diretrizes de formatação específicas para o texto do desafio e exemplos:
+Here are specific formatting guidelines for challenge text and examples:
- Palavras chaves da linguagem ficam entre `` \` `` crases. Por exemplo, nomes de tags HTML ou nomes de propriedade CSS.
- Referências a códigos (ex. função, método ou nomes de variáveis) devem estar entre `` \` ``. Veja o exemplo abaixo:
@@ -266,9 +270,9 @@ Use `parseInt` para converter a variável `realNumber` em um número inteiro.
- Blocos de código com várias linhas **devem ser precedidos por uma linha vazia**. A próxima linha deve começar com três crases seguidas imediatamente por uma das [linguagens suportadas](https://prismjs.com/#supported-languages). Para completar o bloco de código, você deve começar uma nova linha que apenas possui três crases e **outra linha vazia**. Veja o exemplo abaixo:
- Os espaços importam no Markdown. Então, recomendamos que os mantenham visíveis no seu editor.
-**Observação:** se você for usar um exemplo de códigoem YAML, use `yaml` ao invés de `yml` para a linguagem na direita das crases.
+**Note:** If you are going to use an example code in YAML, use `yaml` instead of `yml` for the language to the right of the backticks.
-A seguir um exemplo do código:
+The following is an example of code:
````md
```{language}
@@ -315,13 +319,13 @@ Exemplo de um comentário de uma linha em JavaScript:
// Mude somente abaixo dessa linha
````
-Exemplo de um comentário válido em CSS:
+Example of a valid CSS comment:
```css
/* Only change code above this line */
```
-Se um desafio tem apenas um lugar onde as mudanças de código são necessárias, use os comentários seguindo o exemplo a seguir para instruir o usuário sobre o local onde as mudanças devem ser feitas.
+If a challenge only has a single place where code changes are needed, please use the comments in the following example to instruct the user where changes should be made.
```js
var a = 3;
@@ -334,7 +338,7 @@ b = 9 + b;
c = c + 7;
```
-Se um desafio tem múltiplos lugares onde se espera que o usuário faça mudanças no código (ex. os desafios de React)
+If a challenge has multiple places where the user is expected to change code (i.e. the React challenges)
```jsx
class MyComponent extends React.Component {
@@ -367,9 +371,9 @@ class MyComponent extends React.Component {
### Tradução de comentários de código seed
-Existem dicionários de comentários separados para cada linguagem. A [versão em inglês do dicionário de comentários](/curriculum/dictionaries/english/comments.js) é a base para as traduções encontradas nas versões correspondentes dos arquivos em outros idiomas. A versão não inglesa do dicionário de comentário chinesa pode ser encontrada em `/curriculum/dictionaries/chinese/comments.js`. Cada dicionário consiste em um array de objetos com uma propriedade de `id` única e uma propriedade de `text`. Somente a propriedade `text` deve ser modificada para englobar a tradução do comentário correspondente em inglês.
+There are separate comment dictionaries for each language. The [English version of the comment dictionary](/curriculum/dictionaries/english/comments.js) is the basis for the translations found in the corresponding non-English versions of the files. The non-English version of the Chinese comment dictionary would be located at `/curriculum/dictionaries/chinese/comments.js`. Each dictionary consists of an array of objects with a unique `id` property and a `text` property. Only the `text` should be modified to encompass the translation of the corresponding English comment.
-Alguns comentários podem conter uma palavra/frase que não deve ser traduzida. Por exemplo, nomes de variáveis, ou nomes próprios de bibliotecas como "React" não devem ser traduzidas. Veja o comentário abaixo como um exemplo. a palavra `myGlobal` não deve ser traduzida.
+Some comments may contain a word/phrase that should not be translated. For example, variable names or proper library names like "React" should not be translated. See the comment below as an example. The word `myGlobal` should not be translated.
```text
Declare a variável myGlobal abaixo desta linha
@@ -381,13 +385,13 @@ Declare a variável myGlobal abaixo desta linha
## Dicas e soluções
-Cada desafio tem um botão `Get a Hint`, assim, o usuário pode acessar qualquer dica/solução que foi criada para aquele desafio. Os tópicos de dicas/soluções são encontrados no [nosso fórum](https://forum.freecodecamp.org/c/guide), abaixo da categoria `Guide`.
+Each challenge has a `Get a Hint` button, so a user can access any hints/solutions which have been created for the challenge. Curriculum hints/solutions topics are located on [our forum](https://forum.freecodecamp.org/c/guide) under the `Guide` category.
-Se você encontrar um problema nas dicas/tópicos de solução de um desafio existente, você pode fazer sugestões na [categoria de contribuidores](https://forum.freecodecamp.org/c/contributors) no fórum. Os moderadores e usuários com o nível de confiança 3 vão revisar os comentários e decidir quais incluir as mudanças nos tópicos correspondentes de dicas/soluções.
+If you find a problem with an existing challenge's hints/solutions topic, you can make suggestions in the [contributors category](https://forum.freecodecamp.org/c/contributors) on the forum. Moderators and users with trust level 3 will review the comments and decide whether or not to include the changes in the corresponding hint/solutions topic.
### Adicionando um novo tópico de dicas/soluções em um desafio
-Faça o passo-a-passo a seguir quando for adicionar novos tópicos de dicas/soluções relacionadas a um desafio.
+Take the following steps when adding a new challenge hints/solutions related topic.
1. Comece seguindo os mesmos passos para criar um novo tópico, mas revise o seguinte para criar o título.
2. O título do tópico deve começar com `freeCodeCamp Challenge Guide:` concatenado com o título atual do desafio de currículo. Por exemplo, se o desafio é chamado "`Chunky Monkey`", o título do tópico seria "`freeCodeCamp Challenge Guide: Chunky Monkey`".
@@ -396,7 +400,7 @@ Faça o passo-a-passo a seguir quando for adicionar novos tópicos de dicas/solu
### Diretrizes para o conteúdo dos tópicos de dicas e soluções
-Ao propor uma solução para um tópico do guia relacionado a um desafio de currículo, o código completo deve ser adicionado. Isso inclui todo o código seed original, assim como as alterações necessárias para passar em todos os testes do desafio. O modelo a seguir deve ser usado ao criar um novo tópico de dicas/soluções:
+When proposing a solution for a curriculum challenge related Guide topic, the full code must be added. This includes all the original seed code plus any changes needed to pass all the challenge tests. The following template should be used when creating new hints/solutions topics:
````md
# O nome do desafio fica aqui
@@ -477,12 +481,12 @@ Você também é capaz de testar um desafio individualmente seguindo as seguinte
cd curriculum
```
-2. Execute o comando a seguir para cada arquivo de desafio que você fez mudanças (substituindo `challenge-title-goes-here` com o título completo do desafio):
+2. Run the following for each challenge file for which you have changed (replacing `challenge-title-goes-here` with the full title of the challenge):
```
npm run test -- -g challenge-title-goes-here ```
-Quando você verificou que cada desafio modificado passou nos testes, [crie um pull request](how-to-open-a-pull-request.md).
+Once you have verified that each challenge you've worked on passes the tests, [please create a pull request](how-to-open-a-pull-request.md).
> [!TIP] Você pode definir a variável de ambiente `LOCALE` no `.env` no idioma do(s) desafio(s) que precisa testar.
>
@@ -490,7 +494,7 @@ Quando você verificou que cada desafio modificado passou nos testes, [crie um p
### Links úteis
-Criando e editando desafios:
+Creating and Editing Challenges:
1. [Tipos de desafio](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/utils/challenge-types.js#L1-L13) - o que significam os valores do tipo de desafio numérico (enum).
diff --git a/docs/i18n/ukrainian/how-to-work-on-coding-challenges.md b/docs/i18n/ukrainian/how-to-work-on-coding-challenges.md
index af03d7fd4b..36ade2941a 100644
--- a/docs/i18n/ukrainian/how-to-work-on-coding-challenges.md
+++ b/docs/i18n/ukrainian/how-to-work-on-coding-challenges.md
@@ -73,6 +73,10 @@ assert.equal(
);
```
+# --notes--
+
+Extra information for a challenge, in markdown
+
# --seed--
## --before-user-code--
From 9f0e26fddb637f3793b9dd6e22fe6529d44f134b Mon Sep 17 00:00:00 2001
From: "Nicholas Carrigan (he/him)"
Date: Fri, 10 Dec 2021 09:39:02 -0800
Subject: [PATCH 09/63] docs: update steps to enable translation (#44464)
---
docs/how-to-test-translations-locally.md | 83 +++++++++++++-----------
1 file changed, 46 insertions(+), 37 deletions(-)
diff --git a/docs/how-to-test-translations-locally.md b/docs/how-to-test-translations-locally.md
index 0602f4b214..2c95e2956c 100644
--- a/docs/how-to-test-translations-locally.md
+++ b/docs/how-to-test-translations-locally.md
@@ -9,9 +9,10 @@ If you would like to test your translations on a local instance of the freeCodeC
There are a few steps to take in order to allow the codebase to build in your desired language.
-First, visit the `config/i18n/all-langs.js` file to add the language to the available languages list and configure the values. There are four objects here.
+First, visit the `config/i18n/all-langs.ts` file to add the language to the available languages list and configure the values. There are four objects here.
- `availableLangs`: For both the `client` and `curriculum` arrays, add the text name of the language. This is the value that will be used in the `.env` file later.
+- `auditedCerts`: Add the text name of the language as the _key_, and add an array of `SuperBlocks.{cert}` variables as the _value_. This tells the client which certifications are fully translated.
- `i18nextCodes`: These are the ISO language codes for each language. You will need to add the appropriate ISO code for the language you are enabling. These do need to be unique for each language.
- `langDisplayNames`: These are the display names for the language selector in the navigation menu.
- `langCodes`: These are the language codes used for formatting dates and numbers. These should be Unicode CLDR codes instead of ISO codes.
@@ -30,6 +31,45 @@ const availableLangs = {
]
};
+export const auditedCerts = {
+ espanol: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis
+ ],
+ chinese: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ 'chinese-traditional': [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ dothraki: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs
+ ]
+};
+
const i18nextCodes = {
english: 'en',
espanol: 'es',
@@ -55,10 +95,13 @@ const langCodes = {
};
```
-Next, open the `client/src/utils/algolia-locale-setup.js` file. This data is used for the search bar that loads `/news` articles. While it is unlikely that you are going to test this functionality, missing the data for your language can lead to errors when attempting to build the codebase locally.
+Next, open the `client/src/utils/algolia-locale-setup.ts` file. This data is used for the search bar that loads `/news` articles. While it is unlikely that you are going to test this functionality, missing the data for your language can lead to errors when attempting to build the codebase locally.
Add an object for your language to the `algoliaIndices` object. You should use the values for the `english` object for local testing, replacing the `english` key with your language's `availableLangs` value.
+> [!NOTE]
+> If we have already deployed an instance of news in your target language, you can update the values to reflect the live instance. Otherwise, use the English values.
+
If you were to add Dothraki:
```js
@@ -86,40 +129,6 @@ const algoliaIndices = {
};
```
-Next, you will need to tell the client which certifications are translated, and which are still in English. Open the `utils/is-audited.js` file. Within the `auditedCerts`, add a new key with your language's `availableLangs` value. Assign the value of that key to an array containing the _dashed names_ for the certifications that have been translated. Refer to the existing data for those dashed names.
-
-Continuing the work to enable Dothraki - we have translated the first three certifications:
-
-```js
-const auditedCerts = {
- espanol: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures'
- ],
- chinese: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- 'chinese-traditional': [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- dothraki: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries'
- ]
-};
-```
-
Finally, in your `.env` file, set `CLIENT_LOCALE` and `CURRICULUM_LOCALE` to your new language (use the `availableLangs` value.)
```txt
@@ -144,7 +153,7 @@ For the video challenges, you need to change a few things. First add the new loc
...
```
-Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.js` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
+Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.ts` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
```yml
videoLocaleIds:
From 32e59efb234b7ab2c7e1cb918a78f44cb4c0adcf Mon Sep 17 00:00:00 2001
From: Mrugesh Mohapatra <1884376+raisedadead@users.noreply.github.com>
Date: Fri, 10 Dec 2021 23:16:05 +0530
Subject: [PATCH 10/63] docs: enable ukrainian docs (#44450)
---
docs/_translations.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/docs/_translations.md b/docs/_translations.md
index 8aac1485d7..e3439aa2c5 100644
--- a/docs/_translations.md
+++ b/docs/_translations.md
@@ -14,6 +14,7 @@
- [Japanese](/i18n/japanese/index.md)
- [Portuguese](/i18n/portuguese/index.md)
- [Italian](/i18n/italian/index.md)
+- [Ukrainian](/i18n/ukrainian/index.md)
From 6fe6bab4a5ef5bd3e5db3f0bf027ed12265da050 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Fri, 10 Dec 2021 18:48:09 +0000
Subject: [PATCH 11/63] fix(deps): update dependency @stripe/stripe-js to
v1.22.0
---
client/package.json | 2 +-
package-lock.json | 16 ++++++++--------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/client/package.json b/client/package.json
index 86ad1481e0..df926acc3a 100644
--- a/client/package.json
+++ b/client/package.json
@@ -51,7 +51,7 @@
"@loadable/component": "5.15.0",
"@reach/router": "1.3.4",
"@stripe/react-stripe-js": "1.6.0",
- "@stripe/stripe-js": "1.21.2",
+ "@stripe/stripe-js": "1.22.0",
"@types/react-scrollable-anchor": "0.6.1",
"algoliasearch": "4.11.0",
"assert": "2.0.0",
diff --git a/package-lock.json b/package-lock.json
index 76354593ea..91b23bc535 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -219,7 +219,7 @@
"@loadable/component": "5.15.0",
"@reach/router": "1.3.4",
"@stripe/react-stripe-js": "1.6.0",
- "@stripe/stripe-js": "1.21.2",
+ "@stripe/stripe-js": "1.22.0",
"@types/react-scrollable-anchor": "0.6.1",
"algoliasearch": "4.11.0",
"assert": "2.0.0",
@@ -14001,9 +14001,9 @@
}
},
"node_modules/@stripe/stripe-js": {
- "version": "1.21.2",
- "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.21.2.tgz",
- "integrity": "sha512-iIXe+XF9XdyO4/1i+TPRdsjy4rFOkYLeCsmB/uuSrCVs+Y0nxCdaRK3oD6n7c7lEi1sxDbAQX615wlt9E4EqWQ=="
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.22.0.tgz",
+ "integrity": "sha512-fm8TR8r4LwbXgBIYdPmeMjJJkxxFC66tvoliNnmXOpUgZSgQKoNPW3ON0ZphZIiif1oqWNhAaSrr7tOvGu+AFg=="
},
"node_modules/@szmarczak/http-timer": {
"version": "4.0.6",
@@ -57686,7 +57686,7 @@
"@loadable/component": "5.15.0",
"@reach/router": "1.3.4",
"@stripe/react-stripe-js": "1.6.0",
- "@stripe/stripe-js": "1.21.2",
+ "@stripe/stripe-js": "1.22.0",
"@testing-library/jest-dom": "5.16.1",
"@testing-library/react": "12.1.2",
"@types/react-scrollable-anchor": "0.6.1",
@@ -66552,9 +66552,9 @@
}
},
"@stripe/stripe-js": {
- "version": "1.21.2",
- "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.21.2.tgz",
- "integrity": "sha512-iIXe+XF9XdyO4/1i+TPRdsjy4rFOkYLeCsmB/uuSrCVs+Y0nxCdaRK3oD6n7c7lEi1sxDbAQX615wlt9E4EqWQ=="
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.22.0.tgz",
+ "integrity": "sha512-fm8TR8r4LwbXgBIYdPmeMjJJkxxFC66tvoliNnmXOpUgZSgQKoNPW3ON0ZphZIiif1oqWNhAaSrr7tOvGu+AFg=="
},
"@szmarczak/http-timer": {
"version": "4.0.6",
From a2f799866f7aba24c95f667d5491c5aea6355588 Mon Sep 17 00:00:00 2001
From: Mrugesh Mohapatra <1884376+raisedadead@users.noreply.github.com>
Date: Sat, 11 Dec 2021 02:41:52 +0530
Subject: [PATCH 12/63] feat(learn): enable ukrainian certifications (#44454)
* feat(learn): enable ukrainian certifications
* fix: add algolia config
* chore: apply suggestions from code review
Co-authored-by: Nicholas Carrigan
---
client/src/utils/algolia-locale-setup.ts | 4 ++++
config/i18n/all-langs.ts | 29 ++++++++++++++++++++----
2 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/client/src/utils/algolia-locale-setup.ts b/client/src/utils/algolia-locale-setup.ts
index 5cbec735b1..a5cd08e4a3 100644
--- a/client/src/utils/algolia-locale-setup.ts
+++ b/client/src/utils/algolia-locale-setup.ts
@@ -29,6 +29,10 @@ const algoliaIndices = {
portuguese: {
name: 'news',
searchPage: 'https://www.freecodecamp.org/news/search/'
+ },
+ ukrainian: {
+ name: 'news',
+ searchPage: 'https://www.freecodecamp.org/news/search/'
}
};
diff --git a/config/i18n/all-langs.ts b/config/i18n/all-langs.ts
index b2eba86d7b..667e03a8c3 100644
--- a/config/i18n/all-langs.ts
+++ b/config/i18n/all-langs.ts
@@ -15,7 +15,8 @@ export const availableLangs = {
'chinese',
'chinese-traditional',
'italian',
- 'portuguese'
+ 'portuguese',
+ 'ukrainian'
],
curriculum: [
'english',
@@ -23,7 +24,8 @@ export const availableLangs = {
'chinese',
'chinese-traditional',
'italian',
- 'portuguese'
+ 'portuguese',
+ 'ukrainian'
]
};
@@ -92,6 +94,20 @@ export const auditedCerts = {
SuperBlocks.MachineLearningPy,
SuperBlocks.CodingInterviewPrep,
SuperBlocks.RelationalDb
+ ],
+ ukrainian: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy,
+ SuperBlocks.CodingInterviewPrep,
+ SuperBlocks.RelationalDb
]
};
@@ -109,7 +125,8 @@ export const i18nextCodes = {
chinese: 'zh',
'chinese-traditional': 'zh-Hant',
italian: 'it',
- portuguese: 'pt-BR'
+ portuguese: 'pt-BR',
+ ukrainian: 'uk'
};
// These are for the language selector dropdown menu in the footer
@@ -119,7 +136,8 @@ export const langDisplayNames = {
chinese: '中文(简体字)',
'chinese-traditional': '中文(繁體字)',
italian: 'Italiano',
- portuguese: 'Português'
+ portuguese: 'Português',
+ ukrainian: 'Українська'
};
/* These are for formatting dates and numbers. Used with JS .toLocaleString().
@@ -132,5 +150,6 @@ export const langCodes = {
chinese: 'zh',
'chinese-traditional': 'zh-Hant',
italian: 'it',
- portuguese: 'pt-BR'
+ portuguese: 'pt-BR',
+ ukrainian: 'uk'
};
From 6ce8738fc013bb830bd467d223f7bea8fab42c3f Mon Sep 17 00:00:00 2001
From: Oliver Eyton-Williams
Date: Fri, 10 Dec 2021 23:35:46 +0100
Subject: [PATCH 13/63] refactor: remove useless warning (#44465)
---
client/package.json | 2 +-
tools/challenge-parser/translation-parser/index.js | 4 +---
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/client/package.json b/client/package.json
index df926acc3a..505718776c 100644
--- a/client/package.json
+++ b/client/package.json
@@ -24,7 +24,7 @@
"build:workers": "cross-env NODE_OPTIONS=\"--max-old-space-size=7168\" webpack --config ./webpack-workers.js",
"clean": "gatsby clean",
"predevelop": "tsc -p ../tools/ && node ../tools/scripts/build/ensure-env.js && npm run build:workers -- --env development",
- "develop": "cross-env NODE_OPTIONS=\"--max-old-space-size=4000\" gatsby develop --inspect=9230",
+ "develop": "cross-env NODE_OPTIONS=\"--max-old-space-size=5000\" gatsby develop --inspect=9230",
"lint": "node ./i18n/schema-validation.js",
"serve": "gatsby serve -p 8000",
"serve-ci": "serve -l 8000 -c ../serve.json public",
diff --git a/tools/challenge-parser/translation-parser/index.js b/tools/challenge-parser/translation-parser/index.js
index 4283cfd205..841272650d 100644
--- a/tools/challenge-parser/translation-parser/index.js
+++ b/tools/challenge-parser/translation-parser/index.js
@@ -17,9 +17,7 @@ exports.translateComments = (text, lang, dict, codeLang) => {
exports.translateCommentsInChallenge = (challenge, lang, dict) => {
const challClone = cloneDeep(challenge);
- if (!challClone.challengeFiles) {
- console.warn(`Challenge ${challClone.title} has no seed to translate`);
- } else {
+ if (challClone?.challengeFiles) {
challClone.challengeFiles.forEach(challengeFile => {
if (challengeFile.contents) {
let { text, commentCounts } = this.translateComments(
From 8fb945c5a89039b5544571fda62e443725135f96 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Fri, 10 Dec 2021 22:39:39 +0000
Subject: [PATCH 14/63] fix(deps): update dependency react-i18next to v11.15.0
---
client/package.json | 2 +-
package-lock.json | 24 ++++++++++++------------
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/client/package.json b/client/package.json
index 505718776c..bf8ca18bbc 100644
--- a/client/package.json
+++ b/client/package.json
@@ -98,7 +98,7 @@
"react-ga": "3.3.0",
"react-helmet": "6.1.0",
"react-hotkeys": "2.0.0",
- "react-i18next": "11.14.3",
+ "react-i18next": "11.15.0",
"react-instantsearch-dom": "6.17.0",
"react-lazy-load": "3.1.13",
"react-monaco-editor": "0.40.0",
diff --git a/package-lock.json b/package-lock.json
index 91b23bc535..699321f40a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -266,7 +266,7 @@
"react-ga": "3.3.0",
"react-helmet": "6.1.0",
"react-hotkeys": "2.0.0",
- "react-i18next": "11.14.3",
+ "react-i18next": "11.15.0",
"react-instantsearch-dom": "6.17.0",
"react-lazy-load": "3.1.13",
"react-monaco-editor": "0.40.0",
@@ -31258,8 +31258,7 @@
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="
},
"node_modules/html-minifier-terser": {
"version": "6.1.0",
@@ -45153,11 +45152,12 @@
}
},
"node_modules/react-i18next": {
- "version": "11.14.3",
- "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.14.3.tgz",
- "integrity": "sha512-Hf2aanbKgYxPjG8ZdKr+PBz9sY6sxXuZWizxCYyJD2YzvJ0W9JTQcddVEjDaKyBoCyd3+5HTerdhc9ehFugc6g==",
+ "version": "11.15.0",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.15.0.tgz",
+ "integrity": "sha512-7JOIO7KkKSxB7Ycof6ilx9aQ/tviInTqN2sqHyKrjd5MKHyFyKyXVkYrb7KmG/ISFPA4ugWwor5Qsq8IVyQ/Cg==",
"dependencies": {
"@babel/runtime": "^7.14.5",
+ "html-escaper": "^2.0.2",
"html-parse-stringify": "^3.0.1"
},
"peerDependencies": {
@@ -57743,7 +57743,7 @@
"react-ga": "3.3.0",
"react-helmet": "6.1.0",
"react-hotkeys": "2.0.0",
- "react-i18next": "11.14.3",
+ "react-i18next": "11.15.0",
"react-instantsearch-dom": "6.17.0",
"react-lazy-load": "3.1.13",
"react-monaco-editor": "0.40.0",
@@ -80369,8 +80369,7 @@
"html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="
},
"html-minifier-terser": {
"version": "6.1.0",
@@ -90868,11 +90867,12 @@
}
},
"react-i18next": {
- "version": "11.14.3",
- "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.14.3.tgz",
- "integrity": "sha512-Hf2aanbKgYxPjG8ZdKr+PBz9sY6sxXuZWizxCYyJD2YzvJ0W9JTQcddVEjDaKyBoCyd3+5HTerdhc9ehFugc6g==",
+ "version": "11.15.0",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.15.0.tgz",
+ "integrity": "sha512-7JOIO7KkKSxB7Ycof6ilx9aQ/tviInTqN2sqHyKrjd5MKHyFyKyXVkYrb7KmG/ISFPA4ugWwor5Qsq8IVyQ/Cg==",
"requires": {
"@babel/runtime": "^7.14.5",
+ "html-escaper": "^2.0.2",
"html-parse-stringify": "^3.0.1"
}
},
From 48f88428e84583337cb5ff58ec0c6574a0876569 Mon Sep 17 00:00:00 2001
From: Oliver Eyton-Williams
Date: Sat, 11 Dec 2021 10:04:16 +0100
Subject: [PATCH 15/63] test: login more directly (#44467)
* test: login more directly
* test: separate login from other visits
In a single test, Cypress can only visit within a single domain, hence
the separation.
* chore: fail slowly for all strategies
* test: user certified user for showing cert
* test: fix and cleanup certifications
---
.github/workflows/cypress.yml | 1 +
.github/workflows/node.js-tests-upcoming.yml | 2 +
.github/workflows/node.js-tests.yml | 4 +
cypress/integration/ShowCertification.js | 90 +++----------------
.../integration/learn/challenges/projects.js | 4 +-
.../learn/common-components/navbar.js | 46 ++++++----
.../integration/settings/certifications.js | 73 ++++++---------
cypress/integration/settings/settings.js | 4 +-
.../integration/settings/username-change.js | 21 ++++-
cypress/support/commands.js | 10 +--
tools/scripts/seed/certifiedUserData.js | 2 +-
11 files changed, 100 insertions(+), 157 deletions(-)
diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml
index f6cecb798a..52e277b419 100644
--- a/.github/workflows/cypress.yml
+++ b/.github/workflows/cypress.yml
@@ -62,6 +62,7 @@ jobs:
runs-on: ubuntu-20.04
needs: build-client
strategy:
+ fail-fast: false
matrix:
browsers: [chrome, firefox, electron]
node-version: [16.x]
diff --git a/.github/workflows/node.js-tests-upcoming.yml b/.github/workflows/node.js-tests-upcoming.yml
index 8d45e5ef7d..ca3254ae99 100644
--- a/.github/workflows/node.js-tests-upcoming.yml
+++ b/.github/workflows/node.js-tests-upcoming.yml
@@ -15,6 +15,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
+ fail-fast: false
matrix:
node-version: [16.x]
@@ -47,6 +48,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
+ fail-fast: false
matrix:
node-version: [16.x]
diff --git a/.github/workflows/node.js-tests.yml b/.github/workflows/node.js-tests.yml
index 0e6aae4e76..9d6f8a81b4 100644
--- a/.github/workflows/node.js-tests.yml
+++ b/.github/workflows/node.js-tests.yml
@@ -10,6 +10,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
+ fail-fast: false
matrix:
node-version: [16.x]
@@ -39,6 +40,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
+ fail-fast: false
matrix:
node-version: [16.x]
@@ -70,6 +72,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
+ fail-fast: false
matrix:
node-version: [16.x]
@@ -103,6 +106,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
+ fail-fast: false
matrix:
node-version: [16.x]
locale: [chinese, espanol]
diff --git a/cypress/integration/ShowCertification.js b/cypress/integration/ShowCertification.js
index eaad82c898..c740d17325 100644
--- a/cypress/integration/ShowCertification.js
+++ b/cypress/integration/ShowCertification.js
@@ -1,112 +1,44 @@
-import { SuperBlocks } from '../../config/certification-settings';
-
-const certificationUrl = '/certification/developmentuser/responsive-web-design';
-const projects = {
- superBlock: SuperBlocks.RespWebDesign,
- block: 'responsive-web-design-projects',
- challenges: [
- {
- slug: 'build-a-tribute-page',
- solution: 'https://codepen.io/moT01/pen/ZpJpKp'
- },
- {
- slug: 'build-a-survey-form',
- solution: 'https://codepen.io/moT01/pen/LrrjGz?editors=1010'
- },
- {
- slug: 'build-a-product-landing-page',
- solution: 'https://codepen.io/moT01/full/qKyKYL/'
- },
- {
- slug: 'build-a-technical-documentation-page',
- solution: 'https://codepen.io/moT01/full/JBvzNL/'
- },
- {
- slug: 'build-a-personal-portfolio-webpage',
- solution: 'https://codepen.io/moT01/pen/vgOaoJ'
- }
- ]
-};
+const certifiedUser = '/certification/certifieduser/responsive-web-design';
describe('A certification,', function () {
before(() => {
- cy.exec('npm run seed');
- cy.login();
-
- // submit projects for certificate
- const { superBlock, block, challenges } = projects;
- challenges.forEach(({ slug, solution }) => {
- const url = `/learn/${superBlock}/${block}/${slug}`;
- cy.visit(url);
- cy.get('#dynamic-front-end-form')
- .get('#solution')
- .type(solution, { force: true, delay: 0 });
- cy.contains("I've completed this challenge")
- .should('not.be.disabled')
- .click();
- cy.contains('Submit and go to next challenge').click().wait(1000);
- });
- cy.get('.donation-modal').should('be.visible');
- cy.visit('/settings');
-
- // set user settings to public to claim a cert
- cy.get('label:contains(Public)>input').each(el => {
- if (!/toggle-active/.test(el[0].parentElement.className)) {
- cy.wrap(el).click({ force: true });
- cy.wait(1000);
- }
- });
-
- // if honest policy not accepted
- cy.get('.honesty-policy button').then(btn => {
- if (btn[0].innerText === 'Agree') {
- btn[0].click({ force: true });
- cy.wait(1000);
- }
- });
-
- // claim certificate
- cy.get('a[href*="developmentuser/responsive-web-design"]').click({
- force: true
- });
+ cy.exec('npm run seed:certified-user');
});
describe('while viewing your own,', function () {
- before(() => {
+ beforeEach(() => {
cy.login();
- cy.visit(certificationUrl);
});
-
it('should render a LinkedIn button', function () {
+ cy.visit(certifiedUser);
cy.contains('Add this certification to my LinkedIn profile')
.should('have.attr', 'href')
.and(
'match',
// eslint-disable-next-line max-len
- /https:\/\/www\.linkedin\.com\/profile\/add\?startTask=CERTIFICATION_NAME&name=Responsive Web Design&organizationId=4831032&issueYear=\d\d\d\d&issueMonth=\d\d?&certUrl=https:\/\/freecodecamp\.org\/certification\/developmentuser\/responsive-web-design/
+ /https:\/\/www\.linkedin\.com\/profile\/add\?startTask=CERTIFICATION_NAME&name=Responsive Web Design&organizationId=4831032&issueYear=\d\d\d\d&issueMonth=\d\d?&certUrl=https:\/\/freecodecamp\.org\/certification\/certifieduser\/responsive-web-design/
);
});
it('should render a Twitter button', function () {
+ cy.visit(certifiedUser);
cy.contains('Share this certification on Twitter').should(
'have.attr',
'href',
- 'https://twitter.com/intent/tweet?text=I just earned the Responsive Web Design certification @freeCodeCamp! Check it out here: https://freecodecamp.org/certification/developmentuser/responsive-web-design'
+ 'https://twitter.com/intent/tweet?text=I just earned the Responsive Web Design certification @freeCodeCamp! Check it out here: https://freecodecamp.org/certification/certifieduser/responsive-web-design'
);
});
- it("should be issued with today's date", () => {
- const date = new Date();
- const issued = `Issued\xa0${new Intl.DateTimeFormat('en-US', {
- month: 'long'
- }).format(date)} ${date.getDate()}, ${date.getFullYear()}`;
+ it('should be issued with the submission date', () => {
+ cy.visit(certifiedUser);
+ const issued = `Issued\xa0August 3, 2018`;
cy.get('[data-cy=issue-date]').should('have.text', issued);
});
});
describe("while viewing someone else's,", function () {
before(() => {
- cy.visit(certificationUrl);
+ cy.visit(certifiedUser);
});
it('should display certificate', function () {
diff --git a/cypress/integration/learn/challenges/projects.js b/cypress/integration/learn/challenges/projects.js
index f2a41d6148..08d736c8e6 100644
--- a/cypress/integration/learn/challenges/projects.js
+++ b/cypress/integration/learn/challenges/projects.js
@@ -34,6 +34,7 @@ const pythonProjects = {
describe('project submission', () => {
beforeEach(() => {
cy.exec('npm run seed');
+ cy.login();
});
// NOTE: this will fail once challenge tests are added.
it('Should be possible to submit Python projects', () => {
@@ -46,7 +47,7 @@ describe('project submission', () => {
.type('https://replit.com/@camperbot/python-project#main.py');
cy.contains("I've completed this challenge").click();
- cy.contains('Go to next challenge');
+ cy.contains('go to next challenge');
// clicking on 'Go to next challenge' seems to have caused flakiness, so
// it's commented out until we figure out why.
// cy.contains('Go to next challenge').click();
@@ -61,7 +62,6 @@ describe('project submission', () => {
'JavaScript projects can be submitted and then viewed in /settings and on the certifications',
{ browser: 'electron' },
() => {
- cy.login();
cy.fixture('../../config/curriculum.json').then(curriculum => {
const { challenges, meta } =
curriculum[SuperBlocks.JsAlgoDataStruct].blocks[
diff --git a/cypress/integration/learn/common-components/navbar.js b/cypress/integration/learn/common-components/navbar.js
index 6f0a6701ca..928cc7ee71 100644
--- a/cypress/integration/learn/common-components/navbar.js
+++ b/cypress/integration/learn/common-components/navbar.js
@@ -32,7 +32,7 @@ function waitForAppStart() {
});
}
-describe('Navbar', () => {
+describe('Navbar when logged out', () => {
beforeEach(() => {
appHasStarted = false;
cy.visit('/', {
@@ -41,6 +41,32 @@ describe('Navbar', () => {
cy.viewport(1300, 660);
});
+ it('Should have a "Sign in" button', () => {
+ cy.contains("[data-test-label='landing-small-cta']", 'Sign in');
+ });
+
+ it(
+ 'Should have `Sign in` link on landing and learn pages' +
+ ' when not signed in',
+ () => {
+ cy.contains(selectors.smallCallToAction, 'Sign in');
+ cy.get(selectors.menuButton).click();
+ cy.get(selectors.navigationLinks).contains('Curriculum').click();
+ cy.contains(selectors.smallCallToAction, 'Sign in');
+ }
+ );
+});
+
+describe('Navbar Logged in', () => {
+ beforeEach(() => {
+ cy.login();
+ appHasStarted = false;
+ cy.visit('/', {
+ onBeforeLoad: spyOnListener
+ }).then(waitForAppStart);
+ cy.viewport(1300, 660);
+ });
+
it('Should render properly', () => {
cy.get('#universal-nav').should('be.visible');
cy.get('#universal-nav').should('have.class', 'universal-nav');
@@ -56,10 +82,6 @@ describe('Navbar', () => {
}
);
- it('Should have a "Sign in" button', () => {
- cy.contains("[data-test-label='landing-small-cta']", 'Sign in');
- });
-
// have the curriculum and CTA on landing and /learn pages.
it(
'Should have `Radio`, `Forum`, and `Curriculum` links on landing and learn pages' +
@@ -75,32 +97,18 @@ describe('Navbar', () => {
}
);
- it(
- 'Should have `Sign in` link on landing and learn pages' +
- ' when not signed in',
- () => {
- cy.contains(selectors.smallCallToAction, 'Sign in');
- cy.get(selectors.menuButton).click();
- cy.get(selectors.navigationLinks).contains('Curriculum').click();
- cy.contains(selectors.smallCallToAction, 'Sign in');
- }
- );
-
it('Should have `Profile` link when user is signed in', () => {
- cy.login();
cy.get(selectors.menuButton).click();
cy.get(selectors.navigationLinks).contains('Profile').click();
cy.url().should('include', '/developmentuser');
});
it('Should have a profile image with class `default-border`', () => {
- cy.login();
cy.get(selectors.avatarContainer).should('have.class', 'default-border');
cy.get(selectors.defaultAvatar).should('exist');
});
it('Should have a profile image with dimensions that are <= 31px', () => {
- cy.login();
cy.get(selectors.avatarImage).invoke('width').should('lte', 31);
cy.get(selectors.avatarImage).invoke('height').should('lte', 31);
});
diff --git a/cypress/integration/settings/certifications.js b/cypress/integration/settings/certifications.js
index f566d0efc8..8d6daa5b90 100644
--- a/cypress/integration/settings/certifications.js
+++ b/cypress/integration/settings/certifications.js
@@ -1,57 +1,40 @@
import '@testing-library/cypress/add-commands';
describe('Settings certifications area', () => {
- before(() => {
- cy.exec('npm run seed');
- cy.login();
- cy.visit('/settings');
- });
-
describe('initially', () => {
- it('Should render 15 "Claim Certification" buttons', () => {
+ before(() => {
+ cy.exec('npm run seed');
+ cy.login();
+ });
+
+ it('Should render the default settings page', () => {
+ cy.visit('/settings/');
cy.findAllByText('Claim Certification').should($btns => {
expect($btns).to.have.length(15);
});
+ cy.findByText('Show Certification').should('not.exist');
+ cy.contains('Agree');
+ cy.contains('Claim Certification').click();
+ cy.contains(
+ 'To claim a certification, you must first accept our academic honesty policy'
+ );
+ });
+ });
+
+ describe('after isHonest', () => {
+ before(() => {
+ cy.exec('npm run seed');
+ cy.login();
});
- it('Should render zero "Show Certification" buttons', () => {
- cy.contains('Show Certification').should('not.exist');
- });
-
- it('Should render one "Agree" button', () => {
- cy.contains('Agree').should('exist');
- });
-
- describe('before isHonest', () => {
- it('Should show "must agree" message when trying to claim a cert', () => {
- cy.contains('Claim Certification').click();
- cy.contains(
- 'To claim a certification, you must first accept our academic honesty policy'
- ).should('exist');
- });
- });
-
- describe('after isHonest', () => {
- beforeEach(() => {
- cy.visit('/');
- cy.login();
- cy.visit('/settings');
- });
-
- it('Should render "You have accepted our Academic Honesty Policy." button after clicking "Agree"', () => {
- cy.contains('Agree').click({ force: true });
- cy.contains('You have accepted our Academic Honesty Policy.').should(
- 'exist'
- );
- });
-
- it('Should show "incompleted projects" message when clicking "Claim Certification"', () => {
- cy.contains('Claim Certification').click({ force: true });
-
- cy.contains(
- 'It looks like you have not completed the necessary steps. Please complete the required projects to claim the Responsive Web Design Certification'
- ).should('exist');
- });
+ it('Should update the user as they try to claim their certifications', () => {
+ cy.visit('/settings');
+ cy.contains('Agree').click();
+ cy.contains('You have accepted our Academic Honesty Policy.');
+ cy.contains('Claim Certification').click();
+ cy.contains(
+ 'It looks like you have not completed the necessary steps. Please complete the required projects to claim the Responsive Web Design Certification'
+ );
});
});
});
diff --git a/cypress/integration/settings/settings.js b/cypress/integration/settings/settings.js
index 5a40f885f8..c88efcf73f 100644
--- a/cypress/integration/settings/settings.js
+++ b/cypress/integration/settings/settings.js
@@ -1,6 +1,8 @@
describe('Settings', () => {
- it('should be possible to reset your progress', () => {
+ before(() => {
cy.login();
+ });
+ it('should be possible to reset your progress', () => {
cy.visit('/settings');
cy.contains('Reset all of my progress').click();
cy.contains('Reset everything. I want to start from the beginning').click();
diff --git a/cypress/integration/settings/username-change.js b/cypress/integration/settings/username-change.js
index ca13b3a1f9..d1bb2d75ab 100644
--- a/cypress/integration/settings/username-change.js
+++ b/cypress/integration/settings/username-change.js
@@ -1,14 +1,18 @@
describe('Username input field', () => {
beforeEach(() => {
cy.login();
+ });
+
+ function goToSettings() {
cy.visit('/settings');
// Setting aliases here
cy.get('input[name=username-settings]').as('usernameInput');
cy.get('form#usernameSettings').as('usernameForm');
- });
+ }
it('Should be possible to type', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('twaha', { force: true })
@@ -16,6 +20,7 @@ describe('Username input field', () => {
});
it('Should show message when validating name', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('twaha', { force: true });
@@ -28,6 +33,7 @@ describe('Username input field', () => {
});
it('Should show username is available if it is', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('brad', { force: true });
@@ -41,6 +47,7 @@ describe('Username input field', () => {
});
it('Should info message if username is available', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('mrugesh', { force: true });
@@ -58,6 +65,7 @@ describe('Username input field', () => {
// eslint-disable-next-line
it('Should be able to click the `Save` button if username is avalable', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('oliver', { force: true });
@@ -68,6 +76,7 @@ describe('Username input field', () => {
});
it('Should show username is unavailable if it is', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('twaha', { force: true });
@@ -82,6 +91,7 @@ describe('Username input field', () => {
// eslint-disable-next-line
it('Should not be possible to click the `Save` button if username is unavailable', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('twaha', { force: true });
@@ -97,6 +107,7 @@ describe('Username input field', () => {
});
it('Should not show anything if user types their current name', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('developmentuser', { force: true });
@@ -106,6 +117,7 @@ describe('Username input field', () => {
// eslint-disable-next-line max-len
it('Should not be possible to click the `Save` button if user types their current name', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('developmentuser', { force: true });
@@ -114,6 +126,7 @@ describe('Username input field', () => {
});
it('Should show warning if username includes invalid character', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('Quincy Larson', { force: true });
@@ -128,6 +141,7 @@ describe('Username input field', () => {
// eslint-disable-next-line max-len
it('Should not be able to click the `Save` button if username includes invalid character', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('Quincy Larson', { force: true });
@@ -136,6 +150,7 @@ describe('Username input field', () => {
});
it('Should change username if `Save` button is clicked', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('quincy', { force: true });
@@ -149,6 +164,7 @@ describe('Username input field', () => {
});
it('Should change username with uppercase characters if `Save` button is clicked', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('Quincy', { force: true });
@@ -162,6 +178,7 @@ describe('Username input field', () => {
});
it('Should show flash message showing username has been updated', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('nhcarrigan', { force: true });
@@ -181,6 +198,7 @@ describe('Username input field', () => {
});
it('Should be able to close the shown flash message', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('bjorno', { force: true });
@@ -197,6 +215,7 @@ describe('Username input field', () => {
});
it('Should change username if enter is pressed', () => {
+ goToSettings();
cy.get('@usernameInput')
.clear({ force: true })
.type('symbol', { force: true });
diff --git a/cypress/support/commands.js b/cypress/support/commands.js
index af020d1e21..c85d078178 100644
--- a/cypress/support/commands.js
+++ b/cypress/support/commands.js
@@ -33,14 +33,7 @@
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => {});
Cypress.Commands.add('login', () => {
- cy.visit('/');
- cy.contains("Get started (it's free)").click();
- cy.location({ timeout: 10000 }).should(loc => {
- // I'm not 100% sure why logins get redirected to /learn/ via 301 in
- // development, but not in production, but they do. Hence to make it easier
- // work on tests, we'll just allow for both.
- expect(loc.pathname).to.match(/^\/learn\/?$/);
- });
+ cy.visit('http://localhost:3000/signin');
cy.contains('Welcome back');
});
@@ -60,7 +53,6 @@ Cypress.Commands.add('toggleAll', () => {
});
Cypress.Commands.add('resetUsername', () => {
- cy.login();
cy.visit('/settings');
cy.get('@usernameInput')
diff --git a/tools/scripts/seed/certifiedUserData.js b/tools/scripts/seed/certifiedUserData.js
index 7962f1040d..9b3e21ccc9 100644
--- a/tools/scripts/seed/certifiedUserData.js
+++ b/tools/scripts/seed/certifiedUserData.js
@@ -4635,7 +4635,7 @@ module.exports = {
rand: 0.6126749173148205,
theme: 'default',
profileUI: {
- isLocked: true,
+ isLocked: false,
showAbout: true,
showCerts: true,
showDonation: true,
From 76f39a748dfe8b0bb499593e1f069d0fedbb53f2 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Sat, 11 Dec 2021 09:54:15 +0000
Subject: [PATCH 16/63] chore(deps): update dependency rollup to v2.61.1
---
package-lock.json | 16 ++++++++--------
tools/ui-components/package.json | 2 +-
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 699321f40a..d946e22e33 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -47140,9 +47140,9 @@
"integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w="
},
"node_modules/rollup": {
- "version": "2.61.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.61.0.tgz",
- "integrity": "sha512-teQ+T1mUYbyvGyUavCodiyA9hD4DxwYZJwr/qehZGhs1Z49vsmzelMVYMxGU4ZhGRKxYPupHuz5yzm/wj7VpWA==",
+ "version": "2.61.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.61.1.tgz",
+ "integrity": "sha512-BbTXlEvB8d+XFbK/7E5doIcRtxWPRiqr0eb5vQ0+2paMM04Ye4PZY5nHOQef2ix24l/L0SpLd5hwcH15QHPdvA==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
@@ -55220,7 +55220,7 @@
"postcss": "8.4.4",
"postcss-import": "14.0.2",
"rimraf": "3.0.2",
- "rollup": "2.61.0",
+ "rollup": "2.61.1",
"rollup-plugin-postcss": "4.0.2",
"rollup-plugin-terser": "7.0.2",
"tailwindcss": "2.2.19"
@@ -58097,7 +58097,7 @@
"react": "16.14.0",
"react-dom": "16.14.0",
"rimraf": "3.0.2",
- "rollup": "2.61.0",
+ "rollup": "2.61.1",
"rollup-plugin-postcss": "4.0.2",
"rollup-plugin-terser": "7.0.2",
"tailwindcss": "2.2.19",
@@ -92414,9 +92414,9 @@
"integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w="
},
"rollup": {
- "version": "2.61.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.61.0.tgz",
- "integrity": "sha512-teQ+T1mUYbyvGyUavCodiyA9hD4DxwYZJwr/qehZGhs1Z49vsmzelMVYMxGU4ZhGRKxYPupHuz5yzm/wj7VpWA==",
+ "version": "2.61.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.61.1.tgz",
+ "integrity": "sha512-BbTXlEvB8d+XFbK/7E5doIcRtxWPRiqr0eb5vQ0+2paMM04Ye4PZY5nHOQef2ix24l/L0SpLd5hwcH15QHPdvA==",
"dev": true,
"requires": {
"fsevents": "~2.3.2"
diff --git a/tools/ui-components/package.json b/tools/ui-components/package.json
index 93596d4629..d1402cddc7 100644
--- a/tools/ui-components/package.json
+++ b/tools/ui-components/package.json
@@ -48,7 +48,7 @@
"postcss": "8.4.4",
"postcss-import": "14.0.2",
"rimraf": "3.0.2",
- "rollup": "2.61.0",
+ "rollup": "2.61.1",
"rollup-plugin-postcss": "4.0.2",
"rollup-plugin-terser": "7.0.2",
"tailwindcss": "2.2.19"
From d896de60d990107a90024be9928e408739018f8c Mon Sep 17 00:00:00 2001
From: camperbot
Date: Sat, 11 Dec 2021 18:48:37 +0530
Subject: [PATCH 17/63] chore(i18n,learn): update translations (#44473)
---
client/i18n/locales/portuguese/translations.json | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/client/i18n/locales/portuguese/translations.json b/client/i18n/locales/portuguese/translations.json
index f904713164..6706fa5825 100644
--- a/client/i18n/locales/portuguese/translations.json
+++ b/client/i18n/locales/portuguese/translations.json
@@ -287,16 +287,16 @@
"info": "Informações",
"code": "Código",
"tests": "Testes",
- "restart": "Restart",
- "restart-step": "Restart Step",
+ "restart": "Reiniciar",
+ "restart-step": "Reiniciar etapa",
"console": "Console",
- "notes": "Notes",
+ "notes": "Observações",
"preview": "Pré-visualizar"
},
"help-translate": "Ainda estamos traduzindo as certificações a seguir.",
"help-translate-link": "Ajude-nos a traduzir.",
"season-greetings": "Boas festas de fim de ano para você e sua família.",
- "season-greetings-fcc": "Season's Greetings from the freeCodeCamp community 🎉",
+ "season-greetings-fcc": "Boas festas de fim de ano, da comunidade do freeCodeCamp 🎉",
"if-getting-value": "Se você está conseguindo tirar proveito do conteúdo do freeCodeCamp, agora é um ótimo momento para fazer sua doação e apoiar nossa missão sem fins lucrativos.",
"project-preview-title": "Aqui está uma prévia do que você vai criar"
},
From a4dc1603991dae8ec31add4bf7e4a406d47e0582 Mon Sep 17 00:00:00 2001
From: camperbot
Date: Sat, 11 Dec 2021 19:15:35 +0530
Subject: [PATCH 18/63] chore(i18n,docs): update translations (#44472)
---
docs/i18n/chinese/devops.md | 2 +-
.../how-to-test-translations-locally.md | 82 ++++++++------
docs/i18n/espanol/devops.md | 2 +-
.../how-to-test-translations-locally.md | 88 ++++++++-------
docs/i18n/italian/devops.md | 2 +-
.../how-to-test-translations-locally.md | 106 ++++++++++--------
docs/i18n/japanese/devops.md | 2 +-
.../how-to-test-translations-locally.md | 82 ++++++++------
docs/i18n/portuguese/devops.md | 2 +-
.../how-to-test-translations-locally.md | 106 ++++++++++--------
.../how-to-work-on-coding-challenges.md | 88 +++++++--------
docs/i18n/ukrainian/devops.md | 2 +-
.../how-to-test-translations-locally.md | 82 ++++++++------
13 files changed, 347 insertions(+), 299 deletions(-)
diff --git a/docs/i18n/chinese/devops.md b/docs/i18n/chinese/devops.md
index e7241c9de4..a9cf732df2 100644
--- a/docs/i18n/chinese/devops.md
+++ b/docs/i18n/chinese/devops.md
@@ -536,7 +536,7 @@ Provisioning VMs with the Code
2. Update `npm` and install PM2 and setup `logrotate` and startup on boot
```console
- npm i -g npm@6
+ npm i -g npm@8
npm i -g pm2
npm install -g serve
pm2 install pm2-logrotate
diff --git a/docs/i18n/chinese/how-to-test-translations-locally.md b/docs/i18n/chinese/how-to-test-translations-locally.md
index c0ff23e4c1..8ef754c12c 100644
--- a/docs/i18n/chinese/how-to-test-translations-locally.md
+++ b/docs/i18n/chinese/how-to-test-translations-locally.md
@@ -8,9 +8,10 @@ If you would like to test your translations on a local instance of the freeCodeC
There are a few steps to take in order to allow the codebase to build in your desired language.
-First, visit the `config/i18n/all-langs.js` file to add the language to the available languages list and configure the values. There are four objects here.
+First, visit the `config/i18n/all-langs.ts` file to add the language to the available languages list and configure the values. There are four objects here.
- `availableLangs`: For both the `client` and `curriculum` arrays, add the text name of the language. This is the value that will be used in the `.env` file later.
+- `auditedCerts`: Add the text name of the language as the _key_, and add an array of `SuperBlocks.{cert}` variables as the _value_. This tells the client which certifications are fully translated.
- `i18nextCodes`: These are the ISO language codes for each language. You will need to add the appropriate ISO code for the language you are enabling. These do need to be unique for each language.
- `langDisplayNames`: These are the display names for the language selector in the navigation menu.
- `langCodes`: These are the language codes used for formatting dates and numbers. These should be Unicode CLDR codes instead of ISO codes.
@@ -29,6 +30,45 @@ const availableLangs = {
]
};
+export const auditedCerts = {
+ espanol: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis
+ ],
+ chinese: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ 'chinese-traditional': [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ dothraki: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs
+ ]
+};
+
const i18nextCodes = {
english: 'en',
espanol: 'es',
@@ -54,10 +94,12 @@ const langCodes = {
};
```
-Next, open the `client/src/utils/algolia-locale-setup.js` file. This data is used for the search bar that loads `/news` articles. While it is unlikely that you are going to test this functionality, missing the data for your language can lead to errors when attempting to build the codebase locally.
+Next, open the `client/src/utils/algolia-locale-setup.ts` file. This data is used for the search bar that loads `/news` articles. While it is unlikely that you are going to test this functionality, missing the data for your language can lead to errors when attempting to build the codebase locally.
Add an object for your language to the `algoliaIndices` object. You should use the values for the `english` object for local testing, replacing the `english` key with your language's `availableLangs` value.
+> [!NOTE] If we have already deployed an instance of news in your target language, you can update the values to reflect the live instance. Otherwise, use the English values.
+
If you were to add Dothraki:
```js
@@ -85,40 +127,6 @@ const algoliaIndices = {
};
```
-Next, you will need to tell the client which certifications are translated, and which are still in English. Open the `utils/is-audited.js` file. Within the `auditedCerts`, add a new key with your language's `availableLangs` value. Assign the value of that key to an array containing the _dashed names_ for the certifications that have been translated. Refer to the existing data for those dashed names.
-
-Continuing the work to enable Dothraki - we have translated the first three certifications:
-
-```js
-const auditedCerts = {
- espanol: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures'
- ],
- chinese: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- 'chinese-traditional': [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- dothraki: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries'
- ]
-};
-```
-
Finally, in your `.env` file, set `CLIENT_LOCALE` and `CURRICULUM_LOCALE` to your new language (use the `availableLangs` value.)
```txt
@@ -143,7 +151,7 @@ For the video challenges, you need to change a few things. First add the new loc
...
```
-Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.js` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
+Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.ts` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
```yml
videoLocaleIds:
diff --git a/docs/i18n/espanol/devops.md b/docs/i18n/espanol/devops.md
index 91cd539fce..e5ca8386dd 100644
--- a/docs/i18n/espanol/devops.md
+++ b/docs/i18n/espanol/devops.md
@@ -536,7 +536,7 @@ Aprovisionamiento de MVs con el código
2. Actualiza `npm` e instala PM2 y configura `logrotate` e inicia en el arranque
```console
- npm i -g npm@6
+ npm i -g npm@8
npm i -g pm2
npm install -g serve
pm2 install pm2-logrotate
diff --git a/docs/i18n/espanol/how-to-test-translations-locally.md b/docs/i18n/espanol/how-to-test-translations-locally.md
index 17be9cbdf6..63720a14e9 100644
--- a/docs/i18n/espanol/how-to-test-translations-locally.md
+++ b/docs/i18n/espanol/how-to-test-translations-locally.md
@@ -8,12 +8,13 @@ En caso de que quieras probar tus traducciones en una instancia local del sitio
Hay algunos pasos a seguir para permitirle a la base de código compilar en tu lenguaje deseado.
-Primero, visita el archivo `config/i18n/all-langs.js` para añadir el lenguaje a la lista de lenguajes disponibles y configura los valores. Hay cuatro objetos aquí.
+First, visit the `config/i18n/all-langs.ts` file to add the language to the available languages list and configure the values. Hay cuatro objetos aquí.
- `avaliableLangs`: Tanto para el arreglo `client` como para el arreglo `curriculum`, añade el nombre en texto del lenguaje. Este es el valor que se utilizará en el archivo `.env` más tarde.
-- `i18nextCodes`: Estos son los codigos de idioma ISO para cada lenguaje. Necesitarás añadir el codigo ISO apropiado para el lenguaje que estas habilitando. Estos deben ser únicos para cada lenguaje.
-- `langDisplayNames`: Estos son los nombres exhibidos para el selector de lenguajes en el menú de navegación.
-- `langCodes`: Estos son los códigos de idioma utilizados para el formateo de fechas y números. Estos deberían ser códigos Unicode CLDR en lugar de códigos ISO.
+- `auditedCerts`: Add the text name of the language as the _key_, and add an array of `SuperBlocks.{cert}` variables as the _value_. This tells the client which certifications are fully translated.
+- `i18nextCodes`: These are the ISO language codes for each language. You will need to add the appropriate ISO code for the language you are enabling. These do need to be unique for each language.
+- `langDisplayNames`: These are the display names for the language selector in the navigation menu.
+- `langCodes`: These are the language codes used for formatting dates and numbers. These should be Unicode CLDR codes instead of ISO codes.
Por ejemplo, si quisieras habilitar Dothraki como un lenguaje, tus objetos `all-langs.js` deberían verse así:
@@ -29,6 +30,45 @@ const availableLangs = {
]
};
+export const auditedCerts = {
+ espanol: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis
+ ],
+ chinese: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ 'chinese-traditional': [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ dothraki: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs
+ ]
+};
+
const i18nextCodes = {
english: 'en',
espanol: 'es',
@@ -54,10 +94,12 @@ const langCodes = {
};
```
-Ahora, abre el archivo `client/src/utils/algolia-locale-setup.js`. Estos datos son utilizados por la barra de búsqueda que carga artículos de `/news` (noticias). While it is unlikely that you are going to test this functionality, missing the data for your language can lead to errors when attempting to build the codebase locally.
+Next, open the `client/src/utils/algolia-locale-setup.ts` file. Estos datos son utilizados por la barra de búsqueda que carga artículos de `/news` (noticias). While it is unlikely that you are going to test this functionality, missing the data for your language can lead to errors when attempting to build the codebase locally.
Add an object for your language to the `algoliaIndices` object. You should use the values for the `english` object for local testing, replacing the `english` key with your language's `availableLangs` value.
+> [!NOTE] If we have already deployed an instance of news in your target language, you can update the values to reflect the live instance. Otherwise, use the English values.
+
If you were to add Dothraki:
```js
@@ -85,40 +127,6 @@ const algoliaIndices = {
};
```
-Next, you will need to tell the client which certifications are translated, and which are still in English. Open the `utils/is-audited.js` file. Within the `auditedCerts`, add a new key with your language's `availableLangs` value. Assign the value of that key to an array containing the _dashed names_ for the certifications that have been translated. Refer to the existing data for those dashed names.
-
-Continuing the work to enable Dothraki - we have translated the first three certifications:
-
-```js
-const auditedCerts = {
- espanol: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures'
- ],
- chinese: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- 'chinese-traditional': [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- dothraki: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries'
- ]
-};
-```
-
Finally, in your `.env` file, set `CLIENT_LOCALE` and `CURRICULUM_LOCALE` to your new language (use the `availableLangs` value.)
```txt
@@ -143,7 +151,7 @@ For the video challenges, you need to change a few things. First add the new loc
...
```
-Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.js` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
+Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.ts` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
```yml
videoLocaleIds:
diff --git a/docs/i18n/italian/devops.md b/docs/i18n/italian/devops.md
index 91c2fa9295..6042c6ef79 100644
--- a/docs/i18n/italian/devops.md
+++ b/docs/i18n/italian/devops.md
@@ -536,7 +536,7 @@ Fare provisioning delle VM con il codice
2. Aggiorna `npm` e installa PM2 e fai il setup di `logrotate` e avvio all'accensione
```console
- npm i -g npm@6
+ npm i -g npm@8
npm i -g pm2
npm install -g serve
pm2 install pm2-logrotate
diff --git a/docs/i18n/italian/how-to-test-translations-locally.md b/docs/i18n/italian/how-to-test-translations-locally.md
index ad903a38f5..9553a5b999 100644
--- a/docs/i18n/italian/how-to-test-translations-locally.md
+++ b/docs/i18n/italian/how-to-test-translations-locally.md
@@ -8,12 +8,13 @@ Se vuoi testare le tue traduzioni in una istanza locale della piattaforma `/lear
Ci sono alcuni step da fare per avere una build del codebase nella lingua di tua scelta.
-Prima, visita il file `config/i18n/all-langs.js` per aggiungere la lingua alle lingue disponibili nella lista e configurare i valori. Ci sono quattro oggetti qui.
+First, visit the `config/i18n/all-langs.ts` file to add the language to the available languages list and configure the values. Ci sono quattro oggetti qui.
- `availableLangs`: Aggiungi il nome testuale della lingua agli array `client` e `curriculum`. Questo è il valore che sarà usato nel file `.env` più tardi.
-- `i18nextCodes`: questi sono i codici ISO per le varie lingue. Dovrai aggiungere il codice ISO appropriato per la lingua che stai attivando. Questi devono essere unici per ogni lingua.
-- `langDisplayNames`: Questi sono i nomi delle lingue visualizzati nel menù di navigazione.
-- `langCodes`: Questi sono i codici delle lingue usati per formattare date e numeri. Questi devono essere codici Unicode CLDR invece di codici ISO.
+- `auditedCerts`: Add the text name of the language as the _key_, and add an array of `SuperBlocks.{cert}` variables as the _value_. This tells the client which certifications are fully translated.
+- `i18nextCodes`: These are the ISO language codes for each language. You will need to add the appropriate ISO code for the language you are enabling. These do need to be unique for each language.
+- `langDisplayNames`: These are the display names for the language selector in the navigation menu.
+- `langCodes`: These are the language codes used for formatting dates and numbers. These should be Unicode CLDR codes instead of ISO codes.
Per esempio, se vuoi attivare la lingua Dothraki, il tuo oggetto `all-langs.js` dovrebbe essere come segue:
@@ -29,6 +30,45 @@ const availableLangs = {
]
};
+export const auditedCerts = {
+ espanol: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis
+ ],
+ chinese: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ 'chinese-traditional': [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ dothraki: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs
+ ]
+};
+
const i18nextCodes = {
english: 'en',
espanol: 'es',
@@ -54,10 +94,12 @@ const langCodes = {
};
```
-Successivamente, apri il file `client/src/utils/algolia-locale-setup.js`. Questi dati sono usati dalla barra di ricerca che carica gli articoli in `/news`. Anche se è poco probabile che tu stia testando questa funzione, se questi dati mancano per la tua lingua possono esserci degli errori nel costruire il codebase localmente.
+Next, open the `client/src/utils/algolia-locale-setup.ts` file. Questi dati sono usati dalla barra di ricerca che carica gli articoli in `/news`. Anche se è poco probabile che tu stia testando questa funzione, se questi dati mancano per la tua lingua possono esserci degli errori nel costruire il codebase localmente.
Aggiungi un oggetto per la tua lingua all'oggetto `algoliaIndices`. Dovresti usare i valori dell'oggetto `english` per testare in locale, sostituiendo la chiave `english` con il valore della tua lingua in `availableLangs`.
+> [!NOTE] If we have already deployed an instance of news in your target language, you can update the values to reflect the live instance. Otherwise, use the English values.
+
Se volessi aggiungere Dothraki:
```js
@@ -85,41 +127,7 @@ const algoliaIndices = {
};
```
-Quindi, devi dire al client quali certificazioni sono tradotte e quali sono ancora in inglese. Apri il file `utils/is-audited.js`. Aggiungi a `auditedCerts` una nuova chiave con il valore della tua lingua in `availableLangs`. Assegna il valore di quella chiave a un array contenente i _nomi con trattino_ (dashed name) per le certificazioni che sono state tradotte. Riferisciti ai dati esistenti per i nomi con trattino.
-
-Continuando il lavoro per attivare Dothraki, abbiamo tradotto le prime tre certificazioni:
-
-```js
-const auditedCerts = {
- espanol: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures'
- ],
- chinese: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- 'chinese-traditional': [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- dothraki: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries'
- ]
-};
-```
-
-Infinine, nel file `.env`, dai a `CLIENT_LOCALE` e `CURRICULUM_LOCALE` il valore della tua nuova lingua (usando il valore in `availableLangs`.)
+Finally, in your `.env` file, set `CLIENT_LOCALE` and `CURRICULUM_LOCALE` to your new language (use the `availableLangs` value.)
```txt
CLIENT_LOCALE="dothraki"
@@ -128,7 +136,7 @@ CURRICULUM_LOCALE="dothraki"
## Attivare video localizzati
-Per le sfide video, devi cambiare alcune cose. Come prima cosa aggiungi la nuova lingua alla query per GraphQL nel file `client/src/templates/Challenges/video/Show.tsx`. Per esempio, in questo modo aggiungeresti Dothraki alla query:
+For the video challenges, you need to change a few things. First add the new locale to the GraphQL query in the `client/src/templates/Challenges/video/Show.tsx` file. For example, adding Dothraki to the query:
```tsx
query VideoChallenge($slug: String!) {
@@ -143,19 +151,19 @@ Per le sfide video, devi cambiare alcune cose. Come prima cosa aggiungi la nuova
...
```
-Quindi aggiungi un id per la nuova lingua ogni sfida video in un blocco verificato (`auditedCerts`). Per esempio, se `auditedCerts` in `all-langs.js` include `scientific-computing-with-python` per `dothraki`, allora devi aggiungere `dothraki` in `videoLocaleIds`. Il frontespizio dovrebbe essere simile a questo:
+Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.ts` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
```yml
videoLocaleIds:
espanol: 3muQV-Im3Z0
italian: hiRTRAqNlpE
portuguese: AelGAcoMXbI
- dothraki: nuovo-id-qui
+ dothraki: new-id-here
dashedName: introduction-why-program
---
```
-Aggiorna l'interfaccia `VideoLocaleIds` in `client/src/redux/prop-types` così che includa la nuova lingua.
+Update the `VideoLocaleIds` interface in `client/src/redux/prop-types` to include the new language.
```ts
export interface VideoLocaleIds {
@@ -166,7 +174,7 @@ export interface VideoLocaleIds {
}
```
-Infine aggiorna lo schema delle sfide in `curriculum/schema/challengeSchema.js`.
+And finally update the challenge schema in `curriculum/schema/challengeSchema.js`.
```js
videoLocaleIds: Joi.when('challengeType', {
@@ -182,10 +190,10 @@ videoLocaleIds: Joi.when('challengeType', {
## Caricare le traduzioni
-Poiché la lingua non è ancora stata approvata per la produzione, i nostri script ancora non scaricheranno automaticamente le traduzioni. Solo lo staff ha accesso al download diretto delle traduzioni - sei il benvenuto a rivolgerti a noi attraverso la [chat room per i contributori](https://chat.freecodecamp.org/channel/contributors), o puoi tradurre i file markdown inglesi per le esigenze di test.
+Because the language has not been approved for production, our scripts are not automatically downloading the translations yet. Only staff have the access to directly download the translations - you are welcome to reach out to us in our [contributors chat room](https://chat.freecodecamp.org/channel/contributors), or you can translate the English markdown files locally for testing purposes.
-Una volta che avrai i file, li dovrai mettere nelle cartelle giuste. Per le sfide del curriculum, dovresti mettere le cartelle dei certificati (ad esempio `01-responsive-web-design`) nella cartella `curriculum/challenges/{lang}`. Per la nostra traduzione in Dothraki, questo sarebbe `curriculum/challenges/dothraki`. I file `.json` con le traduzioni del client vanno nella cartella `client/i18n/locales/{lang}`.
+Once you have the files, you will need to place them in the correct directory. For the curriculum challenges, you should place the certification folders (i.e. `01-responsive-web-design`) within the `curriculum/challenges/{lang}` directory. For our Dothraki translations, this would be `curriculum/challenges/dothraki`. The client translation `.json` files will go in the `client/i18n/locales/{lang}` directory.
-Una volta che questi saranno in posizione, dovresti essere in grado di eseguire `npm run develop` per vedere la versione tradotta di freeCodeCamp.
+Once these are in place, you should be able to run `npm run develop` to view your translated version of freeCodeCamp.
-> [!ATTENTION] Anche se puoi farei delle traduzioni localmente per i test, ricordiamo che le traduzioni _non_ devono essere inviate attraverso GitHub ma solo tramite Crowdin. Assicurati di resettare il tuo codebase locale dopo che avrai finito con i test.
+> [!ATTENTION] While you may perform translations locally for the purpose of testing, we remind everyone that translations should _not_ be submitted through GitHub and should only be done through Crowdin. Be sure to reset your local codebase after you are done testing.
diff --git a/docs/i18n/japanese/devops.md b/docs/i18n/japanese/devops.md
index e7241c9de4..a9cf732df2 100644
--- a/docs/i18n/japanese/devops.md
+++ b/docs/i18n/japanese/devops.md
@@ -536,7 +536,7 @@ Provisioning VMs with the Code
2. Update `npm` and install PM2 and setup `logrotate` and startup on boot
```console
- npm i -g npm@6
+ npm i -g npm@8
npm i -g pm2
npm install -g serve
pm2 install pm2-logrotate
diff --git a/docs/i18n/japanese/how-to-test-translations-locally.md b/docs/i18n/japanese/how-to-test-translations-locally.md
index c0ff23e4c1..8ef754c12c 100644
--- a/docs/i18n/japanese/how-to-test-translations-locally.md
+++ b/docs/i18n/japanese/how-to-test-translations-locally.md
@@ -8,9 +8,10 @@ If you would like to test your translations on a local instance of the freeCodeC
There are a few steps to take in order to allow the codebase to build in your desired language.
-First, visit the `config/i18n/all-langs.js` file to add the language to the available languages list and configure the values. There are four objects here.
+First, visit the `config/i18n/all-langs.ts` file to add the language to the available languages list and configure the values. There are four objects here.
- `availableLangs`: For both the `client` and `curriculum` arrays, add the text name of the language. This is the value that will be used in the `.env` file later.
+- `auditedCerts`: Add the text name of the language as the _key_, and add an array of `SuperBlocks.{cert}` variables as the _value_. This tells the client which certifications are fully translated.
- `i18nextCodes`: These are the ISO language codes for each language. You will need to add the appropriate ISO code for the language you are enabling. These do need to be unique for each language.
- `langDisplayNames`: These are the display names for the language selector in the navigation menu.
- `langCodes`: These are the language codes used for formatting dates and numbers. These should be Unicode CLDR codes instead of ISO codes.
@@ -29,6 +30,45 @@ const availableLangs = {
]
};
+export const auditedCerts = {
+ espanol: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis
+ ],
+ chinese: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ 'chinese-traditional': [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ dothraki: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs
+ ]
+};
+
const i18nextCodes = {
english: 'en',
espanol: 'es',
@@ -54,10 +94,12 @@ const langCodes = {
};
```
-Next, open the `client/src/utils/algolia-locale-setup.js` file. This data is used for the search bar that loads `/news` articles. While it is unlikely that you are going to test this functionality, missing the data for your language can lead to errors when attempting to build the codebase locally.
+Next, open the `client/src/utils/algolia-locale-setup.ts` file. This data is used for the search bar that loads `/news` articles. While it is unlikely that you are going to test this functionality, missing the data for your language can lead to errors when attempting to build the codebase locally.
Add an object for your language to the `algoliaIndices` object. You should use the values for the `english` object for local testing, replacing the `english` key with your language's `availableLangs` value.
+> [!NOTE] If we have already deployed an instance of news in your target language, you can update the values to reflect the live instance. Otherwise, use the English values.
+
If you were to add Dothraki:
```js
@@ -85,40 +127,6 @@ const algoliaIndices = {
};
```
-Next, you will need to tell the client which certifications are translated, and which are still in English. Open the `utils/is-audited.js` file. Within the `auditedCerts`, add a new key with your language's `availableLangs` value. Assign the value of that key to an array containing the _dashed names_ for the certifications that have been translated. Refer to the existing data for those dashed names.
-
-Continuing the work to enable Dothraki - we have translated the first three certifications:
-
-```js
-const auditedCerts = {
- espanol: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures'
- ],
- chinese: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- 'chinese-traditional': [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- dothraki: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries'
- ]
-};
-```
-
Finally, in your `.env` file, set `CLIENT_LOCALE` and `CURRICULUM_LOCALE` to your new language (use the `availableLangs` value.)
```txt
@@ -143,7 +151,7 @@ For the video challenges, you need to change a few things. First add the new loc
...
```
-Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.js` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
+Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.ts` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
```yml
videoLocaleIds:
diff --git a/docs/i18n/portuguese/devops.md b/docs/i18n/portuguese/devops.md
index 23013785e3..cccc90c490 100644
--- a/docs/i18n/portuguese/devops.md
+++ b/docs/i18n/portuguese/devops.md
@@ -536,7 +536,7 @@ Provisionando MVs com o código
2. Atualize o `npm` e instale o PM2 e configure `logrotate` e inicie quando reiniciar
```console
- npm i -g npm@6
+ npm i -g npm@8
npm i -g pm2
npm install -g serve
pm2 install pm2-logrotate
diff --git a/docs/i18n/portuguese/how-to-test-translations-locally.md b/docs/i18n/portuguese/how-to-test-translations-locally.md
index ea3350e796..c6f4884cd4 100644
--- a/docs/i18n/portuguese/how-to-test-translations-locally.md
+++ b/docs/i18n/portuguese/how-to-test-translations-locally.md
@@ -8,12 +8,13 @@ Se você gostaria de testar suas traduções em uma instância local do site Fre
Existem algumas etapas a serem seguidas para permitir que a base de código seja compilada no idioma desejado.
-Primeiro, visite o arquivo `config/i18n/all-langs.js` para adicionar o idioma à lista de idiomas disponíveis e configurar os valores. Existem quatro objetos aqui.
+First, visit the `config/i18n/all-langs.ts` file to add the language to the available languages list and configure the values. Existem quatro objetos aqui.
- `availableLangs`: tanto para o array `client` quanto para o array `curriculum`, adicione o nome do idioma. Esse valor é o que será usado no arquivo `.env` depois.
-- `i18nextCodes`: esses são os códigos ISO de cada linguagem. Você vai precisar do código ISO apropriado para o idioma que você está habilitando. Eles precisam ser únicos para cada idioma.
-- `langDisplayNames`: esses são os nomes dos idiomas que aparecerão para a seleção no menu de navegação.
-- `langCodes`: esses são os códigos de idiomas usados para formatar datas e números. Esses deverão ser códigos Unicode CLDR ao invés de códigos ISO.
+- `auditedCerts`: Add the text name of the language as the _key_, and add an array of `SuperBlocks.{cert}` variables as the _value_. This tells the client which certifications are fully translated.
+- `i18nextCodes`: These are the ISO language codes for each language. You will need to add the appropriate ISO code for the language you are enabling. These do need to be unique for each language.
+- `langDisplayNames`: These are the display names for the language selector in the navigation menu.
+- `langCodes`: These are the language codes used for formatting dates and numbers. These should be Unicode CLDR codes instead of ISO codes.
Como um exemplo, se você tivesse que habilitar o idioma Dothraki como seu idioma, os objetos `all-langs.js` devem ficar assim:
@@ -29,6 +30,45 @@ const availableLangs = {
]
};
+export const auditedCerts = {
+ espanol: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis
+ ],
+ chinese: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ 'chinese-traditional': [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ dothraki: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs
+ ]
+};
+
const i18nextCodes = {
english: 'en',
espanol: 'es',
@@ -54,10 +94,12 @@ const langCodes = {
};
```
-Agora, abra o arquivo `client/src/utils/algolia-locale-setup.js`. Esse dado é usado para a barra de busca que carrega os artigos `/news`. Embora seja improvável que você venha a testar essa funcionalidade, não ter os dados para o seu idioma pode levar a erros quando tentar criar a base de código localmente.
+Next, open the `client/src/utils/algolia-locale-setup.ts` file. Esse dado é usado para a barra de busca que carrega os artigos `/news`. Embora seja improvável que você venha a testar essa funcionalidade, não ter os dados para o seu idioma pode levar a erros quando tentar criar a base de código localmente.
Adicione um objeto para seu idioma no objeto `algoliaIndices`. Você deve usar os valores do objeto `english` para o teste local, substituindo a chave `english` pelo valor de `availableLangs` do seu idioma.
+> [!NOTE] If we have already deployed an instance of news in your target language, you can update the values to reflect the live instance. Otherwise, use the English values.
+
Se você fosse adicionar Dothraki:
```js
@@ -85,41 +127,7 @@ const algoliaIndices = {
};
```
-Depois, você precisará informar ao client quais certificações estão traduzidas e quais ainda estão em inglês. Abra o arquivo `utils/is-audited.js`. Dentro de `auditedCerts`, adicione uma nova chave com o valor de `availableLangs` de seu idioma. Atribua o valor daquela chave a um array que contém os _nomes hifenizados_ para as certificações foram traduzidas. Consulte os dados existentes para aqueles nomes hifenizados.
-
-Dando continuidade ao trabalho para habilitar o idioma Dothraki – traduzimos as três primeiras certificações:
-
-```js
-const auditedCerts = {
- espanol: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures'
- ],
- chinese: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- 'chinese-traditional': [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- dothraki: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries'
- ]
-};
-```
-
-Por fim, em seu arquivo `.env`, definimos `CLIENT_LOCALE` e `CURRICULUM_LOCALE` com o valor de seu novo idioma (use o valor de `availableLangs`.)
+Finally, in your `.env` file, set `CLIENT_LOCALE` and `CURRICULUM_LOCALE` to your new language (use the `availableLangs` value.)
```txt
CLIENT_LOCALE="dothraki"
@@ -128,7 +136,7 @@ CURRICULUM_LOCALE="dothraki"
## Ativando vídeos localizados
-Para os desafios em vídeo, você precisa fazer algumas alterações. Primeiro, adicione o novo idioma (locale) à consilta do GraphQL no arquivo `client/src/templates/Challenges/video/Show.tsx`. Por exemplo, para adicionar Dothraki à consulta:
+For the video challenges, you need to change a few things. First add the new locale to the GraphQL query in the `client/src/templates/Challenges/video/Show.tsx` file. For example, adding Dothraki to the query:
```tsx
query VideoChallenge($slug: String!) {
@@ -143,7 +151,7 @@ Para os desafios em vídeo, você precisa fazer algumas alterações. Primeiro,
...
```
-Em seguida, adicione um id para o novo idioma para qualquer desafio em vídeo em um bloco auditado. Por exemplo, se `auditedCerts` em `all-langs.js` inclui `scientific-computing-with-python` para `dothraki`, você deve adicionar uma entrada em `dothraki` em `videoLocaleIds`. O frontmatter dever ter essa aparência:
+Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.ts` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
```yml
videoLocaleIds:
@@ -151,11 +159,11 @@ videoLocaleIds:
italian: hiRTRAqNlpE
portuguese: AelGAcoMXbI
dothraki: new-id-here
-nomeComTracos: introducao-por-que-programa
+dashedName: introduction-why-program
---
```
-Atualize a interface de `VideoLocaleIds` em `client/src/redux/prop-types` para que ela inclua o novo idioma.
+Update the `VideoLocaleIds` interface in `client/src/redux/prop-types` to include the new language.
```ts
export interface VideoLocaleIds {
@@ -166,7 +174,7 @@ export interface VideoLocaleIds {
}
```
-Por fim, atualize o schema de desafios em `curriculum/schema/challengeSchema.js`.
+And finally update the challenge schema in `curriculum/schema/challengeSchema.js`.
```js
videoLocaleIds: Joi.when('challengeType', {
@@ -182,10 +190,10 @@ videoLocaleIds: Joi.when('challengeType', {
## Carregando traduções
-Como o idioma ainda não foi aprovado para produção, nossos scripts ainda não estão baixando automaticamente as traduções. Somente membros da equipe têm acesso para baixar as traduções diretamente – entre em contato conosco quando quiser em nossa [sala de chat dos contribuidores](https://chat.freecodecamp.org/channel/contributors) ou traduza os arquivos de markdown em inglês localmente para fins de teste.
+Because the language has not been approved for production, our scripts are not automatically downloading the translations yet. Only staff have the access to directly download the translations - you are welcome to reach out to us in our [contributors chat room](https://chat.freecodecamp.org/channel/contributors), or you can translate the English markdown files locally for testing purposes.
-Quando tiver os arquivos em mãos, você precisará colocá-los no diretório correto. Para os desafios do currículo, você deve colocar as pastas de certificação (por exemplo, `01-responsive-web-design`) no diretório `curriculum/challenges/{lang}`. Para nossas traduções em Dothraki, esse diretório seria `curriculum/challenges/dothraki`. Os arquivos `.json` de tradução do client vão no diretório `client/i18n/locales/{lang}`.
+Once you have the files, you will need to place them in the correct directory. For the curriculum challenges, you should place the certification folders (i.e. `01-responsive-web-design`) within the `curriculum/challenges/{lang}` directory. For our Dothraki translations, this would be `curriculum/challenges/dothraki`. The client translation `.json` files will go in the `client/i18n/locales/{lang}` directory.
-Quando estes arquivos estiverem no local certo, você deve poder usar `npm run develop` para ver sua versão traduzida do freeCodeCamp.
+Once these are in place, you should be able to run `npm run develop` to view your translated version of freeCodeCamp.
-> [!ATTENTION] Embora você possa realizar as traduções localmente para fins de teste, lembramos a todos que as traduções _não_ devem ser enviadas pelo GitHub e devem ser feitas somente pelo Crowdin. Certifique-se de reiniciar sua base de código local após realizar os testes.
+> [!ATTENTION] While you may perform translations locally for the purpose of testing, we remind everyone that translations should _not_ be submitted through GitHub and should only be done through Crowdin. Be sure to reset your local codebase after you are done testing.
diff --git a/docs/i18n/portuguese/how-to-work-on-coding-challenges.md b/docs/i18n/portuguese/how-to-work-on-coding-challenges.md
index 2fe19fdbbe..34afa44cd8 100644
--- a/docs/i18n/portuguese/how-to-work-on-coding-challenges.md
+++ b/docs/i18n/portuguese/how-to-work-on-coding-challenges.md
@@ -75,7 +75,7 @@ assert.equal(
# --notes--
-Extra information for a challenge, in markdown
+Informações extras para um desafio, em markdown
# --seed--
@@ -93,7 +93,7 @@ Código avaliado após o código do usuário, e pouco antes dos testes
## --seed-contents--
-Boilerplate code to render to the editor. This section should only contain code inside backticks, like the following:
+Código Boilerplate para renderizar para o editor. Esta seção deve somente conter código dentro de crases, como o seguinte exemplo:
```html
@@ -118,7 +118,7 @@ console.log('freeCodeCamp is awesome!');
# --solutions--
-Solutions are used for the CI tests to ensure that changes to the hints will still pass as intended
+Soluções são usadas para os testes CI a fim de garantir que mudanças nas dicas ainda passem conforme o esperado
```js
// primeira solução - a(s) linguagem(ns) deve(m) ser a mesma do código fornecido.
@@ -138,27 +138,27 @@ Solutions are used for the CI tests to ensure that changes to the hints will sti
# --question--
-These fields are currently used for the multiple-choice Python challenges.
+Esses espaços são utilizados geralmente para questões de múltipla escolha dos desafios de Python.
## --text--
-The question text goes here.
+O texto da questão vêm aqui.
## --answers--
-Answer 1
+Resposta 1
---
-Answer 2
+Resposta 2
---
-More answers
+Mais respostas
## --video-solution--
-The number for the correct answer goes here.
+O número da resposta correta fica aqui.
````
> [!NOTE]
@@ -190,9 +190,9 @@ $ ObjectId()
ObjectId("5a474d78df58bafeb3535d34")
````
-The result is a new id, for example `5a474d78df58bafeb3535d34` above.
+O resultado é um novo id, por exemplo `5a474d78df58bafeb3535d34` acima.
-Once you have your id, put it into the markdown file as the `id` field at the top, e.g.
+Quando tiver seu id, coloque-o no arquivo markdown como campo `id` no topo, ex.
```yml
---
@@ -202,13 +202,13 @@ title: Título do desafio
## Nomeando desafios
-Naming things is hard. We've made it easier by imposing some constraints.
+Nomear coisas é difícil. Nós facilitamos com algumas restrições.
-All challenge titles should be explicit and should follow this pattern:
+Todos os títulos dos desafios devem estar explícitos e devem seguir este padrão:
-\[verb\]\[object clause\]
+\[verbo\]\[frase objetiva\]
-Here are some example challenge names:
+Aqui estão alguns exemplos de nomes para desafios:
- Usar a notação de sentido horário para especificar o preenchimento (padding) de um elemento
- Condensar arrays com .reduce
@@ -216,19 +216,19 @@ Here are some example challenge names:
## Descrições/instruções do desafio
-Sentences should be clear and concise with minimal jargon. If used, jargon should be immediately defined in plain English.
+As frases devem ser claras e resumidas com o mínimo de termos técnicos. Se usado, o termo técnico deve ser imediatamente definido em inglês simples.
-Keep paragraphs short (around 1-4 sentences). People are more likely to read several short paragraphs than a wall of text.
+Mantenha os parágrafos curtos (em torno de 1-4 frases). É mais provável que as pessoas leiam vários parágrafos curtos do que um parágrafo enorme.
-Challenge text should use the second person ("you") to help to give it a conversational tone. This way the text and instructions seem to speak directly to the camper working through the challenge. Try to avoid using the first person ("I", "we", "let's", and "us").
+O desafio de texto deve usar a segunda pessoa ("você") para ajudar a dar um tom coloquial. Dessa forma, o texto e as instruções parecem falar diretamente ao usuário freeCodeCamp que está resolvendo o desafio. Tente evitar usar a primeira pessoa ("eu", "nós", "vamos").
-Don't use outbound links. These interrupt the flow. Campers should never have to google anything during these challenges. If there are resources you think campers would benefit from, add them to the challenge's Guide-related article.
+Não use links externos. Eles interrompem o fluxo. Os usuários do freeCodeCamp nunca devem precisar pesquisar nada no Google durante esses desafios. Se há recursos que você acha que os usuários irão se beneficiar, adicione-os no artigo relacionado ao guia do desafio.
-You can add diagrams if necessary.
+Você pode adicionar diagramas se necessário.
-Don't use emojis or emoticons in challenges. freeCodeCamp has a global community, and the cultural meaning of an emoji or emoticon may be different around the world. Also, emojis can render differently on different systems.
+Não use emojis ou emoticons em desafios. O freeCodeCamp possui uma comunidade global, e o significado cultural de um emoji ou emoticon pode ser diferente ao redor do mundo. Além disso, emojis podem ser mostrados de maneiras diferentes em diferentes sistemas.
-Proper nouns should use correct capitalization when possible. Below is a list of words as they should appear in the challenges.
+Substantivos próprios devem começar com letra maiúscula quando possível. Abaixo está uma lista de palavras e como devem aparecem nos desafios.
- JavaScript (letras maiúsculas em "J" e "S" e sem abreviações)
- Node.js
@@ -236,28 +236,28 @@ Proper nouns should use correct capitalization when possible. Below is a list of
### A regra dos 2 minutos
-Each challenge should be solvable within 120 seconds by a native English speaker who has completed the challenges leading up to it. This includes the amount of time it takes to read the directions/instructions understand the seeded code, write their code and get all the tests to pass.
+Cada desafio deve ser resolvido em 120 segundos por um nativo da língua inglesa que tenha concluído os desafios anteriores. Isso inclui a quantidade de tempo que leva para ler as instruções, entender o código fornecido, escrever o código e passar nos testes.
-If it takes longer than two minutes to complete the challenge, you have two options:
+Se levar mais do que dois minutos para completar um desafio, você tem duas opções:
- Simplifique o desafio, ou
- Divida o desafio em dois desafios.
-The 2-minute rule forces you, the challenge designer, to make your directions concise, your seed code clear, and your tests straight-forward.
+A regra dos 2 minutos força quem criou o desafio a deixar as instruções resumidas, o código fornecido limpo e seus testes diretos.
-We track how long it takes for campers to solve changes and use this information to identify challenges that need to be simplified or split.
+Acompanhamos quanto dura para os usuários resolverem mudanças e usamos essa informação para identificar desafios que precisam ser simplificados ou divididos.
### Modularidade
-Each challenge should teach exactly one concept, and that concept should be apparent from the challenge's name.
+Cada desafio deve ensinar exatamente um conceito, e esse conceito deve estar aparente a partir do nome do desafio.
-We can reinforce previously covered concepts through repetition and variations - for example, introducing h1 elements in one challenge, then h3 elements a few challenges later.
+Podemos reforçar conceitos citados anteriormente através de repetição e variações - por exemplo, introduzir elementos h1 em um desafio, então elementos h3 depois.
-Our goal is to have thousands of 2-minute challenges. These can flow together and reiterate previously-covered concepts.
+Nossa meta é ter vários desafios de 2 minutos. Eles podem se completar e relembrar conceitos anteriormente citados.
### Formatando o texto do desafio
-Here are specific formatting guidelines for challenge text and examples:
+Aqui estão diretrizes de formatação específicas para o texto do desafio e exemplos:
- Palavras chaves da linguagem ficam entre `` \` `` crases. Por exemplo, nomes de tags HTML ou nomes de propriedade CSS.
- Referências a códigos (ex. função, método ou nomes de variáveis) devem estar entre `` \` ``. Veja o exemplo abaixo:
@@ -270,9 +270,9 @@ Use `parseInt` para converter a variável `realNumber` em um número inteiro.
- Blocos de código com várias linhas **devem ser precedidos por uma linha vazia**. A próxima linha deve começar com três crases seguidas imediatamente por uma das [linguagens suportadas](https://prismjs.com/#supported-languages). Para completar o bloco de código, você deve começar uma nova linha que apenas possui três crases e **outra linha vazia**. Veja o exemplo abaixo:
- Os espaços importam no Markdown. Então, recomendamos que os mantenham visíveis no seu editor.
-**Note:** If you are going to use an example code in YAML, use `yaml` instead of `yml` for the language to the right of the backticks.
+**Observação:** se você for usar um exemplo de código em YAML, use `yaml` ao invés de `yml` para a linguagem à direita das crases.
-The following is an example of code:
+Exemplo de código:
````md
```{language}
@@ -319,13 +319,13 @@ Exemplo de um comentário de uma linha em JavaScript:
// Mude somente abaixo dessa linha
````
-Example of a valid CSS comment:
+Exemplo de um comentário válido em CSS:
```css
/* Only change code above this line */
```
-If a challenge only has a single place where code changes are needed, please use the comments in the following example to instruct the user where changes should be made.
+Se um desafio tem apenas um lugar onde as mudanças de código são necessárias, use os comentários seguindo o exemplo a seguir para instruir o usuário sobre o local onde as mudanças devem ser feitas.
```js
var a = 3;
@@ -338,7 +338,7 @@ b = 9 + b;
c = c + 7;
```
-If a challenge has multiple places where the user is expected to change code (i.e. the React challenges)
+Se um desafio tem múltiplos lugares onde se espera que o usuário faça mudanças no código (ex. os desafios de React)
```jsx
class MyComponent extends React.Component {
@@ -371,9 +371,9 @@ class MyComponent extends React.Component {
### Tradução de comentários de código seed
-There are separate comment dictionaries for each language. The [English version of the comment dictionary](/curriculum/dictionaries/english/comments.js) is the basis for the translations found in the corresponding non-English versions of the files. The non-English version of the Chinese comment dictionary would be located at `/curriculum/dictionaries/chinese/comments.js`. Each dictionary consists of an array of objects with a unique `id` property and a `text` property. Only the `text` should be modified to encompass the translation of the corresponding English comment.
+Existem dicionários de comentários separados para cada linguagem. A [versão em inglês do dicionário de comentários](/curriculum/dictionaries/english/comments.js) é a base para as traduções encontradas nas versões correspondentes dos arquivos em outros idiomas. A versão não inglesa do dicionário de comentário chinesa pode ser encontrada em `/curriculum/dictionaries/chinese/comments.js`. Cada dicionário consiste em um array de objetos com uma propriedade de `id` única e uma propriedade de `text`. Somente a propriedade `text` deve ser modificada para englobar a tradução do comentário correspondente em inglês.
-Some comments may contain a word/phrase that should not be translated. For example, variable names or proper library names like "React" should not be translated. See the comment below as an example. The word `myGlobal` should not be translated.
+Alguns comentários podem conter uma palavra/frase que não deve ser traduzida. Por exemplo, nomes de variáveis, ou nomes próprios de bibliotecas como "React" não devem ser traduzidas. Veja o comentário abaixo como um exemplo. A palavra `myGlobal` não deve ser traduzida.
```text
Declare a variável myGlobal abaixo desta linha
@@ -385,13 +385,13 @@ Declare a variável myGlobal abaixo desta linha
## Dicas e soluções
-Each challenge has a `Get a Hint` button, so a user can access any hints/solutions which have been created for the challenge. Curriculum hints/solutions topics are located on [our forum](https://forum.freecodecamp.org/c/guide) under the `Guide` category.
+Cada desafio tem um botão `Get a Hint`, assim, o usuário pode acessar qualquer dica/solução que foi criada para aquele desafio. Os tópicos de dicas/soluções são encontrados no [nosso fórum](https://forum.freecodecamp.org/c/guide), abaixo da categoria `Guide`.
-If you find a problem with an existing challenge's hints/solutions topic, you can make suggestions in the [contributors category](https://forum.freecodecamp.org/c/contributors) on the forum. Moderators and users with trust level 3 will review the comments and decide whether or not to include the changes in the corresponding hint/solutions topic.
+Se você encontrar um problema nas dicas/tópicos de solução de um desafio existente, você pode fazer sugestões na [categoria de contribuidores](https://forum.freecodecamp.org/c/contributors) no fórum. Os moderadores e usuários com o nível de confiança 3 vão revisar os comentários e decidir quais incluir as mudanças nos tópicos correspondentes de dicas/soluções.
### Adicionando um novo tópico de dicas/soluções em um desafio
-Take the following steps when adding a new challenge hints/solutions related topic.
+Faça o passo-a-passo a seguir quando for adicionar novos tópicos de dicas/soluções relacionadas a um desafio.
1. Comece seguindo os mesmos passos para criar um novo tópico, mas revise o seguinte para criar o título.
2. O título do tópico deve começar com `freeCodeCamp Challenge Guide:` concatenado com o título atual do desafio de currículo. Por exemplo, se o desafio é chamado "`Chunky Monkey`", o título do tópico seria "`freeCodeCamp Challenge Guide: Chunky Monkey`".
@@ -400,7 +400,7 @@ Take the following steps when adding a new challenge hints/solutions related top
### Diretrizes para o conteúdo dos tópicos de dicas e soluções
-When proposing a solution for a curriculum challenge related Guide topic, the full code must be added. This includes all the original seed code plus any changes needed to pass all the challenge tests. The following template should be used when creating new hints/solutions topics:
+Ao propor uma solução para um tópico do guia relacionado a um desafio de currículo, o código completo deve ser adicionado. Isso inclui todo o código seed original, assim como as alterações necessárias para passar em todos os testes do desafio. O modelo a seguir deve ser usado ao criar um novo tópico de dicas/soluções:
````md
# O nome do desafio fica aqui
@@ -481,12 +481,12 @@ Você também é capaz de testar um desafio individualmente seguindo as seguinte
cd curriculum
```
-2. Run the following for each challenge file for which you have changed (replacing `challenge-title-goes-here` with the full title of the challenge):
+2. Execute o comando a seguir para cada arquivo de desafio no qual você fez alteraçõess (substituindo `challenge-title-goes-here` com o título completo do desafio):
```
npm run test -- -g challenge-title-goes-here ```
-Once you have verified that each challenge you've worked on passes the tests, [please create a pull request](how-to-open-a-pull-request.md).
+Quando você verificar que cada desafio modificado passou nos testes, [crie um pull request](how-to-open-a-pull-request.md).
> [!TIP] Você pode definir a variável de ambiente `LOCALE` no `.env` no idioma do(s) desafio(s) que precisa testar.
>
@@ -494,7 +494,7 @@ Once you have verified that each challenge you've worked on passes the tests, [p
### Links úteis
-Creating and Editing Challenges:
+Criação e edição de desafios:
1. [Tipos de desafio](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/utils/challenge-types.js#L1-L13) - o que significam os valores do tipo de desafio numérico (enum).
diff --git a/docs/i18n/ukrainian/devops.md b/docs/i18n/ukrainian/devops.md
index d2b53dfc68..b613fd8423 100644
--- a/docs/i18n/ukrainian/devops.md
+++ b/docs/i18n/ukrainian/devops.md
@@ -536,7 +536,7 @@ Provisioning VMs with the Code
2. Update `npm` and install PM2 and setup `logrotate` and startup on boot
```console
- npm i -g npm@6
+ npm i -g npm@8
npm i -g pm2
npm install -g serve
pm2 install pm2-logrotate
diff --git a/docs/i18n/ukrainian/how-to-test-translations-locally.md b/docs/i18n/ukrainian/how-to-test-translations-locally.md
index c0ff23e4c1..8ef754c12c 100644
--- a/docs/i18n/ukrainian/how-to-test-translations-locally.md
+++ b/docs/i18n/ukrainian/how-to-test-translations-locally.md
@@ -8,9 +8,10 @@ If you would like to test your translations on a local instance of the freeCodeC
There are a few steps to take in order to allow the codebase to build in your desired language.
-First, visit the `config/i18n/all-langs.js` file to add the language to the available languages list and configure the values. There are four objects here.
+First, visit the `config/i18n/all-langs.ts` file to add the language to the available languages list and configure the values. There are four objects here.
- `availableLangs`: For both the `client` and `curriculum` arrays, add the text name of the language. This is the value that will be used in the `.env` file later.
+- `auditedCerts`: Add the text name of the language as the _key_, and add an array of `SuperBlocks.{cert}` variables as the _value_. This tells the client which certifications are fully translated.
- `i18nextCodes`: These are the ISO language codes for each language. You will need to add the appropriate ISO code for the language you are enabling. These do need to be unique for each language.
- `langDisplayNames`: These are the display names for the language selector in the navigation menu.
- `langCodes`: These are the language codes used for formatting dates and numbers. These should be Unicode CLDR codes instead of ISO codes.
@@ -29,6 +30,45 @@ const availableLangs = {
]
};
+export const auditedCerts = {
+ espanol: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis
+ ],
+ chinese: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ 'chinese-traditional': [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ dothraki: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs
+ ]
+};
+
const i18nextCodes = {
english: 'en',
espanol: 'es',
@@ -54,10 +94,12 @@ const langCodes = {
};
```
-Next, open the `client/src/utils/algolia-locale-setup.js` file. This data is used for the search bar that loads `/news` articles. While it is unlikely that you are going to test this functionality, missing the data for your language can lead to errors when attempting to build the codebase locally.
+Next, open the `client/src/utils/algolia-locale-setup.ts` file. This data is used for the search bar that loads `/news` articles. While it is unlikely that you are going to test this functionality, missing the data for your language can lead to errors when attempting to build the codebase locally.
Add an object for your language to the `algoliaIndices` object. You should use the values for the `english` object for local testing, replacing the `english` key with your language's `availableLangs` value.
+> [!NOTE] If we have already deployed an instance of news in your target language, you can update the values to reflect the live instance. Otherwise, use the English values.
+
If you were to add Dothraki:
```js
@@ -85,40 +127,6 @@ const algoliaIndices = {
};
```
-Next, you will need to tell the client which certifications are translated, and which are still in English. Open the `utils/is-audited.js` file. Within the `auditedCerts`, add a new key with your language's `availableLangs` value. Assign the value of that key to an array containing the _dashed names_ for the certifications that have been translated. Refer to the existing data for those dashed names.
-
-Continuing the work to enable Dothraki - we have translated the first three certifications:
-
-```js
-const auditedCerts = {
- espanol: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures'
- ],
- chinese: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- 'chinese-traditional': [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries',
- 'data-visualization',
- 'back-end-development-and-apis',
- 'quality-assurance'
- ],
- dothraki: [
- 'responsive-web-design',
- 'javascript-algorithms-and-data-structures',
- 'front-end-development-libraries'
- ]
-};
-```
-
Finally, in your `.env` file, set `CLIENT_LOCALE` and `CURRICULUM_LOCALE` to your new language (use the `availableLangs` value.)
```txt
@@ -143,7 +151,7 @@ For the video challenges, you need to change a few things. First add the new loc
...
```
-Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.js` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
+Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.ts` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
```yml
videoLocaleIds:
From 4564b71d0e5fe698caa67bba2663c31e23af5b8e Mon Sep 17 00:00:00 2001
From: "Nicholas Carrigan (he/him)"
Date: Sat, 11 Dec 2021 09:10:27 -0800
Subject: [PATCH 19/63] fix(client): i18n news configs (#44463)
Co-authored-by: Mrugesh Mohapatra <1884376+raisedadead@users.noreply.github.com>
---
client/src/utils/algolia-locale-setup.ts | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/client/src/utils/algolia-locale-setup.ts b/client/src/utils/algolia-locale-setup.ts
index a5cd08e4a3..8d9b3728a4 100644
--- a/client/src/utils/algolia-locale-setup.ts
+++ b/client/src/utils/algolia-locale-setup.ts
@@ -21,15 +21,15 @@ const algoliaIndices = {
name: 'news-zh',
searchPage: 'https://chinese.freecodecamp.org/news/search'
},
- // TODO: Replace with i18n pages when shipped
italian: {
- name: 'news',
- searchPage: 'https://www.freecodecamp.org/news/search/'
+ name: 'news-it',
+ searchPage: 'https://www.freecodecamp.org/italian/news/search/'
},
portuguese: {
- name: 'news',
- searchPage: 'https://www.freecodecamp.org/news/search/'
+ name: 'news-pt',
+ searchPage: 'https://www.freecodecamp.org/portuguese/news/search/'
},
+ // TODO: Replace with Ukrainian news when we have more useful resources on that instance
ukrainian: {
name: 'news',
searchPage: 'https://www.freecodecamp.org/news/search/'
From 9c386c829f1ee01706e66bf99474ae51aa699031 Mon Sep 17 00:00:00 2001
From: Josh
Date: Sat, 11 Dec 2021 19:33:46 +0000
Subject: [PATCH 20/63] fix(client): prevent unusual commas in iframe (#44477)
* fix: Moved src files in the head
* fix: Removed excess indents
Co-authored-by: Canopius
---
client/src/templates/Challenges/rechallenge/builders.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/src/templates/Challenges/rechallenge/builders.js b/client/src/templates/Challenges/rechallenge/builders.js
index 38ad633ee0..3ea596c579 100644
--- a/client/src/templates/Challenges/rechallenge/builders.js
+++ b/client/src/templates/Challenges/rechallenge/builders.js
@@ -91,7 +91,7 @@ A required file can not have both a src and a link: src = ${src}, link = ${link}
}
return '';
})
- .reduce((head, element) => head.concat(element), []);
+ .join('\n');
const indexHtml = findIndexHtml(challengeFiles);
From ae7535299ea98189acdb3c75ce1d4f9e43975e80 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Sun, 12 Dec 2021 08:20:16 +0000
Subject: [PATCH 21/63] fix(deps): update dependency @loadable/component to
v5.15.2
---
client/package.json | 2 +-
package-lock.json | 16 ++++++++--------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/client/package.json b/client/package.json
index bf8ca18bbc..37f74dc547 100644
--- a/client/package.json
+++ b/client/package.json
@@ -48,7 +48,7 @@
"@freecodecamp/react-bootstrap": "0.32.3",
"@freecodecamp/react-calendar-heatmap": "1.0.0",
"@freecodecamp/strip-comments": "3.0.1",
- "@loadable/component": "5.15.0",
+ "@loadable/component": "5.15.2",
"@reach/router": "1.3.4",
"@stripe/react-stripe-js": "1.6.0",
"@stripe/stripe-js": "1.22.0",
diff --git a/package-lock.json b/package-lock.json
index d946e22e33..8d8fd23f95 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -216,7 +216,7 @@
"@freecodecamp/react-bootstrap": "0.32.3",
"@freecodecamp/react-calendar-heatmap": "1.0.0",
"@freecodecamp/strip-comments": "3.0.1",
- "@loadable/component": "5.15.0",
+ "@loadable/component": "5.15.2",
"@reach/router": "1.3.4",
"@stripe/react-stripe-js": "1.6.0",
"@stripe/stripe-js": "1.22.0",
@@ -4373,9 +4373,9 @@
}
},
"node_modules/@loadable/component": {
- "version": "5.15.0",
- "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.15.0.tgz",
- "integrity": "sha512-g63rQzypPOZi0BeGsK4ST2MYhsFR+i7bhL8k/McUoWDNMDuTTdUlQ2GACKxqh5sI/dNC/6nVoPrycMnSylnAgQ==",
+ "version": "5.15.2",
+ "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.15.2.tgz",
+ "integrity": "sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw==",
"dependencies": {
"@babel/runtime": "^7.7.7",
"hoist-non-react-statics": "^3.3.1",
@@ -57683,7 +57683,7 @@
"@freecodecamp/react-bootstrap": "0.32.3",
"@freecodecamp/react-calendar-heatmap": "1.0.0",
"@freecodecamp/strip-comments": "3.0.1",
- "@loadable/component": "5.15.0",
+ "@loadable/component": "5.15.2",
"@reach/router": "1.3.4",
"@stripe/react-stripe-js": "1.6.0",
"@stripe/stripe-js": "1.22.0",
@@ -59300,9 +59300,9 @@
}
},
"@loadable/component": {
- "version": "5.15.0",
- "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.15.0.tgz",
- "integrity": "sha512-g63rQzypPOZi0BeGsK4ST2MYhsFR+i7bhL8k/McUoWDNMDuTTdUlQ2GACKxqh5sI/dNC/6nVoPrycMnSylnAgQ==",
+ "version": "5.15.2",
+ "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.15.2.tgz",
+ "integrity": "sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw==",
"requires": {
"@babel/runtime": "^7.7.7",
"hoist-non-react-statics": "^3.3.1",
From 361794aacdc3590b0269c11235a5f0d1aa3fcd0d Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Mon, 13 Dec 2021 01:05:41 +0000
Subject: [PATCH 22/63] chore(deps): update dependency postcss to v8.4.5
---
client/package.json | 2 +-
package-lock.json | 20 ++++++++++----------
tools/ui-components/package.json | 2 +-
3 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/client/package.json b/client/package.json
index 37f74dc547..c46b258c5a 100644
--- a/client/package.json
+++ b/client/package.json
@@ -86,7 +86,7 @@
"nanoid": "3.1.30",
"normalize-url": "4.5.1",
"path-browserify": "1.0.1",
- "postcss": "8.4.4",
+ "postcss": "8.4.5",
"prismjs": "1.25.0",
"process": "0.11.10",
"prop-types": "15.7.2",
diff --git a/package-lock.json b/package-lock.json
index 8d8fd23f95..a4bdcc75ea 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -254,7 +254,7 @@
"nanoid": "3.1.30",
"normalize-url": "4.5.1",
"path-browserify": "1.0.1",
- "postcss": "8.4.4",
+ "postcss": "8.4.5",
"prismjs": "1.25.0",
"process": "0.11.10",
"prop-types": "15.7.2",
@@ -43261,9 +43261,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.4",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz",
- "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==",
+ "version": "8.4.5",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
+ "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
"dependencies": {
"nanoid": "^3.1.30",
"picocolors": "^1.0.0",
@@ -55217,7 +55217,7 @@
"babel-loader": "8.2.3",
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
"cross-env": "7.0.3",
- "postcss": "8.4.4",
+ "postcss": "8.4.5",
"postcss-import": "14.0.2",
"rimraf": "3.0.2",
"rollup": "2.61.1",
@@ -57731,7 +57731,7 @@
"nanoid": "3.1.30",
"normalize-url": "4.5.1",
"path-browserify": "1.0.1",
- "postcss": "8.4.4",
+ "postcss": "8.4.5",
"prismjs": "1.25.0",
"process": "0.11.10",
"prop-types": "15.7.2",
@@ -58092,7 +58092,7 @@
"babel-loader": "8.2.3",
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
"cross-env": "7.0.3",
- "postcss": "8.4.4",
+ "postcss": "8.4.5",
"postcss-import": "14.0.2",
"react": "16.14.0",
"react-dom": "16.14.0",
@@ -89534,9 +89534,9 @@
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
},
"postcss": {
- "version": "8.4.4",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz",
- "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==",
+ "version": "8.4.5",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
+ "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
"requires": {
"nanoid": "^3.1.30",
"picocolors": "^1.0.0",
diff --git a/tools/ui-components/package.json b/tools/ui-components/package.json
index d1402cddc7..5da5c46ad5 100644
--- a/tools/ui-components/package.json
+++ b/tools/ui-components/package.json
@@ -45,7 +45,7 @@
"babel-loader": "8.2.3",
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
"cross-env": "7.0.3",
- "postcss": "8.4.4",
+ "postcss": "8.4.5",
"postcss-import": "14.0.2",
"rimraf": "3.0.2",
"rollup": "2.61.1",
From 129083de9787c69d55cbf258f9a4b5a3bd1f9e4c Mon Sep 17 00:00:00 2001
From: camperbot
Date: Mon, 13 Dec 2021 21:03:40 +0530
Subject: [PATCH 23/63] chore(i18n,docs): update translations (#44483)
---
.../how-to-test-translations-locally.md | 34 +++++++++----------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/docs/i18n/portuguese/how-to-test-translations-locally.md b/docs/i18n/portuguese/how-to-test-translations-locally.md
index c6f4884cd4..1fe5b48313 100644
--- a/docs/i18n/portuguese/how-to-test-translations-locally.md
+++ b/docs/i18n/portuguese/how-to-test-translations-locally.md
@@ -8,13 +8,13 @@ Se você gostaria de testar suas traduções em uma instância local do site Fre
Existem algumas etapas a serem seguidas para permitir que a base de código seja compilada no idioma desejado.
-First, visit the `config/i18n/all-langs.ts` file to add the language to the available languages list and configure the values. Existem quatro objetos aqui.
+Primeiro, visite o arquivo `config/i18n/all-langs.ts` para adicionar o idioma à lista de idiomas disponíveis e configurar os valores. Existem quatro objetos aqui.
- `availableLangs`: tanto para o array `client` quanto para o array `curriculum`, adicione o nome do idioma. Esse valor é o que será usado no arquivo `.env` depois.
-- `auditedCerts`: Add the text name of the language as the _key_, and add an array of `SuperBlocks.{cert}` variables as the _value_. This tells the client which certifications are fully translated.
-- `i18nextCodes`: These are the ISO language codes for each language. You will need to add the appropriate ISO code for the language you are enabling. These do need to be unique for each language.
-- `langDisplayNames`: These are the display names for the language selector in the navigation menu.
-- `langCodes`: These are the language codes used for formatting dates and numbers. These should be Unicode CLDR codes instead of ISO codes.
+- `auditedCerts`: adicione o nome do texto do idioma como a _chave_ e adicione um array de variáveis `SuperBlocks.{cert}` como o _valor_. Isto informa ao cliente quais certificações estão totalmente traduzidas.
+- `i18nextCodes`: esses são os códigos ISO de cada linguagem. Você vai precisar do código ISO apropriado para o idioma que você está habilitando. Eles precisam ser únicos para cada idioma.
+- `langDisplayNames`: esses são os nomes dos idiomas que aparecerão para a seleção no menu de navegação.
+- `langCodes`: esses são os códigos de idiomas usados para formatar datas e números. Esses deverão ser códigos Unicode CLDR ao invés de códigos ISO.
Como um exemplo, se você tivesse que habilitar o idioma Dothraki como seu idioma, os objetos `all-langs.js` devem ficar assim:
@@ -94,11 +94,11 @@ const langCodes = {
};
```
-Next, open the `client/src/utils/algolia-locale-setup.ts` file. Esse dado é usado para a barra de busca que carrega os artigos `/news`. Embora seja improvável que você venha a testar essa funcionalidade, não ter os dados para o seu idioma pode levar a erros quando tentar criar a base de código localmente.
+Agora, abra o arquivo `client/src/utils/algolia-locale-setup.ts`. Esse dado é usado para a barra de busca que carrega os artigos `/news`. Embora seja improvável que você venha a testar essa funcionalidade, não ter os dados para o seu idioma pode levar a erros quando tentar criar a base de código localmente.
Adicione um objeto para seu idioma no objeto `algoliaIndices`. Você deve usar os valores do objeto `english` para o teste local, substituindo a chave `english` pelo valor de `availableLangs` do seu idioma.
-> [!NOTE] If we have already deployed an instance of news in your target language, you can update the values to reflect the live instance. Otherwise, use the English values.
+> [!NOTE] Se nós já implantamos uma instância do editorial em sua língua-alvo, você pode atualizar os valores para refletir a instância que já está implantada. Do contrário, use os valores em inglês.
Se você fosse adicionar Dothraki:
@@ -127,7 +127,7 @@ const algoliaIndices = {
};
```
-Finally, in your `.env` file, set `CLIENT_LOCALE` and `CURRICULUM_LOCALE` to your new language (use the `availableLangs` value.)
+Por fim, em seu arquivo `.env`, definimos `CLIENT_LOCALE` e `CURRICULUM_LOCALE` com o valor de seu novo idioma (use o valor de `availableLangs`.)
```txt
CLIENT_LOCALE="dothraki"
@@ -136,7 +136,7 @@ CURRICULUM_LOCALE="dothraki"
## Ativando vídeos localizados
-For the video challenges, you need to change a few things. First add the new locale to the GraphQL query in the `client/src/templates/Challenges/video/Show.tsx` file. For example, adding Dothraki to the query:
+Para os desafios em vídeo, você precisa fazer algumas alterações. Primeiro, adicione o novo idioma (locale) à consulta do GraphQL no arquivo `client/src/templates/Challenges/video/Show.tsx`. Por exemplo, para adicionar Dothraki à consulta:
```tsx
query VideoChallenge($slug: String!) {
@@ -151,7 +151,7 @@ For the video challenges, you need to change a few things. First add the new loc
...
```
-Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.ts` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
+Em seguida, adicione um id para o novo idioma para qualquer desafio em vídeo em um bloco auditado. Por exemplo, se `auditedCerts` em `all-langs.ts` inclui `scientific-computing-with-python` para `dothraki`, você deve adicionar uma entrada em `dothraki` em `videoLocaleIds`. O frontmatter dever ter essa aparência:
```yml
videoLocaleIds:
@@ -159,11 +159,11 @@ videoLocaleIds:
italian: hiRTRAqNlpE
portuguese: AelGAcoMXbI
dothraki: new-id-here
-dashedName: introduction-why-program
+nomeComTracos: introducao-por-que-programar
---
```
-Update the `VideoLocaleIds` interface in `client/src/redux/prop-types` to include the new language.
+Atualize a interface de `VideoLocaleIds` em `client/src/redux/prop-types` para que ela inclua o novo idioma.
```ts
export interface VideoLocaleIds {
@@ -174,7 +174,7 @@ export interface VideoLocaleIds {
}
```
-And finally update the challenge schema in `curriculum/schema/challengeSchema.js`.
+Por fim, atualize o schema de desafios em `curriculum/schema/challengeSchema.js`.
```js
videoLocaleIds: Joi.when('challengeType', {
@@ -190,10 +190,10 @@ videoLocaleIds: Joi.when('challengeType', {
## Carregando traduções
-Because the language has not been approved for production, our scripts are not automatically downloading the translations yet. Only staff have the access to directly download the translations - you are welcome to reach out to us in our [contributors chat room](https://chat.freecodecamp.org/channel/contributors), or you can translate the English markdown files locally for testing purposes.
+Como o idioma ainda não foi aprovado para produção, nossos scripts ainda não estão baixando automaticamente as traduções. Somente membros da equipe têm acesso para baixar as traduções diretamente – entre em contato conosco quando quiser em nossa [sala de chat dos contribuidores](https://chat.freecodecamp.org/channel/contributors) ou traduza os arquivos de markdown em inglês localmente para fins de teste.
-Once you have the files, you will need to place them in the correct directory. For the curriculum challenges, you should place the certification folders (i.e. `01-responsive-web-design`) within the `curriculum/challenges/{lang}` directory. For our Dothraki translations, this would be `curriculum/challenges/dothraki`. The client translation `.json` files will go in the `client/i18n/locales/{lang}` directory.
+Quando tiver os arquivos em mãos, você precisará colocá-los no diretório correto. Para os desafios do currículo, você deve colocar as pastas de certificação (por exemplo, `01-responsive-web-design`) no diretório `curriculum/challenges/{lang}`. Para nossas traduções em Dothraki, esse diretório seria `curriculum/challenges/dothraki`. Os arquivos `.json` de tradução do client vão no diretório `client/i18n/locales/{lang}`.
-Once these are in place, you should be able to run `npm run develop` to view your translated version of freeCodeCamp.
+Quando estes arquivos estiverem no local certo, você deve poder usar `npm run develop` para ver sua versão traduzida do freeCodeCamp.
-> [!ATTENTION] While you may perform translations locally for the purpose of testing, we remind everyone that translations should _not_ be submitted through GitHub and should only be done through Crowdin. Be sure to reset your local codebase after you are done testing.
+> [!ATTENTION] Embora você possa realizar as traduções localmente para fins de teste, lembramos a todos que as traduções _não_ devem ser enviadas pelo GitHub e devem ser feitas somente pelo Crowdin. Certifique-se de reiniciar sua base de código local após realizar os testes.
From cd9c57a8c55f866682c7bce16ac0d942d8679f26 Mon Sep 17 00:00:00 2001
From: Ahmad Abdolsaheb
Date: Mon, 13 Dec 2021 19:25:21 +0300
Subject: [PATCH 24/63] feat(client): optimize donation form for holiday alert
(#44482)
* feat(client): optmize donation form for holiday alert
* feat: remove key from i18n
---
client/i18n/locales/english/translations.json | 1 -
client/src/components/Donation/donate-form.tsx | 17 +++++++++++++----
client/src/components/Intro/index.tsx | 2 +-
3 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/client/i18n/locales/english/translations.json b/client/i18n/locales/english/translations.json
index 2a4ac07f1f..373bc45cf3 100644
--- a/client/i18n/locales/english/translations.json
+++ b/client/i18n/locales/english/translations.json
@@ -32,7 +32,6 @@
"profile": "Profile",
"news": "News",
"donate": "Donate",
- "support-our-nonprofit": "Support our non-profit",
"update-settings": "Update my account settings",
"sign-me-out": "Sign me out of freeCodeCamp",
"flag-user": "Flag This User's Account for Abuse",
diff --git a/client/src/components/Donation/donate-form.tsx b/client/src/components/Donation/donate-form.tsx
index e41389ca5e..58f5f6d90a 100644
--- a/client/src/components/Donation/donate-form.tsx
+++ b/client/src/components/Donation/donate-form.tsx
@@ -16,6 +16,7 @@ import {
} from '../../../../config/donation-settings';
import {
isSignedInSelector,
+ isDonatingSelector,
signInLoadingSelector,
donationFormStateSelector,
addDonation,
@@ -70,6 +71,7 @@ type DonateFormProps = {
donationFormState: DonateFormState;
isMinimalForm?: boolean;
isSignedIn: boolean;
+ isDonating: boolean;
showLoading: boolean;
t: (
label: string,
@@ -82,15 +84,18 @@ type DonateFormProps = {
const mapStateToProps = createSelector(
signInLoadingSelector,
isSignedInSelector,
+ isDonatingSelector,
donationFormStateSelector,
userSelector,
(
showLoading: DonateFormProps['showLoading'],
isSignedIn: DonateFormProps['isSignedIn'],
+ isDonating: DonateFormProps['isDonating'],
donationFormState: DonateFormState,
{ email, theme }: { email: string; theme: Themes }
) => ({
isSignedIn,
+ isDonating,
showLoading,
donationFormState,
email,
@@ -310,7 +315,8 @@ class DonateForm extends Component {
theme,
t,
isMinimalForm,
- isSignedIn
+ isSignedIn,
+ isDonating
} = this.props;
const priorityTheme = defaultTheme ? defaultTheme : theme;
const isOneTime = donationDuration === 'onetime';
@@ -318,6 +324,7 @@ class DonateForm extends Component {
isOneTime ? 'donate.wallet-label' : 'donate.wallet-label-1',
{ usd: donationAmount / 100 }
)}:`;
+ const showMinimalPayments = isMinimalForm || !isDonating;
return (
<>
@@ -342,14 +349,16 @@ class DonateForm extends Component {
donationDuration={donationDuration}
handlePaymentButtonLoad={this.handlePaymentButtonLoad}
handleProcessing={handleProcessing}
- isMinimalForm={isMinimalForm}
+ isMinimalForm={showMinimalPayments}
isPaypalLoading={loading.paypal}
isSignedIn={isSignedIn}
onDonationStateChange={this.onDonationStateChange}
theme={priorityTheme}
/>
-
- {isMinimalForm && (
+ {(!loading.stripe || !loading.paypal) && (
+
+ )}
+ {showMinimalPayments && (
<>
{t('donate.or-card')}
- {t('buttons.support-our-nonprofit')}
+ {t('buttons.donate')}
From fc3756656ab43cbbeec2989e5bcc936e4be50c17 Mon Sep 17 00:00:00 2001
From: camperbot
Date: Mon, 13 Dec 2021 22:11:12 +0530
Subject: [PATCH 25/63] chore(i18n,curriculum): update translations (#44484)
---
.../file-metadata-microservice.md | 22 ++++----
.../timestamp-microservice.md | 30 +++++------
.../url-shortener-microservice.md | 22 ++++----
.../stock-price-checker.md | 52 +++++++++----------
4 files changed, 63 insertions(+), 63 deletions(-)
diff --git a/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md
index 73a21855f9..09caebba8e 100644
--- a/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md
+++ b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/file-metadata-microservice.md
@@ -1,6 +1,6 @@
---
id: bd7158d8c443edefaeb5bd0f
-title: File Metadata Microservice
+title: Мікросервіс метаданих файлу
challengeType: 4
forumTopicId: 301506
dashedName: file-metadata-microservice
@@ -8,21 +8,21 @@ dashedName: file-metadata-microservice
# --description--
-Build a full stack JavaScript app that is functionally similar to this: . Working on this project will involve you writing your code using one of the following methods:
+Створіть full stack додаток на JavaScript, який функціонально схожий до цього: . Робота над цим проектом залучатиме тебе писати свій код використовуючи один з наступних методів:
-- Clone [this GitHub repo](https://github.com/freeCodeCamp/boilerplate-project-filemetadata/) and complete your project locally.
-- Use [our Replit starter project](https://replit.com/github/freeCodeCamp/boilerplate-project-filemetadata) to complete your project.
-- Use a site builder of your choice to complete the project. Be sure to incorporate all the files from our GitHub repo.
+- Клонувати [цей репозиторій з GitHub](https://github.com/freeCodeCamp/boilerplate-project-filemetadata/) та локально завершити свій проект.
+- Використати [наш проект для початківців на Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-filemetadata) для завершення свого проекту.
+- Використати конструктор сайтів на свій вибір для завершення проекту. Впевніться, що ви зберегли всі файли із нашого GitHub репозиторію.
-When you are done, make sure a working demo of your project is hosted somewhere public. Then submit the URL to it in the `Solution Link` field. Optionally, also submit a link to your project's source code in the `GitHub Link` field.
+По завершенню переконайтеся, що працююча демоверсія вашого проекту розміщена у відкритому доступі. Потім введіть його URL-адресу в поле `Solution Link`. За бажанням також можете ввести посилання на вихідний код вашого проєкту в полі `GitHub Link`.
# --instructions--
-**HINT:** You can use the `multer` npm package to handle file uploading.
+**ПІДКАЗКА:** Ви можете використовувати npm пакет `multer` щоб опрацювати завантаження файлу.
# --hints--
-You should provide your own project, not the example URL.
+Вам необхідно вказати свій власний проект, а не приклад URL-адреси.
```js
(getUserInput) => {
@@ -34,7 +34,7 @@ You should provide your own project, not the example URL.
};
```
-You can submit a form that includes a file upload.
+Ви можете надіслати форму, що включає в себе завантаження файлу.
```js
async (getUserInput) => {
@@ -45,7 +45,7 @@ async (getUserInput) => {
};
```
-The form file input field has the `name` attribute set to `upfile`.
+Поле вводу файлу форми має параметр `name` встановлений в `upfile`.
```js
async (getUserInput) => {
@@ -56,7 +56,7 @@ async (getUserInput) => {
};
```
-When you submit a file, you receive the file `name`, `type`, and `size` in bytes within the JSON response.
+Коли ви надсилаєте файл, ви отримуєте `name`, `type` і `size` файлу в байтах у відповіді JSON.
```js
async (getUserInput) => {
diff --git a/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
index 3e27c39463..5bb3dc8366 100644
--- a/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
+++ b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
@@ -1,6 +1,6 @@
---
id: bd7158d8c443edefaeb5bdef
-title: Timestamp Microservice
+title: Мікросервіс часової мітки
challengeType: 4
forumTopicId: 301508
dashedName: timestamp-microservice
@@ -8,19 +8,19 @@ dashedName: timestamp-microservice
# --description--
-Build a full stack JavaScript app that is functionally similar to this: . Working on this project will involve you writing your code using one of the following methods:
+Створіть full stack додаток на JavaScript, який функціонально схожий до цього: . Робота над цим проектом залучатиме тебе писати свій код використовуючи один з наступних методів:
-- Clone [this GitHub repo](https://github.com/freeCodeCamp/boilerplate-project-timestamp/) and complete your project locally.
-- Use [our Replit starter project](https://replit.com/github/freeCodeCamp/boilerplate-project-timestamp) to complete your project.
-- Use a site builder of your choice to complete the project. Be sure to incorporate all the files from our GitHub repo.
+- Клонувати [цей репозиторій з GitHub](https://github.com/freeCodeCamp/boilerplate-project-timestamp/) та локально завершити свій проект.
+- Використати [наш проект для початківців на Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-timestamp) для завершення свого проекту.
+- Використати конструктор сайтів на свій вибір для завершення проекту. Впевніться, що ви зберегли всі файли із нашого GitHub репозиторію.
-When you are done, make sure a working demo of your project is hosted somewhere public. Then submit the URL to it in the `Solution Link` field. Optionally, also submit a link to your project's source code in the `GitHub Link` field.
+По завершенню переконайтеся, що працююча демоверсія вашого проєкту розміщена у відкритому доступі. Потім введіть його URL-адресу в поле `Solution Link`. За бажанням також можете ввести посилання на вихідний код вашого проєкту в полі `GitHub Link`.
-**Note:** Time zones conversion is not a purpose of this project, so assume all sent valid dates will be parsed with `new Date()` as GMT dates.
+**Зверніть увагу:** оскільки мета проєкту не в перетворенні часу, припускайте, що усі відправлені дати будуть розглянуті `new Date()` як GMT.
# --hints--
-You should provide your own project, not the example URL.
+Вам необхідно вказати свій власний проект, а не приклад URL-адреси.
```js
(getUserInput) => {
@@ -30,7 +30,7 @@ You should provide your own project, not the example URL.
};
```
-A request to `/api/:date?` with a valid date should return a JSON object with a `unix` key that is a Unix timestamp of the input date in milliseconds
+Запит на `/api/:date?` з дійсною датою має повернути об’єкт JSON з `unix` ключем, який є часовою міткою Unix введеної дати в мілісекундах
```js
(getUserInput) =>
@@ -48,7 +48,7 @@ A request to `/api/:date?` with a valid date should return a JSON object with a
);
```
-A request to `/api/:date?` with a valid date should return a JSON object with a `utc` key that is a string of the input date in the format: `Thu, 01 Jan 1970 00:00:00 GMT`
+Запит на `/api/:date?` з дійсною датою має повернути об'єкт JSON з `utc` ключем, який є рядком введеної дати в форматі: `Thu, 01 Jan 1970 00:00:00 GMT`
```js
(getUserInput) =>
@@ -66,7 +66,7 @@ A request to `/api/:date?` with a valid date should return a JSON object with a
);
```
-A request to `/api/1451001600000` should return `{ unix: 1451001600000, utc: "Fri, 25 Dec 2015 00:00:00 GMT" }`
+Запит до `/api/1451001600000` має повертати `{ unix: 1451001600000, utc: "Fri, 25 Dec 2015 00:00:00 GMT" }`
```js
(getUserInput) =>
@@ -83,7 +83,7 @@ A request to `/api/1451001600000` should return `{ unix: 1451001600000, utc: "Fr
);
```
-Your project can handle dates that can be successfully parsed by `new Date(date_string)`
+Ваш проєкт може обробляти дати, які можуть бути успішно розпарсені за допомогою `new Date(date_string)`
```js
(getUserInput) =>
@@ -100,7 +100,7 @@ Your project can handle dates that can be successfully parsed by `new Date(date_
);
```
-If the input date string is invalid, the api returns an object having the structure `{ error : "Invalid Date" }`
+Якщо введений рядок дати невірний, api повертає об'єкт, що має структуру `{ error : "Invalid Date" }`
```js
(getUserInput) =>
@@ -114,7 +114,7 @@ If the input date string is invalid, the api returns an object having the struct
);
```
-An empty date parameter should return the current time in a JSON object with a `unix` key
+Порожній параметр дати має повернути поточний час в об'єкті JSON з ключем `unix`
```js
(getUserInput) =>
@@ -129,7 +129,7 @@ An empty date parameter should return the current time in a JSON object with a `
);
```
-An empty date parameter should return the current time in a JSON object with a `utc` key
+Порожній параметр дати має повернути поточний час в об'єкті JSON з ключем `utc`
```js
(getUserInput) =>
diff --git a/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md
index b10b50c3a9..63b48c1f3a 100644
--- a/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md
+++ b/curriculum/challenges/ukrainian/05-back-end-development-and-apis/back-end-development-and-apis-projects/url-shortener-microservice.md
@@ -1,6 +1,6 @@
---
id: bd7158d8c443edefaeb5bd0e
-title: URL Shortener Microservice
+title: Мікросервіс скорочування URL-адрес
challengeType: 4
forumTopicId: 301509
dashedName: url-shortener-microservice
@@ -8,21 +8,21 @@ dashedName: url-shortener-microservice
# --description--
-Build a full stack JavaScript app that is functionally similar to this: . Working on this project will involve you writing your code using one of the following methods:
+Створіть повний пакет додатку на JavaScript, який функціонально схожий до цього: . Робота над цим проєктом включатиме написання коду одним із таких методів:
-- Clone [this GitHub repo](https://github.com/freeCodeCamp/boilerplate-project-urlshortener/) and complete your project locally.
-- Use [our Replit starter project](https://replit.com/github/freeCodeCamp/boilerplate-project-urlshortener) to complete your project.
-- Use a site builder of your choice to complete the project. Be sure to incorporate all the files from our GitHub repo.
+- Клонувати [цей репозиторій з GitHub](https://github.com/freeCodeCamp/boilerplate-project-urlshortener/) та локально завершити свій проект.
+- Використати [наш проект для початківців на Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-urlshortener) для завершення свого проекту.
+- Використати конструктор сайту на свій вибір для завершення проекту. Впевнитися, що включили всі файли з нашого репозиторію GitHub.
-When you are done, make sure a working demo of your project is hosted somewhere public. Then submit the URL to it in the `Solution Link` field. Optionally, also submit a link to your project's source code in the `GitHub Link` field.
+По завершенню переконайтеся, що працююча демо-версія вашого проекту розміщена у відкритому доступі. Потім введіть його URL-адресу в поле `Solution Link`. За бажанням також можете ввести посилання на вихідний код вашого проєкту в полі `GitHub Link`.
# --instructions--
-**HINT:** Do not forget to use a body parsing middleware to handle the POST requests. Also, you can use the function `dns.lookup(host, cb)` from the `dns` core module to verify a submitted URL.
+**ПІДКАЗКА:** не забудьте використовувати проміжне програмне забезпечення body parsing для обробки запитів POST. Також ви можете використовувати функцію `dns.lookup(host, cb)` з основного модуля `dns` для перевірки надісланої URL-адреси.
# --hints--
-You should provide your own project, not the example URL.
+Вам необхідно вказати свій власний проект, а не приклад URL-адреси.
```js
(getUserInput) => {
@@ -34,7 +34,7 @@ You should provide your own project, not the example URL.
};
```
-You can POST a URL to `/api/shorturl` and get a JSON response with `original_url` and `short_url` properties. Here's an example: `{ original_url : 'https://freeCodeCamp.org', short_url : 1}`
+Ви можете POST URL до `/api/shorturl` та отримати відповідь JSON з властивостями `original_url` і `short_url`. Ось приклад: `{ original_url : 'https://freeCodeCamp.org', short_url : 1}`
```js
async (getUserInput) => {
@@ -56,7 +56,7 @@ async (getUserInput) => {
};
```
-When you visit `/api/shorturl/`, you will be redirected to the original URL.
+Коли ви відкриєте `/api/shorturl/`, вас буде перенаправлено на оригінальне URL.
```js
async (getUserInput) => {
@@ -88,7 +88,7 @@ async (getUserInput) => {
};
```
-If you pass an invalid URL that doesn't follow the valid `http://www.example.com` format, the JSON response will contain `{ error: 'invalid url' }`
+Якщо ви введете недійсний URL, який не відповідає дійсному формату `http://www.example.com` , то відповідь JSON буде містити `{ error: 'invalid url' }`
```js
async (getUserInput) => {
diff --git a/curriculum/challenges/ukrainian/09-information-security/information-security-projects/stock-price-checker.md b/curriculum/challenges/ukrainian/09-information-security/information-security-projects/stock-price-checker.md
index c982308617..4d7baddcb5 100644
--- a/curriculum/challenges/ukrainian/09-information-security/information-security-projects/stock-price-checker.md
+++ b/curriculum/challenges/ukrainian/09-information-security/information-security-projects/stock-price-checker.md
@@ -1,6 +1,6 @@
---
id: 587d824a367417b2b2512c44
-title: Stock Price Checker
+title: Перевірка ціни на ринку акцій
challengeType: 4
forumTopicId: 301572
dashedName: stock-price-checker
@@ -8,38 +8,38 @@ dashedName: stock-price-checker
# --description--
-Build a full stack JavaScript app that is functionally similar to this: .
+Напишіть повний пакет програми JavaScript, що функціонально подібний до цього: .
-Since all reliable stock price APIs require an API key, we've built a workaround. Use to get up-to-date stock price information without needing to sign up for your own key.
+Оскільки всі надійні API цін на акції вимагають API-ключа, ми створили обхідний шлях. Користуйтесь , аби отримувати актуальну інформацію про ціни на акції без необхідності підписуватись на власний ключ.
-Working on this project will involve you writing your code using one of the following methods:
+При роботі над цим проєктом Ви будете писати код, використовуючи один із наступних методів:
-- Clone [this GitHub repo](https://github.com/freeCodeCamp/boilerplate-project-stockchecker/) and complete your project locally.
-- Use [our Replit starter project](https://replit.com/github/freeCodeCamp/boilerplate-project-stockchecker) to complete your project.
-- Use a site builder of your choice to complete the project. Be sure to incorporate all the files from our GitHub repo.
+- Дублюйте [цей репозиторій GitHub](https://github.com/freeCodeCamp/boilerplate-project-stockchecker/) та завершіть свій проєкт локально.
+- Використовуйте [наш стартовий проєкт Replit](https://replit.com/github/freeCodeCamp/boilerplate-project-stockchecker) для завершення Вашого проєкту.
+- Використовуйте конструктор сайту на власний розсуд, щоб завершити проєкт. Впевніться, що Ви включили усі файли з нашого репозиторію GitHub.
-When you are done, make sure a working demo of your project is hosted somewhere public. Then submit the URL to it in the `Solution Link` field. Optionally, also submit a link to your project's source code in the `GitHub Link` field.
+Коли Ви завершите роботу, переконайтесь, що робоча демоверсія Вашого проєкту розміщена у вільному доступі. Потім введіть URL-адресу проєкту у поле `Solution Link`. За бажанням також введіть посилання на вихідний код проєкту у полі `GitHub Link`.
# --instructions--
-1. SET `NODE_ENV` to `test` without quotes and set `DB` to your MongoDB connection string
-2. Complete the project in `routes/api.js` or by creating a handler/controller
-3. You will add any security features to `server.js`
-4. You will create all of the functional tests in `tests/2_functional-tests.js`
+1. Встановіть `NODE_ENV` до `test` без лапок та встановіть `DB` на ваш MongoDB
+2. Завершіть проект в `routes/api.js` або через створення обробника/контролера
+3. Додайте будь-які заходи безпеки до `server.js`
+4. Створіть усі функціональні тести в `tests/2_functional-tests.js`
-**Note** Privacy Considerations: Due to the requirement that only 1 like per IP should be accepted, you will have to save IP addresses. It is important to remain compliant with data privacy laws such as the General Data Protection Regulation. One option is to get permission to save the user's data, but it is much simpler to anonymize it. For this challenge, remember to anonymize IP addresses before saving them to the database. If you need ideas on how to do this, you may choose to hash the data, truncate it, or set part of the IP address to 0.
+**Зверніть увагу** на питання конфіденційності: вам доведеться зберегти IP-адресу. Важливо дотримуватися законів про конфіденційність даних, як от загального регламенту про захист даних. Один із варіантів — отримати дозвіл на збереження даних користувача, однак все ж простіше зробити їх анонімними. Не забудьте зробити ваші IP-адреси анонімними, перш ніж зберігати їх до бази даних у цьому завданні. Для цього ви можете скористатися хеш-функцією, методом truncate чи просто змінити частину IP-адреси на 0.
-Write the following tests in `tests/2_functional-tests.js`:
+Напишіть наступні тести в `tests/2_functional-tests.js`:
-- Viewing one stock: GET request to `/api/stock-prices/`
-- Viewing one stock and liking it: GET request to `/api/stock-prices/`
-- Viewing the same stock and liking it again: GET request to `/api/stock-prices/`
-- Viewing two stocks: GET request to `/api/stock-prices/`
-- Viewing two stocks and liking them: GET request to `/api/stock-prices/`
+- Перегляд однієї акції: запит GET до `/api/stock-prices/`
+- Якщо Ви переглянули одну акцію й вона Вам сподобалась: запит GET в `/api/stock-prices/`
+- Якщо Ви переглянули ту ж саму акцію й обрали її знову: запит GET в `/api/stock-prices/`
+- Якщо Ви переглянули дві акції: запит GET в `/api/stock-prices/`
+- Якщо Ви переглянули дві акції та вони Вам сподобались: запит GET в `/api/stock-prices/`
# --hints--
-You can provide your own project, not the example URL.
+Ви можете додати свій проєкт, а не URL-посилання прикладу.
```js
(getUserInput) => {
@@ -49,7 +49,7 @@ You can provide your own project, not the example URL.
};
```
-You should set the content security policies to only allow loading of scripts and CSS from your server.
+Ви маєте налаштувати політику безпеки вмісту так, щоб дозволити завантаження скриптів та CSS лише з вашого сервера.
```js
async (getUserInput) => {
@@ -64,7 +64,7 @@ async (getUserInput) => {
};
```
-You can send a `GET` request to `/api/stock-prices`, passing a NASDAQ stock symbol to a `stock` query parameter. The returned object will contain a property named `stockData`.
+Ви можете надіслати запит `GET` до `/api/stock-prices`, передаючи символ акції NASDAQ в параметр запиту `stock`. Отриманий об'єкт міститиме властивість із назвою `stockData`.
```js
async (getUserInput) => {
@@ -76,7 +76,7 @@ async (getUserInput) => {
};
```
-The `stockData` property includes the `stock` symbol as a string, the `price` as a number, and `likes` as a number.
+Властивість `stockData` включає символ `stock` у вигляді строки, `price` та `likes` у вигляді чисел.
```js
async (getUserInput) => {
@@ -91,13 +91,13 @@ async (getUserInput) => {
};
```
-You can also pass along a `like` field as `true` (boolean) to have your like added to the stock(s). Only 1 like per IP should be accepted.
+Ви також можете передати поле `like` як `true` (логічний тип), аби ваші вподобання було додано до акції(й). Приймається лише одне вподобання на IP.
```js
```
-If you pass along 2 stocks, the returned value will be an array with information about both stocks. Instead of `likes`, it will display `rel_likes` (the difference between the likes on both stocks) for both `stockData` objects.
+Якщо Ви передасте 2 акції, то отриманим значенням буде масив із інформацією про обидві акції. Замість `likes` буде показано `rel_likes` (різниця між уподобаннями на обох акціях) для обох об'єктів `stockData`.
```js
async (getUserInput) => {
@@ -112,7 +112,7 @@ async (getUserInput) => {
};
```
-All 5 functional tests are complete and passing.
+Усі 5 функціональних тестів завершено та успішно пройдено.
```js
async (getUserInput) => {
From 7ccf418f10814c9c639f9faa9554c04f6d0deca6 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Mon, 13 Dec 2021 17:58:05 +0000
Subject: [PATCH 26/63] fix(deps): update dependency react-i18next to v11.15.1
---
client/package.json | 2 +-
package-lock.json | 16 ++++++++--------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/client/package.json b/client/package.json
index c46b258c5a..3ec9364c8f 100644
--- a/client/package.json
+++ b/client/package.json
@@ -98,7 +98,7 @@
"react-ga": "3.3.0",
"react-helmet": "6.1.0",
"react-hotkeys": "2.0.0",
- "react-i18next": "11.15.0",
+ "react-i18next": "11.15.1",
"react-instantsearch-dom": "6.17.0",
"react-lazy-load": "3.1.13",
"react-monaco-editor": "0.40.0",
diff --git a/package-lock.json b/package-lock.json
index a4bdcc75ea..46e8fdd69c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -266,7 +266,7 @@
"react-ga": "3.3.0",
"react-helmet": "6.1.0",
"react-hotkeys": "2.0.0",
- "react-i18next": "11.15.0",
+ "react-i18next": "11.15.1",
"react-instantsearch-dom": "6.17.0",
"react-lazy-load": "3.1.13",
"react-monaco-editor": "0.40.0",
@@ -45152,9 +45152,9 @@
}
},
"node_modules/react-i18next": {
- "version": "11.15.0",
- "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.15.0.tgz",
- "integrity": "sha512-7JOIO7KkKSxB7Ycof6ilx9aQ/tviInTqN2sqHyKrjd5MKHyFyKyXVkYrb7KmG/ISFPA4ugWwor5Qsq8IVyQ/Cg==",
+ "version": "11.15.1",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.15.1.tgz",
+ "integrity": "sha512-lnje1uKu5XeM5MLvfbt1oygF+nEIZnpOM4Iu8bkx5ECD4XRYgi3SJDmolrp0EDxDHeK2GgFb+vEEK0hsZ9sjeA==",
"dependencies": {
"@babel/runtime": "^7.14.5",
"html-escaper": "^2.0.2",
@@ -57743,7 +57743,7 @@
"react-ga": "3.3.0",
"react-helmet": "6.1.0",
"react-hotkeys": "2.0.0",
- "react-i18next": "11.15.0",
+ "react-i18next": "11.15.1",
"react-instantsearch-dom": "6.17.0",
"react-lazy-load": "3.1.13",
"react-monaco-editor": "0.40.0",
@@ -90867,9 +90867,9 @@
}
},
"react-i18next": {
- "version": "11.15.0",
- "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.15.0.tgz",
- "integrity": "sha512-7JOIO7KkKSxB7Ycof6ilx9aQ/tviInTqN2sqHyKrjd5MKHyFyKyXVkYrb7KmG/ISFPA4ugWwor5Qsq8IVyQ/Cg==",
+ "version": "11.15.1",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.15.1.tgz",
+ "integrity": "sha512-lnje1uKu5XeM5MLvfbt1oygF+nEIZnpOM4Iu8bkx5ECD4XRYgi3SJDmolrp0EDxDHeK2GgFb+vEEK0hsZ9sjeA==",
"requires": {
"@babel/runtime": "^7.14.5",
"html-escaper": "^2.0.2",
From b4b3ecd5ce62feea1408a7a403c3c5bc39983a06 Mon Sep 17 00:00:00 2001
From: Najmieh Sadat Safarabadi
Date: Tue, 14 Dec 2021 01:02:34 +0330
Subject: [PATCH 27/63] fix(curriculum): remove unnecessary quotation marks
(#44486)
---
.../link-to-internal-sections-of-a-page-with-anchor-elements.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/curriculum/challenges/english/01-responsive-web-design/basic-html-and-html5/link-to-internal-sections-of-a-page-with-anchor-elements.md b/curriculum/challenges/english/01-responsive-web-design/basic-html-and-html5/link-to-internal-sections-of-a-page-with-anchor-elements.md
index b951c3fa6e..6e2b5097e2 100644
--- a/curriculum/challenges/english/01-responsive-web-design/basic-html-and-html5/link-to-internal-sections-of-a-page-with-anchor-elements.md
+++ b/curriculum/challenges/english/01-responsive-web-design/basic-html-and-html5/link-to-internal-sections-of-a-page-with-anchor-elements.md
@@ -25,7 +25,7 @@ When users click the `Contacts` link, they'll be taken to the section of the web
# --instructions--
-Change your external link to an internal link by changing the `href` attribute to `"#footer"` and the text from `cat photos` to `Jump to Bottom`.
+Change your external link to an internal link by changing the `href` attribute to `#footer` and the text from `cat photos` to `Jump to Bottom`.
Remove the `target="_blank"` attribute from the anchor tag since this causes the linked document to open in a new window tab.
From bb05b67c4781bc5d52305ab06fd6f06ac2e366e1 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Mon, 13 Dec 2021 22:09:28 +0000
Subject: [PATCH 28/63] chore(deps): update dependency jest to v27.4.5
---
package-lock.json | 414 +++++++++++++++++++++++-----------------------
package.json | 2 +-
2 files changed, 208 insertions(+), 208 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 46e8fdd69c..97eab93988 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -83,7 +83,7 @@
"execa": "5.1.1",
"faker": "5.5.3",
"husky": "7.0.4",
- "jest": "27.4.4",
+ "jest": "27.4.5",
"js-yaml": "3.14.1",
"lint-staged": "12.1.2",
"lodash": "4.17.21",
@@ -3787,15 +3787,15 @@
}
},
"node_modules/@jest/core": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.4.tgz",
- "integrity": "sha512-xBNPVqYAdAiAMXnb4ugx9Cdmr0S52lBsLbQMR/sGBRO0810VSPKiuSDtuup6qdkK1e9vxbv3KK3IAP1QFAp8mw==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.5.tgz",
+ "integrity": "sha512-3tm/Pevmi8bDsgvo73nX8p/WPng6KWlCyScW10FPEoN1HU4pwI83tJ3TsFvi1FfzsjwUlMNEPowgb/rPau/LTQ==",
"dev": true,
"dependencies": {
"@jest/console": "^27.4.2",
- "@jest/reporters": "^27.4.4",
+ "@jest/reporters": "^27.4.5",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
@@ -3804,15 +3804,15 @@
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-changed-files": "^27.4.2",
- "jest-config": "^27.4.4",
- "jest-haste-map": "^27.4.4",
+ "jest-config": "^27.4.5",
+ "jest-haste-map": "^27.4.5",
"jest-message-util": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.4",
- "jest-resolve-dependencies": "^27.4.4",
- "jest-runner": "^27.4.4",
- "jest-runtime": "^27.4.4",
- "jest-snapshot": "^27.4.4",
+ "jest-resolve": "^27.4.5",
+ "jest-resolve-dependencies": "^27.4.5",
+ "jest-runner": "^27.4.5",
+ "jest-runtime": "^27.4.5",
+ "jest-snapshot": "^27.4.5",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"jest-watcher": "^27.4.2",
@@ -3959,15 +3959,15 @@
}
},
"node_modules/@jest/reporters": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.4.tgz",
- "integrity": "sha512-ssyJSw9B9Awb1QaxDhIPSs4de1b7SE2kv7tqFehQL13xpn5HUkMYZK/ufTOXiCAnXFOZS+XDl1GaQ/LmJAzI1A==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.5.tgz",
+ "integrity": "sha512-3orsG4vi8zXuBqEoy2LbnC1kuvkg1KQUgqNxmxpQgIOQEPeV0onvZu+qDQnEoX8qTQErtqn/xzcnbpeTuOLSiA==",
"dev": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^27.4.2",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -3980,10 +3980,10 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.4.4",
- "jest-resolve": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
+ "jest-resolve": "^27.4.5",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.4",
+ "jest-worker": "^27.4.5",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
@@ -4061,9 +4061,9 @@
}
},
"node_modules/@jest/reporters/node_modules/jest-worker": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
- "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz",
+ "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -4158,24 +4158,24 @@
}
},
"node_modules/@jest/test-sequencer": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.4.tgz",
- "integrity": "sha512-mCh+d4JTGTtX7vr13d7q2GHJy33nAobEwtEJ8X3u7R8+0ImVO2eAsQzsLfX8lyvdYHBxYABhqbYuaUNo42/pQw==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.5.tgz",
+ "integrity": "sha512-n5woIn/1v+FT+9hniymHPARA9upYUmfi5Pw9ewVwXCDlK4F5/Gkees9v8vdjGdAIJ2MPHLHodiajLpZZanWzEQ==",
"dev": true,
"dependencies": {
"@jest/test-result": "^27.4.2",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.4",
- "jest-runtime": "^27.4.4"
+ "jest-haste-map": "^27.4.5",
+ "jest-runtime": "^27.4.5"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/@jest/transform": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.4.tgz",
- "integrity": "sha512-7U/nDSrGsGzL7+X8ScNFV71w8u8knJQWSa9C2xsrrKLMOgb+rWuCG4VAyWke/53BU96GnT+Ka81xCAHA5gk6zA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz",
+ "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==",
"dev": true,
"dependencies": {
"@babel/core": "^7.1.0",
@@ -4185,7 +4185,7 @@
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
"jest-regex-util": "^27.4.0",
"jest-util": "^27.4.2",
"micromatch": "^4.0.4",
@@ -17430,12 +17430,12 @@
}
},
"node_modules/babel-jest": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.4.tgz",
- "integrity": "sha512-+6RVutZxOQgJkt4svgTHPFtOQlVe9dUg3wrimIAM38pY6hL/nsL8glfFSUjD9jNVjaVjzkCzj6loFFecrjr9Qw==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.5.tgz",
+ "integrity": "sha512-3uuUTjXbgtODmSv/DXO9nZfD52IyC2OYTFaXGRzL0kpykzroaquCrD5+lZNafTvZlnNqZHt5pb0M08qVBZnsnA==",
"dev": true,
"dependencies": {
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.0.0",
@@ -33098,14 +33098,14 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
"node_modules/jest": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.4.tgz",
- "integrity": "sha512-AXwEIFa58Uf1Jno3/KSo5HZZ0/2Xwqvfrz0/3bmTwImkFlbOvz5vARAW9nTrxRLkojjkitaZ1KNKAtw3JRFAaA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.5.tgz",
+ "integrity": "sha512-uT5MiVN3Jppt314kidCk47MYIRilJjA/l2mxwiuzzxGUeJIvA8/pDaJOAX5KWvjAo7SCydcW0/4WEtgbLMiJkg==",
"dev": true,
"dependencies": {
- "@jest/core": "^27.4.4",
+ "@jest/core": "^27.4.5",
"import-local": "^3.0.2",
- "jest-cli": "^27.4.4"
+ "jest-cli": "^27.4.5"
},
"bin": {
"jest": "bin/jest.js"
@@ -33137,9 +33137,9 @@
}
},
"node_modules/jest-circus": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.4.tgz",
- "integrity": "sha512-4DWhvQerDq5X4GaqhEUoZiBhuNdKDGr0geW0iJwarbDljAmGaGOErKQG+z2PBr0vgN05z7tsGSY51mdWr8E4xg==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.5.tgz",
+ "integrity": "sha512-eTNWa9wsvBwPykhMMShheafbwyakcdHZaEYh5iRrQ0PFJxkDP/e3U/FvzGuKWu2WpwUA3C3hPlfpuzvOdTVqnw==",
"dev": true,
"dependencies": {
"@jest/environment": "^27.4.4",
@@ -33154,8 +33154,8 @@
"jest-each": "^27.4.2",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-runtime": "^27.4.4",
- "jest-snapshot": "^27.4.4",
+ "jest-runtime": "^27.4.5",
+ "jest-snapshot": "^27.4.5",
"jest-util": "^27.4.2",
"pretty-format": "^27.4.2",
"slash": "^3.0.0",
@@ -33246,19 +33246,19 @@
}
},
"node_modules/jest-cli": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.4.tgz",
- "integrity": "sha512-+MfsHnZPUOBigCBURuQFRpgYoPCgmIFkICkqt4SrramZCUp/UAuWcst4pMZb84O3VU8JyKJmnpGG4qH8ClQloA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.5.tgz",
+ "integrity": "sha512-hrky3DSgE0u7sQxaCL7bdebEPHx5QzYmrGuUjaPLmPE8jx5adtvGuOlRspvMoVLTTDOHRnZDoRLYJuA+VCI7Hg==",
"dev": true,
"dependencies": {
- "@jest/core": "^27.4.4",
+ "@jest/core": "^27.4.5",
"@jest/test-result": "^27.4.2",
"@jest/types": "^27.4.2",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
- "jest-config": "^27.4.4",
+ "jest-config": "^27.4.5",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"prompts": "^2.0.1",
@@ -33397,28 +33397,28 @@
}
},
"node_modules/jest-config": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.4.tgz",
- "integrity": "sha512-6lxg0ugO6KS2zKEbpdDwBzu1IT0Xg4/VhxXMuBu+z/5FvBjLCEMTaWQm3bCaGCZUR9j9FK4DzUIxyhIgn6kVEg==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.5.tgz",
+ "integrity": "sha512-t+STVJtPt+fpqQ8GBw850NtSQbnDOw/UzdPfzDaHQ48/AylQlW7LHj3dH+ndxhC1UxJ0Q3qkq7IH+nM1skwTwA==",
"dev": true,
"dependencies": {
"@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.4.4",
+ "@jest/test-sequencer": "^27.4.5",
"@jest/types": "^27.4.2",
- "babel-jest": "^27.4.4",
+ "babel-jest": "^27.4.5",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.1",
"graceful-fs": "^4.2.4",
- "jest-circus": "^27.4.4",
+ "jest-circus": "^27.4.5",
"jest-environment-jsdom": "^27.4.4",
"jest-environment-node": "^27.4.4",
"jest-get-type": "^27.4.0",
- "jest-jasmine2": "^27.4.4",
+ "jest-jasmine2": "^27.4.5",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.4",
- "jest-runner": "^27.4.4",
+ "jest-resolve": "^27.4.5",
+ "jest-runner": "^27.4.5",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"micromatch": "^4.0.4",
@@ -33750,9 +33750,9 @@
}
},
"node_modules/jest-haste-map": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.4.tgz",
- "integrity": "sha512-kvspmHmgPIZoDaqUsvsJFTaspuxhATvdO6wsFNGNSi8kfdiOCEEvECNbht8xG+eE5Ol88JyJmp2D7RF4dYo85Q==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz",
+ "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==",
"dev": true,
"dependencies": {
"@jest/types": "^27.4.2",
@@ -33764,7 +33764,7 @@
"jest-regex-util": "^27.4.0",
"jest-serializer": "^27.4.0",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.4",
+ "jest-worker": "^27.4.5",
"micromatch": "^4.0.4",
"walker": "^1.0.7"
},
@@ -33785,9 +33785,9 @@
}
},
"node_modules/jest-haste-map/node_modules/jest-worker": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
- "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz",
+ "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -33814,9 +33814,9 @@
}
},
"node_modules/jest-jasmine2": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.4.tgz",
- "integrity": "sha512-ygk2tUgtLeN3ouj4KEYw9p81GLI1EKrnvourPULN5gdgB482PH5op9gqaRG0IenbJhBbbRwiSvh5NoBoQZSqdA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.5.tgz",
+ "integrity": "sha512-oUnvwhJDj2LhOiUB1kdnJjkx8C5PwgUZQb9urF77mELH9DGR4e2GqpWQKBOYXWs5+uTN9BGDqRz3Aeg5Wts7aw==",
"dev": true,
"dependencies": {
"@babel/traverse": "^7.1.0",
@@ -33832,8 +33832,8 @@
"jest-each": "^27.4.2",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-runtime": "^27.4.4",
- "jest-snapshot": "^27.4.4",
+ "jest-runtime": "^27.4.5",
+ "jest-snapshot": "^27.4.5",
"jest-util": "^27.4.2",
"pretty-format": "^27.4.2",
"throat": "^6.0.1"
@@ -34336,15 +34336,15 @@
}
},
"node_modules/jest-resolve": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.4.tgz",
- "integrity": "sha512-Yh5jK3PBmDbm01Rc8pT0XqpBlTPEGwWp7cN61ijJuwony/tR2Taof3TLy6yfNiuRS8ucUOPO7NBYm3ei38kkcg==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.5.tgz",
+ "integrity": "sha512-xU3z1BuOz/hUhVUL+918KqUgK+skqOuUsAi7A+iwoUldK6/+PW+utK8l8cxIWT9AW7IAhGNXjSAh1UYmjULZZw==",
"dev": true,
"dependencies": {
"@jest/types": "^27.4.2",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
"jest-pnp-resolver": "^1.2.2",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
@@ -34357,14 +34357,14 @@
}
},
"node_modules/jest-resolve-dependencies": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.4.tgz",
- "integrity": "sha512-iAnpCXh81sd9nbyqySvm5/aV9X6JZKE0dQyFXTC8tptXcdrgS0vjPFy+mEgzPHxXw+tq4TQupuTa0n8OXwRIxw==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.5.tgz",
+ "integrity": "sha512-elEVvkvRK51y037NshtEkEnukMBWvlPzZHiL847OrIljJ8yIsujD2GXRPqDXC4rEVKbcdsy7W0FxoZb4WmEs7w==",
"dev": true,
"dependencies": {
"@jest/types": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-snapshot": "^27.4.4"
+ "jest-snapshot": "^27.4.5"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -34450,15 +34450,15 @@
}
},
"node_modules/jest-runner": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.4.tgz",
- "integrity": "sha512-AXv/8Q0Xf1puWnDf52m7oLrK7sXcv6re0V/kItwTSVHJbX7Oebm07oGFQqGmq0R0mhO1zpmB3OpqRuaCN2elPA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.5.tgz",
+ "integrity": "sha512-/irauncTfmY1WkTaRQGRWcyQLzK1g98GYG/8QvIPviHgO1Fqz1JYeEIsSfF+9mc/UTA6S+IIHFgKyvUrtiBIZg==",
"dev": true,
"dependencies": {
"@jest/console": "^27.4.2",
"@jest/environment": "^27.4.4",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -34468,13 +34468,13 @@
"jest-docblock": "^27.4.0",
"jest-environment-jsdom": "^27.4.4",
"jest-environment-node": "^27.4.4",
- "jest-haste-map": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
"jest-leak-detector": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-resolve": "^27.4.4",
- "jest-runtime": "^27.4.4",
+ "jest-resolve": "^27.4.5",
+ "jest-runtime": "^27.4.5",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.4",
+ "jest-worker": "^27.4.5",
"source-map-support": "^0.5.6",
"throat": "^6.0.1"
},
@@ -34541,9 +34541,9 @@
}
},
"node_modules/jest-runner/node_modules/jest-worker": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
- "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz",
+ "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -34582,9 +34582,9 @@
}
},
"node_modules/jest-runtime": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.4.tgz",
- "integrity": "sha512-tZGay6P6vXJq8t4jVFAUzYHx+lzIHXjz+rj1XBk6mAR1Lwtf5kz0Uun7qNuU+oqpZu4+hhuxpUfXb6j30bEPqA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.5.tgz",
+ "integrity": "sha512-CIYqwuJQXHQtPd/idgrx4zgJ6iCb6uBjQq1RSAGQrw2S8XifDmoM1Ot8NRd80ooAm+ZNdHVwsktIMGlA1F1FAQ==",
"dev": true,
"dependencies": {
"@jest/console": "^27.4.2",
@@ -34592,7 +34592,7 @@
"@jest/globals": "^27.4.4",
"@jest/source-map": "^27.4.0",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/yargs": "^16.0.0",
"chalk": "^4.0.0",
@@ -34602,12 +34602,12 @@
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
"jest-message-util": "^27.4.2",
"jest-mock": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.4",
- "jest-snapshot": "^27.4.4",
+ "jest-resolve": "^27.4.5",
+ "jest-snapshot": "^27.4.5",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"slash": "^3.0.0",
@@ -34758,9 +34758,9 @@
}
},
"node_modules/jest-snapshot": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.4.tgz",
- "integrity": "sha512-yy+rpCvYMOjTl7IMuaMI9OP9WT229zi8BhdNHm6e6mttAOIzvIiCxFoZ6yRxaV3HDPPgMryi+ReX2b8+IQJdPA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.5.tgz",
+ "integrity": "sha512-eCi/iM1YJFrJWiT9de4+RpWWWBqsHiYxFG9V9o/n0WXs6GpW4lUt4FAHAgFPTLPqCUVzrMQmSmTZSgQzwqR7IQ==",
"dev": true,
"dependencies": {
"@babel/core": "^7.7.2",
@@ -34769,7 +34769,7 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.0.0",
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/babel__traverse": "^7.0.4",
"@types/prettier": "^2.1.5",
@@ -34779,10 +34779,10 @@
"graceful-fs": "^4.2.4",
"jest-diff": "^27.4.2",
"jest-get-type": "^27.4.0",
- "jest-haste-map": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-resolve": "^27.4.4",
+ "jest-resolve": "^27.4.5",
"jest-util": "^27.4.2",
"natural-compare": "^1.4.0",
"pretty-format": "^27.4.2",
@@ -58859,15 +58859,15 @@
}
},
"@jest/core": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.4.tgz",
- "integrity": "sha512-xBNPVqYAdAiAMXnb4ugx9Cdmr0S52lBsLbQMR/sGBRO0810VSPKiuSDtuup6qdkK1e9vxbv3KK3IAP1QFAp8mw==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.5.tgz",
+ "integrity": "sha512-3tm/Pevmi8bDsgvo73nX8p/WPng6KWlCyScW10FPEoN1HU4pwI83tJ3TsFvi1FfzsjwUlMNEPowgb/rPau/LTQ==",
"dev": true,
"requires": {
"@jest/console": "^27.4.2",
- "@jest/reporters": "^27.4.4",
+ "@jest/reporters": "^27.4.5",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
@@ -58876,15 +58876,15 @@
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-changed-files": "^27.4.2",
- "jest-config": "^27.4.4",
- "jest-haste-map": "^27.4.4",
+ "jest-config": "^27.4.5",
+ "jest-haste-map": "^27.4.5",
"jest-message-util": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.4",
- "jest-resolve-dependencies": "^27.4.4",
- "jest-runner": "^27.4.4",
- "jest-runtime": "^27.4.4",
- "jest-snapshot": "^27.4.4",
+ "jest-resolve": "^27.4.5",
+ "jest-resolve-dependencies": "^27.4.5",
+ "jest-runner": "^27.4.5",
+ "jest-runtime": "^27.4.5",
+ "jest-snapshot": "^27.4.5",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"jest-watcher": "^27.4.2",
@@ -58989,15 +58989,15 @@
}
},
"@jest/reporters": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.4.tgz",
- "integrity": "sha512-ssyJSw9B9Awb1QaxDhIPSs4de1b7SE2kv7tqFehQL13xpn5HUkMYZK/ufTOXiCAnXFOZS+XDl1GaQ/LmJAzI1A==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.5.tgz",
+ "integrity": "sha512-3orsG4vi8zXuBqEoy2LbnC1kuvkg1KQUgqNxmxpQgIOQEPeV0onvZu+qDQnEoX8qTQErtqn/xzcnbpeTuOLSiA==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^27.4.2",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -59010,10 +59010,10 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.4.4",
- "jest-resolve": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
+ "jest-resolve": "^27.4.5",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.4",
+ "jest-worker": "^27.4.5",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
@@ -59062,9 +59062,9 @@
"dev": true
},
"jest-worker": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
- "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz",
+ "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -59138,21 +59138,21 @@
}
},
"@jest/test-sequencer": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.4.tgz",
- "integrity": "sha512-mCh+d4JTGTtX7vr13d7q2GHJy33nAobEwtEJ8X3u7R8+0ImVO2eAsQzsLfX8lyvdYHBxYABhqbYuaUNo42/pQw==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.5.tgz",
+ "integrity": "sha512-n5woIn/1v+FT+9hniymHPARA9upYUmfi5Pw9ewVwXCDlK4F5/Gkees9v8vdjGdAIJ2MPHLHodiajLpZZanWzEQ==",
"dev": true,
"requires": {
"@jest/test-result": "^27.4.2",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.4",
- "jest-runtime": "^27.4.4"
+ "jest-haste-map": "^27.4.5",
+ "jest-runtime": "^27.4.5"
}
},
"@jest/transform": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.4.tgz",
- "integrity": "sha512-7U/nDSrGsGzL7+X8ScNFV71w8u8knJQWSa9C2xsrrKLMOgb+rWuCG4VAyWke/53BU96GnT+Ka81xCAHA5gk6zA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz",
+ "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
@@ -59162,7 +59162,7 @@
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
"jest-regex-util": "^27.4.0",
"jest-util": "^27.4.2",
"micromatch": "^4.0.4",
@@ -69456,12 +69456,12 @@
}
},
"babel-jest": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.4.tgz",
- "integrity": "sha512-+6RVutZxOQgJkt4svgTHPFtOQlVe9dUg3wrimIAM38pY6hL/nsL8glfFSUjD9jNVjaVjzkCzj6loFFecrjr9Qw==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.5.tgz",
+ "integrity": "sha512-3uuUTjXbgtODmSv/DXO9nZfD52IyC2OYTFaXGRzL0kpykzroaquCrD5+lZNafTvZlnNqZHt5pb0M08qVBZnsnA==",
"dev": true,
"requires": {
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.0.0",
@@ -81716,14 +81716,14 @@
}
},
"jest": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.4.tgz",
- "integrity": "sha512-AXwEIFa58Uf1Jno3/KSo5HZZ0/2Xwqvfrz0/3bmTwImkFlbOvz5vARAW9nTrxRLkojjkitaZ1KNKAtw3JRFAaA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.5.tgz",
+ "integrity": "sha512-uT5MiVN3Jppt314kidCk47MYIRilJjA/l2mxwiuzzxGUeJIvA8/pDaJOAX5KWvjAo7SCydcW0/4WEtgbLMiJkg==",
"dev": true,
"requires": {
- "@jest/core": "^27.4.4",
+ "@jest/core": "^27.4.5",
"import-local": "^3.0.2",
- "jest-cli": "^27.4.4"
+ "jest-cli": "^27.4.5"
}
},
"jest-changed-files": {
@@ -81738,9 +81738,9 @@
}
},
"jest-circus": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.4.tgz",
- "integrity": "sha512-4DWhvQerDq5X4GaqhEUoZiBhuNdKDGr0geW0iJwarbDljAmGaGOErKQG+z2PBr0vgN05z7tsGSY51mdWr8E4xg==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.5.tgz",
+ "integrity": "sha512-eTNWa9wsvBwPykhMMShheafbwyakcdHZaEYh5iRrQ0PFJxkDP/e3U/FvzGuKWu2WpwUA3C3hPlfpuzvOdTVqnw==",
"dev": true,
"requires": {
"@jest/environment": "^27.4.4",
@@ -81755,8 +81755,8 @@
"jest-each": "^27.4.2",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-runtime": "^27.4.4",
- "jest-snapshot": "^27.4.4",
+ "jest-runtime": "^27.4.5",
+ "jest-snapshot": "^27.4.5",
"jest-util": "^27.4.2",
"pretty-format": "^27.4.2",
"slash": "^3.0.0",
@@ -81822,19 +81822,19 @@
}
},
"jest-cli": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.4.tgz",
- "integrity": "sha512-+MfsHnZPUOBigCBURuQFRpgYoPCgmIFkICkqt4SrramZCUp/UAuWcst4pMZb84O3VU8JyKJmnpGG4qH8ClQloA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.5.tgz",
+ "integrity": "sha512-hrky3DSgE0u7sQxaCL7bdebEPHx5QzYmrGuUjaPLmPE8jx5adtvGuOlRspvMoVLTTDOHRnZDoRLYJuA+VCI7Hg==",
"dev": true,
"requires": {
- "@jest/core": "^27.4.4",
+ "@jest/core": "^27.4.5",
"@jest/test-result": "^27.4.2",
"@jest/types": "^27.4.2",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
- "jest-config": "^27.4.4",
+ "jest-config": "^27.4.5",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"prompts": "^2.0.1",
@@ -81931,28 +81931,28 @@
}
},
"jest-config": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.4.tgz",
- "integrity": "sha512-6lxg0ugO6KS2zKEbpdDwBzu1IT0Xg4/VhxXMuBu+z/5FvBjLCEMTaWQm3bCaGCZUR9j9FK4DzUIxyhIgn6kVEg==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.5.tgz",
+ "integrity": "sha512-t+STVJtPt+fpqQ8GBw850NtSQbnDOw/UzdPfzDaHQ48/AylQlW7LHj3dH+ndxhC1UxJ0Q3qkq7IH+nM1skwTwA==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.4.4",
+ "@jest/test-sequencer": "^27.4.5",
"@jest/types": "^27.4.2",
- "babel-jest": "^27.4.4",
+ "babel-jest": "^27.4.5",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.1",
"graceful-fs": "^4.2.4",
- "jest-circus": "^27.4.4",
+ "jest-circus": "^27.4.5",
"jest-environment-jsdom": "^27.4.4",
"jest-environment-node": "^27.4.4",
"jest-get-type": "^27.4.0",
- "jest-jasmine2": "^27.4.4",
+ "jest-jasmine2": "^27.4.5",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.4",
- "jest-runner": "^27.4.4",
+ "jest-resolve": "^27.4.5",
+ "jest-runner": "^27.4.5",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"micromatch": "^4.0.4",
@@ -82195,9 +82195,9 @@
"dev": true
},
"jest-haste-map": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.4.tgz",
- "integrity": "sha512-kvspmHmgPIZoDaqUsvsJFTaspuxhATvdO6wsFNGNSi8kfdiOCEEvECNbht8xG+eE5Ol88JyJmp2D7RF4dYo85Q==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz",
+ "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
@@ -82210,7 +82210,7 @@
"jest-regex-util": "^27.4.0",
"jest-serializer": "^27.4.0",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.4",
+ "jest-worker": "^27.4.5",
"micromatch": "^4.0.4",
"walker": "^1.0.7"
},
@@ -82222,9 +82222,9 @@
"dev": true
},
"jest-worker": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
- "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz",
+ "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -82244,9 +82244,9 @@
}
},
"jest-jasmine2": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.4.tgz",
- "integrity": "sha512-ygk2tUgtLeN3ouj4KEYw9p81GLI1EKrnvourPULN5gdgB482PH5op9gqaRG0IenbJhBbbRwiSvh5NoBoQZSqdA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.5.tgz",
+ "integrity": "sha512-oUnvwhJDj2LhOiUB1kdnJjkx8C5PwgUZQb9urF77mELH9DGR4e2GqpWQKBOYXWs5+uTN9BGDqRz3Aeg5Wts7aw==",
"dev": true,
"requires": {
"@babel/traverse": "^7.1.0",
@@ -82262,8 +82262,8 @@
"jest-each": "^27.4.2",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-runtime": "^27.4.4",
- "jest-snapshot": "^27.4.4",
+ "jest-runtime": "^27.4.5",
+ "jest-snapshot": "^27.4.5",
"jest-util": "^27.4.2",
"pretty-format": "^27.4.2",
"throat": "^6.0.1"
@@ -82638,15 +82638,15 @@
"dev": true
},
"jest-resolve": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.4.tgz",
- "integrity": "sha512-Yh5jK3PBmDbm01Rc8pT0XqpBlTPEGwWp7cN61ijJuwony/tR2Taof3TLy6yfNiuRS8ucUOPO7NBYm3ei38kkcg==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.5.tgz",
+ "integrity": "sha512-xU3z1BuOz/hUhVUL+918KqUgK+skqOuUsAi7A+iwoUldK6/+PW+utK8l8cxIWT9AW7IAhGNXjSAh1UYmjULZZw==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
"jest-pnp-resolver": "^1.2.2",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
@@ -82713,26 +82713,26 @@
}
},
"jest-resolve-dependencies": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.4.tgz",
- "integrity": "sha512-iAnpCXh81sd9nbyqySvm5/aV9X6JZKE0dQyFXTC8tptXcdrgS0vjPFy+mEgzPHxXw+tq4TQupuTa0n8OXwRIxw==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.5.tgz",
+ "integrity": "sha512-elEVvkvRK51y037NshtEkEnukMBWvlPzZHiL847OrIljJ8yIsujD2GXRPqDXC4rEVKbcdsy7W0FxoZb4WmEs7w==",
"dev": true,
"requires": {
"@jest/types": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-snapshot": "^27.4.4"
+ "jest-snapshot": "^27.4.5"
}
},
"jest-runner": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.4.tgz",
- "integrity": "sha512-AXv/8Q0Xf1puWnDf52m7oLrK7sXcv6re0V/kItwTSVHJbX7Oebm07oGFQqGmq0R0mhO1zpmB3OpqRuaCN2elPA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.5.tgz",
+ "integrity": "sha512-/irauncTfmY1WkTaRQGRWcyQLzK1g98GYG/8QvIPviHgO1Fqz1JYeEIsSfF+9mc/UTA6S+IIHFgKyvUrtiBIZg==",
"dev": true,
"requires": {
"@jest/console": "^27.4.2",
"@jest/environment": "^27.4.4",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -82742,13 +82742,13 @@
"jest-docblock": "^27.4.0",
"jest-environment-jsdom": "^27.4.4",
"jest-environment-node": "^27.4.4",
- "jest-haste-map": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
"jest-leak-detector": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-resolve": "^27.4.4",
- "jest-runtime": "^27.4.4",
+ "jest-resolve": "^27.4.5",
+ "jest-runtime": "^27.4.5",
"jest-util": "^27.4.2",
- "jest-worker": "^27.4.4",
+ "jest-worker": "^27.4.5",
"source-map-support": "^0.5.6",
"throat": "^6.0.1"
},
@@ -82794,9 +82794,9 @@
"dev": true
},
"jest-worker": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz",
- "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz",
+ "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -82827,9 +82827,9 @@
}
},
"jest-runtime": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.4.tgz",
- "integrity": "sha512-tZGay6P6vXJq8t4jVFAUzYHx+lzIHXjz+rj1XBk6mAR1Lwtf5kz0Uun7qNuU+oqpZu4+hhuxpUfXb6j30bEPqA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.5.tgz",
+ "integrity": "sha512-CIYqwuJQXHQtPd/idgrx4zgJ6iCb6uBjQq1RSAGQrw2S8XifDmoM1Ot8NRd80ooAm+ZNdHVwsktIMGlA1F1FAQ==",
"dev": true,
"requires": {
"@jest/console": "^27.4.2",
@@ -82837,7 +82837,7 @@
"@jest/globals": "^27.4.4",
"@jest/source-map": "^27.4.0",
"@jest/test-result": "^27.4.2",
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/yargs": "^16.0.0",
"chalk": "^4.0.0",
@@ -82847,12 +82847,12 @@
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
"jest-message-util": "^27.4.2",
"jest-mock": "^27.4.2",
"jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.4",
- "jest-snapshot": "^27.4.4",
+ "jest-resolve": "^27.4.5",
+ "jest-snapshot": "^27.4.5",
"jest-util": "^27.4.2",
"jest-validate": "^27.4.2",
"slash": "^3.0.0",
@@ -82966,9 +82966,9 @@
}
},
"jest-snapshot": {
- "version": "27.4.4",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.4.tgz",
- "integrity": "sha512-yy+rpCvYMOjTl7IMuaMI9OP9WT229zi8BhdNHm6e6mttAOIzvIiCxFoZ6yRxaV3HDPPgMryi+ReX2b8+IQJdPA==",
+ "version": "27.4.5",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.5.tgz",
+ "integrity": "sha512-eCi/iM1YJFrJWiT9de4+RpWWWBqsHiYxFG9V9o/n0WXs6GpW4lUt4FAHAgFPTLPqCUVzrMQmSmTZSgQzwqR7IQ==",
"dev": true,
"requires": {
"@babel/core": "^7.7.2",
@@ -82977,7 +82977,7 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.0.0",
- "@jest/transform": "^27.4.4",
+ "@jest/transform": "^27.4.5",
"@jest/types": "^27.4.2",
"@types/babel__traverse": "^7.0.4",
"@types/prettier": "^2.1.5",
@@ -82987,10 +82987,10 @@
"graceful-fs": "^4.2.4",
"jest-diff": "^27.4.2",
"jest-get-type": "^27.4.0",
- "jest-haste-map": "^27.4.4",
+ "jest-haste-map": "^27.4.5",
"jest-matcher-utils": "^27.4.2",
"jest-message-util": "^27.4.2",
- "jest-resolve": "^27.4.4",
+ "jest-resolve": "^27.4.5",
"jest-util": "^27.4.2",
"natural-compare": "^1.4.0",
"pretty-format": "^27.4.2",
diff --git a/package.json b/package.json
index ac39b34e7e..4f49be2b03 100644
--- a/package.json
+++ b/package.json
@@ -158,7 +158,7 @@
"execa": "5.1.1",
"faker": "5.5.3",
"husky": "7.0.4",
- "jest": "27.4.4",
+ "jest": "27.4.5",
"js-yaml": "3.14.1",
"lint-staged": "12.1.2",
"lodash": "4.17.21",
From 5a1414e247bab459bec686608b516bf8936841ef Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Tue, 14 Dec 2021 00:48:13 +0000
Subject: [PATCH 29/63] chore(deps): update babel monorepo to v7.16.5
---
client/package.json | 10 +-
curriculum/package.json | 8 +-
package-lock.json | 1565 +++++++++++++++---------------
package.json | 10 +-
tools/ui-components/package.json | 6 +-
5 files changed, 813 insertions(+), 786 deletions(-)
diff --git a/client/package.json b/client/package.json
index 3ec9364c8f..1e9d60c40d 100644
--- a/client/package.json
+++ b/client/package.json
@@ -33,12 +33,12 @@
"validate-keys": "tsc -p ../tools/ && node ../tools/scripts/lint/validate-keys.js"
},
"dependencies": {
- "@babel/plugin-proposal-export-default-from": "7.16.0",
- "@babel/plugin-proposal-function-bind": "7.16.0",
+ "@babel/plugin-proposal-export-default-from": "7.16.5",
+ "@babel/plugin-proposal-function-bind": "7.16.5",
"@babel/polyfill": "7.12.1",
- "@babel/preset-env": "7.16.4",
- "@babel/preset-react": "7.16.0",
- "@babel/standalone": "7.16.4",
+ "@babel/preset-env": "7.16.5",
+ "@babel/preset-react": "7.16.5",
+ "@babel/standalone": "7.16.5",
"@fortawesome/fontawesome": "1.1.8",
"@fortawesome/fontawesome-svg-core": "1.2.36",
"@fortawesome/free-brands-svg-icons": "5.15.4",
diff --git a/curriculum/package.json b/curriculum/package.json
index 051c81c55d..ad82f817a1 100644
--- a/curriculum/package.json
+++ b/curriculum/package.json
@@ -29,11 +29,11 @@
"test:full-output": "cross-env FULL_OUTPUT=true mocha --delay --reporter progress"
},
"devDependencies": {
- "@babel/core": "7.16.0",
+ "@babel/core": "7.16.5",
"@babel/polyfill": "7.12.1",
- "@babel/preset-env": "7.16.4",
- "@babel/preset-typescript": "7.16.0",
- "@babel/register": "7.16.0",
+ "@babel/preset-env": "7.16.5",
+ "@babel/preset-typescript": "7.16.5",
+ "@babel/register": "7.16.5",
"acorn": "8.5.0",
"acorn-jsx": "5.3.2",
"babel-plugin-dynamic-import-node": "2.3.3",
diff --git a/package-lock.json b/package-lock.json
index 97eab93988..777315bda1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -26,11 +26,11 @@
"invariant": "2.2.4"
},
"devDependencies": {
- "@babel/eslint-parser": "7.16.3",
- "@babel/plugin-proposal-function-bind": "7.16.0",
- "@babel/preset-env": "7.16.4",
- "@babel/preset-react": "7.16.0",
- "@babel/preset-typescript": "7.16.0",
+ "@babel/eslint-parser": "7.16.5",
+ "@babel/plugin-proposal-function-bind": "7.16.5",
+ "@babel/preset-env": "7.16.5",
+ "@babel/preset-react": "7.16.5",
+ "@babel/preset-typescript": "7.16.5",
"@testing-library/cypress": "7.0.7",
"@testing-library/dom": "8.11.1",
"@testing-library/jest-dom": "5.16.1",
@@ -201,12 +201,12 @@
"version": "0.0.1",
"license": "BSD-3-Clause",
"dependencies": {
- "@babel/plugin-proposal-export-default-from": "7.16.0",
- "@babel/plugin-proposal-function-bind": "7.16.0",
+ "@babel/plugin-proposal-export-default-from": "7.16.5",
+ "@babel/plugin-proposal-function-bind": "7.16.5",
"@babel/polyfill": "7.12.1",
- "@babel/preset-env": "7.16.4",
- "@babel/preset-react": "7.16.0",
- "@babel/standalone": "7.16.4",
+ "@babel/preset-env": "7.16.5",
+ "@babel/preset-react": "7.16.5",
+ "@babel/standalone": "7.16.5",
"@fortawesome/fontawesome": "1.1.8",
"@fortawesome/fontawesome-svg-core": "1.2.36",
"@fortawesome/free-brands-svg-icons": "5.15.4",
@@ -417,11 +417,11 @@
"version": "0.0.0-next.4",
"license": "(BSD-3-Clause AND CC-BY-SA-4.0)",
"devDependencies": {
- "@babel/core": "7.16.0",
+ "@babel/core": "7.16.5",
"@babel/polyfill": "7.12.1",
- "@babel/preset-env": "7.16.4",
- "@babel/preset-typescript": "7.16.0",
- "@babel/register": "7.16.0",
+ "@babel/preset-env": "7.16.5",
+ "@babel/preset-typescript": "7.16.5",
+ "@babel/register": "7.16.5",
"acorn": "8.5.0",
"acorn-jsx": "5.3.2",
"babel-plugin-dynamic-import-node": "2.3.3",
@@ -674,18 +674,18 @@
}
},
"node_modules/@babel/core": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz",
- "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.5.tgz",
+ "integrity": "sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ==",
"dependencies": {
"@babel/code-frame": "^7.16.0",
- "@babel/generator": "^7.16.0",
- "@babel/helper-compilation-targets": "^7.16.0",
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helpers": "^7.16.0",
- "@babel/parser": "^7.16.0",
+ "@babel/generator": "^7.16.5",
+ "@babel/helper-compilation-targets": "^7.16.3",
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helpers": "^7.16.5",
+ "@babel/parser": "^7.16.5",
"@babel/template": "^7.16.0",
- "@babel/traverse": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
"@babel/types": "^7.16.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
@@ -724,9 +724,9 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/@babel/eslint-parser": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.3.tgz",
- "integrity": "sha512-iB4ElZT0jAt7PKVaeVulOECdGe6UnmA/O0P9jlF5g5GBOwDVbna8AXhHRu4s27xQf6OkveyA8iTDv1jHdDejgQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.5.tgz",
+ "integrity": "sha512-mUqYa46lgWqHKQ33Q6LNCGp/wPR3eqOYTUixHFsfrSQqRxH0+WOzca75iEjFr5RDGH1dDz622LaHhLOzOuQRUA==",
"dependencies": {
"eslint-scope": "^5.1.1",
"eslint-visitor-keys": "^2.1.0",
@@ -741,9 +741,9 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz",
- "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.5.tgz",
+ "integrity": "sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==",
"dependencies": {
"@babel/types": "^7.16.0",
"jsesc": "^2.5.1",
@@ -765,9 +765,9 @@
}
},
"node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz",
- "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.5.tgz",
+ "integrity": "sha512-3JEA9G5dmmnIWdzaT9d0NmFRgYnWUThLsDaL7982H0XqqWr56lRrsmwheXFMjR+TMl7QMBb6mzy9kvgr1lRLUA==",
"dependencies": {
"@babel/helper-explode-assignable-expression": "^7.16.0",
"@babel/types": "^7.16.0"
@@ -794,15 +794,16 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz",
- "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.5.tgz",
+ "integrity": "sha512-NEohnYA7mkB8L5JhU7BLwcBdU3j83IziR9aseMueWGeAjblbul3zzb8UvJ3a1zuBiqCMObzCJHFqKIQE6hTVmg==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-environment-visitor": "^7.16.5",
"@babel/helper-function-name": "^7.16.0",
- "@babel/helper-member-expression-to-functions": "^7.16.0",
+ "@babel/helper-member-expression-to-functions": "^7.16.5",
"@babel/helper-optimise-call-expression": "^7.16.0",
- "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-replace-supers": "^7.16.5",
"@babel/helper-split-export-declaration": "^7.16.0"
},
"engines": {
@@ -866,6 +867,17 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz",
+ "integrity": "sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==",
+ "dependencies": {
+ "@babel/types": "^7.16.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-explode-assignable-expression": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz",
@@ -913,9 +925,9 @@
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz",
- "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.5.tgz",
+ "integrity": "sha512-7fecSXq7ZrLE+TWshbGT+HyCLkxloWNhTbU2QM1NTI/tDqyf0oZiMcEfYtDuUDCo528EOlt39G1rftea4bRZIw==",
"dependencies": {
"@babel/types": "^7.16.0"
},
@@ -935,17 +947,17 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz",
- "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.5.tgz",
+ "integrity": "sha512-CkvMxgV4ZyyioElFwcuWnDCcNIeyqTkCm9BxXZi73RR1ozqlpboqsbGUNvRTflgZtFbbJ1v5Emvm+lkjMYY/LQ==",
"dependencies": {
+ "@babel/helper-environment-visitor": "^7.16.5",
"@babel/helper-module-imports": "^7.16.0",
- "@babel/helper-replace-supers": "^7.16.0",
"@babel/helper-simple-access": "^7.16.0",
"@babel/helper-split-export-declaration": "^7.16.0",
"@babel/helper-validator-identifier": "^7.15.7",
"@babel/template": "^7.16.0",
- "@babel/traverse": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
"@babel/types": "^7.16.0"
},
"engines": {
@@ -964,20 +976,20 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
- "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz",
+ "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz",
- "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.5.tgz",
+ "integrity": "sha512-X+aAJldyxrOmN9v3FKp+Hu1NO69VWgYgDGq6YDykwRPzxs5f2N+X988CBXS7EQahDU+Vpet5QYMqLk+nsp+Qxw==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.16.0",
- "@babel/helper-wrap-function": "^7.16.0",
+ "@babel/helper-wrap-function": "^7.16.5",
"@babel/types": "^7.16.0"
},
"engines": {
@@ -985,13 +997,14 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz",
- "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.5.tgz",
+ "integrity": "sha512-ao3seGVa/FZCMCCNDuBcqnBFSbdr8N2EW35mzojx3TwfIbdPmNK+JV6+2d5bR0Z71W5ocLnQp9en/cTF7pBJiQ==",
"dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.16.0",
+ "@babel/helper-environment-visitor": "^7.16.5",
+ "@babel/helper-member-expression-to-functions": "^7.16.5",
"@babel/helper-optimise-call-expression": "^7.16.0",
- "@babel/traverse": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
"@babel/types": "^7.16.0"
},
"engines": {
@@ -1048,13 +1061,13 @@
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz",
- "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.5.tgz",
+ "integrity": "sha512-2J2pmLBqUqVdJw78U0KPNdeE2qeuIyKoG4mKV7wAq3mc4jJG282UgjZw4ZYDnqiWQuS3Y3IYdF/AQ6CpyBV3VA==",
"dependencies": {
"@babel/helper-function-name": "^7.16.0",
"@babel/template": "^7.16.0",
- "@babel/traverse": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
"@babel/types": "^7.16.0"
},
"engines": {
@@ -1062,12 +1075,12 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz",
- "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.5.tgz",
+ "integrity": "sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw==",
"dependencies": {
"@babel/template": "^7.16.0",
- "@babel/traverse": "^7.16.3",
+ "@babel/traverse": "^7.16.5",
"@babel/types": "^7.16.0"
},
"engines": {
@@ -1122,9 +1135,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz",
- "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.5.tgz",
+ "integrity": "sha512-+Ce7T5iPNWzfu9C1aB5tN3Lyafs5xb3Ic7vBWyZL2KXT3QSdD1dD3CvgOzPmQKoNNRt6uauc0XwNJTQtXC2/Mw==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -1163,12 +1176,12 @@
}
},
"node_modules/@babel/plugin-proposal-async-generator-functions": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz",
- "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.5.tgz",
+ "integrity": "sha512-C/FX+3HNLV6sz7AqbTQqEo1L9/kfrKjxcVtgyBCmvIgOjvuBVUWooDoi7trsLxOzCEo5FccjRvKHkfDsJFZlfA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-remap-async-to-generator": "^7.16.4",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-remap-async-to-generator": "^7.16.5",
"@babel/plugin-syntax-async-generators": "^7.8.4"
},
"engines": {
@@ -1179,12 +1192,12 @@
}
},
"node_modules/@babel/plugin-proposal-class-properties": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz",
- "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.5.tgz",
+ "integrity": "sha512-pJD3HjgRv83s5dv1sTnDbZOaTjghKEz8KUn1Kbh2eAIRhGuyQ1XSeI4xVXU3UlIEVA3DAyIdxqT1eRn7Wcn55A==",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1194,12 +1207,12 @@
}
},
"node_modules/@babel/plugin-proposal-class-static-block": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz",
- "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.5.tgz",
+ "integrity": "sha512-EEFzuLZcm/rNJ8Q5krK+FRKdVkd6FjfzT9tuSZql9sQn64K0hHA2KLJ0DqVot9/iV6+SsuadC5yI39zWnm+nmQ==",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-class-static-block": "^7.14.5"
},
"engines": {
@@ -1227,11 +1240,11 @@
}
},
"node_modules/@babel/plugin-proposal-dynamic-import": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz",
- "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.5.tgz",
+ "integrity": "sha512-P05/SJZTTvHz79LNYTF8ff5xXge0kk5sIIWAypcWgX4BTRUgyHc8wRxJ/Hk+mU0KXldgOOslKaeqnhthcDJCJQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
},
"engines": {
@@ -1242,12 +1255,12 @@
}
},
"node_modules/@babel/plugin-proposal-export-default-from": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.0.tgz",
- "integrity": "sha512-kFAhaIbh5qbBwETRNa/cgGmPJ/BicXhIyrZhAkyYhf/Z9LXCTRGO1mvUwczto0Hl1q4YtzP9cRtTKT4wujm38Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.5.tgz",
+ "integrity": "sha512-pU4aCS+AzGjDD/6LnwSmeelmtqfMSjzQxs7+/AS673bYsshK1XZm9eth6OkgivVscQM8XdkVYhrb6tPFVTBVHA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-export-default-from": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-export-default-from": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1257,11 +1270,11 @@
}
},
"node_modules/@babel/plugin-proposal-export-namespace-from": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz",
- "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.5.tgz",
+ "integrity": "sha512-i+sltzEShH1vsVydvNaTRsgvq2vZsfyrd7K7vPLUU/KgS0D5yZMe6uipM0+izminnkKrEfdUnz7CxMRb6oHZWw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
},
"engines": {
@@ -1272,12 +1285,12 @@
}
},
"node_modules/@babel/plugin-proposal-function-bind": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.16.0.tgz",
- "integrity": "sha512-oTf/NztwTma6O4e16Iy6+DOqodQydc1/MLmENMTduigCYxvUvLblCRP5Tu3PkAGPKq5/F3lB44GWLc+egJi3VA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.16.5.tgz",
+ "integrity": "sha512-rOr/gYNm8pTBAfnwr/F6uSPjFJMqE2L1jLCoVrAcrt1he5e9F6pV6Cl4JBrFBbUnA+ETMnVFZIhfVbTq7So0Gw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-function-bind": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-function-bind": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1287,11 +1300,11 @@
}
},
"node_modules/@babel/plugin-proposal-json-strings": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz",
- "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.5.tgz",
+ "integrity": "sha512-QQJueTFa0y9E4qHANqIvMsuxM/qcLQmKttBACtPCQzGUEizsXDACGonlPiSwynHfOa3vNw0FPMVvQzbuXwh4SQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-json-strings": "^7.8.3"
},
"engines": {
@@ -1302,11 +1315,11 @@
}
},
"node_modules/@babel/plugin-proposal-logical-assignment-operators": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz",
- "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.5.tgz",
+ "integrity": "sha512-xqibl7ISO2vjuQM+MzR3rkd0zfNWltk7n9QhaD8ghMmMceVguYrNDt7MikRyj4J4v3QehpnrU8RYLnC7z/gZLA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
},
"engines": {
@@ -1317,11 +1330,11 @@
}
},
"node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz",
- "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.5.tgz",
+ "integrity": "sha512-YwMsTp/oOviSBhrjwi0vzCUycseCYwoXnLiXIL3YNjHSMBHicGTz7GjVU/IGgz4DtOEXBdCNG72pvCX22ehfqg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
},
"engines": {
@@ -1332,11 +1345,11 @@
}
},
"node_modules/@babel/plugin-proposal-numeric-separator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz",
- "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.5.tgz",
+ "integrity": "sha512-DvB9l/TcsCRvsIV9v4jxR/jVP45cslTVC0PMVHvaJhhNuhn2Y1SOhCSFlPK777qLB5wb8rVDaNoqMTyOqtY5Iw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
},
"engines": {
@@ -1347,15 +1360,15 @@
}
},
"node_modules/@babel/plugin-proposal-object-rest-spread": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz",
- "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.5.tgz",
+ "integrity": "sha512-UEd6KpChoyPhCoE840KRHOlGhEZFutdPDMGj+0I56yuTTOaT51GzmnEl/0uT41fB/vD2nT+Pci2KjezyE3HmUw==",
"dependencies": {
- "@babel/compat-data": "^7.16.0",
- "@babel/helper-compilation-targets": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/compat-data": "^7.16.4",
+ "@babel/helper-compilation-targets": "^7.16.3",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.16.0"
+ "@babel/plugin-transform-parameters": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1365,11 +1378,11 @@
}
},
"node_modules/@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz",
- "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.5.tgz",
+ "integrity": "sha512-ihCMxY1Iljmx4bWy/PIMJGXN4NS4oUj1MKynwO07kiKms23pNvIn1DMB92DNB2R0EA882sw0VXIelYGdtF7xEQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
},
"engines": {
@@ -1380,11 +1393,11 @@
}
},
"node_modules/@babel/plugin-proposal-optional-chaining": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz",
- "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.5.tgz",
+ "integrity": "sha512-kzdHgnaXRonttiTfKYnSVafbWngPPr2qKw9BWYBESl91W54e+9R5pP70LtWxV56g0f05f/SQrwHYkfvbwcdQ/A==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
},
@@ -1396,12 +1409,12 @@
}
},
"node_modules/@babel/plugin-proposal-private-methods": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz",
- "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.5.tgz",
+ "integrity": "sha512-+yFMO4BGT3sgzXo+lrq7orX5mAZt57DwUK6seqII6AcJnJOIhBJ8pzKH47/ql/d426uQ7YhN8DpUFirQzqYSUA==",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1411,13 +1424,13 @@
}
},
"node_modules/@babel/plugin-proposal-private-property-in-object": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz",
- "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.5.tgz",
+ "integrity": "sha512-+YGh5Wbw0NH3y/E5YMu6ci5qTDmAEVNoZ3I54aB6nVEOZ5BQ7QJlwKq5pYVucQilMByGn/bvX0af+uNaPRCabA==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.16.0",
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
@@ -1428,12 +1441,12 @@
}
},
"node_modules/@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz",
- "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.5.tgz",
+ "integrity": "sha512-s5sKtlKQyFSatt781HQwv1hoM5BQ9qRH30r+dK56OLDsHmV74mzwJNX7R1yMuE7VZKG5O6q/gmOGSAO6ikTudg==",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=4"
@@ -1517,11 +1530,11 @@
}
},
"node_modules/@babel/plugin-syntax-export-default-from": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.0.tgz",
- "integrity": "sha512-xllLOdBj77mFSw8s02I+2SSQGHOftbWTlGmagheuNk/gjQsk7IrYsR/EosXVAVpgIUFffLckB/iPRioQYLHSrQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.5.tgz",
+ "integrity": "sha512-tvY55nhq4mSG9WbM7IZcLIhdc5jzIZu0PQKJHtZ16+dF7oBxKbqV/Z0e9ta2zaLMvUjH+3rJv1hbZ0+lpXzuFQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1557,11 +1570,11 @@
}
},
"node_modules/@babel/plugin-syntax-function-bind": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.16.0.tgz",
- "integrity": "sha512-L+B4rMnFg2ElQUTjSr3gfmIAJ3ej/BeKGW32AL01qpLhkI4Vw1C+W8p6wl8S6eYqWSj9X9d/lyuQWI5JFYjCWw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.16.5.tgz",
+ "integrity": "sha512-Jn09tjgZuJIQdbqQCkBQErzjO4LV2NDUz03HSowJD0km7iXsKPX6Sk0G7xIkUItenYNLfkndlWojeTyYC6QbBA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1594,11 +1607,11 @@
}
},
"node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz",
- "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.5.tgz",
+ "integrity": "sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1716,11 +1729,11 @@
}
},
"node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz",
- "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.5.tgz",
+ "integrity": "sha512-8bTHiiZyMOyfZFULjsCnYOWG059FVMes0iljEHSfARhNgFfpsqE92OrCffv3veSw9rwMkYcFe9bj0ZoXU2IGtQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1730,13 +1743,13 @@
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz",
- "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.5.tgz",
+ "integrity": "sha512-TMXgfioJnkXU+XRoj7P2ED7rUm5jbnDWwlCuFVTpQboMfbSya5WrmubNBAMlk7KXvywpo8rd8WuYZkis1o2H8w==",
"dependencies": {
"@babel/helper-module-imports": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-remap-async-to-generator": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-remap-async-to-generator": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1746,11 +1759,11 @@
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz",
- "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.5.tgz",
+ "integrity": "sha512-BxmIyKLjUGksJ99+hJyL/HIxLIGnLKtw772zYDER7UuycDZ+Xvzs98ZQw6NGgM2ss4/hlFAaGiZmMNKvValEjw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1760,11 +1773,11 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz",
- "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.5.tgz",
+ "integrity": "sha512-JxjSPNZSiOtmxjX7PBRBeRJTUKTyJ607YUYeT0QJCNdsedOe+/rXITjP08eG8xUpsLfPirgzdCFN+h0w6RI+pQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1774,15 +1787,16 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz",
- "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.5.tgz",
+ "integrity": "sha512-DzJ1vYf/7TaCYy57J3SJ9rV+JEuvmlnvvyvYKFbk5u46oQbBvuB9/0w+YsVsxkOv8zVWKpDmUoj4T5ILHoXevA==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-environment-visitor": "^7.16.5",
"@babel/helper-function-name": "^7.16.0",
"@babel/helper-optimise-call-expression": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-replace-supers": "^7.16.5",
"@babel/helper-split-export-declaration": "^7.16.0",
"globals": "^11.1.0"
},
@@ -1794,11 +1808,11 @@
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz",
- "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.5.tgz",
+ "integrity": "sha512-n1+O7xtU5lSLraRzX88CNcpl7vtGdPakKzww74bVwpAIRgz9JVLJJpOLb0uYqcOaXVM0TL6X0RVeIJGD2CnCkg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1808,11 +1822,11 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz",
- "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.5.tgz",
+ "integrity": "sha512-GuRVAsjq+c9YPK6NeTkRLWyQskDC099XkBSVO+6QzbnOnH2d/4mBVXYStaPrZD3dFRfg00I6BFJ9Atsjfs8mlg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1822,12 +1836,12 @@
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz",
- "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.5.tgz",
+ "integrity": "sha512-iQiEMt8Q4/5aRGHpGVK2Zc7a6mx7qEAO7qehgSug3SDImnuMzgmm/wtJALXaz25zUj1PmnNHtShjFgk4PDx4nw==",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1837,11 +1851,11 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz",
- "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.5.tgz",
+ "integrity": "sha512-81tijpDg2a6I1Yhj4aWY1l3O1J4Cg/Pd7LfvuaH2VVInAkXtzibz9+zSPdUM1WvuUi128ksstAP0hM5w48vQgg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1851,12 +1865,12 @@
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz",
- "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.5.tgz",
+ "integrity": "sha512-12rba2HwemQPa7BLIKCzm1pT2/RuQHtSFHdNl41cFiC6oi4tcrp7gjB07pxQvFpcADojQywSjblQth6gJyE6CA==",
"dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1882,11 +1896,11 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz",
- "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.5.tgz",
+ "integrity": "sha512-+DpCAJFPAvViR17PIMi9x2AE34dll5wNlXO43wagAX2YcRGgEVHCNFC4azG85b4YyyFarvkc/iD5NPrz4Oneqw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1896,12 +1910,12 @@
}
},
"node_modules/@babel/plugin-transform-function-name": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz",
- "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.5.tgz",
+ "integrity": "sha512-Fuec/KPSpVLbGo6z1RPw4EE1X+z9gZk1uQmnYy7v4xr4TO9p41v1AoUuXEtyqAI7H+xNJYSICzRqZBhDEkd3kQ==",
"dependencies": {
"@babel/helper-function-name": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1911,11 +1925,11 @@
}
},
"node_modules/@babel/plugin-transform-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz",
- "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.5.tgz",
+ "integrity": "sha512-B1j9C/IfvshnPcklsc93AVLTrNVa69iSqztylZH6qnmiAsDDOmmjEYqOm3Ts2lGSgTSywnBNiqC949VdD0/gfw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1925,11 +1939,11 @@
}
},
"node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz",
- "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.5.tgz",
+ "integrity": "sha512-d57i3vPHWgIde/9Y8W/xSFUndhvhZN5Wu2TjRrN1MVz5KzdUihKnfDVlfP1U7mS5DNj/WHHhaE4/tTi4hIyHwQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1939,12 +1953,12 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz",
- "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.5.tgz",
+ "integrity": "sha512-oHI15S/hdJuSCfnwIz+4lm6wu/wBn7oJ8+QrkzPPwSFGXk8kgdI/AIKcbR/XnD1nQVMg/i6eNaXpszbGuwYDRQ==",
"dependencies": {
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
"engines": {
@@ -1955,12 +1969,12 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz",
- "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.5.tgz",
+ "integrity": "sha512-ABhUkxvoQyqhCWyb8xXtfwqNMJD7tx+irIRnUh6lmyFud7Jln1WzONXKlax1fg/ey178EXbs4bSGNd6PngO+SQ==",
"dependencies": {
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-simple-access": "^7.16.0",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
@@ -1972,13 +1986,13 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz",
- "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.5.tgz",
+ "integrity": "sha512-53gmLdScNN28XpjEVIm7LbWnD/b/TpbwKbLk6KV4KqC9WyU6rq1jnNmVG6UgAdQZVVGZVoik3DqHNxk4/EvrjA==",
"dependencies": {
"@babel/helper-hoist-variables": "^7.16.0",
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-validator-identifier": "^7.15.7",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
@@ -1990,12 +2004,12 @@
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz",
- "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.5.tgz",
+ "integrity": "sha512-qTFnpxHMoenNHkS3VoWRdwrcJ3FhX567GvDA3hRZKF0Dj8Fmg0UzySZp3AP2mShl/bzcywb/UWAMQIjA1bhXvw==",
"dependencies": {
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2005,9 +2019,9 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz",
- "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.5.tgz",
+ "integrity": "sha512-/wqGDgvFUeKELW6ex6QB7dLVRkd5ehjw34tpXu1nhKC0sFfmaLabIswnpf8JgDyV2NeDmZiwoOb0rAmxciNfjA==",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.16.0"
},
@@ -2019,11 +2033,11 @@
}
},
"node_modules/@babel/plugin-transform-new-target": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz",
- "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.5.tgz",
+ "integrity": "sha512-ZaIrnXF08ZC8jnKR4/5g7YakGVL6go6V9ql6Jl3ecO8PQaQqFE74CuM384kezju7Z9nGCCA20BqZaR1tJ/WvHg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2033,12 +2047,12 @@
}
},
"node_modules/@babel/plugin-transform-object-super": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz",
- "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.5.tgz",
+ "integrity": "sha512-tded+yZEXuxt9Jdtkc1RraW1zMF/GalVxaVVxh41IYwirdRgyAxxxCKZ9XB7LxZqmsjfjALxupNE1MIz9KH+Zg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-replace-supers": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-replace-supers": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2048,11 +2062,11 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz",
- "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.5.tgz",
+ "integrity": "sha512-B3O6AL5oPop1jAVg8CV+haeUte9oFuY85zu0jwnRNZZi3tVAbJriu5tag/oaO2kGaQM/7q7aGPBlTI5/sr9enA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2062,11 +2076,11 @@
}
},
"node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz",
- "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.5.tgz",
+ "integrity": "sha512-+IRcVW71VdF9pEH/2R/Apab4a19LVvdVsr/gEeotH00vSDVlKD+XgfSIw+cgGWsjDB/ziqGv/pGoQZBIiQVXHg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2076,11 +2090,11 @@
}
},
"node_modules/@babel/plugin-transform-react-display-name": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz",
- "integrity": "sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.5.tgz",
+ "integrity": "sha512-dHYCOnzSsXFz8UcdNQIHGvg94qPL/teF7CCiCEMRxmA1G2p5Mq4JnKVowCDxYfiQ9D7RstaAp9kwaSI+sXbnhw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2090,14 +2104,14 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz",
- "integrity": "sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.5.tgz",
+ "integrity": "sha512-+arLIz1d7kmwX0fKxTxbnoeG85ONSnLpvdODa4P3pc1sS7CV1hfmtYWufkW/oYsPnkDrEeQFxhUWcFnrXW7jQQ==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.16.0",
"@babel/helper-module-imports": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-jsx": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-jsx": "^7.16.5",
"@babel/types": "^7.16.0"
},
"engines": {
@@ -2108,11 +2122,11 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx-development": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz",
- "integrity": "sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.5.tgz",
+ "integrity": "sha512-uQSLacMZSGLCxOw20dzo1dmLlKkd+DsayoV54q3MHXhbqgPzoiGerZQgNPl/Ro8/OcXV2ugfnkx+rxdS0sN5Uw==",
"dependencies": {
- "@babel/plugin-transform-react-jsx": "^7.16.0"
+ "@babel/plugin-transform-react-jsx": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2122,12 +2136,12 @@
}
},
"node_modules/@babel/plugin-transform-react-pure-annotations": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz",
- "integrity": "sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.5.tgz",
+ "integrity": "sha512-0nYU30hCxnCVCbRjSy9ahlhWZ2Sn6khbY4FqR91W+2RbSqkWEbVu2gXh45EqNy4Bq7sRU+H4i0/6YKwOSzh16A==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2137,9 +2151,9 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz",
- "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.5.tgz",
+ "integrity": "sha512-2z+it2eVWU8TtQQRauvGUqZwLy4+7rTfo6wO4npr+fvvN1SW30ZF3O/ZRCNmTuu4F5MIP8OJhXAhRV5QMJOuYg==",
"dependencies": {
"regenerator-transform": "^0.14.2"
},
@@ -2151,11 +2165,11 @@
}
},
"node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz",
- "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.5.tgz",
+ "integrity": "sha512-aIB16u8lNcf7drkhXJRoggOxSTUAuihTSTfAcpynowGJOZiGf+Yvi7RuTwFzVYSYPmWyARsPqUGoZWWWxLiknw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2184,11 +2198,11 @@
}
},
"node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz",
- "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.5.tgz",
+ "integrity": "sha512-ZbuWVcY+MAXJuuW7qDoCwoxDUNClfZxoo7/4swVbOW1s/qYLOMHlm9YRWMsxMFuLs44eXsv4op1vAaBaBaDMVg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2198,11 +2212,11 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz",
- "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.5.tgz",
+ "integrity": "sha512-5d6l/cnG7Lw4tGHEoga4xSkYp1euP7LAtrah1h1PgJ3JY7yNsjybsxQAnVK4JbtReZ/8z6ASVmd3QhYYKLaKZw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.16.0"
},
"engines": {
@@ -2213,11 +2227,11 @@
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz",
- "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.5.tgz",
+ "integrity": "sha512-usYsuO1ID2LXxzuUxifgWtJemP7wL2uZtyrTVM4PKqsmJycdS4U4mGovL5xXkfUheds10Dd2PjoQLXw6zCsCbg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2227,11 +2241,11 @@
}
},
"node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz",
- "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.5.tgz",
+ "integrity": "sha512-gnyKy9RyFhkovex4BjKWL3BVYzUDG6zC0gba7VMLbQoDuqMfJ1SDXs8k/XK41Mmt1Hyp4qNAvGFb9hKzdCqBRQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2241,11 +2255,11 @@
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz",
- "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.5.tgz",
+ "integrity": "sha512-ldxCkW180qbrvyCVDzAUZqB0TAeF8W/vGJoRcaf75awm6By+PxfJKvuqVAnq8N9wz5Xa6mSpM19OfVKKVmGHSQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2271,11 +2285,11 @@
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz",
- "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.5.tgz",
+ "integrity": "sha512-shiCBHTIIChGLdyojsKQjoAyB8MBwat25lKM7MJjbe1hE0bgIppD+LX9afr41lLHOhqceqeWl4FkLp+Bgn9o1Q==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2285,12 +2299,12 @@
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz",
- "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.5.tgz",
+ "integrity": "sha512-GTJ4IW012tiPEMMubd7sD07iU9O/LOo8Q/oU4xNhcaq0Xn8+6TcUQaHtC8YxySo1T+ErQ8RaWogIEeFhKGNPzw==",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2310,31 +2324,31 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz",
- "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.5.tgz",
+ "integrity": "sha512-MiJJW5pwsktG61NDxpZ4oJ1CKxM1ncam9bzRtx9g40/WkLRkxFP6mhpkYV0/DxcciqoiHicx291+eUQrXb/SfQ==",
"dependencies": {
"@babel/compat-data": "^7.16.4",
"@babel/helper-compilation-targets": "^7.16.3",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-validator-option": "^7.14.5",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0",
- "@babel/plugin-proposal-async-generator-functions": "^7.16.4",
- "@babel/plugin-proposal-class-properties": "^7.16.0",
- "@babel/plugin-proposal-class-static-block": "^7.16.0",
- "@babel/plugin-proposal-dynamic-import": "^7.16.0",
- "@babel/plugin-proposal-export-namespace-from": "^7.16.0",
- "@babel/plugin-proposal-json-strings": "^7.16.0",
- "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
- "@babel/plugin-proposal-numeric-separator": "^7.16.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.16.0",
- "@babel/plugin-proposal-optional-catch-binding": "^7.16.0",
- "@babel/plugin-proposal-optional-chaining": "^7.16.0",
- "@babel/plugin-proposal-private-methods": "^7.16.0",
- "@babel/plugin-proposal-private-property-in-object": "^7.16.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.16.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.16.5",
+ "@babel/plugin-proposal-class-properties": "^7.16.5",
+ "@babel/plugin-proposal-class-static-block": "^7.16.5",
+ "@babel/plugin-proposal-dynamic-import": "^7.16.5",
+ "@babel/plugin-proposal-export-namespace-from": "^7.16.5",
+ "@babel/plugin-proposal-json-strings": "^7.16.5",
+ "@babel/plugin-proposal-logical-assignment-operators": "^7.16.5",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.5",
+ "@babel/plugin-proposal-numeric-separator": "^7.16.5",
+ "@babel/plugin-proposal-object-rest-spread": "^7.16.5",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.16.5",
+ "@babel/plugin-proposal-optional-chaining": "^7.16.5",
+ "@babel/plugin-proposal-private-methods": "^7.16.5",
+ "@babel/plugin-proposal-private-property-in-object": "^7.16.5",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.16.5",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
@@ -2349,38 +2363,38 @@
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
- "@babel/plugin-transform-arrow-functions": "^7.16.0",
- "@babel/plugin-transform-async-to-generator": "^7.16.0",
- "@babel/plugin-transform-block-scoped-functions": "^7.16.0",
- "@babel/plugin-transform-block-scoping": "^7.16.0",
- "@babel/plugin-transform-classes": "^7.16.0",
- "@babel/plugin-transform-computed-properties": "^7.16.0",
- "@babel/plugin-transform-destructuring": "^7.16.0",
- "@babel/plugin-transform-dotall-regex": "^7.16.0",
- "@babel/plugin-transform-duplicate-keys": "^7.16.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.16.0",
- "@babel/plugin-transform-for-of": "^7.16.0",
- "@babel/plugin-transform-function-name": "^7.16.0",
- "@babel/plugin-transform-literals": "^7.16.0",
- "@babel/plugin-transform-member-expression-literals": "^7.16.0",
- "@babel/plugin-transform-modules-amd": "^7.16.0",
- "@babel/plugin-transform-modules-commonjs": "^7.16.0",
- "@babel/plugin-transform-modules-systemjs": "^7.16.0",
- "@babel/plugin-transform-modules-umd": "^7.16.0",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0",
- "@babel/plugin-transform-new-target": "^7.16.0",
- "@babel/plugin-transform-object-super": "^7.16.0",
- "@babel/plugin-transform-parameters": "^7.16.3",
- "@babel/plugin-transform-property-literals": "^7.16.0",
- "@babel/plugin-transform-regenerator": "^7.16.0",
- "@babel/plugin-transform-reserved-words": "^7.16.0",
- "@babel/plugin-transform-shorthand-properties": "^7.16.0",
- "@babel/plugin-transform-spread": "^7.16.0",
- "@babel/plugin-transform-sticky-regex": "^7.16.0",
- "@babel/plugin-transform-template-literals": "^7.16.0",
- "@babel/plugin-transform-typeof-symbol": "^7.16.0",
- "@babel/plugin-transform-unicode-escapes": "^7.16.0",
- "@babel/plugin-transform-unicode-regex": "^7.16.0",
+ "@babel/plugin-transform-arrow-functions": "^7.16.5",
+ "@babel/plugin-transform-async-to-generator": "^7.16.5",
+ "@babel/plugin-transform-block-scoped-functions": "^7.16.5",
+ "@babel/plugin-transform-block-scoping": "^7.16.5",
+ "@babel/plugin-transform-classes": "^7.16.5",
+ "@babel/plugin-transform-computed-properties": "^7.16.5",
+ "@babel/plugin-transform-destructuring": "^7.16.5",
+ "@babel/plugin-transform-dotall-regex": "^7.16.5",
+ "@babel/plugin-transform-duplicate-keys": "^7.16.5",
+ "@babel/plugin-transform-exponentiation-operator": "^7.16.5",
+ "@babel/plugin-transform-for-of": "^7.16.5",
+ "@babel/plugin-transform-function-name": "^7.16.5",
+ "@babel/plugin-transform-literals": "^7.16.5",
+ "@babel/plugin-transform-member-expression-literals": "^7.16.5",
+ "@babel/plugin-transform-modules-amd": "^7.16.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.16.5",
+ "@babel/plugin-transform-modules-systemjs": "^7.16.5",
+ "@babel/plugin-transform-modules-umd": "^7.16.5",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.5",
+ "@babel/plugin-transform-new-target": "^7.16.5",
+ "@babel/plugin-transform-object-super": "^7.16.5",
+ "@babel/plugin-transform-parameters": "^7.16.5",
+ "@babel/plugin-transform-property-literals": "^7.16.5",
+ "@babel/plugin-transform-regenerator": "^7.16.5",
+ "@babel/plugin-transform-reserved-words": "^7.16.5",
+ "@babel/plugin-transform-shorthand-properties": "^7.16.5",
+ "@babel/plugin-transform-spread": "^7.16.5",
+ "@babel/plugin-transform-sticky-regex": "^7.16.5",
+ "@babel/plugin-transform-template-literals": "^7.16.5",
+ "@babel/plugin-transform-typeof-symbol": "^7.16.5",
+ "@babel/plugin-transform-unicode-escapes": "^7.16.5",
+ "@babel/plugin-transform-unicode-regex": "^7.16.5",
"@babel/preset-modules": "^0.1.5",
"@babel/types": "^7.16.0",
"babel-plugin-polyfill-corejs2": "^0.3.0",
@@ -2429,16 +2443,16 @@
}
},
"node_modules/@babel/preset-react": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz",
- "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.5.tgz",
+ "integrity": "sha512-3kzUOQeaxY/2vhPDS7CX/KGEGu/1bOYGvdRDJ2U5yjEz5o5jmIeTPLoiQBPGjfhPascLuW5OlMiPzwOOuB6txg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-react-display-name": "^7.16.0",
- "@babel/plugin-transform-react-jsx": "^7.16.0",
- "@babel/plugin-transform-react-jsx-development": "^7.16.0",
- "@babel/plugin-transform-react-pure-annotations": "^7.16.0"
+ "@babel/plugin-transform-react-display-name": "^7.16.5",
+ "@babel/plugin-transform-react-jsx": "^7.16.5",
+ "@babel/plugin-transform-react-jsx-development": "^7.16.5",
+ "@babel/plugin-transform-react-pure-annotations": "^7.16.5"
},
"engines": {
"node": ">=6.9.0"
@@ -2448,13 +2462,13 @@
}
},
"node_modules/@babel/preset-typescript": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.0.tgz",
- "integrity": "sha512-txegdrZYgO9DlPbv+9QOVpMnKbOtezsLHWsnsRF4AjbSIsVaujrq1qg8HK0mxQpWv0jnejt0yEoW1uWpvbrDTg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.5.tgz",
+ "integrity": "sha512-lmAWRoJ9iOSvs3DqOndQpj8XqXkzaiQs50VG/zESiI9D3eoZhGriU675xNCr0UwvsuXrhMAGvyk1w+EVWF3u8Q==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-typescript": "^7.16.0"
+ "@babel/plugin-transform-typescript": "^7.16.1"
},
"engines": {
"node": ">=6.9.0"
@@ -2464,9 +2478,9 @@
}
},
"node_modules/@babel/register": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz",
- "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.5.tgz",
+ "integrity": "sha512-NpluD+cToBiZiDsG3y9rtIcqDyivsahpaM9csfyfiq1qQWduSmihUZ+ruIqqSDGjZKZMJfgAElo9x2YWlOQuRw==",
"dev": true,
"dependencies": {
"clone-deep": "^4.0.1",
@@ -2506,9 +2520,9 @@
}
},
"node_modules/@babel/standalone": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.16.4.tgz",
- "integrity": "sha512-FDRLwjeQfPm5jaHNuB+vwNyGCp24Ah3kEsbLzKmh0eSru+QCr4DmjgbRPoz71AwXLVtXU+l/i7MlVlIj5XO7Gw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.16.5.tgz",
+ "integrity": "sha512-f6eufO52OVzOF808R42AEjqzaaJuVmFn8DRpumd16Pyju7CgNw9j7gsHg8w/VDUxeikixG6KWvTyN2u1bh13qg==",
"engines": {
"node": ">=6.9.0"
}
@@ -2527,16 +2541,17 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz",
- "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.5.tgz",
+ "integrity": "sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==",
"dependencies": {
"@babel/code-frame": "^7.16.0",
- "@babel/generator": "^7.16.0",
+ "@babel/generator": "^7.16.5",
+ "@babel/helper-environment-visitor": "^7.16.5",
"@babel/helper-function-name": "^7.16.0",
"@babel/helper-hoist-variables": "^7.16.0",
"@babel/helper-split-export-declaration": "^7.16.0",
- "@babel/parser": "^7.16.3",
+ "@babel/parser": "^7.16.5",
"@babel/types": "^7.16.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
@@ -55191,14 +55206,14 @@
"version": "0.0.1",
"license": "BSD-3-Clause",
"dependencies": {
- "@babel/preset-typescript": "7.16.0",
+ "@babel/preset-typescript": "7.16.5",
"react": "16.14.0",
"react-dom": "16.14.0",
"typescript": "4.5.3"
},
"devDependencies": {
- "@babel/core": "7.16.0",
- "@babel/preset-env": "7.16.4",
+ "@babel/core": "7.16.5",
+ "@babel/preset-env": "7.16.5",
"@rollup/plugin-babel": "5.3.0",
"@rollup/plugin-commonjs": "19.0.2",
"@rollup/plugin-node-resolve": "13.0.6",
@@ -55810,18 +55825,18 @@
"integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q=="
},
"@babel/core": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz",
- "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.5.tgz",
+ "integrity": "sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ==",
"requires": {
"@babel/code-frame": "^7.16.0",
- "@babel/generator": "^7.16.0",
- "@babel/helper-compilation-targets": "^7.16.0",
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helpers": "^7.16.0",
- "@babel/parser": "^7.16.0",
+ "@babel/generator": "^7.16.5",
+ "@babel/helper-compilation-targets": "^7.16.3",
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helpers": "^7.16.5",
+ "@babel/parser": "^7.16.5",
"@babel/template": "^7.16.0",
- "@babel/traverse": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
"@babel/types": "^7.16.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
@@ -55847,9 +55862,9 @@
}
},
"@babel/eslint-parser": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.3.tgz",
- "integrity": "sha512-iB4ElZT0jAt7PKVaeVulOECdGe6UnmA/O0P9jlF5g5GBOwDVbna8AXhHRu4s27xQf6OkveyA8iTDv1jHdDejgQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.5.tgz",
+ "integrity": "sha512-mUqYa46lgWqHKQ33Q6LNCGp/wPR3eqOYTUixHFsfrSQqRxH0+WOzca75iEjFr5RDGH1dDz622LaHhLOzOuQRUA==",
"requires": {
"eslint-scope": "^5.1.1",
"eslint-visitor-keys": "^2.1.0",
@@ -55857,9 +55872,9 @@
}
},
"@babel/generator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz",
- "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.5.tgz",
+ "integrity": "sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==",
"requires": {
"@babel/types": "^7.16.0",
"jsesc": "^2.5.1",
@@ -55875,9 +55890,9 @@
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz",
- "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.5.tgz",
+ "integrity": "sha512-3JEA9G5dmmnIWdzaT9d0NmFRgYnWUThLsDaL7982H0XqqWr56lRrsmwheXFMjR+TMl7QMBb6mzy9kvgr1lRLUA==",
"requires": {
"@babel/helper-explode-assignable-expression": "^7.16.0",
"@babel/types": "^7.16.0"
@@ -55895,15 +55910,16 @@
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz",
- "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.5.tgz",
+ "integrity": "sha512-NEohnYA7mkB8L5JhU7BLwcBdU3j83IziR9aseMueWGeAjblbul3zzb8UvJ3a1zuBiqCMObzCJHFqKIQE6hTVmg==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-environment-visitor": "^7.16.5",
"@babel/helper-function-name": "^7.16.0",
- "@babel/helper-member-expression-to-functions": "^7.16.0",
+ "@babel/helper-member-expression-to-functions": "^7.16.5",
"@babel/helper-optimise-call-expression": "^7.16.0",
- "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-replace-supers": "^7.16.5",
"@babel/helper-split-export-declaration": "^7.16.0"
}
},
@@ -55946,6 +55962,14 @@
}
}
},
+ "@babel/helper-environment-visitor": {
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz",
+ "integrity": "sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==",
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
"@babel/helper-explode-assignable-expression": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz",
@@ -55981,9 +56005,9 @@
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz",
- "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.5.tgz",
+ "integrity": "sha512-7fecSXq7ZrLE+TWshbGT+HyCLkxloWNhTbU2QM1NTI/tDqyf0oZiMcEfYtDuUDCo528EOlt39G1rftea4bRZIw==",
"requires": {
"@babel/types": "^7.16.0"
}
@@ -55997,17 +56021,17 @@
}
},
"@babel/helper-module-transforms": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz",
- "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.5.tgz",
+ "integrity": "sha512-CkvMxgV4ZyyioElFwcuWnDCcNIeyqTkCm9BxXZi73RR1ozqlpboqsbGUNvRTflgZtFbbJ1v5Emvm+lkjMYY/LQ==",
"requires": {
+ "@babel/helper-environment-visitor": "^7.16.5",
"@babel/helper-module-imports": "^7.16.0",
- "@babel/helper-replace-supers": "^7.16.0",
"@babel/helper-simple-access": "^7.16.0",
"@babel/helper-split-export-declaration": "^7.16.0",
"@babel/helper-validator-identifier": "^7.15.7",
"@babel/template": "^7.16.0",
- "@babel/traverse": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
"@babel/types": "^7.16.0"
}
},
@@ -56020,28 +56044,29 @@
}
},
"@babel/helper-plugin-utils": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
- "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ=="
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz",
+ "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ=="
},
"@babel/helper-remap-async-to-generator": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz",
- "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.5.tgz",
+ "integrity": "sha512-X+aAJldyxrOmN9v3FKp+Hu1NO69VWgYgDGq6YDykwRPzxs5f2N+X988CBXS7EQahDU+Vpet5QYMqLk+nsp+Qxw==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.16.0",
- "@babel/helper-wrap-function": "^7.16.0",
+ "@babel/helper-wrap-function": "^7.16.5",
"@babel/types": "^7.16.0"
}
},
"@babel/helper-replace-supers": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz",
- "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.5.tgz",
+ "integrity": "sha512-ao3seGVa/FZCMCCNDuBcqnBFSbdr8N2EW35mzojx3TwfIbdPmNK+JV6+2d5bR0Z71W5ocLnQp9en/cTF7pBJiQ==",
"requires": {
- "@babel/helper-member-expression-to-functions": "^7.16.0",
+ "@babel/helper-environment-visitor": "^7.16.5",
+ "@babel/helper-member-expression-to-functions": "^7.16.5",
"@babel/helper-optimise-call-expression": "^7.16.0",
- "@babel/traverse": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
"@babel/types": "^7.16.0"
}
},
@@ -56080,23 +56105,23 @@
"integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow=="
},
"@babel/helper-wrap-function": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz",
- "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.5.tgz",
+ "integrity": "sha512-2J2pmLBqUqVdJw78U0KPNdeE2qeuIyKoG4mKV7wAq3mc4jJG282UgjZw4ZYDnqiWQuS3Y3IYdF/AQ6CpyBV3VA==",
"requires": {
"@babel/helper-function-name": "^7.16.0",
"@babel/template": "^7.16.0",
- "@babel/traverse": "^7.16.0",
+ "@babel/traverse": "^7.16.5",
"@babel/types": "^7.16.0"
}
},
"@babel/helpers": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz",
- "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.5.tgz",
+ "integrity": "sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw==",
"requires": {
"@babel/template": "^7.16.0",
- "@babel/traverse": "^7.16.3",
+ "@babel/traverse": "^7.16.5",
"@babel/types": "^7.16.0"
}
},
@@ -56133,9 +56158,9 @@
}
},
"@babel/parser": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz",
- "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng=="
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.5.tgz",
+ "integrity": "sha512-+Ce7T5iPNWzfu9C1aB5tN3Lyafs5xb3Ic7vBWyZL2KXT3QSdD1dD3CvgOzPmQKoNNRt6uauc0XwNJTQtXC2/Mw=="
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.16.2",
@@ -56156,31 +56181,31 @@
}
},
"@babel/plugin-proposal-async-generator-functions": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz",
- "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.5.tgz",
+ "integrity": "sha512-C/FX+3HNLV6sz7AqbTQqEo1L9/kfrKjxcVtgyBCmvIgOjvuBVUWooDoi7trsLxOzCEo5FccjRvKHkfDsJFZlfA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-remap-async-to-generator": "^7.16.4",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-remap-async-to-generator": "^7.16.5",
"@babel/plugin-syntax-async-generators": "^7.8.4"
}
},
"@babel/plugin-proposal-class-properties": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz",
- "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.5.tgz",
+ "integrity": "sha512-pJD3HjgRv83s5dv1sTnDbZOaTjghKEz8KUn1Kbh2eAIRhGuyQ1XSeI4xVXU3UlIEVA3DAyIdxqT1eRn7Wcn55A==",
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-proposal-class-static-block": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz",
- "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.5.tgz",
+ "integrity": "sha512-EEFzuLZcm/rNJ8Q5krK+FRKdVkd6FjfzT9tuSZql9sQn64K0hHA2KLJ0DqVot9/iV6+SsuadC5yI39zWnm+nmQ==",
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-class-static-block": "^7.14.5"
}
},
@@ -56196,135 +56221,135 @@
}
},
"@babel/plugin-proposal-dynamic-import": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz",
- "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.5.tgz",
+ "integrity": "sha512-P05/SJZTTvHz79LNYTF8ff5xXge0kk5sIIWAypcWgX4BTRUgyHc8wRxJ/Hk+mU0KXldgOOslKaeqnhthcDJCJQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
}
},
"@babel/plugin-proposal-export-default-from": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.0.tgz",
- "integrity": "sha512-kFAhaIbh5qbBwETRNa/cgGmPJ/BicXhIyrZhAkyYhf/Z9LXCTRGO1mvUwczto0Hl1q4YtzP9cRtTKT4wujm38Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.5.tgz",
+ "integrity": "sha512-pU4aCS+AzGjDD/6LnwSmeelmtqfMSjzQxs7+/AS673bYsshK1XZm9eth6OkgivVscQM8XdkVYhrb6tPFVTBVHA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-export-default-from": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-export-default-from": "^7.16.5"
}
},
"@babel/plugin-proposal-export-namespace-from": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz",
- "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.5.tgz",
+ "integrity": "sha512-i+sltzEShH1vsVydvNaTRsgvq2vZsfyrd7K7vPLUU/KgS0D5yZMe6uipM0+izminnkKrEfdUnz7CxMRb6oHZWw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
}
},
"@babel/plugin-proposal-function-bind": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.16.0.tgz",
- "integrity": "sha512-oTf/NztwTma6O4e16Iy6+DOqodQydc1/MLmENMTduigCYxvUvLblCRP5Tu3PkAGPKq5/F3lB44GWLc+egJi3VA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.16.5.tgz",
+ "integrity": "sha512-rOr/gYNm8pTBAfnwr/F6uSPjFJMqE2L1jLCoVrAcrt1he5e9F6pV6Cl4JBrFBbUnA+ETMnVFZIhfVbTq7So0Gw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-function-bind": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-function-bind": "^7.16.5"
}
},
"@babel/plugin-proposal-json-strings": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz",
- "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.5.tgz",
+ "integrity": "sha512-QQJueTFa0y9E4qHANqIvMsuxM/qcLQmKttBACtPCQzGUEizsXDACGonlPiSwynHfOa3vNw0FPMVvQzbuXwh4SQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-json-strings": "^7.8.3"
}
},
"@babel/plugin-proposal-logical-assignment-operators": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz",
- "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.5.tgz",
+ "integrity": "sha512-xqibl7ISO2vjuQM+MzR3rkd0zfNWltk7n9QhaD8ghMmMceVguYrNDt7MikRyj4J4v3QehpnrU8RYLnC7z/gZLA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
}
},
"@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz",
- "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.5.tgz",
+ "integrity": "sha512-YwMsTp/oOviSBhrjwi0vzCUycseCYwoXnLiXIL3YNjHSMBHicGTz7GjVU/IGgz4DtOEXBdCNG72pvCX22ehfqg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
}
},
"@babel/plugin-proposal-numeric-separator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz",
- "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.5.tgz",
+ "integrity": "sha512-DvB9l/TcsCRvsIV9v4jxR/jVP45cslTVC0PMVHvaJhhNuhn2Y1SOhCSFlPK777qLB5wb8rVDaNoqMTyOqtY5Iw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
}
},
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz",
- "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.5.tgz",
+ "integrity": "sha512-UEd6KpChoyPhCoE840KRHOlGhEZFutdPDMGj+0I56yuTTOaT51GzmnEl/0uT41fB/vD2nT+Pci2KjezyE3HmUw==",
"requires": {
- "@babel/compat-data": "^7.16.0",
- "@babel/helper-compilation-targets": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/compat-data": "^7.16.4",
+ "@babel/helper-compilation-targets": "^7.16.3",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.16.0"
+ "@babel/plugin-transform-parameters": "^7.16.5"
}
},
"@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz",
- "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.5.tgz",
+ "integrity": "sha512-ihCMxY1Iljmx4bWy/PIMJGXN4NS4oUj1MKynwO07kiKms23pNvIn1DMB92DNB2R0EA882sw0VXIelYGdtF7xEQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
}
},
"@babel/plugin-proposal-optional-chaining": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz",
- "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.5.tgz",
+ "integrity": "sha512-kzdHgnaXRonttiTfKYnSVafbWngPPr2qKw9BWYBESl91W54e+9R5pP70LtWxV56g0f05f/SQrwHYkfvbwcdQ/A==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
}
},
"@babel/plugin-proposal-private-methods": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz",
- "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.5.tgz",
+ "integrity": "sha512-+yFMO4BGT3sgzXo+lrq7orX5mAZt57DwUK6seqII6AcJnJOIhBJ8pzKH47/ql/d426uQ7YhN8DpUFirQzqYSUA==",
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-proposal-private-property-in-object": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz",
- "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.5.tgz",
+ "integrity": "sha512-+YGh5Wbw0NH3y/E5YMu6ci5qTDmAEVNoZ3I54aB6nVEOZ5BQ7QJlwKq5pYVucQilMByGn/bvX0af+uNaPRCabA==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.16.0",
- "@babel/helper-create-class-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-create-class-features-plugin": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
}
},
"@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz",
- "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.5.tgz",
+ "integrity": "sha512-s5sKtlKQyFSatt781HQwv1hoM5BQ9qRH30r+dK56OLDsHmV74mzwJNX7R1yMuE7VZKG5O6q/gmOGSAO6ikTudg==",
"requires": {
"@babel/helper-create-regexp-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-syntax-async-generators": {
@@ -56378,11 +56403,11 @@
}
},
"@babel/plugin-syntax-export-default-from": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.0.tgz",
- "integrity": "sha512-xllLOdBj77mFSw8s02I+2SSQGHOftbWTlGmagheuNk/gjQsk7IrYsR/EosXVAVpgIUFffLckB/iPRioQYLHSrQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.5.tgz",
+ "integrity": "sha512-tvY55nhq4mSG9WbM7IZcLIhdc5jzIZu0PQKJHtZ16+dF7oBxKbqV/Z0e9ta2zaLMvUjH+3rJv1hbZ0+lpXzuFQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-syntax-export-namespace-from": {
@@ -56403,11 +56428,11 @@
}
},
"@babel/plugin-syntax-function-bind": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.16.0.tgz",
- "integrity": "sha512-L+B4rMnFg2ElQUTjSr3gfmIAJ3ej/BeKGW32AL01qpLhkI4Vw1C+W8p6wl8S6eYqWSj9X9d/lyuQWI5JFYjCWw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.16.5.tgz",
+ "integrity": "sha512-Jn09tjgZuJIQdbqQCkBQErzjO4LV2NDUz03HSowJD0km7iXsKPX6Sk0G7xIkUItenYNLfkndlWojeTyYC6QbBA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-syntax-import-meta": {
@@ -56428,11 +56453,11 @@
}
},
"@babel/plugin-syntax-jsx": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz",
- "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.5.tgz",
+ "integrity": "sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-syntax-logical-assignment-operators": {
@@ -56508,93 +56533,94 @@
}
},
"@babel/plugin-transform-arrow-functions": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz",
- "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.5.tgz",
+ "integrity": "sha512-8bTHiiZyMOyfZFULjsCnYOWG059FVMes0iljEHSfARhNgFfpsqE92OrCffv3veSw9rwMkYcFe9bj0ZoXU2IGtQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-async-to-generator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz",
- "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.5.tgz",
+ "integrity": "sha512-TMXgfioJnkXU+XRoj7P2ED7rUm5jbnDWwlCuFVTpQboMfbSya5WrmubNBAMlk7KXvywpo8rd8WuYZkis1o2H8w==",
"requires": {
"@babel/helper-module-imports": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-remap-async-to-generator": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-remap-async-to-generator": "^7.16.5"
}
},
"@babel/plugin-transform-block-scoped-functions": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz",
- "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.5.tgz",
+ "integrity": "sha512-BxmIyKLjUGksJ99+hJyL/HIxLIGnLKtw772zYDER7UuycDZ+Xvzs98ZQw6NGgM2ss4/hlFAaGiZmMNKvValEjw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz",
- "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.5.tgz",
+ "integrity": "sha512-JxjSPNZSiOtmxjX7PBRBeRJTUKTyJ607YUYeT0QJCNdsedOe+/rXITjP08eG8xUpsLfPirgzdCFN+h0w6RI+pQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-classes": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz",
- "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.5.tgz",
+ "integrity": "sha512-DzJ1vYf/7TaCYy57J3SJ9rV+JEuvmlnvvyvYKFbk5u46oQbBvuB9/0w+YsVsxkOv8zVWKpDmUoj4T5ILHoXevA==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-environment-visitor": "^7.16.5",
"@babel/helper-function-name": "^7.16.0",
"@babel/helper-optimise-call-expression": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-replace-supers": "^7.16.5",
"@babel/helper-split-export-declaration": "^7.16.0",
"globals": "^11.1.0"
}
},
"@babel/plugin-transform-computed-properties": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz",
- "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.5.tgz",
+ "integrity": "sha512-n1+O7xtU5lSLraRzX88CNcpl7vtGdPakKzww74bVwpAIRgz9JVLJJpOLb0uYqcOaXVM0TL6X0RVeIJGD2CnCkg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz",
- "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.5.tgz",
+ "integrity": "sha512-GuRVAsjq+c9YPK6NeTkRLWyQskDC099XkBSVO+6QzbnOnH2d/4mBVXYStaPrZD3dFRfg00I6BFJ9Atsjfs8mlg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-dotall-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz",
- "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.5.tgz",
+ "integrity": "sha512-iQiEMt8Q4/5aRGHpGVK2Zc7a6mx7qEAO7qehgSug3SDImnuMzgmm/wtJALXaz25zUj1PmnNHtShjFgk4PDx4nw==",
"requires": {
"@babel/helper-create-regexp-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-duplicate-keys": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz",
- "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.5.tgz",
+ "integrity": "sha512-81tijpDg2a6I1Yhj4aWY1l3O1J4Cg/Pd7LfvuaH2VVInAkXtzibz9+zSPdUM1WvuUi128ksstAP0hM5w48vQgg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-exponentiation-operator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz",
- "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.5.tgz",
+ "integrity": "sha512-12rba2HwemQPa7BLIKCzm1pT2/RuQHtSFHdNl41cFiC6oi4tcrp7gjB07pxQvFpcADojQywSjblQth6gJyE6CA==",
"requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-flow-strip-types": {
@@ -56608,172 +56634,172 @@
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz",
- "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.5.tgz",
+ "integrity": "sha512-+DpCAJFPAvViR17PIMi9x2AE34dll5wNlXO43wagAX2YcRGgEVHCNFC4azG85b4YyyFarvkc/iD5NPrz4Oneqw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-function-name": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz",
- "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.5.tgz",
+ "integrity": "sha512-Fuec/KPSpVLbGo6z1RPw4EE1X+z9gZk1uQmnYy7v4xr4TO9p41v1AoUuXEtyqAI7H+xNJYSICzRqZBhDEkd3kQ==",
"requires": {
"@babel/helper-function-name": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz",
- "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.5.tgz",
+ "integrity": "sha512-B1j9C/IfvshnPcklsc93AVLTrNVa69iSqztylZH6qnmiAsDDOmmjEYqOm3Ts2lGSgTSywnBNiqC949VdD0/gfw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-member-expression-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz",
- "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.5.tgz",
+ "integrity": "sha512-d57i3vPHWgIde/9Y8W/xSFUndhvhZN5Wu2TjRrN1MVz5KzdUihKnfDVlfP1U7mS5DNj/WHHhaE4/tTi4hIyHwQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-modules-amd": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz",
- "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.5.tgz",
+ "integrity": "sha512-oHI15S/hdJuSCfnwIz+4lm6wu/wBn7oJ8+QrkzPPwSFGXk8kgdI/AIKcbR/XnD1nQVMg/i6eNaXpszbGuwYDRQ==",
"requires": {
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz",
- "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.5.tgz",
+ "integrity": "sha512-ABhUkxvoQyqhCWyb8xXtfwqNMJD7tx+irIRnUh6lmyFud7Jln1WzONXKlax1fg/ey178EXbs4bSGNd6PngO+SQ==",
"requires": {
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-simple-access": "^7.16.0",
"babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz",
- "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.5.tgz",
+ "integrity": "sha512-53gmLdScNN28XpjEVIm7LbWnD/b/TpbwKbLk6KV4KqC9WyU6rq1jnNmVG6UgAdQZVVGZVoik3DqHNxk4/EvrjA==",
"requires": {
"@babel/helper-hoist-variables": "^7.16.0",
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-validator-identifier": "^7.15.7",
"babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-umd": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz",
- "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.5.tgz",
+ "integrity": "sha512-qTFnpxHMoenNHkS3VoWRdwrcJ3FhX567GvDA3hRZKF0Dj8Fmg0UzySZp3AP2mShl/bzcywb/UWAMQIjA1bhXvw==",
"requires": {
- "@babel/helper-module-transforms": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-module-transforms": "^7.16.5",
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz",
- "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.5.tgz",
+ "integrity": "sha512-/wqGDgvFUeKELW6ex6QB7dLVRkd5ehjw34tpXu1nhKC0sFfmaLabIswnpf8JgDyV2NeDmZiwoOb0rAmxciNfjA==",
"requires": {
"@babel/helper-create-regexp-features-plugin": "^7.16.0"
}
},
"@babel/plugin-transform-new-target": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz",
- "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.5.tgz",
+ "integrity": "sha512-ZaIrnXF08ZC8jnKR4/5g7YakGVL6go6V9ql6Jl3ecO8PQaQqFE74CuM384kezju7Z9nGCCA20BqZaR1tJ/WvHg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-object-super": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz",
- "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.5.tgz",
+ "integrity": "sha512-tded+yZEXuxt9Jdtkc1RraW1zMF/GalVxaVVxh41IYwirdRgyAxxxCKZ9XB7LxZqmsjfjALxupNE1MIz9KH+Zg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-replace-supers": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/helper-replace-supers": "^7.16.5"
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz",
- "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.5.tgz",
+ "integrity": "sha512-B3O6AL5oPop1jAVg8CV+haeUte9oFuY85zu0jwnRNZZi3tVAbJriu5tag/oaO2kGaQM/7q7aGPBlTI5/sr9enA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-property-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz",
- "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.5.tgz",
+ "integrity": "sha512-+IRcVW71VdF9pEH/2R/Apab4a19LVvdVsr/gEeotH00vSDVlKD+XgfSIw+cgGWsjDB/ziqGv/pGoQZBIiQVXHg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-react-display-name": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz",
- "integrity": "sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.5.tgz",
+ "integrity": "sha512-dHYCOnzSsXFz8UcdNQIHGvg94qPL/teF7CCiCEMRxmA1G2p5Mq4JnKVowCDxYfiQ9D7RstaAp9kwaSI+sXbnhw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-react-jsx": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz",
- "integrity": "sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.5.tgz",
+ "integrity": "sha512-+arLIz1d7kmwX0fKxTxbnoeG85ONSnLpvdODa4P3pc1sS7CV1hfmtYWufkW/oYsPnkDrEeQFxhUWcFnrXW7jQQ==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.16.0",
"@babel/helper-module-imports": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-jsx": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.16.5",
+ "@babel/plugin-syntax-jsx": "^7.16.5",
"@babel/types": "^7.16.0"
}
},
"@babel/plugin-transform-react-jsx-development": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz",
- "integrity": "sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.5.tgz",
+ "integrity": "sha512-uQSLacMZSGLCxOw20dzo1dmLlKkd+DsayoV54q3MHXhbqgPzoiGerZQgNPl/Ro8/OcXV2ugfnkx+rxdS0sN5Uw==",
"requires": {
- "@babel/plugin-transform-react-jsx": "^7.16.0"
+ "@babel/plugin-transform-react-jsx": "^7.16.5"
}
},
"@babel/plugin-transform-react-pure-annotations": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz",
- "integrity": "sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.5.tgz",
+ "integrity": "sha512-0nYU30hCxnCVCbRjSy9ahlhWZ2Sn6khbY4FqR91W+2RbSqkWEbVu2gXh45EqNy4Bq7sRU+H4i0/6YKwOSzh16A==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz",
- "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.5.tgz",
+ "integrity": "sha512-2z+it2eVWU8TtQQRauvGUqZwLy4+7rTfo6wO4npr+fvvN1SW30ZF3O/ZRCNmTuu4F5MIP8OJhXAhRV5QMJOuYg==",
"requires": {
"regenerator-transform": "^0.14.2"
}
},
"@babel/plugin-transform-reserved-words": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz",
- "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.5.tgz",
+ "integrity": "sha512-aIB16u8lNcf7drkhXJRoggOxSTUAuihTSTfAcpynowGJOZiGf+Yvi7RuTwFzVYSYPmWyARsPqUGoZWWWxLiknw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-runtime": {
@@ -56790,44 +56816,44 @@
}
},
"@babel/plugin-transform-shorthand-properties": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz",
- "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.5.tgz",
+ "integrity": "sha512-ZbuWVcY+MAXJuuW7qDoCwoxDUNClfZxoo7/4swVbOW1s/qYLOMHlm9YRWMsxMFuLs44eXsv4op1vAaBaBaDMVg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-spread": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz",
- "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.5.tgz",
+ "integrity": "sha512-5d6l/cnG7Lw4tGHEoga4xSkYp1euP7LAtrah1h1PgJ3JY7yNsjybsxQAnVK4JbtReZ/8z6ASVmd3QhYYKLaKZw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.16.0"
}
},
"@babel/plugin-transform-sticky-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz",
- "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.5.tgz",
+ "integrity": "sha512-usYsuO1ID2LXxzuUxifgWtJemP7wL2uZtyrTVM4PKqsmJycdS4U4mGovL5xXkfUheds10Dd2PjoQLXw6zCsCbg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz",
- "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.5.tgz",
+ "integrity": "sha512-gnyKy9RyFhkovex4BjKWL3BVYzUDG6zC0gba7VMLbQoDuqMfJ1SDXs8k/XK41Mmt1Hyp4qNAvGFb9hKzdCqBRQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-typeof-symbol": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz",
- "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.5.tgz",
+ "integrity": "sha512-ldxCkW180qbrvyCVDzAUZqB0TAeF8W/vGJoRcaf75awm6By+PxfJKvuqVAnq8N9wz5Xa6mSpM19OfVKKVmGHSQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-typescript": {
@@ -56841,20 +56867,20 @@
}
},
"@babel/plugin-transform-unicode-escapes": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz",
- "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.5.tgz",
+ "integrity": "sha512-shiCBHTIIChGLdyojsKQjoAyB8MBwat25lKM7MJjbe1hE0bgIppD+LX9afr41lLHOhqceqeWl4FkLp+Bgn9o1Q==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/plugin-transform-unicode-regex": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz",
- "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.5.tgz",
+ "integrity": "sha512-GTJ4IW012tiPEMMubd7sD07iU9O/LOo8Q/oU4xNhcaq0Xn8+6TcUQaHtC8YxySo1T+ErQ8RaWogIEeFhKGNPzw==",
"requires": {
"@babel/helper-create-regexp-features-plugin": "^7.16.0",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.16.5"
}
},
"@babel/polyfill": {
@@ -56867,31 +56893,31 @@
}
},
"@babel/preset-env": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz",
- "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.5.tgz",
+ "integrity": "sha512-MiJJW5pwsktG61NDxpZ4oJ1CKxM1ncam9bzRtx9g40/WkLRkxFP6mhpkYV0/DxcciqoiHicx291+eUQrXb/SfQ==",
"requires": {
"@babel/compat-data": "^7.16.4",
"@babel/helper-compilation-targets": "^7.16.3",
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-validator-option": "^7.14.5",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0",
- "@babel/plugin-proposal-async-generator-functions": "^7.16.4",
- "@babel/plugin-proposal-class-properties": "^7.16.0",
- "@babel/plugin-proposal-class-static-block": "^7.16.0",
- "@babel/plugin-proposal-dynamic-import": "^7.16.0",
- "@babel/plugin-proposal-export-namespace-from": "^7.16.0",
- "@babel/plugin-proposal-json-strings": "^7.16.0",
- "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
- "@babel/plugin-proposal-numeric-separator": "^7.16.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.16.0",
- "@babel/plugin-proposal-optional-catch-binding": "^7.16.0",
- "@babel/plugin-proposal-optional-chaining": "^7.16.0",
- "@babel/plugin-proposal-private-methods": "^7.16.0",
- "@babel/plugin-proposal-private-property-in-object": "^7.16.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.16.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.16.5",
+ "@babel/plugin-proposal-class-properties": "^7.16.5",
+ "@babel/plugin-proposal-class-static-block": "^7.16.5",
+ "@babel/plugin-proposal-dynamic-import": "^7.16.5",
+ "@babel/plugin-proposal-export-namespace-from": "^7.16.5",
+ "@babel/plugin-proposal-json-strings": "^7.16.5",
+ "@babel/plugin-proposal-logical-assignment-operators": "^7.16.5",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.5",
+ "@babel/plugin-proposal-numeric-separator": "^7.16.5",
+ "@babel/plugin-proposal-object-rest-spread": "^7.16.5",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.16.5",
+ "@babel/plugin-proposal-optional-chaining": "^7.16.5",
+ "@babel/plugin-proposal-private-methods": "^7.16.5",
+ "@babel/plugin-proposal-private-property-in-object": "^7.16.5",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.16.5",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
@@ -56906,38 +56932,38 @@
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
- "@babel/plugin-transform-arrow-functions": "^7.16.0",
- "@babel/plugin-transform-async-to-generator": "^7.16.0",
- "@babel/plugin-transform-block-scoped-functions": "^7.16.0",
- "@babel/plugin-transform-block-scoping": "^7.16.0",
- "@babel/plugin-transform-classes": "^7.16.0",
- "@babel/plugin-transform-computed-properties": "^7.16.0",
- "@babel/plugin-transform-destructuring": "^7.16.0",
- "@babel/plugin-transform-dotall-regex": "^7.16.0",
- "@babel/plugin-transform-duplicate-keys": "^7.16.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.16.0",
- "@babel/plugin-transform-for-of": "^7.16.0",
- "@babel/plugin-transform-function-name": "^7.16.0",
- "@babel/plugin-transform-literals": "^7.16.0",
- "@babel/plugin-transform-member-expression-literals": "^7.16.0",
- "@babel/plugin-transform-modules-amd": "^7.16.0",
- "@babel/plugin-transform-modules-commonjs": "^7.16.0",
- "@babel/plugin-transform-modules-systemjs": "^7.16.0",
- "@babel/plugin-transform-modules-umd": "^7.16.0",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0",
- "@babel/plugin-transform-new-target": "^7.16.0",
- "@babel/plugin-transform-object-super": "^7.16.0",
- "@babel/plugin-transform-parameters": "^7.16.3",
- "@babel/plugin-transform-property-literals": "^7.16.0",
- "@babel/plugin-transform-regenerator": "^7.16.0",
- "@babel/plugin-transform-reserved-words": "^7.16.0",
- "@babel/plugin-transform-shorthand-properties": "^7.16.0",
- "@babel/plugin-transform-spread": "^7.16.0",
- "@babel/plugin-transform-sticky-regex": "^7.16.0",
- "@babel/plugin-transform-template-literals": "^7.16.0",
- "@babel/plugin-transform-typeof-symbol": "^7.16.0",
- "@babel/plugin-transform-unicode-escapes": "^7.16.0",
- "@babel/plugin-transform-unicode-regex": "^7.16.0",
+ "@babel/plugin-transform-arrow-functions": "^7.16.5",
+ "@babel/plugin-transform-async-to-generator": "^7.16.5",
+ "@babel/plugin-transform-block-scoped-functions": "^7.16.5",
+ "@babel/plugin-transform-block-scoping": "^7.16.5",
+ "@babel/plugin-transform-classes": "^7.16.5",
+ "@babel/plugin-transform-computed-properties": "^7.16.5",
+ "@babel/plugin-transform-destructuring": "^7.16.5",
+ "@babel/plugin-transform-dotall-regex": "^7.16.5",
+ "@babel/plugin-transform-duplicate-keys": "^7.16.5",
+ "@babel/plugin-transform-exponentiation-operator": "^7.16.5",
+ "@babel/plugin-transform-for-of": "^7.16.5",
+ "@babel/plugin-transform-function-name": "^7.16.5",
+ "@babel/plugin-transform-literals": "^7.16.5",
+ "@babel/plugin-transform-member-expression-literals": "^7.16.5",
+ "@babel/plugin-transform-modules-amd": "^7.16.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.16.5",
+ "@babel/plugin-transform-modules-systemjs": "^7.16.5",
+ "@babel/plugin-transform-modules-umd": "^7.16.5",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.5",
+ "@babel/plugin-transform-new-target": "^7.16.5",
+ "@babel/plugin-transform-object-super": "^7.16.5",
+ "@babel/plugin-transform-parameters": "^7.16.5",
+ "@babel/plugin-transform-property-literals": "^7.16.5",
+ "@babel/plugin-transform-regenerator": "^7.16.5",
+ "@babel/plugin-transform-reserved-words": "^7.16.5",
+ "@babel/plugin-transform-shorthand-properties": "^7.16.5",
+ "@babel/plugin-transform-spread": "^7.16.5",
+ "@babel/plugin-transform-sticky-regex": "^7.16.5",
+ "@babel/plugin-transform-template-literals": "^7.16.5",
+ "@babel/plugin-transform-typeof-symbol": "^7.16.5",
+ "@babel/plugin-transform-unicode-escapes": "^7.16.5",
+ "@babel/plugin-transform-unicode-regex": "^7.16.5",
"@babel/preset-modules": "^0.1.5",
"@babel/types": "^7.16.0",
"babel-plugin-polyfill-corejs2": "^0.3.0",
@@ -56971,32 +56997,32 @@
}
},
"@babel/preset-react": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz",
- "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.5.tgz",
+ "integrity": "sha512-3kzUOQeaxY/2vhPDS7CX/KGEGu/1bOYGvdRDJ2U5yjEz5o5jmIeTPLoiQBPGjfhPascLuW5OlMiPzwOOuB6txg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-react-display-name": "^7.16.0",
- "@babel/plugin-transform-react-jsx": "^7.16.0",
- "@babel/plugin-transform-react-jsx-development": "^7.16.0",
- "@babel/plugin-transform-react-pure-annotations": "^7.16.0"
+ "@babel/plugin-transform-react-display-name": "^7.16.5",
+ "@babel/plugin-transform-react-jsx": "^7.16.5",
+ "@babel/plugin-transform-react-jsx-development": "^7.16.5",
+ "@babel/plugin-transform-react-pure-annotations": "^7.16.5"
}
},
"@babel/preset-typescript": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.0.tgz",
- "integrity": "sha512-txegdrZYgO9DlPbv+9QOVpMnKbOtezsLHWsnsRF4AjbSIsVaujrq1qg8HK0mxQpWv0jnejt0yEoW1uWpvbrDTg==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.5.tgz",
+ "integrity": "sha512-lmAWRoJ9iOSvs3DqOndQpj8XqXkzaiQs50VG/zESiI9D3eoZhGriU675xNCr0UwvsuXrhMAGvyk1w+EVWF3u8Q==",
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.16.5",
"@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-typescript": "^7.16.0"
+ "@babel/plugin-transform-typescript": "^7.16.1"
}
},
"@babel/register": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz",
- "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.5.tgz",
+ "integrity": "sha512-NpluD+cToBiZiDsG3y9rtIcqDyivsahpaM9csfyfiq1qQWduSmihUZ+ruIqqSDGjZKZMJfgAElo9x2YWlOQuRw==",
"dev": true,
"requires": {
"clone-deep": "^4.0.1",
@@ -57024,9 +57050,9 @@
}
},
"@babel/standalone": {
- "version": "7.16.4",
- "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.16.4.tgz",
- "integrity": "sha512-FDRLwjeQfPm5jaHNuB+vwNyGCp24Ah3kEsbLzKmh0eSru+QCr4DmjgbRPoz71AwXLVtXU+l/i7MlVlIj5XO7Gw=="
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.16.5.tgz",
+ "integrity": "sha512-f6eufO52OVzOF808R42AEjqzaaJuVmFn8DRpumd16Pyju7CgNw9j7gsHg8w/VDUxeikixG6KWvTyN2u1bh13qg=="
},
"@babel/template": {
"version": "7.16.0",
@@ -57039,16 +57065,17 @@
}
},
"@babel/traverse": {
- "version": "7.16.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz",
- "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==",
+ "version": "7.16.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.5.tgz",
+ "integrity": "sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==",
"requires": {
"@babel/code-frame": "^7.16.0",
- "@babel/generator": "^7.16.0",
+ "@babel/generator": "^7.16.5",
+ "@babel/helper-environment-visitor": "^7.16.5",
"@babel/helper-function-name": "^7.16.0",
"@babel/helper-hoist-variables": "^7.16.0",
"@babel/helper-split-export-declaration": "^7.16.0",
- "@babel/parser": "^7.16.3",
+ "@babel/parser": "^7.16.5",
"@babel/types": "^7.16.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
@@ -57665,12 +57692,12 @@
"@freecodecamp/client": {
"version": "file:client",
"requires": {
- "@babel/plugin-proposal-export-default-from": "7.16.0",
- "@babel/plugin-proposal-function-bind": "7.16.0",
+ "@babel/plugin-proposal-export-default-from": "7.16.5",
+ "@babel/plugin-proposal-function-bind": "7.16.5",
"@babel/polyfill": "7.12.1",
- "@babel/preset-env": "7.16.4",
- "@babel/preset-react": "7.16.0",
- "@babel/standalone": "7.16.4",
+ "@babel/preset-env": "7.16.5",
+ "@babel/preset-react": "7.16.5",
+ "@babel/standalone": "7.16.5",
"@babel/types": "7.16.0",
"@codesee/babel-plugin-instrument": "0.150.0",
"@codesee/tracker": "0.150.0",
@@ -57853,11 +57880,11 @@
"@freecodecamp/curriculum": {
"version": "file:curriculum",
"requires": {
- "@babel/core": "7.16.0",
+ "@babel/core": "7.16.5",
"@babel/polyfill": "7.12.1",
- "@babel/preset-env": "7.16.4",
- "@babel/preset-typescript": "7.16.0",
- "@babel/register": "7.16.0",
+ "@babel/preset-env": "7.16.5",
+ "@babel/preset-typescript": "7.16.5",
+ "@babel/register": "7.16.5",
"acorn": "8.5.0",
"acorn-jsx": "5.3.2",
"babel-plugin-dynamic-import-node": "2.3.3",
@@ -58071,9 +58098,9 @@
"@freecodecamp/ui": {
"version": "file:tools/ui-components",
"requires": {
- "@babel/core": "7.16.0",
- "@babel/preset-env": "7.16.4",
- "@babel/preset-typescript": "7.16.0",
+ "@babel/core": "7.16.5",
+ "@babel/preset-env": "7.16.5",
+ "@babel/preset-typescript": "7.16.5",
"@rollup/plugin-babel": "5.3.0",
"@rollup/plugin-commonjs": "19.0.2",
"@rollup/plugin-node-resolve": "13.0.6",
diff --git a/package.json b/package.json
index 4f49be2b03..873940af82 100644
--- a/package.json
+++ b/package.json
@@ -101,11 +101,11 @@
"invariant": "2.2.4"
},
"devDependencies": {
- "@babel/eslint-parser": "7.16.3",
- "@babel/plugin-proposal-function-bind": "7.16.0",
- "@babel/preset-env": "7.16.4",
- "@babel/preset-react": "7.16.0",
- "@babel/preset-typescript": "7.16.0",
+ "@babel/eslint-parser": "7.16.5",
+ "@babel/plugin-proposal-function-bind": "7.16.5",
+ "@babel/preset-env": "7.16.5",
+ "@babel/preset-react": "7.16.5",
+ "@babel/preset-typescript": "7.16.5",
"@testing-library/cypress": "7.0.7",
"@testing-library/dom": "8.11.1",
"@testing-library/jest-dom": "5.16.1",
diff --git a/tools/ui-components/package.json b/tools/ui-components/package.json
index 5da5c46ad5..c67ffbe7da 100644
--- a/tools/ui-components/package.json
+++ b/tools/ui-components/package.json
@@ -19,14 +19,14 @@
},
"homepage": "https://github.com/freeCodeCamp/freeCodeCamp#readme",
"dependencies": {
- "@babel/preset-typescript": "7.16.0",
+ "@babel/preset-typescript": "7.16.5",
"react": "16.14.0",
"react-dom": "16.14.0",
"typescript": "4.5.3"
},
"devDependencies": {
- "@babel/core": "7.16.0",
- "@babel/preset-env": "7.16.4",
+ "@babel/core": "7.16.5",
+ "@babel/preset-env": "7.16.5",
"@rollup/plugin-babel": "5.3.0",
"@rollup/plugin-commonjs": "19.0.2",
"@rollup/plugin-node-resolve": "13.0.6",
From 73c1ca1b4a563e9a88c4fe31b5a841138c114c35 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Tue, 14 Dec 2021 02:47:07 +0000
Subject: [PATCH 30/63] fix(deps): update dependency typescript to v4.5.4
---
client/package.json | 2 +-
package-lock.json | 26 ++++++++++-----------
package.json | 2 +-
tools/challenge-helper-scripts/package.json | 2 +-
tools/ui-components/package.json | 2 +-
5 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/client/package.json b/client/package.json
index 1e9d60c40d..078627169e 100644
--- a/client/package.json
+++ b/client/package.json
@@ -123,7 +123,7 @@
"store": "2.0.12",
"stream-browserify": "3.0.0",
"tone": "14.7.77",
- "typescript": "4.5.3",
+ "typescript": "4.5.4",
"uuid": "8.3.2",
"validator": "13.7.0"
},
diff --git a/package-lock.json b/package-lock.json
index 777315bda1..830f957bec 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -96,7 +96,7 @@
"process": "0.11.10",
"shx": "0.3.3",
"start-server-and-test": "1.14.0",
- "typescript": "4.5.3",
+ "typescript": "4.5.4",
"webpack-bundle-analyzer": "4.5.0"
},
"engines": {
@@ -291,7 +291,7 @@
"store": "2.0.12",
"stream-browserify": "3.0.0",
"tone": "14.7.77",
- "typescript": "4.5.3",
+ "typescript": "4.5.4",
"uuid": "8.3.2",
"validator": "13.7.0"
},
@@ -51823,9 +51823,9 @@
}
},
"node_modules/typescript": {
- "version": "4.5.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.3.tgz",
- "integrity": "sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ==",
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz",
+ "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -54878,7 +54878,7 @@
"inquirer": "8.2.0",
"prettier": "2.5.1",
"ts-node": "10.4.0",
- "typescript": "4.5.3"
+ "typescript": "4.5.4"
},
"engines": {
"node": ">=16",
@@ -55209,7 +55209,7 @@
"@babel/preset-typescript": "7.16.5",
"react": "16.14.0",
"react-dom": "16.14.0",
- "typescript": "4.5.3"
+ "typescript": "4.5.4"
},
"devDependencies": {
"@babel/core": "7.16.5",
@@ -57799,7 +57799,7 @@
"store": "2.0.12",
"stream-browserify": "3.0.0",
"tone": "14.7.77",
- "typescript": "4.5.3",
+ "typescript": "4.5.4",
"uuid": "8.3.2",
"validator": "13.7.0",
"webpack": "5.65.0",
@@ -57934,7 +57934,7 @@
"inquirer": "8.2.0",
"prettier": "2.5.1",
"ts-node": "10.4.0",
- "typescript": "4.5.3"
+ "typescript": "4.5.4"
},
"dependencies": {
"acorn-walk": {
@@ -58128,7 +58128,7 @@
"rollup-plugin-postcss": "4.0.2",
"rollup-plugin-terser": "7.0.2",
"tailwindcss": "2.2.19",
- "typescript": "4.5.3"
+ "typescript": "4.5.4"
},
"dependencies": {
"@jest/transform": {
@@ -96035,9 +96035,9 @@
}
},
"typescript": {
- "version": "4.5.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.3.tgz",
- "integrity": "sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ=="
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz",
+ "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg=="
},
"typescript-compare": {
"version": "0.0.2",
diff --git a/package.json b/package.json
index 873940af82..a70ea311c1 100644
--- a/package.json
+++ b/package.json
@@ -171,7 +171,7 @@
"process": "0.11.10",
"shx": "0.3.3",
"start-server-and-test": "1.14.0",
- "typescript": "4.5.3",
+ "typescript": "4.5.4",
"webpack-bundle-analyzer": "4.5.0"
}
}
diff --git a/tools/challenge-helper-scripts/package.json b/tools/challenge-helper-scripts/package.json
index 37d99d8281..17ec7f440b 100644
--- a/tools/challenge-helper-scripts/package.json
+++ b/tools/challenge-helper-scripts/package.json
@@ -29,6 +29,6 @@
"inquirer": "8.2.0",
"prettier": "2.5.1",
"ts-node": "10.4.0",
- "typescript": "4.5.3"
+ "typescript": "4.5.4"
}
}
diff --git a/tools/ui-components/package.json b/tools/ui-components/package.json
index c67ffbe7da..98f5842cae 100644
--- a/tools/ui-components/package.json
+++ b/tools/ui-components/package.json
@@ -22,7 +22,7 @@
"@babel/preset-typescript": "7.16.5",
"react": "16.14.0",
"react-dom": "16.14.0",
- "typescript": "4.5.3"
+ "typescript": "4.5.4"
},
"devDependencies": {
"@babel/core": "7.16.5",
From 0d8145307feb394be30887972bdc4c6ca2850ba1 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Tue, 14 Dec 2021 04:51:06 +0000
Subject: [PATCH 31/63] chore(deps): update dependency
@rollup/plugin-node-resolve to v13.1.1
---
package-lock.json | 16 ++++++++--------
tools/ui-components/package.json | 2 +-
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 830f957bec..ea17484cb6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5208,9 +5208,9 @@
}
},
"node_modules/@rollup/plugin-node-resolve": {
- "version": "13.0.6",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz",
- "integrity": "sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==",
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.1.tgz",
+ "integrity": "sha512-6QKtRevXLrmEig9UiMYt2fSvee9TyltGRfw+qSs6xjUnxwjOzTOqy+/Lpxsgjb8mJn1EQNbCDAvt89O4uzL5kw==",
"dev": true,
"dependencies": {
"@rollup/pluginutils": "^3.1.0",
@@ -55216,7 +55216,7 @@
"@babel/preset-env": "7.16.5",
"@rollup/plugin-babel": "5.3.0",
"@rollup/plugin-commonjs": "19.0.2",
- "@rollup/plugin-node-resolve": "13.0.6",
+ "@rollup/plugin-node-resolve": "13.1.1",
"@storybook/addon-actions": "6.4.9",
"@storybook/addon-docs": "6.4.9",
"@storybook/addon-essentials": "6.4.9",
@@ -58103,7 +58103,7 @@
"@babel/preset-typescript": "7.16.5",
"@rollup/plugin-babel": "5.3.0",
"@rollup/plugin-commonjs": "19.0.2",
- "@rollup/plugin-node-resolve": "13.0.6",
+ "@rollup/plugin-node-resolve": "13.1.1",
"@storybook/addon-actions": "6.4.9",
"@storybook/addon-docs": "6.4.9",
"@storybook/addon-essentials": "6.4.9",
@@ -59943,9 +59943,9 @@
}
},
"@rollup/plugin-node-resolve": {
- "version": "13.0.6",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz",
- "integrity": "sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==",
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.1.tgz",
+ "integrity": "sha512-6QKtRevXLrmEig9UiMYt2fSvee9TyltGRfw+qSs6xjUnxwjOzTOqy+/Lpxsgjb8mJn1EQNbCDAvt89O4uzL5kw==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.1.0",
diff --git a/tools/ui-components/package.json b/tools/ui-components/package.json
index 98f5842cae..1547f92df2 100644
--- a/tools/ui-components/package.json
+++ b/tools/ui-components/package.json
@@ -29,7 +29,7 @@
"@babel/preset-env": "7.16.5",
"@rollup/plugin-babel": "5.3.0",
"@rollup/plugin-commonjs": "19.0.2",
- "@rollup/plugin-node-resolve": "13.0.6",
+ "@rollup/plugin-node-resolve": "13.1.1",
"@storybook/addon-actions": "6.4.9",
"@storybook/addon-docs": "6.4.9",
"@storybook/addon-essentials": "6.4.9",
From 6819cf5e1b5b348f20d284af0a1c9910dfeeb3f3 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Tue, 14 Dec 2021 08:38:09 +0000
Subject: [PATCH 32/63] chore(deps): update typescript-eslint monorepo to
v5.7.0
---
package-lock.json | 140 +++++++++++++++++++++++-----------------------
package.json | 4 +-
2 files changed, 72 insertions(+), 72 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index ea17484cb6..ea68801777 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -64,8 +64,8 @@
"@types/sanitize-html": "2.6.0",
"@types/store": "2.0.2",
"@types/validator": "13.7.0",
- "@typescript-eslint/eslint-plugin": "5.6.0",
- "@typescript-eslint/parser": "5.6.0",
+ "@typescript-eslint/eslint-plugin": "5.7.0",
+ "@typescript-eslint/parser": "5.7.0",
"babel-eslint": "10.1.0",
"babel-plugin-transform-imports": "2.0.0",
"cross-env": "7.0.3",
@@ -15395,13 +15395,13 @@
"integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw=="
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.6.0.tgz",
- "integrity": "sha512-MIbeMy5qfLqtgs1hWd088k1hOuRsN9JrHUPwVVKCD99EOUqScd7SrwoZl4Gso05EAP9w1kvLWUVGJOVpRPkDPA==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.7.0.tgz",
+ "integrity": "sha512-8RTGBpNn5a9M628wBPrCbJ+v3YTEOE2qeZb7TDkGKTDXSj36KGRg92SpFFaR/0S3rSXQxM0Og/kV9EyadsYSBg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/experimental-utils": "5.6.0",
- "@typescript-eslint/scope-manager": "5.6.0",
+ "@typescript-eslint/experimental-utils": "5.7.0",
+ "@typescript-eslint/scope-manager": "5.7.0",
"debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.1.8",
@@ -15483,15 +15483,15 @@
"dev": true
},
"node_modules/@typescript-eslint/experimental-utils": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.6.0.tgz",
- "integrity": "sha512-VDoRf3Qj7+W3sS/ZBXZh3LBzp0snDLEgvp6qj0vOAIiAPM07bd5ojQ3CTzF/QFl5AKh7Bh1ycgj6lFBJHUt/DA==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.7.0.tgz",
+ "integrity": "sha512-u57eZ5FbEpzN5kSjmVrSesovWslH2ZyNPnaXQMXWgH57d5+EVHEt76W75vVuI9qKZ5BMDKNfRN+pxcPEjQjb2A==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.6.0",
- "@typescript-eslint/types": "5.6.0",
- "@typescript-eslint/typescript-estree": "5.6.0",
+ "@typescript-eslint/scope-manager": "5.7.0",
+ "@typescript-eslint/types": "5.7.0",
+ "@typescript-eslint/typescript-estree": "5.7.0",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
},
@@ -15507,14 +15507,14 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.6.0.tgz",
- "integrity": "sha512-YVK49NgdUPQ8SpCZaOpiq1kLkYRPMv9U5gcMrywzI8brtwZjr/tG3sZpuHyODt76W/A0SufNjYt9ZOgrC4tLIQ==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.7.0.tgz",
+ "integrity": "sha512-m/gWCCcS4jXw6vkrPQ1BjZ1vomP01PArgzvauBqzsoZ3urLbsRChexB8/YV8z9HwE3qlJM35FxfKZ1nfP/4x8g==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.6.0",
- "@typescript-eslint/types": "5.6.0",
- "@typescript-eslint/typescript-estree": "5.6.0",
+ "@typescript-eslint/scope-manager": "5.7.0",
+ "@typescript-eslint/types": "5.7.0",
+ "@typescript-eslint/typescript-estree": "5.7.0",
"debug": "^4.3.2"
},
"engines": {
@@ -15557,13 +15557,13 @@
"dev": true
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.6.0.tgz",
- "integrity": "sha512-1U1G77Hw2jsGWVsO2w6eVCbOg0HZ5WxL/cozVSTfqnL/eB9muhb8THsP0G3w+BB5xAHv9KptwdfYFAUfzcIh4A==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.7.0.tgz",
+ "integrity": "sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.6.0",
- "@typescript-eslint/visitor-keys": "5.6.0"
+ "@typescript-eslint/types": "5.7.0",
+ "@typescript-eslint/visitor-keys": "5.7.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -15574,9 +15574,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.6.0.tgz",
- "integrity": "sha512-OIZffked7mXv4mXzWU5MgAEbCf9ecNJBKi+Si6/I9PpTaj+cf2x58h2oHW5/P/yTnPkKaayfjhLvx+crnl5ubA==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.7.0.tgz",
+ "integrity": "sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -15587,13 +15587,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.6.0.tgz",
- "integrity": "sha512-92vK5tQaE81rK7fOmuWMrSQtK1IMonESR+RJR2Tlc7w4o0MeEdjgidY/uO2Gobh7z4Q1hhS94Cr7r021fMVEeA==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.7.0.tgz",
+ "integrity": "sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.6.0",
- "@typescript-eslint/visitor-keys": "5.6.0",
+ "@typescript-eslint/types": "5.7.0",
+ "@typescript-eslint/visitor-keys": "5.7.0",
"debug": "^4.3.2",
"globby": "^11.0.4",
"is-glob": "^4.0.3",
@@ -15670,12 +15670,12 @@
"dev": true
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.6.0.tgz",
- "integrity": "sha512-1p7hDp5cpRFUyE3+lvA74egs+RWSgumrBpzBCDzfTFv0aQ7lIeay80yU0hIxgAhwQ6PcasW35kaOCyDOv6O/Ng==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.7.0.tgz",
+ "integrity": "sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.6.0",
+ "@typescript-eslint/types": "5.7.0",
"eslint-visitor-keys": "^3.0.0"
},
"engines": {
@@ -67844,13 +67844,13 @@
"integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw=="
},
"@typescript-eslint/eslint-plugin": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.6.0.tgz",
- "integrity": "sha512-MIbeMy5qfLqtgs1hWd088k1hOuRsN9JrHUPwVVKCD99EOUqScd7SrwoZl4Gso05EAP9w1kvLWUVGJOVpRPkDPA==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.7.0.tgz",
+ "integrity": "sha512-8RTGBpNn5a9M628wBPrCbJ+v3YTEOE2qeZb7TDkGKTDXSj36KGRg92SpFFaR/0S3rSXQxM0Og/kV9EyadsYSBg==",
"dev": true,
"requires": {
- "@typescript-eslint/experimental-utils": "5.6.0",
- "@typescript-eslint/scope-manager": "5.6.0",
+ "@typescript-eslint/experimental-utils": "5.7.0",
+ "@typescript-eslint/scope-manager": "5.7.0",
"debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.1.8",
@@ -67901,28 +67901,28 @@
}
},
"@typescript-eslint/experimental-utils": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.6.0.tgz",
- "integrity": "sha512-VDoRf3Qj7+W3sS/ZBXZh3LBzp0snDLEgvp6qj0vOAIiAPM07bd5ojQ3CTzF/QFl5AKh7Bh1ycgj6lFBJHUt/DA==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.7.0.tgz",
+ "integrity": "sha512-u57eZ5FbEpzN5kSjmVrSesovWslH2ZyNPnaXQMXWgH57d5+EVHEt76W75vVuI9qKZ5BMDKNfRN+pxcPEjQjb2A==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.6.0",
- "@typescript-eslint/types": "5.6.0",
- "@typescript-eslint/typescript-estree": "5.6.0",
+ "@typescript-eslint/scope-manager": "5.7.0",
+ "@typescript-eslint/types": "5.7.0",
+ "@typescript-eslint/typescript-estree": "5.7.0",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
}
},
"@typescript-eslint/parser": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.6.0.tgz",
- "integrity": "sha512-YVK49NgdUPQ8SpCZaOpiq1kLkYRPMv9U5gcMrywzI8brtwZjr/tG3sZpuHyODt76W/A0SufNjYt9ZOgrC4tLIQ==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.7.0.tgz",
+ "integrity": "sha512-m/gWCCcS4jXw6vkrPQ1BjZ1vomP01PArgzvauBqzsoZ3urLbsRChexB8/YV8z9HwE3qlJM35FxfKZ1nfP/4x8g==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.6.0",
- "@typescript-eslint/types": "5.6.0",
- "@typescript-eslint/typescript-estree": "5.6.0",
+ "@typescript-eslint/scope-manager": "5.7.0",
+ "@typescript-eslint/types": "5.7.0",
+ "@typescript-eslint/typescript-estree": "5.7.0",
"debug": "^4.3.2"
},
"dependencies": {
@@ -67944,29 +67944,29 @@
}
},
"@typescript-eslint/scope-manager": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.6.0.tgz",
- "integrity": "sha512-1U1G77Hw2jsGWVsO2w6eVCbOg0HZ5WxL/cozVSTfqnL/eB9muhb8THsP0G3w+BB5xAHv9KptwdfYFAUfzcIh4A==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.7.0.tgz",
+ "integrity": "sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.6.0",
- "@typescript-eslint/visitor-keys": "5.6.0"
+ "@typescript-eslint/types": "5.7.0",
+ "@typescript-eslint/visitor-keys": "5.7.0"
}
},
"@typescript-eslint/types": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.6.0.tgz",
- "integrity": "sha512-OIZffked7mXv4mXzWU5MgAEbCf9ecNJBKi+Si6/I9PpTaj+cf2x58h2oHW5/P/yTnPkKaayfjhLvx+crnl5ubA==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.7.0.tgz",
+ "integrity": "sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.6.0.tgz",
- "integrity": "sha512-92vK5tQaE81rK7fOmuWMrSQtK1IMonESR+RJR2Tlc7w4o0MeEdjgidY/uO2Gobh7z4Q1hhS94Cr7r021fMVEeA==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.7.0.tgz",
+ "integrity": "sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.6.0",
- "@typescript-eslint/visitor-keys": "5.6.0",
+ "@typescript-eslint/types": "5.7.0",
+ "@typescript-eslint/visitor-keys": "5.7.0",
"debug": "^4.3.2",
"globby": "^11.0.4",
"is-glob": "^4.0.3",
@@ -68016,12 +68016,12 @@
}
},
"@typescript-eslint/visitor-keys": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.6.0.tgz",
- "integrity": "sha512-1p7hDp5cpRFUyE3+lvA74egs+RWSgumrBpzBCDzfTFv0aQ7lIeay80yU0hIxgAhwQ6PcasW35kaOCyDOv6O/Ng==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.7.0.tgz",
+ "integrity": "sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.6.0",
+ "@typescript-eslint/types": "5.7.0",
"eslint-visitor-keys": "^3.0.0"
},
"dependencies": {
diff --git a/package.json b/package.json
index a70ea311c1..bb89f51de5 100644
--- a/package.json
+++ b/package.json
@@ -139,8 +139,8 @@
"@types/sanitize-html": "2.6.0",
"@types/store": "2.0.2",
"@types/validator": "13.7.0",
- "@typescript-eslint/eslint-plugin": "5.6.0",
- "@typescript-eslint/parser": "5.6.0",
+ "@typescript-eslint/eslint-plugin": "5.7.0",
+ "@typescript-eslint/parser": "5.7.0",
"babel-eslint": "10.1.0",
"babel-plugin-transform-imports": "2.0.0",
"cross-env": "7.0.3",
From 34f19bd698724a75ef71b96fa9619e87060ce999 Mon Sep 17 00:00:00 2001
From: sidemt
Date: Tue, 14 Dec 2021 23:42:57 +0900
Subject: [PATCH 33/63] fix(i18n): include period in translatable string
(#44474)
* fix: include period in translatable string
* chore: update snapshot
* fix: combine 2 strings into 1
* fix: add placeholder
* fix: update snapshot
Co-authored-by: Mrugesh Mohapatra
---
client/i18n/locales/english/translations.json | 3 +--
.../Footer/__snapshots__/footer.test.tsx.snap | 5 ++---
client/src/components/Footer/index.tsx | 14 ++++++++------
3 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/client/i18n/locales/english/translations.json b/client/i18n/locales/english/translations.json
index 373bc45cf3..3a0bbc5ff3 100644
--- a/client/i18n/locales/english/translations.json
+++ b/client/i18n/locales/english/translations.json
@@ -216,8 +216,7 @@
"tax-exempt-status": "freeCodeCamp is a donor-supported tax-exempt 501(c)(3) nonprofit organization (United States Federal Tax Identification Number: 82-0779546)",
"mission-statement": "Our mission: to help people learn to code for free. We accomplish this by creating thousands of videos, articles, and interactive coding lessons - all freely available to the public. We also have thousands of freeCodeCamp study groups around the world.",
"donation-initiatives": "Donations to freeCodeCamp go toward our education initiatives, and help pay for servers, services, and staff.",
- "donate-text": "You can",
- "donate-link": "make a tax-deductible donation here",
+ "donate-text": "You can <1>make a tax-deductible donation here1>.",
"trending-guides": "Trending Guides",
"our-nonprofit": "Our Nonprofit",
"links": {
diff --git a/client/src/components/Footer/__snapshots__/footer.test.tsx.snap b/client/src/components/Footer/__snapshots__/footer.test.tsx.snap
index affa2e18d4..526ecff419 100644
--- a/client/src/components/Footer/__snapshots__/footer.test.tsx.snap
+++ b/client/src/components/Footer/__snapshots__/footer.test.tsx.snap
@@ -25,13 +25,12 @@ exports[` matches snapshot 1`] = `
- footer.donate-text
-
+ You can
- footer.donate-link
+ make a tax-deductible donation here
.
diff --git a/client/src/components/Footer/index.tsx b/client/src/components/Footer/index.tsx
index 7f7e8cc7e6..fed253ccbd 100644
--- a/client/src/components/Footer/index.tsx
+++ b/client/src/components/Footer/index.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import { useTranslation } from 'react-i18next';
+import { Trans, useTranslation } from 'react-i18next';
import Link from '../helpers/link';
import './footer.css';
@@ -15,11 +15,13 @@ function Footer(): JSX.Element {
{t('footer.mission-statement')}
{t('footer.donation-initiatives')}
- {t('footer.donate-text')}{' '}
-
- {t('footer.donate-link')}
-
- .
+
+ You can
+
+ make a tax-deductible donation here
+
+ .
+
From d4f490419fbe79ec8560b415edb657a8af1a29d7 Mon Sep 17 00:00:00 2001
From: camperbot
Date: Tue, 14 Dec 2021 20:13:29 +0530
Subject: [PATCH 34/63] chore(i18n,learn): update translations (#44497)
---
client/i18n/locales/chinese-traditional/translations.json | 1 -
client/i18n/locales/chinese/translations.json | 1 -
client/i18n/locales/espanol/translations.json | 1 -
client/i18n/locales/italian/translations.json | 1 -
client/i18n/locales/portuguese/translations.json | 1 -
client/i18n/locales/ukrainian/translations.json | 1 -
6 files changed, 6 deletions(-)
diff --git a/client/i18n/locales/chinese-traditional/translations.json b/client/i18n/locales/chinese-traditional/translations.json
index 2e550db5b7..1d22ecfe0f 100644
--- a/client/i18n/locales/chinese-traditional/translations.json
+++ b/client/i18n/locales/chinese-traditional/translations.json
@@ -32,7 +32,6 @@
"profile": "個人資料",
"news": "專欄",
"donate": "捐款",
- "support-our-nonprofit": "Support our non-profit",
"update-settings": "更新我的賬號設置",
"sign-me-out": "退出登錄 freeCodeCamp",
"flag-user": "標記該用戶的賬號爲濫用",
diff --git a/client/i18n/locales/chinese/translations.json b/client/i18n/locales/chinese/translations.json
index 1e991f3ea4..5a69a0b669 100644
--- a/client/i18n/locales/chinese/translations.json
+++ b/client/i18n/locales/chinese/translations.json
@@ -32,7 +32,6 @@
"profile": "个人资料",
"news": "专栏",
"donate": "捐款",
- "support-our-nonprofit": "Support our non-profit",
"update-settings": "更新我的账号设置",
"sign-me-out": "退出登录 freeCodeCamp",
"flag-user": "标记该用户的账号为滥用",
diff --git a/client/i18n/locales/espanol/translations.json b/client/i18n/locales/espanol/translations.json
index c3ae663afc..420476963b 100644
--- a/client/i18n/locales/espanol/translations.json
+++ b/client/i18n/locales/espanol/translations.json
@@ -32,7 +32,6 @@
"profile": "Perfil",
"news": "Noticias",
"donate": "Donar",
- "support-our-nonprofit": "Apoya a nuestra organización sin fines de lucro",
"update-settings": "Actualizar los ajustes de mi cuenta",
"sign-me-out": "Cerrar sesión en freeCodeCamp",
"flag-user": "Marcar la cuenta de este usuario por abuso",
diff --git a/client/i18n/locales/italian/translations.json b/client/i18n/locales/italian/translations.json
index 810a99a62a..ba73174cdc 100644
--- a/client/i18n/locales/italian/translations.json
+++ b/client/i18n/locales/italian/translations.json
@@ -32,7 +32,6 @@
"profile": "Profilo",
"news": "Notizie",
"donate": "Dona",
- "support-our-nonprofit": "Support our non-profit",
"update-settings": "Aggiorna le impostazioni del mio account",
"sign-me-out": "Esci da freeCodeCamp",
"flag-user": "Segnala l'account di questo utente per abusi",
diff --git a/client/i18n/locales/portuguese/translations.json b/client/i18n/locales/portuguese/translations.json
index 6706fa5825..aa45f39e07 100644
--- a/client/i18n/locales/portuguese/translations.json
+++ b/client/i18n/locales/portuguese/translations.json
@@ -32,7 +32,6 @@
"profile": "Perfil",
"news": "Notícias",
"donate": "Doar",
- "support-our-nonprofit": "Dê seu apoio à nossa organização sem fins lucrativos",
"update-settings": "Atualizar as configurações da minha conta",
"sign-me-out": "Sair do freeCodeCamp",
"flag-user": "Denunciar a conta deste usuário por abuso",
diff --git a/client/i18n/locales/ukrainian/translations.json b/client/i18n/locales/ukrainian/translations.json
index 611391edd8..11a65778fe 100644
--- a/client/i18n/locales/ukrainian/translations.json
+++ b/client/i18n/locales/ukrainian/translations.json
@@ -32,7 +32,6 @@
"profile": "Профіль",
"news": "Новини",
"donate": "Підтримати",
- "support-our-nonprofit": "Support our non-profit",
"update-settings": "Змінити налаштування облікового запису",
"sign-me-out": "Вийти з freeCodeCamp",
"flag-user": "Поскаржитись на обліковий запис цього користувача за порушення",
From 1642c631de06af91b541bce786169e528d0ca811 Mon Sep 17 00:00:00 2001
From: Oliver Eyton-Williams
Date: Tue, 14 Dec 2021 17:16:23 +0100
Subject: [PATCH 35/63] refactor: drop superorder from metas (#44422)
* refactor: create superOrder from superblock
* chore: drop superOrders from meta
* fix: return null for 'certifications'
* fix: only set superOrder if it is needed
* fix(tests): remove filter from order tests
* test: use getSuperOrder, since superOrder has gone
* test: ignore certificates
* fix: getSuperOrder throw for 'certifications'
* test: remove certificate special case
It wasn't necessary, anyway (it had never been working because I put
certificate not certification)
Co-authored-by: Nicholas Carrigan
---
.../_meta/advanced-node-and-express/meta.json | 1 -
.../challenges/_meta/algorithms/meta.json | 1 -
.../_meta/applied-accessibility/meta.json | 1 -
.../_meta/applied-visual-design/meta.json | 1 -
.../meta.json | 1 -
.../_meta/basic-algorithm-scripting/meta.json | 1 -
.../challenges/_meta/basic-css/meta.json | 1 -
.../_meta/basic-data-structures/meta.json | 1 -
.../_meta/basic-html-and-html5/meta.json | 1 -
.../_meta/basic-javascript-rpg-game/meta.json | 1 -
.../_meta/basic-javascript/meta.json | 1 -
.../_meta/basic-node-and-express/meta.json | 1 -
.../challenges/_meta/bootstrap/meta.json | 1 -
.../challenges/_meta/css-flexbox/meta.json | 1 -
.../challenges/_meta/css-grid/meta.json | 1 -
.../challenges/_meta/d3-dashboard/meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../_meta/data-structures/meta.json | 1 -
.../data-visualization-projects/meta.json | 1 -
.../data-visualization-with-d3/meta.json | 1 -
.../challenges/_meta/debugging/meta.json | 1 -
curriculum/challenges/_meta/es6/meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../_meta/functional-programming/meta.json | 1 -
.../_meta/how-neural-networks-work/meta.json | 1 -
.../information-security-projects/meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
curriculum/challenges/_meta/jquery/meta.json | 1 -
.../_meta/json-apis-and-ajax/meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 3 +-
.../meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../learn-relational-databases/meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../meta.json | 1 -
.../managing-packages-with-npm/meta.json | 1 -
.../_meta/mongodb-and-mongoose/meta.json | 1 -
curriculum/challenges/_meta/numpy/meta.json | 1 -
.../object-oriented-programming/meta.json | 1 -
.../challenges/_meta/project-euler/meta.json | 1 -
.../_meta/python-for-everybody/meta.json | 1 -
.../python-for-penetration-testing/meta.json | 1 -
.../meta.json | 1 -
.../quality-assurance-projects/meta.json | 1 -
.../_meta/react-and-redux/meta.json | 1 -
curriculum/challenges/_meta/react/meta.json | 1 -
curriculum/challenges/_meta/redux/meta.json | 1 -
.../_meta/regular-expressions/meta.json | 1 -
.../meta.json | 1 -
.../responsive-web-design-projects/meta.json | 1 -
.../challenges/_meta/rosetta-code/meta.json | 1 -
curriculum/challenges/_meta/sass/meta.json | 1 -
.../meta.json | 1 -
.../_meta/take-home-projects/meta.json | 1 -
.../challenges/_meta/tensorflow/meta.json | 1 -
curriculum/getChallenges.js | 5 ++-
curriculum/test/test-challenges.js | 16 +++----
curriculum/utils.js | 29 +++++++++++++
curriculum/utils.test.js | 43 +++++++++++++++++++
74 files changed, 81 insertions(+), 84 deletions(-)
create mode 100644 curriculum/utils.test.js
diff --git a/curriculum/challenges/_meta/advanced-node-and-express/meta.json b/curriculum/challenges/_meta/advanced-node-and-express/meta.json
index f4b486be17..70b21a8d6a 100644
--- a/curriculum/challenges/_meta/advanced-node-and-express/meta.json
+++ b/curriculum/challenges/_meta/advanced-node-and-express/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "quality-assurance",
- "superOrder": 6,
"challengeOrder": [
[
"5895f700f9fc0f352b528e63",
diff --git a/curriculum/challenges/_meta/algorithms/meta.json b/curriculum/challenges/_meta/algorithms/meta.json
index e1472c08ff..e9429d9c42 100644
--- a/curriculum/challenges/_meta/algorithms/meta.json
+++ b/curriculum/challenges/_meta/algorithms/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "coding-interview-prep",
- "superOrder": 11,
"challengeOrder": [
[
"a3f503de51cf954ede28891d",
diff --git a/curriculum/challenges/_meta/applied-accessibility/meta.json b/curriculum/challenges/_meta/applied-accessibility/meta.json
index fe736d9e60..b0242507e7 100644
--- a/curriculum/challenges/_meta/applied-accessibility/meta.json
+++ b/curriculum/challenges/_meta/applied-accessibility/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"challengeOrder": [
[
"587d774c367417b2b2512a9c",
diff --git a/curriculum/challenges/_meta/applied-visual-design/meta.json b/curriculum/challenges/_meta/applied-visual-design/meta.json
index 10628457de..8377a93085 100644
--- a/curriculum/challenges/_meta/applied-visual-design/meta.json
+++ b/curriculum/challenges/_meta/applied-visual-design/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"challengeOrder": [
[
"587d7791367417b2b2512ab3",
diff --git a/curriculum/challenges/_meta/back-end-development-and-apis-projects/meta.json b/curriculum/challenges/_meta/back-end-development-and-apis-projects/meta.json
index b98c47331b..2bd4ace104 100644
--- a/curriculum/challenges/_meta/back-end-development-and-apis-projects/meta.json
+++ b/curriculum/challenges/_meta/back-end-development-and-apis-projects/meta.json
@@ -5,7 +5,6 @@
"order": 3,
"time": "150 hours",
"superBlock": "back-end-development-and-apis",
- "superOrder": 5,
"challengeOrder": [
[
"bd7158d8c443edefaeb5bdef",
diff --git a/curriculum/challenges/_meta/basic-algorithm-scripting/meta.json b/curriculum/challenges/_meta/basic-algorithm-scripting/meta.json
index 13ae51c2c5..9e3d3e3e4b 100644
--- a/curriculum/challenges/_meta/basic-algorithm-scripting/meta.json
+++ b/curriculum/challenges/_meta/basic-algorithm-scripting/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"challengeOrder": [
[
"56533eb9ac21ba0edf2244b3",
diff --git a/curriculum/challenges/_meta/basic-css/meta.json b/curriculum/challenges/_meta/basic-css/meta.json
index 7588a3366c..ed2d3447ef 100644
--- a/curriculum/challenges/_meta/basic-css/meta.json
+++ b/curriculum/challenges/_meta/basic-css/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"challengeOrder": [
[
"bad87fee1348bd9aedf08803",
diff --git a/curriculum/challenges/_meta/basic-data-structures/meta.json b/curriculum/challenges/_meta/basic-data-structures/meta.json
index cf6faa9741..4a53c0ce37 100644
--- a/curriculum/challenges/_meta/basic-data-structures/meta.json
+++ b/curriculum/challenges/_meta/basic-data-structures/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"challengeOrder": [
[
"587d7b7e367417b2b2512b20",
diff --git a/curriculum/challenges/_meta/basic-html-and-html5/meta.json b/curriculum/challenges/_meta/basic-html-and-html5/meta.json
index 75958d960b..98791626c6 100644
--- a/curriculum/challenges/_meta/basic-html-and-html5/meta.json
+++ b/curriculum/challenges/_meta/basic-html-and-html5/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"challengeOrder": [
[
"bd7123c8c441eddfaeb5bdef",
diff --git a/curriculum/challenges/_meta/basic-javascript-rpg-game/meta.json b/curriculum/challenges/_meta/basic-javascript-rpg-game/meta.json
index 2290767470..2ac4f74265 100644
--- a/curriculum/challenges/_meta/basic-javascript-rpg-game/meta.json
+++ b/curriculum/challenges/_meta/basic-javascript-rpg-game/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/basic-javascript/meta.json b/curriculum/challenges/_meta/basic-javascript/meta.json
index 3ddf7324f9..6c58d20dd3 100644
--- a/curriculum/challenges/_meta/basic-javascript/meta.json
+++ b/curriculum/challenges/_meta/basic-javascript/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"challengeOrder": [
[
"bd7123c9c441eddfaeb4bdef",
diff --git a/curriculum/challenges/_meta/basic-node-and-express/meta.json b/curriculum/challenges/_meta/basic-node-and-express/meta.json
index 9f83d0bf11..8fccbfe5a8 100644
--- a/curriculum/challenges/_meta/basic-node-and-express/meta.json
+++ b/curriculum/challenges/_meta/basic-node-and-express/meta.json
@@ -5,7 +5,6 @@
"order": 1,
"time": "5 hours",
"superBlock": "back-end-development-and-apis",
- "superOrder": 5,
"challengeOrder": [
[
"587d7fb0367417b2b2512bed",
diff --git a/curriculum/challenges/_meta/bootstrap/meta.json b/curriculum/challenges/_meta/bootstrap/meta.json
index 38a9de6012..a445f13f32 100644
--- a/curriculum/challenges/_meta/bootstrap/meta.json
+++ b/curriculum/challenges/_meta/bootstrap/meta.json
@@ -11,7 +11,6 @@
}
],
"superBlock": "front-end-development-libraries",
- "superOrder": 2,
"challengeOrder": [
[
"bad87fee1348bd9acde08712",
diff --git a/curriculum/challenges/_meta/css-flexbox/meta.json b/curriculum/challenges/_meta/css-flexbox/meta.json
index 443b731e1d..801cc94bda 100644
--- a/curriculum/challenges/_meta/css-flexbox/meta.json
+++ b/curriculum/challenges/_meta/css-flexbox/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"challengeOrder": [
[
"587d78ab367417b2b2512af0",
diff --git a/curriculum/challenges/_meta/css-grid/meta.json b/curriculum/challenges/_meta/css-grid/meta.json
index b3b6a05bd4..2b2c9851a2 100644
--- a/curriculum/challenges/_meta/css-grid/meta.json
+++ b/curriculum/challenges/_meta/css-grid/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"challengeOrder": [
[
"5a858944d96184f06fd60d61",
diff --git a/curriculum/challenges/_meta/d3-dashboard/meta.json b/curriculum/challenges/_meta/d3-dashboard/meta.json
index fcc015e22d..c6752b0923 100644
--- a/curriculum/challenges/_meta/d3-dashboard/meta.json
+++ b/curriculum/challenges/_meta/d3-dashboard/meta.json
@@ -12,7 +12,6 @@
}
],
"superBlock": "data-visualization",
- "superOrder": 3,
"challengeOrder": [
[
"5d8a4cfbe6b6180ed9a1c9de",
diff --git a/curriculum/challenges/_meta/data-analysis-with-python-course/meta.json b/curriculum/challenges/_meta/data-analysis-with-python-course/meta.json
index 9e12e855d5..3f3c16fb84 100644
--- a/curriculum/challenges/_meta/data-analysis-with-python-course/meta.json
+++ b/curriculum/challenges/_meta/data-analysis-with-python-course/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "data-analysis-with-python",
- "superOrder": 8,
"challengeOrder": [
[
"5e9a093a74c4063ca6f7c14c",
diff --git a/curriculum/challenges/_meta/data-analysis-with-python-projects/meta.json b/curriculum/challenges/_meta/data-analysis-with-python-projects/meta.json
index 4b278b79ba..f9b65cb74d 100644
--- a/curriculum/challenges/_meta/data-analysis-with-python-projects/meta.json
+++ b/curriculum/challenges/_meta/data-analysis-with-python-projects/meta.json
@@ -5,7 +5,6 @@
"order": 2,
"time": "150 hours",
"superBlock": "data-analysis-with-python",
- "superOrder": 8,
"challengeOrder": [
[
"5e46f7e5ac417301a38fb928",
diff --git a/curriculum/challenges/_meta/data-structures/meta.json b/curriculum/challenges/_meta/data-structures/meta.json
index 70435b85e8..f3416838d6 100644
--- a/curriculum/challenges/_meta/data-structures/meta.json
+++ b/curriculum/challenges/_meta/data-structures/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "coding-interview-prep",
- "superOrder": 11,
"challengeOrder": [
[
"587d8253367417b2b2512c6a",
diff --git a/curriculum/challenges/_meta/data-visualization-projects/meta.json b/curriculum/challenges/_meta/data-visualization-projects/meta.json
index 2a0d30ada5..4e4646beda 100644
--- a/curriculum/challenges/_meta/data-visualization-projects/meta.json
+++ b/curriculum/challenges/_meta/data-visualization-projects/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "data-visualization",
- "superOrder": 3,
"challengeOrder": [
[
"bd7168d8c242eddfaeb5bd13",
diff --git a/curriculum/challenges/_meta/data-visualization-with-d3/meta.json b/curriculum/challenges/_meta/data-visualization-with-d3/meta.json
index 98aea4b2d6..71b68b7816 100644
--- a/curriculum/challenges/_meta/data-visualization-with-d3/meta.json
+++ b/curriculum/challenges/_meta/data-visualization-with-d3/meta.json
@@ -11,7 +11,6 @@
}
],
"superBlock": "data-visualization",
- "superOrder": 3,
"challengeOrder": [
["587d7fa6367417b2b2512bc2", "Add Document Elements with D3"],
["587d7fa6367417b2b2512bc3", "Select a Group of Elements with D3"],
diff --git a/curriculum/challenges/_meta/debugging/meta.json b/curriculum/challenges/_meta/debugging/meta.json
index dda04007d5..ac4ebdd875 100644
--- a/curriculum/challenges/_meta/debugging/meta.json
+++ b/curriculum/challenges/_meta/debugging/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"challengeOrder": [
[
"587d7b83367417b2b2512b33",
diff --git a/curriculum/challenges/_meta/es6/meta.json b/curriculum/challenges/_meta/es6/meta.json
index cb64aa55c8..fa11e53c13 100644
--- a/curriculum/challenges/_meta/es6/meta.json
+++ b/curriculum/challenges/_meta/es6/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"challengeOrder": [
[
"587d7b87367417b2b2512b40",
diff --git a/curriculum/challenges/_meta/front-end-development-libraries-projects/meta.json b/curriculum/challenges/_meta/front-end-development-libraries-projects/meta.json
index 1a619ae5ce..da95c741f4 100644
--- a/curriculum/challenges/_meta/front-end-development-libraries-projects/meta.json
+++ b/curriculum/challenges/_meta/front-end-development-libraries-projects/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "front-end-development-libraries",
- "superOrder": 2,
"challengeOrder": [
[
"bd7158d8c442eddfaeb5bd13",
diff --git a/curriculum/challenges/_meta/functional-programming-spreadsheet/meta.json b/curriculum/challenges/_meta/functional-programming-spreadsheet/meta.json
index 699412c7d6..b8bbc2ee29 100644
--- a/curriculum/challenges/_meta/functional-programming-spreadsheet/meta.json
+++ b/curriculum/challenges/_meta/functional-programming-spreadsheet/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/functional-programming/meta.json b/curriculum/challenges/_meta/functional-programming/meta.json
index 8f6e16dce3..f66cec96cb 100644
--- a/curriculum/challenges/_meta/functional-programming/meta.json
+++ b/curriculum/challenges/_meta/functional-programming/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"challengeOrder": [
[
"587d7b8d367417b2b2512b5b",
diff --git a/curriculum/challenges/_meta/how-neural-networks-work/meta.json b/curriculum/challenges/_meta/how-neural-networks-work/meta.json
index 312606b0f0..ef4b26308c 100644
--- a/curriculum/challenges/_meta/how-neural-networks-work/meta.json
+++ b/curriculum/challenges/_meta/how-neural-networks-work/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "machine-learning-with-python",
- "superOrder": 10,
"challengeOrder": [
[
"5e9a0e9ef99a403d019610ca",
diff --git a/curriculum/challenges/_meta/information-security-projects/meta.json b/curriculum/challenges/_meta/information-security-projects/meta.json
index 8cbbf5579d..ffd3dd18a2 100644
--- a/curriculum/challenges/_meta/information-security-projects/meta.json
+++ b/curriculum/challenges/_meta/information-security-projects/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "information-security",
- "superOrder": 9,
"challengeOrder": [
[
"587d824a367417b2b2512c44",
diff --git a/curriculum/challenges/_meta/information-security-with-helmetjs/meta.json b/curriculum/challenges/_meta/information-security-with-helmetjs/meta.json
index fe06f1364c..11aef89254 100644
--- a/curriculum/challenges/_meta/information-security-with-helmetjs/meta.json
+++ b/curriculum/challenges/_meta/information-security-with-helmetjs/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "information-security",
- "superOrder": 9,
"challengeOrder": [
[
"587d8247367417b2b2512c36",
diff --git a/curriculum/challenges/_meta/intermediate-algorithm-scripting/meta.json b/curriculum/challenges/_meta/intermediate-algorithm-scripting/meta.json
index 1a768f9a60..ec326942ba 100644
--- a/curriculum/challenges/_meta/intermediate-algorithm-scripting/meta.json
+++ b/curriculum/challenges/_meta/intermediate-algorithm-scripting/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"challengeOrder": [
[
"a3566b1109230028080c9345",
diff --git a/curriculum/challenges/_meta/intermediate-javascript-calorie-counter/meta.json b/curriculum/challenges/_meta/intermediate-javascript-calorie-counter/meta.json
index e42df9ec3b..107e7d616d 100644
--- a/curriculum/challenges/_meta/intermediate-javascript-calorie-counter/meta.json
+++ b/curriculum/challenges/_meta/intermediate-javascript-calorie-counter/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"challengeOrder": [
[
"5ddb965c65d27e1512d44d9a",
diff --git a/curriculum/challenges/_meta/javascript-algorithms-and-data-structures-projects/meta.json b/curriculum/challenges/_meta/javascript-algorithms-and-data-structures-projects/meta.json
index 99d79245c0..5589df7551 100644
--- a/curriculum/challenges/_meta/javascript-algorithms-and-data-structures-projects/meta.json
+++ b/curriculum/challenges/_meta/javascript-algorithms-and-data-structures-projects/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"challengeOrder": [
[
"aaa48de84e1ecc7c742e1124",
diff --git a/curriculum/challenges/_meta/jquery/meta.json b/curriculum/challenges/_meta/jquery/meta.json
index 31fb7943cc..82675a180a 100644
--- a/curriculum/challenges/_meta/jquery/meta.json
+++ b/curriculum/challenges/_meta/jquery/meta.json
@@ -11,7 +11,6 @@
}
],
"superBlock": "front-end-development-libraries",
- "superOrder": 2,
"challengeOrder": [
[
"bad87fee1348bd9acdd08826",
diff --git a/curriculum/challenges/_meta/json-apis-and-ajax/meta.json b/curriculum/challenges/_meta/json-apis-and-ajax/meta.json
index 5d13766cb3..f7d8b24f9a 100644
--- a/curriculum/challenges/_meta/json-apis-and-ajax/meta.json
+++ b/curriculum/challenges/_meta/json-apis-and-ajax/meta.json
@@ -11,7 +11,6 @@
}
],
"superBlock": "data-visualization",
- "superOrder": 3,
"challengeOrder": [
[
"587d7fad367417b2b2512be1",
diff --git a/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json b/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json
index f3206de957..b98701ffe6 100644
--- a/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json
+++ b/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json b/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json
index 89f4f58cc5..7a139f3401 100644
--- a/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json
+++ b/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json b/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json
index b453f5ff9b..131d23f3f9 100644
--- a/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json
+++ b/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json b/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json
index fc85269266..42a800df5b 100644
--- a/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json
+++ b/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json b/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json
index 2ad433081b..4ae209c001 100644
--- a/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json
+++ b/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/learn-css-transforms-by-building-a-penguin/meta.json b/curriculum/challenges/_meta/learn-css-transforms-by-building-a-penguin/meta.json
index 9243b878d7..a396ab53e1 100644
--- a/curriculum/challenges/_meta/learn-css-transforms-by-building-a-penguin/meta.json
+++ b/curriculum/challenges/_meta/learn-css-transforms-by-building-a-penguin/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 1,
"isBeta": true,
"challengeOrder": [
[
@@ -428,4 +427,4 @@
"Step 104"
]
]
-}
\ No newline at end of file
+}
diff --git a/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json b/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json
index 97f9c7ca0d..409c39852e 100644
--- a/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json
+++ b/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"challengeOrder": [
[
"5d822fd413a79914d39e98c9",
diff --git a/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json b/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json
index 8c09f3cf87..7128761f4f 100644
--- a/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json
+++ b/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json b/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json
index b180c971a0..56bdb3b3a8 100644
--- a/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json
+++ b/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json b/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json
index 7f238ddc3d..89866e64fe 100644
--- a/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json
+++ b/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/meta.json b/curriculum/challenges/_meta/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/meta.json
index f023fedd9e..81bfd8f97f 100644
--- a/curriculum/challenges/_meta/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/meta.json
+++ b/curriculum/challenges/_meta/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 1,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/learn-relational-databases/meta.json b/curriculum/challenges/_meta/learn-relational-databases/meta.json
index bd1221db00..8860e4d943 100644
--- a/curriculum/challenges/_meta/learn-relational-databases/meta.json
+++ b/curriculum/challenges/_meta/learn-relational-databases/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "relational-databases",
- "superOrder": 4,
"challengeOrder": [
[
"5ea8adfab628f68d805bfc5e",
diff --git a/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json b/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json
index 457782a676..ea91978a79 100644
--- a/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json
+++ b/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json b/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json
index ebd21cc8eb..ee18cc9481 100644
--- a/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json
+++ b/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json b/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json
index 60970e5089..323a4f00bc 100644
--- a/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json
+++ b/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json
@@ -8,7 +8,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"isBeta": true,
"challengeOrder": [
[
diff --git a/curriculum/challenges/_meta/machine-learning-with-python-projects/meta.json b/curriculum/challenges/_meta/machine-learning-with-python-projects/meta.json
index 3c37b48e39..f11889802e 100644
--- a/curriculum/challenges/_meta/machine-learning-with-python-projects/meta.json
+++ b/curriculum/challenges/_meta/machine-learning-with-python-projects/meta.json
@@ -5,7 +5,6 @@
"order": 2,
"time": "150 hours",
"superBlock": "machine-learning-with-python",
- "superOrder": 10,
"challengeOrder": [
[
"5e46f8d6ac417301a38fb92d",
diff --git a/curriculum/challenges/_meta/managing-packages-with-npm/meta.json b/curriculum/challenges/_meta/managing-packages-with-npm/meta.json
index be6dfc34aa..cc3bd08d1b 100644
--- a/curriculum/challenges/_meta/managing-packages-with-npm/meta.json
+++ b/curriculum/challenges/_meta/managing-packages-with-npm/meta.json
@@ -5,7 +5,6 @@
"order": 0,
"time": "5 hours",
"superBlock": "back-end-development-and-apis",
- "superOrder": 5,
"challengeOrder": [
[
"587d7fb3367417b2b2512bfb",
diff --git a/curriculum/challenges/_meta/mongodb-and-mongoose/meta.json b/curriculum/challenges/_meta/mongodb-and-mongoose/meta.json
index d0595af72e..ea86f4a2ef 100644
--- a/curriculum/challenges/_meta/mongodb-and-mongoose/meta.json
+++ b/curriculum/challenges/_meta/mongodb-and-mongoose/meta.json
@@ -5,7 +5,6 @@
"order": 2,
"time": "5 hours",
"superBlock": "back-end-development-and-apis",
- "superOrder": 5,
"challengeOrder": [
[
"587d7fb6367417b2b2512c06",
diff --git a/curriculum/challenges/_meta/numpy/meta.json b/curriculum/challenges/_meta/numpy/meta.json
index f923414dd3..20b855a87b 100644
--- a/curriculum/challenges/_meta/numpy/meta.json
+++ b/curriculum/challenges/_meta/numpy/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "data-analysis-with-python",
- "superOrder": 8,
"challengeOrder": [
[
"5e9a0a8e09c5df3cc3600ed2",
diff --git a/curriculum/challenges/_meta/object-oriented-programming/meta.json b/curriculum/challenges/_meta/object-oriented-programming/meta.json
index bd24c6809f..76950368f5 100644
--- a/curriculum/challenges/_meta/object-oriented-programming/meta.json
+++ b/curriculum/challenges/_meta/object-oriented-programming/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"challengeOrder": [
[
"587d7dac367417b2b2512b73",
diff --git a/curriculum/challenges/_meta/project-euler/meta.json b/curriculum/challenges/_meta/project-euler/meta.json
index 0330e83bcb..4e57d51912 100644
--- a/curriculum/challenges/_meta/project-euler/meta.json
+++ b/curriculum/challenges/_meta/project-euler/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "coding-interview-prep",
- "superOrder": 11,
"challengeOrder": [
[
"5900f36e1000cf542c50fe80",
diff --git a/curriculum/challenges/_meta/python-for-everybody/meta.json b/curriculum/challenges/_meta/python-for-everybody/meta.json
index 33fb79eb45..cea2fcb1c1 100644
--- a/curriculum/challenges/_meta/python-for-everybody/meta.json
+++ b/curriculum/challenges/_meta/python-for-everybody/meta.json
@@ -5,7 +5,6 @@
"order": 0,
"time": "15 hours",
"superBlock": "scientific-computing-with-python",
- "superOrder": 7,
"challengeOrder": [
[
"5e6a54a558d3af90110a60a0",
diff --git a/curriculum/challenges/_meta/python-for-penetration-testing/meta.json b/curriculum/challenges/_meta/python-for-penetration-testing/meta.json
index 07274e80a0..953f55e1e8 100644
--- a/curriculum/challenges/_meta/python-for-penetration-testing/meta.json
+++ b/curriculum/challenges/_meta/python-for-penetration-testing/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "information-security",
- "superOrder": 9,
"challengeOrder": [
[
"5ea9997bbec2e9bc47e94dae",
diff --git a/curriculum/challenges/_meta/quality-assurance-and-testing-with-chai/meta.json b/curriculum/challenges/_meta/quality-assurance-and-testing-with-chai/meta.json
index ef94496080..829b268edb 100644
--- a/curriculum/challenges/_meta/quality-assurance-and-testing-with-chai/meta.json
+++ b/curriculum/challenges/_meta/quality-assurance-and-testing-with-chai/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "quality-assurance",
- "superOrder": 6,
"challengeOrder": [
[
"587d824a367417b2b2512c46",
diff --git a/curriculum/challenges/_meta/quality-assurance-projects/meta.json b/curriculum/challenges/_meta/quality-assurance-projects/meta.json
index e95e1b4259..b8d579ba2b 100644
--- a/curriculum/challenges/_meta/quality-assurance-projects/meta.json
+++ b/curriculum/challenges/_meta/quality-assurance-projects/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "quality-assurance",
- "superOrder": 6,
"challengeOrder": [
[
"587d8249367417b2b2512c41",
diff --git a/curriculum/challenges/_meta/react-and-redux/meta.json b/curriculum/challenges/_meta/react-and-redux/meta.json
index f9e3d4b60e..fec9173d44 100644
--- a/curriculum/challenges/_meta/react-and-redux/meta.json
+++ b/curriculum/challenges/_meta/react-and-redux/meta.json
@@ -20,7 +20,6 @@
}
],
"superBlock": "front-end-development-libraries",
- "superOrder": 2,
"challengeOrder": [
[
"5a24c314108439a4d4036141",
diff --git a/curriculum/challenges/_meta/react/meta.json b/curriculum/challenges/_meta/react/meta.json
index f37c2efffb..b56b4ba737 100644
--- a/curriculum/challenges/_meta/react/meta.json
+++ b/curriculum/challenges/_meta/react/meta.json
@@ -14,7 +14,6 @@
}
],
"superBlock": "front-end-development-libraries",
- "superOrder": 2,
"challengeOrder": [
[
"587d7dbc367417b2b2512bb1",
diff --git a/curriculum/challenges/_meta/redux/meta.json b/curriculum/challenges/_meta/redux/meta.json
index a2c60da1e6..fa4ff76aa0 100644
--- a/curriculum/challenges/_meta/redux/meta.json
+++ b/curriculum/challenges/_meta/redux/meta.json
@@ -14,7 +14,6 @@
}
],
"superBlock": "front-end-development-libraries",
- "superOrder": 2,
"challengeOrder": [
[
"5a24c314108439a4d403614b",
diff --git a/curriculum/challenges/_meta/regular-expressions/meta.json b/curriculum/challenges/_meta/regular-expressions/meta.json
index 5bac9d5c92..d7c808b5de 100644
--- a/curriculum/challenges/_meta/regular-expressions/meta.json
+++ b/curriculum/challenges/_meta/regular-expressions/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "javascript-algorithms-and-data-structures",
- "superOrder": 1,
"challengeOrder": [
[
"587d7db3367417b2b2512b8e",
diff --git a/curriculum/challenges/_meta/responsive-web-design-principles/meta.json b/curriculum/challenges/_meta/responsive-web-design-principles/meta.json
index 8520fe24a8..dc6d1f4a95 100644
--- a/curriculum/challenges/_meta/responsive-web-design-principles/meta.json
+++ b/curriculum/challenges/_meta/responsive-web-design-principles/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"challengeOrder": [
[
"587d78b0367417b2b2512b08",
diff --git a/curriculum/challenges/_meta/responsive-web-design-projects/meta.json b/curriculum/challenges/_meta/responsive-web-design-projects/meta.json
index fc19124d21..b4519a19f9 100644
--- a/curriculum/challenges/_meta/responsive-web-design-projects/meta.json
+++ b/curriculum/challenges/_meta/responsive-web-design-projects/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "superOrder": 0,
"challengeOrder": [
[
"bd7158d8c442eddfaeb5bd18",
diff --git a/curriculum/challenges/_meta/rosetta-code/meta.json b/curriculum/challenges/_meta/rosetta-code/meta.json
index f18b86e75c..bbc73b9bd2 100644
--- a/curriculum/challenges/_meta/rosetta-code/meta.json
+++ b/curriculum/challenges/_meta/rosetta-code/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "coding-interview-prep",
- "superOrder": 11,
"challengeOrder": [
[
"594810f028c0303b75339acb",
diff --git a/curriculum/challenges/_meta/sass/meta.json b/curriculum/challenges/_meta/sass/meta.json
index ce9586d41f..430380d816 100644
--- a/curriculum/challenges/_meta/sass/meta.json
+++ b/curriculum/challenges/_meta/sass/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "front-end-development-libraries",
- "superOrder": 2,
"challengeOrder": [
[
"587d7dbd367417b2b2512bb4",
diff --git a/curriculum/challenges/_meta/scientific-computing-with-python-projects/meta.json b/curriculum/challenges/_meta/scientific-computing-with-python-projects/meta.json
index d93cd39020..25dc151516 100644
--- a/curriculum/challenges/_meta/scientific-computing-with-python-projects/meta.json
+++ b/curriculum/challenges/_meta/scientific-computing-with-python-projects/meta.json
@@ -5,7 +5,6 @@
"order": 1,
"time": "150 hours",
"superBlock": "scientific-computing-with-python",
- "superOrder": 7,
"challengeOrder": [
[
"5e44412c903586ffb414c94c",
diff --git a/curriculum/challenges/_meta/take-home-projects/meta.json b/curriculum/challenges/_meta/take-home-projects/meta.json
index 19606885b1..e6d74a8170 100644
--- a/curriculum/challenges/_meta/take-home-projects/meta.json
+++ b/curriculum/challenges/_meta/take-home-projects/meta.json
@@ -7,7 +7,6 @@
"template": "",
"required": [],
"superBlock": "coding-interview-prep",
- "superOrder": 11,
"challengeOrder": [
[
"bd7158d8c442eddfaeb5bd10",
diff --git a/curriculum/challenges/_meta/tensorflow/meta.json b/curriculum/challenges/_meta/tensorflow/meta.json
index ba00be4fc9..d28ae876ba 100644
--- a/curriculum/challenges/_meta/tensorflow/meta.json
+++ b/curriculum/challenges/_meta/tensorflow/meta.json
@@ -5,7 +5,6 @@
"order": 0,
"time": "15 hours",
"superBlock": "machine-learning-with-python",
- "superOrder": 10,
"challengeOrder": [
[
"5e8f2f13c4cdbe86b5c72d87",
diff --git a/curriculum/getChallenges.js b/curriculum/getChallenges.js
index 0ce7a378ba..7d254af58f 100644
--- a/curriculum/getChallenges.js
+++ b/curriculum/getChallenges.js
@@ -4,6 +4,7 @@ const util = require('util');
const yaml = require('js-yaml');
const { findIndex } = require('lodash');
const readDirP = require('readdirp');
+const { getSuperOrder } = require('./utils');
const { helpCategoryMap } = require('../client/utils/challenge-types');
const { showUpcomingChanges } = require('../config/env.json');
const { curriculum: curriculumLangs } =
@@ -296,7 +297,6 @@ ${getFullPath('english')}
const {
name: blockName,
order,
- superOrder,
isPrivate,
required = [],
template,
@@ -305,7 +305,8 @@ ${getFullPath('english')}
} = meta;
challenge.block = dasherize(blockName);
challenge.order = order;
- challenge.superOrder = superOrder;
+ const superOrder = getSuperOrder(superBlock);
+ if (superOrder !== null) challenge.superOrder = superOrder;
challenge.superBlock = superBlock;
challenge.challengeOrder = challengeOrder;
challenge.isPrivate = challenge.isPrivate || isPrivate;
diff --git a/curriculum/test/test-challenges.js b/curriculum/test/test-challenges.js
index a014058772..abe4f2c849 100644
--- a/curriculum/test/test-challenges.js
+++ b/curriculum/test/test-challenges.js
@@ -50,7 +50,7 @@ const {
getTranslatableComments
} = require('../getChallenges');
const { challengeSchemaValidator } = require('../schema/challengeSchema');
-const { testedLang } = require('../utils');
+const { testedLang, getSuperOrder } = require('../utils');
const ChallengeTitles = require('./utils/challengeTitles');
const MongoIds = require('./utils/mongoIds');
const createPseudoWorker = require('./utils/pseudo-worker');
@@ -268,22 +268,16 @@ function populateTestsForLang({ lang, challenges, meta }) {
]);
superBlocks.forEach(superBlock => {
const filteredMeta = Object.values(meta)
- /**
- * Exclude any meta which doesn't have a superOrder, as these shouldn't
- * appear on the learn map and thus don't need to be validated.
- */
- .filter(
- el =>
- el.superBlock === superBlock && typeof el.superOrder !== 'undefined'
- )
+ .filter(el => el.superBlock === superBlock)
.sort((a, b) => a.order - b.order);
if (!filteredMeta.length) {
return;
}
it(`${superBlock} should have the same order in every meta`, function () {
- const firstOrder = filteredMeta[0].superOrder;
+ const firstOrder = getSuperOrder(filteredMeta[0].superBlock);
+ assert.isNumber(firstOrder);
assert.isTrue(
- filteredMeta.every(el => el.superOrder === firstOrder),
+ filteredMeta.every(el => getSuperOrder(el.superBlock) === firstOrder),
'The superOrder properties are mismatched.'
);
});
diff --git a/curriculum/utils.js b/curriculum/utils.js
index 481117478c..2e8109eb80 100644
--- a/curriculum/utils.js
+++ b/curriculum/utils.js
@@ -16,3 +16,32 @@ exports.testedLang = function testedLang() {
throw Error('LOCALE must be set for testing');
}
};
+
+// TODO: migrate to TS and use the SuperBlocks enum from
+// config/certification-settings.ts
+
+const superBlockToOrder = {
+ 'responsive-web-design': 0,
+ 'javascript-algorithms-and-data-structures': 1,
+ 'front-end-development-libraries': 2,
+ 'data-visualization': 3,
+ 'relational-databases': 4,
+ 'back-end-development-and-apis': 5,
+ 'quality-assurance': 6,
+ 'scientific-computing-with-python': 7,
+ 'data-analysis-with-python': 8,
+ 'information-security': 9,
+ 'machine-learning-with-python': 10,
+ 'coding-interview-prep': 11
+};
+
+function getSuperOrder(superblock, { isLegacy } = { isLegacy: false }) {
+ if (typeof superblock !== 'string')
+ throw Error('superblock must be a string');
+ const order = superBlockToOrder[superblock];
+ if (typeof order === 'undefined')
+ throw Error(`${superblock} is not a valid superblock`);
+ return isLegacy ? order + 12 : order;
+}
+
+exports.getSuperOrder = getSuperOrder;
diff --git a/curriculum/utils.test.js b/curriculum/utils.test.js
new file mode 100644
index 0000000000..fdcd643f62
--- /dev/null
+++ b/curriculum/utils.test.js
@@ -0,0 +1,43 @@
+import { getSuperOrder } from './utils';
+
+describe('getSuperOrder', () => {
+ it('returns a number for valid superblocks', () => {
+ expect.assertions(1);
+ expect(typeof getSuperOrder('responsive-web-design')).toBe('number');
+ });
+
+ it('throws for unknown superblocks', () => {
+ expect.assertions(4);
+ expect(() => getSuperOrder()).toThrow();
+ expect(() => getSuperOrder(null)).toThrow();
+ expect(() => getSuperOrder('')).toThrow();
+ expect(() => getSuperOrder('respansive-wib-desoin')).toThrow();
+ });
+
+ it('throws for "certifications"', () => {
+ expect.assertions(2);
+ expect(() => getSuperOrder('certifications')).toThrow();
+ expect(() => getSuperOrder('certifications', { isLegacy: true })).toThrow();
+ });
+
+ it('returns unique numbers for all current superblocks', () => {
+ expect.assertions(12);
+ expect(getSuperOrder('responsive-web-design')).toBe(0);
+ expect(getSuperOrder('javascript-algorithms-and-data-structures')).toBe(1);
+ expect(getSuperOrder('front-end-development-libraries')).toBe(2);
+ expect(getSuperOrder('data-visualization')).toBe(3);
+ expect(getSuperOrder('relational-databases')).toBe(4);
+ expect(getSuperOrder('back-end-development-and-apis')).toBe(5);
+ expect(getSuperOrder('quality-assurance')).toBe(6);
+ expect(getSuperOrder('scientific-computing-with-python')).toBe(7);
+ expect(getSuperOrder('data-analysis-with-python')).toBe(8);
+ expect(getSuperOrder('information-security')).toBe(9);
+ expect(getSuperOrder('machine-learning-with-python')).toBe(10);
+ expect(getSuperOrder('coding-interview-prep')).toBe(11);
+ });
+
+ it('returns unique numbers for all legacy superblocks', () => {
+ expect.assertions(1);
+ expect(getSuperOrder('responsive-web-design', { isLegacy: true })).toBe(12);
+ });
+});
From 755f27093c7429e394e323543e12cc716618f57b Mon Sep 17 00:00:00 2001
From: camperbot
Date: Tue, 14 Dec 2021 22:34:33 +0530
Subject: [PATCH 36/63] chore(i18n,curriculum): update translations (#44498)
---
.../test-if-a-string-contains-a-substring.md | 14 +++++++-------
.../test-if-a-value-is-an-array.md | 12 ++++++------
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.md
index 60bf0f0bd1..4d0d847171 100644
--- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.md
+++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.md
@@ -1,6 +1,6 @@
---
id: 587d824d367417b2b2512c53
-title: Test if a String Contains a Substring
+title: Evalúa si una cadena contiene un substring
challengeType: 2
forumTopicId: 301597
dashedName: test-if-a-string-contains-a-substring
@@ -8,17 +8,17 @@ dashedName: test-if-a-string-contains-a-substring
# --description--
-As a reminder, this project is being built upon the following starter project on [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), or cloned from [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/).
+Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/).
-`include()` and `notInclude()` work for strings too! `include()` asserts that the actual string contains the expected substring.
+`include()` y `notInclude()` también funcionan con cadenas! `include()` comprueba que la cadena actual contiene el substring esperado.
# --instructions--
-Within `tests/1_unit-tests.js` under the test labelled `#14` in the `Strings` suite, change each `assert` to either `assert.include` or `assert.notInclude` to make the test pass (should evaluate to `true`). Do not alter the arguments passed to the asserts.
+Dentro de `tests/1_unit-tests.js` bajo la prueba etiquetada `#14` en el conjunto de `Strings`, cambia cada `assert` a `assert.include` o `assert.notInclude` para pasar la prueba (debe evaluarse como `true`). No modifiques los argumentos pasados a los verificadores.
# --hints--
-All tests should pass.
+Todas las pruebas deben pasar.
```js
(getUserInput) =>
@@ -32,7 +32,7 @@ All tests should pass.
);
```
-You should choose the correct method for the first assertion - `include` vs. `notInclude`.
+Debe elegir el método correcto para la primera comprobación - `include` vs. `notInclude`.
```js
(getUserInput) =>
@@ -50,7 +50,7 @@ You should choose the correct method for the first assertion - `include` vs. `no
);
```
-You should choose the correct method for the second assertion - `include` vs. `notInclude`.
+Debe elegir el método correcto para la segunda comprobación - `include` vs. `notInclude`.
```js
(getUserInput) =>
diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md
index 3ed6428022..92d82bfb19 100644
--- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md
+++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md
@@ -1,6 +1,6 @@
---
id: 587d824d367417b2b2512c50
-title: Test if a Value is an Array
+title: Evalúa si un valor es un arreglo
challengeType: 2
forumTopicId: 301600
dashedName: test-if-a-value-is-an-array
@@ -8,15 +8,15 @@ dashedName: test-if-a-value-is-an-array
# --description--
-As a reminder, this project is being built upon the following starter project on [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), or cloned from [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/).
+Como recordatorio, este proyecto está siendo construido con base en el siguiente proyecto inicial [Replit](https://replit.com/github/freeCodeCamp/boilerplate-mochachai), o clonado desde [GitHub](https://github.com/freeCodeCamp/boilerplate-mochachai/).
# --instructions--
-Within `tests/1_unit-tests.js` under the test labelled `#11` in the `Arrays` suite, change each `assert` to either `assert.isArray` or `assert.isNotArray` to make the test pass (should evaluate to `true`). Do not alter the arguments passed to the asserts.
+Dentro de `tests/1_unit-tests.js` bajo la prueba etiquetada `#11` en el `Arrays` suite, cambia cada `assert` a `assert.isArray` o `assert.isNotArray` para pasar la prueba (debe evaluarse como `true`). No modifiques los argumentos pasados a los verificadores.
# --hints--
-All tests should pass.
+Todas las pruebas deben pasar.
```js
(getUserInput) =>
@@ -30,7 +30,7 @@ All tests should pass.
);
```
-You should choose the correct method for the first assertion - `isArray` vs. `isNotArray`.
+Debe elegir el método correcto para la primera comprobación - `isArray` vs `isNotArray`.
```js
(getUserInput) =>
@@ -48,7 +48,7 @@ You should choose the correct method for the first assertion - `isArray` vs. `is
);
```
-You should choose the correct method for the second assertion - `isArray` vs. `isNotArray`.
+Debe elegir el método correcto para la segunda comprobación - `isArray` vs `isNotArray`.
```js
(getUserInput) =>
From 3b560deab620a293023728545b2638bbdd8cbfd7 Mon Sep 17 00:00:00 2001
From: Oliver Eyton-Williams
Date: Tue, 14 Dec 2021 19:11:20 +0100
Subject: [PATCH 37/63] refactor: stop spreading challenge over the node
(#44499)
* refactor: stop spreading challenge over the node
Instead of creating a Gatsby node with id of challenge.id, we create a
single node field that has all the challenge data.
While this makes the GraphQL queries more verbose, it means we're free
to create multiple nodes with the same challenge.id.
* test: update time-line test for new GQL schema
* test: update mocks with new GQL schema
---
client/gatsby-node.js | 86 ++++---
.../create-challenge-nodes.js | 15 +-
client/src/__mocks__/challenge-nodes.js | 242 ++++++++++--------
client/src/components/Map/index.tsx | 57 +++--
.../profile/components/TimeLine.tsx | 24 +-
.../profile/components/time-line.test.tsx | 36 +--
client/src/pages/learn.tsx | 16 +-
client/src/redux/prop-types.ts | 96 +++----
.../src/templates/Challenges/classic/show.tsx | 104 ++++----
.../templates/Challenges/codeally/show.tsx | 26 +-
.../components/completion-modal.tsx | 22 +-
.../Challenges/projects/backend/Show.tsx | 76 +++---
.../Challenges/projects/frontend/Show.tsx | 60 +++--
.../src/templates/Challenges/video/Show.tsx | 90 ++++---
.../Introduction/components/block.tsx | 4 +-
client/src/templates/Introduction/intro.tsx | 23 +-
.../Introduction/super-block-intro.tsx | 46 ++--
client/utils/gatsby/challenge-page-creator.js | 10 +-
18 files changed, 593 insertions(+), 440 deletions(-)
diff --git a/client/gatsby-node.js b/client/gatsby-node.js
index b7d96010ef..6fa003143a 100644
--- a/client/gatsby-node.js
+++ b/client/gatsby-node.js
@@ -20,13 +20,6 @@ const createByIdentityMap = {
exports.onCreateNode = function onCreateNode({ node, actions, getNode }) {
const { createNodeField } = actions;
- if (node.internal.type === 'ChallengeNode') {
- const { tests = [], block, dashedName, superBlock } = node;
- const slug = `/learn/${superBlock}/${block}/${dashedName}`;
- createNodeField({ node, name: 'slug', value: slug });
- createNodeField({ node, name: 'blockName', value: blockNameify(block) });
- createNodeField({ node, name: 'tests', value: tests });
- }
if (node.internal.type === 'MarkdownRemark') {
const slug = createFilePath({ node, getNode });
@@ -71,37 +64,45 @@ exports.createPages = function createPages({ graphql, actions, reporter }) {
graphql(`
{
allChallengeNode(
- sort: { fields: [superOrder, order, challengeOrder] }
+ sort: {
+ fields: [
+ challenge___superOrder
+ challenge___order
+ challenge___challengeOrder
+ ]
+ }
) {
edges {
node {
- block
- challengeType
- fields {
- slug
+ challenge {
+ block
+ challengeType
+ fields {
+ slug
+ }
+ id
+ order
+ required {
+ link
+ src
+ }
+ challengeOrder
+ challengeFiles {
+ name
+ ext
+ contents
+ head
+ tail
+ }
+ solutions {
+ contents
+ ext
+ }
+ superBlock
+ superOrder
+ template
+ usesMultifileEditor
}
- id
- order
- required {
- link
- src
- }
- challengeOrder
- challengeFiles {
- name
- ext
- contents
- head
- tail
- }
- solutions {
- contents
- ext
- }
- superBlock
- superOrder
- template
- usesMultifileEditor
}
}
}
@@ -137,12 +138,22 @@ exports.createPages = function createPages({ graphql, actions, reporter }) {
);
const blocks = uniq(
- result.data.allChallengeNode.edges.map(({ node: { block } }) => block)
+ result.data.allChallengeNode.edges.map(
+ ({
+ node: {
+ challenge: { block }
+ }
+ }) => block
+ )
).map(block => blockNameify(block));
const superBlocks = uniq(
result.data.allChallengeNode.edges.map(
- ({ node: { superBlock } }) => superBlock
+ ({
+ node: {
+ challenge: { superBlock }
+ }
+ }) => superBlock
)
);
@@ -256,6 +267,9 @@ exports.createSchemaCustomization = ({ actions }) => {
const { createTypes } = actions;
const typeDefs = `
type ChallengeNode implements Node {
+ challenge: Challenge
+ }
+ type Challenge {
challengeFiles: [FileContents]
notes: String
url: String
diff --git a/client/plugins/fcc-source-challenges/create-challenge-nodes.js b/client/plugins/fcc-source-challenges/create-challenge-nodes.js
index 394364f033..7e5e80b27b 100644
--- a/client/plugins/fcc-source-challenges/create-challenge-nodes.js
+++ b/client/plugins/fcc-source-challenges/create-challenge-nodes.js
@@ -1,4 +1,5 @@
const crypto = require('crypto');
+const { blockNameify } = require('../../../utils/block-nameify');
function createChallengeNode(challenge, reporter) {
// challengeType 11 is for video challenges (they only have instructions)
@@ -31,6 +32,17 @@ function createChallengeNode(challenge, reporter) {
type: challenge.challengeType === 7 ? 'CertificateNode' : 'ChallengeNode'
};
+ if (internal.type === 'ChallengeNode') {
+ const { tests = [], block, dashedName, superBlock } = challenge;
+ const slug = `/learn/${superBlock}/${block}/${dashedName}`;
+
+ challenge.fields = {
+ slug,
+ blockName: blockNameify(block),
+ tests
+ };
+ }
+
return JSON.parse(
JSON.stringify(
Object.assign(
@@ -41,7 +53,8 @@ function createChallengeNode(challenge, reporter) {
internal,
sourceInstanceName: 'challenge'
},
- challenge
+ { challenge },
+ { id: crypto.randomUUID() }
)
)
);
diff --git a/client/src/__mocks__/challenge-nodes.js b/client/src/__mocks__/challenge-nodes.js
index 87f4ef28ed..6a4ce63b0e 100644
--- a/client/src/__mocks__/challenge-nodes.js
+++ b/client/src/__mocks__/challenge-nodes.js
@@ -1,136 +1,158 @@
const mockChallengeNodes = [
{
- fields: {
- slug: '/super-block-one/block-a/challenge-one',
- blockName: 'Block A'
- },
- id: 'a',
- block: 'block-a',
- title: 'Challenge One',
- isPrivate: false,
- superBlock: 'super-block-one',
- dashedName: 'challenge-one'
+ challenge: {
+ fields: {
+ slug: '/super-block-one/block-a/challenge-one',
+ blockName: 'Block A'
+ },
+ id: 'a',
+ block: 'block-a',
+ title: 'Challenge One',
+ isPrivate: false,
+ superBlock: 'super-block-one',
+ dashedName: 'challenge-one'
+ }
},
{
- fields: {
- slug: '/super-block-one/block-a/challenge-two',
- blockName: 'Block A'
- },
- id: 'b',
- block: 'block-a',
- title: 'Challenge Two',
- isPrivate: false,
- superBlock: 'super-block-one',
- dashedName: 'challenge-two'
+ challenge: {
+ fields: {
+ slug: '/super-block-one/block-a/challenge-two',
+ blockName: 'Block A'
+ },
+ id: 'b',
+ block: 'block-a',
+ title: 'Challenge Two',
+ isPrivate: false,
+ superBlock: 'super-block-one',
+ dashedName: 'challenge-two'
+ }
},
{
- fields: {
- slug: '/super-block-one/block-b/challenge-one',
- blockName: 'Block B'
- },
- id: 'c',
- block: 'block-b',
- title: 'Challenge One',
- isPrivate: false,
- superBlock: 'super-block-one',
- dashedName: 'challenge-one'
+ challenge: {
+ fields: {
+ slug: '/super-block-one/block-b/challenge-one',
+ blockName: 'Block B'
+ },
+ id: 'c',
+ block: 'block-b',
+ title: 'Challenge One',
+ isPrivate: false,
+ superBlock: 'super-block-one',
+ dashedName: 'challenge-one'
+ }
},
{
- fields: {
- slug: '/super-block-one/block-b/challenge-two',
- blockName: 'Block B'
- },
+ challenge: {
+ fields: {
+ slug: '/super-block-one/block-b/challenge-two',
+ blockName: 'Block B'
+ },
- id: 'd',
- block: 'block-b',
- title: 'Challenge Two',
- isPrivate: false,
- superBlock: 'super-block-one',
- dashedName: 'challenge-two'
+ id: 'd',
+ block: 'block-b',
+ title: 'Challenge Two',
+ isPrivate: false,
+ superBlock: 'super-block-one',
+ dashedName: 'challenge-two'
+ }
},
{
- fields: {
- slug: '/super-block-one/block-c/challenge-one',
- blockName: 'Block C'
- },
- id: 'e',
- block: 'block-c',
- title: 'Challenge One',
- isPrivate: true,
- superBlock: 'super-block-one',
- dashedName: 'challenge-one'
+ challenge: {
+ fields: {
+ slug: '/super-block-one/block-c/challenge-one',
+ blockName: 'Block C'
+ },
+ id: 'e',
+ block: 'block-c',
+ title: 'Challenge One',
+ isPrivate: true,
+ superBlock: 'super-block-one',
+ dashedName: 'challenge-one'
+ }
},
{
- fields: {
- slug: '/super-block-two/block-a/challenge-one',
- blockName: 'Block A'
- },
- id: 'f',
- block: 'block-a',
- title: 'Challenge One',
- isPrivate: false,
- superBlock: 'super-block-two',
- dashedName: 'challenge-one'
+ challenge: {
+ fields: {
+ slug: '/super-block-two/block-a/challenge-one',
+ blockName: 'Block A'
+ },
+ id: 'f',
+ block: 'block-a',
+ title: 'Challenge One',
+ isPrivate: false,
+ superBlock: 'super-block-two',
+ dashedName: 'challenge-one'
+ }
},
{
- fields: {
- slug: '/super-block-two/block-a/challenge-two',
- blockName: 'Block A'
- },
- id: 'g',
- block: 'block-a',
- title: 'Challenge Two',
- isPrivate: false,
- superBlock: 'super-block-two',
- dashedName: 'challenge-two'
+ challenge: {
+ fields: {
+ slug: '/super-block-two/block-a/challenge-two',
+ blockName: 'Block A'
+ },
+ id: 'g',
+ block: 'block-a',
+ title: 'Challenge Two',
+ isPrivate: false,
+ superBlock: 'super-block-two',
+ dashedName: 'challenge-two'
+ }
},
{
- fields: {
- slug: '/super-block-two/block-b/challenge-one',
- blockName: 'Block B'
- },
- id: 'h',
- block: 'block-b',
- title: 'Challenge One',
- isPrivate: false,
- superBlock: 'super-block-two',
- dashedName: 'challenge-one'
+ challenge: {
+ fields: {
+ slug: '/super-block-two/block-b/challenge-one',
+ blockName: 'Block B'
+ },
+ id: 'h',
+ block: 'block-b',
+ title: 'Challenge One',
+ isPrivate: false,
+ superBlock: 'super-block-two',
+ dashedName: 'challenge-one'
+ }
},
{
- fields: {
- slug: '/super-block-two/block-b/challenge-two',
- blockName: 'Block B'
- },
- id: 'i',
- block: 'block-b',
- title: 'Challenge Two',
- isPrivate: false,
- superBlock: 'super-block-two',
- dashedName: 'challenge-two'
+ challenge: {
+ fields: {
+ slug: '/super-block-two/block-b/challenge-two',
+ blockName: 'Block B'
+ },
+ id: 'i',
+ block: 'block-b',
+ title: 'Challenge Two',
+ isPrivate: false,
+ superBlock: 'super-block-two',
+ dashedName: 'challenge-two'
+ }
},
{
- fields: {
- slug: '/super-block-three/block-a/challenge-one',
- blockName: 'Block A'
- },
- id: 'j',
- block: 'block-a',
- title: 'Challenge One',
- isPrivate: false,
- superBlock: 'super-block-three',
- dashedName: 'challenge-one'
+ challenge: {
+ fields: {
+ slug: '/super-block-three/block-a/challenge-one',
+ blockName: 'Block A'
+ },
+ id: 'j',
+ block: 'block-a',
+ title: 'Challenge One',
+ isPrivate: false,
+ superBlock: 'super-block-three',
+ dashedName: 'challenge-one'
+ }
},
{
- fields: {
- slug: '/super-block-three/block-c/challenge-two',
- blockName: 'Block C'
- },
- id: 'k',
- block: 'block-c',
- title: 'Challenge Two',
- isPrivate: false,
- superBlock: 'super-block-three',
- dashedName: 'challenge-two'
+ challenge: {
+ fields: {
+ slug: '/super-block-three/block-c/challenge-two',
+ blockName: 'Block C'
+ },
+ id: 'k',
+ block: 'block-c',
+ title: 'Challenge Two',
+ isPrivate: false,
+ superBlock: 'super-block-three',
+ dashedName: 'challenge-two'
+ }
}
];
diff --git a/client/src/components/Map/index.tsx b/client/src/components/Map/index.tsx
index 024a739156..6988f52487 100644
--- a/client/src/components/Map/index.tsx
+++ b/client/src/components/Map/index.tsx
@@ -42,19 +42,19 @@ const linkSpacingStyle = {
function renderLandingMap(nodes: ChallengeNode[]) {
nodes = nodes.filter(
- node => node.superBlock !== SuperBlocks.CodingInterviewPrep
+ ({ challenge }) => challenge.superBlock !== SuperBlocks.CodingInterviewPrep
);
return (
- {nodes.map((node, i) => (
+ {nodes.map(({ challenge }, i) => (
- {generateIconComponent(node.superBlock, 'map-icon')}
- {i18next.t(`intro:${node.superBlock}.title`)}
+ {generateIconComponent(challenge.superBlock, 'map-icon')}
+ {i18next.t(`intro:${challenge.superBlock}.title`)}
@@ -68,18 +68,20 @@ function renderLearnMap(
nodes: ChallengeNode[],
currentSuperBlock: MapProps['currentSuperBlock']
) {
- nodes = nodes.filter(node => node.superBlock !== currentSuperBlock);
+ nodes = nodes.filter(
+ ({ challenge }) => challenge.superBlock !== currentSuperBlock
+ );
return curriculumLocale === 'english' ? (
- {nodes.map((node, i) => (
+ {nodes.map(({ challenge }, i) => (
- {generateIconComponent(node.superBlock, 'map-icon')}
- {createSuperBlockTitle(node.superBlock)}
+ {generateIconComponent(challenge.superBlock, 'map-icon')}
+ {createSuperBlockTitle(challenge.superBlock)}
@@ -88,16 +90,18 @@ function renderLearnMap(
) : (
{nodes
- .filter(node => isAuditedCert(curriculumLocale, node.superBlock))
- .map((node, i) => (
+ .filter(({ challenge }) =>
+ isAuditedCert(curriculumLocale, challenge.superBlock)
+ )
+ .map(({ challenge }, i) => (
- {generateIconComponent(node.superBlock, 'map-icon')}
- {createSuperBlockTitle(node.superBlock)}
+ {generateIconComponent(challenge.superBlock, 'map-icon')}
+ {createSuperBlockTitle(challenge.superBlock)}
@@ -115,16 +119,19 @@ function renderLearnMap(
{nodes
- .filter(node => !isAuditedCert(curriculumLocale, node.superBlock))
- .map((node, i) => (
+ .filter(
+ ({ challenge }) =>
+ !isAuditedCert(curriculumLocale, challenge.superBlock)
+ )
+ .map(({ challenge }, i) => (
- {generateIconComponent(node.superBlock, 'map-icon')}
- {createSuperBlockTitle(node.superBlock)}
+ {generateIconComponent(challenge.superBlock, 'map-icon')}
+ {createSuperBlockTitle(challenge.superBlock)}
@@ -145,12 +152,14 @@ export function Map({
const data: MapData = useStaticQuery(graphql`
query SuperBlockNodes {
allChallengeNode(
- sort: { fields: [superOrder] }
- filter: { order: { eq: 0 }, challengeOrder: { eq: 0 } }
+ sort: { fields: [challenge___superOrder] }
+ filter: { challenge: { order: { eq: 0 }, challengeOrder: { eq: 0 } } }
) {
nodes {
- superBlock
- dashedName
+ challenge {
+ superBlock
+ dashedName
+ }
}
}
}
diff --git a/client/src/components/profile/components/TimeLine.tsx b/client/src/components/profile/components/TimeLine.tsx
index 0505e63b5a..0558289d16 100644
--- a/client/src/components/profile/components/TimeLine.tsx
+++ b/client/src/components/profile/components/TimeLine.tsx
@@ -269,11 +269,13 @@ function useIdToNameMap(): Map {
allChallengeNode {
edges {
node {
- fields {
- slug
+ challenge {
+ fields {
+ slug
+ }
+ id
+ title
}
- id
- title
}
}
}
@@ -289,12 +291,14 @@ function useIdToNameMap(): Map {
edges.forEach(
({
node: {
- // @ts-expect-error Graphql needs typing
- id,
- // @ts-expect-error Graphql needs typing
- title,
- // @ts-expect-error Graphql needs typing
- fields: { slug }
+ challenge: {
+ // @ts-expect-error Graphql needs typing
+ id,
+ // @ts-expect-error Graphql needs typing
+ title,
+ // @ts-expect-error Graphql needs typing
+ fields: { slug }
+ }
}
}) => {
idToNameMap.set(id, { challengeTitle: title, challengePath: slug });
diff --git a/client/src/components/profile/components/time-line.test.tsx b/client/src/components/profile/components/time-line.test.tsx
index 833f5bc735..b5044188eb 100644
--- a/client/src/components/profile/components/time-line.test.tsx
+++ b/client/src/components/profile/components/time-line.test.tsx
@@ -12,29 +12,35 @@ beforeEach(() => {
edges: [
{
node: {
- fields: {
- slug: ''
- },
- id: '5e46f802ac417301a38fb92b',
- title: 'Page View Time Series Visualizer'
+ challenge: {
+ fields: {
+ slug: ''
+ },
+ id: '5e46f802ac417301a38fb92b',
+ title: 'Page View Time Series Visualizer'
+ }
}
},
{
node: {
- fields: {
- slug: ''
- },
- id: '5e4f5c4b570f7e3a4949899f',
- title: 'Sea Level Predictor'
+ challenge: {
+ fields: {
+ slug: ''
+ },
+ id: '5e4f5c4b570f7e3a4949899f',
+ title: 'Sea Level Predictor'
+ }
}
},
{
node: {
- fields: {
- slug: ''
- },
- id: '5e46f7f8ac417301a38fb92a',
- title: 'Medical Data Visualizer'
+ challenge: {
+ fields: {
+ slug: ''
+ },
+ id: '5e46f7f8ac417301a38fb92a',
+ title: 'Medical Data Visualizer'
+ }
}
}
]
diff --git a/client/src/pages/learn.tsx b/client/src/pages/learn.tsx
index 13022530a7..1e3e39d58a 100644
--- a/client/src/pages/learn.tsx
+++ b/client/src/pages/learn.tsx
@@ -53,7 +53,9 @@ interface LearnPageProps {
user: User;
data: {
challengeNode: {
- fields: Slug;
+ challenge: {
+ fields: Slug;
+ };
};
};
executeGA: (payload: Record) => void;
@@ -70,7 +72,9 @@ function LearnPage({
executeGA,
data: {
challengeNode: {
- fields: { slug }
+ challenge: {
+ fields: { slug }
+ }
}
}
}: LearnPageProps) {
@@ -117,9 +121,11 @@ export default connect(mapStateToProps, mapDispatchToProps)(LearnPage);
export const query = graphql`
query FirstChallenge {
- challengeNode(order: { eq: 0 }, challengeOrder: { eq: 0 }) {
- fields {
- slug
+ challengeNode(challenge: { order: { eq: 0 }, challengeOrder: { eq: 0 } }) {
+ challenge {
+ fields {
+ slug
+ }
}
}
}
diff --git a/client/src/redux/prop-types.ts b/client/src/redux/prop-types.ts
index 65af9e912c..30a7c41260 100644
--- a/client/src/redux/prop-types.ts
+++ b/client/src/redux/prop-types.ts
@@ -128,55 +128,57 @@ export interface VideoLocaleIds {
}
export type ChallengeNode = {
- block: string;
- challengeOrder: number;
- challengeType: number;
- dashedName: string;
- description: string;
- challengeFiles: ChallengeFiles;
- fields: Fields;
- forumTopicId: number;
- guideUrl: string;
- head: string[];
- helpCategory: string;
- id: string;
- instructions: string;
- isComingSoon: boolean;
- internal?: {
- content: string;
- contentDigest: string;
+ challenge: {
+ block: string;
+ challengeOrder: number;
+ challengeType: number;
+ dashedName: string;
description: string;
- fieldOwners: string[];
- ignoreType: boolean | null;
- mediaType: string;
- owner: string;
- type: string;
+ challengeFiles: ChallengeFiles;
+ fields: Fields;
+ forumTopicId: number;
+ guideUrl: string;
+ head: string[];
+ helpCategory: string;
+ id: string;
+ instructions: string;
+ isComingSoon: boolean;
+ internal?: {
+ content: string;
+ contentDigest: string;
+ description: string;
+ fieldOwners: string[];
+ ignoreType: boolean | null;
+ mediaType: string;
+ owner: string;
+ type: string;
+ };
+ notes: string;
+ removeComments: boolean;
+ isLocked: boolean;
+ isPrivate: boolean;
+ order: number;
+ question: Question;
+ required: Required[];
+ solutions: {
+ [T in FileKey]: FileKeyChallenge;
+ };
+ sourceInstanceName: string;
+ superOrder: number;
+ superBlock: SuperBlocks;
+ tail: string[];
+ template: string;
+ tests: Test[];
+ time: string;
+ title: string;
+ translationPending: boolean;
+ url: string;
+ usesMultifileEditor: boolean;
+ videoId: string;
+ videoLocaleIds?: VideoLocaleIds;
+ bilibiliIds?: BilibiliIds;
+ videoUrl: string;
};
- notes: string;
- removeComments: boolean;
- isLocked: boolean;
- isPrivate: boolean;
- order: number;
- question: Question;
- required: Required[];
- solutions: {
- [T in FileKey]: FileKeyChallenge;
- };
- sourceInstanceName: string;
- superOrder: number;
- superBlock: SuperBlocks;
- tail: string[];
- template: string;
- tests: Test[];
- time: string;
- title: string;
- translationPending: boolean;
- url: string;
- usesMultifileEditor: boolean;
- videoId: string;
- videoLocaleIds?: VideoLocaleIds;
- bilibiliIds?: BilibiliIds;
- videoUrl: string;
};
export type AllChallengeNode = {
diff --git a/client/src/templates/Challenges/classic/show.tsx b/client/src/templates/Challenges/classic/show.tsx
index 1173f93848..8e3ec4b5d8 100644
--- a/client/src/templates/Challenges/classic/show.tsx
+++ b/client/src/templates/Challenges/classic/show.tsx
@@ -212,7 +212,9 @@ class ShowClassic extends Component {
componentDidMount() {
const {
data: {
- challengeNode: { title }
+ challengeNode: {
+ challenge: { title }
+ }
}
} = this.props;
this.initializeComponent(title);
@@ -222,16 +224,20 @@ class ShowClassic extends Component {
const {
data: {
challengeNode: {
- title: prevTitle,
- fields: { tests: prevTests }
+ challenge: {
+ title: prevTitle,
+ fields: { tests: prevTests }
+ }
}
}
} = prevProps;
const {
data: {
challengeNode: {
- title: currentTitle,
- fields: { tests: currTests }
+ challenge: {
+ title: currentTitle,
+ fields: { tests: currTests }
+ }
}
}
} = this.props;
@@ -250,11 +256,13 @@ class ShowClassic extends Component {
openModal,
data: {
challengeNode: {
- challengeFiles,
- fields: { tests },
- challengeType,
- removeComments,
- helpCategory
+ challenge: {
+ challengeFiles,
+ fields: { tests },
+ challengeType,
+ removeComments,
+ helpCategory
+ }
}
},
pageContext: {
@@ -282,7 +290,7 @@ class ShowClassic extends Component {
cancelTests();
}
- getChallenge = () => this.props.data.challengeNode;
+ getChallenge = () => this.props.data.challengeNode.challenge;
getBlockNameTitle(t: TFunction) {
const { block, superBlock, title } = this.getChallenge();
@@ -337,8 +345,10 @@ class ShowClassic extends Component {
challengeFiles,
data: {
challengeNode: {
- fields: { tests },
- usesMultifileEditor
+ challenge: {
+ fields: { tests },
+ usesMultifileEditor
+ }
}
}
} = this.props;
@@ -489,40 +499,42 @@ export default connect(
export const query = graphql`
query ClassicChallenge($slug: String!) {
- challengeNode(fields: { slug: { eq: $slug } }) {
- block
- title
- description
- instructions
- notes
- removeComments
- challengeType
- helpCategory
- videoUrl
- superBlock
- translationPending
- forumTopicId
- fields {
- blockName
- slug
- tests {
- text
- testString
+ challengeNode(challenge: { fields: { slug: { eq: $slug } } }) {
+ challenge {
+ block
+ title
+ description
+ instructions
+ notes
+ removeComments
+ challengeType
+ helpCategory
+ videoUrl
+ superBlock
+ translationPending
+ forumTopicId
+ fields {
+ blockName
+ slug
+ tests {
+ text
+ testString
+ }
+ }
+ required {
+ link
+ src
+ }
+ usesMultifileEditor
+ challengeFiles {
+ fileKey
+ ext
+ name
+ contents
+ head
+ tail
+ editableRegionBoundaries
}
- }
- required {
- link
- src
- }
- usesMultifileEditor
- challengeFiles {
- fileKey
- ext
- name
- contents
- head
- tail
- editableRegionBoundaries
}
}
}
diff --git a/client/src/templates/Challenges/codeally/show.tsx b/client/src/templates/Challenges/codeally/show.tsx
index d990c3f7ec..72defa8383 100644
--- a/client/src/templates/Challenges/codeally/show.tsx
+++ b/client/src/templates/Challenges/codeally/show.tsx
@@ -49,7 +49,9 @@ class ShowCodeAlly extends Component {
const {
updateChallengeMeta,
data: {
- challengeNode: { challengeType, title }
+ challengeNode: {
+ challenge: { challengeType, title }
+ }
},
pageContext: { challengeMeta }
} = this.props;
@@ -60,9 +62,11 @@ class ShowCodeAlly extends Component {
const {
data: {
challengeNode: {
- title,
- fields: { blockName },
- url
+ challenge: {
+ title,
+ fields: { blockName },
+ url
+ }
}
},
webhookToken = null
@@ -94,12 +98,14 @@ export default connect(mapStateToProps, mapDispatchToProps)(ShowCodeAlly);
// GraphQL
export const query = graphql`
query CodeAllyChallenge($slug: String!) {
- challengeNode(fields: { slug: { eq: $slug } }) {
- title
- challengeType
- url
- fields {
- blockName
+ challengeNode(challenge: { fields: { slug: { eq: $slug } } }) {
+ challenge {
+ title
+ challengeType
+ url
+ fields {
+ blockName
+ }
}
}
}
diff --git a/client/src/templates/Challenges/components/completion-modal.tsx b/client/src/templates/Challenges/components/completion-modal.tsx
index f26613904e..1ccc4ba33e 100644
--- a/client/src/templates/Challenges/components/completion-modal.tsx
+++ b/client/src/templates/Challenges/components/completion-modal.tsx
@@ -280,13 +280,23 @@ const useCurrentBlockIds = (blockName: string) => {
allChallengeNode: { edges }
}: { allChallengeNode: AllChallengeNode } = useStaticQuery(graphql`
query getCurrentBlockNodes {
- allChallengeNode(sort: { fields: [superOrder, order, challengeOrder] }) {
+ allChallengeNode(
+ sort: {
+ fields: [
+ challenge___superOrder
+ challenge___order
+ challenge___challengeOrder
+ ]
+ }
+ ) {
edges {
node {
- fields {
- blockName
+ challenge {
+ fields {
+ blockName
+ }
+ id
}
- id
}
}
}
@@ -294,9 +304,9 @@ const useCurrentBlockIds = (blockName: string) => {
`);
const currentBlockIds = edges
- .filter(edge => edge.node.fields.blockName === blockName)
+ .filter(edge => edge.node.challenge.fields.blockName === blockName)
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
- .map(edge => edge.node.id);
+ .map(edge => edge.node.challenge.id);
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return currentBlockIds;
};
diff --git a/client/src/templates/Challenges/projects/backend/Show.tsx b/client/src/templates/Challenges/projects/backend/Show.tsx
index 4e4fb9cc95..7d62c424d7 100644
--- a/client/src/templates/Challenges/projects/backend/Show.tsx
+++ b/client/src/templates/Challenges/projects/backend/Show.tsx
@@ -123,16 +123,20 @@ class BackEnd extends Component {
const {
data: {
challengeNode: {
- title: prevTitle,
- fields: { tests: prevTests }
+ challenge: {
+ title: prevTitle,
+ fields: { tests: prevTests }
+ }
}
}
} = prevProps;
const {
data: {
challengeNode: {
- title: currentTitle,
- fields: { tests: currTests }
+ challenge: {
+ title: currentTitle,
+ fields: { tests: currTests }
+ }
}
}
} = this.props;
@@ -149,10 +153,12 @@ class BackEnd extends Component {
updateChallengeMeta,
data: {
challengeNode: {
- fields: { tests },
- title,
- challengeType,
- helpCategory
+ challenge: {
+ fields: { tests },
+ title,
+ challengeType,
+ helpCategory
+ }
}
},
pageContext: { challengeMeta }
@@ -182,15 +188,17 @@ class BackEnd extends Component {
const {
data: {
challengeNode: {
- fields: { blockName },
- challengeType,
- forumTopicId,
- title,
- description,
- instructions,
- translationPending,
- superBlock,
- block
+ challenge: {
+ fields: { blockName },
+ challengeType,
+ forumTopicId,
+ title,
+ description,
+ instructions,
+ translationPending,
+ superBlock,
+ block
+ }
}
},
isChallengeCompleted,
@@ -278,22 +286,24 @@ export default connect(
export const query = graphql`
query BackendChallenge($slug: String!) {
- challengeNode(fields: { slug: { eq: $slug } }) {
- forumTopicId
- title
- description
- instructions
- challengeType
- helpCategory
- superBlock
- block
- translationPending
- fields {
- blockName
- slug
- tests {
- text
- testString
+ challengeNode(challenge: { fields: { slug: { eq: $slug } } }) {
+ challenge {
+ forumTopicId
+ title
+ description
+ instructions
+ challengeType
+ helpCategory
+ superBlock
+ block
+ translationPending
+ fields {
+ blockName
+ slug
+ tests {
+ text
+ testString
+ }
}
}
}
diff --git a/client/src/templates/Challenges/projects/frontend/Show.tsx b/client/src/templates/Challenges/projects/frontend/Show.tsx
index 2b3905a39b..7c5c6ba789 100644
--- a/client/src/templates/Challenges/projects/frontend/Show.tsx
+++ b/client/src/templates/Challenges/projects/frontend/Show.tsx
@@ -76,7 +76,9 @@ class Project extends Component {
const {
challengeMounted,
data: {
- challengeNode: { title, challengeType, helpCategory }
+ challengeNode: {
+ challenge: { title, challengeType, helpCategory }
+ }
},
pageContext: { challengeMeta },
updateChallengeMeta
@@ -94,13 +96,17 @@ class Project extends Component {
componentDidUpdate(prevProps: ProjectProps): void {
const {
data: {
- challengeNode: { title: prevTitle }
+ challengeNode: {
+ challenge: { title: prevTitle }
+ }
}
} = prevProps;
const {
challengeMounted,
data: {
- challengeNode: { title: currentTitle, challengeType, helpCategory }
+ challengeNode: {
+ challenge: { title: currentTitle, challengeType, helpCategory }
+ }
},
pageContext: { challengeMeta },
updateChallengeMeta
@@ -130,15 +136,17 @@ class Project extends Component {
const {
data: {
challengeNode: {
- challengeType,
- fields: { blockName },
- forumTopicId,
- title,
- description,
- instructions,
- superBlock,
- block,
- translationPending
+ challenge: {
+ challengeType,
+ fields: { blockName },
+ forumTopicId,
+ title,
+ description,
+ instructions,
+ superBlock,
+ block,
+ translationPending
+ }
}
},
isChallengeCompleted,
@@ -215,19 +223,21 @@ export default connect(
export const query = graphql`
query ProjectChallenge($slug: String!) {
- challengeNode(fields: { slug: { eq: $slug } }) {
- forumTopicId
- title
- description
- instructions
- challengeType
- helpCategory
- superBlock
- block
- translationPending
- fields {
- blockName
- slug
+ challengeNode(challenge: { fields: { slug: { eq: $slug } } }) {
+ challenge {
+ forumTopicId
+ title
+ description
+ instructions
+ challengeType
+ helpCategory
+ superBlock
+ block
+ translationPending
+ fields {
+ blockName
+ slug
+ }
}
}
}
diff --git a/client/src/templates/Challenges/video/Show.tsx b/client/src/templates/Challenges/video/Show.tsx
index 677da5c5a0..c078ebc8bd 100644
--- a/client/src/templates/Challenges/video/Show.tsx
+++ b/client/src/templates/Challenges/video/Show.tsx
@@ -97,7 +97,9 @@ class ShowVideo extends Component {
const {
challengeMounted,
data: {
- challengeNode: { title, challengeType, helpCategory }
+ challengeNode: {
+ challenge: { title, challengeType, helpCategory }
+ }
},
pageContext: { challengeMeta },
updateChallengeMeta
@@ -115,13 +117,17 @@ class ShowVideo extends Component {
componentDidUpdate(prevProps: ShowVideoProps): void {
const {
data: {
- challengeNode: { title: prevTitle }
+ challengeNode: {
+ challenge: { title: prevTitle }
+ }
}
} = prevProps;
const {
challengeMounted,
data: {
- challengeNode: { title: currentTitle, challengeType, helpCategory }
+ challengeNode: {
+ challenge: { title: currentTitle, challengeType, helpCategory }
+ }
},
pageContext: { challengeMeta },
updateChallengeMeta
@@ -169,16 +175,18 @@ class ShowVideo extends Component {
const {
data: {
challengeNode: {
- fields: { blockName },
- title,
- description,
- superBlock,
- block,
- translationPending,
- videoId,
- videoLocaleIds,
- bilibiliIds,
- question: { text, answers, solution }
+ challenge: {
+ fields: { blockName },
+ title,
+ description,
+ superBlock,
+ block,
+ translationPending,
+ videoId,
+ videoLocaleIds,
+ bilibiliIds,
+ question: { text, answers, solution }
+ }
}
},
openCompletionModal,
@@ -313,34 +321,36 @@ export default connect(
export const query = graphql`
query VideoChallenge($slug: String!) {
- challengeNode(fields: { slug: { eq: $slug } }) {
- videoId
- videoLocaleIds {
- espanol
- italian
- portuguese
+ challengeNode(challenge: { fields: { slug: { eq: $slug } } }) {
+ challenge {
+ videoId
+ videoLocaleIds {
+ espanol
+ italian
+ portuguese
+ }
+ bilibiliIds {
+ aid
+ bvid
+ cid
+ }
+ title
+ description
+ challengeType
+ helpCategory
+ superBlock
+ block
+ fields {
+ blockName
+ slug
+ }
+ question {
+ text
+ answers
+ solution
+ }
+ translationPending
}
- bilibiliIds {
- aid
- bvid
- cid
- }
- title
- description
- challengeType
- helpCategory
- superBlock
- block
- fields {
- blockName
- slug
- }
- question {
- text
- answers
- solution
- }
- translationPending
}
}
`;
diff --git a/client/src/templates/Introduction/components/block.tsx b/client/src/templates/Introduction/components/block.tsx
index 6d0db6050f..62392e1692 100644
--- a/client/src/templates/Introduction/components/block.tsx
+++ b/client/src/templates/Introduction/components/block.tsx
@@ -101,7 +101,7 @@ export class Block extends Component {
} = this.props;
let completedCount = 0;
- const challengesWithCompleted = challenges.map(challenge => {
+ const challengesWithCompleted = challenges.map(({ challenge }) => {
const { id } = challenge;
const isCompleted = completedChallengeIds.some(
(completedChallengeId: string) => completedChallengeId === id
@@ -112,7 +112,7 @@ export class Block extends Component {
return { ...challenge, isCompleted };
});
- const isProjectBlock = challenges.some(challenge => {
+ const isProjectBlock = challenges.some(({ challenge }) => {
const isJsProject =
challenge.order === 10 && challenge.challengeType === 5;
diff --git a/client/src/templates/Introduction/intro.tsx b/client/src/templates/Introduction/intro.tsx
index 5dfd6a78ab..aadb8d8854 100644
--- a/client/src/templates/Introduction/intro.tsx
+++ b/client/src/templates/Introduction/intro.tsx
@@ -21,7 +21,7 @@ function renderMenuItems({
edges?: Array<{ node: ChallengeNode }>;
}) {
return edges
- .map(({ node }) => node)
+ .map(({ node: { challenge } }) => challenge)
.map(({ title, fields: { slug } }) => (
{title}
@@ -42,7 +42,8 @@ function IntroductionPage({
html,
frontmatter: { block }
} = markdownRemark;
- const firstLesson = allChallengeNode && allChallengeNode.edges[0].node;
+ const firstLesson =
+ allChallengeNode && allChallengeNode.edges[0].node.challenge;
const firstLessonPath = firstLesson
? firstLesson.fields.slug
: '/strange-place';
@@ -97,15 +98,23 @@ export const query = graphql`
html
}
allChallengeNode(
- filter: { block: { eq: $block } }
- sort: { fields: [superOrder, order, challengeOrder] }
+ filter: { challenge: { block: { eq: $block } } }
+ sort: {
+ fields: [
+ challenge___superOrder
+ challenge___order
+ challenge___challengeOrder
+ ]
+ }
) {
edges {
node {
- fields {
- slug
+ challenge {
+ fields {
+ slug
+ }
+ title
}
- title
}
}
}
diff --git a/client/src/templates/Introduction/super-block-intro.tsx b/client/src/templates/Introduction/super-block-intro.tsx
index cf9a9702c8..cb224fcc0e 100644
--- a/client/src/templates/Introduction/super-block-intro.tsx
+++ b/client/src/templates/Introduction/super-block-intro.tsx
@@ -141,15 +141,15 @@ const SuperBlockIntroductionPage = (props: SuperBlockProp) => {
if (isSignedIn) {
// see if currentChallenge is in this superBlock
const currentChallengeEdge = edges.find(
- edge => edge.node.id === currentChallengeId
+ edge => edge.node.challenge.id === currentChallengeId
);
return currentChallengeEdge
- ? currentChallengeEdge.node.block
- : edge.node.block;
+ ? currentChallengeEdge.node.challenge.block
+ : edge.node.challenge.block;
}
- return edge.node.block;
+ return edge.node.challenge.block;
};
const initializeExpandedState = () => {
@@ -173,7 +173,9 @@ const SuperBlockIntroductionPage = (props: SuperBlockProp) => {
} = props;
const nodesForSuperBlock = edges.map(({ node }) => node);
- const blockDashedNames = uniq(nodesForSuperBlock.map(({ block }) => block));
+ const blockDashedNames = uniq(
+ nodesForSuperBlock.map(({ challenge: { block } }) => block)
+ );
const i18nSuperBlock = t(`intro:${superBlock}.title`);
const i18nTitle =
superBlock === SuperBlocks.CodingInterviewPrep
@@ -206,7 +208,7 @@ const SuperBlockIntroductionPage = (props: SuperBlockProp) => {
node.block === blockDashedName
+ node => node.challenge.block === blockDashedName
)}
superBlock={superBlock}
/>
@@ -263,22 +265,30 @@ export const query = graphql`
}
}
allChallengeNode(
- sort: { fields: [superOrder, order, challengeOrder] }
- filter: { superBlock: { eq: $superBlock } }
+ sort: {
+ fields: [
+ challenge___superOrder
+ challenge___order
+ challenge___challengeOrder
+ ]
+ }
+ filter: { challenge: { superBlock: { eq: $superBlock } } }
) {
edges {
node {
- fields {
- slug
- blockName
+ challenge {
+ fields {
+ slug
+ blockName
+ }
+ id
+ block
+ challengeType
+ title
+ order
+ superBlock
+ dashedName
}
- id
- block
- challengeType
- title
- order
- superBlock
- dashedName
}
}
}
diff --git a/client/utils/gatsby/challenge-page-creator.js b/client/utils/gatsby/challenge-page-creator.js
index e48509f591..e0649fda2c 100644
--- a/client/utils/gatsby/challenge-page-creator.js
+++ b/client/utils/gatsby/challenge-page-creator.js
@@ -45,12 +45,12 @@ const views = {
function getNextChallengePath(_node, index, nodeArray) {
const next = nodeArray[index + 1];
- return next ? next.node.fields.slug : '/learn';
+ return next ? next.node.challenge.fields.slug : '/learn';
}
function getPrevChallengePath(_node, index, nodeArray) {
const prev = nodeArray[index - 1];
- return prev ? prev.node.fields.slug : '/learn';
+ return prev ? prev.node.challenge.fields.slug : '/learn';
}
function getTemplateComponent(challengeType) {
@@ -58,7 +58,7 @@ function getTemplateComponent(challengeType) {
}
exports.createChallengePages = function (createPage) {
- return function ({ node: challenge }, index, allChallengeEdges) {
+ return function ({ node: { challenge } }, index, allChallengeEdges) {
const {
superBlock,
block,
@@ -103,8 +103,8 @@ function getProjectPreviewConfig(challenge, allChallengeEdges) {
const { block, challengeOrder, usesMultifileEditor } = challenge;
const challengesInBlock = allChallengeEdges
- .filter(({ node }) => node.block === block)
- .map(({ node }) => node);
+ .filter(({ node: { challenge } }) => challenge.block === block)
+ .map(({ node: { challenge } }) => challenge);
const lastChallenge = challengesInBlock[challengesInBlock.length - 1];
const solutionToLastChallenge = sortChallengeFiles(
lastChallenge.solutions[0] ?? []
From 5c4233a39a62e9c5164292e565aebf6ed95ce2f0 Mon Sep 17 00:00:00 2001
From: Tom <20648924+moT01@users.noreply.github.com>
Date: Tue, 14 Dec 2021 12:18:37 -0600
Subject: [PATCH 38/63] remove: unused dispatches from multifile editor
(#44493)
---
.../Challenges/classic/MultifileEditor.js | 19 ++-----------------
1 file changed, 2 insertions(+), 17 deletions(-)
diff --git a/client/src/templates/Challenges/classic/MultifileEditor.js b/client/src/templates/Challenges/classic/MultifileEditor.js
index 96f426d6f6..70a139715b 100644
--- a/client/src/templates/Challenges/classic/MultifileEditor.js
+++ b/client/src/templates/Challenges/classic/MultifileEditor.js
@@ -7,11 +7,7 @@ import { isDonationModalOpenSelector, userSelector } from '../../../redux';
import {
canFocusEditorSelector,
consoleOutputSelector,
- executeChallenge,
- saveEditorContent,
- setEditorFocusability,
- visibleEditorsSelector,
- updateFile
+ visibleEditorsSelector
} from '../redux';
import { getTargetEditor } from '../utils/getTargetEditor';
import './editor.css';
@@ -26,7 +22,6 @@ const propTypes = {
description: PropTypes.string,
dimensions: PropTypes.object,
editorRef: PropTypes.any.isRequired,
- executeChallenge: PropTypes.func.isRequired,
ext: PropTypes.string,
fileKey: PropTypes.string,
initialEditorContent: PropTypes.string,
@@ -37,11 +32,8 @@ const propTypes = {
onStopResize: PropTypes.func,
onResize: PropTypes.func
}),
- saveEditorContent: PropTypes.func.isRequired,
- setEditorFocusability: PropTypes.func,
theme: PropTypes.string,
title: PropTypes.string,
- updateFile: PropTypes.func.isRequired,
usesMultifileEditor: PropTypes.bool,
visibleEditors: PropTypes.shape({
scriptjs: PropTypes.bool,
@@ -65,13 +57,6 @@ const mapStateToProps = createSelector(
})
);
-const mapDispatchToProps = {
- executeChallenge,
- saveEditorContent,
- setEditorFocusability,
- updateFile
-};
-
const MultifileEditor = props => {
const {
challengeFiles,
@@ -159,4 +144,4 @@ const MultifileEditor = props => {
MultifileEditor.displayName = 'MultifileEditor';
MultifileEditor.propTypes = propTypes;
-export default connect(mapStateToProps, mapDispatchToProps)(MultifileEditor);
+export default connect(mapStateToProps)(MultifileEditor);
From 5bf5b36c9c68efed068f10ea05ed674ce42fb143 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Tue, 14 Dec 2021 18:54:51 +0000
Subject: [PATCH 39/63] chore(deps): update dependency @types/node to v16.11.13
---
package-lock.json | 26 +++++++-------------------
package.json | 2 +-
2 files changed, 8 insertions(+), 20 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index ea68801777..7766573e07 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -46,7 +46,7 @@
"@types/jquery": "3.5.10",
"@types/loadable__component": "5.13.4",
"@types/lodash-es": "4.17.5",
- "@types/node": "16.11.12",
+ "@types/node": "16.11.13",
"@types/prismjs": "1.16.6",
"@types/psl": "1.1.0",
"@types/reach__router": "1.3.9",
@@ -14899,9 +14899,9 @@
"integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
},
"node_modules/@types/node": {
- "version": "16.11.12",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz",
- "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw=="
+ "version": "16.11.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.13.tgz",
+ "integrity": "sha512-eUXZzHLHoZqj1frtUetNkUetYoJ6X55UmrVnFD4DMhVeAmwLjniZhtBmsRiemQh4uq4G3vUra/Ws/hs9vEvL3Q=="
},
"node_modules/@types/node-fetch": {
"version": "2.5.12",
@@ -55405,12 +55405,6 @@
}
}
},
- "tools/ui-components/node_modules/@types/node": {
- "version": "14.18.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz",
- "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==",
- "dev": true
- },
"tools/ui-components/node_modules/@types/yargs": {
"version": "15.0.14",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz",
@@ -58221,12 +58215,6 @@
"util-deprecate": "^1.0.2"
}
},
- "@types/node": {
- "version": "14.18.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz",
- "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==",
- "dev": true
- },
"@types/yargs": {
"version": "15.0.14",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz",
@@ -67357,9 +67345,9 @@
"integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
},
"@types/node": {
- "version": "16.11.12",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz",
- "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw=="
+ "version": "16.11.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.13.tgz",
+ "integrity": "sha512-eUXZzHLHoZqj1frtUetNkUetYoJ6X55UmrVnFD4DMhVeAmwLjniZhtBmsRiemQh4uq4G3vUra/Ws/hs9vEvL3Q=="
},
"@types/node-fetch": {
"version": "2.5.12",
diff --git a/package.json b/package.json
index bb89f51de5..0db8a38192 100644
--- a/package.json
+++ b/package.json
@@ -121,7 +121,7 @@
"@types/jquery": "3.5.10",
"@types/loadable__component": "5.13.4",
"@types/lodash-es": "4.17.5",
- "@types/node": "16.11.12",
+ "@types/node": "16.11.13",
"@types/prismjs": "1.16.6",
"@types/psl": "1.1.0",
"@types/reach__router": "1.3.9",
From b57cf4ffa718348aae54bf31bd8948b63e87f045 Mon Sep 17 00:00:00 2001
From: Oliver Eyton-Williams
Date: Wed, 15 Dec 2021 00:59:53 +0100
Subject: [PATCH 40/63] fix: store completed js projects in redux (#44496)
* fix: store completed js projects in redux
These were missed when we migrated from files to challengeFiles
* test: put the data-cy on the correct button
Rather than the fallback. The tests were only passing because the
fallback was kicking in and, since that was fixed, the tests started to
fail!
---
.../src/client-only-routes/show-project-links.tsx | 7 ++-----
client/src/redux/settings/settings-sagas.js | 9 ++++++++-
.../templates/Challenges/redux/completion-epic.js | 15 ++++++++++-----
3 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/client/src/client-only-routes/show-project-links.tsx b/client/src/client-only-routes/show-project-links.tsx
index 279ee5b99c..39e775e36a 100644
--- a/client/src/client-only-routes/show-project-links.tsx
+++ b/client/src/client-only-routes/show-project-links.tsx
@@ -65,6 +65,7 @@ const ShowProjectLinks = (props: ShowProjectLinksProps): JSX.Element => {
return (
{t('certification.project.solution')}
@@ -97,11 +98,7 @@ const ShowProjectLinks = (props: ShowProjectLinksProps): JSX.Element => {
);
}
return (
-
+
{t('certification.project.solution')}
);
diff --git a/client/src/redux/settings/settings-sagas.js b/client/src/redux/settings/settings-sagas.js
index 73b5ce5e44..00bf9dc895 100644
--- a/client/src/redux/settings/settings-sagas.js
+++ b/client/src/redux/settings/settings-sagas.js
@@ -1,3 +1,4 @@
+import { omit } from 'lodash-es';
import { call, delay, put, takeLatest, takeEvery } from 'redux-saga/effects';
import { createFlashMessage } from '../../components/Flash/redux';
@@ -85,7 +86,13 @@ function* verifyCertificationSaga({ payload }) {
yield put(
verifyCertComplete({
...response,
- payload: { ...isCertMap, completedChallenges }
+ payload: {
+ ...isCertMap,
+ completedChallenges: completedChallenges.map(x => ({
+ ...omit(x, 'files'),
+ challengeFiles: x.files ?? null
+ }))
+ }
})
);
yield put(createFlashMessage(response));
diff --git a/client/src/templates/Challenges/redux/completion-epic.js b/client/src/templates/Challenges/redux/completion-epic.js
index 808e4ef2cd..6665932052 100644
--- a/client/src/templates/Challenges/redux/completion-epic.js
+++ b/client/src/templates/Challenges/redux/completion-epic.js
@@ -1,4 +1,5 @@
import { navigate } from 'gatsby';
+import { omit } from 'lodash-es';
import { ofType } from 'redux-observable';
import { of, empty } from 'rxjs';
import {
@@ -35,16 +36,20 @@ import {
function postChallenge(update, username) {
const saveChallenge = postUpdate$(update).pipe(
retry(3),
- switchMap(({ points }) =>
- of(
+ switchMap(({ points }) => {
+ const payloadWithClientProperties = {
+ ...omit(update.payload, ['files']),
+ challengeFiles: update.payload.files ?? null
+ };
+ return of(
submitComplete({
username,
points,
- ...update.payload
+ ...payloadWithClientProperties
}),
updateComplete()
- )
- ),
+ );
+ }),
catchError(() => of(updateFailed(update)))
);
return saveChallenge;
From 483010b87b1c6268cc1a539409481296f3c441dc Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Wed, 15 Dec 2021 00:24:25 +0000
Subject: [PATCH 41/63] fix(deps): update dependency @babel/standalone to
v7.16.6
---
client/package.json | 2 +-
package-lock.json | 16 ++++++++--------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/client/package.json b/client/package.json
index 078627169e..78801fdc8b 100644
--- a/client/package.json
+++ b/client/package.json
@@ -38,7 +38,7 @@
"@babel/polyfill": "7.12.1",
"@babel/preset-env": "7.16.5",
"@babel/preset-react": "7.16.5",
- "@babel/standalone": "7.16.5",
+ "@babel/standalone": "7.16.6",
"@fortawesome/fontawesome": "1.1.8",
"@fortawesome/fontawesome-svg-core": "1.2.36",
"@fortawesome/free-brands-svg-icons": "5.15.4",
diff --git a/package-lock.json b/package-lock.json
index 7766573e07..8e1374eb68 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -206,7 +206,7 @@
"@babel/polyfill": "7.12.1",
"@babel/preset-env": "7.16.5",
"@babel/preset-react": "7.16.5",
- "@babel/standalone": "7.16.5",
+ "@babel/standalone": "7.16.6",
"@fortawesome/fontawesome": "1.1.8",
"@fortawesome/fontawesome-svg-core": "1.2.36",
"@fortawesome/free-brands-svg-icons": "5.15.4",
@@ -2520,9 +2520,9 @@
}
},
"node_modules/@babel/standalone": {
- "version": "7.16.5",
- "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.16.5.tgz",
- "integrity": "sha512-f6eufO52OVzOF808R42AEjqzaaJuVmFn8DRpumd16Pyju7CgNw9j7gsHg8w/VDUxeikixG6KWvTyN2u1bh13qg==",
+ "version": "7.16.6",
+ "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.16.6.tgz",
+ "integrity": "sha512-wjildVe951w1IPEPN4G76j+y5JFZfJN9gdyP8o9zd61qbiVEecAgORKskK1D/7VrJZrZS+nxDbhj2akEFU2RJw==",
"engines": {
"node": ">=6.9.0"
}
@@ -57044,9 +57044,9 @@
}
},
"@babel/standalone": {
- "version": "7.16.5",
- "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.16.5.tgz",
- "integrity": "sha512-f6eufO52OVzOF808R42AEjqzaaJuVmFn8DRpumd16Pyju7CgNw9j7gsHg8w/VDUxeikixG6KWvTyN2u1bh13qg=="
+ "version": "7.16.6",
+ "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.16.6.tgz",
+ "integrity": "sha512-wjildVe951w1IPEPN4G76j+y5JFZfJN9gdyP8o9zd61qbiVEecAgORKskK1D/7VrJZrZS+nxDbhj2akEFU2RJw=="
},
"@babel/template": {
"version": "7.16.0",
@@ -57691,7 +57691,7 @@
"@babel/polyfill": "7.12.1",
"@babel/preset-env": "7.16.5",
"@babel/preset-react": "7.16.5",
- "@babel/standalone": "7.16.5",
+ "@babel/standalone": "7.16.6",
"@babel/types": "7.16.0",
"@codesee/babel-plugin-instrument": "0.150.0",
"@codesee/tracker": "0.150.0",
From d06d976be4b13cc28c953d042efc045ff0495426 Mon Sep 17 00:00:00 2001
From: Scott
Date: Tue, 14 Dec 2021 19:16:22 -0800
Subject: [PATCH 42/63] feat(learn): add Implement Binary Search - Coding
Interview Prep - Algorithms Challenges (#44386)
* basic challenge create, with two tests
* updated test
* minor update
* rewrote tests, making many out of one test func
* completed coding challenge and ran tests local
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search-method.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search-method.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search-method.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search-method.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search-method.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search-method.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search-method.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search-method.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search-method.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search-method.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Eric Cheng
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Eric Cheng
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Eric Cheng
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Eric Cheng
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Eric Cheng
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Eric Cheng
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Eric Cheng
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Eric Cheng
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Ilenia
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Ilenia
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Ilenia
* renamed doc, fixed typo, made testing consistent
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
* Update curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
Co-authored-by: Ilenia
Co-authored-by: Krzysztof G. <60067306+gikf@users.noreply.github.com>
Co-authored-by: Eric Cheng
Co-authored-by: Ilenia
---
.../challenges/_meta/algorithms/meta.json | 4 +
.../algorithms/implement-binary-search.md | 150 ++++++++++++++++++
2 files changed, 154 insertions(+)
create mode 100644 curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
diff --git a/curriculum/challenges/_meta/algorithms/meta.json b/curriculum/challenges/_meta/algorithms/meta.json
index e9429d9c42..6a032c862f 100644
--- a/curriculum/challenges/_meta/algorithms/meta.json
+++ b/curriculum/challenges/_meta/algorithms/meta.json
@@ -43,5 +43,9 @@
[
"587d825c367417b2b2512c8f",
"Implement Merge Sort"
+ ],
+ [
+ "61abc7ebf3029b56226de5b6",
+ "Implement Binary Search"
]
]}
diff --git a/curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md b/curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
new file mode 100644
index 0000000000..d2383c52ed
--- /dev/null
+++ b/curriculum/challenges/english/10-coding-interview-prep/algorithms/implement-binary-search.md
@@ -0,0 +1,150 @@
+---
+id: 61abc7ebf3029b56226de5b6
+title: Implement Binary Search
+challengeType: 1
+forumTopicId: 487618
+dashedName: implement-binary-search
+---
+
+# --description--
+
+Binary search is an **O(log(n))** efficiency algorithm for searching a sorted array to find an element. It operates using the following steps:
+
+1. Find the middle `value` of a sorted array. If `value == target` return (found it!).
+1. If middle `value < target`, search right half of array in next compare.
+1. If middle `value > target`, search left half of array in next compare.
+
+As you can see, you are successively halving an array, which gives you the log(n) efficiency. For this challenge, we want you to show your work - how you got to the target value... the path you took!
+
+# --instructions--
+
+Write a function `binarySearch` that implements the binary search algorithm on an array, returning the path you took (each middle value comparison) to find the target in an array.
+
+The function takes a sorted array of integers and a target value as input. It returns an array containing (in-order) the middle value you found at each halving of the original array until you found the target value. The target value should be the last element of the returned array. If value not is found, return the string `Value Not Found`.
+
+For example, `binarySearch([1,2,3,4,5,6,7], 5)` would return `[4,6,5]`.
+
+For this challenge, when halving, you MUST use `Math.floor()` when doing division: `Math.floor(x/2)`. This will give a consistent, testable path.
+
+**Note:** The following array will be used in tests:
+
+```js
+const testArray = [
+ 0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 49, 70
+];
+```
+
+# --hints--
+
+`binarySearch` should be a function.
+
+```js
+assert(typeof binarySearch == 'function');
+```
+
+`binarySearch(testArray, 0)` should return `[13, 5, 2, 0]`.
+
+```js
+assert.deepEqual(binarySearch(_testArray, 0), [13, 5, 2, 0]);
+```
+
+`binarySearch(testArray, 1)` should return `[13, 5, 2, 0, 1]`.
+
+```js
+assert.deepEqual(binarySearch(_testArray, 1), [13, 5, 2, 0, 1]);
+```
+
+
+`binarySearch(testArray, 2)` should return `[13, 5, 2]`.
+
+```js
+assert.deepEqual(binarySearch(_testArray, 2), [13, 5, 2]);
+```
+
+`binarySearch(testArray, 6)` should return the string `Value Not Found`.
+
+```js
+assert.strictEqual(binarySearch(_testArray, 6), 'Value Not Found');
+```
+
+`binarySearch(testArray, 11)` should return `[13, 5, 10, 11]`.
+
+```js
+assert.deepEqual(binarySearch(_testArray, 11), [13, 5, 10, 11])
+```
+
+`binarySearch(testArray, 13)` should return `[13]`.
+
+```js
+assert.deepEqual(binarySearch(_testArray, 13), [13]);
+```
+
+
+# --seed--
+
+## --after-user-code--
+
+```js
+const _testArray = [
+ 0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 49, 70
+];
+```
+
+## --seed-contents--
+
+```js
+function binarySearch(searchList, value) {
+ let arrayPath = [];
+ return arrayPath;
+}
+```
+
+
+
+# --solutions--
+
+```js
+let binarySearch = (searchList, value) => {
+ let arrayPath = [];
+
+ // set initial L - M - R
+ let left = 0;
+ let right = searchList.length - 1;
+ let middle = Math.floor(right / 2);
+
+ // if first comparison finds value
+ if (searchList[middle] == value) {
+ arrayPath.push(searchList[middle]);
+ return arrayPath;
+ }
+
+ while (searchList[middle] !== value) {
+ // add to output array
+ arrayPath.push(searchList[middle]);
+
+ // not found
+ if (right < left) {
+ return 'Value Not Found';
+ }
+ // value is in left or right portion of array
+ // update L - M - R
+ if (searchList[middle] > value) {
+ right = middle - 1;
+ middle = left + Math.floor((right - left) / 2);
+ } else {
+ left = middle + 1;
+ middle = left + Math.floor((right - left) / 2);
+ }
+
+ // if found update output array and exit
+ if (searchList[middle] == value) {
+ arrayPath.push(searchList[middle]);
+
+ break;
+ }
+ }
+ return arrayPath;
+};
+```
From 5e66a30ac11ac3e6a176a04964b75b370eae2828 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Wed, 15 Dec 2021 04:25:11 +0000
Subject: [PATCH 43/63] chore(deps): update codesee to v0.151.0
---
client/package.json | 4 ++--
package-lock.json | 32 ++++++++++++++++----------------
2 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/client/package.json b/client/package.json
index 78801fdc8b..df2ec47b65 100644
--- a/client/package.json
+++ b/client/package.json
@@ -129,8 +129,8 @@
},
"devDependencies": {
"@babel/types": "7.16.0",
- "@codesee/babel-plugin-instrument": "0.150.0",
- "@codesee/tracker": "0.150.0",
+ "@codesee/babel-plugin-instrument": "0.151.0",
+ "@codesee/tracker": "0.151.0",
"@testing-library/jest-dom": "5.16.1",
"@testing-library/react": "12.1.2",
"autoprefixer": "10.4.0",
diff --git a/package-lock.json b/package-lock.json
index 8e1374eb68..c3f3af1ba0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -297,8 +297,8 @@
},
"devDependencies": {
"@babel/types": "7.16.0",
- "@codesee/babel-plugin-instrument": "0.150.0",
- "@codesee/tracker": "0.150.0",
+ "@codesee/babel-plugin-instrument": "0.151.0",
+ "@codesee/tracker": "0.151.0",
"@testing-library/jest-dom": "5.16.1",
"@testing-library/react": "12.1.2",
"autoprefixer": "10.4.0",
@@ -2622,9 +2622,9 @@
}
},
"node_modules/@codesee/babel-plugin-instrument": {
- "version": "0.150.0",
- "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.150.0.tgz",
- "integrity": "sha512-OKLo86DsXEDflhM7x9gOMIHc3VsnCA/cO6kTM6elopU2dogw0gIKHTNZXDf7ivZA0nbVKNbfXDujyLsOHCF/yA==",
+ "version": "0.151.0",
+ "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.151.0.tgz",
+ "integrity": "sha512-OXHWk51nm1T9goEhmil5HuVxL2Ao21C5aqQ+bopB1fmw/OQ5dWeeoUunqdoEzX6BcI+k4b7UlHbF4n0fvvHwVQ==",
"dev": true,
"dependencies": {
"@babel/plugin-syntax-jsx": "^7.12.13",
@@ -2639,9 +2639,9 @@
}
},
"node_modules/@codesee/tracker": {
- "version": "0.150.0",
- "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.150.0.tgz",
- "integrity": "sha512-dUjhKrAMTd7ViW1PifGJHe6golDUAK8X9z+/6L6NR3/Sc8s0xzDo8WtXGxvYkbvIb6GG+r/XEB8XJ+NnejjBng==",
+ "version": "0.151.0",
+ "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.151.0.tgz",
+ "integrity": "sha512-MpStnd0Tr2FE6eEBmACKPK25TVDbxOBUk9gT1q7ISwjgI+tx8EJMUgt+HnQVPDmc4M2MklFN34bFMWCm4u+3NQ==",
"dev": true
},
"node_modules/@cspotcode/source-map-consumer": {
@@ -57122,9 +57122,9 @@
}
},
"@codesee/babel-plugin-instrument": {
- "version": "0.150.0",
- "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.150.0.tgz",
- "integrity": "sha512-OKLo86DsXEDflhM7x9gOMIHc3VsnCA/cO6kTM6elopU2dogw0gIKHTNZXDf7ivZA0nbVKNbfXDujyLsOHCF/yA==",
+ "version": "0.151.0",
+ "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.151.0.tgz",
+ "integrity": "sha512-OXHWk51nm1T9goEhmil5HuVxL2Ao21C5aqQ+bopB1fmw/OQ5dWeeoUunqdoEzX6BcI+k4b7UlHbF4n0fvvHwVQ==",
"dev": true,
"requires": {
"@babel/plugin-syntax-jsx": "^7.12.13",
@@ -57136,9 +57136,9 @@
}
},
"@codesee/tracker": {
- "version": "0.150.0",
- "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.150.0.tgz",
- "integrity": "sha512-dUjhKrAMTd7ViW1PifGJHe6golDUAK8X9z+/6L6NR3/Sc8s0xzDo8WtXGxvYkbvIb6GG+r/XEB8XJ+NnejjBng==",
+ "version": "0.151.0",
+ "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.151.0.tgz",
+ "integrity": "sha512-MpStnd0Tr2FE6eEBmACKPK25TVDbxOBUk9gT1q7ISwjgI+tx8EJMUgt+HnQVPDmc4M2MklFN34bFMWCm4u+3NQ==",
"dev": true
},
"@cspotcode/source-map-consumer": {
@@ -57693,8 +57693,8 @@
"@babel/preset-react": "7.16.5",
"@babel/standalone": "7.16.6",
"@babel/types": "7.16.0",
- "@codesee/babel-plugin-instrument": "0.150.0",
- "@codesee/tracker": "0.150.0",
+ "@codesee/babel-plugin-instrument": "0.151.0",
+ "@codesee/tracker": "0.151.0",
"@fortawesome/fontawesome": "1.1.8",
"@fortawesome/fontawesome-svg-core": "1.2.36",
"@fortawesome/free-brands-svg-icons": "5.15.4",
From 5e0ebe1b57fca270989705f608bc3dbaaec8e75d Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Wed, 15 Dec 2021 08:23:50 +0000
Subject: [PATCH 44/63] fix(deps): update dependency @stripe/react-stripe-js to
v1.7.0
---
client/package.json | 2 +-
package-lock.json | 18 +++++++++---------
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/client/package.json b/client/package.json
index df2ec47b65..07da2ee267 100644
--- a/client/package.json
+++ b/client/package.json
@@ -50,7 +50,7 @@
"@freecodecamp/strip-comments": "3.0.1",
"@loadable/component": "5.15.2",
"@reach/router": "1.3.4",
- "@stripe/react-stripe-js": "1.6.0",
+ "@stripe/react-stripe-js": "1.7.0",
"@stripe/stripe-js": "1.22.0",
"@types/react-scrollable-anchor": "0.6.1",
"algoliasearch": "4.11.0",
diff --git a/package-lock.json b/package-lock.json
index c3f3af1ba0..b71a32734d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -218,7 +218,7 @@
"@freecodecamp/strip-comments": "3.0.1",
"@loadable/component": "5.15.2",
"@reach/router": "1.3.4",
- "@stripe/react-stripe-js": "1.6.0",
+ "@stripe/react-stripe-js": "1.7.0",
"@stripe/stripe-js": "1.22.0",
"@types/react-scrollable-anchor": "0.6.1",
"algoliasearch": "4.11.0",
@@ -14003,14 +14003,14 @@
}
},
"node_modules/@stripe/react-stripe-js": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-1.6.0.tgz",
- "integrity": "sha512-tMmsPD+wkpiiVJZgQ1E06tklG5MZHG462s6OWja9abpxq76kerAxMFN+KdhUg0LIEY79THbzvH3s/WGHasnV3w==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-1.7.0.tgz",
+ "integrity": "sha512-L20v8Jq0TDZFL2+y+uXD751t6q9SalSFkSYZpmZ2VWrGZGK7HAGfRQ804dzYSSr5fGenW6iz6y7U0YKfC/TK3g==",
"dependencies": {
"prop-types": "^15.7.2"
},
"peerDependencies": {
- "@stripe/stripe-js": "^1.19.1",
+ "@stripe/stripe-js": "^1.20.3",
"react": "^16.8.0 || ^17.0.0",
"react-dom": "^16.8.0 || ^17.0.0"
}
@@ -57706,7 +57706,7 @@
"@freecodecamp/strip-comments": "3.0.1",
"@loadable/component": "5.15.2",
"@reach/router": "1.3.4",
- "@stripe/react-stripe-js": "1.6.0",
+ "@stripe/react-stripe-js": "1.7.0",
"@stripe/stripe-js": "1.22.0",
"@testing-library/jest-dom": "5.16.1",
"@testing-library/react": "12.1.2",
@@ -66559,9 +66559,9 @@
}
},
"@stripe/react-stripe-js": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-1.6.0.tgz",
- "integrity": "sha512-tMmsPD+wkpiiVJZgQ1E06tklG5MZHG462s6OWja9abpxq76kerAxMFN+KdhUg0LIEY79THbzvH3s/WGHasnV3w==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-1.7.0.tgz",
+ "integrity": "sha512-L20v8Jq0TDZFL2+y+uXD751t6q9SalSFkSYZpmZ2VWrGZGK7HAGfRQ804dzYSSr5fGenW6iz6y7U0YKfC/TK3g==",
"requires": {
"prop-types": "^15.7.2"
}
From 62071589d347235e027c051f9423ee8fcc7e0af1 Mon Sep 17 00:00:00 2001
From: camperbot
Date: Wed, 15 Dec 2021 18:14:14 +0530
Subject: [PATCH 45/63] chore(i18n,learn): update translations (#44506)
---
client/i18n/locales/chinese-traditional/translations.json | 3 +--
client/i18n/locales/chinese/translations.json | 3 +--
client/i18n/locales/espanol/translations.json | 3 +--
client/i18n/locales/italian/translations.json | 3 +--
client/i18n/locales/portuguese/translations.json | 3 +--
client/i18n/locales/ukrainian/translations.json | 3 +--
6 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/client/i18n/locales/chinese-traditional/translations.json b/client/i18n/locales/chinese-traditional/translations.json
index 1d22ecfe0f..d3fc105fcf 100644
--- a/client/i18n/locales/chinese-traditional/translations.json
+++ b/client/i18n/locales/chinese-traditional/translations.json
@@ -216,8 +216,7 @@
"tax-exempt-status": "freeCodeCamp 是捐助者支持的 501(c)(3) 條款下具有免稅資格的非營利性組織(稅號:82-0779546)。",
"mission-statement": "我們的使命:幫助人們免費學習編程。我們通過創建成千上萬的視頻、文章和交互式編程課程——所有內容向公衆免費開放——來實現這一目標。學員在世界各地自發成立數千個 freeCodeCamp 學習小組。",
"donation-initiatives": "所有給 freeCodeCamp 的捐款都將用於我們的教育項目,購買服務器和其他服務,以及聘用員工。",
- "donate-text": "你可以",
- "donate-link": "點擊此處免稅捐款",
+ "donate-text": "You can <1>make a tax-deductible donation here1>.",
"trending-guides": "精選文章",
"our-nonprofit": "關於我們",
"links": {
diff --git a/client/i18n/locales/chinese/translations.json b/client/i18n/locales/chinese/translations.json
index 5a69a0b669..028b28d2ae 100644
--- a/client/i18n/locales/chinese/translations.json
+++ b/client/i18n/locales/chinese/translations.json
@@ -216,8 +216,7 @@
"tax-exempt-status": "freeCodeCamp 是捐助者支持的 501(c)(3) 条款下具有免税资格的非营利性组织(税号:82-0779546)。",
"mission-statement": "我们的使命:帮助人们免费学习编程。我们通过创建成千上万的视频、文章和交互式编程课程——所有内容向公众免费开放——来实现这一目标。学员在世界各地自发成立数千个 freeCodeCamp 学习小组。",
"donation-initiatives": "所有给 freeCodeCamp 的捐款都将用于我们的教育项目,购买服务器和其他服务,以及聘用员工。",
- "donate-text": "你可以",
- "donate-link": "点击此处免税捐款",
+ "donate-text": "You can <1>make a tax-deductible donation here1>.",
"trending-guides": "精选文章",
"our-nonprofit": "关于我们",
"links": {
diff --git a/client/i18n/locales/espanol/translations.json b/client/i18n/locales/espanol/translations.json
index 420476963b..2cc4c51a37 100644
--- a/client/i18n/locales/espanol/translations.json
+++ b/client/i18n/locales/espanol/translations.json
@@ -216,8 +216,7 @@
"tax-exempt-status": "freeCodeCamp es una organización sin fines de lucro exenta de impuestos 501(c)(3) respaldada por donantes (Número de identificación fiscal federal de los Estados Unidos: 82-0779546)",
"mission-statement": "Nuestra misión: ayudar a las personas a aprender a programar de forma gratuita. Logramos esto mediante la creación de miles de videos, artículos y lecciones de programación interactivas, todos disponibles gratuitamente para el público. También tenemos miles de grupos de estudio de FreeCodeCamp en todo el mundo.",
"donation-initiatives": "Las donaciones a freeCodeCamp se destinan a nuestras iniciativas educativas y ayudan a pagar los servidores, los servicios y el personal.",
- "donate-text": "Tú puedes",
- "donate-link": "hacer una donación deducible de impuestos aquí",
+ "donate-text": "You can <1>make a tax-deductible donation here1>.",
"trending-guides": "Guías de tendencias",
"our-nonprofit": "Nuestra organización sin fines de lucro",
"links": {
diff --git a/client/i18n/locales/italian/translations.json b/client/i18n/locales/italian/translations.json
index ba73174cdc..725694d815 100644
--- a/client/i18n/locales/italian/translations.json
+++ b/client/i18n/locales/italian/translations.json
@@ -216,8 +216,7 @@
"tax-exempt-status": "freeCodeCamp è un'organizzazione senza scopo di lucro (United States Federal Tax Identification Number: 82-0779546)",
"mission-statement": "La nostra missione: aiutare le persone a imparare a programmare gratuitamente. Lo facciamo creando migliaia di video, articoli e lezioni di programmazione interattive - tutti liberamente disponibili al pubblico. Abbiamo anche migliaia di gruppi di studio freeCodeCamp in tutto il mondo.",
"donation-initiatives": "Le donazioni a freeCodeCamp vanno alle nostre iniziative educative e aiutano a pagare i server, i servizi e il personale.",
- "donate-text": "Puoi",
- "donate-link": "fare una donazione deducibile dalle tasse qui",
+ "donate-text": "You can <1>make a tax-deductible donation here1>.",
"trending-guides": "Guide Di Tendenza",
"our-nonprofit": "Il nostro nonprofit",
"links": {
diff --git a/client/i18n/locales/portuguese/translations.json b/client/i18n/locales/portuguese/translations.json
index aa45f39e07..1d2828507a 100644
--- a/client/i18n/locales/portuguese/translations.json
+++ b/client/i18n/locales/portuguese/translations.json
@@ -216,8 +216,7 @@
"tax-exempt-status": "O freeCodeCamp é uma organização sem fins lucrativos apoiada por doadores e isenta de impostos 501(c)(3) (Número de identificação fiscal federal dos Estados Unidos: 82-0779546)",
"mission-statement": "Nossa missão: ajudar as pessoas a aprender a programar de graça. Nós conseguimos isso através da criação de milhares de vídeos, artigos e aulas interativas de programação – tudo disponível gratuitamente para o público. Também temos milhares de grupos de estudo do freeCodeCamp espalhados por todo o mundo.",
"donation-initiatives": "Doações para o freeCodeCamp vão para as nossas iniciativas educacionais e ajudam a pagar por servidores, serviços e equipe.",
- "donate-text": "Você pode",
- "donate-link": "fazer uma doação dedutível de impostos aqui",
+ "donate-text": "You can <1>make a tax-deductible donation here1>.",
"trending-guides": "Guias em alta",
"our-nonprofit": "Nossa organização sem fins lucrativos",
"links": {
diff --git a/client/i18n/locales/ukrainian/translations.json b/client/i18n/locales/ukrainian/translations.json
index 11a65778fe..38ecbb0410 100644
--- a/client/i18n/locales/ukrainian/translations.json
+++ b/client/i18n/locales/ukrainian/translations.json
@@ -216,8 +216,7 @@
"tax-exempt-status": "freeCodeCamp — це некомерційна організація, яка підтримується спонсорськими внесками та звільнена від сплати податків 501(c)(3) (Федеральний ідентифікаційний номер платника податків США: 82-0779546)",
"mission-statement": "Ми хочемо допомогти людям безкоштовно навчитися програмувати. Ми досягаємо цього, створюючи тисячі відео, статей та інтерактивних уроків з програмування — вони усі доступні для широкого загалу. Також ми маємо тисячі безплатний навчальних груп freeCodeCamp у всьому світі.",
"donation-initiatives": "Внески до freeCodeCamp йдуть на наші освітні програми та допомагають оплачувати сервери, послуги та персонал.",
- "donate-text": "Ви можете",
- "donate-link": "зробити внесок, що не підлягає оподаткуванню, тут",
+ "donate-text": "You can <1>make a tax-deductible donation here1>.",
"trending-guides": "Популярні статті",
"our-nonprofit": "Наша неприбуткова організація",
"links": {
From 580a51f7a7e4ac7e5230202b867f71875f016a44 Mon Sep 17 00:00:00 2001
From: Tom <20648924+moT01@users.noreply.github.com>
Date: Wed, 15 Dec 2021 07:52:44 -0600
Subject: [PATCH 46/63] fix: simplify mobile layout tabs (#44431)
* fix: simplify mobile layout tabs
Co-authored-by: Oliver Eyton-Williams
Co-authored-by: Oliver Eyton-Williams
---
client/gatsby-node.js | 1 +
client/src/redux/prop-types.ts | 1 +
.../Challenges/classic/mobile-layout.tsx | 67 ++++++++++---------
.../src/templates/Challenges/classic/show.tsx | 15 ++---
.../Challenges/redux/action-types.js | 2 -
.../src/templates/Challenges/redux/index.js | 6 --
.../_meta/basic-javascript-rpg-game/meta.json | 1 +
.../challenges/_meta/d3-dashboard/meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
.../meta.json | 1 +
curriculum/getChallenges.js | 2 +
curriculum/schema/challengeSchema.js | 1 +
tools/challenge-helper-scripts/base-meta.json | 1 +
25 files changed, 60 insertions(+), 52 deletions(-)
diff --git a/client/gatsby-node.js b/client/gatsby-node.js
index 6fa003143a..1a895117d2 100644
--- a/client/gatsby-node.js
+++ b/client/gatsby-node.js
@@ -80,6 +80,7 @@ exports.createPages = function createPages({ graphql, actions, reporter }) {
fields {
slug
}
+ hasEditableBoundaries
id
order
required {
diff --git a/client/src/redux/prop-types.ts b/client/src/redux/prop-types.ts
index 30a7c41260..18a60b8b77 100644
--- a/client/src/redux/prop-types.ts
+++ b/client/src/redux/prop-types.ts
@@ -139,6 +139,7 @@ export type ChallengeNode = {
forumTopicId: number;
guideUrl: string;
head: string[];
+ hasEditableBoundaries: boolean;
helpCategory: string;
id: string;
instructions: string;
diff --git a/client/src/templates/Challenges/classic/mobile-layout.tsx b/client/src/templates/Challenges/classic/mobile-layout.tsx
index 7c1881e76d..f3c41fc9cd 100644
--- a/client/src/templates/Challenges/classic/mobile-layout.tsx
+++ b/client/src/templates/Challenges/classic/mobile-layout.tsx
@@ -1,52 +1,55 @@
import { TabPane, Tabs } from '@freecodecamp/react-bootstrap';
import i18next from 'i18next';
import React, { Component, ReactElement } from 'react';
-import { connect } from 'react-redux';
-import { bindActionCreators, Dispatch } from 'redux';
-import { createStructuredSelector } from 'reselect';
import envData from '../../../../../config/env.json';
import ToolPanel from '../components/tool-panel';
-import { currentTabSelector, moveToTab } from '../redux';
import EditorTabs from './editor-tabs';
const { showUpcomingChanges } = envData;
-const mapStateToProps = createStructuredSelector({
- currentTab: currentTabSelector as (state: unknown) => number
-});
-
-const mapDispatchToProps = (dispatch: Dispatch) =>
- bindActionCreators(
- {
- moveToTab
- },
- dispatch
- );
interface MobileLayoutProps {
- currentTab: number;
editor: JSX.Element | null;
guideUrl: string;
hasEditableBoundaries: boolean;
hasNotes: boolean;
hasPreview: boolean;
instructions: JSX.Element;
- moveToTab: typeof moveToTab;
notes: ReactElement;
preview: JSX.Element;
testOutput: JSX.Element;
videoUrl: string;
usesMultifileEditor: boolean;
}
-class MobileLayout extends Component {
+
+enum Tab {
+ Editor = 'editor',
+ Preview = 'preview',
+ Console = 'console',
+ Notes = 'notes',
+ Instructions = 'instructions'
+}
+
+interface MobileLayoutState {
+ currentTab: Tab;
+}
+
+class MobileLayout extends Component {
static displayName: string;
- componentDidMount() {
- if (this.props.currentTab !== 1) this.props.moveToTab(1);
- }
+
+ state: MobileLayoutState = {
+ currentTab: this.props.hasEditableBoundaries ? Tab.Editor : Tab.Instructions
+ };
+
+ switchTab = (tab: Tab) => {
+ this.setState({
+ currentTab: tab
+ });
+ };
+
render() {
+ const { currentTab } = this.state;
const {
- currentTab,
- moveToTab,
hasEditableBoundaries,
instructions,
editor,
@@ -69,26 +72,24 @@ class MobileLayout extends Component {
// but still needs a way to switch between the different tabs.
const projectBasedChallenge = showUpcomingChanges && usesMultifileEditor;
- const eventKeys = [1, 2, 3, 4, 5];
-
return (
<>
{!hasEditableBoundaries && (
{instructions}
)}
@@ -96,7 +97,7 @@ class MobileLayout extends Component {
{editor}
@@ -104,7 +105,7 @@ class MobileLayout extends Component {
{hasNotes && projectBasedChallenge && (
{notes}
@@ -112,7 +113,7 @@ class MobileLayout extends Component {
)}
{hasPreview && (
{preview}
@@ -127,4 +128,4 @@ class MobileLayout extends Component {
MobileLayout.displayName = 'MobileLayout';
-export default connect(mapStateToProps, mapDispatchToProps)(MobileLayout);
+export default MobileLayout;
diff --git a/client/src/templates/Challenges/classic/show.tsx b/client/src/templates/Challenges/classic/show.tsx
index 8e3ec4b5d8..960a6469e2 100644
--- a/client/src/templates/Challenges/classic/show.tsx
+++ b/client/src/templates/Challenges/classic/show.tsx
@@ -398,20 +398,12 @@ class ShowClassic extends Component {
);
}
- hasEditableBoundaries() {
- const { challengeFiles } = this.props;
- return (
- challengeFiles?.some(
- challengeFile => challengeFile.editableRegionBoundaries?.length === 2
- ) ?? false
- );
- }
-
render() {
const {
block,
fields: { blockName },
forumTopicId,
+ hasEditableBoundaries,
superBlock,
title,
usesMultifileEditor,
@@ -443,7 +435,7 @@ class ShowClassic extends Component {
{
block={block}
challengeFiles={challengeFiles}
editor={this.renderEditor()}
- hasEditableBoundaries={this.hasEditableBoundaries()}
+ hasEditableBoundaries={hasEditableBoundaries}
hasNotes={!!notes}
hasPreview={this.hasPreview()}
instructions={this.renderInstructionsPanel({
@@ -504,6 +496,7 @@ export const query = graphql`
block
title
description
+ hasEditableBoundaries
instructions
notes
removeComments
diff --git a/client/src/templates/Challenges/redux/action-types.js b/client/src/templates/Challenges/redux/action-types.js
index 5b37a40cfc..d7488e90b0 100644
--- a/client/src/templates/Challenges/redux/action-types.js
+++ b/client/src/templates/Challenges/redux/action-types.js
@@ -40,8 +40,6 @@ export const actionTypes = createTypes(
'stopResetting',
'submitChallenge',
- 'moveToTab',
-
'setEditorFocusability',
'toggleVisibleEditor'
],
diff --git a/client/src/templates/Challenges/redux/index.js b/client/src/templates/Challenges/redux/index.js
index 28d80012cf..7577a902f0 100644
--- a/client/src/templates/Challenges/redux/index.js
+++ b/client/src/templates/Challenges/redux/index.js
@@ -120,8 +120,6 @@ export const resetChallenge = createAction(actionTypes.resetChallenge);
export const stopResetting = createAction(actionTypes.stopResetting);
export const submitChallenge = createAction(actionTypes.submitChallenge);
-export const moveToTab = createAction(actionTypes.moveToTab);
-
export const setEditorFocusability = createAction(
actionTypes.setEditorFocusability
);
@@ -344,10 +342,6 @@ export const reducer = handleActions(
[payload]: true
}
}),
- [actionTypes.moveToTab]: (state, { payload }) => ({
- ...state,
- currentTab: payload
- }),
[actionTypes.executeChallenge]: state => ({
...state,
currentTab: 3
diff --git a/curriculum/challenges/_meta/basic-javascript-rpg-game/meta.json b/curriculum/challenges/_meta/basic-javascript-rpg-game/meta.json
index 2ac4f74265..f8df0d0480 100644
--- a/curriculum/challenges/_meta/basic-javascript-rpg-game/meta.json
+++ b/curriculum/challenges/_meta/basic-javascript-rpg-game/meta.json
@@ -2,6 +2,7 @@
"name": "Basic JavaScript RPG Game",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "basic-javascript-rpg-game",
"order": 10,
"time": "2 hours",
diff --git a/curriculum/challenges/_meta/d3-dashboard/meta.json b/curriculum/challenges/_meta/d3-dashboard/meta.json
index c6752b0923..f9f5c6e26b 100644
--- a/curriculum/challenges/_meta/d3-dashboard/meta.json
+++ b/curriculum/challenges/_meta/d3-dashboard/meta.json
@@ -2,6 +2,7 @@
"name": "D3 Dashboard",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "d3-dashboard",
"order": 3,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/functional-programming-spreadsheet/meta.json b/curriculum/challenges/_meta/functional-programming-spreadsheet/meta.json
index b8bbc2ee29..87a0f9be04 100644
--- a/curriculum/challenges/_meta/functional-programming-spreadsheet/meta.json
+++ b/curriculum/challenges/_meta/functional-programming-spreadsheet/meta.json
@@ -2,6 +2,7 @@
"name": "Functional Programming Spreadsheet",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "functional-programming-spreadsheet",
"order": 12,
"time": "2 hours",
diff --git a/curriculum/challenges/_meta/intermediate-javascript-calorie-counter/meta.json b/curriculum/challenges/_meta/intermediate-javascript-calorie-counter/meta.json
index 107e7d616d..e5f984a42f 100644
--- a/curriculum/challenges/_meta/intermediate-javascript-calorie-counter/meta.json
+++ b/curriculum/challenges/_meta/intermediate-javascript-calorie-counter/meta.json
@@ -2,6 +2,7 @@
"name": "Intermediate JavaScript Calorie Counter",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "intermediate-javascript-calorie-counter",
"order": 11,
"time": "2 hours",
diff --git a/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json b/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json
index b98701ffe6..94f2af52a0 100644
--- a/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json
+++ b/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json
@@ -2,6 +2,7 @@
"name": "Learn Accessibility by Building a Quiz",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-accessibility-by-building-a-quiz",
"order": 42,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json b/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json
index 7a139f3401..cd14d49c3c 100644
--- a/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json
+++ b/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json
@@ -2,6 +2,7 @@
"name": "Learn Basic CSS by Building a Cafe Menu",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-basic-css-by-building-a-cafe-menu",
"order": 10,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json b/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json
index 131d23f3f9..ef7dce0f88 100644
--- a/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json
+++ b/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json
@@ -2,6 +2,7 @@
"name": "Learn CSS Animation by Building a Ferris Wheel",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-css-animation-by-building-a-ferris-wheel",
"order": 15,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json b/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json
index 42a800df5b..a7ba45ac9f 100644
--- a/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json
+++ b/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json
@@ -2,6 +2,7 @@
"name": "Learn CSS Flexbox by Building a Photo Gallery",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-css-flexbox-by-building-a-photo-gallery",
"order": 20,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json b/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json
index 4ae209c001..ad45376cbd 100644
--- a/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json
+++ b/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json
@@ -2,6 +2,7 @@
"name": "Learn CSS Grid by Building a Magazine",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-css-grid-by-building-a-magazine",
"order": 16,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json b/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json
index 409c39852e..d5664a9f1b 100644
--- a/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json
+++ b/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json
@@ -2,6 +2,7 @@
"name": "Learn CSS Variables by Building a City Skyline",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-css-variables-by-building-a-city-skyline",
"order": 8,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json b/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json
index 7128761f4f..99224535d4 100644
--- a/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json
+++ b/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json
@@ -2,6 +2,7 @@
"name": "Learn HTML by Building a Cat Photo App",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-html-by-building-a-cat-photo-app",
"order": 9,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json b/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json
index 56bdb3b3a8..421039d201 100644
--- a/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json
+++ b/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json
@@ -2,6 +2,7 @@
"name": "Learn HTML Forms by Building a Registration Form",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-html-forms-by-building-a-registration-form",
"order": 23,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json b/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json
index 89866e64fe..cd78d87636 100644
--- a/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json
+++ b/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json
@@ -2,6 +2,7 @@
"name": "Learn Intermediate CSS by Building a Picasso Painting",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-intermediate-css-by-building-a-picasso-painting",
"order": 11,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json b/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json
index ea91978a79..34c32833f4 100644
--- a/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json
+++ b/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json
@@ -2,6 +2,7 @@
"name": "Learn Responsive Web Design by Building a Piano",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-responsive-web-design-by-building-a-piano",
"order": 13,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json b/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json
index ee18cc9481..fd2d01c46c 100644
--- a/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json
+++ b/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json
@@ -2,6 +2,7 @@
"name": "Learn the CSS Box Model by Building a Rothko Painting",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-the-css-box-model-by-building-a-rothko-painting",
"order": 12,
"time": "5 hours",
diff --git a/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json b/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json
index 323a4f00bc..7fac00490f 100644
--- a/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json
+++ b/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json
@@ -2,6 +2,7 @@
"name": "Learn Typography by Building a Nutrition Label",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-typography-by-building-a-nutrition-label",
"order": 25,
"time": "5 hours",
diff --git a/curriculum/getChallenges.js b/curriculum/getChallenges.js
index 7d254af58f..fe5fa8d464 100644
--- a/curriculum/getChallenges.js
+++ b/curriculum/getChallenges.js
@@ -296,6 +296,7 @@ ${getFullPath('english')}
);
const {
name: blockName,
+ hasEditableBoundaries,
order,
isPrivate,
required = [],
@@ -304,6 +305,7 @@ ${getFullPath('english')}
usesMultifileEditor
} = meta;
challenge.block = dasherize(blockName);
+ challenge.hasEditableBoundaries = !!hasEditableBoundaries;
challenge.order = order;
const superOrder = getSuperOrder(superBlock);
if (superOrder !== null) challenge.superOrder = superOrder;
diff --git a/curriculum/schema/challengeSchema.js b/curriculum/schema/challengeSchema.js
index a086146c1c..4c34a59265 100644
--- a/curriculum/schema/challengeSchema.js
+++ b/curriculum/schema/challengeSchema.js
@@ -39,6 +39,7 @@ const schema = Joi.object()
}),
challengeFiles: Joi.array().items(fileJoi),
guideUrl: Joi.string().uri({ scheme: 'https' }),
+ hasEditableBoundaries: Joi.boolean(),
helpCategory: Joi.valid(
'JavaScript',
'HTML-CSS',
diff --git a/tools/challenge-helper-scripts/base-meta.json b/tools/challenge-helper-scripts/base-meta.json
index 281a91cbce..6e6c2486dd 100644
--- a/tools/challenge-helper-scripts/base-meta.json
+++ b/tools/challenge-helper-scripts/base-meta.json
@@ -2,6 +2,7 @@
"name": "",
"isUpcomingChange": true,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "",
"order": 42,
"time": "5 hours",
From 5a8efaf4a44858ecbe12ad3603aba44b75c76e35 Mon Sep 17 00:00:00 2001
From: Ahmad Abdolsaheb
Date: Wed, 15 Dec 2021 22:43:26 +0300
Subject: [PATCH 47/63] feat: show card to signed in users (#44509)
---
client/src/components/Donation/donate-form.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/src/components/Donation/donate-form.tsx b/client/src/components/Donation/donate-form.tsx
index 58f5f6d90a..e0baae0c0c 100644
--- a/client/src/components/Donation/donate-form.tsx
+++ b/client/src/components/Donation/donate-form.tsx
@@ -324,7 +324,7 @@ class DonateForm extends Component {
isOneTime ? 'donate.wallet-label' : 'donate.wallet-label-1',
{ usd: donationAmount / 100 }
)}:`;
- const showMinimalPayments = isMinimalForm || !isDonating;
+ const showMinimalPayments = isSignedIn && (isMinimalForm || !isDonating);
return (
<>
From 4051b76c60f3baccc37a17c61a6bc833348a87dd Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Wed, 15 Dec 2021 22:40:53 +0000
Subject: [PATCH 48/63] chore(deps): update dependency @types/node to v16.11.14
---
package-lock.json | 14 +++++++-------
package.json | 2 +-
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index b71a32734d..26c117322a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -46,7 +46,7 @@
"@types/jquery": "3.5.10",
"@types/loadable__component": "5.13.4",
"@types/lodash-es": "4.17.5",
- "@types/node": "16.11.13",
+ "@types/node": "16.11.14",
"@types/prismjs": "1.16.6",
"@types/psl": "1.1.0",
"@types/reach__router": "1.3.9",
@@ -14899,9 +14899,9 @@
"integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
},
"node_modules/@types/node": {
- "version": "16.11.13",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.13.tgz",
- "integrity": "sha512-eUXZzHLHoZqj1frtUetNkUetYoJ6X55UmrVnFD4DMhVeAmwLjniZhtBmsRiemQh4uq4G3vUra/Ws/hs9vEvL3Q=="
+ "version": "16.11.14",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.14.tgz",
+ "integrity": "sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw=="
},
"node_modules/@types/node-fetch": {
"version": "2.5.12",
@@ -67345,9 +67345,9 @@
"integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
},
"@types/node": {
- "version": "16.11.13",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.13.tgz",
- "integrity": "sha512-eUXZzHLHoZqj1frtUetNkUetYoJ6X55UmrVnFD4DMhVeAmwLjniZhtBmsRiemQh4uq4G3vUra/Ws/hs9vEvL3Q=="
+ "version": "16.11.14",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.14.tgz",
+ "integrity": "sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw=="
},
"@types/node-fetch": {
"version": "2.5.12",
diff --git a/package.json b/package.json
index 0db8a38192..36a682b378 100644
--- a/package.json
+++ b/package.json
@@ -121,7 +121,7 @@
"@types/jquery": "3.5.10",
"@types/loadable__component": "5.13.4",
"@types/lodash-es": "4.17.5",
- "@types/node": "16.11.13",
+ "@types/node": "16.11.14",
"@types/prismjs": "1.16.6",
"@types/psl": "1.1.0",
"@types/reach__router": "1.3.9",
From 1605dbb21fa6fb9fe91fc57da0044162e6b5fd93 Mon Sep 17 00:00:00 2001
From: Tom <20648924+moT01@users.noreply.github.com>
Date: Wed, 15 Dec 2021 19:14:21 -0600
Subject: [PATCH 49/63] fix: grammar in private profile flash message (#44510)
---
client/i18n/locales/english/translations.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/i18n/locales/english/translations.json b/client/i18n/locales/english/translations.json
index 3a0bbc5ff3..aeeb29790e 100644
--- a/client/i18n/locales/english/translations.json
+++ b/client/i18n/locales/english/translations.json
@@ -462,7 +462,7 @@
"username-not-found": "We could not find a user with the username \"{{username}}\"",
"add-name": "This user needs to add their name to their account in order for others to be able to view their certification.",
"not-eligible": "This user is not eligible for freeCodeCamp.org certifications at this time.",
- "profile-private": "{{username}} has chosen to make their portfolio private. They will need to make their portfolio public in order for others to be able to view their certification.",
+ "profile-private": "{{username}} has chosen to make their profile private. They will need to make their profile public in order for others to be able to view their certification.",
"certs-private": "{{username}} has chosen to make their certifications private. They will need to make their certifications public in order for others to be able to view them.",
"not-honest": "{{username}} has not yet agreed to our Academic Honesty Pledge.",
"user-not-certified": "It looks like user {{username}} is not {{cert}} certified",
From 3355487dcbf5b0fd4955addecdeb780a342f65fb Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Thu, 16 Dec 2021 02:50:19 +0000
Subject: [PATCH 50/63] chore(deps): update codesee to v0.152.0
---
client/package.json | 4 ++--
package-lock.json | 32 ++++++++++++++++----------------
2 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/client/package.json b/client/package.json
index 07da2ee267..0beb51edd6 100644
--- a/client/package.json
+++ b/client/package.json
@@ -129,8 +129,8 @@
},
"devDependencies": {
"@babel/types": "7.16.0",
- "@codesee/babel-plugin-instrument": "0.151.0",
- "@codesee/tracker": "0.151.0",
+ "@codesee/babel-plugin-instrument": "0.152.0",
+ "@codesee/tracker": "0.152.0",
"@testing-library/jest-dom": "5.16.1",
"@testing-library/react": "12.1.2",
"autoprefixer": "10.4.0",
diff --git a/package-lock.json b/package-lock.json
index 26c117322a..34ef3e9488 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -297,8 +297,8 @@
},
"devDependencies": {
"@babel/types": "7.16.0",
- "@codesee/babel-plugin-instrument": "0.151.0",
- "@codesee/tracker": "0.151.0",
+ "@codesee/babel-plugin-instrument": "0.152.0",
+ "@codesee/tracker": "0.152.0",
"@testing-library/jest-dom": "5.16.1",
"@testing-library/react": "12.1.2",
"autoprefixer": "10.4.0",
@@ -2622,9 +2622,9 @@
}
},
"node_modules/@codesee/babel-plugin-instrument": {
- "version": "0.151.0",
- "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.151.0.tgz",
- "integrity": "sha512-OXHWk51nm1T9goEhmil5HuVxL2Ao21C5aqQ+bopB1fmw/OQ5dWeeoUunqdoEzX6BcI+k4b7UlHbF4n0fvvHwVQ==",
+ "version": "0.152.0",
+ "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.152.0.tgz",
+ "integrity": "sha512-QhiBbGB6j7nZ16bvlasXJ6GNKm2cDZp9ymGnSTPdt1qbj8+iH/fiE1YeXYSUXKZtTfPefXgyYtRfSTMizb+c0Q==",
"dev": true,
"dependencies": {
"@babel/plugin-syntax-jsx": "^7.12.13",
@@ -2639,9 +2639,9 @@
}
},
"node_modules/@codesee/tracker": {
- "version": "0.151.0",
- "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.151.0.tgz",
- "integrity": "sha512-MpStnd0Tr2FE6eEBmACKPK25TVDbxOBUk9gT1q7ISwjgI+tx8EJMUgt+HnQVPDmc4M2MklFN34bFMWCm4u+3NQ==",
+ "version": "0.152.0",
+ "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.152.0.tgz",
+ "integrity": "sha512-M9qgeZO1bdEmHLQI8/TZD6IJrvYul5VZsKjAejT1Hg/LY1s/zJrq4Jz6Y6eagSqYFhcmAMyefwhIKzF8mQGmZg==",
"dev": true
},
"node_modules/@cspotcode/source-map-consumer": {
@@ -57122,9 +57122,9 @@
}
},
"@codesee/babel-plugin-instrument": {
- "version": "0.151.0",
- "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.151.0.tgz",
- "integrity": "sha512-OXHWk51nm1T9goEhmil5HuVxL2Ao21C5aqQ+bopB1fmw/OQ5dWeeoUunqdoEzX6BcI+k4b7UlHbF4n0fvvHwVQ==",
+ "version": "0.152.0",
+ "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.152.0.tgz",
+ "integrity": "sha512-QhiBbGB6j7nZ16bvlasXJ6GNKm2cDZp9ymGnSTPdt1qbj8+iH/fiE1YeXYSUXKZtTfPefXgyYtRfSTMizb+c0Q==",
"dev": true,
"requires": {
"@babel/plugin-syntax-jsx": "^7.12.13",
@@ -57136,9 +57136,9 @@
}
},
"@codesee/tracker": {
- "version": "0.151.0",
- "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.151.0.tgz",
- "integrity": "sha512-MpStnd0Tr2FE6eEBmACKPK25TVDbxOBUk9gT1q7ISwjgI+tx8EJMUgt+HnQVPDmc4M2MklFN34bFMWCm4u+3NQ==",
+ "version": "0.152.0",
+ "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.152.0.tgz",
+ "integrity": "sha512-M9qgeZO1bdEmHLQI8/TZD6IJrvYul5VZsKjAejT1Hg/LY1s/zJrq4Jz6Y6eagSqYFhcmAMyefwhIKzF8mQGmZg==",
"dev": true
},
"@cspotcode/source-map-consumer": {
@@ -57693,8 +57693,8 @@
"@babel/preset-react": "7.16.5",
"@babel/standalone": "7.16.6",
"@babel/types": "7.16.0",
- "@codesee/babel-plugin-instrument": "0.151.0",
- "@codesee/tracker": "0.151.0",
+ "@codesee/babel-plugin-instrument": "0.152.0",
+ "@codesee/tracker": "0.152.0",
"@fortawesome/fontawesome": "1.1.8",
"@fortawesome/fontawesome-svg-core": "1.2.36",
"@fortawesome/free-brands-svg-icons": "5.15.4",
From c2aa8ce3e546c585bf33c0cb936f0166a39569d0 Mon Sep 17 00:00:00 2001
From: Tom <20648924+moT01@users.noreply.github.com>
Date: Thu, 16 Dec 2021 04:17:12 -0600
Subject: [PATCH 51/63] fix: make completion modal a little more accessible
(#44508)
* fix: make completion modal a little more accessible
* remove: unneeded aria attribute
* fix: update snapshots
---
client/src/assets/icons/green-pass.tsx | 4 ++--
.../__snapshots__/challenge-title.test.tsx.snap | 10 ++++------
.../completion-modal-body.test.tsx.snap | 13 +++++++------
.../Challenges/components/completion-modal-body.tsx | 10 ++++++++--
4 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/client/src/assets/icons/green-pass.tsx b/client/src/assets/icons/green-pass.tsx
index c4075c6b5e..ea641726fe 100644
--- a/client/src/assets/icons/green-pass.tsx
+++ b/client/src/assets/icons/green-pass.tsx
@@ -8,15 +8,15 @@ function GreenPass(
return (
<>
- {t('icons.passed')}
-
+
{t('icons.passed')}
renders correctly 1`] = `
title text
-
- icons.passed
-
renders correctly 1`] = `
width="50"
xmlns="http://www.w3.org/2000/svg"
>
-
+
icons.passed
diff --git a/client/src/templates/Challenges/components/__snapshots__/completion-modal-body.test.tsx.snap b/client/src/templates/Challenges/components/__snapshots__/completion-modal-body.test.tsx.snap
index 731152dc19..1461e43bab 100644
--- a/client/src/templates/Challenges/components/__snapshots__/completion-modal-body.test.tsx.snap
+++ b/client/src/templates/Challenges/components/__snapshots__/completion-modal-body.test.tsx.snap
@@ -5,12 +5,8 @@ exports[` matches snapshot 1`] = `
-
- icons.passed
-
matches snapshot 1`] = `
width="50"
xmlns="http://www.w3.org/2000/svg"
>
-
+
icons.passed
@@ -62,14 +60,17 @@ exports[` matches snapshot 1`] = `
intro:responsive-web-design.blocks.basic-html-and-html5.title
learn.percent-complete
{blockTitle}
-
-
+
+
{t('learn.percent-complete', {
percent: this.state.shownPercent
})}
Date: Thu, 16 Dec 2021 19:34:55 +0530
Subject: [PATCH 52/63] chore(i18n,learn): update translations (#44515)
---
client/i18n/locales/chinese-traditional/translations.json | 2 +-
client/i18n/locales/chinese/translations.json | 2 +-
client/i18n/locales/espanol/translations.json | 2 +-
client/i18n/locales/italian/translations.json | 2 +-
client/i18n/locales/portuguese/translations.json | 4 ++--
client/i18n/locales/ukrainian/translations.json | 2 +-
6 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/client/i18n/locales/chinese-traditional/translations.json b/client/i18n/locales/chinese-traditional/translations.json
index d3fc105fcf..1df1fa9e76 100644
--- a/client/i18n/locales/chinese-traditional/translations.json
+++ b/client/i18n/locales/chinese-traditional/translations.json
@@ -462,7 +462,7 @@
"username-not-found": "我們未找到用戶名爲 \"{{username}}\" 的用戶",
"add-name": "這個用戶需要在賬號中添加名字,以便其他人查看該用戶的認證。",
"not-eligible": "這個用戶目前不符合 freeCodeCamp.org 認證的條件。",
- "profile-private": "{{username}} 已將其作品集設置爲僅自己可見。用戶需要將作品集設置爲公開,其他人才能查看該用戶的認證。",
+ "profile-private": "{{username}} has chosen to make their profile private. They will need to make their profile public in order for others to be able to view their certification.",
"certs-private": "{{username}} 已將其作品集設置爲僅自己可見。用戶需要將認證設置爲公開,其他人才能查看該用戶的認證。",
"not-honest": "{{username}} 未接受我們的《學術誠信條例》。",
"user-not-certified": "用戶 {{username}} 似乎未獲得 {{cert}} 認證",
diff --git a/client/i18n/locales/chinese/translations.json b/client/i18n/locales/chinese/translations.json
index 028b28d2ae..90d9f198f6 100644
--- a/client/i18n/locales/chinese/translations.json
+++ b/client/i18n/locales/chinese/translations.json
@@ -462,7 +462,7 @@
"username-not-found": "我们未找到用户名为 \"{{username}}\" 的用户",
"add-name": "这个用户需要在账号中添加名字,以便其他人查看该用户的认证。",
"not-eligible": "这个用户目前不符合 freeCodeCamp.org 认证的条件。",
- "profile-private": "{{username}} 已将其作品集设置为仅自己可见。用户需要将作品集设置为公开,其他人才能查看该用户的认证。",
+ "profile-private": "{{username}} has chosen to make their profile private. They will need to make their profile public in order for others to be able to view their certification.",
"certs-private": "{{username}} 已将其作品集设置为仅自己可见。用户需要将认证设置为公开,其他人才能查看该用户的认证。",
"not-honest": "{{username}} 未接受我们的《学术诚信条例》。",
"user-not-certified": "用户 {{username}} 似乎未获得 {{cert}} 认证",
diff --git a/client/i18n/locales/espanol/translations.json b/client/i18n/locales/espanol/translations.json
index 2cc4c51a37..ef7895c85c 100644
--- a/client/i18n/locales/espanol/translations.json
+++ b/client/i18n/locales/espanol/translations.json
@@ -462,7 +462,7 @@
"username-not-found": "No pudimos encontrar un usuario con el nombre de usuario \"{{username}}\"",
"add-name": "Este usuario debe agregar su nombre a su cuenta para que otros puedan ver su certificación.",
"not-eligible": "Este usuario no es elegible para las certificaciones de freeCodeCamp.org en este momento.",
- "profile-private": "{{username}} ha elegido que su portafolio sea privado. Deberá hacer público su portafolio para que otros puedan ver su certificación.",
+ "profile-private": "{{username}} has chosen to make their profile private. They will need to make their profile public in order for others to be able to view their certification.",
"certs-private": "{{username}} ha elegido que sus certificaciones sean privadas. Deberá hacer públicas sus certificaciones para que otros puedan verlas.",
"not-honest": "{{username}} aún no ha aceptado nuestro Compromiso de Honestidad Académica.",
"user-not-certified": "Parece que el usuario {{username}} no está certificado por {{cert}}",
diff --git a/client/i18n/locales/italian/translations.json b/client/i18n/locales/italian/translations.json
index 725694d815..5f669092e6 100644
--- a/client/i18n/locales/italian/translations.json
+++ b/client/i18n/locales/italian/translations.json
@@ -462,7 +462,7 @@
"username-not-found": "Non siamo riusciti a trovare un utente con il nome utente \"{{username}}\"",
"add-name": "Questo utente deve aggiungere il proprio nome al proprio account affinché gli altri possano visualizzare la sua certificazione.",
"not-eligible": "Questo utente non è idoneo per le certificazioni freeCodeCamp.org al momento.",
- "profile-private": "{{username}} ha scelto di rendere privato il suo portfolio. Dovrà renderlo pubblico affinché altri possano vedere la sua certificazione.",
+ "profile-private": "{{username}} has chosen to make their profile private. They will need to make their profile public in order for others to be able to view their certification.",
"certs-private": "{{username}} ha scelto di rendere privato il suo portfolio. Dovrà renderlo pubblico affinché altri possano vedere la sua certificazione.",
"not-honest": "{{username}} non ha ancora accettato il nostro Impegno di Onestà Accademica.",
"user-not-certified": "Sembra che l'utente {{username}} non sia certificato {{cert}}",
diff --git a/client/i18n/locales/portuguese/translations.json b/client/i18n/locales/portuguese/translations.json
index 1d2828507a..4d88173889 100644
--- a/client/i18n/locales/portuguese/translations.json
+++ b/client/i18n/locales/portuguese/translations.json
@@ -216,7 +216,7 @@
"tax-exempt-status": "O freeCodeCamp é uma organização sem fins lucrativos apoiada por doadores e isenta de impostos 501(c)(3) (Número de identificação fiscal federal dos Estados Unidos: 82-0779546)",
"mission-statement": "Nossa missão: ajudar as pessoas a aprender a programar de graça. Nós conseguimos isso através da criação de milhares de vídeos, artigos e aulas interativas de programação – tudo disponível gratuitamente para o público. Também temos milhares de grupos de estudo do freeCodeCamp espalhados por todo o mundo.",
"donation-initiatives": "Doações para o freeCodeCamp vão para as nossas iniciativas educacionais e ajudam a pagar por servidores, serviços e equipe.",
- "donate-text": "You can <1>make a tax-deductible donation here1>.",
+ "donate-text": "Você pode <1>fazer uma doação dedutível de imposto aqui1>.",
"trending-guides": "Guias em alta",
"our-nonprofit": "Nossa organização sem fins lucrativos",
"links": {
@@ -462,7 +462,7 @@
"username-not-found": "Não foi possível encontrar um usuário com o nome de usuário \"{{username}}\"",
"add-name": "Este usuário precisa adicionar seu nome à sua conta para que outros possam visualizar sua certificação.",
"not-eligible": "Este usuário não é elegível para certificações do freeCodeCamp.org no momento.",
- "profile-private": "{{username}} escolheu tornar seu portfólio privado. Ele/ela terá que tornar seu portfólio público para que outros possam ver a sua certificação.",
+ "profile-private": "{{username}} has chosen to make their profile private. They will need to make their profile public in order for others to be able to view their certification.",
"certs-private": "{{username}} escolheu deixar suas certificações privadas. Ele/ela terá que tornar suas certificações públicas para que outros possam vê-las.",
"not-honest": "{{username}} ainda não concordou com nosso compromisso com a honestidade acadêmica.",
"user-not-certified": "Parece que o usuário {{username}} não possui o certificado {{cert}}",
diff --git a/client/i18n/locales/ukrainian/translations.json b/client/i18n/locales/ukrainian/translations.json
index 38ecbb0410..dc99b41e4b 100644
--- a/client/i18n/locales/ukrainian/translations.json
+++ b/client/i18n/locales/ukrainian/translations.json
@@ -462,7 +462,7 @@
"username-not-found": "Ми не змогли знайти користувача з ім'ям \"{{username}}\"",
"add-name": "Цей користувач повинен додати своє ім'я до свого облікового запису, щоб інші могли переглянути його сертифікат.",
"not-eligible": "Наразі цей користувач не має права отримати безкоштовний сертифікат freeCodeCamp.org.",
- "profile-private": "{{username}} вирішив зробити своє портфоліо конфіденційним. Йому потрібно надати спільний доступ до свого портфоліо, щоб інші мали змогу переглянути його сертифікат.",
+ "profile-private": "{{username}} has chosen to make their profile private. They will need to make their profile public in order for others to be able to view their certification.",
"certs-private": "{{username}} вирішив зробити свої сертифікати конфіденційними. Йому потрібно надати спільний доступ до своїх сертифікатів, щоб інші могли їх переглянути.",
"not-honest": "{{username}} ще не прийняв нашу Обітницю академічної доброчесності.",
"user-not-certified": "Схоже, що користувач {{username}} не є сертифікованим {{cert}}",
From b3f1c85d54b5384328e5db806ec98d1753a3924e Mon Sep 17 00:00:00 2001
From: Luca <61409445+melusc@users.noreply.github.com>
Date: Thu, 16 Dec 2021 15:45:32 +0100
Subject: [PATCH 53/63] fix(curriculum): remove random single quote (#44516)
---
.../rosetta-code/longest-string-challenge.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/curriculum/challenges/english/10-coding-interview-prep/rosetta-code/longest-string-challenge.md b/curriculum/challenges/english/10-coding-interview-prep/rosetta-code/longest-string-challenge.md
index 06a0c9d550..5253483f86 100644
--- a/curriculum/challenges/english/10-coding-interview-prep/rosetta-code/longest-string-challenge.md
+++ b/curriculum/challenges/english/10-coding-interview-prep/rosetta-code/longest-string-challenge.md
@@ -28,7 +28,7 @@ assert(typeof longestString == 'function');
assert(Array.isArray(longestString(['a', 'bb', 'ccc', 'ee', 'f', 'ggg'])));
```
-`longestString(["a", "bb", "ccc", "ee", "f", "ggg"])` should return `["ccc", "ggg"]'`.
+`longestString(["a", "bb", "ccc", "ee", "f", "ggg"])` should return `["ccc", "ggg"]`.
```js
assert.deepEqual(longestString(['a', 'bb', 'ccc', 'ee', 'f', 'ggg']), [
From d12ab79798eda9ef06d80f3661301a4a6e25b36f Mon Sep 17 00:00:00 2001
From: camperbot
Date: Thu, 16 Dec 2021 20:28:18 +0530
Subject: [PATCH 54/63] chore(i18n,curriculum): update translations (#44507)
---
.../test-if-a-value-is-an-array.md | 4 +-
...sections-of-a-page-with-anchor-elements.md | 2 +-
.../algorithms/implement-binary-search.md | 150 ++++++++++++++++++
3 files changed, 153 insertions(+), 3 deletions(-)
create mode 100644 curriculum/challenges/portuguese/10-coding-interview-prep/algorithms/implement-binary-search.md
diff --git a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md
index 92d82bfb19..5bbc0a720f 100644
--- a/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md
+++ b/curriculum/challenges/espanol/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.md
@@ -30,7 +30,7 @@ Todas las pruebas deben pasar.
);
```
-Debe elegir el método correcto para la primera comprobación - `isArray` vs `isNotArray`.
+Debes elegir el método correcto para la primera comprobación - `isArray` vs `isNotArray`.
```js
(getUserInput) =>
@@ -48,7 +48,7 @@ Debe elegir el método correcto para la primera comprobación - `isArray` vs `is
);
```
-Debe elegir el método correcto para la segunda comprobación - `isArray` vs `isNotArray`.
+Debes elegir el método correcto para la segunda comprobación - `isArray` vs `isNotArray`.
```js
(getUserInput) =>
diff --git a/curriculum/challenges/portuguese/01-responsive-web-design/basic-html-and-html5/link-to-internal-sections-of-a-page-with-anchor-elements.md b/curriculum/challenges/portuguese/01-responsive-web-design/basic-html-and-html5/link-to-internal-sections-of-a-page-with-anchor-elements.md
index 338d88dd2e..68618717f1 100644
--- a/curriculum/challenges/portuguese/01-responsive-web-design/basic-html-and-html5/link-to-internal-sections-of-a-page-with-anchor-elements.md
+++ b/curriculum/challenges/portuguese/01-responsive-web-design/basic-html-and-html5/link-to-internal-sections-of-a-page-with-anchor-elements.md
@@ -25,7 +25,7 @@ Quando os usuários clicam no link `Contacts`, eles são levados à seção da p
# --instructions--
-Troque o link externo por um link interno mudando o atributo `href` para o valor `"#footer"` e o texto de `cat photos` para `Jump to Bottom`.
+Troque o link externo por um link interno mudando o atributo `href` para o valor `#footer` e o texto de `cat photos` para `Jump to Bottom`.
Remova o atributo `target="_blank"` da tag de âncora, pois ele faz com que o documento vinculado abra em uma nova aba do navegador.
diff --git a/curriculum/challenges/portuguese/10-coding-interview-prep/algorithms/implement-binary-search.md b/curriculum/challenges/portuguese/10-coding-interview-prep/algorithms/implement-binary-search.md
new file mode 100644
index 0000000000..1af3b8b5be
--- /dev/null
+++ b/curriculum/challenges/portuguese/10-coding-interview-prep/algorithms/implement-binary-search.md
@@ -0,0 +1,150 @@
+---
+id: 61abc7ebf3029b56226de5b6
+title: Implementar a busca binária
+challengeType: 1
+forumTopicId: 487618
+dashedName: implement-binary-search
+---
+
+# --description--
+
+A busca binária é um algoritmo de eficiência **O(log(n))** para procurar um elemento em um array ordenado. Ele opera usando as seguintes etapas:
+
+1. Encontrar o `value` do meio de um array ordenado. Se `value == target`, retornar (encontramos!).
+1. Se `value < target`, procurar à direita do meio do array na próxima comparação.
+1. Se `value > target`, procurar à esquerda do meio do array na próxima comparação.
+
+Como você pode ver, você está dividindo um array para metade com sucesso, o que traz a eficiência log(n). Para este desafio, queremos que você mostre seu trabalho - como você conseguiu o valor de destino... o caminho que você fez!
+
+# --instructions--
+
+Escreva uma função `binarySearch` que implemente o algoritmo de busca binária em um array, retornando o caminho que você utilizou (cada comparação com o valor do meio) para encontrar o destino em um array.
+
+A função recebe um array ordenado de números inteiros e um valor de destino como entrada. Ele retorna um array contendo (em ordem) o valor do meio que você encontrou a cada divisão do array original até encontrar o valor de destino. O valor de destino deve ser o último elemento do array retornado. Se o valor não for encontrado, retorne a string `Value Not Found`.
+
+Por exemplo, `binarySearch([1,2,3,4,5,6,7], 5)` retornará `[4,6,5]`.
+
+Para este desafio, você DEVE usar `Math.floor()` ao fazer a divisão: `Math.floor(x/2)`. Isto criará um caminho coerente e testável.
+
+**Observação:** o array abaixo será usado nos testes:
+
+```js
+const testArray = [
+ 0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 49, 70
+];
+```
+
+# --hints--
+
+`binarySearch` deve ser uma função.
+
+```js
+assert(typeof binarySearch == 'function');
+```
+
+`binarySearch(testArray, 0)` deve retornar `[13, 5, 2, 0]`.
+
+```js
+assert.deepEqual(binarySearch(_testArray, 0), [13, 5, 2, 0]);
+```
+
+`binarySearch(testArray, 1)` deve retornar `[13, 5, 2, 0, 1]`.
+
+```js
+assert.deepEqual(binarySearch(_testArray, 1), [13, 5, 2, 0, 1]);
+```
+
+
+`binarySearch(testArray, 2)` deve retornar `[13, 5, 2]`.
+
+```js
+assert.deepEqual(binarySearch(_testArray, 2), [13, 5, 2]);
+```
+
+`binarySearch(testArray, 6)` deve retornar a string `Value Not Found`.
+
+```js
+assert.strictEqual(binarySearch(_testArray, 6), 'Value Not Found');
+```
+
+`binarySearch(testArray, 11)` deve retornar `[13, 5, 10, 11]`.
+
+```js
+assert.deepEqual(binarySearch(_testArray, 11), [13, 5, 10, 11])
+```
+
+`binarySearch(testArray, 13)` deve retornar `[13]`.
+
+```js
+assert.deepEqual(binarySearch(_testArray, 13), [13]);
+```
+
+
+# --seed--
+
+## --after-user-code--
+
+```js
+const _testArray = [
+ 0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 49, 70
+];
+```
+
+## --seed-contents--
+
+```js
+function binarySearch(searchList, value) {
+ let arrayPath = [];
+ return arrayPath;
+}
+```
+
+
+
+# --solutions--
+
+```js
+let binarySearch = (searchList, value) => {
+ let arrayPath = [];
+
+ // set initial L - M - R
+ let left = 0;
+ let right = searchList.length - 1;
+ let middle = Math.floor(right / 2);
+
+ // if first comparison finds value
+ if (searchList[middle] == value) {
+ arrayPath.push(searchList[middle]);
+ return arrayPath;
+ }
+
+ while (searchList[middle] !== value) {
+ // add to output array
+ arrayPath.push(searchList[middle]);
+
+ // not found
+ if (right < left) {
+ return 'Value Not Found';
+ }
+ // value is in left or right portion of array
+ // update L - M - R
+ if (searchList[middle] > value) {
+ right = middle - 1;
+ middle = left + Math.floor((right - left) / 2);
+ } else {
+ left = middle + 1;
+ middle = left + Math.floor((right - left) / 2);
+ }
+
+ // if found update output array and exit
+ if (searchList[middle] == value) {
+ arrayPath.push(searchList[middle]);
+
+ break;
+ }
+ }
+ return arrayPath;
+};
+```
From 4d1ceb3f74f89a713f3bda0a25c5b84506e4f525 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Thu, 16 Dec 2021 17:23:15 +0000
Subject: [PATCH 55/63] fix(deps): update dependency react-instantsearch-dom to
v6.18.0
---
client/package.json | 2 +-
package-lock.json | 32 ++++++++++++++++----------------
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/client/package.json b/client/package.json
index 0beb51edd6..40ae124c16 100644
--- a/client/package.json
+++ b/client/package.json
@@ -99,7 +99,7 @@
"react-helmet": "6.1.0",
"react-hotkeys": "2.0.0",
"react-i18next": "11.15.1",
- "react-instantsearch-dom": "6.17.0",
+ "react-instantsearch-dom": "6.18.0",
"react-lazy-load": "3.1.13",
"react-monaco-editor": "0.40.0",
"react-redux": "5.1.2",
diff --git a/package-lock.json b/package-lock.json
index 34ef3e9488..cceefe1818 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -267,7 +267,7 @@
"react-helmet": "6.1.0",
"react-hotkeys": "2.0.0",
"react-i18next": "11.15.1",
- "react-instantsearch-dom": "6.17.0",
+ "react-instantsearch-dom": "6.18.0",
"react-lazy-load": "3.1.13",
"react-monaco-editor": "0.40.0",
"react-redux": "5.1.2",
@@ -45195,9 +45195,9 @@
}
},
"node_modules/react-instantsearch-core": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.17.0.tgz",
- "integrity": "sha512-aFeoLcO5YSrXXWeMGaTvoOa2odiPIIeV1ftENqYeoJtHO/Jk4sDNpHlEXSmPctr/v1lludsFKIp1Xo4cNjrqiA==",
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.18.0.tgz",
+ "integrity": "sha512-lPbKGsprh7eV0ILR5Sj9qoP7R3jJ6/I3+++iB6rWOmBzMhbZ8ivl6i6LDJwYYt9lOghYqRDbtdWVx/hAE4O4Ng==",
"dependencies": {
"@babel/runtime": "^7.1.2",
"algoliasearch-helper": "^3.6.2",
@@ -45210,16 +45210,16 @@
}
},
"node_modules/react-instantsearch-dom": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.17.0.tgz",
- "integrity": "sha512-KwQJ0HqD9YBvO1VBS+GZC2binTfrGFRClXxDwmd014I9lyqr05m1U2NR81zD0xoBkoZwELP5RWvfpuvbEL0Gdg==",
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.18.0.tgz",
+ "integrity": "sha512-gsxSyzviDMcCX9+cgEnmOxRcQhoQq6e3+hCh/QvlF36Qw6xASeAt5VD+f+fRXCYX0oFJ3SoIoJXjcag4E4C4kQ==",
"dependencies": {
"@babel/runtime": "^7.1.2",
"algoliasearch-helper": "^3.6.2",
"classnames": "^2.2.5",
"prop-types": "^15.6.2",
"react-fast-compare": "^3.0.0",
- "react-instantsearch-core": "^6.17.0"
+ "react-instantsearch-core": "^6.18.0"
},
"peerDependencies": {
"react": ">= 16.3.0 < 18",
@@ -57765,7 +57765,7 @@
"react-helmet": "6.1.0",
"react-hotkeys": "2.0.0",
"react-i18next": "11.15.1",
- "react-instantsearch-dom": "6.17.0",
+ "react-instantsearch-dom": "6.18.0",
"react-lazy-load": "3.1.13",
"react-monaco-editor": "0.40.0",
"react-redux": "5.1.2",
@@ -90903,9 +90903,9 @@
}
},
"react-instantsearch-core": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.17.0.tgz",
- "integrity": "sha512-aFeoLcO5YSrXXWeMGaTvoOa2odiPIIeV1ftENqYeoJtHO/Jk4sDNpHlEXSmPctr/v1lludsFKIp1Xo4cNjrqiA==",
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.18.0.tgz",
+ "integrity": "sha512-lPbKGsprh7eV0ILR5Sj9qoP7R3jJ6/I3+++iB6rWOmBzMhbZ8ivl6i6LDJwYYt9lOghYqRDbtdWVx/hAE4O4Ng==",
"requires": {
"@babel/runtime": "^7.1.2",
"algoliasearch-helper": "^3.6.2",
@@ -90914,16 +90914,16 @@
}
},
"react-instantsearch-dom": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.17.0.tgz",
- "integrity": "sha512-KwQJ0HqD9YBvO1VBS+GZC2binTfrGFRClXxDwmd014I9lyqr05m1U2NR81zD0xoBkoZwELP5RWvfpuvbEL0Gdg==",
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.18.0.tgz",
+ "integrity": "sha512-gsxSyzviDMcCX9+cgEnmOxRcQhoQq6e3+hCh/QvlF36Qw6xASeAt5VD+f+fRXCYX0oFJ3SoIoJXjcag4E4C4kQ==",
"requires": {
"@babel/runtime": "^7.1.2",
"algoliasearch-helper": "^3.6.2",
"classnames": "^2.2.5",
"prop-types": "^15.6.2",
"react-fast-compare": "^3.0.0",
- "react-instantsearch-core": "^6.17.0"
+ "react-instantsearch-core": "^6.18.0"
}
},
"react-is": {
From 3e9230724a6edc86b28ff5aa59b4df03c833bb98 Mon Sep 17 00:00:00 2001
From: camperbot
Date: Fri, 17 Dec 2021 19:03:29 +0530
Subject: [PATCH 56/63] chore(i18n,learn): update translations (#44520)
---
client/i18n/locales/portuguese/translations.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/i18n/locales/portuguese/translations.json b/client/i18n/locales/portuguese/translations.json
index 4d88173889..b7e068c9f5 100644
--- a/client/i18n/locales/portuguese/translations.json
+++ b/client/i18n/locales/portuguese/translations.json
@@ -462,7 +462,7 @@
"username-not-found": "Não foi possível encontrar um usuário com o nome de usuário \"{{username}}\"",
"add-name": "Este usuário precisa adicionar seu nome à sua conta para que outros possam visualizar sua certificação.",
"not-eligible": "Este usuário não é elegível para certificações do freeCodeCamp.org no momento.",
- "profile-private": "{{username}} has chosen to make their profile private. They will need to make their profile public in order for others to be able to view their certification.",
+ "profile-private": "{{username}} escolheu tornar seu perfil privado. Ele/ela terá que tornar seu perfil público para que outros possam ver a sua certificação.",
"certs-private": "{{username}} escolheu deixar suas certificações privadas. Ele/ela terá que tornar suas certificações públicas para que outros possam vê-las.",
"not-honest": "{{username}} ainda não concordou com nosso compromisso com a honestidade acadêmica.",
"user-not-certified": "Parece que o usuário {{username}} não possui o certificado {{cert}}",
From 54a94528c7774c5ef6e5c3804196ae0b71264e00 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Fri, 17 Dec 2021 18:52:05 +0000
Subject: [PATCH 57/63] chore(deps): update codesee to v0.153.0
---
client/package.json | 4 ++--
package-lock.json | 32 ++++++++++++++++----------------
2 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/client/package.json b/client/package.json
index 40ae124c16..3f35838660 100644
--- a/client/package.json
+++ b/client/package.json
@@ -129,8 +129,8 @@
},
"devDependencies": {
"@babel/types": "7.16.0",
- "@codesee/babel-plugin-instrument": "0.152.0",
- "@codesee/tracker": "0.152.0",
+ "@codesee/babel-plugin-instrument": "0.153.0",
+ "@codesee/tracker": "0.153.0",
"@testing-library/jest-dom": "5.16.1",
"@testing-library/react": "12.1.2",
"autoprefixer": "10.4.0",
diff --git a/package-lock.json b/package-lock.json
index cceefe1818..e425488ef5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -297,8 +297,8 @@
},
"devDependencies": {
"@babel/types": "7.16.0",
- "@codesee/babel-plugin-instrument": "0.152.0",
- "@codesee/tracker": "0.152.0",
+ "@codesee/babel-plugin-instrument": "0.153.0",
+ "@codesee/tracker": "0.153.0",
"@testing-library/jest-dom": "5.16.1",
"@testing-library/react": "12.1.2",
"autoprefixer": "10.4.0",
@@ -2622,9 +2622,9 @@
}
},
"node_modules/@codesee/babel-plugin-instrument": {
- "version": "0.152.0",
- "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.152.0.tgz",
- "integrity": "sha512-QhiBbGB6j7nZ16bvlasXJ6GNKm2cDZp9ymGnSTPdt1qbj8+iH/fiE1YeXYSUXKZtTfPefXgyYtRfSTMizb+c0Q==",
+ "version": "0.153.0",
+ "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.153.0.tgz",
+ "integrity": "sha512-Ip8/N1w1OvaOfeN/TOcotRb5/Q86AfyQ30j2w0OE0k9w3XKrpPl+yqoVZ4V/1ore2s5z+pQqTu6SiPEvZN0AcQ==",
"dev": true,
"dependencies": {
"@babel/plugin-syntax-jsx": "^7.12.13",
@@ -2639,9 +2639,9 @@
}
},
"node_modules/@codesee/tracker": {
- "version": "0.152.0",
- "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.152.0.tgz",
- "integrity": "sha512-M9qgeZO1bdEmHLQI8/TZD6IJrvYul5VZsKjAejT1Hg/LY1s/zJrq4Jz6Y6eagSqYFhcmAMyefwhIKzF8mQGmZg==",
+ "version": "0.153.0",
+ "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.153.0.tgz",
+ "integrity": "sha512-cVJQFBrtPqkD+YbudKC+Ayq+cGrW4sdCnmrBpSAjOAmP3oV10DPSmCWodwfUZdHbdhdF6qwTf7ly92rDhFglOg==",
"dev": true
},
"node_modules/@cspotcode/source-map-consumer": {
@@ -57122,9 +57122,9 @@
}
},
"@codesee/babel-plugin-instrument": {
- "version": "0.152.0",
- "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.152.0.tgz",
- "integrity": "sha512-QhiBbGB6j7nZ16bvlasXJ6GNKm2cDZp9ymGnSTPdt1qbj8+iH/fiE1YeXYSUXKZtTfPefXgyYtRfSTMizb+c0Q==",
+ "version": "0.153.0",
+ "resolved": "https://registry.npmjs.org/@codesee/babel-plugin-instrument/-/babel-plugin-instrument-0.153.0.tgz",
+ "integrity": "sha512-Ip8/N1w1OvaOfeN/TOcotRb5/Q86AfyQ30j2w0OE0k9w3XKrpPl+yqoVZ4V/1ore2s5z+pQqTu6SiPEvZN0AcQ==",
"dev": true,
"requires": {
"@babel/plugin-syntax-jsx": "^7.12.13",
@@ -57136,9 +57136,9 @@
}
},
"@codesee/tracker": {
- "version": "0.152.0",
- "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.152.0.tgz",
- "integrity": "sha512-M9qgeZO1bdEmHLQI8/TZD6IJrvYul5VZsKjAejT1Hg/LY1s/zJrq4Jz6Y6eagSqYFhcmAMyefwhIKzF8mQGmZg==",
+ "version": "0.153.0",
+ "resolved": "https://registry.npmjs.org/@codesee/tracker/-/tracker-0.153.0.tgz",
+ "integrity": "sha512-cVJQFBrtPqkD+YbudKC+Ayq+cGrW4sdCnmrBpSAjOAmP3oV10DPSmCWodwfUZdHbdhdF6qwTf7ly92rDhFglOg==",
"dev": true
},
"@cspotcode/source-map-consumer": {
@@ -57693,8 +57693,8 @@
"@babel/preset-react": "7.16.5",
"@babel/standalone": "7.16.6",
"@babel/types": "7.16.0",
- "@codesee/babel-plugin-instrument": "0.152.0",
- "@codesee/tracker": "0.152.0",
+ "@codesee/babel-plugin-instrument": "0.153.0",
+ "@codesee/tracker": "0.153.0",
"@fortawesome/fontawesome": "1.1.8",
"@fortawesome/fontawesome-svg-core": "1.2.36",
"@fortawesome/free-brands-svg-icons": "5.15.4",
From ee73042c84fc6049b21b8a94fca75ea58c0d6df7 Mon Sep 17 00:00:00 2001
From: Ahmad Abdolsaheb
Date: Fri, 17 Dec 2021 23:21:17 +0300
Subject: [PATCH 58/63] feat(client): add background animation for description
of first challenge (#44519)
* initial
* Apply suggestions from code review
* Update client/src/templates/Challenges/classic/editor.css
---
.../Challenges/classic/MultifileEditor.js | 5 ++++-
.../templates/Challenges/classic/editor.css | 20 ++++++++++++++++---
.../templates/Challenges/classic/editor.tsx | 20 ++++++++++++++++++-
.../src/templates/Challenges/classic/show.tsx | 4 ++++
4 files changed, 44 insertions(+), 5 deletions(-)
diff --git a/client/src/templates/Challenges/classic/MultifileEditor.js b/client/src/templates/Challenges/classic/MultifileEditor.js
index 70a139715b..934058f2c8 100644
--- a/client/src/templates/Challenges/classic/MultifileEditor.js
+++ b/client/src/templates/Challenges/classic/MultifileEditor.js
@@ -34,6 +34,7 @@ const propTypes = {
}),
theme: PropTypes.string,
title: PropTypes.string,
+ showProjectPreview: PropTypes.bool,
usesMultifileEditor: PropTypes.bool,
visibleEditors: PropTypes.shape({
scriptjs: PropTypes.bool,
@@ -68,7 +69,8 @@ const MultifileEditor = props => {
resizeProps,
title,
visibleEditors: { stylescss, indexhtml, scriptjs, indexjsx },
- usesMultifileEditor
+ usesMultifileEditor,
+ showProjectPreview
} = props;
const editorTheme = theme === 'night' ? 'vs-dark-custom' : 'vs-custom';
// TODO: the tabs mess up the rendering (scroll doesn't work properly and
@@ -130,6 +132,7 @@ const MultifileEditor = props => {
theme={editorTheme}
title={title}
usesMultifileEditor={usesMultifileEditor}
+ showProjectPreview={showProjectPreview}
/>
);
diff --git a/client/src/templates/Challenges/classic/editor.css b/client/src/templates/Challenges/classic/editor.css
index 52e7f9fd0e..cec9e85d7c 100644
--- a/client/src/templates/Challenges/classic/editor.css
+++ b/client/src/templates/Challenges/classic/editor.css
@@ -1,6 +1,3 @@
-#description {
- background: var(--secondary-background);
-}
.monaco-editor .margin-view-overlays .line-numbers,
.monaco-editor .margin-view-overlays .myLineDecoration + .line-numbers {
color: var(--primary-color);
@@ -48,6 +45,23 @@
max-width: 700px;
}
+.description-highlighter {
+ background-color: var(--secondary-background);
+ opacity: 1;
+ animation-name: example;
+ animation-duration: 2s;
+ animation-delay: 0.5s;
+}
+
+@keyframes example {
+ from {
+ background-color: var(--highlight-background);
+ }
+ to {
+ background-color: var(--secondary-background);
+ }
+}
+
#description p:last-child {
margin: 0px;
}
diff --git a/client/src/templates/Challenges/classic/editor.tsx b/client/src/templates/Challenges/classic/editor.tsx
index a1e646afb4..8f8a902610 100644
--- a/client/src/templates/Challenges/classic/editor.tsx
+++ b/client/src/templates/Challenges/classic/editor.tsx
@@ -42,7 +42,8 @@ import {
submitChallenge,
initTests,
isResettingSelector,
- stopResetting
+ stopResetting,
+ isProjectPreviewModalOpenSelector
} from '../redux';
import './editor.css';
@@ -76,6 +77,8 @@ interface EditorProps {
tests: Test[];
theme: Themes;
title: string;
+ showProjectPreview: boolean;
+ previewOpen: boolean;
updateFile: (object: {
fileKey: FileKey;
editorValue: string;
@@ -104,6 +107,7 @@ const mapStateToProps = createSelector(
canFocusEditorSelector,
consoleOutputSelector,
isDonationModalOpenSelector,
+ isProjectPreviewModalOpenSelector,
isResettingSelector,
userSelector,
challengeTestsSelector,
@@ -111,11 +115,13 @@ const mapStateToProps = createSelector(
canFocus: boolean,
output: string[],
open,
+ previewOpen: boolean,
isResetting: boolean,
{ theme = Themes.Default }: { theme: Themes },
tests: [{ text: string; testString: string }]
) => ({
canFocus: open ? false : canFocus,
+ previewOpen,
isResetting,
output,
theme,
@@ -895,6 +901,18 @@ const Editor = (props: EditorProps): JSX.Element => {
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.challengeFiles, props.isResetting]);
+
+ useEffect(() => {
+ const { showProjectPreview, previewOpen } = props;
+ if (!previewOpen && showProjectPreview) {
+ const description = document.getElementsByClassName(
+ 'description-container'
+ )[0];
+ description.classList.add('description-highlighter');
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [props.previewOpen]);
+
useEffect(() => {
const { output } = props;
const { model, insideEditDecId } = dataRef.current;
diff --git a/client/src/templates/Challenges/classic/show.tsx b/client/src/templates/Challenges/classic/show.tsx
index 960a6469e2..5f1f77b5fe 100644
--- a/client/src/templates/Challenges/classic/show.tsx
+++ b/client/src/templates/Challenges/classic/show.tsx
@@ -342,6 +342,9 @@ class ShowClassic extends Component {
renderEditor() {
const {
+ pageContext: {
+ projectPreview: { showProjectPreview }
+ },
challengeFiles,
data: {
challengeNode: {
@@ -365,6 +368,7 @@ class ShowClassic extends Component {
resizeProps={this.resizeProps}
title={title}
usesMultifileEditor={usesMultifileEditor}
+ showProjectPreview={showProjectPreview}
/>
)
);
From f1bb7b90914eda435ea8e189229df6ef6b1f485b Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Sat, 18 Dec 2021 12:22:08 +0000
Subject: [PATCH 59/63] chore(deps): update dependency lint-staged to v12.1.3
---
package-lock.json | 44 +++++++++++++++++++++-----------------------
package.json | 2 +-
2 files changed, 22 insertions(+), 24 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index e425488ef5..f6bbca8f61 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -85,7 +85,7 @@
"husky": "7.0.4",
"jest": "27.4.5",
"js-yaml": "3.14.1",
- "lint-staged": "12.1.2",
+ "lint-staged": "12.1.3",
"lodash": "4.17.21",
"markdownlint": "0.24.0",
"mock-fs": "5.1.2",
@@ -35857,24 +35857,23 @@
}
},
"node_modules/lint-staged": {
- "version": "12.1.2",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.2.tgz",
- "integrity": "sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A==",
+ "version": "12.1.3",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.3.tgz",
+ "integrity": "sha512-ajapdkaFxx+MVhvq6xQRg9zCnCLz49iQLJZP7+w8XaA3U4B35Z9xJJGq9vxmWo73QTvJLG+N2NxhjWiSexbAWQ==",
"dev": true,
"dependencies": {
"cli-truncate": "^3.1.0",
"colorette": "^2.0.16",
"commander": "^8.3.0",
- "debug": "^4.3.2",
- "enquirer": "^2.3.6",
+ "debug": "^4.3.3",
"execa": "^5.1.1",
"lilconfig": "2.0.4",
- "listr2": "^3.13.3",
+ "listr2": "^3.13.5",
"micromatch": "^4.0.4",
"normalize-path": "^3.0.0",
- "object-inspect": "^1.11.0",
+ "object-inspect": "^1.11.1",
"string-argv": "^0.3.1",
- "supports-color": "^9.0.2",
+ "supports-color": "^9.2.1",
"yaml": "^1.10.2"
},
"bin": {
@@ -41433,9 +41432,9 @@
}
},
"node_modules/object-inspect": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
- "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -83847,24 +83846,23 @@
}
},
"lint-staged": {
- "version": "12.1.2",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.2.tgz",
- "integrity": "sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A==",
+ "version": "12.1.3",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.3.tgz",
+ "integrity": "sha512-ajapdkaFxx+MVhvq6xQRg9zCnCLz49iQLJZP7+w8XaA3U4B35Z9xJJGq9vxmWo73QTvJLG+N2NxhjWiSexbAWQ==",
"dev": true,
"requires": {
"cli-truncate": "^3.1.0",
"colorette": "^2.0.16",
"commander": "^8.3.0",
- "debug": "^4.3.2",
- "enquirer": "^2.3.6",
+ "debug": "^4.3.3",
"execa": "^5.1.1",
"lilconfig": "2.0.4",
- "listr2": "^3.13.3",
+ "listr2": "^3.13.5",
"micromatch": "^4.0.4",
"normalize-path": "^3.0.0",
- "object-inspect": "^1.11.0",
+ "object-inspect": "^1.11.1",
"string-argv": "^0.3.1",
- "supports-color": "^9.0.2",
+ "supports-color": "^9.2.1",
"yaml": "^1.10.2"
},
"dependencies": {
@@ -88132,9 +88130,9 @@
"dev": true
},
"object-inspect": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
- "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg=="
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
},
"object-is": {
"version": "1.1.5",
diff --git a/package.json b/package.json
index 36a682b378..974a5d62bb 100644
--- a/package.json
+++ b/package.json
@@ -160,7 +160,7 @@
"husky": "7.0.4",
"jest": "27.4.5",
"js-yaml": "3.14.1",
- "lint-staged": "12.1.2",
+ "lint-staged": "12.1.3",
"lodash": "4.17.21",
"markdownlint": "0.24.0",
"mock-fs": "5.1.2",
From 14fe1fe653b4952287151ab40a5fbaf73074ec85 Mon Sep 17 00:00:00 2001
From: camperbot
Date: Sat, 18 Dec 2021 20:00:08 +0530
Subject: [PATCH 60/63] chore(i18n,curriculum): update translations (#44524)
---
...ow-hierarchical-relationships-of-content.md | 6 +++---
...ading-element-versus-a-paragraph-element.md | 9 +++++----
...-a-more-complex-shape-using-css-and-html.md | 2 +-
...al-balance-using-the-text-align-property.md | 2 +-
.../build-a-tribute-page.md | 2 +-
.../create-complex-multi-dimensional-arrays.md | 2 +-
.../timestamp-microservice.md | 18 ++++++++++--------
...ow-hierarchical-relationships-of-content.md | 6 +++---
...ading-element-versus-a-paragraph-element.md | 9 +++++----
...-a-more-complex-shape-using-css-and-html.md | 2 +-
...al-balance-using-the-text-align-property.md | 2 +-
.../build-a-tribute-page.md | 2 +-
.../create-complex-multi-dimensional-arrays.md | 2 +-
.../timestamp-microservice.md | 18 ++++++++++--------
.../rosetta-code/longest-string-challenge.md | 2 +-
15 files changed, 45 insertions(+), 39 deletions(-)
diff --git a/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md b/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md
index 91baca2989..a2f0878f6e 100644
--- a/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md
+++ b/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md
@@ -17,7 +17,7 @@ dashedName: use-headings-to-show-hierarchical-relationships-of-content
在使用中,相同級別(或者更高級別)的標題標籤用於開啓新的章節,低一級別的標題標籤用於開啓上一級標題標籤的子小節。
-比如說,如果我們在一個 `h2` 標籤後加上若干由 `h4` 標籤引導的頁面。 此時發生了層級的錯位,這會讓使用屏幕閱讀器的用戶感到困惑。 儘管在瀏覽器所顯示的頁面中,錯誤地使用這六個標題標籤依然可以讓它們在視覺效果上看起來很合理。 但此時,我們應該按照層級正確地使用標籤,然後用 CSS 來調整樣式。
+例如,一個頁面帶有一個 `h2` 元素,後面跟着幾個用 `h4` 元素標記的小節,這會使屏幕閱讀器用戶感到困惑。 儘管在瀏覽器所顯示的頁面中,錯誤地使用這六個標題標籤依然可以讓它們在視覺效果上看起來很合理。 但此時,我們應該按照層級正確地使用標籤,然後用 CSS 來調整樣式。
最後一點,每個頁面應只有一個 `h1` 標籤,用來概括說明頁面的主題。 另外,這六個標題標籤可以讓搜索引擎獲取頁面的大綱。
@@ -27,7 +27,7 @@ Camper Cat 希望他的網站有一個介紹如何成爲忍者的頁面。 幫
# --hints--
-應存在 6 個 `h3` 標籤。
+你的代碼應該有 6 個 `h3` 元素。
```js
assert($('h3').length === 6);
@@ -39,7 +39,7 @@ assert($('h3').length === 6);
assert((code.match(/\/h3/g) || []).length === 6);
```
-不應該存在 `h5` 標籤.
+你的代碼不應包含任何 `h5` 元素。
```js
assert($('h5').length === 0);
diff --git a/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/adjust-the-size-of-a-heading-element-versus-a-paragraph-element.md b/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/adjust-the-size-of-a-heading-element-versus-a-paragraph-element.md
index 83500f67b3..aa7414dd0c 100644
--- a/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/adjust-the-size-of-a-heading-element-versus-a-paragraph-element.md
+++ b/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/adjust-the-size-of-a-heading-element-versus-a-paragraph-element.md
@@ -1,6 +1,6 @@
---
id: 587d781b367417b2b2512abd
-title: 調整標題與段落的大小
+title: 調整標題元素與段落元素的大小
challengeType: 0
videoUrl: 'https://scrimba.com/c/c3bRPTz'
forumTopicId: 301037
@@ -9,15 +9,15 @@ dashedName: adjust-the-size-of-a-heading-element-versus-a-paragraph-element
# --description--
-標題標籤的字體大小(從 `h1` 到 `h6`)一般應該大於段落標籤的字體大小。 這使用戶更容易在視覺上了解頁面上所有內容的佈局和重要程度。 你可以使用 `font-size` 屬性來設置元素內文字的大小。
+標題元素(`h1` 到 `h6`)的字體大小通常應大於段落標籤的字體大小。 這使用戶更容易直觀地瞭解頁面上所有內容的佈局和重要性級別。 你可以使用 `font-size` 屬性來調整元素中文本的大小。
# --instructions--
-把 `h4` 標籤的 `font-size` 的屬性值改成 27px,讓標題更醒目。
+要使標題明顯大於段落,請將 `h4` 元素的 `font-size` 更改爲 27 像素。
# --hints--
-應給 `h4` 元素添加一個 `font-size` 屬性並將屬性值設置爲 27px。
+你的代碼應該將 `font-size` 屬性添加到設置爲 27 像素的 `h4` 元素。
```js
assert($('h4').css('font-size') == '27px');
@@ -116,3 +116,4 @@ assert($('h4').css('font-size') == '27px');
```
+
diff --git a/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md b/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
index 2133f6f978..e385fae5b3 100644
--- a/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
+++ b/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
@@ -9,7 +9,7 @@ dashedName: create-a-more-complex-shape-using-css-and-html
# --description--
-世界上最流行的形狀非心形莫屬了,在本挑戰中我們將用純 CSS 創建一個心形。 但是首先你需要了解僞元素 `::before` 和 `::after`。 僞元素可以在所選元素之前或之後添加一些內容。 在下面的代碼中,`::before` 僞元素用來給 class 爲 `heart` 的元素添加一個正方形:
+世界上最流行的形狀非心形莫屬了,在本挑戰中我們將用純 CSS 創建一個心形。 但是首先你需要了解僞元素 `::before` 和 `::after`。 `::before` 創建一個僞元素,它是所選元素的第一個子元素; `::after` 創建一個僞元素,它是所選元素的最後一個子元素。 在下面的代碼中,`::before` 僞元素用來給 class 爲 `heart` 的元素添加一個正方形:
```css
.heart::before {
diff --git a/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/create-visual-balance-using-the-text-align-property.md b/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/create-visual-balance-using-the-text-align-property.md
index c05253f231..1d3ce35b68 100644
--- a/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/create-visual-balance-using-the-text-align-property.md
+++ b/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/create-visual-balance-using-the-text-align-property.md
@@ -13,7 +13,7 @@ dashedName: create-visual-balance-using-the-text-align-property
web 內容大部分都是文本。 CSS 裏面的 `text-align` 屬性可以控制文本的對齊方式。
-`text-align: justify;` 可以讓除最後一行之外的文字兩端對齊,即每行的左右兩端都緊貼行的邊緣。
+`text-align: justify;` 將文本隔開,使每行的寬度相等。
`text-align: center;` 可以讓文本居中對齊。
diff --git a/curriculum/challenges/chinese-traditional/01-responsive-web-design/responsive-web-design-projects/build-a-tribute-page.md b/curriculum/challenges/chinese-traditional/01-responsive-web-design/responsive-web-design-projects/build-a-tribute-page.md
index 240b3bf3e8..013bfda2db 100644
--- a/curriculum/challenges/chinese-traditional/01-responsive-web-design/responsive-web-design-projects/build-a-tribute-page.md
+++ b/curriculum/challenges/chinese-traditional/01-responsive-web-design/responsive-web-design-projects/build-a-tribute-page.md
@@ -18,7 +18,7 @@ dashedName: build-a-tribute-page
**需求 2:** 此 app 中應存在一個 `id="title"` 的元素,其中包含描述致敬頁主題的字符串文本,如 "Dr. Norman Borlaug"。
-**需求 3:** 此 app 中應存在一個 `id="img-div"` 的 `div` 元素。
+**需求 3:** 此 app 中應存在一個 `id="img-div"` 的 `figure` 或 `div` 元素。
**需求 4:** 在 `img-div` 元素內,應存在一個 `id="image"` 的 `img` 元素。
diff --git a/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-data-structures/create-complex-multi-dimensional-arrays.md b/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-data-structures/create-complex-multi-dimensional-arrays.md
index 31cdc54b5d..76164cd1b6 100644
--- a/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-data-structures/create-complex-multi-dimensional-arrays.md
+++ b/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-data-structures/create-complex-multi-dimensional-arrays.md
@@ -10,7 +10,7 @@ dashedName: create-complex-multi-dimensional-arrays
很好! 你現在已經學到很多關於數組的知識了, 但這些只是個開始。我們將在接下來的中挑戰中學到更多與數組相關的知識。 在繼續學習對象(
Objects )之前,讓我們再花一點時間瞭解下更復雜的數組嵌套。
-數組的一個強大的特性是,它可以包含其他數組,甚至完全由其他數組組成。 在上一個挑戰中,我們已經接觸到了包含數組的數組,但它還算是比較簡單的。 數組中的數組還可以再包含其他數組,即可以嵌套任意多層數組。 習慣上,我們稱這種數據結構爲
多維(multi-dimensional)數組 或嵌套(nested)數組。 請看如下的示例:
+數組的一個強大的特性是,它可以包含其他數組,甚至完全由其他數組組成。 在上一個挑戰中,我們已經接觸到了包含數組的數組,但它還算是比較簡單的。 數組中的數組還可以再包含其他數組,即可以嵌套任意多層數組。 通過這種方式,數組可以很快成爲非常複雜的數據結構,稱爲
多維(multi-dimensional) 數組,或嵌套(nested)數組。 請看如下的示例:
```js
let nestedArray = [
diff --git a/curriculum/challenges/chinese-traditional/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md b/curriculum/challenges/chinese-traditional/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
index 72d8ee887d..3a8eee0bd5 100644
--- a/curriculum/challenges/chinese-traditional/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
+++ b/curriculum/challenges/chinese-traditional/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
@@ -16,6 +16,8 @@ dashedName: timestamp-microservice
完成本項目後,請將一個正常運行的 demo(項目演示)託管在可以公開訪問的平臺。 然後在 `Solution Link` 字段中提交它的 URL。 此外,還可以將項目的源碼提交到 `GitHub Link` 中。
+**注意:** 時區轉換不是本項目的目的,因此假設所有發送的有效日期將使用 `new Date()` 解析爲 GMT 日期。
+
# --hints--
提交自己的項目,而不是示例的 URL。
@@ -28,7 +30,7 @@ dashedName: timestamp-microservice
};
```
-向 `/api/:date?` 發送一個帶有有效日期的請求,應該很快(在幾毫秒內)返回一個 JSON 對象,在這個 JSON 對象內有一個包含輸入日期的 Unix 時間戳的 `unix` 鍵。
+對具有有效日期的 `/api/:date?` 的請求應返回一個帶有 `unix` 鍵的 JSON 對象,該鍵是輸入日期的 Unix 時間戳(以毫秒爲單位)
```js
(getUserInput) =>
@@ -46,7 +48,7 @@ dashedName: timestamp-microservice
);
```
-向 `/api/:date?` 發送一個帶有有效日期的請求,應該返回一個 JSON 對象,在這個 JSON 對象內有一個包含如 `Thu, 01 Jan 1970 00:00:00 GMT` 格式的輸入日期的 `utc` 鍵。
+對具有有效日期的 `/api/:date?` 的請求應返回一個帶有 `utc` 鍵的 JSON 對象,該鍵是輸入日期的字符串,格式爲:`Thu, 01 Jan 1970 00:00:00 GMT`
```js
(getUserInput) =>
@@ -64,7 +66,7 @@ dashedName: timestamp-microservice
);
```
-向 `/api/1451001600000` 發送請求,應該返回 `{ unix: 1451001600000, utc: "Fri, 25 Dec 2015 00:00:00 GMT" }`。
+對 `/api/1451001600000` 的請求應該返回 `{ unix: 1451001600000, utc: "Fri, 25 Dec 2015 00:00:00 GMT" }`
```js
(getUserInput) =>
@@ -81,11 +83,11 @@ dashedName: timestamp-microservice
);
```
-程序能成功處理能被 `new Date(date_string)` 解析的日期。
+你的項目可以處理可以通過 `new Date(date_string)` 成功解析的日期
```js
(getUserInput) =>
- $.get(getUserInput('url') + '/api/05 October 2011').then(
+ $.get(getUserInput('url') + '/api/05 October 2011, GMT').then(
(data) => {
assert(
data.unix === 1317772800000 &&
@@ -98,7 +100,7 @@ dashedName: timestamp-microservice
);
```
-如果傳入的日期是無效的,將返回一個帶有結構體 `{ error : "Invalid Date" }` 的對象。
+如果輸入的日期字符串無效,api 將返回一個具有結構的對象 `{ error : "Invalid Date" }`
```js
(getUserInput) =>
@@ -112,7 +114,7 @@ dashedName: timestamp-microservice
);
```
-如果傳入的參數是空日期,將返回一個包含當前時間的 `unix` 鍵的 JSON 對象。
+一個空的日期參數應該返回一個帶有 `unix` 鍵的 JSON 對象中的當前時間
```js
(getUserInput) =>
@@ -127,7 +129,7 @@ dashedName: timestamp-microservice
);
```
-如果傳入的參數是空日期,將返回一個包含當前時間的 `utc` 鍵的 JSON 對象。
+空日期參數應返回帶有 `utc` 鍵的 JSON 對象中的當前時間
```js
(getUserInput) =>
diff --git a/curriculum/challenges/chinese/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md b/curriculum/challenges/chinese/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md
index 56ed31cd76..94a8dfef78 100644
--- a/curriculum/challenges/chinese/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md
+++ b/curriculum/challenges/chinese/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md
@@ -17,7 +17,7 @@ dashedName: use-headings-to-show-hierarchical-relationships-of-content
在使用中,相同级别(或者更高级别)的标题标签用于开启新的章节,低一级别的标题标签用于开启上一级标题标签的子小节。
-比如说,如果我们在一个 `h2` 标签后加上若干由 `h4` 标签引导的页面。 此时发生了层级的错位,这会让使用屏幕阅读器的用户感到困惑。 尽管在浏览器所显示的页面中,错误地使用这六个标题标签依然可以让它们在视觉效果上看起来很合理。 但此时,我们应该按照层级正确地使用标签,然后用 CSS 来调整样式。
+例如,一个页面带有一个 `h2` 元素,后面跟着几个用 `h4` 元素标记的小节,这会使屏幕阅读器用户感到困惑。 尽管在浏览器所显示的页面中,错误地使用这六个标题标签依然可以让它们在视觉效果上看起来很合理。 但此时,我们应该按照层级正确地使用标签,然后用 CSS 来调整样式。
最后一点,每个页面应只有一个 `h1` 标签,用来概括说明页面的主题。 另外,这六个标题标签可以让搜索引擎获取页面的大纲。
@@ -27,7 +27,7 @@ Camper Cat 希望他的网站有一个介绍如何成为忍者的页面。 帮
# --hints--
-应存在 6 个 `h3` 标签。
+你的代码应该有 6 个 `h3` 元素。
```js
assert($('h3').length === 6);
@@ -39,7 +39,7 @@ assert($('h3').length === 6);
assert((code.match(/\/h3/g) || []).length === 6);
```
-不应该存在 `h5` 标签.
+你的代码不应包含任何 `h5` 元素。
```js
assert($('h5').length === 0);
diff --git a/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/adjust-the-size-of-a-heading-element-versus-a-paragraph-element.md b/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/adjust-the-size-of-a-heading-element-versus-a-paragraph-element.md
index ca8eb3a0eb..0ad50da1d7 100644
--- a/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/adjust-the-size-of-a-heading-element-versus-a-paragraph-element.md
+++ b/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/adjust-the-size-of-a-heading-element-versus-a-paragraph-element.md
@@ -1,6 +1,6 @@
---
id: 587d781b367417b2b2512abd
-title: 调整标题与段落的大小
+title: 调整标题元素与段落元素的大小
challengeType: 0
videoUrl: 'https://scrimba.com/c/c3bRPTz'
forumTopicId: 301037
@@ -9,15 +9,15 @@ dashedName: adjust-the-size-of-a-heading-element-versus-a-paragraph-element
# --description--
-标题标签的字体大小(从 `h1` 到 `h6`)一般应该大于段落标签的字体大小。 这使用户更容易在视觉上了解页面上所有内容的布局和重要程度。 你可以使用 `font-size` 属性来设置元素内文字的大小。
+标题元素(`h1` 到 `h6`)的字体大小通常应大于段落标签的字体大小。 这使用户更容易直观地了解页面上所有内容的布局和重要性级别。 你可以使用 `font-size` 属性来调整元素中文本的大小。
# --instructions--
-把 `h4` 标签的 `font-size` 的属性值改成 27px,让标题更醒目。
+要使标题明显大于段落,请将 `h4` 元素的 `font-size` 更改为 27 像素。
# --hints--
-应给 `h4` 元素添加一个 `font-size` 属性并将属性值设置为 27px。
+你的代码应该将 `font-size` 属性添加到设置为 27 像素的 `h4` 元素。
```js
assert($('h4').css('font-size') == '27px');
@@ -116,3 +116,4 @@ assert($('h4').css('font-size') == '27px');
```
+
diff --git a/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md b/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
index d472236fe8..556adcf012 100644
--- a/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
+++ b/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/create-a-more-complex-shape-using-css-and-html.md
@@ -9,7 +9,7 @@ dashedName: create-a-more-complex-shape-using-css-and-html
# --description--
-世界上最流行的形状非心形莫属了,在本挑战中我们将用纯 CSS 创建一个心形。 但是首先你需要了解伪元素 `::before` 和 `::after`。 伪元素可以在所选元素之前或之后添加一些内容。 在下面的代码中,`::before` 伪元素用来给 class 为 `heart` 的元素添加一个正方形:
+世界上最流行的形状非心形莫属了,在本挑战中我们将用纯 CSS 创建一个心形。 但是首先你需要了解伪元素 `::before` 和 `::after`。 `::before` 创建一个伪元素,它是所选元素的第一个子元素; `::after` 创建一个伪元素,它是所选元素的最后一个子元素。 在下面的代码中,`::before` 伪元素用来给 class 为 `heart` 的元素添加一个正方形:
```css
.heart::before {
diff --git a/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/create-visual-balance-using-the-text-align-property.md b/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/create-visual-balance-using-the-text-align-property.md
index 75b0757993..1a0983b4a4 100644
--- a/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/create-visual-balance-using-the-text-align-property.md
+++ b/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/create-visual-balance-using-the-text-align-property.md
@@ -13,7 +13,7 @@ dashedName: create-visual-balance-using-the-text-align-property
web 内容大部分都是文本。 CSS 里面的 `text-align` 属性可以控制文本的对齐方式。
-`text-align: justify;` 可以让除最后一行之外的文字两端对齐,即每行的左右两端都紧贴行的边缘。
+`text-align: justify;` 将文本隔开,使每行的宽度相等。
`text-align: center;` 可以让文本居中对齐。
diff --git a/curriculum/challenges/chinese/01-responsive-web-design/responsive-web-design-projects/build-a-tribute-page.md b/curriculum/challenges/chinese/01-responsive-web-design/responsive-web-design-projects/build-a-tribute-page.md
index 7c57480657..6703bd1153 100644
--- a/curriculum/challenges/chinese/01-responsive-web-design/responsive-web-design-projects/build-a-tribute-page.md
+++ b/curriculum/challenges/chinese/01-responsive-web-design/responsive-web-design-projects/build-a-tribute-page.md
@@ -18,7 +18,7 @@ dashedName: build-a-tribute-page
**需求 2:** 此 app 中应存在一个 `id="title"` 的元素,其中包含描述致敬页主题的字符串文本,如 "Dr. Norman Borlaug"。
-**需求 3:** 此 app 中应存在一个 `id="img-div"` 的 `div` 元素。
+**需求 3:** 此 app 中应存在一个 `id="img-div"` 的 `figure` 或 `div` 元素。
**需求 4:** 在 `img-div` 元素内,应存在一个 `id="image"` 的 `img` 元素。
diff --git a/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-data-structures/create-complex-multi-dimensional-arrays.md b/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-data-structures/create-complex-multi-dimensional-arrays.md
index fdf3161b6f..b5f351a60f 100644
--- a/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-data-structures/create-complex-multi-dimensional-arrays.md
+++ b/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-data-structures/create-complex-multi-dimensional-arrays.md
@@ -10,7 +10,7 @@ dashedName: create-complex-multi-dimensional-arrays
很好! 你现在已经学到很多关于数组的知识了, 但这些只是个开始。我们将在接下来的中挑战中学到更多与数组相关的知识。 在继续学习对象(
Objects )之前,让我们再花一点时间了解下更复杂的数组嵌套。
-数组的一个强大的特性是,它可以包含其他数组,甚至完全由其他数组组成。 在上一个挑战中,我们已经接触到了包含数组的数组,但它还算是比较简单的。 数组中的数组还可以再包含其他数组,即可以嵌套任意多层数组。 习惯上,我们称这种数据结构为
多维(multi-dimensional)数组 或嵌套(nested)数组。 请看如下的示例:
+数组的一个强大的特性是,它可以包含其他数组,甚至完全由其他数组组成。 在上一个挑战中,我们已经接触到了包含数组的数组,但它还算是比较简单的。 数组中的数组还可以再包含其他数组,即可以嵌套任意多层数组。 通过这种方式,数组可以很快成为非常复杂的数据结构,称为
多维(multi-dimensional) 数组,或嵌套(nested)数组。 请看如下的示例:
```js
let nestedArray = [
diff --git a/curriculum/challenges/chinese/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md b/curriculum/challenges/chinese/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
index 638ebd0430..82bc5afbec 100644
--- a/curriculum/challenges/chinese/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
+++ b/curriculum/challenges/chinese/05-back-end-development-and-apis/back-end-development-and-apis-projects/timestamp-microservice.md
@@ -16,6 +16,8 @@ dashedName: timestamp-microservice
完成本项目后,请将一个正常运行的 demo(项目演示)托管在可以公开访问的平台。 然后在 `Solution Link` 字段中提交它的 URL。 此外,还可以将项目的源码提交到 `GitHub Link` 中。
+**注意:** 时区转换不是本项目的目的,因此假设所有发送的有效日期将使用 `new Date()` 解析为 GMT 日期。
+
# --hints--
提交自己的项目,而不是示例的 URL。
@@ -28,7 +30,7 @@ dashedName: timestamp-microservice
};
```
-向 `/api/:date?` 发送一个带有有效日期的请求,应该很快(在几毫秒内)返回一个 JSON 对象,在这个 JSON 对象内有一个包含输入日期的 Unix 时间戳的 `unix` 键。
+对具有有效日期的 `/api/:date?` 的请求应返回一个带有 `unix` 键的 JSON 对象,该键是输入日期的 Unix 时间戳(以毫秒为单位)
```js
(getUserInput) =>
@@ -46,7 +48,7 @@ dashedName: timestamp-microservice
);
```
-向 `/api/:date?` 发送一个带有有效日期的请求,应该返回一个 JSON 对象,在这个 JSON 对象内有一个包含如 `Thu, 01 Jan 1970 00:00:00 GMT` 格式的输入日期的 `utc` 键。
+对具有有效日期的 `/api/:date?` 的请求应返回一个带有 `utc` 键的 JSON 对象,该键是输入日期的字符串,格式为:`Thu, 01 Jan 1970 00:00:00 GMT`
```js
(getUserInput) =>
@@ -64,7 +66,7 @@ dashedName: timestamp-microservice
);
```
-向 `/api/1451001600000` 发送请求,应该返回 `{ unix: 1451001600000, utc: "Fri, 25 Dec 2015 00:00:00 GMT" }`。
+对 `/api/1451001600000` 的请求应该返回 `{ unix: 1451001600000, utc: "Fri, 25 Dec 2015 00:00:00 GMT" }`
```js
(getUserInput) =>
@@ -81,11 +83,11 @@ dashedName: timestamp-microservice
);
```
-程序能成功处理能被 `new Date(date_string)` 解析的日期。
+你的项目可以处理可以通过 `new Date(date_string)` 成功解析的日期
```js
(getUserInput) =>
- $.get(getUserInput('url') + '/api/05 October 2011').then(
+ $.get(getUserInput('url') + '/api/05 October 2011, GMT').then(
(data) => {
assert(
data.unix === 1317772800000 &&
@@ -98,7 +100,7 @@ dashedName: timestamp-microservice
);
```
-如果传入的日期是无效的,将返回一个带有结构体 `{ error : "Invalid Date" }` 的对象。
+如果输入的日期字符串无效,api 将返回一个具有结构的对象 `{ error : "Invalid Date" }`
```js
(getUserInput) =>
@@ -112,7 +114,7 @@ dashedName: timestamp-microservice
);
```
-如果传入的参数是空日期,将返回一个包含当前时间的 `unix` 键的 JSON 对象。
+一个空的日期参数应该返回一个带有 `unix` 键的 JSON 对象中的当前时间
```js
(getUserInput) =>
@@ -127,7 +129,7 @@ dashedName: timestamp-microservice
);
```
-如果传入的参数是空日期,将返回一个包含当前时间的 `utc` 键的 JSON 对象。
+空日期参数应返回带有 `utc` 键的 JSON 对象中的当前时间
```js
(getUserInput) =>
diff --git a/curriculum/challenges/portuguese/10-coding-interview-prep/rosetta-code/longest-string-challenge.md b/curriculum/challenges/portuguese/10-coding-interview-prep/rosetta-code/longest-string-challenge.md
index 9880ca20e0..e11c9ef1d8 100644
--- a/curriculum/challenges/portuguese/10-coding-interview-prep/rosetta-code/longest-string-challenge.md
+++ b/curriculum/challenges/portuguese/10-coding-interview-prep/rosetta-code/longest-string-challenge.md
@@ -28,7 +28,7 @@ assert(typeof longestString == 'function');
assert(Array.isArray(longestString(['a', 'bb', 'ccc', 'ee', 'f', 'ggg'])));
```
-`longestString(["a", "bb", "ccc", "ee", "f", "ggg"])` deve retornar `["ccc", "ggg"]'`.
+`longestString(["a", "bb", "ccc", "ee", "f", "ggg"])` deve retornar `["ccc", "ggg"]`.
```js
assert.deepEqual(longestString(['a', 'bb', 'ccc', 'ee', 'f', 'ggg']), [
From 63a53ee382642ffd268f85dd295fc042f1e3afbe Mon Sep 17 00:00:00 2001
From: camperbot
Date: Sun, 19 Dec 2021 21:02:25 +0530
Subject: [PATCH 61/63] chore(i18n,curriculum): update translations (#44527)
---
.../data-structures/invert-a-binary-tree.md | 12 ++++++------
.../data-structures/invert-a-binary-tree.md | 12 ++++++------
2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/curriculum/challenges/chinese-traditional/10-coding-interview-prep/data-structures/invert-a-binary-tree.md b/curriculum/challenges/chinese-traditional/10-coding-interview-prep/data-structures/invert-a-binary-tree.md
index 8be38b0d5d..eab9a780e9 100644
--- a/curriculum/challenges/chinese-traditional/10-coding-interview-prep/data-structures/invert-a-binary-tree.md
+++ b/curriculum/challenges/chinese-traditional/10-coding-interview-prep/data-structures/invert-a-binary-tree.md
@@ -1,6 +1,6 @@
---
id: 587d8259367417b2b2512c83
-title: Invert a Binary Tree
+title: 反轉二叉樹
challengeType: 1
forumTopicId: 301704
dashedName: invert-a-binary-tree
@@ -8,11 +8,11 @@ dashedName: invert-a-binary-tree
# --description--
-Here will we create a function to invert a binary tree. Given a binary tree, we want to produce a new tree that is equivalently the mirror image of this tree. Running an inorder traversal on an inverted tree will explore the nodes in reverse order when compared to the inorder traversal of the original tree. Write a method to do this called `invert` on our binary tree. Calling this method should invert the current tree structure. Ideally, we would like to do this in-place in linear time. That is, we only visit each node once and we modify the existing tree structure as we go, without using any additional memory. Good luck!
+這裏我們將創建一個反轉二叉樹的函數。 給定二叉樹,我們希望生成一個新樹,它等效於該樹的鏡像。 與原始樹的中序遍歷相比,在倒轉樹上運行中序遍歷將以相反的順序探索節點。 在我們的二叉樹上編寫一個名爲 `invert` 的方法。 調用此方法應該反轉當前樹結構。 理想情況下,我們希望在線性時間內就地執行此操作。 也就是說,我們只訪問每個節點一次,我們在不使用任何額外內存的情況下修改現有的樹結構。 祝你好運!
# --hints--
-The `BinarySearchTree` data structure should exist.
+存在 `BinarySearchTree` 數據結構。
```js
assert(
@@ -26,7 +26,7 @@ assert(
);
```
-The binary search tree should have a method called `invert`.
+二叉搜索樹有一個名爲 `invert` 的方法。
```js
assert(
@@ -42,7 +42,7 @@ assert(
);
```
-The `invert` method should correctly invert the tree structure.
+`invert` 方法正確地反轉樹結構。
```js
assert(
@@ -70,7 +70,7 @@ assert(
);
```
-Inverting an empty tree should return `null`.
+反轉空樹應該返回 `null`。
```js
assert(
diff --git a/curriculum/challenges/chinese/10-coding-interview-prep/data-structures/invert-a-binary-tree.md b/curriculum/challenges/chinese/10-coding-interview-prep/data-structures/invert-a-binary-tree.md
index 8be38b0d5d..b9ff3268a1 100644
--- a/curriculum/challenges/chinese/10-coding-interview-prep/data-structures/invert-a-binary-tree.md
+++ b/curriculum/challenges/chinese/10-coding-interview-prep/data-structures/invert-a-binary-tree.md
@@ -1,6 +1,6 @@
---
id: 587d8259367417b2b2512c83
-title: Invert a Binary Tree
+title: 反转二叉树
challengeType: 1
forumTopicId: 301704
dashedName: invert-a-binary-tree
@@ -8,11 +8,11 @@ dashedName: invert-a-binary-tree
# --description--
-Here will we create a function to invert a binary tree. Given a binary tree, we want to produce a new tree that is equivalently the mirror image of this tree. Running an inorder traversal on an inverted tree will explore the nodes in reverse order when compared to the inorder traversal of the original tree. Write a method to do this called `invert` on our binary tree. Calling this method should invert the current tree structure. Ideally, we would like to do this in-place in linear time. That is, we only visit each node once and we modify the existing tree structure as we go, without using any additional memory. Good luck!
+这里我们将创建一个反转二叉树的函数。 给定二叉树,我们希望生成一个新树,它等效于该树的镜像。 与原始树的中序遍历相比,在倒转树上运行中序遍历将以相反的顺序探索节点。 在我们的二叉树上编写一个名为 `invert` 的方法。 调用此方法应该反转当前树结构。 理想情况下,我们希望在线性时间内就地执行此操作。 也就是说,我们只访问每个节点一次,我们在不使用任何额外内存的情况下修改现有的树结构。 祝你好运!
# --hints--
-The `BinarySearchTree` data structure should exist.
+存在 `BinarySearchTree` 数据结构。
```js
assert(
@@ -26,7 +26,7 @@ assert(
);
```
-The binary search tree should have a method called `invert`.
+二叉搜索树有一个名为 `invert` 的方法。
```js
assert(
@@ -42,7 +42,7 @@ assert(
);
```
-The `invert` method should correctly invert the tree structure.
+`invert` 方法正确地反转树结构。
```js
assert(
@@ -70,7 +70,7 @@ assert(
);
```
-Inverting an empty tree should return `null`.
+反转空树应该返回 `null`。
```js
assert(
From 304773d62be4b77882d38e5f1ab7a99b034a92ec Mon Sep 17 00:00:00 2001
From: Prashant <42613882+PrashantSakre@users.noreply.github.com>
Date: Mon, 20 Dec 2021 22:54:09 +0530
Subject: [PATCH 62/63] fix(i18n): Expand/Collapse Courses Button text (#44528)
* fix(i18n): Expand/Collapse Courses Button text
* Update client/i18n/locales/english/intro.json
Co-authored-by: Ilenia
* Update client/i18n/locales/english/intro.json
Co-authored-by: Ilenia
Co-authored-by: Ilenia
---
client/i18n/locales/english/intro.json | 4 ++--
client/src/templates/Introduction/components/block.tsx | 8 ++------
.../Introduction/components/certification-card.tsx | 8 ++------
3 files changed, 6 insertions(+), 14 deletions(-)
diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json
index 40cba07769..b7d7d28834 100644
--- a/client/i18n/locales/english/intro.json
+++ b/client/i18n/locales/english/intro.json
@@ -560,7 +560,7 @@
"browse-other": "Browse our other free certifications\n(we recommend doing these in order)",
"courses": "Courses",
"steps": "Steps",
- "expand": "Expand",
- "collapse": "Collapse"
+ "expand": "Expand courses",
+ "collapse": "Collapse courses"
}
}
diff --git a/client/src/templates/Introduction/components/block.tsx b/client/src/templates/Introduction/components/block.tsx
index 62392e1692..20b52cb67e 100644
--- a/client/src/templates/Introduction/components/block.tsx
+++ b/client/src/templates/Introduction/components/block.tsx
@@ -136,12 +136,10 @@ export class Block extends Component {
const blockIntroArr = blockIntroObj ? blockIntroObj.intro : [];
const {
expand: expandText,
- collapse: collapseText,
- courses: coursesText
+ collapse: collapseText
}: {
expand: string;
collapse: string;
- courses: string;
} = t('intro:misc-text');
return isProjectBlock ? (
@@ -203,9 +201,7 @@ export class Block extends Component {
>
- {`${
- isExpanded ? collapseText : expandText
- } ${coursesText.toLowerCase()}`}
+ {`${isExpanded ? collapseText : expandText}`}
{this.renderCheckMark(
diff --git a/client/src/templates/Introduction/components/certification-card.tsx b/client/src/templates/Introduction/components/certification-card.tsx
index 56a78da61f..807d1d3c03 100644
--- a/client/src/templates/Introduction/components/certification-card.tsx
+++ b/client/src/templates/Introduction/components/certification-card.tsx
@@ -37,12 +37,10 @@ const CertificationCard = ({
const {
expand: expandText,
- collapse: collapseText,
- courses: coursesText
+ collapse: collapseText
}: {
expand: string;
collapse: string;
- courses: string;
} = t('intro:misc-text');
return (
@@ -65,9 +63,7 @@ const CertificationCard = ({
>
- {`${
- isExpanded ? collapseText : expandText
- } ${coursesText.toLowerCase()}`}
+ {`${isExpanded ? collapseText : expandText}`}
{completedCount === numberOfSteps ? (
From 8614db7a327c0183e43ee9a09917ad59124a4f92 Mon Sep 17 00:00:00 2001
From: "Nicholas Carrigan (he/him)"
Date: Mon, 20 Dec 2021 10:36:31 -0800
Subject: [PATCH 63/63] feat: enable new curriculum (#44183)
* feat: use legacy flag
chore: reorder challenges
fix: linter
revert: server change
feat: unblock new editor
fix: proper order
fix: 0-based order
fix: broke the order
feat: move tribute certification to its own block
feat: split the old projects block into 4
fix: put all blocks in order
chore: add intro text
refactor: use block, not blockName in query
fix: project progress indicator
* fix: reorder new challenges/certs
* fix: reorder legacy challenges
* fix: reintroduce legacy certs
* feat: add showNewCurriculum flag to env
* chore: forgot sample.env
* feat: use feature flag for display
* fix: rename meta + dirs to match new blocks
* fix: add new blocks to help-category-map
* fix: update completion-modal for new GQL schema
* test: duplicate title/id errors -> warnings
* fix: update completion-modal to new GQL schema Mk2
* chore: re-order metas (again)
* fix: revert super-block-intro changes
The intro needs to show both legacy and new content. We need to decide
which pages are created, rather than than what a page shows when
rendered.
* feat: move upcoming curriculum into own superblock
* fix: handle one certification with two superBlocks
* fix: remove duplicated intros
* fix: remove duplicate projects from /settings
* fix: drop 'two' from Responsive Web Design Two
* chore: rename slug suffix from two to v2
* feat: control display of new curriculum
* feat: control project paths shown on /settings
* fix: use new project order for /settings
This does mean that /settings will change before the release, but I
don't think it's serious. All the projects are there, just not in the
legacy order.
* fix: claim/show cert button
* chore: remove isLegacy
Since we have legacy superblocks, we don't currently need individual
blocks to be legacy
* test: fix utils.test
* fix: verifyCanClaim needs certification
If Shaun removes the cert claim cards, maybe we can remove this entirely
* fix: add hasEditableBoundaries flags where needed
* chore: remove isUpcomingChange
* chore: v2 -> 22
Co-authored-by: Oliver Eyton-Williams
---
client/gatsby-node.js | 3 +
client/i18n/locales/english/intro.json | 106 +++++++++++++++---
.../back-end-development-and-apis/index.md | 1 +
.../learn/coding-interview-prep/index.md | 1 +
.../learn/data-analysis-with-python/index.md | 1 +
.../pages/learn/data-visualization/index.md | 1 +
.../front-end-development-libraries/index.md | 1 +
.../pages/learn/information-security/index.md | 1 +
.../index.md | 1 +
.../machine-learning-with-python/index.md | 1 +
.../pages/learn/quality-assurance/index.md | 1 +
.../pages/learn/relational-databases/index.md | 1 +
.../learn/responsive-web-design-22/index.md | 20 ++++
.../learn/responsive-web-design/index.md | 1 +
.../scientific-computing-with-python/index.md | 1 +
client/src/redux/prop-types.ts | 3 +
client/src/resources/cert-and-project-map.ts | 49 ++++++--
.../Challenges/classic/desktop-layout.tsx | 7 +-
.../Challenges/classic/mobile-layout.tsx | 8 +-
.../src/templates/Challenges/classic/show.tsx | 3 +
.../components/completion-modal.tsx | 73 +++++++++---
.../Challenges/projects/backend/Show.tsx | 3 +
.../Challenges/projects/frontend/Show.tsx | 3 +
.../Challenges/redux/completion-epic.js | 7 +-
.../src/templates/Challenges/video/Show.tsx | 3 +
.../components/cert-challenge.tsx | 5 +-
.../Introduction/super-block-intro.tsx | 9 +-
client/src/utils/ajax.ts | 4 +-
client/utils/challenge-types.js | 12 ++
client/utils/gatsby/challenge-page-creator.js | 14 ++-
client/utils/help-category-map.json | 7 +-
config/certification-settings.ts | 6 +-
.../meta.json | 14 +++
.../meta.json | 14 +++
.../build-a-survey-form-project/meta.json | 14 +++
.../meta.json | 14 +++
.../build-a-tribute-page-project/meta.json | 14 +++
.../meta.json | 5 +-
.../meta.json | 4 +-
.../meta.json | 5 +-
.../meta.json | 5 +-
.../meta.json | 5 +-
.../meta.json | 6 +-
.../meta.json | 4 +-
.../meta.json | 5 +-
.../meta.json | 5 +-
.../meta.json | 3 +-
.../meta.json | 6 +-
.../meta.json | 5 +-
.../meta.json | 5 +-
.../meta.json | 5 +-
...end-development-and-apis-certification.yml | 1 +
...ata-analysis-with-python-certification.yml | 1 +
.../data-visualization-certification.yml | 1 +
...nd-development-libraries-certification.yml | 1 +
.../information-security-certification.yml | 1 +
...thms-and-data-structures-certification.yml | 1 +
.../legacy-back-end-certification.yml | 1 +
...egacy-data-visualization-certification.yml | 1 +
.../legacy-front-end-certification.yml | 1 +
.../legacy-full-stack-certification.yml | 1 +
...ty-and-quality-assurance-certification.yml | 1 +
...ine-learning-with-python-certification.yml | 1 +
.../quality-assurance-certification.yml | 1 +
.../relational-databases-certification.yml | 1 +
.../responsive-web-design-certification.yml | 1 +
...ic-computing-with-python-certification.yml | 1 +
.../build-a-personal-portfolio-webpage.md | 47 ++++++++
.../build-a-product-landing-page.md | 55 +++++++++
.../build-a-survey-form.md | 57 ++++++++++
.../build-a-technical-documentation-page.md | 55 +++++++++
.../build-a-tribute-page.md | 43 +++++++
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-034.md | 0
.../step-035.md | 0
.../step-036.md | 0
.../step-037.md | 0
.../step-038.md | 0
.../step-039.md | 0
.../step-040.md | 0
.../step-041.md | 0
.../step-042.md | 0
.../step-043.md | 0
.../step-044.md | 0
.../step-045.md | 0
.../step-046.md | 0
.../step-047.md | 0
.../step-048.md | 0
.../step-049.md | 0
.../step-050.md | 0
.../step-051.md | 0
.../step-052.md | 0
.../step-053.md | 0
.../step-054.md | 0
.../step-055.md | 0
.../step-056.md | 0
.../step-057.md | 0
.../step-058.md | 0
.../step-059.md | 0
.../step-060.md | 0
.../step-061.md | 0
.../step-062.md | 0
.../step-063.md | 0
.../step-064.md | 0
.../step-065.md | 0
.../step-066.md | 0
.../step-067.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-034.md | 0
.../step-035.md | 0
.../step-036.md | 0
.../step-037.md | 0
.../step-038.md | 0
.../step-039.md | 0
.../step-040.md | 0
.../step-041.md | 0
.../step-042.md | 0
.../step-043.md | 0
.../step-044.md | 0
.../step-045.md | 0
.../step-046.md | 0
.../step-047.md | 0
.../step-048.md | 0
.../step-049.md | 0
.../step-050.md | 0
.../step-051.md | 0
.../step-052.md | 0
.../step-053.md | 0
.../step-054.md | 0
.../step-055.md | 0
.../step-056.md | 0
.../step-057.md | 0
.../step-058.md | 0
.../step-059.md | 0
.../step-060.md | 0
.../step-061.md | 0
.../step-062.md | 0
.../step-063.md | 0
.../step-064.md | 0
.../step-065.md | 0
.../step-066.md | 0
.../step-067.md | 0
.../step-068.md | 0
.../step-069.md | 0
.../step-070.md | 0
.../step-071.md | 0
.../step-072.md | 0
.../step-073.md | 0
.../step-074.md | 0
.../step-075.md | 0
.../step-076.md | 0
.../step-077.md | 0
.../step-078.md | 0
.../step-079.md | 0
.../step-080.md | 0
.../step-081.md | 0
.../step-082.md | 0
.../step-083.md | 0
.../step-084.md | 0
.../step-085.md | 0
.../step-086.md | 0
.../step-087.md | 0
.../step-088.md | 0
.../step-089.md | 0
.../step-090.md | 0
.../step-091.md | 0
.../step-092.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-034.md | 0
.../step-035.md | 0
.../step-036.md | 0
.../step-037.md | 0
.../step-038.md | 0
.../step-039.md | 0
.../step-040.md | 0
.../step-041.md | 0
.../step-042.md | 0
.../step-043.md | 0
.../step-044.md | 0
.../step-045.md | 0
.../step-046.md | 0
.../step-047.md | 0
.../step-048.md | 0
.../step-049.md | 0
.../step-050.md | 0
.../step-051.md | 0
.../step-052.md | 0
.../step-053.md | 0
.../step-054.md | 0
.../step-055.md | 0
.../step-056.md | 0
.../step-057.md | 0
.../step-058.md | 0
.../step-059.md | 0
.../step-060.md | 0
.../step-061.md | 0
.../step-062.md | 0
.../step-063.md | 0
.../step-064.md | 0
.../step-065.md | 0
.../step-066.md | 0
.../step-067.md | 0
.../step-068.md | 0
.../step-069.md | 0
.../step-070.md | 0
.../step-071.md | 0
.../step-072.md | 0
.../step-073.md | 0
.../step-074.md | 0
.../step-075.md | 0
.../step-076.md | 0
.../step-077.md | 0
.../step-078.md | 0
.../step-079.md | 0
.../step-080.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-034.md | 0
.../step-035.md | 0
.../step-036.md | 0
.../step-037.md | 0
.../step-038.md | 0
.../step-039.md | 0
.../step-040.md | 0
.../step-041.md | 0
.../step-042.md | 0
.../step-043.md | 0
.../step-044.md | 0
.../step-045.md | 0
.../step-046.md | 0
.../step-047.md | 0
.../step-048.md | 0
.../step-049.md | 0
.../step-050.md | 0
.../step-051.md | 0
.../step-052.md | 0
.../step-053.md | 0
.../step-054.md | 0
.../step-055.md | 0
.../step-056.md | 0
.../step-057.md | 0
.../step-058.md | 0
.../step-059.md | 0
.../step-060.md | 0
.../step-061.md | 0
.../step-062.md | 0
.../step-063.md | 0
.../step-064.md | 0
.../step-065.md | 0
.../step-066.md | 0
.../step-067.md | 0
.../step-068.md | 0
.../step-069.md | 0
.../step-070.md | 0
.../step-071.md | 0
.../step-072.md | 0
.../step-073.md | 0
.../step-074.md | 0
.../step-075.md | 0
.../step-076.md | 0
.../step-077.md | 0
.../step-078.md | 0
.../step-079.md | 0
.../step-080.md | 0
.../step-081.md | 0
.../step-082.md | 0
.../step-083.md | 0
.../step-084.md | 0
.../step-085.md | 0
.../step-086.md | 0
.../step-087.md | 0
.../step-088.md | 0
.../step-089.md | 0
.../step-090.md | 0
.../step-091.md | 0
.../step-092.md | 0
.../step-093.md | 0
.../step-094.md | 0
.../step-095.md | 0
.../step-096.md | 0
.../step-097.md | 0
.../step-098.md | 0
.../step-099.md | 0
.../step-100.md | 0
.../step-101.md | 0
.../step-102.md | 0
.../step-103.md | 0
.../step-104.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-034.md | 0
.../step-035.md | 0
.../step-036.md | 0
.../step-037.md | 0
.../step-038.md | 0
.../step-039.md | 0
.../step-040.md | 0
.../step-041.md | 0
.../step-042.md | 0
.../step-043.md | 0
.../step-044.md | 0
.../step-045.md | 0
.../step-046.md | 0
.../step-047.md | 0
.../step-048.md | 0
.../step-049.md | 0
.../step-050.md | 0
.../step-051.md | 0
.../step-052.md | 0
.../step-053.md | 0
.../step-054.md | 0
.../step-055.md | 0
.../step-056.md | 0
.../step-057.md | 0
.../step-058.md | 0
.../step-059.md | 0
.../step-060.md | 0
.../step-061.md | 0
.../step-062.md | 0
.../step-063.md | 0
.../step-064.md | 0
.../step-065.md | 0
.../step-066.md | 0
.../step-067.md | 0
.../step-068.md | 0
.../step-069.md | 0
.../step-070.md | 0
.../step-071.md | 0
.../step-072.md | 0
.../step-073.md | 0
.../step-074.md | 0
.../step-075.md | 0
.../step-076.md | 0
.../step-077.md | 0
.../step-078.md | 0
.../step-079.md | 0
.../step-080.md | 0
.../step-081.md | 0
.../step-082.md | 0
.../step-083.md | 0
.../step-084.md | 0
.../step-085.md | 0
.../step-086.md | 0
.../step-087.md | 0
.../step-088.md | 0
.../step-089.md | 0
.../step-090.md | 0
.../step-091.md | 0
.../step-092.md | 0
.../step-093.md | 0
.../step-094.md | 0
.../step-095.md | 0
.../step-096.md | 0
.../step-097.md | 0
.../step-098.md | 0
.../step-099.md | 0
.../step-100.md | 0
.../step-101.md | 0
.../step-102.md | 0
.../step-103.md | 0
.../step-104.md | 0
.../step-105.md | 0
.../step-106.md | 0
.../step-107.md | 0
.../step-108.md | 0
.../step-109.md | 0
.../step-110.md | 0
.../step-111.md | 0
.../step-112.md | 0
.../step-113.md | 0
.../step-114.md | 0
.../step-115.md | 0
.../step-116.md | 0
.../step-117.md | 0
.../step-118.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-034.md | 0
.../step-035.md | 0
.../step-036.md | 0
.../step-037.md | 0
.../step-038.md | 0
.../step-039.md | 0
.../step-040.md | 0
.../step-041.md | 0
.../step-042.md | 0
.../step-043.md | 0
.../step-044.md | 0
.../step-045.md | 0
.../step-046.md | 0
.../step-047.md | 0
.../step-048.md | 0
.../step-049.md | 0
.../step-050.md | 0
.../step-051.md | 0
.../step-052.md | 0
.../step-053.md | 0
.../step-054.md | 0
.../step-055.md | 0
.../step-056.md | 0
.../step-057.md | 0
.../step-058.md | 0
.../step-059.md | 0
.../step-060.md | 0
.../step-061.md | 0
.../step-062.md | 0
.../step-063.md | 0
.../step-064.md | 0
.../step-065.md | 0
.../step-066.md | 0
.../step-067.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-034.md | 0
.../step-035.md | 0
.../step-036.md | 0
.../step-037.md | 0
.../step-038.md | 0
.../step-039.md | 0
.../step-040.md | 0
.../step-041.md | 0
.../step-042.md | 0
.../step-043.md | 0
.../step-044.md | 0
.../step-045.md | 0
.../step-046.md | 0
.../step-047.md | 0
.../step-048.md | 0
.../step-049.md | 0
.../step-050.md | 0
.../step-051.md | 0
.../step-052.md | 0
.../step-053.md | 0
.../step-054.md | 0
.../step-055.md | 0
.../step-056.md | 0
.../step-057.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-034.md | 0
.../step-035.md | 0
.../step-036.md | 0
.../step-037.md | 0
.../step-038.md | 0
.../step-039.md | 0
.../step-040.md | 0
.../step-041.md | 0
.../step-042.md | 0
.../step-043.md | 0
.../step-044.md | 0
.../step-045.md | 0
.../step-046.md | 0
.../step-047.md | 0
.../step-048.md | 0
.../step-049.md | 0
.../step-050.md | 0
.../step-051.md | 0
.../step-052.md | 0
.../step-053.md | 0
.../step-054.md | 0
.../step-055.md | 0
.../step-056.md | 0
.../step-057.md | 0
.../step-058.md | 0
.../step-059.md | 0
.../step-060.md | 0
.../step-061.md | 0
.../step-062.md | 0
.../step-063.md | 0
.../step-064.md | 0
.../step-065.md | 0
.../step-066.md | 0
.../step-067.md | 0
.../step-068.md | 0
.../step-069.md | 0
.../step-070.md | 0
.../step-071.md | 0
.../step-072.md | 0
.../step-073.md | 0
.../step-074.md | 0
.../step-075.md | 0
.../step-076.md | 0
.../step-077.md | 0
.../step-078.md | 0
.../step-079.md | 0
.../step-080.md | 0
.../step-081.md | 0
.../step-082.md | 0
.../step-083.md | 0
.../step-084.md | 0
.../step-085.md | 0
.../step-086.md | 0
.../step-087.md | 0
.../step-088.md | 0
.../step-089.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-034.md | 0
.../step-035.md | 0
.../step-036.md | 0
.../step-037.md | 0
.../step-038.md | 0
.../step-039.md | 0
.../step-040.md | 0
.../step-041.md | 0
.../step-042.md | 0
.../step-043.md | 0
.../step-044.md | 0
.../step-045.md | 0
.../step-046.md | 0
.../step-047.md | 0
.../step-048.md | 0
.../step-049.md | 0
.../step-050.md | 0
.../step-051.md | 0
.../step-052.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-034.md | 0
.../step-035.md | 0
.../step-036.md | 0
.../step-037.md | 0
.../step-038.md | 0
.../step-039.md | 0
.../step-040.md | 0
.../step-041.md | 0
.../step-042.md | 0
.../step-043.md | 0
.../step-044.md | 0
.../step-045.md | 0
.../step-046.md | 0
.../step-001.md | 0
.../step-002.md | 0
.../step-003.md | 0
.../step-004.md | 0
.../step-005.md | 0
.../step-006.md | 0
.../step-007.md | 0
.../step-008.md | 0
.../step-009.md | 0
.../step-010.md | 0
.../step-011.md | 0
.../step-012.md | 0
.../step-013.md | 0
.../step-014.md | 0
.../step-015.md | 0
.../step-016.md | 0
.../step-017.md | 0
.../step-018.md | 0
.../step-019.md | 0
.../step-020.md | 0
.../step-021.md | 0
.../step-022.md | 0
.../step-023.md | 0
.../step-024.md | 0
.../step-025.md | 0
.../step-026.md | 0
.../step-027.md | 0
.../step-028.md | 0
.../step-029.md | 0
.../step-030.md | 0
.../step-031.md | 0
.../step-032.md | 0
.../step-033.md | 0
.../step-034.md | 0
.../step-035.md | 0
.../step-036.md | 0
.../step-037.md | 0
.../step-038.md | 0
.../step-039.md | 0
.../step-040.md | 0
.../step-041.md | 0
.../step-042.md | 0
.../step-043.md | 0
.../step-044.md | 0
.../step-045.md | 0
.../step-046.md | 0
.../step-047.md | 0
.../step-048.md | 0
.../step-049.md | 0
.../step-050.md | 0
.../step-051.md | 0
.../step-052.md | 0
.../step-053.md | 0
.../step-054.md | 0
.../step-055.md | 0
.../step-056.md | 0
.../step-057.md | 0
.../step-058.md | 0
.../step-059.md | 0
.../step-060.md | 0
.../step-061.md | 0
.../step-062.md | 0
.../step-063.md | 0
.../step-064.md | 0
.../step-065.md | 0
.../step-066.md | 0
curriculum/getChallenges.js | 20 +++-
curriculum/schema/challengeSchema.js | 1 +
curriculum/test/utils/challengeTitles.js | 3 +-
curriculum/test/utils/mongoIds.js | 7 +-
curriculum/utils.js | 26 ++++-
curriculum/utils.test.js | 55 ++++++++-
999 files changed, 767 insertions(+), 113 deletions(-)
create mode 100644 client/src/pages/learn/responsive-web-design-22/index.md
create mode 100644 curriculum/challenges/_meta/build-a-personal-portfolio-webpage-project/meta.json
create mode 100644 curriculum/challenges/_meta/build-a-product-landing-page-project/meta.json
create mode 100644 curriculum/challenges/_meta/build-a-survey-form-project/meta.json
create mode 100644 curriculum/challenges/_meta/build-a-technical-documentation-page-project/meta.json
create mode 100644 curriculum/challenges/_meta/build-a-tribute-page-project/meta.json
create mode 100644 curriculum/challenges/english/14-responsive-web-design-22/build-a-personal-portfolio-webpage-project/build-a-personal-portfolio-webpage.md
create mode 100644 curriculum/challenges/english/14-responsive-web-design-22/build-a-product-landing-page-project/build-a-product-landing-page.md
create mode 100644 curriculum/challenges/english/14-responsive-web-design-22/build-a-survey-form-project/build-a-survey-form.md
create mode 100644 curriculum/challenges/english/14-responsive-web-design-22/build-a-technical-documentation-page-project/build-a-technical-documentation-page.md
create mode 100644 curriculum/challenges/english/14-responsive-web-design-22/build-a-tribute-page-project/build-a-tribute-page.md
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-034.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-035.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-036.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-037.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-038.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-039.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-040.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-041.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-042.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-043.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-044.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-045.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-046.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-047.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-048.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-049.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-050.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-051.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-052.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-053.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-054.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-055.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-056.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-057.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-058.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-059.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-060.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-061.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-062.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-063.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-064.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-065.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-066.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-accessibility-by-building-a-quiz/step-067.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-034.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-035.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-036.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-037.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-038.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-039.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-040.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-041.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-042.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-043.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-044.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-045.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-046.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-047.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-048.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-049.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-050.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-051.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-052.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-053.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-054.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-055.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-056.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-057.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-058.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-059.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-060.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-061.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-062.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-063.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-064.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-065.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-066.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-067.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-068.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-069.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-070.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-071.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-072.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-073.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-074.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-075.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-076.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-077.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-078.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-079.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-080.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-081.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-082.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-083.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-084.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-085.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-086.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-087.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-088.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-089.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-090.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-091.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-basic-css-by-building-a-cafe-menu/step-092.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-animation-by-building-a-ferris-wheel/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-flexbox-by-building-a-photo-gallery/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-034.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-035.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-036.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-037.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-038.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-039.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-040.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-041.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-042.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-043.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-044.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-045.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-046.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-047.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-048.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-049.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-050.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-051.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-052.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-053.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-054.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-055.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-056.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-057.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-058.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-059.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-060.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-061.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-062.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-063.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-064.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-065.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-066.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-067.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-068.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-069.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-070.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-071.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-072.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-073.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-074.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-075.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-076.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-077.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-078.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-079.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-grid-by-building-a-magazine/step-080.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-034.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-035.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-036.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-037.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-038.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-039.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-040.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-041.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-042.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-043.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-044.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-045.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-046.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-047.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-048.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-049.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-050.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-051.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-052.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-053.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-054.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-055.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-056.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-057.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-058.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-059.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-060.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-061.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-062.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-063.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-064.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-065.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-066.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-067.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-068.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-069.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-070.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-071.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-072.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-073.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-074.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-075.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-076.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-077.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-078.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-079.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-080.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-081.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-082.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-083.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-084.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-085.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-086.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-087.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-088.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-089.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-090.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-091.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-092.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-093.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-094.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-095.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-096.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-097.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-098.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-099.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-100.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-101.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-102.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-103.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-transforms-by-building-a-penguin/step-104.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-034.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-035.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-036.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-037.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-038.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-039.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-040.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-041.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-042.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-043.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-044.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-045.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-046.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-047.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-048.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-049.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-050.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-051.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-052.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-053.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-054.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-055.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-056.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-057.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-058.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-059.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-060.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-061.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-062.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-063.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-064.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-065.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-066.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-067.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-068.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-069.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-070.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-071.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-072.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-073.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-074.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-075.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-076.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-077.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-078.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-079.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-080.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-081.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-082.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-083.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-084.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-085.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-086.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-087.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-088.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-089.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-090.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-091.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-092.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-093.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-094.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-095.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-096.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-097.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-098.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-099.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-100.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-101.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-102.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-103.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-104.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-105.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-106.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-107.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-108.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-109.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-110.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-111.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-112.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-113.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-114.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-115.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-116.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-117.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-css-variables-by-building-a-city-skyline/step-118.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-034.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-035.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-036.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-037.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-038.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-039.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-040.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-041.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-042.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-043.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-044.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-045.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-046.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-047.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-048.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-049.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-050.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-051.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-052.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-053.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-054.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-055.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-056.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-057.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-058.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-059.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-060.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-061.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-062.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-063.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-064.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-065.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-066.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-by-building-a-cat-photo-app/step-067.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-034.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-035.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-036.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-037.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-038.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-039.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-040.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-041.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-042.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-043.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-044.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-045.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-046.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-047.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-048.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-049.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-050.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-051.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-052.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-053.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-054.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-055.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-056.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-html-forms-by-building-a-registration-form/step-057.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-034.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-035.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-036.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-037.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-038.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-039.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-040.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-041.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-042.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-043.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-044.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-045.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-046.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-047.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-048.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-049.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-050.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-051.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-052.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-053.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-054.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-055.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-056.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-057.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-058.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-059.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-060.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-061.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-062.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-063.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-064.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-065.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-066.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-067.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-068.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-069.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-070.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-071.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-072.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-073.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-074.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-075.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-076.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-077.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-078.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-079.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-080.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-081.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-082.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-083.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-084.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-085.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-086.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-087.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-088.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-intermediate-css-by-building-a-picasso-painting/step-089.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-034.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-035.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-036.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-037.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-038.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-039.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-040.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-041.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-042.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-043.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-044.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-045.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-046.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-047.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-048.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-049.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-050.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-051.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-052.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-responsive-web-design-by-building-a-piano/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-034.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-035.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-036.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-037.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-038.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-039.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-040.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-041.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-042.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-043.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-044.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-045.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-the-css-box-model-by-building-a-rothko-painting/step-046.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-001.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-002.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-003.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-004.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-005.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-006.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-007.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-008.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-009.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-010.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-011.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-012.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-013.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-014.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-015.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-016.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-017.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-018.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-019.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-020.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-021.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-022.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-023.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-024.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-025.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-026.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-027.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-028.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-029.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-030.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-031.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-032.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-033.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-034.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-035.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-036.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-037.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-038.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-039.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-040.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-041.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-042.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-043.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-044.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-045.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-046.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-047.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-048.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-049.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-050.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-051.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-052.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-053.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-054.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-055.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-056.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-057.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-058.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-059.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-060.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-061.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-062.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-063.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-064.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-065.md (100%)
rename curriculum/challenges/english/{01-responsive-web-design => 14-responsive-web-design-22}/learn-typography-by-building-a-nutrition-label/step-066.md (100%)
diff --git a/client/gatsby-node.js b/client/gatsby-node.js
index 1a895117d2..2177a095b5 100644
--- a/client/gatsby-node.js
+++ b/client/gatsby-node.js
@@ -76,6 +76,7 @@ exports.createPages = function createPages({ graphql, actions, reporter }) {
node {
challenge {
block
+ certification
challengeType
fields {
slug
@@ -116,6 +117,7 @@ exports.createPages = function createPages({ graphql, actions, reporter }) {
component
}
frontmatter {
+ certification
block
superBlock
title
@@ -183,6 +185,7 @@ exports.createPages = function createPages({ graphql, actions, reporter }) {
const pageBuilder = createByIdentityMap[nodeIdentity](createPage);
pageBuilder(edge);
} catch (e) {
+ console.log(e);
console.log(`
ident: ${nodeIdentity} does not belong to a function
diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json
index b7d7d28834..744972a5c0 100644
--- a/client/i18n/locales/english/intro.json
+++ b/client/i18n/locales/english/intro.json
@@ -63,47 +63,119 @@
"Time to put your newly learnt skills to work. By working on these projects, you will get a chance to apply all of the skills, principles, and concepts you have learned so far: HTML, CSS, Visual Design, Accessibility, and more.",
"Complete the five web programming projects below to earn your Responsive Web Design certification."
]
+ }
+ }
+ },
+ "responsive-web-design-22": {
+ "title": "Responsive Web Design",
+ "intro": [
+ "In this Responsive Web Design Certification, you'll learn the languages that developers use to build webpages: HTML (Hypertext Markup Language) for content, and CSS (Cascading Style Sheets) for design.",
+ "First, you'll build a cat photo app to learn the basics of HTML and CSS. Later, you'll learn modern techniques like CSS variables by building a penguin, and best practices for accessibility by building a web form.",
+ "Finally, you'll learn how to make webpages that respond to different screen sizes by building a Twitter card with Flexbox, and a complex blog layout with CSS Grid."
+ ],
+ "note": "Note: Some browser extensions, such as ad-blockers and dark mode extensions can interfere with the tests. If you face issues, we recommend disabling extensions that modify the content or layout of pages, while taking the course.",
+ "blocks": {
+ "build-a-tribute-page-project": {
+ "title": "Build a Tribute Page Project",
+ "intro": ["placeholder", "holder of place"]
+ },
+ "build-a-personal-portfolio-webpage-project": {
+ "title": "Build a Personal Portfolio Webpage Project",
+ "intro": ["placeholder", "holder of place"]
+ },
+ "build-a-product-landing-page-project": {
+ "title": "Build a Product Landing Page Project",
+ "intro": ["placeholder", "holder of place"]
+ },
+ "build-a-survey-form-project": {
+ "title": "Build a Survey Form Project",
+ "intro": ["placeholder", "holder of place"]
+ },
+ "build-a-technical-documentation-page-project": {
+ "title": "Build a Technical Documentation Page Project",
+ "intro": ["placeholder", "holder of place"]
},
"learn-html-by-building-a-cat-photo-app": {
"title": "Learn HTML by Building a Cat Photo App",
- "intro": ["", ""]
+ "intro": [
+ "HTML tags give a webpage its structure. You can use HTML tags to add photos, buttons, and other elements to your webpage.",
+ "In this course, you'll learn the most common HTML tags by building your own cat photo app."
+ ]
},
"learn-basic-css-by-building-a-cafe-menu": {
"title": "Learn Basic CSS by Building a Cafe Menu",
- "intro": ["", ""]
+ "intro": [
+ "CSS tells the browser how to display your webpage. You can use CSS to set the color, font, size, and other aspects of HTML elements.",
+ "In this course, you'll learn CSS by designing a menu page for a cafe webpage."
+ ]
},
"learn-the-css-box-model-by-building-a-rothko-painting": {
"title": "Learn the CSS Box Model by Building a Rothko Painting",
"intro": [
- "Mark Rothko was known for his abstract style of painting. Rothko paintings commonly depicted rectangular regions of color in varying sizes.",
- "In this lesson, you will be using CSS to create your own painting in Rothko's style. You will use many of the skills you have already been practicing, as well as new CSS tool such as blur and transform."
+ "Every HTML element is its own box – with its own spacing and a border. This is called the Box Model.",
+ "In this course, you'll use CSS and the Box Model to create your own Rothko-style rectangular art pieces."
]
},
"learn-css-variables-by-building-a-city-skyline": {
"title": "Learn CSS Variables by Building a City Skyline",
- "intro": ["", ""]
+ "intro": [
+ "CSS variables help you organize your styles and reuse them.",
+ "In this course, you'll build a city skyline. You'll learn how to configure CSS variables so you can reuse them whenever you want."
+ ]
+ },
+ "learn-html-forms-by-building-a-registration-form": {
+ "title": "Learn HTML Forms by Building a Registration Form",
+ "intro": [
+ "You can use HTML forms to collect information from people who visit your webpage.",
+ "In this course, you'll learn HTML forms by building a signup page. You'll learn how to control what types of data people can type into your form, and some new CSS tools for styling your page."
+ ]
},
- "learn-html-forms-by-building-a-registration-form": { "title": "Learn HTML Forms by Building a Registration Form", "intro": ["", ""] },
"learn-accessibility-by-building-a-quiz": {
"title": "Learn Accessibility by Building a Quiz",
- "intro": ["", ""]
+ "intro": [
+ "Accessibility is making your webpage easy for all people to use – even people with disabilities.",
+ "In this course, you'll build a quiz webpage. You'll learn accessibility tools such as keyboard shortcuts, ARIA attributes, and design best practices."
+ ]
},
"learn-intermediate-css-by-building-a-picasso-painting": {
"title": "Learn Intermediate CSS by Building a Picasso Painting",
"intro": [
- "Pablo Picasso was known for his Cubism style of painting, a style recognized by representations of objects broken down and reassembled from multiple perspectives. Picasso's paintings are often highly abstract and thought provoking.",
- "In this course, you will use CSS to create your own painting in the style of Picasso. You will learn about FontAwesome SVG icons, CSS positioning, and reinforce the skills you have already been learning."
+ "In this course, you'll use learn some intermediate CSS techniques by coding your own Picasso painting webpage. You'll learn about SVG icons, CSS positioning, and review other CSS skills you've learned."
+ ]
+ },
+ "learn-responsive-web-design-by-building-a-piano": {
+ "title": "Learn Responsive Web Design by Building a Piano",
+ "intro": [
+ "Responsive Design tells your webpage how it should look on different-sized screens.",
+ "In this course, you'll use CSS and Responsive Design to code a piano. You'll also learn more about media queries and pseudo selectors."
+ ]
+ },
+ "learn-css-flexbox-by-building-a-photo-gallery": {
+ "title": "Learn CSS Flexbox by Building a Photo Gallery",
+ "intro": [
+ "Flexbox helps you design your webpage so that it looks good on any screen size.",
+ "In this course, you'll use Flexbox to build a responsive photo gallery webpage."
+ ]
+ },
+ "learn-css-grid-by-building-a-magazine": {
+ "title": "Learn CSS Grid by Building a Magazine",
+ "intro": [
+ "CSS Grid gives you control over the rows and columns of your webpage design.",
+ "In this course, you'll build a magazine article. You'll learn how to use CSS Grid, including concepts like grid rows and grid columns."
]
},
- "learn-responsive-web-design-by-building-a-piano": { "title": "Learn Responsive Web Design by Building a Piano", "intro": ["", ""] },
- "learn-css-flexbox-by-building-a-photo-gallery": { "title": "Learn CSS Flexbox by Building a Photo Gallery", "intro": ["", ""] },
- "learn-css-grid-by-building-a-magazine": { "title": "Learn CSS Grid by Building a Magazine", "intro": ["", ""] },
"learn-typography-by-building-a-nutrition-label": {
"title": "Learn Typography by Building a Nutrition Label",
- "intro": ["", ""]
+ "intro": [
+ "Typography is the art of styling your text to be easily readable and suit its purpose.",
+ "In this course, you'll use typography to build a nutrition label webpage. You'll learn how to style text, adjust line height, and position your text using CSS."
+ ]
},
"learn-css-transforms-by-building-a-penguin": { "title": "Learn CSS Transforms by Building a Penguin", "intro": ["", ""] },
- "learn-css-animation-by-building-a-ferris-wheel": { "title": "Learn CSS Animation by Building a Ferris Wheel", "intro": ["", ""] },
+ "learn-css-animation-by-building-a-ferris-wheel": { "title": "Learn CSS Animation by Building a Ferris Wheel", "intro": [
+ "You can use CSS animation to draw attention to specific sections of your webpage and make it more engaging.",
+ "In this course, you'll build a Ferris wheel. You'll learn how to use CSS to animate elements, transform them, and adjust their speed."
+ ] },
"learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet": { "title": "Learn More About CSS Pseudo Selectors By Building A Balance Sheet", "intro": ["", ""] }
}
},
@@ -560,7 +632,11 @@
"browse-other": "Browse our other free certifications\n(we recommend doing these in order)",
"courses": "Courses",
"steps": "Steps",
+ "expand": "Expand",
+ "collapse": "Collapse",
"expand": "Expand courses",
- "collapse": "Collapse courses"
+ "collapse": "Collapse courses",
+ "legacy-header": "Legacy Courses",
+ "legacy-desc": "These courses are no longer part of the certification path, but are still available for you to further your learning."
}
}
diff --git a/client/src/pages/learn/back-end-development-and-apis/index.md b/client/src/pages/learn/back-end-development-and-apis/index.md
index 7e54e1ef19..780563043f 100644
--- a/client/src/pages/learn/back-end-development-and-apis/index.md
+++ b/client/src/pages/learn/back-end-development-and-apis/index.md
@@ -1,6 +1,7 @@
---
title: Back End Development and APIs
superBlock: back-end-development-and-apis
+certification: back-end-development-and-apis
---
## Introduction to Back End Development and APIs
diff --git a/client/src/pages/learn/coding-interview-prep/index.md b/client/src/pages/learn/coding-interview-prep/index.md
index 977c233cf9..43e82b6bbf 100644
--- a/client/src/pages/learn/coding-interview-prep/index.md
+++ b/client/src/pages/learn/coding-interview-prep/index.md
@@ -1,6 +1,7 @@
---
title: Coding Interview Prep
superBlock: coding-interview-prep
+certification: coding-interview-prep
---
## Introduction to Coding Interview Prep
diff --git a/client/src/pages/learn/data-analysis-with-python/index.md b/client/src/pages/learn/data-analysis-with-python/index.md
index 82c1fffb2d..3a8f87eb1e 100644
--- a/client/src/pages/learn/data-analysis-with-python/index.md
+++ b/client/src/pages/learn/data-analysis-with-python/index.md
@@ -1,6 +1,7 @@
---
title: Data Analysis with Python
superBlock: data-analysis-with-python
+certification: data-analysis-with-python
---
## Introduction to Data Analysis with Python
diff --git a/client/src/pages/learn/data-visualization/index.md b/client/src/pages/learn/data-visualization/index.md
index 648d8171fd..c0435dfc0b 100644
--- a/client/src/pages/learn/data-visualization/index.md
+++ b/client/src/pages/learn/data-visualization/index.md
@@ -1,6 +1,7 @@
---
title: Data Visualization
superBlock: data-visualization
+certification: data-visualization
---
## Introduction to Data Visualization
diff --git a/client/src/pages/learn/front-end-development-libraries/index.md b/client/src/pages/learn/front-end-development-libraries/index.md
index 7932f57b90..ebc9011b4f 100644
--- a/client/src/pages/learn/front-end-development-libraries/index.md
+++ b/client/src/pages/learn/front-end-development-libraries/index.md
@@ -1,6 +1,7 @@
---
title: Front End Development Libraries
superBlock: front-end-development-libraries
+certification: front-end-development-libraries
---
## Introduction to Front End Development Libraries
diff --git a/client/src/pages/learn/information-security/index.md b/client/src/pages/learn/information-security/index.md
index bea921f99e..472eac0fea 100644
--- a/client/src/pages/learn/information-security/index.md
+++ b/client/src/pages/learn/information-security/index.md
@@ -1,6 +1,7 @@
---
title: Information Security
superBlock: information-security
+certification: information-security
---
## Introduction to Information Security
diff --git a/client/src/pages/learn/javascript-algorithms-and-data-structures/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures/index.md
index 249c8b2504..1874f71437 100644
--- a/client/src/pages/learn/javascript-algorithms-and-data-structures/index.md
+++ b/client/src/pages/learn/javascript-algorithms-and-data-structures/index.md
@@ -1,6 +1,7 @@
---
title: JavaScript Algorithms and Data Structures
superBlock: javascript-algorithms-and-data-structures
+certification: javascript-algorithms-and-data-structures
---
## Introduction to JavaScript Algorithms and Data Structures
diff --git a/client/src/pages/learn/machine-learning-with-python/index.md b/client/src/pages/learn/machine-learning-with-python/index.md
index 1796acaff8..c251181def 100644
--- a/client/src/pages/learn/machine-learning-with-python/index.md
+++ b/client/src/pages/learn/machine-learning-with-python/index.md
@@ -1,6 +1,7 @@
---
title: Machine Learning with Python
superBlock: machine-learning-with-python
+certification: machine-learning-with-python
---
## Introduction to Machine Learning with Python
diff --git a/client/src/pages/learn/quality-assurance/index.md b/client/src/pages/learn/quality-assurance/index.md
index e25b21d7eb..e3e5affd13 100644
--- a/client/src/pages/learn/quality-assurance/index.md
+++ b/client/src/pages/learn/quality-assurance/index.md
@@ -1,6 +1,7 @@
---
title: Quality Assurance
superBlock: quality-assurance
+certification: quality-assurance
---
## Introduction to Quality Assurance
diff --git a/client/src/pages/learn/relational-databases/index.md b/client/src/pages/learn/relational-databases/index.md
index 630d7ee662..afce9c161d 100644
--- a/client/src/pages/learn/relational-databases/index.md
+++ b/client/src/pages/learn/relational-databases/index.md
@@ -1,6 +1,7 @@
---
title: Relational Databases
superBlock: relational-databases
+certification: relational-databases
---
## Introduction to Relational Databases
diff --git a/client/src/pages/learn/responsive-web-design-22/index.md b/client/src/pages/learn/responsive-web-design-22/index.md
new file mode 100644
index 0000000000..c317eb6879
--- /dev/null
+++ b/client/src/pages/learn/responsive-web-design-22/index.md
@@ -0,0 +1,20 @@
+---
+title: Responsive Web Design
+superBlock: responsive-web-design-22
+certification: responsive-web-design
+---
+
+## Introduction to Responsive Web Design
+
+Welcome to Responsive Web Design!
+
+Let's first take a look at what is in the scope of Responsive Web Design (and what is not).
+The Web part of Responsive Web Design means that the content you are creating is designed to be delivered over the web to users' browsers. To do this, you will need to learn the language that browsers use to describe web pages: HTML (Hypertext Markup Language) for content, and CSS (Cascading Style Sheets) for design.
+
+That brings us to design. Web Design focuses on how websites should look and behave to the end user. There are plenty of additional aspects to websites, including how to host a website so people can access it, how to protect your websites and store your users' data, and the ethos behind what should go on a website in the first place. These are somewhat harder to teach, but do require a good understanding of the capabilities of the web in modern contexts.
+
+And what of the word Responsive? Well, that brings us to the idea of modern contexts. In today's world, websites are expected to be just as accessible on laptops, tablets and phones. If you compare your user experience on a document-editing program on a computer versus a document-editing program on a mobile, the features on mobile are likely to be far more constrained. This applies in some way to websites as well, but developers have found interesting ways to adapt to the mobile experience, not in the least by harnessing powerful features built for flexible (a.k.a responsive) web displays such as CSS `flexbox` and CSS `grid`.
+
+Ready to learn about good design practices for the web? Let's get started!
+
+[Begin Course](https://www.freecodecamp.org/learn/responsive-web-design/basic-html-and-html5/)
diff --git a/client/src/pages/learn/responsive-web-design/index.md b/client/src/pages/learn/responsive-web-design/index.md
index e365819b31..eef50f2e72 100644
--- a/client/src/pages/learn/responsive-web-design/index.md
+++ b/client/src/pages/learn/responsive-web-design/index.md
@@ -1,6 +1,7 @@
---
title: Responsive Web Design
superBlock: responsive-web-design
+certification: responsive-web-design
---
## Introduction to Responsive Web Design
diff --git a/client/src/pages/learn/scientific-computing-with-python/index.md b/client/src/pages/learn/scientific-computing-with-python/index.md
index a568c760bb..d44aeb1dd2 100644
--- a/client/src/pages/learn/scientific-computing-with-python/index.md
+++ b/client/src/pages/learn/scientific-computing-with-python/index.md
@@ -1,6 +1,7 @@
---
title: Scientific Computing with Python
superBlock: scientific-computing-with-python
+certification: scientific-computing-with-python
---
## Introduction to Scientific Computing with Python
diff --git a/client/src/redux/prop-types.ts b/client/src/redux/prop-types.ts
index 18a60b8b77..9f167b05bf 100644
--- a/client/src/redux/prop-types.ts
+++ b/client/src/redux/prop-types.ts
@@ -86,6 +86,8 @@ export type MarkdownRemark = {
block: string;
isBeta: boolean;
superBlock: SuperBlocks;
+ // TODO: make enum like superBlock
+ certification: string;
title: typeof certMap[number]['title'];
};
headings: [
@@ -130,6 +132,7 @@ export interface VideoLocaleIds {
export type ChallengeNode = {
challenge: {
block: string;
+ certification: string;
challengeOrder: number;
challengeType: number;
dashedName: string;
diff --git a/client/src/resources/cert-and-project-map.ts b/client/src/resources/cert-and-project-map.ts
index 084ce891d7..c654e6bdbf 100644
--- a/client/src/resources/cert-and-project-map.ts
+++ b/client/src/resources/cert-and-project-map.ts
@@ -1,7 +1,11 @@
import { SuperBlocks } from '../../../config/certification-settings';
+import envData from '../../../config/env.json';
+
+const { showNewCurriculum } = envData;
const responsiveWebBase =
'/learn/responsive-web-design/responsive-web-design-projects';
+const responsiveWeb22Base = '/learn/responsive-web-design-22';
const jsAlgoBase =
'/learn/javascript-algorithms-and-data-structures/' +
'javascript-algorithms-and-data-structures-projects';
@@ -294,38 +298,50 @@ const certMap = [
certSlug: SuperBlocks.RespWebDesign,
flag: 'isRespWebDesignCert',
projects: [
- {
- id: 'bd7158d8c442eddfaeb5bd18',
- title: 'Build a Tribute Page',
- link: `${responsiveWebBase}/build-a-tribute-page`,
- certSlug: SuperBlocks.RespWebDesign
- },
{
id: '587d78af367417b2b2512b03',
title: 'Build a Survey Form',
- link: `${responsiveWebBase}/build-a-survey-form`,
+ link: getResponsiveWebDesignPath('build-a-survey-form', {
+ showNewCurriculum
+ }),
certSlug: SuperBlocks.RespWebDesign
},
{
- id: '587d78af367417b2b2512b04',
- title: 'Build a Product Landing Page',
- link: `${responsiveWebBase}/build-a-product-landing-page`,
+ id: 'bd7158d8c442eddfaeb5bd18',
+ title: 'Build a Tribute Page',
+ link: getResponsiveWebDesignPath('build-a-tribute-page', {
+ showNewCurriculum
+ }),
certSlug: SuperBlocks.RespWebDesign
},
{
id: '587d78b0367417b2b2512b05',
title: 'Build a Technical Documentation Page',
- link: `${responsiveWebBase}/build-a-technical-documentation-page`,
+ link: getResponsiveWebDesignPath(
+ 'build-a-technical-documentation-page',
+ { showNewCurriculum }
+ ),
+ certSlug: SuperBlocks.RespWebDesign
+ },
+ {
+ id: '587d78af367417b2b2512b04',
+ title: 'Build a Product Landing Page',
+ link: getResponsiveWebDesignPath('build-a-product-landing-page', {
+ showNewCurriculum
+ }),
certSlug: SuperBlocks.RespWebDesign
},
{
id: 'bd7158d8c242eddfaeb5bd13',
title: 'Build a Personal Portfolio Webpage',
- link: `${responsiveWebBase}/build-a-personal-portfolio-webpage`,
+ link: getResponsiveWebDesignPath('build-a-personal-portfolio-webpage', {
+ showNewCurriculum
+ }),
certSlug: SuperBlocks.RespWebDesign
}
]
},
+
{
id: '561abd10cb81ac38a17513bc',
title: 'JavaScript Algorithms and Data Structures',
@@ -709,6 +725,15 @@ const certMap = [
}
] as const;
+function getResponsiveWebDesignPath(
+ project: string,
+ { showNewCurriculum }: { showNewCurriculum: boolean }
+) {
+ return showNewCurriculum
+ ? `${responsiveWeb22Base}/${project}-project/${project}`
+ : `${responsiveWebBase}/${project}/`;
+}
+
const titles = certMap.map(({ title }) => title);
type Title = typeof titles[number];
const legacyProjectMap: Partial> = {};
diff --git a/client/src/templates/Challenges/classic/desktop-layout.tsx b/client/src/templates/Challenges/classic/desktop-layout.tsx
index d62e66189c..b289c683e0 100644
--- a/client/src/templates/Challenges/classic/desktop-layout.tsx
+++ b/client/src/templates/Challenges/classic/desktop-layout.tsx
@@ -2,15 +2,13 @@ import { first } from 'lodash-es';
import React, { useState, ReactElement } from 'react';
import { ReflexContainer, ReflexSplitter, ReflexElement } from 'react-reflex';
import { sortChallengeFiles } from '../../../../../utils/sort-challengefiles';
-import envData from '../../../../../config/env.json';
import {
ChallengeFile,
ChallengeFiles,
ResizeProps
} from '../../../redux/prop-types';
import ActionRow from './action-row';
-
-const { showUpcomingChanges } = envData;
+import EditorTabs from './editor-tabs';
type Pane = { flex: number };
@@ -85,7 +83,7 @@ const DesktopLayout = (props: DesktopLayoutProps): JSX.Element => {
} = props;
const challengeFile = getChallengeFile();
- const projectBasedChallenge = showUpcomingChanges && hasEditableBoundaries;
+ const projectBasedChallenge = hasEditableBoundaries;
const displayPreview = projectBasedChallenge
? showPreview && hasPreview
: hasPreview;
@@ -124,6 +122,7 @@ const DesktopLayout = (props: DesktopLayoutProps): JSX.Element => {
)}
+ {challengeFile && !hasEditableBoundaries && }
{challengeFile && (
{
// Unlike the desktop layout the mobile version does not have an ActionRow,
// but still needs a way to switch between the different tabs.
- const projectBasedChallenge = showUpcomingChanges && usesMultifileEditor;
return (
<>
@@ -93,7 +89,7 @@ class MobileLayout extends Component {
title={i18next.t('learn.editor-tabs.code')}
{...editorTabPaneProps}
>
- {projectBasedChallenge && }
+ {usesMultifileEditor && }
{editor}
{
>
{testOutput}
- {hasNotes && projectBasedChallenge && (
+ {hasNotes && usesMultifileEditor && (
{
forumTopicId,
hasEditableBoundaries,
superBlock,
+ certification,
title,
usesMultifileEditor,
notes
@@ -474,6 +475,7 @@ class ShowClassic extends Component {
@@ -508,6 +510,7 @@ export const query = graphql`
helpCategory
videoUrl
superBlock
+ certification
translationPending
forumTopicId
fields {
diff --git a/client/src/templates/Challenges/components/completion-modal.tsx b/client/src/templates/Challenges/components/completion-modal.tsx
index 1ccc4ba33e..c86ee9e194 100644
--- a/client/src/templates/Challenges/components/completion-modal.tsx
+++ b/client/src/templates/Challenges/components/completion-modal.tsx
@@ -10,6 +10,7 @@ import { Dispatch } from 'redux';
import { createSelector } from 'reselect';
import { dasherize } from '../../../../../utils/slugs';
+import { isProject } from '../../../../utils/challenge-types';
import Login from '../../../components/Header/components/Login';
import {
isSignedInSelector,
@@ -40,7 +41,11 @@ const mapStateToProps = createSelector(
successMessageSelector,
(
challengeFiles: ChallengeFiles,
- { title, id }: { title: string; id: string },
+ {
+ title,
+ id,
+ challengeType
+ }: { title: string; id: string; challengeType: number },
completedChallengesIds: string[],
isOpen: boolean,
isSignedIn: boolean,
@@ -49,6 +54,7 @@ const mapStateToProps = createSelector(
challengeFiles,
title,
id,
+ challengeType,
completedChallengesIds,
isOpen,
isSignedIn,
@@ -94,6 +100,8 @@ interface CompletionModalsProps {
allowBlockDonationRequests: (arg0: string) => void;
block: string;
blockName: string;
+ certification: string;
+ challengeType: number;
close: () => void;
completedChallengesIds: string[];
currentBlockIds?: string[];
@@ -275,10 +283,30 @@ export class CompletionModalInner extends Component<
}
}
-const useCurrentBlockIds = (blockName: string) => {
+interface Options {
+ isCertificationBlock: boolean;
+}
+
+interface CertificateNode {
+ challenge: {
+ // TODO: use enum
+ certification: string;
+ tests: { id: string }[];
+ };
+}
+
+const useCurrentBlockIds = (
+ block: string,
+ certification: string,
+ options?: Options
+) => {
const {
- allChallengeNode: { edges }
- }: { allChallengeNode: AllChallengeNode } = useStaticQuery(graphql`
+ allChallengeNode: { edges: challengeEdges },
+ allCertificateNode: { nodes: certificateNodes }
+ }: {
+ allChallengeNode: AllChallengeNode;
+ allCertificateNode: { nodes: CertificateNode[] };
+ } = useStaticQuery(graphql`
query getCurrentBlockNodes {
allChallengeNode(
sort: {
@@ -292,9 +320,17 @@ const useCurrentBlockIds = (blockName: string) => {
edges {
node {
challenge {
- fields {
- blockName
- }
+ block
+ id
+ }
+ }
+ }
+ }
+ allCertificateNode {
+ nodes {
+ challenge {
+ certification
+ tests {
id
}
}
@@ -303,16 +339,27 @@ const useCurrentBlockIds = (blockName: string) => {
}
`);
- const currentBlockIds = edges
- .filter(edge => edge.node.challenge.fields.blockName === blockName)
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
+ const currentCertificateIds = certificateNodes
+ .filter(
+ node => dasherize(node.challenge.certification) === certification
+ )[0]
+ ?.challenge.tests.map(test => test.id);
+ const currentBlockIds = challengeEdges
+ .filter(edge => edge.node.challenge.block === block)
.map(edge => edge.node.challenge.id);
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
- return currentBlockIds;
+
+ return options?.isCertificationBlock
+ ? currentCertificateIds
+ : currentBlockIds;
};
const CompletionModal = (props: CompletionModalsProps) => {
- const currentBlockIds = useCurrentBlockIds(props.blockName || '');
+ const currentBlockIds = useCurrentBlockIds(
+ props.block || '',
+ props.certification || '',
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
+ { isCertificationBlock: isProject(props.challengeType) }
+ );
return ;
};
diff --git a/client/src/templates/Challenges/projects/backend/Show.tsx b/client/src/templates/Challenges/projects/backend/Show.tsx
index 7d62c424d7..dabb085dcb 100644
--- a/client/src/templates/Challenges/projects/backend/Show.tsx
+++ b/client/src/templates/Challenges/projects/backend/Show.tsx
@@ -196,6 +196,7 @@ class BackEnd extends Component {
description,
instructions,
translationPending,
+ certification,
superBlock,
block
}
@@ -266,6 +267,7 @@ class BackEnd extends Component {
@@ -294,6 +296,7 @@ export const query = graphql`
instructions
challengeType
helpCategory
+ certification
superBlock
block
translationPending
diff --git a/client/src/templates/Challenges/projects/frontend/Show.tsx b/client/src/templates/Challenges/projects/frontend/Show.tsx
index 7c5c6ba789..9ada016c22 100644
--- a/client/src/templates/Challenges/projects/frontend/Show.tsx
+++ b/client/src/templates/Challenges/projects/frontend/Show.tsx
@@ -144,6 +144,7 @@ class Project extends Component {
description,
instructions,
superBlock,
+ certification,
block,
translationPending
}
@@ -203,6 +204,7 @@ class Project extends Component {
@@ -232,6 +234,7 @@ export const query = graphql`
challengeType
helpCategory
superBlock
+ certification
block
translationPending
fields {
diff --git a/client/src/templates/Challenges/redux/completion-epic.js b/client/src/templates/Challenges/redux/completion-epic.js
index 6665932052..d044a2ee7f 100644
--- a/client/src/templates/Challenges/redux/completion-epic.js
+++ b/client/src/templates/Challenges/redux/completion-epic.js
@@ -146,7 +146,8 @@ export default function completionEpic(action$, state$) {
switchMap(({ type }) => {
const state = state$.value;
const meta = challengeMetaSelector(state);
- const { nextChallengePath, challengeType, superBlock } = meta;
+ const { nextChallengePath, challengeType, superBlock, certification } =
+ meta;
const closeChallengeModal = of(closeModal('completion'));
let submitter = () => of({ type: 'no-user-signed-in' });
@@ -165,6 +166,7 @@ export default function completionEpic(action$, state$) {
const pathToNavigateTo = async () => {
return await findPathToNavigateTo(
+ certification,
nextChallengePath,
superBlock,
state,
@@ -182,6 +184,7 @@ export default function completionEpic(action$, state$) {
}
async function findPathToNavigateTo(
+ certification,
nextChallengePath,
superBlock,
state,
@@ -196,7 +199,7 @@ async function findPathToNavigateTo(
if (isProjectSubmission) {
const username = usernameSelector(state);
try {
- const response = await getVerifyCanClaimCert(username, superBlock);
+ const response = await getVerifyCanClaimCert(username, certification);
if (response.status === 200) {
canClaimCert = response.data?.response?.message === 'can-claim-cert';
}
diff --git a/client/src/templates/Challenges/video/Show.tsx b/client/src/templates/Challenges/video/Show.tsx
index c078ebc8bd..ecf7bda07b 100644
--- a/client/src/templates/Challenges/video/Show.tsx
+++ b/client/src/templates/Challenges/video/Show.tsx
@@ -180,6 +180,7 @@ class ShowVideo extends Component {
title,
description,
superBlock,
+ certification,
block,
translationPending,
videoId,
@@ -302,6 +303,7 @@ class ShowVideo extends Component {
@@ -339,6 +341,7 @@ export const query = graphql`
challengeType
helpCategory
superBlock
+ certification
block
fields {
blockName
diff --git a/client/src/templates/Introduction/components/cert-challenge.tsx b/client/src/templates/Introduction/components/cert-challenge.tsx
index 1b0b2a989f..ad10d13807 100644
--- a/client/src/templates/Introduction/components/cert-challenge.tsx
+++ b/client/src/templates/Introduction/components/cert-challenge.tsx
@@ -23,6 +23,8 @@ import { getVerifyCanClaimCert } from '../../../utils/ajax';
import CertificationCard from './certification-card';
interface CertChallengeProps {
+ // TODO: create enum/reuse SuperBlocks enum somehow
+ certification: string;
createFlashMessage: typeof createFlashMessage;
fetchState: {
pending: boolean;
@@ -63,6 +65,7 @@ const mapDispatchToProps = {
};
const CertChallenge = ({
+ certification,
createFlashMessage,
steps = {},
superBlock,
@@ -90,7 +93,7 @@ const CertChallenge = ({
if (username) {
void (async () => {
try {
- const data = await getVerifyCanClaimCert(username, superBlock);
+ const data = await getVerifyCanClaimCert(username, certification);
if (data?.message) {
setCanClaimCert(false);
createFlashMessage(data.message);
diff --git a/client/src/templates/Introduction/super-block-intro.tsx b/client/src/templates/Introduction/super-block-intro.tsx
index cb224fcc0e..21f5224d96 100644
--- a/client/src/templates/Introduction/super-block-intro.tsx
+++ b/client/src/templates/Introduction/super-block-intro.tsx
@@ -162,7 +162,7 @@ const SuperBlockIntroductionPage = (props: SuperBlockProp) => {
const {
data: {
markdownRemark: {
- frontmatter: { superBlock, title }
+ frontmatter: { superBlock, title, certification }
},
allChallengeNode: { edges }
},
@@ -176,6 +176,7 @@ const SuperBlockIntroductionPage = (props: SuperBlockProp) => {
const blockDashedNames = uniq(
nodesForSuperBlock.map(({ challenge: { block } }) => block)
);
+
const i18nSuperBlock = t(`intro:${superBlock}.title`);
const i18nTitle =
superBlock === SuperBlocks.CodingInterviewPrep
@@ -184,6 +185,8 @@ const SuperBlockIntroductionPage = (props: SuperBlockProp) => {
cert: i18nSuperBlock
});
+ const defaultCurriculumNames = blockDashedNames;
+
return (
<>
@@ -203,7 +206,7 @@ const SuperBlockIntroductionPage = (props: SuperBlockProp) => {
- {blockDashedNames.map(blockDashedName => (
+ {defaultCurriculumNames.map(blockDashedName => (
{
{superBlock !== SuperBlocks.CodingInterviewPrep && (
{
return get(
- `/certificate/verify-can-claim-cert?username=${username}&superBlock=${superBlock}`
+ `/certificate/verify-can-claim-cert?username=${username}&superBlock=${certification}`
);
}
diff --git a/client/utils/challenge-types.js b/client/utils/challenge-types.js
index 9e6e173e2e..0713ea6cff 100644
--- a/client/utils/challenge-types.js
+++ b/client/utils/challenge-types.js
@@ -36,6 +36,18 @@ exports.challengeTypes = {
codeally
};
+// (Oliver) I don't think we need this for codeally projects, so they're ignored
+// here
+exports.isProject = challengeType => {
+ if (typeof challengeType !== 'number')
+ throw Error('challengeType must be a number');
+ return (
+ challengeType === frontEndProject ||
+ challengeType === backEndProject ||
+ challengeType === pythonProject
+ );
+};
+
// turn challengeType to file ext
exports.pathsMap = {
[html]: 'html',
diff --git a/client/utils/gatsby/challenge-page-creator.js b/client/utils/gatsby/challenge-page-creator.js
index e0649fda2c..d611665c77 100644
--- a/client/utils/gatsby/challenge-page-creator.js
+++ b/client/utils/gatsby/challenge-page-creator.js
@@ -60,6 +60,7 @@ function getTemplateComponent(challengeType) {
exports.createChallengePages = function (createPage) {
return function ({ node: { challenge } }, index, allChallengeEdges) {
const {
+ certification,
superBlock,
block,
fields: { slug },
@@ -76,6 +77,7 @@ exports.createChallengePages = function (createPage) {
component: getTemplateComponent(challengeType),
context: {
challengeMeta: {
+ certification,
superBlock,
block,
template,
@@ -152,13 +154,23 @@ exports.createSuperBlockIntroPages = function (createPage) {
return function (edge) {
const {
fields: { slug },
- frontmatter: { superBlock }
+ frontmatter: { superBlock, certification }
} = edge.node;
+ if (!certification) {
+ throw Error(
+ `superBlockIntro page, '${superBlock}' must have certification in frontmatter`
+ );
+ }
+
+ // TODO: throw if it encounters an unknown certification. Also, handle
+ // coding-interview-prep. it's not a certification, but it is a superBlock.
+
createPage({
path: slug,
component: superBlockIntro,
context: {
+ certification,
superBlock,
slug
}
diff --git a/client/utils/help-category-map.json b/client/utils/help-category-map.json
index b6c4e6eed3..d159fa7a76 100644
--- a/client/utils/help-category-map.json
+++ b/client/utils/help-category-map.json
@@ -85,5 +85,10 @@
"learn-css-grid-by-building-a-magazine": "HTML-CSS",
"learn-css-transforms-by-building-a-penguin": "HTML-CSS",
"learn-typography-by-building-a-nutrition-label": "HTML-CSS",
- "learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet": "HTML-CSS"
+ "learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet": "HTML-CSS",
+ "build-a-personal-portfolio-webpage-project": "HTML-CSS",
+ "build-a-product-landing-page-project": "HTML-CSS",
+ "build-a-survey-form-project": "HTML-CSS",
+ "build-a-technical-documentation-page-project": "HTML-CSS",
+ "build-a-tribute-page-project": "HTML-CSS"
}
diff --git a/config/certification-settings.ts b/config/certification-settings.ts
index ff0409c81a..4b8cb6d32a 100644
--- a/config/certification-settings.ts
+++ b/config/certification-settings.ts
@@ -113,7 +113,11 @@ export const superBlockCertTypeMap = {
[SuperBlocks.SciCompPy]: certTypes.sciCompPyV7,
[SuperBlocks.DataAnalysisPy]: certTypes.dataAnalysisPyV7,
[SuperBlocks.MachineLearningPy]: certTypes.machineLearningPyV7,
- [SuperBlocks.RelationalDb]: certTypes.relationalDatabasesV8
+ [SuperBlocks.RelationalDb]: certTypes.relationalDatabasesV8,
+
+ // post-modern
+ // TODO: use enum
+ 'responsive-web-design-22': certTypes.respWebDesign
};
export const certTypeIdMap = {
diff --git a/curriculum/challenges/_meta/build-a-personal-portfolio-webpage-project/meta.json b/curriculum/challenges/_meta/build-a-personal-portfolio-webpage-project/meta.json
new file mode 100644
index 0000000000..e918d82787
--- /dev/null
+++ b/curriculum/challenges/_meta/build-a-personal-portfolio-webpage-project/meta.json
@@ -0,0 +1,14 @@
+{
+ "name": "Build a Personal Portfolio Webpage Project",
+ "isUpcomingChange": false,
+ "order": 19,
+ "time": "30 hours",
+ "template": "",
+ "required": [],
+ "superBlock": "responsive-web-design",
+ "challengeOrder": [
+ [
+ "bd7158d8c242eddfaeb5bd13",
+ "Build a Personal Portfolio Webpage"
+ ]
+ ]}
diff --git a/curriculum/challenges/_meta/build-a-product-landing-page-project/meta.json b/curriculum/challenges/_meta/build-a-product-landing-page-project/meta.json
new file mode 100644
index 0000000000..8c4914320c
--- /dev/null
+++ b/curriculum/challenges/_meta/build-a-product-landing-page-project/meta.json
@@ -0,0 +1,14 @@
+{
+ "name": "Build a Product Landing Page Project",
+ "isUpcomingChange": false,
+ "order": 16,
+ "time": "30 hours",
+ "template": "",
+ "required": [],
+ "superBlock": "responsive-web-design",
+ "challengeOrder": [
+ [
+ "587d78af367417b2b2512b04",
+ "Build a Product Landing Page"
+ ]
+ ]}
diff --git a/curriculum/challenges/_meta/build-a-survey-form-project/meta.json b/curriculum/challenges/_meta/build-a-survey-form-project/meta.json
new file mode 100644
index 0000000000..4ec29f7fc9
--- /dev/null
+++ b/curriculum/challenges/_meta/build-a-survey-form-project/meta.json
@@ -0,0 +1,14 @@
+{
+ "name": "Build a Survey Form Project",
+ "isUpcomingChange": false,
+ "order": 4,
+ "time": "30 hours",
+ "template": "",
+ "required": [],
+ "superBlock": "responsive-web-design",
+ "challengeOrder": [
+ [
+ "587d78af367417b2b2512b03",
+ "Build a Survey Form"
+ ]
+ ]}
diff --git a/curriculum/challenges/_meta/build-a-technical-documentation-page-project/meta.json b/curriculum/challenges/_meta/build-a-technical-documentation-page-project/meta.json
new file mode 100644
index 0000000000..87fd6b3427
--- /dev/null
+++ b/curriculum/challenges/_meta/build-a-technical-documentation-page-project/meta.json
@@ -0,0 +1,14 @@
+{
+ "name": "Build a Technical Documentation Page Project",
+ "isUpcomingChange": false,
+ "order": 13,
+ "time": "30 hours",
+ "template": "",
+ "required": [],
+ "superBlock": "responsive-web-design",
+ "challengeOrder": [
+ [
+ "587d78b0367417b2b2512b05",
+ "Build a Technical Documentation Page"
+ ]
+ ]}
diff --git a/curriculum/challenges/_meta/build-a-tribute-page-project/meta.json b/curriculum/challenges/_meta/build-a-tribute-page-project/meta.json
new file mode 100644
index 0000000000..0cd6595ccc
--- /dev/null
+++ b/curriculum/challenges/_meta/build-a-tribute-page-project/meta.json
@@ -0,0 +1,14 @@
+{
+ "name": "Build a Tribute Page Project",
+ "isUpcomingChange": false,
+ "order": 9,
+ "time": "30 hours",
+ "template": "",
+ "required": [],
+ "superBlock": "responsive-web-design",
+ "challengeOrder": [
+ [
+ "bd7158d8c442eddfaeb5bd18",
+ "Build a Tribute Page"
+ ]
+ ]}
diff --git a/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json b/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json
index 94f2af52a0..215661fd51 100644
--- a/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json
+++ b/curriculum/challenges/_meta/learn-accessibility-by-building-a-quiz/meta.json
@@ -1,15 +1,14 @@
{
"name": "Learn Accessibility by Building a Quiz",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-accessibility-by-building-a-quiz",
- "order": 42,
+ "order": 8,
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"614ccc21ea91ef1736b9b578",
diff --git a/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json b/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json
index cd14d49c3c..508484ff52 100644
--- a/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json
+++ b/curriculum/challenges/_meta/learn-basic-css-by-building-a-cafe-menu/meta.json
@@ -1,10 +1,10 @@
{
"name": "Learn Basic CSS by Building a Cafe Menu",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-basic-css-by-building-a-cafe-menu",
- "order": 10,
+ "order": 1,
"time": "5 hours",
"template": "",
"required": [],
diff --git a/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json b/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json
index ef7dce0f88..152ffc00df 100644
--- a/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json
+++ b/curriculum/challenges/_meta/learn-css-animation-by-building-a-ferris-wheel/meta.json
@@ -1,15 +1,14 @@
{
"name": "Learn CSS Animation by Building a Ferris Wheel",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-css-animation-by-building-a-ferris-wheel",
- "order": 15,
+ "order": 18,
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"6140c7e645d8e905819f1dd4",
diff --git a/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json b/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json
index a7ba45ac9f..f9740afcb8 100644
--- a/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json
+++ b/curriculum/challenges/_meta/learn-css-flexbox-by-building-a-photo-gallery/meta.json
@@ -1,15 +1,14 @@
{
"name": "Learn CSS Flexbox by Building a Photo Gallery",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-css-flexbox-by-building-a-photo-gallery",
- "order": 20,
+ "order": 6,
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"61537485c4f2a624f18d7794",
diff --git a/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json b/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json
index ad45376cbd..4ac40e9fcd 100644
--- a/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json
+++ b/curriculum/challenges/_meta/learn-css-grid-by-building-a-magazine/meta.json
@@ -1,15 +1,14 @@
{
"name": "Learn CSS Grid by Building a Magazine",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-css-grid-by-building-a-magazine",
- "order": 16,
+ "order": 15,
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"61437d575fb98f57fa8f7f36",
diff --git a/curriculum/challenges/_meta/learn-css-transforms-by-building-a-penguin/meta.json b/curriculum/challenges/_meta/learn-css-transforms-by-building-a-penguin/meta.json
index a396ab53e1..0408f93721 100644
--- a/curriculum/challenges/_meta/learn-css-transforms-by-building-a-penguin/meta.json
+++ b/curriculum/challenges/_meta/learn-css-transforms-by-building-a-penguin/meta.json
@@ -1,14 +1,14 @@
{
"name": "Learn CSS Transforms by Building a Penguin",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-css-transforms-by-building-a-penguin",
- "order": 47,
+ "order": 17,
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"619665c9abd72906f3ad30f9",
diff --git a/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json b/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json
index d5664a9f1b..745a6b264d 100644
--- a/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json
+++ b/curriculum/challenges/_meta/learn-css-variables-by-building-a-city-skyline/meta.json
@@ -1,10 +1,10 @@
{
"name": "Learn CSS Variables by Building a City Skyline",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-css-variables-by-building-a-city-skyline",
- "order": 8,
+ "order": 14,
"time": "5 hours",
"template": "",
"required": [],
diff --git a/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json b/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json
index 99224535d4..666c848edd 100644
--- a/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json
+++ b/curriculum/challenges/_meta/learn-html-by-building-a-cat-photo-app/meta.json
@@ -1,15 +1,14 @@
{
"name": "Learn HTML by Building a Cat Photo App",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-html-by-building-a-cat-photo-app",
- "order": 9,
+ "order": 0,
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"5dc174fcf86c76b9248c6eb2",
diff --git a/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json b/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json
index 421039d201..7cee8710a1 100644
--- a/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json
+++ b/curriculum/challenges/_meta/learn-html-forms-by-building-a-registration-form/meta.json
@@ -1,15 +1,14 @@
{
"name": "Learn HTML Forms by Building a Registration Form",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-html-forms-by-building-a-registration-form",
- "order": 23,
+ "order": 3,
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"60eebd07ea685b0e777b5583",
diff --git a/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json b/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json
index cd78d87636..e3fd9540bf 100644
--- a/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json
+++ b/curriculum/challenges/_meta/learn-intermediate-css-by-building-a-picasso-painting/meta.json
@@ -1,6 +1,6 @@
{
"name": "Learn Intermediate CSS by Building a Picasso Painting",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-intermediate-css-by-building-a-picasso-painting",
@@ -9,7 +9,6 @@
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"60b69a66b6ddb80858c51578",
diff --git a/curriculum/challenges/_meta/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/meta.json b/curriculum/challenges/_meta/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/meta.json
index 81bfd8f97f..17afe8cd25 100644
--- a/curriculum/challenges/_meta/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/meta.json
+++ b/curriculum/challenges/_meta/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/meta.json
@@ -1,14 +1,14 @@
{
"name": "Learn More About CSS Pseudo Selectors By Building A Balance Sheet",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
"dashedName": "learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet",
- "order": 43,
+ "order": 10,
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"6193d8081ec2531581ea7b98",
diff --git a/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json b/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json
index 34c32833f4..0c2bcb9f36 100644
--- a/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json
+++ b/curriculum/challenges/_meta/learn-responsive-web-design-by-building-a-piano/meta.json
@@ -1,15 +1,14 @@
{
"name": "Learn Responsive Web Design by Building a Piano",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-responsive-web-design-by-building-a-piano",
- "order": 13,
+ "order": 12,
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"612e6afc009b450a437940a1",
diff --git a/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json b/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json
index fd2d01c46c..6f660b77c6 100644
--- a/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json
+++ b/curriculum/challenges/_meta/learn-the-css-box-model-by-building-a-rothko-painting/meta.json
@@ -1,15 +1,14 @@
{
"name": "Learn the CSS Box Model by Building a Rothko Painting",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-the-css-box-model-by-building-a-rothko-painting",
- "order": 12,
+ "order": 5,
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"60a3e3396c7b40068ad6996a",
diff --git a/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json b/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json
index 7fac00490f..8f6c92c520 100644
--- a/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json
+++ b/curriculum/challenges/_meta/learn-typography-by-building-a-nutrition-label/meta.json
@@ -1,15 +1,14 @@
{
"name": "Learn Typography by Building a Nutrition Label",
- "isUpcomingChange": true,
+ "isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-typography-by-building-a-nutrition-label",
- "order": 25,
+ "order": 7,
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "responsive-web-design",
- "isBeta": true,
"challengeOrder": [
[
"615f2abbe7d18d49a1e0e1c8",
diff --git a/curriculum/challenges/english/00-certifications/back-end-development-and-apis-certification/back-end-development-and-apis-certification.yml b/curriculum/challenges/english/00-certifications/back-end-development-and-apis-certification/back-end-development-and-apis-certification.yml
index 08c328be54..7f5e0d2ddf 100644
--- a/curriculum/challenges/english/00-certifications/back-end-development-and-apis-certification/back-end-development-and-apis-certification.yml
+++ b/curriculum/challenges/english/00-certifications/back-end-development-and-apis-certification/back-end-development-and-apis-certification.yml
@@ -1,6 +1,7 @@
---
id: 561add10cb82ac38a17523bc
title: Back End Development and APIs Certification
+certification: back-end-development-and-apis
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/data-analysis-with-python-certification/data-analysis-with-python-certification.yml b/curriculum/challenges/english/00-certifications/data-analysis-with-python-certification/data-analysis-with-python-certification.yml
index 09de7fe344..e4c1a13ad0 100644
--- a/curriculum/challenges/english/00-certifications/data-analysis-with-python-certification/data-analysis-with-python-certification.yml
+++ b/curriculum/challenges/english/00-certifications/data-analysis-with-python-certification/data-analysis-with-python-certification.yml
@@ -1,5 +1,6 @@
id: 5e46fc95ac417301a38fb934
title: Data Analysis with Python Certification
+certification: data-analysis-with-python
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/data-visualization-certification/data-visualization-certification.yml b/curriculum/challenges/english/00-certifications/data-visualization-certification/data-visualization-certification.yml
index e55bf0332b..2ec1d9efe6 100644
--- a/curriculum/challenges/english/00-certifications/data-visualization-certification/data-visualization-certification.yml
+++ b/curriculum/challenges/english/00-certifications/data-visualization-certification/data-visualization-certification.yml
@@ -1,5 +1,6 @@
id: 5a553ca864b52e1d8bceea14
title: Data Visualization Certification
+certification: data-visualization
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/front-end-development-libraries-certification/front-end-development-libraries-certification.yml b/curriculum/challenges/english/00-certifications/front-end-development-libraries-certification/front-end-development-libraries-certification.yml
index ea1ebc23ca..408e57078d 100644
--- a/curriculum/challenges/english/00-certifications/front-end-development-libraries-certification/front-end-development-libraries-certification.yml
+++ b/curriculum/challenges/english/00-certifications/front-end-development-libraries-certification/front-end-development-libraries-certification.yml
@@ -1,6 +1,7 @@
---
id: 561acd10cb82ac38a17513bc
title: Front End Development Libraries Certification
+certification: front-end-development-libraries
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/information-security-certification/information-security-certification.yml b/curriculum/challenges/english/00-certifications/information-security-certification/information-security-certification.yml
index 5f5e17bd19..8997cfbb35 100644
--- a/curriculum/challenges/english/00-certifications/information-security-certification/information-security-certification.yml
+++ b/curriculum/challenges/english/00-certifications/information-security-certification/information-security-certification.yml
@@ -1,5 +1,6 @@
id: 5e6021435ac9d0ecd8b94b00
title: Information Security Certification
+certification: information-security
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/javascript-algorithms-and-data-structures-certification/javascript-algorithms-and-data-structures-certification.yml b/curriculum/challenges/english/00-certifications/javascript-algorithms-and-data-structures-certification/javascript-algorithms-and-data-structures-certification.yml
index 64d0b0701d..6388563746 100644
--- a/curriculum/challenges/english/00-certifications/javascript-algorithms-and-data-structures-certification/javascript-algorithms-and-data-structures-certification.yml
+++ b/curriculum/challenges/english/00-certifications/javascript-algorithms-and-data-structures-certification/javascript-algorithms-and-data-structures-certification.yml
@@ -1,5 +1,6 @@
id: 561abd10cb81ac38a17513bc
title: JavaScript Algorithms and Data Structures Certification
+certification: javascript-algorithms-and-data-structures
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/legacy-back-end-certification/legacy-back-end-certification.yml b/curriculum/challenges/english/00-certifications/legacy-back-end-certification/legacy-back-end-certification.yml
index b00a0edec0..8a792c1b39 100644
--- a/curriculum/challenges/english/00-certifications/legacy-back-end-certification/legacy-back-end-certification.yml
+++ b/curriculum/challenges/english/00-certifications/legacy-back-end-certification/legacy-back-end-certification.yml
@@ -1,5 +1,6 @@
id: 660add10cb82ac38a17513be
title: Legacy Back End Certification
+certification: legacy-back-end
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/legacy-data-visualization-certification/legacy-data-visualization-certification.yml b/curriculum/challenges/english/00-certifications/legacy-data-visualization-certification/legacy-data-visualization-certification.yml
index a4e0a804cd..69845d6c65 100644
--- a/curriculum/challenges/english/00-certifications/legacy-data-visualization-certification/legacy-data-visualization-certification.yml
+++ b/curriculum/challenges/english/00-certifications/legacy-data-visualization-certification/legacy-data-visualization-certification.yml
@@ -1,5 +1,6 @@
id: 561add10cb82ac39a17513bc
title: Legacy Data Visualization Certification
+certification: legacy-data-visualization
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/legacy-front-end-certification/legacy-front-end-certification.yml b/curriculum/challenges/english/00-certifications/legacy-front-end-certification/legacy-front-end-certification.yml
index 8c824f979f..d982030a01 100644
--- a/curriculum/challenges/english/00-certifications/legacy-front-end-certification/legacy-front-end-certification.yml
+++ b/curriculum/challenges/english/00-certifications/legacy-front-end-certification/legacy-front-end-certification.yml
@@ -1,5 +1,6 @@
id: 561add10cb82ac38a17513be
title: Legacy Front End Certification
+certification: legacy-front-end
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/legacy-full-stack-certification/legacy-full-stack-certification.yml b/curriculum/challenges/english/00-certifications/legacy-full-stack-certification/legacy-full-stack-certification.yml
index 2c64da3a6a..6ae27ad5ea 100644
--- a/curriculum/challenges/english/00-certifications/legacy-full-stack-certification/legacy-full-stack-certification.yml
+++ b/curriculum/challenges/english/00-certifications/legacy-full-stack-certification/legacy-full-stack-certification.yml
@@ -1,5 +1,6 @@
id: 561add10cb82ac38a17213bd
title: Legacy Full Stack Certification
+certification: legacy-full-stack
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/legacy-information-security-and-quality-assurance-certification/legacy-information-security-and-quality-assurance-certification.yml b/curriculum/challenges/english/00-certifications/legacy-information-security-and-quality-assurance-certification/legacy-information-security-and-quality-assurance-certification.yml
index e78b872b4e..87b0bef699 100644
--- a/curriculum/challenges/english/00-certifications/legacy-information-security-and-quality-assurance-certification/legacy-information-security-and-quality-assurance-certification.yml
+++ b/curriculum/challenges/english/00-certifications/legacy-information-security-and-quality-assurance-certification/legacy-information-security-and-quality-assurance-certification.yml
@@ -1,5 +1,6 @@
id: 561add10cb82ac38a17213bc
title: Legacy Information Security and Quality Assurance Certification
+certification: legacy-information-security-and-quality-assurance
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/machine-learning-with-python-certification/machine-learning-with-python-certification.yml b/curriculum/challenges/english/00-certifications/machine-learning-with-python-certification/machine-learning-with-python-certification.yml
index dda4f601e9..82b664f364 100644
--- a/curriculum/challenges/english/00-certifications/machine-learning-with-python-certification/machine-learning-with-python-certification.yml
+++ b/curriculum/challenges/english/00-certifications/machine-learning-with-python-certification/machine-learning-with-python-certification.yml
@@ -1,5 +1,6 @@
id: 5e46fc95ac417301a38fb935
title: Machine Learning with Python Certification
+certification: machine-learning-with-python
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/quality-assurance-certification/quality-assurance-certification.yml b/curriculum/challenges/english/00-certifications/quality-assurance-certification/quality-assurance-certification.yml
index 7c637098e6..b12e25b533 100644
--- a/curriculum/challenges/english/00-certifications/quality-assurance-certification/quality-assurance-certification.yml
+++ b/curriculum/challenges/english/00-certifications/quality-assurance-certification/quality-assurance-certification.yml
@@ -1,5 +1,6 @@
id: 5e611829481575a52dc59c0e
title: Quality Assurance Certification
+certification: quality-assurance
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/relational-databases-certification/relational-databases-certification.yml b/curriculum/challenges/english/00-certifications/relational-databases-certification/relational-databases-certification.yml
index f77b064f32..fda2831795 100644
--- a/curriculum/challenges/english/00-certifications/relational-databases-certification/relational-databases-certification.yml
+++ b/curriculum/challenges/english/00-certifications/relational-databases-certification/relational-databases-certification.yml
@@ -1,5 +1,6 @@
id: 606243f50267e718b1e755f4
title: Relational Databases Certification
+certification: relational-databases
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/responsive-web-design-certification/responsive-web-design-certification.yml b/curriculum/challenges/english/00-certifications/responsive-web-design-certification/responsive-web-design-certification.yml
index 9c18da8150..811d45d6bf 100644
--- a/curriculum/challenges/english/00-certifications/responsive-web-design-certification/responsive-web-design-certification.yml
+++ b/curriculum/challenges/english/00-certifications/responsive-web-design-certification/responsive-web-design-certification.yml
@@ -1,5 +1,6 @@
id: 561add10cb82ac38a17513bc
title: Responsive Web Design Certification
+certification: responsive-web-design
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/00-certifications/scientific-computing-with-python-certification/scientific-computing-with-python-certification.yml b/curriculum/challenges/english/00-certifications/scientific-computing-with-python-certification/scientific-computing-with-python-certification.yml
index 27db8036c9..24bc6df56e 100644
--- a/curriculum/challenges/english/00-certifications/scientific-computing-with-python-certification/scientific-computing-with-python-certification.yml
+++ b/curriculum/challenges/english/00-certifications/scientific-computing-with-python-certification/scientific-computing-with-python-certification.yml
@@ -1,5 +1,6 @@
id: 5e44431b903586ffb414c951
title: Scientific Computing with Python Certification
+certification: scientific-computing-with-python
challengeType: 7
isPrivate: true
tests:
diff --git a/curriculum/challenges/english/14-responsive-web-design-22/build-a-personal-portfolio-webpage-project/build-a-personal-portfolio-webpage.md b/curriculum/challenges/english/14-responsive-web-design-22/build-a-personal-portfolio-webpage-project/build-a-personal-portfolio-webpage.md
new file mode 100644
index 0000000000..1a08c12c98
--- /dev/null
+++ b/curriculum/challenges/english/14-responsive-web-design-22/build-a-personal-portfolio-webpage-project/build-a-personal-portfolio-webpage.md
@@ -0,0 +1,47 @@
+---
+id: bd7158d8c242eddfaeb5bd13
+title: Build a Personal Portfolio Webpage
+challengeType: 3
+forumTopicId: 301143
+dashedName: build-a-personal-portfolio-webpage
+---
+
+# --description--
+
+**Objective:** Build a [CodePen.io](https://codepen.io) app that is functionally similar to this: .
+
+Fulfill the below [user stories](https://en.wikipedia.org/wiki/User_story) and get all of the tests to pass. Give it your own personal style.
+
+You can use HTML, JavaScript, and CSS to complete this project. Plain CSS is recommended because that is what the lessons have covered so far and you should get some practice with plain CSS. You can use Bootstrap or SASS if you choose. Additional technologies (just for example jQuery, React, Angular, or Vue) are not recommended for this project, and using them is at your own risk. Other projects will give you a chance to work with different technology stacks like React. We will accept and try to fix all issue reports that use the suggested technology stack for this project. Happy coding!
+
+**User Story #1:** My portfolio should have a welcome section with an id of `welcome-section`.
+
+**User Story #2:** The welcome section should have an `h1` element that contains text.
+
+**User Story #3:** My portfolio should have a projects section with an id of `projects`.
+
+**User Story #4:** The projects section should contain at least one element with a class of `project-tile` to hold a project.
+
+**User Story #5:** The projects section should contain at least one link to a project.
+
+**User Story #6:** My portfolio should have a navbar with an id of `navbar`.
+
+**User Story #7:** The navbar should contain at least one link that I can click on to navigate to different sections of the page.
+
+**User Story #8:** My portfolio should have a link with an id of `profile-link`, which opens my GitHub or FCC profile in a new tab.
+
+**User Story #9:** My portfolio should have at least one media query.
+
+**User Story #10:** The height of the welcome section should be equal to the height of the viewport.
+
+**User Story #11:** The navbar should always be at the top of the viewport.
+
+You can build your project by using this CodePen template and clicking `Save` to create your own pen. Or you can use this CDN link to run the tests in any environment you like: `https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js`
+
+Once you're done, submit the URL to your working project with all its tests passing.
+
+# --solutions--
+
+```html
+// solution required
+```
diff --git a/curriculum/challenges/english/14-responsive-web-design-22/build-a-product-landing-page-project/build-a-product-landing-page.md b/curriculum/challenges/english/14-responsive-web-design-22/build-a-product-landing-page-project/build-a-product-landing-page.md
new file mode 100644
index 0000000000..8c59b183c8
--- /dev/null
+++ b/curriculum/challenges/english/14-responsive-web-design-22/build-a-product-landing-page-project/build-a-product-landing-page.md
@@ -0,0 +1,55 @@
+---
+id: 587d78af367417b2b2512b04
+title: Build a Product Landing Page
+challengeType: 3
+forumTopicId: 301144
+dashedName: build-a-product-landing-page
+---
+
+# --description--
+
+**Objective:** Build a [CodePen.io](https://codepen.io) app that is functionally similar to this: .
+
+Fulfill the below [user stories](https://en.wikipedia.org/wiki/User_story) and get all of the tests to pass. Give it your own personal style.
+
+You can use HTML, JavaScript, and CSS to complete this project. Plain CSS is recommended because that is what the lessons have covered so far and you should get some practice with plain CSS. You can use Bootstrap or SASS if you choose. Additional technologies (just for example jQuery, React, Angular, or Vue) are not recommended for this project, and using them is at your own risk. Other projects will give you a chance to work with different technology stacks like React. We will accept and try to fix all issue reports that use the suggested technology stack for this project. Happy coding!
+
+**User Story #1:** My product landing page should have a `header` element with a corresponding `id="header"`.
+
+**User Story #2:** I can see an image within the `header` element with a corresponding `id="header-img"`. A company logo would make a good image here.
+
+**User Story #3:** Within the `#header` element I can see a `nav` element with a corresponding `id="nav-bar"`.
+
+**User Story #4:** I can see at least three clickable elements inside the `nav` element, each with the class `nav-link`.
+
+**User Story #5:** When I click a `.nav-link` button in the `nav` element, I am taken to the corresponding section of the landing page.
+
+**User Story #6:** I can watch an embedded product video with `id="video"`.
+
+**User Story #7:** My landing page has a `form` element with a corresponding `id="form"`.
+
+**User Story #8:** Within the form, there is an `input` field with `id="email"` where I can enter an email address.
+
+**User Story #9:** The `#email` input field should have placeholder text to let the user know what the field is for.
+
+**User Story #10:** The `#email` input field uses HTML5 validation to confirm that the entered text is an email address.
+
+**User Story #11:** Within the form, there is a submit `input` with a corresponding `id="submit"`.
+
+**User Story #12:** When I click the `#submit` element, the email is submitted to a static page (use this mock URL: ).
+
+**User Story #13:** The navbar should always be at the top of the viewport.
+
+**User Story #14:** My product landing page should have at least one media query.
+
+**User Story #15:** My product landing page should utilize CSS flexbox at least once.
+
+You can build your project by using this CodePen template and clicking `Save` to create your own pen. Or you can use this CDN link to run the tests in any environment you like: `https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js`
+
+Once you're done, submit the URL to your working project with all its tests passing.
+
+# --solutions--
+
+```html
+// solution required
+```
diff --git a/curriculum/challenges/english/14-responsive-web-design-22/build-a-survey-form-project/build-a-survey-form.md b/curriculum/challenges/english/14-responsive-web-design-22/build-a-survey-form-project/build-a-survey-form.md
new file mode 100644
index 0000000000..e62a17690f
--- /dev/null
+++ b/curriculum/challenges/english/14-responsive-web-design-22/build-a-survey-form-project/build-a-survey-form.md
@@ -0,0 +1,57 @@
+---
+id: 587d78af367417b2b2512b03
+title: Build a Survey Form
+challengeType: 3
+forumTopicId: 301145
+dashedName: build-a-survey-form
+---
+
+# --description--
+
+**Objective:** Build a [CodePen.io](https://codepen.io) app that is functionally similar to this: .
+
+Fulfill the below [user stories](https://en.wikipedia.org/wiki/User_story) and get all of the tests to pass. Give it your own personal style.
+
+You can use HTML, JavaScript, and CSS to complete this project. Plain CSS is recommended because that is what the lessons have covered so far and you should get some practice with plain CSS. You can use Bootstrap or SASS if you choose. Additional technologies (just for example jQuery, React, Angular, or Vue) are not recommended for this project, and using them is at your own risk. Other projects will give you a chance to work with different technology stacks like React. We will accept and try to fix all issue reports that use the suggested technology stack for this project. Happy coding!
+
+**User Story #1:** I can see a title with `id="title"` in H1 sized text.
+
+**User Story #2:** I can see a short explanation with `id="description"` in P sized text.
+
+**User Story #3:** I can see a `form` with `id="survey-form"`.
+
+**User Story #4:** Inside the form element, I am required to enter my name in a field with `id="name"`.
+
+**User Story #5:** Inside the form element, I am required to enter an email in a field with `id="email"`.
+
+**User Story #6:** If I enter an email that is not formatted correctly, I will see an HTML5 validation error.
+
+**User Story #7:** Inside the form, I can enter a number in a field with `id="number"`.
+
+**User Story #8:** If I enter non-numbers in the number input, I will see an HTML5 validation error.
+
+**User Story #9:** If I enter numbers outside the range of the number input, which are defined by the `min` and `max` attributes, I will see an HTML5 validation error.
+
+**User Story #10:** For the name, email, and number input fields inside the form I can see corresponding labels that describe the purpose of each field with the following ids: `id="name-label"`, `id="email-label"`, and `id="number-label"`.
+
+**User Story #11:** For the name, email, and number input fields, I can see placeholder text that gives me a description or instructions for each field.
+
+**User Story #12:** Inside the form element, I can select an option from a dropdown that has a corresponding `id="dropdown"`.
+
+**User Story #13:** Inside the form element, I can select a field from one or more groups of radio buttons. Each group should be grouped using the `name` attribute.
+
+**User Story #14:** Inside the form element, I can select several fields from a series of checkboxes, each of which must have a `value` attribute.
+
+**User Story #15:** Inside the form element, I am presented with a `textarea` at the end for additional comments.
+
+**User Story #16:** Inside the form element, I am presented with a button with `id="submit"` to submit all my inputs.
+
+You can build your project by using this CodePen template and clicking `Save` to create your own pen. Or you can use this CDN link to run the tests in any environment you like: `https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js`
+
+Once you're done, submit the URL to your working project with all its tests passing.
+
+# --solutions--
+
+```html
+// solution required
+```
diff --git a/curriculum/challenges/english/14-responsive-web-design-22/build-a-technical-documentation-page-project/build-a-technical-documentation-page.md b/curriculum/challenges/english/14-responsive-web-design-22/build-a-technical-documentation-page-project/build-a-technical-documentation-page.md
new file mode 100644
index 0000000000..edf404b17a
--- /dev/null
+++ b/curriculum/challenges/english/14-responsive-web-design-22/build-a-technical-documentation-page-project/build-a-technical-documentation-page.md
@@ -0,0 +1,55 @@
+---
+id: 587d78b0367417b2b2512b05
+title: Build a Technical Documentation Page
+challengeType: 3
+forumTopicId: 301146
+dashedName: build-a-technical-documentation-page
+---
+
+# --description--
+
+**Objective:** Build a [CodePen.io](https://codepen.io) app that is functionally similar to this: .
+
+Fulfill the below [user stories](https://en.wikipedia.org/wiki/User_story) and get all of the tests to pass. Give it your own personal style.
+
+You can use HTML, JavaScript, and CSS to complete this project. Plain CSS is recommended because that is what the lessons have covered so far and you should get some practice with plain CSS. You can use Bootstrap or SASS if you choose. Additional technologies (just for example jQuery, React, Angular, or Vue) are not recommended for this project, and using them is at your own risk. Other projects will give you a chance to work with different technology stacks like React. We will accept and try to fix all issue reports that use the suggested technology stack for this project. Happy coding!
+
+**User Story #1:** I can see a `main` element with a corresponding `id="main-doc"`, which contains the page's main content (technical documentation).
+
+**User Story #2:** Within the `#main-doc` element, I can see several `section` elements, each with a class of `main-section`. There should be a minimum of 5.
+
+**User Story #3:** The first element within each `.main-section` should be a `header` element which contains text that describes the topic of that section.
+
+**User Story #4:** Each `section` element with the class of `main-section` should also have an id that corresponds with the text of each `header` contained within it. Any spaces should be replaced with underscores (e.g. The `section` that contains the header "JavaScript and Java" should have a corresponding `id="JavaScript_and_Java"`).
+
+**User Story #5:** The `.main-section` elements should contain at least 10 `p` elements total (not each).
+
+**User Story #6:** The `.main-section` elements should contain at least 5 `code` elements total (not each).
+
+**User Story #7:** The `.main-section` elements should contain at least 5 `li` items total (not each).
+
+**User Story #8:** I can see a `nav` element with a corresponding `id="navbar"`.
+
+**User Story #9:** The navbar element should contain one `header` element which contains text that describes the topic of the technical documentation.
+
+**User Story #10:** Additionally, the navbar should contain link (`a`) elements with the class of `nav-link`. There should be one for every element with the class `main-section`.
+
+**User Story #11:** The `header` element in the navbar must come before any link (`a`) elements in the navbar.
+
+**User Story #12:** Each element with the class of `nav-link` should contain text that corresponds to the `header` text within each `section` (e.g. if you have a "Hello world" section/header, your navbar should have an element which contains the text "Hello world").
+
+**User Story #13:** When I click on a navbar element, the page should navigate to the corresponding section of the `main-doc` element (e.g. If I click on a `nav-link` element that contains the text "Hello world", the page navigates to a `section` element that has that id and contains the corresponding `header`.
+
+**User Story #14:** On regular sized devices (laptops, desktops), the element with `id="navbar"` should be shown on the left side of the screen and should always be visible to the user.
+
+**User Story #15:** My Technical Documentation page should use at least one media query.
+
+You can build your project by using this CodePen template and clicking `Save` to create your own pen. Or you can use this CDN link to run the tests in any environment you like: `https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js`
+
+Once you're done, submit the URL to your working project with all its tests passing.
+
+# --solutions--
+
+```html
+// solution required
+```
diff --git a/curriculum/challenges/english/14-responsive-web-design-22/build-a-tribute-page-project/build-a-tribute-page.md b/curriculum/challenges/english/14-responsive-web-design-22/build-a-tribute-page-project/build-a-tribute-page.md
new file mode 100644
index 0000000000..55dd100b33
--- /dev/null
+++ b/curriculum/challenges/english/14-responsive-web-design-22/build-a-tribute-page-project/build-a-tribute-page.md
@@ -0,0 +1,43 @@
+---
+id: bd7158d8c442eddfaeb5bd18
+title: Build a Tribute Page
+challengeType: 3
+forumTopicId: 301147
+dashedName: build-a-tribute-page
+---
+
+# --description--
+
+**Objective:** Build a [CodePen.io](https://codepen.io) app that is functionally similar to this: .
+
+Fulfill the below [user stories](https://en.wikipedia.org/wiki/User_story) and get all of the tests to pass. Give it your own personal style.
+
+You can use HTML, JavaScript, and CSS to complete this project. Plain CSS is recommended because that is what the lessons have covered so far and you should get some practice with plain CSS. You can use Bootstrap or SASS if you choose. Additional technologies (just for example jQuery, React, Angular, or Vue) are not recommended for this project, and using them is at your own risk. Other projects will give you a chance to work with different technology stacks like React. We will accept and try to fix all issue reports that use the suggested technology stack for this project. Happy coding!
+
+**User Story #1:** My tribute page should have an element with a corresponding `id="main"`, which contains all other elements.
+
+**User Story #2:** I should see an element with a corresponding `id="title"`, which contains a string (i.e. text) that describes the subject of the tribute page (e.g. "Dr. Norman Borlaug").
+
+**User Story #3:** I should see either a `figure` or a `div` element with a corresponding `id="img-div"`.
+
+**User Story #4:** Within the `img-div` element, I should see an `img` element with a corresponding `id="image"`.
+
+**User Story #5:** Within the `img-div` element, I should see an element with a corresponding `id="img-caption"` that contains textual content describing the image shown in `img-div`.
+
+**User Story #6:** I should see an element with a corresponding `id="tribute-info"`, which contains textual content describing the subject of the tribute page.
+
+**User Story #7:** I should see an `a` element with a corresponding `id="tribute-link"`, which links to an outside site that contains additional information about the subject of the tribute page. HINT: You must give your element an attribute of `target` and set it to `_blank` in order for your link to open in a new tab (i.e. `target="_blank"`).
+
+**User Story #8:** The `img` element should responsively resize, relative to the width of its parent element, without exceeding its original size.
+
+**User Story #9:** The `img` element should be centered within its parent element.
+
+You can build your project by using this CodePen template and clicking `Save` to create your own pen. Or you can use this CDN link to run the tests in any environment you like: `https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js`.
+
+Once you're done, submit the URL to your working project with all its tests passing.
+
+# --solutions--
+
+```html
+// solution required
+```
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-034.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-034.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-034.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-034.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-035.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-035.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-035.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-035.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-036.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-036.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-036.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-036.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-037.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-037.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-037.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-037.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-038.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-038.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-038.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-038.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-039.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-039.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-039.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-039.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-040.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-040.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-040.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-040.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-041.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-041.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-041.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-041.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-042.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-042.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-042.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-042.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-043.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-043.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-043.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-043.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-044.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-044.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-044.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-044.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-045.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-045.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-045.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-045.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-046.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-046.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-046.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-046.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-047.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-047.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-047.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-047.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-048.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-048.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-048.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-048.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-049.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-049.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-049.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-049.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-050.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-050.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-050.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-050.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-051.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-051.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-051.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-051.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-052.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-052.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-052.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-052.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-053.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-053.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-053.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-053.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-054.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-054.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-054.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-054.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-055.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-055.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-055.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-055.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-056.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-056.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-056.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-056.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-057.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-057.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-057.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-057.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-058.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-058.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-058.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-058.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-059.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-059.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-059.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-059.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-060.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-060.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-060.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-060.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-061.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-061.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-061.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-061.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-062.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-062.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-062.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-062.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-063.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-063.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-063.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-063.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-064.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-064.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-064.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-064.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-065.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-065.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-065.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-065.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-066.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-066.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-066.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-066.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-067.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-067.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-accessibility-by-building-a-quiz/step-067.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-accessibility-by-building-a-quiz/step-067.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-034.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-034.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-034.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-034.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-035.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-035.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-035.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-035.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-036.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-036.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-036.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-036.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-037.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-037.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-037.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-037.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-038.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-038.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-038.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-038.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-039.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-039.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-039.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-039.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-040.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-040.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-040.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-040.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-041.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-041.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-041.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-041.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-042.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-042.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-042.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-042.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-043.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-043.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-043.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-043.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-044.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-044.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-044.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-044.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-045.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-045.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-045.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-045.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-046.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-046.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-046.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-046.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-047.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-047.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-047.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-047.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-048.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-048.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-048.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-048.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-049.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-049.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-049.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-049.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-050.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-050.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-050.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-050.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-051.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-051.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-051.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-051.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-052.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-052.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-052.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-052.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-053.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-053.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-053.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-053.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-054.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-054.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-054.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-054.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-055.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-055.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-055.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-055.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-056.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-056.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-056.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-056.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-057.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-057.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-057.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-057.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-058.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-058.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-058.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-058.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-059.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-059.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-059.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-059.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-060.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-060.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-060.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-060.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-061.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-061.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-061.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-061.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-062.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-062.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-062.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-062.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-063.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-063.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-063.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-063.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-064.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-064.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-064.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-064.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-065.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-065.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-065.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-065.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-066.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-066.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-066.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-066.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-067.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-067.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-067.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-067.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-068.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-068.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-068.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-068.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-069.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-069.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-069.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-069.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-070.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-070.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-070.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-070.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-071.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-071.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-071.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-071.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-072.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-072.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-072.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-072.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-073.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-073.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-073.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-073.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-074.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-074.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-074.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-074.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-075.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-075.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-075.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-075.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-076.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-076.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-076.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-076.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-077.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-077.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-077.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-077.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-078.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-078.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-078.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-078.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-079.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-079.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-079.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-079.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-080.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-080.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-080.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-080.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-081.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-081.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-081.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-081.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-082.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-082.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-082.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-082.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-083.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-083.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-083.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-083.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-084.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-084.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-084.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-084.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-085.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-085.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-085.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-085.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-086.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-086.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-086.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-086.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-087.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-087.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-087.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-087.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-088.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-088.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-088.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-088.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-089.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-089.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-089.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-089.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-090.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-090.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-090.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-090.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-091.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-091.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-091.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-091.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-092.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-092.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-basic-css-by-building-a-cafe-menu/step-092.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/step-092.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-animation-by-building-a-ferris-wheel/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-flexbox-by-building-a-photo-gallery/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-flexbox-by-building-a-photo-gallery/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-034.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-034.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-034.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-034.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-035.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-035.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-035.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-035.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-036.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-036.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-036.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-036.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-037.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-037.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-037.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-037.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-038.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-038.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-038.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-038.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-039.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-039.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-039.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-039.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-040.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-040.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-040.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-040.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-041.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-041.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-041.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-041.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-042.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-042.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-042.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-042.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-043.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-043.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-043.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-043.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-044.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-044.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-044.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-044.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-045.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-045.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-045.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-045.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-046.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-046.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-046.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-046.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-047.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-047.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-047.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-047.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-048.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-048.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-048.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-048.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-049.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-049.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-049.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-049.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-050.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-050.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-050.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-050.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-051.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-051.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-051.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-051.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-052.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-052.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-052.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-052.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-053.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-053.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-053.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-053.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-054.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-054.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-054.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-054.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-055.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-055.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-055.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-055.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-056.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-056.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-056.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-056.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-057.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-057.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-057.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-057.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-058.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-058.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-058.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-058.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-059.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-059.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-059.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-059.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-060.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-060.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-060.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-060.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-061.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-061.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-061.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-061.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-062.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-062.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-062.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-062.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-063.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-063.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-063.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-063.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-064.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-064.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-064.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-064.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-065.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-065.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-065.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-065.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-066.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-066.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-066.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-066.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-067.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-067.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-067.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-067.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-068.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-068.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-068.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-068.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-069.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-069.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-069.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-069.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-070.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-070.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-070.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-070.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-071.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-071.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-071.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-071.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-072.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-072.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-072.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-072.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-073.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-073.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-073.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-073.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-074.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-074.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-074.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-074.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-075.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-075.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-075.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-075.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-076.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-076.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-076.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-076.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-077.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-077.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-077.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-077.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-078.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-078.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-078.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-078.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-079.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-079.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-079.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-079.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-080.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-080.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-grid-by-building-a-magazine/step-080.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-grid-by-building-a-magazine/step-080.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-034.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-034.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-034.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-034.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-035.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-035.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-035.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-035.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-036.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-036.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-036.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-036.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-037.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-037.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-037.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-037.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-038.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-038.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-038.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-038.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-039.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-039.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-039.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-039.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-040.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-040.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-040.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-040.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-041.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-041.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-041.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-041.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-042.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-042.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-042.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-042.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-043.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-043.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-043.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-043.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-044.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-044.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-044.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-044.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-045.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-045.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-045.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-045.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-046.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-046.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-046.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-046.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-047.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-047.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-047.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-047.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-048.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-048.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-048.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-048.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-049.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-049.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-049.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-049.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-050.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-050.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-050.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-050.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-051.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-051.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-051.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-051.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-052.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-052.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-052.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-052.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-053.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-053.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-053.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-053.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-054.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-054.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-054.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-054.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-055.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-055.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-055.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-055.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-056.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-056.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-056.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-056.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-057.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-057.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-057.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-057.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-058.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-058.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-058.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-058.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-059.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-059.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-059.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-059.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-060.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-060.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-060.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-060.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-061.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-061.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-061.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-061.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-062.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-062.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-062.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-062.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-063.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-063.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-063.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-063.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-064.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-064.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-064.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-064.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-065.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-065.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-065.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-065.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-066.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-066.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-066.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-066.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-067.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-067.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-067.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-067.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-068.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-068.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-068.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-068.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-069.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-069.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-069.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-069.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-070.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-070.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-070.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-070.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-071.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-071.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-071.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-071.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-072.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-072.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-072.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-072.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-073.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-073.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-073.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-073.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-074.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-074.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-074.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-074.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-075.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-075.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-075.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-075.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-076.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-076.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-076.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-076.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-077.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-077.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-077.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-077.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-078.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-078.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-078.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-078.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-079.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-079.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-079.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-079.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-080.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-080.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-080.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-080.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-081.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-081.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-081.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-081.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-082.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-082.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-082.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-082.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-083.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-083.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-083.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-083.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-084.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-084.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-084.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-084.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-085.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-085.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-085.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-085.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-086.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-086.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-086.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-086.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-087.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-087.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-087.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-087.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-088.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-088.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-088.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-088.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-089.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-089.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-089.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-089.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-090.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-090.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-090.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-090.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-091.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-091.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-091.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-091.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-092.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-092.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-092.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-092.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-093.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-093.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-093.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-093.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-094.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-094.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-094.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-094.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-095.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-095.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-095.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-095.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-096.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-096.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-096.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-096.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-097.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-097.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-097.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-097.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-098.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-098.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-098.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-098.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-099.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-099.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-099.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-099.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-100.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-100.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-100.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-100.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-101.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-101.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-101.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-101.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-102.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-102.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-102.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-102.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-103.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-103.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-103.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-103.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-104.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-104.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-transforms-by-building-a-penguin/step-104.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-transforms-by-building-a-penguin/step-104.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-034.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-034.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-034.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-034.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-035.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-035.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-035.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-035.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-036.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-036.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-036.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-036.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-037.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-037.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-037.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-037.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-038.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-038.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-038.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-038.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-039.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-039.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-039.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-039.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-040.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-040.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-040.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-040.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-041.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-041.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-041.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-041.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-042.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-042.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-042.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-042.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-043.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-043.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-043.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-043.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-044.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-044.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-044.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-044.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-045.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-045.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-045.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-045.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-046.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-046.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-046.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-046.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-047.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-047.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-047.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-047.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-048.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-048.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-048.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-048.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-049.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-049.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-049.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-049.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-050.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-050.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-050.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-050.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-051.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-051.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-051.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-051.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-052.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-052.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-052.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-052.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-053.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-053.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-053.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-053.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-054.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-054.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-054.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-054.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-055.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-055.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-055.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-055.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-056.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-056.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-056.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-056.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-057.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-057.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-057.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-057.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-058.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-058.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-058.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-058.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-059.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-059.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-059.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-059.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-060.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-060.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-060.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-060.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-061.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-061.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-061.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-061.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-062.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-062.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-062.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-062.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-063.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-063.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-063.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-063.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-064.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-064.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-064.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-064.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-065.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-065.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-065.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-065.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-066.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-066.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-066.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-066.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-067.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-067.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-067.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-067.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-068.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-068.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-068.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-068.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-069.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-069.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-069.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-069.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-070.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-070.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-070.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-070.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-071.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-071.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-071.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-071.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-072.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-072.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-072.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-072.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-073.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-073.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-073.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-073.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-074.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-074.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-074.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-074.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-075.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-075.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-075.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-075.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-076.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-076.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-076.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-076.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-077.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-077.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-077.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-077.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-078.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-078.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-078.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-078.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-079.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-079.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-079.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-079.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-080.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-080.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-080.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-080.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-081.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-081.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-081.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-081.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-082.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-082.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-082.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-082.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-083.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-083.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-083.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-083.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-084.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-084.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-084.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-084.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-085.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-085.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-085.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-085.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-086.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-086.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-086.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-086.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-087.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-087.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-087.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-087.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-088.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-088.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-088.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-088.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-089.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-089.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-089.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-089.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-090.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-090.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-090.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-090.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-091.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-091.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-091.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-091.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-092.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-092.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-092.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-092.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-093.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-093.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-093.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-093.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-094.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-094.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-094.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-094.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-095.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-095.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-095.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-095.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-096.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-096.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-096.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-096.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-097.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-097.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-097.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-097.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-098.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-098.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-098.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-098.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-099.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-099.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-099.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-099.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-100.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-100.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-100.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-100.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-101.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-101.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-101.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-101.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-102.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-102.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-102.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-102.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-103.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-103.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-103.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-103.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-104.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-104.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-104.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-104.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-105.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-105.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-105.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-105.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-106.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-106.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-106.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-106.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-107.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-107.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-107.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-107.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-108.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-108.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-108.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-108.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-109.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-109.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-109.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-109.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-110.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-110.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-110.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-110.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-111.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-111.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-111.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-111.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-112.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-112.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-112.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-112.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-113.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-113.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-113.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-113.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-114.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-114.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-114.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-114.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-115.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-115.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-115.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-115.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-116.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-116.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-116.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-116.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-117.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-117.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-117.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-117.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-118.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-118.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-css-variables-by-building-a-city-skyline/step-118.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-css-variables-by-building-a-city-skyline/step-118.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-034.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-034.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-034.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-034.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-035.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-035.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-035.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-035.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-036.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-036.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-036.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-036.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-037.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-037.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-037.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-037.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-038.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-038.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-038.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-038.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-039.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-039.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-039.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-039.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-040.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-040.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-040.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-040.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-041.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-041.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-041.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-041.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-042.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-042.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-042.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-042.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-043.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-043.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-043.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-043.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-044.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-044.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-044.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-044.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-045.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-045.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-045.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-045.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-046.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-046.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-046.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-046.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-047.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-047.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-047.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-047.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-048.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-048.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-048.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-048.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-049.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-049.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-049.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-049.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-050.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-050.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-050.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-050.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-051.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-051.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-051.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-051.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-052.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-052.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-052.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-052.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-053.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-053.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-053.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-053.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-054.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-054.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-054.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-054.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-055.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-055.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-055.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-055.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-056.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-056.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-056.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-056.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-057.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-057.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-057.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-057.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-058.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-058.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-058.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-058.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-059.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-059.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-059.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-059.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-060.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-060.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-060.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-060.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-061.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-061.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-061.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-061.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-062.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-062.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-062.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-062.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-063.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-063.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-063.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-063.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-064.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-064.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-064.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-064.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-065.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-065.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-065.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-065.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-066.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-066.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-066.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-066.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-067.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-067.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-by-building-a-cat-photo-app/step-067.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-by-building-a-cat-photo-app/step-067.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-034.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-034.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-034.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-034.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-035.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-035.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-035.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-035.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-036.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-036.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-036.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-036.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-037.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-037.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-037.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-037.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-038.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-038.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-038.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-038.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-039.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-039.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-039.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-039.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-040.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-040.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-040.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-040.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-041.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-041.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-041.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-041.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-042.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-042.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-042.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-042.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-043.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-043.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-043.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-043.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-044.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-044.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-044.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-044.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-045.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-045.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-045.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-045.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-046.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-046.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-046.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-046.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-047.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-047.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-047.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-047.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-048.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-048.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-048.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-048.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-049.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-049.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-049.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-049.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-050.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-050.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-050.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-050.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-051.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-051.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-051.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-051.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-052.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-052.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-052.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-052.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-053.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-053.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-053.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-053.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-054.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-054.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-054.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-054.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-055.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-055.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-055.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-055.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-056.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-056.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-056.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-056.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-057.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-057.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-html-forms-by-building-a-registration-form/step-057.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-html-forms-by-building-a-registration-form/step-057.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-034.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-034.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-034.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-034.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-035.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-035.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-035.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-035.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-036.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-036.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-036.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-036.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-037.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-037.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-037.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-037.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-038.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-038.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-038.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-038.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-039.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-039.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-039.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-039.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-040.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-040.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-040.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-040.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-041.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-041.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-041.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-041.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-042.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-042.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-042.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-042.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-043.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-043.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-043.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-043.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-044.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-044.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-044.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-044.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-045.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-045.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-045.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-045.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-046.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-046.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-046.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-046.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-047.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-047.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-047.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-047.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-048.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-048.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-048.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-048.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-049.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-049.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-049.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-049.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-050.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-050.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-050.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-050.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-051.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-051.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-051.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-051.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-052.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-052.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-052.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-052.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-053.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-053.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-053.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-053.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-054.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-054.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-054.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-054.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-055.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-055.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-055.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-055.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-056.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-056.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-056.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-056.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-057.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-057.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-057.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-057.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-058.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-058.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-058.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-058.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-059.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-059.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-059.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-059.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-060.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-060.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-060.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-060.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-061.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-061.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-061.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-061.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-062.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-062.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-062.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-062.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-063.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-063.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-063.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-063.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-064.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-064.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-064.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-064.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-065.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-065.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-065.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-065.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-066.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-066.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-066.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-066.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-067.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-067.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-067.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-067.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-068.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-068.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-068.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-068.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-069.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-069.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-069.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-069.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-070.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-070.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-070.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-070.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-071.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-071.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-071.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-071.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-072.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-072.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-072.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-072.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-073.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-073.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-073.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-073.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-074.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-074.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-074.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-074.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-075.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-075.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-075.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-075.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-076.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-076.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-076.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-076.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-077.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-077.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-077.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-077.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-078.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-078.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-078.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-078.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-079.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-079.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-079.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-079.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-080.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-080.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-080.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-080.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-081.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-081.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-081.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-081.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-082.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-082.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-082.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-082.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-083.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-083.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-083.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-083.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-084.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-084.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-084.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-084.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-085.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-085.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-085.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-085.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-086.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-086.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-086.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-086.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-087.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-087.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-087.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-087.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-088.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-088.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-088.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-088.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-089.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-089.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-intermediate-css-by-building-a-picasso-painting/step-089.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-intermediate-css-by-building-a-picasso-painting/step-089.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-034.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-034.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-034.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-034.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-035.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-035.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-035.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-035.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-036.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-036.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-036.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-036.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-037.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-037.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-037.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-037.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-038.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-038.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-038.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-038.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-039.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-039.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-039.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-039.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-040.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-040.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-040.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-040.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-041.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-041.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-041.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-041.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-042.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-042.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-042.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-042.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-043.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-043.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-043.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-043.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-044.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-044.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-044.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-044.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-045.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-045.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-045.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-045.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-046.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-046.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-046.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-046.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-047.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-047.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-047.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-047.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-048.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-048.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-048.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-048.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-049.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-049.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-049.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-049.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-050.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-050.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-050.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-050.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-051.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-051.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-051.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-051.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-052.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-052.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-052.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet/step-052.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-responsive-web-design-by-building-a-piano/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-responsive-web-design-by-building-a-piano/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-034.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-034.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-034.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-034.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-035.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-035.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-035.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-035.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-036.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-036.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-036.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-036.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-037.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-037.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-037.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-037.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-038.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-038.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-038.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-038.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-039.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-039.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-039.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-039.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-040.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-040.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-040.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-040.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-041.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-041.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-041.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-041.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-042.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-042.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-042.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-042.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-043.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-043.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-043.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-043.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-044.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-044.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-044.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-044.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-045.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-045.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-045.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-045.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-046.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-046.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-the-css-box-model-by-building-a-rothko-painting/step-046.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-the-css-box-model-by-building-a-rothko-painting/step-046.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-001.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-001.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-001.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-001.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-002.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-002.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-002.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-002.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-003.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-003.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-003.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-003.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-004.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-004.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-004.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-004.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-005.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-005.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-005.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-005.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-006.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-006.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-006.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-006.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-007.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-007.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-007.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-007.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-008.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-008.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-008.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-008.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-009.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-009.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-009.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-009.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-010.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-010.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-010.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-010.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-011.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-011.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-011.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-011.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-012.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-012.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-012.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-012.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-013.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-013.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-013.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-013.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-014.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-014.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-014.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-014.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-015.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-015.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-015.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-015.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-016.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-016.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-016.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-016.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-017.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-017.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-017.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-017.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-018.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-018.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-018.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-018.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-019.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-019.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-019.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-019.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-020.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-020.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-020.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-020.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-021.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-021.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-021.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-021.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-022.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-022.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-022.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-022.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-023.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-023.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-023.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-023.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-024.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-024.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-024.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-024.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-025.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-025.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-025.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-025.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-026.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-026.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-026.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-026.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-027.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-027.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-027.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-027.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-028.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-028.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-028.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-028.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-029.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-029.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-029.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-029.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-030.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-030.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-030.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-030.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-031.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-031.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-031.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-031.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-032.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-032.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-032.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-032.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-033.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-033.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-033.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-033.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-034.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-034.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-034.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-034.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-035.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-035.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-035.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-035.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-036.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-036.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-036.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-036.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-037.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-037.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-037.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-037.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-038.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-038.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-038.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-038.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-039.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-039.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-039.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-039.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-040.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-040.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-040.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-040.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-041.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-041.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-041.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-041.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-042.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-042.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-042.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-042.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-043.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-043.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-043.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-043.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-044.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-044.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-044.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-044.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-045.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-045.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-045.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-045.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-046.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-046.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-046.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-046.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-047.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-047.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-047.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-047.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-048.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-048.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-048.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-048.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-049.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-049.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-049.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-049.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-050.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-050.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-050.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-050.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-051.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-051.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-051.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-051.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-052.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-052.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-052.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-052.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-053.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-053.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-053.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-053.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-054.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-054.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-054.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-054.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-055.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-055.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-055.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-055.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-056.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-056.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-056.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-056.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-057.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-057.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-057.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-057.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-058.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-058.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-058.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-058.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-059.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-059.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-059.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-059.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-060.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-060.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-060.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-060.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-061.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-061.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-061.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-061.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-062.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-062.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-062.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-062.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-063.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-063.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-063.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-063.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-064.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-064.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-064.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-064.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-065.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-065.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-065.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-065.md
diff --git a/curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-066.md b/curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-066.md
similarity index 100%
rename from curriculum/challenges/english/01-responsive-web-design/learn-typography-by-building-a-nutrition-label/step-066.md
rename to curriculum/challenges/english/14-responsive-web-design-22/learn-typography-by-building-a-nutrition-label/step-066.md
diff --git a/curriculum/getChallenges.js b/curriculum/getChallenges.js
index fe5fa8d464..3b61d57610 100644
--- a/curriculum/getChallenges.js
+++ b/curriculum/getChallenges.js
@@ -228,6 +228,14 @@ async function buildChallenges({ path: filePath }, curriculum, lang) {
}
const { meta } = challengeBlock;
const isCert = path.extname(filePath) === '.yml';
+ // TODO: there's probably a better way, but this makes sure we don't build any
+ // of the new curriculum when we don't want it.
+ if (
+ process.env.SHOW_NEW_CURRICULUM !== 'true' &&
+ superBlock === 'responsive-web-design-22'
+ ) {
+ return;
+ }
const challenge = isCert
? await createCertification(challengesDir, filePath, lang)
: await createChallenge(challengesDir, filePath, lang, meta);
@@ -307,8 +315,18 @@ ${getFullPath('english')}
challenge.block = dasherize(blockName);
challenge.hasEditableBoundaries = !!hasEditableBoundaries;
challenge.order = order;
- const superOrder = getSuperOrder(superBlock);
+ const superOrder = getSuperOrder(superBlock, {
+ showNewCurriculum: process.env.SHOW_NEW_CURRICULUM === 'true'
+ });
if (superOrder !== null) challenge.superOrder = superOrder;
+ /* Since there can be more than one way to complete a certification (using the
+ legacy curriculum or the new one, for instance), we need a certification
+ field to track which certification this belongs to. */
+ // TODO: generalize this to all superBlocks
+ challenge.certification =
+ superBlock === 'responsive-web-design-22'
+ ? 'responsive-web-design'
+ : superBlock;
challenge.superBlock = superBlock;
challenge.challengeOrder = challengeOrder;
challenge.isPrivate = challenge.isPrivate || isPrivate;
diff --git a/curriculum/schema/challengeSchema.js b/curriculum/schema/challengeSchema.js
index 4c34a59265..eaceb7f0f5 100644
--- a/curriculum/schema/challengeSchema.js
+++ b/curriculum/schema/challengeSchema.js
@@ -26,6 +26,7 @@ const schema = Joi.object()
blockId: Joi.objectId(),
challengeOrder: Joi.number(),
removeComments: Joi.bool(),
+ certification: Joi.string().regex(slugRE),
challengeType: Joi.number().min(0).max(12).required(),
checksum: Joi.number(),
// __commentCounts is only used to test the comment replacement
diff --git a/curriculum/test/utils/challengeTitles.js b/curriculum/test/utils/challengeTitles.js
index 823aa57a56..8b6c94ca0b 100644
--- a/curriculum/test/utils/challengeTitles.js
+++ b/curriculum/test/utils/challengeTitles.js
@@ -17,8 +17,9 @@ class ChallengeTitles {
const isProjectCurriculumChallenge = title.match(/^Step\s*\d+$/);
titleToCheck = isProjectCurriculumChallenge ? pathAndTitle : titleToCheck;
const isKnown = this.knownTitles.includes(titleToCheck);
+ // TODO: check for the exceptions or remove the warning.
if (isKnown) {
- throw new Error(`
+ console.warn(`
All current curriculum challenges must have a unique title.
The title ${title} (at ${pathAndTitle}) is already assigned
`);
diff --git a/curriculum/test/utils/mongoIds.js b/curriculum/test/utils/mongoIds.js
index efa01ff36b..50ab7b5f3b 100644
--- a/curriculum/test/utils/mongoIds.js
+++ b/curriculum/test/utils/mongoIds.js
@@ -16,11 +16,10 @@ class MongoIds {
}
const idIndex = findIndex(this.knownIds, existing => id === existing);
+ // TODO: check for the exceptions or remove the warning.
if (idIndex !== -1) {
- throw new Error(`
- All challenges must have a unique id.
-
- The id for ${title} is already assigned
+ console.warn(`The id for challenge ${title} appears more than once.
+ With the exception of some projects this should not happen.
`);
}
this.knownIds = [...this.knownIds, id];
diff --git a/curriculum/utils.js b/curriculum/utils.js
index 2e8109eb80..b2815aa548 100644
--- a/curriculum/utils.js
+++ b/curriculum/utils.js
@@ -35,13 +35,33 @@ const superBlockToOrder = {
'coding-interview-prep': 11
};
-function getSuperOrder(superblock, { isLegacy } = { isLegacy: false }) {
+const superBlockToNewOrder = {
+ 'responsive-web-design-22': 0,
+ 'javascript-algorithms-and-data-structures': 1,
+ 'front-end-development-libraries': 2,
+ 'data-visualization': 3,
+ 'relational-databases': 4,
+ 'back-end-development-and-apis': 5,
+ 'quality-assurance': 6,
+ 'scientific-computing-with-python': 7,
+ 'data-analysis-with-python': 8,
+ 'information-security': 9,
+ 'machine-learning-with-python': 10,
+ 'coding-interview-prep': 11,
+ 'responsive-web-design': 12
+};
+
+function getSuperOrder(
+ superblock,
+ { showNewCurriculum } = { showNewCurriculum: false }
+) {
+ const orderMap = showNewCurriculum ? superBlockToNewOrder : superBlockToOrder;
if (typeof superblock !== 'string')
throw Error('superblock must be a string');
- const order = superBlockToOrder[superblock];
+ const order = orderMap[superblock];
if (typeof order === 'undefined')
throw Error(`${superblock} is not a valid superblock`);
- return isLegacy ? order + 12 : order;
+ return order;
}
exports.getSuperOrder = getSuperOrder;
diff --git a/curriculum/utils.test.js b/curriculum/utils.test.js
index fdcd643f62..4698e6ef9e 100644
--- a/curriculum/utils.test.js
+++ b/curriculum/utils.test.js
@@ -15,9 +15,8 @@ describe('getSuperOrder', () => {
});
it('throws for "certifications"', () => {
- expect.assertions(2);
+ expect.assertions(1);
expect(() => getSuperOrder('certifications')).toThrow();
- expect(() => getSuperOrder('certifications', { isLegacy: true })).toThrow();
});
it('returns unique numbers for all current superblocks', () => {
@@ -36,8 +35,54 @@ describe('getSuperOrder', () => {
expect(getSuperOrder('coding-interview-prep')).toBe(11);
});
- it('returns unique numbers for all legacy superblocks', () => {
- expect.assertions(1);
- expect(getSuperOrder('responsive-web-design', { isLegacy: true })).toBe(12);
+ it('returns a different order if passed the option showNewCurriculum: true', () => {
+ expect.assertions(13);
+ expect(
+ getSuperOrder('responsive-web-design-22', { showNewCurriculum: true })
+ ).toBe(0);
+ expect(
+ getSuperOrder('javascript-algorithms-and-data-structures', {
+ showNewCurriculum: true
+ })
+ ).toBe(1);
+ expect(
+ getSuperOrder('front-end-development-libraries', {
+ showNewCurriculum: true
+ })
+ ).toBe(2);
+ expect(
+ getSuperOrder('data-visualization', { showNewCurriculum: true })
+ ).toBe(3);
+ expect(
+ getSuperOrder('relational-databases', { showNewCurriculum: true })
+ ).toBe(4);
+ expect(
+ getSuperOrder('back-end-development-and-apis', {
+ showNewCurriculum: true
+ })
+ ).toBe(5);
+ expect(
+ getSuperOrder('quality-assurance', { showNewCurriculum: true })
+ ).toBe(6);
+ expect(
+ getSuperOrder('scientific-computing-with-python', {
+ showNewCurriculum: true
+ })
+ ).toBe(7);
+ expect(
+ getSuperOrder('data-analysis-with-python', { showNewCurriculum: true })
+ ).toBe(8);
+ expect(
+ getSuperOrder('information-security', { showNewCurriculum: true })
+ ).toBe(9);
+ expect(
+ getSuperOrder('machine-learning-with-python', { showNewCurriculum: true })
+ ).toBe(10);
+ expect(
+ getSuperOrder('coding-interview-prep', { showNewCurriculum: true })
+ ).toBe(11);
+ expect(
+ getSuperOrder('responsive-web-design', { showNewCurriculum: true })
+ ).toBe(12);
});
});