feat(dashboard): add markdown preview for AskUserQuestion options
Implement side-by-side preview layout when AskUserQuestion options include markdown content, matching the Claude Code tool spec. Hook changes (bin/amc-hook): - Extract optional 'markdown' field from question options - Only include when present (maintains backward compatibility) QuestionBlock layout: - Detect hasMarkdownPreviews via options.some(opt => opt.markdown) - Standard layout: vertical option list (unchanged) - Preview layout: 40% options left, 60% preview pane right - Fixed 400px preview height prevents layout thrashing on hover - Track previewIndex state, update on mouseEnter/focus Content rendering (smart detection): - Code fences (starts with ```): renderContent() for syntax highlighting - Everything else: raw <pre> to preserve ASCII diagrams exactly - "No preview for this option" when hovered option lacks markdown OptionButton enhancements: - Accept selected, onMouseEnter, onFocus props - Visual selected state: brighter border/bg with subtle shadow - Compact padding (py-2 vs py-3.5) for preview layout density - Graceful undefined handling for standard layout usage Bug fixes during development: - Layout thrashing: Fixed height (not max-height) on preview pane - ASCII corruption: Detect code fences vs plain text for render path - Horizontal overflow: Use overflow-auto (not just overflow-y-auto) - Data pipeline: Hook was stripping markdown field (root cause) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -82,10 +82,14 @@ def _extract_questions(hook):
|
||||
"options": [],
|
||||
}
|
||||
for opt in q.get("options", []):
|
||||
entry["options"].append({
|
||||
opt_entry = {
|
||||
"label": opt.get("label", ""),
|
||||
"description": opt.get("description", ""),
|
||||
})
|
||||
}
|
||||
# Include markdown preview if present
|
||||
if opt.get("markdown"):
|
||||
opt_entry["markdown"] = opt.get("markdown")
|
||||
entry["options"].append(opt_entry)
|
||||
result.append(entry)
|
||||
return result
|
||||
|
||||
|
||||
Reference in New Issue
Block a user