@plait/common 0.1.0-next.0 → 0.1.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,9 @@
1
1
  import { PlaitBoard, createG, RectangleClient, drawCircle, Transforms, removeSelectedElement, PlaitPointerType, isMainPointer, transformPoint, toPoint, preventTouchMove, distanceBetweenPointAndPoint, PRESS_AND_MOVE_BUFFER, MERGING, throttleRAF } from '@plait/core';
2
+ import { isKeyHotkey } from 'is-hotkey';
2
3
 
3
4
  const BASE = 4;
4
5
  const PRIMARY_COLOR = '#6698FF';
5
- const RESIZE_HANDLE_DIAMETER = 10;
6
+ const RESIZE_HANDLE_DIAMETER = 8;
6
7
 
7
8
  var MediaKeys;
8
9
  (function (MediaKeys) {
@@ -16,32 +17,17 @@ var ResizeCursorClass;
16
17
  ResizeCursorClass["nesw"] = "nesw-resize";
17
18
  ResizeCursorClass["nwse"] = "nwse-resize";
18
19
  })(ResizeCursorClass || (ResizeCursorClass = {}));
19
- var ResizeDirection;
20
- (function (ResizeDirection) {
21
- ResizeDirection["ne"] = "ne";
22
- ResizeDirection["n"] = "n";
23
- ResizeDirection["nw"] = "nw";
24
- ResizeDirection["e"] = "w";
25
- ResizeDirection["se"] = "se";
26
- ResizeDirection["s"] = "s";
27
- ResizeDirection["sw"] = "sw";
28
- ResizeDirection["w"] = "w";
29
- })(ResizeDirection || (ResizeDirection = {}));
30
-
31
- const drawRectangle = (board, rectangle, options) => {
32
- const roughSVG = PlaitBoard.getRoughSVG(board);
33
- const rectangleG = roughSVG.rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height, options);
34
- rectangleG.querySelector('path').setAttribute('stroke-linecap', 'square');
35
- return rectangleG;
36
- };
37
- const getRectangleByPoints = (points) => {
38
- return {
39
- x: points[0][0],
40
- y: points[0][1],
41
- width: points[1][0] - points[0][0],
42
- height: points[1][1] - points[0][1]
43
- };
44
- };
20
+ var ResizeHandle;
21
+ (function (ResizeHandle) {
22
+ ResizeHandle["ne"] = "ne";
23
+ ResizeHandle["n"] = "n";
24
+ ResizeHandle["nw"] = "nw";
25
+ ResizeHandle["e"] = "w";
26
+ ResizeHandle["se"] = "se";
27
+ ResizeHandle["s"] = "s";
28
+ ResizeHandle["sw"] = "sw";
29
+ ResizeHandle["w"] = "w";
30
+ })(ResizeHandle || (ResizeHandle = {}));
45
31
 
