@idraw/core 0.3.0-alpha.6 → 0.3.0-alpha.7

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 (66) hide show
  1. package/dist/esm/constant/element.d.ts +2 -0
  2. package/dist/esm/constant/element.js +10 -0
  3. package/dist/esm/constant/static.d.ts +11 -0
  4. package/dist/esm/constant/static.js +13 -0
  5. package/dist/esm/index.d.ts +59 -0
  6. package/{esm → dist/esm}/index.js +10 -10
  7. package/dist/esm/lib/calculate.d.ts +5 -0
  8. package/dist/esm/lib/calculate.js +64 -0
  9. package/dist/esm/lib/check.d.ts +28 -0
  10. package/dist/esm/lib/check.js +115 -0
  11. package/dist/esm/lib/config.d.ts +3 -0
  12. package/dist/esm/lib/config.js +20 -0
  13. package/dist/esm/lib/core-event.d.ts +49 -0
  14. package/dist/esm/lib/core-event.js +50 -0
  15. package/dist/esm/lib/diff.d.ts +6 -0
  16. package/dist/esm/lib/diff.js +80 -0
  17. package/dist/esm/lib/draw/base.d.ts +5 -0
  18. package/dist/esm/lib/draw/base.js +90 -0
  19. package/dist/esm/lib/draw/wrapper.d.ts +4 -0
  20. package/dist/esm/lib/draw/wrapper.js +144 -0
  21. package/dist/esm/lib/element/element-base.d.ts +3 -0
  22. package/dist/esm/lib/element/element-base.js +5 -0
  23. package/dist/esm/lib/element/element-controller.d.ts +3 -0
  24. package/dist/esm/lib/element/element-controller.js +3 -0
  25. package/dist/esm/lib/element/element-hub.d.ts +9 -0
  26. package/dist/esm/lib/element/element-hub.js +16 -0
  27. package/dist/esm/lib/element.d.ts +15 -0
  28. package/dist/esm/lib/element.js +380 -0
  29. package/dist/esm/lib/engine-temp.d.ts +22 -0
  30. package/dist/esm/lib/engine-temp.js +29 -0
  31. package/dist/esm/lib/engine.d.ts +47 -0
  32. package/dist/esm/lib/engine.js +323 -0
  33. package/dist/esm/lib/helper.d.ts +30 -0
  34. package/dist/esm/lib/helper.js +363 -0
  35. package/dist/esm/lib/index.d.ts +13 -0
  36. package/dist/esm/lib/index.js +13 -0
  37. package/dist/esm/lib/is.d.ts +26 -0
  38. package/dist/esm/lib/is.js +100 -0
  39. package/dist/esm/lib/mapper.d.ts +26 -0
  40. package/dist/esm/lib/mapper.js +89 -0
  41. package/dist/esm/lib/parse.d.ts +2 -0
  42. package/dist/esm/lib/parse.js +29 -0
  43. package/dist/esm/lib/temp.d.ts +11 -0
  44. package/dist/esm/lib/temp.js +19 -0
  45. package/dist/esm/lib/transform.d.ts +4 -0
  46. package/dist/esm/lib/transform.js +20 -0
  47. package/dist/esm/lib/value.d.ts +2 -0
  48. package/dist/esm/lib/value.js +7 -0
  49. package/dist/esm/mixins/element.d.ts +20 -0
  50. package/dist/esm/mixins/element.js +156 -0
  51. package/{esm → dist/esm}/names.d.ts +0 -0
  52. package/{esm → dist/esm}/names.js +0 -0
  53. package/dist/esm/plugins/helper.d.ts +12 -0
  54. package/dist/esm/plugins/helper.js +21 -0
  55. package/dist/esm/util/filter.d.ts +1 -0
  56. package/dist/esm/util/filter.js +3 -0
  57. package/dist/index.global.js +4431 -5923
  58. package/dist/index.global.min.js +1 -1
  59. package/package.json +11 -16
  60. package/dist/index.cjs.js +0 -5995
  61. package/dist/index.d.ts +0 -163
  62. package/dist/index.esm.js +0 -5993
  63. package/esm/default.d.ts +0 -1
  64. package/esm/default.js +0 -2
  65. package/esm/esm.d.ts +0 -2
  66. package/esm/esm.js +0 -3
