toggleModule("reading")}
className={clsx(
"flex flex-col gap-2 items-center justify-center",
- "border-ielts-reading hover:bg-ielts-reading",
+ "border-ielts-reading hover:bg-ielts-reading text-white",
"border-2 rounded-xl p-4 h-fit w-48 cursor-pointer",
selectedModules.includes("reading") ? "bg-ielts-reading " : "bg-ielts-reading-transparent ",
)}>
@@ -71,7 +57,7 @@ export default function Home() {
onClick={() => toggleModule("listening")}
className={clsx(
"flex flex-col gap-2 items-center justify-center",
- "border-ielts-listening hover:bg-ielts-listening",
+ "border-ielts-listening hover:bg-ielts-listening text-white",
"border-2 rounded-xl p-4 h-fit w-48 cursor-pointer",
selectedModules.includes("listening") ? "bg-ielts-listening " : "bg-ielts-listening-transparent ",
)}>
@@ -84,7 +70,7 @@ export default function Home() {
onClick={() => toggleModule("speaking")}
className={clsx(
"flex flex-col gap-2 items-center justify-center",
- "border-ielts-speaking hover:bg-ielts-speaking",
+ "border-ielts-speaking hover:bg-ielts-speaking text-white",
"border-2 rounded-xl p-4 h-fit w-48 cursor-pointer",
selectedModules.includes("speaking") ? "bg-ielts-speaking " : "bg-ielts-speaking-transparent ",
)}>
@@ -97,7 +83,7 @@ export default function Home() {
onClick={() => toggleModule("writing")}
className={clsx(
"flex flex-col gap-2 items-center justify-center",
- "border-ielts-writing hover:bg-ielts-writing",
+ "border-ielts-writing hover:bg-ielts-writing text-white",
"border-2 rounded-xl p-4 h-fit w-48 cursor-pointer",
selectedModules.includes("writing") ? "bg-ielts-writing " : "bg-ielts-writing-transparent ",
)}>
diff --git a/src/resources/level.ts b/src/resources/level.ts
new file mode 100644
index 00000000..805a7496
--- /dev/null
+++ b/src/resources/level.ts
@@ -0,0 +1,20 @@
+import JSON_LABELS from "@/constants/levelLabel.json";
+
+const LABELS = JSON_LABELS as {[key: string]: string};
+
+export const levelCalculator = (experience: number) => {
+ const sqrt = Math.sqrt(experience);
+ const labelLevel =
+ Object.keys(LABELS)
+ .reverse()
+ .filter((x) => parseInt(x) <= Math.floor(sqrt))
+ .shift() || Object.keys(LABELS).reverse().shift()!;
+
+ return {
+ currentLevel: Math.floor(sqrt),
+ nextLevel: Math.ceil(sqrt),
+ percentage: Math.floor((sqrt - Math.floor(sqrt)) * 100),
+ nextLevelExperience: Math.pow(Math.ceil(sqrt), 2),
+ label: LABELS[labelLevel],
+ };
+};