@plait/draw 0.57.0 → 0.58.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 (145) hide show
  1. package/constants/draw.d.ts +1 -0
  2. package/constants/geometry.d.ts +78 -2
  3. package/constants/index.d.ts +1 -0
  4. package/constants/pointer.d.ts +4 -2
  5. package/engines/index.d.ts +3 -3
  6. package/engines/table/table.d.ts +15 -1
  7. package/engines/uml/actor.d.ts +2 -0
  8. package/engines/uml/combined-fragment.d.ts +3 -0
  9. package/engines/uml/container.d.ts +2 -0
  10. package/engines/uml/package.d.ts +3 -0
  11. package/esm2022/constants/draw.mjs +2 -0
  12. package/esm2022/constants/geometry.mjs +69 -4
  13. package/esm2022/constants/index.mjs +2 -1
  14. package/esm2022/constants/pointer.mjs +9 -3
  15. package/esm2022/engines/basic-shapes/cloud.mjs +1 -1
  16. package/esm2022/engines/basic-shapes/comment.mjs +1 -1
  17. package/esm2022/engines/basic-shapes/diamond.mjs +2 -2
  18. package/esm2022/engines/basic-shapes/parallelogram.mjs +2 -2
  19. package/esm2022/engines/basic-shapes/pentagon.mjs +1 -1
  20. package/esm2022/engines/basic-shapes/round-comment.mjs +2 -2
  21. package/esm2022/engines/basic-shapes/star.mjs +1 -1
  22. package/esm2022/engines/basic-shapes/trapezoid.mjs +2 -2
  23. package/esm2022/engines/basic-shapes/triangle.mjs +2 -2
  24. package/esm2022/engines/flowchart/database.mjs +2 -2
  25. package/esm2022/engines/flowchart/display.mjs +1 -1
  26. package/esm2022/engines/flowchart/document.mjs +1 -1
  27. package/esm2022/engines/flowchart/hard-disk.mjs +2 -2
  28. package/esm2022/engines/flowchart/internal-storage.mjs +2 -2
  29. package/esm2022/engines/flowchart/manual-input.mjs +2 -2
  30. package/esm2022/engines/flowchart/manual-loop.mjs +2 -2
  31. package/esm2022/engines/flowchart/merge.mjs +1 -1
  32. package/esm2022/engines/flowchart/multi-document.mjs +1 -1
  33. package/esm2022/engines/flowchart/note-curly-left.mjs +2 -2
  34. package/esm2022/engines/flowchart/note-curly-right.mjs +2 -2
  35. package/esm2022/engines/flowchart/note-square.mjs +1 -1
  36. package/esm2022/engines/flowchart/off-page.mjs +2 -2
  37. package/esm2022/engines/flowchart/or.mjs +1 -8
  38. package/esm2022/engines/flowchart/predefined-process.mjs +1 -1
  39. package/esm2022/engines/flowchart/summing-junction.mjs +1 -8
  40. package/esm2022/engines/index.mjs +14 -5
  41. package/esm2022/engines/table/table.mjs +58 -10
  42. package/esm2022/engines/uml/actor.mjs +102 -0
  43. package/esm2022/engines/uml/combined-fragment.mjs +66 -0
  44. package/esm2022/engines/uml/container.mjs +44 -0
  45. package/esm2022/engines/uml/package.mjs +75 -0
  46. package/esm2022/generators/geometry-shape.generator.mjs +3 -3
  47. package/esm2022/generators/index.mjs +7 -0
  48. package/esm2022/generators/line-active.generator.mjs +3 -3
  49. package/esm2022/generators/line-auto-complete.generator.mjs +1 -1
  50. package/esm2022/generators/single-text.generator.mjs +16 -0
  51. package/esm2022/generators/table.generator.mjs +20 -0
  52. package/esm2022/generators/text.generator.mjs +134 -0
  53. package/esm2022/geometry.component.mjs +63 -76
  54. package/esm2022/image.component.mjs +8 -25
  55. package/esm2022/interfaces/element.mjs +2 -1
  56. package/esm2022/interfaces/engine.mjs +2 -0
  57. package/esm2022/interfaces/geometry.mjs +14 -1
  58. package/esm2022/interfaces/image.mjs +1 -1
  59. package/esm2022/interfaces/index.mjs +27 -4
  60. package/esm2022/interfaces/line.mjs +1 -1
  61. package/esm2022/interfaces/table.mjs +9 -2
  62. package/esm2022/line.component.mjs +8 -25
  63. package/esm2022/plugins/with-draw-fragment.mjs +3 -1
  64. package/esm2022/plugins/with-draw-hotkey.mjs +12 -3
  65. package/esm2022/plugins/with-draw-resize.mjs +1 -1
  66. package/esm2022/plugins/with-draw.mjs +6 -2
  67. package/esm2022/plugins/with-geometry-create.mjs +2 -1
  68. package/esm2022/plugins/with-geometry-resize.mjs +1 -1
  69. package/esm2022/plugins/with-line-auto-complete-reaction.mjs +2 -2
  70. package/esm2022/plugins/with-line-bound-reaction.mjs +3 -4
  71. package/esm2022/plugins/with-line-create.mjs +3 -3
  72. package/esm2022/plugins/with-line-resize.mjs +3 -3
  73. package/esm2022/plugins/with-swimlane-create.mjs +132 -0
  74. package/esm2022/plugins/with-swimlane.mjs +21 -0
  75. package/esm2022/plugins/with-table-resize.mjs +130 -0
  76. package/esm2022/plugins/with-table.mjs +53 -7
  77. package/esm2022/public-api.mjs +2 -1
  78. package/esm2022/table.component.mjs +115 -24
  79. package/esm2022/transforms/geometry-text.mjs +6 -3
  80. package/esm2022/transforms/geometry.mjs +3 -2
  81. package/esm2022/transforms/index.mjs +11 -2
  82. package/esm2022/transforms/multi-text-geometry-text.mjs +15 -0
  83. package/esm2022/transforms/swimlane.mjs +97 -0
  84. package/esm2022/transforms/table-text.mjs +44 -0
  85. package/esm2022/utils/clipboard.mjs +15 -2
  86. package/esm2022/utils/common.mjs +130 -0
  87. package/esm2022/utils/geometry.mjs +49 -63
  88. package/esm2022/utils/hit.mjs +47 -18
  89. package/esm2022/utils/index.mjs +4 -1
  90. package/esm2022/utils/line/elbow.mjs +2 -2
  91. package/esm2022/utils/line/line-arrow.mjs +2 -2
  92. package/esm2022/utils/line/line-basic.mjs +4 -4
  93. package/esm2022/utils/line/line-common.mjs +2 -2
  94. package/esm2022/utils/memorize.mjs +7 -1
  95. package/esm2022/utils/multi-text-geometry.mjs +61 -0
  96. package/esm2022/utils/position/geometry.mjs +2 -40
  97. package/esm2022/utils/selected.mjs +14 -1
  98. package/esm2022/utils/shape.mjs +5 -2
  99. package/esm2022/utils/snap-resizing.mjs +7 -7
  100. package/esm2022/utils/style/stroke.mjs +4 -10
  101. package/esm2022/utils/swimlane.mjs +120 -0
  102. package/esm2022/utils/table.mjs +124 -0
  103. package/fesm2022/plait-draw.mjs +6158 -4642
  104. package/fesm2022/plait-draw.mjs.map +1 -1
  105. package/generators/index.d.ts +6 -0
  106. package/generators/line-auto-complete.generator.d.ts +2 -2
  107. package/generators/single-text.generator.d.ts +11 -0
  108. package/generators/table.generator.d.ts +9 -0
  109. package/generators/text.generator.d.ts +43 -0
  110. package/geometry.component.d.ts +11 -17
  111. package/image.component.d.ts +5 -11
  112. package/interfaces/element.d.ts +2 -1
  113. package/interfaces/engine.d.ts +16 -0
  114. package/interfaces/geometry.d.ts +23 -18
  115. package/interfaces/image.d.ts +4 -2
  116. package/interfaces/index.d.ts +12 -3
  117. package/interfaces/line.d.ts +4 -5
  118. package/interfaces/table.d.ts +14 -1
  119. package/line.component.d.ts +4 -10
  120. package/package.json +1 -1
  121. package/plugins/with-swimlane-create.d.ts +8 -0
  122. package/plugins/with-swimlane.d.ts +2 -0
  123. package/plugins/with-table-resize.d.ts +2 -0
  124. package/plugins/with-table.d.ts +5 -1
  125. package/public-api.d.ts +1 -0
  126. package/table.component.d.ts +17 -11
  127. package/transforms/geometry.d.ts +2 -2
  128. package/transforms/index.d.ts +8 -2
  129. package/transforms/multi-text-geometry-text.d.ts +4 -0
  130. package/transforms/swimlane.d.ts +6 -0
  131. package/transforms/table-text.d.ts +4 -0
  132. package/utils/clipboard.d.ts +2 -0
  133. package/utils/common.d.ts +27 -0
  134. package/utils/geometry.d.ts +34 -15
  135. package/utils/hit.d.ts +4 -2
  136. package/utils/index.d.ts +3 -0
  137. package/utils/line/line-common.d.ts +3 -3
  138. package/utils/memorize.d.ts +3 -1
  139. package/utils/multi-text-geometry.d.ts +14 -0
  140. package/utils/position/geometry.d.ts +8 -21
  141. package/utils/selected.d.ts +4 -0
  142. package/utils/shape.d.ts +2 -2
  143. package/utils/style/stroke.d.ts +4 -5
  144. package/utils/swimlane.d.ts +52 -0
  145. package/utils/table.d.ts +26 -0
@@ -2,13 +2,13 @@ import { PlaitNode, Point } from '@plait/core';
2
2
  import { simplifyOrthogonalPoints, withResize } from '@plait/common';
3
3
  import { getSelectedLineElements } from '../utils/selected';
