diff --git a/page/package-lock.json b/page/package-lock.json index 845dbe87..3c9c9f3f 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -29,6 +29,7 @@ "react-bootstrap-icons": "^1.11.5", "react-dom": "^19.0.0", "react-helmet": "^6.1.0", + "react-resizable-panels": "^2.1.9", "react-router-dom": "^7.5.2", "react-window": "^1.8.11", "tailwind-merge": "^3.2.0", @@ -4632,6 +4633,16 @@ } } }, + "node_modules/react-resizable-panels": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.9.tgz", + "integrity": "sha512-z77+X08YDIrgAes4jl8xhnUu1LNIRp4+E7cv4xHmLOxxUPO/ML7PSrE813b90vj7xvQ1lcf7g2uA9GeMZonjhQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/react-router": { "version": "7.5.2", "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.5.2.tgz", diff --git a/page/package.json b/page/package.json index 13ae4aca..0cc70745 100644 --- a/page/package.json +++ b/page/package.json @@ -31,6 +31,7 @@ "react-bootstrap-icons": "^1.11.5", "react-dom": "^19.0.0", "react-helmet": "^6.1.0", + "react-resizable-panels": "^2.1.9", "react-router-dom": "^7.5.2", "react-window": "^1.8.11", "tailwind-merge": "^3.2.0", diff --git a/page/src/components/ui/resizable.tsx b/page/src/components/ui/resizable.tsx new file mode 100644 index 00000000..c9556348 --- /dev/null +++ b/page/src/components/ui/resizable.tsx @@ -0,0 +1,54 @@ +import * as React from "react"; +import { GripVerticalIcon } from "lucide-react"; +import * as ResizablePrimitive from "react-resizable-panels"; + +import { cn } from "@/lib/utils"; + +function ResizablePanelGroup({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function ResizablePanel({ + ...props +}: React.ComponentProps) { + return ; +} + +function ResizableHandle({ + withHandle, + className, + ...props +}: React.ComponentProps & { + withHandle?: boolean; +}) { + return ( + div]:rotate-90", + className, + )} + {...props} + > + {withHandle && ( +
+ +
+ )} +
+ ); +} + +export { ResizablePanelGroup, ResizablePanel, ResizableHandle };