lernschiff/config
Boban Blaskovic 88945b47f6 feat(tasks): multi-type questions (cloze + geo-map) + Run.php type dispatch
Tasks Run page now switches on question $type and renders one of three layouts:
choice (existing multiple-choice), cloze (Lückentext text input), geo-map
(clickable SVG region picker). Adds Deutsch-Lückentexte + Geografie-Europa
question banks with the required type-specific keys.

- Run.php: replaces submitAnswer/lastAnswerIndex with submitChoice + submitCloze
  + submitRegion. lastAnswer is now an array { type, ...payload }. Cross-type
  calls are no-ops so a stray dispatch can't pollute state.
- run.blade.php: branches on $q['type']; cloze has wire:model.live debounce
  + Enter-to-submit; geo-map has SVG + accessible label-button grid; feedback
  pill below each layout.
- config/tasks.php: adds deutsch-lueckentexte + geografie-europa-laender.
- config/task-questions.php: type=cloze entries with correct+accept[] for
  case-insensitive alt-spelling match; type=geo-map entries with regions[]
  and SVG paths.
- Tests: renames submitAnswer→submitChoice across run page suite; adds full
  coverage for cloze (correct/wrong/empty/case/accept[]/payload shape/clear
  on next), geo-map (correct/wrong/payload/SVG render), and cross-type
  guards. TaskQuestionBank test is now type-aware (choice needs options[4],
  cloze needs correct string, geo-map needs regions[]+matching correct key).

Test: 204/204 Pest green. Smoke: 10/10 task routes 200, 4/4 modal components
mount cleanly, no errors written to laravel.log during the smoke pass.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 19:28:09 +02:00
..
app.php feat(ui): Livewire v4 + blade-icons + de locale + timezone Vienna 2026-05-22 00:38:36 +02:00
auth.php feat(auth): Breeze Livewire stack + dashboard/lizenz-abgelaufen views + layout shells 2026-05-22 05:55:59 +02:00
blade-icons.php feat(ui): Livewire v4 + blade-icons + de locale + timezone Vienna 2026-05-22 00:38:36 +02:00
cache.php feat(scaffold): Laravel 12 scaffold + .env.example 2026-05-22 00:19:49 +02:00
cors.php feat(cors): config/cors.php supports_credentials + CORS tests + Reverb allowed_origins 2026-05-22 06:14:48 +02:00
database.php feat(scaffold): Laravel 12 scaffold + .env.example 2026-05-22 00:19:49 +02:00
filesystems.php feat(scaffold): Laravel 12 scaffold + .env.example 2026-05-22 00:19:49 +02:00
livewire.php feat(ui): Livewire v4 + blade-icons + de locale + timezone Vienna 2026-05-22 00:38:36 +02:00
logging.php feat(scaffold): Laravel 12 scaffold + .env.example 2026-05-22 00:19:49 +02:00
mail.php feat(scaffold): Laravel 12 scaffold + .env.example 2026-05-22 00:19:49 +02:00
queue.php feat(scaffold): Laravel 12 scaffold + .env.example 2026-05-22 00:19:49 +02:00
reverb.php feat(ui): dashboard MVP — feature-folders, lazy skeletons, wire-elements modals, brand logos 2026-05-22 21:36:04 +02:00
services.php feat(scaffold): Laravel 12 scaffold + .env.example 2026-05-22 00:19:49 +02:00
session.php feat(scaffold): Laravel 12 scaffold + .env.example 2026-05-22 00:19:49 +02:00
sidebar.php feat(ui): dashboard MVP — feature-folders, lazy skeletons, wire-elements modals, brand logos 2026-05-22 21:36:04 +02:00
task-questions.php feat(tasks): multi-type questions (cloze + geo-map) + Run.php type dispatch 2026-05-23 19:28:09 +02:00
tasks.php feat(tasks): multi-type questions (cloze + geo-map) + Run.php type dispatch 2026-05-23 19:28:09 +02:00