@idraw/core 0.3.1 → 0.4.0-alpha.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 (74) hide show
  1. package/dist/esm/index.d.ts +19 -55
  2. package/dist/esm/index.js +52 -188
  3. package/dist/esm/lib/cursor-image.d.ts +2 -0
  4. package/dist/esm/lib/cursor-image.js +2 -0
  5. package/dist/esm/lib/cursor.d.ts +16 -0
  6. package/dist/esm/lib/cursor.js +121 -0
  7. package/dist/esm/middleware/scaler/index.d.ts +2 -0
  8. package/dist/esm/middleware/scaler/index.js +22 -0
  9. package/dist/esm/middleware/scroller/config.d.ts +6 -0
  10. package/dist/esm/middleware/scroller/config.js +6 -0
  11. package/dist/esm/middleware/scroller/index.d.ts +2 -0
  12. package/dist/esm/middleware/scroller/index.js +97 -0
  13. package/dist/esm/middleware/scroller/util.d.ts +12 -0
  14. package/dist/esm/middleware/scroller/util.js +192 -0
  15. package/dist/esm/middleware/selector/config.d.ts +20 -0
  16. package/dist/esm/middleware/selector/config.js +20 -0
  17. package/dist/esm/middleware/selector/draw-wrapper.d.ts +22 -0
  18. package/dist/esm/middleware/selector/draw-wrapper.js +111 -0
  19. package/dist/esm/middleware/selector/index.d.ts +3 -0
  20. package/dist/esm/middleware/selector/index.js +454 -0
  21. package/dist/esm/middleware/selector/types.d.ts +40 -0
  22. package/dist/esm/middleware/selector/types.js +1 -0
  23. package/dist/esm/middleware/selector/util.d.ts +53 -0
  24. package/dist/esm/middleware/selector/util.js +789 -0
  25. package/dist/index.global.js +3825 -3991
  26. package/dist/index.global.min.js +1 -1
  27. package/package.json +8 -8
  28. package/LICENSE +0 -21
  29. package/dist/esm/constant/element.d.ts +0 -2
  30. package/dist/esm/constant/element.js +0 -10
  31. package/dist/esm/constant/static.d.ts +0 -11
  32. package/dist/esm/constant/static.js +0 -13
  33. package/dist/esm/lib/calculate.d.ts +0 -5
  34. package/dist/esm/lib/calculate.js +0 -64
  35. package/dist/esm/lib/check.d.ts +0 -28
  36. package/dist/esm/lib/check.js +0 -115
  37. package/dist/esm/lib/config.d.ts +0 -3
  38. package/dist/esm/lib/config.js +0 -20
  39. package/dist/esm/lib/core-event.d.ts +0 -49
  40. package/dist/esm/lib/core-event.js +0 -50
  41. package/dist/esm/lib/diff.d.ts +0 -6
  42. package/dist/esm/lib/diff.js +0 -82
  43. package/dist/esm/lib/draw/base.d.ts +0 -5
  44. package/dist/esm/lib/draw/base.js +0 -90
  45. package/dist/esm/lib/draw/wrapper.d.ts +0 -4
  46. package/dist/esm/lib/draw/wrapper.js +0 -168
  47. package/dist/esm/lib/element.d.ts +0 -15
  48. package/dist/esm/lib/element.js +0 -442
  49. package/dist/esm/lib/engine-temp.d.ts +0 -22
  50. package/dist/esm/lib/engine-temp.js +0 -29
  51. package/dist/esm/lib/engine.d.ts +0 -47
  52. package/dist/esm/lib/engine.js +0 -323
  53. package/dist/esm/lib/helper.d.ts +0 -30
  54. package/dist/esm/lib/helper.js +0 -363
  55. package/dist/esm/lib/index.d.ts +0 -13
  56. package/dist/esm/lib/index.js +0 -13
  57. package/dist/esm/lib/is.d.ts +0 -26
  58. package/dist/esm/lib/is.js +0 -100
  59. package/dist/esm/lib/mapper.d.ts +0 -26
  60. package/dist/esm/lib/mapper.js +0 -89
  61. package/dist/esm/lib/parse.d.ts +0 -2
  62. package/dist/esm/lib/parse.js +0 -32
  63. package/dist/esm/lib/temp.d.ts +0 -11
  64. package/dist/esm/lib/temp.js +0 -19
  65. package/dist/esm/lib/transform.d.ts +0 -4
  66. package/dist/esm/lib/transform.js +0 -20
  67. package/dist/esm/lib/value.d.ts +0 -2
  68. package/dist/esm/lib/value.js +0 -7
  69. package/dist/esm/mixins/element.d.ts +0 -18
  70. package/dist/esm/mixins/element.js +0 -168
  71. package/dist/esm/plugins/helper.d.ts +0 -12
  72. package/dist/esm/plugins/helper.js +0 -16
  73. package/dist/esm/util/filter.d.ts +0 -1
  74. package/dist/esm/util/filter.js +0 -3
