authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-03-09 15:12:42-07:00
committergravatar for jmarminge@gmail.comJulius Marminge <jmarminge@gmail.com> 2026-03-09 15:20:07-07:00
log3a86b60680f147ef1420558548354bbfa0253f5b
tree5ff58300226761a03a8e5a479403da812b6be3ff
parenteb7c428a2d3438f2ba72fb83c5df750236517a77

Render collapsed plan preview directly as markdown

- remove deferred collapsed preview state in `ProposedPlanCard` - always render collapsed preview with `ChatMarkdown` for simpler, consistent display

1 files changed, 1 insertions(+), 25 deletions(-)

apps/web/src/components/ChatView.tsx+1-25
...@@ -31,7 +31,6 @@ import {...@@ -31,7 +31,6 @@ import {
31} from "@t3tools/shared/model";31} from "@t3tools/shared/model";
32import {32import {
33 memo,33 memo,
34 startTransition,
35 useCallback,34 useCallback,
36 useEffect,35 useEffect,
37 useLayoutEffect,36 useLayoutEffect,
...@@ -4765,7 +4764,6 @@ const ProposedPlanCard = memo(function ProposedPlanCard({...@@ -4765,7 +4764,6 @@ const ProposedPlanCard = memo(function ProposedPlanCard({
4765 const [isSaveDialogOpen, setIsSaveDialogOpen] = useState(false);4764 const [isSaveDialogOpen, setIsSaveDialogOpen] = useState(false);
4766 const [savePath, setSavePath] = useState("");4765 const [savePath, setSavePath] = useState("");
4767 const [isSavingToWorkspace, setIsSavingToWorkspace] = useState(false);4766 const [isSavingToWorkspace, setIsSavingToWorkspace] = useState(false);
4768 const [renderCollapsedMarkdown, setRenderCollapsedMarkdown] = useState(false);
4769 const savePathInputId = useId();4767 const savePathInputId = useId();
4770 const title = proposedPlanTitle(planMarkdown) ?? "Proposed plan";4768 const title = proposedPlanTitle(planMarkdown) ?? "Proposed plan";
4771 const lineCount = planMarkdown.split("\n").length;4769 const lineCount = planMarkdown.split("\n").length;
...@@ -4777,22 +4775,6 @@ const ProposedPlanCard = memo(function ProposedPlanCard({...@@ -4777,22 +4775,6 @@ const ProposedPlanCard = memo(function ProposedPlanCard({
4777 const downloadFilename = buildProposedPlanMarkdownFilename(planMarkdown);4775 const downloadFilename = buildProposedPlanMarkdownFilename(planMarkdown);
4778 const saveContents = normalizePlanMarkdownForExport(planMarkdown);4776 const saveContents = normalizePlanMarkdownForExport(planMarkdown);
47794777
4780 useEffect(() => {
4781 if (!canCollapse || expanded) {
4782 setRenderCollapsedMarkdown(false);
4783 return;
4784 }
4785 setRenderCollapsedMarkdown(false);
4786 const frame = window.requestAnimationFrame(() => {
4787 startTransition(() => {
4788 setRenderCollapsedMarkdown(true);
4789 });
4790 });
4791 return () => {
4792 window.cancelAnimationFrame(frame);
4793 };
4794 }, [canCollapse, expanded, collapsedPreview]);
4795
4796 const handleDownload = () => {4778 const handleDownload = () => {
4797 downloadPlanAsTextFile(downloadFilename, saveContents);4779 downloadPlanAsTextFile(downloadFilename, saveContents);
4798 };4780 };
...@@ -4880,13 +4862,7 @@ const ProposedPlanCard = memo(function ProposedPlanCard({...@@ -4880,13 +4862,7 @@ const ProposedPlanCard = memo(function ProposedPlanCard({
4880 <div className="mt-4">4862 <div className="mt-4">
4881 <div className={cn("relative", canCollapse && !expanded && "max-h-104 overflow-hidden")}>4863 <div className={cn("relative", canCollapse && !expanded && "max-h-104 overflow-hidden")}>
4882 {canCollapse && !expanded ? (4864 {canCollapse && !expanded ? (
4883 renderCollapsedMarkdown ? (4865 <ChatMarkdown text={collapsedPreview ?? ""} cwd={cwd} isStreaming={false} />
4884 <ChatMarkdown text={collapsedPreview ?? ""} cwd={cwd} isStreaming={false} />
4885 ) : (
4886 <pre className="whitespace-pre-wrap wrap-break-word text-sm leading-relaxed text-foreground/80">
4887 {collapsedPreview}
4888 </pre>
4889 )
4890 ) : (4866 ) : (
4891 <ChatMarkdown text={displayedPlanMarkdown} cwd={cwd} isStreaming={false} />4867 <ChatMarkdown text={displayedPlanMarkdown} cwd={cwd} isStreaming={false} />
4892 )}4868 )}