@plait/core 0.32.0 → 0.34.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/esm2022/board/board.component.mjs +3 -12
- package/esm2022/plugins/with-moving.mjs +4 -1
- package/esm2022/utils/math.mjs +52 -1
- package/esm2022/utils/selected-element.mjs +11 -1
- package/esm2022/utils/viewport.mjs +32 -4
- package/fesm2022/plait-core.mjs +220 -137
- package/fesm2022/plait-core.mjs.map +1 -1
- package/package.json +1 -1
- package/utils/math.d.ts +1 -0
- package/utils/selected-element.d.ts +2 -0
- package/utils/viewport.d.ts +1 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SCROLL_BAR_WIDTH } from '../constants';
|
|
2
|
-
import { PlaitBoard } from '../interfaces';
|
|
2
|
+
import { PlaitBoard, Point } from '../interfaces';
|
|
3
|
+
import { BoardTransforms } from '../transforms/board';
|
|
3
4
|
import { getRectangleByElements } from './element';
|
|
4
5
|
import { BOARD_TO_VIEWPORT_ORIGINATION } from './weak-maps';
|
|
5
6
|
const IS_FROM_SCROLLING = new WeakMap();
|
|
@@ -88,8 +89,9 @@ export function setSVGViewBox(board, viewBox) {
|
|
|
88
89
|
}
|
|
89
90
|
export function updateViewportOffset(board) {
|
|
90
91
|
const origination = getViewportOrigination(board);
|
|
91
|
-
if (!origination)
|
|
92
|
+
if (!origination) {
|
|
92
93
|
return;
|
|
94
|
+
}
|
|
93
95
|
const { zoom } = board.viewport;
|
|
94
96
|
const viewBox = getViewBox(board, zoom);
|
|
95
97
|
const scrollLeft = (origination[0] - viewBox[0]) * zoom;
|
|
@@ -98,11 +100,37 @@ export function updateViewportOffset(board) {
|
|
|
98
100
|
}
|
|
99
101
|
export function updateViewportContainerScroll(board, left, top, isFromViewportChange = true) {
|
|
100
102
|
const viewportContainer = PlaitBoard.getViewportContainer(board);
|
|
103
|
+
const previousScrollLeft = viewportContainer.scrollLeft;
|
|
104
|
+
const previousScrollTop = viewportContainer.scrollTop;
|
|
101
105
|
if (viewportContainer.scrollLeft !== left || viewportContainer.scrollTop !== top) {
|
|
102
106
|
viewportContainer.scrollLeft = left;
|
|
103
107
|
viewportContainer.scrollTop = top;
|
|
104
|
-
|
|
108
|
+
const offsetWidth = viewportContainer.offsetWidth;
|
|
109
|
+
const offsetHeight = viewportContainer.offsetHeight;
|
|
110
|
+
if (previousScrollLeft === viewportContainer.scrollLeft && previousScrollTop === viewportContainer.scrollTop) {
|
|
111
|
+
// The scroll event cannot be triggered, so the origination is modified directly based on the scroll distance.
|
|
112
|
+
updateViewportByScrolling(board, previousScrollLeft, previousScrollTop);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const isValidLeftOrTop = left > 0 &&
|
|
116
|
+
top > 0 &&
|
|
117
|
+
left < viewportContainer.scrollWidth - offsetWidth &&
|
|
118
|
+
top < viewportContainer.scrollHeight - offsetHeight;
|
|
119
|
+
if (isFromViewportChange && isValidLeftOrTop) {
|
|
120
|
+
setIsFromViewportChange(board, true);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export function updateViewportByScrolling(board, scrollLeft, scrollTop) {
|
|
126
|
+
const zoom = board.viewport.zoom;
|
|
127
|
+
const viewBox = getViewBox(board, zoom);
|
|
128
|
+
const origination = [scrollLeft / zoom + viewBox[0], scrollTop / zoom + viewBox[1]];
|
|
129
|
+
if (Point.isEquals(origination, board.viewport.origination)) {
|
|
130
|
+
return;
|
|
105
131
|
}
|
|
132
|
+
BoardTransforms.updateViewport(board, origination);
|
|
133
|
+
setIsFromScrolling(board, true);
|
|
106
134
|
}
|
|
107
135
|
export function initializeViewportContainer(board) {
|
|
108
136
|
const { width, height } = getViewportContainerRect(board);
|
|
@@ -157,4 +185,4 @@ export const setIsFromViewportChange = (board, state) => {
|
|
|
157
185
|
IS_FROM_VIEWPORT_CHANGE.set(board, state);
|
|
158
186
|
};
|
|
159
187
|
export function scrollToRectangle(board, client) { }
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy92aWV3cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1RCxNQUFNLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRTdELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7QUFFbkUsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEtBQWlCO0lBQ3RELE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ3hDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUVqRixPQUFPO1FBQ0gsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEdBQUcsY0FBYztRQUMxQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxjQUFjO0tBQy9DLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWlCLEVBQUUsSUFBWTtJQUM5RCxNQUFNLFlBQVksR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RSxNQUFNLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxpQkFBaUIs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QyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFjLEVBQUUsRUFBRTtJQUN6RSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLE1BQXVCLElBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNDUk9MTF9CQVJfV0lEVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTiB9IGZyb20gJy4vd2Vhay1tYXBzJztcblxuY29uc3QgSVNfRlJPTV9TQ1JPTExJTkcgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG5jb25zdCBJU19GUk9NX1ZJRVdQT1JUX0NIQU5HRSA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IGhpZGVTY3JvbGxiYXIgfSA9IGJvYXJkLm9wdGlvbnM7XG4gICAgY29uc3Qgc2Nyb2xsQmFyV2lkdGggPSBoaWRlU2Nyb2xsYmFyID8gU0NST0xMX0JBUl9XSURUSCA6IDA7XG4gICAgY29uc3Qgdmlld3BvcnRSZWN0ID0gUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogdmlld3BvcnRSZWN0LndpZHRoICsgc2Nyb2xsQmFyV2lkdGgsXG4gICAgICAgIGhlaWdodDogdmlld3BvcnRSZWN0LmhlaWdodCArIHNjcm9sbEJhcldpZHRoXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRIb3N0QkJveChib2FyZDogUGxhaXRCb2FyZCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3QgY2hpbGRyZW5SZWN0ID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyUmVjdCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdmlld3BvcnRDb250YWluZXJSZWN0LndpZHRoIC8gem9vbTtcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB2aWV3cG9ydENvbnRhaW5lclJlY3QuaGVpZ2h0IC8gem9vbTtcbiAgICBsZXQgbGVmdDogbnVtYmVyO1xuICAgIGxldCByaWdodDogbnVtYmVyO1xuICAgIGxldCB0b3A6IG51bWJlcjtcbiAgICBsZXQgYm90dG9tOiBudW1iZXI7XG5cbiAgICBpZiAoY2hpbGRyZW5SZWN0LndpZHRoIDwgY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgY29uc3QgY2VudGVyWCA9IGNoaWxkcmVuUmVjdC54ICsgY2hpbGRyZW5SZWN0LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgaGFsZkNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyV2lkdGggLyAyO1xuICAgICAgICBsZWZ0ID0gY2VudGVyWCAtIGhhbGZDb250YWluZXJXaWR0aDtcbiAgICAgICAgcmlnaHQgPSBjZW50ZXJYICsgaGFsZkNvbnRhaW5lcldpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnQgPSBjaGlsZHJlblJlY3QueDtcbiAgICAgICAgcmlnaHQgPSBjaGlsZHJlblJlY3QueCArIGNoaWxkcmVuUmVjdC53aWR0aDtcbiAgICB9XG4gICAgaWYgKGNoaWxkcmVuUmVjdC5oZWlnaHQgPCBjb250YWluZXJIZWlnaHQpIHtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IGNoaWxkcmVuUmVjdC55ICsgY2hpbGRyZW5SZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IGhhbGZDb250YWluZXJIZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLyAyO1xuICAgICAgICB0b3AgPSBjZW50ZXJZIC0gaGFsZkNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgYm90dG9tID0gY2VudGVyWSArIGhhbGZDb250YWluZXJIZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gY2hpbGRyZW5SZWN0Lnk7XG4gICAgICAgIGJvdHRvbSA9IGNoaWxkcmVuUmVjdC55ICsgY2hpbGRyZW5SZWN0LmhlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgYm90dG9tXG4gICAgfTtcbn1cblxuLyoqXG4gKiDpqozor4HnvKnmlL7mr5TmmK/lkKbnrKblkIjpmZDliLbvvIzlpoLmnpzotoXlh7rpmZDliLbvvIzliJnov5Tlm57lkIjpgILnmoTnvKnmlL7mr5RcbiAqIEBwYXJhbSB6b29tIOe8qeaUvuavlFxuICogQHBhcmFtIG1pblpvb20g5pyA5bCP57yp5pS+5q+UXG4gKiBAcGFyYW0gbWF4Wm9vbSDmnIDlpKfnvKnmlL7mr5RcbiAqIEByZXR1cm5zIOato+ehrueahOe8qeaUvuavlFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXBab29tTGV2ZWwoem9vbTogbnVtYmVyLCBtaW5ab29tID0gMC4yLCBtYXhab29tID0gNCkge1xuICAgIHJldHVybiB6b29tIDwgbWluWm9vbSA/IG1pblpvb20gOiB6b29tID4gbWF4Wm9vbSA/IG1heFpvb20gOiB6b29tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0JveChib2FyZDogUGxhaXRCb2FyZCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3QgYm9hcmRDb250YWluZXJSZWN0YW5nbGUgPSBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlbGVtZW50SG9zdEJCb3ggPSBnZXRFbGVtZW50SG9zdEJCb3goYm9hcmQsIHpvb20pO1xuXG4gICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSBib2FyZENvbnRhaW5lclJlY3RhbmdsZS53aWR0aCAvIDI7XG4gICAgY29uc3QgdmVydGljYWxQYWRkaW5nID0gYm9hcmRDb250YWluZXJSZWN0YW5nbGUuaGVpZ2h0IC8gMjtcbiAgICBjb25zdCB2aWV3Qm94ID0gW1xuICAgICAgICBlbGVtZW50SG9zdEJCb3gubGVmdCAtIGhvcml6b250YWxQYWRkaW5nIC8gem9vbSxcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LnRvcCAtIHZlcnRpY2FsUGFkZGluZyAvIHpvb20sXG4gICAgICAgIGVsZW1lbnRIb3N0QkJveC5yaWdodCAtIGVsZW1lbnRIb3N0QkJveC5sZWZ0ICsgKGhvcml6b250YWxQYWRkaW5nICogMikgLyB6b29tLFxuICAgICAgICBlbGVtZW50SG9zdEJCb3guYm90dG9tIC0gZWxlbWVudEhvc3RCQm94LnRvcCArICh2ZXJ0aWNhbFBhZGRpbmcgKiAyKSAvIHpvb21cbiAgICBdO1xuICAgIHJldHVybiB2aWV3Qm94O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0JveENlbnRlclBvaW50KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgY2hpbGRyZW5SZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBib2FyZC5jaGlsZHJlbiwgdHJ1ZSk7XG4gICAgcmV0dXJuIFtjaGlsZHJlblJlY3RhbmdsZS54ICsgY2hpbGRyZW5SZWN0YW5nbGUud2lkdGggLyAyLCBjaGlsZHJlblJlY3RhbmdsZS55ICsgY2hpbGRyZW5SZWN0YW5nbGUuaGVpZ2h0IC8gMl0gYXMgUG9pbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTVkdWaWV3Qm94KGJvYXJkOiBQbGFpdEJvYXJkLCB2aWV3Qm94OiBudW1iZXJbXSkge1xuICAgIGNvbnN0IHpvb20gPSBib2FyZC52aWV3cG9ydC56b29tO1xuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKTtcbiAgICBob3N0RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICBob3N0RWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3ZpZXdCb3hbMl0gKiB6b29tfXB4YDtcbiAgICBob3N0RWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHt2aWV3Qm94WzNdICogem9vbX1weGA7XG5cbiAgICBpZiAodmlld0JveCAmJiB2aWV3Qm94WzJdID4gMCAmJiB2aWV3Qm94WzNdID4gMCkge1xuICAgICAgICBob3N0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCB2aWV3Qm94LmpvaW4oJyAnKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmlld3BvcnRPZmZzZXQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCBvcmlnaW5hdGlvbiA9IGdldFZpZXdwb3J0T3JpZ2luYXRpb24oYm9hcmQpO1xuICAgIGlmICghb3JpZ2luYXRpb24pIHJldHVybjtcblxuICAgIGNvbnN0IHsgem9vbSB9ID0gYm9hcmQudmlld3BvcnQ7XG4gICAgY29uc3Qgdmlld0JveCA9IGdldFZpZXdCb3goYm9hcmQsIHpvb20pO1xuICAgIGNvbnN0IHNjcm9sbExlZnQgPSAob3JpZ2luYXRpb24hWzBdIC0gdmlld0JveFswXSkgKiB6b29tO1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IChvcmlnaW5hdGlvbiFbMV0gLSB2aWV3Qm94WzFdKSAqIHpvb207XG4gICAgdXBkYXRlVmlld3BvcnRDb250YWluZXJTY3JvbGwoYm9hcmQsIHNjcm9sbExlZnQsIHNjcm9sbFRvcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWaWV3cG9ydENvbnRhaW5lclNjcm9sbChib2FyZDogUGxhaXRCb2FyZCwgbGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciwgaXNGcm9tVmlld3BvcnRDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgdmlld3BvcnRDb250YWluZXIgPSBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKTtcbiAgICBpZiAodmlld3BvcnRDb250YWluZXIuc2Nyb2xsTGVmdCAhPT0gbGVmdCB8fCB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxUb3AgIT09IHRvcCkge1xuICAgICAgICB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgICAgICAgdmlld3BvcnRDb250YWluZXIuc2Nyb2xsVG9wID0gdG9wO1xuICAgICAgICBpc0Zyb21WaWV3cG9ydENoYW5nZSAmJiBzZXRJc0Zyb21WaWV3cG9ydENoYW5nZShib2FyZCwgdHJ1ZSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZXdwb3J0Q29udGFpbmVyKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQpO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyID0gUGxhaXRCb2FyZC5nZXRWaWV3cG9ydENvbnRhaW5lcihib2FyZCk7XG4gICAgdmlld3BvcnRDb250YWluZXIuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgdmlld3BvcnRDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVWaWV3Qm94KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgY29uc3Qgdmlld0JveCA9IGdldFZpZXdCb3goYm9hcmQsIHpvb20pO1xuICAgIHNldFNWR1ZpZXdCb3goYm9hcmQsIHZpZXdCb3gpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgaWYgKCFib2FyZC52aWV3cG9ydD8ub3JpZ2luYXRpb24pIHtcbiAgICAgICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyUmVjdCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB2aWV3Qm94ID0gZ2V0Vmlld0JveChib2FyZCwgem9vbSk7XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSB2aWV3Qm94WzBdICsgdmlld0JveFsyXSAvIDI7XG4gICAgICAgIGNvbnN0IGNlbnRlclkgPSB2aWV3Qm94WzFdICsgdmlld0JveFszXSAvIDI7XG4gICAgICAgIGNvbnN0IG9yaWdpbmF0aW9uID0gW2NlbnRlclggLSB2aWV3cG9ydENvbnRhaW5lclJlY3Qud2lkdGggLyAyIC8gem9vbSwgY2VudGVyWSAtIHZpZXdwb3J0Q29udGFpbmVyUmVjdC5oZWlnaHQgLyAyIC8gem9vbV0gYXMgUG9pbnQ7XG4gICAgICAgIHVwZGF0ZVZpZXdwb3J0T3JpZ2luYXRpb24oYm9hcmQsIG9yaWdpbmF0aW9uKTtcbiAgICAgICAgdXBkYXRlVmlld3BvcnRPZmZzZXQoYm9hcmQpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkKTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpZXdwb3J0T3JpZ2luYXRpb24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIG9yaWdpbmF0aW9uOiBQb2ludCkgPT4ge1xuICAgIEJPQVJEX1RPX1ZJRVdQT1JUX09SSUdJTkFUSU9OLnNldChib2FyZCwgb3JpZ2luYXRpb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyVmlld3BvcnRPcmlnaW5hdGlvbiA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIEJPQVJEX1RPX1ZJRVdQT1JUX09SSUdJTkFUSU9OLmRlbGV0ZShib2FyZCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Vmlld3BvcnRPcmlnaW5hdGlvbiA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmF0aW9uID0gQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04uZ2V0KGJvYXJkKTtcbiAgICBpZiAob3JpZ2luYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBib2FyZC52aWV3cG9ydC5vcmlnaW5hdGlvbjtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNGcm9tU2Nyb2xsaW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuICEhSVNfRlJPTV9TQ1JPTExJTkcuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRJc0Zyb21TY3JvbGxpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHN0YXRlOiBib29sZWFuKSA9PiB7XG4gICAgSVNfRlJPTV9TQ1JPTExJTkcuc2V0KGJvYXJkLCBzdGF0ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNGcm9tVmlld3BvcnRDaGFuZ2UgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFJU19GUk9NX1ZJRVdQT1JUX0NIQU5HRS5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldElzRnJvbVZpZXdwb3J0Q2hhbmdlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzdGF0ZTogYm9vbGVhbikgPT4ge1xuICAgIElTX0ZST01fVklFV1BPUlRfQ0hBTkdFLnNldChib2FyZCwgc3RhdGUpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUmVjdGFuZ2xlKGJvYXJkOiBQbGFpdEJvYXJkLCBjbGllbnQ6IFJlY3RhbmdsZUNsaWVudCkge31cbiJdfQ==
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy92aWV3cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7QUFFN0QsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztBQUVuRSxNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBaUI7SUFDdEQsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDeEMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBRWpGLE9BQU87UUFDSCxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssR0FBRyxjQUFjO1FBQzFDLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxHQUFHLGNBQWM7S0FDL0MsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBaUIsRUFBRSxJQUFZO0lBQzlELE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLElB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QixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDdEQsT0FBTyxDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFjLEVBQUUsRUFBRTtJQUN6RSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLE1BQXVCLElBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNDUk9MTF9CQVJfV0lEVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQm9hcmRUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcy9ib2FyZCc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzIH0gZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCB7IEJPQVJEX1RPX1ZJRVdQT1JUX09SSUdJTkFUSU9OIH0gZnJvbSAnLi93ZWFrLW1hcHMnO1xuXG5jb25zdCBJU19GUk9NX1NDUk9MTElORyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmNvbnN0IElTX0ZST01fVklFV1BPUlRfQ0hBTkdFID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgYm9vbGVhbj4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdwb3J0Q29udGFpbmVyUmVjdChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgaGlkZVNjcm9sbGJhciB9ID0gYm9hcmQub3B0aW9ucztcbiAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IGhpZGVTY3JvbGxiYXIgPyBTQ1JPTExfQkFSX1dJRFRIIDogMDtcbiAgICBjb25zdCB2aWV3cG9ydFJlY3QgPSBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiB2aWV3cG9ydFJlY3Qud2lkdGggKyBzY3JvbGxCYXJXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiB2aWV3cG9ydFJlY3QuaGVpZ2h0ICsgc2Nyb2xsQmFyV2lkdGhcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEhvc3RCQm94KGJvYXJkOiBQbGFpdEJvYXJkLCB6b29tOiBudW1iZXIpIHtcbiAgICBjb25zdCBjaGlsZHJlblJlY3QgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBib2FyZC5jaGlsZHJlbiwgdHJ1ZSk7XG4gICAgY29uc3Qgdmlld3BvcnRDb250YWluZXJSZWN0ID0gUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB2aWV3cG9ydENvbnRhaW5lclJlY3Qud2lkdGggLyB6b29tO1xuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHZpZXdwb3J0Q29udGFpbmVyUmVjdC5oZWlnaHQgLyB6b29tO1xuICAgIGxldCBsZWZ0OiBudW1iZXI7XG4gICAgbGV0IHJpZ2h0OiBudW1iZXI7XG4gICAgbGV0IHRvcDogbnVtYmVyO1xuICAgIGxldCBib3R0b206IG51bWJlcjtcblxuICAgIGlmIChjaGlsZHJlblJlY3Qud2lkdGggPCBjb250YWluZXJXaWR0aCkge1xuICAgICAgICBjb25zdCBjZW50ZXJYID0gY2hpbGRyZW5SZWN0LnggKyBjaGlsZHJlblJlY3Qud2lkdGggLyAyO1xuICAgICAgICBjb25zdCBoYWxmQ29udGFpbmVyV2lkdGggPSBjb250YWluZXJXaWR0aCAvIDI7XG4gICAgICAgIGxlZnQgPSBjZW50ZXJYIC0gaGFsZkNvbnRhaW5lcldpZHRoO1xuICAgICAgICByaWdodCA9IGNlbnRlclggKyBoYWxmQ29udGFpbmVyV2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGNoaWxkcmVuUmVjdC54O1xuICAgICAgICByaWdodCA9IGNoaWxkcmVuUmVjdC54ICsgY2hpbGRyZW5SZWN0LndpZHRoO1xuICAgIH1cbiAgICBpZiAoY2hpbGRyZW5SZWN0LmhlaWdodCA8IGNvbnRhaW5lckhlaWdodCkge1xuICAgICAgICBjb25zdCBjZW50ZXJZID0gY2hpbGRyZW5SZWN0LnkgKyBjaGlsZHJlblJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgaGFsZkNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAvIDI7XG4gICAgICAgIHRvcCA9IGNlbnRlclkgLSBoYWxmQ29udGFpbmVySGVpZ2h0O1xuICAgICAgICBib3R0b20gPSBjZW50ZXJZICsgaGFsZkNvbnRhaW5lckhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSBjaGlsZHJlblJlY3QueTtcbiAgICAgICAgYm90dG9tID0gY2hpbGRyZW5SZWN0LnkgKyBjaGlsZHJlblJlY3QuaGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0LFxuICAgICAgICByaWdodCxcbiAgICAgICAgdG9wLFxuICAgICAgICBib3R0b21cbiAgICB9O1xufVxuXG4vKipcbiAqIOmqjOivgee8qeaUvuavlOaYr+WQpuespuWQiOmZkOWItu+8jOWmguaenOi2heWHuumZkOWItu+8jOWImei/lOWbnuWQiOmAgueahOe8qeaUvuavlFxuICogQHBhcmFtIHpvb20g57yp5pS+5q+UXG4gKiBAcGFyYW0gbWluWm9vbSDmnIDlsI/nvKnmlL7mr5RcbiAqIEBwYXJhbSBtYXhab29tIOacgOWkp+e8qeaUvuavlFxuICogQHJldHVybnMg5q2j56Gu55qE57yp5pS+5q+UXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcFpvb21MZXZlbCh6b29tOiBudW1iZXIsIG1pblpvb20gPSAwLjIsIG1heFpvb20gPSA0KSB7XG4gICAgcmV0dXJuIHpvb20gPCBtaW5ab29tID8gbWluWm9vbSA6IHpvb20gPiBtYXhab29tID8gbWF4Wm9vbSA6IHpvb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3Qm94KGJvYXJkOiBQbGFpdEJvYXJkLCB6b29tOiBudW1iZXIpIHtcbiAgICBjb25zdCBib2FyZENvbnRhaW5lclJlY3RhbmdsZSA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGVsZW1lbnRIb3N0QkJveCA9IGdldEVsZW1lbnRIb3N0QkJveChib2FyZCwgem9vbSk7XG5cbiAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IGJvYXJkQ29udGFpbmVyUmVjdGFuZ2xlLndpZHRoIC8gMjtcbiAgICBjb25zdCB2ZXJ0aWNhbFBhZGRpbmcgPSBib2FyZENvbnRhaW5lclJlY3RhbmdsZS5oZWlnaHQgLyAyO1xuICAgIGNvbnN0IHZpZXdCb3ggPSBbXG4gICAgICAgIGVsZW1lbnRIb3N0QkJveC5sZWZ0IC0gaG9yaXpvbnRhbFBhZGRpbmcgLyB6b29tLFxuICAgICAgICBlbGVtZW50SG9zdEJCb3gudG9wIC0gdmVydGljYWxQYWRkaW5nIC8gem9vbSxcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LnJpZ2h0IC0gZWxlbWVudEhvc3RCQm94LmxlZnQgKyAoaG9yaXpvbnRhbFBhZGRpbmcgKiAyKSAvIHpvb20sXG4gICAgICAgIGVsZW1lbnRIb3N0QkJveC5ib3R0b20gLSBlbGVtZW50SG9zdEJCb3gudG9wICsgKHZlcnRpY2FsUGFkZGluZyAqIDIpIC8gem9vbVxuICAgIF07XG4gICAgcmV0dXJuIHZpZXdCb3g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3Qm94Q2VudGVyUG9pbnQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCBjaGlsZHJlblJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICByZXR1cm4gW2NoaWxkcmVuUmVjdGFuZ2xlLnggKyBjaGlsZHJlblJlY3RhbmdsZS53aWR0aCAvIDIsIGNoaWxkcmVuUmVjdGFuZ2xlLnkgKyBjaGlsZHJlblJlY3RhbmdsZS5oZWlnaHQgLyAyXSBhcyBQb2ludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNWR1ZpZXdCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHZpZXdCb3g6IG51bWJlcltdKSB7XG4gICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpO1xuICAgIGhvc3RFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIGhvc3RFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld0JveFsyXSAqIHpvb219cHhgO1xuICAgIGhvc3RFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3ZpZXdCb3hbM10gKiB6b29tfXB4YDtcblxuICAgIGlmICh2aWV3Qm94ICYmIHZpZXdCb3hbMl0gPiAwICYmIHZpZXdCb3hbM10gPiAwKSB7XG4gICAgICAgIGhvc3RFbGVtZW50LnNldEF0dHJpYnV0ZSgndmlld0JveCcsIHZpZXdCb3guam9pbignICcpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWaWV3cG9ydE9mZnNldChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IG9yaWdpbmF0aW9uID0gZ2V0Vmlld3BvcnRPcmlnaW5hdGlvbihib2FyZCk7XG4gICAgaWYgKCFvcmlnaW5hdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgem9vbSB9ID0gYm9hcmQudmlld3BvcnQ7XG4gICAgY29uc3Qgdmlld0JveCA9IGdldFZpZXdCb3goYm9hcmQsIHpvb20pO1xuICAgIGNvbnN0IHNjcm9sbExlZnQgPSAob3JpZ2luYXRpb24hWzBdIC0gdmlld0JveFswXSkgKiB6b29tO1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IChvcmlnaW5hdGlvbiFbMV0gLSB2aWV3Qm94WzFdKSAqIHpvb207XG4gICAgdXBkYXRlVmlld3BvcnRDb250YWluZXJTY3JvbGwoYm9hcmQsIHNjcm9sbExlZnQsIHNjcm9sbFRvcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWaWV3cG9ydENvbnRhaW5lclNjcm9sbChib2FyZDogUGxhaXRCb2FyZCwgbGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciwgaXNGcm9tVmlld3BvcnRDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgdmlld3BvcnRDb250YWluZXIgPSBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKTtcbiAgICBjb25zdCBwcmV2aW91c1Njcm9sbExlZnQgPSB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgIGNvbnN0IHByZXZpb3VzU2Nyb2xsVG9wID0gdmlld3BvcnRDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgIGlmICh2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxMZWZ0ICE9PSBsZWZ0IHx8IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFRvcCAhPT0gdG9wKSB7XG4gICAgICAgIHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgICB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxUb3AgPSB0b3A7XG4gICAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gdmlld3BvcnRDb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IG9mZnNldEhlaWdodCA9IHZpZXdwb3J0Q29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICAgICAgaWYgKHByZXZpb3VzU2Nyb2xsTGVmdCA9PT0gdmlld3BvcnRDb250YWluZXIuc2Nyb2xsTGVmdCAmJiBwcmV2aW91c1Njcm9sbFRvcCA9PT0gdmlld3BvcnRDb250YWluZXIuc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAvLyBUaGUgc2Nyb2xsIGV2ZW50IGNhbm5vdCBiZSB0cmlnZ2VyZWQsIHNvIHRoZSBvcmlnaW5hdGlvbiBpcyBtb2RpZmllZCBkaXJlY3RseSBiYXNlZCBvbiB0aGUgc2Nyb2xsIGRpc3RhbmNlLlxuICAgICAgICAgICAgdXBkYXRlVmlld3BvcnRCeVNjcm9sbGluZyhib2FyZCwgcHJldmlvdXNTY3JvbGxMZWZ0LCBwcmV2aW91c1Njcm9sbFRvcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkTGVmdE9yVG9wID1cbiAgICAgICAgICAgICAgICBsZWZ0ID4gMCAmJlxuICAgICAgICAgICAgICAgIHRvcCA+IDAgJiZcbiAgICAgICAgICAgICAgICBsZWZ0IDwgdmlld3BvcnRDb250YWluZXIuc2Nyb2xsV2lkdGggLSBvZmZzZXRXaWR0aCAmJlxuICAgICAgICAgICAgICAgIHRvcCA8IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbEhlaWdodCAtIG9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIGlmIChpc0Zyb21WaWV3cG9ydENoYW5nZSAmJiBpc1ZhbGlkTGVmdE9yVG9wKSB7XG4gICAgICAgICAgICAgICAgc2V0SXNGcm9tVmlld3BvcnRDaGFuZ2UoYm9hcmQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmlld3BvcnRCeVNjcm9sbGluZyhib2FyZDogUGxhaXRCb2FyZCwgc2Nyb2xsTGVmdDogbnVtYmVyLCBzY3JvbGxUb3A6IG51bWJlcikge1xuICAgIGNvbnN0IHpvb20gPSBib2FyZC52aWV3cG9ydC56b29tO1xuICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICBjb25zdCBvcmlnaW5hdGlvbiA9IFtzY3JvbGxMZWZ0IC8gem9vbSArIHZpZXdCb3hbMF0sIHNjcm9sbFRvcCAvIHpvb20gKyB2aWV3Qm94WzFdXSBhcyBQb2ludDtcbiAgICBpZiAoUG9pbnQuaXNFcXVhbHMob3JpZ2luYXRpb24sIGJvYXJkLnZpZXdwb3J0Lm9yaWdpbmF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEJvYXJkVHJhbnNmb3Jtcy51cGRhdGVWaWV3cG9ydChib2FyZCwgb3JpZ2luYXRpb24pO1xuICAgIHNldElzRnJvbVNjcm9sbGluZyhib2FyZCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplVmlld3BvcnRDb250YWluZXIoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFZpZXdwb3J0Q29udGFpbmVyUmVjdChib2FyZCk7XG4gICAgY29uc3Qgdmlld3BvcnRDb250YWluZXIgPSBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKTtcbiAgICB2aWV3cG9ydENvbnRhaW5lci5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICB2aWV3cG9ydENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZXdCb3goYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCB2aWV3Qm94ID0gZ2V0Vmlld0JveChib2FyZCwgem9vbSk7XG4gICAgc2V0U1ZHVmlld0JveChib2FyZCwgdmlld0JveCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplVmlld3BvcnRPZmZzZXQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBpZiAoIWJvYXJkLnZpZXdwb3J0Py5vcmlnaW5hdGlvbikge1xuICAgICAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRDb250YWluZXJSZWN0ID0gUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICAgICAgY29uc3QgY2VudGVyWCA9IHZpZXdCb3hbMF0gKyB2aWV3Qm94WzJdIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IHZpZXdCb3hbMV0gKyB2aWV3Qm94WzNdIC8gMjtcbiAgICAgICAgY29uc3Qgb3JpZ2luYXRpb24gPSBbY2VudGVyWCAtIHZpZXdwb3J0Q29udGFpbmVyUmVjdC53aWR0aCAvIDIgLyB6b29tLCBjZW50ZXJZIC0gdmlld3BvcnRDb250YWluZXJSZWN0LmhlaWdodCAvIDIgLyB6b29tXSBhcyBQb2ludDtcbiAgICAgICAgdXBkYXRlVmlld3BvcnRPcmlnaW5hdGlvbihib2FyZCwgb3JpZ2luYXRpb24pO1xuICAgICAgICB1cGRhdGVWaWV3cG9ydE9mZnNldChib2FyZCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdXBkYXRlVmlld3BvcnRPZmZzZXQoYm9hcmQpO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlVmlld3BvcnRPcmlnaW5hdGlvbiA9IChib2FyZDogUGxhaXRCb2FyZCwgb3JpZ2luYXRpb246IFBvaW50KSA9PiB7XG4gICAgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04uc2V0KGJvYXJkLCBvcmlnaW5hdGlvbik7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJWaWV3cG9ydE9yaWdpbmF0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04uZGVsZXRlKGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTi5nZXQoYm9hcmQpO1xuICAgIGlmIChvcmlnaW5hdGlvbikge1xuICAgICAgICByZXR1cm4gb3JpZ2luYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJvYXJkLnZpZXdwb3J0Lm9yaWdpbmF0aW9uO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc0Zyb21TY3JvbGxpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFJU19GUk9NX1NDUk9MTElORy5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldElzRnJvbVNjcm9sbGluZyA9IChib2FyZDogUGxhaXRCb2FyZCwgc3RhdGU6IGJvb2xlYW4pID0+IHtcbiAgICBJU19GUk9NX1NDUk9MTElORy5zZXQoYm9hcmQsIHN0YXRlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Zyb21WaWV3cG9ydENoYW5nZSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiAhIUlTX0ZST01fVklFV1BPUlRfQ0hBTkdFLmdldChib2FyZCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0SXNGcm9tVmlld3BvcnRDaGFuZ2UgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHN0YXRlOiBib29sZWFuKSA9PiB7XG4gICAgSVNfRlJPTV9WSUVXUE9SVF9DSEFOR0Uuc2V0KGJvYXJkLCBzdGF0ZSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9SZWN0YW5nbGUoYm9hcmQ6IFBsYWl0Qm9hcmQsIGNsaWVudDogUmVjdGFuZ2xlQ2xpZW50KSB7fVxuIl19
|
package/fesm2022/plait-core.mjs
CHANGED
|
@@ -142,6 +142,15 @@ const isSelectedElement = (board, element) => {
|
|
|
142
142
|
const selectedElements = getSelectedElements(board);
|
|
143
143
|
return !!selectedElements.find(value => value === element);
|
|
144
144
|
};
|
|
145
|
+
const temporaryDisableSelection = (board) => {
|
|
146
|
+
const currentOptions = board.getPluginOptions(PlaitPluginKey.withSelection);
|
|
147
|
+
board.setPluginOptions(PlaitPluginKey.withSelection, {
|
|
148
|
+
isDisabledSelect: true
|
|
149
|
+
});
|
|
150
|
+
setTimeout(() => {
|
|
151
|
+
board.setPluginOptions(PlaitPluginKey.withSelection, { ...currentOptions });
|
|
152
|
+
}, 0);
|
|
153
|
+
};
|
|
145
154
|
|
|
146
155
|
/**
|
|
147
156
|
* @license
|
|
@@ -724,6 +733,57 @@ const isPointInRoundRectangle = (point, rectangle, radius) => {
|
|
|
724
733
|
const downScale = (number) => {
|
|
725
734
|
return Number(number.toFixed(2));
|
|
726
735
|
};
|
|
736
|
+
// https://gist.github.com/nicholaswmin/c2661eb11cad5671d816
|
|
737
|
+
const catmullRomFitting = function (points) {
|
|
738
|
+
const alpha = 0.5;
|
|
739
|
+
let p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M;
|
|
740
|
+
var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;
|
|
741
|
+
const result = [];
|
|
742
|
+
result.push([Math.round(points[0][0]), Math.round(points[0][1])]);
|
|
743
|
+
var length = points.length;
|
|
744
|
+
for (var i = 0; i < length - 1; i++) {
|
|
745
|
+
p0 = i == 0 ? points[0] : points[i - 1];
|
|
746
|
+
p1 = points[i];
|
|
747
|
+
p2 = points[i + 1];
|
|
748
|
+
p3 = i + 2 < length ? points[i + 2] : p2;
|
|
749
|
+
d1 = Math.sqrt(Math.pow(p0[0] - p1[0], 2) + Math.pow(p0[1] - p1[1], 2));
|
|
750
|
+
d2 = Math.sqrt(Math.pow(p1[0] - p2[0], 2) + Math.pow(p1[1] - p2[1], 2));
|
|
751
|
+
d3 = Math.sqrt(Math.pow(p2[0] - p3[0], 2) + Math.pow(p2[1] - p3[1], 2));
|
|
752
|
+
// Catmull-Rom to Cubic Bezier conversion matrix
|
|
753
|
+
// A = 2d1^2a + 3d1^a * d2^a + d3^2a
|
|
754
|
+
// B = 2d3^2a + 3d3^a * d2^a + d2^2a
|
|
755
|
+
// [ 0 1 0 0 ]
|
|
756
|
+
// [ -d2^2a /N A/N d1^2a /N 0 ]
|
|
757
|
+
// [ 0 d3^2a /M B/M -d2^2a /M ]
|
|
758
|
+
// [ 0 0 1 0 ]
|
|
759
|
+
d3powA = Math.pow(d3, alpha);
|
|
760
|
+
d3pow2A = Math.pow(d3, 2 * alpha);
|
|
761
|
+
d2powA = Math.pow(d2, alpha);
|
|
762
|
+
d2pow2A = Math.pow(d2, 2 * alpha);
|
|
763
|
+
d1powA = Math.pow(d1, alpha);
|
|
764
|
+
d1pow2A = Math.pow(d1, 2 * alpha);
|
|
765
|
+
A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A;
|
|
766
|
+
B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A;
|
|
767
|
+
N = 3 * d1powA * (d1powA + d2powA);
|
|
768
|
+
if (N > 0) {
|
|
769
|
+
N = 1 / N;
|
|
770
|
+
}
|
|
771
|
+
M = 3 * d3powA * (d3powA + d2powA);
|
|
772
|
+
if (M > 0) {
|
|
773
|
+
M = 1 / M;
|
|
774
|
+
}
|
|
775
|
+
bp1 = [(-d2pow2A * p0[0] + A * p1[0] + d1pow2A * p2[0]) * N, (-d2pow2A * p0[1] + A * p1[1] + d1pow2A * p2[1]) * N];
|
|
776
|
+
bp2 = [(d3pow2A * p1[0] + B * p2[0] - d2pow2A * p3[0]) * M, (d3pow2A * p1[1] + B * p2[1] - d2pow2A * p3[1]) * M];
|
|
777
|
+
if (bp1[0] == 0 && bp1[1] == 0) {
|
|
778
|
+
bp1 = p1;
|
|
779
|
+
}
|
|
780
|
+
if (bp2[0] == 0 && bp2[1] == 0) {
|
|
781
|
+
bp2 = p2;
|
|
782
|
+
}
|
|
783
|
+
result.push(bp1, bp2, p2);
|
|
784
|
+
}
|
|
785
|
+
return result;
|
|
786
|
+
};
|
|
727
787
|
|
|
728
788
|
function transformPoints(board, points) {
|
|
729
789
|
const newPoints = points.map(point => {
|
|
@@ -1082,6 +1142,132 @@ function drawBezierPath(points, options) {
|
|
|
1082
1142
|
return g;
|
|
1083
1143
|
}
|
|
1084
1144
|
|
|
1145
|
+
function setViewport(board, viewport) {
|
|
1146
|
+
const operation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };
|
|
1147
|
+
board.apply(operation);
|
|
1148
|
+
}
|
|
1149
|
+
const ViewportTransforms$1 = {
|
|
1150
|
+
setViewport
|
|
1151
|
+
};
|
|
1152
|
+
|
|
1153
|
+
function setTheme(board, themeColorMode) {
|
|
1154
|
+
const operation = { type: 'set_theme', properties: board.theme, newProperties: themeColorMode };
|
|
1155
|
+
board.apply(operation);
|
|
1156
|
+
}
|
|
1157
|
+
const ViewportTransforms = {
|
|
1158
|
+
setTheme
|
|
1159
|
+
};
|
|
1160
|
+
|
|
1161
|
+
function updateViewport(board, origination, zoom) {
|
|
1162
|
+
zoom = zoom ?? board.viewport.zoom;
|
|
1163
|
+
setViewport(board, {
|
|
1164
|
+
...board.viewport,
|
|
1165
|
+
zoom,
|
|
1166
|
+
origination
|
|
1167
|
+
});
|
|
1168
|
+
clearViewportOrigination(board);
|
|
1169
|
+
}
|
|
1170
|
+
const updatePointerType = (board, pointer) => {
|
|
1171
|
+
board.pointer = pointer;
|
|
1172
|
+
const boardComponent = BOARD_TO_COMPONENT.get(board);
|
|
1173
|
+
boardComponent?.markForCheck();
|
|
1174
|
+
};
|
|
1175
|
+
function updateZoom(board, newZoom, isCenter = true) {
|
|
1176
|
+
newZoom = clampZoomLevel(newZoom);
|
|
1177
|
+
const mousePoint = PlaitBoard.getMovingPointInBoard(board);
|
|
1178
|
+
const nativeElement = PlaitBoard.getBoardContainer(board);
|
|
1179
|
+
const nativeElementRect = nativeElement.getBoundingClientRect();
|
|
1180
|
+
const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();
|
|
1181
|
+
let focusPoint = [boardContainerRect.width / 2, boardContainerRect.height / 2];
|
|
1182
|
+
if (!isCenter && mousePoint && distanceBetweenPointAndRectangle(mousePoint[0], mousePoint[1], nativeElementRect) === 0) {
|
|
1183
|
+
focusPoint = toPoint(mousePoint[0], mousePoint[1], nativeElement);
|
|
1184
|
+
}
|
|
1185
|
+
const zoom = board.viewport.zoom;
|
|
1186
|
+
const origination = getViewportOrigination(board);
|
|
1187
|
+
const centerX = origination[0] + focusPoint[0] / zoom;
|
|
1188
|
+
const centerY = origination[1] + focusPoint[1] / zoom;
|
|
1189
|
+
const newOrigination = [centerX - focusPoint[0] / newZoom, centerY - focusPoint[1] / newZoom];
|
|
1190
|
+
updateViewport(board, newOrigination, newZoom);
|
|
1191
|
+
}
|
|
1192
|
+
function fitViewport(board) {
|
|
1193
|
+
let scrollBarWidth = getRealScrollBarWidth(board);
|
|
1194
|
+
const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();
|
|
1195
|
+
const elementHostBox = getRectangleByElements(board, board.children, true);
|
|
1196
|
+
const zoom = board.viewport.zoom;
|
|
1197
|
+
const autoFitPadding = 16;
|
|
1198
|
+
const viewportWidth = boardContainerRect.width - 2 * autoFitPadding;
|
|
1199
|
+
const viewportHeight = boardContainerRect.height - 2 * autoFitPadding;
|
|
1200
|
+
let newZoom = zoom;
|
|
1201
|
+
if (viewportWidth < elementHostBox.width || viewportHeight < elementHostBox.height) {
|
|
1202
|
+
newZoom = Math.min(viewportWidth / elementHostBox.width, viewportHeight / elementHostBox.height);
|
|
1203
|
+
}
|
|
1204
|
+
else {
|
|
1205
|
+
newZoom = 1;
|
|
1206
|
+
}
|
|
1207
|
+
const centerPoint = getViewBoxCenterPoint(board);
|
|
1208
|
+
const newOrigination = [
|
|
1209
|
+
centerPoint[0] - boardContainerRect.width / 2 / newZoom + scrollBarWidth / 2 / zoom,
|
|
1210
|
+
centerPoint[1] - boardContainerRect.height / 2 / newZoom + scrollBarWidth / 2 / zoom
|
|
1211
|
+
];
|
|
1212
|
+
updateViewport(board, newOrigination, newZoom);
|
|
1213
|
+
}
|
|
1214
|
+
function fitViewportWidth(board, options) {
|
|
1215
|
+
let scrollBarWidth = getRealScrollBarWidth(board);
|
|
1216
|
+
const boardContainer = PlaitBoard.getBoardContainer(board);
|
|
1217
|
+
const boardContainerRectangle = boardContainer.getBoundingClientRect();
|
|
1218
|
+
let finalWidth = 0;
|
|
1219
|
+
if (options.maxWidth) {
|
|
1220
|
+
finalWidth = options.maxWidth;
|
|
1221
|
+
}
|
|
1222
|
+
else {
|
|
1223
|
+
finalWidth = boardContainerRectangle.width;
|
|
1224
|
+
}
|
|
1225
|
+
const elementHostBox = getRectangleByElements(board, board.children, true);
|
|
1226
|
+
const contentWidth = finalWidth - 2 * options.autoFitPadding;
|
|
1227
|
+
let newZoom = 0;
|
|
1228
|
+
if (contentWidth < elementHostBox.width) {
|
|
1229
|
+
newZoom = Math.min(contentWidth / elementHostBox.width);
|
|
1230
|
+
}
|
|
1231
|
+
else {
|
|
1232
|
+
newZoom = 1;
|
|
1233
|
+
}
|
|
1234
|
+
let finalHeight = elementHostBox.height * newZoom + 2 * options.autoFitPadding;
|
|
1235
|
+
if (finalHeight > options.limitHeight) {
|
|
1236
|
+
const containerEl = boardContainer.closest(`.${options.containerClass}`);
|
|
1237
|
+
containerEl.style.height = `${finalHeight}px`;
|
|
1238
|
+
initializeViewportContainer(board);
|
|
1239
|
+
}
|
|
1240
|
+
else {
|
|
1241
|
+
finalHeight = options.limitHeight;
|
|
1242
|
+
}
|
|
1243
|
+
const centerX = elementHostBox.x + elementHostBox.width / 2;
|
|
1244
|
+
const centerY = elementHostBox.y + elementHostBox.height / 2;
|
|
1245
|
+
const newOrigination = [
|
|
1246
|
+
centerX - finalWidth / 2 / newZoom + scrollBarWidth / 2 / newZoom,
|
|
1247
|
+
centerY - finalHeight / 2 / newZoom + scrollBarWidth / 2 / newZoom
|
|
1248
|
+
];
|
|
1249
|
+
updateViewport(board, newOrigination, newZoom);
|
|
1250
|
+
}
|
|
1251
|
+
/**
|
|
1252
|
+
* apply theme to every element (remove element custom properties)
|
|
1253
|
+
* invoke applyThemeColor
|
|
1254
|
+
*/
|
|
1255
|
+
function updateThemeColor(board, mode) {
|
|
1256
|
+
mode = mode ?? board.theme.themeColorMode;
|
|
1257
|
+
setTheme(board, { themeColorMode: mode });
|
|
1258
|
+
depthFirstRecursion(board, element => {
|
|
1259
|
+
board.applyTheme(element);
|
|
1260
|
+
});
|
|
1261
|
+
}
|
|
1262
|
+
const BoardTransforms = {
|
|
1263
|
+
updatePointerType,
|
|
1264
|
+
updateViewport,
|
|
1265
|
+
fitViewport,
|
|
1266
|
+
updateZoom,
|
|
1267
|
+
updateThemeColor,
|
|
1268
|
+
fitViewportWidth
|
|
1269
|
+
};
|
|
1270
|
+
|
|
1085
1271
|
const IS_FROM_SCROLLING = new WeakMap();
|
|
1086
1272
|
const IS_FROM_VIEWPORT_CHANGE = new WeakMap();
|
|
1087
1273
|
function getViewportContainerRect(board) {
|
|
@@ -1168,8 +1354,9 @@ function setSVGViewBox(board, viewBox) {
|
|
|
1168
1354
|
}
|
|
1169
1355
|
function updateViewportOffset(board) {
|
|
1170
1356
|
const origination = getViewportOrigination(board);
|
|
1171
|
-
if (!origination)
|
|
1357
|
+
if (!origination) {
|
|
1172
1358
|
return;
|
|
1359
|
+
}
|
|
1173
1360
|
const { zoom } = board.viewport;
|
|
1174
1361
|
const viewBox = getViewBox(board, zoom);
|
|
1175
1362
|
const scrollLeft = (origination[0] - viewBox[0]) * zoom;
|
|
@@ -1178,12 +1365,38 @@ function updateViewportOffset(board) {
|
|
|
1178
1365
|
}
|
|
1179
1366
|
function updateViewportContainerScroll(board, left, top, isFromViewportChange = true) {
|
|
1180
1367
|
const viewportContainer = PlaitBoard.getViewportContainer(board);
|
|
1368
|
+
const previousScrollLeft = viewportContainer.scrollLeft;
|
|
1369
|
+
const previousScrollTop = viewportContainer.scrollTop;
|
|
1181
1370
|
if (viewportContainer.scrollLeft !== left || viewportContainer.scrollTop !== top) {
|
|
1182
1371
|
viewportContainer.scrollLeft = left;
|
|
1183
1372
|
viewportContainer.scrollTop = top;
|
|
1184
|
-
|
|
1373
|
+
const offsetWidth = viewportContainer.offsetWidth;
|
|
1374
|
+
const offsetHeight = viewportContainer.offsetHeight;
|
|
1375
|
+
if (previousScrollLeft === viewportContainer.scrollLeft && previousScrollTop === viewportContainer.scrollTop) {
|
|
1376
|
+
// The scroll event cannot be triggered, so the origination is modified directly based on the scroll distance.
|
|
1377
|
+
updateViewportByScrolling(board, previousScrollLeft, previousScrollTop);
|
|
1378
|
+
}
|
|
1379
|
+
else {
|
|
1380
|
+
const isValidLeftOrTop = left > 0 &&
|
|
1381
|
+
top > 0 &&
|
|
1382
|
+
left < viewportContainer.scrollWidth - offsetWidth &&
|
|
1383
|
+
top < viewportContainer.scrollHeight - offsetHeight;
|
|
1384
|
+
if (isFromViewportChange && isValidLeftOrTop) {
|
|
1385
|
+
setIsFromViewportChange(board, true);
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1185
1388
|
}
|
|
1186
1389
|
}
|
|
1390
|
+
function updateViewportByScrolling(board, scrollLeft, scrollTop) {
|
|
1391
|
+
const zoom = board.viewport.zoom;
|
|
1392
|
+
const viewBox = getViewBox(board, zoom);
|
|
1393
|
+
const origination = [scrollLeft / zoom + viewBox[0], scrollTop / zoom + viewBox[1]];
|
|
1394
|
+
if (Point.isEquals(origination, board.viewport.origination)) {
|
|
1395
|
+
return;
|
|
1396
|
+
}
|
|
1397
|
+
BoardTransforms.updateViewport(board, origination);
|
|
1398
|
+
setIsFromScrolling(board, true);
|
|
1399
|
+
}
|
|
1187
1400
|
function initializeViewportContainer(board) {
|
|
1188
1401
|
const { width, height } = getViewportContainerRect(board);
|
|
1189
1402
|
const viewportContainer = PlaitBoard.getViewportContainer(board);
|
|
@@ -2495,132 +2708,6 @@ function addSelectionWithTemporaryElements(board, elements) {
|
|
|
2495
2708
|
}
|
|
2496
2709
|
}
|
|
2497
2710
|
|
|
2498
|
-
function setViewport(board, viewport) {
|
|
2499
|
-
const operation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };
|
|
2500
|
-
board.apply(operation);
|
|
2501
|
-
}
|
|
2502
|
-
const ViewportTransforms$1 = {
|
|
2503
|
-
setViewport
|
|
2504
|
-
};
|
|
2505
|
-
|
|
2506
|
-
function setTheme(board, themeColorMode) {
|
|
2507
|
-
const operation = { type: 'set_theme', properties: board.theme, newProperties: themeColorMode };
|
|
2508
|
-
board.apply(operation);
|
|
2509
|
-
}
|
|
2510
|
-
const ViewportTransforms = {
|
|
2511
|
-
setTheme
|
|
2512
|
-
};
|
|
2513
|
-
|
|
2514
|
-
function updateViewport(board, origination, zoom) {
|
|
2515
|
-
zoom = zoom ?? board.viewport.zoom;
|
|
2516
|
-
setViewport(board, {
|
|
2517
|
-
...board.viewport,
|
|
2518
|
-
zoom,
|
|
2519
|
-
origination
|
|
2520
|
-
});
|
|
2521
|
-
clearViewportOrigination(board);
|
|
2522
|
-
}
|
|
2523
|
-
const updatePointerType = (board, pointer) => {
|
|
2524
|
-
board.pointer = pointer;
|
|
2525
|
-
const boardComponent = BOARD_TO_COMPONENT.get(board);
|
|
2526
|
-
boardComponent?.markForCheck();
|
|
2527
|
-
};
|
|
2528
|
-
function updateZoom(board, newZoom, isCenter = true) {
|
|
2529
|
-
newZoom = clampZoomLevel(newZoom);
|
|
2530
|
-
const mousePoint = PlaitBoard.getMovingPointInBoard(board);
|
|
2531
|
-
const nativeElement = PlaitBoard.getBoardContainer(board);
|
|
2532
|
-
const nativeElementRect = nativeElement.getBoundingClientRect();
|
|
2533
|
-
const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();
|
|
2534
|
-
let focusPoint = [boardContainerRect.width / 2, boardContainerRect.height / 2];
|
|
2535
|
-
if (!isCenter && mousePoint && distanceBetweenPointAndRectangle(mousePoint[0], mousePoint[1], nativeElementRect) === 0) {
|
|
2536
|
-
focusPoint = toPoint(mousePoint[0], mousePoint[1], nativeElement);
|
|
2537
|
-
}
|
|
2538
|
-
const zoom = board.viewport.zoom;
|
|
2539
|
-
const origination = getViewportOrigination(board);
|
|
2540
|
-
const centerX = origination[0] + focusPoint[0] / zoom;
|
|
2541
|
-
const centerY = origination[1] + focusPoint[1] / zoom;
|
|
2542
|
-
const newOrigination = [centerX - focusPoint[0] / newZoom, centerY - focusPoint[1] / newZoom];
|
|
2543
|
-
updateViewport(board, newOrigination, newZoom);
|
|
2544
|
-
}
|
|
2545
|
-
function fitViewport(board) {
|
|
2546
|
-
let scrollBarWidth = getRealScrollBarWidth(board);
|
|
2547
|
-
const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();
|
|
2548
|
-
const elementHostBox = getRectangleByElements(board, board.children, true);
|
|
2549
|
-
const zoom = board.viewport.zoom;
|
|
2550
|
-
const autoFitPadding = 16;
|
|
2551
|
-
const viewportWidth = boardContainerRect.width - 2 * autoFitPadding;
|
|
2552
|
-
const viewportHeight = boardContainerRect.height - 2 * autoFitPadding;
|
|
2553
|
-
let newZoom = zoom;
|
|
2554
|
-
if (viewportWidth < elementHostBox.width || viewportHeight < elementHostBox.height) {
|
|
2555
|
-
newZoom = Math.min(viewportWidth / elementHostBox.width, viewportHeight / elementHostBox.height);
|
|
2556
|
-
}
|
|
2557
|
-
else {
|
|
2558
|
-
newZoom = 1;
|
|
2559
|
-
}
|
|
2560
|
-
const centerPoint = getViewBoxCenterPoint(board);
|
|
2561
|
-
const newOrigination = [
|
|
2562
|
-
centerPoint[0] - boardContainerRect.width / 2 / newZoom + scrollBarWidth / 2 / zoom,
|
|
2563
|
-
centerPoint[1] - boardContainerRect.height / 2 / newZoom + scrollBarWidth / 2 / zoom
|
|
2564
|
-
];
|
|
2565
|
-
updateViewport(board, newOrigination, newZoom);
|
|
2566
|
-
}
|
|
2567
|
-
function fitViewportWidth(board, options) {
|
|
2568
|
-
let scrollBarWidth = getRealScrollBarWidth(board);
|
|
2569
|
-
const boardContainer = PlaitBoard.getBoardContainer(board);
|
|
2570
|
-
const boardContainerRectangle = boardContainer.getBoundingClientRect();
|
|
2571
|
-
let finalWidth = 0;
|
|
2572
|
-
if (options.maxWidth) {
|
|
2573
|
-
finalWidth = options.maxWidth;
|
|
2574
|
-
}
|
|
2575
|
-
else {
|
|
2576
|
-
finalWidth = boardContainerRectangle.width;
|
|
2577
|
-
}
|
|
2578
|
-
const elementHostBox = getRectangleByElements(board, board.children, true);
|
|
2579
|
-
const contentWidth = finalWidth - 2 * options.autoFitPadding;
|
|
2580
|
-
let newZoom = 0;
|
|
2581
|
-
if (contentWidth < elementHostBox.width) {
|
|
2582
|
-
newZoom = Math.min(contentWidth / elementHostBox.width);
|
|
2583
|
-
}
|
|
2584
|
-
else {
|
|
2585
|
-
newZoom = 1;
|
|
2586
|
-
}
|
|
2587
|
-
let finalHeight = elementHostBox.height * newZoom + 2 * options.autoFitPadding;
|
|
2588
|
-
if (finalHeight > options.limitHeight) {
|
|
2589
|
-
const containerEl = boardContainer.closest(`.${options.containerClass}`);
|
|
2590
|
-
containerEl.style.height = `${finalHeight}px`;
|
|
2591
|
-
initializeViewportContainer(board);
|
|
2592
|
-
}
|
|
2593
|
-
else {
|
|
2594
|
-
finalHeight = options.limitHeight;
|
|
2595
|
-
}
|
|
2596
|
-
const centerX = elementHostBox.x + elementHostBox.width / 2;
|
|
2597
|
-
const centerY = elementHostBox.y + elementHostBox.height / 2;
|
|
2598
|
-
const newOrigination = [
|
|
2599
|
-
centerX - finalWidth / 2 / newZoom + scrollBarWidth / 2 / newZoom,
|
|
2600
|
-
centerY - finalHeight / 2 / newZoom + scrollBarWidth / 2 / newZoom
|
|
2601
|
-
];
|
|
2602
|
-
updateViewport(board, newOrigination, newZoom);
|
|
2603
|
-
}
|
|
2604
|
-
/**
|
|
2605
|
-
* apply theme to every element (remove element custom properties)
|
|
2606
|
-
* invoke applyThemeColor
|
|
2607
|
-
*/
|
|
2608
|
-
function updateThemeColor(board, mode) {
|
|
2609
|
-
mode = mode ?? board.theme.themeColorMode;
|
|
2610
|
-
setTheme(board, { themeColorMode: mode });
|
|
2611
|
-
depthFirstRecursion(board, element => {
|
|
2612
|
-
board.applyTheme(element);
|
|
2613
|
-
});
|
|
2614
|
-
}
|
|
2615
|
-
const BoardTransforms = {
|
|
2616
|
-
updatePointerType,
|
|
2617
|
-
updateViewport,
|
|
2618
|
-
fitViewport,
|
|
2619
|
-
updateZoom,
|
|
2620
|
-
updateThemeColor,
|
|
2621
|
-
fitViewportWidth
|
|
2622
|
-
};
|
|
2623
|
-
|
|
2624
2711
|
const removeElements = (board, elements) => {
|
|
2625
2712
|
elements
|
|
2626
2713
|
.map(element => {
|
|
@@ -3354,6 +3441,9 @@ function withMoving(board) {
|
|
|
3354
3441
|
const tolerance = 5;
|
|
3355
3442
|
if (Math.abs(offsetX) > tolerance || Math.abs(offsetY) > tolerance || getMovingElements(board).length > 0) {
|
|
3356
3443
|
throttleRAF(() => {
|
|
3444
|
+
if (!activeElementsRectangle) {
|
|
3445
|
+
return;
|
|
3446
|
+
}
|
|
3357
3447
|
const newRectangle = {
|
|
3358
3448
|
...activeElementsRectangle,
|
|
3359
3449
|
x: activeElementsRectangle.x + offsetX,
|
|
@@ -3987,14 +4077,7 @@ class PlaitBoardComponent {
|
|
|
3987
4077
|
}))
|
|
3988
4078
|
.subscribe((event) => {
|
|
3989
4079
|
const { scrollLeft, scrollTop } = event.target;
|
|
3990
|
-
|
|
3991
|
-
const viewBox = getViewBox(this.board, zoom);
|
|
3992
|
-
const origination = [scrollLeft / zoom + viewBox[0], scrollTop / zoom + viewBox[1]];
|
|
3993
|
-
if (Point.isEquals(origination, this.board.viewport.origination)) {
|
|
3994
|
-
return;
|
|
3995
|
-
}
|
|
3996
|
-
BoardTransforms.updateViewport(this.board, origination);
|
|
3997
|
-
setIsFromScrolling(this.board, true);
|
|
4080
|
+
updateViewportByScrolling(this.board, scrollLeft, scrollTop);
|
|
3998
4081
|
});
|
|
3999
4082
|
});
|
|
4000
4083
|
this.ngZone.runOutsideAngular(() => {
|
|
@@ -4283,5 +4366,5 @@ function createModModifierKeys() {
|
|
|
4283
4366
|
* Generated bundle index. Do not edit.
|
|
4284
4367
|
*/
|
|
4285
4368
|
|
|
4286
|
-
export { A, ACTIVE_STROKE_WIDTH, 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_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, Direction, 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_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, PlaitChildrenElementComponent, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, 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, SELECTION_RECTANGLE_CLASS_NAME, 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, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createSelectionRectangleG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downScale, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRectangle, drawRoundRectangle, fakeNodeWeakMap, findElements, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isFromScrolling, isFromViewportChange, isInPlaitBoard, isLineHitLine, isMainPointer, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, throttleRAF, toImage, toPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
|
|
4369
|
+
export { A, ACTIVE_STROKE_WIDTH, 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_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, Direction, 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_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, PlaitChildrenElementComponent, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, 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, SELECTION_RECTANGLE_CLASS_NAME, 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, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createSelectionRectangleG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downScale, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRectangle, drawRoundRectangle, fakeNodeWeakMap, findElements, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isFromScrolling, isFromViewportChange, isInPlaitBoard, isLineHitLine, isMainPointer, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, temporaryDisableSelection, throttleRAF, toImage, toPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
|
|
4287
4370
|
//# sourceMappingURL=plait-core.mjs.map
|