diff --git a/funwithphysics/package-lock.json b/funwithphysics/package-lock.json
index e24f27088..8f6aa6dc2 100644
--- a/funwithphysics/package-lock.json
+++ b/funwithphysics/package-lock.json
@@ -20,6 +20,7 @@
"firebase": "^9.5.0",
"fractional": "^1.0.0",
"function-plot": "^1.22.9-0",
+ "interweave": "^13.0.0",
"react": "^17.0.2",
"react-bootstrap": "^1.6.4",
"react-dom": "^17.0.2",
@@ -10907,6 +10908,21 @@
"mr-parser": "0.2.1"
}
},
+ "node_modules/interweave": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/interweave/-/interweave-13.0.0.tgz",
+ "integrity": "sha512-Mckwj+ix/VtrZu1bRBIIohwrsXj12ZTvJCoYUMZlJmgtvIaQCj0i77eSZ63ckbA1TsPrz2VOvLW9/kTgm5d+mw==",
+ "dependencies": {
+ "escape-html": "^1.0.3"
+ },
+ "funding": {
+ "type": "ko-fi",
+ "url": "https://ko-fi.com/milesjohnson"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -26346,12 +26362,14 @@
"@firebase/auth-interop-types": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz",
- "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g=="
+ "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==",
+ "requires": {}
},
"@firebase/auth-types": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.11.0.tgz",
- "integrity": "sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw=="
+ "integrity": "sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw==",
+ "requires": {}
},
"@firebase/component": {
"version": "0.5.10",
@@ -26427,7 +26445,8 @@
"@firebase/firestore-types": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.0.tgz",
- "integrity": "sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA=="
+ "integrity": "sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA==",
+ "requires": {}
},
"@firebase/functions": {
"version": "0.7.8",
@@ -26616,7 +26635,8 @@
"@firebase/storage-types": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.6.0.tgz",
- "integrity": "sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA=="
+ "integrity": "sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA==",
+ "requires": {}
},
"@firebase/util": {
"version": "1.4.3",
@@ -26841,7 +26861,8 @@
"@restart/context": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz",
- "integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q=="
+ "integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q==",
+ "requires": {}
},
"@restart/hooks": {
"version": "0.3.27",
@@ -27569,7 +27590,8 @@
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "requires": {}
},
"acorn-to-esprima": {
"version": "1.0.7",
@@ -27595,12 +27617,14 @@
"ajv-errors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
- "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+ "requires": {}
},
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "requires": {}
},
"align-text": {
"version": "0.1.4",
@@ -28008,7 +28032,8 @@
"babel-core": {
"version": "7.0.0-bridge.0",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
- "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg=="
+ "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
+ "requires": {}
},
"babel-eslint": {
"version": "9.0.0",
@@ -28156,7 +28181,8 @@
"babel-plugin-named-asset-import": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz",
- "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q=="
+ "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==",
+ "requires": {}
},
"babel-plugin-polyfill-corejs2": {
"version": "0.3.1",
@@ -28807,7 +28833,8 @@
"bootstrap": {
"version": "5.2.0",
"resolved": "https://repo.huaweicloud.com/repository/npm/bootstrap/-/bootstrap-5.2.0.tgz",
- "integrity": "sha512-qlnS9GL6YZE6Wnef46GxGv1UpGGzAwO0aPL1yOjzDIJpeApeMvqV24iL+pjr2kU4dduoBA9fINKWKgMToobx9A=="
+ "integrity": "sha512-qlnS9GL6YZE6Wnef46GxGv1UpGGzAwO0aPL1yOjzDIJpeApeMvqV24iL+pjr2kU4dduoBA9fINKWKgMToobx9A==",
+ "requires": {}
},
"brace-expansion": {
"version": "1.1.11",
@@ -33501,6 +33528,14 @@
}
}
},
+ "interweave": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/interweave/-/interweave-13.0.0.tgz",
+ "integrity": "sha512-Mckwj+ix/VtrZu1bRBIIohwrsXj12ZTvJCoYUMZlJmgtvIaQCj0i77eSZ63ckbA1TsPrz2VOvLW9/kTgm5d+mw==",
+ "requires": {
+ "escape-html": "^1.0.3"
+ }
+ },
"invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -35093,7 +35128,8 @@
"jest-pnp-resolver": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.0.2.tgz",
- "integrity": "sha512-H2DvUlwdMedNGv4FOliPDnxani6ATWy70xe2eckGJgkLoMaWzRPqpSlc5ShqX0Ltk5OhRQvPQY2LLZPOpgcc7g=="
+ "integrity": "sha512-H2DvUlwdMedNGv4FOliPDnxani6ATWy70xe2eckGJgkLoMaWzRPqpSlc5ShqX0Ltk5OhRQvPQY2LLZPOpgcc7g==",
+ "requires": {}
},
"jest-regex-util": {
"version": "23.3.0",
@@ -40655,7 +40691,8 @@
"react-dom": {
"version": "0.14.10",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-0.14.10.tgz",
- "integrity": "sha512-kDs8SWFb8Sry4NAplhpJbZEeAnTPir/m+s9s+lkdqA2a89BzmWGnEgGG/CfmhULjv1ogc4oHrjMfAvFNruT3jQ=="
+ "integrity": "sha512-kDs8SWFb8Sry4NAplhpJbZEeAnTPir/m+s9s+lkdqA2a89BzmWGnEgGG/CfmhULjv1ogc4oHrjMfAvFNruT3jQ==",
+ "requires": {}
},
"repeating": {
"version": "1.1.3",
@@ -40750,7 +40787,8 @@
"react-icons": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.3.1.tgz",
- "integrity": "sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ=="
+ "integrity": "sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ==",
+ "requires": {}
},
"react-is": {
"version": "16.13.1",
@@ -40809,7 +40847,8 @@
"react-progressive-image": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/react-progressive-image/-/react-progressive-image-0.6.0.tgz",
- "integrity": "sha512-/yc8N3lHskPQkubm+QH5RIQHA89Sigv7p9UkvbHzKVE2OBb6njhmquk7GW/f2Y//mzk5DesFHN/hV5RWhd6IXA=="
+ "integrity": "sha512-/yc8N3lHskPQkubm+QH5RIQHA89Sigv7p9UkvbHzKVE2OBb6njhmquk7GW/f2Y//mzk5DesFHN/hV5RWhd6IXA==",
+ "requires": {}
},
"react-router": {
"version": "6.2.1",
@@ -40926,7 +40965,8 @@
"react-side-effect": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz",
- "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ=="
+ "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==",
+ "requires": {}
},
"react-slide-routes": {
"version": "2.0.0",
@@ -44458,7 +44498,8 @@
"ws": {
"version": "7.5.7",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
- "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A=="
+ "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
+ "requires": {}
},
"xregexp": {
"version": "4.0.0",
diff --git a/funwithphysics/package.json b/funwithphysics/package.json
index 9637a15be..7d8771478 100644
--- a/funwithphysics/package.json
+++ b/funwithphysics/package.json
@@ -16,6 +16,7 @@
"firebase": "^9.5.0",
"fractional": "^1.0.0",
"function-plot": "^1.22.9-0",
+ "interweave": "^13.0.0",
"react": "^17.0.2",
"react-bootstrap": "^1.6.4",
"react-dom": "^17.0.2",
diff --git a/funwithphysics/src/Components/Matrices/Topic/Calculator.js b/funwithphysics/src/Components/Matrices/Topic/Calculator.js
index 69e408e35..b1ced5c4e 100644
--- a/funwithphysics/src/Components/Matrices/Topic/Calculator.js
+++ b/funwithphysics/src/Components/Matrices/Topic/Calculator.js
@@ -6,6 +6,7 @@ import { useParams } from "react-router";
import "./Calculator.css";
import { useEffect } from "react";
import Solution from "../../Solution/Solution";
+import { Markup } from "interweave";
function Calculator() {
let { topic } = useParams();
@@ -494,6 +495,170 @@ function Calculator() {
,
],
},
+ {
+ topic: "Matrix Multiplication",
+ details:
+ "Matrix multiplication is a type of binary operation, which takes two matrices and produces a single matrix. Product of two matrices is the dot product of the two matrices.",
+ formula: (
+ <>
+ If A is an m × n matrix and B is an n × p matrix, then matrix product
+ C = AB is defined to be the m × p matrix,
+
+ such that, cij = ai1 b1j + a
+ i2 b2j + ... + ain bnj
+ >
+ ),
+ process: [
+ "1) Set 2 matrices such that number of columns of 1st matrix is equal to number of rows of second matrix",
+ ,
+ ,
+ "2) Calculate each element of the resulting matrix, using the formula specified above",
+ ],
+ example1: [
+ "Multiply given two matrices : ",
+ ,
+ ,
+
+
A =
+
+
+
+ 1
+ 3
+ 6
+
+
+ 2
+ 4
+ 5
+
+
+
+
B =
+
+
+
+ 3
+ 4
+
+
+ 5
+ 5
+
+
+ 6
+ 6
+
+
+
+
,
+ ,
+ ,
+ <>
+ c11 = 1 x 3 + 3 x 5 + 6 x 6 = 54
+ >,
+ ,
+ ,
+
+
C =
+
+
+
+ 54
+ 0
+
+
+ 0
+ 0
+
+
+
+
,
+ ,
+ ,
+ <>
+ c12 = 1 x 4 + 3 x 5 + 6 x 6 = 55
+ >,
+ ,
+ ,
+
+
C =
+
+
+
+ 54
+ 55
+
+
+ 0
+ 0
+
+
+
+
,
+ ],
+ example2: [
+ <>
+ c21 = 2 x 3 + 4 x 5 + 5 x 6 = 56
+ >,
+ ,
+ ,
+
+
C =
+
+
+
+ 54
+ 55
+
+
+ 56
+ 0
+
+
+
+
,
+ ,
+ ,
+ <>
+ c22 = 2 x 4 + 4 x 5 + 5 x 6 = 58
+ >,
+ ,
+ ,
+
+
C =
+
+
+
+ 54
+ 55
+
+
+ 56
+ 58
+
+
+
+
,
+ ,
+ ,
+
+
A x B = C =
+
+
+
+ 54
+ 55
+
+
+ 56
+ 58
+
+
+
+
,
+ ],
+ },
];
const page = Topics.filter((data) => data.topic === topic);
@@ -1676,15 +1841,759 @@ function Calculator() {
);
};
- //adding the calculators togather
- function calC(key) {
- let currentCall;
- switch (key) {
- case "Determinants":
- currentCall = determinantCalculator();
- break;
- case "Inverse of a Matrix":
- currentCall = inverseCalculator();
+ const matrixMultiplicationCalculator = () => {
+ const [r1, setr1] = useState(null);
+ const [c1, setc1] = useState(null);
+ const [r2, setr2] = useState(null);
+ const [c2, setc2] = useState(null);
+ const [showError, setShowError] = useState(false);
+ const [mat1, setMat1] = useState([[]]);
+ const [fracMat1, setFracMat1] = useState([[[]]]);
+ const [fracMat2, setFracMat2] = useState([[[]]]);
+ const [showModal1, setShowModal1] = useState(false);
+ const [mat2, setMat2] = useState([[]]);
+ const [showModal2, setShowModal2] = useState(false);
+ const [firstMatSet, setFirstMat] = useState(false);
+ const [secMatSet, setSecMat] = useState(false);
+ const [answer, setAnswer] = useState(null);
+ const [result, setResult] = useState(null);
+ const [firstTime, setFirstTime] = useState(true);
+
+ // scrolls to apt postion whenever our result gets updates
+ useEffect(() => {
+ if (firstTime) {
+ setFirstTime(false);
+ return;
+ }
+ console.log(ref.current);
+ var element = ref.current;
+ var header = document.getElementById("targetElement");
+ console.log(header);
+ var elementPosition = element.getBoundingClientRect().top;
+ var offsetPosition = elementPosition + window.pageYOffset;
+ window.scrollTo({
+ top: offsetPosition,
+ });
+ }, [answer]);
+
+ // function to find highest common factor
+ const hcf = (x, y) => {
+ if (x % y == 0) {
+ return y;
+ }
+
+ return hcf(y, x % y);
+ };
+
+ //resets everything to original state
+ const reset = () => {
+ setr1(null);
+ setr2(null);
+ setc1(null);
+ setc2(null);
+ setMat1([[]]);
+ setMat2([[]]);
+ setFirstMat(false);
+ setSecMat(false);
+ setFracMat1([[[]]]);
+ setFracMat2([[[]]]);
+ setAnswer(null);
+ setResult(null);
+ };
+
+ //function to create cutomised table from the given matrix
+ const createTable = (matrix, r, c) => {
+ return (
+
+
+ {matrix.map((row, i) => (
+
+ {row.map((val, j) => (
+
+ {val[1] == 1 ? (
+ val[0]
+ ) : (
+ <>
+ {val[0]} ⁄{val[1]}
+ >
+ )}
+
+ ))}
+
+ ))}
+
+
+ );
+ };
+
+ //function to check if all values of matrix 1 is set and displays it as result
+ const displayMatrix1 = () => {
+ let dim1 = parseInt(r1);
+ let dim2 = parseInt(c1);
+
+ let copy = Array(dim1)
+ .fill(0)
+ .map((row) =>
+ new Array(dim2).fill(0).map((r) => new Array(2).fill(null))
+ );
+ const handleFractionChange = (row, column, num, denom) => {
+ copy[row][column][0] = num;
+ copy[row][column][1] = denom;
+ };
+
+ let isComplete = true;
+
+ for (var i = 0; i < dim1; i++) {
+ for (var j = 0; j < dim2; j++) {
+ if (mat1[i][j] === null) {
+ isComplete = false;
+ break;
+ }
+
+ var n = mat1[i][j].split(".");
+ var denominator = n.length == 1 ? 1 : Math.pow(10, n[1].length);
+ var numerator =
+ n.length == 1 ? parseInt(n[0]) : parseInt(n[0] + n[1]);
+ if (numerator == 0) {
+ denominator = 1;
+ numerator = 0;
+ } else {
+ if (numerator < 0) {
+ var HCF = hcf(denominator, numerator * -1);
+ denominator /= HCF;
+ numerator /= HCF;
+ } else {
+ var HCF = hcf(denominator, numerator);
+ denominator /= HCF;
+ numerator /= HCF;
+ }
+ }
+
+ handleFractionChange(i, j, numerator, denominator);
+ }
+ }
+
+ if (!isComplete) {
+ setShowError(true);
+ } else {
+ setFracMat1(copy);
+ setFirstMat(true);
+ setShowModal1(false);
+ }
+ };
+
+ //function to check if all values of matrix 2 is set and displays it as result
+ const displayMatrix2 = () => {
+ let dim1 = parseInt(r2);
+ let dim2 = parseInt(c2);
+
+ let copy = Array(dim1)
+ .fill(0)
+ .map((row) =>
+ new Array(dim2).fill(0).map((r) => new Array(2).fill(null))
+ );
+ const handleFractionChange = (row, column, num, denom) => {
+ copy[row][column][0] = num;
+ copy[row][column][1] = denom;
+ };
+
+ let isComplete = true;
+
+ for (var i = 0; i < dim1; i++) {
+ for (var j = 0; j < dim2; j++) {
+ if (mat2[i][j] === null) {
+ isComplete = false;
+ break;
+ }
+
+ var n = mat2[i][j].split(".");
+ var denominator = n.length == 1 ? 1 : Math.pow(10, n[1].length);
+ var numerator =
+ n.length == 1 ? parseInt(n[0]) : parseInt(n[0] + n[1]);
+ if (numerator == 0) {
+ denominator = 1;
+ numerator = 0;
+ } else {
+ if (numerator < 0) {
+ var HCF = hcf(denominator, numerator * -1);
+ denominator /= HCF;
+ numerator /= HCF;
+ } else {
+ var HCF = hcf(denominator, numerator);
+ denominator /= HCF;
+ numerator /= HCF;
+ }
+ }
+
+ handleFractionChange(i, j, numerator, denominator);
+ }
+ }
+
+ if (!isComplete) {
+ setShowError(true);
+ } else {
+ setFracMat2(copy);
+ setSecMat(true);
+ setShowModal2(false);
+ }
+ };
+
+ //initialises matrix 1 with specified dimensions
+ const setMatrix1 = () => {
+ if (r1 == null || r1 == 0 || c1 == null || c1 == 0) {
+ setShowError(true);
+ return;
+ }
+
+ let dim1 = parseInt(r1);
+ let dim2 = parseInt(c1);
+ // console.log(dim1, dim2);
+ let board = Array(dim1)
+ .fill(0)
+ .map((row) => new Array(dim2).fill(null));
+ setMat1(board);
+ // let fracBoard = Array(dim1)
+ // .fill(0)
+ // .map((row) =>
+ // new Array(dim2).fill(0).map((r) => new Array(2).fill(null))
+ // );
+ // setFracMat1(fracBoard);
+
+ setShowModal1(true);
+ };
+
+ //initialises matrix 2 with specified dimensions
+ const setMatrix2 = () => {
+ if (r2 == null || r2 == 0 || c2 == null || c2 == 0) {
+ setShowError(true);
+ return;
+ }
+
+ let dim1 = parseInt(r2);
+ let dim2 = parseInt(c2);
+ // console.log(dim1, dim2);
+ let board = Array(dim1)
+ .fill(0)
+ .map((row) => new Array(dim2).fill(null));
+ setMat2(board);
+ setShowModal2(true);
+ };
+
+ //creates modal for setting matrix 1
+ const makeTable1 = () => {
+ const handleChange = (row, column, event) => {
+ let copy = [...mat1];
+ copy[row][column] = event.target.value;
+ setMat1(copy);
+ };
+
+ return (
+ <>
+
+
+
+
+ {mat1.map((field, i) => (
+
+ {mat1[0].map((col, j) => (
+
+ {
+ handleChange(i, j, e);
+ }}
+ type="number"
+ placeholder={"Enter value"}
+ value={mat1[i][j] === null ? "" : mat1[i][j]}
+ />
+
+
+ ))}
+
+ ))}
+
+
+
+
+
+
+
+
+ Set
+
+
+ {
+ setShowModal1(false);
+ }}
+ type="reset"
+ >
+ Close
+
+
+
+
+ >
+ );
+ };
+
+ //creates modal for setting matrix 1
+ const makeTable2 = () => {
+ const handleChange = (row, column, event) => {
+ let copy = [...mat2];
+ copy[row][column] = event.target.value;
+ setMat2(copy);
+ };
+
+ return (
+ <>
+
+
+
+
+ {mat2.map((field, i) => (
+
+ {mat2[0].map((col, j) => (
+
+ {
+ handleChange(i, j, e);
+ }}
+ type="number"
+ placeholder={"Enter value"}
+ value={mat2[i][j] === null ? "" : mat2[i][j]}
+ />
+
+
+ ))}
+
+ ))}
+
+
+
+
+
+
+
+
+ Set
+
+
+ {
+ setShowModal2(false);
+ }}
+ type="reset"
+ >
+ Close
+
+
+
+
+ >
+ );
+ };
+
+ //main function responsible for carrying out matrix multiplication
+ const calculateResult = () => {
+ if (!firstMatSet || !secMatSet) {
+ setShowError(true);
+ return;
+ }
+
+ let row1 = fracMat1.length;
+ let col1 = fracMat1[0].length;
+
+ let row2 = fracMat2.length;
+ let col2 = fracMat2[0].length;
+
+ let ans = [];
+ let res = Array(row1)
+ .fill(0)
+ .map((row) => new Array(col2).fill(0).map((r) => new Array(2).fill(0)));
+
+ for (let i = 0; i < row1; i++) {
+ for (let j = 0; j < col2; j++) {
+ res[i][j][0] = 0;
+ res[i][j][1] = 1;
+ }
+ }
+
+ if (col1 != row2) {
+ setResult(null);
+ ans.push(
+
+ Columns of first matrix is not equal to rows of second matrix, hence
+ matrices can't be multiplied
+
+ );
+ setAnswer(ans);
+ return;
+ }
+
+ //function carries out addition of two fractions
+ const addition = (num1, den1, num2, den2) => {
+ var HCF = hcf(den1, den2);
+ var lcm = (den1 * den2) / HCF;
+
+ num1 *= lcm / den1;
+ num2 *= lcm / den2;
+
+ let newNum = num1 + num2;
+ let newDen = lcm;
+
+ if (newNum == 0) {
+ newDen = 1;
+ }
+
+ return [newNum, newDen];
+ };
+
+ ans.push(
+
+ We will have matrix of dimensions {row1} x {col2}
+
+ );
+
+ //mai for loop responisble for multiplication
+ for (let i = 0; i < row1; i++) {
+ for (let j = 0; j < col2; j++) {
+ let num = 0;
+ let den = 1;
+ let str =
+ "c" + (i + 1).toString() + (j + 1).toString() + " = ";
+
+ for (let a = 0; a < col1; a++) {
+ if (a != 0) {
+ str += " + ";
+ }
+
+ if (fracMat1[i][a][1] == "1") {
+ str += fracMat1[i][a][0];
+ } else {
+ str +=
+ "" +
+ fracMat1[i][a][0] +
+ " ⁄" +
+ fracMat1[i][a][1] +
+ " ";
+ }
+
+ str += " x ";
+
+ if (fracMat2[a][j][1] == "1") {
+ str += fracMat2[a][j][0];
+ } else {
+ str +=
+ "" +
+ fracMat2[a][j][0] +
+ " ⁄" +
+ fracMat2[a][j][1] +
+ " ";
+ }
+ let temp = addition(
+ num,
+ den,
+ fracMat1[i][a][0] * fracMat2[a][j][0],
+ fracMat1[i][a][1] * fracMat2[a][j][1]
+ );
+ num = temp[0];
+ den = temp[1];
+ console.log(num, den);
+ }
+
+ if (num == 0) {
+ num = 0;
+ den = 1;
+ } else if (num < 0) {
+ let HCF = hcf(den, num * -1);
+ den /= HCF;
+ num /= HCF;
+ } else {
+ let HCF = hcf(den, num);
+ den /= HCF;
+ num /= HCF;
+ }
+
+ str += " = ";
+
+ if (den == 1) {
+ str += num;
+ } else {
+ str += "" + num + " ⁄" + den + " ";
+ }
+
+ res[i][j][0] = num;
+ res[i][j][1] = den;
+
+ ans.push( );
+ ans.push( );
+ ans.push(createTable(res, i, j));
+ ans.push( );
+ }
+ }
+
+ //storing final result
+ const displayFinal = () => {
+ return (
+
+
Multiplication :
+ {createTable(res)}
+
+ );
+ };
+ setResult(displayFinal);
+ setAnswer(ans);
+ return;
+ };
+
+ //main UI component
+ return (
+
+
+
+ Please Enter all values to get Proper answer
+
+
+ setShowError(false)}
+ class="btn btn-primary btn-sm"
+ >
+ Close
+
+
+
+
{
+ setShowModal1(false);
+ }}
+ backdrop="static"
+ >
+
+
+ Set Matrix
+
+
+ {showModal1 && makeTable1()}
+
+
{
+ setShowModal1(false);
+ }}
+ backdrop="static"
+ >
+
+
+ Set Matrix
+
+
+ {showModal2 && makeTable2()}
+
+
+
+
+ {" "}
+ Enter dimensions of two matrices, and then set the matrices to
+ calculate their multiplication.
+
+
+
+
+
+ Enter number of rows for the first matrix
+ {
+ if (e.target.value == "" || e.target.value == "0") {
+ setr1(null);
+ } else {
+ var isNumber = true;
+ for (var ch in e.target.value) {
+ if (e.target.value[ch] < "0" || e.target.value[ch] > "9") {
+ isNumber = false;
+ break;
+ }
+ }
+ if (isNumber) {
+ setr1(e.target.value);
+ }
+ }
+ }}
+ placeholder={"Enter dimension"}
+ min="0"
+ value={r1 === null ? "" : r1}
+ />
+
+
+
+ Enter number of columns for the first matrix
+
+ {
+ if (e.target.value == "" || e.target.value == "0") {
+ setc1(null);
+ } else {
+ var isNumber = true;
+ for (var ch in e.target.value) {
+ if (e.target.value[ch] < "0" || e.target.value[ch] > "9") {
+ isNumber = false;
+ break;
+ }
+ }
+ if (isNumber) {
+ setc1(e.target.value);
+ }
+ }
+ }}
+ placeholder={"Enter dimension"}
+ min="0"
+ value={c1 === null ? "" : c1}
+ />
+
+
+
+ Set Matrix 1
+
+
+
+ {firstMatSet &&
{createTable(fracMat1, -1, -1)} }
+
+
+ Enter number of rows for the second matrix
+ {
+ if (e.target.value == "" || e.target.value == "0") {
+ setr2(null);
+ } else {
+ var isNumber = true;
+ for (var ch in e.target.value) {
+ if (e.target.value[ch] < "0" || e.target.value[ch] > "9") {
+ isNumber = false;
+ break;
+ }
+ }
+ if (isNumber) {
+ setr2(e.target.value);
+ }
+ }
+ }}
+ placeholder={"Enter dimension"}
+ min="0"
+ value={r2 === null ? "" : r2}
+ />
+
+
+
+ Enter number of columns for the second matrix
+
+ {
+ if (e.target.value == "" || e.target.value == "0") {
+ setc2(null);
+ } else {
+ var isNumber = true;
+ for (var ch in e.target.value) {
+ if (e.target.value[ch] < "0" || e.target.value[ch] > "9") {
+ isNumber = false;
+ break;
+ }
+ }
+ if (isNumber) {
+ setc2(e.target.value);
+ }
+ }
+ }}
+ placeholder={"Enter dimension"}
+ min="0"
+ value={c2 === null ? "" : c2}
+ />
+
+
+
+
+ Set Matrix 2
+
+
+
+ {secMatSet &&
{createTable(fracMat2, -1, -1)} }
+
+
+
+ Calculate Result
+
+
+ reset()} type="reset">
+ Reset
+
+
+
+ {answer != null ? (
+ <>
+
+
+
Solution
+ {result && (
+ <>
+ {result}
+
+ {" "}
+ >
+ )}
+
+ {answer}
+ >
+ ) : (
+ <>>
+ )}
+
+
+ );
+ };
+
+ //adding the calculators togather
+ function calC(key) {
+ let currentCall;
+ switch (key) {
+ case "Determinants":
+ currentCall = determinantCalculator();
+ break;
+ case "Inverse of a Matrix":
+ currentCall = inverseCalculator();
+ break;
+ case "Matrix Multiplication":
+ currentCall = matrixMultiplicationCalculator();
break;
default:
break;
diff --git a/funwithphysics/src/Components/Matrices/matrix.js b/funwithphysics/src/Components/Matrices/matrix.js
index e9cfcae5f..ebc785192 100644
--- a/funwithphysics/src/Components/Matrices/matrix.js
+++ b/funwithphysics/src/Components/Matrices/matrix.js
@@ -17,6 +17,11 @@ export default function Matrices() {
details:
"The inverse of a matrix is another matrix which on multiplication with the given matrix gives the multiplicative identity. . The matrix whose determinant is non-zero and for which the inverse matrix can be calculated is called an invertible matrix.",
},
+ {
+ topic: "Matrix Multiplication",
+ details:
+ "Matrix multiplication is a type of binary operation, which takes two matrices and produces a single matrix. Product of two matrices is the dot product of the two matrices",
+ },
];
return (
diff --git a/funwithphysics/src/Components/PeriodicTable/periodicTable.css b/funwithphysics/src/Components/PeriodicTable/periodicTable.css
index 3c01446e8..c791bcf89 100644
--- a/funwithphysics/src/Components/PeriodicTable/periodicTable.css
+++ b/funwithphysics/src/Components/PeriodicTable/periodicTable.css
@@ -179,15 +179,16 @@
max-width: 90vw;
}
-table,
-th,
-td {
+
+.properties-table,
+.properties-table th,
+.properties-table td {
border: 1px solid;
text-align: center;
}
-table {
+.properties-table {
margin: auto;
margin-top: 3vh;
width: 90vw;
diff --git a/funwithphysics/src/Components/PeriodicTable/properties.js b/funwithphysics/src/Components/PeriodicTable/properties.js
index 925c9cddb..4029a6e24 100644
--- a/funwithphysics/src/Components/PeriodicTable/properties.js
+++ b/funwithphysics/src/Components/PeriodicTable/properties.js
@@ -27,7 +27,7 @@ function Properties() {
{element.summary}
-
+
{element.appearance && (
diff --git a/funwithphysics/yarn.lock b/funwithphysics/yarn.lock
index 6a650189f..dd6866524 100644
--- a/funwithphysics/yarn.lock
+++ b/funwithphysics/yarn.lock
@@ -28,7 +28,7 @@
"resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz"
"version" "7.17.0"
-"@babel/core@^7.1.6", "@babel/core@^7.4.5":
+"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0", "@babel/core@^7.4.5":
"integrity" "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA=="
"resolved" "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz"
"version" "7.17.5"
@@ -1337,7 +1337,7 @@
"@firebase/util" "1.4.3"
"tslib" "^2.1.0"
-"@firebase/app-compat@0.1.18":
+"@firebase/app-compat@0.1.18", "@firebase/app-compat@0.x":
"integrity" "sha512-YXmMLQro2g2xlNnzB6zVxYoFx9sJS/JDEQy6vsj3FpMUuARaImipL6W8KuGfH+tJ3M+q38qRaFROk5gK6PoCrQ=="
"resolved" "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.18.tgz"
"version" "0.1.18"
@@ -1348,12 +1348,12 @@
"@firebase/util" "1.4.3"
"tslib" "^2.1.0"
-"@firebase/app-types@0.7.0":
+"@firebase/app-types@0.7.0", "@firebase/app-types@0.x":
"integrity" "sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg=="
"resolved" "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.7.0.tgz"
"version" "0.7.0"
-"@firebase/app@0.7.17":
+"@firebase/app@0.7.17", "@firebase/app@0.x":
"integrity" "sha512-OnZab790eMwRxkUs7o/kgniAzSBxecDTGEk1PVhiG0HQhKrIf+R7lgqOZHDb/2GJsX12jby1p/Z5+WJCBxVbJQ=="
"resolved" "https://registry.npmjs.org/@firebase/app/-/app-0.7.17.tgz"
"version" "0.7.17"
@@ -1632,7 +1632,7 @@
"node-fetch" "2.6.7"
"tslib" "^2.1.0"
-"@firebase/util@1.4.3":
+"@firebase/util@1.4.3", "@firebase/util@1.x":
"integrity" "sha512-gQJl6r0a+MElLQEyU8Dx0kkC2coPj67f/zKZrGR7z7WpLgVanhaCUqEsptwpwoxi9RMFIaebleG+C9xxoARq+Q=="
"resolved" "https://registry.npmjs.org/@firebase/util/-/util-1.4.3.tgz"
"version" "1.4.3"
@@ -1649,7 +1649,7 @@
"resolved" "https://repo.huaweicloud.com/repository/npm/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.2.tgz"
"version" "6.1.2"
-"@fortawesome/fontawesome-svg-core@^6.1.2":
+"@fortawesome/fontawesome-svg-core@^6.1.2", "@fortawesome/fontawesome-svg-core@~1 || ~6":
"integrity" "sha512-853G/Htp0BOdXnPoeCPTjFrVwyrJHpe8MhjB/DYE9XjwhnNDfuBCd3aKc2YUYbEfHEcBws4UAA0kA9dymZKGjA=="
"resolved" "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.1.2.tgz"
"version" "6.1.2"
@@ -1749,7 +1749,7 @@
"resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz"
"version" "1.1.3"
-"@popperjs/core@^2.8.6":
+"@popperjs/core@^2.11.5", "@popperjs/core@^2.8.6":
"integrity" "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw=="
"resolved" "https://repo.huaweicloud.com/repository/npm/@popperjs/core/-/core-2.11.5.tgz"
"version" "2.11.5"
@@ -2061,7 +2061,7 @@
dependencies:
"@types/react" "*"
-"@types/react@*", "@types/react@>=16.14.8", "@types/react@>=16.9.11":
+"@types/react@*", "@types/react@>=16", "@types/react@>=16.14.8", "@types/react@>=16.9.11":
"integrity" "sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg=="
"resolved" "https://registry.npmjs.org/@types/react/-/react-17.0.37.tgz"
"version" "17.0.37"
@@ -2332,12 +2332,12 @@
"resolved" "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz"
"version" "5.7.4"
-"acorn@^6.0.1":
+"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^6.0.7":
"integrity" "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ=="
"resolved" "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz"
"version" "6.4.2"
-"acorn@^6.0.7":
+"acorn@^6.0.1":
"integrity" "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ=="
"resolved" "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz"
"version" "6.4.2"
@@ -2364,7 +2364,7 @@
"resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz"
"version" "3.5.2"
-"ajv@^6.1.0", "ajv@^6.10.2", "ajv@^6.12.3", "ajv@^6.5.3":
+"ajv@^6.1.0", "ajv@^6.10.2", "ajv@^6.12.3", "ajv@^6.5.3", "ajv@^6.9.1", "ajv@>=5.0.0":
"integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="
"resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
"version" "6.12.6"
@@ -2805,6 +2805,11 @@
"trim-right" "^1.0.0"
"try-resolve" "^1.0.0"
+"babel-core@^6.0.0 || ^7.0.0-0", "babel-core@7.0.0-bridge.0":
+ "integrity" "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg=="
+ "resolved" "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz"
+ "version" "7.0.0-bridge.0"
+
"babel-core@^6.0.0":
"integrity" "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA=="
"resolved" "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz"
@@ -2855,11 +2860,6 @@
"slash" "^1.0.0"
"source-map" "^0.5.7"
-"babel-core@7.0.0-bridge.0":
- "integrity" "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg=="
- "resolved" "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz"
- "version" "7.0.0-bridge.0"
-
"babel-eslint@^4.0.5":
"integrity" "sha512-Q1TWdm7vAka50oCk45JCgWMAat1tKiVus4hIYoKHZ/K6uHBhDga2gxfYrypmXu4F30T178HVe7iZV8Ct+12Epg=="
"resolved" "https://registry.npmjs.org/babel-eslint/-/babel-eslint-4.1.8.tgz"
@@ -2870,7 +2870,7 @@
"lodash.assign" "^3.2.0"
"lodash.pick" "^3.1.0"
-"babel-eslint@9.0.0":
+"babel-eslint@9.0.0", "babel-eslint@9.x":
"integrity" "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g=="
"resolved" "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz"
"version" "9.0.0"
@@ -5301,7 +5301,7 @@
"resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
"version" "3.1.1"
-"escape-html@~1.0.3":
+"escape-html@^1.0.3", "escape-html@~1.0.3":
"integrity" "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
"resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
"version" "1.0.3"
@@ -5362,14 +5362,14 @@
"debug" "^3.2.7"
"find-up" "^2.1.0"
-"eslint-plugin-flowtype@2.50.1":
+"eslint-plugin-flowtype@2.50.1", "eslint-plugin-flowtype@2.x":
"integrity" "sha512-9kRxF9hfM/O6WGZcZPszOVPd2W0TLHBtceulLTsGfwMPtiCCLnCW0ssRiOOiXyqrCA20pm1iXdXm7gQeN306zQ=="
"resolved" "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz"
"version" "2.50.1"
dependencies:
"lodash" "^4.17.10"
-"eslint-plugin-import@2.14.0":
+"eslint-plugin-import@2.14.0", "eslint-plugin-import@2.x":
"integrity" "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g=="
"resolved" "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz"
"version" "2.14.0"
@@ -5385,7 +5385,7 @@
"read-pkg-up" "^2.0.0"
"resolve" "^1.6.0"
-"eslint-plugin-jsx-a11y@6.1.2":
+"eslint-plugin-jsx-a11y@6.1.2", "eslint-plugin-jsx-a11y@6.x":
"integrity" "sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw=="
"resolved" "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz"
"version" "6.1.2"
@@ -5399,7 +5399,7 @@
"has" "^1.0.3"
"jsx-ast-utils" "^2.0.1"
-"eslint-plugin-react@7.12.4":
+"eslint-plugin-react@7.12.4", "eslint-plugin-react@7.x":
"integrity" "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ=="
"resolved" "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz"
"version" "7.12.4"
@@ -5440,7 +5440,7 @@
"resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
"version" "1.3.0"
-"eslint@5.12.0":
+"eslint@^3 || ^4 || ^5", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0", "eslint@>=1.6.0 <6.0.0", "eslint@>=2.0.0", "eslint@2.x - 5.x", "eslint@5.12.0", "eslint@5.x":
"integrity" "sha512-LntwyPxtOHrsJdcSwyQKVtHofPHdv+4+mFwEe91r2V13vqpM8yLr7b1sW+Oo/yheOPkWYsYlYJCkzlFAt8KV7g=="
"resolved" "https://registry.npmjs.org/eslint/-/eslint-5.12.0.tgz"
"version" "5.12.0"
@@ -5998,7 +5998,7 @@
"version" "9.6.7"
dependencies:
"@firebase/analytics" "0.7.5"
- "@firebase,/analytics-compat" "0.1.6"
+ "@firebase/analytics-compat" "0.1.6"
"@firebase/app" "0.7.17"
"@firebase/app-check" "0.5.3"
"@firebase/app-check-compat" "0.2.3"
@@ -6997,6 +6997,13 @@
dependencies:
"nextafter" "^1.0.0"
+"interweave@^13.0.0":
+ "integrity" "sha512-Mckwj+ix/VtrZu1bRBIIohwrsXj12ZTvJCoYUMZlJmgtvIaQCj0i77eSZ63ckbA1TsPrz2VOvLW9/kTgm5d+mw=="
+ "resolved" "https://registry.npmjs.org/interweave/-/interweave-13.0.0.tgz"
+ "version" "13.0.0"
+ dependencies:
+ "escape-html" "^1.0.3"
+
"invariant@^2.2.2", "invariant@^2.2.4":
"integrity" "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="
"resolved" "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz"
@@ -7754,7 +7761,7 @@
"jest-regex-util" "^23.3.0"
"jest-snapshot" "^23.6.0"
-"jest-resolve@^23.6.0", "jest-resolve@23.6.0":
+"jest-resolve@*", "jest-resolve@^23.6.0", "jest-resolve@23.6.0":
"integrity" "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA=="
"resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz"
"version" "23.6.0"
@@ -10982,12 +10989,7 @@
"strip-ansi" "5.0.0"
"text-table" "0.2.0"
-"react-dom@^0.14.1":
- "integrity" "sha512-kDs8SWFb8Sry4NAplhpJbZEeAnTPir/m+s9s+lkdqA2a89BzmWGnEgGG/CfmhULjv1ogc4oHrjMfAvFNruT3jQ=="
- "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-0.14.10.tgz"
- "version" "0.14.10"
-
-"react-dom@^17.0.2":
+"react-dom@*", "react-dom@^15.0.0", "react-dom@^15.0.0-0 || ^16.0.0-0", "react-dom@^16.6.0 || ^17.0.0", "react-dom@^17.0.2", "react-dom@>= 16.8.0", "react-dom@>=16.3.0", "react-dom@>=16.6.0", "react-dom@>=16.8", "react-dom@>=16.8.0":
"integrity" "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA=="
"resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz"
"version" "17.0.2"
@@ -10996,6 +10998,11 @@
"object-assign" "^4.1.1"
"scheduler" "^0.20.2"
+"react-dom@^0.14.1":
+ "integrity" "sha512-kDs8SWFb8Sry4NAplhpJbZEeAnTPir/m+s9s+lkdqA2a89BzmWGnEgGG/CfmhULjv1ogc4oHrjMfAvFNruT3jQ=="
+ "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-0.14.10.tgz"
+ "version" "0.14.10"
+
"react-error-overlay@^5.1.4":
"integrity" "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q=="
"resolved" "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz"
@@ -11053,7 +11060,7 @@
"resolved" "https://registry.npmjs.org/react-icons/-/react-icons-4.3.1.tgz"
"version" "4.3.1"
-"react-is@^16.13.1", "react-is@^16.3.2", "react-is@^16.7.0":
+"react-is@^16.13.1", "react-is@^16.3.2", "react-is@^16.7.0", "react-is@>= 16.8.0":
"integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
"resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
"version" "16.13.1"
@@ -11113,7 +11120,7 @@
"resolved" "https://registry.npmjs.org/react-progressive-image/-/react-progressive-image-0.6.0.tgz"
"version" "0.6.0"
-"react-router-dom@^6.2.1":
+"react-router-dom@^6.2.1", "react-router-dom@>=4", "react-router-dom@>=6.0.0":
"integrity" "sha512-I6Zax+/TH/cZMDpj3/4Fl2eaNdcvoxxHoH1tYOREsQ22OKDYofGebrNm6CTPUcvLvZm63NL/vzCYdjf9CUhqmA=="
"resolved" "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.2.1.tgz"
"version" "6.2.1"
@@ -11121,7 +11128,6 @@
"history" "^5.2.0"
"react-router" "6.2.1"
-
"react-router-hash-link@^2.4.3":
"integrity" "sha512-NU7GWc265m92xh/aYD79Vr1W+zAIXDWp3L2YZOYP4rCqPnJ6LI6vh3+rKgkidtYijozHclaEQTAHaAaMWPVI4A=="
"resolved" "https://registry.npmjs.org/react-router-hash-link/-/react-router-hash-link-2.4.3.tgz"
@@ -11129,10 +11135,7 @@
dependencies:
"prop-types" "^15.7.2"
-"react-router@^6.2.1", "react-router@6.2.1":
-
"react-router@^6.2.1", "react-router@>=6.0.0", "react-router@6.2.1":
-
"integrity" "sha512-2fG0udBtxou9lXtK97eJeET2ki5//UWfQSl1rlJ7quwe6jrktK9FCCc8dQb5QY6jAv3jua8bBQRhhDOM/kVRsg=="
"resolved" "https://registry.npmjs.org/react-router/-/react-router-6.2.1.tgz"
"version" "6.2.1"
@@ -11235,7 +11238,15 @@
"loose-envify" "^1.4.0"
"prop-types" "^15.6.2"
-"react@^0.14.1":
+"react@*", "react@^15.0.0-0 || ^16.0.0-0", "react@^16.3.0 || ^17.0.0", "react@^16.6.0 || ^17.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^17.0.2", "react@>= 16.8.0", "react@>=0.14.0", "react@>=15", "react@>=15.0.0", "react@>=16", "react@>=16.3", "react@>=16.3.0", "react@>=16.3.2", "react@>=16.6.0", "react@>=16.8", "react@>=16.8.0", "react@17.0.2":
+ "integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA=="
+ "resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz"
+ "version" "17.0.2"
+ dependencies:
+ "loose-envify" "^1.1.0"
+ "object-assign" "^4.1.1"
+
+"react@^0.14.1", "react@^0.14.10":
"integrity" "sha512-yxMw5aorZG4qsLVBfjae4wGFvd5708DhcxaXLJ3IOTgr1TCs8k9+ZheGgLGr5OfwWMhSahNbGvvoEDzrxVWouA=="
"resolved" "https://registry.npmjs.org/react/-/react-0.14.10.tgz"
"version" "0.14.10"
@@ -11252,14 +11263,6 @@
"object-assign" "^4.1.1"
"prop-types" "^15.6.2"
-"react@^17.0.2":
- "integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA=="
- "resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz"
- "version" "17.0.2"
- dependencies:
- "loose-envify" "^1.1.0"
- "object-assign" "^4.1.1"
-
"read-pkg-up@^1.0.1":
"integrity" "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI="
"resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz"
@@ -11584,7 +11587,7 @@
"stealthy-require" "^1.1.1"
"tough-cookie" "^2.3.3"
-"request@^2.87.0":
+"request@^2.34", "request@^2.87.0":
"integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="
"resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz"
"version" "2.88.2"
@@ -12617,7 +12620,7 @@
dependencies:
"inline-style-parser" "0.1.1"
-"styled-components@^5.3.0":
+"styled-components@^5.3.0", "styled-components@>= 2":
"integrity" "sha512-++4iHwBM7ZN+x6DtPPWkCI4vdtwumQ+inA/DdAsqYd4SVgUKJie5vXyzotA00ttcFdQkCng7zc6grwlfIfw+lw=="
"resolved" "https://registry.npmjs.org/styled-components/-/styled-components-5.3.3.tgz"
"version" "5.3.3"
@@ -13508,7 +13511,7 @@
"source-list-map" "^2.0.0"
"source-map" "~0.6.1"
-"webpack@4.28.3":
+"webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.0.0", "webpack@^4.0.0", "webpack@^4.4.0", "webpack@>=2", "webpack@>=2.0.0 <5.0.0", "webpack@2 || 3 || 4", "webpack@4.28.3":
"integrity" "sha512-vLZN9k5I7Nr/XB1IDG9GbZB4yQd1sPuvufMFgJkx0b31fi2LD97KQIjwjxE7xytdruAYfu5S0FLBLjdxmwGJCg=="
"resolved" "https://registry.npmjs.org/webpack/-/webpack-4.28.3.tgz"
"version" "4.28.3"