@plait/common 0.64.5 → 0.64.6

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.
@@ -121,23 +121,28 @@ export class TextManage {
121
121
  }
122
122
  });
123
123
  const exitCallback = () => {
124
- this.updateRectangle();
125
- mousedown$.unsubscribe();
126
- keydown$.unsubscribe();
127
- IS_TEXT_EDITABLE.set(this.board, false);
128
- MERGING.set(this.board, false);
129
- callback && callback();
130
- const props = {
131
- readonly: true
132
- };
133
- this.textComponentRef.update(props);
134
- this.isEditing = false;
124
+ if (this.isEditing) {
125
+ this.updateRectangle();
126
+ mousedown$.unsubscribe();
127
+ keydown$.unsubscribe();
128
+ IS_TEXT_EDITABLE.set(this.board, false);
129
+ MERGING.set(this.board, false);
130
+ callback && callback();
131
+ const props = {
132
+ readonly: true
133
+ };
134
+ this.textComponentRef.update(props);
135
+ this.isEditing = false;
136
+ this.exitCallback = undefined;
137
+ }
135
138
  };
139
+ this.exitCallback = exitCallback;
136
140
  return exitCallback;
137
141
  }
138
142
  destroy() {
139
143
  this.g?.remove();
140
144
  this.textComponentRef?.destroy();
145
+ this.exitCallback && this.exitCallback();
141
146
  }
142
147
  }
143
148
  export const buildCompositionData = (editor, data) => {
@@ -153,4 +158,4 @@ export const buildCompositionData = (editor, data) => {
153
158
  }
154
159
  return null;
155
160
  };
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1tYW5hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3RleHQvdGV4dC1tYW5hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGdCQUFnQixFQUNoQixPQUFPLEVBR1AsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsUUFBUSxFQUNSLFlBQVksRUFDWixXQUFXLEVBQ1gsY0FBYyxFQUNkLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDM0IsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBc0IsS0FBSyxFQUFRLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTdGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVVoRCxNQUFNLE9BQU8sVUFBVTtJQXFCbkIsWUFDWSxLQUFpQixFQUNqQixPQU1QO1FBUE8sVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixZQUFPLEdBQVAsT0FBTyxDQU1kO1FBNUJMLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFVbEIsd0ZBQXdGO1FBQ3hGLGtIQUFrSDtRQUNsSCxlQUFVLEdBQUcsUUFBUSxDQUF1QixDQUFDLElBQTJCLEVBQUUsRUFBRTtZQUN4RSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1IsT0FBTztZQUNYLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxFQUFFLENBQUMs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QUM7UUFDdEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzlDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLElBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBUyxDQUFDO1FBQ3hELGNBQWMsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIElTX1RFWFRfRURJVEFCTEUsXG4gICAgTUVSR0lORyxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBjcmVhdGVGb3JlaWduT2JqZWN0LFxuICAgIGNyZWF0ZUcsXG4gICAgZGVib3VuY2UsXG4gICAgc2V0QW5nbGVGb3JHLFxuICAgIHRvSG9zdFBvaW50LFxuICAgIHRvVmlld0JveFBvaW50LFxuICAgIHVwZGF0ZUZvcmVpZ25PYmplY3QsXG4gICAgdXBkYXRlRm9yZWlnbk9iamVjdFdpZHRoXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVkaXRvciwgRWxlbWVudCwgTm9kZUVudHJ5LCBSYW5nZSwgVGV4dCwgTm9kZSwgVHJhbnNmb3JtcywgT3BlcmF0aW9uIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgUGxhaXRUZXh0Qm9hcmQsIFRleHRQbHVnaW4gfSBmcm9tICcuL3dpdGgtdGV4dCc7XG5pbXBvcnQgeyBtZWFzdXJlRWxlbWVudCB9IGZyb20gJy4vdGV4dC1tZWFzdXJlJztcbmltcG9ydCB7IFRleHRDaGFuZ2VEYXRhLCBUZXh0Q29tcG9uZW50UmVmLCBUZXh0UHJvcHMgfSBmcm9tICcuL3dpdGgtdGV4dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dE1hbmFnZUNoYW5nZURhdGEge1xuICAgIG5ld1RleHQ/OiBFbGVtZW50O1xuICAgIG9wZXJhdGlvbnM/OiBPcGVyYXRpb25bXTtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dE1hbmFnZSB7XG4gICAgaXNFZGl0aW5nID0gZmFsc2U7XG5cbiAgICBlZGl0b3IhOiBFZGl0b3I7XG5cbiAgICBnITogU1ZHR0VsZW1lbnQ7XG5cbiAgICBmb3JlaWduT2JqZWN0ITogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ7XG5cbiAgICB0ZXh0Q29tcG9uZW50UmVmITogVGV4dENvbXBvbmVudFJlZjtcblxuICAgIC8vIGFkZCBkZWJvdW5jZSBmb3IgY29tcG9zaXRpb24gaW5wdXQgZW5kIGFuZCBhYmFuZG9uIGJlZm9yZSBjaGFuZ2UgaW4gc2V0VGltZW91dCBwZXJpb2RcbiAgICAvLyBiZSBnb2luZyB0byBhdHRyYWN0IGJvYXJkIGNoaWxkcmVuIGFyZSBvdmVyd3JpdHRlbiB3aGVuIGZpcmVkIG1vcmUgdGltZXMgb25DaGFuZ2UoZWc6IGJvYXJkIGlzIGVtYmVkIGluIGVkaXRvcilcbiAgICB0ZXh0Q2hhbmdlID0gZGVib3VuY2U8VGV4dE1hbmFnZUNoYW5nZURhdGE+KChkYXRhPzogVGV4dE1hbmFnZUNoYW5nZURhdGEpID0+IHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zLm9uQ2hhbmdlICYmIHRoaXMub3B0aW9ucy5vbkNoYW5nZSh7IC4uLmRhdGEgfSk7XG4gICAgICAgIE1FUkdJTkcuc2V0KHRoaXMuYm9hcmQsIHRydWUpO1xuICAgIH0sIDApO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgICAgIHByaXZhdGUgb3B0aW9uczoge1xuICAgICAgICAgICAgZ2V0UmVjdGFuZ2xlOiAoKSA9PiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgICAgICAgICBvbkNoYW5nZT86IChkYXRhOiBUZXh0TWFuYWdlQ2hhbmdlRGF0YSkgPT4gdm9pZDtcbiAgICAgICAgICAgIGdldFJlbmRlclJlY3RhbmdsZT86ICgpID0+IFJlY3RhbmdsZUNsaWVudDtcbiAgICAgICAgICAgIGdldE1heFdpZHRoPzogKCkgPT4gbnVtYmVyO1xuICAgICAgICAgICAgdGV4dFBsdWdpbnM/OiBUZXh0UGx1Z2luW107XG4gICAgICAgIH1cbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZ2V0TWF4V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5nZXRNYXhXaWR0aCA9ICgpID0+IDk5OTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXcodGV4dDogRWxlbWVudCkge1xuICAgICAgICBjb25zdCBfcmVjdGFuZ2xlID0gdGhpcy5vcHRpb25zLmdldFJlY3RhbmdsZSgpO1xuICAgICAgICB0aGlzLmcgPSBjcmVhdGVHKCk7XG4gICAgICAgIHRoaXMuZm9yZWlnbk9iamVjdCA9IGNyZWF0ZUZvcmVpZ25PYmplY3QoX3JlY3RhbmdsZS54LCBfcmVjdGFuZ2xlLnksIF9yZWN0YW5nbGUud2lkdGgsIF9yZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5nLmFwcGVuZCh0aGlzLmZvcmVpZ25PYmplY3QpO1xuICAgICAgICB0aGlzLmcuY2xhc3NMaXN0LmFkZCgndGV4dCcpO1xuICAgICAgICBjb25zdCBwcm9wczogVGV4dFByb3BzID0ge1xuICAgICAgICAgICAgYm9hcmQ6IHRoaXMuYm9hcmQsXG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgdGV4dFBsdWdpbnM6IHRoaXMub3B0aW9ucy50ZXh0UGx1Z2lucyxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoZGF0YTogVGV4dENoYW5nZURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5vcGVyYXRpb25zLnNvbWUob3AgPT4gIU9wZXJhdGlvbi5pc1NlbGVjdGlvbk9wZXJhdGlvbihvcCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgd2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodCB9ID0gdGhpcy5nZXRTaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dENoYW5nZSh7IC4uLmRhdGEsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5vcHRpb25zLmdldFJlY3RhbmdsZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgaW1tZWRpYXRlbHkgd2lkdGggYW5kIGhlaWdodCBvdGhlcndpc2UgY3Vyc29yIGNvbWUgdXAgc2hha2luZyhpbiBkcmF3bml4KVxuICAgICAgICAgICAgICAgICAgICAvLyBpbiBmbG93Y2hhcnQgY2FzZSB3aWR0aCBhbmQgaGVpZ2h0IG1heSBncmVhdGVyIHRoYW4gdGhlIGNhbGN1bGF0aW9uYWwgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wb3JhcnlXaWR0aCA9IG5ld1dpZHRoID4gd2lkdGggPyBuZXdXaWR0aCA6IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wb3JhcnlIZWlnaHQgPSBuZXdIZWlnaHQgPiBoZWlnaHQgPyBuZXdIZWlnaHQgOiBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZvcmVpZ25PYmplY3QodGhpcy5nLCB0ZW1wb3JhcnlXaWR0aCwgdGVtcG9yYXJ5SGVpZ2h0LCB4LCB5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJJbml0OiAoZWRpdG9yOiBFZGl0b3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNvbXBvc2l0aW9uOiAoZXZlbnQ6IENvbXBvc2l0aW9uRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NvbXBvc2l0aW9uZW5kJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZha2VSb290ID0gYnVpbGRDb21wb3NpdGlvbkRhdGEodGhpcy5lZGl0b3IsIGV2ZW50LmRhdGEpO1xuICAgICAgICAgICAgICAgIGlmIChmYWtlUm9vdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplRGF0YSA9IHRoaXMuZ2V0U2l6ZShmYWtlUm9vdC5jaGlsZHJlblswXSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGludm9raW5nIG9uQ2hhbmdlIGFzYXAgdG8gYXZvaWQgYmxpbmtpbmcgb24gdHlwaW5nIGNoaW5lc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLm9uQ2hhbmdlICYmIHRoaXMub3B0aW9ucy5vbkNoYW5nZSh7IC4uLnNpemVEYXRhIH0pO1xuICAgICAgICAgICAgICAgICAgICBNRVJHSU5HLnNldCh0aGlzLmJvYXJkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGV4dENvbXBvbmVudFJlZiA9ICgodGhpcy5ib2FyZCBhcyB1bmtub3duKSBhcyBQbGFpdFRleHRCb2FyZCkucmVuZGVyVGV4dCh0aGlzLmZvcmVpZ25PYmplY3QsIHByb3BzKTtcbiAgICB9XG5cbiAgICB1cGRhdGVSZWN0YW5nbGVXaWR0aCh3aWR0aDogbnVtYmVyKSB7XG4gICAgICAgIHVwZGF0ZUZvcmVpZ25PYmplY3RXaWR0aCh0aGlzLmcsIHdpZHRoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVBbmdsZShjZW50ZXJQb2ludDogUG9pbnQsIGFuZ2xlOiBudW1iZXIgPSAwKSB7XG4gICAgICAgIHNldEFuZ2xlRm9yRyh0aGlzLmcsIGNlbnRlclBvaW50LCBhbmdsZSk7XG4gICAgfVxuXG4gICAgdXBkYXRlUmVjdGFuZ2xlKHJlY3RhbmdsZT86IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IHJlY3RhbmdsZSB8fCB0aGlzLm9wdGlvbnMuZ2V0UmVjdGFuZ2xlKCk7XG4gICAgICAgIHVwZGF0ZUZvcmVpZ25PYmplY3QodGhpcy5nLCB3aWR0aCwgaGVpZ2h0LCB4LCB5KTtcbiAgICB9XG5cbiAgICB1cGRhdGVUZXh0KG5ld1RleHQ6IEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgICAgICB0ZXh0OiBuZXdUZXh0XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGV4dENvbXBvbmVudFJlZi51cGRhdGUocHJvcHMpO1xuICAgIH1cblxuICAgIGVkaXQoY2FsbGJhY2s/OiAoKSA9PiB2b2lkLCBleGl0RWRpdD86IChldmVudDogRXZlbnQpID0+IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSB0cnVlO1xuICAgICAgICBJU19URVhUX0VESVRBQkxFLnNldCh0aGlzLmJvYXJkLCB0cnVlKTtcbiAgICAgICAgY29uc3QgcHJvcHM6IFBhcnRpYWw8VGV4dFByb3BzPiA9IHtcbiAgICAgICAgICAgIHJlYWRvbmx5OiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRleHRDb21wb25lbnRSZWYudXBkYXRlKHByb3BzKTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QodGhpcy5lZGl0b3IsIFswXSk7XG4gICAgICAgIGNvbnN0IG1vdXNlZG93biQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KHRoaXMuYm9hcmQsIHRvSG9zdFBvaW50KHRoaXMuYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRSZWMgPSB0aGlzLm9wdGlvbnMuZ2V0UmVuZGVyUmVjdGFuZ2xlID8gdGhpcy5vcHRpb25zLmdldFJlbmRlclJlY3RhbmdsZSgpIDogdGhpcy5vcHRpb25zLmdldFJlY3RhbmdsZSgpO1xuICAgICAgICAgICAgY29uc3QgY2xpY2tJblRleHQgPSBSZWN0YW5nbGVDbGllbnQuaXNIaXQoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludCwgcG9pbnRdKSwgdGV4dFJlYyk7XG4gICAgICAgICAgICBjb25zdCBpc0F0dGFjaGVkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnLnBsYWl0LWJvYXJkLWF0dGFjaGVkJyk7XG4gICAgICAgICAgICBpZiAoIWNsaWNrSW5UZXh0ICYmICFpc0F0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIGNvbXBvc2l0aW9uIGlucHV0IHN0YXRlLCBsaWtlOiBDaGluZXNlIElNRSBDb21wb3NpdGlvbiBJbnB1dFxuICAgICAgICAgICAgICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4aXRDYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qga2V5ZG93biQgPSBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJykuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmlzQ29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScgfHwgZXZlbnQua2V5ID09PSAnVGFiJyB8fCAoZXhpdEVkaXQgPyBleGl0RWRpdChldmVudCkgOiBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV4aXRDYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGV4aXRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVjdGFuZ2xlKCk7XG4gICAgICAgICAgICBtb3VzZWRvd24kLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBrZXlkb3duJC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgSVNfVEVYVF9FRElUQUJMRS5zZXQodGhpcy5ib2FyZCwgZmFsc2UpO1xuICAgICAgICAgICAgTUVSR0lORy5zZXQodGhpcy5ib2FyZCwgZmFsc2UpO1xuICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICAgICAgICAgIHJlYWRvbmx5OiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy50ZXh0Q29tcG9uZW50UmVmLnVwZGF0ZShwcm9wcyk7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdGluZyA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZXhpdENhbGxiYWNrO1xuICAgIH1cblxuICAgIGdldFNpemUgPSAoZWxlbWVudD86IEVsZW1lbnQsIG1heFdpZHRoPzogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmZvcmVpZ25PYmplY3QuY2hpbGRyZW5bMF0pO1xuICAgICAgICBjb25zdCBmb250RmFtaWx5ID0gY29tcHV0ZWRTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5mb250U2l6ZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGVsZW1lbnQgfHwgKHRoaXMuZWRpdG9yLmNoaWxkcmVuWzBdIGFzIEVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gbWVhc3VyZUVsZW1lbnQoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxuICAgICAgICAgICAgICAgIGZvbnRGYW1pbHlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhXaWR0aCB8fCB0aGlzLm9wdGlvbnMuZ2V0TWF4V2lkdGghKClcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgZ2V0VGV4dCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLmNoaWxkcmVuWzBdO1xuICAgIH07XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmc/LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnRleHRDb21wb25lbnRSZWY/LmRlc3Ryb3koKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZENvbXBvc2l0aW9uRGF0YSA9IChlZGl0b3I6IEVkaXRvciwgZGF0YTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGVkaXRvci5zZWxlY3Rpb24gJiYgUmFuZ2UuaXNDb2xsYXBzZWQoZWRpdG9yLnNlbGVjdGlvbikpIHtcbiAgICAgICAgY29uc3QgW3RleHROb2RlLCB0ZXh0UGF0aF0gPSBFZGl0b3Iubm9kZShlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24pIGFzIE5vZGVFbnRyeTxUZXh0PjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZWRpdG9yLnNlbGVjdGlvbi5hbmNob3Iub2Zmc2V0O1xuICAgICAgICBjb25zdCBjbG9uZWRFbGVtZW50ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlZGl0b3IuY2hpbGRyZW5bMF0pKTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHsgY2hpbGRyZW46IFtjbG9uZWRFbGVtZW50XSB9O1xuICAgICAgICBjb25zdCBuZXdUZXh0U3RyaW5nID0gdGV4dE5vZGUudGV4dC5zbGljZSgwLCBvZmZzZXQgKyAxKSArIGRhdGEgKyB0ZXh0Tm9kZS50ZXh0LnNsaWNlKG9mZnNldCArIDEpO1xuICAgICAgICBjb25zdCBjbG9uZWRUZXh0Tm9kZSA9IE5vZGUuZ2V0KHJvb3QsIHRleHRQYXRoKSBhcyBUZXh0O1xuICAgICAgICBjbG9uZWRUZXh0Tm9kZS50ZXh0ID0gbmV3VGV4dFN0cmluZztcbiAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiJdfQ==
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1tYW5hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3RleHQvdGV4dC1tYW5hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGdCQUFnQixFQUNoQixPQUFPLEVBR1AsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsUUFBUSxFQUNSLFlBQVksRUFDWixXQUFXLEVBQ1gsY0FBYyxFQUNkLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDM0IsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBc0IsS0FBSyxFQUFRLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTdGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVVoRCxNQUFNLE9BQU8sVUFBVTtJQXVCbkIsWUFDWSxLQUFpQixFQUNqQixPQU1QO1FBUE8sVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixZQUFPLEdBQVAsT0FBTyxDQU1kO1FBOUJMLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFVbEIsd0ZBQXdGO1FBQ3hGLGtIQUFrSDtRQUNsSCxlQUFVLEdBQUcsUUFBUSxDQUF1QixDQUFDLElBQTJCLEVBQUUsRUFBRTtZQUN4RSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1IsT0FBTztZQUNYLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxFQUFFLENBQUMs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RUFBRTtJQUNqRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQW9CLENBQUM7UUFDdEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzlDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLElBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBUyxDQUFDO1FBQ3hELGNBQWMsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIElTX1RFWFRfRURJVEFCTEUsXG4gICAgTUVSR0lORyxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBjcmVhdGVGb3JlaWduT2JqZWN0LFxuICAgIGNyZWF0ZUcsXG4gICAgZGVib3VuY2UsXG4gICAgc2V0QW5nbGVGb3JHLFxuICAgIHRvSG9zdFBvaW50LFxuICAgIHRvVmlld0JveFBvaW50LFxuICAgIHVwZGF0ZUZvcmVpZ25PYmplY3QsXG4gICAgdXBkYXRlRm9yZWlnbk9iamVjdFdpZHRoXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVkaXRvciwgRWxlbWVudCwgTm9kZUVudHJ5LCBSYW5nZSwgVGV4dCwgTm9kZSwgVHJhbnNmb3JtcywgT3BlcmF0aW9uIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgUGxhaXRUZXh0Qm9hcmQsIFRleHRQbHVnaW4gfSBmcm9tICcuL3dpdGgtdGV4dCc7XG5pbXBvcnQgeyBtZWFzdXJlRWxlbWVudCB9IGZyb20gJy4vdGV4dC1tZWFzdXJlJztcbmltcG9ydCB7IFRleHRDaGFuZ2VEYXRhLCBUZXh0Q29tcG9uZW50UmVmLCBUZXh0UHJvcHMgfSBmcm9tICcuL3dpdGgtdGV4dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dE1hbmFnZUNoYW5nZURhdGEge1xuICAgIG5ld1RleHQ/OiBFbGVtZW50O1xuICAgIG9wZXJhdGlvbnM/OiBPcGVyYXRpb25bXTtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dE1hbmFnZSB7XG4gICAgaXNFZGl0aW5nID0gZmFsc2U7XG5cbiAgICBlZGl0b3IhOiBFZGl0b3I7XG5cbiAgICBnITogU1ZHR0VsZW1lbnQ7XG5cbiAgICBmb3JlaWduT2JqZWN0ITogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ7XG5cbiAgICB0ZXh0Q29tcG9uZW50UmVmITogVGV4dENvbXBvbmVudFJlZjtcblxuICAgIC8vIGFkZCBkZWJvdW5jZSBmb3IgY29tcG9zaXRpb24gaW5wdXQgZW5kIGFuZCBhYmFuZG9uIGJlZm9yZSBjaGFuZ2UgaW4gc2V0VGltZW91dCBwZXJpb2RcbiAgICAvLyBiZSBnb2luZyB0byBhdHRyYWN0IGJvYXJkIGNoaWxkcmVuIGFyZSBvdmVyd3JpdHRlbiB3aGVuIGZpcmVkIG1vcmUgdGltZXMgb25DaGFuZ2UoZWc6IGJvYXJkIGlzIGVtYmVkIGluIGVkaXRvcilcbiAgICB0ZXh0Q2hhbmdlID0gZGVib3VuY2U8VGV4dE1hbmFnZUNoYW5nZURhdGE+KChkYXRhPzogVGV4dE1hbmFnZUNoYW5nZURhdGEpID0+IHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zLm9uQ2hhbmdlICYmIHRoaXMub3B0aW9ucy5vbkNoYW5nZSh7IC4uLmRhdGEgfSk7XG4gICAgICAgIE1FUkdJTkcuc2V0KHRoaXMuYm9hcmQsIHRydWUpO1xuICAgIH0sIDApO1xuXG4gICAgZXhpdENhbGxiYWNrPzogKCkgPT4gdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgICAgICBwcml2YXRlIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGdldFJlY3RhbmdsZTogKCkgPT4gUmVjdGFuZ2xlQ2xpZW50O1xuICAgICAgICAgICAgb25DaGFuZ2U/OiAoZGF0YTogVGV4dE1hbmFnZUNoYW5nZURhdGEpID0+IHZvaWQ7XG4gICAgICAgICAgICBnZXRSZW5kZXJSZWN0YW5nbGU/OiAoKSA9PiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgICAgICAgICBnZXRNYXhXaWR0aD86ICgpID0+IG51bWJlcjtcbiAgICAgICAgICAgIHRleHRQbHVnaW5zPzogVGV4dFBsdWdpbltdO1xuICAgICAgICB9XG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmdldE1heFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZ2V0TWF4V2lkdGggPSAoKSA9PiA5OTk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3KHRleHQ6IEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgX3JlY3RhbmdsZSA9IHRoaXMub3B0aW9ucy5nZXRSZWN0YW5nbGUoKTtcbiAgICAgICAgdGhpcy5nID0gY3JlYXRlRygpO1xuICAgICAgICB0aGlzLmZvcmVpZ25PYmplY3QgPSBjcmVhdGVGb3JlaWduT2JqZWN0KF9yZWN0YW5nbGUueCwgX3JlY3RhbmdsZS55LCBfcmVjdGFuZ2xlLndpZHRoLCBfcmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgIHRoaXMuZy5hcHBlbmQodGhpcy5mb3JlaWduT2JqZWN0KTtcbiAgICAgICAgdGhpcy5nLmNsYXNzTGlzdC5hZGQoJ3RleHQnKTtcbiAgICAgICAgY29uc3QgcHJvcHM6IFRleHRQcm9wcyA9IHtcbiAgICAgICAgICAgIGJvYXJkOiB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHRleHRQbHVnaW5zOiB0aGlzLm9wdGlvbnMudGV4dFBsdWdpbnMsXG4gICAgICAgICAgICBvbkNoYW5nZTogKGRhdGE6IFRleHRDaGFuZ2VEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEub3BlcmF0aW9ucy5zb21lKG9wID0+ICFPcGVyYXRpb24uaXNTZWxlY3Rpb25PcGVyYXRpb24ob3ApKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSA9IHRoaXMuZ2V0U2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRDaGFuZ2UoeyAuLi5kYXRhLCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMub3B0aW9ucy5nZXRSZWN0YW5nbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGltbWVkaWF0ZWx5IHdpZHRoIGFuZCBoZWlnaHQgb3RoZXJ3aXNlIGN1cnNvciBjb21lIHVwIHNoYWtpbmcoaW4gZHJhd25peClcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gZmxvd2NoYXJ0IGNhc2Ugd2lkdGggYW5kIGhlaWdodCBtYXkgZ3JlYXRlciB0aGFuIHRoZSBjYWxjdWxhdGlvbmFsIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcG9yYXJ5V2lkdGggPSBuZXdXaWR0aCA+IHdpZHRoID8gbmV3V2lkdGggOiB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcG9yYXJ5SGVpZ2h0ID0gbmV3SGVpZ2h0ID4gaGVpZ2h0ID8gbmV3SGVpZ2h0IDogaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVGb3JlaWduT2JqZWN0KHRoaXMuZywgdGVtcG9yYXJ5V2lkdGgsIHRlbXBvcmFyeUhlaWdodCwgeCwgeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVySW5pdDogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Db21wb3NpdGlvbjogKGV2ZW50OiBDb21wb3NpdGlvbkV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjb21wb3NpdGlvbmVuZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmYWtlUm9vdCA9IGJ1aWxkQ29tcG9zaXRpb25EYXRhKHRoaXMuZWRpdG9yLCBldmVudC5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoZmFrZVJvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZURhdGEgPSB0aGlzLmdldFNpemUoZmFrZVJvb3QuY2hpbGRyZW5bMF0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBpbnZva2luZyBvbkNoYW5nZSBhc2FwIHRvIGF2b2lkIGJsaW5raW5nIG9uIHR5cGluZyBjaGluZXNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5vbkNoYW5nZSAmJiB0aGlzLm9wdGlvbnMub25DaGFuZ2UoeyAuLi5zaXplRGF0YSB9KTtcbiAgICAgICAgICAgICAgICAgICAgTUVSR0lORy5zZXQodGhpcy5ib2FyZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRleHRDb21wb25lbnRSZWYgPSAoKHRoaXMuYm9hcmQgYXMgdW5rbm93bikgYXMgUGxhaXRUZXh0Qm9hcmQpLnJlbmRlclRleHQodGhpcy5mb3JlaWduT2JqZWN0LCBwcm9wcyk7XG4gICAgfVxuXG4gICAgdXBkYXRlUmVjdGFuZ2xlV2lkdGgod2lkdGg6IG51bWJlcikge1xuICAgICAgICB1cGRhdGVGb3JlaWduT2JqZWN0V2lkdGgodGhpcy5nLCB3aWR0aCk7XG4gICAgfVxuXG4gICAgdXBkYXRlQW5nbGUoY2VudGVyUG9pbnQ6IFBvaW50LCBhbmdsZTogbnVtYmVyID0gMCkge1xuICAgICAgICBzZXRBbmdsZUZvckcodGhpcy5nLCBjZW50ZXJQb2ludCwgYW5nbGUpO1xuICAgIH1cblxuICAgIHVwZGF0ZVJlY3RhbmdsZShyZWN0YW5nbGU/OiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSByZWN0YW5nbGUgfHwgdGhpcy5vcHRpb25zLmdldFJlY3RhbmdsZSgpO1xuICAgICAgICB1cGRhdGVGb3JlaWduT2JqZWN0KHRoaXMuZywgd2lkdGgsIGhlaWdodCwgeCwgeSk7XG4gICAgfVxuXG4gICAgdXBkYXRlVGV4dChuZXdUZXh0OiBFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICAgICAgdGV4dDogbmV3VGV4dFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRleHRDb21wb25lbnRSZWYudXBkYXRlKHByb3BzKTtcbiAgICB9XG5cbiAgICBlZGl0KGNhbGxiYWNrPzogKCkgPT4gdm9pZCwgZXhpdEVkaXQ/OiAoZXZlbnQ6IEV2ZW50KSA9PiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNFZGl0aW5nID0gdHJ1ZTtcbiAgICAgICAgSVNfVEVYVF9FRElUQUJMRS5zZXQodGhpcy5ib2FyZCwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHByb3BzOiBQYXJ0aWFsPFRleHRQcm9wcz4gPSB7XG4gICAgICAgICAgICByZWFkb25seTogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZXh0Q29tcG9uZW50UmVmLnVwZGF0ZShwcm9wcyk7XG4gICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KHRoaXMuZWRpdG9yLCBbMF0pO1xuICAgICAgICBjb25zdCBtb3VzZWRvd24kID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vkb3duJykuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0b1ZpZXdCb3hQb2ludCh0aGlzLmJvYXJkLCB0b0hvc3RQb2ludCh0aGlzLmJvYXJkLCBldmVudC54LCBldmVudC55KSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0UmVjID0gdGhpcy5vcHRpb25zLmdldFJlbmRlclJlY3RhbmdsZSA/IHRoaXMub3B0aW9ucy5nZXRSZW5kZXJSZWN0YW5nbGUoKSA6IHRoaXMub3B0aW9ucy5nZXRSZWN0YW5nbGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrSW5UZXh0ID0gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhbcG9pbnQsIHBvaW50XSksIHRleHRSZWMpO1xuICAgICAgICAgICAgY29uc3QgaXNBdHRhY2hlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5wbGFpdC1ib2FyZC1hdHRhY2hlZCcpO1xuICAgICAgICAgICAgaWYgKCFjbGlja0luVGV4dCAmJiAhaXNBdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBjb21wb3NpdGlvbiBpbnB1dCBzdGF0ZSwgbGlrZTogQ2hpbmVzZSBJTUUgQ29tcG9zaXRpb24gSW5wdXRcbiAgICAgICAgICAgICAgICB0aW1lcigwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleGl0Q2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGtleWRvd24kID0gZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5ZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5pc0NvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnIHx8IGV2ZW50LmtleSA9PT0gJ1RhYicgfHwgKGV4aXRFZGl0ID8gZXhpdEVkaXQoZXZlbnQpIDogZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBleGl0Q2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBleGl0Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJlY3RhbmdsZSgpO1xuICAgICAgICAgICAgICAgIG1vdXNlZG93biQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBrZXlkb3duJC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIElTX1RFWFRfRURJVEFCTEUuc2V0KHRoaXMuYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBNRVJHSU5HLnNldCh0aGlzLmJvYXJkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dENvbXBvbmVudFJlZi51cGRhdGUocHJvcHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNFZGl0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5leGl0Q2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZXhpdENhbGxiYWNrID0gZXhpdENhbGxiYWNrO1xuICAgICAgICByZXR1cm4gZXhpdENhbGxiYWNrO1xuICAgIH1cblxuICAgIGdldFNpemUgPSAoZWxlbWVudD86IEVsZW1lbnQsIG1heFdpZHRoPzogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmZvcmVpZ25PYmplY3QuY2hpbGRyZW5bMF0pO1xuICAgICAgICBjb25zdCBmb250RmFtaWx5ID0gY29tcHV0ZWRTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5mb250U2l6ZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGVsZW1lbnQgfHwgKHRoaXMuZWRpdG9yLmNoaWxkcmVuWzBdIGFzIEVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gbWVhc3VyZUVsZW1lbnQoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxuICAgICAgICAgICAgICAgIGZvbnRGYW1pbHlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhXaWR0aCB8fCB0aGlzLm9wdGlvbnMuZ2V0TWF4V2lkdGghKClcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgZ2V0VGV4dCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLmNoaWxkcmVuWzBdO1xuICAgIH07XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmc/LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnRleHRDb21wb25lbnRSZWY/LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5leGl0Q2FsbGJhY2sgJiYgdGhpcy5leGl0Q2FsbGJhY2soKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZENvbXBvc2l0aW9uRGF0YSA9IChlZGl0b3I6IEVkaXRvciwgZGF0YTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGVkaXRvci5zZWxlY3Rpb24gJiYgUmFuZ2UuaXNDb2xsYXBzZWQoZWRpdG9yLnNlbGVjdGlvbikpIHtcbiAgICAgICAgY29uc3QgW3RleHROb2RlLCB0ZXh0UGF0aF0gPSBFZGl0b3Iubm9kZShlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24pIGFzIE5vZGVFbnRyeTxUZXh0PjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZWRpdG9yLnNlbGVjdGlvbi5hbmNob3Iub2Zmc2V0O1xuICAgICAgICBjb25zdCBjbG9uZWRFbGVtZW50ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlZGl0b3IuY2hpbGRyZW5bMF0pKTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHsgY2hpbGRyZW46IFtjbG9uZWRFbGVtZW50XSB9O1xuICAgICAgICBjb25zdCBuZXdUZXh0U3RyaW5nID0gdGV4dE5vZGUudGV4dC5zbGljZSgwLCBvZmZzZXQgKyAxKSArIGRhdGEgKyB0ZXh0Tm9kZS50ZXh0LnNsaWNlKG9mZnNldCArIDEpO1xuICAgICAgICBjb25zdCBjbG9uZWRUZXh0Tm9kZSA9IE5vZGUuZ2V0KHJvb3QsIHRleHRQYXRoKSBhcyBUZXh0O1xuICAgICAgICBjbG9uZWRUZXh0Tm9kZS50ZXh0ID0gbmV3VGV4dFN0cmluZztcbiAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiJdfQ==
@@ -2131,23 +2131,28 @@ class TextManage {
2131
2131
  }