46
32
  class Generator {
47
33
  constructor(board, options) {
@@ -72,6 +58,21 @@ function hasAfterDraw(value) {
72
58
  return false;
73
59
  }
74
60
 
61
+ const drawRectangle = (board, rectangle, options) => {
62
+ const roughSVG = PlaitBoard.getRoughSVG(board);
63
+ const rectangleG = roughSVG.rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height, options);
64
+ rectangleG.querySelector('path').setAttribute('stroke-linecap', 'square');
65
+ return rectangleG;
66
+ };
67
+ const getRectangleByPoints = (points) => {
68
+ return {
69
+ x: points[0][0],
70
+ y: points[0][1],
71
+ width: Math.abs(points[1][0] - points[0][0]),
72
+ height: Math.abs(points[1][1] - points[0][1])
73
+ };
74
+ };
75
+
75
76
  class ActiveGenerator extends Generator {
76
77
  constructor(board, options) {
77
78
  super(board, options);
@@ -134,27 +135,16 @@ const normalizeShapePoints = (points) => {
134
135
  return [leftTopPoint, rightBottomPoint];
135
136
  };
136
137
 
137
- /**
138
- * @returns [left-top,right-top,right-bottom,left-bottom]: [Point, Point, Point, Point]
139
- */
140
- const getHandleCenters = (rectangle) => {
141
- return [
142
- [rectangle.x, rectangle.y],
143
- [rectangle.x + rectangle.width, rectangle.y],
144
- [rectangle.x + rectangle.width, rectangle.y + rectangle.height],
145
- [rectangle.x, rectangle.y + rectangle.height]
146
- ];
147
- };
148
- const getResizeDirectionByIndex = (index) => {
138
+ const getResizeHandleByIndex = (index) => {
149
139
  switch (index) {
150
140
  case 0:
151
- return ResizeDirection.nw;
141
+ return ResizeHandle.nw;
152
142
  case 1:
153
- return ResizeDirection.ne;
143
+ return ResizeHandle.ne;
154
144
  case 2:
155
- return ResizeDirection.se;
145
+ return ResizeHandle.se;
156
146
  case 3:
157
- return ResizeDirection.sw;
147
+ return ResizeHandle.sw;
158
148
  default:
159
149
  return null;
160
150
  }
@@ -173,8 +163,8 @@ const getResizeCursorClassByIndex = (index) => {
173
163
  return null;
174
164
  }
175
165
  };
176
- const getRectangleResizeTargets = (rectangle, diameter) => {
177
- const centers = getHandleCenters(rectangle);
166
+ const getRectangleResizeHandleRefs = (rectangle, diameter) => {
167
+ const centers = RectangleClient.getCornerPoints(rectangle);
178
168
  return centers.map((center, index) => {
179
169
  return {
180
170
  rectangle: {
@@ -183,7 +173,7 @@ const getRectangleResizeTargets = (rectangle, diameter) => {
183
173
  width: diameter,
184
174
  height: diameter
185
175
  },
186
- direction: getResizeDirectionByIndex(index),
176
+ handle: getResizeHandleByIndex(index),
187
177
  cursorClass: getResizeCursorClassByIndex(index)
188
178
  };
189
179
  });
@@ -221,12 +211,14 @@ const withResize = (board, options) => {
221
211
  const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
222
212
  resizeDetectResult = options.detect(point);
223
213
  if (resizeDetectResult) {
224
- PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);
214
+ if (resizeDetectResult.cursorClass) {
215
+ PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);
216
+ }
225
217
  startPoint = [event.x, event.y];
226
218
  resizeRef = {
227
219
  path: PlaitBoard.findPath(board, resizeDetectResult.element),
228
220
  element: resizeDetectResult.element,
229
- direction: resizeDetectResult.direction
221
+ handle: resizeDetectResult.handle
230
222
  };
231
223
  return;
232
224
  }
@@ -252,12 +244,13 @@ const withResize = (board, options) => {
252
244
  // prevent text from being selected
253
245
  event.preventDefault();
254
246
  preventTouchMove(board, true);
247
+ const endTransformPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
255
248
  throttleRAF(() => {
256
249
  const endPoint = [event.x, event.y];
257
250
  if (startPoint && resizeRef) {
258
251
  const offsetX = endPoint[0] - startPoint[0];
259
252
  const offsetY = endPoint[1] - startPoint[1];
260
- options.onResize(resizeRef, { offsetX, offsetY });
253
+ options.onResize(resizeRef, { offsetX, offsetY, endTransformPoint });
261
254
  }
262
255
  });
263
256
  return;
@@ -267,11 +260,15 @@ const withResize = (board, options) => {
267
260
  const resizeDetectResult = options.detect(point);
268
261
  if (resizeDetectResult) {
269
262
  hoveDetectResult = resizeDetectResult;
270
- PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);
263
+ if (hoveDetectResult.cursorClass) {
264
+ PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);
265
+ }
271
266
  }
272
267
  else {
273
268
  if (hoveDetectResult) {
274
- PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);
269
+ if (hoveDetectResult.cursorClass) {
270
+ PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);
271
+ }
275
272
  hoveDetectResult = null;
276
273
  }
277
274
  }
@@ -292,6 +289,126 @@ const withResize = (board, options) => {
292
289
  return board;
293
290
  };
294
291
 
292
+ const getPoints = (source, sourcePosition, target, targetPosition, offset) => {
293
+ const sourceDir = handleDirections[sourcePosition];
294
+ const targetDir = handleDirections[targetPosition];
295
+ const sourceGapped = [source[0] + sourceDir.x * offset, source[1] + sourceDir.y * offset];
296
+ const targetGapped = [target[0] + targetDir.x * offset, target[1] + targetDir.y * offset];
297
+ const dir = getDirection(sourceGapped, sourcePosition, targetGapped);
298
+ const dirAccessor = dir.x !== 0 ? 'x' : 'y';
299
+ const currDir = dir[dirAccessor];
300
+ let points = [];
301
+ let centerX, centerY;
302
+ const [defaultCenterX, defaultCenterY] = getEdgeCenter({
303
+ sourceX: source[0],
304
+ sourceY: source[1],
305
+ targetX: target[0],
306
+ targetY: target[1]
307
+ });
308
+ // opposite handle positions, default case
309
+ if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {
310
+ centerX = defaultCenterX;
311
+ centerY = defaultCenterY;
312
+ // --->
313
+ // |
314
+ // >---
315
+ const verticalSplit = [
316
+ [centerX, sourceGapped[1]],
317
+ [centerX, targetGapped[1]]
318
+ ];
319
+ // |
320
+ // ---
321
+ // |
322
+ const horizontalSplit = [
323
+ [sourceGapped[0], centerY],
324
+ [targetGapped[0], centerY]
325
+ ];
326
+ if (sourceDir[dirAccessor] === currDir) {
327
+ points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;
328
+ }
329
+ else {
330
+ points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;
331
+ }
332
+ }
333
+ else {
334
+ // sourceTarget means we take x from source and y from target, targetSource is the opposite
335
+ const sourceTarget = [[sourceGapped[0], targetGapped[1]]];
336
+ const targetSource = [[targetGapped[0], sourceGapped[1]]];
337
+ // this handles edges with same handle positions
338
+ if (dirAccessor === 'x') {
339
+ points = sourceDir.x === currDir ? targetSource : sourceTarget;
340
+ }
341
+ else {
342
+ points = sourceDir.y === currDir ? sourceTarget : targetSource;
343
+ }
344
+ // these are conditions for handling mixed handle positions like right -> bottom for example
345
+ let flipSourceTarget;
346
+ if (sourcePosition !== targetPosition) {
347
+ const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;
348
+ const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessor === 'x' ? 'y' : 'x'];
349
+ const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];
350
+ const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];
351
+ flipSourceTarget =
352
+ (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||
353
+ (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));
354
+ if (flipSourceTarget) {
355
+ points = dirAccessor === 'x' ? sourceTarget : targetSource;
356
+ }
357
+ }
358
+ }
359
+ return [source, ...points, target];
360
+ };
361
+ const getDirection = (source, sourcePosition = Direction.bottom, target) => {
362
+ if (sourcePosition === Direction.left || sourcePosition === Direction.right) {
363
+ return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };
364
+ }
365
+ return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };
366
+ };
367
+ var Direction;
368
+ (function (Direction) {
369
+ Direction["left"] = "left";
370
+ Direction["top"] = "top";
371
+ Direction["right"] = "right";
372
+ Direction["bottom"] = "bottom";
373
+ })(Direction || (Direction = {}));
374
+ const handleDirections = {
375
+ [Direction.left]: { x: -1, y: 0 },
376
+ [Direction.right]: { x: 1, y: 0 },
377
+ [Direction.top]: { x: 0, y: -1 },
378
+ [Direction.bottom]: { x: 0, y: 1 }
379
+ };
380
+ function getEdgeCenter({ sourceX, sourceY, targetX, targetY }) {
381
+ const xOffset = Math.abs(targetX - sourceX) / 2;
382
+ const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;
383
+ const yOffset = Math.abs(targetY - sourceY) / 2;
384
+ const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;
385
+ return [centerX, centerY, xOffset, yOffset];
386
+ }
387
+
388
+ function isVirtualKey(e) {
389
+ const isMod = e.ctrlKey || e.metaKey;
390
+ const isAlt = isKeyHotkey('alt', e);
391
+ const isShift = isKeyHotkey('shift', e);
392
+ const isCapsLock = e.key.includes('CapsLock');
393
+ const isTab = e.key.includes('Tab');
394
+ const isEsc = e.key.includes('Escape');
395
+ const isF = e.key.startsWith('F');
396
+ const isArrow = e.key.includes('Arrow') ? true : false;
397
+ return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;
398
+ }
399
+ const isExpandHotkey = (event) => {
400
+ return isKeyHotkey('mod+/', event);
401
+ };
402
+ const isTabHotkey = (event) => {
403
+ return event.key === 'Tab';
404
+ };
405
+ const isEnterHotkey = (event) => {
406
+ return event.key === 'Enter';
407
+ };
408
+ const isSpaceHotkey = (event) => {
409
+ return event.code === 'Space';
410
+ };
411
+
295
412
  /*
296
413
  * Public API Surface of utils
297
414
  */
