Separate Study Decks and Homework in the library; drop the /create mode switch
Library ("Your icebox")
- Two tabs, never mixed: Study Decks (the folder + card library) and Homework
(saved solutions and step-by-step guides). The active tab lives in the URL
(/?tab=homework), so the sections are linkable and survive a reload.
- Decks tab keeps Import, the folder bar, stats and its own empty state — now
a single decks-only CTA.
- Homework tab lists saved results as cards (mode icon, date, step count,
preview) with Open and delete-with-confirm; its empty state has its own CTA
("Homework Solver") that opens the solver directly. Opening a card
deep-links to /homework?open=<id>, which the screen opens on arrival.
- .segmented now also styles link segments (same control as settings).
/create
- The redundant "Study Deck | Homework Solver" toggle is gone: /create is the
deck uploader only, and the bottom bar's + goes straight to it. Homework has
its own screen, reached from the library tab, the drawer and CTAs.
Copy
- New keys (en + cs): tabDecks, tabHomework, homeworkHeroTitle, plus homework
empty-state/open/step-count strings. The homework hero is now "Solve your
homework" / "Vyřeš svůj úkol" — no study-deck text in the homework flow.
- Removed the now-unused ModeSwitch component and homework.title key.
Service worker: freezmo-v10.
Verified: library-tabs suite 37/37 (tab switching, context empty states,
deep-link opening, deletion, no switch on /create, heroes, redirects, desktop
grid, 360px + 44px targets, axe contrast en+cs light+dark), mobile 49/49,
i18n 27/27, desktop regression 74/74. Lint + build clean.
This commit is contained in:
parent
461dd2ffcf
commit
8c44f47881
12 changed files with 295 additions and 162 deletions
|
|
@ -104,7 +104,7 @@ export function HomeworkInput({
|
|||
<section className="space-y-2">
|
||||
<h1 className="flex flex-wrap items-center gap-x-3 gap-y-1 text-[28px] font-semibold leading-tight tracking-[-0.02em] text-[var(--text)] text-balance sm:text-[32px]">
|
||||
<SparklesIcon className="size-8 shrink-0 text-frost-500 dark:text-frost-200" />
|
||||
<span>{t("homework.title")}</span>
|
||||
<span>{t("homeworkHeroTitle")}</span>
|
||||
</h1>
|
||||
<p className="max-w-xl text-[15px] text-frost-600 dark:text-frost-300">{t("homework.subtitle")}</p>
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
"use client";
|
||||
|
||||
import { useCallback, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
||||
import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
||||
|
||||
import { documentsToText } from "@/lib/documents";
|
||||
import { ApiError, generateHomework, type HomeworkProgress } from "@/lib/client-api";
|
||||
import {
|
||||
deleteHomework,
|
||||
getHomework,
|
||||
homeworkStore,
|
||||
saveHomework,
|
||||
sortHomework,
|
||||
|
|
@ -28,7 +29,7 @@ const MAX_TEXT_TO_SEND = 100_000;
|
|||
type View = { kind: "start" } | { kind: "loading" } | { kind: "record"; record: HomeworkRecord };
|
||||
|
||||
/** The /homework screen: give it an assignment, pick a mode, get a result. */
|
||||
export function HomeworkScreen() {
|
||||
export function HomeworkScreen({ initialRecordId }: { initialRecordId?: string }) {
|
||||
const { t } = useI18n();
|
||||
const records = useSyncExternalStore(
|
||||
homeworkStore.subscribe,
|
||||
|
|
@ -49,6 +50,13 @@ export function HomeworkScreen() {
|
|||
const [againLoading, setAgainLoading] = useState(false);
|
||||
const abortRef = useRef<AbortController | null>(null);
|
||||
|
||||
// Deep link from the library's Homework tab: open the saved result directly.
|
||||
useEffect(() => {
|
||||
if (!initialRecordId) return;
|
||||
const record = getHomework(initialRecordId);
|
||||
if (record) setView({ kind: "record", record });
|
||||
}, [initialRecordId]);
|
||||
|
||||
/** Everything the API needs, built from the current input. */
|
||||
const buildPayload = () => {
|
||||
const readyDocuments = intake.documents.filter((entry) => entry.status === "ready" && entry.extracted);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue