Skip to content

Commit 6757e63

Browse files
committed
feat: draggable error section
1 parent 14c3bd4 commit 6757e63

File tree

2 files changed

+52
-7
lines changed

2 files changed

+52
-7
lines changed

src/Preview.tsx

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,29 @@
11
import { Button } from "@/components/Button";
2-
import { ResizablePanel } from "@/components/Resizable";
2+
import {
3+
ResizableHandle,
4+
ResizablePanel,
5+
ResizablePanelGroup,
6+
} from "@/components/Resizable";
37
import { ActivityIcon, ExternalLinkIcon } from "lucide-react";
4-
import type { FC } from "react";
8+
import { useRef, useState, type FC } from "react";
9+
import type { ImperativePanelHandle } from "react-resizable-panels";
510

611
export const Preview: FC = () => {
12+
const errorPanelRef = useRef<ImperativePanelHandle>(null);
13+
const onCollapseError = () => {
14+
errorPanelRef.current?.collapse();
15+
};
16+
const [overlayOpacity, setOverlayOpacity] = useState(() => 50);
17+
718
return (
8-
<ResizablePanel className="flex flex-col items-start gap-6 p-8">
19+
<ResizablePanel className="relative flex flex-col items-start gap-6 p-8">
20+
<div
21+
className="pointer-events-none absolute top-0 left-0 h-full w-full bg-black"
22+
style={{ opacity: overlayOpacity / 100 }}
23+
>
24+
{/* OVERLAY */}
25+
</div>
26+
927
<div className="flex w-full items-center justify-between">
1028
<p className="font-semibold text-3xl text-content-primary">
1129
Parameters
@@ -16,7 +34,11 @@ export const Preview: FC = () => {
1634
<div className="flex h-full w-full items-center justify-center rounded-xl border p-4">
1735
<div className="flex flex-col items-center justify-center gap-3">
1836
<div className="flex items-center justify-center rounded-[6px] bg-highlight-sky p-2">
19-
<ActivityIcon className="text-content-invert" width={24} height={24} />
37+
<ActivityIcon
38+
className="text-content-invert"
39+
width={24}
40+
height={24}
41+
/>
2042
</div>
2143

2244
<div className="flex flex-col items-center gap-2">
@@ -33,14 +55,37 @@ export const Preview: FC = () => {
3355
href="#todo"
3456
className="flex items-center gap-0.5 text-content-link text-sm"
3557
>
36-
Read the docs{" "}
58+
Read the docs
3759
<span className="inline">
3860
<ExternalLinkIcon width={16} />
3961
</span>
4062
</a>
4163
</div>
4264
</div>
4365
</div>
66+
67+
<ResizablePanelGroup
68+
direction="vertical"
69+
className="pointer-events-none absolute top-0 left-0"
70+
>
71+
<ResizablePanel aria-hidden className="pointer-events-none">
72+
{/* EMPTY */}
73+
</ResizablePanel>
74+
<ResizableHandle
75+
onClick={onCollapseError}
76+
className="flex h-4 min-h-4 w-full items-center justify-center rounded-t-xl bg-[#AA5253]"
77+
withHandle={true}
78+
/>
79+
<ResizablePanel
80+
ref={errorPanelRef}
81+
className="bg-surface-secondary"
82+
collapsible={true}
83+
collapsedSize={0}
84+
onResize={(size) => {
85+
setOverlayOpacity(() => size);
86+
}}
87+
></ResizablePanel>
88+
</ResizablePanelGroup>
4489
</ResizablePanel>
4590
);
4691
};

src/components/Resizable.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ const ResizableHandle = ({
3333
{...props}
3434
>
3535
{withHandle && (
36-
<div className="z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border">
37-
<GripVertical className="h-2.5 w-2.5" />
36+
<div className="z-10 flex h-4 w-3 items-center justify-center rounded-sm">
37+
<GripVertical className="h-3 w-3" />
3838
</div>
3939
)}
4040
</ResizablePrimitive.PanelResizeHandle>

0 commit comments

Comments
 (0)