@sepveneto/free-dom 0.2.0 → 0.4.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +3 -1
- package/dist/index.d.ts +18 -0
- package/dist/index.js +41 -11
- package/dist/index.mjs +43 -12
- package/package.json +8 -8
package/dist/index.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* ../../../../../../../tmp/tmp-
|
|
1
|
+
/* ../../../../../../../tmp/tmp-1773-CH54J03asN0x/core/src/style/index.css */
|
|
2
2
|
:root {
|
|
3
3
|
--free-dom-theme: #4089ef;
|
|
4
4
|
--free-dom-line: var(--free-dom-theme);
|
|
@@ -23,10 +23,12 @@
|
|
|
23
23
|
}
|
|
24
24
|
.free-dom__widget-wrapper {
|
|
25
25
|
display: inline-block;
|
|
26
|
+
box-sizing: border-box;
|
|
26
27
|
border: 1px dashed transparent;
|
|
27
28
|
transition: border-color 0.3s;
|
|
28
29
|
box-sizing: content-box;
|
|
29
30
|
user-select: none;
|
|
31
|
+
overflow: hidden;
|
|
30
32
|
}
|
|
31
33
|
.free-dom__widget-wrapper.is-absolute {
|
|
32
34
|
position: absolute;
|
package/dist/index.d.ts
CHANGED
|
@@ -43,6 +43,10 @@ declare const freeDom: vue_demi.DefineComponent<{
|
|
|
43
43
|
type: BooleanConstructor;
|
|
44
44
|
default: undefined;
|
|
45
45
|
};
|
|
46
|
+
grid: {
|
|
47
|
+
type: vue_demi.PropType<[number, number]>;
|
|
48
|
+
default: undefined;
|
|
49
|
+
};
|
|
46
50
|
}, {
|
|
47
51
|
widgetRef: vue_demi.ShallowRef<any>;
|
|
48
52
|
canMove: vue_demi.ComputedRef<boolean>;
|
|
@@ -101,6 +105,10 @@ declare const freeDom: vue_demi.DefineComponent<{
|
|
|
101
105
|
type: BooleanConstructor;
|
|
102
106
|
default: undefined;
|
|
103
107
|
};
|
|
108
|
+
grid: {
|
|
109
|
+
type: vue_demi.PropType<[number, number]>;
|
|
110
|
+
default: undefined;
|
|
111
|
+
};
|
|
104
112
|
}>> & {
|
|
105
113
|
"onUpdate:x"?: ((...args: any[]) => any) | undefined;
|
|
106
114
|
"onUpdate:y"?: ((...args: any[]) => any) | undefined;
|
|
@@ -120,6 +128,7 @@ declare const freeDom: vue_demi.DefineComponent<{
|
|
|
120
128
|
limitHeight: number;
|
|
121
129
|
handler: "dot" | "mark";
|
|
122
130
|
diagonal: boolean;
|
|
131
|
+
grid: [number, number];
|
|
123
132
|
}>;
|
|
124
133
|
declare const freeScene: vue_demi.DefineComponent<{
|
|
125
134
|
absolute: {
|
|
@@ -141,6 +150,10 @@ declare const freeScene: vue_demi.DefineComponent<{
|
|
|
141
150
|
type: BooleanConstructor;
|
|
142
151
|
default: undefined;
|
|
143
152
|
};
|
|
153
|
+
grid: {
|
|
154
|
+
type: vue_demi.PropType<[number, number]>;
|
|
155
|
+
default: undefined;
|
|
156
|
+
};
|
|
144
157
|
}, {
|
|
145
158
|
rectRef: vue_demi.ShallowRef<null>;
|
|
146
159
|
}, unknown, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, {}, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<vue_demi.ExtractPropTypes<{
|
|
@@ -163,12 +176,17 @@ declare const freeScene: vue_demi.DefineComponent<{
|
|
|
163
176
|
type: BooleanConstructor;
|
|
164
177
|
default: undefined;
|
|
165
178
|
};
|
|
179
|
+
grid: {
|
|
180
|
+
type: vue_demi.PropType<[number, number]>;
|
|
181
|
+
default: undefined;
|
|
182
|
+
};
|
|
166
183
|
}>>, {
|
|
167
184
|
absolute: boolean;
|
|
168
185
|
move: boolean;
|
|
169
186
|
preview: boolean;
|
|
170
187
|
handler: "dot" | "mark";
|
|
171
188
|
diagonal: boolean;
|
|
189
|
+
grid: [number, number];
|
|
172
190
|
diff: number;
|
|
173
191
|
}>;
|
|
174
192
|
|
package/dist/index.js
CHANGED
|
@@ -85,10 +85,15 @@ var SceneToken = Symbol("Scene");
|
|
|
85
85
|
function clamp(value, min, max = Infinity) {
|
|
86
86
|
return Math.max(Math.min(value, max), min);
|
|
87
87
|
}
|
|
88
|
+
function snapToGrid(grid, pendingX, pendingY) {
|
|
89
|
+
const x = Math.round(pendingX / grid[0]) * grid[0];
|
|
90
|
+
const y = Math.round(pendingY / grid[1]) * grid[1];
|
|
91
|
+
return [x, y];
|
|
92
|
+
}
|
|
88
93
|
|
|
89
94
|
// src/hooks/use-resize.ts
|
|
90
95
|
var MIN_SIZE = 20;
|
|
91
|
-
function useResize(startX, startY, rect, dot, diagonal, callbacks) {
|
|
96
|
+
function useResize(startX, startY, rect, dot, diagonal, snapGrid, callbacks) {
|
|
92
97
|
const isT = dot ? /t/.test(dot) : false;
|
|
93
98
|
const isL = dot ? /l/.test(dot) : false;
|
|
94
99
|
const isB = dot ? /b/.test(dot) : false;
|
|
@@ -97,8 +102,11 @@ function useResize(startX, startY, rect, dot, diagonal, callbacks) {
|
|
|
97
102
|
const { width: cWidth, height: cHeight, x, y } = rect;
|
|
98
103
|
const move = (mouseEvt) => {
|
|
99
104
|
const { clientX, clientY } = mouseEvt;
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
let deltaX = clientX - startX;
|
|
106
|
+
let deltaY = clientY - startY;
|
|
107
|
+
if (Array.isArray(snapGrid)) {
|
|
108
|
+
[deltaX, deltaY] = snapToGrid(snapGrid, deltaX, deltaY);
|
|
109
|
+
}
|
|
102
110
|
const rate = cWidth / cHeight;
|
|
103
111
|
const newWidth = cWidth + (isL ? -deltaX : isR ? deltaX : 0);
|
|
104
112
|
const newHeight = cHeight + (isT ? -deltaY : isB ? deltaY : 0);
|
|
@@ -177,6 +185,10 @@ var FreeDom = (0, import_vue_demi2.defineComponent)({
|
|
|
177
185
|
diagonal: {
|
|
178
186
|
type: Boolean,
|
|
179
187
|
default: void 0
|
|
188
|
+
},
|
|
189
|
+
grid: {
|
|
190
|
+
type: Object,
|
|
191
|
+
default: void 0
|
|
180
192
|
}
|
|
181
193
|
},
|
|
182
194
|
emits: ["update:x", "update:y", "update:width", "update:height", "select"],
|
|
@@ -188,6 +200,7 @@ var FreeDom = (0, import_vue_demi2.defineComponent)({
|
|
|
188
200
|
const canMove = (0, import_vue_demi2.computed)(() => !_preview.value && (SceneContext?.move || props.move));
|
|
189
201
|
const isAbsolute = (0, import_vue_demi2.computed)(() => props.absolute ?? SceneContext?.absolute ?? true);
|
|
190
202
|
const handlerType = (0, import_vue_demi2.computed)(() => props.handler ?? SceneContext?.handler ?? "dot");
|
|
203
|
+
const snapGrid = (0, import_vue_demi2.computed)(() => props.grid ?? SceneContext?.grid);
|
|
191
204
|
const diagonal = (0, import_vue_demi2.computed)(() => props.diagonal ?? SceneContext?.diagonal ?? true);
|
|
192
205
|
const widgetRef = (0, import_vue_demi2.shallowRef)();
|
|
193
206
|
const _style = (0, import_vue_demi2.ref)({});
|
|
@@ -263,7 +276,7 @@ var FreeDom = (0, import_vue_demi2.defineComponent)({
|
|
|
263
276
|
isScale.value = true;
|
|
264
277
|
active.value = true;
|
|
265
278
|
const { clientX, clientY } = evt;
|
|
266
|
-
useResize(clientX, clientY, _rect, dot, diagonal.value, {
|
|
279
|
+
useResize(clientX, clientY, _rect, dot, diagonal.value, snapGrid.value, {
|
|
267
280
|
onMove() {
|
|
268
281
|
if (!checkValid(_rect))
|
|
269
282
|
return;
|
|
@@ -403,10 +416,25 @@ var FreeDom = (0, import_vue_demi2.defineComponent)({
|
|
|
403
416
|
onMousedown: (evt) => this.onMousedownDot(evt, dot)
|
|
404
417
|
});
|
|
405
418
|
}) : null;
|
|
406
|
-
const
|
|
419
|
+
const defaultSlots = typeof this.$slots.default === "function" ? this.$slots.default() : this.$slots.default;
|
|
420
|
+
if (!defaultSlots) {
|
|
421
|
+
console.error("[free-dom] must have a default slot");
|
|
422
|
+
return null;
|
|
423
|
+
}
|
|
424
|
+
if (defaultSlots.length > 1) {
|
|
425
|
+
console.error("[free-dom] must have only one default slot");
|
|
426
|
+
return null;
|
|
427
|
+
}
|
|
428
|
+
const defaultSlot = defaultSlots[0];
|
|
429
|
+
const node = (0, import_vue_demi2.cloneVNode)(defaultSlot);
|
|
430
|
+
if (Array.isArray(node.children)) {
|
|
431
|
+
node.children = [...node.children, ...dots];
|
|
432
|
+
} else {
|
|
433
|
+
console.error("[free-dom] generate resiable handles failed");
|
|
434
|
+
}
|
|
407
435
|
if (import_vue_demi2.isVue2) {
|
|
408
436
|
return (0, import_vue_demi2.h)(
|
|
409
|
-
|
|
437
|
+
node,
|
|
410
438
|
{
|
|
411
439
|
class: [
|
|
412
440
|
"free-dom__widget-wrapper",
|
|
@@ -420,12 +448,11 @@ var FreeDom = (0, import_vue_demi2.defineComponent)({
|
|
|
420
448
|
on: {
|
|
421
449
|
mousedown: this.onMousedown
|
|
422
450
|
}
|
|
423
|
-
}
|
|
424
|
-
[dots, defaultSlot]
|
|
451
|
+
}
|
|
425
452
|
);
|
|
426
453
|
}
|
|
427
454
|
return (0, import_vue_demi2.h)(
|
|
428
|
-
|
|
455
|
+
node,
|
|
429
456
|
{
|
|
430
457
|
ref: "widgetRef",
|
|
431
458
|
class: [
|
|
@@ -437,8 +464,7 @@ var FreeDom = (0, import_vue_demi2.defineComponent)({
|
|
|
437
464
|
],
|
|
438
465
|
style: this.wrapStyle,
|
|
439
466
|
onMousedown: this.onMousedown
|
|
440
|
-
}
|
|
441
|
-
[defaultSlot, dots]
|
|
467
|
+
}
|
|
442
468
|
);
|
|
443
469
|
}
|
|
444
470
|
});
|
|
@@ -628,6 +654,10 @@ var freeDomWrapProps = {
|
|
|
628
654
|
diagonal: {
|
|
629
655
|
type: Boolean,
|
|
630
656
|
default: void 0
|
|
657
|
+
},
|
|
658
|
+
grid: {
|
|
659
|
+
type: Object,
|
|
660
|
+
default: void 0
|
|
631
661
|
}
|
|
632
662
|
};
|
|
633
663
|
var FreeDomWrap = (0, import_vue_demi4.defineComponent)({
|
package/dist/index.mjs
CHANGED
|
@@ -17,7 +17,8 @@ import {
|
|
|
17
17
|
reactive,
|
|
18
18
|
isVue2,
|
|
19
19
|
shallowRef,
|
|
20
|
-
watchEffect
|
|
20
|
+
watchEffect,
|
|
21
|
+
cloneVNode
|
|
21
22
|
} from "vue-demi";
|
|
22
23
|
|
|
23
24
|
// src/hooks/use-normalize-style.ts
|
|
@@ -72,10 +73,15 @@ var SceneToken = Symbol("Scene");
|
|
|
72
73
|
function clamp(value, min, max = Infinity) {
|
|
73
74
|
return Math.max(Math.min(value, max), min);
|
|
74
75
|
}
|
|
76
|
+
function snapToGrid(grid, pendingX, pendingY) {
|
|
77
|
+
const x = Math.round(pendingX / grid[0]) * grid[0];
|
|
78
|
+
const y = Math.round(pendingY / grid[1]) * grid[1];
|
|
79
|
+
return [x, y];
|
|
80
|
+
}
|
|
75
81
|
|
|
76
82
|
// src/hooks/use-resize.ts
|
|
77
83
|
var MIN_SIZE = 20;
|
|
78
|
-
function useResize(startX, startY, rect, dot, diagonal, callbacks) {
|
|
84
|
+
function useResize(startX, startY, rect, dot, diagonal, snapGrid, callbacks) {
|
|
79
85
|
const isT = dot ? /t/.test(dot) : false;
|
|
80
86
|
const isL = dot ? /l/.test(dot) : false;
|
|
81
87
|
const isB = dot ? /b/.test(dot) : false;
|
|
@@ -84,8 +90,11 @@ function useResize(startX, startY, rect, dot, diagonal, callbacks) {
|
|
|
84
90
|
const { width: cWidth, height: cHeight, x, y } = rect;
|
|
85
91
|
const move = (mouseEvt) => {
|
|
86
92
|
const { clientX, clientY } = mouseEvt;
|
|
87
|
-
|
|
88
|
-
|
|
93
|
+
let deltaX = clientX - startX;
|
|
94
|
+
let deltaY = clientY - startY;
|
|
95
|
+
if (Array.isArray(snapGrid)) {
|
|
96
|
+
[deltaX, deltaY] = snapToGrid(snapGrid, deltaX, deltaY);
|
|
97
|
+
}
|
|
89
98
|
const rate = cWidth / cHeight;
|
|
90
99
|
const newWidth = cWidth + (isL ? -deltaX : isR ? deltaX : 0);
|
|
91
100
|
const newHeight = cHeight + (isT ? -deltaY : isB ? deltaY : 0);
|
|
@@ -164,6 +173,10 @@ var FreeDom = defineComponent({
|
|
|
164
173
|
diagonal: {
|
|
165
174
|
type: Boolean,
|
|
166
175
|
default: void 0
|
|
176
|
+
},
|
|
177
|
+
grid: {
|
|
178
|
+
type: Object,
|
|
179
|
+
default: void 0
|
|
167
180
|
}
|
|
168
181
|
},
|
|
169
182
|
emits: ["update:x", "update:y", "update:width", "update:height", "select"],
|
|
@@ -175,6 +188,7 @@ var FreeDom = defineComponent({
|
|
|
175
188
|
const canMove = computed(() => !_preview.value && (SceneContext?.move || props.move));
|
|
176
189
|
const isAbsolute = computed(() => props.absolute ?? SceneContext?.absolute ?? true);
|
|
177
190
|
const handlerType = computed(() => props.handler ?? SceneContext?.handler ?? "dot");
|
|
191
|
+
const snapGrid = computed(() => props.grid ?? SceneContext?.grid);
|
|
178
192
|
const diagonal = computed(() => props.diagonal ?? SceneContext?.diagonal ?? true);
|
|
179
193
|
const widgetRef = shallowRef();
|
|
180
194
|
const _style = ref2({});
|
|
@@ -250,7 +264,7 @@ var FreeDom = defineComponent({
|
|
|
250
264
|
isScale.value = true;
|
|
251
265
|
active.value = true;
|
|
252
266
|
const { clientX, clientY } = evt;
|
|
253
|
-
useResize(clientX, clientY, _rect, dot, diagonal.value, {
|
|
267
|
+
useResize(clientX, clientY, _rect, dot, diagonal.value, snapGrid.value, {
|
|
254
268
|
onMove() {
|
|
255
269
|
if (!checkValid(_rect))
|
|
256
270
|
return;
|
|
@@ -390,10 +404,25 @@ var FreeDom = defineComponent({
|
|
|
390
404
|
onMousedown: (evt) => this.onMousedownDot(evt, dot)
|
|
391
405
|
});
|
|
392
406
|
}) : null;
|
|
393
|
-
const
|
|
407
|
+
const defaultSlots = typeof this.$slots.default === "function" ? this.$slots.default() : this.$slots.default;
|
|
408
|
+
if (!defaultSlots) {
|
|
409
|
+
console.error("[free-dom] must have a default slot");
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
if (defaultSlots.length > 1) {
|
|
413
|
+
console.error("[free-dom] must have only one default slot");
|
|
414
|
+
return null;
|
|
415
|
+
}
|
|
416
|
+
const defaultSlot = defaultSlots[0];
|
|
417
|
+
const node = cloneVNode(defaultSlot);
|
|
418
|
+
if (Array.isArray(node.children)) {
|
|
419
|
+
node.children = [...node.children, ...dots];
|
|
420
|
+
} else {
|
|
421
|
+
console.error("[free-dom] generate resiable handles failed");
|
|
422
|
+
}
|
|
394
423
|
if (isVue2) {
|
|
395
424
|
return h(
|
|
396
|
-
|
|
425
|
+
node,
|
|
397
426
|
{
|
|
398
427
|
class: [
|
|
399
428
|
"free-dom__widget-wrapper",
|
|
@@ -407,12 +436,11 @@ var FreeDom = defineComponent({
|
|
|
407
436
|
on: {
|
|
408
437
|
mousedown: this.onMousedown
|
|
409
438
|
}
|
|
410
|
-
}
|
|
411
|
-
[dots, defaultSlot]
|
|
439
|
+
}
|
|
412
440
|
);
|
|
413
441
|
}
|
|
414
442
|
return h(
|
|
415
|
-
|
|
443
|
+
node,
|
|
416
444
|
{
|
|
417
445
|
ref: "widgetRef",
|
|
418
446
|
class: [
|
|
@@ -424,8 +452,7 @@ var FreeDom = defineComponent({
|
|
|
424
452
|
],
|
|
425
453
|
style: this.wrapStyle,
|
|
426
454
|
onMousedown: this.onMousedown
|
|
427
|
-
}
|
|
428
|
-
[defaultSlot, dots]
|
|
455
|
+
}
|
|
429
456
|
);
|
|
430
457
|
}
|
|
431
458
|
});
|
|
@@ -615,6 +642,10 @@ var freeDomWrapProps = {
|
|
|
615
642
|
diagonal: {
|
|
616
643
|
type: Boolean,
|
|
617
644
|
default: void 0
|
|
645
|
+
},
|
|
646
|
+
grid: {
|
|
647
|
+
type: Object,
|
|
648
|
+
default: void 0
|
|
618
649
|
}
|
|
619
650
|
};
|
|
620
651
|
var FreeDomWrap = defineComponent3({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sepveneto/free-dom",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0-beta.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -15,6 +15,12 @@
|
|
|
15
15
|
},
|
|
16
16
|
"./css": "./dist/index.css"
|
|
17
17
|
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsup",
|
|
20
|
+
"dev": "vue-demi-switch 3 && vitepress dev docs",
|
|
21
|
+
"release": "bumpp package.json --commit --push --tag",
|
|
22
|
+
"test": "vitest"
|
|
23
|
+
},
|
|
18
24
|
"keywords": [],
|
|
19
25
|
"author": "",
|
|
20
26
|
"license": "ISC",
|
|
@@ -35,11 +41,5 @@
|
|
|
35
41
|
"repository": {
|
|
36
42
|
"type": "git",
|
|
37
43
|
"url": "https://github.com/SepVeneto/free-dom"
|
|
38
|
-
},
|
|
39
|
-
"scripts": {
|
|
40
|
-
"build": "tsup",
|
|
41
|
-
"dev": "vue-demi-switch 3 && vitepress dev docs",
|
|
42
|
-
"release": "bumpp package.json --commit --push --tag",
|
|
43
|
-
"test": "vitest"
|
|
44
44
|
}
|
|
45
|
-
}
|
|
45
|
+
}
|