@bptlab/openbpt-modeler-typed-pn-variants 1.0.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 (242) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -0
  3. package/assets/icons/pn-fire-transition.svg +6 -0
  4. package/assets/icons/pn-inhibitor-arc.svg +30 -0
  5. package/assets/icons/pn-place.svg +62 -0
  6. package/assets/icons/pn-transition.svg +46 -0
  7. package/assets/icons/pn-unfire-transition.svg +6 -0
  8. package/assets/icons/reset.svg +1 -0
  9. package/assets/icons/toggle-off.svg +1 -0
  10. package/assets/icons/toggle-on.svg +1 -0
  11. package/assets/simulation.css +265 -0
  12. package/assets/tpn-js.css +101 -0
  13. package/dist/lib/BaseViewer.js +181 -0
  14. package/dist/lib/BaseViewer.js.map +1 -0
  15. package/dist/lib/CustomModeler.js +100 -0
  16. package/dist/lib/CustomModeler.js.map +1 -0
  17. package/dist/lib/NavigatedViewer.js +14 -0
  18. package/dist/lib/NavigatedViewer.js.map +1 -0
  19. package/dist/lib/Viewer.js +53 -0
  20. package/dist/lib/Viewer.js.map +1 -0
  21. package/dist/lib/auto-place/CustomAutoPlace.js +10 -0
  22. package/dist/lib/auto-place/CustomAutoPlace.js.map +1 -0
  23. package/dist/lib/auto-place/CustomAutoPlaceUtil.js +51 -0
  24. package/dist/lib/auto-place/CustomAutoPlaceUtil.js.map +1 -0
  25. package/dist/lib/auto-place/index.js +9 -0
  26. package/dist/lib/auto-place/index.js.map +1 -0
  27. package/dist/lib/common/copy-paste/CommonCopyPaste.js +58 -0
  28. package/dist/lib/common/copy-paste/CommonCopyPaste.js.map +1 -0
  29. package/dist/lib/common/copy-paste/ModdleCopy.js +168 -0
  30. package/dist/lib/common/copy-paste/ModdleCopy.js.map +1 -0
  31. package/dist/lib/common/copy-paste/index.js +10 -0
  32. package/dist/lib/common/copy-paste/index.js.map +1 -0
  33. package/dist/lib/common/editor-actions/EditorActions.js +110 -0
  34. package/dist/lib/common/editor-actions/EditorActions.js.map +1 -0
  35. package/dist/lib/common/editor-actions/index.js +7 -0
  36. package/dist/lib/common/editor-actions/index.js.map +1 -0
  37. package/dist/lib/common/keyboard/KeyboardBindings.js +101 -0
  38. package/dist/lib/common/keyboard/KeyboardBindings.js.map +1 -0
  39. package/dist/lib/common/keyboard/index.js +8 -0
  40. package/dist/lib/common/keyboard/index.js.map +1 -0
  41. package/dist/lib/common/search/CommonSearchProvider.js +72 -0
  42. package/dist/lib/common/search/CommonSearchProvider.js.map +1 -0
  43. package/dist/lib/common/search/index.js +9 -0
  44. package/dist/lib/common/search/index.js.map +1 -0
  45. package/dist/lib/core/index.js +6 -0
  46. package/dist/lib/core/index.js.map +1 -0
  47. package/dist/lib/declarations-panel/Util.js +32 -0
  48. package/dist/lib/declarations-panel/Util.js.map +1 -0
  49. package/dist/lib/declarations-panel/cmd/IdentifierCommitHandler.js +34 -0
  50. package/dist/lib/declarations-panel/cmd/IdentifierCommitHandler.js.map +1 -0
  51. package/dist/lib/declarations-panel/cmd/MultiCommandHandler.js +24 -0
  52. package/dist/lib/declarations-panel/cmd/MultiCommandHandler.js.map +1 -0
  53. package/dist/lib/declarations-panel/cmd/index.js +19 -0
  54. package/dist/lib/declarations-panel/cmd/index.js.map +1 -0
  55. package/dist/lib/declarations-panel/context/DeclarationsPanelContext.js +10 -0
  56. package/dist/lib/declarations-panel/context/DeclarationsPanelContext.js.map +1 -0
  57. package/dist/lib/declarations-panel/context/index.js +2 -0
  58. package/dist/lib/declarations-panel/context/index.js.map +1 -0
  59. package/dist/lib/declarations-panel/hooks/index.js +2 -0
  60. package/dist/lib/declarations-panel/hooks/index.js.map +1 -0
  61. package/dist/lib/declarations-panel/hooks/useService.js +7 -0
  62. package/dist/lib/declarations-panel/hooks/useService.js.map +1 -0
  63. package/dist/lib/declarations-panel/provider/DeclarationsProvider.js +107 -0
  64. package/dist/lib/declarations-panel/provider/DeclarationsProvider.js.map +1 -0
  65. package/dist/lib/declarations-panel/provider/IdentifierService.js +107 -0
  66. package/dist/lib/declarations-panel/provider/IdentifierService.js.map +1 -0
  67. package/dist/lib/declarations-panel/provider/SimulationModeService.js +14 -0
  68. package/dist/lib/declarations-panel/provider/SimulationModeService.js.map +1 -0
  69. package/dist/lib/declarations-panel/provider/index.js +14 -0
  70. package/dist/lib/declarations-panel/provider/index.js.map +1 -0
  71. package/dist/lib/declarations-panel/provider/properties/ArcProps.js +123 -0
  72. package/dist/lib/declarations-panel/provider/properties/ArcProps.js.map +1 -0
  73. package/dist/lib/declarations-panel/provider/properties/IdProps.js +47 -0
  74. package/dist/lib/declarations-panel/provider/properties/IdProps.js.map +1 -0
  75. package/dist/lib/declarations-panel/provider/properties/ModelDeclarations.js +193 -0
  76. package/dist/lib/declarations-panel/provider/properties/ModelDeclarations.js.map +1 -0
  77. package/dist/lib/declarations-panel/provider/properties/NameProps.js +43 -0
  78. package/dist/lib/declarations-panel/provider/properties/NameProps.js.map +1 -0
  79. package/dist/lib/declarations-panel/provider/properties/PlaceProps.js +135 -0
  80. package/dist/lib/declarations-panel/provider/properties/PlaceProps.js.map +1 -0
  81. package/dist/lib/declarations-panel/provider/properties/ReferenceSelect.js +21 -0
  82. package/dist/lib/declarations-panel/provider/properties/ReferenceSelect.js.map +1 -0
  83. package/dist/lib/declarations-panel/provider/properties/TokenProps.js +116 -0
  84. package/dist/lib/declarations-panel/provider/properties/TokenProps.js.map +1 -0
  85. package/dist/lib/declarations-panel/provider/properties/Util.js +112 -0
  86. package/dist/lib/declarations-panel/provider/properties/Util.js.map +1 -0
  87. package/dist/lib/declarations-panel/provider/properties/VariableArcProps.js +107 -0
  88. package/dist/lib/declarations-panel/provider/properties/VariableArcProps.js.map +1 -0
  89. package/dist/lib/declarations-panel/provider/properties/index.js +8 -0
  90. package/dist/lib/declarations-panel/provider/properties/index.js.map +1 -0
  91. package/dist/lib/declarations-panel/render/DeclarationsPanel.js +197 -0
  92. package/dist/lib/declarations-panel/render/DeclarationsPanel.js.map +1 -0
  93. package/dist/lib/declarations-panel/render/DeclarationsPanelRenderer.js +154 -0
  94. package/dist/lib/declarations-panel/render/DeclarationsPanelRenderer.js.map +1 -0
  95. package/dist/lib/declarations-panel/render/PanelHeaderProvider.js +55 -0
  96. package/dist/lib/declarations-panel/render/PanelHeaderProvider.js.map +1 -0
  97. package/dist/lib/declarations-panel/render/PanelPlaceholderProvider.js +17 -0
  98. package/dist/lib/declarations-panel/render/PanelPlaceholderProvider.js.map +1 -0
  99. package/dist/lib/declarations-panel/render/index.js +9 -0
  100. package/dist/lib/declarations-panel/render/index.js.map +1 -0
  101. package/dist/lib/draw/CustomRenderer.js +361 -0
  102. package/dist/lib/draw/CustomRenderer.js.map +1 -0
  103. package/dist/lib/draw/TextRenderer.js +52 -0
  104. package/dist/lib/draw/TextRenderer.js.map +1 -0
  105. package/dist/lib/draw/index.js +8 -0
  106. package/dist/lib/draw/index.js.map +1 -0
  107. package/dist/lib/import/CustomImporter.js +177 -0
  108. package/dist/lib/import/CustomImporter.js.map +1 -0
  109. package/dist/lib/import/CustomTreeWalker.js +178 -0
  110. package/dist/lib/import/CustomTreeWalker.js.map +1 -0
  111. package/dist/lib/import/Importer.js +47 -0
  112. package/dist/lib/import/Importer.js.map +1 -0
  113. package/dist/lib/import/index.js +7 -0
  114. package/dist/lib/import/index.js.map +1 -0
  115. package/dist/lib/moddle/CustomModdle.js +86 -0
  116. package/dist/lib/moddle/CustomModdle.js.map +1 -0
  117. package/dist/lib/moddle/index.js +15 -0
  118. package/dist/lib/moddle/index.js.map +1 -0
  119. package/dist/lib/moddle/resources/dc.json +99 -0
  120. package/dist/lib/moddle/resources/diagramSchema.js +210 -0
  121. package/dist/lib/moddle/resources/diagramSchema.js.map +1 -0
  122. package/dist/lib/moddle/resources/modelSchema.js +254 -0
  123. package/dist/lib/moddle/resources/modelSchema.js.map +1 -0
  124. package/dist/lib/modeling/CustomElementFactory.js +66 -0
  125. package/dist/lib/modeling/CustomElementFactory.js.map +1 -0
  126. package/dist/lib/modeling/CustomLabelEditing.js +177 -0
  127. package/dist/lib/modeling/CustomLabelEditing.js.map +1 -0
  128. package/dist/lib/modeling/CustomModeling.js +40 -0
  129. package/dist/lib/modeling/CustomModeling.js.map +1 -0
  130. package/dist/lib/modeling/CustomUpdater.js +291 -0
  131. package/dist/lib/modeling/CustomUpdater.js.map +1 -0
  132. package/dist/lib/modeling/CustomVerification.js +111 -0
  133. package/dist/lib/modeling/CustomVerification.js.map +1 -0
  134. package/dist/lib/modeling/ElementFactory.js +56 -0
  135. package/dist/lib/modeling/ElementFactory.js.map +1 -0
  136. package/dist/lib/modeling/LabelUtil.js +151 -0
  137. package/dist/lib/modeling/LabelUtil.js.map +1 -0
  138. package/dist/lib/modeling/UpdateLabelHandler.js +86 -0
  139. package/dist/lib/modeling/UpdateLabelHandler.js.map +1 -0
  140. package/dist/lib/modeling/UpdateModdlePropertiesHandler.js +88 -0
  141. package/dist/lib/modeling/UpdateModdlePropertiesHandler.js.map +1 -0
  142. package/dist/lib/modeling/UpdatePropertiesHandler.js +136 -0
  143. package/dist/lib/modeling/UpdatePropertiesHandler.js.map +1 -0
  144. package/dist/lib/modeling/behavior/AdaptiveLabelPositioningBehavior.js +169 -0
  145. package/dist/lib/modeling/behavior/AdaptiveLabelPositioningBehavior.js.map +1 -0
  146. package/dist/lib/modeling/behavior/LabelBehavior.js +255 -0
  147. package/dist/lib/modeling/behavior/LabelBehavior.js.map +1 -0
  148. package/dist/lib/modeling/behavior/index.js +8 -0
  149. package/dist/lib/modeling/behavior/index.js.map +1 -0
  150. package/dist/lib/modeling/behavior/util/GeometricUtil.js +99 -0
  151. package/dist/lib/modeling/behavior/util/GeometricUtil.js.map +1 -0
  152. package/dist/lib/modeling/behavior/util/LabelLayoutUtil.js +178 -0
  153. package/dist/lib/modeling/behavior/util/LabelLayoutUtil.js.map +1 -0
  154. package/dist/lib/modeling/behavior/util/LineAttachmentUtil.js +175 -0
  155. package/dist/lib/modeling/behavior/util/LineAttachmentUtil.js.map +1 -0
  156. package/dist/lib/modeling/index.js +36 -0
  157. package/dist/lib/modeling/index.js.map +1 -0
  158. package/dist/lib/palette/CustomContextPadProvider.js +182 -0
  159. package/dist/lib/palette/CustomContextPadProvider.js.map +1 -0
  160. package/dist/lib/palette/CustomPaletteProvider.js +93 -0
  161. package/dist/lib/palette/CustomPaletteProvider.js.map +1 -0
  162. package/dist/lib/palette/TokenModals.js +105 -0
  163. package/dist/lib/palette/TokenModals.js.map +1 -0
  164. package/dist/lib/palette/index.js +28 -0
  165. package/dist/lib/palette/index.js.map +1 -0
  166. package/dist/lib/replace/ReplaceMenuProvider.js +84 -0
  167. package/dist/lib/replace/ReplaceMenuProvider.js.map +1 -0
  168. package/dist/lib/replace/index.js +9 -0
  169. package/dist/lib/replace/index.js.map +1 -0
  170. package/dist/lib/rules/CustomRuleProvider.js +107 -0
  171. package/dist/lib/rules/CustomRuleProvider.js.map +1 -0
  172. package/dist/lib/rules/index.js +8 -0
  173. package/dist/lib/rules/index.js.map +1 -0
  174. package/dist/lib/simulation/EventHelper.js +6 -0
  175. package/dist/lib/simulation/EventHelper.js.map +1 -0
  176. package/dist/lib/simulation/Utils.js +8 -0
  177. package/dist/lib/simulation/Utils.js.map +1 -0
  178. package/dist/lib/simulation/binding-utils/arcPlaceInfoLogic.js +157 -0
  179. package/dist/lib/simulation/binding-utils/arcPlaceInfoLogic.js.map +1 -0
  180. package/dist/lib/simulation/binding-utils/bindingUtils.js +64 -0
  181. package/dist/lib/simulation/binding-utils/bindingUtils.js.map +1 -0
  182. package/dist/lib/simulation/binding-utils/earlyReturnLogic.js +107 -0
  183. package/dist/lib/simulation/binding-utils/earlyReturnLogic.js.map +1 -0
  184. package/dist/lib/simulation/binding-utils/exactSynchro.js +102 -0
  185. package/dist/lib/simulation/binding-utils/exactSynchro.js.map +1 -0
  186. package/dist/lib/simulation/binding-utils/helpers.js +141 -0
  187. package/dist/lib/simulation/binding-utils/helpers.js.map +1 -0
  188. package/dist/lib/simulation/binding-utils/inhibitorLogic.js +166 -0
  189. package/dist/lib/simulation/binding-utils/inhibitorLogic.js.map +1 -0
  190. package/dist/lib/simulation/binding-utils/linkingLogic.js +384 -0
  191. package/dist/lib/simulation/binding-utils/linkingLogic.js.map +1 -0
  192. package/dist/lib/simulation/context-pads/ContextPads.js +141 -0
  193. package/dist/lib/simulation/context-pads/ContextPads.js.map +1 -0
  194. package/dist/lib/simulation/context-pads/FireTransitionHandler.js +481 -0
  195. package/dist/lib/simulation/context-pads/FireTransitionHandler.js.map +1 -0
  196. package/dist/lib/simulation/context-pads/FireTransitionUtils.js +169 -0
  197. package/dist/lib/simulation/context-pads/FireTransitionUtils.js.map +1 -0
  198. package/dist/lib/simulation/context-pads/FormJsAdapter.js +99 -0
  199. package/dist/lib/simulation/context-pads/FormJsAdapter.js.map +1 -0
  200. package/dist/lib/simulation/context-pads/index.js +8 -0
  201. package/dist/lib/simulation/context-pads/index.js.map +1 -0
  202. package/dist/lib/simulation/palette/Palette.js +36 -0
  203. package/dist/lib/simulation/palette/Palette.js.map +1 -0
  204. package/dist/lib/simulation/palette/index.js +6 -0
  205. package/dist/lib/simulation/palette/index.js.map +1 -0
  206. package/dist/lib/simulation/reset-simulation/ResetSimulation.js +36 -0
  207. package/dist/lib/simulation/reset-simulation/ResetSimulation.js.map +1 -0
  208. package/dist/lib/simulation/reset-simulation/index.js +6 -0
  209. package/dist/lib/simulation/reset-simulation/index.js.map +1 -0
  210. package/dist/lib/simulation/simulation-history/SimulationHistory.js +158 -0
  211. package/dist/lib/simulation/simulation-history/SimulationHistory.js.map +1 -0
  212. package/dist/lib/simulation/simulation-history/index.js +6 -0
  213. package/dist/lib/simulation/simulation-history/index.js.map +1 -0
  214. package/dist/lib/simulation/simulator/Simulator.js +131 -0
  215. package/dist/lib/simulation/simulator/Simulator.js.map +1 -0
  216. package/dist/lib/simulation/simulator/index.js +6 -0
  217. package/dist/lib/simulation/simulator/index.js.map +1 -0
  218. package/dist/lib/simulation/toggle-simulation-mode/DisableModeling.js +85 -0
  219. package/dist/lib/simulation/toggle-simulation-mode/DisableModeling.js.map +1 -0
  220. package/dist/lib/simulation/toggle-simulation-mode/ToggleSimulationMode.js +65 -0
  221. package/dist/lib/simulation/toggle-simulation-mode/ToggleSimulationMode.js.map +1 -0
  222. package/dist/lib/simulation/toggle-simulation-mode/index.js +8 -0
  223. package/dist/lib/simulation/toggle-simulation-mode/index.js.map +1 -0
  224. package/dist/lib/util/EventBusEvents.js +70 -0
  225. package/dist/lib/util/EventBusEvents.js.map +1 -0
  226. package/dist/lib/util/FileUtil.js +35 -0
  227. package/dist/lib/util/FileUtil.js.map +1 -0
  228. package/dist/lib/util/HtmlUtil.js +67 -0
  229. package/dist/lib/util/HtmlUtil.js.map +1 -0
  230. package/dist/lib/util/Util.js +60 -0
  231. package/dist/lib/util/Util.js.map +1 -0
  232. package/dist/lib/util/constants.js +6 -0
  233. package/dist/lib/util/constants.js.map +1 -0
  234. package/dist/lib/util/emptyDiagram.js +12 -0
  235. package/dist/lib/util/emptyDiagram.js.map +1 -0
  236. package/dist/lib/util/generated-icons.js +12 -0
  237. package/dist/lib/util/generated-icons.js.map +1 -0
  238. package/dist/scripts/build-icons.js +30 -0
  239. package/dist/scripts/build-icons.js.map +1 -0
  240. package/dist/tsconfig.tsbuildinfo +1 -0
  241. package/index.js +1 -0
  242. package/package.json +83 -0
