@idraw/core 0.2.0-alpha.9 → 0.3.0-0.3.0-beta.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/LICENSE +1 -1
  2. package/dist/esm/constant/element.d.ts +2 -0
  3. package/dist/esm/constant/element.js +10 -0
  4. package/dist/esm/constant/static.d.ts +11 -0
  5. package/dist/esm/constant/static.js +13 -0
  6. package/dist/esm/index.d.ts +59 -0
  7. package/dist/esm/index.js +203 -0
  8. package/dist/esm/lib/calculate.d.ts +5 -0
  9. package/dist/esm/lib/calculate.js +64 -0
  10. package/dist/esm/lib/check.d.ts +28 -0
  11. package/dist/esm/lib/check.js +115 -0
  12. package/dist/esm/lib/config.d.ts +3 -0
  13. package/dist/esm/lib/config.js +20 -0
  14. package/dist/esm/lib/core-event.d.ts +49 -0
  15. package/dist/esm/lib/core-event.js +50 -0
  16. package/dist/esm/lib/diff.d.ts +6 -0
  17. package/dist/esm/lib/diff.js +82 -0
  18. package/dist/esm/lib/draw/base.d.ts +5 -0
  19. package/dist/esm/lib/draw/base.js +90 -0
  20. package/dist/esm/lib/draw/wrapper.d.ts +4 -0
  21. package/dist/esm/lib/draw/wrapper.js +168 -0
  22. package/dist/esm/lib/element.d.ts +15 -0
  23. package/dist/esm/lib/element.js +442 -0
  24. package/dist/esm/lib/engine-temp.d.ts +22 -0
  25. package/dist/esm/lib/engine-temp.js +29 -0
  26. package/dist/esm/lib/engine.d.ts +47 -0
  27. package/dist/esm/lib/engine.js +323 -0
  28. package/dist/esm/lib/helper.d.ts +30 -0
  29. package/dist/esm/lib/helper.js +363 -0
  30. package/dist/esm/lib/index.d.ts +13 -0
  31. package/dist/esm/lib/index.js +13 -0
  32. package/dist/esm/lib/is.d.ts +26 -0
  33. package/dist/esm/lib/is.js +100 -0
  34. package/dist/esm/lib/mapper.d.ts +26 -0
  35. package/dist/esm/lib/mapper.js +89 -0
  36. package/dist/esm/lib/parse.d.ts +2 -0
  37. package/dist/esm/lib/parse.js +32 -0
  38. package/dist/esm/lib/temp.d.ts +11 -0
  39. package/dist/esm/lib/temp.js +19 -0
  40. package/dist/esm/lib/transform.d.ts +4 -0
  41. package/dist/esm/lib/transform.js +20 -0
  42. package/dist/esm/lib/value.d.ts +2 -0
  43. package/dist/esm/lib/value.js +7 -0
  44. package/dist/esm/mixins/element.d.ts +18 -0
  45. package/dist/esm/mixins/element.js +167 -0
  46. package/dist/esm/plugins/helper.d.ts +12 -0
  47. package/dist/esm/plugins/helper.js +16 -0
  48. package/dist/esm/util/filter.d.ts +1 -0
  49. package/dist/esm/util/filter.js +3 -0
  50. package/dist/index.global.js +4564 -4317
  51. package/dist/index.global.min.js +1 -0
  52. package/package.json +11 -12
  53. package/dist/index.cjs.js +0 -4414
  54. package/dist/index.d.ts +0 -172
  55. package/dist/index.es.js +0 -4412