@@ -0,0 +1,2 @@
1
+ export declare const elementNames: string[];
2
+ export declare const LIMIT_QBLIQUE_ANGLE = 15;
@@ -0,0 +1,10 @@
1
+ const elementTypes = {
2
+ 'text': {},
3
+ 'rect': {},
4
+ 'image': {},
5
+ 'svg': {},
6
+ 'circle': {},
7
+ 'html': {},
8
+ };
9
+ export const elementNames = Object.keys(elementTypes);
10
+ export const LIMIT_QBLIQUE_ANGLE = 15;
@@ -0,0 +1,11 @@
1
+ export declare enum Mode {
2
+ NULL = "null",
3
+ SELECT_ELEMENT = "select-element",
4
+ SELECT_ELEMENT_LIST = "select-element-list",
5
+ SELECT_ELEMENT_WRAPPER_CONTROLLER = "select-element-wrapper-controller",
6
+ SELECT_AREA = "select-area"
7
+ }
8
+ export declare enum CursorStatus {
9
+ DRAGGING = "dragging",
10
+ NULL = "null"
11
+ }
@@ -0,0 +1,13 @@
1
+ export var Mode;
2
+ (function (Mode) {
3
+ Mode["NULL"] = "null";
4
+ Mode["SELECT_ELEMENT"] = "select-element";
5
+ Mode["SELECT_ELEMENT_LIST"] = "select-element-list";
6
+ Mode["SELECT_ELEMENT_WRAPPER_CONTROLLER"] = "select-element-wrapper-controller";
7
+ Mode["SELECT_AREA"] = "select-area";
8
+ })(Mode || (Mode = {}));
9
+ export var CursorStatus;
10
+ (function (CursorStatus) {
11
+ CursorStatus["DRAGGING"] = "dragging";
12
+ CursorStatus["NULL"] = "null";
13
+ })(CursorStatus || (CursorStatus = {}));
@@ -0,0 +1,59 @@
1
+ import { TypeData, TypePoint, TypeBoardSizeOptions, TypeConfig, TypeElementBase, TypeElement, TypeElemDesc, TypeContext, TypeCoreOptions, TypeScreenContext, TypeScreenData } from '@idraw/types';
2
+ import { TypeIs } from './lib/is';
3
+ import { TypeCheck } from './lib/check';
4
+ import { TypeCoreEventArgMap } from './lib';
5
+ import { _board, _data, _opts, _config, _renderer, _element, _tempData, _draw, _coreEvent, _emitChangeScreen, _emitChangeData, _engine } from './names';
6
+ export default class Core {
7
+ private [_board];
8
+ private [_data];
9
+ private [_opts];
10
+ private [_config];
11
+ private [_renderer];
12
+ private [_element];
13
+ private [_coreEvent];
14
+ private [_tempData];
15
+ private [_engine];
16
+ static is: TypeIs;
17
+ static check: TypeCheck;
18
+ constructor(mount: HTMLDivElement, opts: TypeCoreOptions, config?: TypeConfig);
19
+ [_draw](opts?: {
20
+ resourceChangeUUIDs?: string[];
21
+ }): void;
22
+ getElement(uuid: string): TypeElement<keyof TypeElemDesc> | null;
23
+ getElementByIndex(index: number): TypeElement<keyof TypeElemDesc> | null;
24
+ selectElementByIndex(index: number, opts?: {
25
+ useMode?: boolean;
26
+ }): void;
27
+ selectElement(uuid: string, opts?: {
28
+ useMode?: boolean;
29
+ }): void;
30
+ moveUpElement(uuid: string): void;
31
+ moveDownElement(uuid: string): void;
32
+ updateElement(elem: TypeElement<keyof TypeElemDesc>): void;
33
+ addElement(elem: TypeElementBase<keyof TypeElemDesc>): string | null;
34
+ deleteElement(uuid: string): void;
35
+ insertElementBefore(elem: TypeElementBase<keyof TypeElemDesc>, beforeUUID: string): any;
36
+ insertElementBeforeIndex(elem: TypeElementBase<keyof TypeElemDesc>, index: number): any;
37
+ getSelectedElements(): TypeElement<keyof TypeElemDesc>[];
38
+ insertElementAfter(elem: TypeElementBase<keyof TypeElemDesc>, beforeUUID: string): any;
39
+ insertElementAfterIndex(elem: TypeElementBase<keyof TypeElemDesc>, index: number): any;
40
+ resetSize(opts: TypeBoardSizeOptions): void;
41
+ scale(ratio: number): TypeScreenContext;
42
+ scrollLeft(left: number): TypeScreenContext;
43
+ scrollTop(top: number): TypeScreenContext;
44
+ getScreenTransform(): TypeScreenData;
45
+ getData(): TypeData;
46
+ setData(data: any | TypeData, opts?: {
47
+ triggerChangeEvent: boolean;
48
+ }): void;
49
+ clearOperation(): void;
50
+ on<T extends keyof TypeCoreEventArgMap>(key: T, callback: (p: TypeCoreEventArgMap[T]) => void): void;
51
+ off<T extends keyof TypeCoreEventArgMap>(key: T, callback: (p: TypeCoreEventArgMap[T]) => void): void;
52
+ pointScreenToContext(p: TypePoint): TypePoint;
53
+ pointContextToScreen(p: TypePoint): TypePoint;
54
+ __getBoardContext(): TypeContext;
55
+ __getDisplayContext2D(): CanvasRenderingContext2D;
56
+ __getOriginContext2D(): CanvasRenderingContext2D;
57
+ private [_emitChangeScreen];
58
+ private [_emitChangeData];
59
+ }
@@ -1,15 +1,15 @@
1
1
  var _a, _b;
