@leafer-in/viewport 1.4.1 → 1.4.2
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/package.json +4 -4
- package/dist/filter.cjs +0 -357
- package/dist/filter.cjs.map +0 -1
- package/dist/filter.esm.js +0 -350
- package/dist/filter.esm.js.map +0 -1
- package/dist/filter.esm.min.js +0 -2
- package/dist/filter.esm.min.js.map +0 -1
- package/dist/filter.js +0 -361
- package/dist/filter.js.map +0 -1
- package/dist/filter.min.cjs +0 -2
- package/dist/filter.min.cjs.map +0 -1
- package/dist/filter.min.js +0 -2
- package/dist/filter.min.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leafer-in/viewport",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.2",
|
|
4
4
|
"description": "@leafer-in/viewport",
|
|
5
5
|
"author": "Chao (Leafer) Wan",
|
|
6
6
|
"license": "MIT",
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
"leaferjs"
|
|
35
35
|
],
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@leafer-ui/core": "^1.4.
|
|
38
|
-
"@leafer-ui/interface": "^1.4.
|
|
39
|
-
"@leafer-in/interface": "^1.4.
|
|
37
|
+
"@leafer-ui/core": "^1.4.2",
|
|
38
|
+
"@leafer-ui/interface": "^1.4.2",
|
|
39
|
+
"@leafer-in/interface": "^1.4.2"
|
|
40
40
|
}
|
|
41
41
|
}
|
package/dist/filter.cjs
DELETED
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var core = require('@leafer-ui/core');
|
|
4
|
-
|
|
5
|
-
function addViewport(leafer, mergeConfig, custom) {
|
|
6
|
-
addViewportConfig(leafer.parentApp ? leafer.parentApp : leafer, mergeConfig);
|
|
7
|
-
if (leafer.isApp || custom)
|
|
8
|
-
return;
|
|
9
|
-
leafer.__eventIds.push(leafer.on_(core.MoveEvent.BEFORE_MOVE, (e) => {
|
|
10
|
-
leafer.zoomLayer.move(leafer.getValidMove(e.moveX, e.moveY));
|
|
11
|
-
}), leafer.on_(core.ZoomEvent.BEFORE_ZOOM, (e) => {
|
|
12
|
-
const { zoomLayer } = leafer;
|
|
13
|
-
const changeScale = leafer.getValidScale(e.scale);
|
|
14
|
-
if (changeScale !== 1) {
|
|
15
|
-
core.PointHelper.scaleOf(zoomLayer, e, changeScale);
|
|
16
|
-
zoomLayer.scale = zoomLayer.__.scaleX * changeScale;
|
|
17
|
-
}
|
|
18
|
-
}));
|
|
19
|
-
}
|
|
20
|
-
function addViewportConfig(leafer, mergeConfig) {
|
|
21
|
-
const viewportConfig = {
|
|
22
|
-
wheel: { preventDefault: true },
|
|
23
|
-
touch: { preventDefault: true },
|
|
24
|
-
pointer: { preventDefaultMenu: true }
|
|
25
|
-
};
|
|
26
|
-
if (mergeConfig)
|
|
27
|
-
core.DataHelper.assign(viewportConfig, mergeConfig);
|
|
28
|
-
core.DataHelper.assign(leafer.config, viewportConfig, leafer.userConfig);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function custom(leafer) {
|
|
32
|
-
addViewport(leafer, null, true);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function design(leafer) {
|
|
36
|
-
addViewport(leafer, {
|
|
37
|
-
zoom: {
|
|
38
|
-
min: 0.01,
|
|
39
|
-
max: 256
|
|
40
|
-
},
|
|
41
|
-
move: {
|
|
42
|
-
holdSpaceKey: true,
|
|
43
|
-
holdMiddleKey: true,
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function document(leafer) {
|
|
49
|
-
addViewport(leafer, {
|
|
50
|
-
zoom: { min: 1 },
|
|
51
|
-
move: { scroll: 'limit' }
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const debug = core.Debug.get('LeaferTypeCreator');
|
|
56
|
-
const LeaferTypeCreator = {
|
|
57
|
-
list: {},
|
|
58
|
-
register(name, fn) {
|
|
59
|
-
list[name] && debug.repeat(name);
|
|
60
|
-
list[name] = fn;
|
|
61
|
-
},
|
|
62
|
-
run(name, leafer) {
|
|
63
|
-
const fn = list[name];
|
|
64
|
-
fn && fn(leafer);
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
const { list, register } = LeaferTypeCreator;
|
|
68
|
-
register('viewport', addViewport);
|
|
69
|
-
register('custom', custom);
|
|
70
|
-
register('design', design);
|
|
71
|
-
register('document', document);
|
|
72
|
-
|
|
73
|
-
const MultiTouchHelper = {
|
|
74
|
-
getData(list) {
|
|
75
|
-
const a = list[0], b = list[1];
|
|
76
|
-
const lastCenter = core.PointHelper.getCenter(a.from, b.from);
|
|
77
|
-
const center = core.PointHelper.getCenter(a.to, b.to);
|
|
78
|
-
const move = { x: center.x - lastCenter.x, y: center.y - lastCenter.y };
|
|
79
|
-
const lastDistance = core.PointHelper.getDistance(a.from, b.from);
|
|
80
|
-
const distance = core.PointHelper.getDistance(a.to, b.to);
|
|
81
|
-
const scale = distance / lastDistance;
|
|
82
|
-
const rotation = core.PointHelper.getRotation(a.from, b.from, a.to, b.to);
|
|
83
|
-
return { move, scale, rotation, center };
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
const WheelEventHelper = {
|
|
88
|
-
getMove(event, config) {
|
|
89
|
-
let { moveSpeed } = config;
|
|
90
|
-
let { deltaX, deltaY } = event;
|
|
91
|
-
if (event.shiftKey && !deltaX) {
|
|
92
|
-
deltaX = deltaY;
|
|
93
|
-
deltaY = 0;
|
|
94
|
-
}
|
|
95
|
-
if (deltaX > 50)
|
|
96
|
-
deltaX = Math.max(50, deltaX / 3);
|
|
97
|
-
if (deltaY > 50)
|
|
98
|
-
deltaY = Math.max(50, deltaY / 3);
|
|
99
|
-
return { x: -deltaX * moveSpeed * 2, y: -deltaY * moveSpeed * 2 };
|
|
100
|
-
},
|
|
101
|
-
getScale(event, config) {
|
|
102
|
-
let zoom;
|
|
103
|
-
let scale = 1;
|
|
104
|
-
let { zoomMode, zoomSpeed } = config;
|
|
105
|
-
const delta = event.deltaY || event.deltaX;
|
|
106
|
-
if (zoomMode) {
|
|
107
|
-
zoom = (zoomMode === 'mouse') ? true : (!event.deltaX && (core.Platform.intWheelDeltaY ? Math.abs(delta) > 17 : Math.ceil(delta) !== delta));
|
|
108
|
-
if (event.shiftKey || event.metaKey || event.ctrlKey)
|
|
109
|
-
zoom = true;
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
zoom = !event.shiftKey && (event.metaKey || event.ctrlKey);
|
|
113
|
-
}
|
|
114
|
-
if (zoom) {
|
|
115
|
-
zoomSpeed = core.MathHelper.within(zoomSpeed, 0, 1);
|
|
116
|
-
const min = event.deltaY ? config.delta.y : config.delta.x;
|
|
117
|
-
scale = 1 - delta / (min * 4) * zoomSpeed;
|
|
118
|
-
if (scale < 0.5)
|
|
119
|
-
scale = 0.5;
|
|
120
|
-
if (scale >= 1.5)
|
|
121
|
-
scale = 1.5;
|
|
122
|
-
}
|
|
123
|
-
return scale;
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
class Transformer {
|
|
128
|
-
get transforming() { return !!(this.moveData || this.zoomData || this.rotateData); }
|
|
129
|
-
constructor(interaction) {
|
|
130
|
-
this.interaction = interaction;
|
|
131
|
-
}
|
|
132
|
-
move(data) {
|
|
133
|
-
const { interaction } = this;
|
|
134
|
-
if (!data.moveType)
|
|
135
|
-
data.moveType = 'move';
|
|
136
|
-
if (!this.moveData) {
|
|
137
|
-
this.setPath(data);
|
|
138
|
-
this.moveData = Object.assign(Object.assign({}, data), { moveX: 0, moveY: 0 });
|
|
139
|
-
interaction.emit(core.MoveEvent.START, this.moveData);
|
|
140
|
-
}
|
|
141
|
-
data.path = this.moveData.path;
|
|
142
|
-
interaction.emit(core.MoveEvent.BEFORE_MOVE, data);
|
|
143
|
-
interaction.emit(core.MoveEvent.MOVE, data);
|
|
144
|
-
this.transformEndWait();
|
|
145
|
-
}
|
|
146
|
-
zoom(data) {
|
|
147
|
-
const { interaction } = this;
|
|
148
|
-
if (!this.zoomData) {
|
|
149
|
-
this.setPath(data);
|
|
150
|
-
this.zoomData = Object.assign(Object.assign({}, data), { scale: 1 });
|
|
151
|
-
interaction.emit(core.ZoomEvent.START, this.zoomData);
|
|
152
|
-
}
|
|
153
|
-
data.path = this.zoomData.path;
|
|
154
|
-
interaction.emit(core.ZoomEvent.BEFORE_ZOOM, data);
|
|
155
|
-
interaction.emit(core.ZoomEvent.ZOOM, data);
|
|
156
|
-
this.transformEndWait();
|
|
157
|
-
}
|
|
158
|
-
rotate(data) {
|
|
159
|
-
const { interaction } = this;
|
|
160
|
-
if (!this.rotateData) {
|
|
161
|
-
this.setPath(data);
|
|
162
|
-
this.rotateData = Object.assign(Object.assign({}, data), { rotation: 0 });
|
|
163
|
-
interaction.emit(core.RotateEvent.START, this.rotateData);
|
|
164
|
-
}
|
|
165
|
-
data.path = this.rotateData.path;
|
|
166
|
-
interaction.emit(core.RotateEvent.BEFORE_ROTATE, data);
|
|
167
|
-
interaction.emit(core.RotateEvent.ROTATE, data);
|
|
168
|
-
this.transformEndWait();
|
|
169
|
-
}
|
|
170
|
-
setPath(data) {
|
|
171
|
-
const { interaction } = this;
|
|
172
|
-
const { path } = interaction.selector.getByPoint(data, interaction.hitRadius);
|
|
173
|
-
data.path = path;
|
|
174
|
-
interaction.cancelHover();
|
|
175
|
-
}
|
|
176
|
-
transformEndWait() {
|
|
177
|
-
clearTimeout(this.transformTimer);
|
|
178
|
-
this.transformTimer = setTimeout(() => {
|
|
179
|
-
this.transformEnd();
|
|
180
|
-
}, this.interaction.p.transformTime);
|
|
181
|
-
}
|
|
182
|
-
transformEnd() {
|
|
183
|
-
const { interaction, moveData, zoomData, rotateData } = this;
|
|
184
|
-
if (moveData)
|
|
185
|
-
interaction.emit(core.MoveEvent.END, moveData);
|
|
186
|
-
if (zoomData)
|
|
187
|
-
interaction.emit(core.ZoomEvent.END, zoomData);
|
|
188
|
-
if (rotateData)
|
|
189
|
-
interaction.emit(core.RotateEvent.END, rotateData);
|
|
190
|
-
this.reset();
|
|
191
|
-
}
|
|
192
|
-
reset() {
|
|
193
|
-
this.zoomData = this.moveData = this.rotateData = null;
|
|
194
|
-
}
|
|
195
|
-
destroy() {
|
|
196
|
-
this.reset();
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
const leafer = core.Leafer.prototype;
|
|
201
|
-
const bounds = new core.Bounds();
|
|
202
|
-
leafer.initType = function (type) {
|
|
203
|
-
LeaferTypeCreator.run(type, this);
|
|
204
|
-
};
|
|
205
|
-
leafer.getValidMove = function (moveX, moveY) {
|
|
206
|
-
const { scroll, disabled } = this.app.config.move;
|
|
207
|
-
if (scroll) {
|
|
208
|
-
const type = scroll === true ? '' : scroll;
|
|
209
|
-
if (type.includes('x'))
|
|
210
|
-
moveX = moveX || moveY, moveY = 0;
|
|
211
|
-
else if (type.includes('y'))
|
|
212
|
-
moveY = moveY || moveX, moveX = 0;
|
|
213
|
-
else
|
|
214
|
-
Math.abs(moveX) > Math.abs(moveY) ? moveY = 0 : moveX = 0;
|
|
215
|
-
if (type.includes('limit')) {
|
|
216
|
-
const { x, y, width, height } = bounds.set(this.__world).addPoint(this.zoomLayer);
|
|
217
|
-
const right = x + width - this.width, bottom = y + height - this.height;
|
|
218
|
-
if (x >= 0 && right <= 0)
|
|
219
|
-
moveX = 0;
|
|
220
|
-
else if (moveX > 0) {
|
|
221
|
-
if (x + moveX > 0)
|
|
222
|
-
moveX = -x;
|
|
223
|
-
}
|
|
224
|
-
else if (moveX < 0 && right + moveX < 0)
|
|
225
|
-
moveX = -right;
|
|
226
|
-
if (y >= 0 && bottom <= 0)
|
|
227
|
-
moveY = 0;
|
|
228
|
-
else if (moveY > 0) {
|
|
229
|
-
if (y + moveY > 0)
|
|
230
|
-
moveY = -y;
|
|
231
|
-
}
|
|
232
|
-
else if (moveY < 0 && bottom + moveY < 0)
|
|
233
|
-
moveY = -bottom;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
return { x: disabled ? 0 : moveX, y: disabled ? 0 : moveY };
|
|
237
|
-
};
|
|
238
|
-
leafer.getValidScale = function (changeScale) {
|
|
239
|
-
const { scaleX } = this.zoomLayer.__, { min, max, disabled } = this.app.config.zoom, absScale = Math.abs(scaleX * changeScale);
|
|
240
|
-
if (min && absScale < min)
|
|
241
|
-
changeScale = min / scaleX;
|
|
242
|
-
else if (max && absScale > max)
|
|
243
|
-
changeScale = max / scaleX;
|
|
244
|
-
return disabled ? 1 : core.MathHelper.float(changeScale);
|
|
245
|
-
};
|
|
246
|
-
|
|
247
|
-
function getMoveEventData(move, event) {
|
|
248
|
-
return Object.assign(Object.assign({}, event), { moveX: move.x, moveY: move.y });
|
|
249
|
-
}
|
|
250
|
-
function getRotateEventData(rotation, event) {
|
|
251
|
-
return Object.assign(Object.assign({}, event), { rotation });
|
|
252
|
-
}
|
|
253
|
-
function getZoomEventData(scale, event) {
|
|
254
|
-
return Object.assign(Object.assign({}, event), { scale });
|
|
255
|
-
}
|
|
256
|
-
const interaction = core.InteractionBase.prototype;
|
|
257
|
-
interaction.createTransformer = function () {
|
|
258
|
-
this.transformer = new Transformer(this);
|
|
259
|
-
};
|
|
260
|
-
interaction.move = function (data) {
|
|
261
|
-
this.transformer.move(data);
|
|
262
|
-
};
|
|
263
|
-
interaction.zoom = function (data) {
|
|
264
|
-
this.transformer.zoom(data);
|
|
265
|
-
};
|
|
266
|
-
interaction.rotate = function (data) {
|
|
267
|
-
this.transformer.rotate(data);
|
|
268
|
-
};
|
|
269
|
-
interaction.transformEnd = function () {
|
|
270
|
-
this.transformer.transformEnd();
|
|
271
|
-
};
|
|
272
|
-
interaction.wheel = function (data) {
|
|
273
|
-
const { wheel } = this.config;
|
|
274
|
-
if (wheel.disabled)
|
|
275
|
-
return;
|
|
276
|
-
const scale = wheel.getScale ? wheel.getScale(data, wheel) : WheelEventHelper.getScale(data, wheel);
|
|
277
|
-
scale !== 1 ? this.zoom(getZoomEventData(scale, data)) : this.move(getMoveEventData(wheel.getMove ? wheel.getMove(data, wheel) : WheelEventHelper.getMove(data, wheel), data));
|
|
278
|
-
};
|
|
279
|
-
interaction.multiTouch = function (data, list) {
|
|
280
|
-
if (this.config.multiTouch.disabled)
|
|
281
|
-
return;
|
|
282
|
-
const { move, rotation, scale, center } = MultiTouchHelper.getData(list);
|
|
283
|
-
Object.assign(data, center);
|
|
284
|
-
this.rotate(getRotateEventData(rotation, data));
|
|
285
|
-
this.zoom(getZoomEventData(scale, data));
|
|
286
|
-
this.move(getMoveEventData(move, data));
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
const dragger = core.Dragger.prototype;
|
|
290
|
-
const { abs } = Math;
|
|
291
|
-
dragger.checkDragEndAnimate = function (data, speed) {
|
|
292
|
-
const { moveX, moveY } = this.dragData;
|
|
293
|
-
const absMoveX = abs(moveX), absMoveY = abs(moveY), minMove = speed ? 1 : 0.1;
|
|
294
|
-
const dragAnimate = this.interaction.m.dragAnimate && this.canAnimate && this.moving && (absMoveX > minMove || absMoveY > minMove);
|
|
295
|
-
if (dragAnimate) {
|
|
296
|
-
const inertia = data.pointerType === 'touch' ? 3 : 1, maxMove = 70;
|
|
297
|
-
speed = speed ? 0.95 : inertia;
|
|
298
|
-
if (absMoveX * speed > maxMove)
|
|
299
|
-
speed = maxMove / absMoveX;
|
|
300
|
-
else if (absMoveY * speed > maxMove)
|
|
301
|
-
speed = maxMove / absMoveY;
|
|
302
|
-
data = Object.assign({}, data);
|
|
303
|
-
core.PointHelper.move(data, moveX * speed, moveY * speed);
|
|
304
|
-
this.drag(data);
|
|
305
|
-
this.animate(() => { this.dragEnd(data, 1); });
|
|
306
|
-
}
|
|
307
|
-
return dragAnimate;
|
|
308
|
-
};
|
|
309
|
-
dragger.animate = function (func, off) {
|
|
310
|
-
const animateWait = func || this.animateWait;
|
|
311
|
-
if (animateWait)
|
|
312
|
-
this.interaction.target.nextRender(animateWait, null, off);
|
|
313
|
-
this.animateWait = func;
|
|
314
|
-
};
|
|
315
|
-
dragger.checkDragOut = function (data) {
|
|
316
|
-
const { interaction } = this;
|
|
317
|
-
this.autoMoveCancel();
|
|
318
|
-
if (this.dragging && !interaction.shrinkCanvasBounds.hitPoint(data))
|
|
319
|
-
this.autoMoveOnDragOut(data);
|
|
320
|
-
};
|
|
321
|
-
dragger.autoMoveOnDragOut = function (data) {
|
|
322
|
-
const { interaction, downData, canDragOut } = this;
|
|
323
|
-
const { autoDistance, dragOut } = interaction.m;
|
|
324
|
-
if (!dragOut || !canDragOut || !autoDistance)
|
|
325
|
-
return;
|
|
326
|
-
const bounds = interaction.shrinkCanvasBounds;
|
|
327
|
-
const { x, y } = bounds;
|
|
328
|
-
const right = core.BoundsHelper.maxX(bounds);
|
|
329
|
-
const bottom = core.BoundsHelper.maxY(bounds);
|
|
330
|
-
const moveX = data.x < x ? autoDistance : (right < data.x ? -autoDistance : 0);
|
|
331
|
-
const moveY = data.y < y ? autoDistance : (bottom < data.y ? -autoDistance : 0);
|
|
332
|
-
let totalX = 0, totalY = 0;
|
|
333
|
-
this.autoMoveTimer = setInterval(() => {
|
|
334
|
-
totalX += moveX;
|
|
335
|
-
totalY += moveY;
|
|
336
|
-
core.PointHelper.move(downData, moveX, moveY);
|
|
337
|
-
core.PointHelper.move(this.dragData, moveX, moveY);
|
|
338
|
-
interaction.move(Object.assign(Object.assign({}, data), { moveX, moveY, totalX, totalY, moveType: 'drag' }));
|
|
339
|
-
interaction.pointerMoveReal(data);
|
|
340
|
-
}, 10);
|
|
341
|
-
};
|
|
342
|
-
dragger.autoMoveCancel = function () {
|
|
343
|
-
if (this.autoMoveTimer) {
|
|
344
|
-
clearInterval(this.autoMoveTimer);
|
|
345
|
-
this.autoMoveTimer = 0;
|
|
346
|
-
}
|
|
347
|
-
};
|
|
348
|
-
|
|
349
|
-
core.Plugin.add('viewport');
|
|
350
|
-
|
|
351
|
-
exports.LeaferTypeCreator = LeaferTypeCreator;
|
|
352
|
-
exports.MultiTouchHelper = MultiTouchHelper;
|
|
353
|
-
exports.Transformer = Transformer;
|
|
354
|
-
exports.WheelEventHelper = WheelEventHelper;
|
|
355
|
-
exports.addViewport = addViewport;
|
|
356
|
-
exports.addViewportConfig = addViewportConfig;
|
|
357
|
-
//# sourceMappingURL=filter.cjs.map
|
package/dist/filter.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter.cjs","sources":["../../../../../../src/in/packages/viewport/src/type/viewport.ts","../../../../../../src/in/packages/viewport/src/type/custom.ts","../../../../../../src/in/packages/viewport/src/type/design.ts","../../../../../../src/in/packages/viewport/src/type/document.ts","../../../../../../src/in/packages/viewport/src/LeaferTypeCreator.ts","../../../../../../src/in/packages/viewport/src/interaction/MultiTouchHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/WheelEventHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/Transformer.ts","../../../../../../src/in/packages/viewport/src/Leafer.ts","../../../../../../src/in/packages/viewport/src/interaction/Interaction.ts","../../../../../../src/in/packages/viewport/src/interaction/Dragger.ts","../../../../../../src/in/packages/viewport/src/index.ts"],"sourcesContent":["import { ILeaferBase, IPointData, ILeaferConfig } from '@leafer-ui/interface'\n\nimport { MoveEvent, ZoomEvent, PointHelper, DataHelper } from '@leafer-ui/core'\n\n\nexport function addViewport(leafer: ILeaferBase, mergeConfig?: ILeaferConfig, custom?: boolean): void {\n addViewportConfig(leafer.parentApp ? leafer.parentApp : leafer, mergeConfig)\n if (leafer.isApp || custom) return\n\n leafer.__eventIds.push(\n leafer.on_(MoveEvent.BEFORE_MOVE, (e: MoveEvent) => {\n leafer.zoomLayer.move(leafer.getValidMove(e.moveX, e.moveY))\n }),\n leafer.on_(ZoomEvent.BEFORE_ZOOM, (e: ZoomEvent) => {\n const { zoomLayer } = leafer\n const changeScale = leafer.getValidScale(e.scale)\n if (changeScale !== 1) {\n PointHelper.scaleOf(zoomLayer as IPointData, e, changeScale)\n zoomLayer.scale = zoomLayer.__.scaleX * changeScale\n }\n })\n )\n}\n\nexport function addViewportConfig(leafer: ILeaferBase, mergeConfig?: ILeaferConfig): void {\n const viewportConfig: ILeaferConfig = {\n wheel: { preventDefault: true },\n touch: { preventDefault: true },\n pointer: { preventDefaultMenu: true }\n }\n if (mergeConfig) DataHelper.assign(viewportConfig, mergeConfig)\n DataHelper.assign(leafer.config, viewportConfig, leafer.userConfig)\n}","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function custom(leafer: ILeaferBase): void {\n addViewport(leafer, null, true)\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function design(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: {\n min: 0.01,\n max: 256\n },\n move: {\n holdSpaceKey: true,\n holdMiddleKey: true,\n }\n })\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function document(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: { min: 1 },\n move: { scroll: 'limit' }\n })\n}\n","import { ILeaferBase, ILeaferTypeList, ILeaferTypeFunction } from '@leafer-ui/interface'\n\nimport { Debug } from '@leafer-ui/core'\n\nimport { addViewport } from './type/viewport'\nimport { custom } from './type/custom'\nimport { design } from './type/design'\nimport { document } from './type/document'\n\n\nconst debug = Debug.get('LeaferTypeCreator')\n\nexport const LeaferTypeCreator = {\n\n list: {} as ILeaferTypeList,\n\n register(name: string, fn: ILeaferTypeFunction): void {\n list[name] && debug.repeat(name)\n list[name] = fn\n },\n\n run(name: string, leafer: ILeaferBase): void {\n const fn = list[name]\n fn && fn(leafer)\n }\n\n}\n\nconst { list, register } = LeaferTypeCreator\n\nregister('viewport', addViewport)\nregister('custom', custom)\nregister('design', design)\nregister('document', document)","import { IMultiTouchData, IKeepTouchData } from '@leafer-ui/interface'\n\nimport { PointHelper } from '@leafer-ui/core'\n\n\nexport const MultiTouchHelper = {\n\n getData(list: IKeepTouchData[]): IMultiTouchData {\n const a = list[0], b = list[1]\n const lastCenter = PointHelper.getCenter(a.from, b.from)\n const center = PointHelper.getCenter(a.to, b.to)\n const move = { x: center.x - lastCenter.x, y: center.y - lastCenter.y }\n\n const lastDistance = PointHelper.getDistance(a.from, b.from)\n const distance = PointHelper.getDistance(a.to, b.to)\n const scale = distance / lastDistance\n\n const rotation = PointHelper.getRotation(a.from, b.from, a.to, b.to)\n\n return { move, scale, rotation, center }\n }\n\n}","import { IPointData, IWheelEvent, IWheelConfig } from '@leafer-ui/interface'\n\nimport { MathHelper, Platform } from '@leafer-ui/core'\n\n\nexport const WheelEventHelper = {\n\n getMove(event: IWheelEvent, config: IWheelConfig): IPointData {\n let { moveSpeed } = config\n let { deltaX, deltaY } = event\n if (event.shiftKey && !deltaX) { // Window\n deltaX = deltaY\n deltaY = 0\n }\n if (deltaX > 50) deltaX = Math.max(50, deltaX / 3)\n if (deltaY > 50) deltaY = Math.max(50, deltaY / 3)\n return { x: -deltaX * moveSpeed * 2, y: -deltaY * moveSpeed * 2 }\n },\n\n getScale(event: IWheelEvent, config: IWheelConfig): number {\n\n let zoom: boolean\n let scale = 1\n let { zoomMode, zoomSpeed } = config\n\n const delta = event.deltaY || event.deltaX\n\n if (zoomMode) {\n // mac 触摸板滚动手势的deltaY是整数, 鼠标滚动/触摸板缩放的deltaY有小数点, firfox鼠标滚动为整数,为18或19的倍数\n // windows 始终是整数\n zoom = (zoomMode === 'mouse') ? true : (!event.deltaX && (Platform.intWheelDeltaY ? Math.abs(delta) > 17 : Math.ceil(delta) !== delta))\n if (event.shiftKey || event.metaKey || event.ctrlKey) zoom = true\n } else {\n zoom = !event.shiftKey && (event.metaKey || event.ctrlKey)\n }\n\n if (zoom) {\n zoomSpeed = MathHelper.within(zoomSpeed, 0, 1)\n const min = event.deltaY ? config.delta.y : config.delta.x\n scale = 1 - delta / (min * 4) * zoomSpeed // zoomSpeed\n if (scale < 0.5) scale = 0.5\n if (scale >= 1.5) scale = 1.5\n }\n\n return scale\n }\n\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, ITimer } from '@leafer-ui/interface'\n\nimport { InteractionBase, MoveEvent, ZoomEvent, RotateEvent } from '@leafer-ui/core'\n\n\nexport class Transformer {\n\n public get transforming(): boolean { return !!(this.moveData || this.zoomData || this.rotateData) }\n\n protected interaction: InteractionBase\n protected moveData: IMoveEvent\n protected zoomData: IZoomEvent\n protected rotateData: IRotateEvent\n protected transformTimer: ITimer\n\n constructor(interaction: InteractionBase) {\n this.interaction = interaction\n }\n\n public move(data: IMoveEvent): void {\n const { interaction } = this\n if (!data.moveType) data.moveType = 'move'\n\n if (!this.moveData) {\n this.setPath(data)\n this.moveData = { ...data, moveX: 0, moveY: 0 }\n interaction.emit(MoveEvent.START, this.moveData)\n }\n\n data.path = this.moveData.path\n interaction.emit(MoveEvent.BEFORE_MOVE, data)\n interaction.emit(MoveEvent.MOVE, data)\n\n this.transformEndWait()\n }\n\n public zoom(data: IZoomEvent): void {\n const { interaction } = this\n\n if (!this.zoomData) {\n this.setPath(data)\n this.zoomData = { ...data, scale: 1 }\n interaction.emit(ZoomEvent.START, this.zoomData)\n }\n\n data.path = this.zoomData.path\n interaction.emit(ZoomEvent.BEFORE_ZOOM, data)\n interaction.emit(ZoomEvent.ZOOM, data)\n\n this.transformEndWait()\n }\n\n public rotate(data: IRotateEvent): void {\n const { interaction } = this\n\n if (!this.rotateData) {\n this.setPath(data)\n this.rotateData = { ...data, rotation: 0 }\n interaction.emit(RotateEvent.START, this.rotateData)\n }\n\n data.path = this.rotateData.path\n interaction.emit(RotateEvent.BEFORE_ROTATE, data)\n interaction.emit(RotateEvent.ROTATE, data)\n\n this.transformEndWait()\n }\n\n public setPath(data: any): void {\n const { interaction } = this\n const { path } = interaction.selector.getByPoint(data, interaction.hitRadius)\n data.path = path\n interaction.cancelHover()\n }\n\n protected transformEndWait(): void {\n clearTimeout(this.transformTimer)\n this.transformTimer = setTimeout(() => {\n this.transformEnd()\n }, this.interaction.p.transformTime)\n }\n\n public transformEnd(): void {\n const { interaction, moveData, zoomData, rotateData } = this\n if (moveData) interaction.emit(MoveEvent.END, moveData)\n if (zoomData) interaction.emit(ZoomEvent.END, zoomData)\n if (rotateData) interaction.emit(RotateEvent.END, rotateData)\n this.reset()\n }\n\n public reset(): void {\n this.zoomData = this.moveData = this.rotateData = null\n }\n\n public destroy(): void {\n this.reset()\n }\n}","import { ILeaferType, IPointData } from '@leafer-ui/interface'\n\nimport { Leafer, Bounds, MathHelper } from '@leafer-ui/core'\n\nimport { LeaferTypeCreator } from './LeaferTypeCreator'\n\n\nconst leafer = Leafer.prototype\nconst bounds = new Bounds()\n\nleafer.initType = function (type: ILeaferType) {\n LeaferTypeCreator.run(type, this)\n}\n\nleafer.getValidMove = function (moveX: number, moveY: number): IPointData {\n const { scroll, disabled } = this.app.config.move\n\n if (scroll) {\n const type = scroll === true ? '' : scroll\n\n if (type.includes('x')) moveX = moveX || moveY, moveY = 0\n else if (type.includes('y')) moveY = moveY || moveX, moveX = 0\n else Math.abs(moveX) > Math.abs(moveY) ? moveY = 0 : moveX = 0\n\n if (type.includes('limit')) {\n const { x, y, width, height } = bounds.set(this.__world).addPoint(this.zoomLayer as IPointData)\n const right = x + width - this.width, bottom = y + height - this.height\n\n if (x >= 0 && right <= 0) moveX = 0 // includeX\n else if (moveX > 0) { if (x + moveX > 0) moveX = -x }\n else if (moveX < 0 && right + moveX < 0) moveX = -right\n\n if (y >= 0 && bottom <= 0) moveY = 0 // includeY\n else if (moveY > 0) { if (y + moveY > 0) moveY = -y }\n else if (moveY < 0 && bottom + moveY < 0) moveY = -bottom\n }\n }\n return { x: disabled ? 0 : moveX, y: disabled ? 0 : moveY }\n}\n\nleafer.getValidScale = function (changeScale: number): number {\n const { scaleX } = this.zoomLayer.__, { min, max, disabled } = this.app.config.zoom, absScale = Math.abs(scaleX * changeScale)\n if (min && absScale < min) changeScale = min / scaleX\n else if (max && absScale > max) changeScale = max / scaleX\n return disabled ? 1 : MathHelper.float(changeScale)\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, IWheelEvent, IUIEvent, IKeepTouchData, IPointData, IEvent } from '@leafer-ui/interface'\n\nimport { InteractionBase } from '@leafer-ui/core'\n\nimport { WheelEventHelper } from './WheelEventHelper'\nimport { Transformer } from './Transformer'\nimport { MultiTouchHelper } from './MultiTouchHelper'\n\n\nfunction getMoveEventData(move: IPointData, event: IEvent): IMoveEvent {\n return { ...event, moveX: move.x, moveY: move.y } as IMoveEvent\n}\n\nfunction getRotateEventData(rotation: number, event: IEvent): IRotateEvent {\n return { ...event, rotation } as IRotateEvent\n}\n\nfunction getZoomEventData(scale: number, event: IEvent): IZoomEvent {\n return { ...event, scale, } as IZoomEvent\n}\n\n\nconst interaction = InteractionBase.prototype\n\ninteraction.createTransformer = function (): void {\n this.transformer = new Transformer(this)\n}\n\ninteraction.move = function (data: IMoveEvent): void {\n this.transformer.move(data)\n}\n\ninteraction.zoom = function (data: IZoomEvent): void {\n this.transformer.zoom(data)\n}\n\ninteraction.rotate = function (data: IRotateEvent): void {\n this.transformer.rotate(data)\n}\n\ninteraction.transformEnd = function (): void {\n this.transformer.transformEnd()\n}\n\n\ninteraction.wheel = function (data: IWheelEvent): void {\n const { wheel } = this.config\n if (wheel.disabled) return\n\n const scale = wheel.getScale ? wheel.getScale(data, wheel) : WheelEventHelper.getScale(data, wheel)\n scale !== 1 ? this.zoom(getZoomEventData(scale, data)) : this.move(getMoveEventData(wheel.getMove ? wheel.getMove(data, wheel) : WheelEventHelper.getMove(data, wheel), data))\n}\n\n\ninteraction.multiTouch = function (data: IUIEvent, list: IKeepTouchData[]): void {\n if (this.config.multiTouch.disabled) return\n const { move, rotation, scale, center } = MultiTouchHelper.getData(list)\n Object.assign(data, center)\n\n this.rotate(getRotateEventData(rotation, data))\n this.zoom(getZoomEventData(scale, data))\n this.move(getMoveEventData(move, data))\n}","import { IPointerEvent, IFunction } from '@leafer-ui/interface'\n\nimport { Dragger, BoundsHelper, PointHelper } from '@leafer-ui/core'\n\n\nconst dragger = Dragger.prototype\nconst { abs } = Math\n\ndragger.checkDragEndAnimate = function (data: IPointerEvent, speed?: number): boolean {\n const { moveX, moveY } = this.dragData\n const absMoveX = abs(moveX), absMoveY = abs(moveY), minMove = speed ? 1 : 0.1\n const dragAnimate = this.interaction.m.dragAnimate && this.canAnimate && this.moving && (absMoveX > minMove || absMoveY > minMove)\n\n if (dragAnimate) {\n const inertia = data.pointerType === 'touch' ? 3 : 1, maxMove = 70\n speed = speed ? 0.95 : inertia\n if (absMoveX * speed > maxMove) speed = maxMove / absMoveX\n else if (absMoveY * speed > maxMove) speed = maxMove / absMoveY\n\n data = { ...data }\n PointHelper.move(data, moveX * speed, moveY * speed)\n\n this.drag(data)\n this.animate(() => { this.dragEnd(data, 1) })\n }\n\n return dragAnimate\n}\n\ndragger.animate = function (func?: IFunction, off?: 'off'): void { // dragEnd animation\n const animateWait = func || this.animateWait\n if (animateWait) this.interaction.target.nextRender(animateWait, null, off)\n this.animateWait = func\n}\n\ndragger.checkDragOut = function (data: IPointerEvent): void {\n const { interaction } = this\n this.autoMoveCancel()\n if (this.dragging && !interaction.shrinkCanvasBounds.hitPoint(data)) this.autoMoveOnDragOut(data)\n}\n\ndragger.autoMoveOnDragOut = function (data: IPointerEvent): void {\n const { interaction, downData, canDragOut } = this\n const { autoDistance, dragOut } = interaction.m\n if (!dragOut || !canDragOut || !autoDistance) return\n\n const bounds = interaction.shrinkCanvasBounds\n const { x, y } = bounds\n const right = BoundsHelper.maxX(bounds)\n const bottom = BoundsHelper.maxY(bounds)\n\n const moveX = data.x < x ? autoDistance : (right < data.x ? -autoDistance : 0)\n const moveY = data.y < y ? autoDistance : (bottom < data.y ? -autoDistance : 0)\n let totalX = 0, totalY = 0\n\n this.autoMoveTimer = setInterval(() => {\n totalX += moveX\n totalY += moveY\n\n PointHelper.move(downData, moveX, moveY)\n PointHelper.move(this.dragData, moveX, moveY)\n\n interaction.move({ ...data, moveX, moveY, totalX, totalY, moveType: 'drag' })\n interaction.pointerMoveReal(data)\n }, 10)\n}\n\ndragger.autoMoveCancel = function (): void {\n if (this.autoMoveTimer) {\n clearInterval(this.autoMoveTimer)\n this.autoMoveTimer = 0\n }\n}","export { LeaferTypeCreator } from './LeaferTypeCreator'\nexport { addViewport, addViewportConfig } from './type/viewport'\nexport { MultiTouchHelper } from './interaction/MultiTouchHelper'\nexport { WheelEventHelper } from './interaction/WheelEventHelper'\nexport { Transformer } from './interaction/Transformer'\n\nimport { Plugin } from '@leafer-ui/core'\n\nimport './Leafer'\nimport './interaction/Interaction'\nimport './interaction/Dragger'\n\nPlugin.add('viewport')"],"names":["MoveEvent","ZoomEvent","PointHelper","DataHelper","Debug","Platform","MathHelper","RotateEvent","Leafer","Bounds","InteractionBase","Dragger","BoundsHelper","Plugin"],"mappings":"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"}
|