resizable

Nested layout with animated pill handles

Nested layout with animated pill handles

Загрузка превью…

src/resizable/c-resizable-8.vue

<script setup lang="ts">
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable"

const verticalPillClasses =
  "before:pointer-events-none before:absolute before:top-1/2 before:left-1/2 before:z-10 before:h-6 before:w-1 before:-translate-x-1/2 before:-translate-y-1/2 before:rounded-full before:bg-muted-foreground/25 before:transition-all before:duration-300 before:ease-[cubic-bezier(0.32,0.72,0,1)] hover:before:h-10 hover:before:bg-muted-foreground/40 active:before:h-12 active:before:w-1.5 active:before:bg-primary"

const horizontalPillClasses =
  "before:pointer-events-none before:absolute before:top-1/2 before:left-1/2 before:z-10 before:h-1 before:w-6 before:-translate-x-1/2 before:-translate-y-1/2 before:rounded-full before:bg-muted-foreground/25 before:transition-all before:duration-300 before:ease-[cubic-bezier(0.32,0.72,0,1)] hover:before:w-10 hover:before:bg-muted-foreground/40 active:before:h-1.5 active:before:w-12 active:before:bg-primary"
</script>

<template>
  <div class="mx-auto w-full max-w-lg">
    <ResizablePanelGroup direction="horizontal" class="rounded-2xl min-h-[300px] border">
      <ResizablePanel :default-size="30" :min-size="15">
        <div class="flex h-full items-center justify-center p-6">
          <span class="text-sm font-semibold">Nav</span>
        </div>
      </ResizablePanel>
      <ResizableHandle :class="verticalPillClasses" />
      <ResizablePanel :default-size="70">
        <ResizablePanelGroup direction="vertical">
          <ResizablePanel :default-size="25">
            <div class="flex h-full items-center justify-center p-6">
              <span class="text-sm font-semibold">Toolbar</span>
            </div>
          </ResizablePanel>
          <ResizableHandle :class="horizontalPillClasses" />
          <ResizablePanel :default-size="75">
            <div class="flex h-full items-center justify-center p-6">
              <span class="text-sm font-semibold">Editor</span>
            </div>
          </ResizablePanel>
        </ResizablePanelGroup>
      </ResizablePanel>
    </ResizablePanelGroup>
  </div>
</template>

Установка

npx shadcn-vue@latest add https://revueui.rootapi.dev/r/c-resizable-8.json

Зависимости реестра

Источник: порт из ReUI (Keenthemes, MIT)