@plait/common 0.1.0-next.1 → 0.1.0-next.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.
Files changed (44) hide show
  1. package/constants/resize.d.ts +1 -1
  2. package/esm2022/constants/resize.mjs +19 -0
  3. package/esm2022/generator/active.generator.mjs +40 -0
  4. package/esm2022/plugins/with-resize.mjs +101 -0
  5. package/esm2022/public-api.mjs +10 -0
  6. package/esm2022/shape/common.mjs +14 -0
  7. package/esm2022/utils/hot-key.mjs +25 -0
  8. package/esm2022/utils/index.mjs +5 -0
  9. package/esm2022/utils/line-path.mjs +173 -0
  10. package/esm2022/utils/rectangle.mjs +23 -0
  11. package/esm2022/utils/resize.mjs +61 -0
  12. package/fesm2022/plait-common.mjs +516 -0
  13. package/fesm2022/plait-common.mjs.map +1 -0
  14. package/package.json +5 -11
  15. package/plugins/with-resize.d.ts +12 -10
  16. package/public-api.d.ts +0 -1
  17. package/shape/common.d.ts +1 -1
  18. package/utils/hot-key.d.ts +5 -0
  19. package/utils/index.d.ts +3 -0
  20. package/utils/line-path.d.ts +19 -0
  21. package/{rectangle.d.ts → utils/rectangle.d.ts} +6 -1
  22. package/utils/resize.d.ts +7 -10
  23. package/esm2020/constants/resize.mjs +0 -19
  24. package/esm2020/generator/active.generator.mjs +0 -40
  25. package/esm2020/plugins/with-resize.mjs +0 -93
  26. package/esm2020/public-api.mjs +0 -11
  27. package/esm2020/rectangle.mjs +0 -16
  28. package/esm2020/shape/common.mjs +0 -6
  29. package/esm2020/utils/index.mjs +0 -2
  30. package/esm2020/utils/resize.mjs +0 -69
  31. package/fesm2015/plait-common.mjs +0 -304
  32. package/fesm2015/plait-common.mjs.map +0 -1
  33. package/fesm2020/plait-common.mjs +0 -304
  34. package/fesm2020/plait-common.mjs.map +0 -1
  35. /package/{esm2020 → esm2022}/constants/default.mjs +0 -0
  36. /package/{esm2020 → esm2022}/constants/index.mjs +0 -0
  37. /package/{esm2020 → esm2022}/constants/media.mjs +0 -0
  38. /package/{esm2020 → esm2022}/generator/generator.mjs +0 -0
  39. /package/{esm2020 → esm2022}/generator/index.mjs +0 -0
  40. /package/{esm2020 → esm2022}/plait-common.mjs +0 -0
  41. /package/{esm2020 → esm2022}/plugins/index.mjs +0 -0
  42. /package/{esm2020 → esm2022}/shape/index.mjs +0 -0
  43. /package/{esm2020 → esm2022}/transforms/element.mjs +0 -0
  44. /package/{esm2020 → esm2022}/transforms/index.mjs +0 -0
