Fix the clipped answer field + the doubled AI note; ordering only where it fits
UI bug from a phone screenshot (short answer, Czech): - The textarea was flex-shrunk inside the slide's column (58px instead of ~82px), clipping the typed answer mid-line. Every direct child of a study/review/guide slide is now shrink-0 and the slide scrolls instead. - Two AI disclaimers were visible at once: the activity's own after the grading box plus the feed's row. The activity-level copy is gone; the feed/guide row (which also carries the report control) is the single one. The phase-2 check now asserts the note sits below the graded feedback. - The mobile suite's backdrop-tap check is deterministic too (the spring animation made the measured box mid-flight). Ordering activities: the deck prompt now allows them only when the notes hold a real sequence (chronological events, process stages, procedure steps, a lifecycle, a ranked scale) and points at matching / multiple choice / true-false when they do not - "sort these" was landing on decks with no order at all. Version 0.2.4, SW -> freezmo-v57.
This commit is contained in:
parent
f4026d3e55
commit
9b0354fb11
9 changed files with 34 additions and 15 deletions
|
|
@ -202,7 +202,7 @@ export function SessionFeed({
|
|||
aria-label={t("feed.activityOf", { n: itemIndex + 1, total })}
|
||||
className="flex h-full snap-start snap-always items-stretch justify-center overflow-y-auto overscroll-y-contain"
|
||||
>
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center]">
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center] [&>*]:shrink-0">
|
||||
<ActivityRenderer
|
||||
activity={item.activity}
|
||||
active={index === itemIndex}
|
||||
|
|
@ -242,7 +242,7 @@ export function SessionFeed({
|
|||
aria-label={t("review.results")}
|
||||
className="flex h-full snap-start snap-always items-stretch justify-center overflow-y-auto overscroll-y-contain"
|
||||
>
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center]">
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center] [&>*]:shrink-0">
|
||||
{finished
|
||||
? (
|
||||
<>
|
||||
|
|
|
|||
|
|
@ -315,7 +315,7 @@ export function StudyFeed({ deck }: { deck: Deck }) {
|
|||
aria-label={t("feed.activityOf", { n: activityIndex + 1, total })}
|
||||
className="flex h-full snap-start snap-always items-stretch justify-center overflow-y-auto overscroll-y-contain"
|
||||
>
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center]">
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center] [&>*]:shrink-0">
|
||||
<ActivityRenderer
|
||||
activity={activity}
|
||||
active={index === activityIndex}
|
||||
|
|
@ -353,7 +353,7 @@ export function StudyFeed({ deck }: { deck: Deck }) {
|
|||
aria-label={t("feed.results")}
|
||||
className="h-full snap-start snap-always overflow-y-auto overscroll-y-contain"
|
||||
>
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center]">
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center] [&>*]:shrink-0">
|
||||
<ResultsScreen
|
||||
deck={currentDeck}
|
||||
xp={xp}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import { useI18n } from "@/lib/i18n";
|
|||
import { modelErrorCopy } from "@/lib/model-errors";
|
||||
import type { Activity } from "@/lib/schemas";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { AiDisclaimer } from "@/components/AiDisclaimer";
|
||||
import { Button, Spinner } from "@/components/ui";
|
||||
import { ModelErrorActions } from "@/components/ModelErrorActions";
|
||||
|
||||
|
|
@ -186,8 +185,6 @@ export function ShortAnswer({ activity, active, language, onAnswered, onNext, is
|
|||
) : null}
|
||||
</div>
|
||||
|
||||
<AiDisclaimer />
|
||||
|
||||
<FeedbackPanel
|
||||
correct={state.correct}
|
||||
explanation={activity.explanation}
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ export function HomeworkGuide({
|
|||
aria-label={t("homework.guide.stepOf", { n: stepIndex + 1, total: steps.length })}
|
||||
className="flex h-full snap-start snap-always items-stretch justify-center overflow-y-auto overscroll-y-contain"
|
||||
>
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center]">
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center] [&>*]:shrink-0">
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
<span className="tint-sky inline-flex items-center gap-1.5 rounded-full px-3 py-1 text-xs font-semibold ring-1 ring-white/50 backdrop-blur-sm">
|
||||
{t("homework.guide.stepOf", { n: stepIndex + 1, total: steps.length })}
|
||||
|
|
@ -291,7 +291,7 @@ export function HomeworkGuide({
|
|||
aria-label={t("homework.guide.solution")}
|
||||
className="h-full snap-start snap-always overflow-y-auto overscroll-y-contain"
|
||||
>
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center]">
|
||||
<div className="mx-auto flex min-h-full w-full max-w-xl flex-col gap-4 px-4 pb-24 pt-24 [justify-content:safe_center] [&>*]:shrink-0">
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
<span className="tint-mint inline-flex items-center gap-1.5 rounded-full px-3 py-1 text-xs font-semibold ring-1 ring-white/50 backdrop-blur-sm">
|
||||
{t("homework.guide.solution")}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue