@plait/core 0.1.2 → 0.1.3

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.
@@ -4,7 +4,7 @@ import { Transforms } from '../transforms';
4
4
  import { toPoint } from './dom';
5
5
  import { getRectangleByElements } from './element';
6
6
  import { distanceBetweenPointAndRectangle } from './math';
7
- import { BOARD_TO_MOVING_POINT } from './weak-maps';
7
+ import { BOARD_TO_MOVING_POINT, BOARD_TO_SCROLLING, BOARD_TO_VIEWPORT_ORIGINATION } from './weak-maps';
8
8
  export function getViewportContainerRect(board) {
9
9
  const { hideScrollbar } = board.options;
10
10
  const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;
@@ -24,8 +24,8 @@ export function getElementHostBBox(board, zoom) {
24
24
  let top;
25
25
  let bottom;
26
26
  if (childrenRect.width < containerWidth) {
27
- const centerX = Math.ceil(childrenRect.x + childrenRect.width / 2);
28
- const halfContainerWidth = Math.ceil(containerWidth / 2);
27
+ const centerX = childrenRect.x + childrenRect.width / 2;
28
+ const halfContainerWidth = containerWidth / 2;
29
29
  left = centerX - halfContainerWidth;
30
30
  right = centerX + halfContainerWidth;
31
31
  }
@@ -34,8 +34,8 @@ export function getElementHostBBox(board, zoom) {
34
34
  right = childrenRect.x + childrenRect.width;
35
35
  }
36
36
  if (childrenRect.height < containerHeight) {
37
- const centerY = Math.ceil(childrenRect.y + childrenRect.height / 2);
38
- const halfContainerHeight = Math.ceil(containerHeight / 2);
37
+ const centerY = childrenRect.y + childrenRect.height / 2;
38
+ const halfContainerHeight = containerHeight / 2;
39
39
  top = centerY - halfContainerHeight;
40
40
  bottom = centerY + halfContainerHeight;
41
41
  }
@@ -87,38 +87,48 @@ export function setSVGViewBox(board, viewBox) {
87
87
  hostElement.setAttribute('viewBox', viewBox.join(' '));
88
88
  }
89
89
  }
90
- export function updateViewportContainerOffset(board, origination) {
91
- origination = origination ?? board.viewport.origination;
90
+ export function updateViewportOffset(board) {
91
+ const origination = getViewportOrigination(board);
92
92
  if (!origination)
93
93
  return;
94
94
  const { zoom } = board.viewport;
95
95
  const viewBox = getViewBox(board, zoom);
96
96
  const scrollLeft = (origination[0] - viewBox[0]) * zoom;
97
97
  const scrollTop = (origination[1] - viewBox[1]) * zoom;
98
- setViewportContainerScroll(board, scrollLeft, scrollTop);
98
+ updateViewportContainerScroll(board, scrollLeft, scrollTop);
99
99
  }
100
- export function setViewportContainerScroll(board, left, top) {
100
+ export function updateViewportContainerScroll(board, left, top) {
101
101
  const viewportContainer = PlaitBoard.getViewportContainer(board);
102
- viewportContainer.scrollLeft = Math.floor(left);
103
- viewportContainer.scrollTop = Math.floor(top);
102
+ if (viewportContainer.scrollLeft !== left || viewportContainer.scrollTop !== top) {
103
+ viewportContainer.scrollLeft = left;
104
+ viewportContainer.scrollTop = top;
105
+ setViewportScrolling(board);
106
+ }
107
+ }
108
+ export function initializeViewportContainer(board) {
109
+ const { width, height } = getViewportContainerRect(board);
110
+ const viewportContainer = PlaitBoard.getViewportContainer(board);
111
+ viewportContainer.style.width = `${width}px`;
112
+ viewportContainer.style.height = `${height}px`;
104
113
  }
105
- export function initializeViewport(board) {
114
+ export function initializeViewBox(board) {
106
115
  const zoom = board.viewport.zoom;
107
116
  const viewBox = getViewBox(board, zoom);
108
117
  setSVGViewBox(board, viewBox);
109
118
  }
110
- export function initializeViewportContainerOffset(board) {
119
+ export function initializeViewportOffset(board) {
111
120
  if (!board.viewport?.origination) {
112
121
  const zoom = board.viewport.zoom;
113
- const viewportContainerBox = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();
122
+ const viewportContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();
114
123
  const viewBox = getViewBox(board, zoom);
115
124
  const centerX = viewBox[0] + viewBox[2] / 2;
116
125
  const centerY = viewBox[1] + viewBox[3] / 2;
117
- const origination = [centerX - viewportContainerBox.width / 2 / zoom, centerY - viewportContainerBox.height / 2 / zoom];
118
- updateViewportContainerOffset(board, origination);
126
+ const origination = [centerX - viewportContainerRect.width / 2 / zoom, centerY - viewportContainerRect.height / 2 / zoom];
127
+ updateViewportOrigination(board, origination);
128
+ updateViewportOffset(board);
119
129
  return;
120
130
  }
121
- updateViewportContainerOffset(board);
131
+ updateViewportOffset(board);
122
132
  }
123
133
  export function setViewport(board, origination, zoom) {
124
134
  zoom = zoom ?? board.viewport.zoom;
@@ -127,6 +137,7 @@ export function setViewport(board, origination, zoom) {
127
137
  zoom,
128
138
  origination
129
139
  });
140
+ clearViewportOrigination(board);
130
141
  }
131
142
  export function changeZoom(board, newZoom, isCenter = true) {
132
143
  newZoom = clampZoomLevel(newZoom);
@@ -138,24 +149,23 @@ export function changeZoom(board, newZoom, isCenter = true) {
138
149
  if (!isCenter && mousePoint && distanceBetweenPointAndRectangle(mousePoint[0], mousePoint[1], rect) === 0) {
139
150
  focusPoint = toPoint(mousePoint[0], mousePoint[1], nativeElement);
140
151
  }
141
- const { origination, zoom } = board.viewport;
152
+ const zoom = board.viewport.zoom;
153
+ const origination = getViewportOrigination(board);
142
154
  const centerX = origination[0] + focusPoint[0] / zoom;
143
155
  const centerY = origination[1] + focusPoint[1] / zoom;
144
- const viewBox = getViewBox(board, newZoom);
145
156
  const newOrigination = [centerX - focusPoint[0] / newZoom, centerY - focusPoint[1] / newZoom];
146
- setSVGViewBox(board, viewBox);
147
157
  setViewport(board, newOrigination, newZoom);
148
158
  }
149
159
  export function fitViewport(board) {
150
160
  const viewportContainerRect = getViewportContainerRect(board);
151
- const rootGroupBox = getRectangleByElements(board, board.children, true);
161
+ const elementHostBox = getRectangleByElements(board, board.children, true);
152
162
  const zoom = board.viewport.zoom;
153
163
  const autoFitPadding = 8;
154
164
  const viewportWidth = viewportContainerRect.width - 2 * autoFitPadding;
155
165
  const viewportHeight = viewportContainerRect.height - 2 * autoFitPadding;
156
166
  let newZoom = zoom;
157
- if (viewportWidth < rootGroupBox.width || viewportHeight < rootGroupBox.height) {
158
- newZoom = Math.min(viewportWidth / rootGroupBox.width, viewportHeight / rootGroupBox.height);
167
+ if (viewportWidth < elementHostBox.width || viewportHeight < elementHostBox.height) {
168
+ newZoom = Math.min(viewportWidth / elementHostBox.width, viewportHeight / elementHostBox.height);
159
169
  }
160
170
  else {
161
171
  newZoom = 1;
@@ -163,8 +173,35 @@ export function fitViewport(board) {
163
173
  const viewBox = getViewBox(board, newZoom);
164
174
  const centerX = viewBox[0] + viewBox[2] / 2;
165
175
  const centerY = viewBox[1] + viewBox[3] / 2;
166
- const newOrigination = [centerX - viewportContainerRect.width / 2 / newZoom, centerY - viewportContainerRect.height / 2 / newZoom];
176
+ const newOrigination = [
177
+ centerX - viewportContainerRect.width / 2 / newZoom,
178
+ centerY - viewportContainerRect.height / 2 / newZoom
179
+ ];
167
180
  setViewport(board, newOrigination, newZoom);
168
181
  }
182
+ export const updateViewportOrigination = (board, origination) => {
183
+ BOARD_TO_VIEWPORT_ORIGINATION.set(board, origination);
184
+ };
185
+ export const clearViewportOrigination = (board) => {
186
+ BOARD_TO_VIEWPORT_ORIGINATION.delete(board);
187
+ };
188
+ export const getViewportOrigination = (board) => {
189
+ const origination = BOARD_TO_VIEWPORT_ORIGINATION.get(board);
190
+ if (origination) {
191
+ return origination;
192
+ }
193
+ else {
194
+ return board.viewport.origination;
195
+ }
196
+ };
197
+ export const isViewportScrolling = (board) => {
198
+ return !!BOARD_TO_SCROLLING.get(board);
199
+ };
200
+ export const setViewportScrolling = (board) => {
201
+ BOARD_TO_SCROLLING.set(board, true);
202
+ };
203
+ export const clearViewportScrolling = (board) => {
204
+ BOARD_TO_SCROLLING.delete(board);
205
+ };
169
206
  export function scrollToRectangle(board, client) { }
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFpdC9zcmMvdXRpbHMvdmlld3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBaUI7SUFDdEQsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDeEMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBRXJGLE9BQU87UUFDSCxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssR0FBRyxjQUFjO1FBQzFDLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxHQUFHLGNBQWM7S0FDL0MsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBaUIsRUFBRSxJQUFZO0lBQzlELE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lB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Q0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxPQUFPLEdBQUcscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUNuSSxXQUFXLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWlCLEVBQUUsTUFBdUIsSUFBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0NST0xMX0JBUl9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkLCBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IHRvUG9pbnQgfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzIH0gZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCB7IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUmVjdGFuZ2xlIH0gZnJvbSAnLi9tYXRoJztcbmltcG9ydCB7IEJPQVJEX1RPX01PVklOR19QT0lOVCB9IGZyb20gJy4vd2Vhay1tYXBzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdwb3J0Q29udGFpbmVyUmVjdChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgaGlkZVNjcm9sbGJhciB9ID0gYm9hcmQub3B0aW9ucztcbiAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IGhpZGVTY3JvbGxiYXIgPyBTQ1JPTExfQkFSX1dJRFRIIDogMDtcbiAgICBjb25zdCB2aWV3cG9ydFJlY3QgPSBQbGFpdEJvYXJkLmdldEJvYXJkTmF0aXZlRWxlbWVudChib2FyZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogdmlld3BvcnRSZWN0LndpZHRoICsgc2Nyb2xsQmFyV2lkdGgsXG4gICAgICAgIGhlaWdodDogdmlld3BvcnRSZWN0LmhlaWdodCArIHNjcm9sbEJhcldpZHRoXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRIb3N0QkJveChib2FyZDogUGxhaXRCb2FyZCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3QgY2hpbGRyZW5SZWN0ID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyUmVjdCA9IGdldFZpZXdwb3J0Q29udGFpbmVyUmVjdChib2FyZCk7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB2aWV3cG9ydENvbnRhaW5lclJlY3Qud2lkdGggLyB6b29tO1xuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHZpZXdwb3J0Q29udGFpbmVyUmVjdC5oZWlnaHQgLyB6b29tO1xuICAgIGxldCBsZWZ0OiBudW1iZXI7XG4gICAgbGV0IHJpZ2h0OiBudW1iZXI7XG4gICAgbGV0IHRvcDogbnVtYmVyO1xuICAgIGxldCBib3R0b206IG51bWJlcjtcblxuICAgIGlmIChjaGlsZHJlblJlY3Qud2lkdGggPCBjb250YWluZXJXaWR0aCkge1xuICAgICAgICBjb25zdCBjZW50ZXJYID0gTWF0aC5jZWlsKGNoaWxkcmVuUmVjdC54ICsgY2hpbGRyZW5SZWN0LndpZHRoIC8gMik7XG4gICAgICAgIGNvbnN0IGhhbGZDb250YWluZXJXaWR0aCA9IE1hdGguY2VpbChjb250YWluZXJXaWR0aCAvIDIpO1xuICAgICAgICBsZWZ0ID0gY2VudGVyWCAtIGhhbGZDb250YWluZXJXaWR0aDtcbiAgICAgICAgcmlnaHQgPSBjZW50ZXJYICsgaGFsZkNvbnRhaW5lcldpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnQgPSBjaGlsZHJlblJlY3QueDtcbiAgICAgICAgcmlnaHQgPSBjaGlsZHJlblJlY3QueCArIGNoaWxkcmVuUmVjdC53aWR0aDtcbiAgICB9XG4gICAgaWYgKGNoaWxkcmVuUmVjdC5oZWlnaHQgPCBjb250YWluZXJIZWlnaHQpIHtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IE1hdGguY2VpbChjaGlsZHJlblJlY3QueSArIGNoaWxkcmVuUmVjdC5oZWlnaHQgLyAyKTtcbiAgICAgICAgY29uc3QgaGFsZkNvbnRhaW5lckhlaWdodCA9IE1hdGguY2VpbChjb250YWluZXJIZWlnaHQgLyAyKTtcbiAgICAgICAgdG9wID0gY2VudGVyWSAtIGhhbGZDb250YWluZXJIZWlnaHQ7XG4gICAgICAgIGJvdHRvbSA9IGNlbnRlclkgKyBoYWxmQ29udGFpbmVySGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcCA9IGNoaWxkcmVuUmVjdC55O1xuICAgICAgICBib3R0b20gPSBjaGlsZHJlblJlY3QueSArIGNoaWxkcmVuUmVjdC5oZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHJpZ2h0LFxuICAgICAgICB0b3AsXG4gICAgICAgIGJvdHRvbVxuICAgIH07XG59XG5cbi8qKlxuICog6aqM6K+B57yp5pS+5q+U5piv5ZCm56ym5ZCI6ZmQ5Yi277yM5aaC5p6c6LaF5Ye66ZmQ5Yi277yM5YiZ6L+U5Zue5ZCI6YCC55qE57yp5pS+5q+UXG4gKiBAcGFyYW0gem9vbSDnvKnmlL7mr5RcbiAqIEBwYXJhbSBtaW5ab29tIOacgOWwj+e8qeaUvuavlFxuICogQHBhcmFtIG1heFpvb20g5pyA5aSn57yp5pS+5q+UXG4gKiBAcmV0dXJucyDmraPnoa7nmoTnvKnmlL7mr5RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wWm9vbUxldmVsKHpvb206IG51bWJlciwgbWluWm9vbSA9IDAuMiwgbWF4Wm9vbSA9IDQpIHtcbiAgICByZXR1cm4gem9vbSA8IG1pblpvb20gPyBtaW5ab29tIDogem9vbSA+IG1heFpvb20gPyBtYXhab29tIDogem9vbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHpvb206IG51bWJlcikge1xuICAgIGNvbnN0IHsgaGlkZVNjcm9sbGJhciB9ID0gYm9hcmQub3B0aW9ucztcbiAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IGhpZGVTY3JvbGxiYXIgPyBTQ1JPTExfQkFSX1dJRFRIIDogMDtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQpO1xuICAgIGNvbnN0IGVsZW1lbnRIb3N0QkJveCA9IGdldEVsZW1lbnRIb3N0QkJveChib2FyZCwgem9vbSk7XG4gICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSB2aWV3cG9ydENvbnRhaW5lclJlY3Qud2lkdGggLyAyO1xuICAgIGNvbnN0IHZlcnRpY2FsUGFkZGluZyA9IHZpZXdwb3J0Q29udGFpbmVyUmVjdC5oZWlnaHQgLyAyO1xuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSAoZWxlbWVudEhvc3RCQm94LnJpZ2h0IC0gZWxlbWVudEhvc3RCQm94LmxlZnQpICogem9vbSArIDIgKiBob3Jpem9udGFsUGFkZGluZyArIHNjcm9sbEJhcldpZHRoO1xuICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gKGVsZW1lbnRIb3N0QkJveC5ib3R0b20gLSBlbGVtZW50SG9zdEJCb3gudG9wKSAqIHpvb20gKyAyICogdmVydGljYWxQYWRkaW5nICsgc2Nyb2xsQmFyV2lkdGg7XG4gICAgY29uc3Qgdmlld0JveCA9IFtcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LmxlZnQgLSBob3Jpem9udGFsUGFkZGluZyAvIHpvb20sXG4gICAgICAgIGVsZW1lbnRIb3N0QkJveC50b3AgLSB2ZXJ0aWNhbFBhZGRpbmcgLyB6b29tLFxuICAgICAgICB2aWV3cG9ydFdpZHRoIC8gem9vbSxcbiAgICAgICAgdmlld3BvcnRIZWlnaHQgLyB6b29tXG4gICAgXTtcbiAgICByZXR1cm4gdmlld0JveDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNWR1ZpZXdCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHZpZXdCb3g6IG51bWJlcltdKSB7XG4gICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpO1xuICAgIGhvc3RFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIGhvc3RFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld0JveFsyXSAqIHpvb219cHhgO1xuICAgIGhvc3RFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3ZpZXdCb3hbM10gKiB6b29tfXB4YDtcblxuICAgIGlmICh2aWV3Qm94ICYmIHZpZXdCb3hbMl0gPiAwICYmIHZpZXdCb3hbM10gPiAwKSB7XG4gICAgICAgIGhvc3RFbGVtZW50LnNldEF0dHJpYnV0ZSgndmlld0JveCcsIHZpZXdCb3guam9pbignICcpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWaWV3cG9ydENvbnRhaW5lck9mZnNldChib2FyZDogUGxhaXRCb2FyZCwgb3JpZ2luYXRpb24/OiBudW1iZXJbXSkge1xuICAgIG9yaWdpbmF0aW9uID0gb3JpZ2luYXRpb24gPz8gYm9hcmQudmlld3BvcnQub3JpZ2luYXRpb247XG4gICAgaWYgKCFvcmlnaW5hdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgeyB6b29tIH0gPSBib2FyZC52aWV3cG9ydDtcbiAgICBjb25zdCB2aWV3Qm94ID0gZ2V0Vmlld0JveChib2FyZCwgem9vbSk7XG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IChvcmlnaW5hdGlvbiFbMF0gLSB2aWV3Qm94WzBdKSAqIHpvb207XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gKG9yaWdpbmF0aW9uIVsxXSAtIHZpZXdCb3hbMV0pICogem9vbTtcbiAgICBzZXRWaWV3cG9ydENvbnRhaW5lclNjcm9sbChib2FyZCwgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFZpZXdwb3J0Q29udGFpbmVyU2Nyb2xsKGJvYXJkOiBQbGFpdEJvYXJkLCBsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyKSB7XG4gICAgY29uc3Qgdmlld3BvcnRDb250YWluZXIgPSBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKTtcbiAgICB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxMZWZ0ID0gTWF0aC5mbG9vcihsZWZ0KTtcbiAgICB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxUb3AgPSBNYXRoLmZsb29yKHRvcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplVmlld3BvcnQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCB2aWV3Qm94ID0gZ2V0Vmlld0JveChib2FyZCwgem9vbSk7XG4gICAgc2V0U1ZHVmlld0JveChib2FyZCwgdmlld0JveCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplVmlld3BvcnRDb250YWluZXJPZmZzZXQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBpZiAoIWJvYXJkLnZpZXdwb3J0Py5vcmlnaW5hdGlvbikge1xuICAgICAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcblxuICAgICAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lckJveCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmROYXRpdmVFbGVtZW50KGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgdmlld0JveCA9IGdldFZpZXdCb3goYm9hcmQsIHpvb20pO1xuICAgICAgICBjb25zdCBjZW50ZXJYID0gdmlld0JveFswXSArIHZpZXdCb3hbMl0gLyAyO1xuICAgICAgICBjb25zdCBjZW50ZXJZID0gdmlld0JveFsxXSArIHZpZXdCb3hbM10gLyAyO1xuICAgICAgICBjb25zdCBvcmlnaW5hdGlvbiA9IFtjZW50ZXJYIC0gdmlld3BvcnRDb250YWluZXJCb3gud2lkdGggLyAyIC8gem9vbSwgY2VudGVyWSAtIHZpZXdwb3J0Q29udGFpbmVyQm94LmhlaWdodCAvIDIgLyB6b29tXTtcbiAgICAgICAgdXBkYXRlVmlld3BvcnRDb250YWluZXJPZmZzZXQoYm9hcmQsIG9yaWdpbmF0aW9uKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGRhdGVWaWV3cG9ydENvbnRhaW5lck9mZnNldChib2FyZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRWaWV3cG9ydChib2FyZDogUGxhaXRCb2FyZCwgb3JpZ2luYXRpb246IG51bWJlcltdLCB6b29tPzogbnVtYmVyKSB7XG4gICAgem9vbSA9IHpvb20gPz8gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBUcmFuc2Zvcm1zLnNldFZpZXdwb3J0KGJvYXJkLCB7XG4gICAgICAgIC4uLmJvYXJkLnZpZXdwb3J0LFxuICAgICAgICB6b29tLFxuICAgICAgICBvcmlnaW5hdGlvblxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlWm9vbShib2FyZDogUGxhaXRCb2FyZCwgbmV3Wm9vbTogbnVtYmVyLCBpc0NlbnRlciA9IHRydWUpIHtcbiAgICBuZXdab29tID0gY2xhbXBab29tTGV2ZWwobmV3Wm9vbSk7XG5cbiAgICBjb25zdCBtb3VzZVBvaW50ID0gQk9BUkRfVE9fTU9WSU5HX1BPSU5ULmdldChib2FyZCk7XG4gICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmROYXRpdmVFbGVtZW50KGJvYXJkKTtcbiAgICBjb25zdCByZWN0ID0gbmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQpO1xuICAgIGxldCBmb2N1c1BvaW50ID0gW3ZpZXdwb3J0Q29udGFpbmVyUmVjdC53aWR0aCAvIDIsIHZpZXdwb3J0Q29udGFpbmVyUmVjdC5oZWlnaHQgLyAyXTtcblxuICAgIGlmICghaXNDZW50ZXIgJiYgbW91c2VQb2ludCAmJiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFJlY3RhbmdsZShtb3VzZVBvaW50WzBdLCBtb3VzZVBvaW50WzFdLCByZWN0KSA9PT0gMCkge1xuICAgICAgICBmb2N1c1BvaW50ID0gdG9Qb2ludChtb3VzZVBvaW50WzBdLCBtb3VzZVBvaW50WzFdLCAobmF0aXZlRWxlbWVudCBhcyB1bmtub3duKSBhcyBTVkdFbGVtZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbmF0aW9uLCB6b29tIH0gPSBib2FyZC52aWV3cG9ydDtcbiAgICBjb25zdCBjZW50ZXJYID0gb3JpZ2luYXRpb24hWzBdICsgZm9jdXNQb2ludFswXSAvIHpvb207XG4gICAgY29uc3QgY2VudGVyWSA9IG9yaWdpbmF0aW9uIVsxXSArIGZvY3VzUG9pbnRbMV0gLyB6b29tO1xuICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KGJvYXJkLCBuZXdab29tKTtcbiAgICBjb25zdCBuZXdPcmlnaW5hdGlvbiA9IFtjZW50ZXJYIC0gZm9jdXNQb2ludFswXSAvIG5ld1pvb20sIGNlbnRlclkgLSBmb2N1c1BvaW50WzFdIC8gbmV3Wm9vbV07XG5cbiAgICBzZXRTVkdWaWV3Qm94KGJvYXJkLCB2aWV3Qm94KTtcbiAgICBzZXRWaWV3cG9ydChib2FyZCwgbmV3T3JpZ2luYXRpb24sIG5ld1pvb20pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZml0Vmlld3BvcnQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQpO1xuICAgIGNvbnN0IHJvb3RHcm91cEJveCA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCBhdXRvRml0UGFkZGluZyA9IDg7XG4gICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHZpZXdwb3J0Q29udGFpbmVyUmVjdC53aWR0aCAtIDIgKiBhdXRvRml0UGFkZGluZztcbiAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHZpZXdwb3J0Q29udGFpbmVyUmVjdC5oZWlnaHQgLSAyICogYXV0b0ZpdFBhZGRpbmc7XG5cbiAgICBsZXQgbmV3Wm9vbSA9IHpvb207XG4gICAgaWYgKHZpZXdwb3J0V2lkdGggPCByb290R3JvdXBCb3gud2lkdGggfHwgdmlld3BvcnRIZWlnaHQgPCByb290R3JvdXBCb3guaGVpZ2h0KSB7XG4gICAgICAgIG5ld1pvb20gPSBNYXRoLm1pbih2aWV3cG9ydFdpZHRoIC8gcm9vdEdyb3VwQm94LndpZHRoLCB2aWV3cG9ydEhlaWdodCAvIHJvb3RHcm91cEJveC5oZWlnaHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1pvb20gPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KGJvYXJkLCBuZXdab29tKTtcbiAgICBjb25zdCBjZW50ZXJYID0gdmlld0JveFswXSArIHZpZXdCb3hbMl0gLyAyO1xuICAgIGNvbnN0IGNlbnRlclkgPSB2aWV3Qm94WzFdICsgdmlld0JveFszXSAvIDI7XG4gICAgY29uc3QgbmV3T3JpZ2luYXRpb24gPSBbY2VudGVyWCAtIHZpZXdwb3J0Q29udGFpbmVyUmVjdC53aWR0aCAvIDIgLyBuZXdab29tLCBjZW50ZXJZIC0gdmlld3BvcnRDb250YWluZXJSZWN0LmhlaWdodCAvIDIgLyBuZXdab29tXTtcbiAgICBzZXRWaWV3cG9ydChib2FyZCwgbmV3T3JpZ2luYXRpb24sIG5ld1pvb20pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9SZWN0YW5nbGUoYm9hcmQ6IFBsYWl0Qm9hcmQsIGNsaWVudDogUmVjdGFuZ2xlQ2xpZW50KSB7fVxuIl19
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFpdC9zcmMvdXRpbHMvdmlld3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV2RyxNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBaUI7SUFDdEQsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDeEMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBRXJGLE9BQU87UUFDSCxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssR0FBRyxjQUFjO1FBQzFDLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxHQUFHLGNBQWM7S0FDL0MsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBaUIsRUFBRSxJQUFZO0lBQzlELE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFB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QUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELElBQUksV0FBVyxFQUFFO1FBQ2IsT0FBTyxXQUFXLENBQUM7S0FDdEI7U0FBTTtRQUNILE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7S0FDckM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNyRCxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDdEQsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUN4RCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWlCLEVBQUUsTUFBdUIsSUFBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0NST0xMX0JBUl9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyB0b1BvaW50IH0gZnJvbSAnLi9kb20nO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFJlY3RhbmdsZSB9IGZyb20gJy4vbWF0aCc7XG5pbXBvcnQgeyBCT0FSRF9UT19NT1ZJTkdfUE9JTlQsIEJPQVJEX1RPX1NDUk9MTElORywgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04gfSBmcm9tICcuL3dlYWstbWFwcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IGhpZGVTY3JvbGxiYXIgfSA9IGJvYXJkLm9wdGlvbnM7XG4gICAgY29uc3Qgc2Nyb2xsQmFyV2lkdGggPSBoaWRlU2Nyb2xsYmFyID8gU0NST0xMX0JBUl9XSURUSCA6IDA7XG4gICAgY29uc3Qgdmlld3BvcnRSZWN0ID0gUGxhaXRCb2FyZC5nZXRCb2FyZE5hdGl2ZUVsZW1lbnQoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHZpZXdwb3J0UmVjdC53aWR0aCArIHNjcm9sbEJhcldpZHRoLFxuICAgICAgICBoZWlnaHQ6IHZpZXdwb3J0UmVjdC5oZWlnaHQgKyBzY3JvbGxCYXJXaWR0aFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50SG9zdEJCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHpvb206IG51bWJlcikge1xuICAgIGNvbnN0IGNoaWxkcmVuUmVjdCA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQpO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdmlld3BvcnRDb250YWluZXJSZWN0LndpZHRoIC8gem9vbTtcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB2aWV3cG9ydENvbnRhaW5lclJlY3QuaGVpZ2h0IC8gem9vbTtcbiAgICBsZXQgbGVmdDogbnVtYmVyO1xuICAgIGxldCByaWdodDogbnVtYmVyO1xuICAgIGxldCB0b3A6IG51bWJlcjtcbiAgICBsZXQgYm90dG9tOiBudW1iZXI7XG5cbiAgICBpZiAoY2hpbGRyZW5SZWN0LndpZHRoIDwgY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgY29uc3QgY2VudGVyWCA9IGNoaWxkcmVuUmVjdC54ICsgY2hpbGRyZW5SZWN0LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgaGFsZkNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyV2lkdGggLyAyO1xuICAgICAgICBsZWZ0ID0gY2VudGVyWCAtIGhhbGZDb250YWluZXJXaWR0aDtcbiAgICAgICAgcmlnaHQgPSBjZW50ZXJYICsgaGFsZkNvbnRhaW5lcldpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnQgPSBjaGlsZHJlblJlY3QueDtcbiAgICAgICAgcmlnaHQgPSBjaGlsZHJlblJlY3QueCArIGNoaWxkcmVuUmVjdC53aWR0aDtcbiAgICB9XG4gICAgaWYgKGNoaWxkcmVuUmVjdC5oZWlnaHQgPCBjb250YWluZXJIZWlnaHQpIHtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IGNoaWxkcmVuUmVjdC55ICsgY2hpbGRyZW5SZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IGhhbGZDb250YWluZXJIZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLyAyO1xuICAgICAgICB0b3AgPSBjZW50ZXJZIC0gaGFsZkNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgYm90dG9tID0gY2VudGVyWSArIGhhbGZDb250YWluZXJIZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gY2hpbGRyZW5SZWN0Lnk7XG4gICAgICAgIGJvdHRvbSA9IGNoaWxkcmVuUmVjdC55ICsgY2hpbGRyZW5SZWN0LmhlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgYm90dG9tXG4gICAgfTtcbn1cblxuLyoqXG4gKiDpqozor4HnvKnmlL7mr5TmmK/lkKbnrKblkIjpmZDliLbvvIzlpoLmnpzotoXlh7rpmZDliLbvvIzliJnov5Tlm57lkIjpgILnmoTnvKnmlL7mr5RcbiAqIEBwYXJhbSB6b29tIOe8qeaUvuavlFxuICogQHBhcmFtIG1pblpvb20g5pyA5bCP57yp5pS+5q+UXG4gKiBAcGFyYW0gbWF4Wm9vbSDmnIDlpKfnvKnmlL7mr5RcbiAqIEByZXR1cm5zIOato+ehrueahOe8qeaUvuavlFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXBab29tTGV2ZWwoem9vbTogbnVtYmVyLCBtaW5ab29tID0gMC4yLCBtYXhab29tID0gNCkge1xuICAgIHJldHVybiB6b29tIDwgbWluWm9vbSA/IG1pblpvb20gOiB6b29tID4gbWF4Wm9vbSA/IG1heFpvb20gOiB6b29tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0JveChib2FyZDogUGxhaXRCb2FyZCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3QgeyBoaWRlU2Nyb2xsYmFyIH0gPSBib2FyZC5vcHRpb25zO1xuICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gaGlkZVNjcm9sbGJhciA/IFNDUk9MTF9CQVJfV0lEVEggOiAwO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyUmVjdCA9IGdldFZpZXdwb3J0Q29udGFpbmVyUmVjdChib2FyZCk7XG4gICAgY29uc3QgZWxlbWVudEhvc3RCQm94ID0gZ2V0RWxlbWVudEhvc3RCQm94KGJvYXJkLCB6b29tKTtcbiAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IHZpZXdwb3J0Q29udGFpbmVyUmVjdC53aWR0aCAvIDI7XG4gICAgY29uc3QgdmVydGljYWxQYWRkaW5nID0gdmlld3BvcnRDb250YWluZXJSZWN0LmhlaWdodCAvIDI7XG4gICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IChlbGVtZW50SG9zdEJCb3gucmlnaHQgLSBlbGVtZW50SG9zdEJCb3gubGVmdCkgKiB6b29tICsgMiAqIGhvcml6b250YWxQYWRkaW5nICsgc2Nyb2xsQmFyV2lkdGg7XG4gICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSAoZWxlbWVudEhvc3RCQm94LmJvdHRvbSAtIGVsZW1lbnRIb3N0QkJveC50b3ApICogem9vbSArIDIgKiB2ZXJ0aWNhbFBhZGRpbmcgKyBzY3JvbGxCYXJXaWR0aDtcbiAgICBjb25zdCB2aWV3Qm94ID0gW1xuICAgICAgICBlbGVtZW50SG9zdEJCb3gubGVmdCAtIGhvcml6b250YWxQYWRkaW5nIC8gem9vbSxcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LnRvcCAtIHZlcnRpY2FsUGFkZGluZyAvIHpvb20sXG4gICAgICAgIHZpZXdwb3J0V2lkdGggLyB6b29tLFxuICAgICAgICB2aWV3cG9ydEhlaWdodCAvIHpvb21cbiAgICBdO1xuICAgIHJldHVybiB2aWV3Qm94O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U1ZHVmlld0JveChib2FyZDogUGxhaXRCb2FyZCwgdmlld0JveDogbnVtYmVyW10pIHtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCk7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3Qm94WzJdICogem9vbX1weGA7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld0JveFszXSAqIHpvb219cHhgO1xuXG4gICAgaWYgKHZpZXdCb3ggJiYgdmlld0JveFsyXSA+IDAgJiYgdmlld0JveFszXSA+IDApIHtcbiAgICAgICAgaG9zdEVsZW1lbnQuc2V0QXR0cmlidXRlKCd2aWV3Qm94Jywgdmlld0JveC5qb2luKCcgJykpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkKTtcbiAgICBpZiAoIW9yaWdpbmF0aW9uKSByZXR1cm47XG5cbiAgICBjb25zdCB7IHpvb20gfSA9IGJvYXJkLnZpZXdwb3J0O1xuICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKG9yaWdpbmF0aW9uIVswXSAtIHZpZXdCb3hbMF0pICogem9vbTtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAob3JpZ2luYXRpb24hWzFdIC0gdmlld0JveFsxXSkgKiB6b29tO1xuICAgIHVwZGF0ZVZpZXdwb3J0Q29udGFpbmVyU2Nyb2xsKGJvYXJkLCBzY3JvbGxMZWZ0LCBzY3JvbGxUb3ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmlld3BvcnRDb250YWluZXJTY3JvbGwoYm9hcmQ6IFBsYWl0Qm9hcmQsIGxlZnQ6IG51bWJlciwgdG9wOiBudW1iZXIpIHtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lciA9IFBsYWl0Qm9hcmQuZ2V0Vmlld3BvcnRDb250YWluZXIoYm9hcmQpO1xuICAgIGlmICh2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxMZWZ0ICE9PSBsZWZ0IHx8IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFRvcCAhPT0gdG9wKSB7XG4gICAgICAgIHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgICB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxUb3AgPSB0b3A7XG4gICAgICAgIHNldFZpZXdwb3J0U2Nyb2xsaW5nKGJvYXJkKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplVmlld3BvcnRDb250YWluZXIoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFZpZXdwb3J0Q29udGFpbmVyUmVjdChib2FyZCk7XG4gICAgY29uc3Qgdmlld3BvcnRDb250YWluZXIgPSBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKTtcbiAgICB2aWV3cG9ydENvbnRhaW5lci5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICB2aWV3cG9ydENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZXdCb3goYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCB2aWV3Qm94ID0gZ2V0Vmlld0JveChib2FyZCwgem9vbSk7XG4gICAgc2V0U1ZHVmlld0JveChib2FyZCwgdmlld0JveCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplVmlld3BvcnRPZmZzZXQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBpZiAoIWJvYXJkLnZpZXdwb3J0Py5vcmlnaW5hdGlvbikge1xuICAgICAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRDb250YWluZXJSZWN0ID0gUGxhaXRCb2FyZC5nZXRCb2FyZE5hdGl2ZUVsZW1lbnQoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB2aWV3Qm94ID0gZ2V0Vmlld0JveChib2FyZCwgem9vbSk7XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSB2aWV3Qm94WzBdICsgdmlld0JveFsyXSAvIDI7XG4gICAgICAgIGNvbnN0IGNlbnRlclkgPSB2aWV3Qm94WzFdICsgdmlld0JveFszXSAvIDI7XG4gICAgICAgIGNvbnN0IG9yaWdpbmF0aW9uID0gW2NlbnRlclggLSB2aWV3cG9ydENvbnRhaW5lclJlY3Qud2lkdGggLyAyIC8gem9vbSwgY2VudGVyWSAtIHZpZXdwb3J0Q29udGFpbmVyUmVjdC5oZWlnaHQgLyAyIC8gem9vbV0gYXMgUG9pbnQ7XG4gICAgICAgIHVwZGF0ZVZpZXdwb3J0T3JpZ2luYXRpb24oYm9hcmQsIG9yaWdpbmF0aW9uKTtcbiAgICAgICAgdXBkYXRlVmlld3BvcnRPZmZzZXQoYm9hcmQpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFZpZXdwb3J0KGJvYXJkOiBQbGFpdEJvYXJkLCBvcmlnaW5hdGlvbjogUG9pbnQsIHpvb20/OiBudW1iZXIpIHtcbiAgICB6b29tID0gem9vbSA/PyBib2FyZC52aWV3cG9ydC56b29tO1xuICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQoYm9hcmQsIHtcbiAgICAgICAgLi4uYm9hcmQudmlld3BvcnQsXG4gICAgICAgIHpvb20sXG4gICAgICAgIG9yaWdpbmF0aW9uXG4gICAgfSk7XG4gICAgY2xlYXJWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVpvb20oYm9hcmQ6IFBsYWl0Qm9hcmQsIG5ld1pvb206IG51bWJlciwgaXNDZW50ZXIgPSB0cnVlKSB7XG4gICAgbmV3Wm9vbSA9IGNsYW1wWm9vbUxldmVsKG5ld1pvb20pO1xuXG4gICAgY29uc3QgbW91c2VQb2ludCA9IEJPQVJEX1RPX01PVklOR19QT0lOVC5nZXQoYm9hcmQpO1xuICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSBQbGFpdEJvYXJkLmdldEJvYXJkTmF0aXZlRWxlbWVudChib2FyZCk7XG4gICAgY29uc3QgcmVjdCA9IG5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgdmlld3BvcnRDb250YWluZXJSZWN0ID0gZ2V0Vmlld3BvcnRDb250YWluZXJSZWN0KGJvYXJkKTtcbiAgICBsZXQgZm9jdXNQb2ludCA9IFt2aWV3cG9ydENvbnRhaW5lclJlY3Qud2lkdGggLyAyLCB2aWV3cG9ydENvbnRhaW5lclJlY3QuaGVpZ2h0IC8gMl07XG5cbiAgICBpZiAoIWlzQ2VudGVyICYmIG1vdXNlUG9pbnQgJiYgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRSZWN0YW5nbGUobW91c2VQb2ludFswXSwgbW91c2VQb2ludFsxXSwgcmVjdCkgPT09IDApIHtcbiAgICAgICAgZm9jdXNQb2ludCA9IHRvUG9pbnQobW91c2VQb2ludFswXSwgbW91c2VQb2ludFsxXSwgKG5hdGl2ZUVsZW1lbnQgYXMgdW5rbm93bikgYXMgU1ZHRWxlbWVudCk7XG4gICAgfVxuXG4gICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkKTtcbiAgICBjb25zdCBjZW50ZXJYID0gb3JpZ2luYXRpb24hWzBdICsgZm9jdXNQb2ludFswXSAvIHpvb207XG4gICAgY29uc3QgY2VudGVyWSA9IG9yaWdpbmF0aW9uIVsxXSArIGZvY3VzUG9pbnRbMV0gLyB6b29tO1xuICAgIGNvbnN0IG5ld09yaWdpbmF0aW9uID0gW2NlbnRlclggLSBmb2N1c1BvaW50WzBdIC8gbmV3Wm9vbSwgY2VudGVyWSAtIGZvY3VzUG9pbnRbMV0gLyBuZXdab29tXSBhcyBQb2ludDtcbiAgICBzZXRWaWV3cG9ydChib2FyZCwgbmV3T3JpZ2luYXRpb24sIG5ld1pvb20pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZml0Vmlld3BvcnQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQpO1xuICAgIGNvbnN0IGVsZW1lbnRIb3N0Qm94ID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xuICAgIGNvbnN0IHpvb20gPSBib2FyZC52aWV3cG9ydC56b29tO1xuICAgIGNvbnN0IGF1dG9GaXRQYWRkaW5nID0gODtcbiAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gdmlld3BvcnRDb250YWluZXJSZWN0LndpZHRoIC0gMiAqIGF1dG9GaXRQYWRkaW5nO1xuICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gdmlld3BvcnRDb250YWluZXJSZWN0LmhlaWdodCAtIDIgKiBhdXRvRml0UGFkZGluZztcblxuICAgIGxldCBuZXdab29tID0gem9vbTtcbiAgICBpZiAodmlld3BvcnRXaWR0aCA8IGVsZW1lbnRIb3N0Qm94LndpZHRoIHx8IHZpZXdwb3J0SGVpZ2h0IDwgZWxlbWVudEhvc3RCb3guaGVpZ2h0KSB7XG4gICAgICAgIG5ld1pvb20gPSBNYXRoLm1pbih2aWV3cG9ydFdpZHRoIC8gZWxlbWVudEhvc3RCb3gud2lkdGgsIHZpZXdwb3J0SGVpZ2h0IC8gZWxlbWVudEhvc3RCb3guaGVpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBuZXdab29tID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3Qm94ID0gZ2V0Vmlld0JveChib2FyZCwgbmV3Wm9vbSk7XG4gICAgY29uc3QgY2VudGVyWCA9IHZpZXdCb3hbMF0gKyB2aWV3Qm94WzJdIC8gMjtcbiAgICBjb25zdCBjZW50ZXJZID0gdmlld0JveFsxXSArIHZpZXdCb3hbM10gLyAyO1xuICAgIGNvbnN0IG5ld09yaWdpbmF0aW9uID0gW1xuICAgICAgICBjZW50ZXJYIC0gdmlld3BvcnRDb250YWluZXJSZWN0LndpZHRoIC8gMiAvIG5ld1pvb20sXG4gICAgICAgIGNlbnRlclkgLSB2aWV3cG9ydENvbnRhaW5lclJlY3QuaGVpZ2h0IC8gMiAvIG5ld1pvb21cbiAgICBdIGFzIFBvaW50O1xuICAgIHNldFZpZXdwb3J0KGJvYXJkLCBuZXdPcmlnaW5hdGlvbiwgbmV3Wm9vbSk7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVWaWV3cG9ydE9yaWdpbmF0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBvcmlnaW5hdGlvbjogUG9pbnQpID0+IHtcbiAgICBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTi5zZXQoYm9hcmQsIG9yaWdpbmF0aW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhclZpZXdwb3J0T3JpZ2luYXRpb24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTi5kZWxldGUoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZXdwb3J0T3JpZ2luYXRpb24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hdGlvbiA9IEJPQVJEX1RPX1ZJRVdQT1JUX09SSUdJTkFUSU9OLmdldChib2FyZCk7XG4gICAgaWYgKG9yaWdpbmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYm9hcmQudmlld3BvcnQub3JpZ2luYXRpb247XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzVmlld3BvcnRTY3JvbGxpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFCT0FSRF9UT19TQ1JPTExJTkcuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRWaWV3cG9ydFNjcm9sbGluZyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIEJPQVJEX1RPX1NDUk9MTElORy5zZXQoYm9hcmQsIHRydWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyVmlld3BvcnRTY3JvbGxpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBCT0FSRF9UT19TQ1JPTExJTkcuZGVsZXRlKGJvYXJkKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1JlY3RhbmdsZShib2FyZDogUGxhaXRCb2FyZCwgY2xpZW50OiBSZWN0YW5nbGVDbGllbnQpIHt9XG4iXX0=
@@ -8,8 +8,10 @@ export const BOARD_TO_HOST = new WeakMap();
8
8
  export const BOARD_TO_ELEMENT_HOST = new WeakMap();
9
9
  export const BOARD_TO_SELECTED_ELEMENT = new WeakMap();
10
10
  export const BOARD_TO_MOVING_POINT = new WeakMap();
11
+ export const BOARD_TO_VIEWPORT_ORIGINATION = new WeakMap();
11
12
  export const BOARD_TO_IS_SELECTION_MOVING = new WeakMap();
12
13
  // save no standard selected elements
13
14
  export const BOARD_TO_TEMPORARY_ELEMENTS = new WeakMap();
14
15
  export const BOARD_TO_MOVING_ELEMENT = new WeakMap();
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vhay1tYXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL3V0aWxzL3dlYWstbWFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSw4QkFBOEI7QUFDOUIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFpQyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUF1QyxDQUFDO0FBRXJGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUF3QixDQUFDO0FBRXRFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBNkIsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBMkIsQ0FBQztBQUU1RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFBOEIsQ0FBQztBQUVuRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztBQUUvRSxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxPQUFPLEVBQThCLENBQUM7QUFFckYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3VnaFNWRyB9IGZyb20gJ3JvdWdoanMvYmluL3N2Zyc7XG5pbXBvcnQgeyBCb2FyZENvbXBvbmVudEludGVyZmFjZSB9IGZyb20gJy4uL2JvYXJkL2JvYXJkLmNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wb2ludCc7XG5cbi8vIHJlY29yZCByaWNodGV4dCB0eXBlIHN0YXR1c1xuZXhwb3J0IGNvbnN0IEZMVVNISU5HOiBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+ID0gbmV3IFdlYWtNYXAoKTtcblxuZXhwb3J0IGNvbnN0IElTX1RFWFRfRURJVEFCTEUgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fT05fQ0hBTkdFID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgKCkgPT4gdm9pZD4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX0NPTVBPTkVOVCA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIEJvYXJkQ29tcG9uZW50SW50ZXJmYWNlPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fUk9VR0hfU1ZHID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUm91Z2hTVkc+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19IT1NUID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgU1ZHU1ZHRWxlbWVudD4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX0VMRU1FTlRfSE9TVCA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFNWR0dFbGVtZW50PigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVCA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudFtdPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fTU9WSU5HX1BPSU5UID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUG9pbnQ+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19JU19TRUxFQ1RJT05fTU9WSU5HID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgYm9vbGVhbj4oKTtcblxuLy8gc2F2ZSBubyBzdGFuZGFyZCBzZWxlY3RlZCBlbGVtZW50c1xuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX1RFTVBPUkFSWV9FTEVNRU5UUyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudFtdPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fTU9WSU5HX0VMRU1FTlQgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnRbXT4oKTtcbiJdfQ==
16
+ export const BOARD_TO_SCROLLING = new WeakMap();
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vhay1tYXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL3V0aWxzL3dlYWstbWFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSw4QkFBOEI7QUFDOUIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFpQyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUF1QyxDQUFDO0FBRXJGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUF3QixDQUFDO0FBRXRFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBNkIsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBMkIsQ0FBQztBQUU1RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFBOEIsQ0FBQztBQUVuRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUU5RSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztBQUUvRSxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxPQUFPLEVBQThCLENBQUM7QUFFckYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQThCLENBQUM7QUFFakYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3VnaFNWRyB9IGZyb20gJ3JvdWdoanMvYmluL3N2Zyc7XG5pbXBvcnQgeyBCb2FyZENvbXBvbmVudEludGVyZmFjZSB9IGZyb20gJy4uL2JvYXJkL2JvYXJkLmNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wb2ludCc7XG5cbi8vIHJlY29yZCByaWNodGV4dCB0eXBlIHN0YXR1c1xuZXhwb3J0IGNvbnN0IEZMVVNISU5HOiBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+ID0gbmV3IFdlYWtNYXAoKTtcblxuZXhwb3J0IGNvbnN0IElTX1RFWFRfRURJVEFCTEUgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fT05fQ0hBTkdFID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgKCkgPT4gdm9pZD4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX0NPTVBPTkVOVCA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIEJvYXJkQ29tcG9uZW50SW50ZXJmYWNlPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fUk9VR0hfU1ZHID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUm91Z2hTVkc+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19IT1NUID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgU1ZHU1ZHRWxlbWVudD4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX0VMRU1FTlRfSE9TVCA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFNWR0dFbGVtZW50PigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVCA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudFtdPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fTU9WSU5HX1BPSU5UID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUG9pbnQ+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTiA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFBvaW50PigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fSVNfU0VMRUNUSU9OX01PVklORyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbi8vIHNhdmUgbm8gc3RhbmRhcmQgc2VsZWN0ZWQgZWxlbWVudHNcbmV4cG9ydCBjb25zdCBCT0FSRF9UT19URU1QT1JBUllfRUxFTUVOVFMgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnRbXT4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX01PVklOR19FTEVNRU5UID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50W10+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19TQ1JPTExJTkcgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpXG4iXX0=