diff --git a/src/app/evaluations/[id]/page.tsx b/src/app/evaluations/[id]/page.tsx
index 0494d9c..5d18544 100644
--- a/src/app/evaluations/[id]/page.tsx
+++ b/src/app/evaluations/[id]/page.tsx
@@ -301,6 +301,7 @@ export default function EvaluationDetailPage() {
diff --git a/src/components/DimensionCard.tsx b/src/components/DimensionCard.tsx
index 4e36d6a..e1a6c6b 100644
--- a/src/components/DimensionCard.tsx
+++ b/src/components/DimensionCard.tsx
@@ -1,6 +1,33 @@
"use client";
-import { useState } from "react";
+import { useState, useEffect } from "react";
+
+const STORAGE_KEY_PREFIX = "eval-dim-expanded";
+
+function getStoredExpanded(evaluationId: string, dimensionId: string): boolean | null {
+ if (typeof window === "undefined") return null;
+ try {
+ const raw = localStorage.getItem(`${STORAGE_KEY_PREFIX}-${evaluationId}`);
+ if (!raw) return null;
+ const obj = JSON.parse(raw) as Record;
+ return obj[dimensionId] ?? null;
+ } catch {
+ return null;
+ }
+}
+
+function setStoredExpanded(evaluationId: string, dimensionId: string, expanded: boolean): void {
+ if (typeof window === "undefined") return;
+ try {
+ const key = `${STORAGE_KEY_PREFIX}-${evaluationId}`;
+ const raw = localStorage.getItem(key);
+ const obj = (raw ? JSON.parse(raw) : {}) as Record;
+ obj[dimensionId] = expanded;
+ localStorage.setItem(key, JSON.stringify(obj));
+ } catch {
+ /* ignore */
+ }
+}
interface Dimension {
id: string;
@@ -22,6 +49,7 @@ interface DimensionCardProps {
dimension: Dimension;
score: DimensionScore | null;
index: number;
+ evaluationId?: string;
onScoreChange: (dimensionId: string, data: Partial) => void;
}
@@ -48,10 +76,25 @@ function parseQuestions(s: string | null | undefined): string[] {
const inputClass =
"w-full rounded border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-700/80 px-2.5 py-1.5 text-sm text-zinc-900 dark:text-zinc-100 placeholder-zinc-400 dark:placeholder-zinc-500 focus:border-cyan-500 focus:ring-1 focus:ring-cyan-500/30";
-export function DimensionCard({ dimension, score, index, onScoreChange }: DimensionCardProps) {
+export function DimensionCard({ dimension, score, index, evaluationId, onScoreChange }: DimensionCardProps) {
const [notes, setNotes] = useState(score?.candidateNotes ?? "");
const hasQuestions = parseQuestions(dimension.suggestedQuestions).length > 0;
const [expanded, setExpanded] = useState(hasQuestions);
+
+ useEffect(() => {
+ if (evaluationId && typeof window !== "undefined") {
+ const stored = getStoredExpanded(evaluationId, dimension.id);
+ if (stored !== null) setExpanded(stored);
+ }
+ }, [evaluationId, dimension.id]);
+
+ const toggleExpanded = () => {
+ setExpanded((e) => {
+ const next = !e;
+ if (evaluationId) setStoredExpanded(evaluationId, dimension.id, next);
+ return next;
+ });
+ };
const currentScore = score?.score ?? null;
const rubricLabels = parseRubric(dimension.rubric);
const questions = parseQuestions(dimension.suggestedQuestions);
@@ -60,7 +103,7 @@ export function DimensionCard({ dimension, score, index, onScoreChange }: Dimens