npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@v3layout/vue3-resizable

v1.0.0

Published

Vue resizable component

Readme

Vue3 Resizable

✨ Features

  • Compatibility: Compatible with server-rendered apps, PC, and mobile devices.

  • Resizable Component: Allows elements to be resized with optional constraints. It supports the following features:

  • 可定制的调整轴(“x”、“y”或“两者都有”)。

  • 可选锁定纵横比。 -最小和最大尺寸限制。

  • 可定制的调整大小手柄,包括使用自定义 Vue 组件或函数作为手柄的能力。

  • 与可拖动组件(“DraggableCore”)集成,可平滑调整大小。

  • 发出调整大小开始、调整大小和调整大小停止的事件,允许自定义逻辑和集成。

  • 支持变换比例调整,这对已变换父级中的图元很有用。

  • ResizableBox Component:

  • “可调整大小”组件的所有功能。

  • 通过反应状态直接控制框的大小,在调整大小操作期间自动更新大小。

  • 轻松与插槽集成,将自定义内容放置在可调整大小的框内。

  • 预定义样式可立即使用,并可通过道具覆盖或扩展这些样式。

Quick Start

Step 1: Installation

npm install @v3layout/vue3-resizable

or if you prefer using Yarn:

yarn add @v3layout/vue3-resizable

or if you prefer using Pnpm:

pnpm add @v3layout/vue3-resizable

Step 2: Importing

In your vue3 component, import @v3layout/vue3-resizable:

import { ResizableBox, Resizable } from "@v3layout/vue3-resizable";

Step 3: Using @v3layout/vue3-resizable

Now, you can use the Draggable component in your vue3 application. Wrap any element with <Draggable> to make it draggable:

<template>
  <ResizableBox className="box" :width="200" :height="200">
    <span class="text">I can now resize the box</span>
  </ResizableBox>
</template>

<script>
import { ResizableBox } from "@v3layout/vue3-resizable";

export default {
  components: {
    ResizableBox,
  },
};
</script>

<style></style>

Step 4: Enjoy!

That's it! You've successfully integrated resizable functionality into your vue3 application. Customize it further according to your needs.

A simple component for making elements resizable box.

<ResizableBox className="box" :width="200" :height="200">
  <span class="text">{{"<ResizableBox>"}}</span>
</ResizableBox>

<Resizable>

const {Resizable} = require('@v3layout/vue3-resizable');

// ES6
import { Resizable } from '@v3layout/vue3-resizable';

const Example = defineComponent({
  const state = reactive({
    width: 200,
    height: 200
  });
  setup () {
    const onResize = (event, {node, size, handle}) => {
    state.width = size.width
    state.height = size.height
    };
    return () => (
      <Resizable height={this.state.height} width={this.state.width} fnResize={this.onResize}>
        <div className="box" style={{width: this.state.width + 'px', height: this.state.height + 'px'}}>
          <span>Contents</span>
        </div>
      </Resizable>
    )
  }
})

<ResizableBox>

const {ResizableBox} = require('@v3layout/vue3-resizable');

// ES6
import { ResizableBox } from '@v3layout/vue3-resizable';

const Example = defineComponent({
  const state = reactive({
    width: 200,
    height: 200
  });
  setup () {
    const onResize = (event, {node, size, handle}) => {
    state.width = size.width
    state.height = size.height
    };
    return () => (
      <ResizableBox width={200} height={200} draggableOpts={{grid: [25, 25]}}
          minConstraints={[100, 100]} maxConstraints={[300, 300]}>
        <span>Contents</span>
      </ResizableBox>
    )
  }
})

Props

这些道具适用于“”和“”。不在下面列表中的未知道具将传递给子组件。

type ResizeCallbackData = {
  node: HTMLElement,
  size: {width: number, height: number},
  handle: ResizeHandleAxis
};
type ResizeHandleAxis = 's' | 'w' | 'e' | 'n' | 'sw' | 'nw' | 'se' | 'ne';

type ResizableProps {
    axis: 'both' | 'x' | 'y' | 'none' = 'both',
    className?: string,
    draggableOpts?: Object,
    handle?: ((resizeHandleAxis: ResizeHandleAxis) => VNode) | VNode,
    handleSize: [number, number],
    lockAspectRatio: boolean,
    minConstraints: [number, number],
    maxConstraints: [number, number],
    fnResizeStop?: (e: Event, data: ResizeCallbackData) => void,
    fnResizeStart?: (e: Event, data: ResizeCallbackData) => void,
    fnResize?: (e: Event, data: ResizeCallbackData) => void,
    resizeHandles: ResizeHandleAxis[],
    transformScale: number,
    width: number,
    height: number,
    hoverHandles?: boolean
  }

The following props can also be used on <ResizableBox>:

{
  style?: Object
}

如果将“width”或“height”传递给“”的“style”道具,则会被忽略,因为这是内部函数所必需的。

####调整手柄大小

如果重写 resize 句柄,我们希望传递给新句柄的任何ref都表示底层 DOM 元素。

这是必需的,因为“vue3 resizable”必须能够访问底层 DOM 节点以附加处理程序并测量位置增量。

有几种方法可以做到这一点:

Native DOM Element
<Resizable handle={<div class="foo" />} />
Custom Function

你可以将一个函数定义为句柄,它只会接收一个轴(见上面的ResizeHandleAxis类型)和引用。这可能更容易阅读,具体取决于你的编码风格。

const MyHandle = (props) => {
  return <div ref={props.innerRef} className="foo" {...props} />;
};

<Resizable
  handle={(handleAxis, ref) => (
    <MyHandle
      innerRef={ref}
      className={`foo handle-${handleAxis}`}
      {...props}
    />
  )}
/>;

License

MIT