status === 'in_progress') wire:poll.5s="refreshSectionState" @endif x-data="{ lastAudit: {}, recordAudit(event, meta = {}) { const now = Date.now(); if (this.lastAudit[event] && now - this.lastAudit[event] < 8000) { return; } if (!this.$wire || typeof this.$wire.logIntegrityEvent !== 'function') { return; } this.lastAudit[event] = now; try { this.$wire.logIntegrityEvent(event, { ...meta, timestamp: new Date().toISOString(), url: window.location.href, }); } catch (error) { console.warn('Integrity audit event skipped.', error); } } }" x-init=" window.addEventListener('blur', () => recordAudit('tab_blur')); document.addEventListener('visibilitychange', () => { recordAudit(document.hidden ? 'tab_hidden' : 'tab_visible'); }); window.addEventListener('offline', () => recordAudit('browser_offline')); window.addEventListener('online', () => recordAudit('browser_online')); document.addEventListener('fullscreenchange', () => { recordAudit(document.fullscreenElement ? 'fullscreen_enter' : 'fullscreen_exit'); }); ">
TOEFLMaster

{{ $activeSection?->name ?? 'TOEFL Exam Session' }}

@if ($examSession->status === 'in_progress' && $activeProgress?->expires_at && in_array($displayMode, ['listening', 'section'], true))
@endif @if ($examSession->status === 'in_progress') @endif
@if ($statusMessage)
{{ $statusMessage }}
@endif @if ($displayMode === 'instructions')

Section Instructions

{{ $activeSection?->name }}

Anda akan memulai section pertama, yaitu Listening Comprehension. Pada fase pengembangan ini, Listening memakai navigasi bebas seperti section lain agar proses uji coba dan koreksi data lebih mudah.

Aturan Listening

1. Listening berlangsung sekitar 35 menit dan terdiri dari 50 soal.

2. Peserta dapat berpindah antar nomor soal selama section belum diakhiri.

3. Jawaban dapat diubah selama timer section masih aktif.

4. Saat production, Listening dapat dikunci kembali menjadi alur satu arah.

Ringkasan Section

Section Aktif

{{ $activeSection?->name }}

Jumlah Soal

{{ $questions->count() }} soal

Durasi

{{ $activeSection?->duration_seconds ? floor($activeSection->duration_seconds / 60) . ' menit' : '-' }}

@elseif ($displayMode === 'listening_group')

Listening Audio

{{ $listeningBlockingAudio['title'] ?? 'Listening Audio' }}

Dengarkan audio ini sampai selesai. Soal terkait akan aktif setelah audio prasyarat selesai.

@if ($listeningBlockingAudio)
Cue {{ $listeningBlockingAudio['start'] ?? '00:00' }} - {{ $listeningBlockingAudio['end'] ?? 'akhir' }}
@if ($listeningBlockingAudio['cue_label'] ?? false)

{{ $listeningBlockingAudio['cue_label'] }}

@endif
{{ ($listeningBlockingAudio['start'] ?? '00:00') }} - {{ ($listeningBlockingAudio['end'] ?? 'akhir') }}
@else @endif
@elseif ($displayMode === 'transition')

Section Transition

Section berikutnya siap dimulai

Section sebelumnya sudah dikunci. Anda tidak dapat kembali ke section tersebut.

Section Selanjutnya

{{ $activeSection?->name }}

Lanjutkan ke section berikutnya. Timer section baru berjalan setelah Anda menekan tombol mulai dan masuk ke pengerjaan soal.

@if ($autoTransitionEnabled)
Perpindahan otomatis dimulai dalam detik.
@endif

Jumlah Soal

{{ $questions->count() }} soal

Durasi

{{ $activeSection?->duration_seconds ? floor($activeSection->duration_seconds / 60) . ' menit' : '-' }}

@elseif ($displayMode === 'completed')

Exam Completed

Ujian Selesai

Terima kasih, sesi TOEFL Anda telah berhasil dikirimkan. Halaman ini akan menutup sesi akun secara otomatis.

Auto Logout

Sesi ditutup dalam detik

@if ($scores)

Official Score Snapshot

Ringkasan Hasil Section

Simpan halaman ini sebagai referensi peserta. Publikasi hasil resmi tetap mengikuti kebijakan kampus atau lembaga penyelenggara.

Total Score

{{ $scores['scaled']['total'] }}

Listening

{{ $scores['scaled']['listening'] }}

Listening Comprehension

Structure

{{ $scores['scaled']['structure'] }}

Structure and Written Expression

Reading

{{ $scores['scaled']['reading'] }}

Reading Comprehension

Session Record

Status Penyelesaian

Status Sesi

{{ str($examSession->status)->replace('_', ' ')->title() }}

Paket Ujian

{{ $examSession->package->title }}

Submitted At

{{ $examSession->submitted_at?->format('d M Y H:i') ?? '-' }}

@endif
@else
@if (false && $sectionVisualMode === 'structure')

Part A

Structure

Navigator di bawah memisahkan blok sentence completion agar lebih mudah dipindai.

Part B

Written Expression

Blok kedua menyorot error identification dengan warna dan grouping terpisah.

@endif
{{ $activeSection?->name }} @if($displayMode === 'listening') · {{ $listeningPartLabel }} @endif Soal {{ $currentIndex + 1 }} / {{ $questions->count() }}
{{ $sectionAnsweredCount }} / {{ $questions->count() }} terjawab
@if ($currentIndex > 0) @endif @if ($currentIndex < $questions->count() - 1) @endif
@if (false && $displayMode === 'listening')

Mode latihan aktif: Anda dapat berpindah antar soal Listening selama section belum diakhiri.

{{ $listeningPartLabel }}
@endif
@if ($displayMode === 'listening')
@if ($listeningAudio)
{{ ($listeningAudio['start'] ?? '00:00') }} - {{ ($listeningAudio['end'] ?? 'akhir') }}
@else
Audio belum tersedia untuk group soal ini.
@endif
@endif @if ($sectionVisualMode === 'reading')
@if ($currentQuestion->passage)

Reading Passage

@if ($currentQuestion->passage->title)

{{ $currentQuestion->passage->title }}

@endif
{!! nl2br(e($currentQuestion->passage->content)) !!}
@else
Passage untuk soal ini belum tersedia.
@endif

{{ $currentQuestion->question_text }}

@foreach ($currentQuestion->options as $option) @endforeach
@else
@if ($currentQuestion->audio_path)

Audio Player

@endif @if ($sectionVisualMode === 'structure')
{{ $structurePartLabel }}

@if ($structurePartLabel === 'Structure') Pilih bentuk gramatikal paling tepat untuk melengkapi kalimat. @else Identifikasi bagian kalimat yang paling tidak tepat secara gramatikal. @endif

@endif @php $hideOfficialListeningPrompt = $displayMode === 'listening' && optional($examSession->package)->isOfficial(); @endphp @if ($hideOfficialListeningPrompt)

Listening Prompt

Dengarkan audio, lalu pilih jawaban terbaik dari pilihan A-D. Teks pertanyaan tidak ditampilkan pada official listening test.

@else

{{ $currentQuestion->question_text }}

@endif
@foreach ($currentQuestion->options as $option) @endforeach
@endif
Navigasi soal tersedia tepat di bawah keterangan section.
@endif