Resizable
Basic
One
Two
Three
package resizable
import "github.com/gsxhq/gsxui/ui"
// Basic mirrors shadcn's own resizable-demo-with-handle.tsx: a horizontal
// two-panel group (50%/50%) whose right panel nests a second, vertical
// group (25%/75%) — both the outer and the nested handle show the
// withHandle grip.
component Basic() {
<ui.ResizablePanelGroup orientation="horizontal" class="max-w-md rounded-lg border md:min-w-[450px]">
<ui.ResizablePanel defaultSize="50%">
<div class="flex h-[200px] items-center justify-center p-6">
<span class="font-semibold">One</span>
</div>
</ui.ResizablePanel>
<ui.ResizableHandle orientation="horizontal" withHandle={true}/>
<ui.ResizablePanel defaultSize="50%">
<ui.ResizablePanelGroup orientation="vertical">
<ui.ResizablePanel defaultSize="25%">
<div class="flex h-full items-center justify-center p-6">
<span class="font-semibold">Two</span>
</div>
</ui.ResizablePanel>
<ui.ResizableHandle orientation="vertical" withHandle={true}/>
<ui.ResizablePanel defaultSize="75%">
<div class="flex h-full items-center justify-center p-6">
<span class="font-semibold">Three</span>
</div>
</ui.ResizablePanel>
</ui.ResizablePanelGroup>
</ui.ResizablePanel>
</ui.ResizablePanelGroup>
}
Vertical
Header
Content
package resizable
import "github.com/gsxhq/gsxui/ui"
// Vertical mirrors shadcn's own resizable-vertical.tsx: a single
// orientation="vertical" group (Header 25% / Content 75%), no withHandle
// grip.
component Vertical() {
<ui.ResizablePanelGroup orientation="vertical" class="min-h-[200px] max-w-md rounded-lg border md:min-w-[450px]">
<ui.ResizablePanel defaultSize="25%">
<div class="flex h-full items-center justify-center p-6">
<span class="font-semibold">Header</span>
</div>
</ui.ResizablePanel>
<ui.ResizableHandle orientation="vertical" withHandle={false}/>
<ui.ResizablePanel defaultSize="75%">
<div class="flex h-full items-center justify-center p-6">
<span class="font-semibold">Content</span>
</div>
</ui.ResizablePanel>
</ui.ResizablePanelGroup>
}
Handle
Sidebar
Content
package resizable
import "github.com/gsxhq/gsxui/ui"
// Handle mirrors shadcn's own resizable-handle.tsx: a single
// orientation="horizontal" group (Sidebar 25% / Content 75%) with the
// withHandle grip shown — the canonical "visible handle" demo.
component Handle() {
<ui.ResizablePanelGroup orientation="horizontal" class="min-h-[200px] max-w-md rounded-lg border md:min-w-[450px]">
<ui.ResizablePanel defaultSize="25%">
<div class="flex h-full items-center justify-center p-6">
<span class="font-semibold">Sidebar</span>
</div>
</ui.ResizablePanel>
<ui.ResizableHandle orientation="horizontal" withHandle={true}/>
<ui.ResizablePanel defaultSize="75%">
<div class="flex h-full items-center justify-center p-6">
<span class="font-semibold">Content</span>
</div>
</ui.ResizablePanel>
</ui.ResizablePanelGroup>
}
RTL
واحد
اثنان
ثلاثة
package resizable
import "github.com/gsxhq/gsxui/ui"
// Rtl mirrors shadcn's own resizable-rtl demo: the same horizontal
// two-panel / nested-vertical-group shape as this dir's own Basic, labels
// translated to Arabic and wrapped in dir="rtl".
component Rtl() {
<div dir="rtl" lang="ar">
<ui.ResizablePanelGroup orientation="horizontal" class="max-w-sm rounded-lg border">
<ui.ResizablePanel defaultSize="50%">
<div class="flex h-[200px] items-center justify-center p-6">
<span class="font-semibold">واحد</span>
</div>
</ui.ResizablePanel>
<ui.ResizableHandle orientation="horizontal" withHandle={true}/>
<ui.ResizablePanel defaultSize="50%">
<ui.ResizablePanelGroup orientation="vertical">
<ui.ResizablePanel defaultSize="25%">
<div class="flex h-full items-center justify-center p-6">
<span class="font-semibold">اثنان</span>
</div>
</ui.ResizablePanel>
<ui.ResizableHandle orientation="vertical" withHandle={true}/>
<ui.ResizablePanel defaultSize="75%">
<div class="flex h-full items-center justify-center p-6">
<span class="font-semibold">ثلاثة</span>
</div>
</ui.ResizablePanel>
</ui.ResizablePanelGroup>
</ui.ResizablePanel>
</ui.ResizablePanelGroup>
</div>
}