2
- import { Board } from '@idraw/board';
2
+ import Board from '@idraw/board';
3
3
  import { deepClone } from '@idraw/util';
4
- import { Renderer } from '@idraw/renderer';
4
+ import Renderer from '@idraw/renderer';
5
5
  import is from './lib/is';
6
6
  import check from './lib/check';
7
- import { Element, mergeConfig, CoreEvent, parseData, TempData, diffElementResourceChangeList, } from './lib';
8
- import { _board, _data, _opts, _config, _renderer, _element, _tempData, _draw, _coreEvent, _emitChangeScreen, _emitChangeData, _engine, } from './names';
9
- import { getSelectedElements, updateElement, selectElementByIndex, getElement, getElementByIndex, selectElement, moveUpElement, moveDownElement, addElement, deleteElement, insertElementBefore, insertElementBeforeIndex, insertElementAfter, insertElementAfterIndex, } from './mixins/element';
7
+ import { Element, mergeConfig, CoreEvent, parseData, TempData, diffElementResourceChangeList } from './lib';
8
+ import { _board, _data, _opts, _config, _renderer, _element, _tempData, _draw, _coreEvent, _emitChangeScreen, _emitChangeData, _engine } from './names';
9
+ import { getSelectedElements, updateElement, selectElementByIndex, getElement, getElementByIndex, selectElement, moveUpElement, moveDownElement, addElement, deleteElement, insertElementBefore, insertElementBeforeIndex, insertElementAfter, insertElementAfterIndex } from './mixins/element';
10
10
  import { Engine } from './lib/engine';
11
11
  import { drawElementWrapper, drawAreaWrapper, drawElementListWrappers } from './lib/draw/wrapper';