2132
2132
  });
2133
2133
  const exitCallback = () => {
2134
- this.updateRectangle();
2135
- mousedown$.unsubscribe();
2136
- keydown$.unsubscribe();
2137
- IS_TEXT_EDITABLE.set(this.board, false);
2138
- MERGING.set(this.board, false);
2139
- callback && callback();
2140
- const props = {
2141
- readonly: true
2142
- };
2143
- this.textComponentRef.update(props);
2144
- this.isEditing = false;
2134
+ if (this.isEditing) {
2135
+ this.updateRectangle();
2136
+ mousedown$.unsubscribe();
2137
+ keydown$.unsubscribe();
2138
+ IS_TEXT_EDITABLE.set(this.board, false);
2139
+ MERGING.set(this.board, false);
2140
+ callback && callback();
2141
+ const props = {
2142
+ readonly: true
2143
+ };
2144
+ this.textComponentRef.update(props);
2145
+ this.isEditing = false;
2146
+ this.exitCallback = undefined;
2147
+ }
2145
2148
  };
2149
+ this.exitCallback = exitCallback;
2146
2150
  return exitCallback;
2147
2151
  }
2148
2152
  destroy() {
2149
2153
  this.g?.remove();
2150
2154
  this.textComponentRef?.destroy();
2155
+ this.exitCallback && this.exitCallback();
2151
2156
  }
2152
2157
  }