@@ -300,5 +417,5 @@ const withResize = (board, options) => {
300
417
  * Generated bundle index. Do not edit.
301
418
  */
302
419
 
303
- export { ActiveGenerator, BASE, CommonTransforms, Generator, IS_RESIZING, MediaKeys, PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER, ResizeCursorClass, ResizeDirection, addResizing, drawRectangle, getHandleCenters, getRectangleByPoints, getRectangleResizeTargets, hasAfterDraw, isResizing, normalizeShapePoints, removeResizing, withResize };
420
+ export { ActiveGenerator, BASE, CommonTransforms, Direction, Generator, IS_RESIZING, MediaKeys, PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER, ResizeCursorClass, ResizeHandle, addResizing, drawRectangle, getEdgeCenter, getPoints, getRectangleByPoints, getRectangleResizeHandleRefs, hasAfterDraw, isEnterHotkey, isExpandHotkey, isResizing, isSpaceHotkey, isTabHotkey, isVirtualKey, normalizeShapePoints, removeResizing, withResize };
304
421
  //# sourceMappingURL=plait-common.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/rectangle.ts","../../../packages/common/src/generator/generator.ts","../../../packages/common/src/generator/active.generator.ts","../../../packages/common/src/transforms/element.ts","../../../packages/common/src/transforms/index.ts","../../../packages/common/src/shape/common.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/plait-common.ts"],"sourcesContent":["export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const RESIZE_HANDLE_DIAMETER = 10;","export enum MediaKeys {\n image = 'image'\n}\n","export enum ResizeCursorClass {\n ew = 'ew-resize',\n ns = 'ns-resize',\n nesw = 'nesw-resize',\n nwse = 'nwse-resize'\n}\n\nexport enum ResizeDirection {\n ne = 'ne',\n n = 'n',\n nw = 'nw',\n e = 'w',\n se = 'se',\n s = 's',\n sw = 'sw',\n w = 'w'\n}","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\n\nexport const drawRectangle = (board: PlaitBoard, rectangle: RectangleClient, options: Options) => {\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const rectangleG = roughSVG.rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height, options);\n rectangleG.querySelector('path')!.setAttribute('stroke-linecap', 'square');\n return rectangleG;\n};\n\nexport const getRectangleByPoints = (points: [Point, Point]) => {\n return {\n x: points[0][0],\n y: points[0][1],\n width: points[1][0] - points[0][0],\n height: points[1][1] - points[0][1]\n } as RectangleClient;\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions\n> {\n g?: SVGGElement;\n\n constructor(protected board: PlaitBoard, options?: V) {}\n\n draw(element: T, parentG: SVGGElement, data?: K) {\n this.destroy();\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.baseDraw(element, data);\n if (g) {\n parentG.append(g);\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n }\n }\n\n abstract canDraw(element: T, data?: K): boolean;\n\n abstract baseDraw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n }\n }\n}\n\nexport interface AfterDraw<T extends PlaitElement = PlaitElement> {\n afterDraw(element: T): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, createG, drawCircle } from '@plait/core';\nimport { Generator } from './generator';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../constants/default';\nimport { drawRectangle } from '../rectangle';\nimport { Options } from 'roughjs/bin/core';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n activeStrokeWidth: number;\n getStrokeWidthByElement: (element: T) => number;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<T, ActiveGeneratorExtraData, ActiveGeneratorOptions<T>> {\n constructor(public board: PlaitBoard, public options: ActiveGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ActiveGeneratorExtraData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n baseDraw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n this.g = activeG;\n const rectangle = this.options.getRectangle(element);\n\n // add 0.1 to avoid white gap\n const offset = (this.options.getStrokeWidthByElement(element) + this.options.activeStrokeWidth) / 2 - 0.1;\n const activeRectangle = RectangleClient.getOutlineRectangle(rectangle, -offset);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: this.options.activeStrokeWidth\n });\n\n // resize handle\n const options: Options = { stroke: '#999999', strokeWidth: 1, fill: '#FFF', fillStyle: 'solid' };\n const leftTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const leftBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n this.g.append(...[strokeG, leftTopHandleG, rightTopHandleG, rightBottomHandleG, leftBottomHandleG]);\n return activeG;\n }\n}\n","import { PlaitBoard, PlaitElement, Transforms, removeSelectedElement } from '@plait/core';\n\nexport const removeElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n elements\n .map(element => {\n const path = PlaitBoard.findPath(board, element);\n const ref = board.pathRef(path);\n return () => {\n Transforms.removeNode(board, ref.current!);\n ref.unref();\n removeSelectedElement(board, element);\n };\n })\n .forEach(action => {\n action();\n });\n};\n","import { removeElements } from './element';\n\nexport const CommonTransforms = {\n removeElements\n};\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point]): [Point, Point] => {\n const leftTopPoint: Point = [Math.min(points[0][0], points[1][0]), Math.min(points[0][1], points[1][1])];\n const rightBottomPoint: Point = [Math.max(points[0][0], points[1][0]), Math.max(points[0][1], points[1][1])];\n return [leftTopPoint, rightBottomPoint];\n};\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { ResizeCursorClass, ResizeDirection } from '../constants/resize';\n\n/**\n * @returns [left-top,right-top,right-bottom,left-bottom]: [Point, Point, Point, Point]\n */\nexport const getHandleCenters = (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ] as [Point, Point, Point, Point];\n};\n\nconst getResizeDirectionByIndex = (index: number) => {\n switch (index) {\n case 0:\n return ResizeDirection.nw;\n case 1:\n return ResizeDirection.ne;\n case 2:\n return ResizeDirection.se;\n case 3:\n return ResizeDirection.sw;\n default:\n return null;\n }\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n return ResizeCursorClass.nwse;\n case 1:\n return ResizeCursorClass.nesw;\n case 2:\n return ResizeCursorClass.nwse;\n case 3:\n return ResizeCursorClass.nesw;\n default:\n return null;\n }\n};\n\nexport const getRectangleResizeTargets = (rectangle: RectangleClient, diameter: number) => {\n const centers = getHandleCenters(rectangle);\n return centers.map((center, index: number) => {\n return {\n rectangle: {\n x: center[0] - diameter / 2,\n y: center[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n direction: getResizeDirectionByIndex(index) as ResizeDirection,\n cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n };\n });\n};\n\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, boolean>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const addResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, true);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.set(board, false);\n};","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n Path,\n PlaitBoard,\n PlaitElement,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n throttleRAF,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { ResizeDirection, ResizeCursorClass } from '../constants/resize';\nimport { addResizing, isResizing, removeResizing } from '../utils/resize';\n\nexport interface WithResizeOptions<T extends PlaitElement = PlaitElement> {\n key: string;\n canResize: () => boolean;\n detect: (point: Point) => ResizeDetectResult<T> | null;\n onResize: (resizeRef: ResizeRef<T>, resizeState: ResizeState) => void;\n}\n\nexport interface ResizeDetectResult<T extends PlaitElement = PlaitElement> {\n element: T;\n direction: ResizeDirection;\n cursorClass: ResizeCursorClass;\n}\n\nexport interface ResizeRef<T extends PlaitElement = PlaitElement> {\n element: T;\n path: Path;\n direction: ResizeDirection;\n}\n\nexport interface ResizeState {\n offsetX: number;\n offsetY: number;\n}\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n PlaitBoard.isReadonly(board) ||\n PlaitBoard.hasBeenTextEditing(board) ||\n !PlaitBoard.isPointer(board, PlaitPointerType.hand) ||\n !isMainPointer(event)\n );\n};\n\nexport const withResize = <T extends PlaitElement = PlaitElement>(board: PlaitBoard, options: WithResizeOptions<T>) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeDetectResult: ResizeDetectResult<T> | null = null;\n let resizeRef: ResizeRef<T> | null = null;\n let startPoint: Point | null = null;\n let hoveDetectResult: ResizeDetectResult<T> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerDown(event);\n return;\n }\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);\n startPoint = [event.x, event.y];\n resizeRef = {\n path: PlaitBoard.findPath(board, resizeDetectResult.element),\n element: resizeDetectResult.element,\n direction: resizeDetectResult.direction\n };\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerMove(event);\n return;\n }\n if (startPoint && resizeDetectResult && !isResizing(board)) {\n // prevent text from being selected\n event.preventDefault();\n preventTouchMove(board, true);\n\n const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, options.key);\n MERGING.set(board, true);\n }\n }\n\n if (isResizing(board) && startPoint) {\n // prevent text from being selected\n event.preventDefault();\n preventTouchMove(board, true);\n\n throttleRAF(() => {\n const endPoint = [event.x, event.y];\n if (startPoint && resizeRef) {\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n options.onResize(resizeRef, { offsetX, offsetY });\n }\n });\n return;\n } else {\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n hoveDetectResult = resizeDetectResult;\n PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);\n } else {\n if (hoveDetectResult) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n hoveDetectResult = null;\n }\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeDetectResult) {\n removeResizing(board, options.key);\n startPoint = null;\n resizeDetectResult = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, false);\n }\n };\n\n return board;\n};\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './rectangle';\nexport * from './generator';\nexport * from './transforms';\nexport * from './shape';\nexport * from './plugins';\nexport * from './utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/generator/generator.ts","../../../packages/common/src/utils/rectangle.ts","../../../packages/common/src/generator/active.generator.ts","../../../packages/common/src/transforms/element.ts","../../../packages/common/src/transforms/index.ts","../../../packages/common/src/shape/common.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/plait-common.ts"],"sourcesContent":["export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const RESIZE_HANDLE_DIAMETER = 8;","export enum MediaKeys {\n image = 'image'\n}\n","export enum ResizeCursorClass {\n ew = 'ew-resize',\n ns = 'ns-resize',\n nesw = 'nesw-resize',\n nwse = 'nwse-resize'\n}\n\nexport enum ResizeHandle {\n ne = 'ne',\n n = 'n',\n nw = 'nw',\n e = 'w',\n se = 'se',\n s = 's',\n sw = 'sw',\n w = 'w'\n}","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions\n> {\n g?: SVGGElement;\n\n constructor(protected board: PlaitBoard, options?: V) {}\n\n draw(element: T, parentG: SVGGElement, data?: K) {\n this.destroy();\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.baseDraw(element, data);\n if (g) {\n parentG.append(g);\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n }\n }\n\n abstract canDraw(element: T, data?: K): boolean;\n\n abstract baseDraw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n }\n }\n}\n\nexport interface AfterDraw<T extends PlaitElement = PlaitElement> {\n afterDraw(element: T): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\n\nexport const drawRectangle = (board: PlaitBoard, rectangle: RectangleClient, options: Options) => {\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const rectangleG = roughSVG.rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height, options);\n rectangleG.querySelector('path')!.setAttribute('stroke-linecap', 'square');\n return rectangleG;\n};\n\nexport const getRectangleByPoints = (points: [Point, Point]) => {\n return {\n x: points[0][0],\n y: points[0][1],\n width: Math.abs(points[1][0] - points[0][0]),\n height: Math.abs(points[1][1] - points[0][1])\n } as RectangleClient;\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, createG, drawCircle } from '@plait/core';\nimport { Generator } from './generator';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../constants/default';\nimport { drawRectangle } from '../utils/rectangle';\nimport { Options } from 'roughjs/bin/core';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n activeStrokeWidth: number;\n getStrokeWidthByElement: (element: T) => number;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<T, ActiveGeneratorExtraData, ActiveGeneratorOptions<T>> {\n constructor(public board: PlaitBoard, public options: ActiveGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ActiveGeneratorExtraData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n baseDraw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n this.g = activeG;\n const rectangle = this.options.getRectangle(element);\n\n // add 0.1 to avoid white gap\n const offset = (this.options.getStrokeWidthByElement(element) + this.options.activeStrokeWidth) / 2 - 0.1;\n const activeRectangle = RectangleClient.getOutlineRectangle(rectangle, -offset);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: this.options.activeStrokeWidth\n });\n\n // resize handle\n const options: Options = { stroke: '#999999', strokeWidth: 1, fill: '#FFF', fillStyle: 'solid' };\n const leftTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const leftBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n this.g.append(...[strokeG, leftTopHandleG, rightTopHandleG, rightBottomHandleG, leftBottomHandleG]);\n return activeG;\n }\n}\n","import { PlaitBoard, PlaitElement, Transforms, removeSelectedElement } from '@plait/core';\n\nexport const removeElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n elements\n .map(element => {\n const path = PlaitBoard.findPath(board, element);\n const ref = board.pathRef(path);\n return () => {\n Transforms.removeNode(board, ref.current!);\n ref.unref();\n removeSelectedElement(board, element);\n };\n })\n .forEach(action => {\n action();\n });\n};\n","import { removeElements } from './element';\n\nexport const CommonTransforms = {\n removeElements\n};\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point]): [Point, Point] => {\n const leftTopPoint: Point = [Math.min(points[0][0], points[1][0]), Math.min(points[0][1], points[1][1])];\n const rightBottomPoint: Point = [Math.max(points[0][0], points[1][0]), Math.max(points[0][1], points[1][1])];\n return [leftTopPoint, rightBottomPoint];\n};\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { ResizeCursorClass, ResizeHandle } from '../constants/resize';\n\nconst getResizeHandleByIndex = (index: number) => {\n switch (index) {\n case 0:\n return ResizeHandle.nw;\n case 1:\n return ResizeHandle.ne;\n case 2:\n return ResizeHandle.se;\n case 3:\n return ResizeHandle.sw;\n default:\n return null;\n }\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n return ResizeCursorClass.nwse;\n case 1:\n return ResizeCursorClass.nesw;\n case 2:\n return ResizeCursorClass.nwse;\n case 3:\n return ResizeCursorClass.nesw;\n default:\n return null;\n }\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number) => {\n const centers = RectangleClient.getCornerPoints(rectangle);\n return centers.map((center, index: number) => {\n return {\n rectangle: {\n x: center[0] - diameter / 2,\n y: center[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n handle: getResizeHandleByIndex(index) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n };\n });\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, boolean>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const addResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, true);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.set(board, false);\n};\n","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n Path,\n PlaitBoard,\n PlaitElement,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n throttleRAF,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { ResizeHandle, ResizeCursorClass } from '../constants/resize';\nimport { addResizing, isResizing, removeResizing } from '../utils/resize';\n\nexport interface WithResizeOptions<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n key: string;\n canResize: () => boolean;\n detect: (point: Point) => ResizeDetectResult<T, K> | null;\n onResize: (resizeRef: ResizeRef<T, K>, resizeState: ResizeState) => void;\n}\n\nexport interface ResizeDetectResult<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n handle: K;\n cursorClass?: ResizeCursorClass;\n}\n\nexport interface ResizeRef<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n path: Path;\n handle: K;\n}\n\nexport interface ResizeState {\n offsetX: number;\n offsetY: number;\n endTransformPoint: Point;\n}\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n PlaitBoard.isReadonly(board) ||\n PlaitBoard.hasBeenTextEditing(board) ||\n !PlaitBoard.isPointer(board, PlaitPointerType.hand) ||\n !isMainPointer(event)\n );\n};\n\nexport const withResize = <T extends PlaitElement = PlaitElement, K = ResizeHandle>(board: PlaitBoard, options: WithResizeOptions<T, K>) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeDetectResult: ResizeDetectResult<T, K> | null = null;\n let resizeRef: ResizeRef<T, K> | null = null;\n let startPoint: Point | null = null;\n let hoveDetectResult: ResizeDetectResult<T, K> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerDown(event);\n return;\n }\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (resizeDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);\n }\n startPoint = [event.x, event.y];\n resizeRef = {\n path: PlaitBoard.findPath(board, resizeDetectResult.element),\n element: resizeDetectResult.element,\n handle: resizeDetectResult.handle\n };\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerMove(event);\n return;\n }\n if (startPoint && resizeDetectResult && !isResizing(board)) {\n // prevent text from being selected\n event.preventDefault();\n preventTouchMove(board, true);\n\n const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, options.key);\n MERGING.set(board, true);\n }\n }\n\n if (isResizing(board) && startPoint) {\n // prevent text from being selected\n event.preventDefault();\n preventTouchMove(board, true);\n const endTransformPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n throttleRAF(() => {\n const endPoint = [event.x, event.y];\n if (startPoint && resizeRef) {\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n options.onResize(resizeRef, { offsetX, offsetY, endTransformPoint });\n }\n });\n return;\n } else {\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n hoveDetectResult = resizeDetectResult;\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);\n }\n } else {\n if (hoveDetectResult) {\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = null;\n }\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeDetectResult) {\n removeResizing(board, options.key);\n startPoint = null;\n resizeDetectResult = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, false);\n }\n };\n\n return board;\n};\n","import { Point } from '@plait/core';\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n const sourceDir = handleDirections[sourcePosition];\n const targetDir = handleDirections[targetPosition];\n const sourceGapped: Point = [source[0] + sourceDir.x * offset, source[1] + sourceDir.y * offset];\n const targetGapped: Point = [target[0] + targetDir.x * offset, target[1] + targetDir.y * offset];\n const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n sourceX: source[0],\n sourceY: source[1],\n targetX: target[0],\n targetY: target[1]\n });\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n [centerX, sourceGapped[1]],\n [centerX, targetGapped[1]]\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n [sourceGapped[0], centerY],\n [targetGapped[0], centerY]\n ];\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like right -> bottom for example\n let flipSourceTarget;\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessor === 'x' ? 'y' : 'x'];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n flipSourceTarget =\n (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n return [source, ...points, target];\n};\n\nconst getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nexport enum Direction {\n left = 'left',\n top = 'top',\n right = 'right',\n bottom = 'bottom'\n}\n\nconst handleDirections = {\n [Direction.left]: { x: -1, y: 0 },\n [Direction.right]: { x: 1, y: 0 },\n [Direction.top]: { x: 0, y: -1 },\n [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY\n}: {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n}): [number, number, number, number] {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}\n","import { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n return event.code === 'Space';\n};\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generator';\nexport * from './transforms';\nexport * from './shape';\nexport * from './plugins';\nexport * from './utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plait/common",
3
- "version": "0.1.0-next.0",
3
+ "version": "0.1.0-next.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^15.2.0",
6
6
  "@angular/core": "^15.2.0"
@@ -1,23 +1,24 @@
1
1
  import { Path, PlaitBoard, PlaitElement, Point } from '@plait/core';
2
- import { ResizeDirection, ResizeCursorClass } from '../constants/resize';
3
- export interface WithResizeOptions<T extends PlaitElement = PlaitElement> {
2
+ import { ResizeHandle, ResizeCursorClass } from '../constants/resize';
3
+ export interface WithResizeOptions<T extends PlaitElement = PlaitElement, K = ResizeHandle> {
4
4
  key: string;
5
5
  canResize: () => boolean;
6
- detect: (point: Point) => ResizeDetectResult<T> | null;
7
- onResize: (resizeRef: ResizeRef<T>, resizeState: ResizeState) => void;
6
+ detect: (point: Point) => ResizeDetectResult<T, K> | null;
7
+ onResize: (resizeRef: ResizeRef<T, K>, resizeState: ResizeState) => void;
8
8
  }
9
- export interface ResizeDetectResult<T extends PlaitElement = PlaitElement> {
9
+ export interface ResizeDetectResult<T extends PlaitElement = PlaitElement, K = ResizeHandle> {
10
10
  element: T;
11
- direction: ResizeDirection;
12
- cursorClass: ResizeCursorClass;
11
+ handle: K;
12
+ cursorClass?: ResizeCursorClass;
13
13
  }
14
- export interface ResizeRef<T extends PlaitElement = PlaitElement> {
14
+ export interface ResizeRef<T extends PlaitElement = PlaitElement, K = ResizeHandle> {
15
15
  element: T;
16
16
  path: Path;
17
- direction: ResizeDirection;
17
+ handle: K;
18
18
  }
19
19
  export interface ResizeState {
20
20
  offsetX: number;
21
21
  offsetY: number;
22
+ endTransformPoint: Point;
22
23
  }
23
- export declare const withResize: <T extends PlaitElement = PlaitElement>(board: PlaitBoard, options: WithResizeOptions<T>) => PlaitBoard;
24
+ export declare const withResize: <T extends PlaitElement = PlaitElement, K = ResizeHandle>(board: PlaitBoard, options: WithResizeOptions<T, K>) => PlaitBoard;
package/public-api.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export * from './constants';
2
- export * from './rectangle';
3
2
  export * from './generator';
4
3
  export * from './transforms';
5
4
  export * from './shape';
@@ -0,0 +1,5 @@
1
+ export declare function isVirtualKey(e: KeyboardEvent): boolean;
2
+ export declare const isExpandHotkey: (event: KeyboardEvent) => boolean;
3
+ export declare const isTabHotkey: (event: KeyboardEvent) => boolean;
4
+ export declare const isEnterHotkey: (event: KeyboardEvent) => boolean;
5
+ export declare const isSpaceHotkey: (event: KeyboardEvent) => boolean;
package/utils/index.d.ts CHANGED
@@ -1 +1,4 @@
1
1
  export * from './resize';
2
+ export * from './line-path';
3
+ export * from './hot-key';
4
+ export * from './rectangle';
@@ -0,0 +1,14 @@
1
+ import { Point } from '@plait/core';
2
+ export declare const getPoints: (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => Point[];
3
+ export declare enum Direction {
4
+ left = "left",
5
+ top = "top",
6
+ right = "right",
7
+ bottom = "bottom"
8
+ }
9
+ export declare function getEdgeCenter({ sourceX, sourceY, targetX, targetY }: {
10
+ sourceX: number;
11
+ sourceY: number;
12
+ targetX: number;
13
+ targetY: number;
14
+ }): [number, number, number, number];
package/utils/resize.d.ts CHANGED
@@ -1,17 +1,13 @@
1
- import { PlaitBoard, Point, RectangleClient } from '@plait/core';
2
- import { ResizeCursorClass, ResizeDirection } from '../constants/resize';
3
- /**
4
- * @returns [left-top,right-top,right-bottom,left-bottom]: [Point, Point, Point, Point]
5
- */
6
- export declare const getHandleCenters: (rectangle: RectangleClient) => [Point, Point, Point, Point];
7
- export declare const getRectangleResizeTargets: (rectangle: RectangleClient, diameter: number) => {
1
+ import { PlaitBoard, RectangleClient } from '@plait/core';
2
+ import { ResizeCursorClass, ResizeHandle } from '../constants/resize';
3
+ export declare const getRectangleResizeHandleRefs: (rectangle: RectangleClient, diameter: number) => {
8
4
  rectangle: {
9
5
  x: number;
10
6
  y: number;
11
7
  width: number;
12
8
  height: number;
13
9
  };
14
- direction: ResizeDirection;
10
+ handle: ResizeHandle;
15
11
  cursorClass: ResizeCursorClass;
16
12
  }[];
17
13
  export declare const IS_RESIZING: WeakMap<PlaitBoard, boolean>;
@@ -1,16 +0,0 @@
1
- import { PlaitBoard } from '@plait/core';
2
- export const drawRectangle = (board, rectangle, options) => {
3
- const roughSVG = PlaitBoard.getRoughSVG(board);
4
- const rectangleG = roughSVG.rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height, options);
5
- rectangleG.querySelector('path').setAttribute('stroke-linecap', 'square');
6
- return rectangleG;
7
- };
8
- export const getRectangleByPoints = (points) => {
9
- return {
10
- x: points[0][0],
11
- y: points[0][1],
12
- width: points[1][0] - points[0][0],
13
- height: points[1][1] - points[0][1]
14
- };
15
- };
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9yZWN0YW5nbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBMEIsTUFBTSxhQUFhLENBQUM7QUFHakUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBaUIsRUFBRSxTQUEwQixFQUFFLE9BQWdCLEVBQUUsRUFBRTtJQUM3RixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RyxVQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBRSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzRSxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE1BQXNCLEVBQUUsRUFBRTtJQUMzRCxPQUFPO1FBQ0gsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkIsQ0FBQztBQUN6QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgZHJhd1JlY3RhbmdsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCByb3VnaFNWRyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgIGNvbnN0IHJlY3RhbmdsZUcgPSByb3VnaFNWRy5yZWN0YW5nbGUocmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55LCByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHJlY3RhbmdsZUcucXVlcnlTZWxlY3RvcigncGF0aCcpIS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1saW5lY2FwJywgJ3NxdWFyZScpO1xuICAgIHJldHVybiByZWN0YW5nbGVHO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlY3RhbmdsZUJ5UG9pbnRzID0gKHBvaW50czogW1BvaW50LCBQb2ludF0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBwb2ludHNbMF1bMF0sXG4gICAgICAgIHk6IHBvaW50c1swXVsxXSxcbiAgICAgICAgd2lkdGg6IHBvaW50c1sxXVswXSAtIHBvaW50c1swXVswXSxcbiAgICAgICAgaGVpZ2h0OiBwb2ludHNbMV1bMV0gLSBwb2ludHNbMF1bMV1cbiAgICB9IGFzIFJlY3RhbmdsZUNsaWVudDtcbn07XG4iXX0=
File without changes