Files
shadcn-ui/apps/v4/registry/bases/base/examples/resizable-example.tsx
shadcn 86d9b00084 chore: update deps (#9022)
* feat: init

* fix

* fix

* fix

* feat

* feat

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* feat: implement icons

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* feat: update init command

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* feat: dialog

* feat

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* feat: add registry:base item type

* feat: rename frame to canva

* fix

* feat

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fi

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* feat: add all colors

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* feat: add outfit font

* fix

* fix

* fix

* fix

* fix

* chore: changeset

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix
2025-12-12 21:01:44 +04:00

153 lines
4.5 KiB
TypeScript

"use client"
import * as React from "react"
import {
Example,
ExampleWrapper,
} from "@/registry/bases/base/components/example"
import {
ResizableHandle,
ResizablePanel,
ResizablePanelGroup,
} from "@/registry/bases/base/ui/resizable"
export default function ResizableExample() {
return (
<ExampleWrapper>
<ResizableHorizontal />
<ResizableVertical />
<ResizableWithHandle />
<ResizableNested />
<ResizableControlled />
</ExampleWrapper>
)
}
function ResizableHorizontal() {
return (
<Example title="Horizontal">
<ResizablePanelGroup
direction="horizontal"
className="min-h-[200px] rounded-lg border"
>
<ResizablePanel defaultSize={25}>
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Sidebar</span>
</div>
</ResizablePanel>
<ResizableHandle />
<ResizablePanel defaultSize={75}>
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Content</span>
</div>
</ResizablePanel>
</ResizablePanelGroup>
</Example>
)
}
function ResizableVertical() {
return (
<Example title="Vertical">
<ResizablePanelGroup
direction="vertical"
className="min-h-[200px] rounded-lg border"
>
<ResizablePanel defaultSize={25}>
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Header</span>
</div>
</ResizablePanel>
<ResizableHandle />
<ResizablePanel defaultSize={75}>
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Content</span>
</div>
</ResizablePanel>
</ResizablePanelGroup>
</Example>
)
}
function ResizableWithHandle() {
return (
<Example title="With Handle">
<ResizablePanelGroup
direction="horizontal"
className="min-h-[200px] rounded-lg border"
>
<ResizablePanel defaultSize={25}>
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Sidebar</span>
</div>
</ResizablePanel>
<ResizableHandle withHandle />
<ResizablePanel defaultSize={75}>
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Content</span>
</div>
</ResizablePanel>
</ResizablePanelGroup>
</Example>
)
}
function ResizableNested() {
return (
<Example title="Nested">
<ResizablePanelGroup direction="horizontal" className="rounded-lg border">
<ResizablePanel defaultSize={50}>
<div className="flex h-[200px] items-center justify-center p-6">
<span className="font-semibold">One</span>
</div>
</ResizablePanel>
<ResizableHandle />
<ResizablePanel defaultSize={50}>
<ResizablePanelGroup direction="vertical">
<ResizablePanel defaultSize={25}>
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Two</span>
</div>
</ResizablePanel>
<ResizableHandle />
<ResizablePanel defaultSize={75}>
<div className="flex h-full items-center justify-center p-6">
<span className="font-semibold">Three</span>
</div>
</ResizablePanel>
</ResizablePanelGroup>
</ResizablePanel>
</ResizablePanelGroup>
</Example>
)
}
function ResizableControlled() {
const [sizes, setSizes] = React.useState([30, 70])
return (
<Example title="Controlled">
<ResizablePanelGroup
direction="horizontal"
className="min-h-[200px] rounded-lg border"
onLayout={(newSizes) => {
setSizes(newSizes)
}}
>
<ResizablePanel defaultSize={30} minSize={20}>
<div className="flex h-full flex-col items-center justify-center gap-2 p-6">
<span className="font-semibold">{Math.round(sizes[0] ?? 30)}%</span>
</div>
</ResizablePanel>
<ResizableHandle />
<ResizablePanel defaultSize={70} minSize={30}>
<div className="flex h-full flex-col items-center justify-center gap-2 p-6">
<span className="font-semibold">{Math.round(sizes[1] ?? 70)}%</span>
</div>
</ResizablePanel>
</ResizablePanelGroup>
</Example>
)
}