diff --git a/frontend-next-migration/public/images/characters/Cartoon_character_ope.png b/frontend-next-migration/public/images/characters/Cartoon_character_ope.png
new file mode 100644
index 000000000..e67481c2a
Binary files /dev/null and b/frontend-next-migration/public/images/characters/Cartoon_character_ope.png differ
diff --git a/frontend-next-migration/public/images/logos/CommonALT.png b/frontend-next-migration/public/images/logos/CommonALT.png
new file mode 100644
index 000000000..c80c0e7b2
Binary files /dev/null and b/frontend-next-migration/public/images/logos/CommonALT.png differ
diff --git a/frontend-next-migration/src/features/TeacherSignIn/index.ts b/frontend-next-migration/src/features/TeacherSignIn/index.ts
new file mode 100644
index 000000000..5b8a90895
--- /dev/null
+++ b/frontend-next-migration/src/features/TeacherSignIn/index.ts
@@ -0,0 +1 @@
+export { TeacherSignInCard } from './ui';
diff --git a/frontend-next-migration/src/features/TeacherSignIn/ui/TeacherSignInCard/TeacherSignInCard.module.scss b/frontend-next-migration/src/features/TeacherSignIn/ui/TeacherSignInCard/TeacherSignInCard.module.scss
new file mode 100644
index 000000000..c1f10a7ed
--- /dev/null
+++ b/frontend-next-migration/src/features/TeacherSignIn/ui/TeacherSignInCard/TeacherSignInCard.module.scss
@@ -0,0 +1,306 @@
+.PageLayout {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ min-height: 100vh;
+ width: 1920;
+ height: 1656;
+}
+
+.Container {
+ --teacher-login-card-width: 760px;
+ --teacher-login-card-height: 532.58px;
+
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 950px;
+ height: 634px;
+ max-width: 100%;
+ margin: 0 auto;
+ overflow: visible;
+ box-sizing: border-box;
+}
+
+.AltLogo {
+ position: absolute;
+ top: -7px;
+ left: 30px;
+ z-index: 20;
+ width: 193px;
+ height: 161px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ img {
+ width: 100%;
+ height: 100%;
+ object-fit: contain;
+ }
+
+ @media (max-width: $breakpoint-md) {
+ top: 100px;
+ left: 3px;
+ width: 150px;
+ height: 125px;
+ }
+
+ @media (max-width: $breakpoint-sm) {
+ top: 95px;
+ left: 5px;
+ width: 120px;
+ height: 100px;
+ }
+}
+
+// Main card container
+.Card {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ background: #2b353a;
+ border: 7px solid var(--primary-color);
+ border-radius: var(--border-radius-md);
+ padding: 10px;
+ gap: 10px;
+ width: var(--teacher-login-card-width);
+ height: var(--teacher-login-card-height);
+ max-width: 100%;
+ box-sizing: border-box;
+ box-shadow: 0px 4px 4px 0px #000000c4;
+
+ @media (max-width: $breakpoint-md) {
+ max-width: 90%;
+ height: auto;
+ }
+
+ @media (max-width: $breakpoint-sm) {
+ max-width: 90%;
+ height: auto;
+ }
+}
+
+.Title {
+ width: 644;
+ height: 63;
+ top: 495px;
+ left: 685px;
+
+ text-align: center;
+ color: var(--primary-color);
+ margin: 0 0 30px 0;
+ letter-spacing: 1%;
+ font: var(--font-sw-xxxl);
+ text-transform: none;
+
+ @media (max-width: $breakpoint-md) {
+ font: var(--font-sw-xl);
+ margin-bottom: 30px;
+ letter-spacing: 0.5px;
+ }
+
+ @media (max-width: $breakpoint-sm) {
+ font: var(--font-sw-m);
+ margin-bottom: 5px;
+ }
+}
+
+.Form {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ align-self: center;
+ gap: 20px;
+
+ width: 438.51px;
+ max-width: calc(100% - 40px);
+
+ @media (max-width: $breakpoint-sm) {
+ gap: 15px;
+ }
+}
+
+.FormGroup {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: 100%;
+}
+
+.UsernameInputWrapper,
+.PasswordInputWrapper {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+}
+
+.UsernameInput {
+ width: 438.51px;
+ max-width: 100%;
+ height: 54.54px;
+ padding: var(--spacing-250) var(--spacing-400) var(--spacing-250) var(--spacing-400);
+ gap: var(--spacing-400);
+ font: var(--font-dm-l);
+ background: var(--background);
+ border: 1.96px solid var(--Border-blackBorder, #121212);
+ border-radius: var(--border-radius-xl);
+ color: var(--primary-color);
+ transition: all 0.3s ease;
+ box-sizing: border-box;
+
+ &::placeholder {
+ color: var(--primary-color);
+ }
+
+ &:focus {
+ outline: none;
+ border-color: var(--black);
+ background: var(--background);
+ }
+
+ @media (max-width: $breakpoint-sm) {
+ padding: 12px 14px;
+ font: var(--font-dm-m);
+ }
+}
+
+.PasswordInput {
+ width: 438.51px;
+ max-width: 100%;
+ height: 54.54px;
+ padding: var(--spacing-250) var(--spacing-400) var(--spacing-250) var(--spacing-400);
+ gap: var(--spacing-400);
+ font: var(--font-dm-l);
+ background: var(--background);
+ border: 1.96px solid var(--Border-blackBorder, #121212);
+ border-radius: var(--border-radius-xl);
+ color: var(--primary-color);
+ transition: all 0.3s ease;
+ box-sizing: border-box;
+
+ &::placeholder {
+ color: var(--primary-color);
+ }
+
+ &:focus {
+ outline: none;
+ border-color: var(--black);
+ background: var(--background);
+ }
+
+ @media (max-width: $breakpoint-sm) {
+ padding: 12px 14px;
+ padding-right: 46px;
+ font: var(--font-dm-m);
+ }
+}
+
+.UsernameToggle,
+.PasswordToggle {
+ gap: 9.81px;
+ position: absolute;
+ right: 14px;
+ top: 50%;
+ transform: translateY(-50%);
+ background: none;
+ border: none;
+ color: var(--primary-color);
+ cursor: pointer;
+ padding: 6px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: color 0.3s ease;
+
+ &:hover {
+ color: var(--primary-color);
+ }
+
+ &:focus {
+ outline: none;
+ color: var(--primary-color);
+ }
+
+ svg {
+ width: 19.62px;
+ height: 16.68px;
+ }
+
+ @media (max-width: $breakpoint-sm) {
+ padding: 5px;
+
+ svg {
+ width: 18px;
+ height: 16px;
+ }
+ }
+}
+
+.SubmitButton {
+ width: 180.01px;
+ height: 58px;
+
+ padding: 11.77px 23.54px 11.77px 23.54px;
+ gap: 9.81px;
+
+ margin-top: 28px;
+ letter-spacing: -4%;
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ align-self: center;
+ margin-left: auto;
+ margin-right: auto;
+ box-sizing: border-box;
+ white-space: nowrap;
+
+ border-radius: var(--border-radius-xl);
+
+ box-shadow: 1.96px 3.92px 0px 0px var(--black);
+
+ @media (max-width: $breakpoint-sm) {
+ margin-top: 20px;
+ min-width: auto;
+ }
+}
+
+.TeacherCharacter {
+ position: absolute;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 20;
+
+ width: 282px;
+ height: 282px;
+ right: 70px;
+ bottom: -45px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ display: block;
+ object-fit: contain;
+ }
+
+ @media (max-width: $breakpoint-md) {
+ width: 200px;
+ height: 200px;
+ right: 30px;
+ bottom: 75px;
+ }
+
+ @media (max-width: $breakpoint-sm) {
+ width: 125px;
+ height: 125px;
+ right: -8px;
+ bottom: 130px;
+ }
+}
diff --git a/frontend-next-migration/src/features/TeacherSignIn/ui/TeacherSignInCard/TeacherSignInCard.tsx b/frontend-next-migration/src/features/TeacherSignIn/ui/TeacherSignInCard/TeacherSignInCard.tsx
new file mode 100644
index 000000000..9de3e19b0
--- /dev/null
+++ b/frontend-next-migration/src/features/TeacherSignIn/ui/TeacherSignInCard/TeacherSignInCard.tsx
@@ -0,0 +1,194 @@
+'use client';
+import Image from 'next/image';
+import { useState } from 'react';
+import { useRouter } from 'next/navigation';
+import { useClientTranslation } from '@/shared/i18n';
+import { Button, ButtonSize, ButtonTheme } from '@/shared/ui/Button';
+import { classNames } from '@/shared/lib/classNames/classNames';
+import cls from './TeacherSignInCard.module.scss';
+
+/**
+ * TeacherSignInCardProps defines the properties for the TeacherSignInCard component.
+ * @property {string} [className] - An optional class name to apply to the component for styling purposes.
+ */
+interface TeacherSignInCardProps {
+ className?: string;
+}
+
+/**
+ * VisibilityIconProps defines the properties for the VisibilityIcon component.
+ * @property {boolean} isVisible - A boolean indicating whether the icon should represent visibility (true) or invisibility (false).
+ */
+interface VisibilityIconProps {
+ isVisible: boolean;
+}
+
+/**
+ * VisibilityIcon is a React functional component that renders an SVG icon representing visibility or invisibility based on the isVisible prop.
+ * @param isVisible - A boolean indicating whether the icon should represent visibility (true) or invisibility (false).
+ * @returns A JSX element containing the SVG icon.
+ */
+const VisibilityIcon: React.FC {t('managing-text')} {t('preparatory-materials-text')} {t('game-literacy-tasks-text')}{t('signin-card-title')}
+
+
+ {t('instruction-title')}
-
- {t('managing-title')}
- {t('implementation-title')}
-
- {t('preparatory-materials-title')}
- {t('game-literacy-tasks-title')}
-
By navigating to the lesson, a view opens that contains the necessary additional information for joining clans, the slides needed for teaching, the clan leaderboard, and also the homework section for that lesson. During the teaching session, simply project the desired lesson with its content and phases onto the board.
Comprehensive info packages related to game art and the game literacy skills and tasks included in this teaching package have been created to support preparation for teaching.", - "preparation-title": "Preparing for teaching", - "managing-title": "Managing the lesson", - "managing-text": "A teacher can have a maximum of 10 active lessons at the same time. The teacher can delete outdated and completed lessons, freeing up space for new lessons. It is also recommended to delete a completed lesson as soon as possible. If the teacher does not delete a previously created lesson, it will be considered outdated after X months from the creation of the lesson and will then be automatically removed from the system.", - "implementation-title": "Implementing the lesson", - "implementation-text": "The lesson includes two clans that compete against each other during the testing period. First, familiarize yourselves with the game literacy tasks and game art teaching materials, allocating approximately XX time for this.
The testing can begin once the students have downloaded the test version of the game from the bottom of this page and created an account in the game.
Students can join the clans using the passwords assigned to them from within the game. Try to divide into these two clans as evenly as possible.
During the testing, students will complete tasks from different sections of game literacy. After the testing ends, the results can be viewed on the leaderboard. It is advisable to allocate about 20 minutes for the testing portion.", - "preparatory-materials-title": "Materials to support preparation", - "preparatory-materials-text": "What materials for preparation and where. They are included here.", - "game-literacy-tasks-title": "Game literacy tasks", - "game-literacy-tasks-text": "Below you can access the game literacy tasks page. There you can explore the available tasks.", - "game-literacy-tasks-button": "Game literacy tasks", - "my-lessons": "My Lessons", - "create-lesson": "Create new lesson", - "delete-lesson": "Delete lesson", - "goto-lesson": "Go to lesson", - "confirm-delete": "Are you sure you want to delete the lesson?", - "no": "No", - "yes": "Yes", - "lesson": "Lesson", - "create": "Create", - "cancel": "Cancel", - "name-lesson": "Name the lesson", - "number-students": "Number of students" + "head-title": "Teachers Page", + "head-description": "Learn how to set up test sessions in the classroom with ALT Zone in four simple steps. Create clans, prepare materials, share the game link and analyze student results - make game-based learning fun and competitive.", + "head-keywords": "altzone, teachers, classroom testing, educational games, game-based learning, testing instructions, clan creation, results analysis", + "og-title": "ALT Zone Teachers Page", + "og-description": "Step-by-step instructions for teachers to set up test sessions in the classroom with ALT Zone. Create clans, prepare materials, launch the game and analyze student performance results.", + "signin-card-title": "Teacher Sign In", + "signin-card-username-placeholder": "Username", + "signin-card-username-label": "Username", + "signin-card-password-placeholder": "Password", + "signin-card-password-label": "Password", + "signin-card-submit-button": "Sign in" } diff --git a/frontend-next-migration/src/shared/i18n/locales/fi/teachers.json b/frontend-next-migration/src/shared/i18n/locales/fi/teachers.json index 42b0afce3..08928a3f4 100644 --- a/frontend-next-migration/src/shared/i18n/locales/fi/teachers.json +++ b/frontend-next-migration/src/shared/i18n/locales/fi/teachers.json @@ -1,36 +1,13 @@ { - "head-title": "Opettajan sivu", - "head-description": "Opi, miten voit järjestää ALT Zone -luokkahuoneen testisessioita neljässä yksinkertaisessa vaiheessa. Luo klaaneja, valmistele materiaaleja, jaa pelilinkki ja analysoi opiskelijoiden tuloksia - tee pelipohjaisesta oppimisesta hauskaa ja kilpailullista.", - "head-keywords": "altzone, opettajat, luokkahuoneen testaus, koulutuspelaaminen, pelipohjainen oppiminen, testiohjeet, luo klaaneja, analysoi tuloksia", - "og-title": "ALT Zone Opettajan sivu", - "og-description": "Vaiheittaiset ohjeet opettajille ALT Zone -luokkahuoneen testisessioiden järjestämiseen. Luo klaaneja, valmistele materiaaleja, käynnistä peli ja analysoi opiskelijoiden suoritustuloksia.", - "instructions": "1. Ohjeet", - "preparation": "2. Valmistelu", - "gaming": "3. Pelaaminen", - "results": "4. Tulokset", - "welcome": "Tervetuloa", - "instruction-title": "Täällä pääset hallinnoimaan oppituntejasi ja valmistautumaan pelitaiteen opetukseen", - "instruction-text": "Opettajan paneelissa kohdassa Omat oppitunnit voit luoda uuden oppitunnin antamalla sille sopivan tunnisteen (esim. 7B-luokka) sekä selata ja poistaa luomiasi oppitunteja.
Siirtymällä oppituntiin avautuu näkymä, josta löytyy kyseistä oppituntia varten tarvittavat lisätiedot klaaneihin liittymiseksi, opetukseen tarvittavat diat, klaanien tulostaulukko sekä myös kotitehtävän osuus. Opetustilanteessa heijasta vain haluamasi oppitunti sisältöineen ja vaiheineen taululle.
Opetukseen valmistautumisen yhteyteen on tehty perusteelliset infopaketit liittyen mm. pelitaiteeseen sekä tämän opetuspaketin sisältämiin pelilukutaitoihin ja niiden tehtäviin.", - "preparation-title": "Opetukseen valmistautuminen", - "managing-title": "Oppitunnin hallinnointi", - "managing-text": "Opettajalla voi olla samanaikaisesti aktiivisena enintään 10 oppituntia.Opettaja voi poistaa vanhentuneita ja käytyjä oppitunteja, jolloin tilaa vapautuu seuraaville oppitunneille. Suositeltavaa myös on, että suoritettu oppitunti poistetaan mahdollisimman pian. Mikäli opettaja jättää poistamatta aikaisemmin luodun oppitunnin, se katsotaan vanhentuneeksi X kuukauden kuluttua oppitunnin luomisesta ja poistuu silloin järjestelmästä automaattisesti.", - "implementation-title": "Oppitunnin toteutus", - "implementation-text": "Oppituntiin sisällytetään kaksi klaania, jotka kilpailevat keskenään testauksen ajan. Tutustukaa ensin pelilukutaidon tehtäviin ja pelitaiteen opetusmateriaaliin ja varatkaa tälle aikaa noin XX.
Testaus voidaan aloittaa, kun oppilaat ovat ladanneet pelin testiversion tämän sivun alaosasta ja luoneet peliin tunnuksen.
Oppilaat pääsevät liittymään klaaneihin niille osoitetuilla salasanoilla pelistä. Jakaututukaa näihin kahteen klaaniin mahdollisimman tasaisesti.
Testauksen aikana oppilaat suorittavat tehtäviä eri pelilukutaidon osioista. Testauksen päättymisen jälkeen tulokset on nähtävillä tulostaulukosta. Testausosuuteen on hyvä varata aikaa noin 20 minuuttia.", - "preparatory-materials-title": "Valmistautumista tukevat materiaalit", - "preparatory-materials-text": "Mitä materiaaleja valmistautumiseen ja missä. Ne tähän yhteyteen.", - "game-literacy-tasks-title": "Pelilukutaidon tehtävät", - "game-literacy-tasks-text": "Alta pääset pelilukutaidon tehtävien sivulle. Siellä voit tutustua saatavilla oleviin tehtäviin.", - "game-literacy-tasks-button": "Pelilukutaidon tehtävät", - "my-lessons": "Omat oppitunnit", - "create-lesson": "Luo oppitunti", - "delete-lesson": "Poista oppitunti", - "goto-lesson": "Siirry oppituntiin", - "confirm-delete": "Oletko varma, että haluat poistaa oppitunnin?", - "no": "Ei", - "yes": "Kyllä", - "lesson": "Oppitunti", - "create": "Luo", - "cancel": "Peruuta", - "name-lesson": "Nimeä oppitunti", - "number-students": "Oppilaiden määrä" + "head-title": "Opettajien sivu", + "head-description": "Opi kuinka määrittää testisessioita luokkahuoneessa ALT Zonen kanssa neljässä yksinkertaisessa vaiheessa. Luo klaaneja, valmista materiaalia, jaa pelilinkkiä ja analysoi opiskelijoiden tuloksia - tee pelipohjaisesta oppimisesta hauskaa ja kilpailukykyistä.", + "head-keywords": "altzone, opettajat, luokkahuonetestaus, opetuspelit, pelipohjaiset oppiminen, testausohjeet, klaanin luominen, tulosten analyysi", + "og-title": "ALT Zonen opettajien sivu", + "og-description": "Vaiheittaiset ohjeet opettajille testisessioiden määrittämiseen ALT Zonen luokkahuoneissa. Luo klaaneja, valmista materiaalia, käynnistä peli ja analysoi opiskelijoiden suorituksia.", + "signin-card-title": "Opettajan kirjautuminen", + "signin-card-username-placeholder": "Käyttäjätunnus", + "signin-card-username-label": "Käyttäjätunnus", + "signin-card-password-placeholder": "Salasana", + "signin-card-password-label": "Salasana", + "signin-card-submit-button": "Kirjaudu sisään" }