12
- export class Core {
12
+ export default class Core {
13
13
  constructor(mount, opts, config) {
14
14
  var _c, _d, _e;
15
15
  this[_a] = new CoreEvent();
@@ -19,7 +19,7 @@ export class Core {
19
19
  this[_config] = mergeConfig(config || {});
20
20
  this[_board] = new Board(mount, Object.assign(Object.assign({}, this[_opts]), { canScroll: (_c = config === null || config === void 0 ? void 0 : config.scrollWrapper) === null || _c === void 0 ? void 0 : _c.use, scrollConfig: {
21
21
  color: ((_d = config === null || config === void 0 ? void 0 : config.scrollWrapper) === null || _d === void 0 ? void 0 : _d.color) || '#a0a0a0',
22
- lineWidth: ((_e = config === null || config === void 0 ? void 0 : config.scrollWrapper) === null || _e === void 0 ? void 0 : _e.lineWidth) || 12,
22
+ lineWidth: ((_e = config === null || config === void 0 ? void 0 : config.scrollWrapper) === null || _e === void 0 ? void 0 : _e.lineWidth) || 12
23
23
  } }));
24
24
  this[_renderer] = new Renderer();
25
25
  const drawFrame = () => {
@@ -49,7 +49,7 @@ export class Core {
49
49
  getDataFeekback: () => this[_data],
50
50
  selectElementByIndex: this.selectElementByIndex.bind(this),
51
51
  emitChangeScreen: this[_emitChangeScreen].bind(this),
52
- emitChangeData: this[_emitChangeData].bind(this),
52
+ emitChangeData: this[_emitChangeData].bind(this)
53
53
  });
54
54
  this[_engine].init();
55
55
  this[_renderer].on('drawFrame', () => {
@@ -64,7 +64,7 @@ export class Core {
64
64
  this[_engine].updateHelperConfig({
65
65
  width: this[_opts].width,
66
66
  height: this[_opts].height,
67
- devicePixelRatio: this[_opts].devicePixelRatio,
67
+ devicePixelRatio: this[_opts].devicePixelRatio
68
68
  });
69
69
  this[_renderer].thaw();
70
70
  this[_renderer].render(this[_board].getContext(), this[_data], {
@@ -141,7 +141,7 @@ export class Core {
141
141
  return {
142
142
  scale: transform.scale,
143
143
  scrollTop: Math.max(0, 0 - transform.scrollY),
144
- scrollLeft: Math.max(0, 0 - transform.scrollX),
144
+ scrollLeft: Math.max(0, 0 - transform.scrollX)
145
145
  };
146
146
  }
147
147
  getData() {
@@ -0,0 +1,5 @@
1
+ import { TypeElement, TypeElemDesc, TypePoint } from '@idraw/types';
2
+ export declare function parseRadianToAngle(radian: number): number;
3
+ export declare function parseAngleToRadian(angle: number): number;
4
+ export declare function calcElementCenter(elem: TypeElement<keyof TypeElemDesc>): TypePoint;
5
+ export declare function calcRadian(center: TypePoint, start: TypePoint, end: TypePoint): number;
@@ -0,0 +1,64 @@
1
+ export function parseRadianToAngle(radian) {
2
+ return radian / Math.PI * 180;
3
+ }
4
+ export function parseAngleToRadian(angle) {
5
+ return angle / 180 * Math.PI;
6
+ }
7
+ export function calcElementCenter(elem) {
8
+ const p = {
9
+ x: elem.x + elem.w / 2,
10
+ y: elem.y + elem.h / 2,
11
+ };
12
+ return p;
13
+ }
14
+ export function calcRadian(center, start, end) {
15
+ const startAngle = calcLineAngle(center, start);
16
+ const endAngle = calcLineAngle(center, end);
17
+ if (endAngle !== null && startAngle !== null) {
18
+ if (startAngle > Math.PI * 3 / 2 && endAngle < Math.PI / 2) {
19
+ return endAngle + (Math.PI * 2 - startAngle);
20
+ }
21
+ else if (endAngle > Math.PI * 3 / 2 && startAngle < Math.PI / 2) {
22
+ return startAngle + (Math.PI * 2 - endAngle);
23
+ }
24
+ else {
25
+ return endAngle - startAngle;
26
+ }
27
+ }
28
+ else {
29
+ return 0;
30
+ }
31
+ }
32
+ function calcLineAngle(center, p) {
33
+ const x = p.x - center.x;
34
+ const y = center.y - p.y;
35
+ if (x === 0) {
36
+ if (y < 0) {
37
+ return Math.PI / 2;
38
+ }
39
+ else if (y > 0) {
40
+ return Math.PI * (3 / 2);
41
+ }
42
+ }
43
+ else if (y === 0) {
44
+ if (x < 0) {
45
+ return Math.PI;
46
+ }
47
+ else if (x > 0) {
48
+ return 0;
49
+ }
50
+ }
51
+ if (x > 0 && y < 0) {
52
+ return Math.atan(Math.abs(y) / Math.abs(x));
53
+ }
54
+ else if (x < 0 && y < 0) {
55
+ return Math.PI - Math.atan(Math.abs(y) / Math.abs(x));
56
+ }
57
+ else if (x < 0 && y > 0) {
58
+ return Math.PI + Math.atan(Math.abs(y) / Math.abs(x));
59
+ }
60
+ else if (x > 0 && y > 0) {
61
+ return Math.PI * 2 - Math.atan(Math.abs(y) / Math.abs(x));
62
+ }
63
+ return null;
64
+ }
@@ -0,0 +1,28 @@
1
+ import { TypeElementAttrs } from '@idraw/types';
2
+ declare function attrs(attrs: TypeElementAttrs): boolean;
3
+ declare function rectDesc(desc: any): boolean;
4
+ declare function circleDesc(desc: any): boolean;
5
+ declare function imageDesc(desc: any): boolean;
6
+ declare function svgDesc(desc: any): boolean;
7
+ declare function htmlDesc(desc: any): boolean;
8
+ declare function textDesc(desc: any): boolean;
9
+ declare const check: {
10
+ attrs: typeof attrs;
11
+ textDesc: typeof textDesc;
12
+ rectDesc: typeof rectDesc;
13
+ circleDesc: typeof circleDesc;
14
+ imageDesc: typeof imageDesc;
15
+ svgDesc: typeof svgDesc;
16
+ htmlDesc: typeof htmlDesc;
17
+ };
18
+ type TypeCheck = {
19
+ attrs: (value: any) => boolean;
20
+ rectDesc: (value: any) => boolean;
21
+ circleDesc: (value: any) => boolean;
22
+ imageDesc: (value: any) => boolean;
23
+ svgDesc: (value: any) => boolean;
24
+ htmlDesc: (value: any) => boolean;
25
+ textDesc: (value: any) => boolean;
26
+ };
27
+ export { TypeCheck };
28
+ export default check;
@@ -0,0 +1,115 @@
1
+ import is from './is';
2
+ function attrs(attrs) {
3
+ const { x, y, w, h, angle } = attrs;
4
+ if (!(is.x(x) && is.y(y) && is.w(w) && is.h(h) && is.angle(angle))) {
5
+ return false;
6
+ }
7
+ if (!(angle >= -360 && angle <= 360)) {
8
+ return false;
9
+ }
10
+ return true;
11
+ }
12
+ function box(desc = {}) {
13
+ const { borderColor, borderRadius, borderWidth } = desc;
14
+ if (desc.hasOwnProperty('borderColor') && !is.color(borderColor)) {
15
+ return false;
16
+ }
17
+ if (desc.hasOwnProperty('borderRadius') && !is.number(borderRadius)) {
18
+ return false;
19
+ }
20
+ if (desc.hasOwnProperty('borderWidth') && !is.number(borderWidth)) {
21
+ return false;
22
+ }
23
+ return true;
24
+ }
25
+ function rectDesc(desc) {
26
+ const { bgColor } = desc;
27
+ if (desc.hasOwnProperty('bgColor') && !is.color(bgColor)) {
28
+ return false;
29
+ }
30
+ if (!box(desc)) {
31
+ return false;
32
+ }
33
+ return true;
34
+ }
35
+ function circleDesc(desc) {
36
+ const { bgColor, borderColor, borderWidth } = desc;
37
+ if (desc.hasOwnProperty('bgColor') && !is.color(bgColor)) {
38
+ return false;
39
+ }
40
+ if (desc.hasOwnProperty('borderColor') && !is.color(borderColor)) {
41
+ return false;
42
+ }
43
+ if (desc.hasOwnProperty('borderWidth') && !is.number(borderWidth)) {
44
+ return false;
45
+ }
46
+ return true;
47
+ }
48
+ function imageDesc(desc) {
49
+ const { src } = desc;
50
+ if (!is.imageSrc(src)) {
51
+ return false;
52
+ }
53
+ return true;
54
+ }
55
+ function svgDesc(desc) {
56
+ const { svg } = desc;
57
+ if (!is.svg(svg)) {
58
+ return false;
59
+ }
60
+ return true;
61
+ }
62
+ function htmlDesc(desc) {
63
+ const { html } = desc;
64
+ if (!is.html(html)) {
65
+ return false;
66
+ }
67
+ return true;
68
+ }
69
+ function textDesc(desc) {
70
+ const { text, color, fontSize, lineHeight, fontFamily, textAlign, fontWeight, bgColor, strokeWidth, strokeColor } = desc;
71
+ if (!is.text(text)) {
72
+ return false;
73
+ }
74
+ if (!is.color(color)) {
75
+ return false;
76
+ }
77
+ if (!is.fontSize(fontSize)) {
78
+ return false;
79
+ }
80
+ if (desc.hasOwnProperty('bgColor') && !is.color(bgColor)) {
81
+ return false;
82
+ }
83
+ if (desc.hasOwnProperty('fontWeight') && !is.fontWeight(fontWeight)) {
84
+ return false;
85
+ }
86
+ if (desc.hasOwnProperty('lineHeight') && !is.lineHeight(lineHeight)) {
87
+ return false;
88
+ }
89
+ if (desc.hasOwnProperty('fontFamily') && !is.fontFamily(fontFamily)) {
90
+ return false;
91
+ }
92
+ if (desc.hasOwnProperty('textAlign') && !is.textAlign(textAlign)) {
93
+ return false;
94
+ }
95
+ if (desc.hasOwnProperty('strokeWidth') && !is.strokeWidth(strokeWidth)) {
96
+ return false;
97
+ }
98
+ if (desc.hasOwnProperty('strokeColor') && !is.color(strokeColor)) {
99
+ return false;
100
+ }
101
+ if (!box(desc)) {
102
+ return false;
103
+ }
104
+ return true;
105
+ }
106
+ const check = {
107
+ attrs,
108
+ textDesc,
109
+ rectDesc,
110
+ circleDesc,
111
+ imageDesc,
112
+ svgDesc,
113
+ htmlDesc,
114
+ };
115
+ export default check;
@@ -0,0 +1,3 @@
1
+ import { TypeConfig, TypeConfigStrict } from '@idraw/types';
2
+ declare function mergeConfig(config?: TypeConfig): TypeConfigStrict;
3
+ export { mergeConfig, };
@@ -0,0 +1,20 @@
1
+ import { deepClone } from '@idraw/util';
2
+ const defaultConfig = {
3
+ elementWrapper: {
4
+ color: '#2ab6f1',
5
+ lockColor: '#aaaaaa',
6
+ controllerSize: 6,
7
+ lineWidth: 1,
8
+ lineDash: [4, 3],
9
+ }
10
+ };
11
+ function mergeConfig(config) {
12
+ const result = deepClone(defaultConfig);
13
+ if (config) {
14
+ if (config.elementWrapper) {
15
+ result.elementWrapper = Object.assign(Object.assign({}, result.elementWrapper), config.elementWrapper);
16
+ }
17
+ }
18
+ return result;
19
+ }
20
+ export { mergeConfig, };
@@ -0,0 +1,49 @@
1
+ import { TypeElement, TypeElemDesc, TypePoint, TypeData, TypeScreenData } from '@idraw/types';
2
+ export type TypeCoreEventSelectBaseArg = {
3
+ index: number | null;
4
+ uuid: string | null;
5
+ };
6
+ export type TypeCoreEventArgMap = {
7
+ 'error': any;
8
+ 'mouseOverScreen': TypePoint;
9
+ 'mouseLeaveScreen': void;
10
+ 'mouseOverElement': TypeCoreEventSelectBaseArg & {
11
+ element: TypeElement<keyof TypeElemDesc>;
12
+ };
13
+ 'mouseLeaveElement': TypeCoreEventSelectBaseArg & {
14
+ element: TypeElement<keyof TypeElemDesc>;
15
+ };
16
+ 'screenClickElement': TypeCoreEventSelectBaseArg & {
17
+ element: TypeElement<keyof TypeElemDesc>;
18
+ };
19
+ 'screenDoubleClickElement': TypeCoreEventSelectBaseArg & {
20
+ element: TypeElement<keyof TypeElemDesc>;
21
+ };
22
+ 'screenSelectElement': TypeCoreEventSelectBaseArg & {
23
+ element: TypeElement<keyof TypeElemDesc>;
24
+ };
25
+ 'screenMoveElementStart': TypeCoreEventSelectBaseArg & TypePoint;
26
+ 'screenMoveElementEnd': TypeCoreEventSelectBaseArg & TypePoint;
27
+ 'screenChangeElement': TypeCoreEventSelectBaseArg & {
28
+ width: number;
29
+ height: number;
30
+ angle: number;
31
+ };
32
+ 'changeData': TypeData;
33
+ 'changeScreen': TypeScreenData;
34
+ 'drawFrameComplete': void;
35
+ 'drawFrame': void;
36
+ };
37
+ export interface TypeCoreEvent {
38
+ on<T extends keyof TypeCoreEventArgMap>(key: T, callback: (p: TypeCoreEventArgMap[T]) => void): void;
39
+ off<T extends keyof TypeCoreEventArgMap>(key: T, callback: (p: TypeCoreEventArgMap[T]) => void): void;
40
+ trigger<T extends keyof TypeCoreEventArgMap>(key: T, p: TypeCoreEventArgMap[T]): void;
41
+ }
42
+ export declare class CoreEvent implements TypeCoreEvent {
43
+ private _listeners;
44
+ constructor();
45
+ on<T extends keyof TypeCoreEventArgMap>(eventKey: T, callback: (p: TypeCoreEventArgMap[T]) => void): void;
46
+ off<T extends keyof TypeCoreEventArgMap>(eventKey: T, callback: (p: TypeCoreEventArgMap[T]) => void): void;
47
+ trigger<T extends keyof TypeCoreEventArgMap>(eventKey: T, arg: TypeCoreEventArgMap[T]): boolean;
48
+ has<T extends keyof TypeCoreEventArgMap>(name: string): boolean;
49
+ }
@@ -0,0 +1,50 @@
1
+ export class CoreEvent {
2
+ constructor() {
3
+ this._listeners = new Map();
4
+ }
5
+ on(eventKey, callback) {
6
+ if (this._listeners.has(eventKey)) {
7
+ const callbacks = this._listeners.get(eventKey);
8
+ callbacks === null || callbacks === void 0 ? void 0 : callbacks.push(callback);
9
+ this._listeners.set(eventKey, callbacks || []);
10
+ }
11
+ else {
12
+ this._listeners.set(eventKey, [callback]);
13
+ }
14
+ }
15
+ off(eventKey, callback) {
16
+ if (this._listeners.has(eventKey)) {
17
+ const callbacks = this._listeners.get(eventKey);
18
+ if (Array.isArray(callbacks)) {
19
+ for (let i = 0; i < (callbacks === null || callbacks === void 0 ? void 0 : callbacks.length); i++) {
20
+ if (callbacks[i] === callback) {
21
+ callbacks.splice(i, 1);
22
+ break;
23
+ }
24
+ }
25
+ }
26
+ this._listeners.set(eventKey, callbacks || []);
27
+ }
28
+ }
29
+ trigger(eventKey, arg) {
30
+ const callbacks = this._listeners.get(eventKey);
31
+ if (Array.isArray(callbacks)) {
32
+ callbacks.forEach((cb) => {
33
+ cb(arg);
34
+ });
35
+ return true;
36
+ }
37
+ else {
38
+ return false;
39
+ }
40
+ }
41
+ has(name) {
42
+ if (this._listeners.has(name)) {
43
+ const list = this._listeners.get(name);
44
+ if (Array.isArray(list) && list.length > 0) {
45
+ return true;
46
+ }
47
+ }
48
+ return false;
49
+ }
50
+ }
@@ -0,0 +1,6 @@
1
+ import { TypeElement, TypeData, TypeElemDesc } from '@idraw/types';
2
+ export declare function isChangeImageElementResource(before: TypeElement<'image'>, after: TypeElement<'image'>): boolean;
3
+ export declare function isChangeSVGElementResource(before: TypeElement<'svg'>, after: TypeElement<'svg'>): boolean;
4
+ export declare function isChangeHTMLElementResource(before: TypeElement<'html'>, after: TypeElement<'html'>): boolean;
5
+ export declare function diffElementResourceChange(before: TypeElement<keyof TypeElemDesc>, after: TypeElement<keyof TypeElemDesc>): string | null;
6
+ export declare function diffElementResourceChangeList(before: TypeData, after: TypeData): string[];
@@ -0,0 +1,80 @@
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: break;
32
+ }
33
+ if (isChange === true) {
34
+ result = after.uuid;
35
+ }
36
+ return result;
37
+ }
38
+ export function diffElementResourceChangeList(before, after) {
39
+ var _a;
40
+ const uuids = [];
41
+ const beforeMap = parseDataElementMap(before);
42
+ const afterMap = parseDataElementMap(after);
43
+ for (const uuid in afterMap) {
44
+ if (['image', 'svg', 'html'].includes((_a = afterMap[uuid]) === null || _a === void 0 ? void 0 : _a.type) !== true) {
45
+ continue;
46
+ }
47
+ if (beforeMap[uuid]) {
48
+ let isChange = false;
49
+ switch (beforeMap[uuid].type) {
50
+ case 'image': {
51
+ isChange = isChangeImageElementResource(beforeMap[uuid], afterMap[uuid]);
52
+ break;
53
+ }
54
+ case 'svg': {
55
+ isChange = isChangeSVGElementResource(beforeMap[uuid], afterMap[uuid]);
56
+ break;
57
+ }
58
+ case 'html': {
59
+ isChange = isChangeHTMLElementResource(beforeMap[uuid], afterMap[uuid]);
60
+ break;
61
+ }
62
+ default: break;
63
+ }
64
+ if (isChange === true) {
65
+ uuids.push(uuid);
66
+ }
67
+ }
68
+ else {
69
+ uuids.push(uuid);
70
+ }
71
+ }
72
+ return uuids;
73
+ }
74
+ function parseDataElementMap(data) {
75
+ const elemMap = {};
76
+ data.elements.forEach((elem) => {
77
+ elemMap[elem.uuid] = elem;
78
+ });
79
+ return elemMap;
80
+ }
@@ -0,0 +1,5 @@
1
+ import { TypeContext, TypeElement } from '@idraw/types';
2
+ export declare function clearContext(ctx: TypeContext): void;
3
+ export declare function drawBgColor(ctx: TypeContext, color: string): void;
4
+ export declare function drawBox(ctx: TypeContext, elem: TypeElement<'text' | 'rect'>, pattern: string | CanvasPattern | null): void;
5
+ export declare function drawBoxBorder(ctx: TypeContext, elem: TypeElement<'text' | 'rect'>): void;