1
1
<script lang="ts" setup>
2
- import { computed , ref } from ' vue' ;
2
+ import { computed , ref , useCssModule } from ' vue' ;
3
3
4
4
import { directionsCursorMaps , type Direction , type ResizeData } from ' n8n-design-system/types' ;
5
5
@@ -32,6 +32,7 @@ interface ResizeProps {
32
32
scale? : number ;
33
33
gridSize? : number ;
34
34
supportedDirections? : Direction [];
35
+ outset? : boolean ;
35
36
}
36
37
37
38
const props = withDefaults (defineProps <ResizeProps >(), {
@@ -42,9 +43,12 @@ const props = withDefaults(defineProps<ResizeProps>(), {
42
43
minWidth: 0 ,
43
44
scale: 1 ,
44
45
gridSize: 20 ,
46
+ outset: false ,
45
47
supportedDirections : () => [],
46
48
});
47
49
50
+ const $style = useCssModule ();
51
+
48
52
const emit = defineEmits <{
49
53
resizestart: [];
50
54
resize: [value : ResizeData ];
@@ -70,6 +74,11 @@ const state = {
70
74
y: ref (0 ),
71
75
};
72
76
77
+ const classes = computed (() => ({
78
+ [$style .resize ]: true ,
79
+ [$style .outset ]: props .outset ,
80
+ }));
81
+
73
82
const mouseMove = (event : MouseEvent ) => {
74
83
event .preventDefault ();
75
84
event .stopPropagation ();
@@ -147,7 +156,7 @@ const resizerMove = (event: MouseEvent) => {
147
156
</script >
148
157
149
158
<template >
150
- <div :class =" $style.resize " >
159
+ <div :class =" classes " >
151
160
<div
152
161
v-for =" direction in enabledDirections"
153
162
:key =" direction"
@@ -161,6 +170,10 @@ const resizerMove = (event: MouseEvent) => {
161
170
162
171
<style lang="scss" module>
163
172
.resize {
173
+ --resizer--size : 12px ;
174
+ --resizer--side-offset : -2px ;
175
+ --resizer--corner-offset : -3px ;
176
+
164
177
position : relative ;
165
178
width : 100% ;
166
179
height : 100% ;
@@ -173,66 +186,71 @@ const resizerMove = (event: MouseEvent) => {
173
186
}
174
187
175
188
.right {
176
- width : 12 px ;
189
+ width : var ( --resizer--size ) ;
177
190
height : 100% ;
178
- top : -2 px ;
179
- right : -2 px ;
191
+ top : var ( --resizer--side-offset ) ;
192
+ right : var ( --resizer--side-offset ) ;
180
193
cursor : ew-resize ;
181
194
}
182
195
183
196
.top {
184
197
width : 100% ;
185
- height : 12 px ;
186
- top : -2 px ;
187
- left : -2 px ;
198
+ height : var ( --resizer--size ) ;
199
+ top : var ( --resizer--side-offset ) ;
200
+ left : var ( --resizer--side-offset ) ;
188
201
cursor : ns-resize ;
189
202
}
190
203
191
204
.bottom {
192
205
width : 100% ;
193
- height : 12 px ;
194
- bottom : -2 px ;
195
- left : -2 px ;
206
+ height : var ( --resizer--size ) ;
207
+ bottom : var ( --resizer--side-offset ) ;
208
+ left : var ( --resizer--side-offset ) ;
196
209
cursor : ns-resize ;
197
210
}
198
211
199
212
.left {
200
- width : 12 px ;
213
+ width : var ( --resizer--size ) ;
201
214
height : 100% ;
202
- top : -2 px ;
203
- left : -2 px ;
215
+ top : var ( --resizer--side-offset ) ;
216
+ left : var ( --resizer--side-offset ) ;
204
217
cursor : ew-resize ;
205
218
}
206
219
207
220
.topLeft {
208
- width : 12 px ;
209
- height : 12 px ;
210
- top : -3 px ;
211
- left : -3 px ;
221
+ width : var ( --resizer--size ) ;
222
+ height : var ( --resizer--size ) ;
223
+ top : var ( --resizer--corner-offset ) ;
224
+ left : var ( --resizer--corner-offset ) ;
212
225
cursor : nw-resize ;
213
226
}
214
227
215
228
.topRight {
216
- width : 12 px ;
217
- height : 12 px ;
218
- top : -3 px ;
219
- right : -3 px ;
229
+ width : var ( --resizer--size ) ;
230
+ height : var ( --resizer--size ) ;
231
+ top : var ( --resizer--corner-offset ) ;
232
+ right : var ( --resizer--corner-offset ) ;
220
233
cursor : ne-resize ;
221
234
}
222
235
223
236
.bottomLeft {
224
- width : 12 px ;
225
- height : 12 px ;
226
- bottom : -3 px ;
227
- left : -3 px ;
237
+ width : var ( --resizer--size ) ;
238
+ height : var ( --resizer--size ) ;
239
+ bottom : var ( --resizer--corner-offset ) ;
240
+ left : var ( --resizer--corner-offset ) ;
228
241
cursor : sw-resize ;
229
242
}
230
243
231
244
.bottomRight {
232
- width : 12 px ;
233
- height : 12 px ;
234
- bottom : -3 px ;
235
- right : -3 px ;
245
+ width : var ( --resizer--size ) ;
246
+ height : var ( --resizer--size ) ;
247
+ bottom : var ( --resizer--corner-offset ) ;
248
+ right : var ( --resizer--corner-offset ) ;
236
249
cursor : se-resize ;
237
250
}
251
+
252
+ .outset {
253
+ --resizer--side-offset : calc (-1 * var (--resizer--size ) + 2px );
254
+ --resizer--corner-offset : calc (-1 * var (--resizer--size ) + 3px );
255
+ }
238
256
</style >
0 commit comments