@plait/core 0.22.0 → 0.24.0-next.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/board/board.component.interface.d.ts +2 -2
- package/constants/index.d.ts +0 -1
- package/esm2020/board/board.component.interface.mjs +1 -1
- package/esm2020/board/board.component.mjs +71 -18
- package/esm2020/constants/index.mjs +1 -2
- package/esm2020/constants/keycodes.mjs +1 -1
- package/esm2020/constants/resize.mjs +1 -1
- package/esm2020/constants/selection.mjs +1 -1
- package/esm2020/core/children/children.component.mjs +1 -1
- package/esm2020/core/children/effect.mjs +1 -1
- package/esm2020/core/element/context-change.mjs +1 -1
- package/esm2020/core/element/context.mjs +1 -1
- package/esm2020/core/element/element.component.mjs +1 -1
- package/esm2020/core/element/plugin-element.mjs +1 -1
- package/esm2020/core/island/island-base.component.mjs +1 -1
- package/esm2020/interfaces/board.mjs +9 -5
- package/esm2020/interfaces/custom-types.mjs +1 -1
- package/esm2020/interfaces/element.mjs +1 -1
- package/esm2020/interfaces/history.mjs +1 -1
- package/esm2020/interfaces/index.mjs +1 -1
- package/esm2020/interfaces/node.mjs +1 -1
- package/esm2020/interfaces/operation.mjs +1 -1
- package/esm2020/interfaces/path-ref.mjs +1 -1
- package/esm2020/interfaces/path.mjs +1 -1
- package/esm2020/interfaces/plugin-key.mjs +1 -1
- package/esm2020/interfaces/plugin.mjs +1 -1
- package/esm2020/interfaces/point.mjs +1 -1
- package/esm2020/interfaces/pointer.mjs +1 -1
- package/esm2020/interfaces/rectangle-client.mjs +1 -1
- package/esm2020/interfaces/selection.mjs +1 -1
- package/esm2020/interfaces/theme.mjs +1 -1
- package/esm2020/interfaces/viewport.mjs +1 -1
- package/esm2020/plait-core.mjs +1 -1
- package/esm2020/plait.module.mjs +1 -1
- package/esm2020/plugins/create-board.mjs +10 -2
- package/esm2020/plugins/with-board.mjs +1 -1
- package/esm2020/plugins/with-hand.mjs +1 -1
- package/esm2020/plugins/with-history.mjs +1 -1
- package/esm2020/plugins/with-hotkey.mjs +1 -1
- package/esm2020/plugins/with-moving.mjs +6 -4
- package/esm2020/plugins/with-options.mjs +1 -1
- package/esm2020/plugins/with-selection.mjs +15 -18
- package/esm2020/plugins/with-viewport.mjs +1 -1
- package/esm2020/public-api.mjs +1 -1
- package/esm2020/services/image-context.service.mjs +1 -1
- package/esm2020/testing/core/create-board.mjs +1 -1
- package/esm2020/testing/core/fake-weak-map.mjs +1 -1
- package/esm2020/testing/core/index.mjs +1 -1
- package/esm2020/testing/fake-events/event-objects.mjs +1 -1
- package/esm2020/testing/fake-events/index.mjs +1 -1
- package/esm2020/testing/index.mjs +1 -1
- package/esm2020/testing/test-element.mjs +1 -1
- package/esm2020/transforms/board.mjs +1 -1
- package/esm2020/transforms/general.mjs +1 -1
- package/esm2020/transforms/index.mjs +1 -1
- package/esm2020/transforms/node.mjs +1 -1
- package/esm2020/transforms/selection.mjs +1 -1
- package/esm2020/transforms/theme.mjs +1 -1
- package/esm2020/transforms/viewport.mjs +1 -1
- package/esm2020/utils/board.mjs +1 -1
- package/esm2020/utils/clipboard.mjs +45 -0
- package/esm2020/utils/common.mjs +1 -1
- package/esm2020/utils/dom/common.mjs +1 -1
- package/esm2020/utils/dom/environment.mjs +1 -1
- package/esm2020/utils/dom/foreign.mjs +1 -1
- package/esm2020/utils/dom/index.mjs +1 -1
- package/esm2020/utils/draw/arrow.mjs +1 -1
- package/esm2020/utils/draw/circle.mjs +1 -1
- package/esm2020/utils/draw/line.mjs +1 -1
- package/esm2020/utils/draw/rectangle.mjs +1 -1
- package/esm2020/utils/element.mjs +1 -1
- package/esm2020/utils/environment.mjs +1 -1
- package/esm2020/utils/helper.mjs +1 -1
- package/esm2020/utils/history.mjs +1 -1
- package/esm2020/utils/hotkeys.mjs +1 -1
- package/esm2020/utils/id-creator.mjs +1 -1
- package/esm2020/utils/index.mjs +3 -1
- package/esm2020/utils/math.mjs +1 -1
- package/esm2020/utils/moving-element.mjs +1 -1
- package/esm2020/utils/selected-element.mjs +1 -1
- package/esm2020/utils/to-image.mjs +1 -1
- package/esm2020/utils/touch.mjs +8 -0
- package/esm2020/utils/tree.mjs +1 -1
- package/esm2020/utils/viewport.mjs +1 -1
- package/esm2020/utils/weak-maps.mjs +2 -1
- package/fesm2015/plait-core.mjs +156 -45
- package/fesm2015/plait-core.mjs.map +1 -1
- package/fesm2020/plait-core.mjs +156 -42
- package/fesm2020/plait-core.mjs.map +1 -1
- package/interfaces/board.d.ts +15 -6
- package/interfaces/operation.d.ts +1 -1
- package/package.json +1 -1
- package/plugins/with-selection.d.ts +0 -4
- package/styles/styles.scss +7 -1
- package/utils/clipboard.d.ts +8 -0
- package/utils/index.d.ts +2 -0
- package/utils/touch.d.ts +3 -0
- package/utils/weak-maps.d.ts +1 -0
package/fesm2015/plait-core.mjs
CHANGED
|
@@ -28,6 +28,7 @@ const BOARD_TO_IS_SELECTION_MOVING = new WeakMap();
|
|
|
28
28
|
// save no standard selected elements
|
|
29
29
|
const BOARD_TO_TEMPORARY_ELEMENTS = new WeakMap();
|
|
30
30
|
const BOARD_TO_MOVING_ELEMENT = new WeakMap();
|
|
31
|
+
const IS_PREVENT_TOUCH_MOVE = new WeakMap();
|
|
31
32
|
const PATH_REFS = new WeakMap();
|
|
32
33
|
|
|
33
34
|
function depthFirstRecursion(node, callback, recursion, isReverse) {
|
|
@@ -232,13 +233,13 @@ const PlaitBoard = {
|
|
|
232
233
|
var _a;
|
|
233
234
|
return (_a = BOARD_TO_ELEMENT_HOST.get(board)) === null || _a === void 0 ? void 0 : _a.host;
|
|
234
235
|
},
|
|
235
|
-
|
|
236
|
+
getElementUpperHost(board) {
|
|
236
237
|
var _a;
|
|
237
|
-
return (_a = BOARD_TO_ELEMENT_HOST.get(board)) === null || _a === void 0 ? void 0 : _a.
|
|
238
|
+
return (_a = BOARD_TO_ELEMENT_HOST.get(board)) === null || _a === void 0 ? void 0 : _a.upperHost;
|
|
238
239
|
},
|
|
239
|
-
|
|
240
|
+
getElementActiveHost(board) {
|
|
240
241
|
var _a;
|
|
241
|
-
return (_a = BOARD_TO_ELEMENT_HOST.get(board)) === null || _a === void 0 ? void 0 : _a.
|
|
242
|
+
return (_a = BOARD_TO_ELEMENT_HOST.get(board)) === null || _a === void 0 ? void 0 : _a.activeHost;
|
|
242
243
|
},
|
|
243
244
|
getRoughSVG(board) {
|
|
244
245
|
return BOARD_TO_ROUGH_SVG.get(board);
|
|
@@ -270,6 +271,10 @@ const PlaitBoard = {
|
|
|
270
271
|
isPointer(board, pointer) {
|
|
271
272
|
return board.pointer === pointer;
|
|
272
273
|
},
|
|
274
|
+
isInPointer(board, pointers) {
|
|
275
|
+
const point = board.pointer;
|
|
276
|
+
return pointers.includes(point);
|
|
277
|
+
},
|
|
273
278
|
getMovingPointInBoard(board) {
|
|
274
279
|
return BOARD_TO_MOVING_POINT_IN_BOARD.get(board);
|
|
275
280
|
},
|
|
@@ -874,7 +879,6 @@ var ResizeCursorClass;
|
|
|
874
879
|
const ATTACHED_ELEMENT_CLASS_NAME = 'plait-board-attached';
|
|
875
880
|
|
|
876
881
|
const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';
|
|
877
|
-
const CLIP_BOARD_IMAGE_FORMAT_KEY = 'x-plait-image-fragment';
|
|
878
882
|
const HOST_CLASS_NAME = 'plait-board-container';
|
|
879
883
|
const SCROLL_BAR_WIDTH = 20;
|
|
880
884
|
const MAX_RADIUS = 16;
|
|
@@ -1571,6 +1575,57 @@ function downloadImage(url, name) {
|
|
|
1571
1575
|
a.remove();
|
|
1572
1576
|
}
|
|
1573
1577
|
|
|
1578
|
+
const getClipboardByKey = (key) => {
|
|
1579
|
+
return `application/x-plait-${key}-fragment`;
|
|
1580
|
+
};
|
|
1581
|
+
const setClipboardData = (data, elements) => {
|
|
1582
|
+
const result = [...elements];
|
|
1583
|
+
const pluginContextResult = getDataFromClipboard(data);
|
|
1584
|
+
if (pluginContextResult) {
|
|
1585
|
+
result.push(...pluginContextResult);
|
|
1586
|
+
}
|
|
1587
|
+
const stringObj = JSON.stringify(result);
|
|
1588
|
+
const encoded = window.btoa(encodeURIComponent(stringObj));
|
|
1589
|
+
data === null || data === void 0 ? void 0 : data.setData(`application/${CLIP_BOARD_FORMAT_KEY}`, encoded);
|
|
1590
|
+
};
|
|
1591
|
+
const setClipboardDataByText = (data, text) => {
|
|
1592
|
+
const pluginContextResult = getTextFromClipboard(data);
|
|
1593
|
+
data === null || data === void 0 ? void 0 : data.setData(`text/plain`, text + '\n' + pluginContextResult);
|
|
1594
|
+
};
|
|
1595
|
+
const setClipboardDataByMedia = (data, media, key) => {
|
|
1596
|
+
const stringObj = JSON.stringify(media);
|
|
1597
|
+
const encoded = window.btoa(encodeURIComponent(stringObj));
|
|
1598
|
+
data === null || data === void 0 ? void 0 : data.setData(getClipboardByKey(key), encoded);
|
|
1599
|
+
};
|
|
1600
|
+
const getDataFromClipboard = (data) => {
|
|
1601
|
+
const encoded = data === null || data === void 0 ? void 0 : data.getData(`application/${CLIP_BOARD_FORMAT_KEY}`);
|
|
1602
|
+
let nodesData = [];
|
|
1603
|
+
if (encoded) {
|
|
1604
|
+
const decoded = decodeURIComponent(window.atob(encoded));
|
|
1605
|
+
nodesData = JSON.parse(decoded);
|
|
1606
|
+
}
|
|
1607
|
+
return nodesData;
|
|
1608
|
+
};
|
|
1609
|
+
const getTextFromClipboard = (data) => {
|
|
1610
|
+
return (data ? data.getData(`text/plain`) : '');
|
|
1611
|
+
};
|
|
1612
|
+
const getClipboardDataByMedia = (data, key) => {
|
|
1613
|
+
const encoded = data === null || data === void 0 ? void 0 : data.getData(getClipboardByKey(key));
|
|
1614
|
+
let imageItem = null;
|
|
1615
|
+
if (encoded) {
|
|
1616
|
+
const decoded = decodeURIComponent(window.atob(encoded));
|
|
1617
|
+
imageItem = JSON.parse(decoded);
|
|
1618
|
+
}
|
|
1619
|
+
return imageItem;
|
|
1620
|
+
};
|
|
1621
|
+
|
|
1622
|
+
const isPreventTouchMove = (board) => {
|
|
1623
|
+
return !!IS_PREVENT_TOUCH_MOVE.get(board);
|
|
1624
|
+
};
|
|
1625
|
+
const preventTouchMove = (board, state) => {
|
|
1626
|
+
IS_PREVENT_TOUCH_MOVE.set(board, state);
|
|
1627
|
+
};
|
|
1628
|
+
|
|
1574
1629
|
const PlaitElement = {
|
|
1575
1630
|
isRootElement(value) {
|
|
1576
1631
|
const parent = NODE_TO_PARENT.get(value);
|
|
@@ -2082,7 +2137,15 @@ function createBoard(children, options) {
|
|
|
2082
2137
|
isRecursion: element => true,
|
|
2083
2138
|
isMovable: element => false,
|
|
2084
2139
|
getRectangle: element => null,
|
|
2085
|
-
applyTheme: (element) => { }
|
|
2140
|
+
applyTheme: (element) => { },
|
|
2141
|
+
pointerDown: (pointer) => { },
|
|
2142
|
+
pointerMove: (pointer) => { },
|
|
2143
|
+
pointerUp: (pointer) => { },
|
|
2144
|
+
pointerCancel: (pointer) => { },
|
|
2145
|
+
pointerOut: (pointer) => { },
|
|
2146
|
+
pointerLeave: (pointer) => { },
|
|
2147
|
+
globalPointerMove: (pointer) => { },
|
|
2148
|
+
globalPointerUp: (pointer) => { },
|
|
2086
2149
|
};
|
|
2087
2150
|
return board;
|
|
2088
2151
|
}
|
|
@@ -2238,7 +2301,7 @@ function withHandPointer(board) {
|
|
|
2238
2301
|
}
|
|
2239
2302
|
|
|
2240
2303
|
function withSelection(board) {
|
|
2241
|
-
const {
|
|
2304
|
+
const { pointerDown, globalPointerMove, globalPointerUp, onChange } = board;
|
|
2242
2305
|
let start = null;
|
|
2243
2306
|
let end = null;
|
|
2244
2307
|
let selectionMovingG;
|
|
@@ -2246,12 +2309,12 @@ function withSelection(board) {
|
|
|
2246
2309
|
let previousSelectedElements;
|
|
2247
2310
|
// prevent text from being selected when user pressed main pointer and is moving
|
|
2248
2311
|
let needPreventNativeSelectionWhenMoving = false;
|
|
2249
|
-
board.
|
|
2312
|
+
board.pointerDown = (event) => {
|
|
2250
2313
|
if (event.target instanceof Element && !event.target.closest('.plait-richtext-container')) {
|
|
2251
2314
|
needPreventNativeSelectionWhenMoving = true;
|
|
2252
2315
|
}
|
|
2253
2316
|
if (!isMainPointer(event)) {
|
|
2254
|
-
|
|
2317
|
+
pointerDown(event);
|
|
2255
2318
|
return;
|
|
2256
2319
|
}
|
|
2257
2320
|
const options = board.getPluginOptions(PlaitPluginKey.withSelection);
|
|
@@ -2260,7 +2323,7 @@ function withSelection(board) {
|
|
|
2260
2323
|
const hitElements = getHitElements(board, { ranges: [range] });
|
|
2261
2324
|
const selectedElements = getSelectedElements(board);
|
|
2262
2325
|
if (hitElements.length === 1 && selectedElements.includes(hitElements[0]) && !options.isDisabledSelect) {
|
|
2263
|
-
|
|
2326
|
+
pointerDown(event);
|
|
2264
2327
|
return;
|
|
2265
2328
|
}
|
|
2266
2329
|
if (PlaitBoard.isPointer(board, PlaitPointerType.selection) &&
|
|
@@ -2268,13 +2331,15 @@ function withSelection(board) {
|
|
|
2268
2331
|
options.isMultiple &&
|
|
2269
2332
|
!options.isDisabledSelect) {
|
|
2270
2333
|
start = point;
|
|
2334
|
+
preventTouchMove(board, true);
|
|
2271
2335
|
}
|
|
2272
2336
|
Transforms.setSelection(board, { ranges: [range] });
|
|
2273
|
-
|
|
2337
|
+
pointerDown(event);
|
|
2274
2338
|
};
|
|
2275
|
-
board.
|
|
2339
|
+
board.globalPointerMove = (event) => {
|
|
2276
2340
|
if (needPreventNativeSelectionWhenMoving) {
|
|
2277
|
-
|
|
2341
|
+
// prevent text from being selected
|
|
2342
|
+
event.preventDefault();
|
|
2278
2343
|
}
|
|
2279
2344
|
if (start) {
|
|
2280
2345
|
const movedTarget = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
@@ -2298,9 +2363,9 @@ function withSelection(board) {
|
|
|
2298
2363
|
PlaitBoard.getHost(board).append(selectionMovingG);
|
|
2299
2364
|
}
|
|
2300
2365
|
}
|
|
2301
|
-
|
|
2366
|
+
globalPointerMove(event);
|
|
2302
2367
|
};
|
|
2303
|
-
board.
|
|
2368
|
+
board.globalPointerUp = (event) => {
|
|
2304
2369
|
if (start && end) {
|
|
2305
2370
|
selectionMovingG === null || selectionMovingG === void 0 ? void 0 : selectionMovingG.remove();
|
|
2306
2371
|
clearSelectionMoving(board);
|
|
@@ -2319,7 +2384,8 @@ function withSelection(board) {
|
|
|
2319
2384
|
start = null;
|
|
2320
2385
|
end = null;
|
|
2321
2386
|
needPreventNativeSelectionWhenMoving = false;
|
|
2322
|
-
|
|
2387
|
+
preventTouchMove(board, false);
|
|
2388
|
+
globalPointerUp(event);
|
|
2323
2389
|
};
|
|
2324
2390
|
board.onChange = () => {
|
|
2325
2391
|
const options = board.getPluginOptions(PlaitPluginKey.withSelection);
|
|
@@ -2404,12 +2470,6 @@ function createSelectionOuterG(board, selectElements) {
|
|
|
2404
2470
|
fillStyle: 'solid'
|
|
2405
2471
|
});
|
|
2406
2472
|
}
|
|
2407
|
-
/**
|
|
2408
|
-
* prevent text from being selected
|
|
2409
|
-
*/
|
|
2410
|
-
const preventNativeSelection = (board, event) => {
|
|
2411
|
-
event.preventDefault();
|
|
2412
|
-
};
|
|
2413
2473
|
|
|
2414
2474
|
function withViewport(board) {
|
|
2415
2475
|
const { onChange } = board;
|
|
@@ -2465,7 +2525,7 @@ function withMoving(board) {
|
|
|
2465
2525
|
mousedown(event);
|
|
2466
2526
|
};
|
|
2467
2527
|
board.mousemove = event => {
|
|
2468
|
-
if (startPoint &&
|
|
2528
|
+
if (startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {
|
|
2469
2529
|
if (!isPreventDefault) {
|
|
2470
2530
|
isPreventDefault = true;
|
|
2471
2531
|
}
|
|
@@ -2477,10 +2537,12 @@ function withMoving(board) {
|
|
|
2477
2537
|
if (Math.abs(offsetX) > offsetBuffer || Math.abs(offsetY) > offsetBuffer) {
|
|
2478
2538
|
throttleRAF(() => {
|
|
2479
2539
|
const currentElements = activeElements.map(activeElement => {
|
|
2480
|
-
const
|
|
2540
|
+
const points = activeElement.points || [];
|
|
2541
|
+
const [x, y] = activeElement.points[0];
|
|
2542
|
+
const newPoints = points.map(p => [p[0] + offsetX, p[1] + offsetY]);
|
|
2481
2543
|
const index = board.children.findIndex(item => item.id === activeElement.id);
|
|
2482
2544
|
Transforms.setNode(board, {
|
|
2483
|
-
points:
|
|
2545
|
+
points: newPoints
|
|
2484
2546
|
}, [index]);
|
|
2485
2547
|
MERGING.set(board, true);
|
|
2486
2548
|
return PlaitNode.get(board, [index]);
|
|
@@ -2828,8 +2890,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
2828
2890
|
}] } });
|
|
2829
2891
|
|
|
2830
2892
|
const ElementHostClass = 'element-host';
|
|
2831
|
-
const
|
|
2832
|
-
const
|
|
2893
|
+
const ElementUpperHostClass = 'element-upper-host';
|
|
2894
|
+
const ElementActiveHostClass = 'element-active-host';
|
|
2833
2895
|
class PlaitBoardComponent {
|
|
2834
2896
|
get host() {
|
|
2835
2897
|
return this.svg.nativeElement;
|
|
@@ -2879,8 +2941,8 @@ class PlaitBoardComponent {
|
|
|
2879
2941
|
}
|
|
2880
2942
|
ngOnInit() {
|
|
2881
2943
|
const elementHost = this.host.querySelector(`.${ElementHostClass}`);
|
|
2882
|
-
const
|
|
2883
|
-
const
|
|
2944
|
+
const elementUpperHost = this.host.querySelector(`.${ElementUpperHostClass}`);
|
|
2945
|
+
const elementActiveHost = this.host.querySelector(`.${ElementActiveHostClass}`);
|
|
2884
2946
|
const roughSVG = rough.svg(this.host, {
|
|
2885
2947
|
options: { roughness: 0, strokeWidth: 1 }
|
|
2886
2948
|
});
|
|
@@ -2901,8 +2963,8 @@ class PlaitBoardComponent {
|
|
|
2901
2963
|
BOARD_TO_HOST.set(this.board, this.host);
|
|
2902
2964
|
BOARD_TO_ELEMENT_HOST.set(this.board, {
|
|
2903
2965
|
host: elementHost,
|
|
2904
|
-
|
|
2905
|
-
|
|
2966
|
+
upperHost: elementUpperHost,
|
|
2967
|
+
activeHost: elementActiveHost
|
|
2906
2968
|
});
|
|
2907
2969
|
BOARD_TO_ON_CHANGE.set(this.board, () => {
|
|
2908
2970
|
this.ngZone.run(() => {
|
|
@@ -2963,34 +3025,67 @@ class PlaitBoardComponent {
|
|
|
2963
3025
|
.subscribe((event) => {
|
|
2964
3026
|
this.board.mousedown(event);
|
|
2965
3027
|
});
|
|
3028
|
+
fromEvent(this.host, 'pointerdown')
|
|
3029
|
+
.pipe(takeUntil(this.destroy$))
|
|
3030
|
+
.subscribe((event) => {
|
|
3031
|
+
this.board.pointerDown(event);
|
|
3032
|
+
});
|
|
2966
3033
|
fromEvent(this.host, 'mousemove')
|
|
2967
3034
|
.pipe(takeUntil(this.destroy$))
|
|
2968
3035
|
.subscribe((event) => {
|
|
2969
3036
|
BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);
|
|
2970
3037
|
this.board.mousemove(event);
|
|
2971
3038
|
});
|
|
3039
|
+
fromEvent(this.host, 'pointermove')
|
|
3040
|
+
.pipe(takeUntil(this.destroy$))
|
|
3041
|
+
.subscribe((event) => {
|
|
3042
|
+
BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);
|
|
3043
|
+
this.board.pointerMove(event);
|
|
3044
|
+
});
|
|
2972
3045
|
fromEvent(this.host, 'mouseleave')
|
|
2973
3046
|
.pipe(takeUntil(this.destroy$))
|
|
2974
3047
|
.subscribe((event) => {
|
|
2975
3048
|
BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);
|
|
2976
3049
|
this.board.mouseleave(event);
|
|
2977
3050
|
});
|
|
3051
|
+
fromEvent(this.host, 'pointerleave')
|
|
3052
|
+
.pipe(takeUntil(this.destroy$))
|
|
3053
|
+
.subscribe((event) => {
|
|
3054
|
+
BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);
|
|
3055
|
+
this.board.pointerLeave(event);
|
|
3056
|
+
});
|
|
2978
3057
|
fromEvent(document, 'mousemove')
|
|
2979
3058
|
.pipe(takeUntil(this.destroy$))
|
|
2980
3059
|
.subscribe((event) => {
|
|
2981
3060
|
BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);
|
|
2982
3061
|
this.board.globalMousemove(event);
|
|
2983
3062
|
});
|
|
3063
|
+
fromEvent(document, 'pointermove')
|
|
3064
|
+
.pipe(takeUntil(this.destroy$))
|
|
3065
|
+
.subscribe((event) => {
|
|
3066
|
+
BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);
|
|
3067
|
+
this.board.globalPointerMove(event);
|
|
3068
|
+
});
|
|
2984
3069
|
fromEvent(this.host, 'mouseup')
|
|
2985
3070
|
.pipe(takeUntil(this.destroy$))
|
|
2986
3071
|
.subscribe((event) => {
|
|
2987
3072
|
this.board.mouseup(event);
|
|
2988
3073
|
});
|
|
3074
|
+
fromEvent(this.host, 'pointerup')
|
|
3075
|
+
.pipe(takeUntil(this.destroy$))
|
|
3076
|
+
.subscribe((event) => {
|
|
3077
|
+
this.board.pointerUp(event);
|
|
3078
|
+
});
|
|
2989
3079
|
fromEvent(document, 'mouseup')
|
|
2990
3080
|
.pipe(takeUntil(this.destroy$))
|
|
2991
3081
|
.subscribe((event) => {
|
|
2992
3082
|
this.board.globalMouseup(event);
|
|
2993
3083
|
});
|
|
3084
|
+
fromEvent(document, 'pointerup')
|
|
3085
|
+
.pipe(takeUntil(this.destroy$))
|
|
3086
|
+
.subscribe((event) => {
|
|
3087
|
+
this.board.globalPointerUp(event);
|
|
3088
|
+
});
|
|
2994
3089
|
fromEvent(this.host, 'dblclick')
|
|
2995
3090
|
.pipe(takeUntil(this.destroy$), filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board)))
|
|
2996
3091
|
.subscribe((event) => {
|
|
@@ -3001,8 +3096,11 @@ class PlaitBoardComponent {
|
|
|
3001
3096
|
this.board.globalKeydown(event);
|
|
3002
3097
|
}), filter(event => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target)))
|
|
3003
3098
|
.subscribe((event) => {
|
|
3004
|
-
|
|
3005
|
-
(
|
|
3099
|
+
const selectedElements = getSelectedElements(this.board);
|
|
3100
|
+
if (selectedElements.length > 0 && (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event))) {
|
|
3101
|
+
this.board.deleteFragment(null);
|
|
3102
|
+
}
|
|
3103
|
+
this.board.keydown(event);
|
|
3006
3104
|
});
|
|
3007
3105
|
fromEvent(document, 'keyup')
|
|
3008
3106
|
.pipe(takeUntil(this.destroy$), filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board)))
|
|
@@ -3013,9 +3111,12 @@ class PlaitBoardComponent {
|
|
|
3013
3111
|
fromEvent(document, 'copy')
|
|
3014
3112
|
.pipe(takeUntil(this.destroy$), filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board)))
|
|
3015
3113
|
.subscribe((event) => {
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3114
|
+
const selectedElements = getSelectedElements(this.board);
|
|
3115
|
+
if (selectedElements.length > 0) {
|
|
3116
|
+
event.preventDefault();
|
|
3117
|
+
const rectangle = getRectangleByElements(this.board, selectedElements, false);
|
|
3118
|
+
this.board.setFragment(event.clipboardData, rectangle);
|
|
3119
|
+
}
|
|
3019
3120
|
});
|
|
3020
3121
|
fromEvent(document, 'paste')
|
|
3021
3122
|
.pipe(takeUntil(this.destroy$), filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board)))
|
|
@@ -3029,10 +3130,13 @@ class PlaitBoardComponent {
|
|
|
3029
3130
|
fromEvent(document, 'cut')
|
|
3030
3131
|
.pipe(takeUntil(this.destroy$), filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board)))
|
|
3031
3132
|
.subscribe((event) => {
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3133
|
+
const selectedElements = getSelectedElements(this.board);
|
|
3134
|
+
if (selectedElements.length > 0) {
|
|
3135
|
+
event.preventDefault();
|
|
3136
|
+
const rectangle = getRectangleByElements(this.board, selectedElements, false);
|
|
3137
|
+
this.board.setFragment(event.clipboardData, rectangle);
|
|
3138
|
+
this.board.deleteFragment(event.clipboardData);
|
|
3139
|
+
}
|
|
3036
3140
|
});
|
|
3037
3141
|
}
|
|
3038
3142
|
viewportScrollListener() {
|
|
@@ -3057,6 +3161,13 @@ class PlaitBoardComponent {
|
|
|
3057
3161
|
setIsFromScrolling(this.board, true);
|
|
3058
3162
|
});
|
|
3059
3163
|
});
|
|
3164
|
+
this.ngZone.runOutsideAngular(() => {
|
|
3165
|
+
fromEvent(this.viewportContainer.nativeElement, 'touchmove', { passive: false }).subscribe((event) => {
|
|
3166
|
+
if (isPreventTouchMove(this.board)) {
|
|
3167
|
+
event.preventDefault();
|
|
3168
|
+
}
|
|
3169
|
+
});
|
|
3170
|
+
});
|
|
3060
3171
|
}
|
|
3061
3172
|
elementResizeListener() {
|
|
3062
3173
|
this.resizeObserver = new ResizeObserver(() => {
|
|
@@ -3105,8 +3216,8 @@ PlaitBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
|
|
|
3105
3216
|
<div class="viewport-container" #viewportContainer>
|
|
3106
3217
|
<svg #svg width="100%" height="100%" style="position: relative;" class="board-host-svg">
|
|
3107
3218
|
<g class="element-host"></g>
|
|
3108
|
-
<g class="element-host
|
|
3109
|
-
<g class="element-host
|
|
3219
|
+
<g class="element-upper-host"></g>
|
|
3220
|
+
<g class="element-active-host"></g>
|
|
3110
3221
|
</svg>
|
|
3111
3222
|
<plait-children [board]="board" [effect]="effect"></plait-children>
|
|
3112
3223
|
</div>
|
|
@@ -3120,8 +3231,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
3120
3231
|
<div class="viewport-container" #viewportContainer>
|
|
3121
3232
|
<svg #svg width="100%" height="100%" style="position: relative;" class="board-host-svg">
|
|
3122
3233
|
<g class="element-host"></g>
|
|
3123
|
-
<g class="element-host
|
|
3124
|
-
<g class="element-host
|
|
3234
|
+
<g class="element-upper-host"></g>
|
|
3235
|
+
<g class="element-active-host"></g>
|
|
3125
3236
|
</svg>
|
|
3126
3237
|
<plait-children [board]="board" [effect]="effect"></plait-children>
|
|
3127
3238
|
</div>
|
|
@@ -3343,5 +3454,5 @@ function createModModifierKeys() {
|
|
|
3343
3454
|
* Generated bundle index. Do not edit.
|
|
3344
3455
|
*/
|
|
3345
3456
|
|
|
3346
|
-
export { A, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY,
|
|
3457
|
+
export { A, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, E, EIGHT, ELEMENT_TO_COMPONENT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_PREVENT_TOUCH_MOVE, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitChildrenElement, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitModule, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RIGHT_ARROW, RectangleClient, ResizeCursorClass, RetroThemeColor, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, X, Y, Z, ZERO, addMovingElements, addSelectedElement, arrowPoints, cacheMovingElements, cacheSelectedElements, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createSVG, createSelectionOuterG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRoundRectangle, fakeNodeWeakMap, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementHostBBox, getHitElementOfRoot, getHitElements, getIsRecursionFunc, getMovingElements, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isFromScrolling, isFromViewportChange, isHitElements, isInPlaitBoard, isMainPointer, isNullOrUndefined, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setSVGViewBox, setSelectionMoving, shouldClear, shouldMerge, shouldSave, throttleRAF, toImage, toPoint, transformPoint, transformPoints, updateForeignObject, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
|
|
3347
3458
|
//# sourceMappingURL=plait-core.mjs.map
|