Resize Bounding is a simple component for Vue3/React that allows you to intuitively resize nested content using draggable border panels.
Package name | Installation | Example | Version / License | |
---|---|---|---|---|
Vue3 Resize Bounding | npm i vue3-resize-bounding |
stackblitz, github | ||
React Resize Bounding | npm i react-resize-bounding |
stackblitz, github | ||
UI Component for Figma | link |
Vue3 Usage
<!-- @filename: MyComponent.vue -->
<script setup lang="ts">
import { ref } from "vue";
import ResizeBounding from "vue3-resize-bounding";
const container = ref({ width: 320, height: 480 });
</script>
<template>
<ResizeBounding
:width="container.width"
:height="container.height"
:min-width="240"
:max-width="480"
:min-height="120"
:directions="'hv'"
:options="{
knob: {
show: true
}
}"
:style="{ border: '1px solid gray' }"
@update:width="(width) => (container.width = width)"
@update:height="(height) => (container.height = height)"
>
<!-- CONTENT START -->
<div :style="{ width: '100%', height: '100%' }">My Container</div>
<!-- CONTENT END -->
<!-- KNOB INNER CONTENT START -->
<template #knob>
<div class="some-icon"></div>
</template>
<!-- KNOB INNER CONTENT END -->
</ResizeBounding>
</template>
React Usage
// @filename: MyComponent.tsx (.js)
import { useState } from "react";
import ResizeBounding from "react-resize-bounding";
export default function App() {
const [width, setWidth] = useState(320);
const [height, setHeight] = useState(480);
return (
<ResizeBounding
width={width}
height={height}
directions="hv"
updateWidth={(width) => setWidth(width)}
updateHeight={(height) => setHeight(height)}
style={{ border: "1px solid gray" }}
options={{
knob: {
show: true,
},
}}
>
{/* CONTENT START */}
<div style={{ width: "100%", height: "100%" }}>My Container</div>
{/* CONTENT END */}
</ResizeBounding>
);
}
Mikhail Grebennikov - yamogoo