@@ -1,304 +0,0 @@
1
- import { PlaitBoard, createG, RectangleClient, drawCircle, Transforms, removeSelectedElement, PlaitPointerType, isMainPointer, transformPoint, toPoint, preventTouchMove, distanceBetweenPointAndPoint, PRESS_AND_MOVE_BUFFER, MERGING, throttleRAF } from '@plait/core';
2
-
3
- const BASE = 4;
4
- const PRIMARY_COLOR = '#6698FF';
5
- const RESIZE_HANDLE_DIAMETER = 8;
6
-
7
- var MediaKeys;
8
- (function (MediaKeys) {
9
- MediaKeys["image"] = "image";
10
- })(MediaKeys || (MediaKeys = {}));
11
-
12
- var ResizeCursorClass;
13
- (function (ResizeCursorClass) {
14
- ResizeCursorClass["ew"] = "ew-resize";
15
- ResizeCursorClass["ns"] = "ns-resize";
16
- ResizeCursorClass["nesw"] = "nesw-resize";
17
- ResizeCursorClass["nwse"] = "nwse-resize";
18
- })(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
- };
45
-
46
- class Generator {
47
- constructor(board, options) {
48
- this.board = board;
49
- }
50
- draw(element, parentG, data) {
51
- this.destroy();
52
- if (this.canDraw && this.canDraw(element, data)) {
53
- const g = this.baseDraw(element, data);
54
- if (g) {
55
- parentG.append(g);
56
- }
57
- if (hasAfterDraw(this)) {
58
- this.afterDraw(element);
59
- }
60
- }
61
- }
62
- destroy() {
63
- if (this.g) {
64
- this.g.remove();
65
- }
66
- }
67
- }
68
- function hasAfterDraw(value) {
69
- if (value.afterDraw) {
70
- return true;
71
- }
72
- return false;
73
- }
74
-
75
- class ActiveGenerator extends Generator {
76
- constructor(board, options) {
77
- super(board, options);
78
- this.board = board;
79
- this.options = options;
80
- }
81
- canDraw(element, data) {
82
- if (data.selected) {
83
- return true;
84
- }
85
- else {
86
- return false;
87
- }
88
- }
89
- baseDraw(element, data) {
90
- const activeG = createG();
91
- this.g = activeG;
92
- const rectangle = this.options.getRectangle(element);
93
- // add 0.1 to avoid white gap
94
- const offset = (this.options.getStrokeWidthByElement(element) + this.options.activeStrokeWidth) / 2 - 0.1;
95
- const activeRectangle = RectangleClient.getOutlineRectangle(rectangle, -offset);
96
- const strokeG = drawRectangle(this.board, activeRectangle, {
97
- stroke: PRIMARY_COLOR,
98
- strokeWidth: this.options.activeStrokeWidth
99
- });
100
- // resize handle
101
- const options = { stroke: '#999999', strokeWidth: 1, fill: '#FFF', fillStyle: 'solid' };
102
- const leftTopHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x, activeRectangle.y], RESIZE_HANDLE_DIAMETER, options);
103
- const rightTopHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x + activeRectangle.width, activeRectangle.y], RESIZE_HANDLE_DIAMETER, options);
104
- const rightBottomHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height], RESIZE_HANDLE_DIAMETER, options);
105
- const leftBottomHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x, activeRectangle.y + activeRectangle.height], RESIZE_HANDLE_DIAMETER, options);
106
- this.g.append(...[strokeG, leftTopHandleG, rightTopHandleG, rightBottomHandleG, leftBottomHandleG]);
107
- return activeG;
108
- }
109
- }
110
-
111
- const removeElements = (board, elements) => {
112
- elements
113
- .map(element => {
114
- const path = PlaitBoard.findPath(board, element);
115
- const ref = board.pathRef(path);
116
- return () => {
117
- Transforms.removeNode(board, ref.current);
118
- ref.unref();
119
- removeSelectedElement(board, element);
120
- };
121
- })
122
- .forEach(action => {
123
- action();
124
- });
125
- };
126
-
127
- const CommonTransforms = {
128
- removeElements
129
- };
130
-
131
- const normalizeShapePoints = (points) => {
132
- const leftTopPoint = [Math.min(points[0][0], points[1][0]), Math.min(points[0][1], points[1][1])];
133
- const rightBottomPoint = [Math.max(points[0][0], points[1][0]), Math.max(points[0][1], points[1][1])];
134
- return [leftTopPoint, rightBottomPoint];
135
- };
136
-
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) => {
149
- switch (index) {
150
- case 0:
151
- return ResizeDirection.nw;
152
- case 1:
153
- return ResizeDirection.ne;
154
- case 2:
155
- return ResizeDirection.se;
156
- case 3:
157
- return ResizeDirection.sw;
158
- default:
159
- return null;
160
- }
161
- };
162
- const getResizeCursorClassByIndex = (index) => {
163
- switch (index) {
164
- case 0:
165
- return ResizeCursorClass.nwse;
166
- case 1:
167
- return ResizeCursorClass.nesw;
168
- case 2:
169
- return ResizeCursorClass.nwse;
170
- case 3:
171
- return ResizeCursorClass.nesw;
172
- default:
173
- return null;
174
- }
175
- };
176
- const getRectangleResizeTargets = (rectangle, diameter) => {
177
- const centers = getHandleCenters(rectangle);
178
- return centers.map((center, index) => {
179
- return {
180
- rectangle: {
181
- x: center[0] - diameter / 2,
182
- y: center[1] - diameter / 2,
183
- width: diameter,
184
- height: diameter
185
- },
186
- direction: getResizeDirectionByIndex(index),
187
- cursorClass: getResizeCursorClassByIndex(index)
188
- };
189
- });
190
- };
191
- const IS_RESIZING = new WeakMap();
192
- const isResizing = (board) => {
193
- return !!IS_RESIZING.get(board);
194
- };
195
- const addResizing = (board, key) => {
196
- PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);
197
- IS_RESIZING.set(board, true);
198
- };
199
- const removeResizing = (board, key) => {
200
- PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);
201
- IS_RESIZING.set(board, false);
202
- };
203
-
204
- const generalCanResize = (board, event) => {
205
- return (PlaitBoard.isReadonly(board) ||
206
- PlaitBoard.hasBeenTextEditing(board) ||
207
- !PlaitBoard.isPointer(board, PlaitPointerType.hand) ||
208
- !isMainPointer(event));
209
- };
210
- const withResize = (board, options) => {
211
- const { pointerDown, pointerMove, globalPointerUp } = board;
212
- let resizeDetectResult = null;
213
- let resizeRef = null;
214
- let startPoint = null;
215
- let hoveDetectResult = null;
216
- board.pointerDown = (event) => {
217
- if (!options.canResize() || !generalCanResize(board, event)) {
218
- pointerDown(event);
219
- return;
220
- }
221
- const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
222
- resizeDetectResult = options.detect(point);
223
- if (resizeDetectResult) {
224
- PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);
225
- startPoint = [event.x, event.y];
226
- resizeRef = {
227
- path: PlaitBoard.findPath(board, resizeDetectResult.element),
228
- element: resizeDetectResult.element,
229
- direction: resizeDetectResult.direction
230
- };
231
- return;
232
- }
233
- pointerDown(event);
234
- };
235
- board.pointerMove = (event) => {
236
- if (!options.canResize() || !generalCanResize(board, event)) {
237
- pointerMove(event);
238
- return;
239
- }
240
- if (startPoint && resizeDetectResult && !isResizing(board)) {
241
- // prevent text from being selected
242
- event.preventDefault();
243
- preventTouchMove(board, true);
244
- const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
245
- const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
246
- if (distance > PRESS_AND_MOVE_BUFFER) {
247
- addResizing(board, options.key);
248
- MERGING.set(board, true);
249
- }
250
- }
251
- if (isResizing(board) && startPoint) {
252
- // prevent text from being selected
253
- event.preventDefault();
254
- preventTouchMove(board, true);
255
- throttleRAF(() => {
256
- const endPoint = [event.x, event.y];
257
- if (startPoint && resizeRef) {
258
- const offsetX = endPoint[0] - startPoint[0];
259
- const offsetY = endPoint[1] - startPoint[1];
260
- options.onResize(resizeRef, { offsetX, offsetY });
261
- }
262
- });
263
- return;
264
- }
265
- else {
266
- const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
267
- const resizeDetectResult = options.detect(point);
268
- if (resizeDetectResult) {
269
- hoveDetectResult = resizeDetectResult;
270
- PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);
271
- }
272
- else {
273
- if (hoveDetectResult) {
274
- PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);
275
- hoveDetectResult = null;
276
- }
277
- }
278
- }
279
- pointerMove(event);
280
- };
281
- board.globalPointerUp = (event) => {
282
- globalPointerUp(event);
283
- if (isResizing(board) || resizeDetectResult) {
284
- removeResizing(board, options.key);
285
- startPoint = null;
286
- resizeDetectResult = null;
287
- resizeRef = null;
288
- MERGING.set(board, false);
289
- preventTouchMove(board, false);
290
- }
291
- };
292
- return board;
293
- };
294
-
295
- /*
296
- * Public API Surface of utils
297
- */
298
-
299
- /**
300
- * Generated bundle index. Do not edit.
301
- */
302
-
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 };
304
- //# sourceMappingURL=plait-common.mjs.map
@@ -1 +0,0 @@
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 = 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 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,304 +0,0 @@
1
- import { PlaitBoard, createG, RectangleClient, drawCircle, Transforms, removeSelectedElement, PlaitPointerType, isMainPointer, transformPoint, toPoint, preventTouchMove, distanceBetweenPointAndPoint, PRESS_AND_MOVE_BUFFER, MERGING, throttleRAF } from '@plait/core';
2
-
3
- const BASE = 4;
4
- const PRIMARY_COLOR = '#6698FF';
5
- const RESIZE_HANDLE_DIAMETER = 8;
6
-
7
- var MediaKeys;
8
- (function (MediaKeys) {
9
- MediaKeys["image"] = "image";
10
- })(MediaKeys || (MediaKeys = {}));
11
-
12
- var ResizeCursorClass;
13
- (function (ResizeCursorClass) {
14
- ResizeCursorClass["ew"] = "ew-resize";
15
- ResizeCursorClass["ns"] = "ns-resize";
16
- ResizeCursorClass["nesw"] = "nesw-resize";
17
- ResizeCursorClass["nwse"] = "nwse-resize";
18
- })(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
- };
45
-
46
- class Generator {
47
- constructor(board, options) {
48
- this.board = board;
49
- }
50
- draw(element, parentG, data) {
51
- this.destroy();
52
- if (this.canDraw && this.canDraw(element, data)) {
53
- const g = this.baseDraw(element, data);
54
- if (g) {
55
- parentG.append(g);
56
- }
57
- if (hasAfterDraw(this)) {
58
- this.afterDraw(element);
59
- }
60
- }
61
- }
62
- destroy() {
63
- if (this.g) {
64
- this.g.remove();
65
- }
66
- }
67
- }
68
- function hasAfterDraw(value) {
69
- if (value.afterDraw) {
70
- return true;
71
- }
72
- return false;
73
- }
74
-
75
- class ActiveGenerator extends Generator {
76
- constructor(board, options) {
77
- super(board, options);
78
- this.board = board;
79
- this.options = options;
80
- }
81
- canDraw(element, data) {
82
- if (data.selected) {
83
- return true;
84
- }
85
- else {
86
- return false;
87
- }
88
- }
89
- baseDraw(element, data) {
90
- const activeG = createG();
91
- this.g = activeG;
92
- const rectangle = this.options.getRectangle(element);
93
- // add 0.1 to avoid white gap
94
- const offset = (this.options.getStrokeWidthByElement(element) + this.options.activeStrokeWidth) / 2 - 0.1;
95
- const activeRectangle = RectangleClient.getOutlineRectangle(rectangle, -offset);
96
- const strokeG = drawRectangle(this.board, activeRectangle, {
97
- stroke: PRIMARY_COLOR,
98
- strokeWidth: this.options.activeStrokeWidth
99
- });
100
- // resize handle
101
- const options = { stroke: '#999999', strokeWidth: 1, fill: '#FFF', fillStyle: 'solid' };
102
- const leftTopHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x, activeRectangle.y], RESIZE_HANDLE_DIAMETER, options);
103
- const rightTopHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x + activeRectangle.width, activeRectangle.y], RESIZE_HANDLE_DIAMETER, options);
104
- const rightBottomHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height], RESIZE_HANDLE_DIAMETER, options);
105
- const leftBottomHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x, activeRectangle.y + activeRectangle.height], RESIZE_HANDLE_DIAMETER, options);
106
- this.g.append(...[strokeG, leftTopHandleG, rightTopHandleG, rightBottomHandleG, leftBottomHandleG]);
107
- return activeG;
108
- }
109
- }
110
-
111
- const removeElements = (board, elements) => {
112
- elements
113
- .map(element => {
114
- const path = PlaitBoard.findPath(board, element);
115
- const ref = board.pathRef(path);
116
- return () => {
117
- Transforms.removeNode(board, ref.current);
118
- ref.unref();
119
- removeSelectedElement(board, element);
120
- };
121
- })
122
- .forEach(action => {
123
- action();
124
- });
125
- };
126
-
127
- const CommonTransforms = {
128
- removeElements
129
- };
130
-
131
- const normalizeShapePoints = (points) => {
132
- const leftTopPoint = [Math.min(points[0][0], points[1][0]), Math.min(points[0][1], points[1][1])];
133
- const rightBottomPoint = [Math.max(points[0][0], points[1][0]), Math.max(points[0][1], points[1][1])];
134
- return [leftTopPoint, rightBottomPoint];
135
- };
136
-
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) => {
149
- switch (index) {
150
- case 0:
151
- return ResizeDirection.nw;
152
- case 1:
153
- return ResizeDirection.ne;
154
- case 2:
155
- return ResizeDirection.se;
156
- case 3:
157
- return ResizeDirection.sw;
158
- default:
159
- return null;
160
- }
161
- };
162
- const getResizeCursorClassByIndex = (index) => {
163
- switch (index) {
164
- case 0:
165
- return ResizeCursorClass.nwse;
166
- case 1:
167
- return ResizeCursorClass.nesw;
168
- case 2:
169
- return ResizeCursorClass.nwse;
170
- case 3:
171
- return ResizeCursorClass.nesw;
172
- default:
173
- return null;
174
- }
175
- };
176
- const getRectangleResizeTargets = (rectangle, diameter) => {
177
- const centers = getHandleCenters(rectangle);
178
- return centers.map((center, index) => {
179
- return {
180
- rectangle: {
181
- x: center[0] - diameter / 2,
182
- y: center[1] - diameter / 2,
183
- width: diameter,
184
- height: diameter
185
- },
186
- direction: getResizeDirectionByIndex(index),
187
- cursorClass: getResizeCursorClassByIndex(index)
188
- };
189
- });
190
- };
191
- const IS_RESIZING = new WeakMap();
192
- const isResizing = (board) => {
193
- return !!IS_RESIZING.get(board);
194
- };
195
- const addResizing = (board, key) => {
196
- PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);
197
- IS_RESIZING.set(board, true);
198
- };
199
- const removeResizing = (board, key) => {
200
- PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);
201
- IS_RESIZING.set(board, false);
202
- };
203
-
204
- const generalCanResize = (board, event) => {
205
- return (PlaitBoard.isReadonly(board) ||
206
- PlaitBoard.hasBeenTextEditing(board) ||
207
- !PlaitBoard.isPointer(board, PlaitPointerType.hand) ||
208
- !isMainPointer(event));
209
- };
210
- const withResize = (board, options) => {
211
- const { pointerDown, pointerMove, globalPointerUp } = board;
212
- let resizeDetectResult = null;
213
- let resizeRef = null;
214
- let startPoint = null;
215
- let hoveDetectResult = null;
216
- board.pointerDown = (event) => {
217
- if (!options.canResize() || !generalCanResize(board, event)) {
218
- pointerDown(event);
219
- return;
220
- }
221
- const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
222
- resizeDetectResult = options.detect(point);
223
- if (resizeDetectResult) {
224
- PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);
225
- startPoint = [event.x, event.y];
226
- resizeRef = {
227
- path: PlaitBoard.findPath(board, resizeDetectResult.element),
228
- element: resizeDetectResult.element,
229
- direction: resizeDetectResult.direction
230
- };
231
- return;
232
- }
233
- pointerDown(event);
234
- };
235
- board.pointerMove = (event) => {
236
- if (!options.canResize() || !generalCanResize(board, event)) {
237
- pointerMove(event);
238
- return;
239
- }
240
- if (startPoint && resizeDetectResult && !isResizing(board)) {
241
- // prevent text from being selected
242
- event.preventDefault();
243
- preventTouchMove(board, true);
244
- const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
245
- const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
246
- if (distance > PRESS_AND_MOVE_BUFFER) {
247
- addResizing(board, options.key);
248
- MERGING.set(board, true);
249
- }
250
- }
251
- if (isResizing(board) && startPoint) {
252
- // prevent text from being selected
253
- event.preventDefault();
254
- preventTouchMove(board, true);
255
- throttleRAF(() => {
256
- const endPoint = [event.x, event.y];
257
- if (startPoint && resizeRef) {
258
- const offsetX = endPoint[0] - startPoint[0];
259
- const offsetY = endPoint[1] - startPoint[1];
260
- options.onResize(resizeRef, { offsetX, offsetY });
261
- }
262
- });
263
- return;
264
- }
265
- else {
266
- const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
267
- const resizeDetectResult = options.detect(point);
268
- if (resizeDetectResult) {
269
- hoveDetectResult = resizeDetectResult;
270
- PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);
271
- }
272
- else {
273
- if (hoveDetectResult) {
274
- PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);
275
- hoveDetectResult = null;
276
- }
277
- }
278
- }
279
- pointerMove(event);
280
- };
281
- board.globalPointerUp = (event) => {
282
- globalPointerUp(event);
283
- if (isResizing(board) || resizeDetectResult) {
284
- removeResizing(board, options.key);
285
- startPoint = null;
286
- resizeDetectResult = null;
287
- resizeRef = null;
288
- MERGING.set(board, false);
289
- preventTouchMove(board, false);
290
- }
291
- };
292
- return board;
293
- };
294
-
295
- /*
296
- * Public API Surface of utils
297
- */
298
-
299
- /**
300
- * Generated bundle index. Do not edit.
301
- */
302
-
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 };
304
- //# sourceMappingURL=plait-common.mjs.map