2153
2158
  const buildCompositionData = (editor, data) => {
@@ -1 +1 @@
1
- {"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/utils/drawing/resize-handle.ts","../../../packages/common/src/utils/drawing/rotate-handle.ts","../../../packages/common/src/generators/active.generator.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/utils/vector.ts","../../../packages/common/src/utils/math.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/direction.ts","../../../packages/common/src/utils/default-orthogonal-routing.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/utils/creation-mode.ts","../../../packages/common/src/utils/text.ts","../../../packages/common/src/utils/image.ts","../../../packages/common/src/algorithms/data-structures/priority-queue.ts","../../../packages/common/src/algorithms/a-star.ts","../../../packages/common/src/algorithms/data-structures/graph.ts","../../../packages/common/src/utils/elbow-line-route.ts","../../../packages/common/src/utils/memorize.ts","../../../packages/common/src/utils/rotate.ts","../../../packages/common/src/utils/elements.ts","../../../packages/common/src/utils/animate.ts","../../../packages/common/src/image/image.generator.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/transforms/align.ts","../../../packages/common/src/shapes/common.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/generators/group.generator.ts","../../../packages/common/src/core/element-ref.ts","../../../packages/common/src/core/element-flavour.ts","../../../packages/common/src/core/group.component.ts","../../../packages/common/src/plugins/with-group.ts","../../../packages/common/src/image/image-base.component.ts","../../../packages/common/src/text/text-measure.ts","../../../packages/common/src/text/text-manage.ts","../../../packages/common/src/text/with-text.ts","../../../packages/common/src/text/types.ts","../../../packages/common/src/image/with-image.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 = 9;\nexport const WithTextPluginKey = 'plait-text-plugin-key';\nexport const DEFAULT_ROUTE_MARGIN = 30;\nexport const TRANSPARENT = 'transparent';\nexport const ROTATE_HANDLE_DISTANCE_TO_ELEMENT = 20;\nexport const ROTATE_HANDLE_SIZE = 18;\nexport const DEFAULT_FONT_FAMILY = 'PingFangSC-Regular, \"PingFang SC\"';\nexport const DEFAULT_FILL = 'none';\n","export enum MediaKeys {\n image = 'image'\n}\n\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\n\nexport const acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp'];\n\nexport const WithCommonPluginKey = 'plait-common-plugin-key';\n","export enum ResizeHandle {\n nw = '0',\n n = '4',\n ne = '1',\n e = '5',\n se = '2',\n s = '6',\n sw = '3',\n w = '7'\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitGroupElement,\n RectangleClient,\n getElementsInGroup,\n getSelectionAngle,\n setAngleForG\n} from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {\n prepend?: boolean;\n}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions,\n P extends PlaitBoard = PlaitBoard\n> {\n g?: SVGGElement;\n\n protected options?: V;\n\n constructor(protected board: P, options?: V) {\n this.options = options;\n }\n\n processDrawing(element: T, parentG: SVGGElement, data?: K) {\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.draw(element, data);\n if (g) {\n if (this.g && parentG.contains(this.g)) {\n this.g.replaceWith(g);\n } else {\n if (this.g) {\n this.g.remove();\n }\n if (this.options?.prepend) {\n parentG.prepend(g);\n } else {\n parentG.appendChild(g);\n }\n }\n this.g = g;\n const rect = this.board.getRectangle(element);\n if (rect) {\n let angle;\n if (PlaitGroupElement.isGroup(element)) {\n angle = getSelectionAngle(getElementsInGroup(this.board, element, true));\n } else {\n angle = element.angle;\n }\n if (angle) {\n setAngleForG(g, RectangleClient.getCenterPoint(rect), angle);\n }\n }\n } else {\n this.destroy();\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n } else {\n this.destroy();\n }\n }\n\n /**\n * abstract function\n */\n protected abstract canDraw(element: T, data?: K): boolean;\n\n /**\n * abstract function\n */\n protected abstract draw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n this.g = undefined;\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 { RESIZE_HANDLE_CLASS_NAME, PlaitBoard, Point, drawCircle } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../../constants/default';\n\nexport const drawHandle = (board: PlaitBoard, centerPoint: Point) => {\n const options: Options = { stroke: '#99999995', strokeWidth: 2, fill: '#FFF', fillStyle: 'solid' };\n const handleG = drawCircle(PlaitBoard.getRoughSVG(board), centerPoint, RESIZE_HANDLE_DIAMETER, options);\n handleG.classList.add(RESIZE_HANDLE_CLASS_NAME);\n return handleG;\n};\n\nexport function drawFillPrimaryHandle(board: PlaitBoard, point: Point) {\n return drawCircle(PlaitBoard.getRoughSVG(board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: '#FFFFFF',\n strokeWidth: 1,\n fill: `${PRIMARY_COLOR}`,\n fillStyle: 'solid'\n });\n}\n\nexport function drawPrimaryHandle(board: PlaitBoard, point: Point) {\n return drawCircle(PlaitBoard.getRoughSVG(board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: `${PRIMARY_COLOR}`,\n strokeWidth: 2,\n fill: `#FFFFFF`,\n fillStyle: 'solid'\n });\n}\n","import { PlaitBoard, RectangleClient, createG, setStrokeLinecap } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { ROTATE_HANDLE_DISTANCE_TO_ELEMENT, ROTATE_HANDLE_SIZE } from '../../constants';\n\nconst rotateHandleRadius = 6;\n\nexport const drawRotateHandle = (board: PlaitBoard, rectangle: RectangleClient) => {\n const options: Options = { stroke: '#333', strokeWidth: 1, fillStyle: 'solid' };\n const handleCenterPoint = [\n rectangle.x - ROTATE_HANDLE_DISTANCE_TO_ELEMENT - ROTATE_HANDLE_SIZE / 2,\n rectangle.y + rectangle.height + ROTATE_HANDLE_DISTANCE_TO_ELEMENT + ROTATE_HANDLE_SIZE / 2\n ];\n const rs = PlaitBoard.getRoughSVG(board);\n const handleG = createG();\n const line = rs.path(\n `M ${handleCenterPoint[0] + rotateHandleRadius} ${handleCenterPoint[1]} A ${rotateHandleRadius} ${rotateHandleRadius}, 0, 1, 0, ${\n handleCenterPoint[0]\n } ${handleCenterPoint[1] + rotateHandleRadius}`,\n options\n );\n const arrow = rs.polygon(\n [\n [handleCenterPoint[0], handleCenterPoint[1] + rotateHandleRadius - 2],\n [handleCenterPoint[0], handleCenterPoint[1] + rotateHandleRadius + 2],\n [handleCenterPoint[0] + 4.5, handleCenterPoint[1] + rotateHandleRadius]\n ],\n { ...options, fill: '#333' }\n );\n setStrokeLinecap(arrow, 'round');\n handleG.append(line, arrow);\n return handleG;\n};\n","import { PlaitBoard, PlaitElement, RectangleClient, SELECTION_RECTANGLE_CLASS_NAME, createG, drawRectangle } from '@plait/core';\nimport { Generator, GeneratorOptions } from './generator';\nimport { PRIMARY_COLOR } from '../constants/default';\nimport { drawHandle } from '../utils/drawing';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T> & GeneratorOptions\n> {\n static key = 'active-generator';\n\n hasResizeHandle = false;\n\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 draw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n const rectangle = this.options.getRectangle(element);\n\n const delta = this.options.getStrokeWidth();\n const activeRectangle = RectangleClient.inflate(rectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: delta\n });\n\n activeG.append(strokeG);\n strokeG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // draw resize handle\n RectangleClient.getCornerPoints(activeRectangle).forEach(corner => {\n const cornerHandleG = drawHandle(this.board, corner);\n activeG.append(cornerHandleG);\n });\n } else {\n this.hasResizeHandle = false;\n }\n return activeG;\n }\n}\n","import {\n PlaitBoard,\n Point,\n RectangleClient,\n ResizeCursorClass,\n setDragging,\n RESIZE_CURSORS,\n rotatePoints,\n PlaitElement,\n getSelectedElements,\n isSelectionMoving\n} from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { PlaitElementOrArray, ResizeRef } from '../types/resize';\n\nexport const getResizeHandleByIndex = (index: number) => {\n return `${index}` as ResizeHandle;\n};\n\nexport const getIndexByResizeHandle = (resizeHandle: ResizeHandle) => {\n return Number(resizeHandle);\n};\n\nexport const getSymmetricHandleIndex = (board: PlaitBoard, index: number) => {\n const originIndex = isEdgeHandle(board, getResizeHandleByIndex(index)) ? index - 4 : index;\n let originSymmetricHandleIndex = originIndex + 2;\n if (originSymmetricHandleIndex >= 4) {\n originSymmetricHandleIndex = originSymmetricHandleIndex - 4;\n }\n return isEdgeHandle(board, getResizeHandleByIndex(index)) ? originSymmetricHandleIndex + 4 : originSymmetricHandleIndex;\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n case 2:\n return ResizeCursorClass.nwse;\n case 1:\n case 3:\n return ResizeCursorClass.nesw;\n case 4:\n case 6:\n return ResizeCursorClass.ns;\n case 5:\n case 7:\n return ResizeCursorClass.ew;\n default:\n return null;\n }\n};\n\nexport const getRotatedResizeCursorClassByAngle = (cursor: ResizeCursorClass, angle: number) => {\n const index = RESIZE_CURSORS.indexOf(cursor);\n if (index >= 0) {\n const temp = Math.round(angle / (Math.PI / 4));\n cursor = RESIZE_CURSORS[(index + temp) % RESIZE_CURSORS.length] as ResizeCursorClass;\n }\n return cursor;\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number) => {\n const corners = RectangleClient.getCornerPoints(rectangle);\n const refs = corners.map((corner, index: number) => {\n return {\n rectangle: {\n x: corner[0] - diameter / 2,\n y: corner[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n handle: getResizeHandleByIndex(index) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n };\n });\n const rectangles = getResizeSideRectangles(corners, diameter / 2);\n refs.push(\n ...rectangles.map((rectangle, index) => {\n return {\n rectangle,\n handle: getResizeHandleByIndex(index + 4) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index + 4) as ResizeCursorClass\n };\n })\n );\n return refs;\n};\n\nexport const getResizeHandlePointByIndex = (rectangle: RectangleClient, index: number) => {\n if (index <= 3) {\n const corners = RectangleClient.getCornerPoints(rectangle);\n return corners[index];\n } else {\n const edgeCenterPoints = RectangleClient.getEdgeCenterPoints(rectangle);\n return edgeCenterPoints[index - 4];\n }\n};\n\nconst getResizeSideRectangles = (cornerPoints: Point[], offset: number): RectangleClient[] => {\n const result = [];\n for (let i = 0; i < cornerPoints.length; i++) {\n let rectangle = RectangleClient.getRectangleByPoints([cornerPoints[i], cornerPoints[(i + 1) % 4]]);\n const arr = new Array(2).fill(0);\n arr[(i + 1) % 2] = offset / 2;\n rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);\n result.push(rectangle);\n }\n return result;\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, ResizeRef<any, any, any>>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const isResizingByCondition = <T extends PlaitElementOrArray, K>(\n board: PlaitBoard,\n match: (resizeRef: ResizeRef<T, K>) => boolean\n) => {\n return isResizing(board) && match(IS_RESIZING.get(board)!);\n};\n\nexport const addResizing = <T extends PlaitElementOrArray, K, P>(board: PlaitBoard, resizeRef: ResizeRef<T, K, P>, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, resizeRef);\n setDragging(board, true);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.delete(board);\n setDragging(board, false);\n};\n\nexport const isEdgeHandle = (board: PlaitBoard, handle: ResizeHandle) => {\n const index = getIndexByResizeHandle(handle);\n if (index >= 4) {\n return true;\n } else {\n return false;\n }\n};\n\nexport const isCornerHandle = (board: PlaitBoard, handle: ResizeHandle) => {\n return !isEdgeHandle(board, handle);\n};\n\n// 处理元素先旋转后resize导致的位置偏移\nexport const resetPointsAfterResize = (\n originRectangle: RectangleClient,\n currentRectangle: RectangleClient,\n originSelectionCenterPoint: Point,\n currentSelectionCenterPoint: Point,\n angle: number\n): [Point, Point] => {\n const correctSelectionCenterPoint = rotatePoints([currentSelectionCenterPoint], originSelectionCenterPoint, angle)[0];\n const rotatedElementCenterPoint = rotatePoints(\n [RectangleClient.getCenterPoint(currentRectangle) as Point],\n originSelectionCenterPoint,\n angle\n )[0];\n\n const currentPoints = RectangleClient.getPoints(currentRectangle);\n const originRectangleCenterPoint = RectangleClient.getCenterPoint(originRectangle);\n\n const correctElementCenterPoint = rotatePoints([rotatedElementCenterPoint], correctSelectionCenterPoint, -angle)[0];\n\n const rotatedPoints = rotatePoints(currentPoints, originRectangleCenterPoint, angle);\n return rotatePoints(rotatedPoints, correctElementCenterPoint, -angle) as [Point, Point];\n};\n\nexport const canResize = (board: PlaitBoard, element: PlaitElement) => {\n if (PlaitBoard.hasBeenTextEditing(board) || isSelectionMoving(board)) {\n return false;\n }\n const selectedElements = getSelectedElements(board);\n return selectedElements.length === 1 && selectedElements[0] === element;\n};\n","import { Point, Vector } from '@plait/core';\n\nexport function getUnitVectorByPointAndPoint(point1: Point, point2: Point): Point {\n const deltaX = point2[0] - point1[0];\n const deltaY = point2[1] - point1[1];\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n // Avoid division by zero if the points are the same\n if (distance === 0) {\n throw new Error('Points must not be the same for a unit vector calculation.');\n }\n // Calculate the unit vector components\n const unitX = deltaX / distance;\n const unitY = deltaY / distance;\n\n return [unitX, unitY];\n}\n\nexport function getPointByVectorComponent(point: Point, vector: Vector, component: number): Point {\n const distance = Math.hypot(vector[0], vector[1]);\n return [point[0] + (vector[0] / distance) * component, point[1] + (vector[1] / distance) * component];\n}\n\nexport function getPointByVectorDirectionComponent(point: Point, unitVector: Vector, directionComponent: number, isHorizontal: boolean) {\n if (isHorizontal) {\n return [point[0] + directionComponent, point[1] + (directionComponent / unitVector[0]) * unitVector[1]] as Point;\n } else {\n return [point[0] + (directionComponent / unitVector[1]) * unitVector[0], point[1] + directionComponent] as Point;\n }\n}\n\nexport function rotateVectorAnti90(vector: Vector): Vector {\n const x = vector[0];\n const y = vector[1];\n const rotatedX = y;\n const rotatedY = -x;\n return [rotatedX, rotatedY];\n}\n\nexport function rotateVector(vector: Vector, angle: number): Vector {\n if (!angle) {\n return vector;\n }\n const x = vector[0];\n const y = vector[1];\n const rotatedX = x * Math.cos(angle) - y * Math.sin(angle);\n const rotatedY = x * Math.sin(angle) + y * Math.cos(angle);\n return [rotatedX, rotatedY];\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { getPointByVectorDirectionComponent, getUnitVectorByPointAndPoint } from './vector';\n\nexport function isPointOnSegment(point: Point, startPoint: Point, endPoint: Point) {\n const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);\n const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;\n}\n\nexport const getCrossingPointsBetweenPointAndSegment = (point: Point, startPoint: Point, endPoint: Point) => {\n const result: Point[] = [];\n const xRange = [Math.min(startPoint[0], endPoint[0]), Math.max(startPoint[0], endPoint[0])];\n const yRange = [Math.min(startPoint[1], endPoint[1]), Math.max(startPoint[1], endPoint[1])];\n const unitVector = getUnitVectorByPointAndPoint(startPoint, endPoint);\n if (point[0] >= xRange[0] && point[0] <= xRange[1]) {\n const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[0] - startPoint[0], true) as Point;\n result.push(crossingPoint);\n } else if (point[1] >= yRange[0] && point[1] <= yRange[1]) {\n const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[1] - startPoint[1], false) as Point;\n result.push(crossingPoint);\n }\n return result;\n};\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { isPointOnSegment } from './math';\n\nexport function getPointOnPolyline(points: Point[], ratio: number) {\n const totalLength = calculatePolylineLength(points);\n const targetDistance = totalLength * ratio;\n\n let accumulatedDistance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);\n\n if (accumulatedDistance + segmentLength >= targetDistance) {\n const remainingDistance = targetDistance - accumulatedDistance;\n const ratioInSegment = remainingDistance / segmentLength;\n\n const targetX = x1 + (x2 - x1) * ratioInSegment;\n const targetY = y1 + (y2 - y1) * ratioInSegment;\n return [targetX, targetY];\n }\n\n accumulatedDistance += segmentLength;\n }\n\n return points[points.length - 1];\n}\n\nexport function calculatePolylineLength(points: Point[]) {\n let length = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n length += distanceBetweenPointAndPoint(x1, y1, x2, y2);\n }\n return length;\n}\n\nexport function getRatioByPoint(points: Point[], point: Point) {\n const totalLength = calculatePolylineLength(points);\n let distance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const isOverlap = isPointOnSegment(point, points[i], points[i + 1]);\n if (isOverlap) {\n distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);\n return distance / totalLength;\n } else {\n distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);\n }\n }\n throw new Error('Cannot get ratio by point');\n}\n\nexport const removeDuplicatePoints = (points: Point[]) => {\n const newArray: Point[] = [];\n points.forEach(point => {\n const index = newArray.findIndex(otherPoint => {\n return Point.isEquals(point, otherPoint);\n });\n if (index === -1) newArray.push(point);\n });\n return newArray;\n};\n\nexport function simplifyOrthogonalPoints(points: Point[]) {\n if (points.length <= 2) return points;\n let simplifiedPoints: Point[] = [points[0]];\n for (let i = 1; i < points.length - 1; i++) {\n const previous = points[i - 1];\n const current = points[i];\n const next = points[i + 1];\n const isTurn = !(Point.isOverHorizontal([previous, current, next]) || Point.isOverVertical([previous, current, next]));\n if (isTurn) {\n simplifiedPoints.push(current);\n }\n }\n simplifiedPoints.push(points[points.length - 1]);\n return simplifiedPoints;\n}\n\nexport const getExtendPoint = (source: Point, target: Point, extendDistance: number): Point => {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n const isEqual = Point.isEquals(source, target);\n const sin = isEqual ? 1 : (target[1] - source[1]) / distance;\n const cos = isEqual ? 1 : (target[0] - source[0]) / distance;\n return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];\n};\n","import { Direction, DirectionFactor, Point, PointOfRectangle, Vector } from '@plait/core';\n\nconst handleDirectionFactors = {\n [Direction.left]: { x: -1, y: 0 },\n [Direction.right]: { x: 1, y: 0 },\n [Direction.top]: { x: 0, y: -1 },\n [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getOppositeDirection(direction: Direction) {\n switch (direction) {\n case Direction.left:\n return Direction.right;\n case Direction.right:\n return Direction.left;\n case Direction.top:\n return Direction.bottom;\n case Direction.bottom:\n return Direction.top;\n }\n}\n\nexport function getDirectionByPointOfRectangle(point: PointOfRectangle): Direction | undefined {\n if (point[0] === 0) {\n return Direction.left;\n }\n if (point[0] === 1) {\n return Direction.right;\n }\n if (point[1] === 0) {\n return Direction.top;\n }\n if (point[1] === 1) {\n return Direction.bottom;\n }\n return undefined;\n}\n\n/**\n * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system\n * vector[0] and vector[1] are the x and y components of the vector respectively.\n * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.\n * if the vector has two directions, the function will return the string in which direction it is closer.\n */\nexport function getDirectionByVector(vector: Vector): Direction | null {\n const x = vector[0];\n const y = vector[1];\n if (x === 0 && y === 0) {\n return null;\n }\n if (x === 0) {\n return y > 0 ? Direction.bottom : Direction.top;\n }\n if (y === 0) {\n return x > 0 ? Direction.right : Direction.left;\n }\n const angle = Math.atan2(y, x);\n if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {\n return Direction.right;\n } else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {\n return Direction.bottom;\n } else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {\n return Direction.top;\n } else {\n return Direction.left;\n }\n}\n\nexport function getDirectionBetweenPointAndPoint(source: Point, target: Point) {\n if (source[0] === target[0]) {\n if (source[1] >= target[1]) {\n return Direction.top;\n } else {\n return Direction.bottom;\n }\n }\n if (source[1] === target[1]) {\n if (source[0] >= target[0]) {\n return Direction.left;\n } else {\n return Direction.right;\n }\n }\n throw new Error('can not match direction');\n}\n\nexport function getDirectionFactor(direction: Direction) {\n return handleDirectionFactors[direction];\n}\n\nexport function getDirectionFactorByDirectionComponent(directionComponent: number): DirectionFactor {\n const directionFactor = directionComponent === 0 ? directionComponent : directionComponent / Math.abs(directionComponent);\n return directionFactor as DirectionFactor;\n}\n","// Credits to xyflow\n// https://github.com/xyflow/xyflow/blob/main/packages/system/src/utils/edges/smoothstep-edge.ts\n\nimport { Direction, Point } from \"@plait/core\";\nimport { getDirectionFactor } from \"./direction\";\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n const sourceDirectionFactors = getDirectionFactor(sourcePosition);\n const targetDFs = getDirectionFactor(targetPosition);\n const sourceGapped: Point = [source[0] + sourceDirectionFactors.x * offset, source[1] + sourceDirectionFactors.y * offset];\n const targetGapped: Point = [target[0] + targetDFs.x * offset, target[1] + targetDFs.y * offset];\n const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n sourceX: source[0],\n sourceY: source[1],\n targetX: target[0],\n targetY: target[1]\n });\n // opposite handle positions, default case\n if (sourceDirectionFactors[dirAccessor] * targetDFs[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n [centerX, sourceGapped[1]],\n [centerX, targetGapped[1]]\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n [sourceGapped[0], centerY],\n [targetGapped[0], centerY]\n ];\n if (sourceDirectionFactors[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDirectionFactors.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDirectionFactors.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like right -> bottom for example\n let flipSourceTarget;\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n const isSameDir = sourceDirectionFactors[dirAccessor] === targetDFs[dirAccessor === 'x' ? 'y' : 'x'];\n const sourceGtTarget = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTarget = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n flipSourceTarget =\n (sourceDirectionFactors[dirAccessor] === 1 && ((!isSameDir && sourceGtTarget) || (isSameDir && sourceLtTarget))) ||\n (sourceDirectionFactors[dirAccessor] !== 1 && ((!isSameDir && sourceLtTarget) || (isSameDir && sourceGtTarget)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n return [source, sourceGapped, ...points, targetGapped, target];\n};\n\nconst getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nfunction getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY\n}: {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n}): [number, number, number, number] {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}","import { hotkeys } from '@plait/core';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n return event.code === 'Space';\n};\n\nexport const isDelete = (event: KeyboardEvent) => {\n return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);\n};\n","import { PlaitBoard } from '@plait/core';\n\nexport enum BoardCreationMode {\n 'dnd' = 'dnd',\n 'drawing' = 'drawing'\n}\n\nconst BOARD_TO_CREATION_MODE: WeakMap<PlaitBoard, BoardCreationMode> = new WeakMap();\n\nexport const getCreationMode = (board: PlaitBoard) => {\n return BOARD_TO_CREATION_MODE.get(board);\n};\n\nexport const setCreationMode = (board: PlaitBoard, mode: BoardCreationMode) => {\n BOARD_TO_CREATION_MODE.set(board, mode);\n};\n\nexport const isDndMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.dnd;\n};\n\nexport const isDrawingMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.drawing;\n};\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { Editor, Node, Element } from 'slate';\nimport { TextManage } from '../text/text-manage';\nimport { Alignment, CustomText, ParagraphElement } from '../text/types';\n\nexport interface TextInterface {\n getTextEditors: (board: PlaitBoard, elements?: PlaitElement[]) => Editor[] | undefined;\n findFirstTextEditor: (board: PlaitBoard) => null;\n getFirstTextEditor: (element: PlaitElement) => Editor;\n getTextEditorsByElement: (element: PlaitElement) => Editor[];\n getEditingTextEditor: (board: PlaitBoard, elements?: PlaitElement[]) => Editor | undefined\n}\n\nexport const getTextManages = (element: PlaitElement) => {\n return ELEMENT_TO_TEXT_MANAGES.get(element) || [];\n};\n\nexport const getFirstTextManage = (element: PlaitElement) => {\n const textManage = getTextManages(element)[0];\n if (!textManage) {\n console.warn('can not find textManage');\n }\n return textManage;\n};\n\nexport const getTextEditorsByElement: TextInterface['getTextEditorsByElement'] = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.editor;\n });\n};\n\nexport const getFirstTextEditor: TextInterface['getFirstTextEditor'] = (element: PlaitElement) => {\n const textEditor = getTextEditorsByElement(element)[0];\n if (!textEditor) {\n console.warn('can not find textManage');\n }\n return textEditor;\n};\n\nexport const findFirstTextEditor: TextInterface['findFirstTextEditor'] = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board);\n let firstEditor: Editor | null = null;\n selectedElements.forEach(element => {\n const editors = getTextEditorsByElement(element);\n if (!firstEditor && editors && editors.length > 0) {\n firstEditor = editors[0];\n }\n });\n return firstEditor;\n};\n\nexport const getElementsText = (elements: PlaitElement[]) => {\n return elements\n .map(item => {\n try {\n const editors = getTextEditorsByElement(item);\n if (editors.length) {\n return editors\n .map(editor => {\n const textsEntry = Node.texts(editor);\n return Array.from(textsEntry).reduce((total, text) => (total += text[0].text), '');\n })\n .join(' ');\n }\n return '';\n } catch (error) {\n return '';\n }\n })\n .filter(item => item)\n .join(' ');\n};\n\nexport const getTextEditors: TextInterface['getTextEditors'] = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements || getSelectedElements(board);\n if (selectedElements.length) {\n const textManages: TextManage[] = [];\n selectedElements.forEach(item => {\n textManages.push(...getTextManages(item));\n });\n const editingTextManage = textManages.find(textManage => textManage.isEditing);\n if (editingTextManage) {\n return [editingTextManage.editor];\n }\n return textManages.map(item => {\n return item.editor;\n });\n }\n return undefined;\n};\n\nexport const getEditingTextEditor: TextInterface['getEditingTextEditor'] = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements || getSelectedElements(board);\n const textManages: TextManage[] = [];\n selectedElements.forEach(item => {\n textManages.push(...getTextManages(item));\n });\n const editingTextManage = textManages.find(textManage => textManage.isEditing);\n if (editingTextManage) {\n return editingTextManage.editor;\n }\n return undefined;\n};\n\nexport const buildText = (text: string | Element, align?: Alignment, properties?: Partial<CustomText>) => {\n properties = properties || {};\n const plaitText = typeof text === 'string' ? { children: [{ text, ...properties }] } : text;\n if (align) {\n (plaitText as ParagraphElement).align = align;\n }\n return plaitText;\n};\n\nexport const getLineHeightByFontSize = (fontSize: number) => {\n if (fontSize === 14) {\n return 20;\n }\n if (fontSize === 18) {\n return 25;\n }\n return fontSize * 1.5;\n};\n\nexport const ELEMENT_TO_TEXT_MANAGES: WeakMap<PlaitElement, TextManage[]> = new WeakMap();\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\n}\n\nexport const selectImage = (\n board: PlaitBoard,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void,\n acceptImageTypes: string[] = ['png', 'jpeg', 'gif', 'bmp']\n) => {\n const inputFile = document.createElement('input');\n inputFile.setAttribute('type', 'file');\n const acceptImageTypesString = '.' + acceptImageTypes.join(',.');\n inputFile.setAttribute('accept', acceptImageTypesString);\n inputFile.onchange = (event: Event) => {\n buildImage(board, (event.target as any).files[0], defaultImageWidth, handle);\n };\n inputFile.click();\n};\n\nexport const buildImage = async (\n board: PlaitBoard,\n imageFile: File,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void\n) => {\n let width = 0,\n height = 0;\n await getImageSize(imageFile, defaultImageWidth).then((value: { width: number; height: number }) => {\n width = value.width;\n height = value.height;\n });\n\n let imageItem = null;\n const url = URL.createObjectURL(imageFile);\n const context = PlaitBoard.getBoardContext(board);\n context.setUploadingFile({ url, file: imageFile });\n\n imageItem = {\n url,\n width,\n height\n };\n handle(imageItem);\n};\n\nfunction getImageSize(file: File, defaultImageWidth: number): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.src = URL.createObjectURL(file);\n\n image.onload = function() {\n const width = defaultImageWidth;\n const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;\n resolve(\n image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight }\n );\n };\n });\n}\n\nconst BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap<PlaitBoard, PlaitElement>();\n\nexport const getElementOfFocusedImage = (board: PlaitBoard) => {\n return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);\n};\n\nexport const addElementOfFocusedImage = (board: PlaitBoard, element: PlaitElement) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);\n};\n\nexport const removeElementOfFocusedImage = (board: PlaitBoard) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);\n};\n","import { PointNode } from './graph';\n\nexport class PriorityQueue {\n list: { node: PointNode; priority: number }[];\n\n constructor() {\n this.list = [];\n }\n\n enqueue(item: { node: PointNode; priority: number }) {\n this.list.push(item);\n this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);\n }\n\n dequeue() {\n return this.list.shift();\n }\n}\n","import { Point } from '@plait/core';\nimport { PointGraph, PointNode } from './data-structures/graph';\nimport { PriorityQueue } from './data-structures/priority-queue';\n\nexport class AStar {\n cameFrom: Map<PointNode, PointNode>;\n\n constructor(private graph: PointGraph) {\n this.cameFrom = new Map<PointNode, PointNode>();\n }\n\n heuristic(a: Point, b: Point) {\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n }\n\n search(start: Point, end: Point, previousStart: Point) {\n const frontier = new PriorityQueue();\n const startNode = this.graph.get(start);\n this.cameFrom = new Map<PointNode, PointNode>();\n const costSoFar = new Map<PointNode, number>();\n costSoFar.set(startNode!, 0);\n frontier.enqueue({ node: startNode!, priority: 0 });\n while (frontier.list.length > 0) {\n var current = frontier.dequeue();\n\n if (!current) {\n throw new Error(`can't find current`);\n }\n const currentPoint = current!.node.data;\n if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {\n break;\n }\n current.node.adjacentNodes.forEach(next => {\n let newCost = costSoFar.get(current!.node)! + this.heuristic(next.data, current!.node.data);\n const previousNode = this.cameFrom.get(current!.node);\n // Inflection point weight, if an inflection point occurs, cost + 1 to avoid the inflection point path\n // Three points on a line to determine whether there is an inflection point\n const previousPoint = previousNode ? previousNode.data : previousStart;\n const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];\n const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];\n if (!x && !y) {\n newCost = newCost + 1;\n }\n if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next)!)) {\n costSoFar.set(next, newCost);\n const priority = newCost + this.heuristic(next.data, end);\n frontier.enqueue({ node: next, priority });\n this.cameFrom.set(next, current!.node);\n }\n });\n }\n }\n\n getRoute(start: Point, end: Point) {\n const result = [];\n let temp = end;\n while (temp[0] !== start[0] || temp[1] !== start[1]) {\n const node = this.graph.get(temp);\n const preNode = this.cameFrom.get(node!);\n result.unshift(preNode!.data);\n temp = preNode!.data;\n }\n return result;\n }\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\n\nexport class PointNode {\n public distance = Number.MAX_SAFE_INTEGER;\n public adjacentNodes: PointNode[] = [];\n constructor(public data: Point) {}\n}\n\nexport class PointGraph {\n private index: { [x: string]: { [y: string]: PointNode } } = {};\n\n add(p: Point) {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (!(xs in this.index)) {\n this.index[xs] = {};\n }\n if (!(ys in this.index[xs])) {\n this.index[xs][ys] = new PointNode(p);\n }\n }\n connect(a: Point, b: Point) {\n const nodeA = this.get(a);\n const nodeB = this.get(b);\n\n if (!nodeA || !nodeB) {\n throw new Error(`A point was not found`);\n }\n\n nodeA.adjacentNodes.push(nodeB);\n }\n\n has(p: Point): boolean {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n return xs in this.index && ys in this.index[xs];\n }\n\n get(p: Point): PointNode | null {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (xs in this.index && ys in this.index[xs]) {\n return this.index[xs][ys];\n }\n\n return null;\n }\n}\n","import { Direction, PlaitBoard, Point, RectangleClient, createDebugGenerator, DebugGenerator } from '@plait/core';\nimport { removeDuplicatePoints, simplifyOrthogonalPoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nconst debugGenerator = createDebugGenerator('debug:plait:elbow-line-routing');\n\nexport interface ElbowLineRouteOptions {\n sourcePoint: Point;\n nextSourcePoint: Point;\n sourceRectangle: RectangleClient;\n sourceOuterRectangle: RectangleClient;\n targetPoint: Point;\n nextTargetPoint: Point;\n targetOuterRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface RouteAdjustOptions {\n centerX?: number;\n centerY?: number;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface AdjustOptions {\n parallelPaths: [Point, Point][];\n pointOfHit: Point;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport const generateElbowLineRoute = (options: ElbowLineRouteOptions, board?: PlaitBoard) => {\n const { nextSourcePoint, nextTargetPoint } = options;\n const points = getGraphPoints(options);\n const graph = createGraph(points);\n const aStar = new AStar(graph);\n aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);\n let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);\n route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];\n // Centerline correction: Correct the shortest path route based on the horizontal centerline/vertical centerline\n // 1. Find the horizontal center line (centerX)/vertical center line (centerY)\n // 2. Find the point that intersects centerX/centerY in route, and find the line segment parallel to centerX/centerY in route\n // 3. Construct a rectangle based on the intersection points and parallel lines found in the previous step.\n // 4. Determine whether the rectangle intersects with the element. If it does not intersect, the center line can be mapped based on the rectangle constructed in the previous step.\n // 5. Determine whether the path after mapping the center line meets the constraints (inflection point cannot be increased)\n const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);\n const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);\n const centerX = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);\n const centerY = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);\n route = routeAdjust(route, { centerX, centerY, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle }, board);\n return route;\n};\n\nexport const routeAdjust = (path: Point[], options: RouteAdjustOptions, board?: PlaitBoard) => {\n const { sourceRectangle, targetRectangle, centerX, centerY } = options;\n if (board) {\n debugGenerator.clear();\n }\n if (centerX !== undefined) {\n const optionsX = getAdjustOptions(path, centerX, true);\n const resultX =\n optionsX.pointOfHit &&\n adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle }, board);\n if (resultX) {\n path = resultX;\n }\n }\n if (centerY !== undefined) {\n const optionsY = getAdjustOptions(path, centerY, false);\n const resultY =\n optionsY.pointOfHit &&\n adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle }, board);\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions, board?: PlaitBoard): null | Point[] => {\n const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;\n let result = null;\n parallelPaths.forEach(parallelPath => {\n // Construct a rectangle\n const tempRectPoints = [pointOfHit, parallelPath[0], parallelPath[1]];\n // directly use getCornerPoints will bring the precision issue (eg: 263.6923375175286 - 57.130859375)\n const tempRect = RectangleClient.getRectangleByPoints(tempRectPoints);\n if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {\n const tempCorners = RectangleClient.getCornerPointsByPoints(tempRectPoints);\n if (board) {\n debugGenerator.drawRectangle(board, tempRect);\n }\n const indexRangeInPath: number[] = [];\n const indexRangeInCorner: number[] = [];\n route.forEach((point, index) => {\n const cornerResult = tempCorners.findIndex(corner => Point.isEquals(point, corner));\n if (cornerResult !== -1) {\n indexRangeInPath.push(index);\n indexRangeInCorner.push(cornerResult);\n }\n });\n const newPath = [...route];\n const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index)) as Point;\n const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;\n newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);\n const turnCount = simplifyOrthogonalPoints([...route]).length - 1;\n const simplifyPoints = simplifyOrthogonalPoints([...newPath]);\n // if (board) {\n // debugGenerator.drawLine(board, simplifyPoints);\n // }\n const newTurnCount = simplifyPoints.length - 1;\n if (newTurnCount <= turnCount) {\n result = newPath;\n }\n }\n return null;\n });\n return result;\n};\n\nconst getAdjustOptions = (path: Point[], centerOfAxis: number, isHorizontal: boolean) => {\n const parallelPaths: [Point, Point][] = [];\n let start: null | Point = null;\n let pointOfHit: null | Point = null;\n const axis = isHorizontal ? 0 : 1;\n\n for (let index = 0; index < path.length; index++) {\n const previous = path[index - 1];\n const current = path[index];\n if (start === null && previous && previous[axis] === current[axis]) {\n start = previous;\n }\n if (start !== null) {\n if (previous[axis] !== current[axis]) {\n parallelPaths.push([start, previous]);\n start = null;\n }\n }\n if (current[axis] === centerOfAxis) {\n pointOfHit = current;\n }\n }\n if (start) {\n parallelPaths.push([start, path[path.length - 1]]);\n }\n return { pointOfHit, parallelPaths };\n};\n\nexport const getGraphPoints = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;\n const x: number[] = [];\n const y: number[] = [];\n let result: Point[] = [];\n\n [sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {\n x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);\n y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);\n });\n const rectanglesX = [\n sourceOuterRectangle.x,\n sourceOuterRectangle.x + sourceOuterRectangle.width,\n targetOuterRectangle.x,\n targetOuterRectangle.x + targetOuterRectangle.width\n ].sort((a, b) => a - b);\n x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);\n const rectanglesY = [\n sourceOuterRectangle.y,\n sourceOuterRectangle.y + sourceOuterRectangle.height,\n targetOuterRectangle.y,\n targetOuterRectangle.y + targetOuterRectangle.height\n ].sort((a, b) => a - b);\n y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n const point: Point = [x[i], y[j]];\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n if (!isInSource && !isInTarget) {\n result.push(point);\n }\n }\n }\n result = removeDuplicatePoints(result).filter(point => {\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n return !isInSource && !isInTarget;\n });\n return result;\n};\n\nexport const createGraph = (points: Point[]) => {\n const graph = new PointGraph();\n const Xs: number[] = [];\n const Ys: number[] = [];\n points.forEach(p => {\n const x = p[0],\n y = p[1];\n if (Xs.indexOf(x) < 0) Xs.push(x);\n if (Ys.indexOf(y) < 0) Ys.push(y);\n graph.add(p);\n });\n Xs.sort((a, b) => a - b);\n Ys.sort((a, b) => a - b);\n const inHotIndex = (p: Point): boolean => graph.has(p);\n for (let i = 0; i < Xs.length; i++) {\n for (let j = 0; j < Ys.length; j++) {\n const point: Point = [Xs[i], Ys[j]];\n if (!inHotIndex(point)) continue;\n if (i > 0) {\n const otherPoint: Point = [Xs[i - 1], Ys[j]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n if (j > 0) {\n const otherPoint: Point = [Xs[i], Ys[j - 1]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n }\n }\n return graph;\n};\n\nexport const reduceRouteMargin = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const defaultOffset = DEFAULT_ROUTE_MARGIN;\n let sourceOffset: number[] = new Array(4).fill(defaultOffset);\n let targetOffset: number[] = new Array(4).fill(defaultOffset);\n const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);\n const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);\n if (leftToRight > 0 && leftToRight < defaultOffset * 2) {\n const offset = leftToRight / 2;\n sourceOffset[3] = offset;\n targetOffset[1] = offset;\n }\n\n if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {\n const offset = rightToLeft / 2;\n targetOffset[3] = offset;\n sourceOffset[1] = offset;\n }\n\n const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);\n const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);\n if (topToBottom > 0 && topToBottom < defaultOffset * 2) {\n const offset = topToBottom / 2;\n sourceOffset[0] = offset;\n targetOffset[2] = offset;\n }\n if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {\n const offset = bottomToTop / 2;\n sourceOffset[2] = offset;\n targetOffset[0] = offset;\n }\n return { sourceOffset, targetOffset };\n};\n\nexport const getNextPoint = (point: Point, outerRectangle: RectangleClient, direction: Direction): Point => {\n switch (direction) {\n case Direction.top: {\n return [point[0], outerRectangle.y];\n }\n case Direction.bottom: {\n return [point[0], outerRectangle.y + outerRectangle.height];\n }\n case Direction.right: {\n return [outerRectangle.x + outerRectangle.width, point[1]];\n }\n default: {\n return [outerRectangle.x, point[1]];\n }\n }\n};\n\nexport const getSourceAndTargetOuterRectangle = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const { sourceOffset, targetOffset } = reduceRouteMargin(sourceRectangle, targetRectangle);\n const sourceOuterRectangle = RectangleClient.expand(\n sourceRectangle,\n sourceOffset[3],\n sourceOffset[0],\n sourceOffset[1],\n sourceOffset[2]\n );\n const targetOuterRectangle = RectangleClient.expand(\n targetRectangle,\n targetOffset[3],\n targetOffset[0],\n targetOffset[1],\n targetOffset[2]\n );\n return {\n sourceOuterRectangle,\n targetOuterRectangle\n };\n};\n\nexport const isSourceAndTargetIntersect = (options: ElbowLineRouteOptions) => {\n const {\n sourcePoint,\n nextSourcePoint,\n sourceRectangle,\n sourceOuterRectangle,\n targetPoint,\n nextTargetPoint,\n targetRectangle,\n targetOuterRectangle\n } = options;\n\n return (\n RectangleClient.isPointInRectangle(targetRectangle, sourcePoint) ||\n RectangleClient.isPointInRectangle(targetOuterRectangle, nextSourcePoint) ||\n RectangleClient.isPointInRectangle(sourceOuterRectangle, nextTargetPoint) ||\n RectangleClient.isPointInRectangle(sourceRectangle, targetPoint)\n );\n};\n","import { PlaitElement } from '@plait/core';\n\nconst map = new Map<string, any>();\n\nexport const memorizeLatest = <T extends PlaitElement = PlaitElement>(\n memorizedKey: string,\n propertyKey: keyof T,\n propertyValue: T[keyof T]\n) => {\n let obj = map.has(memorizedKey) ? map.get(memorizedKey) : {};\n obj[propertyKey] = propertyValue;\n map.set(memorizedKey, obj);\n};\n\nexport const getMemorizedLatest = <T extends PlaitElement = PlaitElement>(memorizedKey: string): T => {\n return map.get(memorizedKey);\n};\n","import { PlaitBoard, setDragging } from '@plait/core';\nimport { RotateRef } from '../types';\n\nexport const IS_ROTATING = new WeakMap<PlaitBoard, RotateRef>();\n\nexport const isRotating = (board: PlaitBoard) => {\n return !!IS_ROTATING.get(board);\n};\n\nexport const addRotating = (board: PlaitBoard, rotateRef: RotateRef) => {\n PlaitBoard.getBoardContainer(board).classList.add(`draw-elements-rotating`);\n IS_ROTATING.set(board, rotateRef);\n setDragging(board, true);\n};\n\nexport const removeRotating = (board: PlaitBoard) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`draw-elements-rotating`);\n IS_ROTATING.delete(board);\n setDragging(board, false);\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { DEFAULT_FILL, TRANSPARENT } from '../constants';\n\nexport const getElementArea = (board: PlaitBoard, element: PlaitElement) => {\n const rectangle = board.getRectangle(element);\n if (rectangle) {\n return rectangle.width * rectangle.height;\n }\n return 0;\n};\n\nexport const sortElementsByArea = (board: PlaitBoard, elements: PlaitElement[], direction: 'desc' | 'asc' = 'asc') => {\n return elements.sort((a, b) => {\n const areaA = getElementArea(board, a);\n const areaB = getElementArea(board, b);\n return direction === 'asc' ? areaA - areaB : areaB - areaA;\n });\n};\n\nexport const isFilled = (fill: string) => {\n return fill && fill !== DEFAULT_FILL && fill !== TRANSPARENT;\n};\n","export type AnimateOption = { stop: () => void; start: () => void };\n\nexport function animate(tween: (t: number) => void, duration: number, ease: Function, callback: Function): AnimateOption {\n const start = getTimestamp();\n let stopAnimation = false;\n\n function tick(now: number) {\n if (stopAnimation) {\n return;\n }\n const elapsed = now - start;\n const t = Math.min(elapsed / duration, 1);\n tween(ease(t));\n if (t < 1) {\n requestAnimationFrame(tick);\n } else if (callback) {\n callback();\n }\n }\n\n requestAnimationFrame(tick);\n return {\n stop: () => (stopAnimation = true),\n start: () => {\n stopAnimation = false;\n requestAnimationFrame(tick);\n }\n };\n}\n\nexport function getTimestamp() {\n if (window.performance && window.performance.now) {\n return window.performance.now();\n } else {\n return Date.now();\n }\n}\n\nexport function linear(t: number) {\n return t;\n}\n","import {\n ACTIVE_STROKE_WIDTH,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n createForeignObject,\n createG,\n getSelectedElements,\n isSelectionMoving,\n setAngleForG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator, GeneratorExtraData, GeneratorOptions } from '../generators/generator';\nimport { CommonImageItem, canResize, getElementOfFocusedImage } from '../utils';\nimport { ActiveGenerator } from '../generators/active.generator';\nimport { PlaitImageBoard, ImageComponentRef, ImageProps } from './with-image';\n\nexport const FOREIGN_OBJECT_IMAGE_CLASS_NAME = 'foreign-object-image';\n\nexport interface ImageGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getImageItem: (element: T) => CommonImageItem;\n}\n\nexport class ImageGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n GeneratorExtraData,\n ImageGeneratorOptions<T> & GeneratorOptions\n> {\n static key = 'image-generator';\n\n foreignObject!: SVGForeignObjectElement;\n\n imageComponentRef!: ImageComponentRef;\n\n activeGenerator!: ActiveGenerator;\n\n isFocus = false;\n\n element!: T;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T): boolean {\n return !!this.options.getImageItem(element);\n }\n\n draw(element: T): SVGGElement {\n this.element = element;\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n this.foreignObject.classList.add(FOREIGN_OBJECT_IMAGE_CLASS_NAME);\n g.append(this.foreignObject);\n const props: ImageProps = {\n board: this.board,\n imageItem: this.options.getImageItem(element),\n element,\n getRectangle: () => {\n return this.options.getRectangle(element);\n }\n };\n this.imageComponentRef = ((this.board as unknown) as PlaitImageBoard).renderImage(this.foreignObject, props);\n\n this.activeGenerator = new ActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (!(selectedElements.length === 1 && !isSelectionMoving(this.board))) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if ((selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.options.getRectangle(this.element);\n },\n hasResizeHandle: () => {\n const isSelectedImageElement = canResize(this.board, this.element);\n const isSelectedImage = !!getElementOfFocusedImage(this.board);\n return isSelectedImage || isSelectedImageElement;\n }\n });\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n this.element = current;\n if (previous !== current && this.imageComponentRef) {\n const props = {\n imageItem: this.options.getImageItem(current),\n element: current,\n getRectangle: () => {\n return this.options.getRectangle(current);\n }\n };\n this.imageComponentRef.update(props);\n }\n const currentForeignObject = this.options.getRectangle(current);\n updateForeignObject(\n this.g!,\n currentForeignObject.width,\n currentForeignObject.height,\n currentForeignObject.x,\n currentForeignObject.y\n );\n if (currentForeignObject && current.angle) {\n setAngleForG(this.g!, RectangleClient.getCenterPoint(currentForeignObject), current.angle);\n }\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.processDrawing(current, activeG, { selected: this.isFocus });\n }\n\n setFocus(element: PlaitElement, isFocus: boolean) {\n this.isFocus = isFocus;\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.processDrawing(element, activeG, { selected: isFocus });\n const props: Partial<ImageProps> = {\n isFocus\n };\n this.imageComponentRef.update(props);\n }\n\n destroy(): void {\n super.destroy();\n this.imageComponentRef?.destroy();\n this.activeGenerator?.destroy();\n }\n}\n","import { Path, PlaitBoard, PlaitElement, Transforms, getSelectedElements } from '@plait/core';\nimport { memorizeLatest } from '../utils';\n\nexport interface SetOptions<T extends PlaitElement = PlaitElement> {\n callback?: (element: T, path: Path) => void;\n getMemorizeKey?: (element: T) => string;\n match?: (element: T) => boolean;\n}\n\nexport const setProperty = <T extends PlaitElement = PlaitElement>(board: PlaitBoard, properties: Partial<T>, options?: SetOptions<T>) => {\n const selectedElements = getSelectedElements(board) as T[];\n selectedElements.forEach(element => {\n if (options?.match && !options?.match(element)) return;\n const path = PlaitBoard.findPath(board, element);\n const memorizeKey = options?.getMemorizeKey ? options?.getMemorizeKey(element) : '';\n for (let key in properties) {\n memorizeKey && memorizeLatest(memorizeKey, key, properties[key]);\n }\n if (options?.callback) {\n options.callback(element, path);\n } else {\n Transforms.setNode(board, properties, path);\n }\n });\n};\n\nconst setStrokeStyle = (board: PlaitBoard, strokeStyle: string, options: SetOptions) => {\n setProperty(board, { strokeStyle }, options);\n};\n\nconst setFillColor = (board: PlaitBoard, fill: string, options: SetOptions) => {\n setProperty(board, { fill }, options);\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string, options: SetOptions) => {\n setProperty(board, { strokeColor }, options);\n};\n\nconst setStrokeWidth = (board: PlaitBoard, strokeWidth: number, options: SetOptions) => {\n setProperty(board, { strokeWidth }, options);\n};\n\nexport const PropertyTransforms = {\n setFillColor,\n setStrokeStyle,\n setProperty,\n setStrokeWidth,\n setStrokeColor\n};\n","import {\n MERGING,\n PlaitBoard,\n PlaitElement,\n PlaitGroupElement,\n Point,\n RectangleClient,\n Transforms,\n getElementsInGroup,\n getHighestSelectedElements,\n getRectangleByElements\n} from '@plait/core';\n\nexport const alignTop = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y - rectangle.y] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignBottom = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y + outerRectangle.height - (rectangle.y + rectangle.height)] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignLeft = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x - rectangle.x, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignHorizontalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.x + outerRectangle.width / 2;\n const elementCenter = rectangle.x + rectangle.width / 2;\n return [outerCenter - elementCenter, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignVerticalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.y + outerRectangle.height / 2;\n const elementCenter = rectangle.y + rectangle.height / 2;\n return [0, outerCenter - elementCenter] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignRight = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x + outerRectangle.width - (rectangle.x + rectangle.width), 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nfunction setOffset(board: PlaitBoard, getOffset: (outerRectangle: RectangleClient, rectangle: RectangleClient) => Point) {\n const elements = getHighestSelectedElements(board);\n const outerRectangle = getRectangleByElements(board, elements, false);\n elements.forEach(element => {\n if (!element.points && !PlaitGroupElement.isGroup(element)) return;\n const rectangle = board.getRectangle(element)!;\n const offset = getOffset(outerRectangle, rectangle);\n let updateElements: PlaitElement[] = [];\n if (PlaitGroupElement.isGroup(element)) {\n updateElements = getElementsInGroup(board, element, true, false);\n } else if (element.points) {\n updateElements = [element];\n }\n updateElements.forEach(item => {\n const newPoints = item.points!.map(p => [p[0] + offset[0], p[1] + offset[1]]) as Point[];\n const path = PlaitBoard.findPath(board, item);\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n path\n );\n });\n MERGING.set(board, true);\n });\n MERGING.set(board, false);\n}\n\nexport const distributeHorizontal = (board: PlaitBoard) => {\n distribute(board, true);\n};\n\nexport const distributeVertical = (board: PlaitBoard) => {\n distribute(board, false);\n};\n\nconst distribute = (board: PlaitBoard, isHorizontal: boolean) => {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n const highestSelectedElements = getHighestSelectedElements(board);\n const refs = highestSelectedElements.map(element => {\n return { element, rectangle: board.getRectangle(element)! };\n });\n const outerRectangle = getRectangleByElements(board, highestSelectedElements, false);\n const minRectangleRef = refs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis])[0];\n const maxRectangleRef = refs.sort((a, b) => b.rectangle[axis] + b.rectangle[side] - (a.rectangle[axis] + a.rectangle[side]))[0];\n const minIndex = refs.findIndex(ref => ref === minRectangleRef);\n const maxIndex = refs.findIndex(ref => ref === maxRectangleRef);\n let distributeRefs = refs.filter((element, index) => index !== minIndex && index !== maxIndex);\n const sum = distributeRefs.reduce((accumulator, current) => current.rectangle[side] + accumulator, 0);\n const offset =\n (outerRectangle[side] - minRectangleRef.rectangle[side] - maxRectangleRef.rectangle[side] - sum) / (distributeRefs.length + 1);\n distributeRefs = distributeRefs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis]);\n let position = minRectangleRef.rectangle[axis] + minRectangleRef.rectangle[side] + offset;\n for (let i = 0; i < distributeRefs.length; i++) {\n const rectangle = distributeRefs[i].rectangle;\n const moveOffset = [0, 0];\n const moveAxis = isHorizontal ? 0 : 1;\n moveOffset[moveAxis] = position - rectangle[axis];\n const path = PlaitBoard.findPath(board, distributeRefs[i].element);\n const newPoints = distributeRefs[i].element.points!.map(p => [p[0] + moveOffset[0], p[1] + moveOffset[1]]) as Point[];\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n path\n );\n MERGING.set(board, true);\n position = position + rectangle[side] + offset;\n }\n MERGING.set(board, false);\n};\n\nexport interface AlignTransform {\n alignTop: (board: PlaitBoard) => void;\n alignHorizontalCenter: (board: PlaitBoard) => void;\n alignBottom: (board: PlaitBoard) => void;\n alignLeft: (board: PlaitBoard) => void;\n alignVerticalCenter: (board: PlaitBoard) => void;\n alignRight: (board: PlaitBoard) => void;\n distributeHorizontal: (board: PlaitBoard) => void;\n distributeVertical: (board: PlaitBoard) => void;\n}\n\nexport const AlignTransform: AlignTransform = {\n alignTop,\n alignHorizontalCenter,\n alignBottom,\n alignLeft,\n alignVerticalCenter,\n alignRight,\n distributeHorizontal,\n distributeVertical\n};\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point], shift: boolean = false): [Point, Point] => {\n let start = points[0];\n let end = points[1];\n if (shift) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n const edge = Math.max(height, width);\n end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];\n }\n\n const leftTopPoint: Point = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];\n let rightBottomPoint: Point = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];\n\n return [leftTopPoint, rightBottomPoint];\n};\n","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n PlaitBoard,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n handleTouchTarget,\n throttleRAF,\n toViewBoxPoint,\n toHostPoint,\n isDragging\n} from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { addResizing, isResizing, removeResizing } from '../utils/resize';\nimport { PlaitElementOrArray, ResizeOptions, ResizeHitTestRef, ResizeRef, WithResizeOptions } from '../types/resize';\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n !PlaitBoard.isReadonly(board) && !PlaitBoard.hasBeenTextEditing(board) && PlaitBoard.isPointer(board, PlaitPointerType.selection)\n );\n};\n\nexport const withResize = <T extends PlaitElementOrArray = PlaitElementOrArray, K = ResizeHandle, P = ResizeOptions>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K, P>\n) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeHitTestRef: ResizeHitTestRef<T, K, P> | null = null;\n let resizeRef: ResizeRef<T, K, P> | null = null;\n let startPoint: Point | null = null;\n let hoverHitTestRef: ResizeHitTestRef<T, K, P> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event) || !isMainPointer(event)) {\n pointerDown(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n resizeHitTestRef = options.hitTest(point);\n if (resizeHitTestRef) {\n if (resizeHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeHitTestRef.cursorClass}`);\n }\n startPoint = [event.x, event.y];\n const path = Array.isArray(resizeHitTestRef.element)\n ? resizeHitTestRef.element.map(el => PlaitBoard.findPath(board, el))\n : PlaitBoard.findPath(board, resizeHitTestRef.element);\n resizeRef = {\n path,\n element: resizeHitTestRef.element,\n handle: resizeHitTestRef.handle,\n handleIndex: resizeHitTestRef.handleIndex,\n rectangle: resizeHitTestRef.rectangle,\n options: resizeHitTestRef.options\n };\n preventTouchMove(board, event, true);\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n clearHoverHitTestRef();\n pointerMove(event);\n return;\n }\n if (startPoint && resizeHitTestRef && !isResizing(board)) {\n const endPoint = [event.x, event.y];\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, resizeRef!, options.key);\n MERGING.set(board, true);\n options.beforeResize && options.beforeResize(resizeRef!);\n }\n }\n if (!isResizing(board) && !isDragging(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n throttleRAF(board, options.key + '-common-resize-hit-test', () => {\n const hitTestRef = options.hitTest(point);\n if (hitTestRef) {\n if (hoverHitTestRef && hitTestRef.cursorClass !== hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n }\n hoverHitTestRef = hitTestRef;\n if (hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${hoverHitTestRef.cursorClass}`);\n }\n } else {\n clearHoverHitTestRef();\n }\n });\n } else {\n if (startPoint && isResizing(board)) {\n event.preventDefault();\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n throttleRAF(board, 'with-common-resize', () => {\n if (startPoint && resizeRef) {\n handleTouchTarget(board);\n options.onResize(resizeRef, {\n startPoint: toViewBoxPoint(board, toHostPoint(board, startPoint[0], startPoint[1])),\n endPoint,\n isShift: !!event.shiftKey\n });\n }\n });\n return;\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeHitTestRef) {\n options.afterResize && options.afterResize(resizeRef!);\n removeResizing(board, options.key);\n startPoint = null;\n resizeHitTestRef = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, event, false);\n }\n };\n\n const clearHoverHitTestRef = () => {\n if (hoverHitTestRef) {\n if (hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n }\n hoverHitTestRef = null;\n }\n };\n\n return board;\n};\n","import { ACTIVE_STROKE_WIDTH, PlaitGroup, RectangleClient, drawRectangle, getRectangleByGroup } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { Generator } from './generator';\n\nexport class GroupGenerator extends Generator<PlaitGroup> {\n canDraw(element: PlaitGroup): boolean {\n return true;\n }\n\n draw(element: PlaitGroup, partialSelected: boolean) {\n const options: Options = {\n stroke: '',\n strokeWidth: ACTIVE_STROKE_WIDTH,\n strokeLineDash: [5]\n };\n let rectangle: RectangleClient = { x: 0, y: 0, width: 0, height: 0 };\n if (partialSelected) {\n options.stroke = '#999';\n rectangle = getRectangleByGroup(this.board, element, true);\n }\n return drawRectangle(this.board, rectangle, options);\n }\n}\n","import { PlaitElementRef } from '@plait/core';\nimport { Generator } from '../generators';\n\nexport class PlaitCommonElementRef implements PlaitElementRef {\n private generatorMap = new Map<string, Generator | Object>();\n\n addGenerator<T extends Object = Generator>(key: string, generator: T) {\n this.generatorMap.set(key, generator);\n }\n\n getGenerator<T extends Object = Generator>(key: string) {\n return this.generatorMap.get(key) as T;\n }\n}\n","import { ElementFlavour, PlaitBoard, PlaitElement } from '@plait/core';\nimport { ELEMENT_TO_TEXT_MANAGES } from '../utils/text';\nimport { PlaitCommonElementRef } from './element-ref';\nimport { TextManage } from '../text/text-manage';\n\nexport class CommonElementFlavour<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard,\n R extends PlaitCommonElementRef = PlaitCommonElementRef\n> extends ElementFlavour<T, K, R> {\n private textManages: TextManage[] = [];\n\n constructor(elementRef = new PlaitCommonElementRef()) {\n super(elementRef as R);\n }\n\n initializeWeakMap() {\n ELEMENT_TO_TEXT_MANAGES.set(this.element, this.textManages);\n }\n\n destroyWeakMap() {\n ELEMENT_TO_TEXT_MANAGES.delete(this.element);\n }\n\n initializeTextManages(textManages: TextManage[]) {\n this.textManages = textManages;\n this.initializeWeakMap();\n }\n\n addTextManage(textManage: TextManage) {\n this.textManages.push(textManage);\n }\n\n destroyTextManages() {\n this.getTextManages().forEach(manage => {\n manage.destroy();\n });\n this.textManages = [];\n this.destroyWeakMap();\n }\n\n getTextManages() {\n return this.textManages;\n }\n}\n","import {\n OnContextChanged,\n PlaitBoard,\n PlaitGroup,\n PlaitPluginElementContext,\n getElementsInGroup,\n getRectangleByGroup,\n isSelectedElementOrGroup,\n isSelectionMoving\n} from '@plait/core';\nimport { GroupGenerator } from '../generators/group.generator';\nimport { ActiveGenerator } from '../generators';\nimport { CommonElementFlavour } from './element-flavour';\nimport { Subscription } from 'rxjs';\n\nexport class GroupComponent extends CommonElementFlavour<PlaitGroup, PlaitBoard> implements OnContextChanged<PlaitGroup, PlaitBoard> {\n onStableSubscription?: Subscription;\n\n constructor() {\n super();\n }\n\n activeGenerator!: ActiveGenerator<PlaitGroup>;\n\n groupGenerator!: GroupGenerator;\n\n initializeGenerator() {\n this.activeGenerator = new ActiveGenerator<PlaitGroup>(this.board, {\n getRectangle: (element: PlaitGroup) => {\n return getRectangleByGroup(this.board, element);\n },\n getStrokeWidth: () => 0,\n getStrokeOpacity: () => 0,\n hasResizeHandle: () => {\n return !isSelectionMoving(this.board);\n }\n });\n this.groupGenerator = new GroupGenerator(this.board);\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n const contextService = PlaitBoard.getBoardContext(this.board);\n this.onStableSubscription = contextService.onStable().subscribe(() => {\n const elementsInGroup = getElementsInGroup(this.board, this.element, false, true);\n const isPartialSelectGroup =\n elementsInGroup.some(item => isSelectedElementOrGroup(this.board, item)) &&\n !elementsInGroup.every(item => isSelectedElementOrGroup(this.board, item));\n this.groupGenerator.processDrawing(this.element, this.getElementG(), isPartialSelectGroup);\n });\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitGroup, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitGroup, PlaitBoard>\n ) {}\n\n destroy(): void {\n super.destroy();\n this.onStableSubscription?.unsubscribe();\n }\n}\n","import {\n PlaitBoard,\n PlaitPluginElementContext,\n PlaitGroupElement,\n toViewBoxPoint,\n toHostPoint,\n getHitElementsBySelection,\n createGroupRectangleG,\n ClipboardData,\n getHighestSelectedGroups,\n getSelectedIsolatedElements,\n PlaitElement,\n PlaitGroup,\n getSelectedGroups,\n Selection,\n Point,\n Transforms,\n idCreator,\n getGroupByElement,\n getSelectedIsolatedElementsCanAddToGroup,\n getElementsInGroup,\n getRectangleByGroup,\n PlaitPointerType,\n WritableClipboardOperationType\n} from '@plait/core';\nimport { GroupComponent } from '../core/group.component';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { isResizing } from '../utils';\n\nexport function withGroup(board: PlaitBoard) {\n let groupRectangleG: SVGGElement | null;\n let removeGroups: PlaitGroup[] | null;\n\n const {\n drawElement,\n pointerMove,\n globalPointerUp,\n insertFragment,\n getDeletedFragment,\n deleteFragment,\n getRelatedFragment,\n getRectangle,\n keyDown\n } = board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitGroupElement.isGroup(context.element)) {\n return GroupComponent;\n }\n return drawElement(context);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n groupRectangleG?.remove();\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n let selection: Selection = { anchor: point, focus: point };\n if (board.selection && !Selection.isCollapsed(board.selection)) {\n selection = board.selection;\n }\n const pointer = PlaitBoard.getPointer(board);\n if (!isResizing(board) && pointer === PlaitPointerType.selection) {\n const hitElements = getHitElementsBySelection(board, selection);\n if (hitElements.length) {\n groupRectangleG = createGroupRectangleG(board, hitElements);\n groupRectangleG && PlaitBoard.getElementActiveHost(board).append(groupRectangleG);\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n groupRectangleG?.remove();\n groupRectangleG = null;\n globalPointerUp(event);\n };\n\n board.getRelatedFragment = (elements: PlaitElement[], originData?: PlaitElement[]) => {\n const groups = getSelectedGroups(board, elements, originData);\n return getRelatedFragment([...elements, ...groups], originData);\n };\n\n board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n let elements: PlaitElement[] = [];\n if (clipboardData?.elements?.length) {\n elements = new Array(clipboardData?.elements?.length);\n const groups = getHighestSelectedGroups(board, clipboardData?.elements);\n const selectedIsolatedElements = getSelectedIsolatedElements(board, clipboardData?.elements);\n selectedIsolatedElements.forEach(item => {\n const index = clipboardData.elements!.map(element => element.id).indexOf(item.id);\n elements.splice(index, 1, !item.groupId ? item : updateGroupId(item, undefined));\n });\n if (groups.length) {\n groups.forEach(item => {\n const index = clipboardData.elements!.map(element => element.id).indexOf(item.id);\n const newGroup = { ...updateGroupId(item, undefined), id: idCreator() };\n elements.splice(index, 1, newGroup);\n updateElementsGroupId(item, clipboardData.elements!, newGroup.id, elements);\n });\n }\n clipboardData.elements = elements;\n }\n insertFragment(clipboardData, targetPoint, operationType);\n const groupElements = elements?.filter(value => PlaitGroupElement.isGroup(value)) as PlaitElement[];\n groupElements.forEach(element => {\n Transforms.insertNode(board, element, [board.children.length]);\n });\n };\n\n board.getDeletedFragment = (data: PlaitElement[]) => {\n removeGroups = getRemoveGroups(board);\n if (removeGroups && removeGroups.length) {\n data.push(...removeGroups);\n }\n return getDeletedFragment(data);\n };\n\n board.deleteFragment = (elements: PlaitElement[]) => {\n if (removeGroups?.length) {\n updateSiblingElementGroupId(board, removeGroups);\n }\n deleteFragment(elements);\n removeGroups = null;\n };\n\n board.getRectangle = (element: PlaitElement) => {\n if (PlaitGroupElement.isGroup(element)) {\n return getRectangleByGroup(board, element, true);\n }\n return getRectangle(element);\n };\n\n board.keyDown = (event: KeyboardEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n if (isKeyHotkey('mod+g', event)) {\n event.preventDefault();\n Transforms.addGroup(board);\n return;\n }\n if (isKeyHotkey('mod+shift+g', event)) {\n event.preventDefault();\n Transforms.removeGroup(board);\n return;\n }\n }\n keyDown(event);\n };\n\n return board;\n}\n\nconst updateGroupId = (element: PlaitElement, groupId?: string) => {\n return {\n ...element,\n groupId: groupId\n };\n};\n\nconst updateElementsGroupId = (group: PlaitGroup, clipboardDataElements: PlaitElement[], newGroupId: string, elements: PlaitElement[]) => {\n const elementsInGroup = clipboardDataElements.filter(item => item.groupId === group.id);\n if (elementsInGroup.length) {\n elementsInGroup.forEach(item => {\n const index = clipboardDataElements.map(item => item.id).indexOf(item.id);\n if (PlaitGroupElement.isGroup(item)) {\n const newGroup = { ...updateGroupId(item, newGroupId), id: idCreator() };\n elements.splice(index, 1, newGroup);\n updateElementsGroupId(item, clipboardDataElements, newGroup.id, elements);\n } else {\n elements.splice(index, 1, updateGroupId(item, newGroupId));\n }\n });\n }\n return elements;\n};\n\nconst getRemoveGroups = (board: PlaitBoard) => {\n const selectedGroups = board.getRelatedFragment([]) as PlaitGroup[];\n const removeGroups = [...selectedGroups];\n const highestSelectedGroups = getHighestSelectedGroups(board);\n const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);\n const removeNodes = [...highestSelectedGroups, ...selectedIsolatedElements];\n removeNodes.forEach(item => {\n const hitElementGroups = getGroupByElement(board, item, true) as PlaitGroup[];\n if (hitElementGroups.length) {\n const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);\n const siblingElements = elementsInGroup.filter(\n element => ![...removeNodes, ...removeGroups].map(item => item.id).includes(element.id)\n );\n if (siblingElements.length === 1 || siblingElements.length === 0) {\n if (!removeGroups.includes(hitElementGroups[0])) {\n removeGroups.push(hitElementGroups[0]);\n }\n if (siblingElements.length === 1) {\n if (hitElementGroups.length > 1) {\n const aboveGroup = findAboveGroupWithAnotherElement(board, hitElementGroups.slice(1, hitElementGroups.length), [\n ...removeNodes,\n ...removeGroups\n ]);\n let index = hitElementGroups.length;\n if (aboveGroup) {\n index = hitElementGroups.findIndex(item => item.id === aboveGroup.id);\n }\n [...hitElementGroups.slice(1, index)].forEach(item => {\n if (!removeGroups.includes(item)) {\n removeGroups.push(item);\n }\n });\n }\n }\n }\n }\n });\n return removeGroups;\n};\n\nconst findAboveGroupWithAnotherElement = (board: PlaitBoard, groups: PlaitGroup[], excludeNodes: PlaitElement[]) => {\n let group: PlaitGroup | null = null;\n for (let i = 0; i < groups.length; i++) {\n const elementsInGroup = getElementsInGroup(board, groups[i], false, true);\n const siblingElements = elementsInGroup.filter(element => !excludeNodes.map(item => item.id).includes(element.id));\n if (siblingElements.length > 0) {\n group = groups[i];\n break;\n }\n }\n return group;\n};\n\nconst updateSiblingElementGroupId = (board: PlaitBoard, removeGroups: PlaitGroup[]) => {\n const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);\n const highestSelectedGroups = getHighestSelectedGroups(board);\n const isolatedElementsInGroup = selectedIsolatedElements.filter(item => item.groupId);\n [...highestSelectedGroups, ...isolatedElementsInGroup].forEach(item => {\n const hitElementGroups = getGroupByElement(board, item, true) as PlaitGroup[];\n if (hitElementGroups.length) {\n const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);\n const siblingElements = elementsInGroup.filter(element => element.id !== item.id);\n if (siblingElements.length === 1) {\n const removeGroupIds = removeGroups.map(item => item.id);\n if (hitElementGroups.some(group => removeGroupIds.includes(group.id))) {\n const group = hitElementGroups.find(group => !removeGroupIds.includes(group.id));\n const path = PlaitBoard.findPath(board, siblingElements[0]);\n Transforms.setNode(board, { groupId: group?.id || undefined }, path);\n }\n }\n }\n });\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport abstract class ImageBaseComponent {\n _isFocus!: boolean;\n\n element!: PlaitElement;\n\n board!: PlaitBoard;\n\n set isFocus(value: boolean) {\n this._isFocus = value;\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n abstract nativeElement(): HTMLElement;\n}\n","import { Node } from 'slate';\nimport { CustomText, ParagraphElement } from './types';\nimport { getLineHeightByFontSize } from '../utils/text';\n\nexport function measureElement(\n element: ParagraphElement,\n options: {\n fontSize: number;\n fontFamily: string;\n },\n containerMaxWidth: number = 10000\n) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n const textEntries = Node.texts(element);\n const lines: CustomText[][] = [[]];\n for (const textEntry of textEntries) {\n const [text] = textEntry;\n const textString = Node.string(text);\n const textArray = textString.split('\\n');\n textArray.forEach((segmentTextString: string, index: number) => {\n const segmentText = { ...text, text: segmentTextString };\n if (index === 0) {\n const currentLine = lines[lines.length - 1];\n currentLine.push(segmentText);\n } else {\n const newLine: CustomText[] = [];\n newLine.push(segmentText);\n lines.push(newLine);\n }\n });\n }\n let width = 0;\n let height = 0;\n lines.forEach((lineTexts: CustomText[], index: number) => {\n let lineWidth = 0;\n let maxLineHeight = getLineHeightByFontSize(options.fontSize);\n lineTexts.forEach((text: CustomText, index: number) => {\n const font = getFont(text, { fontFamily: options.fontFamily, fontSize: options.fontSize });\n ctx.font = font;\n const textMetrics = ctx.measureText(text.text);\n lineWidth += textMetrics.width;\n const isLast = index === lineTexts.length - 1;\n // skip when text is empty and is not last text of line\n if (text['font-size'] && (isLast || text.text !== '')) {\n const lineHeight = getLineHeightByFontSize(parseFloat(text['font-size']));\n if (lineHeight > maxLineHeight) {\n maxLineHeight = lineHeight;\n }\n }\n });\n if (lineWidth <= containerMaxWidth) {\n if (lineWidth > width) {\n width = lineWidth;\n }\n height += maxLineHeight;\n } else {\n width = containerMaxWidth;\n const lineWrapNumber = Math.ceil(lineWidth / containerMaxWidth);\n height += maxLineHeight * lineWrapNumber;\n }\n });\n return { width, height };\n}\n\nconst getFont = (\n text: CustomText,\n options: {\n fontSize: number;\n fontFamily: string;\n }\n) => {\n return `${text.italic ? 'italic ' : ''} ${text.bold ? 'bold ' : ''} ${text['font-size'] || options.fontSize}px ${options.fontFamily} `;\n};\n","import {\n IS_TEXT_EDITABLE,\n MERGING,\n PlaitBoard,\n Point,\n RectangleClient,\n createForeignObject,\n createG,\n debounce,\n setAngleForG,\n toHostPoint,\n toViewBoxPoint,\n updateForeignObject,\n updateForeignObjectWidth\n} from '@plait/core';\nimport { fromEvent, timer } from 'rxjs';\nimport { Editor, Element, NodeEntry, Range, Text, Node, Transforms, Operation } from 'slate';\nimport { PlaitTextBoard, TextPlugin } from './with-text';\nimport { measureElement } from './text-measure';\nimport { TextChangeData, TextComponentRef, TextProps } from './with-text';\n\nexport interface TextManageChangeData {\n newText?: Element;\n operations?: Operation[];\n width: number;\n height: number;\n}\n\nexport class TextManage {\n isEditing = false;\n\n editor!: Editor;\n\n g!: SVGGElement;\n\n foreignObject!: SVGForeignObjectElement;\n\n textComponentRef!: TextComponentRef;\n\n // add debounce for composition input end and abandon before change in setTimeout period\n // be going to attract board children are overwritten when fired more times onChange(eg: board is embed in editor)\n textChange = debounce<TextManageChangeData>((data?: TextManageChangeData) => {\n if (!data) {\n return;\n }\n this.options.onChange && this.options.onChange({ ...data });\n MERGING.set(this.board, true);\n }, 0);\n\n constructor(\n private board: PlaitBoard,\n private options: {\n getRectangle: () => RectangleClient;\n onChange?: (data: TextManageChangeData) => void;\n getRenderRectangle?: () => RectangleClient;\n getMaxWidth?: () => number;\n textPlugins?: TextPlugin[];\n }\n ) {\n if (!this.options.getMaxWidth) {\n this.options.getMaxWidth = () => 999;\n }\n }\n\n draw(text: Element) {\n const _rectangle = this.options.getRectangle();\n this.g = createG();\n this.foreignObject = createForeignObject(_rectangle.x, _rectangle.y, _rectangle.width, _rectangle.height);\n this.g.append(this.foreignObject);\n this.g.classList.add('text');\n const props: TextProps = {\n board: this.board,\n text,\n textPlugins: this.options.textPlugins,\n onChange: (data: TextChangeData) => {\n if (data.operations.some(op => !Operation.isSelectionOperation(op))) {\n const { width: newWidth, height: newHeight } = this.getSize();\n this.textChange({ ...data, width: newWidth, height: newHeight });\n const { x, y, width, height } = this.options.getRectangle();\n // update immediately width and height otherwise cursor come up shaking(in drawnix)\n // in flowchart case width and height may greater than the calculational width and height\n const temporaryWidth = newWidth > width ? newWidth : width;\n const temporaryHeight = newHeight > height ? newHeight : height;\n updateForeignObject(this.g, temporaryWidth, temporaryHeight, x, y);\n }\n },\n afterInit: (editor: Editor) => {\n this.editor = editor;\n },\n onComposition: (event: CompositionEvent) => {\n if (event.type === 'compositionend') {\n return;\n }\n const fakeRoot = buildCompositionData(this.editor, event.data);\n if (fakeRoot) {\n const sizeData = this.getSize(fakeRoot.children[0]);\n // invoking onChange asap to avoid blinking on typing chinese\n this.options.onChange && this.options.onChange({ ...sizeData });\n MERGING.set(this.board, true);\n }\n }\n };\n this.textComponentRef = ((this.board as unknown) as PlaitTextBoard).renderText(this.foreignObject, props);\n }\n\n updateRectangleWidth(width: number) {\n updateForeignObjectWidth(this.g, width);\n }\n\n updateAngle(centerPoint: Point, angle: number = 0) {\n setAngleForG(this.g, centerPoint, angle);\n }\n\n updateRectangle(rectangle?: RectangleClient) {\n const { x, y, width, height } = rectangle || this.options.getRectangle();\n updateForeignObject(this.g, width, height, x, y);\n }\n\n updateText(newText: Element) {\n const props = {\n text: newText\n };\n this.textComponentRef.update(props);\n }\n\n edit(callback?: () => void, exitEdit?: (event: Event) => boolean) {\n this.isEditing = true;\n IS_TEXT_EDITABLE.set(this.board, true);\n const props: Partial<TextProps> = {\n readonly: false\n };\n this.textComponentRef.update(props);\n Transforms.select(this.editor, [0]);\n const mousedown$ = fromEvent<MouseEvent>(document, 'mousedown').subscribe((event: MouseEvent) => {\n const point = toViewBoxPoint(this.board, toHostPoint(this.board, event.x, event.y));\n const textRec = this.options.getRenderRectangle ? this.options.getRenderRectangle() : this.options.getRectangle();\n const clickInText = RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), textRec);\n const isAttached = (event.target as HTMLElement).closest('.plait-board-attached');\n if (!clickInText && !isAttached) {\n // handle composition input state, like: Chinese IME Composition Input\n timer(0).subscribe(() => {\n exitCallback();\n });\n }\n });\n const keydown$ = fromEvent<KeyboardEvent>(document, 'keydown').subscribe((event: KeyboardEvent) => {\n if (event.isComposing) {\n return;\n }\n if (event.key === 'Escape' || event.key === 'Tab' || (exitEdit ? exitEdit(event) : false)) {\n event.preventDefault();\n event.stopPropagation();\n exitCallback();\n return;\n }\n });\n const exitCallback = () => {\n this.updateRectangle();\n mousedown$.unsubscribe();\n keydown$.unsubscribe();\n IS_TEXT_EDITABLE.set(this.board, false);\n MERGING.set(this.board, false);\n callback && callback();\n const props = {\n readonly: true\n };\n this.textComponentRef.update(props);\n this.isEditing = false;\n };\n return exitCallback;\n }\n\n getSize = (element?: Element, maxWidth?: number) => {\n const computedStyle = window.getComputedStyle(this.foreignObject.children[0]);\n const fontFamily = computedStyle.fontFamily;\n const fontSize = parseFloat(computedStyle.fontSize);\n const target = element || (this.editor.children[0] as Element);\n return measureElement(\n target,\n {\n fontSize: fontSize,\n fontFamily\n },\n maxWidth || this.options.getMaxWidth!()\n );\n };\n\n getText = () => {\n return this.editor.children[0];\n };\n\n destroy() {\n this.g?.remove();\n this.textComponentRef?.destroy();\n }\n}\n\nexport const buildCompositionData = (editor: Editor, data: string) => {\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [textNode, textPath] = Editor.node(editor, editor.selection) as NodeEntry<Text>;\n const offset = editor.selection.anchor.offset;\n const clonedElement = JSON.parse(JSON.stringify(editor.children[0]));\n const root = { children: [clonedElement] };\n const newTextString = textNode.text.slice(0, offset + 1) + data + textNode.text.slice(offset + 1);\n const clonedTextNode = Node.get(root, textPath) as Text;\n clonedTextNode.text = newTextString;\n return root;\n }\n return null;\n};\n","import { PlaitBoard, WithPluginOptions } from '@plait/core';\nimport { Editor, Operation, Element as SlateElement } from 'slate';\nimport { RenderComponentRef } from '../core/render-component';\n\nexport interface PlaitTextBoard {\n renderText: (container: Element | DocumentFragment, props: TextProps) => TextComponentRef;\n}\n\nexport const withText = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & PlaitTextBoard;\n\n newBoard.renderText = (container: Element | DocumentFragment, props: TextProps) => {\n throw new Error('No implementation for renderText method.');\n };\n return newBoard;\n};\n\nexport type TextComponentRef = RenderComponentRef<TextProps>;\n\nexport interface TextProps {\n board: PlaitBoard;\n text: SlateElement;\n textPlugins?: TextPlugin[];\n readonly?: boolean;\n onChange?: (data: TextChangeData) => void;\n afterInit?: (data: Editor) => void;\n onComposition?: (data: CompositionEvent) => void;\n}\n\nexport type TextChangeData = { newText: SlateElement; operations: Operation[] };\n\nexport interface WithTextPluginOptions extends WithPluginOptions {\n textPlugins?: TextPlugin[];\n}\n\nexport type TextPlugin = (editor: Editor) => Editor;\n","import { BaseElement, Editor } from 'slate';\n\nexport enum Alignment {\n left = 'left',\n center = 'center',\n right = 'right'\n}\n\nexport type CustomText = {\n bold?: boolean;\n italic?: boolean;\n strike?: boolean;\n code?: boolean;\n text: string;\n underlined?: boolean;\n color?: string;\n [`font-size`]?: string;\n};\n\nexport interface LinkElement extends BaseElement {\n type: 'link';\n url: string;\n}\n\nexport interface ParagraphElement extends BaseElement {\n align?: Alignment;\n}\n\nexport type CustomElement = ParagraphElement | LinkElement;\n","import { PlaitBoard, PlaitElement, RectangleClient } from '@plait/core';\nimport { RenderComponentRef } from '../core/render-component';\nimport { CommonImageItem } from '../utils/image';\n\nexport interface PlaitImageBoard {\n renderImage: (container: Element | DocumentFragment, props: ImageProps) => ImageComponentRef;\n}\n\nexport const withImage = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & PlaitImageBoard;\n\n newBoard.renderImage = (container: Element | DocumentFragment, props: ImageProps) => {\n throw new Error('No implementation for renderImage method.');\n };\n return newBoard;\n};\n\nexport type ImageComponentRef = RenderComponentRef<ImageProps>;\n\nexport interface ImageProps {\n board: PlaitBoard;\n imageItem: CommonImageItem;\n element: PlaitElement;\n isFocus?: boolean;\n getRectangle: () => RectangleClient;\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generators';\nexport * from './transforms';\nexport * from './shapes';\nexport * from './plugins';\nexport * from './utils';\nexport * from './image/image-base.component';\nexport * from './core';\nexport * from './algorithms';\nexport * from './text';\nexport * from './image';\nexport * from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Transforms"],"mappings":"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"}
1
+ {"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/utils/drawing/resize-handle.ts","../../../packages/common/src/utils/drawing/rotate-handle.ts","../../../packages/common/src/generators/active.generator.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/utils/vector.ts","../../../packages/common/src/utils/math.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/direction.ts","../../../packages/common/src/utils/default-orthogonal-routing.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/utils/creation-mode.ts","../../../packages/common/src/utils/text.ts","../../../packages/common/src/utils/image.ts","../../../packages/common/src/algorithms/data-structures/priority-queue.ts","../../../packages/common/src/algorithms/a-star.ts","../../../packages/common/src/algorithms/data-structures/graph.ts","../../../packages/common/src/utils/elbow-line-route.ts","../../../packages/common/src/utils/memorize.ts","../../../packages/common/src/utils/rotate.ts","../../../packages/common/src/utils/elements.ts","../../../packages/common/src/utils/animate.ts","../../../packages/common/src/image/image.generator.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/transforms/align.ts","../../../packages/common/src/shapes/common.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/generators/group.generator.ts","../../../packages/common/src/core/element-ref.ts","../../../packages/common/src/core/element-flavour.ts","../../../packages/common/src/core/group.component.ts","../../../packages/common/src/plugins/with-group.ts","../../../packages/common/src/image/image-base.component.ts","../../../packages/common/src/text/text-measure.ts","../../../packages/common/src/text/text-manage.ts","../../../packages/common/src/text/with-text.ts","../../../packages/common/src/text/types.ts","../../../packages/common/src/image/with-image.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 = 9;\nexport const WithTextPluginKey = 'plait-text-plugin-key';\nexport const DEFAULT_ROUTE_MARGIN = 30;\nexport const TRANSPARENT = 'transparent';\nexport const ROTATE_HANDLE_DISTANCE_TO_ELEMENT = 20;\nexport const ROTATE_HANDLE_SIZE = 18;\nexport const DEFAULT_FONT_FAMILY = 'PingFangSC-Regular, \"PingFang SC\"';\nexport const DEFAULT_FILL = 'none';\n","export enum MediaKeys {\n image = 'image'\n}\n\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\n\nexport const acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp'];\n\nexport const WithCommonPluginKey = 'plait-common-plugin-key';\n","export enum ResizeHandle {\n nw = '0',\n n = '4',\n ne = '1',\n e = '5',\n se = '2',\n s = '6',\n sw = '3',\n w = '7'\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitGroupElement,\n RectangleClient,\n getElementsInGroup,\n getSelectionAngle,\n setAngleForG\n} from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {\n prepend?: boolean;\n}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions,\n P extends PlaitBoard = PlaitBoard\n> {\n g?: SVGGElement;\n\n protected options?: V;\n\n constructor(protected board: P, options?: V) {\n this.options = options;\n }\n\n processDrawing(element: T, parentG: SVGGElement, data?: K) {\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.draw(element, data);\n if (g) {\n if (this.g && parentG.contains(this.g)) {\n this.g.replaceWith(g);\n } else {\n if (this.g) {\n this.g.remove();\n }\n if (this.options?.prepend) {\n parentG.prepend(g);\n } else {\n parentG.appendChild(g);\n }\n }\n this.g = g;\n const rect = this.board.getRectangle(element);\n if (rect) {\n let angle;\n if (PlaitGroupElement.isGroup(element)) {\n angle = getSelectionAngle(getElementsInGroup(this.board, element, true));\n } else {\n angle = element.angle;\n }\n if (angle) {\n setAngleForG(g, RectangleClient.getCenterPoint(rect), angle);\n }\n }\n } else {\n this.destroy();\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n } else {\n this.destroy();\n }\n }\n\n /**\n * abstract function\n */\n protected abstract canDraw(element: T, data?: K): boolean;\n\n /**\n * abstract function\n */\n protected abstract draw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n this.g = undefined;\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 { RESIZE_HANDLE_CLASS_NAME, PlaitBoard, Point, drawCircle } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../../constants/default';\n\nexport const drawHandle = (board: PlaitBoard, centerPoint: Point) => {\n const options: Options = { stroke: '#99999995', strokeWidth: 2, fill: '#FFF', fillStyle: 'solid' };\n const handleG = drawCircle(PlaitBoard.getRoughSVG(board), centerPoint, RESIZE_HANDLE_DIAMETER, options);\n handleG.classList.add(RESIZE_HANDLE_CLASS_NAME);\n return handleG;\n};\n\nexport function drawFillPrimaryHandle(board: PlaitBoard, point: Point) {\n return drawCircle(PlaitBoard.getRoughSVG(board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: '#FFFFFF',\n strokeWidth: 1,\n fill: `${PRIMARY_COLOR}`,\n fillStyle: 'solid'\n });\n}\n\nexport function drawPrimaryHandle(board: PlaitBoard, point: Point) {\n return drawCircle(PlaitBoard.getRoughSVG(board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: `${PRIMARY_COLOR}`,\n strokeWidth: 2,\n fill: `#FFFFFF`,\n fillStyle: 'solid'\n });\n}\n","import { PlaitBoard, RectangleClient, createG, setStrokeLinecap } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { ROTATE_HANDLE_DISTANCE_TO_ELEMENT, ROTATE_HANDLE_SIZE } from '../../constants';\n\nconst rotateHandleRadius = 6;\n\nexport const drawRotateHandle = (board: PlaitBoard, rectangle: RectangleClient) => {\n const options: Options = { stroke: '#333', strokeWidth: 1, fillStyle: 'solid' };\n const handleCenterPoint = [\n rectangle.x - ROTATE_HANDLE_DISTANCE_TO_ELEMENT - ROTATE_HANDLE_SIZE / 2,\n rectangle.y + rectangle.height + ROTATE_HANDLE_DISTANCE_TO_ELEMENT + ROTATE_HANDLE_SIZE / 2\n ];\n const rs = PlaitBoard.getRoughSVG(board);\n const handleG = createG();\n const line = rs.path(\n `M ${handleCenterPoint[0] + rotateHandleRadius} ${handleCenterPoint[1]} A ${rotateHandleRadius} ${rotateHandleRadius}, 0, 1, 0, ${\n handleCenterPoint[0]\n } ${handleCenterPoint[1] + rotateHandleRadius}`,\n options\n );\n const arrow = rs.polygon(\n [\n [handleCenterPoint[0], handleCenterPoint[1] + rotateHandleRadius - 2],\n [handleCenterPoint[0], handleCenterPoint[1] + rotateHandleRadius + 2],\n [handleCenterPoint[0] + 4.5, handleCenterPoint[1] + rotateHandleRadius]\n ],\n { ...options, fill: '#333' }\n );\n setStrokeLinecap(arrow, 'round');\n handleG.append(line, arrow);\n return handleG;\n};\n","import { PlaitBoard, PlaitElement, RectangleClient, SELECTION_RECTANGLE_CLASS_NAME, createG, drawRectangle } from '@plait/core';\nimport { Generator, GeneratorOptions } from './generator';\nimport { PRIMARY_COLOR } from '../constants/default';\nimport { drawHandle } from '../utils/drawing';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T> & GeneratorOptions\n> {\n static key = 'active-generator';\n\n hasResizeHandle = false;\n\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 draw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n const rectangle = this.options.getRectangle(element);\n\n const delta = this.options.getStrokeWidth();\n const activeRectangle = RectangleClient.inflate(rectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: delta\n });\n\n activeG.append(strokeG);\n strokeG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // draw resize handle\n RectangleClient.getCornerPoints(activeRectangle).forEach(corner => {\n const cornerHandleG = drawHandle(this.board, corner);\n activeG.append(cornerHandleG);\n });\n } else {\n this.hasResizeHandle = false;\n }\n return activeG;\n }\n}\n","import {\n PlaitBoard,\n Point,\n RectangleClient,\n ResizeCursorClass,\n setDragging,\n RESIZE_CURSORS,\n rotatePoints,\n PlaitElement,\n getSelectedElements,\n isSelectionMoving\n} from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { PlaitElementOrArray, ResizeRef } from '../types/resize';\n\nexport const getResizeHandleByIndex = (index: number) => {\n return `${index}` as ResizeHandle;\n};\n\nexport const getIndexByResizeHandle = (resizeHandle: ResizeHandle) => {\n return Number(resizeHandle);\n};\n\nexport const getSymmetricHandleIndex = (board: PlaitBoard, index: number) => {\n const originIndex = isEdgeHandle(board, getResizeHandleByIndex(index)) ? index - 4 : index;\n let originSymmetricHandleIndex = originIndex + 2;\n if (originSymmetricHandleIndex >= 4) {\n originSymmetricHandleIndex = originSymmetricHandleIndex - 4;\n }\n return isEdgeHandle(board, getResizeHandleByIndex(index)) ? originSymmetricHandleIndex + 4 : originSymmetricHandleIndex;\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n case 2:\n return ResizeCursorClass.nwse;\n case 1:\n case 3:\n return ResizeCursorClass.nesw;\n case 4:\n case 6:\n return ResizeCursorClass.ns;\n case 5:\n case 7:\n return ResizeCursorClass.ew;\n default:\n return null;\n }\n};\n\nexport const getRotatedResizeCursorClassByAngle = (cursor: ResizeCursorClass, angle: number) => {\n const index = RESIZE_CURSORS.indexOf(cursor);\n if (index >= 0) {\n const temp = Math.round(angle / (Math.PI / 4));\n cursor = RESIZE_CURSORS[(index + temp) % RESIZE_CURSORS.length] as ResizeCursorClass;\n }\n return cursor;\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number) => {\n const corners = RectangleClient.getCornerPoints(rectangle);\n const refs = corners.map((corner, index: number) => {\n return {\n rectangle: {\n x: corner[0] - diameter / 2,\n y: corner[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n handle: getResizeHandleByIndex(index) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n };\n });\n const rectangles = getResizeSideRectangles(corners, diameter / 2);\n refs.push(\n ...rectangles.map((rectangle, index) => {\n return {\n rectangle,\n handle: getResizeHandleByIndex(index + 4) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index + 4) as ResizeCursorClass\n };\n })\n );\n return refs;\n};\n\nexport const getResizeHandlePointByIndex = (rectangle: RectangleClient, index: number) => {\n if (index <= 3) {\n const corners = RectangleClient.getCornerPoints(rectangle);\n return corners[index];\n } else {\n const edgeCenterPoints = RectangleClient.getEdgeCenterPoints(rectangle);\n return edgeCenterPoints[index - 4];\n }\n};\n\nconst getResizeSideRectangles = (cornerPoints: Point[], offset: number): RectangleClient[] => {\n const result = [];\n for (let i = 0; i < cornerPoints.length; i++) {\n let rectangle = RectangleClient.getRectangleByPoints([cornerPoints[i], cornerPoints[(i + 1) % 4]]);\n const arr = new Array(2).fill(0);\n arr[(i + 1) % 2] = offset / 2;\n rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);\n result.push(rectangle);\n }\n return result;\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, ResizeRef<any, any, any>>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const isResizingByCondition = <T extends PlaitElementOrArray, K>(\n board: PlaitBoard,\n match: (resizeRef: ResizeRef<T, K>) => boolean\n) => {\n return isResizing(board) && match(IS_RESIZING.get(board)!);\n};\n\nexport const addResizing = <T extends PlaitElementOrArray, K, P>(board: PlaitBoard, resizeRef: ResizeRef<T, K, P>, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, resizeRef);\n setDragging(board, true);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.delete(board);\n setDragging(board, false);\n};\n\nexport const isEdgeHandle = (board: PlaitBoard, handle: ResizeHandle) => {\n const index = getIndexByResizeHandle(handle);\n if (index >= 4) {\n return true;\n } else {\n return false;\n }\n};\n\nexport const isCornerHandle = (board: PlaitBoard, handle: ResizeHandle) => {\n return !isEdgeHandle(board, handle);\n};\n\n// 处理元素先旋转后resize导致的位置偏移\nexport const resetPointsAfterResize = (\n originRectangle: RectangleClient,\n currentRectangle: RectangleClient,\n originSelectionCenterPoint: Point,\n currentSelectionCenterPoint: Point,\n angle: number\n): [Point, Point] => {\n const correctSelectionCenterPoint = rotatePoints([currentSelectionCenterPoint], originSelectionCenterPoint, angle)[0];\n const rotatedElementCenterPoint = rotatePoints(\n [RectangleClient.getCenterPoint(currentRectangle) as Point],\n originSelectionCenterPoint,\n angle\n )[0];\n\n const currentPoints = RectangleClient.getPoints(currentRectangle);\n const originRectangleCenterPoint = RectangleClient.getCenterPoint(originRectangle);\n\n const correctElementCenterPoint = rotatePoints([rotatedElementCenterPoint], correctSelectionCenterPoint, -angle)[0];\n\n const rotatedPoints = rotatePoints(currentPoints, originRectangleCenterPoint, angle);\n return rotatePoints(rotatedPoints, correctElementCenterPoint, -angle) as [Point, Point];\n};\n\nexport const canResize = (board: PlaitBoard, element: PlaitElement) => {\n if (PlaitBoard.hasBeenTextEditing(board) || isSelectionMoving(board)) {\n return false;\n }\n const selectedElements = getSelectedElements(board);\n return selectedElements.length === 1 && selectedElements[0] === element;\n};\n","import { Point, Vector } from '@plait/core';\n\nexport function getUnitVectorByPointAndPoint(point1: Point, point2: Point): Point {\n const deltaX = point2[0] - point1[0];\n const deltaY = point2[1] - point1[1];\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n // Avoid division by zero if the points are the same\n if (distance === 0) {\n throw new Error('Points must not be the same for a unit vector calculation.');\n }\n // Calculate the unit vector components\n const unitX = deltaX / distance;\n const unitY = deltaY / distance;\n\n return [unitX, unitY];\n}\n\nexport function getPointByVectorComponent(point: Point, vector: Vector, component: number): Point {\n const distance = Math.hypot(vector[0], vector[1]);\n return [point[0] + (vector[0] / distance) * component, point[1] + (vector[1] / distance) * component];\n}\n\nexport function getPointByVectorDirectionComponent(point: Point, unitVector: Vector, directionComponent: number, isHorizontal: boolean) {\n if (isHorizontal) {\n return [point[0] + directionComponent, point[1] + (directionComponent / unitVector[0]) * unitVector[1]] as Point;\n } else {\n return [point[0] + (directionComponent / unitVector[1]) * unitVector[0], point[1] + directionComponent] as Point;\n }\n}\n\nexport function rotateVectorAnti90(vector: Vector): Vector {\n const x = vector[0];\n const y = vector[1];\n const rotatedX = y;\n const rotatedY = -x;\n return [rotatedX, rotatedY];\n}\n\nexport function rotateVector(vector: Vector, angle: number): Vector {\n if (!angle) {\n return vector;\n }\n const x = vector[0];\n const y = vector[1];\n const rotatedX = x * Math.cos(angle) - y * Math.sin(angle);\n const rotatedY = x * Math.sin(angle) + y * Math.cos(angle);\n return [rotatedX, rotatedY];\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { getPointByVectorDirectionComponent, getUnitVectorByPointAndPoint } from './vector';\n\nexport function isPointOnSegment(point: Point, startPoint: Point, endPoint: Point) {\n const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);\n const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;\n}\n\nexport const getCrossingPointsBetweenPointAndSegment = (point: Point, startPoint: Point, endPoint: Point) => {\n const result: Point[] = [];\n const xRange = [Math.min(startPoint[0], endPoint[0]), Math.max(startPoint[0], endPoint[0])];\n const yRange = [Math.min(startPoint[1], endPoint[1]), Math.max(startPoint[1], endPoint[1])];\n const unitVector = getUnitVectorByPointAndPoint(startPoint, endPoint);\n if (point[0] >= xRange[0] && point[0] <= xRange[1]) {\n const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[0] - startPoint[0], true) as Point;\n result.push(crossingPoint);\n } else if (point[1] >= yRange[0] && point[1] <= yRange[1]) {\n const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[1] - startPoint[1], false) as Point;\n result.push(crossingPoint);\n }\n return result;\n};\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { isPointOnSegment } from './math';\n\nexport function getPointOnPolyline(points: Point[], ratio: number) {\n const totalLength = calculatePolylineLength(points);\n const targetDistance = totalLength * ratio;\n\n let accumulatedDistance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);\n\n if (accumulatedDistance + segmentLength >= targetDistance) {\n const remainingDistance = targetDistance - accumulatedDistance;\n const ratioInSegment = remainingDistance / segmentLength;\n\n const targetX = x1 + (x2 - x1) * ratioInSegment;\n const targetY = y1 + (y2 - y1) * ratioInSegment;\n return [targetX, targetY];\n }\n\n accumulatedDistance += segmentLength;\n }\n\n return points[points.length - 1];\n}\n\nexport function calculatePolylineLength(points: Point[]) {\n let length = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n length += distanceBetweenPointAndPoint(x1, y1, x2, y2);\n }\n return length;\n}\n\nexport function getRatioByPoint(points: Point[], point: Point) {\n const totalLength = calculatePolylineLength(points);\n let distance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const isOverlap = isPointOnSegment(point, points[i], points[i + 1]);\n if (isOverlap) {\n distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);\n return distance / totalLength;\n } else {\n distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);\n }\n }\n throw new Error('Cannot get ratio by point');\n}\n\nexport const removeDuplicatePoints = (points: Point[]) => {\n const newArray: Point[] = [];\n points.forEach(point => {\n const index = newArray.findIndex(otherPoint => {\n return Point.isEquals(point, otherPoint);\n });\n if (index === -1) newArray.push(point);\n });\n return newArray;\n};\n\nexport function simplifyOrthogonalPoints(points: Point[]) {\n if (points.length <= 2) return points;\n let simplifiedPoints: Point[] = [points[0]];\n for (let i = 1; i < points.length - 1; i++) {\n const previous = points[i - 1];\n const current = points[i];\n const next = points[i + 1];\n const isTurn = !(Point.isOverHorizontal([previous, current, next]) || Point.isOverVertical([previous, current, next]));\n if (isTurn) {\n simplifiedPoints.push(current);\n }\n }\n simplifiedPoints.push(points[points.length - 1]);\n return simplifiedPoints;\n}\n\nexport const getExtendPoint = (source: Point, target: Point, extendDistance: number): Point => {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n const isEqual = Point.isEquals(source, target);\n const sin = isEqual ? 1 : (target[1] - source[1]) / distance;\n const cos = isEqual ? 1 : (target[0] - source[0]) / distance;\n return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];\n};\n","import { Direction, DirectionFactor, Point, PointOfRectangle, Vector } from '@plait/core';\n\nconst handleDirectionFactors = {\n [Direction.left]: { x: -1, y: 0 },\n [Direction.right]: { x: 1, y: 0 },\n [Direction.top]: { x: 0, y: -1 },\n [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getOppositeDirection(direction: Direction) {\n switch (direction) {\n case Direction.left:\n return Direction.right;\n case Direction.right:\n return Direction.left;\n case Direction.top:\n return Direction.bottom;\n case Direction.bottom:\n return Direction.top;\n }\n}\n\nexport function getDirectionByPointOfRectangle(point: PointOfRectangle): Direction | undefined {\n if (point[0] === 0) {\n return Direction.left;\n }\n if (point[0] === 1) {\n return Direction.right;\n }\n if (point[1] === 0) {\n return Direction.top;\n }\n if (point[1] === 1) {\n return Direction.bottom;\n }\n return undefined;\n}\n\n/**\n * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system\n * vector[0] and vector[1] are the x and y components of the vector respectively.\n * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.\n * if the vector has two directions, the function will return the string in which direction it is closer.\n */\nexport function getDirectionByVector(vector: Vector): Direction | null {\n const x = vector[0];\n const y = vector[1];\n if (x === 0 && y === 0) {\n return null;\n }\n if (x === 0) {\n return y > 0 ? Direction.bottom : Direction.top;\n }\n if (y === 0) {\n return x > 0 ? Direction.right : Direction.left;\n }\n const angle = Math.atan2(y, x);\n if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {\n return Direction.right;\n } else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {\n return Direction.bottom;\n } else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {\n return Direction.top;\n } else {\n return Direction.left;\n }\n}\n\nexport function getDirectionBetweenPointAndPoint(source: Point, target: Point) {\n if (source[0] === target[0]) {\n if (source[1] >= target[1]) {\n return Direction.top;\n } else {\n return Direction.bottom;\n }\n }\n if (source[1] === target[1]) {\n if (source[0] >= target[0]) {\n return Direction.left;\n } else {\n return Direction.right;\n }\n }\n throw new Error('can not match direction');\n}\n\nexport function getDirectionFactor(direction: Direction) {\n return handleDirectionFactors[direction];\n}\n\nexport function getDirectionFactorByDirectionComponent(directionComponent: number): DirectionFactor {\n const directionFactor = directionComponent === 0 ? directionComponent : directionComponent / Math.abs(directionComponent);\n return directionFactor as DirectionFactor;\n}\n","// Credits to xyflow\n// https://github.com/xyflow/xyflow/blob/main/packages/system/src/utils/edges/smoothstep-edge.ts\n\nimport { Direction, Point } from \"@plait/core\";\nimport { getDirectionFactor } from \"./direction\";\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n const sourceDirectionFactors = getDirectionFactor(sourcePosition);\n const targetDFs = getDirectionFactor(targetPosition);\n const sourceGapped: Point = [source[0] + sourceDirectionFactors.x * offset, source[1] + sourceDirectionFactors.y * offset];\n const targetGapped: Point = [target[0] + targetDFs.x * offset, target[1] + targetDFs.y * offset];\n const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n sourceX: source[0],\n sourceY: source[1],\n targetX: target[0],\n targetY: target[1]\n });\n // opposite handle positions, default case\n if (sourceDirectionFactors[dirAccessor] * targetDFs[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n [centerX, sourceGapped[1]],\n [centerX, targetGapped[1]]\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n [sourceGapped[0], centerY],\n [targetGapped[0], centerY]\n ];\n if (sourceDirectionFactors[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDirectionFactors.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDirectionFactors.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like right -> bottom for example\n let flipSourceTarget;\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n const isSameDir = sourceDirectionFactors[dirAccessor] === targetDFs[dirAccessor === 'x' ? 'y' : 'x'];\n const sourceGtTarget = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTarget = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n flipSourceTarget =\n (sourceDirectionFactors[dirAccessor] === 1 && ((!isSameDir && sourceGtTarget) || (isSameDir && sourceLtTarget))) ||\n (sourceDirectionFactors[dirAccessor] !== 1 && ((!isSameDir && sourceLtTarget) || (isSameDir && sourceGtTarget)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n return [source, sourceGapped, ...points, targetGapped, target];\n};\n\nconst getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nfunction getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY\n}: {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n}): [number, number, number, number] {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}","import { hotkeys } from '@plait/core';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n return event.code === 'Space';\n};\n\nexport const isDelete = (event: KeyboardEvent) => {\n return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);\n};\n","import { PlaitBoard } from '@plait/core';\n\nexport enum BoardCreationMode {\n 'dnd' = 'dnd',\n 'drawing' = 'drawing'\n}\n\nconst BOARD_TO_CREATION_MODE: WeakMap<PlaitBoard, BoardCreationMode> = new WeakMap();\n\nexport const getCreationMode = (board: PlaitBoard) => {\n return BOARD_TO_CREATION_MODE.get(board);\n};\n\nexport const setCreationMode = (board: PlaitBoard, mode: BoardCreationMode) => {\n BOARD_TO_CREATION_MODE.set(board, mode);\n};\n\nexport const isDndMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.dnd;\n};\n\nexport const isDrawingMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.drawing;\n};\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { Editor, Node, Element } from 'slate';\nimport { TextManage } from '../text/text-manage';\nimport { Alignment, CustomText, ParagraphElement } from '../text/types';\n\nexport interface TextInterface {\n getTextEditors: (board: PlaitBoard, elements?: PlaitElement[]) => Editor[] | undefined;\n findFirstTextEditor: (board: PlaitBoard) => null;\n getFirstTextEditor: (element: PlaitElement) => Editor;\n getTextEditorsByElement: (element: PlaitElement) => Editor[];\n getEditingTextEditor: (board: PlaitBoard, elements?: PlaitElement[]) => Editor | undefined\n}\n\nexport const getTextManages = (element: PlaitElement) => {\n return ELEMENT_TO_TEXT_MANAGES.get(element) || [];\n};\n\nexport const getFirstTextManage = (element: PlaitElement) => {\n const textManage = getTextManages(element)[0];\n if (!textManage) {\n console.warn('can not find textManage');\n }\n return textManage;\n};\n\nexport const getTextEditorsByElement: TextInterface['getTextEditorsByElement'] = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.editor;\n });\n};\n\nexport const getFirstTextEditor: TextInterface['getFirstTextEditor'] = (element: PlaitElement) => {\n const textEditor = getTextEditorsByElement(element)[0];\n if (!textEditor) {\n console.warn('can not find textManage');\n }\n return textEditor;\n};\n\nexport const findFirstTextEditor: TextInterface['findFirstTextEditor'] = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board);\n let firstEditor: Editor | null = null;\n selectedElements.forEach(element => {\n const editors = getTextEditorsByElement(element);\n if (!firstEditor && editors && editors.length > 0) {\n firstEditor = editors[0];\n }\n });\n return firstEditor;\n};\n\nexport const getElementsText = (elements: PlaitElement[]) => {\n return elements\n .map(item => {\n try {\n const editors = getTextEditorsByElement(item);\n if (editors.length) {\n return editors\n .map(editor => {\n const textsEntry = Node.texts(editor);\n return Array.from(textsEntry).reduce((total, text) => (total += text[0].text), '');\n })\n .join(' ');\n }\n return '';\n } catch (error) {\n return '';\n }\n })\n .filter(item => item)\n .join(' ');\n};\n\nexport const getTextEditors: TextInterface['getTextEditors'] = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements || getSelectedElements(board);\n if (selectedElements.length) {\n const textManages: TextManage[] = [];\n selectedElements.forEach(item => {\n textManages.push(...getTextManages(item));\n });\n const editingTextManage = textManages.find(textManage => textManage.isEditing);\n if (editingTextManage) {\n return [editingTextManage.editor];\n }\n return textManages.map(item => {\n return item.editor;\n });\n }\n return undefined;\n};\n\nexport const getEditingTextEditor: TextInterface['getEditingTextEditor'] = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements || getSelectedElements(board);\n const textManages: TextManage[] = [];\n selectedElements.forEach(item => {\n textManages.push(...getTextManages(item));\n });\n const editingTextManage = textManages.find(textManage => textManage.isEditing);\n if (editingTextManage) {\n return editingTextManage.editor;\n }\n return undefined;\n};\n\nexport const buildText = (text: string | Element, align?: Alignment, properties?: Partial<CustomText>) => {\n properties = properties || {};\n const plaitText = typeof text === 'string' ? { children: [{ text, ...properties }] } : text;\n if (align) {\n (plaitText as ParagraphElement).align = align;\n }\n return plaitText;\n};\n\nexport const getLineHeightByFontSize = (fontSize: number) => {\n if (fontSize === 14) {\n return 20;\n }\n if (fontSize === 18) {\n return 25;\n }\n return fontSize * 1.5;\n};\n\nexport const ELEMENT_TO_TEXT_MANAGES: WeakMap<PlaitElement, TextManage[]> = new WeakMap();\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\n}\n\nexport const selectImage = (\n board: PlaitBoard,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void,\n acceptImageTypes: string[] = ['png', 'jpeg', 'gif', 'bmp']\n) => {\n const inputFile = document.createElement('input');\n inputFile.setAttribute('type', 'file');\n const acceptImageTypesString = '.' + acceptImageTypes.join(',.');\n inputFile.setAttribute('accept', acceptImageTypesString);\n inputFile.onchange = (event: Event) => {\n buildImage(board, (event.target as any).files[0], defaultImageWidth, handle);\n };\n inputFile.click();\n};\n\nexport const buildImage = async (\n board: PlaitBoard,\n imageFile: File,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void\n) => {\n let width = 0,\n height = 0;\n await getImageSize(imageFile, defaultImageWidth).then((value: { width: number; height: number }) => {\n width = value.width;\n height = value.height;\n });\n\n let imageItem = null;\n const url = URL.createObjectURL(imageFile);\n const context = PlaitBoard.getBoardContext(board);\n context.setUploadingFile({ url, file: imageFile });\n\n imageItem = {\n url,\n width,\n height\n };\n handle(imageItem);\n};\n\nfunction getImageSize(file: File, defaultImageWidth: number): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.src = URL.createObjectURL(file);\n\n image.onload = function() {\n const width = defaultImageWidth;\n const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;\n resolve(\n image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight }\n );\n };\n });\n}\n\nconst BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap<PlaitBoard, PlaitElement>();\n\nexport const getElementOfFocusedImage = (board: PlaitBoard) => {\n return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);\n};\n\nexport const addElementOfFocusedImage = (board: PlaitBoard, element: PlaitElement) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);\n};\n\nexport const removeElementOfFocusedImage = (board: PlaitBoard) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);\n};\n","import { PointNode } from './graph';\n\nexport class PriorityQueue {\n list: { node: PointNode; priority: number }[];\n\n constructor() {\n this.list = [];\n }\n\n enqueue(item: { node: PointNode; priority: number }) {\n this.list.push(item);\n this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);\n }\n\n dequeue() {\n return this.list.shift();\n }\n}\n","import { Point } from '@plait/core';\nimport { PointGraph, PointNode } from './data-structures/graph';\nimport { PriorityQueue } from './data-structures/priority-queue';\n\nexport class AStar {\n cameFrom: Map<PointNode, PointNode>;\n\n constructor(private graph: PointGraph) {\n this.cameFrom = new Map<PointNode, PointNode>();\n }\n\n heuristic(a: Point, b: Point) {\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n }\n\n search(start: Point, end: Point, previousStart: Point) {\n const frontier = new PriorityQueue();\n const startNode = this.graph.get(start);\n this.cameFrom = new Map<PointNode, PointNode>();\n const costSoFar = new Map<PointNode, number>();\n costSoFar.set(startNode!, 0);\n frontier.enqueue({ node: startNode!, priority: 0 });\n while (frontier.list.length > 0) {\n var current = frontier.dequeue();\n\n if (!current) {\n throw new Error(`can't find current`);\n }\n const currentPoint = current!.node.data;\n if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {\n break;\n }\n current.node.adjacentNodes.forEach(next => {\n let newCost = costSoFar.get(current!.node)! + this.heuristic(next.data, current!.node.data);\n const previousNode = this.cameFrom.get(current!.node);\n // Inflection point weight, if an inflection point occurs, cost + 1 to avoid the inflection point path\n // Three points on a line to determine whether there is an inflection point\n const previousPoint = previousNode ? previousNode.data : previousStart;\n const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];\n const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];\n if (!x && !y) {\n newCost = newCost + 1;\n }\n if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next)!)) {\n costSoFar.set(next, newCost);\n const priority = newCost + this.heuristic(next.data, end);\n frontier.enqueue({ node: next, priority });\n this.cameFrom.set(next, current!.node);\n }\n });\n }\n }\n\n getRoute(start: Point, end: Point) {\n const result = [];\n let temp = end;\n while (temp[0] !== start[0] || temp[1] !== start[1]) {\n const node = this.graph.get(temp);\n const preNode = this.cameFrom.get(node!);\n result.unshift(preNode!.data);\n temp = preNode!.data;\n }\n return result;\n }\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\n\nexport class PointNode {\n public distance = Number.MAX_SAFE_INTEGER;\n public adjacentNodes: PointNode[] = [];\n constructor(public data: Point) {}\n}\n\nexport class PointGraph {\n private index: { [x: string]: { [y: string]: PointNode } } = {};\n\n add(p: Point) {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (!(xs in this.index)) {\n this.index[xs] = {};\n }\n if (!(ys in this.index[xs])) {\n this.index[xs][ys] = new PointNode(p);\n }\n }\n connect(a: Point, b: Point) {\n const nodeA = this.get(a);\n const nodeB = this.get(b);\n\n if (!nodeA || !nodeB) {\n throw new Error(`A point was not found`);\n }\n\n nodeA.adjacentNodes.push(nodeB);\n }\n\n has(p: Point): boolean {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n return xs in this.index && ys in this.index[xs];\n }\n\n get(p: Point): PointNode | null {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (xs in this.index && ys in this.index[xs]) {\n return this.index[xs][ys];\n }\n\n return null;\n }\n}\n","import { Direction, PlaitBoard, Point, RectangleClient, createDebugGenerator, DebugGenerator } from '@plait/core';\nimport { removeDuplicatePoints, simplifyOrthogonalPoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nconst debugGenerator = createDebugGenerator('debug:plait:elbow-line-routing');\n\nexport interface ElbowLineRouteOptions {\n sourcePoint: Point;\n nextSourcePoint: Point;\n sourceRectangle: RectangleClient;\n sourceOuterRectangle: RectangleClient;\n targetPoint: Point;\n nextTargetPoint: Point;\n targetOuterRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface RouteAdjustOptions {\n centerX?: number;\n centerY?: number;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface AdjustOptions {\n parallelPaths: [Point, Point][];\n pointOfHit: Point;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport const generateElbowLineRoute = (options: ElbowLineRouteOptions, board?: PlaitBoard) => {\n const { nextSourcePoint, nextTargetPoint } = options;\n const points = getGraphPoints(options);\n const graph = createGraph(points);\n const aStar = new AStar(graph);\n aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);\n let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);\n route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];\n // Centerline correction: Correct the shortest path route based on the horizontal centerline/vertical centerline\n // 1. Find the horizontal center line (centerX)/vertical center line (centerY)\n // 2. Find the point that intersects centerX/centerY in route, and find the line segment parallel to centerX/centerY in route\n // 3. Construct a rectangle based on the intersection points and parallel lines found in the previous step.\n // 4. Determine whether the rectangle intersects with the element. If it does not intersect, the center line can be mapped based on the rectangle constructed in the previous step.\n // 5. Determine whether the path after mapping the center line meets the constraints (inflection point cannot be increased)\n const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);\n const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);\n const centerX = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);\n const centerY = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);\n route = routeAdjust(route, { centerX, centerY, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle }, board);\n return route;\n};\n\nexport const routeAdjust = (path: Point[], options: RouteAdjustOptions, board?: PlaitBoard) => {\n const { sourceRectangle, targetRectangle, centerX, centerY } = options;\n if (board) {\n debugGenerator.clear();\n }\n if (centerX !== undefined) {\n const optionsX = getAdjustOptions(path, centerX, true);\n const resultX =\n optionsX.pointOfHit &&\n adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle }, board);\n if (resultX) {\n path = resultX;\n }\n }\n if (centerY !== undefined) {\n const optionsY = getAdjustOptions(path, centerY, false);\n const resultY =\n optionsY.pointOfHit &&\n adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle }, board);\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions, board?: PlaitBoard): null | Point[] => {\n const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;\n let result = null;\n parallelPaths.forEach(parallelPath => {\n // Construct a rectangle\n const tempRectPoints = [pointOfHit, parallelPath[0], parallelPath[1]];\n // directly use getCornerPoints will bring the precision issue (eg: 263.6923375175286 - 57.130859375)\n const tempRect = RectangleClient.getRectangleByPoints(tempRectPoints);\n if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {\n const tempCorners = RectangleClient.getCornerPointsByPoints(tempRectPoints);\n if (board) {\n debugGenerator.drawRectangle(board, tempRect);\n }\n const indexRangeInPath: number[] = [];\n const indexRangeInCorner: number[] = [];\n route.forEach((point, index) => {\n const cornerResult = tempCorners.findIndex(corner => Point.isEquals(point, corner));\n if (cornerResult !== -1) {\n indexRangeInPath.push(index);\n indexRangeInCorner.push(cornerResult);\n }\n });\n const newPath = [...route];\n const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index)) as Point;\n const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;\n newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);\n const turnCount = simplifyOrthogonalPoints([...route]).length - 1;\n const simplifyPoints = simplifyOrthogonalPoints([...newPath]);\n // if (board) {\n // debugGenerator.drawLine(board, simplifyPoints);\n // }\n const newTurnCount = simplifyPoints.length - 1;\n if (newTurnCount <= turnCount) {\n result = newPath;\n }\n }\n return null;\n });\n return result;\n};\n\nconst getAdjustOptions = (path: Point[], centerOfAxis: number, isHorizontal: boolean) => {\n const parallelPaths: [Point, Point][] = [];\n let start: null | Point = null;\n let pointOfHit: null | Point = null;\n const axis = isHorizontal ? 0 : 1;\n\n for (let index = 0; index < path.length; index++) {\n const previous = path[index - 1];\n const current = path[index];\n if (start === null && previous && previous[axis] === current[axis]) {\n start = previous;\n }\n if (start !== null) {\n if (previous[axis] !== current[axis]) {\n parallelPaths.push([start, previous]);\n start = null;\n }\n }\n if (current[axis] === centerOfAxis) {\n pointOfHit = current;\n }\n }\n if (start) {\n parallelPaths.push([start, path[path.length - 1]]);\n }\n return { pointOfHit, parallelPaths };\n};\n\nexport const getGraphPoints = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;\n const x: number[] = [];\n const y: number[] = [];\n let result: Point[] = [];\n\n [sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {\n x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);\n y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);\n });\n const rectanglesX = [\n sourceOuterRectangle.x,\n sourceOuterRectangle.x + sourceOuterRectangle.width,\n targetOuterRectangle.x,\n targetOuterRectangle.x + targetOuterRectangle.width\n ].sort((a, b) => a - b);\n x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);\n const rectanglesY = [\n sourceOuterRectangle.y,\n sourceOuterRectangle.y + sourceOuterRectangle.height,\n targetOuterRectangle.y,\n targetOuterRectangle.y + targetOuterRectangle.height\n ].sort((a, b) => a - b);\n y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n const point: Point = [x[i], y[j]];\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n if (!isInSource && !isInTarget) {\n result.push(point);\n }\n }\n }\n result = removeDuplicatePoints(result).filter(point => {\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n return !isInSource && !isInTarget;\n });\n return result;\n};\n\nexport const createGraph = (points: Point[]) => {\n const graph = new PointGraph();\n const Xs: number[] = [];\n const Ys: number[] = [];\n points.forEach(p => {\n const x = p[0],\n y = p[1];\n if (Xs.indexOf(x) < 0) Xs.push(x);\n if (Ys.indexOf(y) < 0) Ys.push(y);\n graph.add(p);\n });\n Xs.sort((a, b) => a - b);\n Ys.sort((a, b) => a - b);\n const inHotIndex = (p: Point): boolean => graph.has(p);\n for (let i = 0; i < Xs.length; i++) {\n for (let j = 0; j < Ys.length; j++) {\n const point: Point = [Xs[i], Ys[j]];\n if (!inHotIndex(point)) continue;\n if (i > 0) {\n const otherPoint: Point = [Xs[i - 1], Ys[j]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n if (j > 0) {\n const otherPoint: Point = [Xs[i], Ys[j - 1]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n }\n }\n return graph;\n};\n\nexport const reduceRouteMargin = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const defaultOffset = DEFAULT_ROUTE_MARGIN;\n let sourceOffset: number[] = new Array(4).fill(defaultOffset);\n let targetOffset: number[] = new Array(4).fill(defaultOffset);\n const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);\n const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);\n if (leftToRight > 0 && leftToRight < defaultOffset * 2) {\n const offset = leftToRight / 2;\n sourceOffset[3] = offset;\n targetOffset[1] = offset;\n }\n\n if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {\n const offset = rightToLeft / 2;\n targetOffset[3] = offset;\n sourceOffset[1] = offset;\n }\n\n const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);\n const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);\n if (topToBottom > 0 && topToBottom < defaultOffset * 2) {\n const offset = topToBottom / 2;\n sourceOffset[0] = offset;\n targetOffset[2] = offset;\n }\n if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {\n const offset = bottomToTop / 2;\n sourceOffset[2] = offset;\n targetOffset[0] = offset;\n }\n return { sourceOffset, targetOffset };\n};\n\nexport const getNextPoint = (point: Point, outerRectangle: RectangleClient, direction: Direction): Point => {\n switch (direction) {\n case Direction.top: {\n return [point[0], outerRectangle.y];\n }\n case Direction.bottom: {\n return [point[0], outerRectangle.y + outerRectangle.height];\n }\n case Direction.right: {\n return [outerRectangle.x + outerRectangle.width, point[1]];\n }\n default: {\n return [outerRectangle.x, point[1]];\n }\n }\n};\n\nexport const getSourceAndTargetOuterRectangle = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const { sourceOffset, targetOffset } = reduceRouteMargin(sourceRectangle, targetRectangle);\n const sourceOuterRectangle = RectangleClient.expand(\n sourceRectangle,\n sourceOffset[3],\n sourceOffset[0],\n sourceOffset[1],\n sourceOffset[2]\n );\n const targetOuterRectangle = RectangleClient.expand(\n targetRectangle,\n targetOffset[3],\n targetOffset[0],\n targetOffset[1],\n targetOffset[2]\n );\n return {\n sourceOuterRectangle,\n targetOuterRectangle\n };\n};\n\nexport const isSourceAndTargetIntersect = (options: ElbowLineRouteOptions) => {\n const {\n sourcePoint,\n nextSourcePoint,\n sourceRectangle,\n sourceOuterRectangle,\n targetPoint,\n nextTargetPoint,\n targetRectangle,\n targetOuterRectangle\n } = options;\n\n return (\n RectangleClient.isPointInRectangle(targetRectangle, sourcePoint) ||\n RectangleClient.isPointInRectangle(targetOuterRectangle, nextSourcePoint) ||\n RectangleClient.isPointInRectangle(sourceOuterRectangle, nextTargetPoint) ||\n RectangleClient.isPointInRectangle(sourceRectangle, targetPoint)\n );\n};\n","import { PlaitElement } from '@plait/core';\n\nconst map = new Map<string, any>();\n\nexport const memorizeLatest = <T extends PlaitElement = PlaitElement>(\n memorizedKey: string,\n propertyKey: keyof T,\n propertyValue: T[keyof T]\n) => {\n let obj = map.has(memorizedKey) ? map.get(memorizedKey) : {};\n obj[propertyKey] = propertyValue;\n map.set(memorizedKey, obj);\n};\n\nexport const getMemorizedLatest = <T extends PlaitElement = PlaitElement>(memorizedKey: string): T => {\n return map.get(memorizedKey);\n};\n","import { PlaitBoard, setDragging } from '@plait/core';\nimport { RotateRef } from '../types';\n\nexport const IS_ROTATING = new WeakMap<PlaitBoard, RotateRef>();\n\nexport const isRotating = (board: PlaitBoard) => {\n return !!IS_ROTATING.get(board);\n};\n\nexport const addRotating = (board: PlaitBoard, rotateRef: RotateRef) => {\n PlaitBoard.getBoardContainer(board).classList.add(`draw-elements-rotating`);\n IS_ROTATING.set(board, rotateRef);\n setDragging(board, true);\n};\n\nexport const removeRotating = (board: PlaitBoard) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`draw-elements-rotating`);\n IS_ROTATING.delete(board);\n setDragging(board, false);\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { DEFAULT_FILL, TRANSPARENT } from '../constants';\n\nexport const getElementArea = (board: PlaitBoard, element: PlaitElement) => {\n const rectangle = board.getRectangle(element);\n if (rectangle) {\n return rectangle.width * rectangle.height;\n }\n return 0;\n};\n\nexport const sortElementsByArea = (board: PlaitBoard, elements: PlaitElement[], direction: 'desc' | 'asc' = 'asc') => {\n return elements.sort((a, b) => {\n const areaA = getElementArea(board, a);\n const areaB = getElementArea(board, b);\n return direction === 'asc' ? areaA - areaB : areaB - areaA;\n });\n};\n\nexport const isFilled = (fill: string) => {\n return fill && fill !== DEFAULT_FILL && fill !== TRANSPARENT;\n};\n","export type AnimateOption = { stop: () => void; start: () => void };\n\nexport function animate(tween: (t: number) => void, duration: number, ease: Function, callback: Function): AnimateOption {\n const start = getTimestamp();\n let stopAnimation = false;\n\n function tick(now: number) {\n if (stopAnimation) {\n return;\n }\n const elapsed = now - start;\n const t = Math.min(elapsed / duration, 1);\n tween(ease(t));\n if (t < 1) {\n requestAnimationFrame(tick);\n } else if (callback) {\n callback();\n }\n }\n\n requestAnimationFrame(tick);\n return {\n stop: () => (stopAnimation = true),\n start: () => {\n stopAnimation = false;\n requestAnimationFrame(tick);\n }\n };\n}\n\nexport function getTimestamp() {\n if (window.performance && window.performance.now) {\n return window.performance.now();\n } else {\n return Date.now();\n }\n}\n\nexport function linear(t: number) {\n return t;\n}\n","import {\n ACTIVE_STROKE_WIDTH,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n createForeignObject,\n createG,\n getSelectedElements,\n isSelectionMoving,\n setAngleForG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator, GeneratorExtraData, GeneratorOptions } from '../generators/generator';\nimport { CommonImageItem, canResize, getElementOfFocusedImage } from '../utils';\nimport { ActiveGenerator } from '../generators/active.generator';\nimport { PlaitImageBoard, ImageComponentRef, ImageProps } from './with-image';\n\nexport const FOREIGN_OBJECT_IMAGE_CLASS_NAME = 'foreign-object-image';\n\nexport interface ImageGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getImageItem: (element: T) => CommonImageItem;\n}\n\nexport class ImageGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n GeneratorExtraData,\n ImageGeneratorOptions<T> & GeneratorOptions\n> {\n static key = 'image-generator';\n\n foreignObject!: SVGForeignObjectElement;\n\n imageComponentRef!: ImageComponentRef;\n\n activeGenerator!: ActiveGenerator;\n\n isFocus = false;\n\n element!: T;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T): boolean {\n return !!this.options.getImageItem(element);\n }\n\n draw(element: T): SVGGElement {\n this.element = element;\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n this.foreignObject.classList.add(FOREIGN_OBJECT_IMAGE_CLASS_NAME);\n g.append(this.foreignObject);\n const props: ImageProps = {\n board: this.board,\n imageItem: this.options.getImageItem(element),\n element,\n getRectangle: () => {\n return this.options.getRectangle(element);\n }\n };\n this.imageComponentRef = ((this.board as unknown) as PlaitImageBoard).renderImage(this.foreignObject, props);\n\n this.activeGenerator = new ActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (!(selectedElements.length === 1 && !isSelectionMoving(this.board))) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if ((selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.options.getRectangle(this.element);\n },\n hasResizeHandle: () => {\n const isSelectedImageElement = canResize(this.board, this.element);\n const isSelectedImage = !!getElementOfFocusedImage(this.board);\n return isSelectedImage || isSelectedImageElement;\n }\n });\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n this.element = current;\n if (previous !== current && this.imageComponentRef) {\n const props = {\n imageItem: this.options.getImageItem(current),\n element: current,\n getRectangle: () => {\n return this.options.getRectangle(current);\n }\n };\n this.imageComponentRef.update(props);\n }\n const currentForeignObject = this.options.getRectangle(current);\n updateForeignObject(\n this.g!,\n currentForeignObject.width,\n currentForeignObject.height,\n currentForeignObject.x,\n currentForeignObject.y\n );\n if (currentForeignObject && current.angle) {\n setAngleForG(this.g!, RectangleClient.getCenterPoint(currentForeignObject), current.angle);\n }\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.processDrawing(current, activeG, { selected: this.isFocus });\n }\n\n setFocus(element: PlaitElement, isFocus: boolean) {\n this.isFocus = isFocus;\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.processDrawing(element, activeG, { selected: isFocus });\n const props: Partial<ImageProps> = {\n isFocus\n };\n this.imageComponentRef.update(props);\n }\n\n destroy(): void {\n super.destroy();\n this.imageComponentRef?.destroy();\n this.activeGenerator?.destroy();\n }\n}\n","import { Path, PlaitBoard, PlaitElement, Transforms, getSelectedElements } from '@plait/core';\nimport { memorizeLatest } from '../utils';\n\nexport interface SetOptions<T extends PlaitElement = PlaitElement> {\n callback?: (element: T, path: Path) => void;\n getMemorizeKey?: (element: T) => string;\n match?: (element: T) => boolean;\n}\n\nexport const setProperty = <T extends PlaitElement = PlaitElement>(board: PlaitBoard, properties: Partial<T>, options?: SetOptions<T>) => {\n const selectedElements = getSelectedElements(board) as T[];\n selectedElements.forEach(element => {\n if (options?.match && !options?.match(element)) return;\n const path = PlaitBoard.findPath(board, element);\n const memorizeKey = options?.getMemorizeKey ? options?.getMemorizeKey(element) : '';\n for (let key in properties) {\n memorizeKey && memorizeLatest(memorizeKey, key, properties[key]);\n }\n if (options?.callback) {\n options.callback(element, path);\n } else {\n Transforms.setNode(board, properties, path);\n }\n });\n};\n\nconst setStrokeStyle = (board: PlaitBoard, strokeStyle: string, options: SetOptions) => {\n setProperty(board, { strokeStyle }, options);\n};\n\nconst setFillColor = (board: PlaitBoard, fill: string, options: SetOptions) => {\n setProperty(board, { fill }, options);\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string, options: SetOptions) => {\n setProperty(board, { strokeColor }, options);\n};\n\nconst setStrokeWidth = (board: PlaitBoard, strokeWidth: number, options: SetOptions) => {\n setProperty(board, { strokeWidth }, options);\n};\n\nexport const PropertyTransforms = {\n setFillColor,\n setStrokeStyle,\n setProperty,\n setStrokeWidth,\n setStrokeColor\n};\n","import {\n MERGING,\n PlaitBoard,\n PlaitElement,\n PlaitGroupElement,\n Point,\n RectangleClient,\n Transforms,\n getElementsInGroup,\n getHighestSelectedElements,\n getRectangleByElements\n} from '@plait/core';\n\nexport const alignTop = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y - rectangle.y] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignBottom = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y + outerRectangle.height - (rectangle.y + rectangle.height)] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignLeft = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x - rectangle.x, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignHorizontalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.x + outerRectangle.width / 2;\n const elementCenter = rectangle.x + rectangle.width / 2;\n return [outerCenter - elementCenter, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignVerticalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.y + outerRectangle.height / 2;\n const elementCenter = rectangle.y + rectangle.height / 2;\n return [0, outerCenter - elementCenter] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignRight = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x + outerRectangle.width - (rectangle.x + rectangle.width), 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nfunction setOffset(board: PlaitBoard, getOffset: (outerRectangle: RectangleClient, rectangle: RectangleClient) => Point) {\n const elements = getHighestSelectedElements(board);\n const outerRectangle = getRectangleByElements(board, elements, false);\n elements.forEach(element => {\n if (!element.points && !PlaitGroupElement.isGroup(element)) return;\n const rectangle = board.getRectangle(element)!;\n const offset = getOffset(outerRectangle, rectangle);\n let updateElements: PlaitElement[] = [];\n if (PlaitGroupElement.isGroup(element)) {\n updateElements = getElementsInGroup(board, element, true, false);\n } else if (element.points) {\n updateElements = [element];\n }\n updateElements.forEach(item => {\n const newPoints = item.points!.map(p => [p[0] + offset[0], p[1] + offset[1]]) as Point[];\n const path = PlaitBoard.findPath(board, item);\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n path\n );\n });\n MERGING.set(board, true);\n });\n MERGING.set(board, false);\n}\n\nexport const distributeHorizontal = (board: PlaitBoard) => {\n distribute(board, true);\n};\n\nexport const distributeVertical = (board: PlaitBoard) => {\n distribute(board, false);\n};\n\nconst distribute = (board: PlaitBoard, isHorizontal: boolean) => {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n const highestSelectedElements = getHighestSelectedElements(board);\n const refs = highestSelectedElements.map(element => {\n return { element, rectangle: board.getRectangle(element)! };\n });\n const outerRectangle = getRectangleByElements(board, highestSelectedElements, false);\n const minRectangleRef = refs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis])[0];\n const maxRectangleRef = refs.sort((a, b) => b.rectangle[axis] + b.rectangle[side] - (a.rectangle[axis] + a.rectangle[side]))[0];\n const minIndex = refs.findIndex(ref => ref === minRectangleRef);\n const maxIndex = refs.findIndex(ref => ref === maxRectangleRef);\n let distributeRefs = refs.filter((element, index) => index !== minIndex && index !== maxIndex);\n const sum = distributeRefs.reduce((accumulator, current) => current.rectangle[side] + accumulator, 0);\n const offset =\n (outerRectangle[side] - minRectangleRef.rectangle[side] - maxRectangleRef.rectangle[side] - sum) / (distributeRefs.length + 1);\n distributeRefs = distributeRefs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis]);\n let position = minRectangleRef.rectangle[axis] + minRectangleRef.rectangle[side] + offset;\n for (let i = 0; i < distributeRefs.length; i++) {\n const rectangle = distributeRefs[i].rectangle;\n const moveOffset = [0, 0];\n const moveAxis = isHorizontal ? 0 : 1;\n moveOffset[moveAxis] = position - rectangle[axis];\n const path = PlaitBoard.findPath(board, distributeRefs[i].element);\n const newPoints = distributeRefs[i].element.points!.map(p => [p[0] + moveOffset[0], p[1] + moveOffset[1]]) as Point[];\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n path\n );\n MERGING.set(board, true);\n position = position + rectangle[side] + offset;\n }\n MERGING.set(board, false);\n};\n\nexport interface AlignTransform {\n alignTop: (board: PlaitBoard) => void;\n alignHorizontalCenter: (board: PlaitBoard) => void;\n alignBottom: (board: PlaitBoard) => void;\n alignLeft: (board: PlaitBoard) => void;\n alignVerticalCenter: (board: PlaitBoard) => void;\n alignRight: (board: PlaitBoard) => void;\n distributeHorizontal: (board: PlaitBoard) => void;\n distributeVertical: (board: PlaitBoard) => void;\n}\n\nexport const AlignTransform: AlignTransform = {\n alignTop,\n alignHorizontalCenter,\n alignBottom,\n alignLeft,\n alignVerticalCenter,\n alignRight,\n distributeHorizontal,\n distributeVertical\n};\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point], shift: boolean = false): [Point, Point] => {\n let start = points[0];\n let end = points[1];\n if (shift) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n const edge = Math.max(height, width);\n end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];\n }\n\n const leftTopPoint: Point = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];\n let rightBottomPoint: Point = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];\n\n return [leftTopPoint, rightBottomPoint];\n};\n","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n PlaitBoard,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n handleTouchTarget,\n throttleRAF,\n toViewBoxPoint,\n toHostPoint,\n isDragging\n} from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { addResizing, isResizing, removeResizing } from '../utils/resize';\nimport { PlaitElementOrArray, ResizeOptions, ResizeHitTestRef, ResizeRef, WithResizeOptions } from '../types/resize';\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n !PlaitBoard.isReadonly(board) && !PlaitBoard.hasBeenTextEditing(board) && PlaitBoard.isPointer(board, PlaitPointerType.selection)\n );\n};\n\nexport const withResize = <T extends PlaitElementOrArray = PlaitElementOrArray, K = ResizeHandle, P = ResizeOptions>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K, P>\n) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeHitTestRef: ResizeHitTestRef<T, K, P> | null = null;\n let resizeRef: ResizeRef<T, K, P> | null = null;\n let startPoint: Point | null = null;\n let hoverHitTestRef: ResizeHitTestRef<T, K, P> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event) || !isMainPointer(event)) {\n pointerDown(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n resizeHitTestRef = options.hitTest(point);\n if (resizeHitTestRef) {\n if (resizeHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeHitTestRef.cursorClass}`);\n }\n startPoint = [event.x, event.y];\n const path = Array.isArray(resizeHitTestRef.element)\n ? resizeHitTestRef.element.map(el => PlaitBoard.findPath(board, el))\n : PlaitBoard.findPath(board, resizeHitTestRef.element);\n resizeRef = {\n path,\n element: resizeHitTestRef.element,\n handle: resizeHitTestRef.handle,\n handleIndex: resizeHitTestRef.handleIndex,\n rectangle: resizeHitTestRef.rectangle,\n options: resizeHitTestRef.options\n };\n preventTouchMove(board, event, true);\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n clearHoverHitTestRef();\n pointerMove(event);\n return;\n }\n if (startPoint && resizeHitTestRef && !isResizing(board)) {\n const endPoint = [event.x, event.y];\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, resizeRef!, options.key);\n MERGING.set(board, true);\n options.beforeResize && options.beforeResize(resizeRef!);\n }\n }\n if (!isResizing(board) && !isDragging(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n throttleRAF(board, options.key + '-common-resize-hit-test', () => {\n const hitTestRef = options.hitTest(point);\n if (hitTestRef) {\n if (hoverHitTestRef && hitTestRef.cursorClass !== hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n }\n hoverHitTestRef = hitTestRef;\n if (hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${hoverHitTestRef.cursorClass}`);\n }\n } else {\n clearHoverHitTestRef();\n }\n });\n } else {\n if (startPoint && isResizing(board)) {\n event.preventDefault();\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n throttleRAF(board, 'with-common-resize', () => {\n if (startPoint && resizeRef) {\n handleTouchTarget(board);\n options.onResize(resizeRef, {\n startPoint: toViewBoxPoint(board, toHostPoint(board, startPoint[0], startPoint[1])),\n endPoint,\n isShift: !!event.shiftKey\n });\n }\n });\n return;\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeHitTestRef) {\n options.afterResize && options.afterResize(resizeRef!);\n removeResizing(board, options.key);\n startPoint = null;\n resizeHitTestRef = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, event, false);\n }\n };\n\n const clearHoverHitTestRef = () => {\n if (hoverHitTestRef) {\n if (hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n }\n hoverHitTestRef = null;\n }\n };\n\n return board;\n};\n","import { ACTIVE_STROKE_WIDTH, PlaitGroup, RectangleClient, drawRectangle, getRectangleByGroup } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { Generator } from './generator';\n\nexport class GroupGenerator extends Generator<PlaitGroup> {\n canDraw(element: PlaitGroup): boolean {\n return true;\n }\n\n draw(element: PlaitGroup, partialSelected: boolean) {\n const options: Options = {\n stroke: '',\n strokeWidth: ACTIVE_STROKE_WIDTH,\n strokeLineDash: [5]\n };\n let rectangle: RectangleClient = { x: 0, y: 0, width: 0, height: 0 };\n if (partialSelected) {\n options.stroke = '#999';\n rectangle = getRectangleByGroup(this.board, element, true);\n }\n return drawRectangle(this.board, rectangle, options);\n }\n}\n","import { PlaitElementRef } from '@plait/core';\nimport { Generator } from '../generators';\n\nexport class PlaitCommonElementRef implements PlaitElementRef {\n private generatorMap = new Map<string, Generator | Object>();\n\n addGenerator<T extends Object = Generator>(key: string, generator: T) {\n this.generatorMap.set(key, generator);\n }\n\n getGenerator<T extends Object = Generator>(key: string) {\n return this.generatorMap.get(key) as T;\n }\n}\n","import { ElementFlavour, PlaitBoard, PlaitElement } from '@plait/core';\nimport { ELEMENT_TO_TEXT_MANAGES } from '../utils/text';\nimport { PlaitCommonElementRef } from './element-ref';\nimport { TextManage } from '../text/text-manage';\n\nexport class CommonElementFlavour<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard,\n R extends PlaitCommonElementRef = PlaitCommonElementRef\n> extends ElementFlavour<T, K, R> {\n private textManages: TextManage[] = [];\n\n constructor(elementRef = new PlaitCommonElementRef()) {\n super(elementRef as R);\n }\n\n initializeWeakMap() {\n ELEMENT_TO_TEXT_MANAGES.set(this.element, this.textManages);\n }\n\n destroyWeakMap() {\n ELEMENT_TO_TEXT_MANAGES.delete(this.element);\n }\n\n initializeTextManages(textManages: TextManage[]) {\n this.textManages = textManages;\n this.initializeWeakMap();\n }\n\n addTextManage(textManage: TextManage) {\n this.textManages.push(textManage);\n }\n\n destroyTextManages() {\n this.getTextManages().forEach(manage => {\n manage.destroy();\n });\n this.textManages = [];\n this.destroyWeakMap();\n }\n\n getTextManages() {\n return this.textManages;\n }\n}\n","import {\n OnContextChanged,\n PlaitBoard,\n PlaitGroup,\n PlaitPluginElementContext,\n getElementsInGroup,\n getRectangleByGroup,\n isSelectedElementOrGroup,\n isSelectionMoving\n} from '@plait/core';\nimport { GroupGenerator } from '../generators/group.generator';\nimport { ActiveGenerator } from '../generators';\nimport { CommonElementFlavour } from './element-flavour';\nimport { Subscription } from 'rxjs';\n\nexport class GroupComponent extends CommonElementFlavour<PlaitGroup, PlaitBoard> implements OnContextChanged<PlaitGroup, PlaitBoard> {\n onStableSubscription?: Subscription;\n\n constructor() {\n super();\n }\n\n activeGenerator!: ActiveGenerator<PlaitGroup>;\n\n groupGenerator!: GroupGenerator;\n\n initializeGenerator() {\n this.activeGenerator = new ActiveGenerator<PlaitGroup>(this.board, {\n getRectangle: (element: PlaitGroup) => {\n return getRectangleByGroup(this.board, element);\n },\n getStrokeWidth: () => 0,\n getStrokeOpacity: () => 0,\n hasResizeHandle: () => {\n return !isSelectionMoving(this.board);\n }\n });\n this.groupGenerator = new GroupGenerator(this.board);\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n const contextService = PlaitBoard.getBoardContext(this.board);\n this.onStableSubscription = contextService.onStable().subscribe(() => {\n const elementsInGroup = getElementsInGroup(this.board, this.element, false, true);\n const isPartialSelectGroup =\n elementsInGroup.some(item => isSelectedElementOrGroup(this.board, item)) &&\n !elementsInGroup.every(item => isSelectedElementOrGroup(this.board, item));\n this.groupGenerator.processDrawing(this.element, this.getElementG(), isPartialSelectGroup);\n });\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitGroup, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitGroup, PlaitBoard>\n ) {}\n\n destroy(): void {\n super.destroy();\n this.onStableSubscription?.unsubscribe();\n }\n}\n","import {\n PlaitBoard,\n PlaitPluginElementContext,\n PlaitGroupElement,\n toViewBoxPoint,\n toHostPoint,\n getHitElementsBySelection,\n createGroupRectangleG,\n ClipboardData,\n getHighestSelectedGroups,\n getSelectedIsolatedElements,\n PlaitElement,\n PlaitGroup,\n getSelectedGroups,\n Selection,\n Point,\n Transforms,\n idCreator,\n getGroupByElement,\n getSelectedIsolatedElementsCanAddToGroup,\n getElementsInGroup,\n getRectangleByGroup,\n PlaitPointerType,\n WritableClipboardOperationType\n} from '@plait/core';\nimport { GroupComponent } from '../core/group.component';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { isResizing } from '../utils';\n\nexport function withGroup(board: PlaitBoard) {\n let groupRectangleG: SVGGElement | null;\n let removeGroups: PlaitGroup[] | null;\n\n const {\n drawElement,\n pointerMove,\n globalPointerUp,\n insertFragment,\n getDeletedFragment,\n deleteFragment,\n getRelatedFragment,\n getRectangle,\n keyDown\n } = board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitGroupElement.isGroup(context.element)) {\n return GroupComponent;\n }\n return drawElement(context);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n groupRectangleG?.remove();\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n let selection: Selection = { anchor: point, focus: point };\n if (board.selection && !Selection.isCollapsed(board.selection)) {\n selection = board.selection;\n }\n const pointer = PlaitBoard.getPointer(board);\n if (!isResizing(board) && pointer === PlaitPointerType.selection) {\n const hitElements = getHitElementsBySelection(board, selection);\n if (hitElements.length) {\n groupRectangleG = createGroupRectangleG(board, hitElements);\n groupRectangleG && PlaitBoard.getElementActiveHost(board).append(groupRectangleG);\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n groupRectangleG?.remove();\n groupRectangleG = null;\n globalPointerUp(event);\n };\n\n board.getRelatedFragment = (elements: PlaitElement[], originData?: PlaitElement[]) => {\n const groups = getSelectedGroups(board, elements, originData);\n return getRelatedFragment([...elements, ...groups], originData);\n };\n\n board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n let elements: PlaitElement[] = [];\n if (clipboardData?.elements?.length) {\n elements = new Array(clipboardData?.elements?.length);\n const groups = getHighestSelectedGroups(board, clipboardData?.elements);\n const selectedIsolatedElements = getSelectedIsolatedElements(board, clipboardData?.elements);\n selectedIsolatedElements.forEach(item => {\n const index = clipboardData.elements!.map(element => element.id).indexOf(item.id);\n elements.splice(index, 1, !item.groupId ? item : updateGroupId(item, undefined));\n });\n if (groups.length) {\n groups.forEach(item => {\n const index = clipboardData.elements!.map(element => element.id).indexOf(item.id);\n const newGroup = { ...updateGroupId(item, undefined), id: idCreator() };\n elements.splice(index, 1, newGroup);\n updateElementsGroupId(item, clipboardData.elements!, newGroup.id, elements);\n });\n }\n clipboardData.elements = elements;\n }\n insertFragment(clipboardData, targetPoint, operationType);\n const groupElements = elements?.filter(value => PlaitGroupElement.isGroup(value)) as PlaitElement[];\n groupElements.forEach(element => {\n Transforms.insertNode(board, element, [board.children.length]);\n });\n };\n\n board.getDeletedFragment = (data: PlaitElement[]) => {\n removeGroups = getRemoveGroups(board);\n if (removeGroups && removeGroups.length) {\n data.push(...removeGroups);\n }\n return getDeletedFragment(data);\n };\n\n board.deleteFragment = (elements: PlaitElement[]) => {\n if (removeGroups?.length) {\n updateSiblingElementGroupId(board, removeGroups);\n }\n deleteFragment(elements);\n removeGroups = null;\n };\n\n board.getRectangle = (element: PlaitElement) => {\n if (PlaitGroupElement.isGroup(element)) {\n return getRectangleByGroup(board, element, true);\n }\n return getRectangle(element);\n };\n\n board.keyDown = (event: KeyboardEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n if (isKeyHotkey('mod+g', event)) {\n event.preventDefault();\n Transforms.addGroup(board);\n return;\n }\n if (isKeyHotkey('mod+shift+g', event)) {\n event.preventDefault();\n Transforms.removeGroup(board);\n return;\n }\n }\n keyDown(event);\n };\n\n return board;\n}\n\nconst updateGroupId = (element: PlaitElement, groupId?: string) => {\n return {\n ...element,\n groupId: groupId\n };\n};\n\nconst updateElementsGroupId = (group: PlaitGroup, clipboardDataElements: PlaitElement[], newGroupId: string, elements: PlaitElement[]) => {\n const elementsInGroup = clipboardDataElements.filter(item => item.groupId === group.id);\n if (elementsInGroup.length) {\n elementsInGroup.forEach(item => {\n const index = clipboardDataElements.map(item => item.id).indexOf(item.id);\n if (PlaitGroupElement.isGroup(item)) {\n const newGroup = { ...updateGroupId(item, newGroupId), id: idCreator() };\n elements.splice(index, 1, newGroup);\n updateElementsGroupId(item, clipboardDataElements, newGroup.id, elements);\n } else {\n elements.splice(index, 1, updateGroupId(item, newGroupId));\n }\n });\n }\n return elements;\n};\n\nconst getRemoveGroups = (board: PlaitBoard) => {\n const selectedGroups = board.getRelatedFragment([]) as PlaitGroup[];\n const removeGroups = [...selectedGroups];\n const highestSelectedGroups = getHighestSelectedGroups(board);\n const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);\n const removeNodes = [...highestSelectedGroups, ...selectedIsolatedElements];\n removeNodes.forEach(item => {\n const hitElementGroups = getGroupByElement(board, item, true) as PlaitGroup[];\n if (hitElementGroups.length) {\n const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);\n const siblingElements = elementsInGroup.filter(\n element => ![...removeNodes, ...removeGroups].map(item => item.id).includes(element.id)\n );\n if (siblingElements.length === 1 || siblingElements.length === 0) {\n if (!removeGroups.includes(hitElementGroups[0])) {\n removeGroups.push(hitElementGroups[0]);\n }\n if (siblingElements.length === 1) {\n if (hitElementGroups.length > 1) {\n const aboveGroup = findAboveGroupWithAnotherElement(board, hitElementGroups.slice(1, hitElementGroups.length), [\n ...removeNodes,\n ...removeGroups\n ]);\n let index = hitElementGroups.length;\n if (aboveGroup) {\n index = hitElementGroups.findIndex(item => item.id === aboveGroup.id);\n }\n [...hitElementGroups.slice(1, index)].forEach(item => {\n if (!removeGroups.includes(item)) {\n removeGroups.push(item);\n }\n });\n }\n }\n }\n }\n });\n return removeGroups;\n};\n\nconst findAboveGroupWithAnotherElement = (board: PlaitBoard, groups: PlaitGroup[], excludeNodes: PlaitElement[]) => {\n let group: PlaitGroup | null = null;\n for (let i = 0; i < groups.length; i++) {\n const elementsInGroup = getElementsInGroup(board, groups[i], false, true);\n const siblingElements = elementsInGroup.filter(element => !excludeNodes.map(item => item.id).includes(element.id));\n if (siblingElements.length > 0) {\n group = groups[i];\n break;\n }\n }\n return group;\n};\n\nconst updateSiblingElementGroupId = (board: PlaitBoard, removeGroups: PlaitGroup[]) => {\n const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);\n const highestSelectedGroups = getHighestSelectedGroups(board);\n const isolatedElementsInGroup = selectedIsolatedElements.filter(item => item.groupId);\n [...highestSelectedGroups, ...isolatedElementsInGroup].forEach(item => {\n const hitElementGroups = getGroupByElement(board, item, true) as PlaitGroup[];\n if (hitElementGroups.length) {\n const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);\n const siblingElements = elementsInGroup.filter(element => element.id !== item.id);\n if (siblingElements.length === 1) {\n const removeGroupIds = removeGroups.map(item => item.id);\n if (hitElementGroups.some(group => removeGroupIds.includes(group.id))) {\n const group = hitElementGroups.find(group => !removeGroupIds.includes(group.id));\n const path = PlaitBoard.findPath(board, siblingElements[0]);\n Transforms.setNode(board, { groupId: group?.id || undefined }, path);\n }\n }\n }\n });\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport abstract class ImageBaseComponent {\n _isFocus!: boolean;\n\n element!: PlaitElement;\n\n board!: PlaitBoard;\n\n set isFocus(value: boolean) {\n this._isFocus = value;\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n abstract nativeElement(): HTMLElement;\n}\n","import { Node } from 'slate';\nimport { CustomText, ParagraphElement } from './types';\nimport { getLineHeightByFontSize } from '../utils/text';\n\nexport function measureElement(\n element: ParagraphElement,\n options: {\n fontSize: number;\n fontFamily: string;\n },\n containerMaxWidth: number = 10000\n) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n const textEntries = Node.texts(element);\n const lines: CustomText[][] = [[]];\n for (const textEntry of textEntries) {\n const [text] = textEntry;\n const textString = Node.string(text);\n const textArray = textString.split('\\n');\n textArray.forEach((segmentTextString: string, index: number) => {\n const segmentText = { ...text, text: segmentTextString };\n if (index === 0) {\n const currentLine = lines[lines.length - 1];\n currentLine.push(segmentText);\n } else {\n const newLine: CustomText[] = [];\n newLine.push(segmentText);\n lines.push(newLine);\n }\n });\n }\n let width = 0;\n let height = 0;\n lines.forEach((lineTexts: CustomText[], index: number) => {\n let lineWidth = 0;\n let maxLineHeight = getLineHeightByFontSize(options.fontSize);\n lineTexts.forEach((text: CustomText, index: number) => {\n const font = getFont(text, { fontFamily: options.fontFamily, fontSize: options.fontSize });\n ctx.font = font;\n const textMetrics = ctx.measureText(text.text);\n lineWidth += textMetrics.width;\n const isLast = index === lineTexts.length - 1;\n // skip when text is empty and is not last text of line\n if (text['font-size'] && (isLast || text.text !== '')) {\n const lineHeight = getLineHeightByFontSize(parseFloat(text['font-size']));\n if (lineHeight > maxLineHeight) {\n maxLineHeight = lineHeight;\n }\n }\n });\n if (lineWidth <= containerMaxWidth) {\n if (lineWidth > width) {\n width = lineWidth;\n }\n height += maxLineHeight;\n } else {\n width = containerMaxWidth;\n const lineWrapNumber = Math.ceil(lineWidth / containerMaxWidth);\n height += maxLineHeight * lineWrapNumber;\n }\n });\n return { width, height };\n}\n\nconst getFont = (\n text: CustomText,\n options: {\n fontSize: number;\n fontFamily: string;\n }\n) => {\n return `${text.italic ? 'italic ' : ''} ${text.bold ? 'bold ' : ''} ${text['font-size'] || options.fontSize}px ${options.fontFamily} `;\n};\n","import {\n IS_TEXT_EDITABLE,\n MERGING,\n PlaitBoard,\n Point,\n RectangleClient,\n createForeignObject,\n createG,\n debounce,\n setAngleForG,\n toHostPoint,\n toViewBoxPoint,\n updateForeignObject,\n updateForeignObjectWidth\n} from '@plait/core';\nimport { fromEvent, timer } from 'rxjs';\nimport { Editor, Element, NodeEntry, Range, Text, Node, Transforms, Operation } from 'slate';\nimport { PlaitTextBoard, TextPlugin } from './with-text';\nimport { measureElement } from './text-measure';\nimport { TextChangeData, TextComponentRef, TextProps } from './with-text';\n\nexport interface TextManageChangeData {\n newText?: Element;\n operations?: Operation[];\n width: number;\n height: number;\n}\n\nexport class TextManage {\n isEditing = false;\n\n editor!: Editor;\n\n g!: SVGGElement;\n\n foreignObject!: SVGForeignObjectElement;\n\n textComponentRef!: TextComponentRef;\n\n // add debounce for composition input end and abandon before change in setTimeout period\n // be going to attract board children are overwritten when fired more times onChange(eg: board is embed in editor)\n textChange = debounce<TextManageChangeData>((data?: TextManageChangeData) => {\n if (!data) {\n return;\n }\n this.options.onChange && this.options.onChange({ ...data });\n MERGING.set(this.board, true);\n }, 0);\n\n exitCallback?: () => void;\n\n constructor(\n private board: PlaitBoard,\n private options: {\n getRectangle: () => RectangleClient;\n onChange?: (data: TextManageChangeData) => void;\n getRenderRectangle?: () => RectangleClient;\n getMaxWidth?: () => number;\n textPlugins?: TextPlugin[];\n }\n ) {\n if (!this.options.getMaxWidth) {\n this.options.getMaxWidth = () => 999;\n }\n }\n\n draw(text: Element) {\n const _rectangle = this.options.getRectangle();\n this.g = createG();\n this.foreignObject = createForeignObject(_rectangle.x, _rectangle.y, _rectangle.width, _rectangle.height);\n this.g.append(this.foreignObject);\n this.g.classList.add('text');\n const props: TextProps = {\n board: this.board,\n text,\n textPlugins: this.options.textPlugins,\n onChange: (data: TextChangeData) => {\n if (data.operations.some(op => !Operation.isSelectionOperation(op))) {\n const { width: newWidth, height: newHeight } = this.getSize();\n this.textChange({ ...data, width: newWidth, height: newHeight });\n const { x, y, width, height } = this.options.getRectangle();\n // update immediately width and height otherwise cursor come up shaking(in drawnix)\n // in flowchart case width and height may greater than the calculational width and height\n const temporaryWidth = newWidth > width ? newWidth : width;\n const temporaryHeight = newHeight > height ? newHeight : height;\n updateForeignObject(this.g, temporaryWidth, temporaryHeight, x, y);\n }\n },\n afterInit: (editor: Editor) => {\n this.editor = editor;\n },\n onComposition: (event: CompositionEvent) => {\n if (event.type === 'compositionend') {\n return;\n }\n const fakeRoot = buildCompositionData(this.editor, event.data);\n if (fakeRoot) {\n const sizeData = this.getSize(fakeRoot.children[0]);\n // invoking onChange asap to avoid blinking on typing chinese\n this.options.onChange && this.options.onChange({ ...sizeData });\n MERGING.set(this.board, true);\n }\n }\n };\n this.textComponentRef = ((this.board as unknown) as PlaitTextBoard).renderText(this.foreignObject, props);\n }\n\n updateRectangleWidth(width: number) {\n updateForeignObjectWidth(this.g, width);\n }\n\n updateAngle(centerPoint: Point, angle: number = 0) {\n setAngleForG(this.g, centerPoint, angle);\n }\n\n updateRectangle(rectangle?: RectangleClient) {\n const { x, y, width, height } = rectangle || this.options.getRectangle();\n updateForeignObject(this.g, width, height, x, y);\n }\n\n updateText(newText: Element) {\n const props = {\n text: newText\n };\n this.textComponentRef.update(props);\n }\n\n edit(callback?: () => void, exitEdit?: (event: Event) => boolean) {\n this.isEditing = true;\n IS_TEXT_EDITABLE.set(this.board, true);\n const props: Partial<TextProps> = {\n readonly: false\n };\n this.textComponentRef.update(props);\n Transforms.select(this.editor, [0]);\n const mousedown$ = fromEvent<MouseEvent>(document, 'mousedown').subscribe((event: MouseEvent) => {\n const point = toViewBoxPoint(this.board, toHostPoint(this.board, event.x, event.y));\n const textRec = this.options.getRenderRectangle ? this.options.getRenderRectangle() : this.options.getRectangle();\n const clickInText = RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), textRec);\n const isAttached = (event.target as HTMLElement).closest('.plait-board-attached');\n if (!clickInText && !isAttached) {\n // handle composition input state, like: Chinese IME Composition Input\n timer(0).subscribe(() => {\n exitCallback();\n });\n }\n });\n const keydown$ = fromEvent<KeyboardEvent>(document, 'keydown').subscribe((event: KeyboardEvent) => {\n if (event.isComposing) {\n return;\n }\n if (event.key === 'Escape' || event.key === 'Tab' || (exitEdit ? exitEdit(event) : false)) {\n event.preventDefault();\n event.stopPropagation();\n exitCallback();\n return;\n }\n });\n const exitCallback = () => {\n if (this.isEditing) {\n this.updateRectangle();\n mousedown$.unsubscribe();\n keydown$.unsubscribe();\n IS_TEXT_EDITABLE.set(this.board, false);\n MERGING.set(this.board, false);\n callback && callback();\n const props = {\n readonly: true\n };\n this.textComponentRef.update(props);\n this.isEditing = false;\n this.exitCallback = undefined;\n }\n };\n this.exitCallback = exitCallback;\n return exitCallback;\n }\n\n getSize = (element?: Element, maxWidth?: number) => {\n const computedStyle = window.getComputedStyle(this.foreignObject.children[0]);\n const fontFamily = computedStyle.fontFamily;\n const fontSize = parseFloat(computedStyle.fontSize);\n const target = element || (this.editor.children[0] as Element);\n return measureElement(\n target,\n {\n fontSize: fontSize,\n fontFamily\n },\n maxWidth || this.options.getMaxWidth!()\n );\n };\n\n getText = () => {\n return this.editor.children[0];\n };\n\n destroy() {\n this.g?.remove();\n this.textComponentRef?.destroy();\n this.exitCallback && this.exitCallback();\n }\n}\n\nexport const buildCompositionData = (editor: Editor, data: string) => {\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [textNode, textPath] = Editor.node(editor, editor.selection) as NodeEntry<Text>;\n const offset = editor.selection.anchor.offset;\n const clonedElement = JSON.parse(JSON.stringify(editor.children[0]));\n const root = { children: [clonedElement] };\n const newTextString = textNode.text.slice(0, offset + 1) + data + textNode.text.slice(offset + 1);\n const clonedTextNode = Node.get(root, textPath) as Text;\n clonedTextNode.text = newTextString;\n return root;\n }\n return null;\n};\n","import { PlaitBoard, WithPluginOptions } from '@plait/core';\nimport { Editor, Operation, Element as SlateElement } from 'slate';\nimport { RenderComponentRef } from '../core/render-component';\n\nexport interface PlaitTextBoard {\n renderText: (container: Element | DocumentFragment, props: TextProps) => TextComponentRef;\n}\n\nexport const withText = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & PlaitTextBoard;\n\n newBoard.renderText = (container: Element | DocumentFragment, props: TextProps) => {\n throw new Error('No implementation for renderText method.');\n };\n return newBoard;\n};\n\nexport type TextComponentRef = RenderComponentRef<TextProps>;\n\nexport interface TextProps {\n board: PlaitBoard;\n text: SlateElement;\n textPlugins?: TextPlugin[];\n readonly?: boolean;\n onChange?: (data: TextChangeData) => void;\n afterInit?: (data: Editor) => void;\n onComposition?: (data: CompositionEvent) => void;\n}\n\nexport type TextChangeData = { newText: SlateElement; operations: Operation[] };\n\nexport interface WithTextPluginOptions extends WithPluginOptions {\n textPlugins?: TextPlugin[];\n}\n\nexport type TextPlugin = (editor: Editor) => Editor;\n","import { BaseElement, Editor } from 'slate';\n\nexport enum Alignment {\n left = 'left',\n center = 'center',\n right = 'right'\n}\n\nexport type CustomText = {\n bold?: boolean;\n italic?: boolean;\n strike?: boolean;\n code?: boolean;\n text: string;\n underlined?: boolean;\n color?: string;\n [`font-size`]?: string;\n};\n\nexport interface LinkElement extends BaseElement {\n type: 'link';\n url: string;\n}\n\nexport interface ParagraphElement extends BaseElement {\n align?: Alignment;\n}\n\nexport type CustomElement = ParagraphElement | LinkElement;\n","import { PlaitBoard, PlaitElement, RectangleClient } from '@plait/core';\nimport { RenderComponentRef } from '../core/render-component';\nimport { CommonImageItem } from '../utils/image';\n\nexport interface PlaitImageBoard {\n renderImage: (container: Element | DocumentFragment, props: ImageProps) => ImageComponentRef;\n}\n\nexport const withImage = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & PlaitImageBoard;\n\n newBoard.renderImage = (container: Element | DocumentFragment, props: ImageProps) => {\n throw new Error('No implementation for renderImage method.');\n };\n return newBoard;\n};\n\nexport type ImageComponentRef = RenderComponentRef<ImageProps>;\n\nexport interface ImageProps {\n board: PlaitBoard;\n imageItem: CommonImageItem;\n element: PlaitElement;\n isFocus?: boolean;\n getRectangle: () => RectangleClient;\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generators';\nexport * from './transforms';\nexport * from './shapes';\nexport * from './plugins';\nexport * from './utils';\nexport * from './image/image-base.component';\nexport * from './core';\nexport * from './algorithms';\nexport * from './text';\nexport * from './image';\nexport * from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Transforms"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plait/common",
3
- "version": "0.64.5",
3
+ "version": "0.64.6",
4
4
  "peerDependencies": {},
5
5
  "dependencies": {
6
6
  "tslib": "^2.3.0"
@@ -17,6 +17,7 @@ export declare class TextManage {
17
17
  foreignObject: SVGForeignObjectElement;
18
18
  textComponentRef: TextComponentRef;
19
19
  textChange: (args?: TextManageChangeData | undefined) => void;
20
+ exitCallback?: () => void;
20
21
  constructor(board: PlaitBoard, options: {
21
22
  getRectangle: () => RectangleClient;
22
23
  onChange?: (data: TextManageChangeData) => void;