@worktile/theia 2.2.7 → 2.3.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/bundles/worktile-theia.umd.js +852 -249
  2. package/bundles/worktile-theia.umd.js.map +1 -1
  3. package/components/toolbar/toolbar.component.d.ts +3 -2
  4. package/components/toolbar-item/toolbar-item.component.d.ts +3 -4
  5. package/constants/default.d.ts +3 -0
  6. package/constants/node-types.d.ts +4 -0
  7. package/custom-types.d.ts +3 -1
  8. package/editor.component.d.ts +3 -1
  9. package/editor.module.d.ts +26 -24
  10. package/esm2015/components/toolbar/toolbar.component.js +6 -4
  11. package/esm2015/components/toolbar-item/toolbar-item.component.js +4 -4
  12. package/esm2015/constants/auto-format-rules.js +26 -7
  13. package/esm2015/constants/default.js +2 -1
  14. package/esm2015/constants/node-types.js +6 -1
  15. package/esm2015/custom-types.js +1 -1
  16. package/esm2015/editor.component.js +12 -6
  17. package/esm2015/editor.module.js +6 -3
  18. package/esm2015/interfaces/editor.js +1 -1
  19. package/esm2015/interfaces/image.js +1 -1
  20. package/esm2015/interfaces/valid-children-types.js +2 -1
  21. package/esm2015/plugins/align/align.editor.js +10 -2
  22. package/esm2015/plugins/align/options.js +3 -2
  23. package/esm2015/plugins/common/auto-insert-data..js +2 -18
  24. package/esm2015/plugins/dnd/component/dnd.component.js +260 -0
  25. package/esm2015/plugins/dnd/utils/get-current-target.js +19 -0
  26. package/esm2015/plugins/dnd/utils/get-hover-direction.js +13 -0
  27. package/esm2015/plugins/dnd/utils/is-valid-drag.js +38 -0
  28. package/esm2015/plugins/dnd/utils/move-drag-node.js +30 -0
  29. package/esm2015/plugins/dnd/utils/remove-drop-thumb-line.js +10 -0
  30. package/esm2015/plugins/image/image.component.js +167 -14
  31. package/esm2015/plugins/image/image.editor.js +4 -1
  32. package/esm2015/plugins/indent/on-keydown-indent.js +2 -3
  33. package/esm2015/plugins/list/list.editor.js +2 -2
  34. package/esm2015/plugins/quick-insert/components/quick-insert.component.js +13 -2
  35. package/esm2015/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.js +1 -1
  36. package/esm2015/services/context.service.js +5 -1
  37. package/esm2015/utils/dom.js +39 -1
  38. package/esm2015/utils/is-clean-empty-paragraph.js +4 -4
  39. package/esm2015/utils/merge-element-options.js +20 -0
  40. package/fesm2015/worktile-theia.js +786 -201
  41. package/fesm2015/worktile-theia.js.map +1 -1
  42. package/interfaces/editor.d.ts +9 -1
  43. package/interfaces/image.d.ts +7 -1
  44. package/interfaces/valid-children-types.d.ts +1 -0
  45. package/package.json +1 -1
  46. package/plugins/align/align.editor.d.ts +1 -0
  47. package/plugins/dnd/component/dnd.component.d.ts +42 -0
  48. package/plugins/dnd/component/dnd.component.scss +61 -0
  49. package/plugins/dnd/utils/get-current-target.d.ts +2 -0
  50. package/plugins/dnd/utils/get-hover-direction.d.ts +3 -0
  51. package/plugins/dnd/utils/is-valid-drag.d.ts +3 -0
  52. package/plugins/dnd/utils/move-drag-node.d.ts +2 -0
  53. package/plugins/dnd/utils/remove-drop-thumb-line.d.ts +2 -0
  54. package/plugins/image/image.component.d.ts +27 -3
  55. package/plugins/image/image.component.scss +9 -2
  56. package/plugins/image/image.editor.d.ts +6 -1
  57. package/plugins/quick-insert/components/quick-insert.component.d.ts +1 -0
  58. package/plugins/table/components/table.component.scss +1 -0
  59. package/services/context.service.d.ts +1 -0
  60. package/styles/editor.scss +4 -0
  61. package/styles/index.scss +1 -0
  62. package/styles/typo.scss +44 -0
  63. package/utils/dom.d.ts +5 -1
  64. package/utils/merge-element-options.d.ts +2 -0
@@ -4,6 +4,7 @@ import * as TheQueries from '../../queries';
4
4
  import { DefaultElementOptions } from '../../interfaces';
5
5
  import * as TheTransforms from '../../transforms';
6
6
  import { extractFragment } from '../../utils/fragment';
7
+ import { mergeElementOptions } from '../../utils/merge-element-options';
7
8
  export const withAutoInsertData = (validChildren) => (editor) => {
8
9
  const { insertData } = editor;
9
10
  let allElementOptions = DefaultElementOptions;
@@ -69,21 +70,4 @@ export const withAutoInsertData = (validChildren) => (editor) => {
69
70
  };
70
71
  return editor;
71
72
  };
