Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions apps/web/src/components/artifacts/ArtifactRenderer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ export interface ArtifactRendererProps {
setIsEditing: React.Dispatch<React.SetStateAction<boolean>>;
chatCollapsed: boolean;
setChatCollapsed: (c: boolean) => void;
isCanvasPanelCollapsed: boolean;
setIsCanvasPanelCollapsed: React.Dispatch<React.SetStateAction<boolean>>;
}

interface SelectionBox {
Expand Down Expand Up @@ -318,6 +320,8 @@ function ArtifactRendererComponent(props: ArtifactRendererProps) {
artifactUpdateFailed={artifactUpdateFailed}
chatCollapsed={props.chatCollapsed}
setChatCollapsed={props.setChatCollapsed}
isCanvasPanelCollapsed={props.isCanvasPanelCollapsed}
setIsCanvasPanelCollapsed={props.setIsCanvasPanelCollapsed}
/>
<div
ref={contentRef}
Expand Down
23 changes: 21 additions & 2 deletions apps/web/src/components/artifacts/header/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ArtifactTitle } from "./artifact-title";
import { NavigateArtifactHistory } from "./navigate-artifact-history";
import { ArtifactCodeV3, ArtifactMarkdownV3 } from "@opencanvas/shared/types";
import { Assistant } from "@langchain/langgraph-sdk";
import { PanelRightClose } from "lucide-react";
import { PanelLeftClose, PanelRightOpen, PanelRightClose } from "lucide-react";
import { TooltipIconButton } from "@/components/ui/assistant-ui/tooltip-icon-button";

interface ArtifactHeaderProps {
Expand All @@ -17,6 +17,8 @@ interface ArtifactHeaderProps {
artifactUpdateFailed: boolean;
chatCollapsed: boolean;
setChatCollapsed: (c: boolean) => void;
isCanvasPanelCollapsed: boolean;
setIsCanvasPanelCollapsed: React.Dispatch<React.SetStateAction<boolean>>;
}

export function ArtifactHeader(props: ArtifactHeaderProps) {
Expand All @@ -40,7 +42,24 @@ export function ArtifactHeader(props: ArtifactHeaderProps) {
artifactUpdateFailed={props.artifactUpdateFailed}
/>
</div>
<div className="flex gap-2 items-end mt-[10px] mr-[6px]">
<div className="flex gap-2 items-center mt-[10px] mr-[6px]">
<TooltipIconButton
tooltip={
props.isCanvasPanelCollapsed ? "Expand Canvas" : "Collapse Canvas"
}
variant="ghost"
className="ml-2 mb-1 w-8 h-8"
delayDuration={400}
onClick={() =>
props.setIsCanvasPanelCollapsed(!props.isCanvasPanelCollapsed)
}
>
{props.isCanvasPanelCollapsed ? (
<PanelRightOpen className="text-gray-600" />
) : (
<PanelLeftClose className="text-gray-600" />
)}
</TooltipIconButton>
<NavigateArtifactHistory
isBackwardsDisabled={props.isBackwardsDisabled}
isForwardDisabled={props.isForwardDisabled}
Expand Down
21 changes: 16 additions & 5 deletions apps/web/src/components/canvas/canvas.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,20 @@ import { useRouter, useSearchParams } from "next/navigation";
export function CanvasComponent() {
const { graphData } = useGraphContext();
const { setModelName, setModelConfig } = useThreadContext();
const { setArtifact, chatStarted, setChatStarted } = graphData;
const { artifact, setArtifact, chatStarted, setChatStarted } = graphData;
const { toast } = useToast();
const [isEditing, setIsEditing] = useState(false);
const [webSearchResultsOpen, setWebSearchResultsOpen] = useState(false);
const [chatCollapsed, setChatCollapsed] = useState(false);
const [isCanvasPanelCollapsed, setIsCanvasPanelCollapsed] = useState(false);

const currentArtifactContent = artifact?.contents[artifact.currentIndex - 1];
const currentArtifactType = currentArtifactContent?.type;

const shouldRenderCanvas =
chatStarted &&
!isCanvasPanelCollapsed &&
(currentArtifactType === "code" || currentArtifactType === "text");

const searchParams = useSearchParams();
const router = useRouter();
Expand Down Expand Up @@ -143,9 +152,9 @@ export function CanvasComponent() {
)}
{!chatCollapsed && chatStarted && (
<ResizablePanel
defaultSize={25}
minSize={15}
maxSize={50}
defaultSize={isCanvasPanelCollapsed ? 100 : 25}
minSize={isCanvasPanelCollapsed ? 100 : 15}
maxSize={isCanvasPanelCollapsed ? 100 : 50}
className="transition-all duration-700 h-screen mr-auto bg-gray-50/70 shadow-inner-right"
id="chat-panel-main"
order={1}
Expand Down Expand Up @@ -195,7 +204,7 @@ export function CanvasComponent() {
</ResizablePanel>
)}

{chatStarted && (
{shouldRenderCanvas && (
<>
<ResizableHandle />
<ResizablePanel
Expand Down Expand Up @@ -224,6 +233,8 @@ export function CanvasComponent() {
}}
setIsEditing={setIsEditing}
isEditing={isEditing}
isCanvasPanelCollapsed={isCanvasPanelCollapsed}
setIsCanvasPanelCollapsed={setIsCanvasPanelCollapsed}
/>
</div>
<WebSearchResults
Expand Down