4
4
  import { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';
5
- import { getSnappingGeometry } from '../utils/position/geometry';
6
5
  import { LineShape } from '../interfaces';
7
6
  import { DrawTransforms } from '../transforms';
8
7
  import { getElbowPoints, getNextRenderPoints, isUseDefaultOrthogonalRoute } from '../utils/line/elbow';
9
8
  import { alignElbowSegment, alignPoints, getIndexAndDeleteCountByKeyPoint, getResizedPreviousAndNextPoint, hasIllegalElbowPoint } from '../utils/line/line-resize';
10
9
  import { getHitConnection, getLinePoints } from '../utils/line/line-basic';
11
10
  import { getElbowLineRouteOptions } from '../utils/line';
11
+ import { getSnappingShape } from '../utils';
12
12
  export const withLineResize = (board) => {
13
13
  let elbowLineIndex;
14
14
  let elbowLineDeleteCount;
@@ -62,7 +62,7 @@ export const withLineResize = (board) => {
62
62
  let source = { ...resizeRef.element.source };
63
63
  let target = { ...resizeRef.element.target };
64
64
  let handleIndex = resizeRef.handleIndex;
65
- const hitElement = getSnappingGeometry(board, resizeState.endPoint);
65
+ const hitElement = getSnappingShape(board, resizeState.endPoint);
66
66
  if (resizeRef.handle === LineResizeHandle.source || resizeRef.handle === LineResizeHandle.target) {
67
67
  const object = resizeRef.handle === LineResizeHandle.source ? source : target;
68
68
  points[handleIndex] = resizeState.endPoint;
@@ -155,4 +155,4 @@ export const withLineResize = (board) => {
155
155
  withResize(board, options);
156
156
  return board;
157
157
  };
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1saW5lLXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUE2Qyx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFjLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RyxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxnQ0FBZ0MsRUFDaEMsOEJBQThCLEVBQzlCLG9CQUFvQixFQUN2QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ2hELElBQUksY0FBNkIsQ0FBQztJQUNsQyxJQUFJLG9CQUFtQyxDQUFDO0lBQ3hDLElBQUksZ0JBQThCLENBQUM7SUFDbkMsSUFBSSxnQkFBOEIsQ0FBQztJQUNuQyxJQUFJ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R0FBRyxFQUFFLENBQUM7b0JBQ2pCLENBQUM7b0JBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUN0QixNQUFNLEdBQUcsRUFBRSxDQUFDO29CQUNoQixDQUFDO29CQUNELE1BQU0sR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7b0JBQ3pELGNBQWMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxDQUFDLElBQVksQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO1lBQ0wsQ0FBQztZQUNELGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDdEIsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQzVCLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUN4QixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDeEIscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7S0FDSixDQUFDO0lBRUYsVUFBVSxDQUE4QixLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFeEQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGF0aCwgUGxhaXRCb2FyZCwgUGxhaXROb2RlLCBQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFJlc2l6ZVJlZiwgUmVzaXplU3RhdGUsIFdpdGhSZXNpemVPcHRpb25zLCBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMsIHdpdGhSZXNpemUgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IGdldFNlbGVjdGVkTGluZUVsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQnO1xuaW1wb3J0IHsgZ2V0SGl0TGluZVJlc2l6ZUhhbmRsZVJlZiwgTGluZVJlc2l6ZUhhbmRsZSB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2xpbmUnO1xuaW1wb3J0IHsgZ2V0U25hcHBpbmdHZW9tZXRyeSB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2dlb21ldHJ5JztcbmltcG9ydCB7IExpbmVIYW5kbGUsIExpbmVTaGFwZSwgUGxhaXRMaW5lIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEcmF3VHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZ2V0RWxib3dQb2ludHMsIGdldE5leHRSZW5kZXJQb2ludHMsIGlzVXNlRGVmYXVsdE9ydGhvZ29uYWxSb3V0ZSB9IGZyb20gJy4uL3V0aWxzL2xpbmUvZWxib3cnO1xuaW1wb3J0IHtcbiAgICBhbGlnbkVsYm93U2VnbWVudCxcbiAgICBhbGlnblBvaW50cyxcbiAgICBnZXRJbmRleEFuZERlbGV0ZUNvdW50QnlLZXlQb2ludCxcbiAgICBnZXRSZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnQsXG4gICAgaGFzSWxsZWdhbEVsYm93UG9pbnRcbn0gZnJvbSAnLi4vdXRpbHMvbGluZS9saW5lLXJlc2l6ZSc7XG5pbXBvcnQgeyBnZXRIaXRDb25uZWN0aW9uLCBnZXRMaW5lUG9pbnRzIH0gZnJvbSAnLi4vdXRpbHMvbGluZS9saW5lLWJhc2ljJztcbmltcG9ydCB7IGdldEVsYm93TGluZVJvdXRlT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2xpbmUnO1xuXG5leHBvcnQgY29uc3Qgd2l0aExpbmVSZXNpemUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBsZXQgZWxib3dMaW5lSW5kZXg6IG51bWJlciB8IG51bGw7XG4gICAgbGV0IGVsYm93TGluZURlbGV0ZUNvdW50OiBudW1iZXIgfCBudWxsO1xuICAgIGxldCBlbGJvd1NvdXJjZVBvaW50OiBQb2ludCB8IG51bGw7XG4gICAgbGV0IGVsYm93VGFyZ2V0UG9pbnQ6IFBvaW50IHwgbnVsbDtcbiAgICBsZXQgZWxib3dOZXh0UmVuZGVyUG9pbnRzOiBQb2ludFtdIHwgbnVsbDtcblxuICAgIGNvbnN0IG9wdGlvbnM6IFdpdGhSZXNpemVPcHRpb25zPFBsYWl0TGluZSwgTGluZVJlc2l6ZUhhbmRsZT4gPSB7XG4gICAgICAgIGtleTogJ2RyYXctbGluZScsXG4gICAgICAgIGNhblJlc2l6ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGhpdFRlc3Q6IChwb2ludDogUG9pbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTGluZUVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRMaW5lRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkTGluZUVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZExpbmVFbGVtZW50cy5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlUmVmID0gZ2V0SGl0TGluZVJlc2l6ZUhhbmRsZVJlZihib2FyZCwgdmFsdWUsIHBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZVJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZTogaGFuZGxlUmVmLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVJbmRleDogaGFuZGxlUmVmLmhhbmRsZUluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiZWZvcmVSZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxQbGFpdExpbmUsIExpbmVSZXNpemVIYW5kbGU+KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcmVzaXplUmVmLmVsZW1lbnQuc2hhcGUgPT09IExpbmVTaGFwZS5lbGJvdyAmJlxuICAgICAgICAgICAgICAgIHJlc2l6ZVJlZi5oYW5kbGUgIT09IExpbmVSZXNpemVIYW5kbGUuc291cmNlICYmXG4gICAgICAgICAgICAgICAgcmVzaXplUmVmLmhhbmRsZSAhPT0gTGluZVJlc2l6ZUhhbmRsZS50YXJnZXRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGdldEVsYm93TGluZVJvdXRlT3B0aW9ucyhib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChpc1VzZURlZmF1bHRPcnRob2dvbmFsUm91dGUocmVzaXplUmVmLmVsZW1lbnQsIHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludHM6IFBvaW50W10gPSBbLi4ucmVzaXplUmVmLmVsZW1lbnQucG9pbnRzXTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVJbmRleCA9IHJlc2l6ZVJlZi5oYW5kbGVJbmRleCE7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRzT25FbGJvdyA9IGdldEVsYm93UG9pbnRzKGJvYXJkLCByZXNpemVSZWYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxib3dTb3VyY2VQb2ludCA9IHBvaW50c09uRWxib3dbMF07XG4gICAgICAgICAgICAgICAgZWxib3dUYXJnZXRQb2ludCA9IHBvaW50c09uRWxib3dbcG9pbnRzT25FbGJvdy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBlbGJvd05leHRSZW5kZXJQb2ludHMgPSBnZXROZXh0UmVuZGVyUG9pbnRzKGJvYXJkLCByZXNpemVSZWYuZWxlbWVudCwgcG9pbnRzT25FbGJvdyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEluZGV4QW5kRGVsZXRlQ291bnRCeUtleVBvaW50KGJvYXJkLCByZXNpemVSZWYuZWxlbWVudCwgWy4uLnBvaW50c10sIGVsYm93TmV4dFJlbmRlclBvaW50cywgaGFuZGxlSW5kZXgpO1xuICAgICAgICAgICAgICAgIGVsYm93TGluZUluZGV4ID0gdmFsdWUuaW5kZXg7XG4gICAgICAgICAgICAgICAgZWxib3dMaW5lRGVsZXRlQ291bnQgPSB2YWx1ZS5kZWxldGVDb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25SZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxQbGFpdExpbmUsIExpbmVSZXNpemVIYW5kbGU+LCByZXNpemVTdGF0ZTogUmVzaXplU3RhdGUpID0+IHtcbiAgICAgICAgICAgIGxldCBwb2ludHM6IFBvaW50W10gPSBbLi4ucmVzaXplUmVmLmVsZW1lbnQucG9pbnRzXTtcbiAgICAgICAgICAgIGxldCBzb3VyY2U6IExpbmVIYW5kbGUgPSB7IC4uLnJlc2l6ZVJlZi5lbGVtZW50LnNvdXJjZSB9O1xuICAgICAgICAgICAgbGV0IHRhcmdldDogTGluZUhhbmRsZSA9IHsgLi4ucmVzaXplUmVmLmVsZW1lbnQudGFyZ2V0IH07XG4gICAgICAgICAgICBsZXQgaGFuZGxlSW5kZXggPSByZXNpemVSZWYuaGFuZGxlSW5kZXghO1xuICAgICAgICAgICAgY29uc3QgaGl0RWxlbWVudCA9IGdldFNuYXBwaW5nR2VvbWV0cnkoYm9hcmQsIHJlc2l6ZVN0YXRlLmVuZFBvaW50KTtcbiAgICAgICAgICAgIGlmIChyZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLnNvdXJjZSB8fCByZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IHJlc2l6ZVJlZi5oYW5kbGUgPT09IExpbmVSZXNpemVIYW5kbGUuc291cmNlID8gc291cmNlIDogdGFyZ2V0O1xuICAgICAgICAgICAgICAgIHBvaW50c1toYW5kbGVJbmRleF0gPSByZXNpemVTdGF0ZS5lbmRQb2ludDtcbiAgICAgICAgICAgICAgICBpZiAoaGl0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3QuY29ubmVjdGlvbiA9IGdldEhpdENvbm5lY3Rpb24oYm9hcmQsIHJlc2l6ZVN0YXRlLmVuZFBvaW50LCBoaXRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJvdW5kSWQgPSBoaXRFbGVtZW50LmlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5jb25uZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBvYmplY3QuYm91bmRJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZXNpemVSZWYuZWxlbWVudC5zaGFwZSA9PT0gTGluZVNoYXBlLmVsYm93KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGJvd05leHRSZW5kZXJQb2ludHMgJiYgZWxib3dTb3VyY2VQb2ludCAmJiBlbGJvd1RhcmdldFBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnQgPSBnZXRSZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxib3dOZXh0UmVuZGVyUG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYm93U291cmNlUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxib3dUYXJnZXRQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0S2V5UG9pbnQgPSBlbGJvd05leHRSZW5kZXJQb2ludHNbaGFuZGxlSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kS2V5UG9pbnQgPSBlbGJvd05leHRSZW5kZXJQb2ludHNbaGFuZGxlSW5kZXggKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtuZXdTdGFydFBvaW50LCBuZXdFbmRQb2ludF0gPSBhbGlnbkVsYm93U2VnbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEtleVBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZEtleVBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZWRQcmV2aW91c0FuZE5leHRQb2ludFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtaWREYXRhUG9pbnRzOiBQb2ludFtdID0gWy4uLnBvaW50c10uc2xpY2UoMSwgcG9pbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsYm93TGluZUluZGV4ICE9PSBudWxsICYmIGVsYm93TGluZURlbGV0ZUNvdW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0lsbGVnYWxFbGJvd1BvaW50KG1pZERhdGFQb2ludHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pZERhdGFQb2ludHMgPSBbbmV3U3RhcnRQb2ludCwgbmV3RW5kUG9pbnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pZERhdGFQb2ludHMuc3BsaWNlKGVsYm93TGluZUluZGV4LCBlbGJvd0xpbmVEZWxldGVDb3VudCwgbmV3U3RhcnRQb2ludCwgbmV3RW5kUG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBbZWxib3dTb3VyY2VQb2ludCwgLi4ubWlkRGF0YVBvaW50cywgZWxib3dUYXJnZXRQb2ludF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzaXplUmVmLmhhbmRsZSA9PT0gTGluZVJlc2l6ZUhhbmRsZS5hZGRIYW5kbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5zcGxpY2UoaGFuZGxlSW5kZXggKyAxLCAwLCByZXNpemVTdGF0ZS5lbmRQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbaGFuZGxlSW5kZXhdID0gcmVzaXplU3RhdGUuZW5kUG9pbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaGl0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4ID0gcmVzaXplUmVmLmhhbmRsZSA9PT0gTGluZVJlc2l6ZUhhbmRsZS5hZGRIYW5kbGUgPyBoYW5kbGVJbmRleCArIDEgOiBoYW5kbGVJbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmF3UG9pbnRzID0gZ2V0TGluZVBvaW50cyhib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IFsuLi5wb2ludHNdO1xuICAgICAgICAgICAgICAgIG5ld1BvaW50c1swXSA9IGRyYXdQb2ludHNbMF07XG4gICAgICAgICAgICAgICAgbmV3UG9pbnRzW25ld1BvaW50cy5sZW5ndGggLSAxXSA9IGRyYXdQb2ludHNbZHJhd1BvaW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHJlc2l6ZVJlZi5lbGVtZW50LnNoYXBlICE9PSBMaW5lU2hhcGUuZWxib3cgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc2l6ZVJlZi5lbGVtZW50LnNoYXBlID09PSBMaW5lU2hhcGUuZWxib3cgJiYgbmV3UG9pbnRzLmxlbmd0aCA9PT0gMilcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UG9pbnRzLmZvckVhY2goKHBvaW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBoYW5kbGVJbmRleCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50c1toYW5kbGVJbmRleF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbaGFuZGxlSW5kZXhdID0gYWxpZ25Qb2ludHMocG9pbnQsIHBvaW50c1toYW5kbGVJbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5yZXNpemVMaW5lKGJvYXJkLCB7IHBvaW50cywgc291cmNlLCB0YXJnZXQgfSwgcmVzaXplUmVmLnBhdGggYXMgUGF0aCk7XG4gICAgICAgIH0sXG4gICAgICAgIGFmdGVyUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8UGxhaXRMaW5lLCBMaW5lUmVzaXplSGFuZGxlPikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc2l6ZVJlZi5lbGVtZW50LnNoYXBlID09PSBMaW5lU2hhcGUuZWxib3cpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gUGxhaXROb2RlLmdldChib2FyZCwgcmVzaXplUmVmLnBhdGggYXMgUGF0aCk7XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50cyA9IGVsZW1lbnQgJiYgWy4uLmVsZW1lbnQucG9pbnRzIV07XG4gICAgICAgICAgICAgICAgaWYgKHBvaW50cy5sZW5ndGggPiAyICYmIGVsYm93TmV4dFJlbmRlclBvaW50cyAmJiBlbGJvd1NvdXJjZVBvaW50ICYmIGVsYm93VGFyZ2V0UG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFNvdXJjZVBvaW50ID0gZWxib3dOZXh0UmVuZGVyUG9pbnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0UG9pbnQgPSBlbGJvd05leHRSZW5kZXJQb2ludHNbZWxib3dOZXh0UmVuZGVyUG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMuc3BsaWNlKDAsIDEsIG5leHRTb3VyY2VQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50cy5zcGxpY2UoLTEsIDEsIG5leHRUYXJnZXRQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHNpbXBsaWZ5T3J0aG9nb25hbFBvaW50cyhwb2ludHMhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFBvaW50LmlzRXF1YWxzKHBvaW50c1swXSwgbmV4dFNvdXJjZVBvaW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnNwbGljZSgwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoUG9pbnQuaXNFcXVhbHMocG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSwgbmV4dFRhcmdldFBvaW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBbZWxib3dTb3VyY2VQb2ludCwgLi4ucG9pbnRzLCBlbGJvd1RhcmdldFBvaW50XTtcbiAgICAgICAgICAgICAgICAgICAgRHJhd1RyYW5zZm9ybXMucmVzaXplTGluZShib2FyZCwgeyBwb2ludHMgfSwgcmVzaXplUmVmLnBhdGggYXMgUGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxib3dMaW5lSW5kZXggPSBudWxsO1xuICAgICAgICAgICAgZWxib3dMaW5lRGVsZXRlQ291bnQgPSBudWxsO1xuICAgICAgICAgICAgZWxib3dTb3VyY2VQb2ludCA9IG51bGw7XG4gICAgICAgICAgICBlbGJvd1RhcmdldFBvaW50ID0gbnVsbDtcbiAgICAgICAgICAgIGVsYm93TmV4dFJlbmRlclBvaW50cyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgd2l0aFJlc2l6ZTxQbGFpdExpbmUsIExpbmVSZXNpemVIYW5kbGU+KGJvYXJkLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG4iXX0=
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1saW5lLXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUE2Qyx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckYsT0FBTyxFQUFjLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RyxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxnQ0FBZ0MsRUFDaEMsOEJBQThCLEVBQzlCLG9CQUFvQixFQUN2QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNoRCxJQUFJLGNBQTZCLENBQUM7SUFDbEMsSUFBSSxvQkFBbUMsQ0FBQztJQUN4QyxJQUFJLGdCQUE4QixDQUFDO0lBQ25DLElBQUksZ0JBQThCLENBQUM7SUFDbkMsSUFBSSxx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QUcsRUFBRSxDQUFDO29CQUNqQixDQUFDO29CQUNELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEIsTUFBTSxHQUFHLEVBQUUsQ0FBQztvQkFDaEIsQ0FBQztvQkFDRCxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO29CQUN6RCxjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVMsQ0FBQyxJQUFZLENBQUMsQ0FBQztnQkFDekUsQ0FBQztZQUNMLENBQUM7WUFDRCxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUM1QixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDeEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDO0tBQ0osQ0FBQztJQUVGLFVBQVUsQ0FBOEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXhELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhdGgsIFBsYWl0Qm9hcmQsIFBsYWl0Tm9kZSwgUG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBSZXNpemVSZWYsIFJlc2l6ZVN0YXRlLCBXaXRoUmVzaXplT3B0aW9ucywgc2ltcGxpZnlPcnRob2dvbmFsUG9pbnRzLCB3aXRoUmVzaXplIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWxlY3RlZExpbmVFbGVtZW50cyB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGVkJztcbmltcG9ydCB7IGdldEhpdExpbmVSZXNpemVIYW5kbGVSZWYsIExpbmVSZXNpemVIYW5kbGUgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9saW5lJztcbmltcG9ydCB7IExpbmVIYW5kbGUsIExpbmVTaGFwZSwgUGxhaXRMaW5lIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEcmF3VHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZ2V0RWxib3dQb2ludHMsIGdldE5leHRSZW5kZXJQb2ludHMsIGlzVXNlRGVmYXVsdE9ydGhvZ29uYWxSb3V0ZSB9IGZyb20gJy4uL3V0aWxzL2xpbmUvZWxib3cnO1xuaW1wb3J0IHtcbiAgICBhbGlnbkVsYm93U2VnbWVudCxcbiAgICBhbGlnblBvaW50cyxcbiAgICBnZXRJbmRleEFuZERlbGV0ZUNvdW50QnlLZXlQb2ludCxcbiAgICBnZXRSZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnQsXG4gICAgaGFzSWxsZWdhbEVsYm93UG9pbnRcbn0gZnJvbSAnLi4vdXRpbHMvbGluZS9saW5lLXJlc2l6ZSc7XG5pbXBvcnQgeyBnZXRIaXRDb25uZWN0aW9uLCBnZXRMaW5lUG9pbnRzIH0gZnJvbSAnLi4vdXRpbHMvbGluZS9saW5lLWJhc2ljJztcbmltcG9ydCB7IGdldEVsYm93TGluZVJvdXRlT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2xpbmUnO1xuaW1wb3J0IHsgZ2V0U25hcHBpbmdTaGFwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IHdpdGhMaW5lUmVzaXplID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgbGV0IGVsYm93TGluZUluZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIGxldCBlbGJvd0xpbmVEZWxldGVDb3VudDogbnVtYmVyIHwgbnVsbDtcbiAgICBsZXQgZWxib3dTb3VyY2VQb2ludDogUG9pbnQgfCBudWxsO1xuICAgIGxldCBlbGJvd1RhcmdldFBvaW50OiBQb2ludCB8IG51bGw7XG4gICAgbGV0IGVsYm93TmV4dFJlbmRlclBvaW50czogUG9pbnRbXSB8IG51bGw7XG5cbiAgICBjb25zdCBvcHRpb25zOiBXaXRoUmVzaXplT3B0aW9uczxQbGFpdExpbmUsIExpbmVSZXNpemVIYW5kbGU+ID0ge1xuICAgICAgICBrZXk6ICdkcmF3LWxpbmUnLFxuICAgICAgICBjYW5SZXNpemU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBoaXRUZXN0OiAocG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZExpbmVFbGVtZW50cyA9IGdldFNlbGVjdGVkTGluZUVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZExpbmVFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRMaW5lRWxlbWVudHMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZVJlZiA9IGdldEhpdExpbmVSZXNpemVIYW5kbGVSZWYoYm9hcmQsIHZhbHVlLCBwb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU6IGhhbmRsZVJlZi5oYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlSW5kZXg6IGhhbmRsZVJlZi5oYW5kbGVJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmVmb3JlUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8UGxhaXRMaW5lLCBMaW5lUmVzaXplSGFuZGxlPikgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHJlc2l6ZVJlZi5lbGVtZW50LnNoYXBlID09PSBMaW5lU2hhcGUuZWxib3cgJiZcbiAgICAgICAgICAgICAgICByZXNpemVSZWYuaGFuZGxlICE9PSBMaW5lUmVzaXplSGFuZGxlLnNvdXJjZSAmJlxuICAgICAgICAgICAgICAgIHJlc2l6ZVJlZi5oYW5kbGUgIT09IExpbmVSZXNpemVIYW5kbGUudGFyZ2V0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBnZXRFbGJvd0xpbmVSb3V0ZU9wdGlvbnMoYm9hcmQsIHJlc2l6ZVJlZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoaXNVc2VEZWZhdWx0T3J0aG9nb25hbFJvdXRlKHJlc2l6ZVJlZi5lbGVtZW50LCBwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRzOiBQb2ludFtdID0gWy4uLnJlc2l6ZVJlZi5lbGVtZW50LnBvaW50c107XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlSW5kZXggPSByZXNpemVSZWYuaGFuZGxlSW5kZXghO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50c09uRWxib3cgPSBnZXRFbGJvd1BvaW50cyhib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGVsYm93U291cmNlUG9pbnQgPSBwb2ludHNPbkVsYm93WzBdO1xuICAgICAgICAgICAgICAgIGVsYm93VGFyZ2V0UG9pbnQgPSBwb2ludHNPbkVsYm93W3BvaW50c09uRWxib3cubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgZWxib3dOZXh0UmVuZGVyUG9pbnRzID0gZ2V0TmV4dFJlbmRlclBvaW50cyhib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQsIHBvaW50c09uRWxib3cpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRJbmRleEFuZERlbGV0ZUNvdW50QnlLZXlQb2ludChib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQsIFsuLi5wb2ludHNdLCBlbGJvd05leHRSZW5kZXJQb2ludHMsIGhhbmRsZUluZGV4KTtcbiAgICAgICAgICAgICAgICBlbGJvd0xpbmVJbmRleCA9IHZhbHVlLmluZGV4O1xuICAgICAgICAgICAgICAgIGVsYm93TGluZURlbGV0ZUNvdW50ID0gdmFsdWUuZGVsZXRlQ291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8UGxhaXRMaW5lLCBMaW5lUmVzaXplSGFuZGxlPiwgcmVzaXplU3RhdGU6IFJlc2l6ZVN0YXRlKSA9PiB7XG4gICAgICAgICAgICBsZXQgcG9pbnRzOiBQb2ludFtdID0gWy4uLnJlc2l6ZVJlZi5lbGVtZW50LnBvaW50c107XG4gICAgICAgICAgICBsZXQgc291cmNlOiBMaW5lSGFuZGxlID0geyAuLi5yZXNpemVSZWYuZWxlbWVudC5zb3VyY2UgfTtcbiAgICAgICAgICAgIGxldCB0YXJnZXQ6IExpbmVIYW5kbGUgPSB7IC4uLnJlc2l6ZVJlZi5lbGVtZW50LnRhcmdldCB9O1xuICAgICAgICAgICAgbGV0IGhhbmRsZUluZGV4ID0gcmVzaXplUmVmLmhhbmRsZUluZGV4ITtcbiAgICAgICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRTbmFwcGluZ1NoYXBlKGJvYXJkLCByZXNpemVTdGF0ZS5lbmRQb2ludCk7XG4gICAgICAgICAgICBpZiAocmVzaXplUmVmLmhhbmRsZSA9PT0gTGluZVJlc2l6ZUhhbmRsZS5zb3VyY2UgfHwgcmVzaXplUmVmLmhhbmRsZSA9PT0gTGluZVJlc2l6ZUhhbmRsZS50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3QgPSByZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLnNvdXJjZSA/IHNvdXJjZSA6IHRhcmdldDtcbiAgICAgICAgICAgICAgICBwb2ludHNbaGFuZGxlSW5kZXhdID0gcmVzaXplU3RhdGUuZW5kUG9pbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGhpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvbm5lY3Rpb24gPSBnZXRIaXRDb25uZWN0aW9uKGJvYXJkLCByZXNpemVTdGF0ZS5lbmRQb2ludCwgaGl0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5ib3VuZElkID0gaGl0RWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3QuY29ubmVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJvdW5kSWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzaXplUmVmLmVsZW1lbnQuc2hhcGUgPT09IExpbmVTaGFwZS5lbGJvdykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxib3dOZXh0UmVuZGVyUG9pbnRzICYmIGVsYm93U291cmNlUG9pbnQgJiYgZWxib3dUYXJnZXRQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzaXplZFByZXZpb3VzQW5kTmV4dFBvaW50ID0gZ2V0UmVzaXplZFByZXZpb3VzQW5kTmV4dFBvaW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYm93TmV4dFJlbmRlclBvaW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGJvd1NvdXJjZVBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYm93VGFyZ2V0UG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydEtleVBvaW50ID0gZWxib3dOZXh0UmVuZGVyUG9pbnRzW2hhbmRsZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZEtleVBvaW50ID0gZWxib3dOZXh0UmVuZGVyUG9pbnRzW2hhbmRsZUluZGV4ICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbbmV3U3RhcnRQb2ludCwgbmV3RW5kUG9pbnRdID0gYWxpZ25FbGJvd1NlZ21lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRLZXlQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRLZXlQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWlkRGF0YVBvaW50czogUG9pbnRbXSA9IFsuLi5wb2ludHNdLnNsaWNlKDEsIHBvaW50cy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGJvd0xpbmVJbmRleCAhPT0gbnVsbCAmJiBlbGJvd0xpbmVEZWxldGVDb3VudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbGxlZ2FsRWxib3dQb2ludChtaWREYXRhUG9pbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWREYXRhUG9pbnRzID0gW25ld1N0YXJ0UG9pbnQsIG5ld0VuZFBvaW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWREYXRhUG9pbnRzLnNwbGljZShlbGJvd0xpbmVJbmRleCwgZWxib3dMaW5lRGVsZXRlQ291bnQsIG5ld1N0YXJ0UG9pbnQsIG5ld0VuZFBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gW2VsYm93U291cmNlUG9pbnQsIC4uLm1pZERhdGFQb2ludHMsIGVsYm93VGFyZ2V0UG9pbnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2l6ZVJlZi5oYW5kbGUgPT09IExpbmVSZXNpemVIYW5kbGUuYWRkSGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMuc3BsaWNlKGhhbmRsZUluZGV4ICsgMSwgMCwgcmVzaXplU3RhdGUuZW5kUG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2hhbmRsZUluZGV4XSA9IHJlc2l6ZVN0YXRlLmVuZFBvaW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWhpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVJbmRleCA9IHJlc2l6ZVJlZi5oYW5kbGUgPT09IExpbmVSZXNpemVIYW5kbGUuYWRkSGFuZGxlID8gaGFuZGxlSW5kZXggKyAxIDogaGFuZGxlSW5kZXg7XG4gICAgICAgICAgICAgICAgY29uc3QgZHJhd1BvaW50cyA9IGdldExpbmVQb2ludHMoYm9hcmQsIHJlc2l6ZVJlZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQb2ludHMgPSBbLi4ucG9pbnRzXTtcbiAgICAgICAgICAgICAgICBuZXdQb2ludHNbMF0gPSBkcmF3UG9pbnRzWzBdO1xuICAgICAgICAgICAgICAgIG5ld1BvaW50c1tuZXdQb2ludHMubGVuZ3RoIC0gMV0gPSBkcmF3UG9pbnRzW2RyYXdQb2ludHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICByZXNpemVSZWYuZWxlbWVudC5zaGFwZSAhPT0gTGluZVNoYXBlLmVsYm93IHx8XG4gICAgICAgICAgICAgICAgICAgIChyZXNpemVSZWYuZWxlbWVudC5zaGFwZSA9PT0gTGluZVNoYXBlLmVsYm93ICYmIG5ld1BvaW50cy5sZW5ndGggPT09IDIpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BvaW50cy5mb3JFYWNoKChwb2ludCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gaGFuZGxlSW5kZXgpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludHNbaGFuZGxlSW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2hhbmRsZUluZGV4XSA9IGFsaWduUG9pbnRzKHBvaW50LCBwb2ludHNbaGFuZGxlSW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRHJhd1RyYW5zZm9ybXMucmVzaXplTGluZShib2FyZCwgeyBwb2ludHMsIHNvdXJjZSwgdGFyZ2V0IH0sIHJlc2l6ZVJlZi5wYXRoIGFzIFBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICBhZnRlclJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0TGluZSwgTGluZVJlc2l6ZUhhbmRsZT4pID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNpemVSZWYuZWxlbWVudC5zaGFwZSA9PT0gTGluZVNoYXBlLmVsYm93KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IFBsYWl0Tm9kZS5nZXQoYm9hcmQsIHJlc2l6ZVJlZi5wYXRoIGFzIFBhdGgpO1xuICAgICAgICAgICAgICAgIGxldCBwb2ludHMgPSBlbGVtZW50ICYmIFsuLi5lbGVtZW50LnBvaW50cyFdO1xuICAgICAgICAgICAgICAgIGlmIChwb2ludHMubGVuZ3RoID4gMiAmJiBlbGJvd05leHRSZW5kZXJQb2ludHMgJiYgZWxib3dTb3VyY2VQb2ludCAmJiBlbGJvd1RhcmdldFBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTb3VyY2VQb2ludCA9IGVsYm93TmV4dFJlbmRlclBvaW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRhcmdldFBvaW50ID0gZWxib3dOZXh0UmVuZGVyUG9pbnRzW2VsYm93TmV4dFJlbmRlclBvaW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnNwbGljZSgwLCAxLCBuZXh0U291cmNlUG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMuc3BsaWNlKC0xLCAxLCBuZXh0VGFyZ2V0UG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMocG9pbnRzISk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChQb2ludC5pc0VxdWFscyhwb2ludHNbMF0sIG5leHRTb3VyY2VQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5zcGxpY2UoMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFBvaW50LmlzRXF1YWxzKHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0sIG5leHRUYXJnZXRQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gW2VsYm93U291cmNlUG9pbnQsIC4uLnBvaW50cywgZWxib3dUYXJnZXRQb2ludF07XG4gICAgICAgICAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLnJlc2l6ZUxpbmUoYm9hcmQsIHsgcG9pbnRzIH0sIHJlc2l6ZVJlZi5wYXRoIGFzIFBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsYm93TGluZUluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgIGVsYm93TGluZURlbGV0ZUNvdW50ID0gbnVsbDtcbiAgICAgICAgICAgIGVsYm93U291cmNlUG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgZWxib3dUYXJnZXRQb2ludCA9IG51bGw7XG4gICAgICAgICAgICBlbGJvd05leHRSZW5kZXJQb2ludHMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHdpdGhSZXNpemU8UGxhaXRMaW5lLCBMaW5lUmVzaXplSGFuZGxlPihib2FyZCwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
@@ -0,0 +1,132 @@
1
+ import { PlaitBoard, RectangleClient, createG, preventTouchMove, toHostPoint, toViewBoxPoint } from '@plait/core';
2
+ import { insertElement } from '../utils';
3
+ import { getSwimlanePointers } from '../constants';
4
+ import { normalizeShapePoints, isDndMode, isDrawingMode, getDirectionFactorByDirectionComponent, getUnitVectorByPointAndPoint } from '@plait/common';
5
+ import { isKeyHotkey } from 'is-hotkey';
6
+ import { getSnapResizingRef } from '../utils/snap-resizing';
7
+ import { TableGenerator } from '../generators/table.generator';
8
+ import { createDefaultSwimlane, getDefaultSWimlanePoints } from '../utils/swimlane';
9
+ const isSwimlaneDndMode = (board) => {
10
+ const swimlanePointers = getSwimlanePointers();
11
+ const isSwimlanePointer = PlaitBoard.isInPointer(board, swimlanePointers);
12
+ const dndMode = isSwimlanePointer && isDndMode(board);
13
+ return dndMode;
14
+ };
15
+ const isSwimlaneDrawingMode = (board) => {
16
+ const swimlanePointers = getSwimlanePointers();
17
+ const isSwimlanePointer = PlaitBoard.isInPointer(board, swimlanePointers);
18
+ const drawingMode = isSwimlanePointer && isDrawingMode(board);
19
+ return drawingMode;
20
+ };
21
+ export const withSwimlaneCreateByDrag = (board) => {
22
+ const { pointerMove, globalPointerUp, pointerUp } = board;
23
+ let swimlaneG = null;
24
+ let temporaryElement = null;
25
+ board.pointerMove = (event) => {
26
+ swimlaneG?.remove();
27
+ swimlaneG = createG();
28
+ const tableGenerator = new TableGenerator(board);
29
+ const dragMode = isSwimlaneDndMode(board);
30
+ const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
31
+ const pointer = PlaitBoard.getPointer(board);
32
+ if (dragMode) {
33
+ const points = getDefaultSWimlanePoints(pointer, movingPoint);
34
+ temporaryElement = createDefaultSwimlane(pointer, points);
35
+ tableGenerator.processDrawing(temporaryElement, swimlaneG);
36
+ PlaitBoard.getElementActiveHost(board).append(swimlaneG);
37
+ }
38
+ pointerMove(event);
39
+ };
40
+ board.pointerUp = (event) => {
41
+ if (isSwimlaneDndMode(board) && temporaryElement) {
42
+ return;
43
+ }
44
+ pointerUp(event);
45
+ };
46
+ board.globalPointerUp = (event) => {
47
+ if (isSwimlaneDndMode(board) && temporaryElement) {
48
+ insertElement(board, temporaryElement);
49
+ }
50
+ temporaryElement = null;
51
+ swimlaneG?.remove();
52
+ swimlaneG = null;
53
+ preventTouchMove(board, event, false);
54
+ globalPointerUp(event);
55
+ };
56
+ return board;
57
+ };
58
+ export const withSwimlaneCreateByDrawing = (board) => {
59
+ const { pointerDown, pointerMove, pointerUp, keyDown, keyUp } = board;
60
+ let start = null;
61
+ let swimlaneG = null;
62
+ let temporaryElement = null;
63
+ let isShift = false;
64
+ let snapG;
65
+ board.keyDown = (event) => {
66
+ isShift = isKeyHotkey('shift', event);
67
+ keyDown(event);
68
+ };
69
+ board.keyUp = (event) => {
70
+ isShift = false;
71
+ keyUp(event);
72
+ };
73
+ board.pointerDown = (event) => {
74
+ if (!PlaitBoard.isReadonly(board) && isSwimlaneDrawingMode(board)) {
75
+ const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
76
+ start = point;
77
+ }
78
+ pointerDown(event);
79
+ };
80
+ board.pointerMove = (event) => {
81
+ swimlaneG?.remove();
82
+ swimlaneG = createG();
83
+ const tableGenerator = new TableGenerator(board);
84
+ const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
85
+ const pointer = PlaitBoard.getPointer(board);
86
+ snapG?.remove();
87
+ if (start && isSwimlaneDrawingMode(board)) {
88
+ let points = normalizeShapePoints([start, movingPoint], isShift);
89
+ const activeRectangle = RectangleClient.getRectangleByPoints(points);
90
+ const [x, y] = getUnitVectorByPointAndPoint(start, movingPoint);
91
+ const resizeSnapRef = getSnapResizingRef(board, [], {
92
+ resizePoints: points,
93
+ activeRectangle,
94
+ directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],
95
+ isAspectRatio: isShift,
96
+ isFromCorner: true,
97
+ isCreate: true
98
+ });
99
+ snapG = resizeSnapRef.snapG;
100
+ PlaitBoard.getElementActiveHost(board).append(snapG);
101
+ points = normalizeShapePoints(resizeSnapRef.activePoints, isShift);
102
+ temporaryElement = createDefaultSwimlane(pointer, points);
103
+ tableGenerator.processDrawing(temporaryElement, swimlaneG);
104
+ PlaitBoard.getElementActiveHost(board).append(swimlaneG);
105
+ }
106
+ pointerMove(event);
107
+ };
108
+ board.pointerUp = (event) => {
109
+ if (isSwimlaneDrawingMode(board) && start) {
110
+ const targetPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
111
+ const { width, height } = RectangleClient.getRectangleByPoints([start, targetPoint]);
112
+ if (Math.hypot(width, height) < 8) {
113
+ const pointer = PlaitBoard.getPointer(board);
114
+ const points = getDefaultSWimlanePoints(pointer, targetPoint);
115
+ temporaryElement = createDefaultSwimlane(pointer, points);
116
+ }
117
+ if (temporaryElement) {
118
+ insertElement(board, temporaryElement);
119
+ }
120
+ snapG?.remove();
121
+ swimlaneG?.remove();
122
+ swimlaneG = null;
123
+ start = null;
124
+ temporaryElement = null;
125
+ preventTouchMove(board, event, false);
126
+ return;
127
+ }
128
+ pointerUp(event);
129
+ };
130
+ return board;
131
+ };
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1zd2ltbGFuZS1jcmVhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9wbHVnaW5zL3dpdGgtc3dpbWxhbmUtY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVMsZUFBZSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXpILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsU0FBUyxFQUNULGFBQWEsRUFDYixzQ0FBc0MsRUFDdEMsNEJBQTRCLEVBQy9CLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBT3BGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDNUMsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9DLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUMxRSxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUs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O1lBQ2pCLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDYixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDeEIsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxPQUFPO1FBQ1gsQ0FBQztRQUNELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFDRixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50LCBjcmVhdGVHLCBwcmV2ZW50VG91Y2hNb3ZlLCB0b0hvc3RQb2ludCwgdG9WaWV3Qm94UG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdFN3aW1sYW5lLCBTd2ltbGFuZVN5bWJvbHMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGluc2VydEVsZW1lbnQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBnZXRTd2ltbGFuZVBvaW50ZXJzIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gICAgbm9ybWFsaXplU2hhcGVQb2ludHMsXG4gICAgaXNEbmRNb2RlLFxuICAgIGlzRHJhd2luZ01vZGUsXG4gICAgZ2V0RGlyZWN0aW9uRmFjdG9yQnlEaXJlY3Rpb25Db21wb25lbnQsXG4gICAgZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludFxufSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IFRleHRNYW5hZ2UgfSBmcm9tICdAcGxhaXQvdGV4dCc7XG5pbXBvcnQgeyBpc0tleUhvdGtleSB9IGZyb20gJ2lzLWhvdGtleSc7XG5pbXBvcnQgeyBnZXRTbmFwUmVzaXppbmdSZWYgfSBmcm9tICcuLi91dGlscy9zbmFwLXJlc2l6aW5nJztcbmltcG9ydCB7IFRhYmxlR2VuZXJhdG9yIH0gZnJvbSAnLi4vZ2VuZXJhdG9ycy90YWJsZS5nZW5lcmF0b3InO1xuaW1wb3J0IHsgY3JlYXRlRGVmYXVsdFN3aW1sYW5lLCBnZXREZWZhdWx0U1dpbWxhbmVQb2ludHMgfSBmcm9tICcuLi91dGlscy9zd2ltbGFuZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFrZUNyZWF0ZVRleHRSZWYge1xuICAgIGc6IFNWR0dFbGVtZW50O1xuICAgIHRleHRNYW5hZ2U6IFRleHRNYW5hZ2U7XG59XG5cbmNvbnN0IGlzU3dpbWxhbmVEbmRNb2RlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3Qgc3dpbWxhbmVQb2ludGVycyA9IGdldFN3aW1sYW5lUG9pbnRlcnMoKTtcbiAgICBjb25zdCBpc1N3aW1sYW5lUG9pbnRlciA9IFBsYWl0Qm9hcmQuaXNJblBvaW50ZXIoYm9hcmQsIHN3aW1sYW5lUG9pbnRlcnMpO1xuICAgIGNvbnN0IGRuZE1vZGUgPSBpc1N3aW1sYW5lUG9pbnRlciAmJiBpc0RuZE1vZGUoYm9hcmQpO1xuICAgIHJldHVybiBkbmRNb2RlO1xufTtcblxuY29uc3QgaXNTd2ltbGFuZURyYXdpbmdNb2RlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3Qgc3dpbWxhbmVQb2ludGVycyA9IGdldFN3aW1sYW5lUG9pbnRlcnMoKTtcbiAgICBjb25zdCBpc1N3aW1sYW5lUG9pbnRlciA9IFBsYWl0Qm9hcmQuaXNJblBvaW50ZXIoYm9hcmQsIHN3aW1sYW5lUG9pbnRlcnMpO1xuICAgIGNvbnN0IGRyYXdpbmdNb2RlID0gaXNTd2ltbGFuZVBvaW50ZXIgJiYgaXNEcmF3aW5nTW9kZShib2FyZCk7XG4gICAgcmV0dXJuIGRyYXdpbmdNb2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IHdpdGhTd2ltbGFuZUNyZWF0ZUJ5RHJhZyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IHsgcG9pbnRlck1vdmUsIGdsb2JhbFBvaW50ZXJVcCwgcG9pbnRlclVwIH0gPSBib2FyZDtcblxuICAgIGxldCBzd2ltbGFuZUc6IFNWR0dFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBsZXQgdGVtcG9yYXJ5RWxlbWVudDogUGxhaXRTd2ltbGFuZSB8IG51bGwgPSBudWxsO1xuXG4gICAgYm9hcmQucG9pbnRlck1vdmUgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBzd2ltbGFuZUc/LnJlbW92ZSgpO1xuICAgICAgICBzd2ltbGFuZUcgPSBjcmVhdGVHKCk7XG5cbiAgICAgICAgY29uc3QgdGFibGVHZW5lcmF0b3IgPSBuZXcgVGFibGVHZW5lcmF0b3IoYm9hcmQpO1xuICAgICAgICBjb25zdCBkcmFnTW9kZSA9IGlzU3dpbWxhbmVEbmRNb2RlKGJvYXJkKTtcbiAgICAgICAgY29uc3QgbW92aW5nUG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgY29uc3QgcG9pbnRlciA9IFBsYWl0Qm9hcmQuZ2V0UG9pbnRlcihib2FyZCkgYXMgU3dpbWxhbmVTeW1ib2xzO1xuXG4gICAgICAgIGlmIChkcmFnTW9kZSkge1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gZ2V0RGVmYXVsdFNXaW1sYW5lUG9pbnRzKHBvaW50ZXIsIG1vdmluZ1BvaW50KTtcbiAgICAgICAgICAgIHRlbXBvcmFyeUVsZW1lbnQgPSBjcmVhdGVEZWZhdWx0U3dpbWxhbmUocG9pbnRlciwgcG9pbnRzKTtcbiAgICAgICAgICAgIHRhYmxlR2VuZXJhdG9yLnByb2Nlc3NEcmF3aW5nKHRlbXBvcmFyeUVsZW1lbnQsIHN3aW1sYW5lRyk7XG4gICAgICAgICAgICBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KGJvYXJkKS5hcHBlbmQoc3dpbWxhbmVHKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQucG9pbnRlclVwID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGlzU3dpbWxhbmVEbmRNb2RlKGJvYXJkKSAmJiB0ZW1wb3JhcnlFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlclVwKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZ2xvYmFsUG9pbnRlclVwID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGlzU3dpbWxhbmVEbmRNb2RlKGJvYXJkKSAmJiB0ZW1wb3JhcnlFbGVtZW50KSB7XG4gICAgICAgICAgICBpbnNlcnRFbGVtZW50KGJvYXJkLCB0ZW1wb3JhcnlFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wb3JhcnlFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgc3dpbWxhbmVHPy5yZW1vdmUoKTtcbiAgICAgICAgc3dpbWxhbmVHID0gbnVsbDtcbiAgICAgICAgcHJldmVudFRvdWNoTW92ZShib2FyZCwgZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgZ2xvYmFsUG9pbnRlclVwKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcblxuZXhwb3J0IGNvbnN0IHdpdGhTd2ltbGFuZUNyZWF0ZUJ5RHJhd2luZyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IHsgcG9pbnRlckRvd24sIHBvaW50ZXJNb3ZlLCBwb2ludGVyVXAsIGtleURvd24sIGtleVVwIH0gPSBib2FyZDtcbiAgICBsZXQgc3RhcnQ6IFBvaW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBsZXQgc3dpbWxhbmVHOiBTVkdHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgbGV0IHRlbXBvcmFyeUVsZW1lbnQ6IFBsYWl0U3dpbWxhbmUgfCBudWxsID0gbnVsbDtcblxuICAgIGxldCBpc1NoaWZ0ID0gZmFsc2U7XG5cbiAgICBsZXQgc25hcEc6IFNWR0dFbGVtZW50IHwgbnVsbDtcblxuICAgIGJvYXJkLmtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaXNTaGlmdCA9IGlzS2V5SG90a2V5KCdzaGlmdCcsIGV2ZW50KTtcbiAgICAgICAga2V5RG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmtleVVwID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlzU2hpZnQgPSBmYWxzZTtcbiAgICAgICAga2V5VXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyRG93biA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSAmJiBpc1N3aW1sYW5lRHJhd2luZ01vZGUoYm9hcmQpKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICAgICAgc3RhcnQgPSBwb2ludDtcbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyRG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgc3dpbWxhbmVHPy5yZW1vdmUoKTtcbiAgICAgICAgc3dpbWxhbmVHID0gY3JlYXRlRygpO1xuICAgICAgICBjb25zdCB0YWJsZUdlbmVyYXRvciA9IG5ldyBUYWJsZUdlbmVyYXRvcihib2FyZCk7XG4gICAgICAgIGNvbnN0IG1vdmluZ1BvaW50ID0gdG9WaWV3Qm94UG9pbnQoYm9hcmQsIHRvSG9zdFBvaW50KGJvYXJkLCBldmVudC54LCBldmVudC55KSk7XG4gICAgICAgIGNvbnN0IHBvaW50ZXIgPSBQbGFpdEJvYXJkLmdldFBvaW50ZXIoYm9hcmQpIGFzIFN3aW1sYW5lU3ltYm9scztcbiAgICAgICAgc25hcEc/LnJlbW92ZSgpO1xuICAgICAgICBpZiAoc3RhcnQgJiYgaXNTd2ltbGFuZURyYXdpbmdNb2RlKGJvYXJkKSkge1xuICAgICAgICAgICAgbGV0IHBvaW50czogW1BvaW50LCBQb2ludF0gPSBub3JtYWxpemVTaGFwZVBvaW50cyhbc3RhcnQsIG1vdmluZ1BvaW50XSwgaXNTaGlmdCk7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocG9pbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQoc3RhcnQsIG1vdmluZ1BvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZVNuYXBSZWYgPSBnZXRTbmFwUmVzaXppbmdSZWYoYm9hcmQsIFtdLCB7XG4gICAgICAgICAgICAgICAgcmVzaXplUG9pbnRzOiBwb2ludHMsXG4gICAgICAgICAgICAgICAgYWN0aXZlUmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbkZhY3RvcnM6IFtnZXREaXJlY3Rpb25GYWN0b3JCeURpcmVjdGlvbkNvbXBvbmVudCh4KSwgZ2V0RGlyZWN0aW9uRmFjdG9yQnlEaXJlY3Rpb25Db21wb25lbnQoeSldLFxuICAgICAgICAgICAgICAgIGlzQXNwZWN0UmF0aW86IGlzU2hpZnQsXG4gICAgICAgICAgICAgICAgaXNGcm9tQ29ybmVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzQ3JlYXRlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNuYXBHID0gcmVzaXplU25hcFJlZi5zbmFwRztcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChzbmFwRyk7XG4gICAgICAgICAgICBwb2ludHMgPSBub3JtYWxpemVTaGFwZVBvaW50cyhyZXNpemVTbmFwUmVmLmFjdGl2ZVBvaW50cyBhcyBbUG9pbnQsIFBvaW50XSwgaXNTaGlmdCk7XG4gICAgICAgICAgICB0ZW1wb3JhcnlFbGVtZW50ID0gY3JlYXRlRGVmYXVsdFN3aW1sYW5lKHBvaW50ZXIsIHBvaW50cyk7XG4gICAgICAgICAgICB0YWJsZUdlbmVyYXRvci5wcm9jZXNzRHJhd2luZyh0ZW1wb3JhcnlFbGVtZW50LCBzd2ltbGFuZUcpO1xuICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHN3aW1sYW5lRyk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyVXAgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBpZiAoaXNTd2ltbGFuZURyYXdpbmdNb2RlKGJvYXJkKSAmJiBzdGFydCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0UG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtzdGFydCEsIHRhcmdldFBvaW50XSk7XG4gICAgICAgICAgICBpZiAoTWF0aC5oeXBvdCh3aWR0aCwgaGVpZ2h0KSA8IDgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludGVyID0gUGxhaXRCb2FyZC5nZXRQb2ludGVyKGJvYXJkKSBhcyBTd2ltbGFuZVN5bWJvbHM7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gZ2V0RGVmYXVsdFNXaW1sYW5lUG9pbnRzKHBvaW50ZXIsIHRhcmdldFBvaW50KTtcbiAgICAgICAgICAgICAgICB0ZW1wb3JhcnlFbGVtZW50ID0gY3JlYXRlRGVmYXVsdFN3aW1sYW5lKHBvaW50ZXIsIHBvaW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGVtcG9yYXJ5RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGluc2VydEVsZW1lbnQoYm9hcmQsIHRlbXBvcmFyeUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc25hcEc/LnJlbW92ZSgpO1xuICAgICAgICAgICAgc3dpbWxhbmVHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIHN3aW1sYW5lRyA9IG51bGw7XG4gICAgICAgICAgICBzdGFydCA9IG51bGw7XG4gICAgICAgICAgICB0ZW1wb3JhcnlFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlclVwKGV2ZW50KTtcbiAgICB9O1xuICAgIHJldHVybiBib2FyZDtcbn07XG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { PlaitDrawElement } from '../interfaces';
2
+ import { buildSwimlaneTable } from '../utils/swimlane';
3
+ import { TableComponent } from '../table.component';
4
+ import { withSwimlaneCreateByDrag, withSwimlaneCreateByDrawing } from './with-swimlane-create';
5
+ export const withSwimlane = (board) => {
6
+ const { drawElement, buildTable } = board;
7
+ board.drawElement = (context) => {
8
+ if (PlaitDrawElement.isSwimlane(context.element)) {
9
+ return TableComponent;
10
+ }
11
+ return drawElement(context);
12
+ };
13
+ board.buildTable = (element) => {
14
+ if (PlaitDrawElement.isSwimlane(element)) {
15
+ return buildSwimlaneTable(element);
16
+ }
17
+ return buildTable(element);
18
+ };
19
+ return withSwimlaneCreateByDrawing(withSwimlaneCreateByDrag(board));
20
+ };
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1zd2ltbGFuZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1zd2ltbGFuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUvRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFzQixFQUFFLEVBQUU7SUFDbkQsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFMUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLE9BQWtDLEVBQUUsRUFBRTtRQUN2RCxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxPQUFPLGNBQWMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLE9BQW1CLEVBQUUsRUFBRTtRQUN2QyxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sa0JBQWtCLENBQUMsT0FBd0IsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDLENBQUM7SUFFRixPQUFPLDJCQUEyQixDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQsIFBsYWl0U3dpbWxhbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGJ1aWxkU3dpbWxhbmVUYWJsZSB9IGZyb20gJy4uL3V0aWxzL3N3aW1sYW5lJztcbmltcG9ydCB7IFBsYWl0VGFibGVCb2FyZCB9IGZyb20gJy4vd2l0aC10YWJsZSc7XG5pbXBvcnQgeyBQbGFpdFRhYmxlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90YWJsZSc7XG5pbXBvcnQgeyBUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB3aXRoU3dpbWxhbmVDcmVhdGVCeURyYWcsIHdpdGhTd2ltbGFuZUNyZWF0ZUJ5RHJhd2luZyB9IGZyb20gJy4vd2l0aC1zd2ltbGFuZS1jcmVhdGUnO1xuXG5leHBvcnQgY29uc3Qgd2l0aFN3aW1sYW5lID0gKGJvYXJkOiBQbGFpdFRhYmxlQm9hcmQpID0+IHtcbiAgICBjb25zdCB7IGRyYXdFbGVtZW50LCBidWlsZFRhYmxlIH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmRyYXdFbGVtZW50ID0gKGNvbnRleHQ6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNTd2ltbGFuZShjb250ZXh0LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gVGFibGVDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRyYXdFbGVtZW50KGNvbnRleHQpO1xuICAgIH07XG5cbiAgICBib2FyZC5idWlsZFRhYmxlID0gKGVsZW1lbnQ6IFBsYWl0VGFibGUpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNTd2ltbGFuZShlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkU3dpbWxhbmVUYWJsZShlbGVtZW50IGFzIFBsYWl0U3dpbWxhbmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZFRhYmxlKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gd2l0aFN3aW1sYW5lQ3JlYXRlQnlEcmF3aW5nKHdpdGhTd2ltbGFuZUNyZWF0ZUJ5RHJhZyhib2FyZCkpO1xufTtcbiJdfQ==
@@ -0,0 +1,130 @@
1
+ import { getHitElementByPoint, PlaitBoard, RectangleClient, Transforms, isSelectedElement } from '@plait/core';
2
+ import { PlaitTableElement } from '../interfaces/table';
3
+ import { getIndexByResizeHandle, isCornerHandle, withResize, normalizeShapePoints } from '@plait/common';
4
+ import { getCellsWithPoints, updateColumns, updateRows } from '../utils/table';
5
+ import { getHitRectangleResizeHandleRef } from '../utils/position/geometry';
6
+ import { getResizeOriginPointAndHandlePoint, getResizeZoom, movePointByZoomAndOriginPoint } from './with-draw-resize';
7
+ import { isSingleSelectTable } from '../utils';
8
+ import { getSnapResizingRef, getSnapResizingRefOptions } from '../utils/snap-resizing';
9
+ const MIN_CELL_SIZE = 20;
10
+ export function withTableResize(board) {
11
+ let snapG;
12
+ const options = {
13
+ key: 'draw-table',
14
+ canResize: () => {
15
+ return true;
16
+ },
17
+ hitTest: (point) => {
18
+ const hitElement = getHitElementByPoint(board, point);
19
+ if (hitElement && PlaitTableElement.isTable(hitElement)) {
20
+ let rectangle = board.getRectangle(hitElement);
21
+ let handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, hitElement.angle);
22
+ if (handleRef) {
23
+ const selectElement = isSelectedElement(board, hitElement);
24
+ if ((selectElement && isSingleSelectTable(board)) || (!selectElement && !isCornerHandle(board, handleRef.handle))) {
25
+ return {
26
+ element: hitElement,
27
+ handle: handleRef.handle,
28
+ cursorClass: handleRef.cursorClass,
29
+ rectangle
30
+ };
31
+ }
32
+ }
33
+ const cells = getCellsWithPoints(board, hitElement);
34
+ for (let i = 0; i < cells.length; i++) {
35
+ rectangle = RectangleClient.getRectangleByPoints(cells[i].points);
36
+ handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, 0);
37
+ if (handleRef && !isCornerHandle(board, handleRef.handle)) {
38
+ return {
39
+ element: hitElement,
40
+ handle: handleRef.handle,
41
+ cursorClass: handleRef.cursorClass,
42
+ rectangle,
43
+ options: {
44
+ cell: cells[i]
45
+ }
46
+ };
47
+ }
48
+ }
49
+ }
50
+ return null;
51
+ },
52
+ onResize: (resizeRef, resizeState) => {
53
+ snapG?.remove();
54
+ const path = PlaitBoard.findPath(board, resizeRef.element);
55
+ if (resizeRef.options?.cell && resizeRef.rectangle) {
56
+ const handleIndex = getIndexByResizeHandle(resizeRef.handle);
57
+ const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle);
58
+ const resizePoints = [resizeState.startPoint, resizeState.endPoint];
59
+ const { xZoom, yZoom } = getResizeZoom(resizePoints, originPoint, handlePoint, false, false);
60
+ const originPoints = resizeRef.options?.cell.points;
61
+ const targetPoints = originPoints.map(p => {
62
+ return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);
63
+ });
64
+ const offsetX = targetPoints[1][0] - originPoints[1][0];
65
+ const offsetY = targetPoints[1][1] - originPoints[1][1];
66
+ const width = targetPoints[1][0] - targetPoints[0][0];
67
+ const height = targetPoints[1][1] - targetPoints[0][1];
68
+ if (offsetX !== 0 && width >= MIN_CELL_SIZE) {
69
+ const { columns, points } = updateColumns(resizeRef.element, resizeRef.options?.cell.columnId, width, offsetX);
70
+ Transforms.setNode(board, { columns, points }, path);
71
+ }
72
+ else if (offsetY !== 0 && height >= MIN_CELL_SIZE) {
73
+ const { rows, points } = updateRows(resizeRef.element, resizeRef.options?.cell.rowId, height, offsetY);
74
+ Transforms.setNode(board, { rows, points }, path);
75
+ }
76
+ }
77
+ else {
78
+ const isFromCorner = isCornerHandle(board, resizeRef.handle);
79
+ const isAspectRatio = resizeState.isShift;
80
+ const handleIndex = getIndexByResizeHandle(resizeRef.handle);
81
+ const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle);
82
+ const resizeSnapRefOptions = getSnapResizingRefOptions(board, resizeRef, resizeState, {
83
+ originPoint,
84
+ handlePoint
85
+ }, isAspectRatio, isFromCorner);
86
+ const resizeSnapRef = getSnapResizingRef(board, [resizeRef.element], resizeSnapRefOptions);
87
+ snapG = resizeSnapRef.snapG;
88
+ PlaitBoard.getElementActiveHost(board).append(snapG);
89
+ const points = resizeSnapRef.activePoints;
90
+ const originPoints = resizeRef.element.points;
91
+ const originRect = RectangleClient.getRectangleByPoints(originPoints);
92
+ const targetRect = RectangleClient.getRectangleByPoints(points);
93
+ const offsetWidth = targetRect.width - originRect.width;
94
+ const offsetHeight = targetRect.height - originRect.height;
95
+ let columns = [...resizeRef.element.columns];
96
+ let rows = [...resizeRef.element.rows];
97
+ if (offsetWidth !== 0) {
98
+ columns = columns.map(item => {
99
+ if (item.width) {
100
+ return {
101
+ ...item,
102
+ width: item.width + offsetWidth * (item.width / originRect.width)
103
+ };
104
+ }
105
+ return item;
106
+ });
107
+ }
108
+ if (offsetHeight !== 0) {
109
+ rows = rows.map(item => {
110
+ if (item.height) {
111
+ return {
112
+ ...item,
113
+ height: item.height + offsetHeight * (item.height / originRect.height)
114
+ };
115
+ }
116
+ return item;
117
+ });
118
+ }
119
+ Transforms.setNode(board, { points: normalizeShapePoints(points), columns, rows }, path);
120
+ }
121
+ },
122
+ afterResize: (resizeRef) => {
123
+ snapG?.remove();
124
+ snapG = null;
125
+ }
126
+ };
127
+ withResize(board, options);
128
+ return board;
129
+ }
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC10YWJsZS1yZXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9wbHVnaW5zL3dpdGgtdGFibGUtcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQVMsZUFBZSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0SCxPQUFPLEVBQXdDLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUYsT0FBTyxFQUNILHNCQUFzQixFQUN0QixjQUFjLEVBS2QsVUFBVSxFQUVWLG9CQUFvQixFQUN2QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxhQUFhLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0SCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFNdkYsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBRXpCLE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBc0I7SUFDbEQsSUFBSSxLQUF5QixDQUFDO0lBRTlCLE1BQU0sT0FBTyxHQUFvRTtRQUM3RSxHQUFHLEVBQUUsWUFBWTtRQUNqQixTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ3RCLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RCxJQUFJLFVBQVUsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQW9CLENBQUM7Z0JBQ2xFLElBQUksU0FBUyxHQUFHLDhCQUE4QixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUYsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDWixNQUFNLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQzNELElBQUksQ0FBQyxhQUFhLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNoSCxPQUFPOzRCQUNILE9BQU8sRUFBRSxVQUFVOzRCQUNuQixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07NEJBQ3hCLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVzs0QkFDbEMsU0FBUzt5QkFDWixDQUFDO29CQUNOLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3BELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ3BDLFNBQVMsR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNsRSxTQUFTLEdBQUcsOEJBQThCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZFLElBQUksU0FBUyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDeEQsT0FBTzs0QkFDSCxPQUFPLEVBQUUsVUFBVTs0QkFDbkIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNOzRCQUN4QixXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7NEJBQ2xDLFNBQVM7NEJBQ1QsT0FBTyxFQUFFO2dDQUNMLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUNqQjt5QkFDSixDQUFDO29CQUNOLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsUUFBUSxFQUFFLENBQUMsU0FBa0UsRUFBRSxXQUF3QixFQUFFLEVBQUU7WUFDdkcsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakQsTUFBTSxXQUFXLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3RCxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLGtDQUFrQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLFNBQVUsQ0FBQyxDQUFDO2dCQUNsSCxNQUFNLFlBQVksR0FBbUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEYsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM3RixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3BELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3RDLE9BQU8sNkJBQTZCLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZFLENBQUMsQ0FBbUIsQ0FBQztnQkFDckIsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDMUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUMvRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDekQsQ0FBQztxQkFBTSxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsRCxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ3ZHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN0RCxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3RCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO2dCQUMxQyxNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdELE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsa0NBQWtDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsU0FBVSxDQUFDLENBQUM7Z0JBQ2xILE1BQU0sb0JBQW9CLEdBQUcseUJBQXlCLENBQ2xELEtBQUssRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYO29CQUNJLFdBQVc7b0JBQ1gsV0FBVztpQkFDZCxFQUNELGFBQWEsRUFDYixZQUFZLENBQ2YsQ0FBQztnQkFDRixNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztnQkFDM0YsS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxZQUE4QixDQUFDO2dCQUM1RCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDOUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN0RSxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztnQkFDeEQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUMzRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNwQixPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ2IsT0FBTztnQ0FDSCxHQUFHLElBQUk7Z0NBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDOzZCQUNwRSxDQUFDO3dCQUNOLENBQUM7d0JBQ0QsT0FBTyxJQUFJLENBQUM7b0JBQ2hCLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBQ0QsSUFBSSxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUNuQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzs0QkFDZCxPQUFPO2dDQUNILEdBQUcsSUFBSTtnQ0FDUCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7NkJBQ3pFLENBQUM7d0JBQ04sQ0FBQzt3QkFDRCxPQUFPLElBQUksQ0FBQztvQkFDaEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0YsQ0FBQztRQUNMLENBQUM7UUFDRCxXQUFXLEVBQUUsQ0FBQyxTQUFrRSxFQUFFLEVBQUU7WUFDaEYsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQztLQUNKLENBQUM7SUFFRixVQUFVLENBQStDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV6RSxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0SGl0RWxlbWVudEJ5UG9pbnQsIFBsYWl0Qm9hcmQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIFRyYW5zZm9ybXMsIGlzU2VsZWN0ZWRFbGVtZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRUYWJsZSwgUGxhaXRUYWJsZUNlbGxXaXRoUG9pbnRzLCBQbGFpdFRhYmxlRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGFibGUnO1xuaW1wb3J0IHtcbiAgICBnZXRJbmRleEJ5UmVzaXplSGFuZGxlLFxuICAgIGlzQ29ybmVySGFuZGxlLFxuICAgIFJlc2l6ZU9wdGlvbnMsXG4gICAgUmVzaXplSGFuZGxlLFxuICAgIFJlc2l6ZVJlZixcbiAgICBSZXNpemVTdGF0ZSxcbiAgICB3aXRoUmVzaXplLFxuICAgIFdpdGhSZXNpemVPcHRpb25zLFxuICAgIG5vcm1hbGl6ZVNoYXBlUG9pbnRzXG59IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgZ2V0Q2VsbHNXaXRoUG9pbnRzLCB1cGRhdGVDb2x1bW5zLCB1cGRhdGVSb3dzIH0gZnJvbSAnLi4vdXRpbHMvdGFibGUnO1xuaW1wb3J0IHsgZ2V0SGl0UmVjdGFuZ2xlUmVzaXplSGFuZGxlUmVmIH0gZnJvbSAnLi4vdXRpbHMvcG9zaXRpb24vZ2VvbWV0cnknO1xuaW1wb3J0IHsgUGxhaXRUYWJsZUJvYXJkIH0gZnJvbSAnLi93aXRoLXRhYmxlJztcbmltcG9ydCB7IGdldFJlc2l6ZU9yaWdpblBvaW50QW5kSGFuZGxlUG9pbnQsIGdldFJlc2l6ZVpvb20sIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50IH0gZnJvbSAnLi93aXRoLWRyYXctcmVzaXplJztcbmltcG9ydCB7IGlzU2luZ2xlU2VsZWN0VGFibGUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBnZXRTbmFwUmVzaXppbmdSZWYsIGdldFNuYXBSZXNpemluZ1JlZk9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9zbmFwLXJlc2l6aW5nJztcblxuaW50ZXJmYWNlIFRhYmxlUmVzaXplT3B0aW9ucyBleHRlbmRzIFJlc2l6ZU9wdGlvbnMge1xuICAgIGNlbGw6IFBsYWl0VGFibGVDZWxsV2l0aFBvaW50cztcbn1cblxuY29uc3QgTUlOX0NFTExfU0laRSA9IDIwO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRhYmxlUmVzaXplKGJvYXJkOiBQbGFpdFRhYmxlQm9hcmQpIHtcbiAgICBsZXQgc25hcEc6IFNWR0dFbGVtZW50IHwgbnVsbDtcblxuICAgIGNvbnN0IG9wdGlvbnM6IFdpdGhSZXNpemVPcHRpb25zPFBsYWl0VGFibGUsIFJlc2l6ZUhhbmRsZSwgVGFibGVSZXNpemVPcHRpb25zPiA9IHtcbiAgICAgICAga2V5OiAnZHJhdy10YWJsZScsXG4gICAgICAgIGNhblJlc2l6ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGhpdFRlc3Q6IChwb2ludDogUG9pbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRIaXRFbGVtZW50QnlQb2ludChib2FyZCwgcG9pbnQpO1xuICAgICAgICAgICAgaWYgKGhpdEVsZW1lbnQgJiYgUGxhaXRUYWJsZUVsZW1lbnQuaXNUYWJsZShoaXRFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGxldCByZWN0YW5nbGUgPSBib2FyZC5nZXRSZWN0YW5nbGUoaGl0RWxlbWVudCkgYXMgUmVjdGFuZ2xlQ2xpZW50O1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGVSZWYgPSBnZXRIaXRSZWN0YW5nbGVSZXNpemVIYW5kbGVSZWYoYm9hcmQsIHJlY3RhbmdsZSwgcG9pbnQsIGhpdEVsZW1lbnQuYW5nbGUpO1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IGlzU2VsZWN0ZWRFbGVtZW50KGJvYXJkLCBoaXRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChzZWxlY3RFbGVtZW50ICYmIGlzU2luZ2xlU2VsZWN0VGFibGUoYm9hcmQpKSB8fCAoIXNlbGVjdEVsZW1lbnQgJiYgIWlzQ29ybmVySGFuZGxlKGJvYXJkLCBoYW5kbGVSZWYuaGFuZGxlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogaGl0RWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU6IGhhbmRsZVJlZi5oYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yQ2xhc3M6IGhhbmRsZVJlZi5jdXJzb3JDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbHMgPSBnZXRDZWxsc1dpdGhQb2ludHMoYm9hcmQsIGhpdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGNlbGxzW2ldLnBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVJlZiA9IGdldEhpdFJlY3RhbmdsZVJlc2l6ZUhhbmRsZVJlZihib2FyZCwgcmVjdGFuZ2xlLCBwb2ludCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVSZWYgJiYgIWlzQ29ybmVySGFuZGxlKGJvYXJkLCBoYW5kbGVSZWYuaGFuZGxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBoaXRFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZTogaGFuZGxlUmVmLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JDbGFzczogaGFuZGxlUmVmLmN1cnNvckNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGw6IGNlbGxzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBvblJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0VGFibGUsIFJlc2l6ZUhhbmRsZSwgVGFibGVSZXNpemVPcHRpb25zPiwgcmVzaXplU3RhdGU6IFJlc2l6ZVN0YXRlKSA9PiB7XG4gICAgICAgICAgICBzbmFwRz8ucmVtb3ZlKCk7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHJlc2l6ZVJlZi5vcHRpb25zPy5jZWxsICYmIHJlc2l6ZVJlZi5yZWN0YW5nbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVJbmRleCA9IGdldEluZGV4QnlSZXNpemVIYW5kbGUocmVzaXplUmVmLmhhbmRsZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBvcmlnaW5Qb2ludCwgaGFuZGxlUG9pbnQgfSA9IGdldFJlc2l6ZU9yaWdpblBvaW50QW5kSGFuZGxlUG9pbnQoYm9hcmQsIGhhbmRsZUluZGV4LCByZXNpemVSZWYucmVjdGFuZ2xlISk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzaXplUG9pbnRzOiBbUG9pbnQsIFBvaW50XSA9IFtyZXNpemVTdGF0ZS5zdGFydFBvaW50LCByZXNpemVTdGF0ZS5lbmRQb2ludF07XG4gICAgICAgICAgICAgICAgY29uc3QgeyB4Wm9vbSwgeVpvb20gfSA9IGdldFJlc2l6ZVpvb20ocmVzaXplUG9pbnRzLCBvcmlnaW5Qb2ludCwgaGFuZGxlUG9pbnQsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luUG9pbnRzID0gcmVzaXplUmVmLm9wdGlvbnM/LmNlbGwucG9pbnRzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFBvaW50cyA9IG9yaWdpblBvaW50cy5tYXAocCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludChwLCBvcmlnaW5Qb2ludCwgeFpvb20sIHlab29tKTtcbiAgICAgICAgICAgICAgICB9KSBhcyBbUG9pbnQsIFBvaW50XTtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRYID0gdGFyZ2V0UG9pbnRzWzFdWzBdIC0gb3JpZ2luUG9pbnRzWzFdWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldFkgPSB0YXJnZXRQb2ludHNbMV1bMV0gLSBvcmlnaW5Qb2ludHNbMV1bMV07XG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0YXJnZXRQb2ludHNbMV1bMF0gLSB0YXJnZXRQb2ludHNbMF1bMF07XG4gICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGFyZ2V0UG9pbnRzWzFdWzFdIC0gdGFyZ2V0UG9pbnRzWzBdWzFdO1xuICAgICAgICAgICAgICAgIGlmIChvZmZzZXRYICE9PSAwICYmIHdpZHRoID49IE1JTl9DRUxMX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBjb2x1bW5zLCBwb2ludHMgfSA9IHVwZGF0ZUNvbHVtbnMocmVzaXplUmVmLmVsZW1lbnQsIHJlc2l6ZVJlZi5vcHRpb25zPy5jZWxsLmNvbHVtbklkLCB3aWR0aCwgb2Zmc2V0WCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBjb2x1bW5zLCBwb2ludHMgfSwgcGF0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXRZICE9PSAwICYmIGhlaWdodCA+PSBNSU5fQ0VMTF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcm93cywgcG9pbnRzIH0gPSB1cGRhdGVSb3dzKHJlc2l6ZVJlZi5lbGVtZW50LCByZXNpemVSZWYub3B0aW9ucz8uY2VsbC5yb3dJZCwgaGVpZ2h0LCBvZmZzZXRZKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHJvd3MsIHBvaW50cyB9LCBwYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRnJvbUNvcm5lciA9IGlzQ29ybmVySGFuZGxlKGJvYXJkLCByZXNpemVSZWYuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0FzcGVjdFJhdGlvID0gcmVzaXplU3RhdGUuaXNTaGlmdDtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVJbmRleCA9IGdldEluZGV4QnlSZXNpemVIYW5kbGUocmVzaXplUmVmLmhhbmRsZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBvcmlnaW5Qb2ludCwgaGFuZGxlUG9pbnQgfSA9IGdldFJlc2l6ZU9yaWdpblBvaW50QW5kSGFuZGxlUG9pbnQoYm9hcmQsIGhhbmRsZUluZGV4LCByZXNpemVSZWYucmVjdGFuZ2xlISk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzaXplU25hcFJlZk9wdGlvbnMgPSBnZXRTbmFwUmVzaXppbmdSZWZPcHRpb25zKFxuICAgICAgICAgICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgICAgICAgICAgcmVzaXplUmVmLFxuICAgICAgICAgICAgICAgICAgICByZXNpemVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVQb2ludFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpc0FzcGVjdFJhdGlvLFxuICAgICAgICAgICAgICAgICAgICBpc0Zyb21Db3JuZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZVNuYXBSZWYgPSBnZXRTbmFwUmVzaXppbmdSZWYoYm9hcmQsIFtyZXNpemVSZWYuZWxlbWVudF0sIHJlc2l6ZVNuYXBSZWZPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBzbmFwRyA9IHJlc2l6ZVNuYXBSZWYuc25hcEc7XG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHNuYXBHKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludHMgPSByZXNpemVTbmFwUmVmLmFjdGl2ZVBvaW50cyBhcyBbUG9pbnQsIFBvaW50XTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5Qb2ludHMgPSByZXNpemVSZWYuZWxlbWVudC5wb2ludHM7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luUmVjdCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhvcmlnaW5Qb2ludHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFJlY3QgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocG9pbnRzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IHRhcmdldFJlY3Qud2lkdGggLSBvcmlnaW5SZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldEhlaWdodCA9IHRhcmdldFJlY3QuaGVpZ2h0IC0gb3JpZ2luUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBbLi4ucmVzaXplUmVmLmVsZW1lbnQuY29sdW1uc107XG4gICAgICAgICAgICAgICAgbGV0IHJvd3MgPSBbLi4ucmVzaXplUmVmLmVsZW1lbnQucm93c107XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldFdpZHRoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW0ud2lkdGggKyBvZmZzZXRXaWR0aCAqIChpdGVtLndpZHRoIC8gb3JpZ2luUmVjdC53aWR0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0SGVpZ2h0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MgPSByb3dzLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXRlbS5oZWlnaHQgKyBvZmZzZXRIZWlnaHQgKiAoaXRlbS5oZWlnaHQgLyBvcmlnaW5SZWN0LmhlaWdodClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcG9pbnRzOiBub3JtYWxpemVTaGFwZVBvaW50cyhwb2ludHMpLCBjb2x1bW5zLCByb3dzIH0sIHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhZnRlclJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0VGFibGUsIFJlc2l6ZUhhbmRsZSwgVGFibGVSZXNpemVPcHRpb25zPikgPT4ge1xuICAgICAgICAgICAgc25hcEc/LnJlbW92ZSgpO1xuICAgICAgICAgICAgc25hcEcgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHdpdGhSZXNpemU8UGxhaXRUYWJsZSwgUmVzaXplSGFuZGxlLCBUYWJsZVJlc2l6ZU9wdGlvbnM+KGJvYXJkLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBib2FyZDtcbn1cbiJdfQ==
@@ -1,14 +1,60 @@
1
- import { PlaitDrawElement, SwimlaneSymbols } from '../interfaces';
2
1
  import { TableComponent } from '../table.component';
