+
{colors.map((c, i) => (
{c.name}
- {c.hex}
+ {c.hex}
))}
diff --git a/front-end/components/classroom/question.jsx b/front-end/components/classroom/question.jsx
new file mode 100644
index 0000000..4f2e7b2
--- /dev/null
+++ b/front-end/components/classroom/question.jsx
@@ -0,0 +1,16 @@
+import { motion } from "motion/react";
+
+const Question = ({ text }) => {
+ return (
+
+ {text}
+
+ );
+};
+
+export default Question;
diff --git a/front-end/components/classroom/response.jsx b/front-end/components/classroom/response.jsx
new file mode 100644
index 0000000..cb89737
--- /dev/null
+++ b/front-end/components/classroom/response.jsx
@@ -0,0 +1,86 @@
+import { motion } from "motion/react";
+
+const Response = ({ questionType, choices, question }) => {
+ const selectAll = questionType === "selectAll";
+ const multipleChoice = questionType === "multipleChoice";
+ const shortAnswer = questionType === "shortAnswer";
+ return (
+
+
+
+ );
+};
+
+export default Response;
diff --git a/front-end/package-lock.json b/front-end/package-lock.json
index 3d9bbd8..7b3b491 100644
--- a/front-end/package-lock.json
+++ b/front-end/package-lock.json
@@ -10,7 +10,8 @@
"dependencies": {
"@next/eslint-plugin-next": "^15.5.6",
"framer-motion": "^12.23.24",
- "next": "14.2.5",
+ "motion": "^12.23.24",
+ "next": "^14.2.33",
"react": "18.2.0",
"react-dom": "18.2.0"
},
@@ -19,6 +20,8 @@
"eslint": "8.57.1",
"eslint-config-next": "15.5.6",
"postcss": "^8.4.31",
+ "prettier": "^3.6.2",
+ "prettier-plugin-tailwindcss": "^0.7.1",
"tailwindcss": "^3.4.1"
}
},
@@ -289,9 +292,9 @@
}
},
"node_modules/@next/env": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.5.tgz",
- "integrity": "sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.33.tgz",
+ "integrity": "sha512-CgVHNZ1fRIlxkLhIX22flAZI/HmpDaZ8vwyJ/B0SDPTBuLZ1PJ+DWMjCHhqnExfmSQzA/PbZi8OAc7PAq2w9IA==",
"license": "MIT"
},
"node_modules/@next/eslint-plugin-next": {
@@ -332,9 +335,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.5.tgz",
- "integrity": "sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.33.tgz",
+ "integrity": "sha512-HqYnb6pxlsshoSTubdXKu15g3iivcbsMXg4bYpjL2iS/V6aQot+iyF4BUc2qA/J/n55YtvE4PHMKWBKGCF/+wA==",
"cpu": [
"arm64"
],
@@ -348,9 +351,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.5.tgz",
- "integrity": "sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.33.tgz",
+ "integrity": "sha512-8HGBeAE5rX3jzKvF593XTTFg3gxeU4f+UWnswa6JPhzaR6+zblO5+fjltJWIZc4aUalqTclvN2QtTC37LxvZAA==",
"cpu": [
"x64"
],
@@ -364,9 +367,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.5.tgz",
- "integrity": "sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.33.tgz",
+ "integrity": "sha512-JXMBka6lNNmqbkvcTtaX8Gu5by9547bukHQvPoLe9VRBx1gHwzf5tdt4AaezW85HAB3pikcvyqBToRTDA4DeLw==",
"cpu": [
"arm64"
],
@@ -380,9 +383,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.5.tgz",
- "integrity": "sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.33.tgz",
+ "integrity": "sha512-Bm+QulsAItD/x6Ih8wGIMfRJy4G73tu1HJsrccPW6AfqdZd0Sfm5Imhgkgq2+kly065rYMnCOxTBvmvFY1BKfg==",
"cpu": [
"arm64"
],
@@ -396,9 +399,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.5.tgz",
- "integrity": "sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.33.tgz",
+ "integrity": "sha512-FnFn+ZBgsVMbGDsTqo8zsnRzydvsGV8vfiWwUo1LD8FTmPTdV+otGSWKc4LJec0oSexFnCYVO4hX8P8qQKaSlg==",
"cpu": [
"x64"
],
@@ -412,9 +415,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.5.tgz",
- "integrity": "sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.33.tgz",
+ "integrity": "sha512-345tsIWMzoXaQndUTDv1qypDRiebFxGYx9pYkhwY4hBRaOLt8UGfiWKr9FSSHs25dFIf8ZqIFaPdy5MljdoawA==",
"cpu": [
"x64"
],
@@ -428,9 +431,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.5.tgz",
- "integrity": "sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.33.tgz",
+ "integrity": "sha512-nscpt0G6UCTkrT2ppnJnFsYbPDQwmum4GNXYTeoTIdsmMydSKFz9Iny2jpaRupTb+Wl298+Rh82WKzt9LCcqSQ==",
"cpu": [
"arm64"
],
@@ -444,9 +447,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.5.tgz",
- "integrity": "sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.33.tgz",
+ "integrity": "sha512-pc9LpGNKhJ0dXQhZ5QMmYxtARwwmWLpeocFmVG5Z0DzWq5Uf0izcI8tLc+qOpqxO1PWqZ5A7J1blrUIKrIFc7Q==",
"cpu": [
"ia32"
],
@@ -460,9 +463,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.5.tgz",
- "integrity": "sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.33.tgz",
+ "integrity": "sha512-nOjfZMy8B94MdisuzZo9/57xuFVLHJaDj5e/xrduJp9CV2/HrfxTRH2fbyLe+K9QT41WBLUd4iXX3R7jBp0EUg==",
"cpu": [
"x64"
],
@@ -4075,6 +4078,32 @@
"node": ">=16 || 14 >=14.17"
}
},
+ "node_modules/motion": {
+ "version": "12.23.24",
+ "resolved": "https://registry.npmjs.org/motion/-/motion-12.23.24.tgz",
+ "integrity": "sha512-Rc5E7oe2YZ72N//S3QXGzbnXgqNrTESv8KKxABR20q2FLch9gHLo0JLyYo2hZ238bZ9Gx6cWhj9VO0IgwbMjCw==",
+ "license": "MIT",
+ "dependencies": {
+ "framer-motion": "^12.23.24",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/motion-dom": {
"version": "12.23.23",
"resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz",
@@ -4151,12 +4180,12 @@
"license": "MIT"
},
"node_modules/next": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/next/-/next-14.2.5.tgz",
- "integrity": "sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.2.33.tgz",
+ "integrity": "sha512-GiKHLsD00t4ACm1p00VgrI0rUFAC9cRDGReKyERlM57aeEZkOQGcZTpIbsGn0b562FTPJWmYfKwplfO9EaT6ng==",
"license": "MIT",
"dependencies": {
- "@next/env": "14.2.5",
+ "@next/env": "14.2.33",
"@swc/helpers": "0.5.5",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001579",
@@ -4171,15 +4200,15 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "14.2.5",
- "@next/swc-darwin-x64": "14.2.5",
- "@next/swc-linux-arm64-gnu": "14.2.5",
- "@next/swc-linux-arm64-musl": "14.2.5",
- "@next/swc-linux-x64-gnu": "14.2.5",
- "@next/swc-linux-x64-musl": "14.2.5",
- "@next/swc-win32-arm64-msvc": "14.2.5",
- "@next/swc-win32-ia32-msvc": "14.2.5",
- "@next/swc-win32-x64-msvc": "14.2.5"
+ "@next/swc-darwin-arm64": "14.2.33",
+ "@next/swc-darwin-x64": "14.2.33",
+ "@next/swc-linux-arm64-gnu": "14.2.33",
+ "@next/swc-linux-arm64-musl": "14.2.33",
+ "@next/swc-linux-x64-gnu": "14.2.33",
+ "@next/swc-linux-x64-musl": "14.2.33",
+ "@next/swc-win32-arm64-msvc": "14.2.33",
+ "@next/swc-win32-ia32-msvc": "14.2.33",
+ "@next/swc-win32-x64-msvc": "14.2.33"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
@@ -4761,6 +4790,101 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/prettier": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
+ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-plugin-tailwindcss": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.7.1.tgz",
+ "integrity": "sha512-Bzv1LZcuiR1Sk02iJTS1QzlFNp/o5l2p3xkopwOrbPmtMeh3fK9rVW5M3neBQzHq+kGKj/4LGQMTNcTH4NGPtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.19"
+ },
+ "peerDependencies": {
+ "@ianvs/prettier-plugin-sort-imports": "*",
+ "@prettier/plugin-hermes": "*",
+ "@prettier/plugin-oxc": "*",
+ "@prettier/plugin-pug": "*",
+ "@shopify/prettier-plugin-liquid": "*",
+ "@trivago/prettier-plugin-sort-imports": "*",
+ "@zackad/prettier-plugin-twig": "*",
+ "prettier": "^3.0",
+ "prettier-plugin-astro": "*",
+ "prettier-plugin-css-order": "*",
+ "prettier-plugin-jsdoc": "*",
+ "prettier-plugin-marko": "*",
+ "prettier-plugin-multiline-arrays": "*",
+ "prettier-plugin-organize-attributes": "*",
+ "prettier-plugin-organize-imports": "*",
+ "prettier-plugin-sort-imports": "*",
+ "prettier-plugin-svelte": "*"
+ },
+ "peerDependenciesMeta": {
+ "@ianvs/prettier-plugin-sort-imports": {
+ "optional": true
+ },
+ "@prettier/plugin-hermes": {
+ "optional": true
+ },
+ "@prettier/plugin-oxc": {
+ "optional": true
+ },
+ "@prettier/plugin-pug": {
+ "optional": true
+ },
+ "@shopify/prettier-plugin-liquid": {
+ "optional": true
+ },
+ "@trivago/prettier-plugin-sort-imports": {
+ "optional": true
+ },
+ "@zackad/prettier-plugin-twig": {
+ "optional": true
+ },
+ "prettier-plugin-astro": {
+ "optional": true
+ },
+ "prettier-plugin-css-order": {
+ "optional": true
+ },
+ "prettier-plugin-jsdoc": {
+ "optional": true
+ },
+ "prettier-plugin-marko": {
+ "optional": true
+ },
+ "prettier-plugin-multiline-arrays": {
+ "optional": true
+ },
+ "prettier-plugin-organize-attributes": {
+ "optional": true
+ },
+ "prettier-plugin-organize-imports": {
+ "optional": true
+ },
+ "prettier-plugin-sort-imports": {
+ "optional": true
+ },
+ "prettier-plugin-svelte": {
+ "optional": true
+ }
+ }
+ },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
diff --git a/front-end/package.json b/front-end/package.json
index 7d88dfe..e92c6b5 100644
--- a/front-end/package.json
+++ b/front-end/package.json
@@ -11,7 +11,8 @@
"dependencies": {
"@next/eslint-plugin-next": "^15.5.6",
"framer-motion": "^12.23.24",
- "next": "14.2.5",
+ "motion": "^12.23.24",
+ "next": "^14.2.33",
"react": "18.2.0",
"react-dom": "18.2.0"
},
@@ -20,6 +21,8 @@
"eslint": "8.57.1",
"eslint-config-next": "15.5.6",
"postcss": "^8.4.31",
+ "prettier": "^3.6.2",
+ "prettier-plugin-tailwindcss": "^0.7.1",
"tailwindcss": "^3.4.1"
}
}
diff --git a/front-end/pages/_app.js b/front-end/pages/_app.js
index 462be55..ea31500 100644
--- a/front-end/pages/_app.js
+++ b/front-end/pages/_app.js
@@ -3,11 +3,12 @@ import "@/styles/SplitBackground.css";
import "@/styles/button.css";
import "@/styles/book.css";
import "@/styles/bookmark.css";
+import "@/styles/classroom.css";
export default function App({ Component, pageProps }) {
return (
<>
-
+
>
diff --git a/front-end/pages/book.js b/front-end/pages/book.js
index a04173f..e6fb884 100644
--- a/front-end/pages/book.js
+++ b/front-end/pages/book.js
@@ -1,5 +1,5 @@
-import next from 'next';
-import { useEffect, useState } from 'react';
+import next from "next";
+import { useEffect, useState } from "react";
export default function BookPage() {
const [bookFullscreen, setBookFullscreen] = useState(false);
@@ -8,9 +8,9 @@ export default function BookPage() {
const [isTurning, setIsTurning] = useState(false);
const bookmarks = [
- { y: '20%', label: 'Page 1', page: 10, opposite: 11 },
- { y: '40%', label: 'Page 2', page: 9, opposite: 12 },
- { y: '60%', label: 'Page 3', page: 8, opposite: 13 },
+ { y: "20%", label: "Page 1", page: 10, opposite: 11 },
+ { y: "40%", label: "Page 2", page: 9, opposite: 12 },
+ { y: "60%", label: "Page 3", page: 8, opposite: 13 },
];
useEffect(() => {
@@ -29,8 +29,8 @@ export default function BookPage() {
setIsTurning(true);
const nextIndex = page;
- console.log('Next Page is :', nextIndex);
- if (nextIndex < currentPage){
+ console.log("Next Page is :", nextIndex);
+ if (nextIndex < currentPage) {
for (let i = currentPage; i > nextIndex; i--) {
// Determine which page(s) to turn
const turnPageEl = document.querySelector(`.page-${i}`);
@@ -39,22 +39,21 @@ export default function BookPage() {
// Turn current page right to left
const delay = (currentPage - i) * 300;
setTimeout(() => {
- turnPageEl.classList.remove('back-turn', 'back-fade');
- turnPageEl.classList.add('turn', 'fade');
+ turnPageEl.classList.remove("back-turn", "back-fade");
+ turnPageEl.classList.add("turn", "fade");
}, delay);
}
- }
- else {
- console.log('Backflipping to:', nextIndex);
- for (let i = currentPage+1; i <= nextIndex; i++) {
+ } else {
+ console.log("Backflipping to:", nextIndex);
+ for (let i = currentPage + 1; i <= nextIndex; i++) {
// Determine which page(s) to turn
const turnPageEl = document.querySelector(`.page-${i}`);
if (!turnPageEl) return;
// Turn current page left to right
const delay = (i - currentPage) * 300;
setTimeout(() => {
- turnPageEl.classList.remove('turn', 'fade');
- turnPageEl.classList.add('back-turn', 'back-fade');
+ turnPageEl.classList.remove("turn", "fade");
+ turnPageEl.classList.add("back-turn", "back-fade");
}, delay);
}
}
@@ -64,127 +63,184 @@ export default function BookPage() {
if (!oppositePageEl) return;
if (i === opposite) {
- oppositePageEl.classList.remove('invisible');
- oppositePageEl.classList.add('visible');
+ oppositePageEl.classList.remove("invisible");
+ oppositePageEl.classList.add("visible");
continue;
}
- oppositePageEl.classList.remove('visible');
- oppositePageEl.classList.add('invisible');
-
+ oppositePageEl.classList.remove("visible");
+ oppositePageEl.classList.add("invisible");
}
// Wait for animation to complete
setTimeout(() => {
setCurrentPage(nextIndex);
- console.log('Current page is now:', currentPage);
+ console.log("Current page is now:", currentPage);
setIsTurning(false);
}, 1000); // match your CSS animation duration
};
const handleBookmarkClick = (e, flip, opposite) => {
- const el = e.currentTarget;
- // Play click animation
- el.classList.add('clicked');
- setTimeout(() => el.classList.remove('clicked'), 400);
- // Trigger turnPage function
- turnPage(flip, opposite); // Testing turning to page 2
-};
+ const el = e.currentTarget;
+ // Play click animation
+ el.classList.add("clicked");
+ setTimeout(() => el.classList.remove("clicked"), 400);
+ // Trigger turnPage function
+ turnPage(flip, opposite); // Testing turning to page 2
+ };
return (
-
+
:3
:3:3:3
-
:3:3:3:3
- :3:3:3:3:3:3:3
-
-
:3:3:3:3:3:3:3
- :3:3:3:3:3:3:3
- :3:3:3:3:3:3:3
+ :3:3:3:3 :3:3:3:3:3:3:3
+
+ :3:3:3:3:3:3:3 :3:3:3:3:3:3:3 :3:3:3:3:3:3:3
:3
Page 5
Page 4
- Page 3
+
+ Page 3
{bookmarks
- .filter(b => b.page === 8)
- .map((b, i) => (
- handleBookmarkClick(e, b.page, b.opposite)}
- className={`bookmark-container bookmark ${
- bookFullscreen ? 'opacity-100' : 'opacity-0 pointer-events-none'
- }`}
- style={{
- top: b.y,
- }}
- >
-
-
- ))}
+ .filter((b) => b.page === 8)
+ .map((b, i) => (
+ handleBookmarkClick(e, b.page, b.opposite)}
+ className={`bookmark-container bookmark ${
+ bookFullscreen
+ ? "opacity-100"
+ : "pointer-events-none opacity-0"
+ }`}
+ style={{
+ top: b.y,
+ }}
+ >
+
+
+ ))}
Page 2
{bookmarks
- .filter(b => b.page === 9)
- .map((b, i) => (
- handleBookmarkClick(e, b.page, b.opposite)}
- className={`bookmark-container bookmark ${
- bookFullscreen ? 'opacity-100' : 'opacity-0 pointer-events-none'
- }`}
- style={{
- top: b.y,
- }}
- >
-
-
- ))}
+ .filter((b) => b.page === 9)
+ .map((b, i) => (
+ handleBookmarkClick(e, b.page, b.opposite)}
+ className={`bookmark-container bookmark ${
+ bookFullscreen
+ ? "opacity-100"
+ : "pointer-events-none opacity-0"
+ }`}
+ style={{
+ top: b.y,
+ }}
+ >
+
+
+ ))}
-
- Placeholder Text
-
+ Placeholder Text
{bookmarks
- .filter(b => b.page === 10)
- .map((b, i) => (
- handleBookmarkClick(e, b.page, b.opposite)}
- className={`bookmark-container bookmark ${
- bookFullscreen ? 'opacity-100' : 'opacity-0 pointer-events-none'
- }`}
- style={{
- top: b.y,
- }}
- >
-
-
- ))}
+ .filter((b) => b.page === 10)
+ .map((b, i) => (
+ handleBookmarkClick(e, b.page, b.opposite)}
+ className={`bookmark-container bookmark ${
+ bookFullscreen
+ ? "opacity-100"
+ : "pointer-events-none opacity-0"
+ }`}
+ style={{
+ top: b.y,
+ }}
+ >
+
+
+ ))}
Placeholder Text
@@ -195,10 +251,9 @@ export default function BookPage() {
Whoas
-
+
Hello
-
);
}
diff --git a/front-end/pages/classroom.jsx b/front-end/pages/classroom.jsx
new file mode 100644
index 0000000..937d31a
--- /dev/null
+++ b/front-end/pages/classroom.jsx
@@ -0,0 +1,43 @@
+import classroombackground from "@/public/images/classroom-background.png";
+import Image from "next/image";
+import Question from "@/components/classroom/question";
+import yuumiPlaceholder from "@/public/images/Yuumi_BattlePrincipalSkin.webp";
+import Response from "@/components/classroom/response";
+import { motion } from "motion/react";
+
+const Classroom = () => {
+ return (
+
+ );
+};
+
+export default Classroom;
diff --git a/front-end/pages/index.js b/front-end/pages/index.js
index 57bbdb1..70443a8 100644
--- a/front-end/pages/index.js
+++ b/front-end/pages/index.js
@@ -1,32 +1,32 @@
-import React, { useState } from 'react';
+import React, { useState } from "react";
import Link from "next/link";
export default function Home() {
- const [inputValue, setInputValue] = useState('');
+ const [inputValue, setInputValue] = useState("");
const handleChange = (event) => {
setInputValue(event.target.value);
};
return (
-
+
{/* Top and bottom background layers */}
{/* Content */}
-
-
Welcome!
+
+
Welcome!
-