@@ -0,0 +1,255 @@
1
+ import { assign, sortBy } from "min-dash";
2
+ import { getBusinessObject, is } from "../../util/Util";
3
+ import { getExternalLabelMid, existsExternalLabel, isLabel, requiresExternalLabel, getLabel, } from "../LabelUtil";
4
+ import { getLabelAdjustment } from "./util/LabelLayoutUtil";
5
+ import CommandInterceptor from "diagram-js/lib/command/CommandInterceptor";
6
+ import { getNewAttachPoint } from "diagram-js/lib/util/AttachUtil";
7
+ import { getMid, roundPoint } from "diagram-js/lib/layout/LayoutUtil";
8
+ import { delta } from "diagram-js/lib/util/PositionUtil";
9
+ import { getDistancePointLine, perpendicularFoot } from "./util/GeometricUtil";
10
+ import { MODELER_PREFIX } from "../../util/constants";
11
+ const DEFAULT_LABEL_DIMENSIONS = {
12
+ width: 90,
13
+ height: 20,
14
+ };
15
+ const NAME_PROPERTY = "name";
16
+ /**
17
+ * A component that makes sure that external labels are added
18
+ * together with respective elements and properly updated (DI wise)
19
+ * during move.
20
+ */
21
+ export default class LabelBehavior extends CommandInterceptor {
22
+ constructor(eventBus, modeling, customElementFactory, textRenderer) {
23
+ super(eventBus);
24
+ this._modeling = modeling;
25
+ this._customElementFactory = customElementFactory;
26
+ this._textRenderer = textRenderer;
27
+ // Maintain a reference to the original this object
28
+ const self = this;
29
+ // TODO: Should this also happen for "weight" of arcs??
30
+ // update label if name property was updated
31
+ this.postExecute("element.updateProperties", function (e) {
32
+ const context = e.context;
33
+ const element = context.element;
34
+ const properties = context.properties;
35
+ if (NAME_PROPERTY in properties) {
36
+ modeling.updateLabel(element, properties[NAME_PROPERTY]);
37
+ }
38
+ });
39
+ // create label shape after shape/connection was created
40
+ this.postExecute(["shape.create", "connection.create"], function (e) {
41
+ const context = e.context;
42
+ const hints = context.hints || {};
43
+ if (hints.createElementsBehavior === false) {
44
+ return;
45
+ }
46
+ const element = context.shape || context.connection;
47
+ const businessObject = element.businessObject;
48
+ if (isLabel(element) || !requiresExternalLabel(element)) {
49
+ return;
50
+ }
51
+ // only create label if attribute available
52
+ if (!getLabel(element)) {
53
+ return;
54
+ }
55
+ const labelCenter = getExternalLabelMid(element);
56
+ // we don't care about x and y
57
+ const labelDimensions = textRenderer.getExternalLabelBounds(DEFAULT_LABEL_DIMENSIONS, getLabel(element));
58
+ modeling.createLabel(element, labelCenter, {
59
+ id: businessObject.id + "_label",
60
+ businessObject: businessObject,
61
+ width: labelDimensions.width,
62
+ height: labelDimensions.height,
63
+ });
64
+ });
65
+ // update label after label shape was deleted
66
+ this.postExecute("shape.delete", function (event) {
67
+ const context = event.context;
68
+ const labelTarget = context.labelTarget;
69
+ const hints = context.hints || {};
70
+ // check if label
71
+ if (labelTarget && hints.unsetLabel !== false) {
72
+ modeling.updateLabel(labelTarget, null, null, { removeShape: false });
73
+ }
74
+ });
75
+ // update di information on label creation
76
+ this.postExecute(["label.create"], function (event) {
77
+ const context = event.context;
78
+ const element = context.shape;
79
+ let businessObject, di;
80
+ // we want to trigger on real labels only
81
+ if (!element.labelTarget) {
82
+ return;
83
+ }
84
+ // we want to trigger on board elements only
85
+ if (!is(element.labelTarget || element, `${MODELER_PREFIX}:ModelElement`)) {
86
+ return;
87
+ }
88
+ ((businessObject = element.businessObject), (di = businessObject.di));
89
+ if (!di.label) {
90
+ di.label = customElementFactory.createDiLabel(element);
91
+ }
92
+ assign(di.label.bounds, {
93
+ x: element.x,
94
+ y: element.y,
95
+ width: element.width,
96
+ height: element.height,
97
+ });
98
+ });
99
+ this.postExecute(["connection.layout", "connection.updateWaypoints"], function (event) {
100
+ const context = event.context;
101
+ const hints = context.hints || {};
102
+ if (hints.labelBehavior === false) {
103
+ return;
104
+ }
105
+ const connection = context.connection;
106
+ for (let label of connection.labels) {
107
+ // handle missing label as well as the case
108
+ // that the label parent does not exist (yet),
109
+ // because it is being pasted / created via multi element create
110
+ //
111
+ // Cf. https://github.com/bpmn-io/bpmn-js/pull/1227
112
+ if (!label || !label.parent) {
113
+ return;
114
+ }
115
+ const labelAdjustment = self.getVisibleLabelAdjustment(event, label);
116
+ modeling.moveShape(label, labelAdjustment);
117
+ }
118
+ });
119
+ // keep label position on shape replace
120
+ this.postExecute(["shape.replace"], function (event) {
121
+ const context = event.context;
122
+ const newShape = context.newShape;
123
+ const oldShape = context.oldShape;
124
+ const businessObject = getBusinessObject(newShape);
125
+ if (businessObject &&
126
+ requiresExternalLabel(businessObject) &&
127
+ oldShape.label &&
128
+ newShape.label) {
129
+ newShape.label.x = oldShape.label.x;
130
+ newShape.label.y = oldShape.label.y;
131
+ }
132
+ });
133
+ // move external label after resizing
134
+ this.postExecute("shape.resize", function (event) {
135
+ const context = event.context;
136
+ const shape = context.shape;
137
+ const newBounds = context.newBounds;
138
+ const oldBounds = context.oldBounds;
139
+ if (existsExternalLabel(shape)) {
140
+ const label = shape.label;
141
+ const labelMid = getMid(label);
142
+ const edges = asEdges(oldBounds);
143
+ // get nearest border point to label as reference point
144
+ const referencePoint = getReferencePoint(labelMid, edges);
145
+ const delta = getReferencePointDelta(referencePoint, oldBounds, newBounds);
146
+ modeling.moveShape(label, delta);
147
+ }
148
+ });
149
+ }
150
+ getVisibleLabelAdjustment(event, label) {
151
+ const context = event.context;
152
+ const connection = context.connection;
153
+ const hints = assign({}, context.hints);
154
+ const newWaypoints = context.newWaypoints || connection.waypoints;
155
+ const oldWaypoints = context.oldWaypoints;
156
+ if (typeof hints.startChanged === "undefined") {
157
+ hints.startChanged = !!hints.connectionStart;
158
+ }
159
+ if (typeof hints.endChanged === "undefined") {
160
+ hints.endChanged = !!hints.connectionEnd;
161
+ }
162
+ return getLabelAdjustment(label, newWaypoints, oldWaypoints, hints);
163
+ }
164
+ }
165
+ LabelBehavior.$inject = [
166
+ "eventBus",
167
+ "modeling",
168
+ "customElementFactory",
169
+ "textRenderer",
170
+ ];
171
+ // helpers //////////////////////
172
+ /**
173
+ * Calculates a reference point delta relative to a new position
174
+ * of a certain element's bounds
175
+ */
176
+ export function getReferencePointDelta(referencePoint, oldBounds, newBounds) {
177
+ const newReferencePoint = getNewAttachPoint(referencePoint, oldBounds, newBounds);
178
+ return roundPoint(delta(newReferencePoint, referencePoint));
179
+ }
180
+ /**
181
+ * Generates the nearest point (reference point) for a given point
182
+ * onto given set of lines
183
+ */
184
+ export function getReferencePoint(point, lines) {
185
+ if (!lines.length) {
186
+ return;
187
+ }
188
+ const nearestLine = getNearestLine(point, lines);
189
+ return perpendicularFoot(point, nearestLine);
190
+ }
191
+ /**
192
+ * Convert the given bounds to a lines array containing all edges
193
+ */
194
+ export function asEdges(bounds) {
195
+ return [
196
+ [
197
+ // top
198
+ {
199
+ x: bounds.x,
200
+ y: bounds.y,
201
+ },
202
+ {
203
+ x: bounds.x + (bounds.width || 0),
204
+ y: bounds.y,
205
+ },
206
+ ],
207
+ [
208
+ // right
209
+ {
210
+ x: bounds.x + (bounds.width || 0),
211
+ y: bounds.y,
212
+ },
213
+ {
214
+ x: bounds.x + (bounds.width || 0),
215
+ y: bounds.y + (bounds.height || 0),
216
+ },
217
+ ],
218
+ [
219
+ // bottom
220
+ {
221
+ x: bounds.x,
222
+ y: bounds.y + (bounds.height || 0),
223
+ },
224
+ {
225
+ x: bounds.x + (bounds.width || 0),
226
+ y: bounds.y + (bounds.height || 0),
227
+ },
228
+ ],
229
+ [
230
+ // left
231
+ {
232
+ x: bounds.x,
233
+ y: bounds.y,
234
+ },
235
+ {
236
+ x: bounds.x,
237
+ y: bounds.y + (bounds.height || 0),
238
+ },
239
+ ],
240
+ ];
241
+ }
242
+ /**
243
+ * Returns the nearest line for a given point by distance
244
+ */
245
+ function getNearestLine(point, lines) {
246
+ const distances = lines.map(function (l) {
247
+ return {
248
+ line: l,
249
+ distance: getDistancePointLine(point, l),
250
+ };
251
+ });
252
+ const sorted = sortBy(distances, "distance");
253
+ return sorted[0].line;
254
+ }
255
+ //# sourceMappingURL=LabelBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LabelBehavior.js","sourceRoot":"","sources":["../../../../lib/modeling/behavior/LabelBehavior.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,OAAO,EACP,qBAAqB,EACrB,QAAQ,GACT,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,kBAAkB,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,wBAAwB,GAAG;IAC/B,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,kBAAkB;IAC3D,YAAY,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,YAAY;QAChE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEhB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAElC,mDAAmD;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC;QAElB,uDAAuD;QACvD,4CAA4C;QAC5C,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,UAAU,CAAC;YACtD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAChC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAEtC,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;gBAChC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,wDAAwD;QACxD,IAAI,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,mBAAmB,CAAC,EAAE,UAAU,CAAC;YACjE,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAElC,IAAI,KAAK,CAAC,sBAAsB,KAAK,KAAK,EAAE,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;YACpD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;YAE9C,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxD,OAAO;YACT,CAAC;YAED,2CAA2C;YAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAEjD,8BAA8B;YAC9B,MAAM,eAAe,GAAG,YAAY,CAAC,sBAAsB,CACzD,wBAAwB,EACxB,QAAQ,CAAC,OAAO,CAAC,CAClB,CAAC;YAEF,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE;gBACzC,EAAE,EAAE,cAAc,CAAC,EAAE,GAAG,QAAQ;gBAChC,cAAc,EAAE,cAAc;gBAC9B,KAAK,EAAE,eAAe,CAAC,KAAK;gBAC5B,MAAM,EAAE,eAAe,CAAC,MAAM;aAC/B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,UAAU,KAAK;YAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAElC,iBAAiB;YACjB,IAAI,WAAW,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;gBAC9C,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,0CAA0C;QAC1C,IAAI,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,EAAE,UAAU,KAAK;YAChD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;YAC9B,IAAI,cAAc,EAAE,EAAE,CAAC;YAEvB,yCAAyC;YACzC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,4CAA4C;YAC5C,IACE,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,EAAE,GAAG,cAAc,eAAe,CAAC,EACrE,CAAC;gBACD,OAAO;YACT,CAAC;YAED,CAAC,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;YAEtE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACd,EAAE,CAAC,KAAK,GAAG,oBAAoB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;gBACtB,CAAC,EAAE,OAAO,CAAC,CAAC;gBACZ,CAAC,EAAE,OAAO,CAAC,CAAC;gBACZ,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CACd,CAAC,mBAAmB,EAAE,4BAA4B,CAAC,EACnD,UAAU,KAAK;YACb,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAElC,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAEtC,KAAK,IAAI,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACpC,2CAA2C;gBAC3C,8CAA8C;gBAC9C,gEAAgE;gBAChE,EAAE;gBACF,mDAAmD;gBACnD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC5B,OAAO;gBACT,CAAC;gBACD,MAAM,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAErE,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CACF,CAAC;QAEF,uCAAuC;QACvC,IAAI,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,EAAE,UAAU,KAAK;YACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAElC,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAEnD,IACE,cAAc;gBACd,qBAAqB,CAAC,cAAc,CAAC;gBACrC,QAAQ,CAAC,KAAK;gBACd,QAAQ,CAAC,KAAK,EACd,CAAC;gBACD,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,qCAAqC;QACrC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,UAAU,KAAK;YAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAEpC,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;gBAEjC,uDAAuD;gBACvD,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAE1D,MAAM,KAAK,GAAG,sBAAsB,CAClC,cAAc,EACd,SAAS,EACT,SAAS,CACV,CAAC;gBAEF,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB,CAAC,KAAK,EAAE,KAAK;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,SAAS,CAAC;QAClE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAE1C,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;YAC9C,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;QAC/C,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;YAC5C,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;QAC3C,CAAC;QAED,OAAO,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;CACF;AAED,aAAa,CAAC,OAAO,GAAG;IACtB,UAAU;IACV,UAAU;IACV,sBAAsB;IACtB,cAAc;CACf,CAAC;AAEF,iCAAiC;AAEjC;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS;IACzE,MAAM,iBAAiB,GAAG,iBAAiB,CACzC,cAAc,EACd,SAAS,EACT,SAAS,CACV,CAAC;IACF,OAAO,UAAU,CAAC,KAAK,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAK,EAAE,KAAK;IAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjD,OAAO,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,MAAM;IAC5B,OAAO;QACL;YACE,MAAM;YACN;gBACE,CAAC,EAAE,MAAM,CAAC,CAAC;gBACX,CAAC,EAAE,MAAM,CAAC,CAAC;aACZ;YACD;gBACE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;gBACjC,CAAC,EAAE,MAAM,CAAC,CAAC;aACZ;SACF;QACD;YACE,QAAQ;YACR;gBACE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;gBACjC,CAAC,EAAE,MAAM,CAAC,CAAC;aACZ;YACD;gBACE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;gBACjC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;aACnC;SACF;QACD;YACE,SAAS;YACT;gBACE,CAAC,EAAE,MAAM,CAAC,CAAC;gBACX,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;aACnC;YACD;gBACE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;gBACjC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;aACnC;SACF;QACD;YACE,OAAO;YACP;gBACE,CAAC,EAAE,MAAM,CAAC,CAAC;gBACX,CAAC,EAAE,MAAM,CAAC,CAAC;aACZ;YACD;gBACE,CAAC,EAAE,MAAM,CAAC,CAAC;gBACX,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;aACnC;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAAK,EAAE,KAAK;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,CAAC;YACP,QAAQ,EAAE,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC;SACzC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import AdaptiveLabelPositioningBehavior from "./AdaptiveLabelPositioningBehavior";
2
+ import LabelBehavior from "./LabelBehavior";
3
+ export default {
4
+ __init__: ["adaptiveLabelPositioningBehavior", "labelBehavior"],
5
+ adaptiveLabelPositioningBehavior: ["type", AdaptiveLabelPositioningBehavior],
6
+ labelBehavior: ["type", LabelBehavior],
7
+ };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modeling/behavior/index.js"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,MAAM,oCAAoC,CAAC;AAClF,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,eAAe;IACb,QAAQ,EAAE,CAAC,kCAAkC,EAAE,eAAe,CAAC;IAC/D,gCAAgC,EAAE,CAAC,MAAM,EAAE,gCAAgC,CAAC;IAC5E,aAAa,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;CACvC,CAAC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Returns the length of a vector
3
+ *
4
+ * @param {Vector}
5
+ * @return {Float}
6
+ */
7
+ export function vectorLength(v) {
8
+ return Math.sqrt(Math.pow(v.x, 2) + Math.pow(v.y, 2));
9
+ }
10
+ /**
11
+ * Calculates the angle between a line a the yAxis
12
+ *
13
+ * @param {Array}
14
+ * @return {Float}
15
+ */
16
+ export function getAngle(line) {
17
+ // return value is between 0, 180 and -180, -0
18
+ // @janstuemmel: maybe replace return a/b with b/a
19
+ return Math.atan((line[1].y - line[0].y) / (line[1].x - line[0].x));
20
+ }
21
+ /**
22
+ * Rotates a vector by a given angle
23
+ *
24
+ * @param {Vector}
25
+ * @param {Float} Angle in radians
26
+ * @return {Vector}
27
+ */
28
+ export function rotateVector(vector, angle) {
29
+ return !angle
30
+ ? vector
31
+ : {
32
+ x: Math.cos(angle) * vector.x - Math.sin(angle) * vector.y,
33
+ y: Math.sin(angle) * vector.x + Math.cos(angle) * vector.y,
34
+ };
35
+ }
36
+ /**
37
+ * Solves a 2D equation system
38
+ * a + r*b = c, where a,b,c are 2D vectors
39
+ *
40
+ * @param {Vector}
41
+ * @param {Vector}
42
+ * @param {Vector}
43
+ * @return {Float}
44
+ */
45
+ function solveLambaSystem(a, b, c) {
46
+ // the 2d system
47
+ var system = [
48
+ { n: a[0] - c[0], lambda: b[0] },
49
+ { n: a[1] - c[1], lambda: b[1] },
50
+ ];
51
+ // solve
52
+ var n = system[0].n * b[0] + system[1].n * b[1], l = system[0].lambda * b[0] + system[1].lambda * b[1];
53
+ return -n / l;
54
+ }
55
+ /**
56
+ * Position of perpendicular foot
57
+ *
58
+ * @param {Point}
59
+ * @param [ {Point}, {Point} ] line defined through two points
60
+ * @return {Point} the perpendicular foot position
61
+ */
62
+ export function perpendicularFoot(point, line) {
63
+ var a = line[0], b = line[1];
64
+ // relative position of b from a
65
+ var bd = { x: b.x - a.x, y: b.y - a.y };
66
+ // solve equation system to the parametrized vectors param real value
67
+ var r = solveLambaSystem([a.x, a.y], [bd.x, bd.y], [point.x, point.y]);
68
+ return { x: a.x + r * bd.x, y: a.y + r * bd.y };
69
+ }
70
+ /**
71
+ * Calculates the distance between a point and a line
72
+ *
73
+ * @param {Point}
74
+ * @param [ {Point}, {Point} ] line defined through two points
75
+ * @return {Float} distance
76
+ */
77
+ export function getDistancePointLine(point, line) {
78
+ var pfPoint = perpendicularFoot(point, line);
79
+ // distance vector
80
+ var connectionVector = {
81
+ x: pfPoint.x - point.x,
82
+ y: pfPoint.y - point.y,
83
+ };
84
+ return vectorLength(connectionVector);
85
+ }
86
+ /**
87
+ * Calculates the distance between two points
88
+ *
89
+ * @param {Point}
90
+ * @param {Point}
91
+ * @return {Float} distance
92
+ */
93
+ export function getDistancePointPoint(point1, point2) {
94
+ return vectorLength({
95
+ x: point1.x - point2.x,
96
+ y: point1.y - point2.y,
97
+ });
98
+ }
99
+ //# sourceMappingURL=GeometricUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeometricUtil.js","sourceRoot":"","sources":["../../../../../lib/modeling/behavior/util/GeometricUtil.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ import { getAngle, getDistancePointPoint, rotateVector } from "./GeometricUtil";
2
+ import { getAttachment } from "./LineAttachmentUtil";
3
+ import { roundPoint } from "diagram-js/lib/layout/LayoutUtil";
4
+ export function findNewLabelLineStartIndex(oldWaypoints, newWaypoints, attachment, hints) {
5
+ const index = attachment.segmentIndex;
6
+ const offset = newWaypoints.length - oldWaypoints.length;
7
+ // segmentMove happened
8
+ if (hints.segmentMove) {
9
+ const oldSegmentStartIndex = hints.segmentMove.segmentStartIndex;
10
+ const newSegmentStartIndex = hints.segmentMove.newSegmentStartIndex;
11
+ // if label was on moved segment return new segment index
12
+ if (index === oldSegmentStartIndex) {
13
+ return newSegmentStartIndex;
14
+ }
15
+ // label is after new segment index
16
+ if (index >= newSegmentStartIndex) {
17
+ return index + offset < newSegmentStartIndex
18
+ ? newSegmentStartIndex
19
+ : index + offset;
20
+ }
21
+ // if label is before new segment index
22
+ return index;
23
+ }
24
+ // bendpointMove happened
25
+ if (hints.bendpointMove) {
26
+ const insert = hints.bendpointMove.insert;
27
+ const bendpointIndex = hints.bendpointMove.bendpointIndex;
28
+ let newIndex;
29
+ // waypoints length didnt change
30
+ if (offset === 0) {
31
+ return index;
32
+ }
33
+ // label behind new/removed bendpoint
34
+ if (index >= bendpointIndex) {
35
+ newIndex = insert ? index + 1 : index - 1;
36
+ }
37
+ // label before new/removed bendpoint
38
+ if (index < bendpointIndex) {
39
+ newIndex = index;
40
+ // decide label should take right or left segment
41
+ if (insert &&
42
+ attachment.type !== "bendpoint" &&
43
+ bendpointIndex - 1 === index) {
44
+ const rel = relativePositionMidWaypoint(newWaypoints, bendpointIndex);
45
+ if (rel < attachment.relativeLocation) {
46
+ newIndex++;
47
+ }
48
+ }
49
+ }
50
+ return newIndex;
51
+ }
52
+ // start/end changed
53
+ if (offset === 0) {
54
+ return index;
55
+ }
56
+ if (hints.connectionStart) {
57
+ return index === 0 ? 0 : null;
58
+ }
59
+ if (hints.connectionEnd) {
60
+ return index === oldWaypoints.length - 2 ? newWaypoints.length - 2 : null;
61
+ }
62
+ // if nothing fits, return null
63
+ return null;
64
+ }
65
+ /**
66
+ * Calculate the required adjustment (move delta) for the given label
67
+ * after the connection waypoints got updated.
68
+ *
69
+ * @param {djs.model.Label} label
70
+ * @param {Array<Point>} newWaypoints
71
+ * @param {Array<Point>} oldWaypoints
72
+ * @param {Object} hints
73
+ *
74
+ * @return {Point} delta
75
+ */
76
+ export function getLabelAdjustment(label, newWaypoints, oldWaypoints, hints) {
77
+ let x = 0;
78
+ let y = 0;
79
+ if (label.labelAttribute == "sourceCardinality") {
80
+ return {
81
+ x: newWaypoints[0].x - oldWaypoints[0].x,
82
+ y: newWaypoints[0].y - oldWaypoints[0].y,
83
+ };
84
+ }
85
+ if (label.labelAttribute == "targetCardinality") {
86
+ return {
87
+ x: newWaypoints.at(-1).x - oldWaypoints.at(-1).x,
88
+ y: newWaypoints.at(-1).y - oldWaypoints.at(-1).y,
89
+ };
90
+ }
91
+ const labelPosition = getLabelMid(label);
92
+ // get closest attachment
93
+ const attachment = getAttachment(labelPosition, oldWaypoints);
94
+ const oldLabelLineIndex = attachment.segmentIndex;
95
+ const newLabelLineIndex = findNewLabelLineStartIndex(oldWaypoints, newWaypoints, attachment, hints);
96
+ if (newLabelLineIndex === null) {
97
+ return { x: x, y: y };
98
+ }
99
+ // should never happen
100
+ // TODO(@janstuemmel): throw an error here when connectionSegmentMove is refactored
101
+ if (newLabelLineIndex < 0 || newLabelLineIndex > newWaypoints.length - 2) {
102
+ return { x: x, y: y };
103
+ }
104
+ const oldLabelLine = getLine(oldWaypoints, oldLabelLineIndex);
105
+ const newLabelLine = getLine(newWaypoints, newLabelLineIndex);
106
+ const oldFoot = attachment.position;
107
+ let relativeFootPosition = getRelativeFootPosition(oldLabelLine, oldFoot);
108
+ const angleDelta = getAngleDelta(oldLabelLine, newLabelLine);
109
+ // special rule if label on bendpoint
110
+ if (attachment.type === "bendpoint") {
111
+ const offset = newWaypoints.length - oldWaypoints.length;
112
+ const oldBendpointIndex = attachment.bendpointIndex;
113
+ const oldBendpoint = oldWaypoints[oldBendpointIndex];
114
+ // bendpoint position hasn't changed, return same position
115
+ if (newWaypoints.indexOf(oldBendpoint) !== -1) {
116
+ return { x: x, y: y };
117
+ }
118
+ // new bendpoint and old bendpoint have same index, then just return the offset
119
+ if (offset === 0) {
120
+ const newBendpoint = newWaypoints[oldBendpointIndex];
121
+ return {
122
+ x: newBendpoint.x - attachment.position.x,
123
+ y: newBendpoint.y - attachment.position.y,
124
+ };
125
+ }
126
+ // if bendpoints get removed
127
+ if (offset < 0 &&
128
+ oldBendpointIndex !== 0 &&
129
+ oldBendpointIndex < oldWaypoints.length - 1) {
130
+ relativeFootPosition = relativePositionMidWaypoint(oldWaypoints, oldBendpointIndex);
131
+ }
132
+ }
133
+ const newFoot = {
134
+ x: (newLabelLine[1].x - newLabelLine[0].x) * relativeFootPosition +
135
+ newLabelLine[0].x,
136
+ y: (newLabelLine[1].y - newLabelLine[0].y) * relativeFootPosition +
137
+ newLabelLine[0].y,
138
+ };
139
+ // the rotated vector to label
140
+ const newLabelVector = rotateVector({
141
+ x: labelPosition.x - oldFoot.x,
142
+ y: labelPosition.y - oldFoot.y,
143
+ }, angleDelta);
144
+ // the new relative position
145
+ x = newFoot.x + newLabelVector.x - labelPosition.x;
146
+ y = newFoot.y + newLabelVector.y - labelPosition.y;
147
+ return roundPoint({
148
+ x: x,
149
+ y: y,
150
+ });
151
+ }
152
+ // HELPERS //////////////////////
153
+ function relativePositionMidWaypoint(waypoints, idx) {
154
+ const distanceSegment1 = getDistancePointPoint(waypoints[idx - 1], waypoints[idx]);
155
+ const distanceSegment2 = getDistancePointPoint(waypoints[idx], waypoints[idx + 1]);
156
+ const relativePosition = distanceSegment1 / (distanceSegment1 + distanceSegment2);
157
+ return relativePosition;
158
+ }
159
+ function getLabelMid(label) {
160
+ return {
161
+ x: label.x + label.width / 2,
162
+ y: label.y + label.height / 2,
163
+ };
164
+ }
165
+ function getAngleDelta(l1, l2) {
166
+ const a1 = getAngle(l1);
167
+ const a2 = getAngle(l2);
168
+ return a2 - a1;
169
+ }
170
+ function getLine(waypoints, idx) {
171
+ return [waypoints[idx], waypoints[idx + 1]];
172
+ }
173
+ function getRelativeFootPosition(line, foot) {
174
+ const length = getDistancePointPoint(line[0], line[1]);
175
+ const lengthToFoot = getDistancePointPoint(line[0], foot);
176
+ return length === 0 ? 0 : lengthToFoot / length;
177
+ }
178
+ //# sourceMappingURL=LabelLayoutUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LabelLayoutUtil.js","sourceRoot":"","sources":["../../../../../lib/modeling/behavior/util/LabelLayoutUtil.js"],"names":[],"mappings":"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"}