@@ -0,0 +1,82 @@
1
+ export function isChangeImageElementResource(before, after) {
2
+ var _a, _b;
3
+ return ((_a = before === null || before === void 0 ? void 0 : before.desc) === null || _a === void 0 ? void 0 : _a.src) !== ((_b = after === null || after === void 0 ? void 0 : after.desc) === null || _b === void 0 ? void 0 : _b.src);
4
+ }
5
+ export function isChangeSVGElementResource(before, after) {
6
+ var _a, _b;
7
+ return ((_a = before === null || before === void 0 ? void 0 : before.desc) === null || _a === void 0 ? void 0 : _a.svg) !== ((_b = after === null || after === void 0 ? void 0 : after.desc) === null || _b === void 0 ? void 0 : _b.svg);
8
+ }
9
+ export function isChangeHTMLElementResource(before, after) {
10
+ var _a, _b, _c, _d, _e, _f;
11
+ return (((_a = before === null || before === void 0 ? void 0 : before.desc) === null || _a === void 0 ? void 0 : _a.html) !== ((_b = after === null || after === void 0 ? void 0 : after.desc) === null || _b === void 0 ? void 0 : _b.html) ||
12
+ ((_c = before === null || before === void 0 ? void 0 : before.desc) === null || _c === void 0 ? void 0 : _c.width) !== ((_d = after === null || after === void 0 ? void 0 : after.desc) === null || _d === void 0 ? void 0 : _d.width) ||
13
+ ((_e = before === null || before === void 0 ? void 0 : before.desc) === null || _e === void 0 ? void 0 : _e.height) !== ((_f = after === null || after === void 0 ? void 0 : after.desc) === null || _f === void 0 ? void 0 : _f.height));
14
+ }
15
+ export function diffElementResourceChange(before, after) {
16
+ let result = null;
17
+ let isChange = false;
18
+ switch (after.type) {
19
+ case 'image': {
20
+ isChange = isChangeImageElementResource(before, after);
21
+ break;
22
+ }
23
+ case 'svg': {
24
+ isChange = isChangeSVGElementResource(before, after);
25
+ break;
26
+ }
27
+ case 'html': {
28
+ isChange = isChangeHTMLElementResource(before, after);
29
+ break;
30
+ }
31
+ default:
32
+ break;
33
+ }
34
+ if (isChange === true) {
35
+ result = after.uuid;
36
+ }
37
+ return result;
38
+ }
39
+ export function diffElementResourceChangeList(before, after) {
40
+ var _a;
41
+ const uuids = [];
42
+ const beforeMap = parseDataElementMap(before);
43
+ const afterMap = parseDataElementMap(after);
44
+ for (const uuid in afterMap) {
45
+ if (['image', 'svg', 'html'].includes((_a = afterMap[uuid]) === null || _a === void 0 ? void 0 : _a.type) !== true) {
46
+ continue;
47
+ }
48
+ if (beforeMap[uuid]) {
49
+ let isChange = false;
50
+ switch (beforeMap[uuid].type) {
51
+ case 'image': {
52
+ isChange = isChangeImageElementResource(beforeMap[uuid], afterMap[uuid]);
53
+ break;
54
+ }
55
+ case 'svg': {
56
+ isChange = isChangeSVGElementResource(beforeMap[uuid], afterMap[uuid]);
57
+ break;
58
+ }
59
+ case 'html': {
60
+ isChange = isChangeHTMLElementResource(beforeMap[uuid], afterMap[uuid]);
61
+ break;
62
+ }
63
+ default:
64
+ break;
65
+ }
66
+ if (isChange === true) {
67
+ uuids.push(uuid);
68
+ }
69
+ }
70
+ else {
71
+ uuids.push(uuid);
72
+ }
73
+ }
74
+ return uuids;
75
+ }
76
+ function parseDataElementMap(data) {
77
+ const elemMap = {};
78
+ data.elements.forEach((elem) => {
79
+ elemMap[elem.uuid] = elem;
80
+ });
81
+ return elemMap;
82
+ }
@@ -0,0 +1,5 @@
1
+ import { IDrawContext, DataElement } from '@idraw/types';
2
+ export declare function clearContext(ctx: IDrawContext): void;
3
+ export declare function drawBgColor(ctx: IDrawContext, color: string): void;
4
+ export declare function drawBox(ctx: IDrawContext, elem: DataElement<'text' | 'rect'>, pattern: string | CanvasPattern | null): void;
5
+ export declare function drawBoxBorder(ctx: IDrawContext, elem: DataElement<'text' | 'rect'>): void;
@@ -0,0 +1,90 @@
1
+ import { istype, isColorStr } from '@idraw/util';
2
+ import { rotateElement } from './../transform';
3
+ import is from './../is';
4
+ export function clearContext(ctx) {
5
+ ctx.setFillStyle('#000000');
6
+ ctx.setStrokeStyle('#000000');
7
+ ctx.setLineDash([]);
8
+ ctx.setGlobalAlpha(1);
9
+ ctx.setShadowColor('#00000000');
10
+ ctx.setShadowOffsetX(0);
11
+ ctx.setShadowOffsetY(0);
12
+ ctx.setShadowBlur(0);
13
+ }
14
+ export function drawBgColor(ctx, color) {
15
+ const size = ctx.getSize();
16
+ ctx.setFillStyle(color);
17
+ ctx.fillRect(0, 0, size.contextWidth, size.contextHeight);
18
+ }
19
+ export function drawBox(ctx, elem, pattern) {
20
+ clearContext(ctx);
21
+ drawBoxBorder(ctx, elem);
22
+ clearContext(ctx);
23
+ rotateElement(ctx, elem, () => {
24
+ const { x, y, w, h } = elem;
25
+ let r = elem.desc.borderRadius || 0;
26
+ r = Math.min(r, w / 2, h / 2);
27
+ if (w < r * 2 || h < r * 2) {
28
+ r = 0;
29
+ }
30
+ ctx.beginPath();
31
+ ctx.moveTo(x + r, y);
32
+ ctx.arcTo(x + w, y, x + w, y + h, r);
33
+ ctx.arcTo(x + w, y + h, x, y + h, r);
34
+ ctx.arcTo(x, y + h, x, y, r);
35
+ ctx.arcTo(x, y, x + w, y, r);
36
+ ctx.closePath();
37
+ if (typeof pattern === 'string') {
38
+ ctx.setFillStyle(pattern);
39
+ }
40
+ else if (['CanvasPattern'].includes(istype.type(pattern))) {
41
+ ctx.setFillStyle(pattern);
42
+ }
43
+ ctx.fill();
44
+ });
45
+ }
46
+ export function drawBoxBorder(ctx, elem) {
47
+ clearContext(ctx);
48
+ rotateElement(ctx, elem, () => {
49
+ if (!(elem.desc.borderWidth && elem.desc.borderWidth > 0)) {
50
+ return;
51
+ }
52
+ const bw = elem.desc.borderWidth;
53
+ let borderColor = '#000000';
54
+ if (isColorStr(elem.desc.borderColor) === true) {
55
+ borderColor = elem.desc.borderColor;
56
+ }
57
+ const x = elem.x - bw / 2;
58
+ const y = elem.y - bw / 2;
59
+ const w = elem.w + bw;
60
+ const h = elem.h + bw;
61
+ let r = elem.desc.borderRadius || 0;
62
+ r = Math.min(r, w / 2, h / 2);
63
+ if (r < w / 2 && r < h / 2) {
64
+ r = r + bw / 2;
65
+ }
66
+ const { desc } = elem;
67
+ if (desc.shadowColor !== undefined && isColorStr(desc.shadowColor)) {
68
+ ctx.setShadowColor(desc.shadowColor);
69
+ }
70
+ if (desc.shadowOffsetX !== undefined && is.number(desc.shadowOffsetX)) {
71
+ ctx.setShadowOffsetX(desc.shadowOffsetX);
72
+ }
73
+ if (desc.shadowOffsetY !== undefined && is.number(desc.shadowOffsetY)) {
74
+ ctx.setShadowOffsetY(desc.shadowOffsetY);
75
+ }
76
+ if (desc.shadowBlur !== undefined && is.number(desc.shadowBlur)) {
77
+ ctx.setShadowBlur(desc.shadowBlur);
78
+ }
79
+ ctx.beginPath();
80
+ ctx.setLineWidth(bw);
81
+ ctx.setStrokeStyle(borderColor);
82
+ ctx.moveTo(x + r, y);
83
+ ctx.arcTo(x + w, y, x + w, y + h, r);
84
+ ctx.arcTo(x + w, y + h, x, y + h, r);
85
+ ctx.arcTo(x, y + h, x, y, r);
86
+ ctx.arcTo(x, y, x + w, y, r);
87
+ ctx.closePath();
88
+ ctx.stroke();
89
+ });
90
+ }
@@ -0,0 +1,4 @@
1
+ import { IDrawContext, HelperConfig } from '@idraw/types';
2
+ export declare function drawElementWrapper(ctx: IDrawContext, config: HelperConfig): void;
3
+ export declare function drawAreaWrapper(ctx: IDrawContext, config: HelperConfig): void;
4
+ export declare function drawElementListWrappers(ctx: IDrawContext, config: HelperConfig): void;
@@ -0,0 +1,168 @@
1
+ import { rotateContext } from './../transform';
2
+ import { clearContext } from './base';
3
+ export function drawElementWrapper(ctx, config) {
4
+ if (!(config === null || config === void 0 ? void 0 : config.selectedElementWrapper)) {
5
+ return;
6
+ }
7
+ const wrapper = config.selectedElementWrapper;
8
+ clearContext(ctx);
9
+ rotateContext(ctx, wrapper.translate, wrapper.radian || 0, () => {
10
+ ctx.beginPath();
11
+ ctx.setLineDash(wrapper.lineDash);
12
+ ctx.setLineWidth(wrapper.lineWidth);
13
+ ctx.setStrokeStyle(wrapper.color);
14
+ ctx.moveTo(wrapper.controllers.topLeft.x, wrapper.controllers.topLeft.y);
15
+ ctx.lineTo(wrapper.controllers.topRight.x, wrapper.controllers.topRight.y);
16
+ ctx.lineTo(wrapper.controllers.bottomRight.x, wrapper.controllers.bottomRight.y);
17
+ ctx.lineTo(wrapper.controllers.bottomLeft.x, wrapper.controllers.bottomLeft.y);
18
+ ctx.lineTo(wrapper.controllers.topLeft.x, wrapper.controllers.topLeft.y - wrapper.lineWidth / 2);
19
+ ctx.stroke();
20
+ ctx.closePath();
21
+ if (wrapper.lock !== true) {
22
+ if (wrapper.controllers.rotate.invisible !== true) {
23
+ ctx.beginPath();
24
+ ctx.moveTo(wrapper.controllers.top.x, wrapper.controllers.top.y);
25
+ ctx.lineTo(wrapper.controllers.rotate.x, wrapper.controllers.rotate.y + wrapper.controllerSize);
26
+ ctx.stroke();
27
+ ctx.closePath();
28
+ ctx.beginPath();
29
+ ctx.setLineDash([]);
30
+ ctx.setLineWidth(wrapper.controllerSize / 1.2);
31
+ ctx.arc(wrapper.controllers.rotate.x, wrapper.controllers.rotate.y, wrapper.controllerSize * 0.8, 0, Math.PI * 2);
32
+ ctx.stroke();
33
+ ctx.closePath();
34
+ ctx.setStrokeStyle('#FFFFFF');
35
+ ctx.beginPath();
36
+ ctx.setLineDash([]);
37
+ ctx.setLineWidth(wrapper.controllerSize / 2.1);
38
+ ctx.arc(wrapper.controllers.rotate.x, wrapper.controllers.rotate.y, wrapper.controllerSize * 0.8, 0, Math.PI * 2);
39
+ ctx.stroke();
40
+ ctx.closePath();
41
+ }
42
+ [
43
+ wrapper.controllers.topLeft,
44
+ wrapper.controllers.top,
45
+ wrapper.controllers.topRight,
46
+ wrapper.controllers.right,
47
+ wrapper.controllers.bottomRight,
48
+ wrapper.controllers.bottom,
49
+ wrapper.controllers.bottomLeft,
50
+ wrapper.controllers.left
51
+ ].forEach((controller) => {
52
+ if (controller.invisible !== true) {
53
+ ctx.setFillStyle(wrapper.color);
54
+ ctx.beginPath();
55
+ ctx.arc(controller.x, controller.y, wrapper.controllerSize, 0, Math.PI * 2);
56
+ ctx.fill();
57
+ ctx.closePath();
58
+ ctx.setFillStyle('#FFFFFF');
59
+ ctx.beginPath();
60
+ ctx.arc(controller.x, controller.y, wrapper.controllerSize - 1, 0, Math.PI * 2);
61
+ ctx.fill();
62
+ ctx.closePath();
63
+ }
64
+ });
65
+ }
66
+ else {
67
+ clearContext(ctx);
68
+ ctx.setStrokeStyle(wrapper.color);
69
+ [
70
+ wrapper.controllers.topLeft,
71
+ wrapper.controllers.top,
72
+ wrapper.controllers.topRight,
73
+ wrapper.controllers.right,
74
+ wrapper.controllers.bottomRight,
75
+ wrapper.controllers.bottom,
76
+ wrapper.controllers.bottomLeft,
77
+ wrapper.controllers.left
78
+ ].forEach((controller) => {
79
+ ctx.beginPath();
80
+ ctx.moveTo(controller.x - wrapper.controllerSize / 2, controller.y - wrapper.controllerSize / 2);
81
+ ctx.lineTo(controller.x + wrapper.controllerSize / 2, controller.y + wrapper.controllerSize / 2);
82
+ ctx.stroke();
83
+ ctx.closePath();
84
+ ctx.beginPath();
85
+ ctx.moveTo(controller.x + wrapper.controllerSize / 2, controller.y - wrapper.controllerSize / 2);
86
+ ctx.lineTo(controller.x - wrapper.controllerSize / 2, controller.y + wrapper.controllerSize / 2);
87
+ ctx.stroke();
88
+ ctx.closePath();
89
+ });
90
+ }
91
+ });
92
+ }
93
+ export function drawAreaWrapper(ctx, config) {
94
+ if (!(config === null || config === void 0 ? void 0 : config.selectedAreaWrapper)) {
95
+ return;
96
+ }
97
+ const wrapper = config.selectedAreaWrapper;
98
+ if (wrapper && wrapper.w > 0 && wrapper.h > 0) {
99
+ clearContext(ctx);
100
+ ctx.setGlobalAlpha(0.3);
101
+ ctx.setFillStyle(wrapper.color);
102
+ ctx.fillRect(wrapper.x, wrapper.y, wrapper.w, wrapper.h);
103
+ clearContext(ctx);
104
+ ctx.beginPath();
105
+ ctx.setLineDash(wrapper.lineDash);
106
+ ctx.setLineWidth(wrapper.lineWidth);
107
+ ctx.setStrokeStyle(wrapper.color);
108
+ ctx.moveTo(wrapper.x, wrapper.y);
109
+ ctx.lineTo(wrapper.x + wrapper.w, wrapper.y);
110
+ ctx.lineTo(wrapper.x + wrapper.w, wrapper.y + wrapper.h);
111
+ ctx.lineTo(wrapper.x, wrapper.y + wrapper.h);
112
+ ctx.lineTo(wrapper.x, wrapper.y);
113
+ ctx.stroke();
114
+ ctx.closePath();
115
+ }
116
+ }
117
+ export function drawElementListWrappers(ctx, config) {
118
+ if (!Array.isArray(config === null || config === void 0 ? void 0 : config.selectedElementListWrappers)) {
119
+ return;
120
+ }
121
+ const wrapperList = config.selectedElementListWrappers;
122
+ wrapperList === null || wrapperList === void 0 ? void 0 : wrapperList.forEach((wrapper) => {
123
+ clearContext(ctx);
124
+ rotateContext(ctx, wrapper.translate, wrapper.radian || 0, () => {
125
+ clearContext(ctx);
126
+ ctx.setGlobalAlpha(0.05);
127
+ ctx.setFillStyle(wrapper.color);
128
+ ctx.fillRect(wrapper.controllers.topLeft.x, wrapper.controllers.topLeft.y, wrapper.controllers.bottomRight.x - wrapper.controllers.topLeft.x, wrapper.controllers.bottomRight.y - wrapper.controllers.topLeft.y);
129
+ clearContext(ctx);
130
+ ctx.beginPath();
131
+ ctx.setLineDash(wrapper.lineDash);
132
+ ctx.setLineWidth(wrapper.lineWidth);
133
+ ctx.setStrokeStyle(wrapper.color);
134
+ ctx.moveTo(wrapper.controllers.topLeft.x, wrapper.controllers.topLeft.y);
135
+ ctx.lineTo(wrapper.controllers.topRight.x, wrapper.controllers.topRight.y);
136
+ ctx.lineTo(wrapper.controllers.bottomRight.x, wrapper.controllers.bottomRight.y);
137
+ ctx.lineTo(wrapper.controllers.bottomLeft.x, wrapper.controllers.bottomLeft.y);
138
+ ctx.lineTo(wrapper.controllers.topLeft.x, wrapper.controllers.topLeft.y - wrapper.lineWidth / 2);
139
+ ctx.stroke();
140
+ ctx.closePath();
141
+ if (wrapper.lock === true) {
142
+ clearContext(ctx);
143
+ ctx.setStrokeStyle(wrapper.color);
144
+ [
145
+ wrapper.controllers.topLeft,
146
+ wrapper.controllers.top,
147
+ wrapper.controllers.topRight,
148
+ wrapper.controllers.right,
149
+ wrapper.controllers.bottomRight,
150
+ wrapper.controllers.bottom,
151
+ wrapper.controllers.bottomLeft,
152
+ wrapper.controllers.left
153
+ ].forEach((controller) => {
154
+ ctx.beginPath();
155
+ ctx.moveTo(controller.x - wrapper.controllerSize / 2, controller.y - wrapper.controllerSize / 2);
156
+ ctx.lineTo(controller.x + wrapper.controllerSize / 2, controller.y + wrapper.controllerSize / 2);
157
+ ctx.stroke();
158
+ ctx.closePath();
159
+ ctx.beginPath();
160
+ ctx.moveTo(controller.x + wrapper.controllerSize / 2, controller.y - wrapper.controllerSize / 2);
161
+ ctx.lineTo(controller.x - wrapper.controllerSize / 2, controller.y + wrapper.controllerSize / 2);
162
+ ctx.stroke();
163
+ ctx.closePath();
164
+ });
165
+ }
166
+ });
167
+ });
168
+ }
@@ -0,0 +1,15 @@
1
+ import { IDrawContext, Point, IDrawData, HelperWrapperControllerDirection, DataElement, DataElemDesc } from '@idraw/types';
2
+ export declare class Element {
3
+ private _ctx;
4
+ constructor(ctx: IDrawContext);
5
+ initData(data: IDrawData): IDrawData;
6
+ isPointInElement(p: Point, data: IDrawData): [number, string | null];
7
+ dragElement(data: IDrawData, uuid: string, point: Point, prevPoint: Point, scale: number): void;
8
+ transformElement(data: IDrawData, uuid: string, point: Point, prevPoint: Point, scale: number, direction: HelperWrapperControllerDirection): null | {
9
+ width: number;
10
+ height: number;
11
+ angle: number;
12
+ };
13
+ getElementIndex(data: IDrawData, uuid: string): number;
14
+ limitElementAttrs(elem: DataElement<keyof DataElemDesc>): void;
15
+ }