resizable

Three-panel layout with animated pill handles

Three-panel layout with animated pill handles

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

src/resizable/c-resizable-9.vue

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

const pillClasses =
  "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"
</script>

<template>
  <div class="mx-auto w-full max-w-lg">
    <ResizablePanelGroup direction="horizontal" class="rounded-2xl min-h-[200px] border">
      <ResizablePanel :default-size="25" :min-size="15">
        <div class="flex h-full items-center justify-center p-6">
          <span class="text-sm font-semibold">Files</span>
        </div>
      </ResizablePanel>
      <ResizableHandle :class="pillClasses" />
      <ResizablePanel :default-size="50" :min-size="25">
        <div class="flex h-full items-center justify-center p-6">
          <span class="text-sm font-semibold">Editor</span>
        </div>
      </ResizablePanel>
      <ResizableHandle :class="pillClasses" />
      <ResizablePanel :default-size="25" :min-size="15">
        <div class="flex h-full items-center justify-center p-6">
          <span class="text-sm font-semibold">Preview</span>
        </div>
      </ResizablePanel>
    </ResizablePanelGroup>
  </div>
</template>

Установка

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

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

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