2
+ import { PlaitTableElement } from '../interfaces/table';
3
+ import { PlaitBoard, RectangleClient, isPolylineHitRectangle, toViewBoxPoint, toHostPoint, getHitElementByPoint } from '@plait/core';
4
+ import { editCell, getHitCell } from '../utils/table';
5
+ import { withTableResize } from './with-table-resize';
3
6
  export const withTable = (board) => {
4
- const { drawElement } = board;
5
- board.drawElement = (context) => {
6
- if (PlaitDrawElement.isGeometry(context.element) &&
7
- [SwimlaneSymbols.swimlaneHorizontal, SwimlaneSymbols.swimlaneVertical].includes(context.element.shape)) {
7
+ const tableBoard = board;
8
+ const { drawElement, getRectangle, isRectangleHit, isHit, isMovable, dblClick } = tableBoard;
9
+ tableBoard.drawElement = (context) => {
10
+ if (PlaitTableElement.isTable(context.element)) {
8
11
  return TableComponent;
9
12
  }
10
13
  return drawElement(context);
11
14
  };
12
- return board;
15
+ tableBoard.isHit = (element, point) => {
16
+ if (PlaitTableElement.isTable(element)) {
17
+ const client = RectangleClient.getRectangleByPoints(element.points);
18
+ return RectangleClient.isPointInRectangle(client, point);
19
+ }
20
+ return isHit(element, point);
21
+ };
22
+ tableBoard.getRectangle = (element) => {
23
+ if (PlaitTableElement.isTable(element)) {
24
+ return RectangleClient.getRectangleByPoints(element.points);
25
+ }
26
+ return getRectangle(element);
27
+ };
28
+ tableBoard.isMovable = (element) => {
29
+ if (PlaitTableElement.isTable(element)) {
30
+ return true;
31
+ }
32
+ return isMovable(element);
33
+ };
34
+ tableBoard.isRectangleHit = (element, selection) => {
35
+ if (PlaitTableElement.isTable(element)) {
36
+ const rangeRectangle = RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]);
37
+ return isPolylineHitRectangle(element.points, rangeRectangle);
38
+ }
39
+ return isRectangleHit(element, selection);
40
+ };
41
+ tableBoard.dblClick = (event) => {
42
+ event.preventDefault();
43
+ if (!PlaitBoard.isReadonly(board)) {
44
+ const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
45
+ const hitElement = getHitElementByPoint(board, point);
46
+ if (hitElement && PlaitTableElement.isTable(hitElement)) {
47
+ const hitCell = getHitCell(tableBoard, hitElement, point);
48
+ if (hitCell && hitCell.text && hitCell.textHeight) {
49
+ editCell(hitCell);
50
+ }
51
+ }
52
+ }
53
+ dblClick(event);
54
+ };
55
+ tableBoard.buildTable = (element) => {
56
+ return element;
57
+ };
58
+ return withTableResize(tableBoard);
13
59
  };
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDM0MsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUM5QixLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsT0FBa0MsRUFBRSxFQUFFO1FBQ3ZELElBQ0ksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDNUMsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBd0IsQ0FBQyxFQUMzSCxDQUFDO1lBQ0MsT0FBTyxjQUFjLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQztJQUNGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdERyYXdFbGVtZW50LCBTd2ltbGFuZVN5bWJvbHMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUuY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IHdpdGhUYWJsZSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IHsgZHJhd0VsZW1lbnQgfSA9IGJvYXJkO1xuICAgIGJvYXJkLmRyYXdFbGVtZW50ID0gKGNvbnRleHQ6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGNvbnRleHQuZWxlbWVudCkgJiZcbiAgICAgICAgICAgIFtTd2ltbGFuZVN5bWJvbHMuc3dpbWxhbmVIb3Jpem9udGFsLCBTd2ltbGFuZVN5bWJvbHMuc3dpbWxhbmVWZXJ0aWNhbF0uaW5jbHVkZXMoY29udGV4dC5lbGVtZW50LnNoYXBlIGFzIFN3aW1sYW5lU3ltYm9scylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gVGFibGVDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRyYXdFbGVtZW50KGNvbnRleHQpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvYXJkO1xufTtcbiJdfQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUNILFVBQVUsRUFHVixlQUFlLEVBRWYsc0JBQXNCLEVBQ3RCLGNBQWMsRUFDZCxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3ZCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBTXRELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUMzQyxNQUFNLFVBQVUsR0FBRyxLQUF3QixDQUFDO0lBRTVDLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUU3RixVQUFVLENBQUMsV0FBVyxHQUFHLENBQUMsT0FBa0MsRUFBRSxFQUFFO1FBQzVELElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdDLE9BQU8sY0FBYyxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFFRixVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2xDLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRSxPQUFPLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUM7SUFFRixVQUFVLENBQUMsWUFBWSxHQUFHLENBQUMsT0FBcUIsRUFBRSxFQUFFO1FBQ2hELElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxlQUFlLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUM7SUFFRixVQUFVLENBQUMsU0FBUyxHQUFHLENBQUMsT0FBcUIsRUFBRSxFQUFFO1FBQzdDLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQztJQUVGLFVBQVUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxPQUFxQixFQUFFLFNBQW9CLEVBQUUsRUFBRTtRQUN4RSxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDakcsT0FBTyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxPQUFPLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0lBRUYsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtRQUN4QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRSxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsSUFBSSxVQUFVLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDaEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0QixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsVUFBVSxDQUFDLFVBQVUsR0FBRyxDQUFDLE9BQW1CLEVBQUUsRUFBRTtRQUM1QyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixPQUFPLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbGFpdFRhYmxlLCBQbGFpdFRhYmxlRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGFibGUnO1xuaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBTZWxlY3Rpb24sXG4gICAgaXNQb2x5bGluZUhpdFJlY3RhbmdsZSxcbiAgICB0b1ZpZXdCb3hQb2ludCxcbiAgICB0b0hvc3RQb2ludCxcbiAgICBnZXRIaXRFbGVtZW50QnlQb2ludFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBlZGl0Q2VsbCwgZ2V0SGl0Q2VsbCB9IGZyb20gJy4uL3V0aWxzL3RhYmxlJztcbmltcG9ydCB7IHdpdGhUYWJsZVJlc2l6ZSB9IGZyb20gJy4vd2l0aC10YWJsZS1yZXNpemUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBsYWl0VGFibGVCb2FyZCBleHRlbmRzIFBsYWl0Qm9hcmQge1xuICAgIGJ1aWxkVGFibGU6IChlbGVtZW50OiBQbGFpdFRhYmxlKSA9PiBQbGFpdFRhYmxlO1xufVxuXG5leHBvcnQgY29uc3Qgd2l0aFRhYmxlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgdGFibGVCb2FyZCA9IGJvYXJkIGFzIFBsYWl0VGFibGVCb2FyZDtcblxuICAgIGNvbnN0IHsgZHJhd0VsZW1lbnQsIGdldFJlY3RhbmdsZSwgaXNSZWN0YW5nbGVIaXQsIGlzSGl0LCBpc01vdmFibGUsIGRibENsaWNrIH0gPSB0YWJsZUJvYXJkO1xuXG4gICAgdGFibGVCb2FyZC5kcmF3RWxlbWVudCA9IChjb250ZXh0OiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdFRhYmxlRWxlbWVudC5pc1RhYmxlKGNvbnRleHQuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUYWJsZUNvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZHJhd0VsZW1lbnQoY29udGV4dCk7XG4gICAgfTtcblxuICAgIHRhYmxlQm9hcmQuaXNIaXQgPSAoZWxlbWVudCwgcG9pbnQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0VGFibGVFbGVtZW50LmlzVGFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZShjbGllbnQsIHBvaW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNIaXQoZWxlbWVudCwgcG9pbnQpO1xuICAgIH07XG5cbiAgICB0YWJsZUJvYXJkLmdldFJlY3RhbmdsZSA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0VGFibGVFbGVtZW50LmlzVGFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIHRhYmxlQm9hcmQuaXNNb3ZhYmxlID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoUGxhaXRUYWJsZUVsZW1lbnQuaXNUYWJsZShlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNNb3ZhYmxlKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICB0YWJsZUJvYXJkLmlzUmVjdGFuZ2xlSGl0ID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgc2VsZWN0aW9uOiBTZWxlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKFBsYWl0VGFibGVFbGVtZW50LmlzVGFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtzZWxlY3Rpb24uYW5jaG9yLCBzZWxlY3Rpb24uZm9jdXNdKTtcbiAgICAgICAgICAgIHJldHVybiBpc1BvbHlsaW5lSGl0UmVjdGFuZ2xlKGVsZW1lbnQucG9pbnRzLCByYW5nZVJlY3RhbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzUmVjdGFuZ2xlSGl0KGVsZW1lbnQsIHNlbGVjdGlvbik7XG4gICAgfTtcblxuICAgIHRhYmxlQm9hcmQuZGJsQ2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICAgICAgY29uc3QgaGl0RWxlbWVudCA9IGdldEhpdEVsZW1lbnRCeVBvaW50KGJvYXJkLCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoaGl0RWxlbWVudCAmJiBQbGFpdFRhYmxlRWxlbWVudC5pc1RhYmxlKGhpdEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGl0Q2VsbCA9IGdldEhpdENlbGwodGFibGVCb2FyZCwgaGl0RWxlbWVudCwgcG9pbnQpO1xuICAgICAgICAgICAgICAgIGlmIChoaXRDZWxsICYmIGhpdENlbGwudGV4dCAmJiBoaXRDZWxsLnRleHRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWRpdENlbGwoaGl0Q2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRibENsaWNrKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgdGFibGVCb2FyZC5idWlsZFRhYmxlID0gKGVsZW1lbnQ6IFBsYWl0VGFibGUpID0+IHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfTtcblxuICAgIHJldHVybiB3aXRoVGFibGVSZXNpemUodGFibGVCb2FyZCk7XG59O1xuIl19
@@ -6,4 +6,5 @@ export * from './utils';
6
6
  export * from './geometry.component';
7
7
  export * from './line.component';
8
8
  export * from './transforms';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbnMvd2l0aC1kcmF3JztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2lucy93aXRoLWxpbmUtYXV0by1jb21wbGV0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vZ2VvbWV0cnkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGluZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2Zvcm1zJztcbiJdfQ==
9
+ export * from './generators/index';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2lucy93aXRoLWRyYXcnO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW5zL3dpdGgtbGluZS1hdXRvLWNvbXBsZXRlJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW9tZXRyeS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saW5lLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zZm9ybXMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0b3JzL2luZGV4JztcbiJdfQ==