72
- const mergeElementOptions = (elementOptions) => {
73
- elementOptions = elementOptions.filter(item => item.inValidChildrenTypes.length > 0);
74
- const combinationData = [...DefaultElementOptions, ...elementOptions];
75
- const dataInfo = {};
76
- combinationData.forEach(item => {
77
- const { type, inValidChildrenTypes, isIndivisible } = item;
78
- if (!dataInfo[type]) {
79
- dataInfo[type] = {
80
- type,
81
- inValidChildrenTypes,
82
- isIndivisible
83
- };
84
- }
85
- dataInfo[type].inValidChildrenTypes = Array.from(new Set([...inValidChildrenTypes, ...dataInfo[type].inValidChildrenTypes]));
86
- });
87
- return dataInfo;
88
- };
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1pbnNlcnQtZGF0YS4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9jb21tb24vYXV0by1pbnNlcnQtZGF0YS4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLHFCQUFxQixFQUFzQixNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sS0FBSyxhQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsYUFBb0MsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUMzRixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQzlCLElBQUksaUJBQWlCLEdBQUcscUJBQXFCLENBQUM7SUFDOUMsSUFBSSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsTUFBTSxFQUFFO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDaEQ7SUFFRCxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBa0IsRUFBRSxFQUFFOztRQUN2QyxJQUFJLE1BQUEsTUFBTSxDQUFDLG1CQUFtQiwwQ0FBRSxNQUFNLEVBQUU7WUFDcEMsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDbEUs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TUFBTSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUc7Z0JBQ2IsSUFBSTtnQkFDSixvQkFBb0I7Z0JBQ3BCLGFBQWE7YUFDaEIsQ0FBQztTQUNMO1FBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pJLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRpdG9yLCBQYXRoLCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi9xdWVyaWVzJztcbmltcG9ydCB7IERlZmF1bHRFbGVtZW50T3B0aW9ucywgRWxlbWVudE9wdGlvbnNJbmZvIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgKiBhcyBUaGVUcmFuc2Zvcm1zIGZyb20gJy4uLy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZXh0cmFjdEZyYWdtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZnJhZ21lbnQnO1xuXG5leHBvcnQgY29uc3Qgd2l0aEF1dG9JbnNlcnREYXRhID0gKHZhbGlkQ2hpbGRyZW4/OiBFbGVtZW50T3B0aW9uc0luZm9bXSkgPT4gKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgY29uc3QgeyBpbnNlcnREYXRhIH0gPSBlZGl0b3I7XG4gICAgbGV0IGFsbEVsZW1lbnRPcHRpb25zID0gRGVmYXVsdEVsZW1lbnRPcHRpb25zO1xuICAgIGlmICh2YWxpZENoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdmFsaWRJbmZvID0gbWVyZ2VFbGVtZW50T3B0aW9ucyh2YWxpZENoaWxkcmVuKTtcbiAgICAgICAgYWxsRWxlbWVudE9wdGlvbnMgPSBPYmplY3QudmFsdWVzKHZhbGlkSW5mbyk7XG4gICAgfVxuXG4gICAgZWRpdG9yLmluc2VydERhdGEgPSAoZGF0YTogRGF0YVRyYW5zZmVyKSA9PiB7XG4gICAgICAgIGlmIChlZGl0b3IuZXh0cmFFbGVtZW50T3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBleHRyYUluZm8gPSBtZXJnZUVsZW1lbnRPcHRpb25zKGVkaXRvci5leHRyYUVsZW1lbnRPcHRpb25zKTtcbiAgICAgICAgICAgIGFsbEVsZW1lbnRPcHRpb25zID0gT2JqZWN0LnZhbHVlcyhleHRyYUluZm8pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGl2aXNpYmxlVHlwZXMgPSBhbGxFbGVtZW50T3B0aW9ucy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzSW5kaXZpc2libGUpLm1hcChpdGVtID0+IGl0ZW0udHlwZSk7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZXh0cmFjdEZyYWdtZW50KGRhdGEpO1xuICAgICAgICBpZiAoZnJhZ21lbnQpIHtcbiAgICAgICAgICAgIGlmIChUaGVRdWVyaWVzLmlzQWNyb3NzQmxvY2tzKGVkaXRvciwgZnJhZ21lbnQpIHx8IEVkaXRvci5pc1ZvaWQoZWRpdG9yLCBmcmFnbWVudFswXSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtzdGFydF0gPSBFZGl0b3IuZWRnZXMoZWRpdG9yLCBzZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIC8vIHF1ZXJ5IHdoZXRoZXIgdGhlcmUgaXMgYSBub2RlIHRvIGJlIHZlcmlmaWVkXG4gICAgICAgICAgICAgICAgY29uc3QgdHJ5VmVyaWZ5Tm9kZSA9IGFsbEVsZW1lbnRPcHRpb25zLmZpbmQoaXRlbSA9PlxuICAgICAgICAgICAgICAgICAgICBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgaXRlbS50eXBlLCB7IGF0OiBzdGFydCwgbW9kZTogJ2xvd2VzdCcgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICh0cnlWZXJpZnlOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlzIGV4aXN0IGludmFsaWQgZWxlbWVudCB0eXBlIGluIGZyYWdtZW50XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludmFsaWRJbmRleCA9IGZyYWdtZW50LmZpbmRJbmRleChpdGVtID0+IHRyeVZlcmlmeU5vZGUuaW5WYWxpZENoaWxkcmVuVHlwZXMuaW5jbHVkZXMoaXRlbS50eXBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnZhbGlkSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRGcmFnbWVudERhdGEgPSBmcmFnbWVudC5zbGljZSgwLCBpbnZhbGlkSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZEZyYWdtZW50RGF0YSA9IGZyYWdtZW50LnNsaWNlKGludmFsaWRJbmRleCwgZnJhZ21lbnQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRnJhZ21lbnREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRGcmFnbWVudERhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZXMoZWRpdG9yLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IG5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVGhlVHJhbnNmb3Jtcy5zcGxpdE5vZGUoZWRpdG9yLCBpbmRpdmlzaWJsZVR5cGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGVzKGVkaXRvciwgaW52YWxpZEZyYWdtZW50RGF0YSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdDogUGF0aC5uZXh0KHBhdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0VtcHR5UGFyYWdyYXBoID0gVGhlUXVlcmllcy5pc0VtcHR5UGFyYWdyYXBoKGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbi5hbmNob3IpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbXB0eVBhdGggPSBQYXRoLnBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmFuY2hvci5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVsZXRlKGVkaXRvciwgeyBhdDogZW1wdHlQYXRoIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdFBhdGggPSBlbXB0eVBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIFsuLi5lbXB0eVBhdGgsIGxhc3RQYXRoICsgZnJhZ21lbnQubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdFBhdGggPSBlbXB0eVBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIFsuLi5lbXB0eVBhdGgsIGxhc3RQYXRoICsgZnJhZ21lbnQubGVuZ3RoXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQW5ndWxhckVkaXRvci5mb2N1cyhlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmNvbGxhcHNlKGVkaXRvciwgeyBlZGdlOiAnZW5kJyB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0RGF0YShkYXRhKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGVkaXRvcjtcbn07XG5cbmNvbnN0IG1lcmdlRWxlbWVudE9wdGlvbnMgPSAoZWxlbWVudE9wdGlvbnM6IEVsZW1lbnRPcHRpb25zSW5mb1tdKSA9PiB7XG4gICAgZWxlbWVudE9wdGlvbnMgPSBlbGVtZW50T3B0aW9ucy5maWx0ZXIoaXRlbSA9PiBpdGVtLmluVmFsaWRDaGlsZHJlblR5cGVzLmxlbmd0aCA+IDApO1xuICAgIGNvbnN0IGNvbWJpbmF0aW9uRGF0YSA9IFsuLi5EZWZhdWx0RWxlbWVudE9wdGlvbnMsIC4uLmVsZW1lbnRPcHRpb25zXTtcbiAgICBjb25zdCBkYXRhSW5mbyA9IHt9O1xuICAgIGNvbWJpbmF0aW9uRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCB7IHR5cGUsIGluVmFsaWRDaGlsZHJlblR5cGVzLCBpc0luZGl2aXNpYmxlIH0gPSBpdGVtO1xuICAgICAgICBpZiAoIWRhdGFJbmZvW3R5cGVdKSB7XG4gICAgICAgICAgICBkYXRhSW5mb1t0eXBlXSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGluVmFsaWRDaGlsZHJlblR5cGVzLFxuICAgICAgICAgICAgICAgIGlzSW5kaXZpc2libGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZGF0YUluZm9bdHlwZV0uaW5WYWxpZENoaWxkcmVuVHlwZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLmluVmFsaWRDaGlsZHJlblR5cGVzLCAuLi5kYXRhSW5mb1t0eXBlXS5pblZhbGlkQ2hpbGRyZW5UeXBlc10pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YUluZm87XG59O1xuIl19
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1pbnNlcnQtZGF0YS4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9jb21tb24vYXV0by1pbnNlcnQtZGF0YS4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLHFCQUFxQixFQUFzQixNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sS0FBSyxhQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsYUFBb0MsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUMzRixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQzlCLElBQUksaUJBQWlCLEdBQUcscUJBQXFCLENBQUM7SUFDOUMsSUFBSSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsTUFBTSxFQUFFO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDaEQ7SUFFRCxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBa0IsRUFBRSxFQUFFOztRQUN2QyxJQUFJLE1BQUEsTUFBTSxDQUFDLG1CQUFtQiwwQ0FBRSxNQUFNLEVBQUU7WUFDcEMsTUFBTSxTQUFTLEdBQUcs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QyxDQUFDO29CQUN6QyxJQUFJLGdCQUFnQixFQUFFO3dCQUNsQixVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO3dCQUM3QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2pDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDN0U7eUJBQU07d0JBQ0gsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNqQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztxQkFDekU7b0JBQ0QsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDNUIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDakQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTzthQUNWO1NBQ0o7UUFDRCxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRpdG9yLCBQYXRoLCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi9xdWVyaWVzJztcbmltcG9ydCB7IERlZmF1bHRFbGVtZW50T3B0aW9ucywgRWxlbWVudE9wdGlvbnNJbmZvIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgKiBhcyBUaGVUcmFuc2Zvcm1zIGZyb20gJy4uLy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZXh0cmFjdEZyYWdtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZnJhZ21lbnQnO1xuaW1wb3J0IHsgbWVyZ2VFbGVtZW50T3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL21lcmdlLWVsZW1lbnQtb3B0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCB3aXRoQXV0b0luc2VydERhdGEgPSAodmFsaWRDaGlsZHJlbj86IEVsZW1lbnRPcHRpb25zSW5mb1tdKSA9PiAoZWRpdG9yOiBFZGl0b3IpID0+IHtcbiAgICBjb25zdCB7IGluc2VydERhdGEgfSA9IGVkaXRvcjtcbiAgICBsZXQgYWxsRWxlbWVudE9wdGlvbnMgPSBEZWZhdWx0RWxlbWVudE9wdGlvbnM7XG4gICAgaWYgKHZhbGlkQ2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCB2YWxpZEluZm8gPSBtZXJnZUVsZW1lbnRPcHRpb25zKHZhbGlkQ2hpbGRyZW4pO1xuICAgICAgICBhbGxFbGVtZW50T3B0aW9ucyA9IE9iamVjdC52YWx1ZXModmFsaWRJbmZvKTtcbiAgICB9XG5cbiAgICBlZGl0b3IuaW5zZXJ0RGF0YSA9IChkYXRhOiBEYXRhVHJhbnNmZXIpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5leHRyYUVsZW1lbnRPcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhSW5mbyA9IG1lcmdlRWxlbWVudE9wdGlvbnMoZWRpdG9yLmV4dHJhRWxlbWVudE9wdGlvbnMpO1xuICAgICAgICAgICAgYWxsRWxlbWVudE9wdGlvbnMgPSBPYmplY3QudmFsdWVzKGV4dHJhSW5mbyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kaXZpc2libGVUeXBlcyA9IGFsbEVsZW1lbnRPcHRpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0uaXNJbmRpdmlzaWJsZSkubWFwKGl0ZW0gPT4gaXRlbS50eXBlKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBleHRyYWN0RnJhZ21lbnQoZGF0YSk7XG4gICAgICAgIGlmIChmcmFnbWVudCkge1xuICAgICAgICAgICAgaWYgKFRoZVF1ZXJpZXMuaXNBY3Jvc3NCbG9ja3MoZWRpdG9yLCBmcmFnbWVudCkgfHwgRWRpdG9yLmlzVm9pZChlZGl0b3IsIGZyYWdtZW50WzBdKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBlZGl0b3I7XG4gICAgICAgICAgICAgICAgY29uc3QgW3N0YXJ0XSA9IEVkaXRvci5lZGdlcyhlZGl0b3IsIHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgLy8gcXVlcnkgd2hldGhlciB0aGVyZSBpcyBhIG5vZGUgdG8gYmUgdmVyaWZpZWRcbiAgICAgICAgICAgICAgICBjb25zdCB0cnlWZXJpZnlOb2RlID0gYWxsRWxlbWVudE9wdGlvbnMuZmluZChpdGVtID0+XG4gICAgICAgICAgICAgICAgICAgIFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBpdGVtLnR5cGUsIHsgYXQ6IHN0YXJ0LCBtb2RlOiAnbG93ZXN0JyB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRyeVZlcmlmeU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgZXhpc3QgaW52YWxpZCBlbGVtZW50IHR5cGUgaW4gZnJhZ21lbnRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZEluZGV4ID0gZnJhZ21lbnQuZmluZEluZGV4KGl0ZW0gPT4gdHJ5VmVyaWZ5Tm9kZS5pblZhbGlkQ2hpbGRyZW5UeXBlcy5pbmNsdWRlcyhpdGVtLnR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZEZyYWdtZW50RGF0YSA9IGZyYWdtZW50LnNsaWNlKDAsIGludmFsaWRJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkRnJhZ21lbnREYXRhID0gZnJhZ21lbnQuc2xpY2UoaW52YWxpZEluZGV4LCBmcmFnbWVudC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRGcmFnbWVudERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZEZyYWdtZW50RGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BsaXQgbm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBUaGVUcmFuc2Zvcm1zLnNwbGl0Tm9kZShlZGl0b3IsIGluZGl2aXNpYmxlVHlwZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZXMoZWRpdG9yLCBpbnZhbGlkRnJhZ21lbnREYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0OiBQYXRoLm5leHQocGF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRW1wdHlQYXJhZ3JhcGggPSBUaGVRdWVyaWVzLmlzRW1wdHlQYXJhZ3JhcGgoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uLmFuY2hvcik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5UGF0aCA9IFBhdGgucGFyZW50KGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGVzKGVkaXRvciwgZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eVBhcmFncmFwaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZWxldGUoZWRpdG9yLCB7IGF0OiBlbXB0eVBhdGggfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0UGF0aCA9IGVtcHR5UGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgWy4uLmVtcHR5UGF0aCwgbGFzdFBhdGggKyBmcmFnbWVudC5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0UGF0aCA9IGVtcHR5UGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgWy4uLmVtcHR5UGF0aCwgbGFzdFBhdGggKyBmcmFnbWVudC5sZW5ndGhdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLmZvY3VzKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuY29sbGFwc2UoZWRpdG9yLCB7IGVkZ2U6ICdlbmQnIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbnNlcnREYXRhKGRhdGEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZWRpdG9yO1xufTtcbiJdfQ==
@@ -0,0 +1,260 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { fromEvent, merge, Subject } from 'rxjs';
3
+ import { filter, takeUntil } from 'rxjs/operators';
4
+ import { Editor, Operation } from 'slate';
5
+ import { AngularEditor, EDITOR_TO_ELEMENT } from 'slate-angular';
6
+ import { DROP_THUMB_LINE } from '../../../constants';
7
+ import { TheContextService } from '../../../services/context.service';
8
+ import { coercePixelsFromCssValue, findNodeEntryByPoint } from '../../../utils/dom';
9
+ import { getCurrentTarget } from '../utils/get-current-target';
10
+ import { getHoverDirection } from '../utils/get-hover-direction';
11
+ import { moveDragNode } from '../utils/move-drag-node';
12
+ import { isValidDrag } from '../utils/is-valid-drag';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "ngx-tethys/icon";
15
+ import * as i2 from "@angular/common";
16
+ const SNAPSHOT_PADDING_WIDTH = 5;
17
+ const SNAPSHOT_LIMI_HEIGHT = 70;
18
+ const DRAG_ICON_SIZE = 24;
19
+ const DRAG_ICON_OFFSET = 5;
20
+ export class TheDndComponent {
21
+ constructor(renderer, elementRef, ngZone, cdr) {
22
+ this.renderer = renderer;
23
+ this.elementRef = elementRef;
24
+ this.ngZone = ngZone;
25
+ this.cdr = cdr;
26
+ this.isDraging = false;
27
+ this.destroy$ = new Subject();
28
+ this.dragChange = new EventEmitter();
29
+ this.dropThumbLine = document.createElement('div');
30
+ this.dropThumbLine.className = DROP_THUMB_LINE;
31
+ }
32
+ get nativeElement() {
33
+ return this.elementRef.nativeElement;
34
+ }
35
+ get editableElement() {
36
+ return this.editor && EDITOR_TO_ELEMENT.get(this.editor);
37
+ }
38
+ ngAfterViewInit() {
39
+ const contextService = this.editor.injector.get(TheContextService);
40
+ this.ngZone.runOutsideAngular(() => {
41
+ merge(fromEvent(this.editableElement, `mousemove`), fromEvent(this.editableElement, `mouseleave`))
42
+ .pipe(takeUntil(this.destroy$), filter(() => {
43
+ return !contextService.getOptions().theOptions.readonly && contextService.getOptions().theOptions.dragAndDrop;
44
+ }))
45
+ .subscribe(e => this.setDragIcon(e));
46
+ fromEvent(document, `drop`)
47
+ .pipe(takeUntil(this.destroy$), filter(() => {
48
+ return !contextService.getOptions().theOptions.readonly && contextService.getOptions().theOptions.dragAndDrop;
49
+ }))
50
+ .subscribe(e => this.onDrop(e));
51
+ fromEvent(document, `dragover`)
52
+ .pipe(takeUntil(this.destroy$), filter(() => {
53
+ return !contextService.getOptions().theOptions.readonly && contextService.getOptions().theOptions.dragAndDrop;
54
+ }))
55
+ .subscribe(e => this.onDragover(e));
56
+ fromEvent(document, `scroll`)
57
+ .pipe(takeUntil(this.destroy$), filter(() => {
58
+ return !contextService.getOptions().theOptions.readonly && contextService.getOptions().theOptions.dragAndDrop;
59
+ }))
60
+ .subscribe(e => {
61
+ e.preventDefault();
62
+ let scrollPosition = window.scrollY;
63
+ if (!this.isScrolling && this.isDraging) {
64
+ window.requestAnimationFrame(() => {
65
+ if (this.editableTop) {
66
+ // 滚动过程中,通过设置父级元素来设置snapshot位置
67
+ this.updateDndContainerPosition(null, scrollPosition + this.editableTop + 'px');
68
+ }
69
+ this.isScrolling = false;
70
+ });
71
+ this.isScrolling = true;
72
+ }
73
+ });
74
+ });
75
+ this.setVisibility(false);
76
+ this.valueChangeHandle();
77
+ }
78
+ valueChangeHandle() {
79
+ const { onChange } = this.editor;
80
+ this.editor.onChange = () => {
81
+ const ops = this.editor.operations;
82
+ const skip = ops.length === 1 && Operation.isSelectionOperation(ops[0]);
83
+ if (!skip) {
84
+ this.setVisibility(false);
85
+ }
86
+ onChange();
87
+ };
88
+ }
89
+ updateDndContainerPosition(left, top) {
90
+ const element = this.elementRef.nativeElement;
91
+ const parentElement = element.parentElement;
92
+ top && this.renderer.setStyle(parentElement, 'top', top);
93
+ left && this.renderer.setStyle(parentElement, 'left', left);
94
+ }
95
+ getEditableTop(event) {
96
+ const offsetHeight = document.documentElement.offsetHeight;
97
+ const { height } = this.editableElement.getBoundingClientRect();
98
+ if (event.clientY < this.dragElementHeight) {
99
+ this.editableTop = -this.editableElement.offsetTop;
100
+ return;
101
+ }
102
+ if (height > event.pageY && event.clientY + this.dragElementHeight >= offsetHeight) {
103
+ this.editableTop = event.clientY - this.editableElement.offsetTop;
104
+ return;
105
+ }
106
+ this.editableTop = null;
107
+ }
108
+ onDragStart(event) {
109
+ this.isDraging = true;
110
+ this.dragChange.emit(this.isDraging);
111
+ this.dragSnapshotContent = document.querySelector('.drag-snapshot-container');
112
+ this.dragSnapshotContent.className = 'the-editor-typo drag-snapshot-container';
113
+ this.dragSnapshotContent.appendChild(this.dragElement.cloneNode(true));
114
+ this.dragElement.style.opacity = '0.3';
115
+ }
116
+ onDragEnd(event) {
117
+ this.dragElement.style.opacity = '';
118
+ this.isDraging = false;
119
+ this.setVisibility(false);
120
+ this.resetDragSnapshotContent();
121
+ this.dragChange.emit(this.isDraging);
122
+ }
123
+ onDrop(event) {
124
+ event.preventDefault();
125
+ if (this.isDraging) {
126
+ moveDragNode(this.editor, this.dragNode, event);
127
+ }
128
+ }
129
+ onDragover(event) {
130
+ event.preventDefault();
131
+ if (this.isDraging && !this.isScrolling) {
132
+ this.getEditableTop(event);
133
+ const offsetWidth = document.documentElement.offsetWidth;
134
+ const { left: editorLeft, top: editorTop, height } = this.editableElement.getBoundingClientRect();
135
+ let top = 0;
136
+ let left = 0;
137
+ if (editorLeft > 0) {
138
+ if (event.clientX + this.dragElementWidth / 2 > offsetWidth) {
139
+ left = event.pageX - editorLeft - this.elementRef.nativeElement.offsetWidth;
140
+ }
141
+ else {
142
+ left = Math.max(event.pageX - editorLeft, -editorLeft) + 10;
143
+ }
144
+ }
145
+ let paddingTop = 0; // paddingTop: 编辑器距离顶部的距离
146
+ if (editorTop >= 0) {
147
+ // 无滚动情况下
148
+ top = event.clientY - this.editableElement.offsetTop;
149
+ paddingTop = editorTop - this.editableElement.offsetTop;
150
+ }
151
+ else {
152
+ // 有滚动距离
153
+ top = Math.abs(editorTop) + event.clientY; // 滚动距离 + 鼠标clientY
154
+ paddingTop = event.pageY - this.editableElement.offsetTop - top;
155
+ // 防止底部出现滚动条
156
+ if (paddingTop < height - top) {
157
+ top = top + paddingTop;
158
+ }
159
+ }
160
+ this.updateDndContainerPosition(left + 'px', top + 'px');
161
+ this.setSnapshotStyle(event);
162
+ this.setDropThumbLine(event);
163
+ }
164
+ }
165
+ setDropThumbLine(event) {
166
+ var _a;
167
+ let element = getCurrentTarget(this.editor, event);
168
+ const direction = getHoverDirection(this.editor, event);
169
+ if (element) {
170
+ if (direction && direction === 'top') {
171
+ element = (_a = element.previousElementSibling) === null || _a === void 0 ? void 0 : _a.querySelector('[data-slate-node="element"]');
172
+ }
173
+ if (element && isValidDrag(this.editor, this.dragNode.node, element)) {
174
+ element.appendChild(this.dropThumbLine);
175
+ }
176
+ }
177
+ }
178
+ setDragIcon(event) {
179
+ if (!this.isDraging) {
180
+ const nodeEntry = findNodeEntryByPoint(this.editor, event.x, event.y, 'highest');
181
+ if (nodeEntry && !Editor.isEmpty(this.editor, nodeEntry[0])) {
182
+ const rootNode = AngularEditor.toDOMNode(this.editor, nodeEntry[0]);
183
+ this.dragNode = {
184
+ node: nodeEntry[0],
185
+ path: nodeEntry[1]
186
+ };
187
+ this.dragElement = rootNode;
188
+ let lineHeight = coercePixelsFromCssValue(window.getComputedStyle(rootNode)['lineHeight']);
189
+ const offsetTop = rootNode.offsetTop + rootNode.offsetParent.offsetTop + (lineHeight - DRAG_ICON_SIZE) / 2;
190
+ const offsetLeft = rootNode.offsetLeft + rootNode.offsetParent.offsetLeft;
191
+ this.updateDndContainerPosition(offsetLeft - DRAG_ICON_SIZE - DRAG_ICON_OFFSET + 'px', offsetTop + 'px');
192
+ this.setVisibility(true);
193
+ }
194
+ else {
195
+ this.setVisibility(false);
196
+ }
197
+ }
198
+ }
199
+ setSnapshotStyle(event) {
200
+ const { width, height } = this.dragElement.getBoundingClientRect();
201
+ this.dragElementHeight = height;
202
+ this.dragElementWidth = width;
203
+ let dragSnapshotContentStyle = `visibility: visible; width: ${width + SNAPSHOT_PADDING_WIDTH * 2}px;`;
204
+ if (height > SNAPSHOT_LIMI_HEIGHT) {
205
+ dragSnapshotContentStyle = dragSnapshotContentStyle + 'transform: scale(0.45);';
206
+ this.dragElementHeight = this.dragElementHeight * 0.45;
207
+ this.dragElementWidth = this.dragElementWidth * 0.45;
208
+ }
209
+ let snapshotTop = 0;
210
+ let snapshotLeft = 0;
211
+ // 上下移动:超出屏幕高度,重新设置snapshot的位置
212
+ if (event.clientY + this.dragElementHeight > document.documentElement.offsetHeight) {
213
+ snapshotTop = this.dragElementHeight;
214
+ }
215
+ else {
216
+ snapshotTop = 0;
217
+ }
218
+ // 左右移动:超出屏幕宽度,重新设置snapshot的位置
219
+ if (event.clientX + this.dragElementWidth / 2 > document.documentElement.offsetWidth) {
220
+ snapshotLeft = this.dragElementWidth;
221
+ }
222
+ else {
223
+ snapshotLeft = 0;
224
+ }
225
+ dragSnapshotContentStyle = dragSnapshotContentStyle + `top: ${-snapshotTop}px; left: ${-snapshotLeft}px;`;
226
+ this.dragSnapshotContent.setAttribute('style', dragSnapshotContentStyle);
227
+ }
228
+ resetDragSnapshotContent() {
229
+ this.dragSnapshotContent.className = 'drag-snapshot-container';
230
+ this.dragSnapshotContent.setAttribute('style', '');
231
+ this.dragSnapshotContent.innerHTML = '';
232
+ }
233
+ setVisibility(visible = true) {
234
+ this.nativeElement.parentNode.style.visibility = visible ? 'visible' : 'hidden';
235
+ }
236
+ ngOnDestroy() {
237
+ this.destroy$.next();
238
+ this.destroy$.complete();
239
+ }
240
+ }
241
+ TheDndComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TheDndComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
242
+ TheDndComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: TheDndComponent, selector: "[theDnd]", inputs: { editor: "editor" }, outputs: { dragChange: "dragChange" }, host: { classAttribute: "the-drag-drop" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<div\n draggable=\"true\"\n class=\"the-drag-drop-icon\"\n [ngStyle]=\"{ opacity: isDraging ? 0 : '' }\"\n (dragstart)=\"onDragStart($event)\"\n (dragend)=\"onDragEnd($event)\"\n>\n <thy-icon thyIconName=\"drag\"> </thy-icon>\n</div>\n", components: [{ type: i1.ThyIconComponent, selector: "thy-icon", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }], directives: [{ type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: TheDndComponent, decorators: [{
244
+ type: Component,
245
+ args: [{
246
+ selector: '[theDnd]',
247
+ templateUrl: './dnd.component.html',
248
+ host: {
249
+ class: 'the-drag-drop'
250
+ }
251
+ }]
252
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { editor: [{
253
+ type: Input
254
+ }], dragChange: [{
255
+ type: Output
256
+ }], content: [{
257
+ type: ViewChild,
258
+ args: ['content', { static: false }]
259
+ }] } });
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2RuZC9jb21wb25lbnQvZG5kLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2RuZC9jb21wb25lbnQvZG5kLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFFckQsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUM7QUFDakMsTUFB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Sjs4S0FVWSxNQUFNO3NCQUFkLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFja0MsT0FBTztzQkFBL0MsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFZGl0b3IsIE9wZXJhdGlvbiB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IsIEVESVRPUl9UT19FTEVNRU5UIH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBEUk9QX1RIVU1CX0xJTkUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRHJhZ05vZGUsIEVsZW1lbnRPcHRpb25zSW5mbyB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVGhlQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgY29lcmNlUGl4ZWxzRnJvbUNzc1ZhbHVlLCBmaW5kTm9kZUVudHJ5QnlQb2ludCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBnZXRDdXJyZW50VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvZ2V0LWN1cnJlbnQtdGFyZ2V0JztcbmltcG9ydCB7IGdldEhvdmVyRGlyZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZ2V0LWhvdmVyLWRpcmVjdGlvbic7XG5pbXBvcnQgeyBtb3ZlRHJhZ05vZGUgfSBmcm9tICcuLi91dGlscy9tb3ZlLWRyYWctbm9kZSc7XG5pbXBvcnQgeyBpc1ZhbGlkRHJhZyB9IGZyb20gJy4uL3V0aWxzL2lzLXZhbGlkLWRyYWcnO1xuXG5jb25zdCBTTkFQU0hPVF9QQURESU5HX1dJRFRIID0gNTtcbmNvbnN0IFNOQVBTSE9UX0xJTUlfSEVJR0hUID0gNzA7XG5jb25zdCBEUkFHX0lDT05fU0laRSA9IDI0O1xuY29uc3QgRFJBR19JQ09OX09GRlNFVCA9IDU7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3RoZURuZF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kbmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aGUtZHJhZy1kcm9wJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgVGhlRG5kQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBpc0RyYWdpbmcgPSBmYWxzZTtcblxuICAgIGRyYWdOb2RlOiBEcmFnTm9kZTtcblxuICAgIGRyYWdTbmFwc2hvdENvbnRlbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gICAgQElucHV0KCkgZWRpdG9yOiBFZGl0b3I7XG5cbiAgICBAT3V0cHV0KCkgZHJhZ0NoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgZHJhZ0VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgZHJhZ0VsZW1lbnRIZWlnaHQ6IG51bWJlcjtcblxuICAgIGRyYWdFbGVtZW50V2lkdGg6IG51bWJlcjtcblxuICAgIGlzU2Nyb2xsaW5nOiBib29sZWFuO1xuXG4gICAgZHJvcFRodW1iTGluZTogSFRNTEVsZW1lbnQ7XG5cbiAgICBlZGl0YWJsZVRvcDogbnVtYmVyO1xuXG4gICAgQFZpZXdDaGlsZCgnY29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjb250ZW50OiBFbGVtZW50UmVmO1xuXG4gICAgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGVkaXRhYmxlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yICYmIEVESVRPUl9UT19FTEVNRU5ULmdldCh0aGlzLmVkaXRvcik7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICB0aGlzLmRyb3BUaHVtYkxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5kcm9wVGh1bWJMaW5lLmNsYXNzTmFtZSA9IERST1BfVEhVTUJfTElORTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRTZXJ2aWNlID0gdGhpcy5lZGl0b3IuaW5qZWN0b3IuZ2V0KFRoZUNvbnRleHRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgbWVyZ2UoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuZWRpdGFibGVFbGVtZW50LCBgbW91c2Vtb3ZlYCksIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmVkaXRhYmxlRWxlbWVudCwgYG1vdXNlbGVhdmVgKSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFjb250ZXh0U2VydmljZS5nZXRPcHRpb25zKCkudGhlT3B0aW9ucy5yZWFkb25seSAmJiBjb250ZXh0U2VydmljZS5nZXRPcHRpb25zKCkudGhlT3B0aW9ucy5kcmFnQW5kRHJvcDtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShlID0+IHRoaXMuc2V0RHJhZ0ljb24oZSkpO1xuICAgICAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCBgZHJvcGApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhY29udGV4dFNlcnZpY2UuZ2V0T3B0aW9ucygpLnRoZU9wdGlvbnMucmVhZG9ubHkgJiYgY29udGV4dFNlcnZpY2UuZ2V0T3B0aW9ucygpLnRoZU9wdGlvbnMuZHJhZ0FuZERyb3A7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZSA9PiB0aGlzLm9uRHJvcChlKSk7XG4gICAgICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsIGBkcmFnb3ZlcmApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhY29udGV4dFNlcnZpY2UuZ2V0T3B0aW9ucygpLnRoZU9wdGlvbnMucmVhZG9ubHkgJiYgY29udGV4dFNlcnZpY2UuZ2V0T3B0aW9ucygpLnRoZU9wdGlvbnMuZHJhZ0FuZERyb3A7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZSA9PiB0aGlzLm9uRHJhZ292ZXIoZSkpO1xuICAgICAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCBgc2Nyb2xsYClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFjb250ZXh0U2VydmljZS5nZXRPcHRpb25zKCkudGhlT3B0aW9ucy5yZWFkb25seSAmJiBjb250ZXh0U2VydmljZS5nZXRPcHRpb25zKCkudGhlT3B0aW9ucy5kcmFnQW5kRHJvcDtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2Nyb2xsUG9zaXRpb24gPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzU2Nyb2xsaW5nICYmIHRoaXMuaXNEcmFnaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0YWJsZVRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmu5rliqjov4fnqIvkuK3vvIzpgJrov4forr7nva7niLbnuqflhYPntKDmnaXorr7nva5zbmFwc2hvdOS9jee9rlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURuZENvbnRhaW5lclBvc2l0aW9uKG51bGwsIHNjcm9sbFBvc2l0aW9uICsgdGhpcy5lZGl0YWJsZVRvcCArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldFZpc2liaWxpdHkoZmFsc2UpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlSGFuZGxlKCk7XG4gICAgfVxuXG4gICAgdmFsdWVDaGFuZ2VIYW5kbGUoKSB7XG4gICAgICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMuZWRpdG9yO1xuICAgICAgICB0aGlzLmVkaXRvci5vbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wcyA9IHRoaXMuZWRpdG9yLm9wZXJhdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBza2lwID0gb3BzLmxlbmd0aCA9PT0gMSAmJiBPcGVyYXRpb24uaXNTZWxlY3Rpb25PcGVyYXRpb24ob3BzWzBdKTtcbiAgICAgICAgICAgIGlmICghc2tpcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkNoYW5nZSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRG5kQ29udGFpbmVyUG9zaXRpb24obGVmdDogc3RyaW5nLCB0b3A6IHN0cmluZykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHRvcCAmJiB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHBhcmVudEVsZW1lbnQsICd0b3AnLCB0b3ApO1xuICAgICAgICBsZWZ0ICYmIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocGFyZW50RWxlbWVudCwgJ2xlZnQnLCBsZWZ0KTtcbiAgICB9XG5cbiAgICBnZXRFZGl0YWJsZVRvcChldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBvZmZzZXRIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCB7IGhlaWdodCB9ID0gdGhpcy5lZGl0YWJsZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChldmVudC5jbGllbnRZIDwgdGhpcy5kcmFnRWxlbWVudEhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0YWJsZVRvcCA9IC10aGlzLmVkaXRhYmxlRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhlaWdodCA+IGV2ZW50LnBhZ2VZICYmIGV2ZW50LmNsaWVudFkgKyB0aGlzLmRyYWdFbGVtZW50SGVpZ2h0ID49IG9mZnNldEhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0YWJsZVRvcCA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLmVkaXRhYmxlRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0YWJsZVRvcCA9IG51bGw7XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICB0aGlzLmlzRHJhZ2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZHJhZ0NoYW5nZS5lbWl0KHRoaXMuaXNEcmFnaW5nKTtcbiAgICAgICAgdGhpcy5kcmFnU25hcHNob3RDb250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRyYWctc25hcHNob3QtY29udGFpbmVyJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZHJhZ1NuYXBzaG90Q29udGVudC5jbGFzc05hbWUgPSAndGhlLWVkaXRvci10eXBvIGRyYWctc25hcHNob3QtY29udGFpbmVyJztcbiAgICAgICAgdGhpcy5kcmFnU25hcHNob3RDb250ZW50LmFwcGVuZENoaWxkKHRoaXMuZHJhZ0VsZW1lbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgICAgdGhpcy5kcmFnRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gJzAuMyc7XG4gICAgfVxuXG4gICAgb25EcmFnRW5kKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgdGhpcy5kcmFnRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgICAgIHRoaXMuaXNEcmFnaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0VmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgIHRoaXMucmVzZXREcmFnU25hcHNob3RDb250ZW50KCk7XG4gICAgICAgIHRoaXMuZHJhZ0NoYW5nZS5lbWl0KHRoaXMuaXNEcmFnaW5nKTtcbiAgICB9XG5cbiAgICBvbkRyb3AoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNEcmFnaW5nKSB7XG4gICAgICAgICAgICBtb3ZlRHJhZ05vZGUodGhpcy5lZGl0b3IsIHRoaXMuZHJhZ05vZGUsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ292ZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNEcmFnaW5nICYmICF0aGlzLmlzU2Nyb2xsaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmdldEVkaXRhYmxlVG9wKGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgY29uc3QgeyBsZWZ0OiBlZGl0b3JMZWZ0LCB0b3A6IGVkaXRvclRvcCwgaGVpZ2h0IH0gPSB0aGlzLmVkaXRhYmxlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGxldCB0b3AgPSAwO1xuICAgICAgICAgICAgbGV0IGxlZnQgPSAwO1xuXG4gICAgICAgICAgICBpZiAoZWRpdG9yTGVmdCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY2xpZW50WCArIHRoaXMuZHJhZ0VsZW1lbnRXaWR0aCAvIDIgPiBvZmZzZXRXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gZXZlbnQucGFnZVggLSBlZGl0b3JMZWZ0IC0gKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gTWF0aC5tYXgoZXZlbnQucGFnZVggLSBlZGl0b3JMZWZ0LCAtZWRpdG9yTGVmdCkgKyAxMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwYWRkaW5nVG9wID0gMDsgLy8gcGFkZGluZ1RvcDog57yW6L6R5Zmo6Led56a76aG26YOo55qE6Led56a7XG4gICAgICAgICAgICBpZiAoZWRpdG9yVG9wID49IDApIHtcbiAgICAgICAgICAgICAgICAvLyDml6Dmu5rliqjmg4XlhrXkuItcbiAgICAgICAgICAgICAgICB0b3AgPSBldmVudC5jbGllbnRZIC0gdGhpcy5lZGl0YWJsZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICAgICAgICAgIHBhZGRpbmdUb3AgPSBlZGl0b3JUb3AgLSB0aGlzLmVkaXRhYmxlRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIOaciea7muWKqOi3neemu1xuICAgICAgICAgICAgICAgIHRvcCA9IE1hdGguYWJzKGVkaXRvclRvcCkgKyBldmVudC5jbGllbnRZOyAvLyDmu5rliqjot53nprsgKyDpvKDmoIdjbGllbnRZXG4gICAgICAgICAgICAgICAgcGFkZGluZ1RvcCA9IGV2ZW50LnBhZ2VZIC0gdGhpcy5lZGl0YWJsZUVsZW1lbnQub2Zmc2V0VG9wIC0gdG9wO1xuICAgICAgICAgICAgICAgIC8vIOmYsuatouW6lemDqOWHuueOsOa7muWKqOadoVxuICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nVG9wIDwgaGVpZ2h0IC0gdG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcCA9IHRvcCArIHBhZGRpbmdUb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVEbmRDb250YWluZXJQb3NpdGlvbihsZWZ0ICsgJ3B4JywgdG9wICsgJ3B4Jyk7XG4gICAgICAgICAgICB0aGlzLnNldFNuYXBzaG90U3R5bGUoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5zZXREcm9wVGh1bWJMaW5lKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERyb3BUaHVtYkxpbmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBnZXRDdXJyZW50VGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudCk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGdldEhvdmVyRGlyZWN0aW9uKHRoaXMuZWRpdG9yLCBldmVudCk7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoZGlyZWN0aW9uICYmIGRpcmVjdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nPy5xdWVyeVNlbGVjdG9yKCdbZGF0YS1zbGF0ZS1ub2RlPVwiZWxlbWVudFwiXScpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgaXNWYWxpZERyYWcodGhpcy5lZGl0b3IsIHRoaXMuZHJhZ05vZGUubm9kZSwgZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZHJvcFRodW1iTGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREcmFnSWNvbihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNEcmFnaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlRW50cnkgPSBmaW5kTm9kZUVudHJ5QnlQb2ludCh0aGlzLmVkaXRvciwgZXZlbnQueCwgZXZlbnQueSwgJ2hpZ2hlc3QnKTtcbiAgICAgICAgICAgIGlmIChub2RlRW50cnkgJiYgIUVkaXRvci5pc0VtcHR5KHRoaXMuZWRpdG9yLCBub2RlRW50cnlbMF0pKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZSh0aGlzLmVkaXRvciwgbm9kZUVudHJ5WzBdKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdOb2RlID0ge1xuICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlRW50cnlbMF0sXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IG5vZGVFbnRyeVsxXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnRWxlbWVudCA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIGxldCBsaW5lSGVpZ2h0ID0gY29lcmNlUGl4ZWxzRnJvbUNzc1ZhbHVlKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHJvb3ROb2RlKVsnbGluZUhlaWdodCddKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRUb3AgPSByb290Tm9kZS5vZmZzZXRUb3AgKyAocm9vdE5vZGUub2Zmc2V0UGFyZW50IGFzIEhUTUxFbGVtZW50KS5vZmZzZXRUb3AgKyAobGluZUhlaWdodCAtIERSQUdfSUNPTl9TSVpFKSAvIDI7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0TGVmdCA9IHJvb3ROb2RlLm9mZnNldExlZnQgKyAocm9vdE5vZGUub2Zmc2V0UGFyZW50IGFzIEhUTUxFbGVtZW50KS5vZmZzZXRMZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRG5kQ29udGFpbmVyUG9zaXRpb24ob2Zmc2V0TGVmdCAtIERSQUdfSUNPTl9TSVpFIC0gRFJBR19JQ09OX09GRlNFVCArICdweCcsIG9mZnNldFRvcCArICdweCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmlzaWJpbGl0eSh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFNuYXBzaG90U3R5bGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLmRyYWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLmRyYWdFbGVtZW50SGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB0aGlzLmRyYWdFbGVtZW50V2lkdGggPSB3aWR0aDtcblxuICAgICAgICBsZXQgZHJhZ1NuYXBzaG90Q29udGVudFN0eWxlID0gYHZpc2liaWxpdHk6IHZpc2libGU7IHdpZHRoOiAke3dpZHRoICsgU05BUFNIT1RfUEFERElOR19XSURUSCAqIDJ9cHg7YDtcbiAgICAgICAgaWYgKGhlaWdodCA+IFNOQVBTSE9UX0xJTUlfSEVJR0hUKSB7XG4gICAgICAgICAgICBkcmFnU25hcHNob3RDb250ZW50U3R5bGUgPSBkcmFnU25hcHNob3RDb250ZW50U3R5bGUgKyAndHJhbnNmb3JtOiBzY2FsZSgwLjQ1KTsnO1xuICAgICAgICAgICAgdGhpcy5kcmFnRWxlbWVudEhlaWdodCA9IHRoaXMuZHJhZ0VsZW1lbnRIZWlnaHQgKiAwLjQ1O1xuICAgICAgICAgICAgdGhpcy5kcmFnRWxlbWVudFdpZHRoID0gdGhpcy5kcmFnRWxlbWVudFdpZHRoICogMC40NTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc25hcHNob3RUb3AgPSAwO1xuICAgICAgICBsZXQgc25hcHNob3RMZWZ0ID0gMDtcbiAgICAgICAgLy8g5LiK5LiL56e75Yqo77ya6LaF5Ye65bGP5bmV6auY5bqm77yM6YeN5paw6K6+572uc25hcHNob3TnmoTkvY3nva5cbiAgICAgICAgaWYgKGV2ZW50LmNsaWVudFkgKyB0aGlzLmRyYWdFbGVtZW50SGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCkge1xuICAgICAgICAgICAgc25hcHNob3RUb3AgPSB0aGlzLmRyYWdFbGVtZW50SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc25hcHNob3RUb3AgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g5bem5Y+z56e75Yqo77ya6LaF5Ye65bGP5bmV5a695bqm77yM6YeN5paw6K6+572uc25hcHNob3TnmoTkvY3nva5cbiAgICAgICAgaWYgKGV2ZW50LmNsaWVudFggKyB0aGlzLmRyYWdFbGVtZW50V2lkdGggLyAyID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoKSB7XG4gICAgICAgICAgICBzbmFwc2hvdExlZnQgPSB0aGlzLmRyYWdFbGVtZW50V2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbmFwc2hvdExlZnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGRyYWdTbmFwc2hvdENvbnRlbnRTdHlsZSA9IGRyYWdTbmFwc2hvdENvbnRlbnRTdHlsZSArIGB0b3A6ICR7LXNuYXBzaG90VG9wfXB4OyBsZWZ0OiAkey1zbmFwc2hvdExlZnR9cHg7YDtcbiAgICAgICAgdGhpcy5kcmFnU25hcHNob3RDb250ZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBkcmFnU25hcHNob3RDb250ZW50U3R5bGUpO1xuICAgIH1cblxuICAgIHJlc2V0RHJhZ1NuYXBzaG90Q29udGVudCgpIHtcbiAgICAgICAgdGhpcy5kcmFnU25hcHNob3RDb250ZW50LmNsYXNzTmFtZSA9ICdkcmFnLXNuYXBzaG90LWNvbnRhaW5lcic7XG4gICAgICAgIHRoaXMuZHJhZ1NuYXBzaG90Q29udGVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJycpO1xuICAgICAgICB0aGlzLmRyYWdTbmFwc2hvdENvbnRlbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgfVxuXG4gICAgc2V0VmlzaWJpbGl0eSh2aXNpYmxlID0gdHJ1ZSkge1xuICAgICAgICAodGhpcy5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnZpc2liaWxpdHkgPSB2aXNpYmxlID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGRyYWdnYWJsZT1cInRydWVcIlxuICAgIGNsYXNzPVwidGhlLWRyYWctZHJvcC1pY29uXCJcbiAgICBbbmdTdHlsZV09XCJ7IG9wYWNpdHk6IGlzRHJhZ2luZyA/IDAgOiAnJyB9XCJcbiAgICAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgIChkcmFnZW5kKT1cIm9uRHJhZ0VuZCgkZXZlbnQpXCJcbj5cbiAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJkcmFnXCI+IDwvdGh5LWljb24+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { coercePixelsFromCssValue, findNodeEntryByPoint } from '../../../utils/dom';
2
+ import { TheEditor } from '../../../interfaces';
3
+ import { EDITOR_TO_ELEMENT } from 'slate-angular';
4
+ export const getCurrentTarget = (editor, event) => {
5
+ const editorElement = EDITOR_TO_ELEMENT.get(editor);
6
+ const { left, right } = editorElement.getBoundingClientRect();
7
+ let { paddingLeft, paddingRight } = window.getComputedStyle(editorElement, null);
8
+ const paddingLeftPixels = coercePixelsFromCssValue(paddingLeft);
9
+ const paddingRightPixels = coercePixelsFromCssValue(paddingRight);
10
+ let x = event.x;
11
+ if (event.x <= left + paddingLeftPixels || event.x >= right - paddingRightPixels) {
12
+ x = left + paddingLeftPixels;
13
+ }
14
+ const nodeEntry = findNodeEntryByPoint(editor, x, event.y);
15
+ if (nodeEntry) {
16
+ return TheEditor.toDOMNode(editor, nodeEntry[0]);
17
+ }
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWN1cnJlbnQtdGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvZG5kL3V0aWxzL2dldC1jdXJyZW50LXRhcmdldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBaUIsRUFBRSxLQUFpQixFQUFlLEVBQUU7SUFDbEYsTUFBTSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBZ0IsQ0FBQztJQUNuRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzlELElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRixNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sa0JBQWtCLEdBQUcsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoQixJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLGtCQUFrQixFQUFFO1FBQzlFLENBQUMsR0FBRyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7S0FDaEM7SUFDRCxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxJQUFJLFNBQVMsRUFBRTtRQUNYLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDcEQ7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VQaXhlbHNGcm9tQ3NzVmFsdWUsIGZpbmROb2RlRW50cnlCeVBvaW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCB7IFRoZUVkaXRvciB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRURJVE9SX1RPX0VMRU1FTlQgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRUYXJnZXQgPSAoZWRpdG9yOiBUaGVFZGl0b3IsIGV2ZW50OiBNb3VzZUV2ZW50KTogSFRNTEVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSBFRElUT1JfVE9fRUxFTUVOVC5nZXQoZWRpdG9yKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCB7IGxlZnQsIHJpZ2h0IH0gPSBlZGl0b3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCB7IHBhZGRpbmdMZWZ0LCBwYWRkaW5nUmlnaHQgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRvckVsZW1lbnQsIG51bGwpO1xuICAgIGNvbnN0IHBhZGRpbmdMZWZ0UGl4ZWxzID0gY29lcmNlUGl4ZWxzRnJvbUNzc1ZhbHVlKHBhZGRpbmdMZWZ0KTtcbiAgICBjb25zdCBwYWRkaW5nUmlnaHRQaXhlbHMgPSBjb2VyY2VQaXhlbHNGcm9tQ3NzVmFsdWUocGFkZGluZ1JpZ2h0KTtcbiAgICBsZXQgeCA9IGV2ZW50Lng7XG4gICAgaWYgKGV2ZW50LnggPD0gbGVmdCArIHBhZGRpbmdMZWZ0UGl4ZWxzIHx8IGV2ZW50LnggPj0gcmlnaHQgLSBwYWRkaW5nUmlnaHRQaXhlbHMpIHtcbiAgICAgICAgeCA9IGxlZnQgKyBwYWRkaW5nTGVmdFBpeGVscztcbiAgICB9XG4gICAgY29uc3Qgbm9kZUVudHJ5ID0gZmluZE5vZGVFbnRyeUJ5UG9pbnQoZWRpdG9yLCB4LCBldmVudC55KTtcbiAgICBpZiAobm9kZUVudHJ5KSB7XG4gICAgICAgIHJldHVybiBUaGVFZGl0b3IudG9ET01Ob2RlKGVkaXRvciwgbm9kZUVudHJ5WzBdKTtcbiAgICB9XG59O1xuIl19
@@ -0,0 +1,13 @@
1
+ import { getCurrentTarget } from './get-current-target';
2
+ export const getHoverDirection = (editor, event) => {
3
+ const rootNode = getCurrentTarget(editor, event);
4
+ if (rootNode) {
5
+ const { top, bottom } = rootNode.getBoundingClientRect();
6
+ const middleHeight = (bottom - top) / 2;
7
+ if (top + middleHeight > event.clientY) {
8
+ return 'top';
9
+ }
10
+ return 'bottom';
11
+ }
12
+ };
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWhvdmVyLWRpcmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2RuZC91dGlscy9nZXQtaG92ZXItZGlyZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBaUIsRUFBRSxLQUFpQixFQUFpQixFQUFFO0lBQ3JGLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRCxJQUFJLFFBQVEsRUFBRTtRQUNWLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDekQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksR0FBRyxHQUFHLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxRQUFRLENBQUM7S0FDbkI7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERyb3BEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFRhcmdldCB9IGZyb20gJy4vZ2V0LWN1cnJlbnQtdGFyZ2V0JztcblxuZXhwb3J0IGNvbnN0IGdldEhvdmVyRGlyZWN0aW9uID0gKGVkaXRvcjogVGhlRWRpdG9yLCBldmVudDogTW91c2VFdmVudCk6IERyb3BEaXJlY3Rpb24gPT4ge1xuICAgIGNvbnN0IHJvb3ROb2RlID0gZ2V0Q3VycmVudFRhcmdldChlZGl0b3IsIGV2ZW50KTtcbiAgICBpZiAocm9vdE5vZGUpIHtcbiAgICAgICAgY29uc3QgeyB0b3AsIGJvdHRvbSB9ID0gcm9vdE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IG1pZGRsZUhlaWdodCA9IChib3R0b20gLSB0b3ApIC8gMjtcbiAgICAgICAgaWYgKHRvcCArIG1pZGRsZUhlaWdodCA+IGV2ZW50LmNsaWVudFkpIHtcbiAgICAgICAgICAgIHJldHVybiAndG9wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ2JvdHRvbSc7XG4gICAgfVxufTtcbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { Editor } from 'slate';
2
+ import { DefaultElementOptions, TheEditor } from '../../../interfaces';
3
+ import { mergeElementOptions } from '../../../utils/merge-element-options';
4
+ export const isValidDrag = (editor, dragNode, currentTarget) => {
5
+ var _a;
6
+ const node = TheEditor.toSlateNode(editor, currentTarget);
7
+ const dropPath = TheEditor.findPath(editor, node);
8
+ const dragPath = TheEditor.findPath(editor, dragNode);
9
+ if (dragPath[0] === dropPath[0] && dropPath.length > 1) {
10
+ // 阻止list元素拖入自身
11
+ return false;
12
+ }
13
+ let allElementOptions = DefaultElementOptions;
14
+ if ((_a = editor.extraElementOptions) === null || _a === void 0 ? void 0 : _a.length) {
15
+ const extraInfo = mergeElementOptions(editor.extraElementOptions);
16
+ allElementOptions = Object.values(extraInfo);
17
+ }
18
+ const types = allElementOptions.map(item => item.type);
19
+ if (types.indexOf(node.type) > -1 && allElementOptions[types.indexOf(node.type)].isSecondaryContainer) {
20
+ // 阻止向table-celld等二级容器中拖入
21
+ return false;
22
+ }
23
+ let containerParent = Editor.above(editor, {
24
+ at: dropPath,
25
+ mode: 'lowest',
26
+ match: (node) => {
27
+ return node && node.type && types.includes(node.type);
28
+ }
29
+ });
30
+ if (containerParent) {
31
+ const { inValidChildrenTypes } = allElementOptions.find(item => item.type === containerParent[0].type);
32
+ if (inValidChildrenTypes.includes(dragNode.type)) {
33
+ return false;
34
+ }
35
+ }
36
+ return true;
37
+ };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtdmFsaWQtZHJhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2RuZC91dGlscy9pcy12YWxpZC1kcmFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQWlCLEVBQUUsUUFBdUIsRUFBRSxhQUEwQixFQUFFLEVBQUU7O0lBQ2xHLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBa0IsQ0FBQztJQUMzRSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN0RCxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDcEQsZUFBZTtRQUNmLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsSUFBSSxpQkFBaUIsR0FBRyxxQkFBcUIsQ0FBQztJQUM5QyxJQUFJLE1BQUEsTUFBTSxDQUFDLG1CQUFtQiwwQ0FBRSxNQUFNLEVBQUU7UUFDcEMsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEUsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNoRDtJQUNELE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUU7UUFDbkcseUJBQXlCO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsSUFBSSxlQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDdkMsRUFBRSxFQUFFLFFBQVE7UUFDWixJQUFJLEVBQUUsUUFBUTtRQUNkLEtBQUssRUFBRSxDQUFDLElBQW1CLEVBQUUsRUFBRTtZQUMzQixPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELENBQUM7S0FDSixDQUFDLENBQUM7SUFFSCxJQUFJLGVBQWUsRUFBRTtRQUNqQixNQUFNLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RyxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUMsT0FBTyxLQUFLLENBQUM7U0FDaEI7S0FDSjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvciB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnQgfSBmcm9tICcuLi8uLi8uLi9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgRGVmYXVsdEVsZW1lbnRPcHRpb25zLCBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IG1lcmdlRWxlbWVudE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tZXJnZS1lbGVtZW50LW9wdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZERyYWcgPSAoZWRpdG9yOiBUaGVFZGl0b3IsIGRyYWdOb2RlOiBDdXN0b21FbGVtZW50LCBjdXJyZW50VGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSBUaGVFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCBjdXJyZW50VGFyZ2V0KSBhcyBDdXN0b21FbGVtZW50O1xuICAgIGNvbnN0IGRyb3BQYXRoID0gVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgbm9kZSk7XG4gICAgY29uc3QgZHJhZ1BhdGggPSBUaGVFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBkcmFnTm9kZSk7XG4gICAgaWYgKGRyYWdQYXRoWzBdID09PSBkcm9wUGF0aFswXSAmJiBkcm9wUGF0aC5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vIOmYu+atomxpc3TlhYPntKDmi5blhaXoh6rouqtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgYWxsRWxlbWVudE9wdGlvbnMgPSBEZWZhdWx0RWxlbWVudE9wdGlvbnM7XG4gICAgaWYgKGVkaXRvci5leHRyYUVsZW1lbnRPcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZXh0cmFJbmZvID0gbWVyZ2VFbGVtZW50T3B0aW9ucyhlZGl0b3IuZXh0cmFFbGVtZW50T3B0aW9ucyk7XG4gICAgICAgIGFsbEVsZW1lbnRPcHRpb25zID0gT2JqZWN0LnZhbHVlcyhleHRyYUluZm8pO1xuICAgIH1cbiAgICBjb25zdCB0eXBlcyA9IGFsbEVsZW1lbnRPcHRpb25zLm1hcChpdGVtID0+IGl0ZW0udHlwZSk7XG4gICAgaWYgKHR5cGVzLmluZGV4T2Yobm9kZS50eXBlKSA+IC0xICYmIGFsbEVsZW1lbnRPcHRpb25zW3R5cGVzLmluZGV4T2Yobm9kZS50eXBlKV0uaXNTZWNvbmRhcnlDb250YWluZXIpIHtcbiAgICAgICAgLy8g6Zi75q2i5ZCRdGFibGUtY2VsbGTnrYnkuoznuqflrrnlmajkuK3mi5blhaVcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgY29udGFpbmVyUGFyZW50ID0gRWRpdG9yLmFib3ZlKGVkaXRvciwge1xuICAgICAgICBhdDogZHJvcFBhdGgsXG4gICAgICAgIG1vZGU6ICdsb3dlc3QnLFxuICAgICAgICBtYXRjaDogKG5vZGU6IEN1c3RvbUVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlICYmIG5vZGUudHlwZSAmJiB0eXBlcy5pbmNsdWRlcyhub2RlLnR5cGUpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoY29udGFpbmVyUGFyZW50KSB7XG4gICAgICAgIGNvbnN0IHsgaW5WYWxpZENoaWxkcmVuVHlwZXMgfSA9IGFsbEVsZW1lbnRPcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09IGNvbnRhaW5lclBhcmVudFswXS50eXBlKTtcbiAgICAgICAgaWYgKGluVmFsaWRDaGlsZHJlblR5cGVzLmluY2x1ZGVzKGRyYWdOb2RlLnR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuIl19
@@ -0,0 +1,30 @@
1
+ import { TheEditor } from '../../../interfaces';
2
+ import { Path, Editor, Transforms } from 'slate';
3
+ import { removeDropThumbLine } from './remove-drop-thumb-line';
4
+ import { EDITOR_TO_ELEMENT } from 'slate-angular';
5
+ import { DROP_THUMB_LINE } from '../../../constants';
6
+ export const moveDragNode = (editor, dragNode, event) => {
7
+ event.stopPropagation();
8
+ const element = EDITOR_TO_ELEMENT.get(editor);
9
+ const dropThumbLine = element.querySelector('.' + DROP_THUMB_LINE);
10
+ const parentElement = dropThumbLine && dropThumbLine.parentNode;
11
+ if (parentElement) {
12
+ const node = TheEditor.toSlateNode(editor, parentElement);
13
+ let dropPath = node && TheEditor.findPath(editor, node);
14
+ if (dropPath.length) {
15
+ const dragPath = dragNode.path;
16
+ const before = Path.isBefore(dragPath, dropPath) && Path.isSibling(dragPath, dropPath);
17
+ dropPath = before ? dropPath : Path.next(dropPath);
18
+ if (dropPath.length) {
19
+ Editor.withoutNormalizing(editor, () => {
20
+ Transforms.moveNodes(editor, {
21
+ at: dragPath,
22
+ to: dropPath
23
+ });
24
+ });
25
+ }
26
+ }
27
+ }
28
+ removeDropThumbLine(editor);
29
+ };
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS1kcmFnLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9kbmQvdXRpbHMvbW92ZS1kcmFnLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQWlCLEVBQUUsUUFBa0IsRUFBRSxLQUFpQixFQUFFLEVBQUU7SUFDckYsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxlQUFlLENBQUMsQ0FBQztJQUNuRSxNQUFNLGFBQWEsR0FBRyxhQUFhLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQztJQUNoRSxJQUFJLGFBQWEsRUFBRTtRQUNmLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzFELElBQUksUUFBUSxHQUFHLElBQUksSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDakIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2RixRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkQsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUNqQixNQUFNLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtvQkFDbkMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7d0JBQ3pCLEVBQUUsRUFBRSxRQUFRO3dCQUNaLEVBQUUsRUFBRSxRQUFRO3FCQUNmLENBQUMsQ0FBQztnQkFDUCxDQUFDLENBQUMsQ0FBQzthQUNOO1NBQ0o7S0FDSjtJQUVELG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERyYWdOb2RlLCBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBhdGgsIEVkaXRvciwgVHJhbnNmb3JtcyB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IHJlbW92ZURyb3BUaHVtYkxpbmUgfSBmcm9tICcuL3JlbW92ZS1kcm9wLXRodW1iLWxpbmUnO1xuaW1wb3J0IHsgRURJVE9SX1RPX0VMRU1FTlQgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IERST1BfVEhVTUJfTElORSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBtb3ZlRHJhZ05vZGUgPSAoZWRpdG9yOiBUaGVFZGl0b3IsIGRyYWdOb2RlOiBEcmFnTm9kZSwgZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBlbGVtZW50ID0gRURJVE9SX1RPX0VMRU1FTlQuZ2V0KGVkaXRvcik7XG4gICAgY29uc3QgZHJvcFRodW1iTGluZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLicgKyBEUk9QX1RIVU1CX0xJTkUpO1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBkcm9wVGh1bWJMaW5lICYmIGRyb3BUaHVtYkxpbmUucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgICBjb25zdCBub2RlID0gVGhlRWRpdG9yLnRvU2xhdGVOb2RlKGVkaXRvciwgcGFyZW50RWxlbWVudCk7XG4gICAgICAgIGxldCBkcm9wUGF0aCA9IG5vZGUgJiYgVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgbm9kZSk7XG4gICAgICAgIGlmIChkcm9wUGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdQYXRoID0gZHJhZ05vZGUucGF0aDtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IFBhdGguaXNCZWZvcmUoZHJhZ1BhdGgsIGRyb3BQYXRoKSAmJiBQYXRoLmlzU2libGluZyhkcmFnUGF0aCwgZHJvcFBhdGgpO1xuICAgICAgICAgICAgZHJvcFBhdGggPSBiZWZvcmUgPyBkcm9wUGF0aCA6IFBhdGgubmV4dChkcm9wUGF0aCk7XG4gICAgICAgICAgICBpZiAoZHJvcFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlTm9kZXMoZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdDogZHJhZ1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0bzogZHJvcFBhdGhcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVEcm9wVGh1bWJMaW5lKGVkaXRvcik7XG59O1xuIl19
@@ -0,0 +1,10 @@
1
+ import { EDITOR_TO_ELEMENT } from 'slate-angular';
2
+ import { DROP_THUMB_LINE } from '../../../constants';
3
+ export const removeDropThumbLine = (editor) => {
4
+ const element = EDITOR_TO_ELEMENT.get(editor);
5
+ const dropThumbLine = element.querySelector('.' + DROP_THUMB_LINE);
6
+ if (dropThumbLine) {
7
+ dropThumbLine.remove();
8
+ }
9
+ };
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlLWRyb3AtdGh1bWItbGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2RuZC91dGlscy9yZW1vdmUtZHJvcC10aHVtYi1saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHckQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxNQUFpQixFQUFFLEVBQUU7SUFDckQsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLGVBQWUsQ0FBQyxDQUFDO0lBQ25FLElBQUksYUFBYSxFQUFFO1FBQ2YsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQzFCO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRURJVE9SX1RPX0VMRU1FTlQgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IERST1BfVEhVTUJfTElORSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IHJlbW92ZURyb3BUaHVtYkxpbmUgPSAoZWRpdG9yOiBUaGVFZGl0b3IpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gRURJVE9SX1RPX0VMRU1FTlQuZ2V0KGVkaXRvcik7XG4gICAgY29uc3QgZHJvcFRodW1iTGluZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLicgKyBEUk9QX1RIVU1CX0xJTkUpO1xuICAgIGlmIChkcm9wVGh1bWJMaW5lKSB7XG4gICAgICAgIGRyb3BUaHVtYkxpbmUucmVtb3ZlKCk7XG4gICAgfVxufTtcbiJdfQ==