@foblex/flow 1.5.0 → 1.5.1

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 (198) hide show
  1. package/domain/get-output-rect-in-flow/get-output-rect-in-flow-request.d.ts +4 -0
  2. package/domain/get-output-rect-in-flow/get-output-rect-in-flow-response.d.ts +7 -0
  3. package/domain/get-output-rect-in-flow/get-output-rect-in-flow.handler.d.ts +14 -0
  4. package/domain/get-output-rect-in-flow/index.d.ts +3 -0
  5. package/domain/index.d.ts +2 -1
  6. package/domain/providers.d.ts +3 -2
  7. package/domain/redraw-connections/index.d.ts +2 -0
  8. package/domain/redraw-connections/redraw-connections-request.d.ts +3 -0
  9. package/{f-flow/domain → domain}/redraw-connections/redraw-connections.handler.d.ts +8 -6
  10. package/esm2022/domain/get-connection-vector/get-connection-vector.handler.mjs +10 -3
  11. package/esm2022/domain/get-output-rect-in-flow/get-output-rect-in-flow-request.mjs +6 -0
  12. package/esm2022/domain/get-output-rect-in-flow/get-output-rect-in-flow-response.mjs +7 -0
  13. package/esm2022/domain/get-output-rect-in-flow/get-output-rect-in-flow.handler.mjs +33 -0
  14. package/esm2022/domain/get-output-rect-in-flow/index.mjs +4 -0
  15. package/esm2022/domain/index.mjs +3 -2
  16. package/esm2022/domain/providers.mjs +6 -4
  17. package/esm2022/domain/redraw-connections/index.mjs +3 -0
  18. package/esm2022/domain/redraw-connections/redraw-connections-request.mjs +5 -0
  19. package/esm2022/domain/redraw-connections/redraw-connections.handler.mjs +54 -0
  20. package/esm2022/f-canvas/f-canvas-base.mjs +3 -4
  21. package/esm2022/f-components-store.mjs +1 -1
  22. package/esm2022/f-connection/common/f-connection-base.mjs +2 -2
  23. package/esm2022/f-connection/common/f-path/f-connection-path.component.mjs +2 -2
  24. package/esm2022/f-connection/common/i-has-connection-from-to.mjs +1 -1
  25. package/esm2022/f-connection/common/mixins/change-connection-selection.mixin.mjs +1 -1
  26. package/esm2022/f-connection/common/mixins/change-connection-visibility.mixin.mjs +1 -1
  27. package/esm2022/f-connection/f-connection/f-connection.component.mjs +5 -5
  28. package/esm2022/f-connection/f-connection-for-create/f-connection-for-create.component.mjs +2 -2
  29. package/esm2022/f-draggable/connections/create-connection/create-connection.drag-handler.mjs +6 -7
  30. package/esm2022/f-draggable/connections/create-connection/create-connection.on-pointer-up.mjs +3 -3
  31. package/esm2022/f-draggable/connections/create-connection/create-connection.prepare-drag-sequence.mjs +8 -8
  32. package/esm2022/f-draggable/connections/create-connection/f-create-connection.event.mjs +7 -0
  33. package/esm2022/f-draggable/connections/create-connection/index.mjs +2 -2
  34. package/esm2022/f-draggable/connections/reassign-connection/f-reassign-connection.event.mjs +9 -0
  35. package/esm2022/f-draggable/connections/reassign-connection/index.mjs +2 -2
  36. package/esm2022/f-draggable/connections/reassign-connection/reassign-connection.drag-handler.mjs +8 -9
  37. package/esm2022/f-draggable/connections/reassign-connection/reassign-connection.on-pointer-up.mjs +3 -3
  38. package/esm2022/f-draggable/connections/reassign-connection/reassign-connection.prepare-drag-sequence.mjs +7 -7
  39. package/esm2022/f-draggable/external-item/external-item.drag-handler.mjs +1 -1
  40. package/esm2022/f-draggable/external-item/external-item.on-pointer-up.mjs +3 -3
  41. package/esm2022/f-draggable/external-item/external-item.prepare-drag-sequence.mjs +3 -3
  42. package/esm2022/f-draggable/external-item/f-create-node.event.mjs +7 -0
  43. package/esm2022/f-draggable/external-item/index.mjs +2 -2
  44. package/esm2022/f-draggable/f-draggable-base.mjs +1 -1
  45. package/esm2022/f-draggable/f-draggable-data-context.mjs +1 -1
  46. package/esm2022/f-draggable/f-draggable.directive.mjs +3 -3
  47. package/esm2022/f-draggable/index.mjs +13 -0
  48. package/esm2022/f-draggable/node/connection-source.drag-handler.mjs +6 -7
  49. package/esm2022/f-draggable/node/connection-target.drag-handler.mjs +6 -7
  50. package/esm2022/f-draggable/node/connection.drag-handler.mjs +6 -7
  51. package/esm2022/f-draggable/node/node.prepare-drag-sequence.mjs +11 -11
  52. package/esm2022/f-draggable/single-select/f-selection-change-event.mjs +7 -0
  53. package/esm2022/f-draggable/single-select/index.mjs +2 -2
  54. package/esm2022/f-external-item/f-external-item-base.mjs +11 -0
  55. package/esm2022/f-external-item/f-external-item.directive.mjs +44 -0
  56. package/esm2022/f-external-item/f-external-item.service.mjs +28 -0
  57. package/esm2022/f-external-item/index.mjs +5 -0
  58. package/esm2022/f-external-item/is-external-item.mjs +7 -0
  59. package/esm2022/f-flow/f-flow.component.mjs +14 -20
  60. package/esm2022/f-flow/index.mjs +1 -2
  61. package/esm2022/f-flow.module.mjs +5 -4
  62. package/esm2022/f-line-alignment/domain/i-line-alignment-rect.mjs +2 -0
  63. package/esm2022/f-line-alignment/domain/i-line-alignment-result.mjs +2 -0
  64. package/esm2022/f-line-alignment/domain/i-nearest-coordinate-result.mjs +2 -0
  65. package/esm2022/f-line-alignment/domain/index.mjs +7 -0
  66. package/esm2022/f-line-alignment/domain/line-element.mjs +23 -0
  67. package/esm2022/f-line-alignment/domain/line-service.mjs +33 -0
  68. package/esm2022/f-line-alignment/domain/nearest-coordinate.mjs +100 -0
  69. package/esm2022/f-line-alignment/f-line-alignment-base.mjs +11 -0
  70. package/esm2022/f-line-alignment/f-line-alignment.component.mjs +90 -0
  71. package/esm2022/f-line-alignment/index.mjs +4 -0
  72. package/esm2022/f-mediator/f-flow-mediator.mjs +24 -0
  73. package/esm2022/f-mediator/f-handler-register.mjs +7 -0
  74. package/esm2022/f-mediator/index.mjs +3 -0
  75. package/esm2022/f-selection-area/domain/i-selection-area-rect.mjs +2 -0
  76. package/esm2022/f-selection-area/domain/index.mjs +2 -0
  77. package/esm2022/f-selection-area/f-selection-area-base.mjs +11 -0
  78. package/esm2022/f-selection-area/f-selection-area.component.mjs +44 -0
  79. package/esm2022/f-selection-area/index.mjs +4 -0
  80. package/esm2022/public-api.mjs +6 -3
  81. package/f-canvas/f-canvas-base.d.ts +3 -4
  82. package/f-components-store.d.ts +1 -1
  83. package/f-connection/common/f-connection-base.d.ts +2 -2
  84. package/f-connection/common/i-has-connection-from-to.d.ts +1 -1
  85. package/f-connection/common/mixins/change-connection-selection.mixin.d.ts +1 -2
  86. package/f-connection/common/mixins/change-connection-visibility.mixin.d.ts +1 -2
  87. package/f-connection/f-connection/f-connection.component.d.ts +2 -2
  88. package/f-connection/f-connection-for-create/f-connection-for-create.component.d.ts +1 -1
  89. package/f-draggable/connections/create-connection/create-connection.drag-handler.d.ts +3 -4
  90. package/f-draggable/connections/create-connection/create-connection.prepare-drag-sequence.d.ts +4 -4
  91. package/f-draggable/connections/create-connection/f-create-connection.event.d.ts +5 -0
  92. package/f-draggable/connections/create-connection/index.d.ts +1 -1
  93. package/f-draggable/connections/reassign-connection/f-reassign-connection.event.d.ts +7 -0
  94. package/f-draggable/connections/reassign-connection/index.d.ts +1 -1
  95. package/f-draggable/connections/reassign-connection/reassign-connection.drag-handler.d.ts +4 -4
  96. package/f-draggable/connections/reassign-connection/reassign-connection.prepare-drag-sequence.d.ts +4 -4
  97. package/f-draggable/external-item/external-item.drag-handler.d.ts +1 -1
  98. package/f-draggable/external-item/external-item.prepare-drag-sequence.d.ts +1 -1
  99. package/f-draggable/external-item/{create-node.event.d.ts → f-create-node.event.d.ts} +1 -1
  100. package/f-draggable/external-item/index.d.ts +1 -1
  101. package/f-draggable/f-draggable-base.d.ts +8 -8
  102. package/f-draggable/f-draggable-data-context.d.ts +2 -1
  103. package/f-draggable/f-draggable.directive.d.ts +7 -7
  104. package/f-draggable/{public-api.d.ts → index.d.ts} +0 -1
  105. package/f-draggable/node/connection-source.drag-handler.d.ts +4 -4
  106. package/f-draggable/node/connection-target.drag-handler.d.ts +4 -4
  107. package/f-draggable/node/connection.drag-handler.d.ts +4 -4
  108. package/f-draggable/node/node.prepare-drag-sequence.d.ts +4 -4
  109. package/f-draggable/single-select/{selection-change-event.d.ts → f-selection-change-event.d.ts} +1 -1
  110. package/f-draggable/single-select/index.d.ts +1 -1
  111. package/f-flow/f-flow.component.d.ts +3 -3
  112. package/f-flow/index.d.ts +0 -1
  113. package/f-flow.module.d.ts +3 -3
  114. package/{f-draggable/components/f-line-alignment → f-line-alignment}/f-line-alignment-base.d.ts +1 -1
  115. package/{f-draggable/components/f-line-alignment → f-line-alignment}/f-line-alignment.component.d.ts +4 -4
  116. package/f-mediator/f-flow-mediator.d.ts +12 -0
  117. package/f-mediator/f-handler-register.d.ts +5 -0
  118. package/f-mediator/index.d.ts +2 -0
  119. package/{f-draggable/components/f-selection-area → f-selection-area}/f-selection-area.component.d.ts +1 -1
  120. package/fesm2022/foblex-flow.mjs +1089 -1127
  121. package/fesm2022/foblex-flow.mjs.map +1 -1
  122. package/package.json +2 -2
  123. package/public-api.d.ts +5 -2
  124. package/common-behaviours/change-position.d.ts +0 -10
  125. package/common-behaviours/change-zoom/change-zoom.d.ts +0 -6
  126. package/common-behaviours/change-zoom/i-can-change-zoom.d.ts +0 -6
  127. package/common-behaviours/change-zoom/index.d.ts +0 -2
  128. package/common-behaviours/constructor.d.ts +0 -2
  129. package/common-behaviours/fit-to-parent/fit-to-parent.d.ts +0 -6
  130. package/common-behaviours/fit-to-parent/i-can-fit-to-parent.d.ts +0 -4
  131. package/common-behaviours/fit-to-parent/index.d.ts +0 -2
  132. package/common-behaviours/i-transformable.d.ts +0 -4
  133. package/common-behaviours/index.d.ts +0 -6
  134. package/common-behaviours/one-to-one-centering/i-can-one-to-one-centering.d.ts +0 -4
  135. package/common-behaviours/one-to-one-centering/index.d.ts +0 -2
  136. package/common-behaviours/one-to-one-centering/one-to-one-centering.d.ts +0 -6
  137. package/domain/get-output-rect-in-flow.handler.d.ts +0 -19
  138. package/esm2022/common-behaviours/change-position.mjs +0 -15
  139. package/esm2022/common-behaviours/change-zoom/change-zoom.mjs +0 -25
  140. package/esm2022/common-behaviours/change-zoom/i-can-change-zoom.mjs +0 -2
  141. package/esm2022/common-behaviours/change-zoom/index.mjs +0 -3
  142. package/esm2022/common-behaviours/constructor.mjs +0 -2
  143. package/esm2022/common-behaviours/fit-to-parent/fit-to-parent.mjs +0 -27
  144. package/esm2022/common-behaviours/fit-to-parent/i-can-fit-to-parent.mjs +0 -2
  145. package/esm2022/common-behaviours/fit-to-parent/index.mjs +0 -3
  146. package/esm2022/common-behaviours/i-transformable.mjs +0 -2
  147. package/esm2022/common-behaviours/index.mjs +0 -7
  148. package/esm2022/common-behaviours/one-to-one-centering/i-can-one-to-one-centering.mjs +0 -2
  149. package/esm2022/common-behaviours/one-to-one-centering/index.mjs +0 -3
  150. package/esm2022/common-behaviours/one-to-one-centering/one-to-one-centering.mjs +0 -24
  151. package/esm2022/domain/get-output-rect-in-flow.handler.mjs +0 -25
  152. package/esm2022/f-draggable/components/f-external-item/f-external-item-base.mjs +0 -11
  153. package/esm2022/f-draggable/components/f-external-item/f-external-item.directive.mjs +0 -44
  154. package/esm2022/f-draggable/components/f-external-item/f-external-item.service.mjs +0 -28
  155. package/esm2022/f-draggable/components/f-external-item/index.mjs +0 -5
  156. package/esm2022/f-draggable/components/f-external-item/is-external-item.mjs +0 -7
  157. package/esm2022/f-draggable/components/f-line-alignment/domain/i-line-alignment-rect.mjs +0 -2
  158. package/esm2022/f-draggable/components/f-line-alignment/domain/i-line-alignment-result.mjs +0 -2
  159. package/esm2022/f-draggable/components/f-line-alignment/domain/i-nearest-coordinate-result.mjs +0 -2
  160. package/esm2022/f-draggable/components/f-line-alignment/domain/index.mjs +0 -7
  161. package/esm2022/f-draggable/components/f-line-alignment/domain/line-element.mjs +0 -23
  162. package/esm2022/f-draggable/components/f-line-alignment/domain/line-service.mjs +0 -33
  163. package/esm2022/f-draggable/components/f-line-alignment/domain/nearest-coordinate.mjs +0 -100
  164. package/esm2022/f-draggable/components/f-line-alignment/f-line-alignment-base.mjs +0 -11
  165. package/esm2022/f-draggable/components/f-line-alignment/f-line-alignment.component.mjs +0 -90
  166. package/esm2022/f-draggable/components/f-line-alignment/index.mjs +0 -4
  167. package/esm2022/f-draggable/components/f-selection-area/domain/i-selection-area-rect.mjs +0 -2
  168. package/esm2022/f-draggable/components/f-selection-area/domain/index.mjs +0 -2
  169. package/esm2022/f-draggable/components/f-selection-area/f-selection-area-base.mjs +0 -11
  170. package/esm2022/f-draggable/components/f-selection-area/f-selection-area.component.mjs +0 -44
  171. package/esm2022/f-draggable/components/f-selection-area/index.mjs +0 -4
  172. package/esm2022/f-draggable/components/index.mjs +0 -4
  173. package/esm2022/f-draggable/connections/create-connection/create-connection.event.mjs +0 -7
  174. package/esm2022/f-draggable/connections/reassign-connection/reassign-connection.event.mjs +0 -9
  175. package/esm2022/f-draggable/external-item/create-node.event.mjs +0 -7
  176. package/esm2022/f-draggable/public-api.mjs +0 -14
  177. package/esm2022/f-draggable/single-select/selection-change-event.mjs +0 -7
  178. package/esm2022/f-flow/domain/redraw-connections/redraw-connections.handler.mjs +0 -46
  179. package/f-draggable/components/index.d.ts +0 -3
  180. package/f-draggable/connections/create-connection/create-connection.event.d.ts +0 -5
  181. package/f-draggable/connections/reassign-connection/reassign-connection.event.d.ts +0 -7
  182. /package/{f-draggable/components/f-external-item → f-external-item}/f-external-item-base.d.ts +0 -0
  183. /package/{f-draggable/components/f-external-item → f-external-item}/f-external-item.directive.d.ts +0 -0
  184. /package/{f-draggable/components/f-external-item → f-external-item}/f-external-item.service.d.ts +0 -0
  185. /package/{f-draggable/components/f-external-item → f-external-item}/index.d.ts +0 -0
  186. /package/{f-draggable/components/f-external-item → f-external-item}/is-external-item.d.ts +0 -0
  187. /package/{f-draggable/components/f-line-alignment → f-line-alignment}/domain/i-line-alignment-rect.d.ts +0 -0
  188. /package/{f-draggable/components/f-line-alignment → f-line-alignment}/domain/i-line-alignment-result.d.ts +0 -0
  189. /package/{f-draggable/components/f-line-alignment → f-line-alignment}/domain/i-nearest-coordinate-result.d.ts +0 -0
  190. /package/{f-draggable/components/f-line-alignment → f-line-alignment}/domain/index.d.ts +0 -0
  191. /package/{f-draggable/components/f-line-alignment → f-line-alignment}/domain/line-element.d.ts +0 -0
  192. /package/{f-draggable/components/f-line-alignment → f-line-alignment}/domain/line-service.d.ts +0 -0
  193. /package/{f-draggable/components/f-line-alignment → f-line-alignment}/domain/nearest-coordinate.d.ts +0 -0
  194. /package/{f-draggable/components/f-line-alignment → f-line-alignment}/index.d.ts +0 -0
  195. /package/{f-draggable/components/f-selection-area → f-selection-area}/domain/i-selection-area-rect.d.ts +0 -0
  196. /package/{f-draggable/components/f-selection-area → f-selection-area}/domain/index.d.ts +0 -0
  197. /package/{f-draggable/components/f-selection-area → f-selection-area}/f-selection-area-base.d.ts +0 -0
  198. /package/{f-draggable/components/f-selection-area → f-selection-area}/index.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"foblex-flow.mjs","sources":["../../../projects/f-flow/src/common-behaviours/change-zoom/change-zoom.ts","../../../projects/f-flow/src/common-behaviours/fit-to-parent/fit-to-parent.ts","../../../projects/f-flow/src/common-behaviours/one-to-one-centering/one-to-one-centering.ts","../../../projects/f-flow/src/common-behaviours/change-position.ts","../../../projects/f-flow/src/f-backgroud/domain/i-f-background-pattern.ts","../../../projects/f-flow/src/f-backgroud/f-cell-pattern/f-cell-pattern.component.ts","../../../projects/f-flow/src/f-backgroud/f-cell-pattern/f-cell-pattern.component.html","../../../projects/f-flow/src/f-backgroud/f-background-base.ts","../../../projects/f-flow/src/f-components-store.ts","../../../projects/f-flow/src/f-backgroud/f-background.component.ts","../../../projects/f-flow/src/f-backgroud/f-background.component.html","../../../projects/f-flow/src/f-canvas/domain/f-canvas-change.event.ts","../../../projects/f-flow/src/f-connection/common/domain/calculate-center-between-points/calculate-center-between-points.handler.ts","../../../projects/f-flow/src/f-connection/common/domain/calculate-center-between-points/calculate-center-between-points-request.ts","../../../projects/f-flow/src/f-connection/common/domain/calculate-connection-center/calculate-connection-center.handler.ts","../../../projects/f-flow/src/f-connection/common/domain/calculate-connection-center/calculate-connection-center-request.ts","../../../projects/f-flow/src/f-connection/common/domain/f-path-builder-base.ts","../../../projects/f-flow/src/f-connectors/e-f-connectable-side.ts","../../../projects/f-flow/src/f-connectors/domain/calculate-connector-connectable-side/calculate-connector-connectable-side.handler.ts","../../../projects/f-flow/src/f-connectors/domain/calculate-connector-connectable-side/calculate-connector-connectable-side-request.ts","../../../projects/f-flow/src/f-connectors/f-connector-base.ts","../../../projects/f-flow/src/f-connectors/f-node-input/f-node-input-base.ts","../../../projects/f-flow/src/f-connectors/f-node-input/is-node-input.ts","../../../projects/f-flow/src/f-connectors/f-node-input/f-node-input.directive.ts","../../../projects/f-flow/src/f-connectors/f-node-outlet/f-node-outlet-base.ts","../../../projects/f-flow/src/f-connectors/f-node-outlet/is-node-outlet.ts","../../../projects/f-flow/src/f-connectors/f-node-outlet/f-node-outlet.directive.ts","../../../projects/f-flow/src/f-connectors/f-node-output/f-node-output-base.ts","../../../projects/f-flow/src/f-connectors/f-node-output/is-node-output.ts","../../../projects/f-flow/src/f-connectors/f-node-output/f-node-output.directive.ts","../../../projects/f-flow/src/f-connection/common/domain/f-bezier.path-builder.ts","../../../projects/f-flow/src/f-connection/common/e-f-connection-type.ts","../../../projects/f-flow/src/f-connection/common/domain/f-straight.path-builder.ts","../../../projects/f-flow/src/f-connection/common/domain/f-segment.path-builder.ts","../../../projects/f-flow/src/f-connection/common/domain/f-path-builder-selector.ts","../../../projects/f-flow/src/f-connection/common/f-connection-identifiers.ts","../../../projects/f-flow/src/f-connection/common/f-connection.injection-token.ts","../../../projects/f-flow/src/f-connection/common/f-connection-text/f-connection-text-path.directive.ts","../../../projects/f-flow/src/f-connection/common/f-connection-text/i-connection-text.ts","../../../projects/f-flow/src/f-connection/common/f-connection-text/f-connection-text.component.ts","../../../projects/f-flow/src/f-connection/common/f-connection-text/f-connection-text.component.html","../../../projects/f-flow/src/f-connection/common/f-drag-handle/f-connection-drag-handle.component.ts","../../../projects/f-flow/src/f-connection/common/f-gradient/i-connection-gradient.ts","../../../projects/f-flow/src/f-connection/common/f-gradient/f-connection-gradient.component.ts","../../../projects/f-flow/src/f-connection/common/f-gradient/f-connection-gradient.component.html","../../../projects/f-flow/src/f-connection/common/f-path/i-connection-path.ts","../../../projects/f-flow/src/get-flow-uid.ts","../../../projects/f-flow/src/f-connection/f-marker/e-f-marker-type.ts","../../../projects/f-flow/src/f-connection/f-marker/f-marker-base.ts","../../../projects/f-flow/src/f-connection/f-marker/f-marker.directive.ts","../../../projects/f-flow/src/f-connection/common/f-path/f-connection-path.component.ts","../../../projects/f-flow/src/f-connection/common/f-selection/f-connection-selection.component.ts","../../../projects/f-flow/src/f-connection/common/mixins/change-connection-selection.mixin.ts","../../../projects/f-flow/src/f-connection/common/mixins/change-connection-visibility.mixin.ts","../../../projects/f-flow/src/f-connection/common/f-connection-base.ts","../../../projects/f-flow/src/f-connection/common/e-f-connection-behavior.ts","../../../projects/f-flow/src/f-connection/common/cast-to-connection-behavior.ts","../../../projects/f-flow/src/f-connection/common/cast-to-connection-type.ts","../../../projects/f-flow/src/f-connection/f-connection-for-create/f-connection-for-create.component.ts","../../../projects/f-flow/src/f-connection/f-connection-for-create/f-connection-for-create.component.html","../../../projects/f-flow/src/f-connection/f-connection/f-connection.component.ts","../../../projects/f-flow/src/f-connection/f-connection/f-connection.component.html","../../../projects/f-flow/src/f-connection/f-connection-center/f-connection-center.directive.ts","../../../projects/f-flow/src/f-node/f-node-base.ts","../../../projects/f-flow/src/f-node/f-drag-handle/f-drag-handle.directive.ts","../../../projects/f-flow/src/f-node/f-drag-handle/is-drag-handle.ts","../../../projects/f-flow/src/f-node/f-resize-observer.ts","../../../projects/f-flow/src/f-node/f-node.directive.ts","../../../projects/f-flow/src/f-node/is-node.ts","../../../projects/f-flow/src/f-canvas/f-zoom/f-zoom-base.ts","../../../projects/f-flow/src/f-canvas/f-zoom/f-zoom.directive.ts","../../../projects/f-flow/src/f-canvas/f-canvas-base.ts","../../../projects/f-flow/src/domain/get-connection-vector/get-connection-vector.handler.ts","../../../projects/f-flow/src/domain/get-connection-vector/get-connection-vector.request.ts","../../../projects/f-flow/src/domain/errors.ts","../../../projects/f-flow/src/domain/get-all-nodes-rect.handler.ts","../../../projects/f-flow/src/domain/get-connection.handler.ts","../../../projects/f-flow/src/domain/get-element-rect-in-flow.handler.ts","../../../projects/f-flow/src/domain/get-incoming-connections.handler.ts","../../../projects/f-flow/src/domain/get-outgoing-connections.handler.ts","../../../projects/f-flow/src/domain/get-input-rect-in-flow.handler.ts","../../../projects/f-flow/src/domain/get-output-rect-in-flow.handler.ts","../../../projects/f-flow/src/domain/update-node-layer.handler.ts","../../../projects/f-flow/src/f-draggable/f-draggable-data-context.ts","../../../projects/f-flow/src/domain/select-all.handler.ts","../../../projects/f-flow/src/domain/update-connection-layer.handler.ts","../../../projects/f-flow/src/domain/providers.ts","../../../projects/f-flow/src/f-canvas/f-canvas.component.ts","../../../projects/f-flow/src/f-canvas/f-canvas.component.html","../../../projects/f-flow/src/f-draggable/e-f-draggable-type.ts","../../../projects/f-flow/src/f-draggable/canvas/canvas.drag-handler.ts","../../../projects/f-flow/src/f-draggable/canvas/canvas.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/canvas/canvas.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/canvas/providers.ts","../../../projects/f-flow/src/f-draggable/components/f-external-item/f-external-item-base.ts","../../../projects/f-flow/src/f-draggable/components/f-external-item/is-external-item.ts","../../../projects/f-flow/src/f-draggable/components/f-external-item/f-external-item.service.ts","../../../projects/f-flow/src/f-draggable/components/f-external-item/f-external-item.directive.ts","../../../projects/f-flow/src/f-draggable/components/f-line-alignment/domain/line-element.ts","../../../projects/f-flow/src/f-draggable/components/f-line-alignment/domain/line-service.ts","../../../projects/f-flow/src/f-draggable/components/f-line-alignment/domain/nearest-coordinate.ts","../../../projects/f-flow/src/f-draggable/components/f-line-alignment/f-line-alignment-base.ts","../../../projects/f-flow/src/f-draggable/components/f-line-alignment/f-line-alignment.component.ts","../../../projects/f-flow/src/f-draggable/components/f-selection-area/f-selection-area-base.ts","../../../projects/f-flow/src/f-draggable/components/f-selection-area/f-selection-area.component.ts","../../../projects/f-flow/src/f-draggable/connections/create-connection/find-first-can-be-connected-output-by-outlet/find-first-can-be-connected-output-by-outlet.handler.ts","../../../projects/f-flow/src/f-draggable/connections/create-connection/create-connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/connections/create-connection/create-connection.event.ts","../../../projects/f-flow/src/f-draggable/connections/find-inputs-under-pointer/first-not-connected-input-of-node-under-pointer/first-not-connected-input-of-node-under-pointer.handler.ts","../../../projects/f-flow/src/f-draggable/connections/find-inputs-under-pointer/inputs-under-pointer/inputs-under-pointer.handler.ts","../../../projects/f-flow/src/f-draggable/connections/find-inputs-under-pointer/find-inputs-under-pointer.request.ts","../../../projects/f-flow/src/f-draggable/connections/find-inputs-under-pointer/find-inputs-under-pointer.handler.ts","../../../projects/f-flow/src/f-draggable/connections/create-connection/create-connection.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/connections/create-connection/create-connection.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/connections/reassign-connection/reassign-connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/connections/reassign-connection/reassign-connection.event.ts","../../../projects/f-flow/src/f-draggable/connections/reassign-connection/reassign-connection.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/connections/reassign-connection/reassign-connection.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/connections/providers.ts","../../../projects/f-flow/src/f-draggable/external-item/create-node.event.ts","../../../projects/f-flow/src/f-draggable/external-item/external-item.drag-handler.ts","../../../projects/f-flow/src/f-draggable/external-item/external-item.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/external-item/external-item.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/external-item/providers.ts","../../../projects/f-flow/src/f-draggable/node/domain/is-connection-under-node/is-connection-under-node.handler.ts","../../../projects/f-flow/src/f-draggable/node/connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/node/connection-source.drag-handler.ts","../../../projects/f-flow/src/f-draggable/node/connection-target.drag-handler.ts","../../../projects/f-flow/src/f-draggable/node/node.drag-handler.ts","../../../projects/f-flow/src/f-draggable/node/node.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/node/node.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/node/providers.ts","../../../projects/f-flow/src/f-draggable/selection-area/get-can-be-selected-items/get-can-be-selected-items.handler.ts","../../../projects/f-flow/src/f-draggable/selection-area/selection-area.drag-handle.ts","../../../projects/f-flow/src/f-draggable/selection-area/selection-area.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/selection-area/selection-area.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/selection-area/providers.ts","../../../projects/f-flow/src/f-draggable/single-select/single-select.on-pointer-down.ts","../../../projects/f-flow/src/f-draggable/single-select/providers.ts","../../../projects/f-flow/src/f-draggable/single-select/selection-change-event.ts","../../../projects/f-flow/src/f-draggable/i-drag-and-drop-base.ts","../../../projects/f-flow/src/f-draggable/f-draggable-base.ts","../../../projects/f-flow/src/f-draggable/f-draggable.directive.ts","../../../projects/f-flow/src/f-flow/domain/redraw-connections/redraw-connections.handler.ts","../../../projects/f-flow/src/f-flow/f-flow-base.ts","../../../projects/f-flow/src/f-flow/f-flow.component.ts","../../../projects/f-flow/src/f-flow/f-flow.component.html","../../../projects/f-flow/src/f-flow.module.ts","../../../projects/f-flow/src/foblex-flow.ts"],"sourcesContent":["import { AbstractConstructor, Constructor } from '../constructor';\nimport { ICanChangeZoom } from './i-can-change-zoom';\nimport { IPoint, PointExtensions } from '@foblex/core';\nimport { ITransformable } from '../i-transformable';\n\ntype CanChangeZoomConstructor = Constructor<ICanChangeZoom> & AbstractConstructor<ICanChangeZoom>;\n\nexport function mixinChangeZoom<T extends AbstractConstructor<ITransformable>>(base: T): CanChangeZoomConstructor & T;\nexport function mixinChangeZoom<T extends Constructor<ITransformable>>(base: T): CanChangeZoomConstructor & T {\n return class extends base {\n\n public setZoom(scaleValue: number, toPosition: IPoint): void {\n if (scaleValue !== this.transform.scale) {\n\n const summaryPosition = PointExtensions.sum(this.transform.scaledPosition, this.transform.position);\n\n const newX = toPosition.x - (toPosition.x - summaryPosition.x) * scaleValue / this.transform.scale;\n const newY = toPosition.y - (toPosition.y - summaryPosition.y) * scaleValue / this.transform.scale;\n\n this.transform.scale = scaleValue;\n this.transform.scaledPosition = PointExtensions.sub(PointExtensions.initialize(newX, newY), this.transform.position);\n }\n }\n\n public setScalePosition(value: IPoint): void {\n this.transform.scaledPosition = value;\n }\n\n public resetZoom(): void {\n this.transform.scale = 1;\n this.transform.scaledPosition = PointExtensions.initialize();\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { AbstractConstructor, Constructor } from '../constructor';\nimport { ICanFitToParent } from './i-can-fit-to-parent';\nimport { IPoint, IRect, PointExtensions } from '@foblex/core';\nimport { ITransformable } from '../i-transformable';\n\ntype CanFitToParentConstructor = Constructor<ICanFitToParent> & AbstractConstructor<ICanFitToParent>;\n\nexport function mixinFitToParent<T extends AbstractConstructor<ITransformable>>(base: T): CanFitToParentConstructor & T;\nexport function mixinFitToParent<T extends Constructor<ITransformable>>(base: T): CanFitToParentConstructor & T {\n return class extends base {\n\n public fitToParent(rect: IRect, parentRect: IRect, points: IPoint[]): void {\n this.transform.scaledPosition = PointExtensions.initialize();\n this.transform.position = this.getZeroPositionWithoutScale(points);\n const itemsContainerWidth = rect.width / this.transform.scale;\n const itemsContainerHeight = rect.height / this.transform.scale;\n if (\n (itemsContainerWidth > parentRect.width || itemsContainerHeight > parentRect.height) ||\n itemsContainerWidth < parentRect.width && itemsContainerHeight < parentRect.height\n ) {\n this.transform.scale = Math.min(parentRect.width / itemsContainerWidth, parentRect.height / itemsContainerHeight);\n }\n\n const newX = (parentRect.width - itemsContainerWidth * this.transform.scale) / 2 - this.transform.position.x * this.transform.scale;\n const newY = (parentRect.height - itemsContainerHeight * this.transform.scale) / 2 - this.transform.position.y * this.transform.scale;\n\n this.transform.position = PointExtensions.initialize(newX, newY);\n }\n\n private getZeroPositionWithoutScale(points: IPoint[]): IPoint {\n const xPoint = points.length ? Math.min(...points.map((point) => point.x)) : 0;\n const yPoint = points.length ? Math.min(...points.map((point) => point.y)) : 0;\n return PointExtensions.initialize(xPoint, yPoint)\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { AbstractConstructor, Constructor } from '../constructor';\nimport { ICanOneToOneCentering } from './i-can-one-to-one-centering';\nimport { IPoint, IRect, PointExtensions } from '@foblex/core';\nimport { ITransformable } from '../i-transformable';\n\ntype CanOneToOneCenteringConstructor = Constructor<ICanOneToOneCentering> & AbstractConstructor<ICanOneToOneCentering>;\n\nexport function mixinOneToOneCentering<T extends AbstractConstructor<ITransformable>>(base: T): CanOneToOneCenteringConstructor & T;\nexport function mixinOneToOneCentering<T extends Constructor<ITransformable>>(base: T): CanOneToOneCenteringConstructor & T {\n return class extends base {\n\n public oneToOneCentering(rect: IRect, parentRect: IRect, points: IPoint[]): void {\n this.transform.scaledPosition = PointExtensions.initialize();\n this.transform.position = this.getZeroPositionWithoutScale(points);\n const itemsContainerWidth = rect.width / this.transform.scale;\n const itemsContainerHeight = rect.height / this.transform.scale;\n this.transform.scale = 1;\n\n const newX = (parentRect.width - itemsContainerWidth * this.transform.scale) / 2 - this.transform.position.x * this.transform.scale;\n const newY = (parentRect.height - itemsContainerHeight * this.transform.scale) / 2 - this.transform.position.y * this.transform.scale;\n\n this.transform.position = PointExtensions.initialize(newX, newY);\n }\n\n private getZeroPositionWithoutScale(points: IPoint[]): IPoint {\n const xPoint = points.length ? Math.min(...points.map((point) => point.x)) : 0;\n const yPoint = points.length ? Math.min(...points.map((point) => point.y)) : 0;\n return PointExtensions.initialize(xPoint, yPoint)\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { AbstractConstructor, Constructor } from './constructor';\nimport { IPoint, PointExtensions } from '@foblex/core';\nimport { ITransformable } from './i-transformable';\n\nexport interface ICanChangePosition {\n\n setPosition(position: IPoint): void;\n\n getPosition(): IPoint;\n}\n\ntype CanChangePositionConstructor = Constructor<ICanChangePosition> & AbstractConstructor<ICanChangePosition>;\n\nexport function mixinChangePosition<T extends AbstractConstructor<ITransformable>>(base: T): CanChangePositionConstructor & T;\nexport function mixinChangePosition<T extends Constructor<ITransformable>>(base: T): CanChangePositionConstructor & T {\n return class extends base {\n\n public getPosition(): IPoint {\n return this.transform.position;\n }\n\n public setPosition(position: IPoint): void {\n this.transform.position = PointExtensions.copy(position);\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { ITransformModel } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\n\nexport const F_BACKGROUND_PATTERN = new InjectionToken<IFBackgroundPattern>('F_BACKGROUND_PATTERN');\n\nexport interface IFBackgroundPattern {\n\n setTransform(transform: ITransformModel): void;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef, Input,\n OnInit\n} from \"@angular/core\";\nimport { DomElementExtensions, ITransformModel, TransformModelExtensions } from '@foblex/core';\nimport { F_BACKGROUND_PATTERN, IFBackgroundPattern } from '../domain';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"f-cell-pattern\",\n standalone: true,\n templateUrl: \"./f-cell-pattern.component.html\",\n host: {\n '[attr.id]': 'id'\n },\n providers: [\n { provide: F_BACKGROUND_PATTERN, useExisting: FCellPatternComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FCellPatternComponent implements OnInit, IFBackgroundPattern {\n\n @Input()\n public id: string = `f-pattern-${ uniqueId++ }`;\n\n @Input()\n public verticalLineColor: string = 'rgba(0,0,0,0.1)';\n\n @Input()\n public horizontalLineColor: string = 'rgba(0,0,0,0.1)';\n\n public get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n private transform: ITransformModel = TransformModelExtensions.default();\n\n public x: number = 0;\n\n public y: number = 0;\n\n private defaultCellSize: number = 20;\n\n public cellSize = this.defaultCellSize;\n\n private pattern!: SVGPatternElement;\n private horizontalLine!: SVGLineElement;\n private verticalLine!: SVGLineElement;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n }\n\n public ngOnInit(): void {\n this.createPatternDom();\n this.redraw();\n }\n\n private createPatternDom(): void {\n this.pattern = DomElementExtensions.createSvgElement('pattern');\n this.pattern.setAttribute('patternUnits', 'userSpaceOnUse');\n this.hostElement.appendChild(this.pattern);\n this.horizontalLine = DomElementExtensions.createSvgElement('line');\n this.horizontalLine.setAttribute('stroke', this.horizontalLineColor);\n this.pattern.appendChild(this.horizontalLine);\n this.verticalLine = DomElementExtensions.createSvgElement('line');\n this.verticalLine.setAttribute('stroke', this.verticalLineColor);\n this.pattern.appendChild(this.verticalLine);\n }\n\n private calculatePattern(): void {\n this.x = this.transform.position.x + this.transform.scaledPosition.x;\n this.y = this.transform.position.y + this.transform.scaledPosition.y;\n this.cellSize = this.defaultCellSize * this.transform.scale;\n }\n\n private redraw(): void {\n this.calculatePattern();\n this.redrawPattern();\n this.redrawHorizontalLine();\n this.redrawVerticalLine();\n this.changeDetectorRef.detectChanges();\n }\n\n private redrawPattern(): void {\n this.pattern.setAttribute('x', `${ this.x }`);\n this.pattern.setAttribute('y', `${ this.y }`);\n this.pattern.setAttribute('width', `${ this.cellSize }`);\n this.pattern.setAttribute('height', `${ this.cellSize }`);\n }\n\n private redrawHorizontalLine(): void {\n this.horizontalLine.setAttribute('x1', `0`);\n this.horizontalLine.setAttribute('x2', `${ this.cellSize }`);\n this.horizontalLine.setAttribute('y1', `${ this.cellSize }`);\n this.horizontalLine.setAttribute('y2', `${ this.cellSize }`);\n }\n\n private redrawVerticalLine(): void {\n this.verticalLine.setAttribute('x1', `${ this.cellSize }`);\n this.verticalLine.setAttribute('x2', `${ this.cellSize }`);\n this.verticalLine.setAttribute('y1', `0`);\n this.verticalLine.setAttribute('y2', `${ this.cellSize }`);\n }\n\n public setTransform(transform: ITransformModel): void {\n this.transform = transform;\n this.redraw();\n }\n}\n","<ng-container></ng-container>\n","import { Directive, InjectionToken } from '@angular/core';\nimport { IHasHostElement, ITransformModel } from '@foblex/core';\n\nexport const F_BACKGROUND = new InjectionToken<FBackgroundBase>('F_BACKGROUND');\n\n@Directive()\nexport abstract class FBackgroundBase implements IHasHostElement {\n\n public abstract hostElement: HTMLElement;\n\n public abstract isBackgroundElement(element: HTMLElement | SVGElement): boolean;\n\n public abstract setTransform(transform: ITransformModel): void;\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ITransformModel } from '@foblex/core';\nimport { FConnectionBase } from './f-connection';\nimport { FFlowBase } from './f-flow';\nimport { FCanvasBase } from './f-canvas';\nimport { FBackgroundBase } from './f-backgroud';\nimport { FNodeBase } from './f-node';\nimport { FConnectorBase, FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from './f-connectors';\nimport { FDraggableBase } from './f-draggable/f-draggable-base';\n\n@Injectable()\nexport class FComponentsStore {\n\n public readonly changes: Subject<void> = new Subject<void>();\n\n public get flowHost(): HTMLElement {\n return this.fFlow?.hostElement!;\n }\n\n public get transform(): ITransformModel {\n return this.fCanvas?.transform!;\n }\n\n public fFlow: FFlowBase | undefined;\n\n public fCanvas: FCanvasBase | undefined;\n\n public fBackground: FBackgroundBase | undefined;\n\n public fNodes: FNodeBase[] = [];\n\n public fConnections: FConnectionBase[] = [];\n\n public fTempConnection: FConnectionBase | undefined;\n\n public fOutputs: FConnectorBase[] = [];\n\n public fInputs: FConnectorBase[] = [];\n\n public fOutlets: FConnectorBase[] = [];\n\n public fDraggable: FDraggableBase | undefined;\n\n public addOutput(output: FNodeOutputBase): void {\n this.fOutputs.push(output);\n this.changes.next();\n }\n\n public removeOutput(output: FNodeOutputBase): void {\n this.fOutputs = this.fOutputs.filter(o => o !== output);\n this.changes.next();\n }\n\n public addInput(input: FNodeInputBase): void {\n this.fInputs.push(input);\n this.changes.next();\n }\n\n public removeInput(input: FNodeInputBase): void {\n this.fInputs = this.fInputs.filter(i => i !== input);\n this.changes.next();\n }\n\n public addOutlet(outlet: FNodeOutletBase): void {\n this.fOutlets.push(outlet);\n this.changes.next();\n }\n\n public removeOutlet(outlet: FNodeOutletBase): void {\n this.fOutlets = this.fOutlets.filter(o => o !== outlet);\n this.changes.next();\n }\n\n public addNode(node: FNodeBase): void {\n this.fNodes.push(node);\n this.changes.next();\n }\n\n public findNode(element: HTMLElement | SVGElement): FNodeBase | undefined {\n return this.fNodes.find(n => n.isContains(element));\n }\n\n public removeNode(node: FNodeBase): void {\n this.fNodes = this.fNodes.filter(n => n !== node);\n this.changes.next();\n }\n\n public addConnection(connection: FConnectionBase): void {\n this.fConnections.push(connection);\n this.changes.next();\n }\n\n public removeConnection(connection: FConnectionBase): void {\n this.fConnections = this.fConnections.filter(c => c !== connection);\n this.changes.next();\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component, ContentChild,\n ElementRef, OnDestroy,\n OnInit\n} from \"@angular/core\";\nimport { F_BACKGROUND, FBackgroundBase } from './f-background-base';\nimport { DomElementExtensions, ITransformModel, TransformModelExtensions } from '@foblex/core';\nimport { F_BACKGROUND_PATTERN } from './domain';\nimport { FComponentsStore } from '../f-components-store';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"f-background\",\n templateUrl: \"./f-background.component.html\",\n styleUrls: [ \"./f-background.component.scss\" ],\n host: {\n 'class': 'f-component f-background'\n },\n providers: [ { provide: F_BACKGROUND, useExisting: FBackgroundComponent } ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FBackgroundComponent extends FBackgroundBase implements OnInit, AfterContentInit, OnDestroy {\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n @ContentChild(F_BACKGROUND_PATTERN, { static: true })\n public fBackgroundPattern: FBackgroundBase | undefined;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fComponentsStore: FComponentsStore\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.fComponentsStore.fBackground = this;\n }\n\n public ngAfterContentInit(): void {\n const children = this.fBackgroundPattern?.hostElement.getElementsByTagName('pattern') || [];\n const pattern = children.length ? children[ 0 ] : undefined;\n if (pattern) {\n const defs = DomElementExtensions.createSvgElement('defs');\n pattern.id = 'f-background-marker-' + uniqueId++;\n this.fBackgroundPattern?.hostElement.remove();\n defs.appendChild(pattern);\n this.hostElement?.firstChild?.appendChild(defs);\n const rect = DomElementExtensions.createSvgElement('rect');\n rect.setAttribute('fill', 'url(#' + pattern.id + ')');\n rect.setAttribute('width', '100%');\n rect.setAttribute('height', '100%');\n this.hostElement.firstChild?.appendChild(rect);\n const transform = this.fComponentsStore.fCanvas?.transform || TransformModelExtensions.default();\n this.fBackgroundPattern?.setTransform(transform);\n }\n }\n\n public override isBackgroundElement(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n\n public setTransform(transform: ITransformModel): void {\n this.fBackgroundPattern?.setTransform(transform);\n }\n\n public ngOnDestroy() {\n this.fComponentsStore.fBackground = undefined;\n }\n}\n","<svg>\n <ng-content></ng-content>\n\n<!-- <rect width=\"100%\" height=\"100%\" fill=\"url(#background-pattern)\"></rect>-->\n</svg>\n","import { IPoint } from '@foblex/core';\n\nexport class FCanvasChangeEvent {\n constructor(\n public readonly position: IPoint,\n public readonly scale: number,\n ) {\n }\n}\n","import { IHandler, IPoint, PointExtensions } from '@foblex/core';\nimport { CalculateCenterBetweenPointsRequest } from './calculate-center-between-points-request';\n\nexport class CalculateCenterBetweenPointsHandler\n implements IHandler<CalculateCenterBetweenPointsRequest, IPoint> {\n\n public handle(request: CalculateCenterBetweenPointsRequest): IPoint {\n const { source, target } = request;\n\n const offsetX = Math.abs(target.x - source.x) / 2;\n const centerX = (target.x < source.x) ? target.x + offsetX : target.x - offsetX;\n\n const offsetY = Math.abs(target.y - source.y) / 2;\n const centerY = (target.y < source.y) ? target.y + offsetY : target.y - offsetY;\n\n return PointExtensions.initialize(centerX, centerY);\n }\n}\n","import { IPoint } from '@foblex/core';\n\nexport class CalculateCenterBetweenPointsRequest {\n\n constructor(\n public source: IPoint,\n public target: IPoint,\n ) {\n }\n}\n","import { IHandler, IPoint } from '@foblex/core';\nimport { CalculateConnectionCenterRequest } from './calculate-connection-center-request';\n\nexport class CalculateConnectionCenterHandler\n implements IHandler<CalculateConnectionCenterRequest, IPoint> {\n\n public handle(request: CalculateConnectionCenterRequest): IPoint {\n\n const { points } = request;\n let totalDistance = 0;\n let distances: number[] = [];\n\n for (let i = 0; i < points.length - 1; i++) {\n const distance = this.calculateDistance(points[ i ], points[ i + 1 ]);\n distances.push(distance);\n totalDistance += distance;\n }\n\n let accumulatedDistance = 0;\n let centerIndex = 0;\n const halfTotalDistance = totalDistance / 2;\n for (let i = 0; i < distances.length; i++) {\n accumulatedDistance += distances[ i ];\n if (accumulatedDistance >= halfTotalDistance) {\n centerIndex = i;\n break;\n }\n }\n\n const remainingDistanceToCenter = halfTotalDistance - (accumulatedDistance - distances[ centerIndex ]);\n\n const result = this.findPointAtDistance(points[ centerIndex ], points[ centerIndex + 1 ], remainingDistanceToCenter);\n\n return result;\n }\n\n private calculateDistance(pointA: IPoint, pointB: IPoint): number {\n return Math.sqrt(Math.pow(pointB.x - pointA.x, 2) + Math.pow(pointB.y - pointA.y, 2));\n }\n\n private findPointAtDistance(startPoint: IPoint, endPoint: IPoint, distance: number): IPoint {\n const totalDistance = this.calculateDistance(startPoint, endPoint);\n const ratio = distance / totalDistance;\n const x = (1 - ratio) * startPoint.x + ratio * endPoint.x;\n const y = (1 - ratio) * startPoint.y + ratio * endPoint.y;\n return { x, y };\n }\n}\n","import { IPoint } from '@foblex/core';\n\nexport class CalculateConnectionCenterRequest {\n\n constructor(\n public points: IPoint[],\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { IFPathBuilderResponse } from './i-f-path-builder-response';\nimport { IFPathBuilderRequest } from './i-f-path-builder-request';\n\nexport abstract class FPathBuilderBase implements IHandler<IFPathBuilderRequest, IFPathBuilderResponse> {\n\n public abstract handle(request: IFPathBuilderRequest): IFPathBuilderResponse;\n}\n","export enum EFConnectableSide {\n\n LEFT = 'left',\n\n RIGHT = 'right',\n\n TOP = 'top',\n\n BOTTOM = 'bottom',\n\n AUTO = 'auto',\n}\n","import { IHandler, RectExtensions } from '@foblex/core';\nimport { CalculateConnectorConnectableSideRequest } from './calculate-connector-connectable-side-request';\nimport { EFConnectableSide } from '../../e-f-connectable-side';\n\nexport class CalculateConnectorConnectableSideHandler\n implements IHandler<CalculateConnectorConnectableSideRequest, EFConnectableSide> {\n\n public handle(request: CalculateConnectorConnectableSideRequest): EFConnectableSide {\n let result: EFConnectableSide;\n\n if (request.fConnector._fConnectableSide === EFConnectableSide.AUTO) {\n result = this.getSideByDelta(request.fConnector.hostElement, request.fNodeHost);\n } else {\n result = request.fConnector._fConnectableSide;\n }\n return result;\n }\n\n private getSideByDelta(fConnectorHost: HTMLElement | SVGElement, fNodeHost: HTMLElement | SVGElement): EFConnectableSide {\n let result: EFConnectableSide;\n\n const childRect = RectExtensions.fromElement(fConnectorHost);\n const parentRect = fNodeHost.getBoundingClientRect();\n\n const deltaLeft = childRect.gravityCenter.x - parentRect.left;\n const deltaRight = parentRect.right - childRect.gravityCenter.x;\n const deltaTop = childRect.gravityCenter.y - parentRect.top;\n const deltaBottom = parentRect.bottom - childRect.gravityCenter.y;\n\n const minDelta = Math.min(deltaLeft, deltaRight, deltaTop, deltaBottom);\n\n if (minDelta === deltaLeft) {\n result = EFConnectableSide.LEFT;\n } else if (minDelta === deltaRight) {\n result = EFConnectableSide.RIGHT;\n } else if (minDelta === deltaTop) {\n result = EFConnectableSide.TOP;\n } else {\n result = EFConnectableSide.BOTTOM;\n }\n\n return result;\n }\n}\n","import { FConnectorBase } from '../../f-connector-base';\n\nexport class CalculateConnectorConnectableSideRequest {\n\n constructor(\n public fConnector: FConnectorBase,\n public fNodeHost: HTMLElement | SVGElement\n ) {\n }\n}\n","import { Subject } from 'rxjs';\nimport { IHasHostElement } from '@foblex/core';\nimport { EFConnectableSide } from './e-f-connectable-side';\nimport { IHasStateChanges } from '../i-has-state-changes';\n\nexport abstract class FConnectorBase implements IHasStateChanges, IHasHostElement {\n\n public abstract id: string;\n\n public abstract disabled: boolean;\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public abstract canBeConnected: boolean;\n\n public abstract isConnected: boolean;\n\n public fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n public _fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n\n public setConnected(isConnected: boolean): void {\n this.isConnected = isConnected;\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FConnectorBase } from '../f-connector-base';\n\nexport const F_NODE_INPUT = new InjectionToken<FNodeInputBase>('F_NODE_INPUT');\n\n@Directive()\nexport abstract class FNodeInputBase extends FConnectorBase {\n\n public abstract multiple: boolean;\n\n public isConnected: boolean = false;\n\n public get canBeConnected(): boolean {\n return !this.disabled && (this.multiple ? true : !this.isConnected);\n }\n}\n","export function isNodeInput(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeInput]');\n}\n","import { Directive, ElementRef, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { F_NODE_INPUT, FNodeInputBase } from './f-node-input-base';\nimport { EFConnectableSide } from '../e-f-connectable-side';\nimport { FNodeBase, F_NODE } from '../../f-node';\nimport { FComponentsStore } from '../../f-components-store';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeInput]\",\n exportAs: 'fNodeInput',\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-input\",\n '[class.f-node-input-multiple]': 'multiple',\n '[class.f-node-input-disabled]': 'disabled',\n '[class.f-node-input-not-connectable]': '!canBeConnected',\n },\n providers: [ { provide: F_NODE_INPUT, useExisting: FNodeInputDirective } ],\n})\nexport class FNodeInputDirective extends FNodeInputBase implements OnInit, OnDestroy {\n\n @Input('fInputId')\n public override id: any = `f-node-input-${ uniqueId++ }`;\n\n @Input('fInputMultiple')\n public override multiple: boolean = true;\n\n @Input('fInputDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n @Input('fInputConnectableSide')\n public override _fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n public override isConnected: boolean = false;\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_NODE) private fNode: FNodeBase,\n private fComponentsStore: FComponentsStore,\n ) {\n super();\n }\n\n public ngOnInit() {\n if (!this.fNode) {\n throw new Error('fNodeInput must be inside f-node');\n }\n this.fComponentsStore.addInput(this);\n this.fNode.addConnector(this);\n }\n\n public override setConnected(isConnected: boolean): void {\n this.isConnected = isConnected;\n this.hostElement.classList.toggle('f-node-input-connected', isConnected);\n }\n\n public ngOnDestroy(): void {\n this.fNode.removeConnector(this);\n this.fComponentsStore.removeInput(this);\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FConnectorBase } from '../f-connector-base';\n\nexport const F_NODE_OUTLET = new InjectionToken<FNodeOutletBase>('F_NODE_OUTLET');\n\n@Directive()\nexport abstract class FNodeOutletBase extends FConnectorBase {\n\n public abstract isConnectionFromOutlet: boolean;\n\n public override isConnected: boolean = false;\n\n private outputs: FConnectorBase[] = [];\n\n public get canBeConnected(): boolean {\n return !this.disabled;\n }\n\n public setOutputs(outputs: FConnectorBase[]): void {\n this.outputs = outputs;\n }\n}\n","export function isNodeOutlet(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeOutlet]');\n}\n","import { Directive, ElementRef, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { F_NODE_OUTLET, FNodeOutletBase } from './f-node-outlet-base';\nimport { F_NODE, FNodeBase } from '../../f-node';\nimport { FComponentsStore } from '../../f-components-store';\nimport { EFConnectableSide } from '../e-f-connectable-side';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeOutlet]\",\n exportAs: 'fNodeOutlet',\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-outlet\",\n '[class.f-node-outlet-disabled]': 'disabled'\n },\n providers: [ { provide: F_NODE_OUTLET, useExisting: FNodeOutletDirective } ],\n})\nexport class FNodeOutletDirective extends FNodeOutletBase implements OnInit, OnDestroy {\n\n @Input('fOutletId')\n public override id: string = `f-node-outlet-${ uniqueId++ }`;\n\n @Input('fOutletDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n public override fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n public override _fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n @Input()\n public override isConnectionFromOutlet: boolean = false\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_NODE) private fNode: FNodeBase,\n private fComponentsStore: FComponentsStore,\n ) {\n super();\n }\n\n public ngOnInit() {\n if (!this.fNode) {\n throw new Error('fNodeOutlet must be inside fNode Directive');\n }\n this.fComponentsStore.addOutlet(this);\n }\n\n public ngOnDestroy(): void {\n this.fComponentsStore.removeOutlet(this);\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FConnectorBase } from '../f-connector-base';\n\nexport const F_NODE_OUTPUT = new InjectionToken<FNodeOutputBase>('F_NODE_OUTPUT');\n\n@Directive()\nexport abstract class FNodeOutputBase extends FConnectorBase {\n\n public isConnected: boolean = false;\n\n public override get canBeConnected(): boolean {\n return !this.disabled && !this.isConnected;\n }\n}\n","export function isNodeOutput(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeOutput]');\n}\n","import { Directive, ElementRef, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { FNodeOutputBase, F_NODE_OUTPUT } from './f-node-output-base';\nimport { EFConnectableSide } from '../e-f-connectable-side';\nimport { F_NODE, FNodeBase } from '../../f-node';\nimport { FComponentsStore } from '../../f-components-store';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeOutput]\",\n exportAs: 'fNodeOutput',\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-output\",\n '[class.f-node-output-disabled]': 'disabled',\n },\n providers: [ { provide: F_NODE_OUTPUT, useExisting: FNodeOutputDirective } ],\n})\nexport class FNodeOutputDirective extends FNodeOutputBase implements OnInit, OnDestroy {\n\n @Input('fOutputId')\n public override id: string = `f-node-output-${ uniqueId++ }`;\n\n @Input('fOutputDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n @Input('fOutputConnectableSide')\n public override _fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n public override isConnected: boolean = false;\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_NODE) private fNode: FNodeBase,\n private fComponentsStore: FComponentsStore,\n ) {\n super();\n }\n\n public ngOnInit() {\n if (!this.fNode) {\n throw new Error('fNodeOutput must be inside fNode Directive');\n }\n this.fComponentsStore.addOutput(this);\n this.fNode.addConnector(this);\n }\n\n public override setConnected(isConnected: boolean): void {\n this.isConnected = isConnected;\n this.hostElement.classList.toggle('f-node-output-connected', isConnected);\n }\n\n public ngOnDestroy(): void {\n this.fNode.removeConnector(this);\n this.fComponentsStore.removeOutput(this);\n }\n}\n","import { IPoint, PointExtensions } from '@foblex/core';\nimport { FPathBuilderBase } from './f-path-builder-base';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport { IFPathBuilderRequest } from './i-f-path-builder-request';\nimport { IFPathBuilderResponse } from './i-f-path-builder-response';\nimport { CalculateConnectionCenterHandler, CalculateConnectionCenterRequest } from './calculate-connection-center';\n\nexport class FBezierPathBuilder extends FPathBuilderBase {\n\n private static getAnglePoint(side: EFConnectableSide, source: IPoint, target: IPoint): IPoint {\n let result: IPoint = PointExtensions.initialize(source.x, 0.5 * (source.y + target.y));\n\n if (side === EFConnectableSide.LEFT || side === EFConnectableSide.RIGHT) {\n result = PointExtensions.initialize(0.5 * (source.x + target.x), source.y);\n }\n\n return result;\n }\n\n public handle(request: IFPathBuilderRequest): IFPathBuilderResponse {\n const { source, sourceSide, target, targetSide } = request;\n\n const sourceAnglePoint = FBezierPathBuilder.getAnglePoint(sourceSide, source, target);\n\n const targetAnglePoint = FBezierPathBuilder.getAnglePoint(targetSide, source, target);\n\n const path = `M ${ source.x } ${ source.y } C ${ sourceAnglePoint.x } ${ sourceAnglePoint.y }, ${ targetAnglePoint.x } ${ targetAnglePoint.y }, ${ target.x + 0.0001 } ${ target.y + 0.0001 }`;\n\n const center = new CalculateConnectionCenterHandler().handle(\n new CalculateConnectionCenterRequest([source, sourceAnglePoint, targetAnglePoint, target])\n );\n\n return { path, center };\n }\n}\n","export enum EFConnectionType {\n\n SEGMENT = 'segment',\n\n STRAIGHT = 'straight',\n\n BEZIER = 'bezier',\n}\n","import { IFPathBuilderRequest } from './i-f-path-builder-request';\nimport { IFPathBuilderResponse } from './i-f-path-builder-response';\nimport { FPathBuilderBase } from './f-path-builder-base';\nimport { CalculateConnectionCenterHandler, CalculateConnectionCenterRequest } from './calculate-connection-center';\n\nexport class FStraightPathBuilder extends FPathBuilderBase {\n\n public handle(request: IFPathBuilderRequest): IFPathBuilderResponse {\n const { source, target } = request;\n const path = `M ${ source.x } ${ source.y } L ${ target.x + 0.0001 } ${ target.y + 0.0001 }`;\n\n const center = new CalculateConnectionCenterHandler().handle(\n new CalculateConnectionCenterRequest([source, target])\n );\n\n return { path, center };\n }\n}\n","import { IMap, IPoint, PointExtensions } from '@foblex/core';\nimport { FPathBuilderBase } from './f-path-builder-base';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport { IFPathBuilderRequest } from './i-f-path-builder-request';\nimport { IFPathBuilderResponse } from './i-f-path-builder-response';\nimport {\n CalculateCenterBetweenPointsHandler,\n CalculateCenterBetweenPointsRequest\n} from './calculate-center-between-points';\nimport { CalculateConnectionCenterHandler, CalculateConnectionCenterRequest } from './calculate-connection-center';\n\nconst CONNECTOR_SIDE_POINT: IMap<IPoint> = {\n\n [ EFConnectableSide.LEFT ]: PointExtensions.initialize(-1, 0),\n\n [ EFConnectableSide.RIGHT ]: PointExtensions.initialize(1, 0),\n\n [ EFConnectableSide.TOP ]: PointExtensions.initialize(0, -1),\n\n [ EFConnectableSide.BOTTOM ]: PointExtensions.initialize(0, 1),\n\n [ EFConnectableSide.AUTO ]: PointExtensions.initialize(0, 0),\n};\n\nexport class FSegmentPathBuilder extends FPathBuilderBase {\n\n public handle(request: IFPathBuilderRequest): IFPathBuilderResponse {\n const { source, sourceSide, target, targetSide } = request;\n\n const { points, center } = this.getPathPoints(\n source,\n sourceSide,\n target,\n targetSide,\n request.offset\n );\n\n const path = this.buildPath(points, request.radius);\n\n return { path, center };\n }\n\n private getPathPoints(\n source: IPoint, sourceSide: EFConnectableSide, target: IPoint, targetSide: EFConnectableSide, offset: number\n ): { points: IPoint[], center: IPoint } {\n\n const sourceDirection = CONNECTOR_SIDE_POINT[ sourceSide ];\n const targetDirection = CONNECTOR_SIDE_POINT[ targetSide ];\n\n const sourceGap: IPoint = { x: source.x + sourceDirection.x * offset, y: source.y + sourceDirection.y * offset };\n const targetGap: IPoint = { x: target.x + targetDirection.x * offset, y: target.y + targetDirection.y * offset };\n\n const direction = this.getDirection(sourceGap, sourceSide, targetGap);\n const directionAccessor = direction.x !== 0 ? 'x' : 'y';\n const currentDirection = direction[ directionAccessor ];\n\n let points: IPoint[] = [];\n const sourceGapOffset = PointExtensions.initialize();\n const targetGapOffset = PointExtensions.initialize();\n\n const centerBetweenPoints = new CalculateCenterBetweenPointsHandler().handle(\n new CalculateCenterBetweenPointsRequest(source, target)\n );\n\n if (sourceDirection[ directionAccessor ] * targetDirection[ directionAccessor ] === -1) {\n const verticalSplit: IPoint[] = [\n { x: centerBetweenPoints.x, y: sourceGap.y },\n { x: centerBetweenPoints.x, y: targetGap.y },\n ];\n const horizontalSplit: IPoint[] = [\n { x: sourceGap.x, y: centerBetweenPoints.y },\n { x: targetGap.x, y: centerBetweenPoints.y },\n ];\n\n if (sourceDirection[ directionAccessor ] === currentDirection) {\n points = directionAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = directionAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n const sourceTarget: IPoint[] = [ { x: sourceGap.x, y: targetGap.y } ];\n const targetSource: IPoint[] = [ { x: targetGap.x, y: sourceGap.y } ];\n\n if (directionAccessor === 'x') {\n points = sourceDirection.x === currentDirection ? targetSource : sourceTarget;\n } else {\n points = sourceDirection.y === currentDirection ? sourceTarget : targetSource;\n }\n\n if (sourceSide === targetSide) {\n const diff = Math.abs(source[ directionAccessor ] - target[ directionAccessor ]);\n\n if (diff <= offset) {\n const gapOffset = Math.min(offset - 1, offset - diff);\n if (sourceDirection[ directionAccessor ] === currentDirection) {\n sourceGapOffset[ directionAccessor ] = (sourceGap[ directionAccessor ] > source[ directionAccessor ] ? -1 : 1) * gapOffset;\n } else {\n targetGapOffset[ directionAccessor ] = (targetGap[ directionAccessor ] > target[ directionAccessor ] ? -1 : 1) * gapOffset;\n }\n }\n }\n\n if (sourceSide !== targetSide) {\n const dirAccessorOpposite = directionAccessor === 'x' ? 'y' : 'x';\n const isSameDir = sourceDirection[ directionAccessor ] === targetDirection[ dirAccessorOpposite ];\n const sourceGtTargetOppo = sourceGap[ dirAccessorOpposite ] > targetGap[ dirAccessorOpposite ];\n const sourceLtTargetOppo = sourceGap[ dirAccessorOpposite ] < targetGap[ dirAccessorOpposite ];\n const flipSourceTarget =\n (sourceDirection[ directionAccessor ] === 1 &&\n ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDirection[ directionAccessor ] !== 1 &&\n ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = directionAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n\n const pathPoints = [\n source,\n { x: sourceGap.x + sourceGapOffset.x, y: sourceGap.y + sourceGapOffset.y },\n ...points,\n { x: targetGap.x + targetGapOffset.x, y: targetGap.y + targetGapOffset.y },\n target,\n ];\n\n const center = new CalculateConnectionCenterHandler().handle(\n new CalculateConnectionCenterRequest(pathPoints)\n );\n\n return { points: pathPoints, center: center };\n }\n\n private getDirection(source: IPoint, sourceSide: EFConnectableSide, target: IPoint): IPoint {\n if (sourceSide === EFConnectableSide.LEFT || sourceSide === EFConnectableSide.RIGHT) {\n return source.x < target.x ? PointExtensions.initialize(1, 0) : PointExtensions.initialize(-1, 0);\n }\n return source.y < target.y ? PointExtensions.initialize(0, 1) : PointExtensions.initialize(0, -1);\n }\n\n private distance(a: IPoint, b: IPoint): number {\n return Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));\n }\n\n private buildPath(points: IPoint[], borderRadius: number): string {\n let path = '';\n for (let i = 0; i < points.length; i++) {\n const p = points[ i ];\n let segment = '';\n\n if (i > 0 && i < points.length - 1) {\n segment = this.getBend(points[ i - 1 ], p, points[ i + 1 ], borderRadius);\n } else if (i === points.length - 1) {\n segment = this.buildLastLineSegment(i, p);\n } else {\n segment = this.buildMoveOrLineSegment(i, p);\n }\n path += segment;\n }\n\n return path;\n }\n\n private getBend(a: IPoint, b: IPoint, c: IPoint, size: number): string {\n const bendSize = Math.min(this.distance(a, b) / 2, this.distance(b, c) / 2, size);\n const { x, y } = b;\n\n if ((a.x === x && x === c.x) || (a.y === y && y === c.y)) {\n return `L${ x } ${ y }`;\n }\n\n if (a.y === y) {\n const xDir = a.x < c.x ? -1 : 1;\n const yDir = a.y < c.y ? 1 : -1;\n return `L ${ x + bendSize * xDir },${ y }Q ${ x },${ y } ${ x },${ y + bendSize * yDir }`;\n }\n\n const xDir = a.x < c.x ? 1 : -1;\n const yDir = a.y < c.y ? -1 : 1;\n return `L ${ x },${ y + bendSize * yDir }Q ${ x },${ y } ${ x + bendSize * xDir },${ y }`;\n }\n\n private buildMoveOrLineSegment(index: number, point: IPoint): string {\n return `${ index === 0 ? 'M' : 'L' }${ point.x } ${ point.y }`;\n }\n\n private buildLastLineSegment(index: number, point: IPoint): string {\n return `L${ point.x + 0.0001 } ${ point.y + 0.0001 }`;\n }\n}\n","import { EFConnectionType } from '../e-f-connection-type';\nimport { IMap } from '@foblex/core';\nimport { FPathBuilderBase } from './f-path-builder-base';\nimport { FStraightPathBuilder } from './f-straight.path-builder';\nimport { FBezierPathBuilder } from './f-bezier.path-builder';\nimport { FSegmentPathBuilder } from './f-segment.path-builder';\nimport { IFPathBuilderRequest } from './i-f-path-builder-request';\nimport { IFPathBuilderResponse } from './i-f-path-builder-response';\n\nexport class FPathBuilderSelector extends FPathBuilderBase {\n\n private builders: IMap<FPathBuilderBase> = {\n\n [EFConnectionType.STRAIGHT]: new FStraightPathBuilder(),\n\n [EFConnectionType.BEZIER]: new FBezierPathBuilder(),\n\n [EFConnectionType.SEGMENT]: new FSegmentPathBuilder(),\n }\n\n public handle(request: IFPathBuilderRequest): IFPathBuilderResponse {\n return this.builders[request.type].handle(request);\n }\n}\n","import { sanitizeElementId } from '@foblex/core';\n\nexport const F_CONNECTION_IDENTIFIERS = {\n\n textId(connectionId: string): string {\n return sanitizeElementId('connection_text_' + connectionId);\n },\n connectionForSelectionId(connectionId: string): string {\n return sanitizeElementId('connection_for_selection_' + connectionId);\n },\n connectionId(connectionId: string): string {\n return sanitizeElementId('connection_' + connectionId);\n },\n gradientId(connectionId: string): string {\n return sanitizeElementId('connection_gradient_' + connectionId);\n },\n linkToGradient(connectionId: string): string {\n return `url(#${ F_CONNECTION_IDENTIFIERS.gradientId(connectionId) })`;\n },\n linkToConnection(connectionId: string): string {\n return `#${ F_CONNECTION_IDENTIFIERS.connectionId(connectionId) }`;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const F_CONNECTION = new InjectionToken('F_CONNECTION');\n","import { Directive, ElementRef, Inject, OnInit } from '@angular/core';\nimport { IHasHostElement } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { F_CONNECTION } from '../f-connection.injection-token';\nimport { IHasConnectionText } from '../i-has-connection-text';\nimport { IHasConnectionFromTo } from '../i-has-connection-from-to';\n\n@Directive({\n selector: 'textPath[f-connection-text-path]',\n host: {\n '[attr.href]': 'linkToConnection'\n }\n})\nexport class FConnectionTextPathDirective implements IHasHostElement, OnInit {\n\n public get linkToConnection(): string {\n return F_CONNECTION_IDENTIFIERS.linkToConnection(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get hostElement(): SVGTextPathElement {\n return this.elementReference.nativeElement;\n }\n\n public symbolWidth: number = 8;\n public fontSize: string = '12px';\n\n constructor(\n private elementReference: ElementRef<SVGTextPathElement>,\n @Inject(F_CONNECTION) private base: IHasConnectionText & IHasConnectionFromTo,\n ) {\n }\n\n public ngOnInit(): void {\n this.hostElement.setAttribute('startOffset', '50%');\n this.hostElement.setAttribute('text-anchor', `middle`);\n this.symbolWidth = this.getSymbolWidth(this.base.fText || '');\n }\n\n public getBBox(): DOMRect {\n return this.hostElement.getBBox();\n }\n\n private getFontStyles(element: SVGTextPathElement): { fontSize: string, fontFamily: string } {\n const computedStyles = window.getComputedStyle(element);\n return {\n fontSize: computedStyles.fontSize,\n fontFamily: computedStyles.fontFamily\n };\n }\n\n private getSymbolWidth(name: string): number {\n const text = name || 'connection';\n const { fontFamily, fontSize } = this.getFontStyles(this.hostElement);\n this.fontSize = fontSize;\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n if (!context) {\n throw new Error('Canvas context is not supported');\n }\n\n context.font = `${ fontSize } ${ fontFamily }`;\n\n const metrics = context.measureText(text);\n const symbolWidth = metrics.width / text.length;\n return symbolWidth;\n }\n}\n","import { IHasHostElement, IVector } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\n\nexport const CONNECTION_TEXT = new InjectionToken<IConnectionText>('CONNECTION_TEXT');\n\nexport interface IConnectionText extends IHasHostElement {\n\n redraw(vector: IVector): void;\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Inject, ViewChild\n} from \"@angular/core\";\nimport { IVector, PointExtensions } from '@foblex/core';\nimport { FConnectionTextPathDirective } from './f-connection-text-path.directive';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IHasConnectionText } from '../i-has-connection-text';\nimport { IHasConnectionFromTo } from '../i-has-connection-from-to';\nimport { F_CONNECTION } from '../f-connection.injection-token';\nimport { CONNECTION_TEXT, IConnectionText } from './i-connection-text';\n\n@Component({\n selector: \"text[f-connection-text]\",\n templateUrl: \"./f-connection-text.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-text\",\n '[attr.id]': 'textId',\n },\n providers: [ { provide: CONNECTION_TEXT, useExisting: FConnectionTextComponent } ],\n})\nexport class FConnectionTextComponent implements IConnectionText {\n\n public get textId(): string {\n return F_CONNECTION_IDENTIFIERS.textId(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get hostElement(): SVGTextElement {\n return this.elementReference.nativeElement;\n }\n\n public get text(): string {\n return this.base.fText || '';\n }\n\n @ViewChild(FConnectionTextPathDirective, { static: true })\n public textPathDirective!: FConnectionTextPathDirective;\n\n constructor(\n private elementReference: ElementRef<SVGTextElement>,\n @Inject(F_CONNECTION) private base: IHasConnectionText & IHasConnectionFromTo,\n ) {\n }\n\n public redraw(vector: IVector): void {\n\n const isTextReverse: boolean = FConnectionTextComponent.isTextReverse(vector);\n const dyValue = this.calculateDy(this.textPathDirective.fontSize, isTextReverse);\n\n this.hostElement.setAttribute('dy', dyValue);\n\n const textRect = this.textPathDirective.getBBox();\n const textRectCenter = [ textRect.x + textRect.width / 2, textRect.y + textRect.height / 2 ];\n this.hostElement.setAttribute('transform', isTextReverse ? `rotate(180, ${ textRectCenter })` : '');\n const startOffset = FConnectionTextComponent.getTextStartOffset(vector, this.base.fText || '', this.textPathDirective.symbolWidth);\n if (startOffset < 0) {\n\n this.hostElement.style.display = 'none';\n } else {\n\n this.hostElement.style.display = 'unset';\n }\n }\n\n private calculateDy(fontSize: string, isTextReverse: boolean): string {\n const fontSizeNumber = parseFloat(fontSize);\n\n const dyValue = isTextReverse ? fontSizeNumber * 1.5 : fontSizeNumber * -0.8;\n\n return dyValue.toString();\n }\n\n private static isTextReverse(vector: IVector): boolean {\n return vector.point1.x > vector.point2.x;\n }\n\n private static getTextStartOffset(vector: IVector, name: string, symbolWidth: number): number {\n const vectorLength: number = PointExtensions.hypotenuse(vector.point1, vector.point2);\n return vectorLength / 2 - ((name || '').length * symbolWidth) / 2;\n }\n}\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:textPath f-connection-text-path>\n {{ text }}\n </svg:textPath>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef\n} from \"@angular/core\";\nimport { IHasHostElement, IPoint } from '@foblex/core';\n\nexport const F_CONNECTION_DRAG_HANDLE_CLASS = 'f-connection-drag-handle';\n\n@Component({\n selector: \"circle[f-connection-drag-handle]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'class'\n }\n})\nexport class FConnectionDragHandleComponent implements IHasHostElement {\n\n public readonly class: string = F_CONNECTION_DRAG_HANDLE_CLASS;\n\n public get hostElement(): SVGCircleElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGCircleElement>\n ) {\n }\n\n public redraw(point: IPoint): void {\n this.hostElement.setAttribute('cx', point.x.toString());\n this.hostElement.setAttribute('cy', point.y.toString());\n }\n}\n\n","import { IHasHostElement, IVector } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\n\nexport const CONNECTION_GRADIENT = new InjectionToken<IConnectionGradient>('CONNECTION_GRADIENT');\n\nexport interface IConnectionGradient extends IHasHostElement {\n\n initialize(): void;\n\n redraw(vector: IVector): void;\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, Inject } from \"@angular/core\";\nimport { IVector, Point } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IHasConnectionFromTo } from '../i-has-connection-from-to';\nimport { IHasConnectionColor } from '../i-has-connection-color';\nimport { F_CONNECTION } from '../f-connection.injection-token';\nimport { CONNECTION_GRADIENT, IConnectionGradient } from './i-connection-gradient';\n\n@Component({\n selector: \"linearGradient[fConnectionGradient]\",\n templateUrl: \"./f-connection-gradient.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-gradient\",\n '[attr.id]': 'gradientId'\n },\n providers: [ { provide: CONNECTION_GRADIENT, useExisting: FConnectionGradientComponent } ],\n})\nexport class FConnectionGradientComponent implements IConnectionGradient {\n\n public get gradientId(): string {\n return F_CONNECTION_IDENTIFIERS.gradientId(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get hostElement(): SVGLinearGradientElement {\n return this.elementReference.nativeElement;\n }\n\n public get stop1Element(): SVGStopElement {\n return this.elementReference.nativeElement.children.item(0) as SVGStopElement;\n }\n\n public get stop2Element(): SVGStopElement {\n return this.elementReference.nativeElement.children.item(1) as SVGStopElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGLinearGradientElement>,\n @Inject(F_CONNECTION) private base: IHasConnectionColor & IHasConnectionFromTo,\n ) {\n }\n\n public initialize(): void {\n this.stop1Element.setAttribute('offset', '0%');\n this.stop2Element.setAttribute('offset', '100%');\n }\n\n private updateGradient(): void {\n this.setFromColor(this.base.fStartColor);\n this.setToColor(this.base.fEndColor);\n }\n\n private setFromColor(color: string | undefined): void {\n this.stop1Element.setAttribute('stop-color', color || 'transparent');\n }\n\n private setToColor(color: string | undefined): void {\n this.stop2Element.setAttribute('stop-color', color || 'transparent');\n }\n\n public redraw(vector: IVector): void {\n const x: number = vector.point2.x - vector.point1.x;\n const y: number = vector.point2.y - vector.point1.y;\n const distance: number = Math.sqrt(x * x + y * y) || 0.01;\n\n const from = new Point(0.5 - (0.5 * x) / distance, 0.5 - (0.5 * y) / distance);\n\n this.hostElement.setAttribute('x1', from.x.toString());\n this.hostElement.setAttribute('y1', from.y.toString());\n\n const to = new Point(0.5 + (0.5 * x) / distance, 0.5 + (0.5 * y) / distance);\n this.hostElement.setAttribute('x2', to.x.toString());\n this.hostElement.setAttribute('y2', to.y.toString());\n this.updateGradient();\n }\n}\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:stop/>\n <svg:stop/>\n</ng-container>\n","import { IHasHostElement } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\n\nexport const CONNECTION_PATH = new InjectionToken<IConnectionPath>('CONNECTION_PATH');\n\nexport interface IConnectionPath extends IHasHostElement {\n\n initialize(): void;\n\n setPath(path: string): void;\n\n select(): void;\n\n deselect(): void;\n}\n","import { GuidExtensions } from '@foblex/core';\n\nexport const FLOW = {\n UID: GuidExtensions.generate(),\n};\n\nexport function getFlowUid(): string {\n return FLOW.UID;\n}\n","export enum EFMarkerType {\n\n START = 'f-connection-marker-start',\n\n END = 'f-connection-marker-end',\n\n SELECTED_START = 'f-connection-selected-marker-start',\n\n SELECTED_END = 'f-connection-selected-marker-end',\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { IHasHostElement } from '@foblex/core';\n\n\nexport const F_MARKER = new InjectionToken('F_MARKER');\n\n@Directive()\nexport abstract class FMarkerBase implements IHasHostElement {\n\n public abstract hostElement: HTMLElement;\n\n public abstract width: number;\n\n public abstract height: number;\n\n public abstract refX: number;\n\n public abstract refY: number;\n\n public abstract type: string;\n}\n","import {\n Directive, ElementRef, Input\n} from \"@angular/core\";\nimport { F_MARKER, FMarkerBase } from './f-marker-base';\nimport { EFMarkerType } from './e-f-marker-type';\n\n@Directive({\n selector: \"svg[fMarker]\",\n standalone: true,\n host: {\n class: \"f-component f-marker\"\n },\n providers: [ { provide: F_MARKER, useExisting: FMarkerDirective } ],\n})\nexport class FMarkerDirective extends FMarkerBase {\n\n @Input()\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n @Input()\n public override width: number = 0;\n\n @Input()\n public override height: number = 0;\n\n @Input()\n public override refX: number = 0;\n\n @Input()\n public override refY: number = 0;\n\n\n @Input()\n public override type: string = EFMarkerType.START;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n ) {\n super();\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, Inject } from \"@angular/core\";\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IHasConnectionColor } from '../i-has-connection-color';\nimport { IHasConnectionFromTo } from '../i-has-connection-from-to';\nimport { F_CONNECTION } from '../f-connection.injection-token';\nimport { CONNECTION_PATH, IConnectionPath } from './i-connection-path';\nimport { sanitizeElementId } from '@foblex/core';\nimport { getFlowUid } from '../../../get-flow-uid';\nimport { EFMarkerType } from '../../f-marker';\n\n@Component({\n selector: \"path[f-connection-path]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-path\",\n '[attr.id]': 'attrConnectionId',\n '[attr.stroke]': 'linkToGradient',\n },\n providers: [ { provide: CONNECTION_PATH, useExisting: FConnectionPathComponent } ],\n})\nexport class FConnectionPathComponent implements IConnectionPath {\n\n public get linkToGradient(): string {\n return F_CONNECTION_IDENTIFIERS.linkToGradient(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get attrConnectionId(): string {\n return F_CONNECTION_IDENTIFIERS.connectionId(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get hostElement(): SVGPathElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGPathElement>,\n @Inject(F_CONNECTION) private base: IHasConnectionColor & IHasConnectionFromTo\n ) {\n }\n\n public initialize(): void {\n this.deselect();\n }\n\n public setPath(path: string): void {\n this.hostElement.setAttribute(\"d\", `${ path }`);\n }\n\n public select(): void {\n this.hostElement.setAttribute('marker-start', `url(#${ this.getMarkerId(EFMarkerType.SELECTED_START) })`);\n this.hostElement.setAttribute('marker-end', `url(#${ this.getMarkerId(EFMarkerType.SELECTED_END) })`);\n }\n\n public deselect(): void {\n this.hostElement.setAttribute('marker-start', `url(#${ this.getMarkerId(EFMarkerType.START) })`);\n this.hostElement.setAttribute('marker-end', `url(#${ this.getMarkerId(EFMarkerType.END) })`);\n }\n\n private getMarkerId(type: EFMarkerType): string {\n return sanitizeElementId(`${ getFlowUid() }-${ type }-${ this.base.id }`);\n }\n\n public isSelected(): boolean {\n return this.hostElement.getAttribute('marker-start') === `url(#${ this.getMarkerId(EFMarkerType.SELECTED_START) })`\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Inject\n} from \"@angular/core\";\nimport { IHasHostElement } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IHasConnectionFromTo } from '../i-has-connection-from-to';\nimport { F_CONNECTION } from '../f-connection.injection-token';\n\n@Component({\n selector: \"path[fConnectionSelection]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-selection\",\n '[attr.id]': 'connectionForSelectionId',\n },\n})\nexport class FConnectionSelectionComponent implements IHasHostElement {\n\n public get connectionForSelectionId(): string {\n return F_CONNECTION_IDENTIFIERS.connectionForSelectionId(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get hostElement(): SVGPathElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGPathElement>,\n @Inject(F_CONNECTION) private base: IHasConnectionFromTo,\n ) {\n }\n\n public setPath(path: string) {\n this.hostElement.setAttribute(\"d\", `${ path }`);\n }\n}\n\n","import { IHasHostElement } from '@foblex/core';\nimport { IConnectionPath } from '../f-path';\nimport { AbstractConstructor, Constructor } from '../../../common-behaviours';\n\nexport interface ISelectable {\n\n hostElement: HTMLElement | SVGElement;\n\n select(): void;\n\n deselect(): void;\n\n isSelected(): boolean;\n}\n\nexport const F_SELECTED_CLASS = 'f-selected';\n\ntype CanChangeConnectionSelectionConstructor = Constructor<ISelectable> & AbstractConstructor<ISelectable>;\n\nexport function mixinChangeConnectionSelection<T extends AbstractConstructor<IHasHostElement>>(base: T): CanChangeConnectionSelectionConstructor & T;\nexport function mixinChangeConnectionSelection<T extends Constructor<IHasHostElement>>(base: T): CanChangeConnectionSelectionConstructor & T {\n return class extends base {\n\n public fPath: IConnectionPath | undefined;\n\n public deselect(): void {\n this.fPath?.deselect();\n this.hostElement.classList.remove(F_SELECTED_CLASS);\n }\n\n public select(): void {\n this.fPath?.select();\n this.hostElement.classList.add(F_SELECTED_CLASS);\n }\n\n public isSelected(): boolean {\n return this.hostElement.classList.contains(F_SELECTED_CLASS);\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { IHasHostElement } from '@foblex/core';\nimport { AbstractConstructor, Constructor } from '../../../common-behaviours';\n\nexport interface ICanChangeConnectionVisibility {\n\n hostElement: HTMLElement | SVGElement;\n\n show(): void;\n\n hide(): void;\n}\n\ntype CanChangeConnectionVisibilityConstructor = Constructor<ICanChangeConnectionVisibility> & AbstractConstructor<ICanChangeConnectionVisibility>;\n\nexport function mixinChangeConnectionVisibility<T extends AbstractConstructor<IHasHostElement>>(base: T): CanChangeConnectionVisibilityConstructor & T;\nexport function mixinChangeConnectionVisibility<T extends Constructor<IHasHostElement>>(base: T): CanChangeConnectionVisibilityConstructor & T {\n return class extends base {\n\n public show(): void {\n this.hostElement.style.display = \"unset\";\n }\n\n public hide(): void {\n this.hostElement.style.display = \"none\";\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { Directive, ElementRef, QueryList } from '@angular/core';\nimport { DomElementExtensions, IHasHostElement, IPoint, IVector, VectorExtensions } from '@foblex/core';\nimport { Subject } from 'rxjs';\nimport { EFConnectionBehavior } from './e-f-connection-behavior';\nimport { EFConnectionType } from './e-f-connection-type';\nimport { IHasConnectionColor } from './i-has-connection-color';\nimport { IHasConnectionFromTo } from './i-has-connection-from-to';\nimport { IHasConnectionText } from './i-has-connection-text';\nimport {\n ICanChangeConnectionVisibility,\n ISelectable,\n mixinChangeConnectionSelection,\n mixinChangeConnectionVisibility\n} from './mixins';\nimport { IConnectionPath } from './f-path';\nimport { IConnectionGradient } from './f-gradient';\nimport { FConnectionDragHandleComponent } from './f-drag-handle';\nimport { FConnectionSelectionComponent } from './f-selection';\nimport { IConnectionText } from './f-connection-text';\nimport { IHasStateChanges } from '../../i-has-state-changes';\nimport { FMarkerBase } from '../f-marker';\nimport { getFlowUid } from '../../get-flow-uid';\nimport { EFConnectableSide } from '../../f-connectors';\nimport { FPathBuilderBase, FPathBuilderSelector } from './domain';\n\nconst MIXIN_BASE = mixinChangeConnectionSelection(\n mixinChangeConnectionVisibility(\n class {\n constructor(\n public hostElement: HTMLElement\n ) {\n }\n }));\n\n@Directive()\nexport abstract class FConnectionBase extends MIXIN_BASE\n implements IHasHostElement, ISelectable,\n ICanChangeConnectionVisibility,\n IHasStateChanges, IHasConnectionColor,\n IHasConnectionFromTo, IHasConnectionText {\n\n public abstract id: string;\n\n public abstract fStartColor: string;\n\n public abstract fEndColor: string;\n\n public abstract fOutputId: string;\n\n public abstract fInputId: string;\n\n public path: string = '';\n\n public vector: IVector = VectorExtensions.initialize();\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public abstract disabled: boolean;\n\n public abstract boundingElement: HTMLElement | SVGElement;\n\n public abstract fBehavior: EFConnectionBehavior;\n\n public abstract fType: EFConnectionType;\n\n public abstract fDefs: ElementRef<SVGDefsElement>;\n\n public abstract fMarkers: QueryList<FMarkerBase>;\n\n public abstract fPath: IConnectionPath;\n\n public abstract fGradient: IConnectionGradient;\n\n public abstract fDragHandle: FConnectionDragHandleComponent;\n\n public abstract fSelection: FConnectionSelectionComponent;\n\n public abstract fTextComponent: IConnectionText;\n\n public abstract fText: string;\n\n public abstract fConnectionCenter: ElementRef<HTMLDivElement>;\n\n public fPathBuilder: FPathBuilderBase = new FPathBuilderSelector();\n\n protected constructor(elementReference: ElementRef<HTMLElement>) {\n super(elementReference.nativeElement);\n }\n\n public initialize(): void {\n this.fPath.initialize();\n this.fGradient.initialize();\n this.redraw();\n }\n\n private reset(): void {\n this.path = '';\n this.fPath.initialize();\n this.fGradient.initialize();\n this.redraw();\n }\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return (this.hostElement.firstChild?.lastChild as HTMLElement).contains(element);\n }\n\n public setVector(from: IPoint, fromSide: EFConnectableSide, to: IPoint, toSide: EFConnectableSide): void {\n this.vector = { point1: from, point2: to };\n const pathResult = this.fPathBuilder.handle(\n {\n type: this.fType,\n source: from,\n sourceSide: fromSide,\n target: to,\n targetSide: toSide,\n radius: 8,\n offset: 32\n }\n );\n\n this.path = pathResult.path;\n\n const transform = `position: absolute; pointerEvents: all; transform: translate(-50%, -50%); left: ${ pathResult.center.x }px; top: ${ pathResult.center.y }px`;\n\n this.fConnectionCenter?.nativeElement?.setAttribute('style', transform);\n }\n\n public setMarkers(): void {\n this.fDefs.nativeElement.innerHTML = '';\n this.fMarkers.forEach((marker) => {\n const markerElement = DomElementExtensions.createSvgElement('marker');\n markerElement.setAttribute('id', getFlowUid() + '-' + marker.type + '-' + this.id);\n markerElement.setAttribute('markerHeight', `${ marker.height }`);\n markerElement.setAttribute('markerWidth', `${ marker.width }`);\n markerElement.setAttribute('orient', 'auto');\n markerElement.setAttribute('refX', `${ marker.refX }`);\n markerElement.setAttribute('refY', `${ marker.refY }`);\n markerElement.setAttribute('markerUnits', 'strokeWidth');\n\n marker.hostElement.setAttribute('height', `${ marker.height }`);\n marker.hostElement.setAttribute('width', `${ marker.width }`);\n markerElement.append(marker.hostElement.cloneNode(true));\n\n this.fDefs.nativeElement.append(markerElement);\n });\n this.fMarkers.forEach((marker) => {\n marker.hostElement.remove();\n });\n }\n\n public redraw(): void {\n this.fPath.setPath(this.path);\n this.fSelection.setPath(this.path);\n this.fGradient.redraw(this.vector);\n this.fDragHandle.redraw(this.vector.point2);\n this.fTextComponent.redraw(this.vector);\n }\n}\n","export enum EFConnectionBehavior {\n\n FIXED = 'fixed',\n\n FLOATING = 'floating',\n}\n","import { EFConnectionBehavior } from './e-f-connection-behavior';\n\nexport function castToConnectionBehavior(behavior: string): EFConnectionBehavior {\n\n const result = EFConnectionBehavior[ behavior.toUpperCase() as keyof typeof EFConnectionBehavior ];\n\n if (result === undefined) {\n throw new Error(`Unknown connection behavior: ${ behavior }. Accepted values: ${ Object.keys(EFConnectionBehavior).join(', ') }`);\n }\n\n return result;\n}\n","import { EFConnectionType } from './e-f-connection-type';\n\nexport function castToConnectionType(type: string): EFConnectionType {\n\n const result = EFConnectionType[ type.toUpperCase() as keyof typeof EFConnectionType ];\n\n if (result === undefined) {\n throw new Error(`Unknown connection type: ${ type }. Accepted values: ${ Object.keys(EFConnectionType).join(', ') }`);\n }\n\n return result;\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component, ContentChildren, ElementRef, Input, OnDestroy, OnInit, QueryList, ViewChild\n} from \"@angular/core\";\nimport {\n castToConnectionBehavior, castToConnectionType, CONNECTION_GRADIENT,\n CONNECTION_PATH, CONNECTION_TEXT,\n FConnectionBase, FConnectionDragHandleComponent, FConnectionSelectionComponent, IConnectionGradient,\n IConnectionPath, IConnectionText,\n} from '../common';\nimport { EFConnectionBehavior } from '../common';\nimport { EFConnectionType } from '../common';\nimport { F_CONNECTION } from '../common/f-connection.injection-token';\nimport { FComponentsStore } from '../../f-components-store';\nimport { F_MARKER, FMarkerBase } from '../f-marker';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"f-connection-for-create\",\n templateUrl: \"./f-connection-for-create.component.html\",\n styleUrls: [ \"./f-connection-for-create.component.scss\" ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection f-connection-for-create\"\n },\n providers: [ { provide: F_CONNECTION, useExisting: FConnectionForCreateComponent } ],\n})\nexport class FConnectionForCreateComponent\n extends FConnectionBase implements AfterViewInit, OnInit, OnDestroy {\n\n public override id: string = `f-connection-for-create-${ uniqueId++ }`;\n\n public override fText: string = '';\n\n @Input()\n public override fStartColor: string = 'black';\n\n @Input()\n public override fEndColor: string = 'black';\n\n public override fOutputId!: string;\n\n public override fInputId!: string;\n\n @Input({ transform: castToConnectionBehavior })\n public override set fBehavior(value: EFConnectionBehavior) {\n this._behavior = value;\n }\n\n public override get fBehavior(): EFConnectionBehavior {\n return this._behavior;\n }\n\n private _behavior: EFConnectionBehavior = EFConnectionBehavior.FIXED;\n\n @Input({ transform: castToConnectionType })\n public override set fType(value: EFConnectionType) {\n this._type = value;\n }\n\n public override get fType(): EFConnectionType {\n return this._type;\n }\n\n private _type: EFConnectionType = EFConnectionType.STRAIGHT;\n\n @Input()\n public override disabled: boolean = false;\n\n @ViewChild('defs', { static: true })\n public override fDefs!: ElementRef<SVGDefsElement>;\n\n @ContentChildren(F_MARKER, { descendants: true })\n public override fMarkers!: QueryList<FMarkerBase>;\n\n @ViewChild(CONNECTION_PATH, { static: true })\n public override fPath!: IConnectionPath;\n\n @ViewChild(CONNECTION_GRADIENT, { static: true })\n public override fGradient!: IConnectionGradient;\n\n @ViewChild(FConnectionDragHandleComponent, { static: true })\n public override fDragHandle!: FConnectionDragHandleComponent;\n\n @ViewChild(FConnectionSelectionComponent, { static: true })\n public override fSelection!: FConnectionSelectionComponent;\n\n @ViewChild(CONNECTION_TEXT, { static: true })\n public override fTextComponent!: IConnectionText;\n\n @ViewChild('fConnectionCenter', { static: true })\n public override fConnectionCenter!: ElementRef<HTMLDivElement>;\n\n public override get boundingElement(): HTMLElement | SVGElement {\n return this.fPath.hostElement;\n }\n\n constructor(\n elementReference: ElementRef<HTMLElement>,\n private fComponentsStore: FComponentsStore,\n ) {\n super(elementReference);\n }\n\n public ngOnInit(): void {\n this.fComponentsStore.fTempConnection = this;\n }\n\n public ngAfterViewInit(): void {\n this.hide();\n }\n\n public ngOnDestroy(): void {\n this.fComponentsStore.fTempConnection = undefined;\n }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\">\n <defs #defs></defs>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path\n [attr.d]=\"path\">\n </path>\n <circle f-connection-drag-handle r=\"8\"></circle>\n </g>\n <text f-connection-text></text>\n </g>\n <ng-content></ng-content>\n</svg>\n<div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component, ContentChildren,\n ElementRef,\n Input,\n OnDestroy,\n OnInit, QueryList,\n ViewChild\n} from \"@angular/core\";\nimport {\n castToConnectionBehavior, castToConnectionType,\n CONNECTION_GRADIENT,\n CONNECTION_PATH,\n CONNECTION_TEXT,\n FConnectionBase,\n FConnectionDragHandleComponent,\n FConnectionSelectionComponent,\n IConnectionGradient,\n IConnectionPath, IConnectionText,\n} from '../common';\nimport { EFConnectionBehavior } from '../common';\nimport { EFConnectionType } from '../common';\nimport { F_CONNECTION } from '../common/f-connection.injection-token';\nimport { FComponentsStore } from '../../f-components-store';\nimport { F_MARKER, FMarkerBase } from '../f-marker';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"f-connection\",\n exportAs: 'fComponent',\n templateUrl: \"./f-connection.component.html\",\n styleUrls: [ \"./f-connection.component.scss\" ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-connection\",\n '[class.f-connection-disabled]': 'disabled',\n },\n providers: [ { provide: F_CONNECTION, useExisting: FConnectionComponent } ],\n})\nexport class FConnectionComponent\n extends FConnectionBase implements OnInit, OnDestroy {\n\n @Input()\n public override id: string = `f-connection-${ uniqueId++ }`;\n\n @Input()\n public override fText: string = '';\n\n @Input()\n public override fStartColor: string = 'black';\n\n @Input()\n public override fEndColor: string = 'black';\n\n @Input({ required: true })\n public override fOutputId!: string;\n\n @Input({ required: true })\n public override fInputId!: string;\n\n @Input({ transform: castToConnectionBehavior })\n public override set fBehavior(value: EFConnectionBehavior) {\n this._behavior = value;\n }\n\n public override get fBehavior(): EFConnectionBehavior {\n return this._behavior;\n }\n\n private _behavior: EFConnectionBehavior = EFConnectionBehavior.FIXED;\n\n\n @Input({ transform: castToConnectionType })\n public override set fType(value: EFConnectionType) {\n this._type = value;\n }\n\n public override get fType(): EFConnectionType {\n return this._type;\n }\n\n private _type: EFConnectionType = EFConnectionType.STRAIGHT;\n\n @Input()\n public override disabled: boolean = false;\n\n @ViewChild('defs', { static: true })\n public override fDefs!: ElementRef<SVGDefsElement>;\n\n @ContentChildren(F_MARKER, { descendants: true })\n public override fMarkers!: QueryList<FMarkerBase>;\n\n @ViewChild(CONNECTION_PATH, { static: true })\n public override fPath!: IConnectionPath;\n\n @ViewChild(CONNECTION_GRADIENT, { static: true })\n public override fGradient!: IConnectionGradient;\n\n @ViewChild(FConnectionDragHandleComponent, { static: true })\n public override fDragHandle!: FConnectionDragHandleComponent;\n\n @ViewChild(FConnectionSelectionComponent, { static: true })\n public override fSelection!: FConnectionSelectionComponent;\n\n @ViewChild(CONNECTION_TEXT, { static: true })\n public override fTextComponent!: IConnectionText;\n\n @ViewChild('fConnectionCenter', { static: true })\n public override fConnectionCenter!: ElementRef<HTMLDivElement>;\n\n public override get boundingElement(): HTMLElement | SVGElement {\n return this.fPath.hostElement;\n }\n\n constructor(\n elementReference: ElementRef<HTMLElement>,\n private fComponentsStore: FComponentsStore\n ) {\n super(elementReference);\n }\n\n public ngOnInit(): void {\n this.fComponentsStore.addConnection(this);\n }\n\n public ngOnDestroy(): void {\n this.fComponentsStore.removeConnection(this);\n }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"overflow: visible; display: block; vertical-align: middle;\">\n <defs #defs></defs>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path\n [attr.d]=\"path\">\n </path>\n <circle f-connection-drag-handle r=\"8\"></circle>\n </g>\n <text f-connection-text></text>\n </g>\n <ng-content></ng-content>\n</svg>\n<div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n</div>\n","import {\n Directive\n} from \"@angular/core\";\n\n@Directive({\n selector: \"[fConnectionCenter]\",\n standalone: true\n})\nexport class FConnectionCenterDirective {\n}\n","import { EventEmitter, InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IHasHostElement, IPoint, PointExtensions } from '@foblex/core';\nimport { F_SELECTED_CLASS, ISelectable } from '../f-connection';\nimport { IHasStateChanges } from '../i-has-state-changes';\nimport { FConnectorBase } from '../f-connectors';\n\nexport const F_NODE = new InjectionToken<FNodeBase>('F_NODE');\n\nexport abstract class FNodeBase implements IHasStateChanges, ISelectable, IHasHostElement {\n\n public abstract fNodeId: string;\n\n public abstract hostElement: HTMLElement;\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public abstract positionChange: EventEmitter<IPoint>;\n\n public abstract position: IPoint;\n\n protected _position: IPoint = PointExtensions.initialize();\n\n public abstract disabled: boolean;\n\n public abstract refresh(): void;\n\n public abstract connectors: FConnectorBase[];\n\n public abstract addConnector(connector: FConnectorBase): void;\n\n public abstract removeConnector(connector: FConnectorBase): void;\n\n protected abstract setStyle(name: string, value: string): void;\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n\n public redraw(): void {\n this.setStyle('transform', 'translate(' + this.position.x + 'px,' + this.position.y + 'px)');\n }\n\n public deselect(): void {\n this.hostElement.classList.remove(F_SELECTED_CLASS);\n }\n\n public select(): void {\n this.hostElement.classList.add(F_SELECTED_CLASS);\n }\n\n public isSelected(): boolean {\n return this.hostElement.classList.contains(F_SELECTED_CLASS);\n }\n\n public updatePosition(position: IPoint): void {\n this._position = position;\n }\n\n public completeDrag(): void {\n this.positionChange.emit(this.position);\n }\n}\n","import {\n Directive, ElementRef, Inject, InjectionToken, Input, OnDestroy, Optional, SkipSelf\n} from \"@angular/core\";\nimport { Subject } from 'rxjs';\nimport { BooleanExtensions, IHasHostElement } from '@foblex/core';\nimport { F_NODE } from '../f-node-base';\nimport { IHasStateChanges } from '../../i-has-state-changes';\n\nexport const F_DRAG_HANDLE: InjectionToken<FDragHandleDirective> = new InjectionToken<FDragHandleDirective>('F_DRAG_HANDLE');\n\n@Directive({\n selector: \"[fDragHandle]\",\n standalone: true,\n host: {\n class: \"f-drag-handle f-component\",\n '[class.f-drag-handle-disabled]': 'disabled'\n },\n providers: [ { provide: F_DRAG_HANDLE, useExisting: FDragHandleDirective } ],\n})\nexport class FDragHandleDirective implements IHasHostElement, IHasStateChanges, OnDestroy {\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public _parentNode: {} | undefined;\n\n @Input('fDragHandleDisabled')\n public get disabled(): boolean {\n return this.isDisabled;\n }\n\n public set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n public get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_NODE) @Optional() @SkipSelf() _parentNode?: any,\n ) {\n this._parentNode = _parentNode;\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","export function isNodeDragHandle(element: HTMLElement | SVGElement): boolean {\n const dragHandle = getClosestDragHandle(element);\n return !!dragHandle && !isElementOrParentExcluded(element);\n}\n\nfunction isElementOrParentExcluded(element: HTMLElement | SVGElement): boolean {\n const isContains = isElementContainsClass(element);\n const parentElement = (element.parentElement as HTMLElement);\n const dragHandle = getClosestDragHandle(parentElement);\n if (!isContains && !!dragHandle) {\n return isElementOrParentExcluded(parentElement);\n }\n return isContains;\n}\n\nfunction getClosestDragHandle(element: HTMLElement | SVGElement): HTMLElement {\n return element.closest('.f-drag-handle') as HTMLElement;\n}\n\nfunction isElementContainsClass(element: HTMLElement | SVGElement): boolean {\n return element.classList.contains('f-drag-handle-disabled');\n}\n","import { Observable } from 'rxjs';\n\nexport class FResizeObserver extends Observable<ResizeObserverEntry[]> {\n\n constructor(element: HTMLElement) {\n super(subscriber => {\n const observer = new ResizeObserver(entries => {\n subscriber.next(entries);\n });\n\n observer.observe(element);\n\n return function unsubscribe() {\n observer.unobserve(element);\n observer.disconnect();\n }\n });\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n} from \"@angular/core\";\nimport { IHasHostElement, IPoint, PointExtensions, PointInput } from '@foblex/core';\nimport { F_NODE, FNodeBase } from './f-node-base';\nimport { startWith, Subscription } from 'rxjs';\nimport { FResizeObserver } from './f-resize-observer';\nimport { FComponentsStore } from '../f-components-store';\nimport {\n CalculateConnectorConnectableSideHandler,\n CalculateConnectorConnectableSideRequest,\n FConnectorBase\n} from '../f-connectors';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNode]\",\n exportAs: \"fComponent\",\n host: {\n '[attr.id]': 'fNodeId',\n class: \"f-node f-component\",\n '[class.f-node-disabled]': 'disabled'\n },\n providers: [\n { provide: F_NODE, useExisting: FNodeDirective }\n ],\n})\nexport class FNodeDirective extends FNodeBase implements OnInit, AfterViewInit, IHasHostElement, OnDestroy {\n\n private subscriptions$: Subscription = new Subscription();\n\n @Input()\n public override fNodeId: string = `f-node-${ uniqueId++ }`;\n\n @Input('fNodePosition')\n public override set position(value: PointInput) {\n this._position = PointExtensions.castToPoint(value);\n this.refresh();\n }\n\n public override get position(): IPoint {\n return this._position;\n }\n\n @Output('fNodePositionChange')\n public override positionChange: EventEmitter<IPoint> = new EventEmitter<IPoint>();\n\n @Input()\n public override disabled: boolean = false;\n\n public get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n public override connectors: FConnectorBase[] = [];\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n private fComponentsStore: FComponentsStore\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setStyle('position', 'absolute');\n this.setStyle('transform-origin', '0 0');\n this.setStyle('user-select', 'none');\n this.setStyle('pointer-events', 'all');\n this.setStyle('left', '0');\n this.setStyle('top', '0');\n super.redraw();\n this.fComponentsStore.addNode(this);\n }\n\n protected override setStyle(styleName: string, value: string) {\n this.renderer.setStyle(this.hostElement, styleName, value);\n }\n\n public ngAfterViewInit(): void {\n this.subscriptions$.add(\n this.subscribeOnResizeChanges()\n );\n }\n\n private subscribeOnResizeChanges(): Subscription {\n return new FResizeObserver(this.hostElement as HTMLElement).pipe(startWith(null)).subscribe(() => {\n this.connectors.forEach((fConnector: FConnectorBase) => {\n\n fConnector.fConnectableSide = new CalculateConnectorConnectableSideHandler().handle(\n new CalculateConnectorConnectableSideRequest(fConnector, this.hostElement)\n );\n });\n this.fComponentsStore.changes.next();\n });\n }\n\n public override addConnector(connector: FConnectorBase): void {\n this.connectors.push(connector);\n }\n\n public override removeConnector(connector: FConnectorBase): void {\n const index = this.connectors.indexOf(connector);\n if (index !== -1) {\n this.connectors.splice(index, 1);\n }\n }\n\n public refresh(): void {\n this.stateChanges.next();\n }\n\n public ngOnDestroy(): void {\n this.fComponentsStore.removeNode(this);\n this.stateChanges.complete();\n this.subscriptions$.unsubscribe();\n }\n}\n","export function isNode(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNode]');\n}\n\n","import { EventExtensions, IPoint, Point, RectExtensions } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { isNode } from '../../f-node';\nimport { FCanvasBase } from '../f-canvas-base';\n\nexport const F_ZOOM = new InjectionToken<FZoomBase>('F_ZOOM');\n\nexport abstract class FZoomBase {\n\n protected isEnabled: boolean = false;\n\n public abstract minimum: number;\n public abstract maximum: number;\n\n public abstract step: number;\n public abstract dblClickStep: number;\n\n private listeners: Function = EventExtensions.emptyListener();\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.flowHost;\n }\n\n private get fCanvas(): FCanvasBase {\n return this.fComponentsStore.fCanvas as FCanvasBase;\n }\n\n protected constructor(\n protected fComponentsStore: FComponentsStore\n ) {\n }\n\n protected toggleZoom(): void {\n if (this.isEnabled) {\n this.subscribe();\n } else {\n this.unsubscribe();\n }\n }\n\n private subscribe(): void {\n this.listeners();\n if (!this.flowHost) {\n return;\n }\n\n this.flowHost.addEventListener('wheel', this.onWheel.bind(this));\n this.flowHost.addEventListener('dblclick', this.onDoubleClick.bind(this));\n this.listeners = () => {\n this.flowHost.removeEventListener('wheel', this.onWheel.bind(this));\n this.flowHost.removeEventListener('dblclick', this.onDoubleClick.bind(this));\n };\n }\n\n public getScale(): number {\n return this.fCanvas.transform.scale || 1;\n }\n\n private onWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (this.fComponentsStore.fDraggable?.isDragStarted) {\n return;\n }\n\n let result: number = this.getScale();\n\n const direction = event.deltaY > 0 ? -1 : 1;\n const step = this.step;\n result = result + step * direction;\n\n result = Math.max(this.minimum, Math.min(result, this.maximum));\n\n const pointerPositionInFlow = new Point(event.clientX, event.clientY).elementTransform(this.flowHost);\n\n this.fCanvas.setZoom(result, pointerPositionInFlow);\n this.fCanvas.redraw();\n this.fCanvas.completeDrag();\n }\n\n private onDoubleClick(event: MouseEvent): void {\n event.preventDefault();\n\n if (this.fComponentsStore.fDraggable?.isDragStarted || isNode(event.target as HTMLElement)) {\n return;\n }\n\n let result: number = this.getScale();\n\n const direction = 1;\n const step = this.dblClickStep;\n result = result + step * direction;\n\n result = Math.max(this.minimum, Math.min(result, this.maximum));\n\n const pointerPositionInFlow = new Point(event.clientX, event.clientY).elementTransform(this.flowHost);\n this.fCanvas.setZoom(result, pointerPositionInFlow);\n this.fCanvas.redrawWithAnimation();\n this.fCanvas.completeDrag();\n }\n\n private onZoomToCenter(deltaY: number, position?: IPoint): void {\n const preventDefault = () => {\n };\n const rect = RectExtensions.fromElement(this.flowHost);\n\n this.onWheel({\n deltaY, preventDefault, clientX: position?.x || rect.gravityCenter.x, clientY: position?.y || rect.gravityCenter.y\n } as WheelEvent);\n }\n\n public zoomIn(position?: IPoint): void {\n this.onZoomToCenter(-1, position);\n }\n\n public zoomOut(position?: IPoint): void {\n this.onZoomToCenter(1, position);\n }\n\n public reset(): void {\n this.fCanvas.resetZoom();\n this.fCanvas.redraw();\n this.fCanvas.completeDrag();\n }\n\n protected unsubscribe(): void {\n this.listeners();\n this.listeners = EventExtensions.emptyListener();\n }\n}\n","import {\n AfterViewInit,\n Directive, Input, OnDestroy\n} from \"@angular/core\";\nimport { BooleanExtensions } from '@foblex/core';\nimport { F_ZOOM, FZoomBase } from './f-zoom-base';\nimport { FComponentsStore } from '../../f-components-store';\n\n@Directive({\n selector: \"f-canvas[fZoom]\",\n exportAs: 'fComponent',\n host: {\n 'class': 'f-zoom f-component'\n },\n providers: [ { provide: F_ZOOM, useExisting: FZoomDirective } ],\n})\nexport class FZoomDirective extends FZoomBase implements AfterViewInit, OnDestroy {\n\n @Input('fZoom')\n public get fFlowZoom(): boolean {\n return this.isEnabled;\n }\n\n public set fFlowZoom(isEnabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isEnabled);\n if (value !== this.isEnabled) {\n this.isEnabled = value;\n this.toggleZoom();\n }\n }\n\n @Input('fZoomMinimum')\n public override minimum: number = 0.1;\n\n @Input('fZoomMaximum')\n public override maximum: number = 4;\n\n @Input('fZoomStep')\n public override step: number = 0.1;\n\n @Input('fZoomDblClickStep')\n public override dblClickStep: number = 0.5;\n\n constructor(\n fComponentsStore: FComponentsStore,\n ) {\n super(fComponentsStore);\n }\n\n public ngAfterViewInit(): void {\n super.toggleZoom();\n }\n\n public ngOnDestroy(): void {\n super.unsubscribe();\n }\n}\n","import {\n IHasHostElement,\n ITransformModel, PointExtensions,\n TransformModelExtensions\n} from '@foblex/core';\nimport { Directive, ElementRef, EventEmitter, InjectionToken } from '@angular/core';\nimport {\n ICanChangePosition, ICanChangeZoom, ICanFitToParent, ICanOneToOneCentering,\n mixinChangePosition,\n mixinChangeZoom,\n mixinFitToParent,\n mixinOneToOneCentering\n} from '../common-behaviours';\nimport { FCanvasChangeEvent } from './domain/f-canvas-change.event';\nimport { FNodeBase } from '../f-node';\n\nexport const F_CANVAS = new InjectionToken<FCanvasBase>('F_CANVAS');\n\nconst MIXIN_BASE = mixinChangePosition(\n mixinFitToParent(\n mixinOneToOneCentering(\n mixinChangeZoom(\n class {\n constructor(\n public transform: ITransformModel\n ) {\n }\n }))));\n\n@Directive()\nexport abstract class FCanvasBase\n extends MIXIN_BASE\n implements IHasHostElement, ICanChangePosition, ICanFitToParent, ICanOneToOneCentering, ICanChangeZoom {\n\n public abstract fCanvasChange: EventEmitter<FCanvasChangeEvent>;\n\n public abstract fNodes: FNodeBase[];\n\n public abstract hostElement: HTMLElement;\n\n public abstract fNodesContainer: ElementRef<HTMLElement>;\n\n public abstract fConnectionsContainer: ElementRef<HTMLElement>;\n\n protected constructor() {\n super(TransformModelExtensions.default());\n }\n\n public abstract redraw(): void;\n\n public abstract redrawWithAnimation(): void;\n\n public completeDrag(): void {\n const position = PointExtensions.sum(this.transform.position, this.transform.scaledPosition);\n this.fCanvasChange.emit(\n new FCanvasChangeEvent(position, this.transform.scale)\n );\n }\n}\n","import { IHandler, IPoint, IRect, IVector, Point, RectExtensions } from '@foblex/core';\nimport { GetConnectionVectorRequest } from './get-connection-vector.request';\nimport { Injectable } from '@angular/core';\nimport { EFConnectionBehavior } from '../../f-connection';\nimport { EFConnectableSide } from '../../f-connectors';\n\n@Injectable()\nexport class GetConnectionVectorHandler implements IHandler<GetConnectionVectorRequest, IVector> {\n\n private behaviorHandlers = {\n\n [ EFConnectionBehavior.FLOATING.toString() ]: this.floatingBehavior,\n\n // [EFConnectionBehavior.FIXED.toString()]: this.fixedBehavior,\n\n [ EFConnectionBehavior.FIXED.toString() ]: this.fixedOutboundBehaviour,\n }\n\n public handle(payload: GetConnectionVectorRequest): IVector {\n\n const result = this.behaviorHandlers[ payload.behavior ](payload);\n\n return result;\n }\n\n private floatingBehavior(payload: GetConnectionVectorRequest): IVector {\n const fromResult = RectExtensions.intersectionWithVector(payload.outputRect, payload.outputRect.gravityCenter, payload.inputRect.gravityCenter);\n const toResult = RectExtensions.intersectionWithVector(payload.inputRect, payload.outputRect.gravityCenter, payload.inputRect.gravityCenter);\n\n return {\n point1: fromResult ? fromResult[ 1 ] : payload.outputRect.gravityCenter,\n point2: toResult ? toResult[ 0 ] : payload.inputRect.gravityCenter,\n }\n }\n\n private fixedBehavior(payload: GetConnectionVectorRequest): IVector {\n return {\n point1: payload.outputRect.gravityCenter,\n point2: payload.inputRect.gravityCenter,\n }\n }\n\n private fixedOutboundBehaviour(payload: GetConnectionVectorRequest): IVector {\n const point1 = positionFixedOutbound[ payload.outputSide === EFConnectableSide.AUTO ? EFConnectableSide.BOTTOM : payload.outputSide ](payload.outputRect);\n const point2 = positionFixedOutbound[ payload.inputSide === EFConnectableSide.AUTO ? EFConnectableSide.TOP : payload.inputSide ](payload.inputRect);\n\n return {\n point1: point1,\n point2: point2,\n }\n }\n}\n\nconst positionFixedOutbound = {\n [ EFConnectableSide.TOP ]: (rect: IRect): IPoint => {\n const result = new Point();\n result.y = rect.y;\n result.x = rect.x + rect.width / 2;\n return result;\n },\n [ EFConnectableSide.BOTTOM ]: (rect: IRect): IPoint => {\n const result = new Point();\n result.y = rect.y + rect.height;\n result.x = rect.x + rect.width / 2;\n return result;\n },\n [ EFConnectableSide.LEFT ]: (rect: IRect): IPoint => {\n const result = new Point();\n result.x = rect.x;\n result.y = rect.y + rect.height / 2;\n return result;\n },\n [ EFConnectableSide.RIGHT ]: (rect: IRect): IPoint => {\n const result = new Point();\n result.x = rect.x + rect.width;\n result.y = rect.y + rect.height / 2;\n return result;\n },\n};\n\n\n\n\n","import { IRect } from '@foblex/core';\nimport { EFConnectionBehavior } from '../../f-connection';\nimport { EFConnectableSide } from '../../f-connectors';\n\nexport class GetConnectionVectorRequest {\n\n constructor(\n public outputRect: IRect,\n public inputRect: IRect,\n public behavior: EFConnectionBehavior | string,\n public outputSide: EFConnectableSide,\n public inputSide: EFConnectableSide,\n ) {\n\n }\n}\n","export function OutputNotFound(outputId: any): Error {\n return new Error(`Output with id ${ outputId } not found`);\n}\n\nexport function InputNotFound(inputId: any): Error {\n return new Error(`Input with id ${ inputId } not found`);\n}\n\nexport function requiredOutput(): Error {\n return new Error(`The node must contain at least one fOutput if there is an fOutlet`);\n}\n","import { IHandler, IRect, RectExtensions } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\n\n@Injectable()\nexport class GetAllNodesRectHandler implements IHandler<void, IRect> {\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(): IRect {\n const fNodes = this.fComponentsStore.fNodes;\n const rects = fNodes.map((x) => {\n return RectExtensions.fromElement(x.hostElement);\n });\n const result = RectExtensions.union(rects);\n return result;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FConnectionBase } from '../f-connection';\n\n@Injectable()\nexport class GetConnectionHandler implements IHandler<HTMLElement | SVGElement, FConnectionBase | undefined> {\n\n private get fConnections(): FConnectionBase[] {\n return this.fComponentsStore.fConnections;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(element: HTMLElement | SVGElement): FConnectionBase | undefined {\n const result = this.fConnections.find(c => c.isContains(element));\n return result;\n }\n}\n","import { IHandler, IRect, ITransformModel, Point, RectExtensions, SizeExtensions } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\n\n@Injectable()\nexport class GetElementRectInFlowHandler implements IHandler<HTMLElement | SVGElement, IRect> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.flowHost;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(element: HTMLElement | SVGElement): IRect {\n\n const systemRect = RectExtensions.fromElement(element);\n\n const position = Point.fromPoint(systemRect).elementTransform(this.flowHost).sub(this.transform.scaledPosition).sub(this.transform.position).div(this.transform.scale);\n\n const size = SizeExtensions.initialize(systemRect.width / this.transform.scale, systemRect.height / this.transform.scale);\n\n const result = RectExtensions.initialize(position.x, position.y, size.width, size.height);\n\n return result;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FConnectionBase } from '../f-connection';\nimport { FConnectorBase } from '../f-connectors';\n\n@Injectable()\nexport class GetIncomingConnectionsHandler implements IHandler<FConnectorBase[], FConnectionBase[]> {\n\n private get fConnections(): FConnectionBase[] {\n return this.fComponentsStore.fConnections;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(inputs: FConnectorBase[]): FConnectionBase[] {\n const inputsIds = inputs.map((x) => x.id);\n return this.fConnections.filter((x) => {\n return inputsIds.includes(x.fInputId);\n })!;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FConnectionBase } from '../f-connection';\nimport { FConnectorBase } from '../f-connectors';\n\n@Injectable()\nexport class GetOutgoingConnectionsHandler implements IHandler<FConnectorBase[], FConnectionBase[]> {\n\n private get fConnections(): FConnectionBase[] {\n return this.fComponentsStore.fConnections;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(outputs: FConnectorBase[]): FConnectionBase[] {\n const outputsIds = outputs.map((x) => x.id);\n return this.fConnections.filter((x) => {\n return outputsIds.includes(x.fOutputId);\n })!;\n }\n}\n","import { IHandler, IRect } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { GetElementRectInFlowHandler } from './get-element-rect-in-flow.handler';\nimport { InputNotFound } from './errors';\nimport { EFConnectableSide } from '../f-connectors';\n\n@Injectable()\nexport class GetInputRectInFlowHandler implements IHandler<string, { rect: IRect, fConnectableSide: EFConnectableSide }> {\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler\n ) {\n }\n\n public handle(inputId: string): { rect: IRect, fConnectableSide: EFConnectableSide } {\n\n const input = this.fComponentsStore.fInputs.find((x) => x.id === inputId);\n\n if (!input) {\n throw InputNotFound(inputId);\n }\n\n const result = this.getElementRectInFlowHandler.handle(input.hostElement)\n\n return { rect: result, fConnectableSide: input.fConnectableSide };\n }\n}\n","import { IHandler, IRect } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { GetElementRectInFlowHandler } from './get-element-rect-in-flow.handler';\nimport { OutputNotFound } from './errors';\nimport { EFConnectableSide } from '../f-connectors';\n\n@Injectable()\nexport class GetOutputRectInFlowHandler implements IHandler<string, { rect: IRect, fConnectableSide: EFConnectableSide }> {\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler\n ) {\n }\n\n public handle(outputId: string): { rect: IRect, fConnectableSide: EFConnectableSide } {\n\n const output = this.fComponentsStore.fOutputs.find((x) => x.id === outputId);\n\n if (!output) {\n throw OutputNotFound(outputId);\n }\n\n const result = this.getElementRectInFlowHandler.handle(output.hostElement)\n\n return { rect: result, fConnectableSide: output.fConnectableSide };\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FNodeBase } from '../f-node';\n\n@Injectable()\nexport class UpdateNodeLayerHandler implements IHandler<FNodeBase, void> {\n\n private get fNodesContainer(): HTMLElement {\n return this.fComponentsStore.fCanvas?.fNodesContainer?.nativeElement!;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(node: FNodeBase): void {\n const elements = Array.from(this.fNodesContainer.children);\n const elementsCount = elements.length;\n const targetIndex: number = elements.findIndex((x) => x === node.hostElement);\n if (targetIndex !== elementsCount - 1) {\n const afterElements = elements.splice(targetIndex + 1);\n afterElements.forEach((x) => {\n this.fNodesContainer.removeChild(x);\n this.fNodesContainer.insertBefore(x, node.hostElement);\n });\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Point } from '@foblex/core';\nimport { IDraggableItem } from './i-draggable-item';\nimport { FLineAlignmentBase, FSelectionAreaBase } from './components';\nimport { ISelectable } from '../f-connection';\n\n@Injectable()\nexport class FDraggableDataContext {\n\n public selectedItems: ISelectable[] = [];\n\n public isSelectedChanged: boolean = false;\n\n public onPointerDownScale: number = 1;\n\n public onPointerDownPosition: Point = new Point(0, 0);\n\n public draggableItems: IDraggableItem[] = [];\n\n public fSelectionArea: FSelectionAreaBase | undefined;\n\n public fLineAlignment: FLineAlignmentBase | undefined;\n\n public reset(): void {\n this.draggableItems = [];\n this.onPointerDownScale = 1;\n this.onPointerDownPosition = new Point(0, 0);\n this.isSelectedChanged = false;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable/f-draggable-data-context';\n\n@Injectable()\nexport class SelectAllHandler implements IHandler<void, void> {\n\n constructor(\n private fDataContext: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n ) {\n }\n\n public handle(): void {\n this.fDraggableDataContext.selectedItems.forEach((x) => {\n x.deselect();\n });\n this.fDraggableDataContext.selectedItems = [];\n this.fDataContext.fNodes.forEach((x) => {\n x.select();\n this.fDraggableDataContext.selectedItems.push(x);\n });\n this.fDataContext.fConnections.forEach((x) => {\n x.select();\n this.fDraggableDataContext.selectedItems.push(x);\n });\n this.fDraggableDataContext.isSelectedChanged = true;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FConnectionBase } from '../f-connection';\n\n@Injectable()\nexport class UpdateConnectionLayerHandler implements IHandler<FConnectionBase, void> {\n\n private get fConnectionsContainer(): HTMLElement {\n return this.fComponentsStore.fCanvas?.fConnectionsContainer?.nativeElement!;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(connection: FConnectionBase): void {\n const elements = Array.from(this.fConnectionsContainer.children);\n const elementsCount = elements.length;\n const targetIndex: number = elements.findIndex((x) => x === connection.hostElement);\n if (targetIndex !== elementsCount - 1) {\n const afterElements = elements.splice(targetIndex + 1);\n afterElements.forEach((x) => {\n this.fConnectionsContainer.removeChild(x);\n this.fConnectionsContainer.insertBefore(x, connection.hostElement);\n });\n }\n }\n}\n","import { GetElementRectInFlowHandler } from './get-element-rect-in-flow.handler';\nimport { GetIncomingConnectionsHandler } from './get-incoming-connections.handler';\nimport { GetOutgoingConnectionsHandler } from './get-outgoing-connections.handler';\nimport { GetConnectionHandler } from './get-connection.handler';\nimport { GetAllNodesRectHandler } from './get-all-nodes-rect.handler';\nimport { GetOutputRectInFlowHandler } from './get-output-rect-in-flow.handler';\nimport { GetInputRectInFlowHandler } from './get-input-rect-in-flow.handler';\nimport { GetConnectionVectorHandler } from './get-connection-vector';\nimport { UpdateNodeLayerHandler } from './update-node-layer.handler';\nimport { SelectAllHandler } from './select-all.handler';\nimport { UpdateConnectionLayerHandler } from './update-connection-layer.handler';\n\nexport const COMMON_PROVIDERS = [\n\n GetAllNodesRectHandler,\n\n GetConnectionVectorHandler,\n\n GetConnectionHandler,\n\n GetElementRectInFlowHandler,\n\n GetOutputRectInFlowHandler,\n\n GetInputRectInFlowHandler,\n\n GetIncomingConnectionsHandler,\n\n GetOutgoingConnectionsHandler,\n\n SelectAllHandler,\n\n UpdateConnectionLayerHandler,\n\n UpdateNodeLayerHandler,\n];\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild,\n} from \"@angular/core\";\nimport {\n FCanvasBase, F_CANVAS\n} from './f-canvas-base';\nimport { IPoint, Point, PointExtensions, RectExtensions, TransformModelExtensions } from '@foblex/core';\nimport { FCanvasChangeEvent } from './domain';\nimport { FComponentsStore } from '../f-components-store';\nimport { GetAllNodesRectHandler, SelectAllHandler } from '../domain';\nimport { FNodeBase } from '../f-node';\n\n@Component({\n selector: 'f-canvas',\n templateUrl: './f-canvas.component.html',\n styleUrls: [ './f-canvas.component.scss' ],\n exportAs: 'fComponent',\n host: {\n 'class': 'f-component f-canvas',\n },\n providers: [ { provide: F_CANVAS, useExisting: FCanvasComponent } ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FCanvasComponent extends FCanvasBase implements OnInit {\n\n @Output()\n public override fCanvasChange: EventEmitter<FCanvasChangeEvent> = new EventEmitter<FCanvasChangeEvent>();\n\n @Input()\n public set position(value: IPoint | undefined) {\n if (!value) {\n return;\n }\n const position = PointExtensions.sum(this.transform.position, this.transform.scaledPosition);\n if (!PointExtensions.isEqual(position, value)) {\n this.transform.position = value;\n this.transform.scaledPosition = PointExtensions.initialize();\n this.redraw();\n }\n }\n\n @Input()\n public set scale(value: number | undefined) {\n if (!value) {\n return;\n }\n this.transform.scale = value;\n this.redraw();\n }\n\n public override get fNodes(): FNodeBase[] {\n return this.fComponentsStore.fNodes;\n }\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n @ViewChild('fNodesContainer', { static: true })\n public override fNodesContainer!: ElementRef<HTMLElement>;\n\n @ViewChild('fConnectionsContainer', { static: true })\n public override fConnectionsContainer!: ElementRef<HTMLElement>;\n\n constructor(\n private getAllNodesRectHandler: GetAllNodesRectHandler,\n private selectAllHandler: SelectAllHandler,\n private elementReference: ElementRef<HTMLElement>,\n private fComponentsStore: FComponentsStore\n ) {\n super();\n }\n\n public ngOnInit() {\n this.fComponentsStore.fCanvas = this;\n }\n\n public override redraw(): void {\n this.fComponentsStore.fBackground?.setTransform(this.transform);\n this.hostElement.setAttribute(\"style\", `transform: ${ TransformModelExtensions.toString(this.transform) }`);\n }\n\n public override redrawWithAnimation(): void {\n this.fComponentsStore.fBackground?.setTransform(this.transform);\n this.hostElement.setAttribute(\"style\", `transition: transform 0.15s ease-in-out; transform: ${ TransformModelExtensions.toString(this.transform) }`);\n setTimeout(() => {\n this.redraw();\n }, 150);\n }\n\n public fitToScreen(toCenter: IPoint = PointExtensions.initialize(), animated: boolean = true): void {\n const fNodesRect = this.getAllNodesRectHandler.handle();\n\n const rect = RectExtensions.addPointToSize(\n fNodesRect,\n Point.fromPoint(toCenter).mult(2)\n );\n this.fitToParent(\n rect,\n RectExtensions.fromElement(this.fComponentsStore.fFlow!.hostElement),\n this.fNodes.map((x) => {\n return Point.fromPoint(x.position).sub(toCenter)\n })\n );\n animated ? this.redrawWithAnimation() : this.redraw();\n this.completeDrag();\n }\n\n public oneToOne(): void {\n const fNodesRect = this.getAllNodesRectHandler.handle();\n this.oneToOneCentering(\n fNodesRect,\n RectExtensions.fromElement(this.fComponentsStore.fFlow!.hostElement),\n this.fNodes.map((x) => {\n return Point.fromPoint(x.position).sub(new Point(0, 0))\n })\n );\n this.redrawWithAnimation();\n this.completeDrag();\n }\n\n public selectAll(): void {\n this.selectAllHandler.handle();\n }\n}\n","<ng-container>\n <div #fConnectionsContainer>\n <ng-content select=\"f-connection\"></ng-content>\n <ng-content select=\"f-connection-for-create\"></ng-content>\n </div>\n <div #fNodesContainer>\n <ng-content select=\"[fNode]\"></ng-content>\n </div>\n</ng-container>\n","export enum EFDraggableType {\n\n NODE = 'node',\n\n REASSIGN_CONNECTION = 'reassign-connection',\n\n CREATE_CONNECTION = 'create-connection',\n\n CONNECTION = 'connection',\n\n CANVAS = 'canvas',\n\n PALETTE_ITEM = 'palette-item',\n\n SELECTION = 'selection'\n}\n","import { IPoint, Point, PointExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { FComponentsStore } from '../../f-components-store';\n\nexport class CanvasDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.CANVAS;\n\n private onPointerDownPosition: IPoint = PointExtensions.initialize();\n\n constructor(\n private fComponentsStore: FComponentsStore\n ) {\n }\n\n public initialize(): void {\n this.onPointerDownPosition = this.fComponentsStore.fCanvas!.transform.position;\n }\n\n public move(difference: IPoint): void {\n this.fComponentsStore.fCanvas!.setPosition(Point.fromPoint(this.onPointerDownPosition).add(difference));\n this.fComponentsStore.fCanvas!.redraw();\n }\n\n public complete(): void {\n this.fComponentsStore.fCanvas!.completeDrag();\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { EFDraggableType } from '../e-f-draggable-type';\n\n@Injectable()\nexport class CanvasOnPointerUp implements IHandler<IPointerEvent, void> {\n\n constructor(\n private fDraggableDataContext: FDraggableDataContext,\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const isDragCanvas = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.CANVAS);\n\n if (isDragCanvas) {\n this.fDraggableDataContext.draggableItems.forEach((x) => {\n x.complete?.();\n });\n }\n }\n}\n","import { IHandler, IPointerEvent, Point } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { CanvasDragHandler } from './canvas.drag-handler';\n\n@Injectable()\nexport class CanvasPrepareDragSequence implements IHandler<IPointerEvent, void> {\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n\n const isBackgroundElement = this.fComponentsStore.fBackground?.isBackgroundElement(event.targetElement);\n const isFlowHost = this.flowHost.contains(event.targetElement);\n let node = this.fComponentsStore.findNode(event.targetElement);\n if (node && node.disabled) {\n node = undefined;\n }\n\n if ((isBackgroundElement || (isFlowHost && !node)) && !this.fDraggableDataContext.draggableItems.length) {\n this.fDraggableDataContext.onPointerDownScale = 1;\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInFlow.div(1);\n this.fDraggableDataContext.draggableItems = [\n new CanvasDragHandler(this.fComponentsStore)\n ];\n }\n }\n}\n","import { CanvasOnPointerUp } from './canvas.on-pointer-up';\nimport { CanvasPrepareDragSequence } from './canvas.prepare-drag-sequence';\n\nexport const CANVAS_PROVIDERS = [\n\n CanvasOnPointerUp,\n\n CanvasPrepareDragSequence\n];\n","import { IHasHostElement } from '@foblex/core';\nimport { Directive, InjectionToken } from '@angular/core';\n\nexport const F_EXTERNAL_ITEM = new InjectionToken<FExternalItemBase>('F_EXTERNAL_ITEM');\n\n@Directive()\nexport abstract class FExternalItemBase implements IHasHostElement {\n\n public abstract id: any;\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public abstract data: any;\n}\n","export function isExternalItem(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fExternalItem]');\n}\n\nexport function getExternalItem(element: HTMLElement | SVGElement): HTMLElement | SVGElement {\n return element.closest('[fExternalItem]') as HTMLElement | SVGElement;\n}\n","import { Injectable } from '@angular/core';\nimport { FExternalItemBase } from './f-external-item-base';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FExternalItemService {\n\n private items: FExternalItemBase[] = [];\n\n public registerItem(item: FExternalItemBase): void {\n this.items.push(item);\n }\n\n public getItem(element: HTMLElement | SVGElement): FExternalItemBase | undefined {\n return this.items.find(item => item.hostElement === element);\n }\n\n public removeItem(item: FExternalItemBase): void {\n const index = this.items.indexOf(item);\n if (index !== -1) {\n this.items.splice(index, 1);\n }\n }\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FExternalItemBase, F_EXTERNAL_ITEM } from './f-external-item-base';\nimport { FExternalItemService } from './f-external-item.service';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fExternalItem]\",\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-external-item\",\n },\n providers: [\n { provide: F_EXTERNAL_ITEM, useExisting: FExternalItemDirective }\n ],\n})\nexport class FExternalItemDirective extends FExternalItemBase implements OnInit, OnDestroy {\n\n @Input()\n public override id: string = `f-external-item-${ uniqueId++ }`;\n\n public override get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n @Input()\n public override data: any;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fExternalItemService: FExternalItemService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.fExternalItemService.registerItem(this);\n }\n\n public ngOnDestroy(): void {\n this.fExternalItemService.removeItem(this);\n }\n}\n","import { DomElementExtensions } from '@foblex/core';\nimport { ILineAlignmentRect } from './i-line-alignment-rect';\n\nexport class LineElement {\n\n private readonly element: HTMLElement = DomElementExtensions.createHtmlElement('div');\n\n constructor(\n private readonly hostElement: HTMLElement,\n ) {\n this.hostElement.appendChild(this.element);\n this.element.classList.add('f-line');\n }\n\n public hide(): void {\n this.element.style.display = 'none';\n }\n\n public show(): void {\n this.element.style.display = 'block'\n }\n\n public draw(object: Partial<ILineAlignmentRect>): void {\n this.element.style.position = 'absolute';\n Object.keys(object).forEach((key: string) => {\n // @ts-ignore\n this.element.style[ key ] = object[ key ] + 'px';\n });\n }\n}\n","import { ISize, ITransformModel } from '@foblex/core';\nimport { LineElement } from './line-element';\n\nexport class LineService {\n\n private fHorizontalLine: LineElement;\n private fVerticalLine: LineElement;\n\n constructor(private hostElement: HTMLElement) {\n this.fHorizontalLine = new LineElement(this.hostElement);\n this.fVerticalLine = new LineElement(this.hostElement);\n }\n\n public drawVerticalLine(x: number, size: ISize, transform: ITransformModel): void {\n this.fVerticalLine.show();\n this.fVerticalLine.draw({\n left: x * transform.scale + transform.position.x + transform.scaledPosition.x,\n top: 0,\n width: 1,\n height: size.height\n });\n }\n\n public drawHorizontalLine(y: number, size: ISize, transform: ITransformModel): void {\n this.fHorizontalLine.show();\n this.fHorizontalLine.draw({\n left: 0,\n top: y * transform.scale + transform.position.y + transform.scaledPosition.y,\n width: size.width,\n height: 1\n });\n }\n\n public hideVerticalLine(): void {\n this.fVerticalLine.hide();\n }\n\n public hideHorizontalLine(): void {\n this.fHorizontalLine.hide();\n }\n}\n","import { IRect } from '@foblex/core';\nimport { INearestCoordinateResult } from './i-nearest-coordinate-result';\n\nconst ALIGN_THRESHOLD = 10;\n\n/**\n * A class to find the nearest coordinate.\n */\nexport class NearestCoordinateFinder {\n\n\n private elements: IRect[];\n private target: IRect;\n\n /**\n * Constructor to initialize the NearestCoordinateFinder.\n * @param elements - The array of IRect elements.\n * @param target - The target IRect element.\n */\n constructor(elements: IRect[], target: IRect) {\n this.elements = elements;\n this.target = target;\n }\n\n /**\n * Finds the nearest coordinate on a specified axis.\n * @returns The nearest coordinate and its distance.\n */\n public findNearestCoordinateByX(): INearestCoordinateResult {\n let nearest: number | undefined;\n let minDistance: number | undefined;\n\n for (const element of this.elements) {\n const distanceLeftLeft = this.target.x - element.x;\n const distanceLeftRight = this.target.x - (element.x + element.width);\n const distanceCenterCenter = this.target.gravityCenter.x - element.gravityCenter.x;\n const distanceRightLeft = (this.target.x + this.target.width) - element.x;\n const distanceRightRight = (this.target.x + this.target.width) - (element.x + element.width);\n\n if (\n Math.abs(distanceLeftLeft) <= ALIGN_THRESHOLD ||\n Math.abs(distanceLeftRight) <= ALIGN_THRESHOLD ||\n Math.abs(distanceCenterCenter) <= ALIGN_THRESHOLD ||\n Math.abs(distanceRightLeft) <= ALIGN_THRESHOLD ||\n Math.abs(distanceRightRight) <= ALIGN_THRESHOLD\n ) {\n if (minDistance === undefined || Math.abs(distanceCenterCenter) < Math.abs(minDistance)) {\n minDistance = distanceCenterCenter;\n nearest = element.gravityCenter.x;\n }\n if (Math.abs(distanceLeftLeft) < Math.abs(minDistance)) {\n minDistance = distanceLeftLeft;\n nearest = element.x;\n }\n if (Math.abs(distanceRightRight) < Math.abs(minDistance)) {\n minDistance = distanceRightRight;\n nearest = element.x + element.width;\n }\n if (Math.abs(distanceLeftRight) < Math.abs(minDistance)) {\n minDistance = distanceLeftRight;\n nearest = element.x + element.width;\n }\n if (Math.abs(distanceRightLeft) < Math.abs(minDistance)) {\n minDistance = distanceRightLeft;\n nearest = element.x;\n }\n }\n }\n return { value: nearest, distance: minDistance };\n }\n\n\n /**\n * Finds the nearest coordinate on a specified axis.\n * @returns The nearest coordinate and its distance.\n */\n public findNearestCoordinateByY(): INearestCoordinateResult {\n let nearest: number | undefined;\n let minDistance: number | undefined;\n\n for (const element of this.elements) {\n const distanceTopTop = this.target.y - element.y;\n const distanceTopBottom = this.target.y - (element.y + element.height);\n const distanceCenterCenter = this.target.gravityCenter.y - element.gravityCenter.y;\n const distanceBottomTop = (this.target.y + this.target.height) - element.y;\n const distanceBottomBottom = (this.target.y + this.target.height) - (element.y + element.height);\n\n if (\n Math.abs(distanceTopTop) <= ALIGN_THRESHOLD ||\n Math.abs(distanceTopBottom) <= ALIGN_THRESHOLD ||\n Math.abs(distanceCenterCenter) <= ALIGN_THRESHOLD ||\n Math.abs(distanceBottomTop) <= ALIGN_THRESHOLD ||\n Math.abs(distanceBottomBottom) <= ALIGN_THRESHOLD\n ) {\n if (minDistance === undefined || Math.abs(distanceCenterCenter) < Math.abs(minDistance)) {\n minDistance = distanceCenterCenter;\n nearest = element.gravityCenter.y;\n }\n if (Math.abs(distanceTopTop) < Math.abs(minDistance)) {\n minDistance = distanceTopTop;\n nearest = element.y;\n }\n if (Math.abs(distanceBottomBottom) < Math.abs(minDistance)) {\n minDistance = distanceBottomBottom;\n nearest = element.y + element.height;\n }\n if (Math.abs(distanceTopBottom) < Math.abs(minDistance)) {\n minDistance = distanceTopBottom;\n nearest = element.y + element.height;\n }\n if (Math.abs(distanceBottomTop) < Math.abs(minDistance)) {\n minDistance = distanceBottomTop;\n nearest = element.y;\n }\n }\n }\n\n return { value: nearest, distance: minDistance };\n }\n}\n\n","import { IHasHostElement, IPoint } from '@foblex/core';\nimport { Directive, InjectionToken } from '@angular/core';\nimport { ILineAlignmentResult } from './domain';\nimport { FNodeBase } from '../../../f-node';\n\nexport const F_LINE_ALIGNMENT = new InjectionToken<FLineAlignmentBase>('F_LINE_ALIGNMENT');\n\n@Directive()\nexport abstract class FLineAlignmentBase implements IHasHostElement {\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public abstract initialize(allNodes: FNodeBase[], currentNodes: FNodeBase[]): void;\n\n public abstract findNearestCoordinate(difference: IPoint): ILineAlignmentResult;\n\n public abstract handle(difference: IPoint): void;\n\n public abstract complete(): void;\n}\n","import { Component, ElementRef, OnInit } from '@angular/core';\nimport { IPoint, IRect, ISize, ITransformModel, RectExtensions, SizeExtensions } from '@foblex/core';\nimport { ILineAlignmentResult, LineService, NearestCoordinateFinder } from './domain';\nimport { F_LINE_ALIGNMENT, FLineAlignmentBase } from './f-line-alignment-base';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { GetElementRectInFlowHandler } from '../../../domain';\nimport { FNodeBase } from '../../../f-node';\n\n@Component({\n selector: \"f-line-alignment\",\n template: \"\",\n styleUrls: [ \"./f-line-alignment.component.scss\" ],\n exportAs: \"fComponent\",\n host: {\n 'class': 'f-line-alignment f-component'\n },\n providers: [\n { provide: F_LINE_ALIGNMENT, useExisting: FLineAlignmentComponent }\n ],\n})\nexport class FLineAlignmentComponent extends FLineAlignmentBase implements OnInit {\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n private lineService: LineService;\n\n private size: ISize = SizeExtensions.initialize();\n\n private draggedNodeRect: IRect = RectExtensions.initialize();\n\n private rects: IRect[] = [];\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler\n ) {\n super();\n this.lineService = new LineService(this.hostElement);\n }\n\n public ngOnInit(): void {\n this.fDraggableDataContext.fLineAlignment = this;\n }\n\n public override initialize(allNodes: FNodeBase[], currentNodes: FNodeBase[]): void {\n this.size = this.flowHost.getBoundingClientRect();\n this.rects = [];\n const draggedNodeRects = currentNodes.map((x) => {\n return this.getElementRectInFlowHandler.handle(x.hostElement);\n });\n this.draggedNodeRect = RectExtensions.union(draggedNodeRects);\n\n const allNodesExcludeCurrents = allNodes.filter((x) => {\n return !currentNodes.includes(x);\n });\n\n this.rects = allNodesExcludeCurrents.map((x) => {\n return this.getElementRectInFlowHandler.handle(x.hostElement);\n });\n }\n\n public override handle(difference: IPoint): void {\n this.drawIntersectingLines(difference);\n }\n\n private drawIntersectingLines(difference: IPoint): void {\n const intersect = this.findNearestCoordinate(difference);\n if (intersect.xResult.value !== undefined) {\n this.lineService.drawVerticalLine(intersect.xResult.value, this.size, this.transform);\n } else {\n this.lineService.hideVerticalLine();\n }\n if (intersect.yResult.value !== undefined) {\n this.lineService.drawHorizontalLine(intersect.yResult.value, this.size, this.transform);\n } else {\n this.lineService.hideHorizontalLine();\n }\n }\n\n public findNearestCoordinate(difference: IPoint): ILineAlignmentResult {\n const rect = RectExtensions.addPoint(this.draggedNodeRect, difference);\n const finder = new NearestCoordinateFinder(this.rects, rect);\n const xResult = finder.findNearestCoordinateByX();\n const yResult = finder.findNearestCoordinateByY();\n\n const result: ILineAlignmentResult = { xResult, yResult };\n return result;\n }\n\n public override complete(): void {\n this.lineService.hideVerticalLine();\n this.lineService.hideHorizontalLine();\n }\n}\n","import { IHasHostElement } from '@foblex/core';\nimport { Directive, InjectionToken } from '@angular/core';\nimport { ISelectionAreaRect } from './domain';\n\nexport const F_SELECTION_AREA = new InjectionToken<FSelectionAreaBase>('F_SELECTION_AREA');\n\n@Directive()\nexport abstract class FSelectionAreaBase implements IHasHostElement {\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public abstract hide(): void;\n\n public abstract show(): void;\n\n public abstract draw(object: ISelectionAreaRect): void;\n}\n","import { Component, ElementRef, OnInit } from '@angular/core';\nimport { F_SELECTION_AREA, FSelectionAreaBase } from './f-selection-area-base';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { ISelectionAreaRect } from './domain';\n\n@Component({\n selector: \"f-selection-area\",\n template: ``,\n styleUrls: [ './f-selection-area.component.scss' ],\n host: {\n 'class': 'f-selection-area f-component'\n },\n providers: [\n { provide: F_SELECTION_AREA, useExisting: FSelectionAreaComponent }\n ],\n})\nexport class FSelectionAreaComponent extends FSelectionAreaBase implements OnInit {\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fDraggableDataContext: FDraggableDataContext\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.fDraggableDataContext.fSelectionArea = this;\n this.hostElement.style.display = 'none';\n }\n\n public override hide(): void {\n this.hostElement.style.display = 'none';\n }\n\n public override show(): void {\n this.hostElement.style.display = 'block';\n }\n\n public override draw(object: ISelectionAreaRect): void {\n const style = this.hostElement.style;\n style.left = object.left + 'px';\n style.top = object.top + 'px';\n style.width = object.width + 'px';\n style.height = object.height + 'px';\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../../f-components-store';\nimport { FConnectorBase, FNodeOutletBase } from '../../../../f-connectors';\nimport { FNodeBase } from '../../../../f-node';\n\n@Injectable()\nexport class FindFirstCanBeConnectedOutputByOutletHandler\n implements IHandler<FNodeOutletBase, FConnectorBase | undefined> {\n\n private get fNodes(): FNodeBase[] {\n return this.fComponentsStore.fNodes;\n }\n\n private get fOutputs(): FConnectorBase[] {\n return this.fComponentsStore.fOutputs;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(outlet: FNodeOutletBase): FConnectorBase | undefined {\n let result: FConnectorBase | undefined;\n\n const node = this.fNodes.find((x) => x.isContains(outlet.hostElement));\n if (!node) {\n throw new Error('Node not found');\n }\n\n const outputsOfNode = this.fOutputs.filter((x) => {\n return node.isContains(x.hostElement) && x.canBeConnected;\n });\n\n if (outputsOfNode.length > 0) {\n result = outputsOfNode[ 0 ];\n }\n\n return result;\n }\n}\n","import { IPoint, IRect, Point, RectExtensions, } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EFDraggableType } from '../../e-f-draggable-type';\nimport {\n GetConnectionVectorHandler,\n GetConnectionVectorRequest,\n GetOutputRectInFlowHandler\n} from '../../../domain';\nimport { FConnectionBase } from '../../../f-connection';\nimport { EFConnectableSide } from '../../../f-connectors';\n\nexport class CreateConnectionDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.CREATE_CONNECTION;\n\n private onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n private outputSide: EFConnectableSide = EFConnectableSide.BOTTOM;\n\n constructor(\n private getOutputRectInFlowHandler: GetOutputRectInFlowHandler,\n private getConnectionVectorHandler: GetConnectionVectorHandler,\n public connection: FConnectionBase,\n private mouseDownPoint: IPoint\n ) {\n }\n\n public initialize(): void {\n const outputRect = this.getOutputRectInFlowHandler.handle(this.connection.fOutputId);\n this.outputSide = outputRect.fConnectableSide;\n this.onPointerDownFromConnectorRect = outputRect.rect;\n this.onPointerDownToConnectorRect = RectExtensions.initialize(this.mouseDownPoint.x, this.mouseDownPoint.y, 0, 0);\n (this.connection as FConnectionBase).show();\n this.move(new Point(0, 0));\n }\n\n public move(difference: IPoint): void {\n const toPoint = RectExtensions.addPoint(this.onPointerDownToConnectorRect, difference);\n\n const vector = this.getConnectionVectorHandler.handle(\n new GetConnectionVectorRequest(\n this.onPointerDownFromConnectorRect,\n toPoint,\n this.connection.fBehavior,\n this.outputSide,\n EFConnectableSide.TOP,\n )\n );\n\n this.connection.setVector(vector.point1, this.outputSide, vector.point2, EFConnectableSide.TOP);\n this.connection.redraw();\n }\n\n public complete(): void {\n this.connection.redraw();\n (this.connection as FConnectionBase).hide();\n }\n}\n","export class CreateConnectionEvent<T = any> {\n\n constructor(\n public outputId: T,\n public inputId: T\n ) {\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../../f-components-store';\nimport { FConnectorBase, FNodeInputBase } from '../../../../f-connectors';\nimport { FNodeBase } from '../../../../f-node';\n\n@Injectable()\nexport class FirstNotConnectedInputOfNodeUnderPointerHandler\n implements IHandler<IPointerEvent, FConnectorBase | undefined> {\n\n private get fNodes(): FNodeBase[] {\n return this.fComponentsStore.fNodes;\n }\n\n private get fInputs(): FConnectorBase[] {\n return this.fComponentsStore.fInputs;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore\n ) {\n }\n\n public handle(event: IPointerEvent): FConnectorBase | undefined {\n const position = event.getPosition();\n const elementsFromPoint = document.elementsFromPoint(position.x, position.y) as HTMLElement[];\n\n const nodes = elementsFromPoint.map((element) => {\n return this.fNodes.find((x) => x.isContains(element))\n }).filter((x) => !!x) as FNodeBase[];\n\n const inputs = nodes.map((x) => {\n return this.fInputs.filter((i) => x.isContains(i.hostElement)).find((i) => {\n return !(i as FNodeInputBase).isConnected && i.canBeConnected;\n });\n });\n const result = inputs.find((x) => !!x);\n\n return result;\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../../f-components-store';\nimport { FConnectorBase, isNodeInput } from '../../../../f-connectors';\n\n@Injectable()\nexport class InputsUnderPointerHandler\n implements IHandler<IPointerEvent, FConnectorBase[]> {\n\n private get fInputs(): FConnectorBase[] {\n return this.fComponentsStore.fInputs;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore\n ) {\n }\n\n public handle(event: IPointerEvent): FConnectorBase[] {\n const position = event.getPosition();\n const elementsFromPoint = document.elementsFromPoint(position.x, position.y) as HTMLElement[];\n return elementsFromPoint.filter((x) => isNodeInput(x as HTMLElement)).map((element) => {\n return this.fInputs.find((x) => x.isContains(element))!\n }).filter((x) => !!x);\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { CreateConnectionDragHandler } from '../create-connection';\nimport { ReassignConnectionDragHandler } from '../reassign-connection';\n\nexport class FindInputsUnderPointerRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: CreateConnectionDragHandler | ReassignConnectionDragHandler\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FindInputsUnderPointerRequest } from './find-inputs-under-pointer.request';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { InputsUnderPointerHandler } from './inputs-under-pointer';\nimport { FirstNotConnectedInputOfNodeUnderPointerHandler } from './first-not-connected-input-of-node-under-pointer';\nimport { OutputNotFound } from '../../../domain';\nimport { FNodeBase } from '../../../f-node';\nimport { FConnectorBase } from '../../../f-connectors';\n\n@Injectable()\nexport class FindInputsUnderPointerHandler\n implements IHandler<FindInputsUnderPointerRequest, FConnectorBase[]> {\n\n private get fNodes(): FNodeBase[] {\n return this.fComponentsStore.fNodes;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private inputsUnderPointerHandler: InputsUnderPointerHandler,\n private firstNotConnectedInputOfNodeUnderPointerHandler: FirstNotConnectedInputOfNodeUnderPointerHandler,\n ) {\n }\n\n public handle(payload: FindInputsUnderPointerRequest): FConnectorBase[] {\n const inputsUnderPointer = this.getInputsUnderPointer(payload);\n const output = this.fComponentsStore.fOutputs.find((x) => x.id === payload.dragHandler.connection.fOutputId);\n if (!output) {\n throw OutputNotFound(payload.dragHandler.connection.fOutputId);\n }\n return inputsUnderPointer.filter((x) => {\n const targetNode = this.fNodes.find((y) => y.isContains(x.hostElement));\n const sourceNode = this.fNodes.find((y) => y.isContains(output.hostElement));\n return sourceNode?.hostElement !== targetNode?.hostElement;\n });\n }\n\n private getInputsUnderPointer(payload: FindInputsUnderPointerRequest): FConnectorBase[] {\n let inputs = this.inputsUnderPointerHandler.handle(payload.event);\n\n const input = this.firstNotConnectedInputOfNodeUnderPointerHandler.handle(payload.event);\n\n if (input) {\n inputs.push(input);\n }\n inputs = inputs.filter((x) => x.canBeConnected);\n return inputs;\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { EFDraggableType } from '../../e-f-draggable-type';\nimport { FindInputsUnderPointerHandler, FindInputsUnderPointerRequest } from '../find-inputs-under-pointer';\nimport { CreateConnectionDragHandler } from './create-connection.drag-handler';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FindFirstCanBeConnectedOutputByOutletHandler } from './find-first-can-be-connected-output-by-outlet';\nimport { CreateConnectionEvent } from './create-connection.event';\nimport { OutputNotFound, requiredOutput } from '../../../domain';\nimport { FNodeOutletBase, isNodeOutlet } from '../../../f-connectors';\n\n@Injectable()\nexport class CreateConnectionOnPointerUp\n implements IHandler<IPointerEvent, void> {\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private findInputsUnderPointerHandler: FindInputsUnderPointerHandler,\n private findFirstCanBeConnectedOutputByOutletHandler: FindFirstCanBeConnectedOutputByOutletHandler\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const isCreateConnection = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.CREATE_CONNECTION);\n if (isCreateConnection) {\n const handler = this.fDraggableDataContext.draggableItems[ 0 ] as CreateConnectionDragHandler;\n\n const inputsUnderPointer = this.findInputsUnderPointerHandler.handle(\n new FindInputsUnderPointerRequest(event, handler)\n );\n\n if (inputsUnderPointer.length > 0) {\n let output = this.fComponentsStore.fOutputs.find((x) => x.id === handler.connection.fOutputId);\n if (!output) {\n output = this.fComponentsStore.fOutlets.find((x) => x.id === handler.connection.fOutputId);\n }\n if (!output) {\n throw OutputNotFound(handler.connection.fOutputId);\n }\n\n const isOutlet = isNodeOutlet(output.hostElement);\n if (isOutlet) {\n\n output = this.findFirstCanBeConnectedOutputByOutletHandler.handle(output as FNodeOutletBase);\n if (!output) {\n throw requiredOutput();\n }\n }\n this.fComponentsStore.fDraggable?.fCreateConnection.emit(new CreateConnectionEvent(output.id, inputsUnderPointer[ 0 ]?.id));\n }\n handler.complete();\n }\n }\n}\n","import { IHandler, IPoint, IPointerEvent, ITransformModel, Point } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FindFirstCanBeConnectedOutputByOutletHandler } from './find-first-can-be-connected-output-by-outlet';\nimport { CreateConnectionDragHandler } from './create-connection.drag-handler';\nimport { GetConnectionVectorHandler, GetElementRectInFlowHandler, GetOutputRectInFlowHandler } from '../../../domain';\nimport { FConnectorBase, FNodeOutletBase, isNodeOutlet, isNodeOutput } from '../../../f-connectors';\nimport { FNodeBase } from '../../../f-node';\n\n@Injectable()\nexport class CreateConnectionPrepareDragSequence\n implements IHandler<IPointerEvent, void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler,\n private getConnectionVectorHandler: GetConnectionVectorHandler,\n private findFirstCanBeConnectedOutputByOutletHandler: FindFirstCanBeConnectedOutputByOutletHandler,\n private getOutputRectInFlowHandler: GetOutputRectInFlowHandler,\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n\n const node = this.fComponentsStore.findNode(event.targetElement);\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n if (!node || this.fDraggableDataContext.draggableItems.length || !this.fComponentsStore.fTempConnection) {\n return;\n }\n\n if (isNodeOutlet(event.targetElement)) {\n const outlet = this.fComponentsStore.fOutlets.find((x) => {\n return x.hostElement.contains(event.targetElement);\n });\n if (!outlet) {\n throw new Error('Outlet not found');\n }\n const nodeOutputs = this.fComponentsStore.fOutputs.filter((x) => node.isContains(x.hostElement));\n (outlet as FNodeOutletBase).setOutputs(nodeOutputs);\n\n if (outlet.canBeConnected) {\n\n const outletCenter = this.getElementRectInFlowHandler.handle(outlet.hostElement).gravityCenter;\n if ((outlet as FNodeOutletBase).isConnectionFromOutlet) {\n this.createConnectionHandler(pointerPositionInFlow, outlet, outletCenter);\n } else {\n const output = this.findFirstCanBeConnectedOutputByOutletHandler.handle(outlet as FNodeOutletBase);\n if (!output) {\n throw new Error('Output not found');\n }\n this.createConnectionHandler(pointerPositionInFlow, output, outletCenter);\n }\n }\n } else if (this.isNodeOutput(event.targetElement, node)) {\n const output = this.fComponentsStore.fOutputs.find((x) => {\n return x.hostElement.contains(event.targetElement);\n });\n if (!output) {\n throw new Error('Output not found');\n }\n if (output.canBeConnected) {\n const outputCenter = this.getElementRectInFlowHandler.handle(output.hostElement).gravityCenter;\n this.createConnectionHandler(pointerPositionInFlow, output, outputCenter);\n }\n }\n }\n\n private createConnectionHandler(\n pointerPositionInCanvas: Point,\n output: FConnectorBase,\n outputCenter: IPoint\n ): void {\n\n this.fComponentsStore.fTempConnection!.fOutputId = output.id;\n this.fComponentsStore.fTempConnection!.initialize();\n\n this.fDraggableDataContext.onPointerDownScale = this.transform.scale;\n\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInCanvas.div(this.transform.scale);\n\n this.fDraggableDataContext.draggableItems = [\n new CreateConnectionDragHandler(this.getOutputRectInFlowHandler, this.getConnectionVectorHandler, this.fComponentsStore.fTempConnection!, outputCenter)\n ];\n }\n\n private isNodeOutput(targetElement: HTMLElement, node: FNodeBase): boolean {\n const outlets = this.fComponentsStore.fOutlets.filter((x) => node.isContains(x.hostElement));\n return isNodeOutput(targetElement) && !outlets.length;\n }\n}\n","import { IPoint, IRect, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EFDraggableType } from '../../e-f-draggable-type';\nimport {\n GetConnectionVectorHandler,\n GetConnectionVectorRequest,\n GetInputRectInFlowHandler,\n GetOutputRectInFlowHandler\n} from '../../../domain';\nimport { FConnectionBase } from '../../../f-connection';\nimport { EFConnectableSide } from '../../../f-connectors';\n\nexport class ReassignConnectionDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.REASSIGN_CONNECTION;\n\n private onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n private outputSide: EFConnectableSide = EFConnectableSide.BOTTOM;\n private inputSide: EFConnectableSide = EFConnectableSide.TOP;\n\n constructor(\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private getOutputRectInFlowHandler: GetOutputRectInFlowHandler,\n private getConnectionVectorHandler: GetConnectionVectorHandler,\n public connection: FConnectionBase\n ) {\n }\n\n public initialize(): void {\n const fromConnector = this.getOutputRectInFlowHandler.handle(this.connection.fOutputId);\n this.inputSide = this.getInputRectInFlowHandler.handle(this.connection.fInputId).fConnectableSide;\n this.outputSide = fromConnector.fConnectableSide;\n this.onPointerDownFromConnectorRect = fromConnector.rect;\n this.onPointerDownToConnectorRect = RectExtensions.initialize(this.connection.vector.point2.x, this.connection.vector.point2.y, 0, 0);\n }\n\n public move(difference: IPoint): void {\n const toRect = RectExtensions.addPoint(this.onPointerDownToConnectorRect, difference);\n\n const vector = this.getConnectionVectorHandler.handle(\n new GetConnectionVectorRequest(\n this.onPointerDownFromConnectorRect,\n toRect,\n this.connection.fBehavior,\n this.outputSide,\n this.inputSide,\n )\n );\n\n this.connection.setVector(vector.point1, this.outputSide, vector.point2, this.inputSide);\n this.connection.redraw();\n }\n\n public complete(): void {\n const fromConnector = this.getOutputRectInFlowHandler.handle(this.connection.fOutputId);\n const toConnector = this.getInputRectInFlowHandler.handle(this.connection.fInputId);\n\n const vector = this.getConnectionVectorHandler.handle(\n new GetConnectionVectorRequest(\n fromConnector.rect,\n toConnector.rect,\n this.connection.fBehavior,\n fromConnector.fConnectableSide,\n toConnector.fConnectableSide,\n )\n );\n\n this.connection.setVector(vector.point1, fromConnector.fConnectableSide, vector.point2, toConnector.fConnectableSide);\n this.connection.redraw();\n }\n}\n","export class ReassignConnectionEvent<T = any> {\n\n constructor(\n public connectionId: T,\n public outputId: T,\n public oldInputId: T,\n public newInputId: T\n ) {\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { ReassignConnectionDragHandler } from './reassign-connection.drag-handler';\nimport { EFDraggableType } from '../../e-f-draggable-type';\nimport {\n FindInputsUnderPointerHandler,\n FindInputsUnderPointerRequest,\n ReassignConnectionEvent\n} from '../index';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FDraggableBase } from '../../f-draggable-base';\n\n@Injectable()\nexport class ReassignConnectionOnPointerUp\n implements IHandler<IPointerEvent, void> {\n\n private get fDraggable(): FDraggableBase {\n return this.fComponentsStore.fDraggable!;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private findInputsUnderPointerHandler: FindInputsUnderPointerHandler\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const isReassignConnection = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.REASSIGN_CONNECTION);\n if (isReassignConnection) {\n const handler = this.fDraggableDataContext.draggableItems[ 0 ] as ReassignConnectionDragHandler;\n\n const inputsUnderPointer = this.findInputsUnderPointerHandler.handle(\n new FindInputsUnderPointerRequest(event, handler)\n );\n\n if (inputsUnderPointer.length > 0) {\n if (handler.connection.fInputId !== inputsUnderPointer[ 0 ]?.id) {\n this.fDraggable.fReassignConnection.emit(\n new ReassignConnectionEvent(\n handler.connection.id, handler.connection.fOutputId,\n handler.connection.fInputId,\n inputsUnderPointer[ 0 ]?.id\n )\n );\n }\n }\n handler.complete();\n }\n }\n}\n","import { IHandler, IPointerEvent, ITransformModel, Point } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { ReassignConnectionDragHandler } from './reassign-connection.drag-handler';\nimport {\n GetConnectionHandler, GetConnectionVectorHandler,\n GetInputRectInFlowHandler,\n GetOutputRectInFlowHandler, UpdateConnectionLayerHandler\n} from '../../../domain';\nimport { F_CONNECTION_DRAG_HANDLE_CLASS, FConnectionBase } from '../../../f-connection';\n\n@Injectable()\nexport class ReassignConnectionPrepareDragSequence\n implements IHandler<IPointerEvent, void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getConnectionHandler: GetConnectionHandler,\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private getOutputRectInFlowHandler: GetOutputRectInFlowHandler,\n private getConnectionVectorHandler: GetConnectionVectorHandler,\n private updateConnectionLayerHandler: UpdateConnectionLayerHandler,\n\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n const position = event.getPosition();\n const allElements = document.elementsFromPoint(position.x, position.y);\n\n const dragHandlesOfConnections = allElements.filter((x) => {\n return !!this.getConnectionHandler.handle(x as HTMLElement) && x.classList.contains(F_CONNECTION_DRAG_HANDLE_CLASS);\n });\n\n let connectionToReassign: FConnectionBase | undefined;\n if (dragHandlesOfConnections.length) {\n const connections = dragHandlesOfConnections.map((x) => this.getConnectionHandler.handle(x as HTMLElement)).filter((x) => !x?.disabled);\n if(connections.length) {\n connectionToReassign = this.getConnectionHandler.handle(dragHandlesOfConnections[ 0 ] as HTMLElement);\n }\n }\n\n if (connectionToReassign && !this.fDraggableDataContext.draggableItems.length) {\n this.updateConnectionLayerHandler.handle(connectionToReassign);\n this.fDraggableDataContext.onPointerDownScale = this.transform.scale;\n\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInFlow.div(this.transform.scale);\n\n this.fDraggableDataContext.draggableItems = [\n new ReassignConnectionDragHandler(\n this.getInputRectInFlowHandler, this.getOutputRectInFlowHandler, this.getConnectionVectorHandler, connectionToReassign\n )\n ]\n }\n }\n}\n","import {\n CreateConnectionOnPointerUp,\n CreateConnectionPrepareDragSequence,\n FindFirstCanBeConnectedOutputByOutletHandler\n} from './create-connection';\nimport {\n FindInputsUnderPointerHandler,\n FirstNotConnectedInputOfNodeUnderPointerHandler,\n InputsUnderPointerHandler\n} from './find-inputs-under-pointer';\nimport { ReassignConnectionOnPointerUp, ReassignConnectionPrepareDragSequence } from './reassign-connection';\n\nexport const CONNECTIONS_PROVIDERS = [\n\n FindFirstCanBeConnectedOutputByOutletHandler,\n\n CreateConnectionOnPointerUp,\n\n CreateConnectionPrepareDragSequence,\n\n FirstNotConnectedInputOfNodeUnderPointerHandler,\n\n InputsUnderPointerHandler,\n\n FindInputsUnderPointerHandler,\n\n ReassignConnectionOnPointerUp,\n\n ReassignConnectionPrepareDragSequence\n];\n","import { IRect } from '@foblex/core';\n\nexport class CreateNodeEvent<TData = any> {\n\n constructor(\n public rect: IRect,\n public data: TData,\n ) {\n }\n}\n","import { DomElementExtensions, IPoint, IRect, Point, PointExtensions, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { FExternalItemBase } from '../components';\n\nexport class ExternalItemDragHandler implements IDraggableItem {\n\n public readonly type = EFDraggableType.PALETTE_ITEM;\n\n public placeholder: HTMLElement | SVGElement | undefined;\n\n private onPointerDownRect: IRect = RectExtensions.initialize();\n\n private difference: IPoint = PointExtensions.initialize();\n\n constructor(\n public externalItem: FExternalItemBase\n ) {\n }\n\n private getStyle(position: IPoint): string {\n return `position: absolute; left: 0; top: 0; transform: translate(${ position.x }px, ${ position.y }px)`;\n }\n\n public initialize(): void {\n this.onPointerDownRect = this.getExternalItemRect();\n this.placeholder = DomElementExtensions.deepCloneNode(this.externalItem.hostElement);\n document.body.appendChild(this.placeholder);\n }\n\n private getExternalItemRect(): IRect {\n const rect = this.externalItem.hostElement.getBoundingClientRect();\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\n const offsetTop = rect.top + scrollTop;\n const offsetLeft = rect.left + scrollLeft;\n return RectExtensions.initialize(offsetLeft, offsetTop, rect.width, rect.height);\n }\n\n public move(difference: IPoint): void {\n this.difference = difference;\n const position = Point.fromPoint(this.onPointerDownRect).add(this.difference);\n this.placeholder!.setAttribute('style', this.getStyle(position));\n }\n\n public getPlaceholderRect(): IRect {\n return RectExtensions.fromElement(this.placeholder!);\n }\n\n public complete(): void {\n document.body.removeChild(this.placeholder!);\n }\n}\n","import { IHandler, IPointerEvent, ITransformModel, Point } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FExternalItemService, getExternalItem, isExternalItem } from '../components';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { ExternalItemDragHandler } from './external-item.drag-handler';\n\n@Injectable()\nexport class ExternalItemPrepareDragSequence implements IHandler<IPointerEvent, void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private fExternalItemService: FExternalItemService\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n if (isExternalItem(event.targetElement)) {\n\n const item = this.fExternalItemService.getItem(getExternalItem(event.targetElement));\n if (!item) {\n throw new Error('External item not found');\n }\n\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n\n this.fDraggableDataContext.onPointerDownScale = 1;\n\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInFlow.div(1);\n\n this.fDraggableDataContext.draggableItems = [\n new ExternalItemDragHandler(item)\n ];\n }\n }\n}\n","import { IHandler, IPointerEvent, Point } from '@foblex/core';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { ExternalItemDragHandler } from './external-item.drag-handler';\nimport { CreateNodeEvent } from './create-node.event';\nimport { GetElementRectInFlowHandler } from '../../domain';\n\n@Injectable()\nexport class ExternalItemOnPointerUp implements IHandler<IPointerEvent, void> {\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n private get fCreateNode(): EventEmitter<CreateNodeEvent> {\n return this.fComponentsStore.fDraggable!.fCreateNode;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n let difference = pointerPositionInFlow.div(this.fDraggableDataContext.onPointerDownScale).sub(this.fDraggableDataContext.onPointerDownPosition);\n\n const isDragPaletteItem = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.PALETTE_ITEM);\n\n if (isDragPaletteItem) {\n const dragHandler = this.fDraggableDataContext.draggableItems[ 0 ] as ExternalItemDragHandler\n dragHandler.move(difference);\n\n const isPointerInCanvasRect = document.elementsFromPoint(event.getPosition().x, event.getPosition().y).some((x) => x === this.flowHost);\n if (isPointerInCanvasRect) {\n const rectInCanvas = this.getElementRectInFlowHandler.handle(dragHandler.placeholder!);\n this.fCreateNode.emit(\n new CreateNodeEvent(rectInCanvas, dragHandler.externalItem.data)\n );\n }\n dragHandler.complete();\n }\n }\n}\n","import { ExternalItemOnPointerUp } from './external-item.on-pointer-up';\nimport { ExternalItemPrepareDragSequence } from './external-item.prepare-drag-sequence';\n\nexport const EXTERNAL_ITEM_PROVIDERS = [\n\n ExternalItemOnPointerUp,\n\n ExternalItemPrepareDragSequence\n];\n","import { IHandler, ITransformModel, RectExtensions } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../../f-components-store';\nimport { FDraggableDataContext } from '../../../f-draggable-data-context';\nimport { NodeDragHandler } from '../../node.drag-handler';\nimport { EFDraggableType } from '../../../e-f-draggable-type';\nimport {\n GetElementRectInFlowHandler,\n GetIncomingConnectionsHandler,\n GetOutgoingConnectionsHandler\n} from '../../../../domain';\nimport { FConnectionBase } from '../../../../f-connection';\nimport { FNodeBase } from '../../../../f-node';\nimport { FConnectorBase } from '../../../../f-connectors';\n\n@Injectable()\nexport class IsConnectionUnderNodeHandler implements IHandler<void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler,\n private getOutgoingConnectionsHandler: GetOutgoingConnectionsHandler,\n private getIncomingConnectionsHandler: GetIncomingConnectionsHandler\n ) {\n }\n\n public handle(): void {\n\n const isValid = this.isValidRequest();\n if (!isValid) {\n return;\n }\n\n const fNode = (this.fDraggableDataContext.draggableItems[ 0 ] as NodeDragHandler).fNode;\n\n const outputsOfNode = this.getOutputsForNode(fNode);\n const inputsOfNode = this.getInputsForNode(fNode);\n\n const isCantBeConnectedByOutput = outputsOfNode.some((x) => !x.canBeConnected);\n\n const isCantBeConnectedByInput = this.fComponentsStore.fConnections.some((x) => {\n return inputsOfNode.find((input) => input.id === x.fInputId);\n });\n\n if (!isCantBeConnectedByInput && outputsOfNode.length && !isCantBeConnectedByOutput && inputsOfNode.length) {\n const output = outputsOfNode[ 0 ];\n const input = inputsOfNode[ 0 ];\n const outgoingConnections = this.getOutgoingConnectionsHandler.handle([ output ]);\n const incomingConnections = this.getIncomingConnectionsHandler.handle([ input ]);\n if (outgoingConnections.length === 0 && incomingConnections.length === 0) {\n const connections = this.findConnectionsUnderNode(fNode);\n if (connections.length) {\n\n }\n }\n }\n }\n\n private isValidRequest(): boolean {\n const result =\n this.fDraggableDataContext.draggableItems.length === 1 &&\n this.fDraggableDataContext.draggableItems[ 0 ].type === EFDraggableType.NODE;\n\n return result;\n }\n\n private getOutputsForNode(node: FNodeBase): FConnectorBase[] {\n return this.fComponentsStore.fOutputs.filter((x) => node.isContains(x.hostElement));\n }\n\n private getInputsForNode(node: FNodeBase): FConnectorBase[] {\n return this.fComponentsStore.fInputs.filter((x) => node.isContains(x.hostElement));\n }\n\n private findConnectionsUnderNode(node: FNodeBase): FConnectionBase[] {\n const nodeRect = this.getElementRectInFlowHandler.handle(node.hostElement);\n return this.fComponentsStore.fConnections.filter((x) => {\n const intersection = RectExtensions.intersectionWithVector(nodeRect, x.vector.point1, x.vector.point2);\n return (intersection || []).length > 0\n });\n }\n}\n","import { IPoint, IVector, Point, VectorExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport {\n GetConnectionVectorHandler, GetConnectionVectorRequest,\n GetInputRectInFlowHandler,\n GetOutputRectInFlowHandler\n} from '../../domain';\nimport { FConnectionBase } from '../../f-connection';\nimport { EFConnectableSide } from '../../f-connectors';\n\nexport class ConnectionDragHandler implements IDraggableItem {\n\n public readonly type = EFDraggableType.CONNECTION;\n\n private onPointerDownVector: IVector = VectorExtensions.initialize();\n\n private fromConnectorSide: EFConnectableSide = EFConnectableSide.BOTTOM;\n\n private toConnectorSide: EFConnectableSide = EFConnectableSide.TOP;\n\n constructor(\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private getOutputRectInFlowHandler: GetOutputRectInFlowHandler,\n private getConnectionVectorHandler: GetConnectionVectorHandler,\n public connection: FConnectionBase,\n ) {\n }\n\n public initialize() {\n const fromConnector = this.getOutputRectInFlowHandler.handle(this.connection.fOutputId);\n this.fromConnectorSide = fromConnector.fConnectableSide;\n\n const toConnector = this.getInputRectInFlowHandler.handle(this.connection.fInputId);\n this.toConnectorSide = toConnector.fConnectableSide;\n\n this.onPointerDownVector = this.getConnectionVectorHandler.handle(\n new GetConnectionVectorRequest(\n fromConnector.rect,\n toConnector.rect,\n this.connection.fBehavior,\n fromConnector.fConnectableSide,\n toConnector.fConnectableSide,\n )\n );\n }\n\n public move(difference: IPoint): void {\n const fromPoint = Point.fromPoint(this.onPointerDownVector.point1).add(difference);\n const toPoint = Point.fromPoint(this.onPointerDownVector.point2).add(difference);\n\n this.connection.setVector(fromPoint, this.fromConnectorSide, toPoint, this.toConnectorSide);\n this.connection.redraw();\n }\n}\n","import { IPoint, IRect, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport {\n GetConnectionVectorHandler, GetConnectionVectorRequest,\n GetInputRectInFlowHandler,\n GetOutputRectInFlowHandler\n} from '../../domain';\nimport { FConnectionBase } from '../../f-connection';\nimport { EFConnectableSide } from '../../f-connectors';\n\nexport class ConnectionSourceDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.CONNECTION;\n\n private fromConnectorRect: IRect = RectExtensions.initialize();\n private fromConnectorSide: EFConnectableSide = EFConnectableSide.BOTTOM;\n\n private toConnectorRect: IRect = RectExtensions.initialize();\n private toConnectorSide: EFConnectableSide = EFConnectableSide.TOP;\n\n constructor(\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private getOutputRectInFlowHandler: GetOutputRectInFlowHandler,\n private getConnectionVectorHandler: GetConnectionVectorHandler,\n private connection: FConnectionBase,\n ) {\n }\n\n public initialize(): void {\n const fromConnector = this.getOutputRectInFlowHandler.handle(this.connection.fOutputId);\n this.fromConnectorRect = fromConnector.rect;\n this.fromConnectorSide = fromConnector.fConnectableSide;\n\n const toConnector = this.getInputRectInFlowHandler.handle(this.connection.fInputId);\n this.toConnectorRect = toConnector.rect;\n this.toConnectorSide = toConnector.fConnectableSide;\n }\n\n public move(difference: IPoint): void {\n const fromConnectorRect = RectExtensions.addPoint(this.fromConnectorRect, difference);\n\n const vector = this.getConnectionVectorHandler.handle(\n new GetConnectionVectorRequest(\n fromConnectorRect,\n this.toConnectorRect,\n this.connection.fBehavior,\n this.fromConnectorSide,\n this.toConnectorSide,\n )\n );\n\n this.connection.setVector(vector.point1, this.fromConnectorSide, vector.point2, this.toConnectorSide);\n this.connection.redraw();\n }\n}\n","import { IPoint, IRect, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport {\n GetConnectionVectorHandler, GetConnectionVectorRequest,\n GetInputRectInFlowHandler,\n GetOutputRectInFlowHandler\n} from '../../domain';\nimport { FConnectionBase } from '../../f-connection';\nimport { EFConnectableSide } from '../../f-connectors';\n\nexport class ConnectionTargetDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.CONNECTION;\n\n private fromConnectorRect: IRect = RectExtensions.initialize();\n private fromConnectorSide: EFConnectableSide = EFConnectableSide.BOTTOM;\n\n private toConnectorRect: IRect = RectExtensions.initialize();\n private toConnectorSide: EFConnectableSide = EFConnectableSide.TOP;\n\n constructor(\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private getOutputRectInFlowHandler: GetOutputRectInFlowHandler,\n private getConnectionVectorHandler: GetConnectionVectorHandler,\n private connection: FConnectionBase,\n ) {\n }\n\n public initialize(): void {\n const fromConnector = this.getOutputRectInFlowHandler.handle(this.connection.fOutputId);\n this.fromConnectorRect = fromConnector.rect;\n this.fromConnectorSide = fromConnector.fConnectableSide;\n\n const toConnector = this.getInputRectInFlowHandler.handle(this.connection.fInputId);\n this.toConnectorRect = toConnector.rect;\n this.toConnectorSide = toConnector.fConnectableSide;\n }\n\n public move(difference: IPoint): void {\n const toConnectorRect = RectExtensions.addPoint(this.toConnectorRect, difference);\n\n const vector = this.getConnectionVectorHandler.handle(\n new GetConnectionVectorRequest(\n this.fromConnectorRect,\n toConnectorRect,\n this.connection.fBehavior,\n this.fromConnectorSide,\n this.toConnectorSide,\n )\n );\n\n this.connection.setVector(vector.point1, this.fromConnectorSide, vector.point2, this.toConnectorSide);\n this.connection.redraw();\n }\n}\n","import { IPoint, Point, PointExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { FNodeBase } from '../../f-node';\n\nexport class NodeDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.NODE;\n\n private onPointerDownPosition: IPoint = PointExtensions.initialize();\n\n constructor(\n private fDraggableDataContext: FDraggableDataContext,\n public fNode: FNodeBase\n ) {\n this.onPointerDownPosition = this.fNode.position;\n }\n\n public move(difference: IPoint): void {\n const position = Point.fromPoint(this.onPointerDownPosition).add(difference);\n this.fNode.updatePosition(position);\n this.fNode.redraw();\n this.fDraggableDataContext.fLineAlignment?.handle(difference);\n }\n\n public complete(): void {\n this.fNode.completeDrag();\n }\n}\n","import { IHandler, IPointerEvent, ITransformModel, Point } from '@foblex/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { Injectable } from '@angular/core';\nimport { IsConnectionUnderNodeHandler } from './domain/is-connection-under-node';\n\n@Injectable()\nexport class NodeOnPointerUp\n implements IHandler<IPointerEvent, void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private isConnectionUnderNodeHandler: IsConnectionUnderNodeHandler,\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n let difference = pointerPositionInFlow.div(this.fDraggableDataContext.onPointerDownScale).sub(this.fDraggableDataContext.onPointerDownPosition);\n\n const isDragNodes = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.NODE);\n\n if (isDragNodes) {\n const nearestIntersection = this.fDraggableDataContext.fLineAlignment?.findNearestCoordinate(difference);\n if (nearestIntersection) {\n difference.x = nearestIntersection.xResult.value ? (difference.x - nearestIntersection.xResult.distance!) : difference.x;\n difference.y = nearestIntersection.yResult.value ? (difference.y - nearestIntersection.yResult.distance!) : difference.y;\n }\n this.fDraggableDataContext.draggableItems.forEach((x) => {\n x.move(difference);\n x.complete?.();\n });\n this.isConnectionUnderNodeHandler.handle();\n this.fDraggableDataContext.fLineAlignment?.complete();\n }\n }\n}\n","import { IHandler, IPointerEvent, ITransformModel, Point } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { NodeDragHandler } from './node.drag-handler';\nimport { ConnectionTargetDragHandler } from './connection-target.drag-handler';\nimport { ConnectionSourceDragHandler } from './connection-source.drag-handler';\nimport { ConnectionDragHandler } from './connection.drag-handler';\nimport {\n GetConnectionVectorHandler,\n GetIncomingConnectionsHandler, GetInputRectInFlowHandler,\n GetOutgoingConnectionsHandler, GetOutputRectInFlowHandler, UpdateNodeLayerHandler\n} from '../../domain';\nimport { FNodeBase, isNodeDragHandle } from '../../f-node';\nimport { FConnectorBase } from '../../f-connectors';\n\n@Injectable()\nexport class NodePrepareDragSequence implements IHandler<IPointerEvent, void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private updateNodeLayerHandler: UpdateNodeLayerHandler,\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private getOutputRectInFlowHandler: GetOutputRectInFlowHandler,\n private getOutgoingConnectionsHandler: GetOutgoingConnectionsHandler,\n private getIncomingConnectionsHandler: GetIncomingConnectionsHandler,\n private getConnectionVectorHandler: GetConnectionVectorHandler\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n\n const node = this.fComponentsStore.findNode(event.targetElement);\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n\n if (node && !node.disabled && !this.fDraggableDataContext.draggableItems.length) {\n if (isNodeDragHandle(event.targetElement)) {\n if (!this.fDraggableDataContext.selectedItems.includes(node)) {\n this.fDraggableDataContext.selectedItems.push(node);\n node.select();\n this.fDraggableDataContext.isSelectedChanged = true;\n }\n this.updateNodeLayerHandler.handle(node);\n const itemsToDrag: IDraggableItem[] = this.calculateDraggableConnectionsAndNodes();\n\n const draggedNodes = itemsToDrag.filter((x) => {\n return x.type === EFDraggableType.NODE;\n }).map((x) => (x as NodeDragHandler).fNode);\n\n this.fDraggableDataContext.fLineAlignment?.initialize(this.fComponentsStore.fNodes, draggedNodes);\n\n this.fDraggableDataContext.onPointerDownScale = this.transform.scale;\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInFlow.div(this.transform.scale);\n this.fDraggableDataContext.draggableItems = itemsToDrag;\n }\n }\n }\n\n private calculateDraggableConnectionsAndNodes(): IDraggableItem[] {\n let itemsToDrag: IDraggableItem[] = [];\n\n const selectedNodes = this.fDraggableDataContext.selectedItems.map((x) => {\n return this.fComponentsStore.findNode(x.hostElement);\n }).filter((x) => !!x) as FNodeBase[];\n\n const nodeDragHandlers = selectedNodes.map((x) => new NodeDragHandler(this.fDraggableDataContext, x));\n itemsToDrag = nodeDragHandlers;\n\n const allOutputIds: any[] = selectedNodes.reduce((result: FConnectorBase[], x: FNodeBase) => {\n return result.concat(this.getOutputsForNode(x));\n }, []).map((x) => x.id);\n\n const allInputIds: any[] = selectedNodes.reduce((result: FConnectorBase[], x: FNodeBase) => {\n return result.concat(this.getInputsForNode(x));\n }, []).map((x) => x.id);\n\n nodeDragHandlers.forEach((nodeHandler) => {\n const outputConnections = this.getOutgoingConnectionsHandler.handle(this.getOutputsForNode(nodeHandler.fNode));\n outputConnections.forEach((c) => {\n if (allInputIds.includes(c.fInputId)) {\n itemsToDrag.push(\n new ConnectionDragHandler(this.getInputRectInFlowHandler, this.getOutputRectInFlowHandler, this.getConnectionVectorHandler, c)\n );\n } else {\n itemsToDrag.push(\n new ConnectionSourceDragHandler(this.getInputRectInFlowHandler, this.getOutputRectInFlowHandler, this.getConnectionVectorHandler, c)\n );\n }\n });\n const inputConnections = this.getIncomingConnectionsHandler.handle(this.getInputsForNode(nodeHandler.fNode));\n inputConnections.forEach((c) => {\n if (allOutputIds.includes(c.fOutputId)) {\n const index = itemsToDrag.findIndex((x) => x.type === EFDraggableType.CONNECTION && (x as ConnectionDragHandler).connection.id === c.id);\n if (index !== -1) {\n itemsToDrag.push(\n new ConnectionDragHandler(this.getInputRectInFlowHandler, this.getOutputRectInFlowHandler, this.getConnectionVectorHandler, c)\n );\n }\n } else {\n itemsToDrag.push(\n new ConnectionTargetDragHandler(this.getInputRectInFlowHandler, this.getOutputRectInFlowHandler, this.getConnectionVectorHandler, c)\n );\n }\n });\n });\n return itemsToDrag;\n }\n\n private getInputsForNode(node: FNodeBase): FConnectorBase[] {\n return this.fComponentsStore.fInputs.filter((x) => node.isContains(x.hostElement));\n }\n\n private getOutputsForNode(node: FNodeBase): FConnectorBase[] {\n return this.fComponentsStore.fOutputs.filter((x) => node.isContains(x.hostElement));\n }\n}\n","import { NodeOnPointerUp } from './node.on-pointer-up';\nimport { NodePrepareDragSequence } from './node.prepare-drag-sequence';\nimport { IsConnectionUnderNodeHandler } from './domain/is-connection-under-node';\n\nexport const NODE_PROVIDERS = [\n\n NodeOnPointerUp,\n\n NodePrepareDragSequence,\n\n IsConnectionUnderNodeHandler\n];\n","import { Injectable } from '@angular/core';\nimport { IHandler, IRect, ITransformModel, RectExtensions } from '@foblex/core';\nimport { ISelectableWithRect } from './i-selectable-with-rect';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { GetElementRectInFlowHandler } from '../../../domain';\nimport { FConnectionBase, ISelectable } from '../../../f-connection';\nimport { FNodeBase } from '../../../f-node';\n\n@Injectable()\nexport class GetCanBeSelectedItemsHandler implements IHandler<void, ISelectableWithRect[]> {\n\n private get fNodes(): FNodeBase[] {\n return this.fComponentsStore.fNodes;\n }\n\n private get fConnections(): FConnectionBase[] {\n return this.fComponentsStore.fConnections;\n }\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler\n ) {\n }\n\n public handle(): ISelectableWithRect[] {\n const nodeRects = this.getNodesWithRects();\n\n const lineRects = this.getConnectionsWithRects();\n\n const result = [ ...nodeRects, ...lineRects ].filter((x) => {\n return !this.fDraggableDataContext.selectedItems.includes(x.element);\n });\n\n return result;\n }\n\n private getNodesWithRects(): { element: ISelectable, rect: IRect }[] {\n return this.fNodes.map((x) => {\n\n const rect = this.getElementRectInFlowHandler.handle(x.hostElement);\n return {\n element: x,\n rect: RectExtensions.mult(rect, this.transform.scale)\n };\n });\n }\n\n private getConnectionsWithRects(): { element: ISelectable, rect: IRect }[] {\n return this.fConnections.map((x) => {\n const rect = this.getElementRectInFlowHandler.handle(x.boundingElement);\n return {\n element: x,\n rect: RectExtensions.mult(rect, this.transform.scale)\n };\n });\n }\n}\n","import { IPoint, Point, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { GetCanBeSelectedItemsHandler, ISelectableWithRect } from './get-can-be-selected-items';\nimport { Injector } from '@angular/core';\nimport { ISelectable } from '../../f-connection';\n\nexport class SelectionAreaDragHandle implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.SELECTION;\n\n private canBeSelected: ISelectableWithRect[] = [];\n\n private selectedByMove: ISelectable[] = [];\n\n private get canvasPosition(): Point {\n return Point.fromPoint(this.fComponentsStore.fCanvas!.transform.position).add(this.fComponentsStore.fCanvas!.transform.scaledPosition);\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private injector: Injector\n ) {\n }\n\n public initialize(): void {\n this.canBeSelected = this.injector.get(GetCanBeSelectedItemsHandler).handle();\n\n this.fDraggableDataContext.fSelectionArea?.show();\n this.fDraggableDataContext.fSelectionArea?.draw({\n left: this.fDraggableDataContext.onPointerDownPosition.x,\n top: this.fDraggableDataContext.onPointerDownPosition.y,\n width: 0,\n height: 0\n });\n }\n\n public move(difference: IPoint): void {\n const currentPoint = Point.fromPoint(difference).add(this.fDraggableDataContext.onPointerDownPosition);\n const x: number = Math.min(this.fDraggableDataContext.onPointerDownPosition.x, currentPoint.x);\n const y: number = Math.min(this.fDraggableDataContext.onPointerDownPosition.y, currentPoint.y);\n\n const width = Math.abs(difference.x);\n const height = Math.abs(difference.y);\n\n this.fDraggableDataContext.fSelectionArea?.draw({ left: x, top: y, width, height });\n this.selectedByMove = [];\n this.canBeSelected.forEach((item) => {\n item.element.deselect();\n\n const itemRect = RectExtensions.addPoint(item.rect, this.canvasPosition);\n\n const isIntersect = RectExtensions.intersectionWithRect(itemRect, RectExtensions.initialize(x, y, width, height));\n if (isIntersect) {\n\n item.element.select();\n this.selectedByMove.push(item.element);\n }\n });\n }\n\n public complete(): void {\n this.fDraggableDataContext.fSelectionArea?.hide();\n this.fDraggableDataContext.selectedItems.push(...this.selectedByMove);\n if (this.selectedByMove.length > 0) {\n this.fDraggableDataContext.isSelectedChanged = true;\n }\n }\n}\n","import { IHandler, IPointerEvent, MouseEventExtensions, Point } from '@foblex/core';\nimport { Injectable, Injector } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { SelectionAreaDragHandle } from './selection-area.drag-handle';\nimport { FFlowBase } from '../../f-flow';\n\n@Injectable()\nexport class SelectionAreaPrepareDragSequence implements IHandler<IPointerEvent, void> {\n\n private get fFlow(): FFlowBase {\n return this.fComponentsStore.fFlow as FFlowBase;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private injector: Injector\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.fFlow.hostElement);\n\n if (MouseEventExtensions.isShiftPressed(event.originalEvent) && this.fDraggableDataContext.fSelectionArea) {\n this.fDraggableDataContext.draggableItems = [\n new SelectionAreaDragHandle(this.fComponentsStore, this.fDraggableDataContext, this.injector)\n ];\n\n this.fDraggableDataContext.onPointerDownScale = 1;\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInFlow.div(1);\n }\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { Injectable } from '@angular/core';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\n\n@Injectable()\nexport class SelectionAreaOnPointerUp\n implements IHandler<IPointerEvent, void> {\n\n constructor(\n private fDraggableDataContext: FDraggableDataContext,\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const isSelection = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.SELECTION);\n\n if (isSelection) {\n this.fDraggableDataContext.draggableItems.forEach((x) => {\n x.complete?.();\n });\n }\n }\n}\n","import { SelectionAreaPrepareDragSequence } from './selection-area.prepare-drag-sequence';\nimport { SelectionAreaOnPointerUp } from './selection-area.on-pointer-up';\nimport { GetCanBeSelectedItemsHandler } from './get-can-be-selected-items';\n\nexport const SELECTION_AREA_PROVIDERS = [\n\n GetCanBeSelectedItemsHandler,\n\n SelectionAreaPrepareDragSequence,\n\n SelectionAreaOnPointerUp,\n];\n","import { IHandler, IPointerEvent, MouseEventExtensions } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { GetConnectionHandler, UpdateConnectionLayerHandler } from '../../domain';\nimport { FNodeBase } from '../../f-node';\nimport { ISelectable } from '../../f-connection';\nimport { isNodeOutlet, isNodeOutput } from '../../f-connectors';\n\n@Injectable()\nexport class SingleSelectOnPointerDown implements IHandler<IPointerEvent, void> {\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getConnectionHandler: GetConnectionHandler,\n private updateConnectionLayerHandler: UpdateConnectionLayerHandler\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n\n if (!this.fComponentsStore.fFlow?.hostElement.contains(event.targetElement)) {\n return;\n }\n const node = this.fComponentsStore.findNode(event.targetElement);\n const connection = this.getConnectionHandler.handle(event.targetElement);\n this.deselectAll(node, event);\n\n let element: ISelectable | undefined;\n if (this.fDraggableDataContext.selectedItems.length) {\n element = this.fDraggableDataContext.selectedItems[ 0 ];\n }\n\n this.resetSelectionIfNotMultiselect(event);\n\n if (node) {\n if (!this.fDraggableDataContext.selectedItems.includes(node)) {\n this.fDraggableDataContext.selectedItems.push(node);\n if (element?.hostElement.id !== node.hostElement.id) {\n this.fDraggableDataContext.isSelectedChanged = true;\n }\n } else {\n this.fDraggableDataContext.selectedItems.splice(this.fDraggableDataContext.selectedItems.indexOf(node), 1);\n }\n } else if (connection) {\n this.updateConnectionLayerHandler.handle(connection);\n if (!this.fDraggableDataContext.selectedItems.includes(connection)) {\n this.fDraggableDataContext.selectedItems.push(connection);\n if (element?.hostElement.id !== connection.hostElement.id) {\n this.fDraggableDataContext.isSelectedChanged = true;\n }\n } else {\n this.fDraggableDataContext.selectedItems.splice(this.fDraggableDataContext.selectedItems.indexOf(connection), 1);\n }\n }\n this.selectIfNotSelected();\n }\n\n private deselectAll(node: FNodeBase | undefined, event: IPointerEvent): void {\n this.fDraggableDataContext.selectedItems.forEach((x) => {\n if (x !== node || (!isNodeOutlet(event.targetElement) && !isNodeOutput(event.targetElement))) {\n x.deselect();\n }\n });\n }\n\n private resetSelectionIfNotMultiselect(event: IPointerEvent): void {\n const isMultiselect =\n MouseEventExtensions.isCommandButton(event.originalEvent) ||\n MouseEventExtensions.isShiftPressed(event.originalEvent);\n if (!isMultiselect) {\n this.fDraggableDataContext.selectedItems = [];\n }\n }\n\n private selectIfNotSelected(): void {\n this.fDraggableDataContext.selectedItems.forEach((x) => {\n if (!x.isSelected()) {\n x.select();\n }\n });\n }\n}\n","import { SingleSelectOnPointerDown } from './single-select.on-pointer-down';\n\nexport const SINGLE_SELECT_PROVIDERS = [\n\n SingleSelectOnPointerDown\n];\n","export class SelectionChangeEvent {\n\n constructor(\n public nodes: string[],\n public connections: string[],\n ) {\n }\n}\n","import {\n EventExtensions,\n IMouseEvent,\n IPoint,\n IPointerEvent,\n ITouchDownEvent,\n ITouchMoveEvent, ITouchUpEvent,\n PointExtensions\n} from '@foblex/core';\nimport { ICanRunOutsideAngular } from '@foblex/core/drag-and-drop/i-can-run-outside-angular';\n\nexport const MOUSE_EVENT_IGNORE_TIME = 800;\n\nexport abstract class IDragAndDropBase {\n\n private element!: Document;\n\n private mouseListeners: Function = EventExtensions.emptyListener();\n private touchListeners: Function = EventExtensions.emptyListener();\n\n private startListeners: Function = EventExtensions.emptyListener();\n\n public isSyntheticEvent(event: MouseEvent): boolean {\n const isSyntheticEvent = !!this.lastTouchEventTime &&\n (this.lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now());\n return isSyntheticEvent;\n }\n\n private lastTouchEventTime: number = 0;\n\n public isDragStarted: boolean = false;\n private dragStartThreshold: number = 5;\n private dragStartDelay: number = 0;\n\n private dragStartTime: number = 0;\n private dragStartPosition: IPoint = PointExtensions.initialize();\n\n public abstract disabled: boolean;\n\n private moveHandler: Function = this.checkDragSequenceToStart;\n\n protected constructor(\n protected ngZone: ICanRunOutsideAngular\n ) {\n }\n\n private onMouseDown = (event: MouseEvent) => {\n const isSyntheticEvent = this.isSyntheticEvent(event);\n const isFakeEvent = isFakeMousedownFromScreenReader(event);\n const mouseEvent = new IMouseEvent(event);\n\n if (isSyntheticEvent || isFakeEvent || this.disabled) {\n return;\n }\n let result = this.onPointerDown(mouseEvent);\n if (result) {\n\n this.dragStartTime = Date.now();\n this.dragStartPosition = mouseEvent.getPosition();\n\n this.ngZone.runOutsideAngular(() => {\n this.element.addEventListener('mousemove', this.onMouseMove);\n this.element.addEventListener('mouseup', this.onMouseUp);\n });\n\n this.mouseListeners = () => {\n this.element.removeEventListener('mousemove', this.onMouseMove);\n this.element.removeEventListener('mouseup', this.onMouseUp);\n };\n }\n }\n\n private onTouchDown = (event: TouchEvent) => {\n const isFakeEvent = isFakeTouchstartFromScreenReader(event as TouchEvent)\n const touchEvent = new ITouchDownEvent(event);\n\n if (isFakeEvent || this.disabled) {\n return;\n }\n let result = this.onPointerDown(new ITouchDownEvent(event));\n if (result) {\n\n this.dragStartTime = Date.now();\n this.dragStartPosition = touchEvent.getPosition();\n\n this.ngZone.runOutsideAngular(() => {\n this.element.addEventListener('touchmove', this.onTouchMove);\n this.element.addEventListener('touchend', this.onTouchUp);\n });\n\n this.touchListeners = () => {\n this.element.removeEventListener('touchmove', this.onTouchMove);\n this.element.removeEventListener('touchend', this.onTouchUp);\n };\n }\n }\n\n private onMouseMove = (event: MouseEvent) => {\n this.moveHandler(new IMouseEvent(event));\n }\n\n private onTouchMove = (event: TouchEvent) => {\n this.moveHandler(new ITouchMoveEvent(event));\n }\n\n private checkDragSequenceToStart(event: IPointerEvent): void {\n const pointerPosition = event.getPosition();\n\n if (!this.isDragStarted) {\n const distanceX = Math.abs(pointerPosition.x - this.dragStartPosition.x);\n const distanceY = Math.abs(pointerPosition.y - this.dragStartPosition.y);\n const isOverThreshold = distanceX + distanceY >= this.dragStartThreshold;\n\n if (isOverThreshold) {\n const isDelayElapsed = Date.now() >= this.dragStartTime + this.dragStartDelay;\n\n if (!isDelayElapsed) {\n this.endDragSequence();\n return;\n }\n\n event.preventDefault();\n this.prepareDragSequence(event);\n this.isDragStarted = true;\n this.moveHandler = this.onPointerMove;\n if (isTouchEvent(event.originalEvent)) {\n this.lastTouchEventTime = Date.now();\n }\n }\n }\n }\n\n protected abstract prepareDragSequence(event: IPointerEvent): void;\n\n private onMouseUp = (event: MouseEvent) => {\n if (this.isDragStarted) {\n this.onPointerUp(new IMouseEvent(event));\n }\n this.endDragSequence();\n }\n\n private onTouchUp = (event: TouchEvent) => {\n if (this.isDragStarted) {\n this.onPointerUp(new ITouchUpEvent(event));\n }\n this.endDragSequence();\n }\n\n private endDragSequence(): void {\n this.isDragStarted = false;\n this.moveHandler = this.checkDragSequenceToStart;\n this.mouseListeners();\n this.mouseListeners = EventExtensions.emptyListener();\n this.touchListeners();\n this.touchListeners = EventExtensions.emptyListener();\n }\n\n public abstract onPointerDown(event: IPointerEvent): boolean;\n\n public abstract onPointerMove(event: IPointerEvent): void;\n\n public abstract onPointerUp(event: IPointerEvent): void;\n\n public subscribe(elementToSubscribe: Document): void {\n if (this.element) {\n this.unsubscribe();\n }\n this.element = elementToSubscribe;\n\n this.ngZone.runOutsideAngular(() => {\n this.element.addEventListener('mousedown', this.onMouseDown, EventExtensions.activeListener());\n this.element.addEventListener('touchstart', this.onTouchDown, EventExtensions.passiveListener());\n });\n\n this.startListeners = () => {\n this.element.removeEventListener('mousedown', this.onMouseDown, EventExtensions.activeListener());\n this.element.removeEventListener('touchstart', this.onTouchDown, EventExtensions.passiveListener());\n };\n }\n\n public unsubscribe(): void {\n\n this.startListeners();\n this.startListeners = EventExtensions.emptyListener();\n this.touchListeners();\n this.touchListeners = EventExtensions.emptyListener();\n this.mouseListeners();\n this.mouseListeners = EventExtensions.emptyListener();\n }\n}\n\nfunction isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n return event.type[ 0 ] === 't';\n}\n\nfunction isFakeMousedownFromScreenReader(event: MouseEvent): boolean {\n return event.buttons === 0 || (event.offsetX === 0 && event.offsetY === 0);\n}\n\nfunction isFakeTouchstartFromScreenReader(event: TouchEvent): boolean {\n const touch: Touch | undefined =\n (event.touches && event.touches[ 0 ]) || (event.changedTouches && event.changedTouches[ 0 ]);\n return (\n !!touch &&\n touch.identifier === -1 &&\n (touch.radiusX == null || touch.radiusX === 1) &&\n (touch.radiusY == null || touch.radiusY === 1)\n );\n}\n","import {\n IHasHostElement\n} from '@foblex/core';\nimport {\n Directive,\n EventEmitter,\n InjectionToken,\n NgZone,\n} from '@angular/core';\nimport { CreateNodeEvent} from './external-item';\nimport { ReassignConnectionEvent } from './connections/reassign-connection/reassign-connection.event';\nimport { CreateConnectionEvent } from './connections/create-connection/create-connection.event';\nimport { SelectionChangeEvent } from './single-select';\nimport { IDragAndDropBase } from './i-drag-and-drop-base';\n\nexport const F_DRAGGABLE = new InjectionToken<FDraggableBase>('F_DRAGGABLE');\n\n@Directive()\nexport abstract class FDraggableBase extends IDragAndDropBase implements IHasHostElement {\n\n public abstract hostElement: HTMLElement;\n\n public abstract fSelectionChange: EventEmitter<SelectionChangeEvent>;\n\n public abstract fCreateNode: EventEmitter<CreateNodeEvent>;\n\n public abstract fReassignConnection: EventEmitter<ReassignConnectionEvent>;\n\n public abstract fCreateConnection: EventEmitter<CreateConnectionEvent>;\n\n protected constructor(ngZone: NgZone) {\n super(ngZone);\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter, Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit, Output\n} from \"@angular/core\";\nimport { F_DRAGGABLE, FDraggableBase } from './f-draggable-base';\nimport { FComponentsStore } from '../f-components-store';\nimport { FDraggableDataContext } from './f-draggable-data-context';\nimport { Subscription } from 'rxjs';\nimport { CreateNodeEvent, ExternalItemOnPointerUp, ExternalItemPrepareDragSequence } from './external-item';\nimport { IPointerEvent, Point } from '@foblex/core';\nimport { SelectionChangeEvent, SingleSelectOnPointerDown } from './single-select';\nimport { SelectionAreaOnPointerUp, SelectionAreaPrepareDragSequence } from './selection-area';\nimport { NodeOnPointerUp, NodePrepareDragSequence } from './node';\nimport { CanvasOnPointerUp, CanvasPrepareDragSequence } from './canvas';\nimport { DOCUMENT } from '@angular/common';\nimport {\n CreateConnectionEvent,\n CreateConnectionOnPointerUp,\n CreateConnectionPrepareDragSequence, ReassignConnectionEvent,\n ReassignConnectionOnPointerUp,\n ReassignConnectionPrepareDragSequence\n} from './connections';\n\n@Directive({\n selector: \"f-flow[fDraggable]\",\n exportAs: 'fDraggable',\n providers: [\n { provide: F_DRAGGABLE, useExisting: FDraggableDirective }\n ]\n})\nexport class FDraggableDirective extends FDraggableBase implements OnInit, AfterViewInit, OnDestroy {\n\n private subscriptions$: Subscription = new Subscription();\n\n @Input('fDraggableDisabled')\n public override disabled: boolean = false;\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n @Output()\n public override fSelectionChange: EventEmitter<SelectionChangeEvent> = new EventEmitter<SelectionChangeEvent>();\n\n // @Output()\n // public override fConnectionIntersectNode: EventEmitter<ConnectionIntersectNodeEvent> = new EventEmitter<ConnectionIntersectNodeEvent>();\n\n @Output()\n public override fCreateNode: EventEmitter<CreateNodeEvent> = new EventEmitter<CreateNodeEvent>();\n\n @Output()\n public override fReassignConnection: EventEmitter<ReassignConnectionEvent> = new EventEmitter<ReassignConnectionEvent>();\n\n @Output()\n public override fCreateConnection: EventEmitter<CreateConnectionEvent> = new EventEmitter<CreateConnectionEvent>();\n\n private readonly document: Document;\n\n private selectedItemsOnPointerDown: number = 0;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fDraggableDataContext: FDraggableDataContext,\n ngZone: NgZone,\n private injector: Injector,\n private fComponentsStore: FComponentsStore,\n @Inject(DOCUMENT) document: any\n ) {\n super(ngZone);\n this.document = document as Document;\n }\n\n public ngOnInit(): void {\n this.fComponentsStore.fDraggable = this;\n }\n\n public ngAfterViewInit(): void {\n super.subscribe(this.document);\n }\n\n public override onPointerDown(event: IPointerEvent): boolean {\n this.fDraggableDataContext.reset();\n let result: boolean = event.isMouseLeftButton();\n\n this.selectedItemsOnPointerDown = this.fDraggableDataContext.selectedItems.length;\n\n this.injector.get(SingleSelectOnPointerDown).handle(event);\n\n this.injector.get(ReassignConnectionPrepareDragSequence).handle(event);\n\n this.injector.get(CreateConnectionPrepareDragSequence).handle(event);\n\n this.emitSelectionChangeEvent();\n\n return result;\n }\n\n protected override prepareDragSequence(event: IPointerEvent) {\n\n this.injector.get(SelectionAreaPrepareDragSequence).handle(event);\n\n this.injector.get(NodePrepareDragSequence).handle(event);\n\n this.injector.get(CanvasPrepareDragSequence).handle(event);\n\n this.injector.get(ExternalItemPrepareDragSequence).handle(event);\n\n this.fDraggableDataContext.draggableItems.forEach((item) => {\n item.initialize?.();\n });\n\n if (this.fDraggableDataContext.draggableItems.length > 0) {\n this.hostElement.classList.add('f-dragging');\n }\n }\n\n public override onPointerMove(event: IPointerEvent): void {\n const pointerPositionInCanvas = Point.fromPoint(event.getPosition()).elementTransform(this.hostElement);\n const difference = pointerPositionInCanvas.div(this.fDraggableDataContext.onPointerDownScale).sub(this.fDraggableDataContext.onPointerDownPosition);\n this.fDraggableDataContext.draggableItems.forEach((item) => {\n item.move(difference);\n });\n }\n\n public override onPointerUp(event: IPointerEvent): void {\n\n this.injector.get(ReassignConnectionOnPointerUp).handle(event);\n\n this.injector.get(CreateConnectionOnPointerUp).handle(event);\n\n this.injector.get(SelectionAreaOnPointerUp).handle(event);\n\n this.injector.get(NodeOnPointerUp).handle(event);\n\n this.injector.get(CanvasOnPointerUp).handle(event);\n\n this.injector.get(ExternalItemOnPointerUp).handle(event);\n\n this.hostElement.classList.remove('f-dragging');\n\n this.emitSelectionChangeEvent();\n\n this.fDraggableDataContext.reset();\n }\n\n private emitSelectionChangeEvent(): void {\n if (\n !this.fDraggableDataContext.isSelectedChanged\n && this.selectedItemsOnPointerDown === this.fDraggableDataContext.selectedItems.length\n ) {\n return;\n }\n let selectedNodes: string[] = [];\n let selectedConnections: string[] = [];\n this.fDraggableDataContext.selectedItems.forEach((x) => {\n if (x.hostElement.classList.contains('f-node')) {\n selectedNodes.push(x.hostElement.id);\n } else {\n selectedConnections.push(x.hostElement.id);\n }\n });\n this.fSelectionChange.emit(new SelectionChangeEvent(selectedNodes, selectedConnections));\n }\n\n public ngOnDestroy(): void {\n super.unsubscribe();\n this.subscriptions$.unsubscribe();\n }\n}\n\n","import { IHandler, IVector } from '@foblex/core';\nimport { GetConnectionVectorHandler, GetConnectionVectorRequest, GetElementRectInFlowHandler } from '../../../domain';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { Injectable } from '@angular/core';\nimport { FConnectionBase } from '../../../f-connection';\nimport { FConnectorBase } from '../../../f-connectors';\n\n@Injectable()\nexport class RedrawConnectionsHandler implements IHandler<void, void> {\n\n constructor(\n private readonly fComponentsStore: FComponentsStore,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler,\n private getConnectionVectorHandler: GetConnectionVectorHandler,\n ) {\n }\n\n public handle(): void {\n this.resetConnectors();\n\n this.fComponentsStore.fTempConnection?.setMarkers();\n\n this.fComponentsStore.fConnections.forEach((connection) => {\n const output = this.fComponentsStore.fOutputs.find((x) => x.id === connection.fOutputId);\n const input = this.fComponentsStore.fInputs.find((x) => x.id === connection.fInputId);\n if (output && input) {\n this.setupConnection(output, input, connection);\n }\n });\n }\n\n private resetConnectors(): void {\n this.fComponentsStore.fOutputs.forEach((output) => output.setConnected(false));\n this.fComponentsStore.fInputs.forEach((input) => input.setConnected(false));\n }\n\n private setupConnection(output: FConnectorBase, input: FConnectorBase, connection: FConnectionBase): void {\n output.setConnected(true);\n input.setConnected(true);\n\n const vector = this.getVector(output, input, connection);\n\n connection.setVector(vector.point1, output.fConnectableSide, vector.point2, input.fConnectableSide);\n connection.setMarkers();\n\n connection.initialize();\n }\n\n private getVector(output: FConnectorBase, input: FConnectorBase, connection: FConnectionBase): IVector {\n const outputRect = this.getElementRectInFlowHandler.handle(output.hostElement);\n const inputRect = this.getElementRectInFlowHandler.handle(input.hostElement);\n return this.getConnectionVectorHandler.handle(\n new GetConnectionVectorRequest(\n outputRect,\n inputRect,\n connection.fBehavior,\n output.fConnectableSide,\n input.fConnectableSide\n )\n );\n }\n}\n","import { EventEmitter, InjectionToken } from '@angular/core';\nimport { IHasHostElement } from '@foblex/core';\n\nexport const F_FLOW = new InjectionToken<FFlowBase>('F_FLOW');\n\nexport abstract class FFlowBase implements IHasHostElement {\n\n public abstract fFlowId: string;\n\n public abstract hostElement: HTMLElement;\n\n public abstract fLoaded: EventEmitter<void>;\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component, ElementRef, EventEmitter, HostBinding,\n Input, OnDestroy, OnInit, Output\n} from '@angular/core';\nimport { F_FLOW, FFlowBase } from './f-flow-base';\nimport { FComponentsStore } from '../f-components-store';\nimport { debounceTime, startWith, Subscription } from 'rxjs';\nimport {\n COMMON_PROVIDERS, GetAllNodesRectHandler,\n} from '../domain';\nimport { IRect } from '@foblex/core';\nimport { FLOW } from '../get-flow-uid';\nimport { RedrawConnectionsHandler } from './domain/redraw-connections/redraw-connections.handler';\nimport { FDraggableDataContext } from '../f-draggable/f-draggable-data-context';\nimport { SINGLE_SELECT_PROVIDERS } from '../f-draggable/single-select';\nimport { SELECTION_AREA_PROVIDERS } from '../f-draggable/selection-area';\nimport { NODE_PROVIDERS } from '../f-draggable/node';\nimport { CANVAS_PROVIDERS } from '../f-draggable/canvas';\nimport { EXTERNAL_ITEM_PROVIDERS } from '../f-draggable/external-item';\nimport { CONNECTIONS_PROVIDERS } from '../f-draggable/connections';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: 'f-flow',\n templateUrl: './f-flow.component.html',\n styleUrls: [ './f-flow.component.scss' ],\n host: {\n '[attr.id]': 'fFlowId',\n class: \"f-component f-flow\",\n },\n providers: [\n FComponentsStore,\n FDraggableDataContext,\n ...SINGLE_SELECT_PROVIDERS,\n ...SELECTION_AREA_PROVIDERS,\n ...NODE_PROVIDERS,\n ...CANVAS_PROVIDERS,\n ...EXTERNAL_ITEM_PROVIDERS,\n ...CONNECTIONS_PROVIDERS,\n ...COMMON_PROVIDERS,\n RedrawConnectionsHandler,\n { provide: F_FLOW, useExisting: FFlowComponent },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FFlowComponent extends FFlowBase implements OnInit, AfterContentInit, OnDestroy {\n\n private subscription$: Subscription = new Subscription();\n\n @Input()\n public override fFlowId: string = `f-flow-${ uniqueId++ }`;\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n @Output()\n public override fLoaded: EventEmitter<void> = new EventEmitter<void>();\n\n private isLoaded: boolean = false;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private redrawConnectionsHandler: RedrawConnectionsHandler,\n private getAllNodesRectHandler: GetAllNodesRectHandler,\n private fComponentsStore: FComponentsStore,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.fComponentsStore.fFlow = this;\n FLOW.UID = this.fFlowId;\n }\n\n public ngAfterContentInit(): void {\n this.subscription$.add(this.subscribeOnElementsChanges());\n }\n\n private subscribeOnElementsChanges(): Subscription {\n return this.fComponentsStore.changes.pipe(startWith(null), debounceTime(20)).subscribe(() => {\n\n this.redrawConnectionsHandler.handle();\n\n if (!this.isLoaded) {\n this.isLoaded = true;\n this.fLoaded.emit();\n }\n });\n }\n\n public getNodesRect(): IRect {\n return this.getAllNodesRectHandler.handle();\n }\n\n public ngOnDestroy(): void {\n this.subscription$.unsubscribe();\n }\n}\n","<ng-container>\n <ng-content select=\"[fDefinitions]\"></ng-content>\n\n <ng-content select=\"f-background\"></ng-content>\n\n <ng-content select=\"f-line-alignment\"></ng-content>\n\n <ng-content select=\"f-canvas\"></ng-content>\n\n <ng-content select=\"f-selection-area\"></ng-content>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FConnectionComponent,\n FConnectionDragHandleComponent, FConnectionForCreateComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent, FConnectionSelectionComponent,\n FConnectionTextComponent, FConnectionTextPathDirective\n} from './f-connection';\nimport { FNodeDirective} from './f-node';\nimport { FFlowComponent } from './f-flow';\nimport { FBackgroundComponent } from './f-backgroud';\nimport { FCanvasComponent, FZoomDirective } from './f-canvas';\nimport { FNodeInputDirective, FNodeOutletDirective, FNodeOutputDirective } from './f-connectors';\nimport { FDraggableDirective } from './f-draggable/f-draggable.directive';\nimport { FExternalItemDirective, FLineAlignmentComponent, FSelectionAreaComponent } from './f-draggable/components';\nimport { FDraggableDataContext } from './f-draggable/f-draggable-data-context';\n\n@NgModule({\n declarations: [\n FConnectionDragHandleComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent,\n FConnectionTextComponent,\n FConnectionTextPathDirective,\n FConnectionSelectionComponent,\n\n FFlowComponent,\n FBackgroundComponent,\n FCanvasComponent,\n FNodeDirective,\n FConnectionComponent,\n FConnectionForCreateComponent,\n FZoomDirective,\n FNodeInputDirective,\n FNodeOutletDirective,\n FNodeOutputDirective,\n\n FDraggableDirective,\n FExternalItemDirective,\n FSelectionAreaComponent,\n FLineAlignmentComponent,\n ],\n imports: [\n CommonModule\n ],\n providers: [\n FDraggableDataContext,\n ],\n exports: [\n FFlowComponent,\n FBackgroundComponent,\n FCanvasComponent,\n FNodeDirective,\n FConnectionComponent,\n FConnectionForCreateComponent,\n FZoomDirective,\n FNodeInputDirective,\n FNodeOutletDirective,\n FNodeOutputDirective,\n\n FDraggableDirective,\n FExternalItemDirective,\n FSelectionAreaComponent,\n FLineAlignmentComponent,\n ]\n})\nexport class FFlowModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uniqueId","i1.FComponentsStore","i1.FConnectionTextPathDirective","MIXIN_BASE","i2.FConnectionDragHandleComponent","i3.FConnectionGradientComponent","i4.FConnectionPathComponent","i5.FConnectionTextComponent","i6.FConnectionSelectionComponent","i2.GetElementRectInFlowHandler","i2.FDraggableDataContext","i1.GetAllNodesRectHandler","i1.SelectAllHandler","i2.FComponentsStore","i1.FDraggableDataContext","i1.FExternalItemService","i3.GetElementRectInFlowHandler","i2.InputsUnderPointerHandler","i3.FirstNotConnectedInputOfNodeUnderPointerHandler","i3.FindInputsUnderPointerHandler","i4.FindFirstCanBeConnectedOutputByOutletHandler","i3.GetConnectionVectorHandler","i3.GetOutputRectInFlowHandler","i3.GetConnectionHandler","i3.GetInputRectInFlowHandler","i3.UpdateConnectionLayerHandler","i3.FExternalItemService","i3.GetOutgoingConnectionsHandler","i3.GetIncomingConnectionsHandler","i3.IsConnectionUnderNodeHandler","i3.UpdateNodeLayerHandler","i2.GetConnectionVectorHandler","i1.RedrawConnectionsHandler","i2.GetAllNodesRectHandler","i3.FComponentsStore"],"mappings":"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"}
1
+ {"version":3,"file":"foblex-flow.mjs","sources":["../../../projects/f-flow/src/f-backgroud/domain/i-f-background-pattern.ts","../../../projects/f-flow/src/f-backgroud/f-cell-pattern/f-cell-pattern.component.ts","../../../projects/f-flow/src/f-backgroud/f-cell-pattern/f-cell-pattern.component.html","../../../projects/f-flow/src/f-backgroud/f-background-base.ts","../../../projects/f-flow/src/f-components-store.ts","../../../projects/f-flow/src/f-backgroud/f-background.component.ts","../../../projects/f-flow/src/f-backgroud/f-background.component.html","../../../projects/f-flow/src/f-canvas/domain/f-canvas-change.event.ts","../../../projects/f-flow/src/f-connection/common/domain/calculate-center-between-points/calculate-center-between-points.handler.ts","../../../projects/f-flow/src/f-connection/common/domain/calculate-center-between-points/calculate-center-between-points-request.ts","../../../projects/f-flow/src/f-connection/common/domain/calculate-connection-center/calculate-connection-center.handler.ts","../../../projects/f-flow/src/f-connection/common/domain/calculate-connection-center/calculate-connection-center-request.ts","../../../projects/f-flow/src/f-connection/common/domain/f-path-builder-base.ts","../../../projects/f-flow/src/f-connectors/e-f-connectable-side.ts","../../../projects/f-flow/src/f-connectors/domain/calculate-connector-connectable-side/calculate-connector-connectable-side.handler.ts","../../../projects/f-flow/src/f-connectors/domain/calculate-connector-connectable-side/calculate-connector-connectable-side-request.ts","../../../projects/f-flow/src/f-connectors/f-connector-base.ts","../../../projects/f-flow/src/f-connectors/f-node-input/f-node-input-base.ts","../../../projects/f-flow/src/f-connectors/f-node-input/is-node-input.ts","../../../projects/f-flow/src/f-connectors/f-node-input/f-node-input.directive.ts","../../../projects/f-flow/src/f-connectors/f-node-outlet/f-node-outlet-base.ts","../../../projects/f-flow/src/f-connectors/f-node-outlet/is-node-outlet.ts","../../../projects/f-flow/src/f-connectors/f-node-outlet/f-node-outlet.directive.ts","../../../projects/f-flow/src/f-connectors/f-node-output/f-node-output-base.ts","../../../projects/f-flow/src/f-connectors/f-node-output/is-node-output.ts","../../../projects/f-flow/src/f-connectors/f-node-output/f-node-output.directive.ts","../../../projects/f-flow/src/f-connection/common/domain/f-bezier.path-builder.ts","../../../projects/f-flow/src/f-connection/common/e-f-connection-type.ts","../../../projects/f-flow/src/f-connection/common/domain/f-straight.path-builder.ts","../../../projects/f-flow/src/f-connection/common/domain/f-segment.path-builder.ts","../../../projects/f-flow/src/f-connection/common/domain/f-path-builder-selector.ts","../../../projects/f-flow/src/f-connection/common/f-connection-identifiers.ts","../../../projects/f-flow/src/f-connection/common/f-connection.injection-token.ts","../../../projects/f-flow/src/f-connection/common/f-connection-text/f-connection-text-path.directive.ts","../../../projects/f-flow/src/f-connection/common/f-connection-text/i-connection-text.ts","../../../projects/f-flow/src/f-connection/common/f-connection-text/f-connection-text.component.ts","../../../projects/f-flow/src/f-connection/common/f-connection-text/f-connection-text.component.html","../../../projects/f-flow/src/f-connection/common/f-drag-handle/f-connection-drag-handle.component.ts","../../../projects/f-flow/src/f-connection/common/f-gradient/i-connection-gradient.ts","../../../projects/f-flow/src/f-connection/common/f-gradient/f-connection-gradient.component.ts","../../../projects/f-flow/src/f-connection/common/f-gradient/f-connection-gradient.component.html","../../../projects/f-flow/src/f-connection/common/f-path/i-connection-path.ts","../../../projects/f-flow/src/get-flow-uid.ts","../../../projects/f-flow/src/f-connection/f-marker/e-f-marker-type.ts","../../../projects/f-flow/src/f-connection/f-marker/f-marker-base.ts","../../../projects/f-flow/src/f-connection/f-marker/f-marker.directive.ts","../../../projects/f-flow/src/f-connection/common/f-path/f-connection-path.component.ts","../../../projects/f-flow/src/f-connection/common/f-selection/f-connection-selection.component.ts","../../../projects/f-flow/src/f-connection/common/mixins/change-connection-selection.mixin.ts","../../../projects/f-flow/src/f-connection/common/mixins/change-connection-visibility.mixin.ts","../../../projects/f-flow/src/f-connection/common/f-connection-base.ts","../../../projects/f-flow/src/f-connection/common/e-f-connection-behavior.ts","../../../projects/f-flow/src/f-connection/common/cast-to-connection-behavior.ts","../../../projects/f-flow/src/f-connection/common/cast-to-connection-type.ts","../../../projects/f-flow/src/f-connection/f-connection-for-create/f-connection-for-create.component.ts","../../../projects/f-flow/src/f-connection/f-connection-for-create/f-connection-for-create.component.html","../../../projects/f-flow/src/f-connection/f-connection/f-connection.component.ts","../../../projects/f-flow/src/f-connection/f-connection/f-connection.component.html","../../../projects/f-flow/src/f-connection/f-connection-center/f-connection-center.directive.ts","../../../projects/f-flow/src/f-node/f-node-base.ts","../../../projects/f-flow/src/f-node/f-drag-handle/f-drag-handle.directive.ts","../../../projects/f-flow/src/f-node/f-drag-handle/is-drag-handle.ts","../../../projects/f-flow/src/f-node/f-resize-observer.ts","../../../projects/f-flow/src/f-node/f-node.directive.ts","../../../projects/f-flow/src/f-node/is-node.ts","../../../projects/f-flow/src/f-canvas/f-zoom/f-zoom-base.ts","../../../projects/f-flow/src/f-canvas/f-zoom/f-zoom.directive.ts","../../../projects/f-flow/src/f-canvas/f-canvas-base.ts","../../../projects/f-flow/src/domain/get-connection-vector/get-connection-vector.request.ts","../../../projects/f-flow/src/f-mediator/f-flow-mediator.ts","../../../projects/f-flow/src/f-mediator/f-handler-register.ts","../../../projects/f-flow/src/domain/get-connection-vector/get-connection-vector.handler.ts","../../../projects/f-flow/src/domain/get-output-rect-in-flow/get-output-rect-in-flow-request.ts","../../../projects/f-flow/src/domain/errors.ts","../../../projects/f-flow/src/domain/get-output-rect-in-flow/get-output-rect-in-flow-response.ts","../../../projects/f-flow/src/domain/get-element-rect-in-flow.handler.ts","../../../projects/f-flow/src/domain/get-output-rect-in-flow/get-output-rect-in-flow.handler.ts","../../../projects/f-flow/src/domain/redraw-connections/redraw-connections-request.ts","../../../projects/f-flow/src/domain/redraw-connections/redraw-connections.handler.ts","../../../projects/f-flow/src/domain/get-all-nodes-rect.handler.ts","../../../projects/f-flow/src/domain/get-connection.handler.ts","../../../projects/f-flow/src/domain/get-incoming-connections.handler.ts","../../../projects/f-flow/src/domain/get-outgoing-connections.handler.ts","../../../projects/f-flow/src/domain/get-input-rect-in-flow.handler.ts","../../../projects/f-flow/src/domain/update-node-layer.handler.ts","../../../projects/f-flow/src/f-draggable/f-draggable-data-context.ts","../../../projects/f-flow/src/domain/select-all.handler.ts","../../../projects/f-flow/src/domain/update-connection-layer.handler.ts","../../../projects/f-flow/src/domain/providers.ts","../../../projects/f-flow/src/f-canvas/f-canvas.component.ts","../../../projects/f-flow/src/f-canvas/f-canvas.component.html","../../../projects/f-flow/src/f-draggable/e-f-draggable-type.ts","../../../projects/f-flow/src/f-draggable/canvas/canvas.drag-handler.ts","../../../projects/f-flow/src/f-draggable/canvas/canvas.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/canvas/canvas.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/canvas/providers.ts","../../../projects/f-flow/src/f-draggable/connections/create-connection/find-first-can-be-connected-output-by-outlet/find-first-can-be-connected-output-by-outlet.handler.ts","../../../projects/f-flow/src/f-draggable/connections/create-connection/create-connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/connections/create-connection/f-create-connection.event.ts","../../../projects/f-flow/src/f-draggable/connections/find-inputs-under-pointer/first-not-connected-input-of-node-under-pointer/first-not-connected-input-of-node-under-pointer.handler.ts","../../../projects/f-flow/src/f-draggable/connections/find-inputs-under-pointer/inputs-under-pointer/inputs-under-pointer.handler.ts","../../../projects/f-flow/src/f-draggable/connections/find-inputs-under-pointer/find-inputs-under-pointer.request.ts","../../../projects/f-flow/src/f-draggable/connections/find-inputs-under-pointer/find-inputs-under-pointer.handler.ts","../../../projects/f-flow/src/f-draggable/connections/create-connection/create-connection.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/connections/create-connection/create-connection.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/connections/reassign-connection/reassign-connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/connections/reassign-connection/f-reassign-connection.event.ts","../../../projects/f-flow/src/f-draggable/connections/reassign-connection/reassign-connection.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/connections/reassign-connection/reassign-connection.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/connections/providers.ts","../../../projects/f-flow/src/f-draggable/external-item/f-create-node.event.ts","../../../projects/f-flow/src/f-draggable/external-item/external-item.drag-handler.ts","../../../projects/f-flow/src/f-external-item/f-external-item-base.ts","../../../projects/f-flow/src/f-external-item/is-external-item.ts","../../../projects/f-flow/src/f-external-item/f-external-item.service.ts","../../../projects/f-flow/src/f-external-item/f-external-item.directive.ts","../../../projects/f-flow/src/f-draggable/external-item/external-item.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/external-item/external-item.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/external-item/providers.ts","../../../projects/f-flow/src/f-draggable/node/domain/is-connection-under-node/is-connection-under-node.handler.ts","../../../projects/f-flow/src/f-draggable/node/connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/node/connection-source.drag-handler.ts","../../../projects/f-flow/src/f-draggable/node/connection-target.drag-handler.ts","../../../projects/f-flow/src/f-draggable/node/node.drag-handler.ts","../../../projects/f-flow/src/f-draggable/node/node.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/node/node.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/node/providers.ts","../../../projects/f-flow/src/f-draggable/selection-area/get-can-be-selected-items/get-can-be-selected-items.handler.ts","../../../projects/f-flow/src/f-draggable/selection-area/selection-area.drag-handle.ts","../../../projects/f-flow/src/f-draggable/selection-area/selection-area.prepare-drag-sequence.ts","../../../projects/f-flow/src/f-draggable/selection-area/selection-area.on-pointer-up.ts","../../../projects/f-flow/src/f-draggable/selection-area/providers.ts","../../../projects/f-flow/src/f-draggable/single-select/single-select.on-pointer-down.ts","../../../projects/f-flow/src/f-draggable/single-select/providers.ts","../../../projects/f-flow/src/f-draggable/single-select/f-selection-change-event.ts","../../../projects/f-flow/src/f-draggable/i-drag-and-drop-base.ts","../../../projects/f-flow/src/f-draggable/f-draggable-base.ts","../../../projects/f-flow/src/f-draggable/f-draggable.directive.ts","../../../projects/f-flow/src/f-line-alignment/domain/line-element.ts","../../../projects/f-flow/src/f-line-alignment/domain/line-service.ts","../../../projects/f-flow/src/f-line-alignment/domain/nearest-coordinate.ts","../../../projects/f-flow/src/f-line-alignment/f-line-alignment-base.ts","../../../projects/f-flow/src/f-line-alignment/f-line-alignment.component.ts","../../../projects/f-flow/src/f-selection-area/f-selection-area-base.ts","../../../projects/f-flow/src/f-selection-area/f-selection-area.component.ts","../../../projects/f-flow/src/f-flow/f-flow-base.ts","../../../projects/f-flow/src/f-flow/f-flow.component.ts","../../../projects/f-flow/src/f-flow/f-flow.component.html","../../../projects/f-flow/src/f-flow.module.ts","../../../projects/f-flow/src/foblex-flow.ts"],"sourcesContent":["import { ITransformModel } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\n\nexport const F_BACKGROUND_PATTERN = new InjectionToken<IFBackgroundPattern>('F_BACKGROUND_PATTERN');\n\nexport interface IFBackgroundPattern {\n\n setTransform(transform: ITransformModel): void;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef, Input,\n OnInit\n} from \"@angular/core\";\nimport { DomElementExtensions, ITransformModel, TransformModelExtensions } from '@foblex/core';\nimport { F_BACKGROUND_PATTERN, IFBackgroundPattern } from '../domain';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"f-cell-pattern\",\n standalone: true,\n templateUrl: \"./f-cell-pattern.component.html\",\n host: {\n '[attr.id]': 'id'\n },\n providers: [\n { provide: F_BACKGROUND_PATTERN, useExisting: FCellPatternComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FCellPatternComponent implements OnInit, IFBackgroundPattern {\n\n @Input()\n public id: string = `f-pattern-${ uniqueId++ }`;\n\n @Input()\n public verticalLineColor: string = 'rgba(0,0,0,0.1)';\n\n @Input()\n public horizontalLineColor: string = 'rgba(0,0,0,0.1)';\n\n public get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n private transform: ITransformModel = TransformModelExtensions.default();\n\n public x: number = 0;\n\n public y: number = 0;\n\n private defaultCellSize: number = 20;\n\n public cellSize = this.defaultCellSize;\n\n private pattern!: SVGPatternElement;\n private horizontalLine!: SVGLineElement;\n private verticalLine!: SVGLineElement;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n }\n\n public ngOnInit(): void {\n this.createPatternDom();\n this.redraw();\n }\n\n private createPatternDom(): void {\n this.pattern = DomElementExtensions.createSvgElement('pattern');\n this.pattern.setAttribute('patternUnits', 'userSpaceOnUse');\n this.hostElement.appendChild(this.pattern);\n this.horizontalLine = DomElementExtensions.createSvgElement('line');\n this.horizontalLine.setAttribute('stroke', this.horizontalLineColor);\n this.pattern.appendChild(this.horizontalLine);\n this.verticalLine = DomElementExtensions.createSvgElement('line');\n this.verticalLine.setAttribute('stroke', this.verticalLineColor);\n this.pattern.appendChild(this.verticalLine);\n }\n\n private calculatePattern(): void {\n this.x = this.transform.position.x + this.transform.scaledPosition.x;\n this.y = this.transform.position.y + this.transform.scaledPosition.y;\n this.cellSize = this.defaultCellSize * this.transform.scale;\n }\n\n private redraw(): void {\n this.calculatePattern();\n this.redrawPattern();\n this.redrawHorizontalLine();\n this.redrawVerticalLine();\n this.changeDetectorRef.detectChanges();\n }\n\n private redrawPattern(): void {\n this.pattern.setAttribute('x', `${ this.x }`);\n this.pattern.setAttribute('y', `${ this.y }`);\n this.pattern.setAttribute('width', `${ this.cellSize }`);\n this.pattern.setAttribute('height', `${ this.cellSize }`);\n }\n\n private redrawHorizontalLine(): void {\n this.horizontalLine.setAttribute('x1', `0`);\n this.horizontalLine.setAttribute('x2', `${ this.cellSize }`);\n this.horizontalLine.setAttribute('y1', `${ this.cellSize }`);\n this.horizontalLine.setAttribute('y2', `${ this.cellSize }`);\n }\n\n private redrawVerticalLine(): void {\n this.verticalLine.setAttribute('x1', `${ this.cellSize }`);\n this.verticalLine.setAttribute('x2', `${ this.cellSize }`);\n this.verticalLine.setAttribute('y1', `0`);\n this.verticalLine.setAttribute('y2', `${ this.cellSize }`);\n }\n\n public setTransform(transform: ITransformModel): void {\n this.transform = transform;\n this.redraw();\n }\n}\n","<ng-container></ng-container>\n","import { Directive, InjectionToken } from '@angular/core';\nimport { IHasHostElement, ITransformModel } from '@foblex/core';\n\nexport const F_BACKGROUND = new InjectionToken<FBackgroundBase>('F_BACKGROUND');\n\n@Directive()\nexport abstract class FBackgroundBase implements IHasHostElement {\n\n public abstract hostElement: HTMLElement;\n\n public abstract isBackgroundElement(element: HTMLElement | SVGElement): boolean;\n\n public abstract setTransform(transform: ITransformModel): void;\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ITransformModel } from '@foblex/core';\nimport { FConnectionBase } from './f-connection';\nimport { FFlowBase } from './f-flow';\nimport { FCanvasBase } from './f-canvas';\nimport { FBackgroundBase } from './f-backgroud';\nimport { FNodeBase } from './f-node';\nimport { FConnectorBase, FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from './f-connectors';\nimport { FDraggableBase } from './f-draggable';\n\n@Injectable()\nexport class FComponentsStore {\n\n public readonly changes: Subject<void> = new Subject<void>();\n\n public get flowHost(): HTMLElement {\n return this.fFlow?.hostElement!;\n }\n\n public get transform(): ITransformModel {\n return this.fCanvas?.transform!;\n }\n\n public fFlow: FFlowBase | undefined;\n\n public fCanvas: FCanvasBase | undefined;\n\n public fBackground: FBackgroundBase | undefined;\n\n public fNodes: FNodeBase[] = [];\n\n public fConnections: FConnectionBase[] = [];\n\n public fTempConnection: FConnectionBase | undefined;\n\n public fOutputs: FConnectorBase[] = [];\n\n public fInputs: FConnectorBase[] = [];\n\n public fOutlets: FConnectorBase[] = [];\n\n public fDraggable: FDraggableBase | undefined;\n\n public addOutput(output: FNodeOutputBase): void {\n this.fOutputs.push(output);\n this.changes.next();\n }\n\n public removeOutput(output: FNodeOutputBase): void {\n this.fOutputs = this.fOutputs.filter(o => o !== output);\n this.changes.next();\n }\n\n public addInput(input: FNodeInputBase): void {\n this.fInputs.push(input);\n this.changes.next();\n }\n\n public removeInput(input: FNodeInputBase): void {\n this.fInputs = this.fInputs.filter(i => i !== input);\n this.changes.next();\n }\n\n public addOutlet(outlet: FNodeOutletBase): void {\n this.fOutlets.push(outlet);\n this.changes.next();\n }\n\n public removeOutlet(outlet: FNodeOutletBase): void {\n this.fOutlets = this.fOutlets.filter(o => o !== outlet);\n this.changes.next();\n }\n\n public addNode(node: FNodeBase): void {\n this.fNodes.push(node);\n this.changes.next();\n }\n\n public findNode(element: HTMLElement | SVGElement): FNodeBase | undefined {\n return this.fNodes.find(n => n.isContains(element));\n }\n\n public removeNode(node: FNodeBase): void {\n this.fNodes = this.fNodes.filter(n => n !== node);\n this.changes.next();\n }\n\n public addConnection(connection: FConnectionBase): void {\n this.fConnections.push(connection);\n this.changes.next();\n }\n\n public removeConnection(connection: FConnectionBase): void {\n this.fConnections = this.fConnections.filter(c => c !== connection);\n this.changes.next();\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component, ContentChild,\n ElementRef, OnDestroy,\n OnInit\n} from \"@angular/core\";\nimport { F_BACKGROUND, FBackgroundBase } from './f-background-base';\nimport { DomElementExtensions, ITransformModel, TransformModelExtensions } from '@foblex/core';\nimport { F_BACKGROUND_PATTERN } from './domain';\nimport { FComponentsStore } from '../f-components-store';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"f-background\",\n templateUrl: \"./f-background.component.html\",\n styleUrls: [ \"./f-background.component.scss\" ],\n host: {\n 'class': 'f-component f-background'\n },\n providers: [ { provide: F_BACKGROUND, useExisting: FBackgroundComponent } ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FBackgroundComponent extends FBackgroundBase implements OnInit, AfterContentInit, OnDestroy {\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n @ContentChild(F_BACKGROUND_PATTERN, { static: true })\n public fBackgroundPattern: FBackgroundBase | undefined;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fComponentsStore: FComponentsStore\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.fComponentsStore.fBackground = this;\n }\n\n public ngAfterContentInit(): void {\n const children = this.fBackgroundPattern?.hostElement.getElementsByTagName('pattern') || [];\n const pattern = children.length ? children[ 0 ] : undefined;\n if (pattern) {\n const defs = DomElementExtensions.createSvgElement('defs');\n pattern.id = 'f-background-marker-' + uniqueId++;\n this.fBackgroundPattern?.hostElement.remove();\n defs.appendChild(pattern);\n this.hostElement?.firstChild?.appendChild(defs);\n const rect = DomElementExtensions.createSvgElement('rect');\n rect.setAttribute('fill', 'url(#' + pattern.id + ')');\n rect.setAttribute('width', '100%');\n rect.setAttribute('height', '100%');\n this.hostElement.firstChild?.appendChild(rect);\n const transform = this.fComponentsStore.fCanvas?.transform || TransformModelExtensions.default();\n this.fBackgroundPattern?.setTransform(transform);\n }\n }\n\n public override isBackgroundElement(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n\n public setTransform(transform: ITransformModel): void {\n this.fBackgroundPattern?.setTransform(transform);\n }\n\n public ngOnDestroy() {\n this.fComponentsStore.fBackground = undefined;\n }\n}\n","<svg>\n <ng-content></ng-content>\n\n<!-- <rect width=\"100%\" height=\"100%\" fill=\"url(#background-pattern)\"></rect>-->\n</svg>\n","import { IPoint } from '@foblex/core';\n\nexport class FCanvasChangeEvent {\n constructor(\n public readonly position: IPoint,\n public readonly scale: number,\n ) {\n }\n}\n","import { IHandler, IPoint, PointExtensions } from '@foblex/core';\nimport { CalculateCenterBetweenPointsRequest } from './calculate-center-between-points-request';\n\nexport class CalculateCenterBetweenPointsHandler\n implements IHandler<CalculateCenterBetweenPointsRequest, IPoint> {\n\n public handle(request: CalculateCenterBetweenPointsRequest): IPoint {\n const { source, target } = request;\n\n const offsetX = Math.abs(target.x - source.x) / 2;\n const centerX = (target.x < source.x) ? target.x + offsetX : target.x - offsetX;\n\n const offsetY = Math.abs(target.y - source.y) / 2;\n const centerY = (target.y < source.y) ? target.y + offsetY : target.y - offsetY;\n\n return PointExtensions.initialize(centerX, centerY);\n }\n}\n","import { IPoint } from '@foblex/core';\n\nexport class CalculateCenterBetweenPointsRequest {\n\n constructor(\n public source: IPoint,\n public target: IPoint,\n ) {\n }\n}\n","import { IHandler, IPoint } from '@foblex/core';\nimport { CalculateConnectionCenterRequest } from './calculate-connection-center-request';\n\nexport class CalculateConnectionCenterHandler\n implements IHandler<CalculateConnectionCenterRequest, IPoint> {\n\n public handle(request: CalculateConnectionCenterRequest): IPoint {\n\n const { points } = request;\n let totalDistance = 0;\n let distances: number[] = [];\n\n for (let i = 0; i < points.length - 1; i++) {\n const distance = this.calculateDistance(points[ i ], points[ i + 1 ]);\n distances.push(distance);\n totalDistance += distance;\n }\n\n let accumulatedDistance = 0;\n let centerIndex = 0;\n const halfTotalDistance = totalDistance / 2;\n for (let i = 0; i < distances.length; i++) {\n accumulatedDistance += distances[ i ];\n if (accumulatedDistance >= halfTotalDistance) {\n centerIndex = i;\n break;\n }\n }\n\n const remainingDistanceToCenter = halfTotalDistance - (accumulatedDistance - distances[ centerIndex ]);\n\n const result = this.findPointAtDistance(points[ centerIndex ], points[ centerIndex + 1 ], remainingDistanceToCenter);\n\n return result;\n }\n\n private calculateDistance(pointA: IPoint, pointB: IPoint): number {\n return Math.sqrt(Math.pow(pointB.x - pointA.x, 2) + Math.pow(pointB.y - pointA.y, 2));\n }\n\n private findPointAtDistance(startPoint: IPoint, endPoint: IPoint, distance: number): IPoint {\n const totalDistance = this.calculateDistance(startPoint, endPoint);\n const ratio = distance / totalDistance;\n const x = (1 - ratio) * startPoint.x + ratio * endPoint.x;\n const y = (1 - ratio) * startPoint.y + ratio * endPoint.y;\n return { x, y };\n }\n}\n","import { IPoint } from '@foblex/core';\n\nexport class CalculateConnectionCenterRequest {\n\n constructor(\n public points: IPoint[],\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { IFPathBuilderResponse } from './i-f-path-builder-response';\nimport { IFPathBuilderRequest } from './i-f-path-builder-request';\n\nexport abstract class FPathBuilderBase implements IHandler<IFPathBuilderRequest, IFPathBuilderResponse> {\n\n public abstract handle(request: IFPathBuilderRequest): IFPathBuilderResponse;\n}\n","export enum EFConnectableSide {\n\n LEFT = 'left',\n\n RIGHT = 'right',\n\n TOP = 'top',\n\n BOTTOM = 'bottom',\n\n AUTO = 'auto',\n}\n","import { IHandler, RectExtensions } from '@foblex/core';\nimport { CalculateConnectorConnectableSideRequest } from './calculate-connector-connectable-side-request';\nimport { EFConnectableSide } from '../../e-f-connectable-side';\n\nexport class CalculateConnectorConnectableSideHandler\n implements IHandler<CalculateConnectorConnectableSideRequest, EFConnectableSide> {\n\n public handle(request: CalculateConnectorConnectableSideRequest): EFConnectableSide {\n let result: EFConnectableSide;\n\n if (request.fConnector._fConnectableSide === EFConnectableSide.AUTO) {\n result = this.getSideByDelta(request.fConnector.hostElement, request.fNodeHost);\n } else {\n result = request.fConnector._fConnectableSide;\n }\n return result;\n }\n\n private getSideByDelta(fConnectorHost: HTMLElement | SVGElement, fNodeHost: HTMLElement | SVGElement): EFConnectableSide {\n let result: EFConnectableSide;\n\n const childRect = RectExtensions.fromElement(fConnectorHost);\n const parentRect = fNodeHost.getBoundingClientRect();\n\n const deltaLeft = childRect.gravityCenter.x - parentRect.left;\n const deltaRight = parentRect.right - childRect.gravityCenter.x;\n const deltaTop = childRect.gravityCenter.y - parentRect.top;\n const deltaBottom = parentRect.bottom - childRect.gravityCenter.y;\n\n const minDelta = Math.min(deltaLeft, deltaRight, deltaTop, deltaBottom);\n\n if (minDelta === deltaLeft) {\n result = EFConnectableSide.LEFT;\n } else if (minDelta === deltaRight) {\n result = EFConnectableSide.RIGHT;\n } else if (minDelta === deltaTop) {\n result = EFConnectableSide.TOP;\n } else {\n result = EFConnectableSide.BOTTOM;\n }\n\n return result;\n }\n}\n","import { FConnectorBase } from '../../f-connector-base';\n\nexport class CalculateConnectorConnectableSideRequest {\n\n constructor(\n public fConnector: FConnectorBase,\n public fNodeHost: HTMLElement | SVGElement\n ) {\n }\n}\n","import { Subject } from 'rxjs';\nimport { IHasHostElement } from '@foblex/core';\nimport { EFConnectableSide } from './e-f-connectable-side';\nimport { IHasStateChanges } from '../i-has-state-changes';\n\nexport abstract class FConnectorBase implements IHasStateChanges, IHasHostElement {\n\n public abstract id: string;\n\n public abstract disabled: boolean;\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public abstract canBeConnected: boolean;\n\n public abstract isConnected: boolean;\n\n public fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n public _fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n\n public setConnected(isConnected: boolean): void {\n this.isConnected = isConnected;\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FConnectorBase } from '../f-connector-base';\n\nexport const F_NODE_INPUT = new InjectionToken<FNodeInputBase>('F_NODE_INPUT');\n\n@Directive()\nexport abstract class FNodeInputBase extends FConnectorBase {\n\n public abstract multiple: boolean;\n\n public isConnected: boolean = false;\n\n public get canBeConnected(): boolean {\n return !this.disabled && (this.multiple ? true : !this.isConnected);\n }\n}\n","export function isNodeInput(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeInput]');\n}\n","import { Directive, ElementRef, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { F_NODE_INPUT, FNodeInputBase } from './f-node-input-base';\nimport { EFConnectableSide } from '../e-f-connectable-side';\nimport { FNodeBase, F_NODE } from '../../f-node';\nimport { FComponentsStore } from '../../f-components-store';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeInput]\",\n exportAs: 'fNodeInput',\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-input\",\n '[class.f-node-input-multiple]': 'multiple',\n '[class.f-node-input-disabled]': 'disabled',\n '[class.f-node-input-not-connectable]': '!canBeConnected',\n },\n providers: [ { provide: F_NODE_INPUT, useExisting: FNodeInputDirective } ],\n})\nexport class FNodeInputDirective extends FNodeInputBase implements OnInit, OnDestroy {\n\n @Input('fInputId')\n public override id: any = `f-node-input-${ uniqueId++ }`;\n\n @Input('fInputMultiple')\n public override multiple: boolean = true;\n\n @Input('fInputDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n @Input('fInputConnectableSide')\n public override _fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n public override isConnected: boolean = false;\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_NODE) private fNode: FNodeBase,\n private fComponentsStore: FComponentsStore,\n ) {\n super();\n }\n\n public ngOnInit() {\n if (!this.fNode) {\n throw new Error('fNodeInput must be inside f-node');\n }\n this.fComponentsStore.addInput(this);\n this.fNode.addConnector(this);\n }\n\n public override setConnected(isConnected: boolean): void {\n this.isConnected = isConnected;\n this.hostElement.classList.toggle('f-node-input-connected', isConnected);\n }\n\n public ngOnDestroy(): void {\n this.fNode.removeConnector(this);\n this.fComponentsStore.removeInput(this);\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FConnectorBase } from '../f-connector-base';\n\nexport const F_NODE_OUTLET = new InjectionToken<FNodeOutletBase>('F_NODE_OUTLET');\n\n@Directive()\nexport abstract class FNodeOutletBase extends FConnectorBase {\n\n public abstract isConnectionFromOutlet: boolean;\n\n public override isConnected: boolean = false;\n\n private outputs: FConnectorBase[] = [];\n\n public get canBeConnected(): boolean {\n return !this.disabled;\n }\n\n public setOutputs(outputs: FConnectorBase[]): void {\n this.outputs = outputs;\n }\n}\n","export function isNodeOutlet(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeOutlet]');\n}\n","import { Directive, ElementRef, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { F_NODE_OUTLET, FNodeOutletBase } from './f-node-outlet-base';\nimport { F_NODE, FNodeBase } from '../../f-node';\nimport { FComponentsStore } from '../../f-components-store';\nimport { EFConnectableSide } from '../e-f-connectable-side';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeOutlet]\",\n exportAs: 'fNodeOutlet',\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-outlet\",\n '[class.f-node-outlet-disabled]': 'disabled'\n },\n providers: [ { provide: F_NODE_OUTLET, useExisting: FNodeOutletDirective } ],\n})\nexport class FNodeOutletDirective extends FNodeOutletBase implements OnInit, OnDestroy {\n\n @Input('fOutletId')\n public override id: string = `f-node-outlet-${ uniqueId++ }`;\n\n @Input('fOutletDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n public override fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n public override _fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n @Input()\n public override isConnectionFromOutlet: boolean = false\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_NODE) private fNode: FNodeBase,\n private fComponentsStore: FComponentsStore,\n ) {\n super();\n }\n\n public ngOnInit() {\n if (!this.fNode) {\n throw new Error('fNodeOutlet must be inside fNode Directive');\n }\n this.fComponentsStore.addOutlet(this);\n }\n\n public ngOnDestroy(): void {\n this.fComponentsStore.removeOutlet(this);\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FConnectorBase } from '../f-connector-base';\n\nexport const F_NODE_OUTPUT = new InjectionToken<FNodeOutputBase>('F_NODE_OUTPUT');\n\n@Directive()\nexport abstract class FNodeOutputBase extends FConnectorBase {\n\n public isConnected: boolean = false;\n\n public override get canBeConnected(): boolean {\n return !this.disabled && !this.isConnected;\n }\n}\n","export function isNodeOutput(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeOutput]');\n}\n","import { Directive, ElementRef, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { FNodeOutputBase, F_NODE_OUTPUT } from './f-node-output-base';\nimport { EFConnectableSide } from '../e-f-connectable-side';\nimport { F_NODE, FNodeBase } from '../../f-node';\nimport { FComponentsStore } from '../../f-components-store';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeOutput]\",\n exportAs: 'fNodeOutput',\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-output\",\n '[class.f-node-output-disabled]': 'disabled',\n },\n providers: [ { provide: F_NODE_OUTPUT, useExisting: FNodeOutputDirective } ],\n})\nexport class FNodeOutputDirective extends FNodeOutputBase implements OnInit, OnDestroy {\n\n @Input('fOutputId')\n public override id: string = `f-node-output-${ uniqueId++ }`;\n\n @Input('fOutputDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n @Input('fOutputConnectableSide')\n public override _fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n public override isConnected: boolean = false;\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_NODE) private fNode: FNodeBase,\n private fComponentsStore: FComponentsStore,\n ) {\n super();\n }\n\n public ngOnInit() {\n if (!this.fNode) {\n throw new Error('fNodeOutput must be inside fNode Directive');\n }\n this.fComponentsStore.addOutput(this);\n this.fNode.addConnector(this);\n }\n\n public override setConnected(isConnected: boolean): void {\n this.isConnected = isConnected;\n this.hostElement.classList.toggle('f-node-output-connected', isConnected);\n }\n\n public ngOnDestroy(): void {\n this.fNode.removeConnector(this);\n this.fComponentsStore.removeOutput(this);\n }\n}\n","import { IPoint, PointExtensions } from '@foblex/core';\nimport { FPathBuilderBase } from './f-path-builder-base';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport { IFPathBuilderRequest } from './i-f-path-builder-request';\nimport { IFPathBuilderResponse } from './i-f-path-builder-response';\nimport { CalculateConnectionCenterHandler, CalculateConnectionCenterRequest } from './calculate-connection-center';\n\nexport class FBezierPathBuilder extends FPathBuilderBase {\n\n private static getAnglePoint(side: EFConnectableSide, source: IPoint, target: IPoint): IPoint {\n let result: IPoint = PointExtensions.initialize(source.x, 0.5 * (source.y + target.y));\n\n if (side === EFConnectableSide.LEFT || side === EFConnectableSide.RIGHT) {\n result = PointExtensions.initialize(0.5 * (source.x + target.x), source.y);\n }\n\n return result;\n }\n\n public handle(request: IFPathBuilderRequest): IFPathBuilderResponse {\n const { source, sourceSide, target, targetSide } = request;\n\n const sourceAnglePoint = FBezierPathBuilder.getAnglePoint(sourceSide, source, target);\n\n const targetAnglePoint = FBezierPathBuilder.getAnglePoint(targetSide, source, target);\n\n const path = `M ${ source.x } ${ source.y } C ${ sourceAnglePoint.x } ${ sourceAnglePoint.y }, ${ targetAnglePoint.x } ${ targetAnglePoint.y }, ${ target.x + 0.0001 } ${ target.y + 0.0001 }`;\n\n const center = new CalculateConnectionCenterHandler().handle(\n new CalculateConnectionCenterRequest([source, sourceAnglePoint, targetAnglePoint, target])\n );\n\n return { path, center };\n }\n}\n","export enum EFConnectionType {\n\n SEGMENT = 'segment',\n\n STRAIGHT = 'straight',\n\n BEZIER = 'bezier',\n}\n","import { IFPathBuilderRequest } from './i-f-path-builder-request';\nimport { IFPathBuilderResponse } from './i-f-path-builder-response';\nimport { FPathBuilderBase } from './f-path-builder-base';\nimport { CalculateConnectionCenterHandler, CalculateConnectionCenterRequest } from './calculate-connection-center';\n\nexport class FStraightPathBuilder extends FPathBuilderBase {\n\n public handle(request: IFPathBuilderRequest): IFPathBuilderResponse {\n const { source, target } = request;\n const path = `M ${ source.x } ${ source.y } L ${ target.x + 0.0001 } ${ target.y + 0.0001 }`;\n\n const center = new CalculateConnectionCenterHandler().handle(\n new CalculateConnectionCenterRequest([source, target])\n );\n\n return { path, center };\n }\n}\n","import { IMap, IPoint, PointExtensions } from '@foblex/core';\nimport { FPathBuilderBase } from './f-path-builder-base';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport { IFPathBuilderRequest } from './i-f-path-builder-request';\nimport { IFPathBuilderResponse } from './i-f-path-builder-response';\nimport {\n CalculateCenterBetweenPointsHandler,\n CalculateCenterBetweenPointsRequest\n} from './calculate-center-between-points';\nimport { CalculateConnectionCenterHandler, CalculateConnectionCenterRequest } from './calculate-connection-center';\n\nconst CONNECTOR_SIDE_POINT: IMap<IPoint> = {\n\n [ EFConnectableSide.LEFT ]: PointExtensions.initialize(-1, 0),\n\n [ EFConnectableSide.RIGHT ]: PointExtensions.initialize(1, 0),\n\n [ EFConnectableSide.TOP ]: PointExtensions.initialize(0, -1),\n\n [ EFConnectableSide.BOTTOM ]: PointExtensions.initialize(0, 1),\n\n [ EFConnectableSide.AUTO ]: PointExtensions.initialize(0, 0),\n};\n\nexport class FSegmentPathBuilder extends FPathBuilderBase {\n\n public handle(request: IFPathBuilderRequest): IFPathBuilderResponse {\n const { source, sourceSide, target, targetSide } = request;\n\n const { points, center } = this.getPathPoints(\n source,\n sourceSide,\n target,\n targetSide,\n request.offset\n );\n\n const path = this.buildPath(points, request.radius);\n\n return { path, center };\n }\n\n private getPathPoints(\n source: IPoint, sourceSide: EFConnectableSide, target: IPoint, targetSide: EFConnectableSide, offset: number\n ): { points: IPoint[], center: IPoint } {\n\n const sourceDirection = CONNECTOR_SIDE_POINT[ sourceSide ];\n const targetDirection = CONNECTOR_SIDE_POINT[ targetSide ];\n\n const sourceGap: IPoint = { x: source.x + sourceDirection.x * offset, y: source.y + sourceDirection.y * offset };\n const targetGap: IPoint = { x: target.x + targetDirection.x * offset, y: target.y + targetDirection.y * offset };\n\n const direction = this.getDirection(sourceGap, sourceSide, targetGap);\n const directionAccessor = direction.x !== 0 ? 'x' : 'y';\n const currentDirection = direction[ directionAccessor ];\n\n let points: IPoint[] = [];\n const sourceGapOffset = PointExtensions.initialize();\n const targetGapOffset = PointExtensions.initialize();\n\n const centerBetweenPoints = new CalculateCenterBetweenPointsHandler().handle(\n new CalculateCenterBetweenPointsRequest(source, target)\n );\n\n if (sourceDirection[ directionAccessor ] * targetDirection[ directionAccessor ] === -1) {\n const verticalSplit: IPoint[] = [\n { x: centerBetweenPoints.x, y: sourceGap.y },\n { x: centerBetweenPoints.x, y: targetGap.y },\n ];\n const horizontalSplit: IPoint[] = [\n { x: sourceGap.x, y: centerBetweenPoints.y },\n { x: targetGap.x, y: centerBetweenPoints.y },\n ];\n\n if (sourceDirection[ directionAccessor ] === currentDirection) {\n points = directionAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = directionAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n const sourceTarget: IPoint[] = [ { x: sourceGap.x, y: targetGap.y } ];\n const targetSource: IPoint[] = [ { x: targetGap.x, y: sourceGap.y } ];\n\n if (directionAccessor === 'x') {\n points = sourceDirection.x === currentDirection ? targetSource : sourceTarget;\n } else {\n points = sourceDirection.y === currentDirection ? sourceTarget : targetSource;\n }\n\n if (sourceSide === targetSide) {\n const diff = Math.abs(source[ directionAccessor ] - target[ directionAccessor ]);\n\n if (diff <= offset) {\n const gapOffset = Math.min(offset - 1, offset - diff);\n if (sourceDirection[ directionAccessor ] === currentDirection) {\n sourceGapOffset[ directionAccessor ] = (sourceGap[ directionAccessor ] > source[ directionAccessor ] ? -1 : 1) * gapOffset;\n } else {\n targetGapOffset[ directionAccessor ] = (targetGap[ directionAccessor ] > target[ directionAccessor ] ? -1 : 1) * gapOffset;\n }\n }\n }\n\n if (sourceSide !== targetSide) {\n const dirAccessorOpposite = directionAccessor === 'x' ? 'y' : 'x';\n const isSameDir = sourceDirection[ directionAccessor ] === targetDirection[ dirAccessorOpposite ];\n const sourceGtTargetOppo = sourceGap[ dirAccessorOpposite ] > targetGap[ dirAccessorOpposite ];\n const sourceLtTargetOppo = sourceGap[ dirAccessorOpposite ] < targetGap[ dirAccessorOpposite ];\n const flipSourceTarget =\n (sourceDirection[ directionAccessor ] === 1 &&\n ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDirection[ directionAccessor ] !== 1 &&\n ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = directionAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n\n const pathPoints = [\n source,\n { x: sourceGap.x + sourceGapOffset.x, y: sourceGap.y + sourceGapOffset.y },\n ...points,\n { x: targetGap.x + targetGapOffset.x, y: targetGap.y + targetGapOffset.y },\n target,\n ];\n\n const center = new CalculateConnectionCenterHandler().handle(\n new CalculateConnectionCenterRequest(pathPoints)\n );\n\n return { points: pathPoints, center: center };\n }\n\n private getDirection(source: IPoint, sourceSide: EFConnectableSide, target: IPoint): IPoint {\n if (sourceSide === EFConnectableSide.LEFT || sourceSide === EFConnectableSide.RIGHT) {\n return source.x < target.x ? PointExtensions.initialize(1, 0) : PointExtensions.initialize(-1, 0);\n }\n return source.y < target.y ? PointExtensions.initialize(0, 1) : PointExtensions.initialize(0, -1);\n }\n\n private distance(a: IPoint, b: IPoint): number {\n return Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));\n }\n\n private buildPath(points: IPoint[], borderRadius: number): string {\n let path = '';\n for (let i = 0; i < points.length; i++) {\n const p = points[ i ];\n let segment = '';\n\n if (i > 0 && i < points.length - 1) {\n segment = this.getBend(points[ i - 1 ], p, points[ i + 1 ], borderRadius);\n } else if (i === points.length - 1) {\n segment = this.buildLastLineSegment(i, p);\n } else {\n segment = this.buildMoveOrLineSegment(i, p);\n }\n path += segment;\n }\n\n return path;\n }\n\n private getBend(a: IPoint, b: IPoint, c: IPoint, size: number): string {\n const bendSize = Math.min(this.distance(a, b) / 2, this.distance(b, c) / 2, size);\n const { x, y } = b;\n\n if ((a.x === x && x === c.x) || (a.y === y && y === c.y)) {\n return `L${ x } ${ y }`;\n }\n\n if (a.y === y) {\n const xDir = a.x < c.x ? -1 : 1;\n const yDir = a.y < c.y ? 1 : -1;\n return `L ${ x + bendSize * xDir },${ y }Q ${ x },${ y } ${ x },${ y + bendSize * yDir }`;\n }\n\n const xDir = a.x < c.x ? 1 : -1;\n const yDir = a.y < c.y ? -1 : 1;\n return `L ${ x },${ y + bendSize * yDir }Q ${ x },${ y } ${ x + bendSize * xDir },${ y }`;\n }\n\n private buildMoveOrLineSegment(index: number, point: IPoint): string {\n return `${ index === 0 ? 'M' : 'L' }${ point.x } ${ point.y }`;\n }\n\n private buildLastLineSegment(index: number, point: IPoint): string {\n return `L${ point.x + 0.0001 } ${ point.y + 0.0001 }`;\n }\n}\n","import { EFConnectionType } from '../e-f-connection-type';\nimport { IMap } from '@foblex/core';\nimport { FPathBuilderBase } from './f-path-builder-base';\nimport { FStraightPathBuilder } from './f-straight.path-builder';\nimport { FBezierPathBuilder } from './f-bezier.path-builder';\nimport { FSegmentPathBuilder } from './f-segment.path-builder';\nimport { IFPathBuilderRequest } from './i-f-path-builder-request';\nimport { IFPathBuilderResponse } from './i-f-path-builder-response';\n\nexport class FPathBuilderSelector extends FPathBuilderBase {\n\n private builders: IMap<FPathBuilderBase> = {\n\n [EFConnectionType.STRAIGHT]: new FStraightPathBuilder(),\n\n [EFConnectionType.BEZIER]: new FBezierPathBuilder(),\n\n [EFConnectionType.SEGMENT]: new FSegmentPathBuilder(),\n }\n\n public handle(request: IFPathBuilderRequest): IFPathBuilderResponse {\n return this.builders[request.type].handle(request);\n }\n}\n","import { sanitizeElementId } from '@foblex/core';\n\nexport const F_CONNECTION_IDENTIFIERS = {\n\n textId(connectionId: string): string {\n return sanitizeElementId('connection_text_' + connectionId);\n },\n connectionForSelectionId(connectionId: string): string {\n return sanitizeElementId('connection_for_selection_' + connectionId);\n },\n connectionId(connectionId: string): string {\n return sanitizeElementId('connection_' + connectionId);\n },\n gradientId(connectionId: string): string {\n return sanitizeElementId('connection_gradient_' + connectionId);\n },\n linkToGradient(connectionId: string): string {\n return `url(#${ F_CONNECTION_IDENTIFIERS.gradientId(connectionId) })`;\n },\n linkToConnection(connectionId: string): string {\n return `#${ F_CONNECTION_IDENTIFIERS.connectionId(connectionId) }`;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const F_CONNECTION = new InjectionToken('F_CONNECTION');\n","import { Directive, ElementRef, Inject, OnInit } from '@angular/core';\nimport { IHasHostElement } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { F_CONNECTION } from '../f-connection.injection-token';\nimport { IHasConnectionText } from '../i-has-connection-text';\nimport { IHasConnectionFromTo } from '../i-has-connection-from-to';\n\n@Directive({\n selector: 'textPath[f-connection-text-path]',\n host: {\n '[attr.href]': 'linkToConnection'\n }\n})\nexport class FConnectionTextPathDirective implements IHasHostElement, OnInit {\n\n public get linkToConnection(): string {\n return F_CONNECTION_IDENTIFIERS.linkToConnection(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get hostElement(): SVGTextPathElement {\n return this.elementReference.nativeElement;\n }\n\n public symbolWidth: number = 8;\n public fontSize: string = '12px';\n\n constructor(\n private elementReference: ElementRef<SVGTextPathElement>,\n @Inject(F_CONNECTION) private base: IHasConnectionText & IHasConnectionFromTo,\n ) {\n }\n\n public ngOnInit(): void {\n this.hostElement.setAttribute('startOffset', '50%');\n this.hostElement.setAttribute('text-anchor', `middle`);\n this.symbolWidth = this.getSymbolWidth(this.base.fText || '');\n }\n\n public getBBox(): DOMRect {\n return this.hostElement.getBBox();\n }\n\n private getFontStyles(element: SVGTextPathElement): { fontSize: string, fontFamily: string } {\n const computedStyles = window.getComputedStyle(element);\n return {\n fontSize: computedStyles.fontSize,\n fontFamily: computedStyles.fontFamily\n };\n }\n\n private getSymbolWidth(name: string): number {\n const text = name || 'connection';\n const { fontFamily, fontSize } = this.getFontStyles(this.hostElement);\n this.fontSize = fontSize;\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n if (!context) {\n throw new Error('Canvas context is not supported');\n }\n\n context.font = `${ fontSize } ${ fontFamily }`;\n\n const metrics = context.measureText(text);\n const symbolWidth = metrics.width / text.length;\n return symbolWidth;\n }\n}\n","import { IHasHostElement, IVector } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\n\nexport const CONNECTION_TEXT = new InjectionToken<IConnectionText>('CONNECTION_TEXT');\n\nexport interface IConnectionText extends IHasHostElement {\n\n redraw(vector: IVector): void;\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Inject, ViewChild\n} from \"@angular/core\";\nimport { IVector, PointExtensions } from '@foblex/core';\nimport { FConnectionTextPathDirective } from './f-connection-text-path.directive';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IHasConnectionText } from '../i-has-connection-text';\nimport { IHasConnectionFromTo } from '../i-has-connection-from-to';\nimport { F_CONNECTION } from '../f-connection.injection-token';\nimport { CONNECTION_TEXT, IConnectionText } from './i-connection-text';\n\n@Component({\n selector: \"text[f-connection-text]\",\n templateUrl: \"./f-connection-text.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-text\",\n '[attr.id]': 'textId',\n },\n providers: [ { provide: CONNECTION_TEXT, useExisting: FConnectionTextComponent } ],\n})\nexport class FConnectionTextComponent implements IConnectionText {\n\n public get textId(): string {\n return F_CONNECTION_IDENTIFIERS.textId(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get hostElement(): SVGTextElement {\n return this.elementReference.nativeElement;\n }\n\n public get text(): string {\n return this.base.fText || '';\n }\n\n @ViewChild(FConnectionTextPathDirective, { static: true })\n public textPathDirective!: FConnectionTextPathDirective;\n\n constructor(\n private elementReference: ElementRef<SVGTextElement>,\n @Inject(F_CONNECTION) private base: IHasConnectionText & IHasConnectionFromTo,\n ) {\n }\n\n public redraw(vector: IVector): void {\n\n const isTextReverse: boolean = FConnectionTextComponent.isTextReverse(vector);\n const dyValue = this.calculateDy(this.textPathDirective.fontSize, isTextReverse);\n\n this.hostElement.setAttribute('dy', dyValue);\n\n const textRect = this.textPathDirective.getBBox();\n const textRectCenter = [ textRect.x + textRect.width / 2, textRect.y + textRect.height / 2 ];\n this.hostElement.setAttribute('transform', isTextReverse ? `rotate(180, ${ textRectCenter })` : '');\n const startOffset = FConnectionTextComponent.getTextStartOffset(vector, this.base.fText || '', this.textPathDirective.symbolWidth);\n if (startOffset < 0) {\n\n this.hostElement.style.display = 'none';\n } else {\n\n this.hostElement.style.display = 'unset';\n }\n }\n\n private calculateDy(fontSize: string, isTextReverse: boolean): string {\n const fontSizeNumber = parseFloat(fontSize);\n\n const dyValue = isTextReverse ? fontSizeNumber * 1.5 : fontSizeNumber * -0.8;\n\n return dyValue.toString();\n }\n\n private static isTextReverse(vector: IVector): boolean {\n return vector.point1.x > vector.point2.x;\n }\n\n private static getTextStartOffset(vector: IVector, name: string, symbolWidth: number): number {\n const vectorLength: number = PointExtensions.hypotenuse(vector.point1, vector.point2);\n return vectorLength / 2 - ((name || '').length * symbolWidth) / 2;\n }\n}\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:textPath f-connection-text-path>\n {{ text }}\n </svg:textPath>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef\n} from \"@angular/core\";\nimport { IHasHostElement, IPoint } from '@foblex/core';\n\nexport const F_CONNECTION_DRAG_HANDLE_CLASS = 'f-connection-drag-handle';\n\n@Component({\n selector: \"circle[f-connection-drag-handle]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'class'\n }\n})\nexport class FConnectionDragHandleComponent implements IHasHostElement {\n\n public readonly class: string = F_CONNECTION_DRAG_HANDLE_CLASS;\n\n public get hostElement(): SVGCircleElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGCircleElement>\n ) {\n }\n\n public redraw(point: IPoint): void {\n this.hostElement.setAttribute('cx', point.x.toString());\n this.hostElement.setAttribute('cy', point.y.toString());\n }\n}\n\n","import { IHasHostElement, IVector } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\n\nexport const CONNECTION_GRADIENT = new InjectionToken<IConnectionGradient>('CONNECTION_GRADIENT');\n\nexport interface IConnectionGradient extends IHasHostElement {\n\n initialize(): void;\n\n redraw(vector: IVector): void;\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, Inject } from \"@angular/core\";\nimport { IVector, Point } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IHasConnectionFromTo } from '../i-has-connection-from-to';\nimport { IHasConnectionColor } from '../i-has-connection-color';\nimport { F_CONNECTION } from '../f-connection.injection-token';\nimport { CONNECTION_GRADIENT, IConnectionGradient } from './i-connection-gradient';\n\n@Component({\n selector: \"linearGradient[fConnectionGradient]\",\n templateUrl: \"./f-connection-gradient.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-gradient\",\n '[attr.id]': 'gradientId'\n },\n providers: [ { provide: CONNECTION_GRADIENT, useExisting: FConnectionGradientComponent } ],\n})\nexport class FConnectionGradientComponent implements IConnectionGradient {\n\n public get gradientId(): string {\n return F_CONNECTION_IDENTIFIERS.gradientId(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get hostElement(): SVGLinearGradientElement {\n return this.elementReference.nativeElement;\n }\n\n public get stop1Element(): SVGStopElement {\n return this.elementReference.nativeElement.children.item(0) as SVGStopElement;\n }\n\n public get stop2Element(): SVGStopElement {\n return this.elementReference.nativeElement.children.item(1) as SVGStopElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGLinearGradientElement>,\n @Inject(F_CONNECTION) private base: IHasConnectionColor & IHasConnectionFromTo,\n ) {\n }\n\n public initialize(): void {\n this.stop1Element.setAttribute('offset', '0%');\n this.stop2Element.setAttribute('offset', '100%');\n }\n\n private updateGradient(): void {\n this.setFromColor(this.base.fStartColor);\n this.setToColor(this.base.fEndColor);\n }\n\n private setFromColor(color: string | undefined): void {\n this.stop1Element.setAttribute('stop-color', color || 'transparent');\n }\n\n private setToColor(color: string | undefined): void {\n this.stop2Element.setAttribute('stop-color', color || 'transparent');\n }\n\n public redraw(vector: IVector): void {\n const x: number = vector.point2.x - vector.point1.x;\n const y: number = vector.point2.y - vector.point1.y;\n const distance: number = Math.sqrt(x * x + y * y) || 0.01;\n\n const from = new Point(0.5 - (0.5 * x) / distance, 0.5 - (0.5 * y) / distance);\n\n this.hostElement.setAttribute('x1', from.x.toString());\n this.hostElement.setAttribute('y1', from.y.toString());\n\n const to = new Point(0.5 + (0.5 * x) / distance, 0.5 + (0.5 * y) / distance);\n this.hostElement.setAttribute('x2', to.x.toString());\n this.hostElement.setAttribute('y2', to.y.toString());\n this.updateGradient();\n }\n}\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:stop/>\n <svg:stop/>\n</ng-container>\n","import { IHasHostElement } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\n\nexport const CONNECTION_PATH = new InjectionToken<IConnectionPath>('CONNECTION_PATH');\n\nexport interface IConnectionPath extends IHasHostElement {\n\n initialize(): void;\n\n setPath(path: string): void;\n\n select(): void;\n\n deselect(): void;\n}\n","import { GuidExtensions } from '@foblex/core';\n\nexport const FLOW = {\n UID: GuidExtensions.generate(),\n};\n\nexport function getFlowUid(): string {\n return FLOW.UID;\n}\n","export enum EFMarkerType {\n\n START = 'f-connection-marker-start',\n\n END = 'f-connection-marker-end',\n\n SELECTED_START = 'f-connection-selected-marker-start',\n\n SELECTED_END = 'f-connection-selected-marker-end',\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { IHasHostElement } from '@foblex/core';\n\n\nexport const F_MARKER = new InjectionToken('F_MARKER');\n\n@Directive()\nexport abstract class FMarkerBase implements IHasHostElement {\n\n public abstract hostElement: HTMLElement;\n\n public abstract width: number;\n\n public abstract height: number;\n\n public abstract refX: number;\n\n public abstract refY: number;\n\n public abstract type: string;\n}\n","import {\n Directive, ElementRef, Input\n} from \"@angular/core\";\nimport { F_MARKER, FMarkerBase } from './f-marker-base';\nimport { EFMarkerType } from './e-f-marker-type';\n\n@Directive({\n selector: \"svg[fMarker]\",\n standalone: true,\n host: {\n class: \"f-component f-marker\"\n },\n providers: [ { provide: F_MARKER, useExisting: FMarkerDirective } ],\n})\nexport class FMarkerDirective extends FMarkerBase {\n\n @Input()\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n @Input()\n public override width: number = 0;\n\n @Input()\n public override height: number = 0;\n\n @Input()\n public override refX: number = 0;\n\n @Input()\n public override refY: number = 0;\n\n\n @Input()\n public override type: string = EFMarkerType.START;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n ) {\n super();\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, Inject } from \"@angular/core\";\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IHasConnectionColor } from '../i-has-connection-color';\nimport { IHasConnectionFromTo } from '../i-has-connection-from-to';\nimport { F_CONNECTION } from '../f-connection.injection-token';\nimport { CONNECTION_PATH, IConnectionPath } from './i-connection-path';\nimport { sanitizeElementId } from '@foblex/core';\nimport { getFlowUid } from '../../../get-flow-uid';\nimport { EFMarkerType } from '../../f-marker';\n\n@Component({\n selector: \"path[f-connection-path]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-path\",\n '[attr.id]': 'attrConnectionId',\n '[attr.stroke]': 'linkToGradient',\n },\n providers: [ { provide: CONNECTION_PATH, useExisting: FConnectionPathComponent } ],\n})\nexport class FConnectionPathComponent implements IConnectionPath {\n\n public get linkToGradient(): string {\n return F_CONNECTION_IDENTIFIERS.linkToGradient(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get attrConnectionId(): string {\n return F_CONNECTION_IDENTIFIERS.connectionId(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get hostElement(): SVGPathElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGPathElement>,\n @Inject(F_CONNECTION) private base: IHasConnectionColor & IHasConnectionFromTo\n ) {\n }\n\n public initialize(): void {\n this.deselect();\n }\n\n public setPath(path: string): void {\n this.hostElement.setAttribute(\"d\", `${ path }`);\n }\n\n public select(): void {\n this.hostElement.setAttribute('marker-start', `url(#${ this.getMarkerId(EFMarkerType.SELECTED_START) })`);\n this.hostElement.setAttribute('marker-end', `url(#${ this.getMarkerId(EFMarkerType.SELECTED_END) })`);\n }\n\n public deselect(): void {\n this.hostElement.setAttribute('marker-start', `url(#${ this.getMarkerId(EFMarkerType.START) })`);\n this.hostElement.setAttribute('marker-end', `url(#${ this.getMarkerId(EFMarkerType.END) })`);\n }\n\n private getMarkerId(type: EFMarkerType): string {\n return sanitizeElementId(`${ getFlowUid() }-${ type }-${ this.base.fConnectionId }`);\n }\n\n public isSelected(): boolean {\n return this.hostElement.getAttribute('marker-start') === `url(#${ this.getMarkerId(EFMarkerType.SELECTED_START) })`\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Inject\n} from \"@angular/core\";\nimport { IHasHostElement } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IHasConnectionFromTo } from '../i-has-connection-from-to';\nimport { F_CONNECTION } from '../f-connection.injection-token';\n\n@Component({\n selector: \"path[fConnectionSelection]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-selection\",\n '[attr.id]': 'connectionForSelectionId',\n },\n})\nexport class FConnectionSelectionComponent implements IHasHostElement {\n\n public get connectionForSelectionId(): string {\n return F_CONNECTION_IDENTIFIERS.connectionForSelectionId(\n this.base.fOutputId + this.base.fInputId\n );\n }\n\n public get hostElement(): SVGPathElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGPathElement>,\n @Inject(F_CONNECTION) private base: IHasConnectionFromTo,\n ) {\n }\n\n public setPath(path: string) {\n this.hostElement.setAttribute(\"d\", `${ path }`);\n }\n}\n\n","import { IHasHostElement, AbstractConstructor, Constructor } from '@foblex/core';\nimport { IConnectionPath } from '../f-path';\n\nexport interface ISelectable {\n\n hostElement: HTMLElement | SVGElement;\n\n select(): void;\n\n deselect(): void;\n\n isSelected(): boolean;\n}\n\nexport const F_SELECTED_CLASS = 'f-selected';\n\ntype CanChangeConnectionSelectionConstructor = Constructor<ISelectable> & AbstractConstructor<ISelectable>;\n\nexport function mixinChangeConnectionSelection<T extends AbstractConstructor<IHasHostElement>>(base: T): CanChangeConnectionSelectionConstructor & T;\nexport function mixinChangeConnectionSelection<T extends Constructor<IHasHostElement>>(base: T): CanChangeConnectionSelectionConstructor & T {\n return class extends base {\n\n public fPath: IConnectionPath | undefined;\n\n public deselect(): void {\n this.fPath?.deselect();\n this.hostElement.classList.remove(F_SELECTED_CLASS);\n }\n\n public select(): void {\n this.fPath?.select();\n this.hostElement.classList.add(F_SELECTED_CLASS);\n }\n\n public isSelected(): boolean {\n return this.hostElement.classList.contains(F_SELECTED_CLASS);\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { IHasHostElement, AbstractConstructor, Constructor } from '@foblex/core';\n\nexport interface ICanChangeConnectionVisibility {\n\n hostElement: HTMLElement | SVGElement;\n\n show(): void;\n\n hide(): void;\n}\n\ntype CanChangeConnectionVisibilityConstructor = Constructor<ICanChangeConnectionVisibility> & AbstractConstructor<ICanChangeConnectionVisibility>;\n\nexport function mixinChangeConnectionVisibility<T extends AbstractConstructor<IHasHostElement>>(base: T): CanChangeConnectionVisibilityConstructor & T;\nexport function mixinChangeConnectionVisibility<T extends Constructor<IHasHostElement>>(base: T): CanChangeConnectionVisibilityConstructor & T {\n return class extends base {\n\n public show(): void {\n this.hostElement.style.display = \"unset\";\n }\n\n public hide(): void {\n this.hostElement.style.display = \"none\";\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { Directive, ElementRef, QueryList } from '@angular/core';\nimport { DomElementExtensions, IHasHostElement, IPoint, IVector, VectorExtensions } from '@foblex/core';\nimport { Subject } from 'rxjs';\nimport { EFConnectionBehavior } from './e-f-connection-behavior';\nimport { EFConnectionType } from './e-f-connection-type';\nimport { IHasConnectionColor } from './i-has-connection-color';\nimport { IHasConnectionFromTo } from './i-has-connection-from-to';\nimport { IHasConnectionText } from './i-has-connection-text';\nimport {\n ICanChangeConnectionVisibility,\n ISelectable,\n mixinChangeConnectionSelection,\n mixinChangeConnectionVisibility\n} from './mixins';\nimport { IConnectionPath } from './f-path';\nimport { IConnectionGradient } from './f-gradient';\nimport { FConnectionDragHandleComponent } from './f-drag-handle';\nimport { FConnectionSelectionComponent } from './f-selection';\nimport { IConnectionText } from './f-connection-text';\nimport { IHasStateChanges } from '../../i-has-state-changes';\nimport { FMarkerBase } from '../f-marker';\nimport { getFlowUid } from '../../get-flow-uid';\nimport { EFConnectableSide } from '../../f-connectors';\nimport { FPathBuilderBase, FPathBuilderSelector } from './domain';\n\nconst MIXIN_BASE = mixinChangeConnectionSelection(\n mixinChangeConnectionVisibility(\n class {\n constructor(\n public hostElement: HTMLElement\n ) {\n }\n }));\n\n@Directive()\nexport abstract class FConnectionBase extends MIXIN_BASE\n implements IHasHostElement, ISelectable,\n ICanChangeConnectionVisibility,\n IHasStateChanges, IHasConnectionColor,\n IHasConnectionFromTo, IHasConnectionText {\n\n public abstract fConnectionId: string;\n\n public abstract fStartColor: string;\n\n public abstract fEndColor: string;\n\n public abstract fOutputId: string;\n\n public abstract fInputId: string;\n\n public path: string = '';\n\n public vector: IVector = VectorExtensions.initialize();\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public abstract disabled: boolean;\n\n public abstract boundingElement: HTMLElement | SVGElement;\n\n public abstract fBehavior: EFConnectionBehavior;\n\n public abstract fType: EFConnectionType;\n\n public abstract fDefs: ElementRef<SVGDefsElement>;\n\n public abstract fMarkers: QueryList<FMarkerBase>;\n\n public abstract fPath: IConnectionPath;\n\n public abstract fGradient: IConnectionGradient;\n\n public abstract fDragHandle: FConnectionDragHandleComponent;\n\n public abstract fSelection: FConnectionSelectionComponent;\n\n public abstract fTextComponent: IConnectionText;\n\n public abstract fText: string;\n\n public abstract fConnectionCenter: ElementRef<HTMLDivElement>;\n\n public fPathBuilder: FPathBuilderBase = new FPathBuilderSelector();\n\n protected constructor(elementReference: ElementRef<HTMLElement>) {\n super(elementReference.nativeElement);\n }\n\n public initialize(): void {\n this.fPath.initialize();\n this.fGradient.initialize();\n this.redraw();\n }\n\n private reset(): void {\n this.path = '';\n this.fPath.initialize();\n this.fGradient.initialize();\n this.redraw();\n }\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return (this.hostElement.firstChild?.lastChild as HTMLElement).contains(element);\n }\n\n public setVector(from: IPoint, fromSide: EFConnectableSide, to: IPoint, toSide: EFConnectableSide): void {\n this.vector = { point1: from, point2: to };\n const pathResult = this.fPathBuilder.handle(\n {\n type: this.fType,\n source: from,\n sourceSide: fromSide,\n target: to,\n targetSide: toSide,\n radius: 8,\n offset: 32\n }\n );\n\n this.path = pathResult.path;\n\n const transform = `position: absolute; pointerEvents: all; transform: translate(-50%, -50%); left: ${ pathResult.center.x }px; top: ${ pathResult.center.y }px`;\n\n this.fConnectionCenter?.nativeElement?.setAttribute('style', transform);\n }\n\n public setMarkers(): void {\n this.fDefs.nativeElement.innerHTML = '';\n this.fMarkers.forEach((marker) => {\n const markerElement = DomElementExtensions.createSvgElement('marker');\n markerElement.setAttribute('id', getFlowUid() + '-' + marker.type + '-' + this.fConnectionId);\n markerElement.setAttribute('markerHeight', `${ marker.height }`);\n markerElement.setAttribute('markerWidth', `${ marker.width }`);\n markerElement.setAttribute('orient', 'auto');\n markerElement.setAttribute('refX', `${ marker.refX }`);\n markerElement.setAttribute('refY', `${ marker.refY }`);\n markerElement.setAttribute('markerUnits', 'strokeWidth');\n\n marker.hostElement.setAttribute('height', `${ marker.height }`);\n marker.hostElement.setAttribute('width', `${ marker.width }`);\n markerElement.append(marker.hostElement.cloneNode(true));\n\n this.fDefs.nativeElement.append(markerElement);\n });\n this.fMarkers.forEach((marker) => {\n marker.hostElement.remove();\n });\n }\n\n public redraw(): void {\n this.fPath.setPath(this.path);\n this.fSelection.setPath(this.path);\n this.fGradient.redraw(this.vector);\n this.fDragHandle.redraw(this.vector.point2);\n this.fTextComponent.redraw(this.vector);\n }\n}\n","export enum EFConnectionBehavior {\n\n FIXED = 'fixed',\n\n FLOATING = 'floating',\n}\n","import { EFConnectionBehavior } from './e-f-connection-behavior';\n\nexport function castToConnectionBehavior(behavior: string): EFConnectionBehavior {\n\n const result = EFConnectionBehavior[ behavior.toUpperCase() as keyof typeof EFConnectionBehavior ];\n\n if (result === undefined) {\n throw new Error(`Unknown connection behavior: ${ behavior }. Accepted values: ${ Object.keys(EFConnectionBehavior).join(', ') }`);\n }\n\n return result;\n}\n","import { EFConnectionType } from './e-f-connection-type';\n\nexport function castToConnectionType(type: string): EFConnectionType {\n\n const result = EFConnectionType[ type.toUpperCase() as keyof typeof EFConnectionType ];\n\n if (result === undefined) {\n throw new Error(`Unknown connection type: ${ type }. Accepted values: ${ Object.keys(EFConnectionType).join(', ') }`);\n }\n\n return result;\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component, ContentChildren, ElementRef, Input, OnDestroy, OnInit, QueryList, ViewChild\n} from \"@angular/core\";\nimport {\n castToConnectionBehavior, castToConnectionType, CONNECTION_GRADIENT,\n CONNECTION_PATH, CONNECTION_TEXT,\n FConnectionBase, FConnectionDragHandleComponent, FConnectionSelectionComponent, IConnectionGradient,\n IConnectionPath, IConnectionText,\n} from '../common';\nimport { EFConnectionBehavior } from '../common';\nimport { EFConnectionType } from '../common';\nimport { F_CONNECTION } from '../common/f-connection.injection-token';\nimport { FComponentsStore } from '../../f-components-store';\nimport { F_MARKER, FMarkerBase } from '../f-marker';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"f-connection-for-create\",\n templateUrl: \"./f-connection-for-create.component.html\",\n styleUrls: [ \"./f-connection-for-create.component.scss\" ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection f-connection-for-create\"\n },\n providers: [ { provide: F_CONNECTION, useExisting: FConnectionForCreateComponent } ],\n})\nexport class FConnectionForCreateComponent\n extends FConnectionBase implements AfterViewInit, OnInit, OnDestroy {\n\n public override fConnectionId: string = `f-connection-for-create-${ uniqueId++ }`;\n\n public override fText: string = '';\n\n @Input()\n public override fStartColor: string = 'black';\n\n @Input()\n public override fEndColor: string = 'black';\n\n public override fOutputId!: string;\n\n public override fInputId!: string;\n\n @Input({ transform: castToConnectionBehavior })\n public override set fBehavior(value: EFConnectionBehavior) {\n this._behavior = value;\n }\n\n public override get fBehavior(): EFConnectionBehavior {\n return this._behavior;\n }\n\n private _behavior: EFConnectionBehavior = EFConnectionBehavior.FIXED;\n\n @Input({ transform: castToConnectionType })\n public override set fType(value: EFConnectionType) {\n this._type = value;\n }\n\n public override get fType(): EFConnectionType {\n return this._type;\n }\n\n private _type: EFConnectionType = EFConnectionType.STRAIGHT;\n\n @Input()\n public override disabled: boolean = false;\n\n @ViewChild('defs', { static: true })\n public override fDefs!: ElementRef<SVGDefsElement>;\n\n @ContentChildren(F_MARKER, { descendants: true })\n public override fMarkers!: QueryList<FMarkerBase>;\n\n @ViewChild(CONNECTION_PATH, { static: true })\n public override fPath!: IConnectionPath;\n\n @ViewChild(CONNECTION_GRADIENT, { static: true })\n public override fGradient!: IConnectionGradient;\n\n @ViewChild(FConnectionDragHandleComponent, { static: true })\n public override fDragHandle!: FConnectionDragHandleComponent;\n\n @ViewChild(FConnectionSelectionComponent, { static: true })\n public override fSelection!: FConnectionSelectionComponent;\n\n @ViewChild(CONNECTION_TEXT, { static: true })\n public override fTextComponent!: IConnectionText;\n\n @ViewChild('fConnectionCenter', { static: true })\n public override fConnectionCenter!: ElementRef<HTMLDivElement>;\n\n public override get boundingElement(): HTMLElement | SVGElement {\n return this.fPath.hostElement;\n }\n\n constructor(\n elementReference: ElementRef<HTMLElement>,\n private fComponentsStore: FComponentsStore,\n ) {\n super(elementReference);\n }\n\n public ngOnInit(): void {\n this.fComponentsStore.fTempConnection = this;\n }\n\n public ngAfterViewInit(): void {\n this.hide();\n }\n\n public ngOnDestroy(): void {\n this.fComponentsStore.fTempConnection = undefined;\n }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\">\n <defs #defs></defs>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path\n [attr.d]=\"path\">\n </path>\n <circle f-connection-drag-handle r=\"8\"></circle>\n </g>\n <text f-connection-text></text>\n </g>\n <ng-content></ng-content>\n</svg>\n<div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component, ContentChildren,\n ElementRef,\n Input,\n OnDestroy,\n OnInit, QueryList,\n ViewChild\n} from \"@angular/core\";\nimport {\n castToConnectionBehavior, castToConnectionType,\n CONNECTION_GRADIENT,\n CONNECTION_PATH,\n CONNECTION_TEXT,\n FConnectionBase,\n FConnectionDragHandleComponent,\n FConnectionSelectionComponent,\n IConnectionGradient,\n IConnectionPath, IConnectionText,\n} from '../common';\nimport { EFConnectionBehavior } from '../common';\nimport { EFConnectionType } from '../common';\nimport { F_CONNECTION } from '../common/f-connection.injection-token';\nimport { FComponentsStore } from '../../f-components-store';\nimport { F_MARKER, FMarkerBase } from '../f-marker';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"f-connection\",\n exportAs: 'fComponent',\n templateUrl: \"./f-connection.component.html\",\n styleUrls: [ \"./f-connection.component.scss\" ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'fConnectionId',\n class: \"f-component f-connection\",\n '[class.f-connection-disabled]': 'disabled',\n },\n providers: [ { provide: F_CONNECTION, useExisting: FConnectionComponent } ],\n})\nexport class FConnectionComponent\n extends FConnectionBase implements OnInit, OnDestroy {\n\n @Input()\n public override fConnectionId: string = `f-connection-${ uniqueId++ }`;\n\n @Input()\n public override fText: string = '';\n\n @Input()\n public override fStartColor: string = 'black';\n\n @Input()\n public override fEndColor: string = 'black';\n\n @Input({ required: true })\n public override fOutputId!: string;\n\n @Input({ required: true })\n public override fInputId!: string;\n\n @Input({ transform: castToConnectionBehavior })\n public override set fBehavior(value: EFConnectionBehavior) {\n this._behavior = value;\n }\n\n public override get fBehavior(): EFConnectionBehavior {\n return this._behavior;\n }\n\n private _behavior: EFConnectionBehavior = EFConnectionBehavior.FIXED;\n\n\n @Input({ transform: castToConnectionType })\n public override set fType(value: EFConnectionType) {\n this._type = value;\n }\n\n public override get fType(): EFConnectionType {\n return this._type;\n }\n\n private _type: EFConnectionType = EFConnectionType.STRAIGHT;\n\n @Input()\n public override disabled: boolean = false;\n\n @ViewChild('defs', { static: true })\n public override fDefs!: ElementRef<SVGDefsElement>;\n\n @ContentChildren(F_MARKER, { descendants: true })\n public override fMarkers!: QueryList<FMarkerBase>;\n\n @ViewChild(CONNECTION_PATH, { static: true })\n public override fPath!: IConnectionPath;\n\n @ViewChild(CONNECTION_GRADIENT, { static: true })\n public override fGradient!: IConnectionGradient;\n\n @ViewChild(FConnectionDragHandleComponent, { static: true })\n public override fDragHandle!: FConnectionDragHandleComponent;\n\n @ViewChild(FConnectionSelectionComponent, { static: true })\n public override fSelection!: FConnectionSelectionComponent;\n\n @ViewChild(CONNECTION_TEXT, { static: true })\n public override fTextComponent!: IConnectionText;\n\n @ViewChild('fConnectionCenter', { static: true })\n public override fConnectionCenter!: ElementRef<HTMLDivElement>;\n\n public override get boundingElement(): HTMLElement | SVGElement {\n return this.fPath.hostElement;\n }\n\n constructor(\n elementReference: ElementRef<HTMLElement>,\n private fComponentsStore: FComponentsStore\n ) {\n super(elementReference);\n }\n\n public ngOnInit(): void {\n this.fComponentsStore.addConnection(this);\n }\n\n public ngOnDestroy(): void {\n this.fComponentsStore.removeConnection(this);\n }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"overflow: visible; display: block; vertical-align: middle;\">\n <defs #defs></defs>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path\n [attr.d]=\"path\">\n </path>\n <circle f-connection-drag-handle r=\"8\"></circle>\n </g>\n <text f-connection-text></text>\n </g>\n <ng-content></ng-content>\n</svg>\n<div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n</div>\n","import {\n Directive\n} from \"@angular/core\";\n\n@Directive({\n selector: \"[fConnectionCenter]\",\n standalone: true\n})\nexport class FConnectionCenterDirective {\n}\n","import { EventEmitter, InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IHasHostElement, IPoint, PointExtensions } from '@foblex/core';\nimport { F_SELECTED_CLASS, ISelectable } from '../f-connection';\nimport { IHasStateChanges } from '../i-has-state-changes';\nimport { FConnectorBase } from '../f-connectors';\n\nexport const F_NODE = new InjectionToken<FNodeBase>('F_NODE');\n\nexport abstract class FNodeBase implements IHasStateChanges, ISelectable, IHasHostElement {\n\n public abstract fNodeId: string;\n\n public abstract hostElement: HTMLElement;\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public abstract positionChange: EventEmitter<IPoint>;\n\n public abstract position: IPoint;\n\n protected _position: IPoint = PointExtensions.initialize();\n\n public abstract disabled: boolean;\n\n public abstract refresh(): void;\n\n public abstract connectors: FConnectorBase[];\n\n public abstract addConnector(connector: FConnectorBase): void;\n\n public abstract removeConnector(connector: FConnectorBase): void;\n\n protected abstract setStyle(name: string, value: string): void;\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n\n public redraw(): void {\n this.setStyle('transform', 'translate(' + this.position.x + 'px,' + this.position.y + 'px)');\n }\n\n public deselect(): void {\n this.hostElement.classList.remove(F_SELECTED_CLASS);\n }\n\n public select(): void {\n this.hostElement.classList.add(F_SELECTED_CLASS);\n }\n\n public isSelected(): boolean {\n return this.hostElement.classList.contains(F_SELECTED_CLASS);\n }\n\n public updatePosition(position: IPoint): void {\n this._position = position;\n }\n\n public completeDrag(): void {\n this.positionChange.emit(this.position);\n }\n}\n","import {\n Directive, ElementRef, Inject, InjectionToken, Input, OnDestroy, Optional, SkipSelf\n} from \"@angular/core\";\nimport { Subject } from 'rxjs';\nimport { BooleanExtensions, IHasHostElement } from '@foblex/core';\nimport { F_NODE } from '../f-node-base';\nimport { IHasStateChanges } from '../../i-has-state-changes';\n\nexport const F_DRAG_HANDLE: InjectionToken<FDragHandleDirective> = new InjectionToken<FDragHandleDirective>('F_DRAG_HANDLE');\n\n@Directive({\n selector: \"[fDragHandle]\",\n standalone: true,\n host: {\n class: \"f-drag-handle f-component\",\n '[class.f-drag-handle-disabled]': 'disabled'\n },\n providers: [ { provide: F_DRAG_HANDLE, useExisting: FDragHandleDirective } ],\n})\nexport class FDragHandleDirective implements IHasHostElement, IHasStateChanges, OnDestroy {\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public _parentNode: {} | undefined;\n\n @Input('fDragHandleDisabled')\n public get disabled(): boolean {\n return this.isDisabled;\n }\n\n public set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n public get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_NODE) @Optional() @SkipSelf() _parentNode?: any,\n ) {\n this._parentNode = _parentNode;\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","export function isNodeDragHandle(element: HTMLElement | SVGElement): boolean {\n const dragHandle = getClosestDragHandle(element);\n return !!dragHandle && !isElementOrParentExcluded(element);\n}\n\nfunction isElementOrParentExcluded(element: HTMLElement | SVGElement): boolean {\n const isContains = isElementContainsClass(element);\n const parentElement = (element.parentElement as HTMLElement);\n const dragHandle = getClosestDragHandle(parentElement);\n if (!isContains && !!dragHandle) {\n return isElementOrParentExcluded(parentElement);\n }\n return isContains;\n}\n\nfunction getClosestDragHandle(element: HTMLElement | SVGElement): HTMLElement {\n return element.closest('.f-drag-handle') as HTMLElement;\n}\n\nfunction isElementContainsClass(element: HTMLElement | SVGElement): boolean {\n return element.classList.contains('f-drag-handle-disabled');\n}\n","import { Observable } from 'rxjs';\n\nexport class FResizeObserver extends Observable<ResizeObserverEntry[]> {\n\n constructor(element: HTMLElement) {\n super(subscriber => {\n const observer = new ResizeObserver(entries => {\n subscriber.next(entries);\n });\n\n observer.observe(element);\n\n return function unsubscribe() {\n observer.unobserve(element);\n observer.disconnect();\n }\n });\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n} from \"@angular/core\";\nimport { IHasHostElement, IPoint, PointExtensions, PointInput } from '@foblex/core';\nimport { F_NODE, FNodeBase } from './f-node-base';\nimport { startWith, Subscription } from 'rxjs';\nimport { FResizeObserver } from './f-resize-observer';\nimport { FComponentsStore } from '../f-components-store';\nimport {\n CalculateConnectorConnectableSideHandler,\n CalculateConnectorConnectableSideRequest,\n FConnectorBase\n} from '../f-connectors';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNode]\",\n exportAs: \"fComponent\",\n host: {\n '[attr.id]': 'fNodeId',\n class: \"f-node f-component\",\n '[class.f-node-disabled]': 'disabled'\n },\n providers: [\n { provide: F_NODE, useExisting: FNodeDirective }\n ],\n})\nexport class FNodeDirective extends FNodeBase implements OnInit, AfterViewInit, IHasHostElement, OnDestroy {\n\n private subscriptions$: Subscription = new Subscription();\n\n @Input()\n public override fNodeId: string = `f-node-${ uniqueId++ }`;\n\n @Input('fNodePosition')\n public override set position(value: PointInput) {\n this._position = PointExtensions.castToPoint(value);\n this.refresh();\n }\n\n public override get position(): IPoint {\n return this._position;\n }\n\n @Output('fNodePositionChange')\n public override positionChange: EventEmitter<IPoint> = new EventEmitter<IPoint>();\n\n @Input()\n public override disabled: boolean = false;\n\n public get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n public override connectors: FConnectorBase[] = [];\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n private fComponentsStore: FComponentsStore\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setStyle('position', 'absolute');\n this.setStyle('transform-origin', '0 0');\n this.setStyle('user-select', 'none');\n this.setStyle('pointer-events', 'all');\n this.setStyle('left', '0');\n this.setStyle('top', '0');\n super.redraw();\n this.fComponentsStore.addNode(this);\n }\n\n protected override setStyle(styleName: string, value: string) {\n this.renderer.setStyle(this.hostElement, styleName, value);\n }\n\n public ngAfterViewInit(): void {\n this.subscriptions$.add(\n this.subscribeOnResizeChanges()\n );\n }\n\n private subscribeOnResizeChanges(): Subscription {\n return new FResizeObserver(this.hostElement as HTMLElement).pipe(startWith(null)).subscribe(() => {\n this.connectors.forEach((fConnector: FConnectorBase) => {\n\n fConnector.fConnectableSide = new CalculateConnectorConnectableSideHandler().handle(\n new CalculateConnectorConnectableSideRequest(fConnector, this.hostElement)\n );\n });\n this.fComponentsStore.changes.next();\n });\n }\n\n public override addConnector(connector: FConnectorBase): void {\n this.connectors.push(connector);\n }\n\n public override removeConnector(connector: FConnectorBase): void {\n const index = this.connectors.indexOf(connector);\n if (index !== -1) {\n this.connectors.splice(index, 1);\n }\n }\n\n public refresh(): void {\n this.stateChanges.next();\n }\n\n public ngOnDestroy(): void {\n this.fComponentsStore.removeNode(this);\n this.stateChanges.complete();\n this.subscriptions$.unsubscribe();\n }\n}\n","export function isNode(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNode]');\n}\n\n","import { EventExtensions, IPoint, Point, RectExtensions } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { isNode } from '../../f-node';\nimport { FCanvasBase } from '../f-canvas-base';\n\nexport const F_ZOOM = new InjectionToken<FZoomBase>('F_ZOOM');\n\nexport abstract class FZoomBase {\n\n protected isEnabled: boolean = false;\n\n public abstract minimum: number;\n public abstract maximum: number;\n\n public abstract step: number;\n public abstract dblClickStep: number;\n\n private listeners: Function = EventExtensions.emptyListener();\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.flowHost;\n }\n\n private get fCanvas(): FCanvasBase {\n return this.fComponentsStore.fCanvas as FCanvasBase;\n }\n\n protected constructor(\n protected fComponentsStore: FComponentsStore\n ) {\n }\n\n protected toggleZoom(): void {\n if (this.isEnabled) {\n this.subscribe();\n } else {\n this.unsubscribe();\n }\n }\n\n private subscribe(): void {\n this.listeners();\n if (!this.flowHost) {\n return;\n }\n\n this.flowHost.addEventListener('wheel', this.onWheel.bind(this));\n this.flowHost.addEventListener('dblclick', this.onDoubleClick.bind(this));\n this.listeners = () => {\n this.flowHost.removeEventListener('wheel', this.onWheel.bind(this));\n this.flowHost.removeEventListener('dblclick', this.onDoubleClick.bind(this));\n };\n }\n\n public getScale(): number {\n return this.fCanvas.transform.scale || 1;\n }\n\n private onWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (this.fComponentsStore.fDraggable?.isDragStarted) {\n return;\n }\n\n let result: number = this.getScale();\n\n const direction = event.deltaY > 0 ? -1 : 1;\n const step = this.step;\n result = result + step * direction;\n\n result = Math.max(this.minimum, Math.min(result, this.maximum));\n\n const pointerPositionInFlow = new Point(event.clientX, event.clientY).elementTransform(this.flowHost);\n\n this.fCanvas.setZoom(result, pointerPositionInFlow);\n this.fCanvas.redraw();\n this.fCanvas.completeDrag();\n }\n\n private onDoubleClick(event: MouseEvent): void {\n event.preventDefault();\n\n if (this.fComponentsStore.fDraggable?.isDragStarted || isNode(event.target as HTMLElement)) {\n return;\n }\n\n let result: number = this.getScale();\n\n const direction = 1;\n const step = this.dblClickStep;\n result = result + step * direction;\n\n result = Math.max(this.minimum, Math.min(result, this.maximum));\n\n const pointerPositionInFlow = new Point(event.clientX, event.clientY).elementTransform(this.flowHost);\n this.fCanvas.setZoom(result, pointerPositionInFlow);\n this.fCanvas.redrawWithAnimation();\n this.fCanvas.completeDrag();\n }\n\n private onZoomToCenter(deltaY: number, position?: IPoint): void {\n const preventDefault = () => {\n };\n const rect = RectExtensions.fromElement(this.flowHost);\n\n this.onWheel({\n deltaY, preventDefault, clientX: position?.x || rect.gravityCenter.x, clientY: position?.y || rect.gravityCenter.y\n } as WheelEvent);\n }\n\n public zoomIn(position?: IPoint): void {\n this.onZoomToCenter(-1, position);\n }\n\n public zoomOut(position?: IPoint): void {\n this.onZoomToCenter(1, position);\n }\n\n public reset(): void {\n this.fCanvas.resetZoom();\n this.fCanvas.redraw();\n this.fCanvas.completeDrag();\n }\n\n protected unsubscribe(): void {\n this.listeners();\n this.listeners = EventExtensions.emptyListener();\n }\n}\n","import {\n AfterViewInit,\n Directive, Input, OnDestroy\n} from \"@angular/core\";\nimport { BooleanExtensions } from '@foblex/core';\nimport { F_ZOOM, FZoomBase } from './f-zoom-base';\nimport { FComponentsStore } from '../../f-components-store';\n\n@Directive({\n selector: \"f-canvas[fZoom]\",\n exportAs: 'fComponent',\n host: {\n 'class': 'f-zoom f-component'\n },\n providers: [ { provide: F_ZOOM, useExisting: FZoomDirective } ],\n})\nexport class FZoomDirective extends FZoomBase implements AfterViewInit, OnDestroy {\n\n @Input('fZoom')\n public get fFlowZoom(): boolean {\n return this.isEnabled;\n }\n\n public set fFlowZoom(isEnabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isEnabled);\n if (value !== this.isEnabled) {\n this.isEnabled = value;\n this.toggleZoom();\n }\n }\n\n @Input('fZoomMinimum')\n public override minimum: number = 0.1;\n\n @Input('fZoomMaximum')\n public override maximum: number = 4;\n\n @Input('fZoomStep')\n public override step: number = 0.1;\n\n @Input('fZoomDblClickStep')\n public override dblClickStep: number = 0.5;\n\n constructor(\n fComponentsStore: FComponentsStore,\n ) {\n super(fComponentsStore);\n }\n\n public ngAfterViewInit(): void {\n super.toggleZoom();\n }\n\n public ngOnDestroy(): void {\n super.unsubscribe();\n }\n}\n","import {\n IHasHostElement,\n ITransformModel, PointExtensions,\n TransformModelExtensions,\n ICanChangePosition, ICanChangeZoom, ICanFitToParent, ICanOneToOneCentering,\n mixinChangePosition,\n mixinChangeZoom,\n mixinFitToParent,\n mixinOneToOneCentering\n} from '@foblex/core';\nimport { Directive, ElementRef, EventEmitter, InjectionToken } from '@angular/core';\nimport { FCanvasChangeEvent } from './domain';\nimport { FNodeBase } from '../f-node';\n\nexport const F_CANVAS = new InjectionToken<FCanvasBase>('F_CANVAS');\n\nconst MIXIN_BASE = mixinChangePosition(\n mixinFitToParent(\n mixinOneToOneCentering(\n mixinChangeZoom(\n class {\n constructor(\n public transform: ITransformModel\n ) {\n }\n }))));\n\n@Directive()\nexport abstract class FCanvasBase\n extends MIXIN_BASE\n implements IHasHostElement, ICanChangePosition, ICanFitToParent, ICanOneToOneCentering, ICanChangeZoom {\n\n public abstract fCanvasChange: EventEmitter<FCanvasChangeEvent>;\n\n public abstract fNodes: FNodeBase[];\n\n public abstract hostElement: HTMLElement;\n\n public abstract fNodesContainer: ElementRef<HTMLElement>;\n\n public abstract fConnectionsContainer: ElementRef<HTMLElement>;\n\n protected constructor() {\n super(TransformModelExtensions.default());\n }\n\n public abstract redraw(): void;\n\n public abstract redrawWithAnimation(): void;\n\n public completeDrag(): void {\n const position = PointExtensions.sum(this.transform.position, this.transform.scaledPosition);\n this.fCanvasChange.emit(\n new FCanvasChangeEvent(position, this.transform.scale)\n );\n }\n}\n","import { IRect } from '@foblex/core';\nimport { EFConnectionBehavior } from '../../f-connection';\nimport { EFConnectableSide } from '../../f-connectors';\n\nexport class GetConnectionVectorRequest {\n\n constructor(\n public outputRect: IRect,\n public inputRect: IRect,\n public behavior: EFConnectionBehavior | string,\n public outputSide: EFConnectableSide,\n public inputSide: EFConnectableSide,\n ) {\n\n }\n}\n","import { Injectable, Injector, Type } from '@angular/core';\nimport { IHandler } from '@foblex/core';\n\n@Injectable()\nexport class FFlowMediator {\n\n constructor(\n private injector: Injector,\n ) {\n }\n\n private static handlers = new Map<string, Type<IHandler<any, any>>>();\n\n public static register<TRequest, TResponse>(\n type: Type<TRequest>,\n handler: Type<IHandler<TRequest, TResponse>>\n ): void {\n this.handlers.set(type.name, handler);\n }\n\n public send<TResponse>(request: any): TResponse {\n const handler = FFlowMediator.handlers.get(request.constructor.name);\n if (!handler) {\n throw new Error('Handler not registered for request type.');\n }\n return this.injector.get(handler).handle(request);\n }\n}\n","import { Type } from '@angular/core';\nimport { FFlowMediator } from './f-flow-mediator';\nimport { IHandler } from '@foblex/core';\n\ntype Constructor<T = any> = new (...args: any[]) => T;\n\nexport function FHandlerRegister<TRequest, TResponse>(requestType: Type<TRequest>) {\n return function (constructor: Constructor<IHandler<TRequest, TResponse>>) {\n FFlowMediator.register(requestType, constructor);\n };\n}\n","import { IHandler, IPoint, IRect, IVector, Point, RectExtensions } from '@foblex/core';\nimport { GetConnectionVectorRequest } from './get-connection-vector.request';\nimport { Injectable } from '@angular/core';\nimport { EFConnectionBehavior } from '../../f-connection';\nimport { EFConnectableSide } from '../../f-connectors';\nimport { FHandlerRegister } from '../../f-mediator';\n\n@Injectable()\n@FHandlerRegister(GetConnectionVectorRequest)\nexport class GetConnectionVectorHandler implements IHandler<GetConnectionVectorRequest, IVector> {\n\n private behaviorHandlers = {\n\n [ EFConnectionBehavior.FLOATING.toString() ]: this.floatingBehavior,\n\n // [EFConnectionBehavior.FIXED.toString()]: this.fixedBehavior,\n\n [ EFConnectionBehavior.FIXED.toString() ]: this.fixedOutboundBehaviour,\n }\n\n public handle(payload: GetConnectionVectorRequest): IVector {\n\n const result = this.behaviorHandlers[ payload.behavior ](payload);\n\n return result;\n }\n\n private floatingBehavior(payload: GetConnectionVectorRequest): IVector {\n const fromResult = RectExtensions.intersectionWithVector(payload.outputRect, payload.outputRect.gravityCenter, payload.inputRect.gravityCenter);\n const toResult = RectExtensions.intersectionWithVector(payload.inputRect, payload.outputRect.gravityCenter, payload.inputRect.gravityCenter);\n\n return {\n point1: fromResult ? fromResult[ 1 ] : payload.outputRect.gravityCenter,\n point2: toResult ? toResult[ 0 ] : payload.inputRect.gravityCenter,\n }\n }\n\n private fixedBehavior(payload: GetConnectionVectorRequest): IVector {\n return {\n point1: payload.outputRect.gravityCenter,\n point2: payload.inputRect.gravityCenter,\n }\n }\n\n private fixedOutboundBehaviour(payload: GetConnectionVectorRequest): IVector {\n const point1 = positionFixedOutbound[ payload.outputSide === EFConnectableSide.AUTO ? EFConnectableSide.BOTTOM : payload.outputSide ](payload.outputRect);\n const point2 = positionFixedOutbound[ payload.inputSide === EFConnectableSide.AUTO ? EFConnectableSide.TOP : payload.inputSide ](payload.inputRect);\n\n return {\n point1: point1,\n point2: point2,\n }\n }\n}\n\nconst positionFixedOutbound = {\n [ EFConnectableSide.TOP ]: (rect: IRect): IPoint => {\n const result = new Point();\n result.y = rect.y;\n result.x = rect.x + rect.width / 2;\n return result;\n },\n [ EFConnectableSide.BOTTOM ]: (rect: IRect): IPoint => {\n const result = new Point();\n result.y = rect.y + rect.height;\n result.x = rect.x + rect.width / 2;\n return result;\n },\n [ EFConnectableSide.LEFT ]: (rect: IRect): IPoint => {\n const result = new Point();\n result.x = rect.x;\n result.y = rect.y + rect.height / 2;\n return result;\n },\n [ EFConnectableSide.RIGHT ]: (rect: IRect): IPoint => {\n const result = new Point();\n result.x = rect.x + rect.width;\n result.y = rect.y + rect.height / 2;\n return result;\n },\n};\n\n\n\n\n","export class GetOutputRectInFlowRequest {\n constructor(\n public fOutputId: string\n ) {\n }\n}\n","export function OutputNotFound(outputId: any): Error {\n return new Error(`Output with id ${ outputId } not found`);\n}\n\nexport function InputNotFound(inputId: any): Error {\n return new Error(`Input with id ${ inputId } not found`);\n}\n\nexport function requiredOutput(): Error {\n return new Error(`The node must contain at least one fOutput if there is an fOutlet`);\n}\n","import { IRect } from '@foblex/core';\nimport { EFConnectableSide } from '../../f-connectors';\n\nexport class GetOutputRectInFlowResponse {\n constructor(\n public rect: IRect,\n public fConnectableSide: EFConnectableSide\n ) {\n }\n}\n","import { IHandler, IRect, ITransformModel, Point, RectExtensions, SizeExtensions } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\n\n@Injectable()\nexport class GetElementRectInFlowHandler implements IHandler<HTMLElement | SVGElement, IRect> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.flowHost;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(element: HTMLElement | SVGElement): IRect {\n\n const systemRect = RectExtensions.fromElement(element);\n\n const position = Point.fromPoint(systemRect).elementTransform(this.flowHost).sub(this.transform.scaledPosition).sub(this.transform.position).div(this.transform.scale);\n\n const size = SizeExtensions.initialize(systemRect.width / this.transform.scale, systemRect.height / this.transform.scale);\n\n const result = RectExtensions.initialize(position.x, position.y, size.width, size.height);\n\n return result;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FHandlerRegister } from '../../f-mediator';\nimport { GetOutputRectInFlowRequest } from './get-output-rect-in-flow-request';\nimport { FComponentsStore } from '../../f-components-store';\nimport { GetElementRectInFlowHandler } from '../get-element-rect-in-flow.handler';\nimport { OutputNotFound } from '../errors';\nimport { GetOutputRectInFlowResponse } from './get-output-rect-in-flow-response';\n\n@Injectable()\n@FHandlerRegister(GetOutputRectInFlowRequest)\nexport class GetOutputRectInFlowHandler implements IHandler<GetOutputRectInFlowRequest, GetOutputRectInFlowResponse> {\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler\n ) {\n }\n\n public handle(request: GetOutputRectInFlowRequest): GetOutputRectInFlowResponse {\n\n const output = this.fComponentsStore.fOutputs.find((x) => x.id === request.fOutputId);\n\n if (!output) {\n throw OutputNotFound(request.fOutputId);\n }\n\n const result = this.getElementRectInFlowHandler.handle(output.hostElement)\n\n return new GetOutputRectInFlowResponse(result, output.fConnectableSide);\n }\n}\n","export class RedrawConnectionsRequest {\n constructor() {\n }\n}\n","import { IHandler, IVector } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { RedrawConnectionsRequest } from './redraw-connections-request';\nimport { FComponentsStore } from '../../f-components-store';\nimport { GetElementRectInFlowHandler } from '../get-element-rect-in-flow.handler';\nimport { GetConnectionVectorRequest } from '../get-connection-vector';\nimport { FConnectorBase } from '../../f-connectors';\nimport { FConnectionBase } from '../../f-connection';\nimport { FFlowMediator, FHandlerRegister } from '../../f-mediator';\n\n@Injectable()\n@FHandlerRegister(RedrawConnectionsRequest)\nexport class RedrawConnectionsHandler implements IHandler<RedrawConnectionsRequest, void> {\n\n constructor(\n private readonly fComponentsStore: FComponentsStore,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler,\n private fMediator: FFlowMediator,\n ) {\n }\n\n public handle(request: RedrawConnectionsRequest): void {\n this.resetConnectors();\n\n this.fComponentsStore.fTempConnection?.setMarkers();\n\n this.fComponentsStore.fConnections.forEach((connection) => {\n const output = this.fComponentsStore.fOutputs.find((x) => x.id === connection.fOutputId);\n const input = this.fComponentsStore.fInputs.find((x) => x.id === connection.fInputId);\n if (output && input) {\n this.setupConnection(output, input, connection);\n }\n });\n }\n\n private resetConnectors(): void {\n this.fComponentsStore.fOutputs.forEach((output) => output.setConnected(false));\n this.fComponentsStore.fInputs.forEach((input) => input.setConnected(false));\n }\n\n private setupConnection(output: FConnectorBase, input: FConnectorBase, connection: FConnectionBase): void {\n output.setConnected(true);\n input.setConnected(true);\n\n const vector = this.getVector(output, input, connection);\n\n connection.setVector(vector.point1, output.fConnectableSide, vector.point2, input.fConnectableSide);\n connection.setMarkers();\n\n connection.initialize();\n }\n\n private getVector(output: FConnectorBase, input: FConnectorBase, connection: FConnectionBase): IVector {\n const outputRect = this.getElementRectInFlowHandler.handle(output.hostElement);\n const inputRect = this.getElementRectInFlowHandler.handle(input.hostElement);\n return this.fMediator.send(new GetConnectionVectorRequest(\n outputRect,\n inputRect,\n connection.fBehavior,\n output.fConnectableSide,\n input.fConnectableSide\n )\n );\n }\n}\n","import { IHandler, IRect, RectExtensions } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\n\n@Injectable()\nexport class GetAllNodesRectHandler implements IHandler<void, IRect> {\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(): IRect {\n const fNodes = this.fComponentsStore.fNodes;\n const rects = fNodes.map((x) => {\n return RectExtensions.fromElement(x.hostElement);\n });\n const result = RectExtensions.union(rects);\n return result;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FConnectionBase } from '../f-connection';\n\n@Injectable()\nexport class GetConnectionHandler implements IHandler<HTMLElement | SVGElement, FConnectionBase | undefined> {\n\n private get fConnections(): FConnectionBase[] {\n return this.fComponentsStore.fConnections;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(element: HTMLElement | SVGElement): FConnectionBase | undefined {\n const result = this.fConnections.find(c => c.isContains(element));\n return result;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FConnectionBase } from '../f-connection';\nimport { FConnectorBase } from '../f-connectors';\n\n@Injectable()\nexport class GetIncomingConnectionsHandler implements IHandler<FConnectorBase[], FConnectionBase[]> {\n\n private get fConnections(): FConnectionBase[] {\n return this.fComponentsStore.fConnections;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(inputs: FConnectorBase[]): FConnectionBase[] {\n const inputsIds = inputs.map((x) => x.id);\n return this.fConnections.filter((x) => {\n return inputsIds.includes(x.fInputId);\n })!;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FConnectionBase } from '../f-connection';\nimport { FConnectorBase } from '../f-connectors';\n\n@Injectable()\nexport class GetOutgoingConnectionsHandler implements IHandler<FConnectorBase[], FConnectionBase[]> {\n\n private get fConnections(): FConnectionBase[] {\n return this.fComponentsStore.fConnections;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(outputs: FConnectorBase[]): FConnectionBase[] {\n const outputsIds = outputs.map((x) => x.id);\n return this.fConnections.filter((x) => {\n return outputsIds.includes(x.fOutputId);\n })!;\n }\n}\n","import { IHandler, IRect } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { GetElementRectInFlowHandler } from './get-element-rect-in-flow.handler';\nimport { InputNotFound } from './errors';\nimport { EFConnectableSide } from '../f-connectors';\n\n@Injectable()\nexport class GetInputRectInFlowHandler implements IHandler<string, { rect: IRect, fConnectableSide: EFConnectableSide }> {\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler\n ) {\n }\n\n public handle(inputId: string): { rect: IRect, fConnectableSide: EFConnectableSide } {\n\n const input = this.fComponentsStore.fInputs.find((x) => x.id === inputId);\n\n if (!input) {\n throw InputNotFound(inputId);\n }\n\n const result = this.getElementRectInFlowHandler.handle(input.hostElement)\n\n return { rect: result, fConnectableSide: input.fConnectableSide };\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FNodeBase } from '../f-node';\n\n@Injectable()\nexport class UpdateNodeLayerHandler implements IHandler<FNodeBase, void> {\n\n private get fNodesContainer(): HTMLElement {\n return this.fComponentsStore.fCanvas?.fNodesContainer?.nativeElement!;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(node: FNodeBase): void {\n const elements = Array.from(this.fNodesContainer.children);\n const elementsCount = elements.length;\n const targetIndex: number = elements.findIndex((x) => x === node.hostElement);\n if (targetIndex !== elementsCount - 1) {\n const afterElements = elements.splice(targetIndex + 1);\n afterElements.forEach((x) => {\n this.fNodesContainer.removeChild(x);\n this.fNodesContainer.insertBefore(x, node.hostElement);\n });\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Point } from '@foblex/core';\nimport { IDraggableItem } from './i-draggable-item';\nimport { ISelectable } from '../f-connection';\nimport { FLineAlignmentBase } from '../f-line-alignment';\nimport { FSelectionAreaBase } from '../f-selection-area';\n\n@Injectable()\nexport class FDraggableDataContext {\n\n public selectedItems: ISelectable[] = [];\n\n public isSelectedChanged: boolean = false;\n\n public onPointerDownScale: number = 1;\n\n public onPointerDownPosition: Point = new Point(0, 0);\n\n public draggableItems: IDraggableItem[] = [];\n\n public fSelectionArea: FSelectionAreaBase | undefined;\n\n public fLineAlignment: FLineAlignmentBase | undefined;\n\n public reset(): void {\n this.draggableItems = [];\n this.onPointerDownScale = 1;\n this.onPointerDownPosition = new Point(0, 0);\n this.isSelectedChanged = false;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable/f-draggable-data-context';\n\n@Injectable()\nexport class SelectAllHandler implements IHandler<void, void> {\n\n constructor(\n private fDataContext: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n ) {\n }\n\n public handle(): void {\n this.fDraggableDataContext.selectedItems.forEach((x) => {\n x.deselect();\n });\n this.fDraggableDataContext.selectedItems = [];\n this.fDataContext.fNodes.forEach((x) => {\n x.select();\n this.fDraggableDataContext.selectedItems.push(x);\n });\n this.fDataContext.fConnections.forEach((x) => {\n x.select();\n this.fDraggableDataContext.selectedItems.push(x);\n });\n this.fDraggableDataContext.isSelectedChanged = true;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../f-components-store';\nimport { FConnectionBase } from '../f-connection';\n\n@Injectable()\nexport class UpdateConnectionLayerHandler implements IHandler<FConnectionBase, void> {\n\n private get fConnectionsContainer(): HTMLElement {\n return this.fComponentsStore.fCanvas?.fConnectionsContainer?.nativeElement!;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(connection: FConnectionBase): void {\n const elements = Array.from(this.fConnectionsContainer.children);\n const elementsCount = elements.length;\n const targetIndex: number = elements.findIndex((x) => x === connection.hostElement);\n if (targetIndex !== elementsCount - 1) {\n const afterElements = elements.splice(targetIndex + 1);\n afterElements.forEach((x) => {\n this.fConnectionsContainer.removeChild(x);\n this.fConnectionsContainer.insertBefore(x, connection.hostElement);\n });\n }\n }\n}\n","import { GetElementRectInFlowHandler } from './get-element-rect-in-flow.handler';\nimport { GetIncomingConnectionsHandler } from './get-incoming-connections.handler';\nimport { GetOutgoingConnectionsHandler } from './get-outgoing-connections.handler';\nimport { GetConnectionHandler } from './get-connection.handler';\nimport { GetAllNodesRectHandler } from './get-all-nodes-rect.handler';\nimport { GetInputRectInFlowHandler } from './get-input-rect-in-flow.handler';\nimport { GetConnectionVectorHandler } from './get-connection-vector';\nimport { UpdateNodeLayerHandler } from './update-node-layer.handler';\nimport { SelectAllHandler } from './select-all.handler';\nimport { UpdateConnectionLayerHandler } from './update-connection-layer.handler';\nimport { RedrawConnectionsHandler } from './redraw-connections';\nimport { GetOutputRectInFlowHandler } from './get-output-rect-in-flow';\n\nexport const COMMON_PROVIDERS = [\n\n GetConnectionVectorHandler,\n\n GetOutputRectInFlowHandler,\n\n RedrawConnectionsHandler,\n\n\n\n\n GetAllNodesRectHandler,\n\n GetConnectionHandler,\n\n GetElementRectInFlowHandler,\n\n GetInputRectInFlowHandler,\n\n GetIncomingConnectionsHandler,\n\n GetOutgoingConnectionsHandler,\n\n SelectAllHandler,\n\n UpdateConnectionLayerHandler,\n\n UpdateNodeLayerHandler,\n];\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild,\n} from \"@angular/core\";\nimport {\n FCanvasBase, F_CANVAS\n} from './f-canvas-base';\nimport { IPoint, Point, PointExtensions, RectExtensions, TransformModelExtensions } from '@foblex/core';\nimport { FCanvasChangeEvent } from './domain';\nimport { FComponentsStore } from '../f-components-store';\nimport { GetAllNodesRectHandler, SelectAllHandler } from '../domain';\nimport { FNodeBase } from '../f-node';\n\n@Component({\n selector: 'f-canvas',\n templateUrl: './f-canvas.component.html',\n styleUrls: [ './f-canvas.component.scss' ],\n exportAs: 'fComponent',\n host: {\n 'class': 'f-component f-canvas',\n },\n providers: [ { provide: F_CANVAS, useExisting: FCanvasComponent } ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FCanvasComponent extends FCanvasBase implements OnInit {\n\n @Output()\n public override fCanvasChange: EventEmitter<FCanvasChangeEvent> = new EventEmitter<FCanvasChangeEvent>();\n\n @Input()\n public set position(value: IPoint | undefined) {\n if (!value) {\n return;\n }\n const position = PointExtensions.sum(this.transform.position, this.transform.scaledPosition);\n if (!PointExtensions.isEqual(position, value)) {\n this.transform.position = value;\n this.transform.scaledPosition = PointExtensions.initialize();\n this.redraw();\n }\n }\n\n @Input()\n public set scale(value: number | undefined) {\n if (!value) {\n return;\n }\n this.transform.scale = value;\n this.redraw();\n }\n\n public override get fNodes(): FNodeBase[] {\n return this.fComponentsStore.fNodes;\n }\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n @ViewChild('fNodesContainer', { static: true })\n public override fNodesContainer!: ElementRef<HTMLElement>;\n\n @ViewChild('fConnectionsContainer', { static: true })\n public override fConnectionsContainer!: ElementRef<HTMLElement>;\n\n constructor(\n private getAllNodesRectHandler: GetAllNodesRectHandler,\n private selectAllHandler: SelectAllHandler,\n private elementReference: ElementRef<HTMLElement>,\n private fComponentsStore: FComponentsStore\n ) {\n super();\n }\n\n public ngOnInit() {\n this.fComponentsStore.fCanvas = this;\n }\n\n public override redraw(): void {\n this.fComponentsStore.fBackground?.setTransform(this.transform);\n this.hostElement.setAttribute(\"style\", `transform: ${ TransformModelExtensions.toString(this.transform) }`);\n }\n\n public override redrawWithAnimation(): void {\n this.fComponentsStore.fBackground?.setTransform(this.transform);\n this.hostElement.setAttribute(\"style\", `transition: transform 0.15s ease-in-out; transform: ${ TransformModelExtensions.toString(this.transform) }`);\n setTimeout(() => {\n this.redraw();\n }, 150);\n }\n\n public fitToScreen(toCenter: IPoint = PointExtensions.initialize(), animated: boolean = true): void {\n const fNodesRect = this.getAllNodesRectHandler.handle();\n\n const rect = RectExtensions.addPointToSize(\n fNodesRect,\n Point.fromPoint(toCenter).mult(2)\n );\n this.fitToParent(\n rect,\n RectExtensions.fromElement(this.fComponentsStore.fFlow!.hostElement),\n this.fNodes.map((x) => {\n return Point.fromPoint(x.position).sub(toCenter)\n })\n );\n animated ? this.redrawWithAnimation() : this.redraw();\n this.completeDrag();\n }\n\n public oneToOne(): void {\n const fNodesRect = this.getAllNodesRectHandler.handle();\n this.oneToOneCentering(\n fNodesRect,\n RectExtensions.fromElement(this.fComponentsStore.fFlow!.hostElement),\n this.fNodes.map((x) => {\n return Point.fromPoint(x.position).sub(new Point(0, 0))\n })\n );\n this.redrawWithAnimation();\n this.completeDrag();\n }\n\n public selectAll(): void {\n this.selectAllHandler.handle();\n }\n}\n","<ng-container>\n <div #fConnectionsContainer>\n <ng-content select=\"f-connection\"></ng-content>\n <ng-content select=\"f-connection-for-create\"></ng-content>\n </div>\n <div #fNodesContainer>\n <ng-content select=\"[fNode]\"></ng-content>\n </div>\n</ng-container>\n","export enum EFDraggableType {\n\n NODE = 'node',\n\n REASSIGN_CONNECTION = 'reassign-connection',\n\n CREATE_CONNECTION = 'create-connection',\n\n CONNECTION = 'connection',\n\n CANVAS = 'canvas',\n\n PALETTE_ITEM = 'palette-item',\n\n SELECTION = 'selection'\n}\n","import { IPoint, Point, PointExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { FComponentsStore } from '../../f-components-store';\n\nexport class CanvasDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.CANVAS;\n\n private onPointerDownPosition: IPoint = PointExtensions.initialize();\n\n constructor(\n private fComponentsStore: FComponentsStore\n ) {\n }\n\n public initialize(): void {\n this.onPointerDownPosition = this.fComponentsStore.fCanvas!.transform.position;\n }\n\n public move(difference: IPoint): void {\n this.fComponentsStore.fCanvas!.setPosition(Point.fromPoint(this.onPointerDownPosition).add(difference));\n this.fComponentsStore.fCanvas!.redraw();\n }\n\n public complete(): void {\n this.fComponentsStore.fCanvas!.completeDrag();\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { EFDraggableType } from '../e-f-draggable-type';\n\n@Injectable()\nexport class CanvasOnPointerUp implements IHandler<IPointerEvent, void> {\n\n constructor(\n private fDraggableDataContext: FDraggableDataContext,\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const isDragCanvas = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.CANVAS);\n\n if (isDragCanvas) {\n this.fDraggableDataContext.draggableItems.forEach((x) => {\n x.complete?.();\n });\n }\n }\n}\n","import { IHandler, IPointerEvent, Point } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { CanvasDragHandler } from './canvas.drag-handler';\n\n@Injectable()\nexport class CanvasPrepareDragSequence implements IHandler<IPointerEvent, void> {\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n\n const isBackgroundElement = this.fComponentsStore.fBackground?.isBackgroundElement(event.targetElement);\n const isFlowHost = this.flowHost.contains(event.targetElement);\n let node = this.fComponentsStore.findNode(event.targetElement);\n if (node && node.disabled) {\n node = undefined;\n }\n\n if ((isBackgroundElement || (isFlowHost && !node)) && !this.fDraggableDataContext.draggableItems.length) {\n this.fDraggableDataContext.onPointerDownScale = 1;\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInFlow.div(1);\n this.fDraggableDataContext.draggableItems = [\n new CanvasDragHandler(this.fComponentsStore)\n ];\n }\n }\n}\n","import { CanvasOnPointerUp } from './canvas.on-pointer-up';\nimport { CanvasPrepareDragSequence } from './canvas.prepare-drag-sequence';\n\nexport const CANVAS_PROVIDERS = [\n\n CanvasOnPointerUp,\n\n CanvasPrepareDragSequence\n];\n","import { IHandler } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../../f-components-store';\nimport { FConnectorBase, FNodeOutletBase } from '../../../../f-connectors';\nimport { FNodeBase } from '../../../../f-node';\n\n@Injectable()\nexport class FindFirstCanBeConnectedOutputByOutletHandler\n implements IHandler<FNodeOutletBase, FConnectorBase | undefined> {\n\n private get fNodes(): FNodeBase[] {\n return this.fComponentsStore.fNodes;\n }\n\n private get fOutputs(): FConnectorBase[] {\n return this.fComponentsStore.fOutputs;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n ) {\n }\n\n public handle(outlet: FNodeOutletBase): FConnectorBase | undefined {\n let result: FConnectorBase | undefined;\n\n const node = this.fNodes.find((x) => x.isContains(outlet.hostElement));\n if (!node) {\n throw new Error('Node not found');\n }\n\n const outputsOfNode = this.fOutputs.filter((x) => {\n return node.isContains(x.hostElement) && x.canBeConnected;\n });\n\n if (outputsOfNode.length > 0) {\n result = outputsOfNode[ 0 ];\n }\n\n return result;\n }\n}\n","import { IPoint, IRect, IVector, Point, RectExtensions, } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EFDraggableType } from '../../e-f-draggable-type';\nimport {\n GetConnectionVectorRequest, GetOutputRectInFlowRequest, GetOutputRectInFlowResponse\n} from '../../../domain';\nimport { FConnectionBase } from '../../../f-connection';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport { FFlowMediator } from '../../../f-mediator';\n\nexport class CreateConnectionDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.CREATE_CONNECTION;\n\n private onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n private outputSide: EFConnectableSide = EFConnectableSide.BOTTOM;\n\n constructor(\n private fMediator: FFlowMediator,\n public connection: FConnectionBase,\n private mouseDownPoint: IPoint\n ) {\n }\n\n public initialize(): void {\n const outputRect = this.fMediator.send<GetOutputRectInFlowResponse>(\n new GetOutputRectInFlowRequest(this.connection.fOutputId)\n );\n this.outputSide = outputRect.fConnectableSide;\n this.onPointerDownFromConnectorRect = outputRect.rect;\n this.onPointerDownToConnectorRect = RectExtensions.initialize(this.mouseDownPoint.x, this.mouseDownPoint.y, 0, 0);\n (this.connection as FConnectionBase).show();\n this.move(new Point(0, 0));\n }\n\n public move(difference: IPoint): void {\n const toPoint = RectExtensions.addPoint(this.onPointerDownToConnectorRect, difference);\n\n const vector = this.fMediator.send<IVector>(new GetConnectionVectorRequest(\n this.onPointerDownFromConnectorRect,\n toPoint,\n this.connection.fBehavior,\n this.outputSide,\n EFConnectableSide.TOP,\n )\n );\n\n this.connection.setVector(vector.point1, this.outputSide, vector.point2, EFConnectableSide.TOP);\n this.connection.redraw();\n }\n\n public complete(): void {\n this.connection.redraw();\n (this.connection as FConnectionBase).hide();\n }\n}\n","export class FCreateConnectionEvent {\n\n constructor(\n public fOutputId: string,\n public fInputId: string\n ) {\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../../f-components-store';\nimport { FConnectorBase, FNodeInputBase } from '../../../../f-connectors';\nimport { FNodeBase } from '../../../../f-node';\n\n@Injectable()\nexport class FirstNotConnectedInputOfNodeUnderPointerHandler\n implements IHandler<IPointerEvent, FConnectorBase | undefined> {\n\n private get fNodes(): FNodeBase[] {\n return this.fComponentsStore.fNodes;\n }\n\n private get fInputs(): FConnectorBase[] {\n return this.fComponentsStore.fInputs;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore\n ) {\n }\n\n public handle(event: IPointerEvent): FConnectorBase | undefined {\n const position = event.getPosition();\n const elementsFromPoint = document.elementsFromPoint(position.x, position.y) as HTMLElement[];\n\n const nodes = elementsFromPoint.map((element) => {\n return this.fNodes.find((x) => x.isContains(element))\n }).filter((x) => !!x) as FNodeBase[];\n\n const inputs = nodes.map((x) => {\n return this.fInputs.filter((i) => x.isContains(i.hostElement)).find((i) => {\n return !(i as FNodeInputBase).isConnected && i.canBeConnected;\n });\n });\n const result = inputs.find((x) => !!x);\n\n return result;\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../../f-components-store';\nimport { FConnectorBase, isNodeInput } from '../../../../f-connectors';\n\n@Injectable()\nexport class InputsUnderPointerHandler\n implements IHandler<IPointerEvent, FConnectorBase[]> {\n\n private get fInputs(): FConnectorBase[] {\n return this.fComponentsStore.fInputs;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore\n ) {\n }\n\n public handle(event: IPointerEvent): FConnectorBase[] {\n const position = event.getPosition();\n const elementsFromPoint = document.elementsFromPoint(position.x, position.y) as HTMLElement[];\n return elementsFromPoint.filter((x) => isNodeInput(x as HTMLElement)).map((element) => {\n return this.fInputs.find((x) => x.isContains(element))!\n }).filter((x) => !!x);\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { CreateConnectionDragHandler } from '../create-connection';\nimport { ReassignConnectionDragHandler } from '../reassign-connection';\n\nexport class FindInputsUnderPointerRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: CreateConnectionDragHandler | ReassignConnectionDragHandler\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FindInputsUnderPointerRequest } from './find-inputs-under-pointer.request';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { InputsUnderPointerHandler } from './inputs-under-pointer';\nimport { FirstNotConnectedInputOfNodeUnderPointerHandler } from './first-not-connected-input-of-node-under-pointer';\nimport { OutputNotFound } from '../../../domain';\nimport { FNodeBase } from '../../../f-node';\nimport { FConnectorBase } from '../../../f-connectors';\n\n@Injectable()\nexport class FindInputsUnderPointerHandler\n implements IHandler<FindInputsUnderPointerRequest, FConnectorBase[]> {\n\n private get fNodes(): FNodeBase[] {\n return this.fComponentsStore.fNodes;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private inputsUnderPointerHandler: InputsUnderPointerHandler,\n private firstNotConnectedInputOfNodeUnderPointerHandler: FirstNotConnectedInputOfNodeUnderPointerHandler,\n ) {\n }\n\n public handle(payload: FindInputsUnderPointerRequest): FConnectorBase[] {\n const inputsUnderPointer = this.getInputsUnderPointer(payload);\n const output = this.fComponentsStore.fOutputs.find((x) => x.id === payload.dragHandler.connection.fOutputId);\n if (!output) {\n throw OutputNotFound(payload.dragHandler.connection.fOutputId);\n }\n return inputsUnderPointer.filter((x) => {\n const targetNode = this.fNodes.find((y) => y.isContains(x.hostElement));\n const sourceNode = this.fNodes.find((y) => y.isContains(output.hostElement));\n return sourceNode?.hostElement !== targetNode?.hostElement;\n });\n }\n\n private getInputsUnderPointer(payload: FindInputsUnderPointerRequest): FConnectorBase[] {\n let inputs = this.inputsUnderPointerHandler.handle(payload.event);\n\n const input = this.firstNotConnectedInputOfNodeUnderPointerHandler.handle(payload.event);\n\n if (input) {\n inputs.push(input);\n }\n inputs = inputs.filter((x) => x.canBeConnected);\n return inputs;\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { EFDraggableType } from '../../e-f-draggable-type';\nimport { FindInputsUnderPointerHandler, FindInputsUnderPointerRequest } from '../find-inputs-under-pointer';\nimport { CreateConnectionDragHandler } from './create-connection.drag-handler';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FindFirstCanBeConnectedOutputByOutletHandler } from './find-first-can-be-connected-output-by-outlet';\nimport { FCreateConnectionEvent } from './f-create-connection.event';\nimport { OutputNotFound, requiredOutput } from '../../../domain';\nimport { FNodeOutletBase, isNodeOutlet } from '../../../f-connectors';\n\n@Injectable()\nexport class CreateConnectionOnPointerUp\n implements IHandler<IPointerEvent, void> {\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private findInputsUnderPointerHandler: FindInputsUnderPointerHandler,\n private findFirstCanBeConnectedOutputByOutletHandler: FindFirstCanBeConnectedOutputByOutletHandler\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const isCreateConnection = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.CREATE_CONNECTION);\n if (isCreateConnection) {\n const handler = this.fDraggableDataContext.draggableItems[ 0 ] as CreateConnectionDragHandler;\n\n const inputsUnderPointer = this.findInputsUnderPointerHandler.handle(\n new FindInputsUnderPointerRequest(event, handler)\n );\n\n if (inputsUnderPointer.length > 0) {\n let output = this.fComponentsStore.fOutputs.find((x) => x.id === handler.connection.fOutputId);\n if (!output) {\n output = this.fComponentsStore.fOutlets.find((x) => x.id === handler.connection.fOutputId);\n }\n if (!output) {\n throw OutputNotFound(handler.connection.fOutputId);\n }\n\n const isOutlet = isNodeOutlet(output.hostElement);\n if (isOutlet) {\n\n output = this.findFirstCanBeConnectedOutputByOutletHandler.handle(output as FNodeOutletBase);\n if (!output) {\n throw requiredOutput();\n }\n }\n this.fComponentsStore.fDraggable?.fCreateConnection.emit(new FCreateConnectionEvent(output.id, inputsUnderPointer[ 0 ]?.id));\n }\n handler.complete();\n }\n }\n}\n","import { IHandler, IPoint, IPointerEvent, ITransformModel, Point } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FindFirstCanBeConnectedOutputByOutletHandler } from './find-first-can-be-connected-output-by-outlet';\nimport { CreateConnectionDragHandler } from './create-connection.drag-handler';\nimport { GetElementRectInFlowHandler } from '../../../domain';\nimport { FConnectorBase, FNodeOutletBase, isNodeOutlet, isNodeOutput } from '../../../f-connectors';\nimport { FNodeBase } from '../../../f-node';\nimport { FFlowMediator } from '../../../f-mediator';\n\n@Injectable()\nexport class CreateConnectionPrepareDragSequence\n implements IHandler<IPointerEvent, void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler,\n private fMediator: FFlowMediator,\n private findFirstCanBeConnectedOutputByOutletHandler: FindFirstCanBeConnectedOutputByOutletHandler,\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n\n const node = this.fComponentsStore.findNode(event.targetElement);\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n if (!node || this.fDraggableDataContext.draggableItems.length || !this.fComponentsStore.fTempConnection) {\n return;\n }\n\n if (isNodeOutlet(event.targetElement)) {\n const outlet = this.fComponentsStore.fOutlets.find((x) => {\n return x.hostElement.contains(event.targetElement);\n });\n if (!outlet) {\n throw new Error('Outlet not found');\n }\n const nodeOutputs = this.fComponentsStore.fOutputs.filter((x) => node.isContains(x.hostElement));\n (outlet as FNodeOutletBase).setOutputs(nodeOutputs);\n\n if (outlet.canBeConnected) {\n\n const outletCenter = this.getElementRectInFlowHandler.handle(outlet.hostElement).gravityCenter;\n if ((outlet as FNodeOutletBase).isConnectionFromOutlet) {\n this.createConnectionHandler(pointerPositionInFlow, outlet, outletCenter);\n } else {\n const output = this.findFirstCanBeConnectedOutputByOutletHandler.handle(outlet as FNodeOutletBase);\n if (!output) {\n throw new Error('Output not found');\n }\n this.createConnectionHandler(pointerPositionInFlow, output, outletCenter);\n }\n }\n } else if (this.isNodeOutput(event.targetElement, node)) {\n const output = this.fComponentsStore.fOutputs.find((x) => {\n return x.hostElement.contains(event.targetElement);\n });\n if (!output) {\n throw new Error('Output not found');\n }\n if (output.canBeConnected) {\n const outputCenter = this.getElementRectInFlowHandler.handle(output.hostElement).gravityCenter;\n this.createConnectionHandler(pointerPositionInFlow, output, outputCenter);\n }\n }\n }\n\n private createConnectionHandler(\n pointerPositionInCanvas: Point,\n output: FConnectorBase,\n outputCenter: IPoint\n ): void {\n\n this.fComponentsStore.fTempConnection!.fOutputId = output.id;\n this.fComponentsStore.fTempConnection!.initialize();\n\n this.fDraggableDataContext.onPointerDownScale = this.transform.scale;\n\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInCanvas.div(this.transform.scale);\n\n this.fDraggableDataContext.draggableItems = [\n new CreateConnectionDragHandler(this.fMediator, this.fComponentsStore.fTempConnection!, outputCenter)\n ];\n }\n\n private isNodeOutput(targetElement: HTMLElement, node: FNodeBase): boolean {\n const outlets = this.fComponentsStore.fOutlets.filter((x) => node.isContains(x.hostElement));\n return isNodeOutput(targetElement) && !outlets.length;\n }\n}\n","import { IPoint, IRect, IVector, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EFDraggableType } from '../../e-f-draggable-type';\nimport {\n GetConnectionVectorRequest,\n GetInputRectInFlowHandler, GetOutputRectInFlowRequest, GetOutputRectInFlowResponse\n} from '../../../domain';\nimport { FConnectionBase } from '../../../f-connection';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport { FFlowMediator } from '../../../f-mediator';\n\nexport class ReassignConnectionDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.REASSIGN_CONNECTION;\n\n private onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n private outputSide: EFConnectableSide = EFConnectableSide.BOTTOM;\n private inputSide: EFConnectableSide = EFConnectableSide.TOP;\n\n constructor(\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private fMediator: FFlowMediator,\n public connection: FConnectionBase\n ) {\n }\n\n public initialize(): void {\n const fromConnector = this.fMediator.send<GetOutputRectInFlowResponse>(\n new GetOutputRectInFlowRequest(this.connection.fOutputId)\n );\n this.inputSide = this.getInputRectInFlowHandler.handle(this.connection.fInputId).fConnectableSide;\n this.outputSide = fromConnector.fConnectableSide;\n this.onPointerDownFromConnectorRect = fromConnector.rect;\n this.onPointerDownToConnectorRect = RectExtensions.initialize(this.connection.vector.point2.x, this.connection.vector.point2.y, 0, 0);\n }\n\n public move(difference: IPoint): void {\n const toRect = RectExtensions.addPoint(this.onPointerDownToConnectorRect, difference);\n\n const vector = this.fMediator.send<IVector>(new GetConnectionVectorRequest(\n this.onPointerDownFromConnectorRect,\n toRect,\n this.connection.fBehavior,\n this.outputSide,\n this.inputSide,\n )\n );\n\n this.connection.setVector(vector.point1, this.outputSide, vector.point2, this.inputSide);\n this.connection.redraw();\n }\n\n public complete(): void {\n const fromConnector = this.fMediator.send<GetOutputRectInFlowResponse>(\n new GetOutputRectInFlowRequest(this.connection.fOutputId)\n );\n const toConnector = this.getInputRectInFlowHandler.handle(this.connection.fInputId);\n\n const vector = this.fMediator.send<IVector>(new GetConnectionVectorRequest(\n fromConnector.rect,\n toConnector.rect,\n this.connection.fBehavior,\n fromConnector.fConnectableSide,\n toConnector.fConnectableSide,\n )\n );\n\n this.connection.setVector(vector.point1, fromConnector.fConnectableSide, vector.point2, toConnector.fConnectableSide);\n this.connection.redraw();\n }\n}\n","export class FReassignConnectionEvent<T = any> {\n\n constructor(\n public connectionId: T,\n public fOutputId: T,\n public oldFInputId: T,\n public newFInputId: T\n ) {\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { ReassignConnectionDragHandler } from './reassign-connection.drag-handler';\nimport { EFDraggableType } from '../../e-f-draggable-type';\nimport {\n FindInputsUnderPointerHandler,\n FindInputsUnderPointerRequest,\n FReassignConnectionEvent\n} from '../index';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FDraggableBase } from '../../f-draggable-base';\n\n@Injectable()\nexport class ReassignConnectionOnPointerUp\n implements IHandler<IPointerEvent, void> {\n\n private get fDraggable(): FDraggableBase {\n return this.fComponentsStore.fDraggable!;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private findInputsUnderPointerHandler: FindInputsUnderPointerHandler\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const isReassignConnection = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.REASSIGN_CONNECTION);\n if (isReassignConnection) {\n const handler = this.fDraggableDataContext.draggableItems[ 0 ] as ReassignConnectionDragHandler;\n\n const inputsUnderPointer = this.findInputsUnderPointerHandler.handle(\n new FindInputsUnderPointerRequest(event, handler)\n );\n\n if (inputsUnderPointer.length > 0) {\n if (handler.connection.fInputId !== inputsUnderPointer[ 0 ]?.id) {\n this.fDraggable.fReassignConnection.emit(\n new FReassignConnectionEvent(\n handler.connection.fConnectionId, handler.connection.fOutputId,\n handler.connection.fInputId,\n inputsUnderPointer[ 0 ]?.id\n )\n );\n }\n }\n handler.complete();\n }\n }\n}\n","import { IHandler, IPointerEvent, ITransformModel, Point } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { ReassignConnectionDragHandler } from './reassign-connection.drag-handler';\nimport {\n GetConnectionHandler,\n GetInputRectInFlowHandler, UpdateConnectionLayerHandler\n} from '../../../domain';\nimport { F_CONNECTION_DRAG_HANDLE_CLASS, FConnectionBase } from '../../../f-connection';\nimport { FFlowMediator } from '../../../f-mediator';\n\n@Injectable()\nexport class ReassignConnectionPrepareDragSequence\n implements IHandler<IPointerEvent, void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getConnectionHandler: GetConnectionHandler,\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private fMediator: FFlowMediator,\n private updateConnectionLayerHandler: UpdateConnectionLayerHandler,\n\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n const position = event.getPosition();\n const allElements = document.elementsFromPoint(position.x, position.y);\n\n const dragHandlesOfConnections = allElements.filter((x) => {\n return !!this.getConnectionHandler.handle(x as HTMLElement) && x.classList.contains(F_CONNECTION_DRAG_HANDLE_CLASS);\n });\n\n let connectionToReassign: FConnectionBase | undefined;\n if (dragHandlesOfConnections.length) {\n const connections = dragHandlesOfConnections.map((x) => this.getConnectionHandler.handle(x as HTMLElement)).filter((x) => !x?.disabled);\n if(connections.length) {\n connectionToReassign = this.getConnectionHandler.handle(dragHandlesOfConnections[ 0 ] as HTMLElement);\n }\n }\n\n if (connectionToReassign && !this.fDraggableDataContext.draggableItems.length) {\n this.updateConnectionLayerHandler.handle(connectionToReassign);\n this.fDraggableDataContext.onPointerDownScale = this.transform.scale;\n\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInFlow.div(this.transform.scale);\n\n this.fDraggableDataContext.draggableItems = [\n new ReassignConnectionDragHandler(\n this.getInputRectInFlowHandler, this.fMediator, connectionToReassign\n )\n ]\n }\n }\n}\n","import {\n CreateConnectionOnPointerUp,\n CreateConnectionPrepareDragSequence,\n FindFirstCanBeConnectedOutputByOutletHandler\n} from './create-connection';\nimport {\n FindInputsUnderPointerHandler,\n FirstNotConnectedInputOfNodeUnderPointerHandler,\n InputsUnderPointerHandler\n} from './find-inputs-under-pointer';\nimport { ReassignConnectionOnPointerUp, ReassignConnectionPrepareDragSequence } from './reassign-connection';\n\nexport const CONNECTIONS_PROVIDERS = [\n\n FindFirstCanBeConnectedOutputByOutletHandler,\n\n CreateConnectionOnPointerUp,\n\n CreateConnectionPrepareDragSequence,\n\n FirstNotConnectedInputOfNodeUnderPointerHandler,\n\n InputsUnderPointerHandler,\n\n FindInputsUnderPointerHandler,\n\n ReassignConnectionOnPointerUp,\n\n ReassignConnectionPrepareDragSequence\n];\n","import { IRect } from '@foblex/core';\n\nexport class FCreateNodeEvent<TData = any> {\n\n constructor(\n public rect: IRect,\n public data: TData,\n ) {\n }\n}\n","import { DomElementExtensions, IPoint, IRect, Point, PointExtensions, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { FExternalItemBase } from '../../f-external-item';\n\nexport class ExternalItemDragHandler implements IDraggableItem {\n\n public readonly type = EFDraggableType.PALETTE_ITEM;\n\n public placeholder: HTMLElement | SVGElement | undefined;\n\n private onPointerDownRect: IRect = RectExtensions.initialize();\n\n private difference: IPoint = PointExtensions.initialize();\n\n constructor(\n public externalItem: FExternalItemBase\n ) {\n }\n\n private getStyle(position: IPoint): string {\n return `position: absolute; left: 0; top: 0; transform: translate(${ position.x }px, ${ position.y }px)`;\n }\n\n public initialize(): void {\n this.onPointerDownRect = this.getExternalItemRect();\n this.placeholder = DomElementExtensions.deepCloneNode(this.externalItem.hostElement);\n document.body.appendChild(this.placeholder);\n }\n\n private getExternalItemRect(): IRect {\n const rect = this.externalItem.hostElement.getBoundingClientRect();\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\n const offsetTop = rect.top + scrollTop;\n const offsetLeft = rect.left + scrollLeft;\n return RectExtensions.initialize(offsetLeft, offsetTop, rect.width, rect.height);\n }\n\n public move(difference: IPoint): void {\n this.difference = difference;\n const position = Point.fromPoint(this.onPointerDownRect).add(this.difference);\n this.placeholder!.setAttribute('style', this.getStyle(position));\n }\n\n public getPlaceholderRect(): IRect {\n return RectExtensions.fromElement(this.placeholder!);\n }\n\n public complete(): void {\n document.body.removeChild(this.placeholder!);\n }\n}\n","import { IHasHostElement } from '@foblex/core';\nimport { Directive, InjectionToken } from '@angular/core';\n\nexport const F_EXTERNAL_ITEM = new InjectionToken<FExternalItemBase>('F_EXTERNAL_ITEM');\n\n@Directive()\nexport abstract class FExternalItemBase implements IHasHostElement {\n\n public abstract id: any;\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public abstract data: any;\n}\n","export function isExternalItem(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fExternalItem]');\n}\n\nexport function getExternalItem(element: HTMLElement | SVGElement): HTMLElement | SVGElement {\n return element.closest('[fExternalItem]') as HTMLElement | SVGElement;\n}\n","import { Injectable } from '@angular/core';\nimport { FExternalItemBase } from './f-external-item-base';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FExternalItemService {\n\n private items: FExternalItemBase[] = [];\n\n public registerItem(item: FExternalItemBase): void {\n this.items.push(item);\n }\n\n public getItem(element: HTMLElement | SVGElement): FExternalItemBase | undefined {\n return this.items.find(item => item.hostElement === element);\n }\n\n public removeItem(item: FExternalItemBase): void {\n const index = this.items.indexOf(item);\n if (index !== -1) {\n this.items.splice(index, 1);\n }\n }\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FExternalItemBase, F_EXTERNAL_ITEM } from './f-external-item-base';\nimport { FExternalItemService } from './f-external-item.service';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fExternalItem]\",\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-external-item\",\n },\n providers: [\n { provide: F_EXTERNAL_ITEM, useExisting: FExternalItemDirective }\n ],\n})\nexport class FExternalItemDirective extends FExternalItemBase implements OnInit, OnDestroy {\n\n @Input()\n public override id: string = `f-external-item-${ uniqueId++ }`;\n\n public override get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n @Input()\n public override data: any;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fExternalItemService: FExternalItemService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.fExternalItemService.registerItem(this);\n }\n\n public ngOnDestroy(): void {\n this.fExternalItemService.removeItem(this);\n }\n}\n","import { IHandler, IPointerEvent, ITransformModel, Point } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { ExternalItemDragHandler } from './external-item.drag-handler';\nimport { FExternalItemService, getExternalItem, isExternalItem } from '../../f-external-item';\n\n@Injectable()\nexport class ExternalItemPrepareDragSequence implements IHandler<IPointerEvent, void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private fExternalItemService: FExternalItemService\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n if (isExternalItem(event.targetElement)) {\n\n const item = this.fExternalItemService.getItem(getExternalItem(event.targetElement));\n if (!item) {\n throw new Error('External item not found');\n }\n\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n\n this.fDraggableDataContext.onPointerDownScale = 1;\n\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInFlow.div(1);\n\n this.fDraggableDataContext.draggableItems = [\n new ExternalItemDragHandler(item)\n ];\n }\n }\n}\n","import { IHandler, IPointerEvent, Point } from '@foblex/core';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { ExternalItemDragHandler } from './external-item.drag-handler';\nimport { FCreateNodeEvent } from './f-create-node.event';\nimport { GetElementRectInFlowHandler } from '../../domain';\n\n@Injectable()\nexport class ExternalItemOnPointerUp implements IHandler<IPointerEvent, void> {\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n private get fCreateNode(): EventEmitter<FCreateNodeEvent> {\n return this.fComponentsStore.fDraggable!.fCreateNode;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n let difference = pointerPositionInFlow.div(this.fDraggableDataContext.onPointerDownScale).sub(this.fDraggableDataContext.onPointerDownPosition);\n\n const isDragPaletteItem = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.PALETTE_ITEM);\n\n if (isDragPaletteItem) {\n const dragHandler = this.fDraggableDataContext.draggableItems[ 0 ] as ExternalItemDragHandler\n dragHandler.move(difference);\n\n const isPointerInCanvasRect = document.elementsFromPoint(event.getPosition().x, event.getPosition().y).some((x) => x === this.flowHost);\n if (isPointerInCanvasRect) {\n const rectInCanvas = this.getElementRectInFlowHandler.handle(dragHandler.placeholder!);\n this.fCreateNode.emit(\n new FCreateNodeEvent(rectInCanvas, dragHandler.externalItem.data)\n );\n }\n dragHandler.complete();\n }\n }\n}\n","import { ExternalItemOnPointerUp } from './external-item.on-pointer-up';\nimport { ExternalItemPrepareDragSequence } from './external-item.prepare-drag-sequence';\n\nexport const EXTERNAL_ITEM_PROVIDERS = [\n\n ExternalItemOnPointerUp,\n\n ExternalItemPrepareDragSequence\n];\n","import { IHandler, ITransformModel, RectExtensions } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../../f-components-store';\nimport { FDraggableDataContext } from '../../../f-draggable-data-context';\nimport { NodeDragHandler } from '../../node.drag-handler';\nimport { EFDraggableType } from '../../../e-f-draggable-type';\nimport {\n GetElementRectInFlowHandler,\n GetIncomingConnectionsHandler,\n GetOutgoingConnectionsHandler\n} from '../../../../domain';\nimport { FConnectionBase } from '../../../../f-connection';\nimport { FNodeBase } from '../../../../f-node';\nimport { FConnectorBase } from '../../../../f-connectors';\n\n@Injectable()\nexport class IsConnectionUnderNodeHandler implements IHandler<void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler,\n private getOutgoingConnectionsHandler: GetOutgoingConnectionsHandler,\n private getIncomingConnectionsHandler: GetIncomingConnectionsHandler\n ) {\n }\n\n public handle(): void {\n\n const isValid = this.isValidRequest();\n if (!isValid) {\n return;\n }\n\n const fNode = (this.fDraggableDataContext.draggableItems[ 0 ] as NodeDragHandler).fNode;\n\n const outputsOfNode = this.getOutputsForNode(fNode);\n const inputsOfNode = this.getInputsForNode(fNode);\n\n const isCantBeConnectedByOutput = outputsOfNode.some((x) => !x.canBeConnected);\n\n const isCantBeConnectedByInput = this.fComponentsStore.fConnections.some((x) => {\n return inputsOfNode.find((input) => input.id === x.fInputId);\n });\n\n if (!isCantBeConnectedByInput && outputsOfNode.length && !isCantBeConnectedByOutput && inputsOfNode.length) {\n const output = outputsOfNode[ 0 ];\n const input = inputsOfNode[ 0 ];\n const outgoingConnections = this.getOutgoingConnectionsHandler.handle([ output ]);\n const incomingConnections = this.getIncomingConnectionsHandler.handle([ input ]);\n if (outgoingConnections.length === 0 && incomingConnections.length === 0) {\n const connections = this.findConnectionsUnderNode(fNode);\n if (connections.length) {\n\n }\n }\n }\n }\n\n private isValidRequest(): boolean {\n const result =\n this.fDraggableDataContext.draggableItems.length === 1 &&\n this.fDraggableDataContext.draggableItems[ 0 ].type === EFDraggableType.NODE;\n\n return result;\n }\n\n private getOutputsForNode(node: FNodeBase): FConnectorBase[] {\n return this.fComponentsStore.fOutputs.filter((x) => node.isContains(x.hostElement));\n }\n\n private getInputsForNode(node: FNodeBase): FConnectorBase[] {\n return this.fComponentsStore.fInputs.filter((x) => node.isContains(x.hostElement));\n }\n\n private findConnectionsUnderNode(node: FNodeBase): FConnectionBase[] {\n const nodeRect = this.getElementRectInFlowHandler.handle(node.hostElement);\n return this.fComponentsStore.fConnections.filter((x) => {\n const intersection = RectExtensions.intersectionWithVector(nodeRect, x.vector.point1, x.vector.point2);\n return (intersection || []).length > 0\n });\n }\n}\n","import { IPoint, IVector, Point, VectorExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport {\n GetConnectionVectorRequest,\n GetInputRectInFlowHandler,\n GetOutputRectInFlowRequest,\n GetOutputRectInFlowResponse\n} from '../../domain';\nimport { FConnectionBase } from '../../f-connection';\nimport { EFConnectableSide } from '../../f-connectors';\nimport { FFlowMediator } from '../../f-mediator';\n\nexport class ConnectionDragHandler implements IDraggableItem {\n\n public readonly type = EFDraggableType.CONNECTION;\n\n private onPointerDownVector: IVector = VectorExtensions.initialize();\n\n private fromConnectorSide: EFConnectableSide = EFConnectableSide.BOTTOM;\n\n private toConnectorSide: EFConnectableSide = EFConnectableSide.TOP;\n\n constructor(\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private fMediator: FFlowMediator,\n public connection: FConnectionBase,\n ) {\n }\n\n public initialize() {\n const fromConnector = this.fMediator.send<GetOutputRectInFlowResponse>(\n new GetOutputRectInFlowRequest(this.connection.fOutputId)\n );\n this.fromConnectorSide = fromConnector.fConnectableSide;\n\n const toConnector = this.getInputRectInFlowHandler.handle(this.connection.fInputId);\n this.toConnectorSide = toConnector.fConnectableSide;\n\n this.onPointerDownVector = this.fMediator.send(new GetConnectionVectorRequest(\n fromConnector.rect,\n toConnector.rect,\n this.connection.fBehavior,\n fromConnector.fConnectableSide,\n toConnector.fConnectableSide,\n )\n );\n }\n\n public move(difference: IPoint): void {\n const fromPoint = Point.fromPoint(this.onPointerDownVector.point1).add(difference);\n const toPoint = Point.fromPoint(this.onPointerDownVector.point2).add(difference);\n\n this.connection.setVector(fromPoint, this.fromConnectorSide, toPoint, this.toConnectorSide);\n this.connection.redraw();\n }\n}\n","import { IPoint, IRect, IVector, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport {\n GetConnectionVectorRequest,\n GetInputRectInFlowHandler, GetOutputRectInFlowRequest, GetOutputRectInFlowResponse\n} from '../../domain';\nimport { FConnectionBase } from '../../f-connection';\nimport { EFConnectableSide } from '../../f-connectors';\nimport { FFlowMediator } from '../../f-mediator';\n\nexport class ConnectionSourceDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.CONNECTION;\n\n private fromConnectorRect: IRect = RectExtensions.initialize();\n private fromConnectorSide: EFConnectableSide = EFConnectableSide.BOTTOM;\n\n private toConnectorRect: IRect = RectExtensions.initialize();\n private toConnectorSide: EFConnectableSide = EFConnectableSide.TOP;\n\n constructor(\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private fMediator: FFlowMediator,\n private connection: FConnectionBase,\n ) {\n }\n\n public initialize(): void {\n const fromConnector = this.fMediator.send<GetOutputRectInFlowResponse>(\n new GetOutputRectInFlowRequest(this.connection.fOutputId)\n );\n this.fromConnectorRect = fromConnector.rect;\n this.fromConnectorSide = fromConnector.fConnectableSide;\n\n const toConnector = this.getInputRectInFlowHandler.handle(this.connection.fInputId);\n this.toConnectorRect = toConnector.rect;\n this.toConnectorSide = toConnector.fConnectableSide;\n }\n\n public move(difference: IPoint): void {\n const fromConnectorRect = RectExtensions.addPoint(this.fromConnectorRect, difference);\n\n const vector = this.fMediator.send<IVector>(new GetConnectionVectorRequest(\n fromConnectorRect,\n this.toConnectorRect,\n this.connection.fBehavior,\n this.fromConnectorSide,\n this.toConnectorSide,\n )\n );\n\n this.connection.setVector(vector.point1, this.fromConnectorSide, vector.point2, this.toConnectorSide);\n this.connection.redraw();\n }\n}\n","import { IPoint, IRect, IVector, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport {\n GetConnectionVectorRequest,\n GetInputRectInFlowHandler, GetOutputRectInFlowRequest, GetOutputRectInFlowResponse\n} from '../../domain';\nimport { FConnectionBase } from '../../f-connection';\nimport { EFConnectableSide } from '../../f-connectors';\nimport { FFlowMediator } from '../../f-mediator';\n\nexport class ConnectionTargetDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.CONNECTION;\n\n private fromConnectorRect: IRect = RectExtensions.initialize();\n private fromConnectorSide: EFConnectableSide = EFConnectableSide.BOTTOM;\n\n private toConnectorRect: IRect = RectExtensions.initialize();\n private toConnectorSide: EFConnectableSide = EFConnectableSide.TOP;\n\n constructor(\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private fMediator: FFlowMediator,\n private connection: FConnectionBase,\n ) {\n }\n\n public initialize(): void {\n const fromConnector = this.fMediator.send<GetOutputRectInFlowResponse>(\n new GetOutputRectInFlowRequest(this.connection.fOutputId)\n );\n this.fromConnectorRect = fromConnector.rect;\n this.fromConnectorSide = fromConnector.fConnectableSide;\n\n const toConnector = this.getInputRectInFlowHandler.handle(this.connection.fInputId);\n this.toConnectorRect = toConnector.rect;\n this.toConnectorSide = toConnector.fConnectableSide;\n }\n\n public move(difference: IPoint): void {\n const toConnectorRect = RectExtensions.addPoint(this.toConnectorRect, difference);\n\n const vector = this.fMediator.send<IVector>(new GetConnectionVectorRequest(\n this.fromConnectorRect,\n toConnectorRect,\n this.connection.fBehavior,\n this.fromConnectorSide,\n this.toConnectorSide,\n )\n );\n\n this.connection.setVector(vector.point1, this.fromConnectorSide, vector.point2, this.toConnectorSide);\n this.connection.redraw();\n }\n}\n","import { IPoint, Point, PointExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { FNodeBase } from '../../f-node';\n\nexport class NodeDragHandler implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.NODE;\n\n private onPointerDownPosition: IPoint = PointExtensions.initialize();\n\n constructor(\n private fDraggableDataContext: FDraggableDataContext,\n public fNode: FNodeBase\n ) {\n this.onPointerDownPosition = this.fNode.position;\n }\n\n public move(difference: IPoint): void {\n const position = Point.fromPoint(this.onPointerDownPosition).add(difference);\n this.fNode.updatePosition(position);\n this.fNode.redraw();\n this.fDraggableDataContext.fLineAlignment?.handle(difference);\n }\n\n public complete(): void {\n this.fNode.completeDrag();\n }\n}\n","import { IHandler, IPointerEvent, ITransformModel, Point } from '@foblex/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { Injectable } from '@angular/core';\nimport { IsConnectionUnderNodeHandler } from './domain/is-connection-under-node';\n\n@Injectable()\nexport class NodeOnPointerUp\n implements IHandler<IPointerEvent, void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private isConnectionUnderNodeHandler: IsConnectionUnderNodeHandler,\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n let difference = pointerPositionInFlow.div(this.fDraggableDataContext.onPointerDownScale).sub(this.fDraggableDataContext.onPointerDownPosition);\n\n const isDragNodes = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.NODE);\n\n if (isDragNodes) {\n const nearestIntersection = this.fDraggableDataContext.fLineAlignment?.findNearestCoordinate(difference);\n if (nearestIntersection) {\n difference.x = nearestIntersection.xResult.value ? (difference.x - nearestIntersection.xResult.distance!) : difference.x;\n difference.y = nearestIntersection.yResult.value ? (difference.y - nearestIntersection.yResult.distance!) : difference.y;\n }\n this.fDraggableDataContext.draggableItems.forEach((x) => {\n x.move(difference);\n x.complete?.();\n });\n this.isConnectionUnderNodeHandler.handle();\n this.fDraggableDataContext.fLineAlignment?.complete();\n }\n }\n}\n","import { IHandler, IPointerEvent, ITransformModel, Point } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { NodeDragHandler } from './node.drag-handler';\nimport { ConnectionTargetDragHandler } from './connection-target.drag-handler';\nimport { ConnectionSourceDragHandler } from './connection-source.drag-handler';\nimport { ConnectionDragHandler } from './connection.drag-handler';\nimport {\n GetIncomingConnectionsHandler, GetInputRectInFlowHandler,\n GetOutgoingConnectionsHandler, UpdateNodeLayerHandler\n} from '../../domain';\nimport { FNodeBase, isNodeDragHandle } from '../../f-node';\nimport { FConnectorBase } from '../../f-connectors';\nimport { FFlowMediator } from '../../f-mediator';\n\n@Injectable()\nexport class NodePrepareDragSequence implements IHandler<IPointerEvent, void> {\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private updateNodeLayerHandler: UpdateNodeLayerHandler,\n private getInputRectInFlowHandler: GetInputRectInFlowHandler,\n private getOutgoingConnectionsHandler: GetOutgoingConnectionsHandler,\n private getIncomingConnectionsHandler: GetIncomingConnectionsHandler,\n private fMediator: FFlowMediator\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n\n const node = this.fComponentsStore.findNode(event.targetElement);\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.flowHost);\n\n if (node && !node.disabled && !this.fDraggableDataContext.draggableItems.length) {\n if (isNodeDragHandle(event.targetElement)) {\n if (!this.fDraggableDataContext.selectedItems.includes(node)) {\n this.fDraggableDataContext.selectedItems.push(node);\n node.select();\n this.fDraggableDataContext.isSelectedChanged = true;\n }\n this.updateNodeLayerHandler.handle(node);\n const itemsToDrag: IDraggableItem[] = this.calculateDraggableConnectionsAndNodes();\n\n const draggedNodes = itemsToDrag.filter((x) => {\n return x.type === EFDraggableType.NODE;\n }).map((x) => (x as NodeDragHandler).fNode);\n\n this.fDraggableDataContext.fLineAlignment?.initialize(this.fComponentsStore.fNodes, draggedNodes);\n\n this.fDraggableDataContext.onPointerDownScale = this.transform.scale;\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInFlow.div(this.transform.scale);\n this.fDraggableDataContext.draggableItems = itemsToDrag;\n }\n }\n }\n\n private calculateDraggableConnectionsAndNodes(): IDraggableItem[] {\n let itemsToDrag: IDraggableItem[] = [];\n\n const selectedNodes = this.fDraggableDataContext.selectedItems.map((x) => {\n return this.fComponentsStore.findNode(x.hostElement);\n }).filter((x) => !!x) as FNodeBase[];\n\n const nodeDragHandlers = selectedNodes.map((x) => new NodeDragHandler(this.fDraggableDataContext, x));\n itemsToDrag = nodeDragHandlers;\n\n const allOutputIds: any[] = selectedNodes.reduce((result: FConnectorBase[], x: FNodeBase) => {\n return result.concat(this.getOutputsForNode(x));\n }, []).map((x) => x.id);\n\n const allInputIds: any[] = selectedNodes.reduce((result: FConnectorBase[], x: FNodeBase) => {\n return result.concat(this.getInputsForNode(x));\n }, []).map((x) => x.id);\n\n nodeDragHandlers.forEach((nodeHandler) => {\n const outputConnections = this.getOutgoingConnectionsHandler.handle(this.getOutputsForNode(nodeHandler.fNode));\n outputConnections.forEach((c) => {\n if (allInputIds.includes(c.fInputId)) {\n itemsToDrag.push(\n new ConnectionDragHandler(this.getInputRectInFlowHandler, this.fMediator, c)\n );\n } else {\n itemsToDrag.push(\n new ConnectionSourceDragHandler(this.getInputRectInFlowHandler, this.fMediator, c)\n );\n }\n });\n const inputConnections = this.getIncomingConnectionsHandler.handle(this.getInputsForNode(nodeHandler.fNode));\n inputConnections.forEach((c) => {\n if (allOutputIds.includes(c.fOutputId)) {\n const index = itemsToDrag.findIndex((x) => x.type === EFDraggableType.CONNECTION && (x as ConnectionDragHandler).connection.fConnectionId === c.fConnectionId);\n if (index !== -1) {\n itemsToDrag.push(\n new ConnectionDragHandler(this.getInputRectInFlowHandler, this.fMediator, c)\n );\n }\n } else {\n itemsToDrag.push(\n new ConnectionTargetDragHandler(this.getInputRectInFlowHandler, this.fMediator, c)\n );\n }\n });\n });\n return itemsToDrag;\n }\n\n private getInputsForNode(node: FNodeBase): FConnectorBase[] {\n return this.fComponentsStore.fInputs.filter((x) => node.isContains(x.hostElement));\n }\n\n private getOutputsForNode(node: FNodeBase): FConnectorBase[] {\n return this.fComponentsStore.fOutputs.filter((x) => node.isContains(x.hostElement));\n }\n}\n","import { NodeOnPointerUp } from './node.on-pointer-up';\nimport { NodePrepareDragSequence } from './node.prepare-drag-sequence';\nimport { IsConnectionUnderNodeHandler } from './domain/is-connection-under-node';\n\nexport const NODE_PROVIDERS = [\n\n NodeOnPointerUp,\n\n NodePrepareDragSequence,\n\n IsConnectionUnderNodeHandler\n];\n","import { Injectable } from '@angular/core';\nimport { IHandler, IRect, ITransformModel, RectExtensions } from '@foblex/core';\nimport { ISelectableWithRect } from './i-selectable-with-rect';\nimport { FComponentsStore } from '../../../f-components-store';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { GetElementRectInFlowHandler } from '../../../domain';\nimport { FConnectionBase, ISelectable } from '../../../f-connection';\nimport { FNodeBase } from '../../../f-node';\n\n@Injectable()\nexport class GetCanBeSelectedItemsHandler implements IHandler<void, ISelectableWithRect[]> {\n\n private get fNodes(): FNodeBase[] {\n return this.fComponentsStore.fNodes;\n }\n\n private get fConnections(): FConnectionBase[] {\n return this.fComponentsStore.fConnections;\n }\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler\n ) {\n }\n\n public handle(): ISelectableWithRect[] {\n const nodeRects = this.getNodesWithRects();\n\n const lineRects = this.getConnectionsWithRects();\n\n const result = [ ...nodeRects, ...lineRects ].filter((x) => {\n return !this.fDraggableDataContext.selectedItems.includes(x.element);\n });\n\n return result;\n }\n\n private getNodesWithRects(): { element: ISelectable, rect: IRect }[] {\n return this.fNodes.map((x) => {\n\n const rect = this.getElementRectInFlowHandler.handle(x.hostElement);\n return {\n element: x,\n rect: RectExtensions.mult(rect, this.transform.scale)\n };\n });\n }\n\n private getConnectionsWithRects(): { element: ISelectable, rect: IRect }[] {\n return this.fConnections.map((x) => {\n const rect = this.getElementRectInFlowHandler.handle(x.boundingElement);\n return {\n element: x,\n rect: RectExtensions.mult(rect, this.transform.scale)\n };\n });\n }\n}\n","import { IPoint, Point, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../i-draggable-item';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { GetCanBeSelectedItemsHandler, ISelectableWithRect } from './get-can-be-selected-items';\nimport { Injector } from '@angular/core';\nimport { ISelectable } from '../../f-connection';\n\nexport class SelectionAreaDragHandle implements IDraggableItem {\n\n public readonly type: EFDraggableType = EFDraggableType.SELECTION;\n\n private canBeSelected: ISelectableWithRect[] = [];\n\n private selectedByMove: ISelectable[] = [];\n\n private get canvasPosition(): Point {\n return Point.fromPoint(this.fComponentsStore.fCanvas!.transform.position).add(this.fComponentsStore.fCanvas!.transform.scaledPosition);\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private injector: Injector\n ) {\n }\n\n public initialize(): void {\n this.canBeSelected = this.injector.get(GetCanBeSelectedItemsHandler).handle();\n\n this.fDraggableDataContext.fSelectionArea?.show();\n this.fDraggableDataContext.fSelectionArea?.draw({\n left: this.fDraggableDataContext.onPointerDownPosition.x,\n top: this.fDraggableDataContext.onPointerDownPosition.y,\n width: 0,\n height: 0\n });\n }\n\n public move(difference: IPoint): void {\n const currentPoint = Point.fromPoint(difference).add(this.fDraggableDataContext.onPointerDownPosition);\n const x: number = Math.min(this.fDraggableDataContext.onPointerDownPosition.x, currentPoint.x);\n const y: number = Math.min(this.fDraggableDataContext.onPointerDownPosition.y, currentPoint.y);\n\n const width = Math.abs(difference.x);\n const height = Math.abs(difference.y);\n\n this.fDraggableDataContext.fSelectionArea?.draw({ left: x, top: y, width, height });\n this.selectedByMove = [];\n this.canBeSelected.forEach((item) => {\n item.element.deselect();\n\n const itemRect = RectExtensions.addPoint(item.rect, this.canvasPosition);\n\n const isIntersect = RectExtensions.intersectionWithRect(itemRect, RectExtensions.initialize(x, y, width, height));\n if (isIntersect) {\n\n item.element.select();\n this.selectedByMove.push(item.element);\n }\n });\n }\n\n public complete(): void {\n this.fDraggableDataContext.fSelectionArea?.hide();\n this.fDraggableDataContext.selectedItems.push(...this.selectedByMove);\n if (this.selectedByMove.length > 0) {\n this.fDraggableDataContext.isSelectedChanged = true;\n }\n }\n}\n","import { IHandler, IPointerEvent, MouseEventExtensions, Point } from '@foblex/core';\nimport { Injectable, Injector } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { SelectionAreaDragHandle } from './selection-area.drag-handle';\nimport { FFlowBase } from '../../f-flow';\n\n@Injectable()\nexport class SelectionAreaPrepareDragSequence implements IHandler<IPointerEvent, void> {\n\n private get fFlow(): FFlowBase {\n return this.fComponentsStore.fFlow as FFlowBase;\n }\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private injector: Injector\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const pointerPositionInFlow = Point.fromPoint(event.getPosition()).elementTransform(this.fFlow.hostElement);\n\n if (MouseEventExtensions.isShiftPressed(event.originalEvent) && this.fDraggableDataContext.fSelectionArea) {\n this.fDraggableDataContext.draggableItems = [\n new SelectionAreaDragHandle(this.fComponentsStore, this.fDraggableDataContext, this.injector)\n ];\n\n this.fDraggableDataContext.onPointerDownScale = 1;\n this.fDraggableDataContext.onPointerDownPosition = pointerPositionInFlow.div(1);\n }\n }\n}\n","import { IHandler, IPointerEvent } from '@foblex/core';\nimport { EFDraggableType } from '../e-f-draggable-type';\nimport { Injectable } from '@angular/core';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\n\n@Injectable()\nexport class SelectionAreaOnPointerUp\n implements IHandler<IPointerEvent, void> {\n\n constructor(\n private fDraggableDataContext: FDraggableDataContext,\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n const isSelection = this.fDraggableDataContext.draggableItems.some((x) => x.type === EFDraggableType.SELECTION);\n\n if (isSelection) {\n this.fDraggableDataContext.draggableItems.forEach((x) => {\n x.complete?.();\n });\n }\n }\n}\n","import { SelectionAreaPrepareDragSequence } from './selection-area.prepare-drag-sequence';\nimport { SelectionAreaOnPointerUp } from './selection-area.on-pointer-up';\nimport { GetCanBeSelectedItemsHandler } from './get-can-be-selected-items';\n\nexport const SELECTION_AREA_PROVIDERS = [\n\n GetCanBeSelectedItemsHandler,\n\n SelectionAreaPrepareDragSequence,\n\n SelectionAreaOnPointerUp,\n];\n","import { IHandler, IPointerEvent, MouseEventExtensions } from '@foblex/core';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { GetConnectionHandler, UpdateConnectionLayerHandler } from '../../domain';\nimport { FNodeBase } from '../../f-node';\nimport { ISelectable } from '../../f-connection';\nimport { isNodeOutlet, isNodeOutput } from '../../f-connectors';\n\n@Injectable()\nexport class SingleSelectOnPointerDown implements IHandler<IPointerEvent, void> {\n\n constructor(\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getConnectionHandler: GetConnectionHandler,\n private updateConnectionLayerHandler: UpdateConnectionLayerHandler\n ) {\n }\n\n public handle(event: IPointerEvent): void {\n\n if (!this.fComponentsStore.fFlow?.hostElement.contains(event.targetElement)) {\n return;\n }\n const node = this.fComponentsStore.findNode(event.targetElement);\n const connection = this.getConnectionHandler.handle(event.targetElement);\n this.deselectAll(node, event);\n\n let element: ISelectable | undefined;\n if (this.fDraggableDataContext.selectedItems.length) {\n element = this.fDraggableDataContext.selectedItems[ 0 ];\n }\n\n this.resetSelectionIfNotMultiselect(event);\n\n if (node) {\n if (!this.fDraggableDataContext.selectedItems.includes(node)) {\n this.fDraggableDataContext.selectedItems.push(node);\n if (element?.hostElement.id !== node.hostElement.id) {\n this.fDraggableDataContext.isSelectedChanged = true;\n }\n } else {\n this.fDraggableDataContext.selectedItems.splice(this.fDraggableDataContext.selectedItems.indexOf(node), 1);\n }\n } else if (connection) {\n this.updateConnectionLayerHandler.handle(connection);\n if (!this.fDraggableDataContext.selectedItems.includes(connection)) {\n this.fDraggableDataContext.selectedItems.push(connection);\n if (element?.hostElement.id !== connection.hostElement.id) {\n this.fDraggableDataContext.isSelectedChanged = true;\n }\n } else {\n this.fDraggableDataContext.selectedItems.splice(this.fDraggableDataContext.selectedItems.indexOf(connection), 1);\n }\n }\n this.selectIfNotSelected();\n }\n\n private deselectAll(node: FNodeBase | undefined, event: IPointerEvent): void {\n this.fDraggableDataContext.selectedItems.forEach((x) => {\n if (x !== node || (!isNodeOutlet(event.targetElement) && !isNodeOutput(event.targetElement))) {\n x.deselect();\n }\n });\n }\n\n private resetSelectionIfNotMultiselect(event: IPointerEvent): void {\n const isMultiselect =\n MouseEventExtensions.isCommandButton(event.originalEvent) ||\n MouseEventExtensions.isShiftPressed(event.originalEvent);\n if (!isMultiselect) {\n this.fDraggableDataContext.selectedItems = [];\n }\n }\n\n private selectIfNotSelected(): void {\n this.fDraggableDataContext.selectedItems.forEach((x) => {\n if (!x.isSelected()) {\n x.select();\n }\n });\n }\n}\n","import { SingleSelectOnPointerDown } from './single-select.on-pointer-down';\n\nexport const SINGLE_SELECT_PROVIDERS = [\n\n SingleSelectOnPointerDown\n];\n","export class FSelectionChangeEvent {\n\n constructor(\n public nodes: string[],\n public connections: string[],\n ) {\n }\n}\n","import {\n EventExtensions,\n IMouseEvent,\n IPoint,\n IPointerEvent,\n ITouchDownEvent,\n ITouchMoveEvent, ITouchUpEvent,\n PointExtensions\n} from '@foblex/core';\nimport { ICanRunOutsideAngular } from '@foblex/core/drag-and-drop/i-can-run-outside-angular';\n\nexport const MOUSE_EVENT_IGNORE_TIME = 800;\n\nexport abstract class IDragAndDropBase {\n\n private element!: Document;\n\n private mouseListeners: Function = EventExtensions.emptyListener();\n private touchListeners: Function = EventExtensions.emptyListener();\n\n private startListeners: Function = EventExtensions.emptyListener();\n\n public isSyntheticEvent(event: MouseEvent): boolean {\n const isSyntheticEvent = !!this.lastTouchEventTime &&\n (this.lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now());\n return isSyntheticEvent;\n }\n\n private lastTouchEventTime: number = 0;\n\n public isDragStarted: boolean = false;\n private dragStartThreshold: number = 5;\n private dragStartDelay: number = 0;\n\n private dragStartTime: number = 0;\n private dragStartPosition: IPoint = PointExtensions.initialize();\n\n public abstract disabled: boolean;\n\n private moveHandler: Function = this.checkDragSequenceToStart;\n\n protected constructor(\n protected ngZone: ICanRunOutsideAngular\n ) {\n }\n\n private onMouseDown = (event: MouseEvent) => {\n const isSyntheticEvent = this.isSyntheticEvent(event);\n const isFakeEvent = isFakeMousedownFromScreenReader(event);\n const mouseEvent = new IMouseEvent(event);\n\n if (isSyntheticEvent || isFakeEvent || this.disabled) {\n return;\n }\n let result = this.onPointerDown(mouseEvent);\n if (result) {\n\n this.dragStartTime = Date.now();\n this.dragStartPosition = mouseEvent.getPosition();\n\n this.ngZone.runOutsideAngular(() => {\n this.element.addEventListener('mousemove', this.onMouseMove);\n this.element.addEventListener('mouseup', this.onMouseUp);\n });\n\n this.mouseListeners = () => {\n this.element.removeEventListener('mousemove', this.onMouseMove);\n this.element.removeEventListener('mouseup', this.onMouseUp);\n };\n }\n }\n\n private onTouchDown = (event: TouchEvent) => {\n const isFakeEvent = isFakeTouchstartFromScreenReader(event as TouchEvent)\n const touchEvent = new ITouchDownEvent(event);\n\n if (isFakeEvent || this.disabled) {\n return;\n }\n let result = this.onPointerDown(new ITouchDownEvent(event));\n if (result) {\n\n this.dragStartTime = Date.now();\n this.dragStartPosition = touchEvent.getPosition();\n\n this.ngZone.runOutsideAngular(() => {\n this.element.addEventListener('touchmove', this.onTouchMove);\n this.element.addEventListener('touchend', this.onTouchUp);\n });\n\n this.touchListeners = () => {\n this.element.removeEventListener('touchmove', this.onTouchMove);\n this.element.removeEventListener('touchend', this.onTouchUp);\n };\n }\n }\n\n private onMouseMove = (event: MouseEvent) => {\n this.moveHandler(new IMouseEvent(event));\n }\n\n private onTouchMove = (event: TouchEvent) => {\n this.moveHandler(new ITouchMoveEvent(event));\n }\n\n private checkDragSequenceToStart(event: IPointerEvent): void {\n const pointerPosition = event.getPosition();\n\n if (!this.isDragStarted) {\n const distanceX = Math.abs(pointerPosition.x - this.dragStartPosition.x);\n const distanceY = Math.abs(pointerPosition.y - this.dragStartPosition.y);\n const isOverThreshold = distanceX + distanceY >= this.dragStartThreshold;\n\n if (isOverThreshold) {\n const isDelayElapsed = Date.now() >= this.dragStartTime + this.dragStartDelay;\n\n if (!isDelayElapsed) {\n this.endDragSequence();\n return;\n }\n\n event.preventDefault();\n this.prepareDragSequence(event);\n this.isDragStarted = true;\n this.moveHandler = this.onPointerMove;\n if (isTouchEvent(event.originalEvent)) {\n this.lastTouchEventTime = Date.now();\n }\n }\n }\n }\n\n protected abstract prepareDragSequence(event: IPointerEvent): void;\n\n private onMouseUp = (event: MouseEvent) => {\n if (this.isDragStarted) {\n this.onPointerUp(new IMouseEvent(event));\n }\n this.endDragSequence();\n }\n\n private onTouchUp = (event: TouchEvent) => {\n if (this.isDragStarted) {\n this.onPointerUp(new ITouchUpEvent(event));\n }\n this.endDragSequence();\n }\n\n private endDragSequence(): void {\n this.isDragStarted = false;\n this.moveHandler = this.checkDragSequenceToStart;\n this.mouseListeners();\n this.mouseListeners = EventExtensions.emptyListener();\n this.touchListeners();\n this.touchListeners = EventExtensions.emptyListener();\n }\n\n public abstract onPointerDown(event: IPointerEvent): boolean;\n\n public abstract onPointerMove(event: IPointerEvent): void;\n\n public abstract onPointerUp(event: IPointerEvent): void;\n\n public subscribe(elementToSubscribe: Document): void {\n if (this.element) {\n this.unsubscribe();\n }\n this.element = elementToSubscribe;\n\n this.ngZone.runOutsideAngular(() => {\n this.element.addEventListener('mousedown', this.onMouseDown, EventExtensions.activeListener());\n this.element.addEventListener('touchstart', this.onTouchDown, EventExtensions.passiveListener());\n });\n\n this.startListeners = () => {\n this.element.removeEventListener('mousedown', this.onMouseDown, EventExtensions.activeListener());\n this.element.removeEventListener('touchstart', this.onTouchDown, EventExtensions.passiveListener());\n };\n }\n\n public unsubscribe(): void {\n\n this.startListeners();\n this.startListeners = EventExtensions.emptyListener();\n this.touchListeners();\n this.touchListeners = EventExtensions.emptyListener();\n this.mouseListeners();\n this.mouseListeners = EventExtensions.emptyListener();\n }\n}\n\nfunction isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n return event.type[ 0 ] === 't';\n}\n\nfunction isFakeMousedownFromScreenReader(event: MouseEvent): boolean {\n return event.buttons === 0 || (event.offsetX === 0 && event.offsetY === 0);\n}\n\nfunction isFakeTouchstartFromScreenReader(event: TouchEvent): boolean {\n const touch: Touch | undefined =\n (event.touches && event.touches[ 0 ]) || (event.changedTouches && event.changedTouches[ 0 ]);\n return (\n !!touch &&\n touch.identifier === -1 &&\n (touch.radiusX == null || touch.radiusX === 1) &&\n (touch.radiusY == null || touch.radiusY === 1)\n );\n}\n","import {\n IHasHostElement\n} from '@foblex/core';\nimport {\n Directive,\n EventEmitter,\n InjectionToken,\n NgZone,\n} from '@angular/core';\nimport { FCreateNodeEvent} from './external-item';\nimport { FReassignConnectionEvent } from './connections/reassign-connection/f-reassign-connection.event';\nimport { FCreateConnectionEvent } from './connections/create-connection/f-create-connection.event';\nimport { FSelectionChangeEvent } from './single-select';\nimport { IDragAndDropBase } from './i-drag-and-drop-base';\n\nexport const F_DRAGGABLE = new InjectionToken<FDraggableBase>('F_DRAGGABLE');\n\n@Directive()\nexport abstract class FDraggableBase extends IDragAndDropBase implements IHasHostElement {\n\n public abstract hostElement: HTMLElement;\n\n public abstract fSelectionChange: EventEmitter<FSelectionChangeEvent>;\n\n public abstract fCreateNode: EventEmitter<FCreateNodeEvent>;\n\n public abstract fReassignConnection: EventEmitter<FReassignConnectionEvent>;\n\n public abstract fCreateConnection: EventEmitter<FCreateConnectionEvent>;\n\n protected constructor(ngZone: NgZone) {\n super(ngZone);\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter, Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit, Output\n} from \"@angular/core\";\nimport { F_DRAGGABLE, FDraggableBase } from './f-draggable-base';\nimport { FComponentsStore } from '../f-components-store';\nimport { FDraggableDataContext } from './f-draggable-data-context';\nimport { Subscription } from 'rxjs';\nimport { FCreateNodeEvent, ExternalItemOnPointerUp, ExternalItemPrepareDragSequence } from './external-item';\nimport { IPointerEvent, Point } from '@foblex/core';\nimport { FSelectionChangeEvent, SingleSelectOnPointerDown } from './single-select';\nimport { SelectionAreaOnPointerUp, SelectionAreaPrepareDragSequence } from './selection-area';\nimport { NodeOnPointerUp, NodePrepareDragSequence } from './node';\nimport { CanvasOnPointerUp, CanvasPrepareDragSequence } from './canvas';\nimport { DOCUMENT } from '@angular/common';\nimport {\n FCreateConnectionEvent,\n CreateConnectionOnPointerUp,\n CreateConnectionPrepareDragSequence, FReassignConnectionEvent,\n ReassignConnectionOnPointerUp,\n ReassignConnectionPrepareDragSequence\n} from './connections';\n\n@Directive({\n selector: \"f-flow[fDraggable]\",\n exportAs: 'fDraggable',\n providers: [\n { provide: F_DRAGGABLE, useExisting: FDraggableDirective }\n ]\n})\nexport class FDraggableDirective extends FDraggableBase implements OnInit, AfterViewInit, OnDestroy {\n\n private subscriptions$: Subscription = new Subscription();\n\n @Input('fDraggableDisabled')\n public override disabled: boolean = false;\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n @Output()\n public override fSelectionChange: EventEmitter<FSelectionChangeEvent> = new EventEmitter<FSelectionChangeEvent>();\n\n // @Output()\n // public override fConnectionIntersectNode: EventEmitter<ConnectionIntersectNodeEvent> = new EventEmitter<ConnectionIntersectNodeEvent>();\n\n @Output()\n public override fCreateNode: EventEmitter<FCreateNodeEvent> = new EventEmitter<FCreateNodeEvent>();\n\n @Output()\n public override fReassignConnection: EventEmitter<FReassignConnectionEvent> = new EventEmitter<FReassignConnectionEvent>();\n\n @Output()\n public override fCreateConnection: EventEmitter<FCreateConnectionEvent> = new EventEmitter<FCreateConnectionEvent>();\n\n private readonly document: Document;\n\n private selectedItemsOnPointerDown: number = 0;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fDraggableDataContext: FDraggableDataContext,\n ngZone: NgZone,\n private injector: Injector,\n private fComponentsStore: FComponentsStore,\n @Inject(DOCUMENT) document: any\n ) {\n super(ngZone);\n this.document = document as Document;\n }\n\n public ngOnInit(): void {\n this.fComponentsStore.fDraggable = this;\n }\n\n public ngAfterViewInit(): void {\n super.subscribe(this.document);\n }\n\n public override onPointerDown(event: IPointerEvent): boolean {\n this.fDraggableDataContext.reset();\n let result: boolean = event.isMouseLeftButton();\n\n this.selectedItemsOnPointerDown = this.fDraggableDataContext.selectedItems.length;\n\n this.injector.get(SingleSelectOnPointerDown).handle(event);\n\n this.injector.get(ReassignConnectionPrepareDragSequence).handle(event);\n\n this.injector.get(CreateConnectionPrepareDragSequence).handle(event);\n\n this.emitSelectionChangeEvent();\n\n return result;\n }\n\n protected override prepareDragSequence(event: IPointerEvent) {\n\n this.injector.get(SelectionAreaPrepareDragSequence).handle(event);\n\n this.injector.get(NodePrepareDragSequence).handle(event);\n\n this.injector.get(CanvasPrepareDragSequence).handle(event);\n\n this.injector.get(ExternalItemPrepareDragSequence).handle(event);\n\n this.fDraggableDataContext.draggableItems.forEach((item) => {\n item.initialize?.();\n });\n\n if (this.fDraggableDataContext.draggableItems.length > 0) {\n this.hostElement.classList.add('f-dragging');\n }\n }\n\n public override onPointerMove(event: IPointerEvent): void {\n const pointerPositionInCanvas = Point.fromPoint(event.getPosition()).elementTransform(this.hostElement);\n const difference = pointerPositionInCanvas.div(this.fDraggableDataContext.onPointerDownScale).sub(this.fDraggableDataContext.onPointerDownPosition);\n this.fDraggableDataContext.draggableItems.forEach((item) => {\n item.move(difference);\n });\n }\n\n public override onPointerUp(event: IPointerEvent): void {\n\n this.injector.get(ReassignConnectionOnPointerUp).handle(event);\n\n this.injector.get(CreateConnectionOnPointerUp).handle(event);\n\n this.injector.get(SelectionAreaOnPointerUp).handle(event);\n\n this.injector.get(NodeOnPointerUp).handle(event);\n\n this.injector.get(CanvasOnPointerUp).handle(event);\n\n this.injector.get(ExternalItemOnPointerUp).handle(event);\n\n this.hostElement.classList.remove('f-dragging');\n\n this.emitSelectionChangeEvent();\n\n this.fDraggableDataContext.reset();\n }\n\n private emitSelectionChangeEvent(): void {\n if (\n !this.fDraggableDataContext.isSelectedChanged\n && this.selectedItemsOnPointerDown === this.fDraggableDataContext.selectedItems.length\n ) {\n return;\n }\n let selectedNodes: string[] = [];\n let selectedConnections: string[] = [];\n this.fDraggableDataContext.selectedItems.forEach((x) => {\n if (x.hostElement.classList.contains('f-node')) {\n selectedNodes.push(x.hostElement.id);\n } else {\n selectedConnections.push(x.hostElement.id);\n }\n });\n this.fSelectionChange.emit(new FSelectionChangeEvent(selectedNodes, selectedConnections));\n }\n\n public ngOnDestroy(): void {\n super.unsubscribe();\n this.subscriptions$.unsubscribe();\n }\n}\n\n","import { DomElementExtensions } from '@foblex/core';\nimport { ILineAlignmentRect } from './i-line-alignment-rect';\n\nexport class LineElement {\n\n private readonly element: HTMLElement = DomElementExtensions.createHtmlElement('div');\n\n constructor(\n private readonly hostElement: HTMLElement,\n ) {\n this.hostElement.appendChild(this.element);\n this.element.classList.add('f-line');\n }\n\n public hide(): void {\n this.element.style.display = 'none';\n }\n\n public show(): void {\n this.element.style.display = 'block'\n }\n\n public draw(object: Partial<ILineAlignmentRect>): void {\n this.element.style.position = 'absolute';\n Object.keys(object).forEach((key: string) => {\n // @ts-ignore\n this.element.style[ key ] = object[ key ] + 'px';\n });\n }\n}\n","import { ISize, ITransformModel } from '@foblex/core';\nimport { LineElement } from './line-element';\n\nexport class LineService {\n\n private fHorizontalLine: LineElement;\n private fVerticalLine: LineElement;\n\n constructor(private hostElement: HTMLElement) {\n this.fHorizontalLine = new LineElement(this.hostElement);\n this.fVerticalLine = new LineElement(this.hostElement);\n }\n\n public drawVerticalLine(x: number, size: ISize, transform: ITransformModel): void {\n this.fVerticalLine.show();\n this.fVerticalLine.draw({\n left: x * transform.scale + transform.position.x + transform.scaledPosition.x,\n top: 0,\n width: 1,\n height: size.height\n });\n }\n\n public drawHorizontalLine(y: number, size: ISize, transform: ITransformModel): void {\n this.fHorizontalLine.show();\n this.fHorizontalLine.draw({\n left: 0,\n top: y * transform.scale + transform.position.y + transform.scaledPosition.y,\n width: size.width,\n height: 1\n });\n }\n\n public hideVerticalLine(): void {\n this.fVerticalLine.hide();\n }\n\n public hideHorizontalLine(): void {\n this.fHorizontalLine.hide();\n }\n}\n","import { IRect } from '@foblex/core';\nimport { INearestCoordinateResult } from './i-nearest-coordinate-result';\n\nconst ALIGN_THRESHOLD = 10;\n\n/**\n * A class to find the nearest coordinate.\n */\nexport class NearestCoordinateFinder {\n\n\n private elements: IRect[];\n private target: IRect;\n\n /**\n * Constructor to initialize the NearestCoordinateFinder.\n * @param elements - The array of IRect elements.\n * @param target - The target IRect element.\n */\n constructor(elements: IRect[], target: IRect) {\n this.elements = elements;\n this.target = target;\n }\n\n /**\n * Finds the nearest coordinate on a specified axis.\n * @returns The nearest coordinate and its distance.\n */\n public findNearestCoordinateByX(): INearestCoordinateResult {\n let nearest: number | undefined;\n let minDistance: number | undefined;\n\n for (const element of this.elements) {\n const distanceLeftLeft = this.target.x - element.x;\n const distanceLeftRight = this.target.x - (element.x + element.width);\n const distanceCenterCenter = this.target.gravityCenter.x - element.gravityCenter.x;\n const distanceRightLeft = (this.target.x + this.target.width) - element.x;\n const distanceRightRight = (this.target.x + this.target.width) - (element.x + element.width);\n\n if (\n Math.abs(distanceLeftLeft) <= ALIGN_THRESHOLD ||\n Math.abs(distanceLeftRight) <= ALIGN_THRESHOLD ||\n Math.abs(distanceCenterCenter) <= ALIGN_THRESHOLD ||\n Math.abs(distanceRightLeft) <= ALIGN_THRESHOLD ||\n Math.abs(distanceRightRight) <= ALIGN_THRESHOLD\n ) {\n if (minDistance === undefined || Math.abs(distanceCenterCenter) < Math.abs(minDistance)) {\n minDistance = distanceCenterCenter;\n nearest = element.gravityCenter.x;\n }\n if (Math.abs(distanceLeftLeft) < Math.abs(minDistance)) {\n minDistance = distanceLeftLeft;\n nearest = element.x;\n }\n if (Math.abs(distanceRightRight) < Math.abs(minDistance)) {\n minDistance = distanceRightRight;\n nearest = element.x + element.width;\n }\n if (Math.abs(distanceLeftRight) < Math.abs(minDistance)) {\n minDistance = distanceLeftRight;\n nearest = element.x + element.width;\n }\n if (Math.abs(distanceRightLeft) < Math.abs(minDistance)) {\n minDistance = distanceRightLeft;\n nearest = element.x;\n }\n }\n }\n return { value: nearest, distance: minDistance };\n }\n\n\n /**\n * Finds the nearest coordinate on a specified axis.\n * @returns The nearest coordinate and its distance.\n */\n public findNearestCoordinateByY(): INearestCoordinateResult {\n let nearest: number | undefined;\n let minDistance: number | undefined;\n\n for (const element of this.elements) {\n const distanceTopTop = this.target.y - element.y;\n const distanceTopBottom = this.target.y - (element.y + element.height);\n const distanceCenterCenter = this.target.gravityCenter.y - element.gravityCenter.y;\n const distanceBottomTop = (this.target.y + this.target.height) - element.y;\n const distanceBottomBottom = (this.target.y + this.target.height) - (element.y + element.height);\n\n if (\n Math.abs(distanceTopTop) <= ALIGN_THRESHOLD ||\n Math.abs(distanceTopBottom) <= ALIGN_THRESHOLD ||\n Math.abs(distanceCenterCenter) <= ALIGN_THRESHOLD ||\n Math.abs(distanceBottomTop) <= ALIGN_THRESHOLD ||\n Math.abs(distanceBottomBottom) <= ALIGN_THRESHOLD\n ) {\n if (minDistance === undefined || Math.abs(distanceCenterCenter) < Math.abs(minDistance)) {\n minDistance = distanceCenterCenter;\n nearest = element.gravityCenter.y;\n }\n if (Math.abs(distanceTopTop) < Math.abs(minDistance)) {\n minDistance = distanceTopTop;\n nearest = element.y;\n }\n if (Math.abs(distanceBottomBottom) < Math.abs(minDistance)) {\n minDistance = distanceBottomBottom;\n nearest = element.y + element.height;\n }\n if (Math.abs(distanceTopBottom) < Math.abs(minDistance)) {\n minDistance = distanceTopBottom;\n nearest = element.y + element.height;\n }\n if (Math.abs(distanceBottomTop) < Math.abs(minDistance)) {\n minDistance = distanceBottomTop;\n nearest = element.y;\n }\n }\n }\n\n return { value: nearest, distance: minDistance };\n }\n}\n\n","import { IHasHostElement, IPoint } from '@foblex/core';\nimport { Directive, InjectionToken } from '@angular/core';\nimport { ILineAlignmentResult } from './domain';\nimport { FNodeBase } from '../f-node';\n\nexport const F_LINE_ALIGNMENT = new InjectionToken<FLineAlignmentBase>('F_LINE_ALIGNMENT');\n\n@Directive()\nexport abstract class FLineAlignmentBase implements IHasHostElement {\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public abstract initialize(allNodes: FNodeBase[], currentNodes: FNodeBase[]): void;\n\n public abstract findNearestCoordinate(difference: IPoint): ILineAlignmentResult;\n\n public abstract handle(difference: IPoint): void;\n\n public abstract complete(): void;\n}\n","import { Component, ElementRef, OnInit } from '@angular/core';\nimport { IPoint, IRect, ISize, ITransformModel, RectExtensions, SizeExtensions } from '@foblex/core';\nimport { ILineAlignmentResult, LineService, NearestCoordinateFinder } from './domain';\nimport { F_LINE_ALIGNMENT, FLineAlignmentBase } from './f-line-alignment-base';\nimport { FComponentsStore } from '../f-components-store';\nimport { FDraggableDataContext } from '../f-draggable';\nimport { GetElementRectInFlowHandler } from '../domain';\nimport { FNodeBase } from '../f-node';\n\n@Component({\n selector: \"f-line-alignment\",\n template: \"\",\n styleUrls: [ \"./f-line-alignment.component.scss\" ],\n exportAs: \"fComponent\",\n host: {\n 'class': 'f-line-alignment f-component'\n },\n providers: [\n { provide: F_LINE_ALIGNMENT, useExisting: FLineAlignmentComponent }\n ],\n})\nexport class FLineAlignmentComponent extends FLineAlignmentBase implements OnInit {\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n private lineService: LineService;\n\n private size: ISize = SizeExtensions.initialize();\n\n private draggedNodeRect: IRect = RectExtensions.initialize();\n\n private rects: IRect[] = [];\n\n private get transform(): ITransformModel {\n return this.fComponentsStore.fCanvas!.transform;\n }\n\n private get flowHost(): HTMLElement {\n return this.fComponentsStore.fFlow!.hostElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fComponentsStore: FComponentsStore,\n private fDraggableDataContext: FDraggableDataContext,\n private getElementRectInFlowHandler: GetElementRectInFlowHandler\n ) {\n super();\n this.lineService = new LineService(this.hostElement);\n }\n\n public ngOnInit(): void {\n this.fDraggableDataContext.fLineAlignment = this;\n }\n\n public override initialize(allNodes: FNodeBase[], currentNodes: FNodeBase[]): void {\n this.size = this.flowHost.getBoundingClientRect();\n this.rects = [];\n const draggedNodeRects = currentNodes.map((x) => {\n return this.getElementRectInFlowHandler.handle(x.hostElement);\n });\n this.draggedNodeRect = RectExtensions.union(draggedNodeRects);\n\n const allNodesExcludeCurrents = allNodes.filter((x) => {\n return !currentNodes.includes(x);\n });\n\n this.rects = allNodesExcludeCurrents.map((x) => {\n return this.getElementRectInFlowHandler.handle(x.hostElement);\n });\n }\n\n public override handle(difference: IPoint): void {\n this.drawIntersectingLines(difference);\n }\n\n private drawIntersectingLines(difference: IPoint): void {\n const intersect = this.findNearestCoordinate(difference);\n if (intersect.xResult.value !== undefined) {\n this.lineService.drawVerticalLine(intersect.xResult.value, this.size, this.transform);\n } else {\n this.lineService.hideVerticalLine();\n }\n if (intersect.yResult.value !== undefined) {\n this.lineService.drawHorizontalLine(intersect.yResult.value, this.size, this.transform);\n } else {\n this.lineService.hideHorizontalLine();\n }\n }\n\n public findNearestCoordinate(difference: IPoint): ILineAlignmentResult {\n const rect = RectExtensions.addPoint(this.draggedNodeRect, difference);\n const finder = new NearestCoordinateFinder(this.rects, rect);\n const xResult = finder.findNearestCoordinateByX();\n const yResult = finder.findNearestCoordinateByY();\n\n const result: ILineAlignmentResult = { xResult, yResult };\n return result;\n }\n\n public override complete(): void {\n this.lineService.hideVerticalLine();\n this.lineService.hideHorizontalLine();\n }\n}\n","import { IHasHostElement } from '@foblex/core';\nimport { Directive, InjectionToken } from '@angular/core';\nimport { ISelectionAreaRect } from './domain';\n\nexport const F_SELECTION_AREA = new InjectionToken<FSelectionAreaBase>('F_SELECTION_AREA');\n\n@Directive()\nexport abstract class FSelectionAreaBase implements IHasHostElement {\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public abstract hide(): void;\n\n public abstract show(): void;\n\n public abstract draw(object: ISelectionAreaRect): void;\n}\n","import { Component, ElementRef, OnInit } from '@angular/core';\nimport { F_SELECTION_AREA, FSelectionAreaBase } from './f-selection-area-base';\nimport { ISelectionAreaRect } from './domain';\nimport { FDraggableDataContext } from '../f-draggable';\n\n@Component({\n selector: \"f-selection-area\",\n template: ``,\n styleUrls: [ './f-selection-area.component.scss' ],\n host: {\n 'class': 'f-selection-area f-component'\n },\n providers: [\n { provide: F_SELECTION_AREA, useExisting: FSelectionAreaComponent }\n ],\n})\nexport class FSelectionAreaComponent extends FSelectionAreaBase implements OnInit {\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fDraggableDataContext: FDraggableDataContext\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.fDraggableDataContext.fSelectionArea = this;\n this.hostElement.style.display = 'none';\n }\n\n public override hide(): void {\n this.hostElement.style.display = 'none';\n }\n\n public override show(): void {\n this.hostElement.style.display = 'block';\n }\n\n public override draw(object: ISelectionAreaRect): void {\n const style = this.hostElement.style;\n style.left = object.left + 'px';\n style.top = object.top + 'px';\n style.width = object.width + 'px';\n style.height = object.height + 'px';\n }\n}\n","import { EventEmitter, InjectionToken } from '@angular/core';\nimport { IHasHostElement } from '@foblex/core';\n\nexport const F_FLOW = new InjectionToken<FFlowBase>('F_FLOW');\n\nexport abstract class FFlowBase implements IHasHostElement {\n\n public abstract fFlowId: string;\n\n public abstract hostElement: HTMLElement;\n\n public abstract fLoaded: EventEmitter<void>;\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component, ElementRef, EventEmitter,\n Input, OnDestroy, OnInit, Output\n} from '@angular/core';\nimport { F_FLOW, FFlowBase } from './f-flow-base';\nimport { FComponentsStore } from '../f-components-store';\nimport { debounceTime, startWith, Subscription } from 'rxjs';\nimport {\n COMMON_PROVIDERS, GetAllNodesRectHandler, RedrawConnectionsRequest,\n} from '../domain';\nimport { IRect } from '@foblex/core';\nimport { FLOW } from '../get-flow-uid';\nimport { FFlowMediator } from '../f-mediator';\nimport {\n CANVAS_PROVIDERS, CONNECTIONS_PROVIDERS, EXTERNAL_ITEM_PROVIDERS,\n FDraggableDataContext,\n NODE_PROVIDERS,\n SELECTION_AREA_PROVIDERS,\n SINGLE_SELECT_PROVIDERS\n} from '../f-draggable';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: 'f-flow',\n templateUrl: './f-flow.component.html',\n styleUrls: [ './f-flow.component.scss' ],\n host: {\n '[attr.id]': 'fFlowId',\n class: \"f-component f-flow\",\n },\n providers: [\n FFlowMediator,\n FComponentsStore,\n FDraggableDataContext,\n ...SINGLE_SELECT_PROVIDERS,\n ...SELECTION_AREA_PROVIDERS,\n ...NODE_PROVIDERS,\n ...CANVAS_PROVIDERS,\n ...EXTERNAL_ITEM_PROVIDERS,\n ...CONNECTIONS_PROVIDERS,\n ...COMMON_PROVIDERS,\n { provide: F_FLOW, useExisting: FFlowComponent },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FFlowComponent extends FFlowBase implements OnInit, AfterContentInit, OnDestroy {\n\n private subscription$: Subscription = new Subscription();\n\n @Input()\n public override fFlowId: string = `f-flow-${ uniqueId++ }`;\n\n public override get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n @Output()\n public override fLoaded: EventEmitter<void> = new EventEmitter<void>();\n\n private isLoaded: boolean = false;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private getAllNodesRectHandler: GetAllNodesRectHandler,\n private fComponentsStore: FComponentsStore,\n private fMediator: FFlowMediator,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.fComponentsStore.fFlow = this;\n FLOW.UID = this.fFlowId;\n }\n\n public ngAfterContentInit(): void {\n this.subscription$.add(\n this.subscribeOnElementsChanges()\n );\n }\n\n private subscribeOnElementsChanges(): Subscription {\n return this.fComponentsStore.changes.pipe(startWith(null), debounceTime(20)).subscribe(() => {\n\n this.fMediator.send(new RedrawConnectionsRequest());\n\n if (!this.isLoaded) {\n this.isLoaded = true;\n this.fLoaded.emit();\n }\n });\n }\n\n public getNodesRect(): IRect {\n return this.getAllNodesRectHandler.handle();\n }\n\n public ngOnDestroy(): void {\n this.subscription$.unsubscribe();\n }\n}\n","<ng-container>\n <ng-content select=\"[fDefinitions]\"></ng-content>\n\n <ng-content select=\"f-background\"></ng-content>\n\n <ng-content select=\"f-line-alignment\"></ng-content>\n\n <ng-content select=\"f-canvas\"></ng-content>\n\n <ng-content select=\"f-selection-area\"></ng-content>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FConnectionComponent,\n FConnectionDragHandleComponent, FConnectionForCreateComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent, FConnectionSelectionComponent,\n FConnectionTextComponent, FConnectionTextPathDirective\n} from './f-connection';\nimport { FNodeDirective} from './f-node';\nimport { FFlowComponent } from './f-flow';\nimport { FBackgroundComponent } from './f-backgroud';\nimport { FCanvasComponent, FZoomDirective } from './f-canvas';\nimport { FNodeInputDirective, FNodeOutletDirective, FNodeOutputDirective } from './f-connectors';\nimport { FDraggableDataContext, FDraggableDirective } from './f-draggable';\nimport { FExternalItemDirective } from './f-external-item';\nimport { FSelectionAreaComponent } from './f-selection-area';\nimport { FLineAlignmentComponent } from './f-line-alignment';\n\n@NgModule({\n declarations: [\n FConnectionDragHandleComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent,\n FConnectionTextComponent,\n FConnectionTextPathDirective,\n FConnectionSelectionComponent,\n\n FFlowComponent,\n FBackgroundComponent,\n FCanvasComponent,\n FNodeDirective,\n FConnectionComponent,\n FConnectionForCreateComponent,\n FZoomDirective,\n FNodeInputDirective,\n FNodeOutletDirective,\n FNodeOutputDirective,\n\n FDraggableDirective,\n FExternalItemDirective,\n FSelectionAreaComponent,\n FLineAlignmentComponent,\n ],\n imports: [\n CommonModule\n ],\n providers: [\n FDraggableDataContext,\n ],\n exports: [\n FFlowComponent,\n FBackgroundComponent,\n FCanvasComponent,\n FNodeDirective,\n FConnectionComponent,\n FConnectionForCreateComponent,\n FZoomDirective,\n FNodeInputDirective,\n FNodeOutletDirective,\n FNodeOutputDirective,\n\n FDraggableDirective,\n FExternalItemDirective,\n FSelectionAreaComponent,\n FLineAlignmentComponent,\n ]\n})\nexport class FFlowModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uniqueId","i1.FComponentsStore","i1.FConnectionTextPathDirective","MIXIN_BASE","i2.FConnectionDragHandleComponent","i3.FConnectionGradientComponent","i4.FConnectionPathComponent","i5.FConnectionTextComponent","i6.FConnectionSelectionComponent","i2.GetElementRectInFlowHandler","i3.FFlowMediator","i2.FDraggableDataContext","i1.GetAllNodesRectHandler","i1.SelectAllHandler","i2.FComponentsStore","i1.FDraggableDataContext","i2.InputsUnderPointerHandler","i3.FirstNotConnectedInputOfNodeUnderPointerHandler","i3.FindInputsUnderPointerHandler","i4.FindFirstCanBeConnectedOutputByOutletHandler","i3.GetElementRectInFlowHandler","i4.FFlowMediator","i5.FindFirstCanBeConnectedOutputByOutletHandler","i3.GetConnectionHandler","i3.GetInputRectInFlowHandler","i3.UpdateConnectionLayerHandler","i1.FExternalItemService","i3.FExternalItemService","i3.GetOutgoingConnectionsHandler","i3.GetIncomingConnectionsHandler","i3.IsConnectionUnderNodeHandler","i3.UpdateNodeLayerHandler"],"mappings":"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"}