@@ -1,323 +0,0 @@
1
- import { deepClone, throttle } from '@idraw/util';
2
- import { Mode, CursorStatus } from './../constant/static';
3
- import { TempData } from './engine-temp';
4
- import { Helper } from './helper';
5
- import { Mapper } from './mapper';
6
- export class Engine {
7
- constructor(opts) {
8
- this._plugins = [];
9
- const { board, config, element } = opts;
10
- const helper = new Helper(board, config);
11
- this._opts = opts;
12
- this.temp = new TempData();
13
- this.helper = helper;
14
- this._mapper = new Mapper({ board, helper, element });
15
- }
16
- addPlugin(plugin) {
17
- this._plugins.push(plugin);
18
- }
19
- getHelperConfig() {
20
- return this.helper.getConfig();
21
- }
22
- updateHelperConfig(opts) {
23
- var _a;
24
- const { board, getDataFeekback, config } = this._opts;
25
- const data = getDataFeekback();
26
- const transform = board.getTransform();
27
- this.helper.updateConfig(data, {
28
- width: opts.width,
29
- height: opts.height,
30
- devicePixelRatio: opts.devicePixelRatio,
31
- canScroll: ((_a = config === null || config === void 0 ? void 0 : config.scrollWrapper) === null || _a === void 0 ? void 0 : _a.use) === true,
32
- selectedUUID: this.temp.get('selectedUUID'),
33
- selectedUUIDList: this.temp.get('selectedUUIDList'),
34
- scale: transform.scale,
35
- scrollX: transform.scrollX,
36
- scrollY: transform.scrollY
37
- });
38
- }
39
- init() {
40
- this._initEvent();
41
- }
42
- _initEvent() {
43
- if (this.temp.get('hasInited') === true) {
44
- return;
45
- }
46
- const { board } = this._opts;
47
- board.on('hover', throttle(this._handleHover.bind(this), 32));
48
- board.on('leave', throttle(this._handleLeave.bind(this), 32));
49
- board.on('point', throttle(this._handleClick.bind(this), 16));
50
- board.on('doubleClick', this._handleDoubleClick.bind(this));
51
- board.on('point', this._handlePoint.bind(this));
52
- board.on('moveStart', this._handleMoveStart.bind(this));
53
- board.on('move', throttle(this._handleMove.bind(this), 16));
54
- board.on('moveEnd', this._handleMoveEnd.bind(this));
55
- }
56
- _handleDoubleClick(point) {
57
- var _a, _b, _c;
58
- const { element, getDataFeekback, drawFeekback, coreEvent } = this._opts;
59
- const data = getDataFeekback();
60
- const [index, uuid] = element.isPointInElement(point, data);
61
- if (index >= 0 && uuid) {
62
- const elem = deepClone((_a = data.elements) === null || _a === void 0 ? void 0 : _a[index]);
63
- if (((_b = elem === null || elem === void 0 ? void 0 : elem.operation) === null || _b === void 0 ? void 0 : _b.invisible) !== true) {
64
- coreEvent.trigger('screenDoubleClickElement', {
65
- index,
66
- uuid,
67
- element: deepClone((_c = data.elements) === null || _c === void 0 ? void 0 : _c[index])
68
- });
69
- }
70
- }
71
- drawFeekback();
72
- }
73
- _handlePoint(point) {
74
- var _a, _b, _c;
75
- if (!this._mapper.isEffectivePoint(point)) {
76
- return;
77
- }
78
- const { element, getDataFeekback, selectElementByIndex, coreEvent, emitChangeScreen, drawFeekback } = this._opts;
79
- const helper = this.helper;
80
- const data = getDataFeekback();
81
- if (helper.isPointInElementList(point, data)) {
82
- this.temp.set('mode', Mode.SELECT_ELEMENT_LIST);
83
- }
84
- else {
85
- const { uuid, selectedControllerDirection } = helper.isPointInElementWrapperController(point, data);
86
- if (uuid && selectedControllerDirection) {
87
- this.temp.set('mode', Mode.SELECT_ELEMENT_WRAPPER_CONTROLLER);
88
- this.temp.set('selectedControllerDirection', selectedControllerDirection);
89
- this.temp.set('selectedUUID', uuid);
90
- }
91
- else {
92
- const [index, uuid] = element.isPointInElement(point, data);
93
- if (index >= 0 && ((_b = (_a = data.elements[index]) === null || _a === void 0 ? void 0 : _a.operation) === null || _b === void 0 ? void 0 : _b.invisible) !== true) {
94
- selectElementByIndex(index, { useMode: true });
95
- if (typeof uuid === 'string' &&
96
- coreEvent.has('screenSelectElement')) {
97
- coreEvent.trigger('screenSelectElement', {
98
- index,
99
- uuid,
100
- element: deepClone((_c = data.elements) === null || _c === void 0 ? void 0 : _c[index])
101
- });
102
- emitChangeScreen();
103
- }
104
- this.temp.set('mode', Mode.SELECT_ELEMENT);
105
- }
106
- else {
107
- this.temp.set('selectedUUIDList', []);
108
- this.temp.set('selectedUUID', null);
109
- this.temp.set('mode', Mode.SELECT_AREA);
110
- }
111
- }
112
- }
113
- drawFeekback();
114
- }
115
- _handleClick(point) {
116
- var _a;
117
- const { element, getDataFeekback, coreEvent, drawFeekback } = this._opts;
118
- const data = getDataFeekback();
119
- const [index, uuid] = element.isPointInElement(point, data);
120
- if (index >= 0 && uuid) {
121
- coreEvent.trigger('screenClickElement', {
122
- index,
123
- uuid,
124
- element: deepClone((_a = data.elements) === null || _a === void 0 ? void 0 : _a[index])
125
- });
126
- }
127
- drawFeekback();
128
- }
129
- _handleMoveStart(point) {
130
- const { element, getDataFeekback, coreEvent } = this._opts;
131
- const data = getDataFeekback();
132
- const helper = this.helper;
133
- this.temp.set('prevPoint', point);
134
- const uuid = this.temp.get('selectedUUID');
135
- if (this.temp.get('mode') === Mode.SELECT_ELEMENT_LIST) {
136
- }
137
- else if (this.temp.get('mode') === Mode.SELECT_ELEMENT) {
138
- if (typeof uuid === 'string' && coreEvent.has('screenMoveElementStart')) {
139
- coreEvent.trigger('screenMoveElementStart', {
140
- index: element.getElementIndex(data, uuid),
141
- uuid,
142
- x: point.x,
143
- y: point.y
144
- });
145
- }
146
- }
147
- else if (this.temp.get('mode') === Mode.SELECT_AREA) {
148
- helper.startSelectArea(point);
149
- }
150
- }
151
- _handleMove(point) {
152
- const { drawFeekback } = this._opts;
153
- const helper = this.helper;
154
- if (this.temp.get('mode') === Mode.SELECT_ELEMENT_LIST) {
155
- this.temp.set('hasChangedElement', true);
156
- this._dragElements(this.temp.get('selectedUUIDList'), point, this.temp.get('prevPoint'));
157
- drawFeekback();
158
- this.temp.set('cursorStatus', CursorStatus.DRAGGING);
159
- }
160
- else if (typeof this.temp.get('selectedUUID') === 'string') {
161
- if (this.temp.get('mode') === Mode.SELECT_ELEMENT) {
162
- this.temp.set('hasChangedElement', true);
163
- this._dragElements([this.temp.get('selectedUUID')], point, this.temp.get('prevPoint'));
164
- drawFeekback();
165
- this.temp.set('cursorStatus', CursorStatus.DRAGGING);
166
- }
167
- else if (this.temp.get('mode') === Mode.SELECT_ELEMENT_WRAPPER_CONTROLLER &&
168
- this.temp.get('selectedControllerDirection')) {
169
- this._transfromElement(this.temp.get('selectedUUID'), point, this.temp.get('prevPoint'), this.temp.get('selectedControllerDirection'));
170
- this.temp.set('cursorStatus', CursorStatus.DRAGGING);
171
- }
172
- }
173
- else if (this.temp.get('mode') === Mode.SELECT_AREA) {
174
- helper.changeSelectArea(point);
175
- drawFeekback();
176
- }
177
- this.temp.set('prevPoint', point);
178
- }
179
- _dragElements(uuids, point, prevPoint) {
180
- if (!prevPoint) {
181
- return;
182
- }
183
- const { board, element, getDataFeekback, drawFeekback } = this._opts;
184
- const data = getDataFeekback();
185
- const helper = this.helper;
186
- uuids.forEach((uuid) => {
187
- var _a, _b;
188
- const idx = helper.getElementIndexByUUID(uuid);
189
- if (idx === null)
190
- return;
191
- const elem = data.elements[idx];
192
- if (((_a = elem === null || elem === void 0 ? void 0 : elem.operation) === null || _a === void 0 ? void 0 : _a.lock) !== true &&
193
- ((_b = elem === null || elem === void 0 ? void 0 : elem.operation) === null || _b === void 0 ? void 0 : _b.invisible) !== true) {
194
- element.dragElement(data, uuid, point, prevPoint, board.getContext().getTransform().scale);
195
- }
196
- });
197
- drawFeekback();
198
- }
199
- _transfromElement(uuid, point, prevPoint, direction) {
200
- if (!prevPoint) {
201
- return null;
202
- }
203
- const { board, element, getDataFeekback, drawFeekback } = this._opts;
204
- const data = getDataFeekback();
205
- const result = element.transformElement(data, uuid, point, prevPoint, board.getContext().getTransform().scale, direction);
206
- drawFeekback();
207
- return result;
208
- }
209
- _handleMoveEnd(point) {
210
- const { element, getDataFeekback, coreEvent, drawFeekback, emitChangeData } = this._opts;
211
- const data = getDataFeekback();
212
- const helper = this.helper;
213
- const uuid = this.temp.get('selectedUUID');
214
- if (typeof uuid === 'string') {
215
- const index = element.getElementIndex(data, uuid);
216
- const elem = data.elements[index];
217
- if (elem) {
218
- if (coreEvent.has('screenMoveElementEnd')) {
219
- coreEvent.trigger('screenMoveElementEnd', {
220
- index,
221
- uuid,
222
- x: point.x,
223
- y: point.y
224
- });
225
- }
226
- if (coreEvent.has('screenChangeElement')) {
227
- coreEvent.trigger('screenChangeElement', {
228
- index,
229
- uuid,
230
- width: elem.w,
231
- height: elem.h,
232
- angle: elem.angle || 0
233
- });
234
- }
235
- }
236
- }
237
- else if (this.temp.get('mode') === Mode.SELECT_AREA) {
238
- const uuids = helper.calcSelectedElements(data);
239
- if (uuids.length > 0) {
240
- this.temp.set('selectedUUIDList', uuids);
241
- this.temp.set('selectedUUID', null);
242
- }
243
- else {
244
- this.temp.set('mode', Mode.NULL);
245
- }
246
- helper.clearSelectedArea();
247
- drawFeekback();
248
- }
249
- if (this.temp.get('mode') !== Mode.SELECT_ELEMENT) {
250
- this.temp.set('selectedUUID', null);
251
- }
252
- this.temp.set('cursorStatus', CursorStatus.NULL);
253
- this.temp.set('mode', Mode.NULL);
254
- if (this.temp.get('hasChangedElement') === true) {
255
- emitChangeData();
256
- this.temp.set('hasChangedElement', false);
257
- }
258
- }
259
- _handleHover(point) {
260
- var _a, _b;
261
- let isMouseOverElement = false;
262
- const { board, getDataFeekback, coreEvent } = this._opts;
263
- const data = getDataFeekback();
264
- const helper = this.helper;
265
- const mapper = this._mapper;
266
- if (this.temp.get('mode') === Mode.SELECT_AREA) {
267
- board.resetCursor();
268
- }
269
- else if (this.temp.get('cursorStatus') === CursorStatus.NULL) {
270
- const { cursor, elementUUID } = mapper.judgePointCursor(point, data);
271
- board.setCursor(cursor);
272
- if (elementUUID) {
273
- const index = helper.getElementIndexByUUID(elementUUID);
274
- if (index !== null && index >= 0) {
275
- const elem = data.elements[index];
276
- if (((_a = elem === null || elem === void 0 ? void 0 : elem.operation) === null || _a === void 0 ? void 0 : _a.lock) === true ||
277
- ((_b = elem === null || elem === void 0 ? void 0 : elem.operation) === null || _b === void 0 ? void 0 : _b.invisible) === true) {
278
- board.resetCursor();
279
- return;
280
- }
281
- if (this.temp.get('hoverUUID') !== elem.uuid) {
282
- const preIndex = helper.getElementIndexByUUID(this.temp.get('hoverUUID') || '');
283
- if (preIndex !== null && data.elements[preIndex]) {
284
- coreEvent.trigger('mouseLeaveElement', {
285
- uuid: this.temp.get('hoverUUID'),
286
- index: preIndex,
287
- element: data.elements[preIndex]
288
- });
289
- }
290
- }
291
- if (elem) {
292
- coreEvent.trigger('mouseOverElement', {
293
- uuid: elem.uuid,
294
- index,
295
- element: elem
296
- });
297
- this.temp.set('hoverUUID', elem.uuid);
298
- isMouseOverElement = true;
299
- }
300
- }
301
- }
302
- }
303
- if (isMouseOverElement !== true && this.temp.get('hoverUUID') !== null) {
304
- const uuid = this.temp.get('hoverUUID');
305
- const index = helper.getElementIndexByUUID(uuid || '');
306
- if (index !== null)
307
- coreEvent.trigger('mouseLeaveElement', {
308
- uuid,
309
- index,
310
- element: data.elements[index]
311
- });
312
- this.temp.set('hoverUUID', null);
313
- }
314
- if (coreEvent.has('mouseOverScreen'))
315
- coreEvent.trigger('mouseOverScreen', point);
316
- }
317
- _handleLeave() {
318
- const { coreEvent } = this._opts;
319
- if (coreEvent.has('mouseLeaveScreen')) {
320
- coreEvent.trigger('mouseLeaveScreen', undefined);
321
- }
322
- }
323
- }
@@ -1,30 +0,0 @@
1
- import { IDrawData, HelperConfig, HelperUpdateOpts, HelperWrapperControllerDirection, Point, IDrawConfigStrict } from '@idraw/types';
2
- import Board from '@idraw/board';
3
- export declare class Helper {
4
- private _helperConfig;
5
- private _coreConfig;
6
- private _ctx;
7
- private _board;
8
- private _areaStart;
9
- private _areaEnd;
10
- constructor(board: Board, config: IDrawConfigStrict);
11
- updateConfig(data: IDrawData, opts: HelperUpdateOpts): void;
12
- getConfig(): HelperConfig;
13
- getElementIndexByUUID(uuid: string): number | null;
14
- isPointInElementWrapperController(p: Point, data?: IDrawData): {
15
- uuid: string | null | undefined;
16
- selectedControllerDirection: HelperWrapperControllerDirection | null;
17
- hoverControllerDirection: HelperWrapperControllerDirection | null;
18
- directIndex: number | null;
19
- };
20
- isPointInElementList(p: Point, data: IDrawData): boolean;
21
- startSelectArea(p: Point): void;
22
- changeSelectArea(p: Point): void;
23
- clearSelectedArea(): void;
24
- calcSelectedElements(data: IDrawData): string[];
25
- private _calcSelectedArea;
26
- private _updateElementIndex;
27
- private _updateSelectedElementWrapper;
28
- private _updateSelectedElementListWrapper;
29
- private _createSelectedElementWrapper;
30
- }