{"version":3,"file":"foblex-flow.mjs","sources":["../../../projects/f-flow/src/f-backgroud/domain/i-f-background-pattern.ts","../../../projects/f-flow/src/domain/get-element-rounded-rect/get-element-rounded-rect-request.ts","../../../projects/f-flow/src/domain/get-element-rounded-rect/get-element-rounded-rect.execution.ts","../../../projects/f-flow/src/domain/f-background/add-background-to-store/add-background-to-store-request.ts","../../../projects/f-flow/src/f-storage/features/notify-data-changed/notify-data-changed-request.ts","../../../projects/f-flow/src/f-storage/features/notify-data-changed/notify-data-changed.execution.ts","../../../projects/f-flow/src/f-storage/features/listen-components-data-changed/listen-data-changes-request.ts","../../../projects/f-flow/src/reactivity/debounce-time.ts","../../../projects/f-flow/src/reactivity/f-channel.ts","../../../projects/f-flow/src/reactivity/f-resize-channel.ts","../../../projects/f-flow/src/reactivity/f-channel-hub.ts","../../../projects/f-flow/src/reactivity/mediator-effect.ts","../../../projects/f-flow/src/reactivity/notify-on-start.ts","../../../projects/f-flow/src/f-storage/features/listen-components-data-changed/listen-data-changes.execution.ts","../../../projects/f-flow/src/f-storage/features/listen-count-changes/listen-count-changes-request.ts","../../../projects/f-flow/src/f-storage/features/listen-count-changes/listen-count-changes.execution.ts","../../../projects/f-flow/src/f-storage/features/listen-transform-changes/listen-transform-changes.request.ts","../../../projects/f-flow/src/f-storage/features/listen-transform-changes/listen-transform-changes.execution.ts","../../../projects/f-flow/src/f-storage/features/notify-transform-changed/notify-transform-changed.request.ts","../../../projects/f-flow/src/f-storage/f-components-store.ts","../../../projects/f-flow/src/f-storage/features/notify-transform-changed/notify-transform-changed.execution.ts","../../../projects/f-flow/src/f-storage/providers.ts","../../../projects/f-flow/src/domain/f-background/add-background-to-store/add-background-to-store.execution.ts","../../../projects/f-flow/src/domain/f-background/add-pattern-to-background/add-pattern-to-background.request.ts","../../../projects/f-flow/src/domain/f-background/add-pattern-to-background/add-pattern-to-background.execution.ts","../../../projects/f-flow/src/domain/f-background/remove-background-from-store/remove-background-from-store-request.ts","../../../projects/f-flow/src/domain/f-background/remove-background-from-store/remove-background-from-store.execution.ts","../../../projects/f-flow/src/domain/f-background/set-background-transform/set-background-transform-request.ts","../../../projects/f-flow/src/domain/f-background/set-background-transform/set-background-transform.execution.ts","../../../projects/f-flow/src/domain/f-background/providers.ts","../../../projects/f-flow/src/domain/f-canvas/add-canvas-to-store/add-canvas-to-store-request.ts","../../../projects/f-flow/src/domain/f-canvas/add-canvas-to-store/add-canvas-to-store.execution.ts","../../../projects/f-flow/src/domain/f-canvas/center-group-or-node/center-group-or-node-request.ts","../../../projects/f-flow/src/domain/f-canvas/center-group-or-node/center-group-or-node.execution.ts","../../../projects/f-flow/src/domain/f-canvas/fit-to-flow/fit-to-flow-request.ts","../../../projects/f-flow/src/domain/f-canvas/fit-to-flow/fit-to-flow.execution.ts","../../../projects/f-flow/src/domain/f-canvas/get-canvas/get-canvas-request.ts","../../../projects/f-flow/src/domain/f-canvas/get-canvas/get-canvas.execution.ts","../../../projects/f-flow/src/domain/f-canvas/input-canvas-position/input-canvas-position-request.ts","../../../projects/f-flow/src/domain/f-canvas/input-canvas-position/input-canvas-position.execution.ts","../../../projects/f-flow/src/domain/f-canvas/input-canvas-scale/input-canvas-scale-request.ts","../../../projects/f-flow/src/domain/f-canvas/input-canvas-scale/input-canvas-scale.execution.ts","../../../projects/f-flow/src/domain/f-canvas/redraw-canvas-with-animation/redraw-canvas-with-animation-request.ts","../../../projects/f-flow/src/domain/transition-end.ts","../../../projects/f-flow/src/domain/f-canvas/redraw-canvas-with-animation/redraw-canvas-with-animation.execution.ts","../../../projects/f-flow/src/domain/f-canvas/remove-canvas-from-store/remove-canvas-from-store-request.ts","../../../projects/f-flow/src/domain/f-canvas/remove-canvas-from-store/remove-canvas-from-store.execution.ts","../../../projects/f-flow/src/domain/f-canvas/reset-scale/reset-scale-request.ts","../../../projects/f-flow/src/domain/f-canvas/reset-scale/reset-scale.execution.ts","../../../projects/f-flow/src/domain/f-canvas/reset-scale-and-center/reset-scale-and-center-request.ts","../../../projects/f-flow/src/domain/f-canvas/reset-scale-and-center/reset-scale-and-center.execution.ts","../../../projects/f-flow/src/domain/f-canvas/update-scale/update-scale-request.ts","../../../projects/f-flow/src/domain/f-canvas/update-scale/update-scale.execution.ts","../../../projects/f-flow/src/domain/f-canvas/providers.ts","../../../projects/f-flow/src/domain/f-connection/add-connection-for-create-to-store/add-connection-for-create-to-store-request.ts","../../../projects/f-flow/src/domain/f-connection/add-connection-for-create-to-store/add-connection-for-create-to-store.execution.ts","../../../projects/f-flow/src/domain/f-connection/add-connection-marker-to-store/add-connection-marker-to-store-request.ts","../../../projects/f-flow/src/domain/f-connection/add-connection-marker-to-store/add-connection-marker-to-store.execution.ts","../../../projects/f-flow/src/domain/f-connection/add-connection-to-store/add-connection-to-store-request.ts","../../../projects/f-flow/src/domain/f-connection/add-connection-to-store/add-connection-to-store.execution.ts","../../../projects/f-flow/src/domain/f-connection/add-snap-connection-to-store/add-snap-connection-to-store-request.ts","../../../projects/f-flow/src/domain/f-connection/add-snap-connection-to-store/add-snap-connection-to-store.execution.ts","../../../projects/f-flow/src/domain/f-connection/create-connection-markers/create-connection-markers-request.ts","../../../projects/f-flow/src/domain/f-connection/create-connection-markers/create-connection-markers.execution.ts","../../../projects/f-flow/src/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior.request.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-connectors/e-f-connectable-side.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-node/f-resize-handle/e-f-resize-handle-type.ts","../../../projects/f-flow/src/f-node/f-resize-handle/f-resize-handle.directive.ts","../../../projects/f-flow/src/f-node/f-rotate-handle/f-rotate-handle.directive.ts","../../../projects/f-flow/src/f-node/f-rotate-handle/is-rotate-handle.ts","../../../projects/f-flow/src/f-node/f-drag-handle.directive.ts","../../../projects/f-flow/src/mixins/change-selection/change-selection.ts","../../../projects/f-flow/src/mixins/change-visibility/change-visibility.ts","../../../projects/f-flow/src/f-node/f-node-base.ts","../../../projects/f-flow/src/f-node/f-group.directive.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-node/providers.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-connectors/providers.ts","../../../projects/f-flow/src/f-connection/common/domain/f-bezier.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-straight.path-builder.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/domain/css-cls.ts","../../../projects/f-flow/src/f-connection/common/f-drag-handle/f-connection-drag-handle-start.component.ts","../../../projects/f-flow/src/f-connection/common/f-drag-handle/f-connection-drag-handle-end.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/f-connection/common/f-path/get-path-marker-id.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/f-connection-builder/f-connection-builders.ts","../../../projects/f-flow/src/f-connection/f-connection-builder/f-connection-factory.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/e-f-connection-type.ts","../../../projects/f-flow/src/f-connection/f-connection-center/f-connection-center.directive.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-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/f-snap-connection/f-snap-connection.component.ts","../../../projects/f-flow/src/f-connection/f-snap-connection/f-snap-connection.component.html","../../../projects/f-flow/src/f-connection/providers.ts","../../../projects/f-flow/src/domain/f-connection/calculate-connection-line-by-behavior/floating-behavior.ts","../../../projects/f-flow/src/domain/f-connection/calculate-connection-line-by-behavior/fixed-center-behavior.ts","../../../projects/f-flow/src/domain/f-connection/calculate-connection-line-by-behavior/fixed-outbound-behavior.ts","../../../projects/f-flow/src/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior.execution.ts","../../../projects/f-flow/src/domain/f-connection/redraw-connections/redraw-connections-request.ts","../../../projects/f-flow/src/domain/get-normalized-connector-rect/get-normalized-connector-rect-request.ts","../../../projects/f-flow/src/domain/get-normalized-point/get-normalized-point-request.ts","../../../projects/f-flow/src/domain/get-normalized-point/get-normalized-point.execution.ts","../../../projects/f-flow/src/domain/get-normalized-connector-rect/get-normalized-connector-rect.execution.ts","../../../projects/f-flow/src/domain/f-connection/redraw-connections/redraw-connections.execution.ts","../../../projects/f-flow/src/domain/f-connection/remove-connection-for-create-from-store/remove-connection-for-create-from-store-request.ts","../../../projects/f-flow/src/domain/f-connection/remove-connection-for-create-from-store/remove-connection-for-create-from-store.execution.ts","../../../projects/f-flow/src/domain/f-connection/remove-connection-from-store/remove-connection-from-store-request.ts","../../../projects/f-flow/src/domain/f-connection/remove-connection-from-store/remove-connection-from-store.execution.ts","../../../projects/f-flow/src/domain/f-connection/remove-connection-marker-from-store/remove-connection-marker-from-store-request.ts","../../../projects/f-flow/src/domain/f-connection/remove-connection-marker-from-store/remove-connection-marker-from-store.execution.ts","../../../projects/f-flow/src/domain/f-connection/remove-snap-connection-from-store/remove-snap-connection-from-store-request.ts","../../../projects/f-flow/src/domain/f-connection/remove-snap-connection-from-store/remove-snap-connection-from-store.execution.ts","../../../projects/f-flow/src/domain/f-connection/providers.ts","../../../projects/f-flow/src/domain/f-connectors/add-input-to-store/add-input-to-store-request.ts","../../../projects/f-flow/src/domain/f-connectors/add-input-to-store/add-input-to-store.execution.ts","../../../projects/f-flow/src/domain/f-connectors/add-outlet-to-store/add-outlet-to-store-request.ts","../../../projects/f-flow/src/domain/f-connectors/add-outlet-to-store/add-outlet-to-store.execution.ts","../../../projects/f-flow/src/domain/f-connectors/add-output-to-store/add-output-to-store-request.ts","../../../projects/f-flow/src/domain/f-connectors/add-output-to-store/add-output-to-store.execution.ts","../../../projects/f-flow/src/domain/f-connectors/calculate-closest-input/calculate-closest-input.request.ts","../../../projects/f-flow/src/domain/f-connectors/calculate-closest-input/calculate-closest-input.execution.ts","../../../projects/f-flow/src/domain/f-connectors/find-input-at-position/find-input-at-position.request.ts","../../../projects/f-flow/src/domain/f-connectors/find-input-at-position/find-input-at-position.execution.ts","../../../projects/f-flow/src/domain/f-connectors/get-all-can-be-connected-inputs-and-rects/get-all-can-be-connected-inputs-and-rects.request.ts","../../../projects/f-flow/src/domain/f-connectors/get-connector-and-rect/get-connector-and-rect-request.ts","../../../projects/f-flow/src/domain/f-connectors/get-connector-and-rect/get-connector-and-rect.execution.ts","../../../projects/f-flow/src/domain/f-connectors/get-all-can-be-connected-inputs-and-rects/get-all-can-be-connected-inputs-and-rects.execution.ts","../../../projects/f-flow/src/domain/f-connectors/mark-all-can-be-connected-inputs/mark-all-can-be-connected-inputs.request.ts","../../../projects/f-flow/src/domain/f-connectors/mark-all-can-be-connected-inputs/mark-all-can-be-connected-inputs.execution.ts","../../../projects/f-flow/src/domain/f-connectors/remove-input-from-store/remove-input-from-store-request.ts","../../../projects/f-flow/src/domain/f-connectors/remove-input-from-store/remove-input-from-store.execution.ts","../../../projects/f-flow/src/domain/f-connectors/remove-outlet-from-store/remove-outlet-from-store-request.ts","../../../projects/f-flow/src/domain/f-connectors/remove-outlet-from-store/remove-outlet-from-store.execution.ts","../../../projects/f-flow/src/domain/f-connectors/remove-output-from-store/remove-output-from-store-request.ts","../../../projects/f-flow/src/domain/f-connectors/remove-output-from-store/remove-output-from-store.execution.ts","../../../projects/f-flow/src/domain/f-connectors/unmark-all-can-be-connected-inputs/unmark-all-can-be-connected-inputs.request.ts","../../../projects/f-flow/src/domain/f-connectors/unmark-all-can-be-connected-inputs/unmark-all-can-be-connected-inputs.execution.ts","../../../projects/f-flow/src/domain/f-connectors/providers.ts","../../../projects/f-flow/src/domain/f-draggable/add-dnd-to-store/add-dnd-to-store-request.ts","../../../projects/f-flow/src/domain/f-draggable/add-dnd-to-store/add-dnd-to-store.execution.ts","../../../projects/f-flow/src/domain/f-draggable/emit-selection-change-event/emit-selection-change-event-request.ts","../../../projects/f-flow/src/f-draggable/domain/get-normalized-parent-node-rect/get-normalized-parent-node-rect.request.ts","../../../projects/f-flow/src/f-draggable/domain/get-normalized-parent-node-rect/get-normalized-parent-node-rect.execution.ts","../../../projects/f-flow/src/f-draggable/domain/is-array-has-parent-node/is-array-has-parent-node.request.ts","../../../projects/f-flow/src/f-draggable/domain/is-array-has-parent-node/is-array-has-parent-node.execution.ts","../../../projects/f-flow/src/f-draggable/domain/is-connection-under-node/f-node-intersected-with-connections.ts","../../../projects/f-flow/src/f-draggable/domain/is-connection-under-node/is-connection-under-node.request.ts","../../../projects/f-flow/src/f-draggable/domain/is-connection-under-node/is-connection-under-node.execution.ts","../../../projects/f-flow/src/f-draggable/domain/f-drag-started-event.ts","../../../projects/f-flow/src/f-draggable/domain/providers.ts","../../../projects/f-flow/src/f-draggable/f-canvas/move-finalize/f-canvas-move-finalize.request.ts","../../../projects/f-flow/src/f-draggable/f-draggable-data-context.ts","../../../projects/f-flow/src/f-draggable/f-canvas/f-canvas.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-canvas/move-finalize/f-canvas-move-finalize.execution.ts","../../../projects/f-flow/src/f-draggable/f-canvas/move-preparation/f-canvas-move-preparation.request.ts","../../../projects/f-flow/src/f-draggable/f-canvas/move-preparation/f-canvas-move-preparation.execution.ts","../../../projects/f-flow/src/f-draggable/f-canvas/providers.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-finalize/f-create-connection-finalize.request.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/get-first-connectable-output/get-first-connectable-output.request.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/get-first-connectable-output/get-first-connectable-output.execution.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/f-create-connection.event.ts","../../../projects/f-flow/src/f-draggable/f-drag-handler/f-drag-handler-result.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/f-create-connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-finalize/f-create-connection-finalize.execution.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-preparation/drag-handler-preparation/f-create-connection-drag-handler-preparation.request.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-preparation/drag-handler-preparation/f-create-connection-drag-handler-preparation.execution.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-preparation/from-outlet-preparation/f-create-connection-from-outlet-preparation.request.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-preparation/from-outlet-preparation/f-create-connection-from-outlet-preparation.execution.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-preparation/from-output-preparation/f-create-connection-from-output-preparation.request.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-preparation/from-output-preparation/f-create-connection-from-output-preparation.execution.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-preparation/f-create-connection-preparation.request.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-preparation/f-create-connection-preparation.execution.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-reassign-connection/reassign-finalize/f-reassign-connection-finalize.request.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-reassign-connection/f-reassign-connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-reassign-connection/f-reassign-connection.event.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-reassign-connection/reassign-finalize/f-reassign-connection-finalize.execution.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-reassign-connection/reassign-preparation/f-reassign-connection-preparation.request.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-reassign-connection/reassign-preparation/f-reassign-connection-preparation.execution.ts","../../../projects/f-flow/src/f-draggable/f-connection/providers.ts","../../../projects/f-flow/src/f-draggable/f-drop-to-group/drop-to-group-finalize/f-node-drop-to-group-finalize.request.ts","../../../projects/f-flow/src/f-draggable/f-drop-to-group/f-node-drop-to-group.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/connection-drag-handlers/base-connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/connection-drag-handlers/source-connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/connection-drag-handlers/source-target-connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/connection-drag-handlers/target-connection.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-move-nodes-drag-model-from-selection/domain/calculate-common-node-move-limits/calculate-common-node-move-limits.request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-move-nodes-drag-model-from-selection/domain/calculate-common-node-move-limits/calculate-common-node-move-limits.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-move-nodes-drag-model-from-selection/domain/put-input-connection-handlers-to-array/put-input-connection-handlers-to-array.request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-move-nodes-drag-model-from-selection/domain/put-input-connection-handlers-to-array/put-input-connection-handlers-to-array.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-move-nodes-drag-model-from-selection/domain/put-output-connection-handlers-to-array/put-output-connection-handlers-to-array.request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-move-nodes-drag-model-from-selection/domain/put-output-connection-handlers-to-array/put-output-connection-handlers-to-array.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-move-nodes-drag-model-from-selection/domain/calculate-node-move-limits/calculate-node-move-limits.request.ts","../../../projects/f-flow/src/utils/infinity-min-max.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-move-nodes-drag-model-from-selection/domain/calculate-node-move-limits/calculate-node-move-limits.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-move-nodes-drag-model-from-selection/create-move-nodes-drag-model-from-selection.request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/f-node-move.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/point-bounds-limiter.ts","../../../projects/f-flow/src/f-draggable/f-node-move/f-summary-node-move.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-move-nodes-drag-model-from-selection/create-move-nodes-drag-model-from-selection.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-move-nodes-drag-model-from-selection/providers.ts","../../../projects/f-flow/src/f-draggable/f-node-move/line-alignment-preparation/line-alignment-preparation.request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/f-line-alignment.drag-handler.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/f-line-alignment-base.ts","../../../projects/f-flow/src/f-line-alignment/f-line-alignment.component.ts","../../../projects/f-flow/src/f-line-alignment/providers.ts","../../../projects/f-flow/src/f-draggable/f-node-move/line-alignment-preparation/line-alignment-preparation.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-move/move-preparation/f-node-move-preparation.request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/move-preparation/f-node-move-preparation.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-move/move-finalize/f-node-move-finalize.request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/move-finalize/f-node-move-finalize.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-move/providers.ts","../../../projects/f-flow/src/f-draggable/f-drop-to-group/f-drop-to-group.event.ts","../../../projects/f-flow/src/f-draggable/f-drop-to-group/drop-to-group-finalize/f-node-drop-to-group-finalize.execution.ts","../../../projects/f-flow/src/f-draggable/f-drop-to-group/drop-to-group-preparation/f-node-drop-to-group-preparation.request.ts","../../../projects/f-flow/src/f-external-item/domain/create-placeholder/f-external-item-create-placeholder.request.ts","../../../projects/f-flow/src/f-external-item/domain/create-placeholder/f-external-item-create-placeholder.execution.ts","../../../projects/f-flow/src/f-external-item/domain/create-preview/f-external-item-create-preview.request.ts","../../../projects/f-flow/src/f-external-item/domain/create-preview/f-external-item-create-preview.execution.ts","../../../projects/f-flow/src/f-external-item/domain/finalize/f-external-item-finalize.request.ts","../../../projects/f-flow/src/f-external-item/domain/f-external-item.drag-handler.ts","../../../projects/f-flow/src/f-external-item/domain/f-create-node.event.ts","../../../projects/f-flow/src/f-external-item/domain/finalize/f-external-item-finalize.execution.ts","../../../projects/f-flow/src/f-external-item/domain/preparation/f-external-item-preparation.request.ts","../../../projects/f-flow/src/f-external-item/domain/preparation/f-external-item-preparation.execution.ts","../../../projects/f-flow/src/f-external-item/domain/prevent-default-is-external-item/prevent-default-is-external-item.request.ts","../../../projects/f-flow/src/f-external-item/is-external-item.ts","../../../projects/f-flow/src/f-external-item/domain/prevent-default-is-external-item/prevent-default-is-external-item.execution.ts","../../../projects/f-flow/src/f-external-item/domain/providers.ts","../../../projects/f-flow/src/f-external-item/f-external-item-base.ts","../../../projects/f-flow/src/f-external-item/f-external-item.service.ts","../../../projects/f-flow/src/f-external-item/f-external-item-token.ts","../../../projects/f-flow/src/f-external-item/f-external-item.directive.ts","../../../projects/f-flow/src/f-external-item/f-external-item-placeholder.directive.ts","../../../projects/f-flow/src/f-external-item/f-external-item-preview.directive.ts","../../../projects/f-flow/src/f-external-item/providers.ts","../../../projects/f-flow/src/f-draggable/f-drop-to-group/drop-to-group-preparation/f-node-drop-to-group-preparation.execution.ts","../../../projects/f-flow/src/f-draggable/f-drop-to-group/providers.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/apply-child-resize-restrictions/apply-child-resize-restrictions.request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/apply-child-resize-restrictions/apply-child-resize-restrictions.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/apply-parent-resize-restrictions/apply-parent-resize-restrictions.request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/apply-parent-resize-restrictions/apply-parent-resize-restrictions.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/calculate-changed-position/calculate-changed-position.request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/resize-direction.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/calculate-changed-position/calculate-changed-position.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/calculate-changed-size/calculate-changed-size.request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/calculate-changed-size/calculate-changed-size.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/get-normalized-children-nodes-rect/get-normalized-children-nodes-rect.request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/get-normalized-children-nodes-rect/get-normalized-children-nodes-rect.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/get-node-resize-restrictions/get-node-resize-restrictions.request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/get-node-resize-restrictions/get-node-resize-restrictions.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/resize-finalize/f-node-resize-finalize.request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/f-node-resize.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/resize-finalize/f-node-resize-finalize.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/resize-preparation/f-node-resize-preparation.request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/resize-preparation/f-node-resize-preparation.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/providers.ts","../../../projects/f-flow/src/f-draggable/f-node-rotate/rotate-finalize/f-node-rotate-finalize.request.ts","../../../projects/f-flow/src/f-draggable/f-node-rotate/calculate-difference-after-rotation.ts","../../../projects/f-flow/src/f-draggable/f-node-rotate/f-node-rotate.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-rotate/rotate-finalize/f-node-rotate-finalize.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-rotate/rotate-preparation/f-node-rotate-preparation.request.ts","../../../projects/f-flow/src/f-draggable/f-node-rotate/rotate-preparation/f-node-rotate-preparation.execution.ts","../../../projects/f-flow/src/f-draggable/f-node-rotate/providers.ts","../../../projects/f-flow/src/f-draggable/f-single-select/f-single-select.request.ts","../../../projects/f-flow/src/f-draggable/f-single-select/f-single-select.execution.ts","../../../projects/f-flow/src/f-draggable/f-single-select/providers.ts","../../../projects/f-flow/src/drag-toolkit/pointer-events/i-pointer-event.ts","../../../projects/f-flow/src/drag-toolkit/pointer-events/i-mouse-event.ts","../../../projects/f-flow/src/drag-toolkit/pointer-events/i-pointer-up-event.ts","../../../projects/f-flow/src/drag-toolkit/pointer-events/i-touch-down-event.ts","../../../projects/f-flow/src/drag-toolkit/pointer-events/i-touch-move-event.ts","../../../projects/f-flow/src/drag-toolkit/event.extensions.ts","../../../projects/f-flow/src/drag-toolkit/drag-and-drop-base.ts","../../../projects/f-flow/src/f-draggable/f-draggable-base.ts","../../../projects/f-flow/src/f-draggable/i-f-drag-and-drop-plugin.ts","../../../projects/f-flow/src/f-draggable/f-draggable.directive.ts","../../../projects/f-flow/src/f-draggable/f-selection-change-event.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-drag-preparation/minimap-drag-preparation.request.ts","../../../projects/f-flow/src/f-minimap/domain/calculate-flow-point-from-minimap-point/calculate-flow-point-from-minimap-point.request.ts","../../../projects/f-flow/src/f-minimap/domain/calculate-flow-point-from-minimap-point/calculate-flow-point-from-minimap-point.execution.ts","../../../projects/f-flow/src/f-minimap/domain/f-minimap.drag-handler.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-drag-preparation/minimap-drag-preparation.execution.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-drag-preparation/providers.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-drag-finalize/minimap-drag-finalize.request.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-drag-finalize/minimap-drag-finalize.execution.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-drag-finalize/providers.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-draw-nodes/minimap-draw-nodes.request.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-draw-nodes/minimap-draw-nodes.execution.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-calculate-view-box/minimap-calculate-view-box.request.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-calculate-view-box/minimap-calculate-view-box.execution.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-calculate-svg-scale-and-view-box/minimap-calculate-svg-scale-and-view-box.request.ts","../../../projects/f-flow/src/f-minimap/domain/minimap-calculate-svg-scale-and-view-box/minimap-calculate-svg-scale-and-view-box.execution.ts","../../../projects/f-flow/src/f-minimap/domain/providers.ts","../../../projects/f-flow/src/f-selection-area/domain/selection-area-finalize/selection-area-finalize.request.ts","../../../projects/f-flow/src/f-selection-area/domain/selection-area.drag-handle.ts","../../../projects/f-flow/src/f-selection-area/domain/selection-area-finalize/selection-area-finalize.execution.ts","../../../projects/f-flow/src/f-selection-area/domain/selection-area-preparation/selection-area-preparation.request.ts","../../../projects/f-flow/src/f-selection-area/domain/selection-area-preparation/selection-area-preparation.execution.ts","../../../projects/f-flow/src/f-selection-area/domain/providers.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-selection-area/providers.ts","../../../projects/f-flow/src/f-draggable/providers.ts","../../../projects/f-flow/src/domain/f-selection/clear-selection/clear-selection.request.ts","../../../projects/f-flow/src/domain/f-selection/clear-selection/clear-selection.execution.ts","../../../projects/f-flow/src/domain/f-selection/get-can-be-selected-items/get-can-be-selected-items-request.ts","../../../projects/f-flow/src/domain/get-normalized-element-rect/get-normalized-element-rect-request.ts","../../../projects/f-flow/src/domain/get-normalized-element-rect/get-normalized-element-rect.execution.ts","../../../projects/f-flow/src/domain/f-selection/get-can-be-selected-items/get-can-be-selected-items.execution.ts","../../../projects/f-flow/src/domain/f-selection/get-current-selection/get-current-selection.request.ts","../../../projects/f-flow/src/domain/f-selection/get-current-selection/get-current-selection.execution.ts","../../../projects/f-flow/src/domain/f-selection/select/select.request.ts","../../../projects/f-flow/src/domain/f-selection/select/select.execution.ts","../../../projects/f-flow/src/domain/f-selection/select-all/select-all.request.ts","../../../projects/f-flow/src/domain/f-selection/select-all/select-all.execution.ts","../../../projects/f-flow/src/domain/f-selection/select-and-update-node-layer/select-and-update-node-layer.request.ts","../../../projects/f-flow/src/domain/update-item-and-children-layers/move-front-elements-before-target-element/move-front-elements-before-target-element.request.ts","../../../projects/f-flow/src/domain/update-item-and-children-layers/move-front-elements-before-target-element/move-front-elements-before-target-element.execution.ts","../../../projects/f-flow/src/domain/update-item-and-children-layers/update-item-and-children-layers.request.ts","../../../projects/f-flow/src/domain/get-deep-children-nodes-and-groups/get-deep-children-nodes-and-groups.request.ts","../../../projects/f-flow/src/domain/get-deep-children-nodes-and-groups/get-deep-children-nodes-and-groups.execution.ts","../../../projects/f-flow/src/domain/update-item-and-children-layers/update-item-and-children-layers.execution.ts","../../../projects/f-flow/src/domain/f-selection/select-and-update-node-layer/select-and-update-node-layer.execution.ts","../../../projects/f-flow/src/domain/f-selection/providers.ts","../../../projects/f-flow/src/domain/f-draggable/emit-selection-change-event/emit-selection-change-event.execution.ts","../../../projects/f-flow/src/domain/f-draggable/end-drag-sequence/end-drag-sequence-request.ts","../../../projects/f-flow/src/domain/f-draggable/end-drag-sequence/end-drag-sequence.execution.ts","../../../projects/f-flow/src/domain/f-draggable/on-pointer-move/on-pointer-move-request.ts","../../../projects/f-flow/src/domain/f-draggable/on-pointer-move/on-pointer-move.execution.ts","../../../projects/f-flow/src/domain/f-draggable/initialize-drag-sequence/initialize-drag-sequence-request.ts","../../../projects/f-flow/src/domain/f-draggable/initialize-drag-sequence/initialize-drag-sequence.execution.ts","../../../projects/f-flow/src/domain/f-draggable/is-drag-started/is-drag-started-request.ts","../../../projects/f-flow/src/domain/f-draggable/is-drag-started/is-drag-started.execution.ts","../../../projects/f-flow/src/domain/f-draggable/prepare-drag-sequence/prepare-drag-sequence-request.ts","../../../projects/f-flow/src/domain/f-draggable/start-drag-sequence/start-drag-sequence-request.ts","../../../projects/f-flow/src/domain/f-draggable/start-drag-sequence/start-drag-sequence.execution.ts","../../../projects/f-flow/src/domain/f-draggable/prepare-drag-sequence/prepare-drag-sequence.execution.ts","../../../projects/f-flow/src/domain/f-draggable/remove-dnd-from-store/remove-dnd-from-store-request.ts","../../../projects/f-flow/src/domain/f-draggable/remove-dnd-from-store/remove-dnd-from-store.execution.ts","../../../projects/f-flow/src/domain/f-draggable/providers.ts","../../../projects/f-flow/src/domain/f-flow/add-flow-to-store/add-flow-to-store-request.ts","../../../projects/f-flow/src/domain/f-flow/add-flow-to-store/add-flow-to-store.execution.ts","../../../projects/f-flow/src/domain/f-flow/get-flow/get-flow-request.ts","../../../projects/f-flow/src/domain/f-flow/get-flow/get-flow.execution.ts","../../../projects/f-flow/src/domain/f-flow/get-flow-host-element/get-flow-host-element.request.ts","../../../projects/f-flow/src/domain/f-flow/get-flow-host-element/get-flow-host-element.execution.ts","../../../projects/f-flow/src/domain/f-flow/get-flow-state/get-flow-state-connections/get-flow-state-connections-request.ts","../../../projects/f-flow/src/domain/f-flow/get-flow-state/get-flow-state-connections/get-flow-state-connections.execution.ts","../../../projects/f-flow/src/domain/f-flow/get-flow-state/get-flow-state-nodes/get-flow-state-nodes-request.ts","../../../projects/f-flow/src/domain/f-flow/get-flow-state/get-flow-state-nodes/get-flow-state-nodes.execution.ts","../../../projects/f-flow/src/domain/f-flow/get-flow-state/get-flow-state.request.ts","../../../projects/f-flow/src/domain/f-flow/get-flow-state/get-flow-state.execution.ts","../../../projects/f-flow/src/domain/f-flow/get-flow-state/providers.ts","../../../projects/f-flow/src/domain/f-flow/remove-flow-from-store/remove-flow-from-store-request.ts","../../../projects/f-flow/src/domain/f-flow/remove-flow-from-store/remove-flow-from-store.execution.ts","../../../projects/f-flow/src/domain/f-flow/providers.ts","../../../projects/f-flow/src/domain/f-line-alignment/add-line-alignment-to-store/add-line-alignment-to-store-request.ts","../../../projects/f-flow/src/domain/f-line-alignment/add-line-alignment-to-store/add-line-alignment-to-store.execution.ts","../../../projects/f-flow/src/domain/f-line-alignment/remove-line-alignment-from-store/remove-line-alignment-from-store-request.ts","../../../projects/f-flow/src/domain/f-line-alignment/remove-line-alignment-from-store/remove-line-alignment-from-store.execution.ts","../../../projects/f-flow/src/domain/f-line-alignment/providers.ts","../../../projects/f-flow/src/domain/f-node/add-node-to-store/add-node-to-store-request.ts","../../../projects/f-flow/src/domain/f-node/add-node-to-store/add-node-to-store.execution.ts","../../../projects/f-flow/src/domain/f-node/calculate-input-connections/calculate-input-connections-request.ts","../../../projects/f-flow/src/domain/f-node/calculate-input-connections/calculate-input-connections.execution.ts","../../../projects/f-flow/src/domain/f-node/calculate-nodes-bounding-box/calculate-nodes-bounding-box.request.ts","../../../projects/f-flow/src/domain/f-node/calculate-nodes-bounding-box/calculate-nodes-bounding-box.execution.ts","../../../projects/f-flow/src/domain/f-node/calculate-nodes-bounding-box-normalized-position/calculate-nodes-bounding-box-normalized-position.request.ts","../../../projects/f-flow/src/domain/f-node/calculate-nodes-bounding-box-normalized-position/calculate-nodes-bounding-box-normalized-position.execution.ts","../../../projects/f-flow/src/domain/f-node/calculate-output-connections/calculate-output-connections-request.ts","../../../projects/f-flow/src/domain/f-node/calculate-output-connections/calculate-output-connections.execution.ts","../../../projects/f-flow/src/domain/f-node/get-node-padding/get-node-padding.request.ts","../../../projects/f-flow/src/domain/f-node/get-node-padding/get-node-padding.execution.ts","../../../projects/f-flow/src/domain/f-node/get-nodes/get-nodes-request.ts","../../../projects/f-flow/src/domain/f-node/get-nodes/get-nodes.execution.ts","../../../projects/f-flow/src/domain/f-node/get-parent-nodes/get-parent-nodes.request.ts","../../../projects/f-flow/src/domain/f-node/get-parent-nodes/get-parent-nodes.execution.ts","../../../projects/f-flow/src/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed-request.ts","../../../projects/f-flow/src/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed.execution.ts","../../../projects/f-flow/src/domain/f-node/remove-node-from-store/remove-node-from-store-request.ts","../../../projects/f-flow/src/domain/f-node/remove-node-from-store/remove-node-from-store.execution.ts","../../../projects/f-flow/src/domain/f-node/providers.ts","../../../projects/f-flow/src/domain/f-zoom/add-zoom-to-store/add-zoom-to-store-request.ts","../../../projects/f-flow/src/domain/f-zoom/f-zoom-tag.ts","../../../projects/f-flow/src/domain/f-zoom/add-zoom-to-store/add-zoom-to-store.execution.ts","../../../projects/f-flow/src/domain/f-zoom/remove-zoom-from-store/remove-zoom-from-store-request.ts","../../../projects/f-flow/src/domain/f-zoom/remove-zoom-from-store/remove-zoom-from-store.execution.ts","../../../projects/f-flow/src/domain/f-zoom/reset-zoom/reset-zoom-request.ts","../../../projects/f-flow/src/domain/f-zoom/reset-zoom/reset-zoom.execution.ts","../../../projects/f-flow/src/domain/f-zoom/set-zoom/set-zoom-request.ts","../../../projects/f-flow/src/domain/f-zoom/set-zoom/set-zoom.execution.ts","../../../projects/f-flow/src/domain/f-zoom/providers.ts","../../../projects/f-flow/src/domain/sort-item-layers/sort-node-layers-by-groups/sort-node-layers.request.ts","../../../projects/f-flow/src/domain/sort-item-layers/sort-node-layers-by-groups/sort-node-layers.execution.ts","../../../projects/f-flow/src/domain/sort-item-layers/sort-items-by-parent/sort-items-by-parent.request.ts","../../../projects/f-flow/src/domain/sort-item-layers/sort-items-by-parent/sort-items-by-parent.execution.ts","../../../projects/f-flow/src/domain/sort-item-layers/sort-item-layers.request.ts","../../../projects/f-flow/src/domain/sort-item-layers/sort-item-layers.execution.ts","../../../projects/f-flow/src/domain/create-dom-element.ts","../../../projects/f-flow/src/domain/f-event-trigger.ts","../../../projects/f-flow/src/domain/is-mobile.ts","../../../projects/f-flow/src/domain/log-deprecated.ts","../../../projects/f-flow/src/domain/log-execution-time.ts","../../../projects/f-flow/src/domain/providers.ts","../../../projects/f-flow/src/f-backgroud/f-rect-pattern/f-rect-pattern.component.ts","../../../projects/f-flow/src/f-backgroud/f-circle-pattern/f-circle-pattern.component.ts","../../../projects/f-flow/src/f-backgroud/f-background-base.ts","../../../projects/f-flow/src/f-backgroud/f-background.component.ts","../../../projects/f-flow/src/f-backgroud/providers.ts","../../../projects/f-flow/src/f-canvas/domain/f-canvas-change.event.ts","../../../projects/f-flow/src/f-canvas/f-canvas-base.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-canvas/providers.ts","../../../projects/f-flow/src/f-minimap/domain/f-minimap-data.ts","../../../projects/f-flow/src/f-minimap/f-minimap-flow.directive.ts","../../../projects/f-flow/src/f-minimap/f-minimap-canvas.directive.ts","../../../projects/f-flow/src/f-minimap/f-minimap-view.directive.ts","../../../projects/f-flow/src/f-minimap/f-minimap.component.ts","../../../projects/f-flow/src/f-minimap/f-minimap.component.html","../../../projects/f-flow/src/f-minimap/providers.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/providers.ts","../../../projects/f-flow/src/f-zoom/e-f-zoom-direction.ts","../../../projects/f-flow/src/f-zoom/f-zoom-base.ts","../../../projects/f-flow/src/f-zoom/f-zoom.directive.ts","../../../projects/f-flow/src/f-zoom/providers.ts","../../../projects/f-flow/src/f-flow.module.ts","../../../projects/f-flow/src/foblex-flow.ts"],"sourcesContent":["import { ITransformModel } from '@foblex/2d';\nimport { InjectionToken } from '@angular/core';\n\nexport const F_BACKGROUND_PATTERN = new InjectionToken<IFBackgroundPattern>('F_BACKGROUND_PATTERN');\n\nexport interface IFBackgroundPattern {\n\n  hostElement: HTMLElement | SVGElement;\n\n  setTransform(transform: ITransformModel): void;\n}\n","export class GetElementRoundedRectRequest {\n  constructor(\n    public element: HTMLElement | SVGElement,\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { GetElementRoundedRectRequest } from './get-element-rounded-rect-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { BrowserService } from '@foblex/platform';\nimport { RoundedRect, RectExtensions, IRect } from '@foblex/2d';\n\n@Injectable()\n@FExecutionRegister(GetElementRoundedRectRequest)\nexport class GetElementRoundedRectExecution implements IExecution<GetElementRoundedRectRequest, RoundedRect> {\n\n  private _fBrowser = inject(BrowserService);\n\n  public handle(request: GetElementRoundedRectRequest): RoundedRect {\n    return this._getRoundedRect(\n      RectExtensions.fromElement(request.element), request.element, this._getComputedStyle(request.element)\n    );\n  }\n\n  private _getRoundedRect(rect: IRect, element: HTMLElement | SVGElement, styles: CSSStyleDeclaration): RoundedRect {\n    return new RoundedRect(\n      rect.x,\n      rect.y,\n      rect.width,\n      rect.height,\n      this._toPixels(styles.borderTopLeftRadius, element, styles.fontSize),\n      this._toPixels(styles.borderTopRightRadius, element, styles.fontSize),\n      this._toPixels(styles.borderBottomRightRadius, element, styles.fontSize),\n      this._toPixels(styles.borderBottomLeftRadius, element, styles.fontSize)\n    );\n  }\n\n  private _getComputedStyle(element: HTMLElement | SVGElement): CSSStyleDeclaration {\n    return this._fBrowser.window.getComputedStyle(element);\n  }\n\n  private _toPixels(value: string, element: HTMLElement | SVGElement, fontSize: string): number {\n    return this._fBrowser.toPixels(value, element.clientWidth, element.clientHeight, fontSize) || 0\n  }\n}\n","import { FBackgroundBase } from '../../../f-backgroud';\n\nexport class AddBackgroundToStoreRequest {\n\n    constructor(\n        public fBackground: FBackgroundBase\n    ) {\n    }\n}\n","export class NotifyDataChangedRequest {\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { NotifyDataChangedRequest } from './notify-data-changed-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(NotifyDataChangedRequest)\nexport class NotifyDataChangedExecution implements IExecution<NotifyDataChangedRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: NotifyDataChangedRequest): void {\n    this._fComponentsStore.dataChanged();\n  }\n}\n","export class ListenDataChangesRequest {\n\n}\n","import { FChannelOperator } from './types';\n\nexport function debounceTime(delay: number): FChannelOperator {\n  let timeoutId: any;\n  return callback => {\n    return () => {\n      clearTimeout(timeoutId);\n      timeoutId = setTimeout(() => callback(), delay);\n    };\n  };\n}\n","import { FChannelListener } from './types';\n\nexport class FChannel {\n\n  protected _listeners = new Set<FChannelListener>();\n\n  public notify(): void {\n    this._listeners.forEach((callback) => callback());\n  }\n\n  public listen(callback: FChannelListener): () => void {\n    this._listeners.add(callback);\n    return () => this.stop(callback);\n  }\n\n  public stop(callback: FChannelListener): void {\n    this._listeners.delete(callback);\n  }\n}\n\n","import { FChannelListener } from './types';\nimport { FChannel } from './f-channel';\n\nexport class FResizeChannel extends FChannel {\n\n  private _observer = new ResizeObserver(() => this.notify());\n\n  private _isObserving = false;\n\n  constructor(private _htmlElement: HTMLElement | SVGElement) {\n    super();\n  }\n\n  public override listen(callback: FChannelListener): () => void {\n    if (!this._isObserving) {\n      this._observer.observe(this._htmlElement);\n      this._isObserving = true;\n    }\n    return super.listen(callback);\n  }\n\n  public override stop(callback: FChannelListener): void {\n    super.stop(callback);\n    if (this._listeners.size === 0) {\n      this._disconnect();\n    }\n  }\n\n  private _disconnect(): void {\n    this._observer.unobserve(this._htmlElement);\n    this._observer.disconnect();\n    this._isObserving = false;\n  }\n}\n","import { FChannel } from './f-channel';\nimport { FChannelListener, FChannelOperator } from './types';\nimport { DestroyRef } from '@angular/core';\n\nexport class FChannelHub {\n\n  private readonly _channels: FChannel[] = [];\n\n  private _operators: FChannelOperator[] = [];\n\n  constructor(...channels: FChannel[]) {\n    this._channels = [...channels];\n  }\n\n  public pipe(...operators: FChannelOperator[]): FChannelHub {\n    const result = new FChannelHub(...this._channels);\n    result._operators = [...this._operators, ...operators];\n    return result;\n  }\n\n  public listen(destroyRef: DestroyRef, callback: FChannelListener): void {\n    let modifiedCallback = callback;\n\n    this._operators.forEach(operator => {\n      modifiedCallback = operator(modifiedCallback);\n    });\n\n    const unsubscribeCallbacks = this._channels.map(channel =>\n      channel.listen(() => modifiedCallback())\n    );\n\n    destroyRef.onDestroy(() => {\n      unsubscribeCallbacks.forEach(unsubscribe => unsubscribe());\n    });\n  }\n}\n","import { CreateEffectOptions, effect } from '@angular/core';\nimport { FMediator } from '@foblex/mediator';\n\nexport function mediatorEffect(fn: () => any, options?: CreateEffectOptions) {\n  let isFirstRun = true;\n\n  return effect(() => {\n    const request = fn();\n    if (isFirstRun) {\n      isFirstRun = false;\n      return;\n    }\n    options?.injector?.get(FMediator).execute(request);\n  }, options);\n}\n","import { FChannelOperator } from './types';\n\nexport function notifyOnStart(): FChannelOperator {\n  return callback => {\n    callback();\n    return callback;\n  };\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ListenDataChangesRequest } from './listen-data-changes-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { debounceTime, FChannelHub, notifyOnStart } from '../../../reactivity';\n\n@Injectable()\n@FExecutionRegister(ListenDataChangesRequest)\nexport class ListenDataChangesExecution implements IExecution<ListenDataChangesRequest, FChannelHub> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: ListenDataChangesRequest): FChannelHub {\n    return new FChannelHub(this._fComponentsStore.dataChanges$)\n      .pipe(notifyOnStart(), debounceTime(1));\n  }\n}\n","export class ListenCountChangesRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ListenCountChangesRequest } from './listen-count-changes-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { debounceTime, FChannelHub, notifyOnStart } from '../../../reactivity';\n\n@Injectable()\n@FExecutionRegister(ListenCountChangesRequest)\nexport class ListenCountChangesExecution implements IExecution<ListenCountChangesRequest, FChannelHub> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: ListenCountChangesRequest): FChannelHub {\n    return new FChannelHub(this._fComponentsStore.countChanges$)\n      .pipe(notifyOnStart(), debounceTime(1));\n  }\n}\n\n","export class ListenTransformChangesRequest {\n\n}\n","import { ListenTransformChangesRequest } from './listen-transform-changes.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../index';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FChannelHub } from '../../../reactivity';\n\n@Injectable()\n@FExecutionRegister(ListenTransformChangesRequest)\nexport class ListenTransformChangesExecution\n  implements IExecution<ListenTransformChangesRequest, FChannelHub> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: ListenTransformChangesRequest): FChannelHub {\n    return new FChannelHub(\n      this._fComponentsStore.transformChanges$,\n      this._fComponentsStore.dataChanges$,\n      this._fComponentsStore.countChanges$\n    );\n  }\n}\n","export class NotifyTransformChangedRequest {\n\n}\n","import { Injectable } from '@angular/core';\nimport { FConnectionBase, FMarkerBase } 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 } from '../f-connectors';\nimport { FDraggableBase } from '../f-draggable';\nimport { FChannel } from '../reactivity';\nimport { FLineAlignmentBase } from '../f-line-alignment';\nimport { IMap } from '../domain';\n\n@Injectable()\nexport class FComponentsStore {\n\n  public readonly transformChanges$ = new FChannel();\n\n  public readonly dataChanges$ = new FChannel();\n\n  public readonly countChanges$ = new FChannel();\n\n  public get flowHost(): HTMLElement {\n    return this.fFlow?.hostElement!;\n  }\n\n  public fComponents: IMap<any> = {};\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 fSnapConnection: FConnectionBase | undefined;\n\n  public fMarkers: FMarkerBase[] = [];\n\n  public fOutputs: FConnectorBase[] = [];\n\n  public fInputs: FConnectorBase[] = [];\n\n  public fOutlets: FConnectorBase[] = [];\n\n  public fDraggable: FDraggableBase | undefined;\n\n  public fLineAlignment: FLineAlignmentBase | undefined;\n\n  public addComponent<T>(collection: T[], component: T): void {\n    collection.push(component);\n    this.countChanged();\n  }\n\n  public removeComponent<T>(collection: T[], component: T): void {\n    const index = collection.indexOf(component);\n    if (index > -1) {\n      collection.splice(index, 1);\n      this.countChanged();\n    }\n  }\n\n  public countChanged(): void {\n    this.countChanges$.notify();\n  }\n\n  public dataChanged(): void {\n    this.dataChanges$.notify();\n  }\n\n  public transformChanged(): void {\n    this.transformChanges$.notify();\n  }\n}\n","import { NotifyTransformChangedRequest } from './notify-transform-changed.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../f-components-store';\n\n@Injectable()\n@FExecutionRegister(NotifyTransformChangedRequest)\nexport class NotifyTransformChangedExecution\n  implements IExecution<NotifyTransformChangedRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: NotifyTransformChangedRequest): void {\n    this._fComponentsStore.transformChanged();\n  }\n}\n","import { NotifyDataChangedExecution } from './features/notify-data-changed';\nimport { ListenDataChangesExecution } from './features/listen-components-data-changed';\nimport { FComponentsStore } from './f-components-store';\nimport { ListenCountChangesExecution } from './features/listen-count-changes';\nimport { ListenTransformChangesExecution } from './features/listen-transform-changes';\nimport { NotifyTransformChangedExecution } from './features/notify-transform-changed';\n\nexport const F_STORAGE_PROVIDERS = [\n\n  NotifyDataChangedExecution,\n\n  ListenCountChangesExecution,\n\n  ListenDataChangesExecution,\n\n  ListenTransformChangesExecution,\n\n  NotifyTransformChangedExecution,\n\n  FComponentsStore,\n];\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddBackgroundToStoreRequest } from './add-background-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddBackgroundToStoreRequest)\nexport class AddBackgroundToStoreExecution implements IExecution<AddBackgroundToStoreRequest, void> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddBackgroundToStoreRequest): void {\n    this._fComponentsStore.fBackground = request.fBackground;\n  }\n}\n","import { IFBackgroundPattern } from '../../../f-backgroud';\n\nexport class AddPatternToBackgroundRequest {\n  constructor(\n    public fPattern: IFBackgroundPattern | undefined\n  ) {\n  }\n}\n","import { TransformModelExtensions } from '@foblex/2d';\nimport { AddPatternToBackgroundRequest } from './add-pattern-to-background.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { createSVGElement } from '../../../domain';\nimport { FComponentsStore } from '../../../f-storage';\nimport { BrowserService } from '@foblex/platform';\nimport { FBackgroundBase } from '../../../f-backgroud';\n\nlet uniqueId: number = 0;\n\n@Injectable()\n@FExecutionRegister(AddPatternToBackgroundRequest)\nexport class AddPatternToBackgroundExecution implements IExecution<AddPatternToBackgroundRequest, void> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fBrowser = inject(BrowserService);\n\n  private get _fBackground(): FBackgroundBase {\n    return this._fComponentsStore.fBackground!;\n  }\n\n  public handle(request: AddPatternToBackgroundRequest): void {\n    const children = request.fPattern?.hostElement.getElementsByTagName('pattern') || [];\n    const pattern = children.length ? children[ 0 ] : undefined;\n    if (pattern) {\n      const defs = createSVGElement('defs', this._fBrowser);\n      pattern.id = 'f-background-pattern-' + uniqueId++;\n      request.fPattern?.hostElement.remove();\n      defs.appendChild(pattern);\n      this._fBackground.hostElement?.firstChild?.appendChild(defs);\n      const rect = createSVGElement('rect', this._fBrowser);\n      rect.setAttribute('fill', 'url(#' + pattern.id + ')');\n      rect.setAttribute('width', '100%');\n      rect.setAttribute('height', '100%');\n      this._fBackground.hostElement.firstChild?.appendChild(rect);\n      const transform = this._fComponentsStore.fCanvas?.transform || TransformModelExtensions.default();\n      request.fPattern?.setTransform(transform);\n    }\n  }\n}\n","import { FBackgroundBase } from '../../../f-backgroud';\n\nexport class RemoveBackgroundFromStoreRequest {\n\n  constructor(\n    public fConnection: FBackgroundBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveBackgroundFromStoreRequest } from './remove-background-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveBackgroundFromStoreRequest)\nexport class RemoveBackgroundFromStoreExecution implements IExecution<RemoveBackgroundFromStoreRequest, void> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveBackgroundFromStoreRequest): void {\n    this._fComponentsStore.fBackground = undefined;\n  }\n}\n","import { ITransformModel } from '@foblex/2d';\n\nexport class SetBackgroundTransformRequest {\n\n    constructor(\n        public fTransform: ITransformModel\n    ) {\n    }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { SetBackgroundTransformRequest } from './set-background-transform-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(SetBackgroundTransformRequest)\nexport class SetBackgroundTransformExecution implements IExecution<SetBackgroundTransformRequest, void> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: SetBackgroundTransformRequest): void {\n    this._fComponentsStore.fBackground?.setTransform(request.fTransform);\n  }\n}\n","import { AddPatternToBackgroundExecution } from './add-pattern-to-background';\nimport { AddBackgroundToStoreExecution } from './add-background-to-store';\nimport { RemoveBackgroundFromStoreExecution } from './remove-background-from-store';\nimport { SetBackgroundTransformExecution } from './set-background-transform';\n\nexport const F_BACKGROUND_FEATURES = [\n\n  AddBackgroundToStoreExecution,\n\n  AddPatternToBackgroundExecution,\n\n  RemoveBackgroundFromStoreExecution,\n\n  SetBackgroundTransformExecution\n];\n","import { FCanvasBase } from '../../../f-canvas';\n\nexport class AddCanvasToStoreRequest {\n\n  constructor(\n    public fCanvas: FCanvasBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddCanvasToStoreRequest } from './add-canvas-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddCanvasToStoreRequest)\nexport class AddCanvasToStoreExecution implements IExecution<AddCanvasToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddCanvasToStoreRequest): void {\n    this._fComponentsStore.fCanvas = request.fCanvas;\n  }\n}\n","export class CenterGroupOrNodeRequest {\n\n  constructor(\n    public id: string,\n    public animated: boolean\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CenterGroupOrNodeRequest } from './center-group-or-node-request';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IPoint, IRect, ITransformModel, PointExtensions, RectExtensions } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FNodeBase } from '../../../f-node';\nimport { RedrawCanvasWithAnimationRequest } from '../../../domain';\n\n@Injectable()\n@FExecutionRegister(CenterGroupOrNodeRequest)\nexport class CenterGroupOrNodeExecution implements IExecution<CenterGroupOrNodeRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  private get transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  private _fMediator = inject(FMediator);\n\n  public handle(request: CenterGroupOrNodeRequest): void {\n    const fNode = this.getNode(request.id);\n    if (!fNode) {\n      return;\n    }\n\n    this.toCenter(this.getNodeRect(fNode), this.getFlowRect(), fNode.position);\n\n    this._fMediator.execute(new RedrawCanvasWithAnimationRequest(request.animated));\n  }\n\n  public toCenter(fNodeRect: IRect, fFlowRect: IRect, position: IPoint): void {\n    this.transform.scaledPosition = PointExtensions.initialize();\n    this.transform.position = PointExtensions.initialize(\n      (fFlowRect.width - fNodeRect.width) / 2 - position.x * this.transform.scale,\n      (fFlowRect.height - fNodeRect.height) / 2 - position.y * this.transform.scale\n    );\n  }\n\n  private getNode(id: string): FNodeBase | undefined {\n    return this._fComponentsStore.fNodes.find((x) => x.fId === id);\n  }\n\n  private getNodeRect(fNode: FNodeBase): IRect {\n    return RectExtensions.fromElement(fNode.hostElement);\n  }\n\n  private getFlowRect(): IRect {\n    return RectExtensions.fromElement(this._fComponentsStore.fFlow!.hostElement);\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class FitToFlowRequest {\n\n  constructor(\n    public toCenter: IPoint,\n    public animated: boolean\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FitToFlowRequest } from './fit-to-flow-request';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IPoint, IRect, ITransformModel, PointExtensions, RectExtensions } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\nimport { CalculateNodesBoundingBoxRequest, RedrawCanvasWithAnimationRequest } from '../../../domain';\n\n@Injectable()\n@FExecutionRegister(FitToFlowRequest)\nexport class FitToFlowExecution implements IExecution<FitToFlowRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  private get transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  private _fMediator = inject(FMediator);\n\n  public handle(request: FitToFlowRequest): void {\n    const fNodesRect = this._fMediator.execute<IRect | null>(new CalculateNodesBoundingBoxRequest()) || RectExtensions.initialize();\n    if (fNodesRect.width === 0 || fNodesRect.height === 0) {\n      return;\n    }\n\n    this.fitToParent(\n      fNodesRect,\n      RectExtensions.fromElement(this._fComponentsStore.fFlow!.hostElement),\n      this._fComponentsStore.fNodes.map((x) => x.position),\n      request.toCenter\n    );\n\n    this._fMediator.execute(new RedrawCanvasWithAnimationRequest(request.animated));\n  }\n\n  public fitToParent(rect: IRect, parentRect: IRect, points: IPoint[], toCenter: IPoint): void {\n    this.transform.scaledPosition = PointExtensions.initialize();\n    this.transform.position = this.getZeroPositionWithoutScale(points);\n    const itemsContainerWidth = (rect.width / this.transform.scale) + toCenter.x;\n    const itemsContainerHeight = (rect.height / this.transform.scale) + toCenter.y;\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 + (toCenter.x / 2) * this.transform.scale, newY + (toCenter.y / 2) * this.transform.scale)\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","export class GetCanvasRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { GetCanvasRequest } from './get-canvas-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FCanvasBase } from '../../../f-canvas';\n\n@Injectable()\n@FExecutionRegister(GetCanvasRequest)\nexport class GetCanvasExecution implements IExecution<GetCanvasRequest, FCanvasBase> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: GetCanvasRequest): FCanvasBase {\n    const result = this._fComponentsStore.fCanvas;\n    if (!result) {\n      throw new Error(`Canvas not found in store`);\n    }\n    return result;\n  }\n}\n","import { IPoint, ITransformModel } from '@foblex/2d';\n\nexport class InputCanvasPositionRequest {\n\n  constructor(\n    public transform: ITransformModel,\n    public position: IPoint | undefined\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { InputCanvasPositionRequest } from './input-canvas-position-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { PointExtensions } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(InputCanvasPositionRequest)\nexport class InputCanvasPositionExecution implements IExecution<InputCanvasPositionRequest, void> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: InputCanvasPositionRequest): void {\n    if (!request.position) {\n      return;\n    }\n    const position = PointExtensions.sum(request.transform.position, request.transform.scaledPosition);\n    if (!PointExtensions.isEqual(position, request.position)) {\n      request.transform.position = request.position;\n      request.transform.scaledPosition = PointExtensions.initialize();\n      this._fComponentsStore.fCanvas?.redraw();\n    }\n    return void 0;\n  }\n}\n","import { ITransformModel } from '@foblex/2d';\n\nexport class InputCanvasScaleRequest {\n\n  constructor(\n    public transform: ITransformModel,\n    public scale: number | undefined\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { InputCanvasScaleRequest } from './input-canvas-scale-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(InputCanvasScaleRequest)\nexport class InputCanvasScaleExecution implements IExecution<InputCanvasScaleRequest, void> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: InputCanvasScaleRequest): void {\n    if (!request.scale && request.scale !== 0) {\n      return;\n    }\n    request.transform.scale = request.scale;\n    this._fComponentsStore.fCanvas?.redraw();\n  }\n}\n","export class RedrawCanvasWithAnimationRequest {\n\n  constructor(\n    public animated: boolean\n  ) {\n  }\n}\n","export function transitionEnd(element: HTMLElement, callback: (event: TransitionEvent) => void): void {\n  const onTransitionEnd = (event: TransitionEvent) => {\n    if (event.propertyName === 'transform') {\n      element.removeEventListener('transitionend', onTransitionEnd);\n      callback(event);\n    }\n  };\n\n  element.addEventListener('transitionend', onTransitionEnd);\n}\n","import { inject, Injectable } from '@angular/core';\nimport { RedrawCanvasWithAnimationRequest } from './redraw-canvas-with-animation-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { transitionEnd } from '../../transition-end';\n\n@Injectable()\n@FExecutionRegister(RedrawCanvasWithAnimationRequest)\nexport class RedrawCanvasWithAnimationExecution implements IExecution<RedrawCanvasWithAnimationRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  private get _fCanvasElement(): HTMLElement {\n    return this._fComponentsStore.fCanvas!.hostElement;\n  }\n\n  public handle(request: RedrawCanvasWithAnimationRequest): void {\n    request.animated ? this._redrawWithAnimation() : this._redraw();\n    this._fComponentsStore.fCanvas!.emitCanvasChangeEvent();\n  }\n\n  private _redrawWithAnimation(): void {\n    this._fComponentsStore.fCanvas!.redrawWithAnimation();\n    transitionEnd(this._fCanvasElement, () => this._fComponentsStore.dataChanged());\n  }\n\n  private _redraw(): void {\n    this._fComponentsStore.fCanvas!.redraw();\n    this._fComponentsStore.dataChanged();\n  }\n}\n","export class RemoveCanvasFromStoreRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveCanvasFromStoreRequest } from './remove-canvas-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveCanvasFromStoreRequest)\nexport class RemoveCanvasFromStoreExecution implements IExecution<RemoveCanvasFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveCanvasFromStoreRequest): void {\n    this._fComponentsStore.fCanvas = undefined;\n  }\n}\n","export class ResetScaleRequest {\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ResetScaleRequest } from './reset-scale-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ITransformModel, PointExtensions } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(ResetScaleRequest)\nexport class ResetScaleExecution implements IExecution<ResetScaleRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  private get transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  public handle(request: ResetScaleRequest): void {\n    this.transform.scale = 1;\n    this.transform.scaledPosition = PointExtensions.initialize();\n  }\n}\n","export class ResetScaleAndCenterRequest {\n\n  constructor(\n    public animated: boolean\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ResetScaleAndCenterRequest } from './reset-scale-and-center-request';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IPoint, IRect, ITransformModel, PointExtensions, RectExtensions } from '@foblex/2d';\nimport { CalculateNodesBoundingBoxRequest, RedrawCanvasWithAnimationRequest } from '../../../domain';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(ResetScaleAndCenterRequest)\nexport class ResetScaleAndCenterExecution implements IExecution<ResetScaleAndCenterRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  public handle(request: ResetScaleAndCenterRequest): void {\n    const fNodesRect = this._fMediator.execute<IRect | null>(new CalculateNodesBoundingBoxRequest()) || RectExtensions.initialize();\n    if (fNodesRect.width === 0 || fNodesRect.height === 0) {\n      return;\n    }\n    this._oneToOneCentering(\n      fNodesRect,\n      RectExtensions.fromElement(this._fComponentsStore.fFlow!.hostElement),\n      this._fComponentsStore.fNodes.map((x) => x.position)\n    );\n\n    this._fMediator.execute(new RedrawCanvasWithAnimationRequest(request.animated));\n  }\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\n    const newX = (parentRect.width - rect.width / this._transform.scale) / 2 - this._transform.position.x;\n    const newY = (parentRect.height - rect.height / this._transform.scale) / 2 - this._transform.position.y;\n\n    this._transform.scale = 1;\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","import { IPoint } from '@foblex/2d';\n\nexport class UpdateScaleRequest {\n\n  constructor(\n    public scale: number,\n    public toPosition: IPoint\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { UpdateScaleRequest } from './update-scale-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ITransformModel, PointExtensions } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(UpdateScaleRequest)\nexport class UpdateScaleExecution implements IExecution<UpdateScaleRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  private get transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  public handle(request: UpdateScaleRequest): void {\n    if (request.scale !== this.transform.scale) {\n\n      const summaryPosition = PointExtensions.sum(this.transform.scaledPosition, this.transform.position);\n\n      const newX = request.toPosition.x - (request.toPosition.x - summaryPosition.x) * request.scale / this.transform.scale;\n      const newY = request.toPosition.y - (request.toPosition.y - summaryPosition.y) * request.scale / this.transform.scale;\n\n      this.transform.scale = request.scale;\n      this.transform.scaledPosition = PointExtensions.sub(PointExtensions.initialize(newX, newY), this.transform.position);\n    }\n  }\n}\n","import { CenterGroupOrNodeExecution } from './center-group-or-node';\nimport { FitToFlowExecution } from './fit-to-flow';\nimport { ResetScaleAndCenterExecution } from './reset-scale-and-center';\nimport { ResetScaleExecution } from './reset-scale';\nimport { UpdateScaleExecution } from './update-scale';\nimport { InputCanvasPositionExecution } from './input-canvas-position';\nimport { InputCanvasScaleExecution } from './input-canvas-scale';\nimport { AddCanvasToStoreExecution } from './add-canvas-to-store';\nimport { RemoveCanvasFromStoreExecution } from './remove-canvas-from-store';\nimport { GetCanvasExecution } from './get-canvas';\nimport { RedrawCanvasWithAnimationExecution } from './redraw-canvas-with-animation';\n\nexport const F_CANVAS_FEATURES = [\n\n  AddCanvasToStoreExecution,\n\n  CenterGroupOrNodeExecution,\n\n  FitToFlowExecution,\n\n  GetCanvasExecution,\n\n  InputCanvasPositionExecution,\n\n  InputCanvasScaleExecution,\n\n  RedrawCanvasWithAnimationExecution,\n\n  RemoveCanvasFromStoreExecution,\n\n  ResetScaleExecution,\n\n  ResetScaleAndCenterExecution,\n\n  UpdateScaleExecution\n];\n","import { FConnectionBase } from '../../../f-connection';\n\nexport class AddConnectionForCreateToStoreRequest {\n\n    constructor(\n        public fConnection: FConnectionBase\n    ) {\n    }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddConnectionForCreateToStoreRequest } from './add-connection-for-create-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddConnectionForCreateToStoreRequest)\nexport class AddConnectionForCreateToStoreExecution implements IExecution<AddConnectionForCreateToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddConnectionForCreateToStoreRequest): void {\n    this._fComponentsStore.fTempConnection = request.fConnection;\n  }\n}\n","import { FMarkerBase } from '../../../f-connection';\n\nexport class AddConnectionMarkerToStoreRequest {\n\n  constructor(\n    public fComponent: FMarkerBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddConnectionMarkerToStoreRequest } from './add-connection-marker-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddConnectionMarkerToStoreRequest)\nexport class AddConnectionMarkerToStoreExecution implements IExecution<AddConnectionMarkerToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddConnectionMarkerToStoreRequest): void {\n    this._fComponentsStore.addComponent(this._fComponentsStore.fMarkers, request.fComponent);\n  }\n}\n","import { FConnectionBase } from '../../../f-connection';\n\nexport class AddConnectionToStoreRequest {\n\n    constructor(\n        public fConnection: FConnectionBase\n    ) {\n    }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddConnectionToStoreRequest } from './add-connection-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddConnectionToStoreRequest)\nexport class AddConnectionToStoreExecution implements IExecution<AddConnectionToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddConnectionToStoreRequest): void {\n    this._fComponentsStore.fConnections.push(request.fConnection);\n    this._fComponentsStore.dataChanged();\n  }\n}\n","import { FConnectionBase } from '../../../f-connection';\n\nexport class AddSnapConnectionToStoreRequest {\n\n    constructor(\n        public fConnection: FConnectionBase\n    ) {\n    }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddSnapConnectionToStoreRequest } from './add-snap-connection-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddSnapConnectionToStoreRequest)\nexport class AddSnapConnectionToStoreExecution implements IExecution<AddSnapConnectionToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddSnapConnectionToStoreRequest): void {\n    this._fComponentsStore.fSnapConnection = request.fConnection;\n  }\n}\n","import { FConnectionBase } from '../../../f-connection';\n\nexport class CreateConnectionMarkersRequest {\n  constructor(\n    public fConnection: FConnectionBase,\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CreateConnectionMarkersRequest } from './create-connection-markers-request';\nimport { FConnectionBase, FMarkerBase } from '../../../f-connection';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { BrowserService } from '@foblex/platform';\nimport { normalizeDomElementId } from '@foblex/utils';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(CreateConnectionMarkersRequest)\nexport class CreateConnectionMarkersExecution implements IExecution<CreateConnectionMarkersRequest, void> {\n\n  constructor(\n    private fBrowser: BrowserService,\n    private fComponentsStore: FComponentsStore\n  ) {\n  }\n\n  public handle(request: CreateConnectionMarkersRequest): void {\n    const element: SVGDefsElement = createSVGElement('defs', this.fBrowser);\n    const fConnection = request.fConnection;\n\n    this.getMarkers(fConnection).forEach((marker) => {\n\n      const markerElement = this.createMarkerElement(marker, fConnection.fId);\n\n      const clone = marker.hostElement.cloneNode(true) as HTMLElement;\n      clone.setAttribute('height', `${ marker.height }`);\n      clone.setAttribute('width', `${ marker.width }`);\n      clone.removeAttribute('markerUnits');\n      clone.style.display = 'unset';\n      markerElement.append(clone);\n\n      element.append(markerElement);\n    });\n\n    fConnection.fDefs.nativeElement.innerHTML = element.innerHTML;\n\n    this.makeSafariCompatible(fConnection);\n  }\n\n  public getMarkers(fConnection: FConnectionBase): FMarkerBase[] {\n    return this.fComponentsStore.fMarkers.filter((x) => fConnection.hostElement.contains(x.hostElement));\n  }\n\n  // Safari does not support markers on path elements if markers are defined after the path element\n  private makeSafariCompatible(fConnection: FConnectionBase): void {\n    fConnection.fPath.hostElement.replaceWith(fConnection.fPath.hostElement);\n  }\n\n  private createMarkerElement(marker: FMarkerBase, fConnectionId: string): SVGElement {\n    const markerElement = createSVGElement('marker', this.fBrowser);\n\n    markerElement.setAttribute('id', normalizeDomElementId(marker.type + '-' + fConnectionId));\n\n    markerElement.setAttribute('markerHeight', `${ marker.height }`);\n    markerElement.setAttribute('markerWidth', `${ marker.width }`);\n    markerElement.setAttribute('orient', `${ marker.orient }`);\n    markerElement.setAttribute('refX', `${ marker.refX }`);\n    markerElement.setAttribute('refY', `${ marker.refY }`);\n    markerElement.setAttribute('markerUnits', `${ marker.markerUnits }`);\n\n    return markerElement;\n  }\n}\n\nfunction createSVGElement<K extends keyof SVGElementTagNameMap>(tag: K, fBrowser: BrowserService): SVGElementTagNameMap[K] {\n  return fBrowser.document.createElementNS('http://www.w3.org/2000/svg', tag);\n}\n","import { EFConnectionBehavior } from '../../../f-connection';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport { IRoundedRect } from '@foblex/2d';\n\nexport class CalculateConnectionLineByBehaviorRequest {\n\n  constructor(\n    public outputRect: IRoundedRect,\n    public inputRect: IRoundedRect,\n    public behavior: EFConnectionBehavior | string,\n    public outputSide: EFConnectableSide,\n    public inputSide: EFConnectableSide,\n  ) {\n  }\n}\n","import { IHandler } from '@foblex/mediator';\nimport { IPoint, PointExtensions } from '@foblex/2d';\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/2d';\n\nexport class CalculateCenterBetweenPointsRequest {\n\n    constructor(\n        public source: IPoint,\n        public target: IPoint,\n    ) {\n    }\n}\n","import { IPoint } from '@foblex/2d';\nimport { IHandler } from '@foblex/mediator';\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    return this.findPointAtDistance(points[ centerIndex ], points[ centerIndex + 1 ], remainingDistanceToCenter);\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/2d';\n\nexport class CalculateConnectionCenterRequest {\n\n    constructor(\n        public points: IPoint[],\n    ) {\n    }\n}\n","export enum EFConnectableSide {\n\n  LEFT = 'left',\n\n  TOP = 'top',\n\n  RIGHT = 'right',\n\n  BOTTOM = 'bottom',\n\n  AUTO = 'auto',\n}\n","import { EFConnectableSide } from './e-f-connectable-side';\nimport { IHasHostElement } from '../i-has-host-element';\n\nexport abstract class FConnectorBase implements IHasHostElement {\n\n  public abstract fId: string;\n\n  public abstract fNodeId: string;\n\n  public abstract disabled: boolean;\n\n  public abstract hostElement: HTMLElement | SVGElement;\n\n  public abstract canBeConnected: boolean;\n\n  private _isConnected: boolean = false;\n\n  public get isConnected(): boolean {\n    return this._isConnected;\n  }\n\n  public toConnector: FConnectorBase[] = [];\n\n  public isSelfConnectable: boolean = true;\n\n  public fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n  public userFConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n  public isContains(element: HTMLElement | SVGElement): boolean {\n    return this.hostElement.contains(element);\n  }\n\n  public setConnected(toConnector: FConnectorBase): void {\n    this._isConnected = true;\n    this.toConnector.push(toConnector);\n  }\n\n  public resetConnected(): void {\n    this._isConnected = false;\n    this.toConnector = [];\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 get canBeConnected(): boolean {\n    return !this.disabled && (this.multiple ? true : !this.isConnected);\n  }\n}\n","export enum EFResizeHandleType {\n\n  LEFT = 'left',\n\n  LEFT_TOP = 'left-top',\n\n  TOP = 'top',\n\n  RIGHT_TOP = 'right-top',\n\n  RIGHT = 'right',\n\n  RIGHT_BOTTOM = 'right-bottom',\n\n  BOTTOM = 'bottom',\n\n  LEFT_BOTTOM = 'left-bottom',\n}\n","import {\n  computed,\n  Directive, input\n} from \"@angular/core\";\nimport { EFResizeHandleType } from './e-f-resize-handle-type';\nimport { castToEnum } from '@foblex/utils';\n\n@Directive({\n  selector: \"[fResizeHandle]\",\n  host: {\n    class: `f-resize-handle f-component`,\n    '[attr.data-f-resize-handle-type]': 'type().toUpperCase()',\n    '[class]': 'class()'\n  },\n})\nexport class FResizeHandleDirective {\n\n  public type = input.required<EFResizeHandleType, unknown>({\n    alias: 'fResizeHandleType',\n    transform: (x) => castToEnum(x, 'fResizeHandleType', EFResizeHandleType)\n  });\n\n  protected class = computed(() => {\n    return `f-resize-handle-${ EFResizeHandleType[ this.type().toUpperCase() as keyof typeof EFResizeHandleType ] }`;\n  })\n}\n","import {\n  Directive,\n} from \"@angular/core\";\n\n@Directive({\n  selector: \"[fRotateHandle]\",\n  host: {\n    class: `f-rotate-handle f-component`,\n  },\n})\nexport class FRotateHandleDirective {}\n","import { isClosestElementHasClass } from '@foblex/utils';\n\nexport function isRotateHandle(element: HTMLElement): boolean {\n  return isClosestElementHasClass(element, '.f-rotate-handle');\n}\n","import {\n  Directive\n} from \"@angular/core\";\n\n@Directive({\n  selector: \"[fDragHandle]\",\n  host: {\n    class: \"f-drag-handle f-component\"\n  },\n})\nexport class FDragHandleDirective {}\n","import { AbstractConstructor, Constructor } from '../constructor';\nimport { IHasHostElement } from '../../i-has-host-element';\nimport { ISelectable } from './i-selectable';\n\nexport const F_SELECTED_CLASS = 'f-selected';\n\ntype CanChangeSelectionConstructor = Constructor<ISelectable> & AbstractConstructor<ISelectable>;\n\nexport function mixinChangeSelection<T extends AbstractConstructor<IHasHostElement>>(base: T): CanChangeSelectionConstructor & T;\nexport function mixinChangeSelection<T extends Constructor<IHasHostElement>>(base: T): CanChangeSelectionConstructor & T {\n  return class extends base {\n\n    public fId: string = '';\n\n    public fSelectionDisabled: boolean = false;\n\n    public unmarkAsSelected(): void {\n      this.unmarkChildrenAsSelected?.();\n      this.hostElement.classList.remove(F_SELECTED_CLASS);\n    }\n\n    public markAsSelected(): void {\n      this.markChildrenAsSelected?.();\n      if (!this.isSelected()) {\n        this.hostElement.classList.add(F_SELECTED_CLASS);\n      }\n    }\n\n    public isSelected(): boolean {\n      return this.hostElement.classList.contains(F_SELECTED_CLASS);\n    }\n\n    public markChildrenAsSelected(): void {\n    }\n\n    public unmarkChildrenAsSelected(): void {\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","import { ICanChangeVisibility } from './i-can-change-visibility';\nimport { IHasHostElement } from '../../i-has-host-element';\nimport { AbstractConstructor, Constructor } from '../constructor';\n\ntype CanChangeVisibilityConstructor = Constructor<ICanChangeVisibility> & AbstractConstructor<ICanChangeVisibility>;\n\nexport function mixinChangeVisibility<T extends AbstractConstructor<IHasHostElement>>(base: T): CanChangeVisibilityConstructor & T;\nexport function mixinChangeVisibility<T extends Constructor<IHasHostElement>>(base: T): CanChangeVisibilityConstructor & 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 { EventEmitter, InjectionToken } from '@angular/core';\nimport { IPoint, IRect, ISize, PointExtensions } from '@foblex/2d';\nimport {\n  FConnectorBase\n} from '../f-connectors';\nimport { IHasHostElement } from '../i-has-host-element';\nimport { ISelectable, mixinChangeSelection } from '../mixins';\nimport { FChannel } from '../reactivity';\n\nexport const F_NODE = new InjectionToken<FNodeBase>('F_NODE');\n\nconst MIXIN_BASE = mixinChangeSelection(\n  class {\n    constructor(\n      public hostElement: HTMLElement\n    ) {\n    }\n  });\n\nexport abstract class FNodeBase extends MIXIN_BASE implements ISelectable, IHasHostElement {\n\n  public abstract override fId: string;\n\n  public abstract fParentId: string | null | undefined;\n\n  public readonly stateChanges = new FChannel();\n\n\n  public abstract positionChange: EventEmitter<IPoint>;\n\n  public abstract position: IPoint;\n\n  protected _position: IPoint = PointExtensions.initialize();\n\n\n  public abstract rotateChange: EventEmitter<number>;\n\n  public abstract rotate: number;\n\n  protected _rotate: number = 0;\n\n\n  public abstract sizeChange: EventEmitter<IRect>;\n\n  public abstract size: ISize;\n\n  protected _size: ISize | undefined;\n\n\n  public abstract fMinimapClass: string[] | string;\n\n\n  public abstract fDraggingDisabled: boolean;\n\n  public abstract override fSelectionDisabled: boolean;\n\n  public abstract fConnectOnNode: boolean;\n\n  public fCanBeResizedByChild: boolean = true;\n\n  public abstract fIncludePadding: boolean;\n\n  public abstract refresh(): void;\n\n  public connectors: FConnectorBase[] = [];\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    if (this.size) {\n      this.setStyle('width', '' + this.size.width + 'px');\n      this.setStyle('height', '' + this.size.height + 'px');\n    }\n\n    this.setStyle('transform', `translate(${ this.position.x }px,${ this.position.y }px) rotate(${ this.rotate }deg)`);\n  }\n\n  public updatePosition(position: IPoint): void {\n    this._position = position;\n  }\n\n  public updateRotate(rotate: number): void {\n    this._rotate = rotate;\n  }\n\n  public updateSize(value: ISize): void {\n    this._size = value;\n  }\n\n  public setClass(className: string): void {\n    this.hostElement.classList.add(className);\n  }\n\n  public removeClass(className: string): void {\n    this.hostElement.classList.remove(className);\n  }\n\n  public addConnector(connector: FConnectorBase): void {\n    this.connectors.push(connector);\n    this.refresh();\n  }\n\n  public removeConnector(connector: FConnectorBase): void {\n    const index = this.connectors.indexOf(connector);\n    if (index !== -1) {\n      this.connectors.splice(index, 1);\n    }\n    this.refresh();\n  }\n}\n","import {\n  AfterViewInit, booleanAttribute, DestroyRef,\n  Directive,\n  ElementRef,\n  EventEmitter, inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n} from \"@angular/core\";\nimport { IPoint, IRect, ISize, PointExtensions, SizeExtensions } from '@foblex/2d';\nimport { F_NODE, FNodeBase } from './f-node-base';\nimport { NotifyTransformChangedRequest } from '../f-storage';\nimport { FMediator } from '@foblex/mediator';\nimport { BrowserService } from '@foblex/platform';\nimport { IHasHostElement } from '../i-has-host-element';\nimport { AddNodeToStoreRequest, UpdateNodeWhenStateOrSizeChangedRequest, RemoveNodeFromStoreRequest } from '../domain';\n\nlet uniqueId: number = 0;\n\n@Directive({\n  selector: \"[fGroup]\",\n  exportAs: \"fComponent\",\n  host: {\n    '[attr.data-f-group-id]': 'fId',\n    class: \"f-group f-component\",\n    '[class.f-group-dragging-disabled]': 'fDraggingDisabled',\n    '[class.f-group-selection-disabled]': 'fSelectionDisabled',\n  },\n  providers: [\n    { provide: F_NODE, useExisting: FGroupDirective }\n  ],\n})\nexport class FGroupDirective extends FNodeBase\n  implements OnInit, AfterViewInit, IHasHostElement, OnDestroy {\n\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _fMediator = inject(FMediator);\n\n  @Input('fGroupId')\n  public override fId: string = `f-group-${ uniqueId++ }`;\n\n  @Input('fGroupParentId')\n  public override fParentId: string | null | undefined = null;\n\n  @Input('fGroupPosition')\n  public override set position(value: IPoint) {\n    if(!PointExtensions.isEqual(this._position, value)) {\n      this._position = value;\n      this.redraw();\n      this.refresh();\n    }\n  }\n  public override get position(): IPoint {\n    return this._position;\n  }\n  @Output('fGroupPositionChange')\n  public override positionChange = new EventEmitter<IPoint>();\n\n\n  @Input('fGroupRotate')\n  public override set rotate(value: number) {\n    if(this._rotate !== value) {\n      this._rotate = value;\n      this.redraw();\n      this.refresh();\n    }\n  }\n  public override get rotate(): number {\n    return this._rotate;\n  }\n\n  @Output('fGroupRotateChange')\n  public override rotateChange = new EventEmitter<number>();\n\n\n  @Input('fGroupSize')\n  public override set size(value: ISize) {\n    if(!this.size || !SizeExtensions.isEqual(this._size!, value)) {\n      this._size = value;\n      this.redraw();\n      this.refresh()\n    }\n  }\n  public override get size(): ISize {\n    return this._size!;\n  }\n  @Output('fGroupSizeChange')\n  public override sizeChange = new EventEmitter<IRect>();\n\n  @Input({ alias: 'fGroupDraggingDisabled', transform: booleanAttribute })\n  public override fDraggingDisabled: boolean = false;\n\n  @Input({ alias: 'fGroupSelectionDisabled', transform: booleanAttribute })\n  public override fSelectionDisabled: boolean = false;\n\n  @Input({ transform: booleanAttribute })\n  public override fIncludePadding: boolean = true;\n\n  @Input({ transform: booleanAttribute })\n  public override fConnectOnNode: boolean = true;\n\n  @Input()\n  public override fMinimapClass: string[] | string = [];\n\n  constructor(\n    elementReference: ElementRef<HTMLElement>,\n    private renderer: Renderer2,\n    private fBrowser: BrowserService\n  ) {\n    super(elementReference.nativeElement);\n  }\n\n  public ngOnInit(): void {\n    this.setStyle('position', 'absolute');\n    this.setStyle('transform-origin', 'center');\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\n    this._fMediator.execute<void>(new AddNodeToStoreRequest(this));\n  }\n\n  protected override setStyle(styleName: string, value: string) {\n    this.renderer.setStyle(this.hostElement, styleName, value);\n  }\n\n  public override redraw(): void {\n    super.redraw();\n    this._fMediator.execute(new NotifyTransformChangedRequest());\n  }\n\n  public ngAfterViewInit(): void {\n    if(!this.fBrowser.isBrowser()) {\n      return;\n    }\n    this._listenStateSizeChanges();\n  }\n\n  private _listenStateSizeChanges(): void {\n    this._fMediator.execute<void>(new UpdateNodeWhenStateOrSizeChangedRequest(this, this._destroyRef));\n  }\n\n  public refresh(): void {\n    this.stateChanges.notify();\n  }\n\n  public ngOnDestroy(): void {\n    this._fMediator.execute<void>(new RemoveNodeFromStoreRequest(this));\n  }\n}\n","import {\n  AfterViewInit, booleanAttribute, DestroyRef,\n  Directive,\n  ElementRef,\n  EventEmitter, inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n} from \"@angular/core\";\nimport { IPoint, IRect, ISize, PointExtensions, SizeExtensions } from '@foblex/2d';\nimport { BrowserService } from '@foblex/platform';\nimport { NotifyTransformChangedRequest } from '../f-storage';\nimport { FMediator } from '@foblex/mediator';\nimport { F_NODE, FNodeBase } from './f-node-base';\nimport { IHasHostElement } from '../i-has-host-element';\nimport { AddNodeToStoreRequest, UpdateNodeWhenStateOrSizeChangedRequest, RemoveNodeFromStoreRequest } from '../domain';\n\nlet uniqueId: number = 0;\n\n@Directive({\n  selector: \"[fNode]\",\n  exportAs: \"fComponent\",\n  host: {\n    '[attr.data-f-node-id]': 'fId',\n    class: \"f-node f-component\",\n    '[class.f-node-dragging-disabled]': 'fDraggingDisabled',\n    '[class.f-node-selection-disabled]': 'fSelectionDisabled',\n  },\n  providers: [\n    { provide: F_NODE, useExisting: FNodeDirective }\n  ],\n})\nexport class FNodeDirective extends FNodeBase implements OnInit, AfterViewInit, IHasHostElement, OnDestroy {\n\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _fMediator = inject(FMediator);\n\n  @Input('fNodeId')\n  public override fId: string = `f-node-${ uniqueId++ }`;\n\n  @Input('fNodeParentId')\n  public override fParentId: string | null | undefined = null;\n\n  @Input('fNodePosition')\n  public override set position(value: IPoint) {\n    if(!PointExtensions.isEqual(this._position, value)) {\n      this._position = value;\n      this.redraw();\n      this.refresh();\n    }\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('fNodeSize')\n  public override set size(value: ISize) {\n    if(!this.size || !SizeExtensions.isEqual(this._size!, value)) {\n      this._size = value;\n      this.redraw();\n      this.refresh()\n    }\n  }\n\n  @Input('fNodeRotate')\n  public override set rotate(value: number) {\n    if(this._rotate !== value) {\n      this._rotate = value;\n      this.redraw();\n      this.refresh();\n    }\n  }\n  public override get rotate(): number {\n    return this._rotate;\n  }\n\n  @Output('fNodeRotateChange')\n  public override rotateChange = new EventEmitter<number>();\n\n\n  public override get size(): ISize {\n    return this._size!;\n  }\n\n  @Output('fNodeSizeChange')\n  public override sizeChange: EventEmitter<IRect> = new EventEmitter<IRect>();\n\n  @Input({ alias: 'fNodeDraggingDisabled', transform: booleanAttribute })\n  public override fDraggingDisabled: boolean = false;\n\n  @Input({ alias: 'fNodeSelectionDisabled', transform: booleanAttribute })\n  public override fSelectionDisabled: boolean = false;\n\n  @Input({ transform: booleanAttribute })\n  public override fIncludePadding: boolean = true;\n\n  //Add ability to connect to first connectable input if node is at pointer position\n  @Input({ transform: booleanAttribute })\n  public override fConnectOnNode: boolean = true;\n\n  @Input()\n  public override fMinimapClass: string[] | string = [];\n\n  constructor(\n    elementReference: ElementRef<HTMLElement>,\n    private renderer: Renderer2,\n    private fBrowser: BrowserService\n  ) {\n    super(elementReference.nativeElement);\n  }\n\n  public ngOnInit(): void {\n    this.setStyle('position', 'absolute');\n    this.setStyle('transform-origin', 'center');\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\n    this._fMediator.execute<void>(new AddNodeToStoreRequest(this));\n  }\n\n  protected override setStyle(styleName: string, value: string) {\n    this.renderer.setStyle(this.hostElement, styleName, value);\n  }\n\n  public override redraw(): void {\n    super.redraw();\n    this._fMediator.execute(new NotifyTransformChangedRequest());\n  }\n\n  public ngAfterViewInit(): void {\n    if(!this.fBrowser.isBrowser()) {\n      return;\n    }\n    this._listenStateSizeChanges();\n  }\n\n  private _listenStateSizeChanges(): void {\n    this._fMediator.execute<void>(new UpdateNodeWhenStateOrSizeChangedRequest(this, this._destroyRef));\n  }\n\n  public override refresh(): void {\n    this.stateChanges.notify();\n  }\n\n  public ngOnDestroy(): void {\n    this._fMediator.execute<void>(new RemoveNodeFromStoreRequest(this));\n  }\n}\n","export function isNode(element: HTMLElement | SVGElement): boolean {\n  return !!element.closest('[fNode]');\n}\n\n","import { FNodeDirective } from './f-node.directive';\nimport { FResizeHandleDirective } from './f-resize-handle';\nimport { FGroupDirective } from './f-group.directive';\nimport { FDragHandleDirective } from './f-drag-handle.directive';\nimport { FRotateHandleDirective } from './f-rotate-handle';\n\nexport const F_NODE_PROVIDERS = [\n\n  FGroupDirective,\n\n  FNodeDirective,\n\n  FDragHandleDirective,\n\n  FResizeHandleDirective,\n\n  FRotateHandleDirective,\n];\n","import {\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit, SimpleChanges\n} from '@angular/core';\nimport { F_NODE_INPUT, FNodeInputBase } from './f-node-input-base';\nimport { EFConnectableSide } from '../e-f-connectable-side';\nimport { F_NODE } from '../../f-node';\nimport { castToEnum } from '@foblex/utils';\nimport { FMediator } from '@foblex/mediator';\nimport { AddInputToStoreRequest, F_CSS_CLASS, RemoveInputFromStoreRequest } from '../../domain';\nimport { FConnectorBase } from '../f-connector-base';\n\nlet uniqueId: number = 0;\n\n@Directive({\n  selector: \"[fNodeInput]\",\n  exportAs: 'fNodeInput',\n  host: {\n    '[attr.data-f-input-id]': 'fId',\n    class: \"f-component f-node-input\",\n    '[class.f-node-input-multiple]': 'multiple',\n    '[class.f-node-input-disabled]': 'disabled'\n  },\n  providers: [ { provide: F_NODE_INPUT, useExisting: FNodeInputDirective } ],\n})\nexport class FNodeInputDirective extends FNodeInputBase implements OnInit, OnChanges, OnDestroy {\n\n  private _elementReference = inject(ElementRef);\n  private _fMediator = inject(FMediator);\n  private _fNode = inject(F_NODE);\n\n  @Input('fInputId')\n  public override fId: any = `f-node-input-${ uniqueId++ }`;\n\n  @Input('fInputMultiple')\n  public override multiple: boolean = true;\n\n  @Input({ alias: 'fInputDisabled', transform: booleanAttribute })\n  public override disabled: boolean = false;\n\n  @Input({\n    alias: 'fInputConnectableSide',\n    transform: (value: unknown) => castToEnum(value, 'fInputConnectableSide', EFConnectableSide)\n  })\n  public override userFConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n  public override get fNodeId(): string {\n    return this._fNode.fId;\n  }\n\n  public get hostElement(): HTMLElement | SVGElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public ngOnInit() {\n    this._fMediator.execute(new AddInputToStoreRequest(this));\n    this._fNode.addConnector(this);\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes[ 'userFConnectableSide' ]) {\n      this._fNode.refresh();\n    }\n  }\n\n  public override setConnected(toConnector: FConnectorBase): void {\n    super.setConnected(toConnector);\n    this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.INPUT_CONNECTED, true);\n    this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.INPUT_NOT_CONNECTABLE, !this.canBeConnected);\n  }\n\n  public override resetConnected(): void {\n    super.resetConnected();\n    this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.INPUT_CONNECTED, false);\n    this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.INPUT_NOT_CONNECTABLE, !this.canBeConnected);\n  }\n\n  public ngOnDestroy(): void {\n    this._fNode.removeConnector(this);\n    this._fMediator.execute(new RemoveInputFromStoreRequest(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  private outputs: FConnectorBase[] = [];\n\n  public get canBeConnected(): boolean {\n    return !this.disabled && this.outputs.some((output) => output.canBeConnected);\n  }\n\n  public abstract canBeConnectedInputs: string[];\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 { booleanAttribute, Directive, ElementRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { F_NODE_OUTLET, FNodeOutletBase } from './f-node-outlet-base';\nimport { F_NODE } from '../../f-node';\nimport { EFConnectableSide } from '../e-f-connectable-side';\nimport { FMediator } from '@foblex/mediator';\nimport { AddOutletToStoreRequest, RemoveOutletFromStoreRequest } from '../../domain';\nimport { FConnectorBase } from '../f-connector-base';\n\nlet uniqueId: number = 0;\n\n@Directive({\n  selector: \"[fNodeOutlet]\",\n  exportAs: 'fNodeOutlet',\n  host: {\n    '[attr.data-f-outlet-id]': 'fId',\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  private _elementReference = inject(ElementRef);\n  private _fMediator = inject(FMediator);\n  /// Inject FNodeBase to check if the outlet inside the node\n  private _fNode = inject(F_NODE);\n\n  @Input('fOutletId')\n  public override fId: string = `f-node-outlet-${ uniqueId++ }`;\n\n  @Input({ alias: 'fOutletDisabled', transform: booleanAttribute })\n  public override disabled: boolean = false;\n\n  public override fConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n  public override userFConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n  @Input()\n  public override isConnectionFromOutlet: boolean = false;\n\n  @Input({ alias: 'fCanBeConnectedInputs' })\n  public override canBeConnectedInputs: string[] = [];\n\n  public override get fNodeId(): string {\n    return this._fNode.fId;\n  }\n\n  public get hostElement(): HTMLElement | SVGElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public ngOnInit() {\n    this._fMediator.execute(new AddOutletToStoreRequest(this));\n  }\n\n  public ngOnDestroy(): void {\n    this._fMediator.execute(new RemoveOutletFromStoreRequest(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 abstract multiple: boolean;\n\n  public override get canBeConnected(): boolean {\n    return !this.disabled && (this.multiple ? true : !this.isConnected);\n  }\n\n  public abstract canBeConnectedInputs: string[];\n}\n","export function isNodeOutput(element: HTMLElement | SVGElement): boolean {\n  return !!element.closest('[fNodeOutput]');\n}\n","import {\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit, SimpleChanges\n} from '@angular/core';\nimport { FNodeOutputBase, F_NODE_OUTPUT } from './f-node-output-base';\nimport { EFConnectableSide } from '../e-f-connectable-side';\nimport { F_NODE } from '../../f-node';\nimport { castToEnum } from '@foblex/utils';\nimport { FMediator } from '@foblex/mediator';\nimport { AddOutputToStoreRequest, F_CSS_CLASS, RemoveOutputFromStoreRequest } from '../../domain';\nimport { FConnectorBase } from '../f-connector-base';\n\nlet uniqueId: number = 0;\n\n@Directive({\n  selector: \"[fNodeOutput]\",\n  exportAs: 'fNodeOutput',\n  host: {\n    '[attr.data-f-output-id]': 'fId',\n    class: \"f-component f-node-output\",\n    '[class.f-node-output-multiple]': 'multiple',\n    '[class.f-node-output-disabled]': 'disabled',\n    '[class.f-node-output-self-connectable]': 'isSelfConnectable',\n  },\n  providers: [ { provide: F_NODE_OUTPUT, useExisting: FNodeOutputDirective } ],\n})\nexport class FNodeOutputDirective extends FNodeOutputBase implements OnInit, OnChanges, OnDestroy {\n\n  private _elementReference = inject(ElementRef);\n  private _fMediator = inject(FMediator);\n  private _fNode = inject(F_NODE);\n\n  @Input('fOutputId')\n  public override fId: string = `f-node-output-${ uniqueId++ }`;\n\n  @Input('fOutputMultiple')\n  public override multiple: boolean = false;\n\n  @Input({ alias: 'fOutputDisabled', transform: booleanAttribute })\n  public override disabled: boolean = false;\n\n  @Input({\n    alias: 'fOutputConnectableSide',\n    transform: (value: unknown) => castToEnum(value, 'fOutputConnectableSide', EFConnectableSide)\n  })\n  public override userFConnectableSide: EFConnectableSide = EFConnectableSide.AUTO;\n\n  @Input()\n  public override isSelfConnectable: boolean = true;\n\n  @Input({ alias: 'fCanBeConnectedInputs' })\n  public override canBeConnectedInputs: string[] = [];\n\n  public override get fNodeId(): string {\n    return this._fNode.fId;\n  }\n\n  public get hostElement(): HTMLElement | SVGElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public ngOnInit() {\n    this._fMediator.execute(new AddOutputToStoreRequest(this));\n    this._fNode.addConnector(this);\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes[ 'userFConnectableSide' ]) {\n      this._fNode.refresh();\n    }\n  }\n\n  public override setConnected(toConnector: FConnectorBase): void {\n    super.setConnected(toConnector);\n    this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.OUTPUT_CONNECTED, true);\n    this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.OUTPUT_NOT_CONNECTABLE, !this.canBeConnected);\n  }\n\n  public override resetConnected(): void {\n    super.resetConnected();\n    this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.OUTPUT_CONNECTED, false);\n    this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.OUTPUT_NOT_CONNECTABLE, !this.canBeConnected);\n  }\n\n  public ngOnDestroy(): void {\n    this._fNode.removeConnector(this);\n    this._fMediator.execute(new RemoveOutputFromStoreRequest(this));\n  }\n}\n","import { FNodeInputDirective } from './f-node-input';\nimport { FNodeOutletDirective } from './f-node-outlet';\nimport { FNodeOutputDirective } from './f-node-output';\n\nexport const F_CONNECTORS_PROVIDERS = [\n\n  FNodeInputDirective,\n\n  FNodeOutletDirective,\n\n  FNodeOutputDirective\n];\n","import { IPoint } from '@foblex/2d';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport { CalculateConnectionCenterHandler, CalculateConnectionCenterRequest } from './calculate-connection-center';\nimport {\n  IFConnectionBuilder,\n  IFConnectionBuilderRequest,\n  IFConnectionBuilderResponse\n} from '../../f-connection-builder';\n\nexport class FBezierPathBuilder implements IFConnectionBuilder {\n\n  private static getConnectorOffset(distance: number, offset: number): number {\n    if (distance >= offset) {\n      return distance;\n    }\n    return offset * Math.sqrt(offset - distance);\n  }\n\n  private static getAnglePoint(side: EFConnectableSide, source: IPoint, target: IPoint, offset: number): IPoint {\n\n    let result: IPoint = { x: source.x, y: source.y };\n\n    switch (side) {\n      case EFConnectableSide.LEFT:\n        result.x -= FBezierPathBuilder.getConnectorOffset(source.x - target.x, offset);\n        break;\n      case EFConnectableSide.RIGHT:\n        result.x += FBezierPathBuilder.getConnectorOffset(target.x - source.x, offset);\n        break;\n      case EFConnectableSide.TOP:\n        result.y -= FBezierPathBuilder.getConnectorOffset(source.y - target.y, offset);\n        break;\n      case EFConnectableSide.BOTTOM:\n        result.y += FBezierPathBuilder.getConnectorOffset(target.y - source.y, offset);\n        break;\n    }\n\n    return result;\n  }\n\n  public handle(request: IFConnectionBuilderRequest): IFConnectionBuilderResponse {\n    const { source, sourceSide, target, targetSide, offset } = request;\n\n    const sourceAnglePoint = FBezierPathBuilder.getAnglePoint(sourceSide, source, target, offset);\n\n    const targetAnglePoint = FBezierPathBuilder.getAnglePoint(targetSide, target, source, offset);\n\n    const path = `M ${ source.x } ${ source.y } C ${ sourceAnglePoint.x } ${ sourceAnglePoint.y }, ${ targetAnglePoint.x } ${ targetAnglePoint.y }, ${ target.x + 0.0002 } ${ target.y + 0.0002 }`;\n\n    const connectionCenter = new CalculateConnectionCenterHandler().handle(\n      new CalculateConnectionCenterRequest([ source, sourceAnglePoint, targetAnglePoint, target ])\n    );\n\n    return { path, connectionCenter, penultimatePoint: targetAnglePoint };\n  }\n}\n","import { IPoint, PointExtensions } from '@foblex/2d';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport {\n  CalculateCenterBetweenPointsHandler,\n  CalculateCenterBetweenPointsRequest\n} from './calculate-center-between-points';\nimport { CalculateConnectionCenterHandler, CalculateConnectionCenterRequest } from './calculate-connection-center';\nimport {\n  IFConnectionBuilder,\n  IFConnectionBuilderRequest,\n  IFConnectionBuilderResponse\n} from '../../f-connection-builder';\nimport { IMap } from '../../../domain';\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 implements IFConnectionBuilder {\n\n  public handle(request: IFConnectionBuilderRequest): IFConnectionBuilderResponse {\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    const penultimatePoint = points.length > 1 ? points[ points.length - 2 ] : source;\n\n    return { path, connectionCenter: center, penultimatePoint };\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.0002 } ${ point.y + 0.0002 }`;\n  }\n}\n","import { CalculateConnectionCenterHandler, CalculateConnectionCenterRequest } from './calculate-connection-center';\nimport {\n  IFConnectionBuilder,\n  IFConnectionBuilderRequest,\n  IFConnectionBuilderResponse\n} from '../../f-connection-builder';\n\nexport class FStraightPathBuilder implements IFConnectionBuilder {\n\n  public handle(request: IFConnectionBuilderRequest): IFConnectionBuilderResponse {\n    const { source, target } = request;\n    const path = `M ${ source.x } ${ source.y } L ${ target.x + 0.0002 } ${ target.y + 0.0002 }`;\n\n    const connectionCenter = new CalculateConnectionCenterHandler().handle(\n        new CalculateConnectionCenterRequest([source, target])\n    );\n\n    return { path, connectionCenter, penultimatePoint: source };\n  }\n}\n","import { normalizeDomElementId } from '@foblex/utils';\n\nexport const F_CONNECTION_IDENTIFIERS = {\n\n  textId(connectionId: string): string {\n    return normalizeDomElementId('connection_text_' + connectionId);\n  },\n  connectionForSelectionId(connectionId: string): string {\n    return normalizeDomElementId('connection_for_selection_' + connectionId);\n  },\n  connectionId(connectionId: string): string {\n    return normalizeDomElementId('connection_' + connectionId);\n  },\n  gradientId(connectionId: string): string {\n    return normalizeDomElementId('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 { 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';\nimport { BrowserService } from '@foblex/platform';\nimport { IHasHostElement } from '../../../i-has-host-element';\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.fId + 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      private fBrowser: BrowserService\n  ) {\n  }\n\n  public ngOnInit(): void {\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  public redraw(): void {\n    this.hostElement.setAttribute('startOffset', this.base.fTextStartOffset || '50%');\n  }\n\n  private getFontStyles(element: SVGTextPathElement): { fontSize: string, fontFamily: string } {\n    const computedStyles = this.fBrowser.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 || '12px';\n    const canvas = this.fBrowser.document.createElement('canvas');\n    let context;\n\n    try {\n      context = canvas.getContext('2d');\n    } catch (e) {\n      context = null;\n    }\n    if (!context) {\n      return 0;\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\n","import { ILine } from '@foblex/2d';\nimport { InjectionToken } from '@angular/core';\nimport { IHasHostElement } from '../../../i-has-host-element';\n\nexport const CONNECTION_TEXT = new InjectionToken<IConnectionText>('CONNECTION_TEXT');\n\nexport interface IConnectionText extends IHasHostElement {\n\n  redraw(line: ILine): void;\n}\n","import {\n  ChangeDetectionStrategy,\n  Component, ElementRef, Inject, ViewChild\n} from \"@angular/core\";\nimport { ILine, PointExtensions } from '@foblex/2d';\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.fId + 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(line: ILine): void {\n    this.textPathDirective.redraw();\n    const isTextReverse: boolean = FConnectionTextComponent.isTextReverse(line);\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(line, 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(line: ILine): boolean {\n    return line.point1.x > line.point2.x;\n  }\n\n  private static getTextStartOffset(line: ILine, name: string, symbolWidth: number): number {\n    const vectorLength: number = PointExtensions.hypotenuse(line.point1, line.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","export const F_CSS_CLASS = {\n\n  DRAG_AND_DROP: {\n\n    DRAGGING: 'f-dragging',\n\n    CONNECTIONS_DRAGGING: 'f-connections-dragging',\n  },\n\n  CONNECTOR: {\n\n    OUTPUT_CONNECTED: 'f-node-output-connected',\n\n    OUTPUT_NOT_CONNECTABLE: 'f-node-output-not-connectable',\n\n    INPUT_CONNECTED: 'f-node-input-connected',\n\n    INPUT_NOT_CONNECTABLE: 'f-node-input-not-connectable',\n\n    INPUT_CAN_BE_CONNECTED_TO: 'f-node-input-can-be-connected-to',\n  },\n\n  CONNECTION: {\n\n    DRAG_HANDLE: 'f-connection-drag-handle',\n\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component, ElementRef, inject\n} from \"@angular/core\";\nimport { IPoint } from '@foblex/2d';\nimport { IHasHostElement } from '../../../i-has-host-element';\nimport { F_CSS_CLASS } from '../../../domain/css-cls';\n\n@Component({\n  selector: \"circle[f-connection-drag-handle-start]\",\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class]': 'class'\n  }\n})\nexport class FConnectionDragHandleStartComponent implements IHasHostElement {\n  private readonly _elementReference = inject(ElementRef);\n\n  protected readonly class: string = F_CSS_CLASS.CONNECTION.DRAG_HANDLE;\n\n  public point!: IPoint;\n\n  public get hostElement(): SVGCircleElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public redraw(penultimatePoint: IPoint, startPoint: IPoint): void {\n    this.point = this._calculateCircleCenter(penultimatePoint, startPoint, 8);\n    this.hostElement.setAttribute('cx', this.point.x.toString());\n    this.hostElement.setAttribute('cy', this.point.y.toString());\n  }\n\n  private _calculateCircleCenter(start: IPoint, end: IPoint, radius: number): IPoint {\n    const direction = { x: end.x - start.x, y: end.y - start.y };\n    const length = Math.sqrt(direction.x * direction.x + direction.y * direction.y) || 1;\n    const unitDirection = { x: direction.x / length, y: direction.y / length };\n    const scaledDirection = { x: unitDirection.x * radius, y: unitDirection.y * radius };\n    return { x: end.x - scaledDirection.x, y: end.y - scaledDirection.y };\n  }\n}\n\n","import {\n  ChangeDetectionStrategy,\n  Component, ElementRef, inject\n} from \"@angular/core\";\nimport { IPoint } from '@foblex/2d';\nimport { IHasHostElement } from '../../../i-has-host-element';\nimport { F_CSS_CLASS } from '../../../domain/css-cls';\n\n@Component({\n  selector: \"circle[f-connection-drag-handle-end]\",\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class]': 'class'\n  }\n})\nexport class FConnectionDragHandleEndComponent implements IHasHostElement {\n  private readonly _elementReference = inject(ElementRef);\n\n  protected readonly class: string = F_CSS_CLASS.CONNECTION.DRAG_HANDLE;\n\n  public point!: IPoint;\n\n  public get hostElement(): SVGCircleElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public redraw(penultimatePoint: IPoint, endPoint: IPoint): void {\n    this.point = this._calculateCircleCenter(penultimatePoint, endPoint, 8);\n    this.hostElement.setAttribute('cx', this.point.x.toString());\n    this.hostElement.setAttribute('cy', this.point.y.toString());\n  }\n\n  private _calculateCircleCenter(start: IPoint, end: IPoint, radius: number): IPoint {\n    const direction = { x: end.x - start.x, y: end.y - start.y };\n    const length = Math.sqrt(direction.x * direction.x + direction.y * direction.y) || 1;\n    const unitDirection = { x: direction.x / length, y: direction.y / length };\n    const scaledDirection = { x: unitDirection.x * radius, y: unitDirection.y * radius };\n    return { x: end.x - scaledDirection.x, y: end.y - scaledDirection.y };\n  }\n}\n\n","import { ILine } from '@foblex/2d';\nimport { InjectionToken } from '@angular/core';\nimport { IHasHostElement } from '../../../i-has-host-element';\n\nexport const CONNECTION_GRADIENT = new InjectionToken<IConnectionGradient>('CONNECTION_GRADIENT');\n\nexport interface IConnectionGradient extends IHasHostElement {\n\n  initialize(): void;\n\n  redraw(line: ILine): void;\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, Inject } from \"@angular/core\";\nimport { ILine, Point } from '@foblex/2d';\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.fId + 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(line: ILine): void {\n    const x: number = line.point2.x - line.point1.x;\n    const y: number = line.point2.y - line.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 { InjectionToken } from '@angular/core';\nimport { IHasHostElement } from '../../../i-has-host-element';\n\nexport const CONNECTION_PATH = new InjectionToken<IConnectionPath>('CONNECTION_PATH');\n\nexport interface IConnectionPath extends IHasHostElement<SVGPathElement> {\n\n  initialize(): void;\n\n  setPath(path: string): void;\n\n  select(): void;\n\n  deselect(): void;\n}\n","import { normalizeDomElementId } from '@foblex/utils';\n\nexport function getMarkerStartId(fConnectionId: string): string {\n  return normalizeDomElementId(`f-connection-marker-start-${ fConnectionId }`);\n}\n\nexport function getMarkerEndId(fConnectionId: string): string {\n  return normalizeDomElementId(`f-connection-marker-end-${ fConnectionId }`);\n}\n\nexport function getMarkerSelectedStartId(fConnectionId: string): string {\n  return normalizeDomElementId(`f-connection-selected-marker-start-${ fConnectionId }`);\n}\n\nexport function getMarkerSelectedEndId(fConnectionId: string): string {\n  return normalizeDomElementId(`f-connection-selected-marker-end-${ fConnectionId }`);\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 {\n  getMarkerEndId,\n  getMarkerSelectedEndId,\n  getMarkerSelectedStartId,\n  getMarkerStartId,\n} from './get-path-marker-id';\n\n@Component({\n  selector: \"path[f-connection-path]\",\n  template: '',\n  styleUrls: ['./f-connection-path.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"f-component f-connection-path\",\n    '[attr.id]': 'attrConnectionId',\n    '[attr.data-f-path-id]': 'fPathId',\n    '[attr.stroke]': 'linkToGradient',\n  },\n  providers: [ { provide: CONNECTION_PATH, useExisting: FConnectionPathComponent } ],\n})\nexport class FConnectionPathComponent implements IConnectionPath {\n\n  public get fPathId(): string {\n    return this.base.fId;\n  }\n\n  public get linkToGradient(): string {\n    return F_CONNECTION_IDENTIFIERS.linkToGradient(\n      this.base.fId + this.base.fOutputId + this.base.fInputId\n    );\n  }\n\n  public get attrConnectionId(): string {\n    return F_CONNECTION_IDENTIFIERS.connectionId(\n      this.base.fId + 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(#${ getMarkerSelectedStartId(this.base.fId) })`);\n    this.hostElement.setAttribute('marker-end', `url(#${ getMarkerSelectedEndId(this.base.fId) })`);\n  }\n\n  public deselect(): void {\n    this.hostElement.setAttribute('marker-start', `url(#${ getMarkerStartId(this.base.fId) })`);\n    this.hostElement.setAttribute('marker-end', `url(#${ getMarkerEndId(this.base.fId) })`);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component, ElementRef, Inject\n} from \"@angular/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';\nimport { IHasHostElement } from '../../../i-has-host-element';\n\n@Component({\n  selector: \"path[fConnectionSelection]\",\n  template: '',\n  styleUrls: ['./f-connection-selection.component.scss'],\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.fId + 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 { InjectionToken } from '@angular/core';\nimport { IFConnectionBuilder } from './i-f-connection-builder';\n\nexport const F_CONNECTION_BUILDERS = new InjectionToken<IFConnectionBuilders>('F_CONNECTION_BUILDERS');\n\nexport interface IFConnectionBuilders {\n  [key: string]: IFConnectionBuilder;\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { IFConnectionBuilder } from './i-f-connection-builder';\nimport { EFConnectionType, FBezierPathBuilder, FSegmentPathBuilder, FStraightPathBuilder } from '../common';\nimport { F_CONNECTION_BUILDERS, IFConnectionBuilders } from './f-connection-builders';\nimport { IFConnectionFactoryRequest } from './i-f-connection-factory-request';\nimport { IFConnectionBuilderResponse } from './i-f-connection-builder-response';\nimport { IMap } from '../../domain';\n\n@Injectable()\nexport class FConnectionFactory {\n\n  private readonly builders: IMap<IFConnectionBuilder> = {\n\n    [ EFConnectionType.STRAIGHT ]: new FStraightPathBuilder(),\n\n    [ EFConnectionType.BEZIER ]: new FBezierPathBuilder(),\n\n    [ EFConnectionType.SEGMENT ]: new FSegmentPathBuilder(),\n  }\n\n  constructor(\n    @Optional() @Inject(F_CONNECTION_BUILDERS) builders: IFConnectionBuilders\n  ) {\n    if (builders) {\n      this.builders = { ...this.builders, ...builders };\n    }\n  }\n\n  public handle(request: IFConnectionFactoryRequest): IFConnectionBuilderResponse {\n    const builder = this.builders[ request.type ];\n    if (!builder) {\n      throw new Error(`FConnectionBuilder not found for type ${ request.type }`);\n    }\n\n    return builder.handle(request.payload);\n  }\n}\n","import { Directive, ElementRef } from '@angular/core';\nimport { ILine, IPoint, LineExtensions, PointExtensions } from '@foblex/2d';\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 { IConnectionPath } from './f-path';\nimport { IConnectionGradient } from './f-gradient';\nimport { FConnectionDragHandleEndComponent } from './f-drag-handle';\nimport { FConnectionSelectionComponent } from './f-selection';\nimport { IConnectionText } from './f-connection-text';\nimport { EFConnectableSide } from '../../f-connectors';\nimport { FConnectionFactory } from '../f-connection-builder';\nimport { IHasHostElement } from '../../i-has-host-element';\nimport {\n  ISelectable, ICanChangeVisibility,\n  mixinChangeSelection, mixinChangeVisibility\n} from '../../mixins';\n\nconst MIXIN_BASE = mixinChangeSelection(\n  mixinChangeVisibility(\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             ICanChangeVisibility,\n             IHasConnectionColor,\n             IHasConnectionFromTo, IHasConnectionText {\n\n  public abstract override fId: 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 abstract fRadius: number;\n\n  public abstract fOffset: number;\n\n  public path: string = '';\n\n  public line: ILine = LineExtensions.initialize();\n\n  public abstract fDraggingDisabled: boolean;\n\n  public abstract override fSelectionDisabled: boolean;\n\n  public abstract boundingElement: HTMLElement | SVGElement;\n\n  public abstract fBehavior: EFConnectionBehavior;\n\n  public abstract fType: EFConnectionType | string;\n\n  public abstract fDefs: ElementRef<SVGDefsElement>;\n\n  public abstract fPath: IConnectionPath;\n\n  public abstract fGradient: IConnectionGradient;\n\n  public abstract fDragHandle: FConnectionDragHandleEndComponent;\n\n  public abstract fSelection: FConnectionSelectionComponent;\n\n  public abstract fTextComponent: IConnectionText;\n\n  public abstract fText: string;\n\n  public abstract fTextStartOffset: string;\n\n  public abstract fConnectionCenter: ElementRef<HTMLDivElement>;\n\n  private penultimatePoint: IPoint = PointExtensions.initialize();\n\n  protected constructor(\n    elementReference: ElementRef<HTMLElement>,\n    private cFactory: FConnectionFactory\n  ) {\n    super(elementReference.nativeElement);\n  }\n\n  public initialize(): void {\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 setLine({ point1, point2 }: ILine, sourceSide: EFConnectableSide, targetSide: EFConnectableSide): void {\n    this.line = LineExtensions.initialize(point1, point2);\n    const pathResult = this.getPathResult(point1, sourceSide, point2, targetSide);\n    this.path = pathResult.path;\n    this.penultimatePoint = pathResult.penultimatePoint || point1;\n    this.fConnectionCenter?.nativeElement?.setAttribute('style', this.getTransform(pathResult.connectionCenter));\n  }\n\n  private getPathResult(source: IPoint, sourceSide: EFConnectableSide, target: IPoint, targetSide: EFConnectableSide): any {\n    const radius = this.fRadius > 0 ? this.fRadius : 0;\n    const offset = this.fOffset > 0 ? this.fOffset : 1;\n    return this.cFactory.handle(\n      {\n        type: this.fType,\n        payload: { source, sourceSide, target, targetSide, radius, offset }\n      }\n    );\n  }\n\n  private getTransform(position: IPoint): string {\n    return `position: absolute; pointerEvents: all; transform: translate(-50%, -50%); left: ${ position.x }px; top: ${ position.y }px`;\n  }\n\n  public override markChildrenAsSelected(): void {\n    this.fPath.select();\n  }\n\n  public override unmarkChildrenAsSelected(): void {\n    this.fPath.deselect();\n  }\n\n  public redraw(): void {\n    this.fPath.setPath(this.path);\n    this.fSelection.setPath(this.path);\n    this.fGradient.redraw(this.line);\n    this.fDragHandle.redraw(this.penultimatePoint, this.line.point2);\n    this.fTextComponent.redraw(this.line);\n  }\n}\n","export enum EFConnectionBehavior {\n\n  FIXED = 'fixed',\n\n  FIXED_CENTER = 'fixed_center',\n\n  FLOATING = 'floating',\n}\n","export enum EFConnectionType {\n\n  SEGMENT = 'segment',\n\n  STRAIGHT = 'straight',\n\n  BEZIER = 'bezier',\n}\n","import {\n  Directive\n} from \"@angular/core\";\n\n@Directive({\n  selector: \"[fConnectionCenter]\"\n})\nexport class FConnectionCenterDirective  {\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChildren,\n  ElementRef,\n  inject,\n  Input,\n  numberAttribute,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  QueryList,\n  ViewChild\n} from \"@angular/core\";\nimport {\n  CONNECTION_GRADIENT,\n  CONNECTION_PATH, CONNECTION_TEXT,\n  FConnectionDragHandleEndComponent, FConnectionSelectionComponent, IConnectionGradient,\n  IConnectionPath, IConnectionText,\n} from '../common';\nimport { EFConnectionBehavior } from '../common';\nimport { EFConnectionType } from '../common';\nimport { FConnectionCenterDirective } from '../f-connection-center';\nimport { FConnectionFactory } from '../f-connection-builder';\nimport { NotifyDataChangedRequest } from '../../f-storage';\nimport { F_CONNECTION } from '../common/f-connection.injection-token';\n//TODO: Need to deal with cyclic dependencies, since in some cases an error occurs when importing them ../common\n// TypeError: Class extends value undefined is not a constructor or null\n// at f-connection-for-create.component.ts:34:11\nimport { FConnectionBase } from '../common/f-connection-base';\nimport { castToEnum } from '@foblex/utils';\nimport { FMediator } from '@foblex/mediator';\nimport { AddConnectionForCreateToStoreRequest, RemoveConnectionForCreateFromStoreRequest } from '../../domain';\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, OnChanges, OnDestroy {\n\n  public override fId: string = `f-connection-for-create-${ uniqueId++ }`;\n\n  public override fText: string = '';\n\n  public override fTextStartOffset: 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: numberAttribute })\n  public override fRadius: number = 8;\n\n  @Input({ transform: numberAttribute })\n  public override fOffset: number = 12;\n\n  @Input({ transform: (value: unknown) => castToEnum(value, 'fBehavior', EFConnectionBehavior) })\n  public override fBehavior: EFConnectionBehavior = EFConnectionBehavior.FIXED;\n\n  @Input()\n  public override fType: EFConnectionType | string = EFConnectionType.STRAIGHT;\n\n  public override fDraggingDisabled: boolean = false;\n\n  public override fSelectionDisabled: boolean = false;\n\n  @ViewChild('defs', { static: true })\n  public override fDefs!: ElementRef<SVGDefsElement>;\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(FConnectionDragHandleEndComponent, { static: true })\n  public override fDragHandle!: FConnectionDragHandleEndComponent;\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: false })\n  public override fConnectionCenter!: ElementRef<HTMLDivElement>;\n\n  @ContentChildren(FConnectionCenterDirective, { descendants: true })\n  public fConnectionCenters!: QueryList<FConnectionCenterDirective>;\n\n  public override get boundingElement(): HTMLElement | SVGElement {\n    return this.fPath.hostElement;\n  }\n\n  private _fMediator = inject(FMediator);\n\n  constructor(\n    elementReference: ElementRef<HTMLElement>,\n    fConnectionFactory: FConnectionFactory\n  ) {\n    super(elementReference, fConnectionFactory);\n  }\n\n  public ngOnInit(): void {\n    this._fMediator.execute(new AddConnectionForCreateToStoreRequest(this));\n  }\n\n  public ngAfterViewInit(): void {\n    this.hide();\n  }\n\n  public ngOnChanges(): void {\n    this._fMediator.execute(new NotifyDataChangedRequest());\n  }\n\n  public ngOnDestroy(): void {\n    this._fMediator.execute(new RemoveConnectionForCreateFromStoreRequest());\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-end></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\" *ngIf=\"fConnectionCenters.length\">\n  <ng-content select=\"[fConnectionCenter]\"></ng-content>\n</div>\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChildren,\n  ElementRef,\n  inject,\n  Input,\n  numberAttribute,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  QueryList,\n  ViewChild,\n} from \"@angular/core\";\nimport {\n  CONNECTION_GRADIENT,\n  CONNECTION_PATH,\n  CONNECTION_TEXT,\n  EFConnectionBehavior,\n  EFConnectionType,\n  FConnectionDragHandleEndComponent,\n  FConnectionSelectionComponent,\n  IConnectionGradient,\n  IConnectionPath,\n  IConnectionText,\n} from '../common';\nimport { NotifyDataChangedRequest } from '../../f-storage';\nimport { FConnectionCenterDirective } from '../f-connection-center';\nimport { FConnectionFactory } from '../f-connection-builder';\nimport { F_CONNECTION } from '../common/f-connection.injection-token';\n//TODO: Need to deal with cyclic dependencies, since in some cases an error occurs when importing them ../common\n// TypeError: Class extends value undefined is not a constructor or null\n// at f-connection-for-create.component.ts:34:11\nimport { FConnectionBase } from '../common/f-connection-base';\nimport { castToEnum } from '@foblex/utils';\nimport { FMediator } from '@foblex/mediator';\nimport { AddConnectionToStoreRequest, RemoveConnectionFromStoreRequest } from '../../domain';\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]': 'fId',\n    class: \"f-component f-connection\",\n    '[class.f-connection-selection-disabled]': 'fSelectionDisabled',\n    '[class.f-connection-reassign-disabled]': 'fDraggingDisabled',\n  },\n  providers: [ { provide: F_CONNECTION, useExisting: FConnectionComponent } ],\n})\nexport class FConnectionComponent\n  extends FConnectionBase implements OnInit, OnChanges, OnDestroy {\n\n  @Input('fConnectionId')\n  public override fId: string = `f-connection-${ uniqueId++ }`;\n\n  @Input()\n  public override fText: string = '';\n\n  @Input()\n  public override fTextStartOffset: string = '';\n\n  @Input()\n  public override fStartColor: string = 'black';\n\n  @Input()\n  public override fEndColor: string = 'black';\n\n  @Input()\n  public override fOutputId: any = '';\n\n  @Input()\n  public override fInputId: any = '';\n\n  @Input({ transform: numberAttribute })\n  public override fRadius: number = 8;\n\n  @Input({ transform: numberAttribute })\n  public override fOffset: number = 12;\n\n  @Input({ transform: (value: unknown) => castToEnum(value, 'fBehavior', EFConnectionBehavior) })\n  public override fBehavior: EFConnectionBehavior = EFConnectionBehavior.FIXED;\n\n  @Input()\n  public override fType: EFConnectionType | string = EFConnectionType.STRAIGHT;\n\n  @Input({ alias: 'fReassignDisabled', transform: booleanAttribute })\n  public override fDraggingDisabled: boolean = false;\n\n  @Input({ transform: booleanAttribute })\n  public override fSelectionDisabled: boolean = false;\n\n  @ViewChild('defs', { static: true })\n  public override fDefs!: ElementRef<SVGDefsElement>;\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(FConnectionDragHandleEndComponent, { static: true })\n  public override fDragHandle!: FConnectionDragHandleEndComponent;\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: false })\n  public override fConnectionCenter!: ElementRef<HTMLDivElement>;\n\n  @ContentChildren(FConnectionCenterDirective, { descendants: true })\n  public fConnectionCenters!: QueryList<FConnectionCenterDirective>;\n\n  public override get boundingElement(): HTMLElement | SVGElement {\n    return this.fPath.hostElement;\n  }\n\n  private _fMediator = inject(FMediator);\n\n  constructor(\n    elementReference: ElementRef<HTMLElement>,\n    fConnectionFactory: FConnectionFactory,\n  ) {\n    super(elementReference, fConnectionFactory);\n  }\n\n  public ngOnInit(): void {\n    this._fMediator.execute(new AddConnectionToStoreRequest(this));\n  }\n\n  public ngOnChanges(): void {\n    this._fMediator.execute(new NotifyDataChangedRequest());\n  }\n\n  public ngOnDestroy(): void {\n    this._fMediator.execute(new RemoveConnectionFromStoreRequest(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  <ng-content></ng-content>\n  <g class=\"f-connection-group\">\n    <linearGradient fConnectionGradient></linearGradient>\n    <path fConnectionSelection [attr.d]=\"path\"></path>\n    <g>\n      <path f-connection-path [attr.d]=\"path\"></path>\n      <circle f-connection-drag-handle-end></circle>\n    </g>\n    <text f-connection-text></text>\n  </g>\n</svg>\n<div #fConnectionCenter class=\"f-connection-center\" *ngIf=\"fConnectionCenters.length\">\n  <ng-content select=\"[fConnectionCenter]\"></ng-content>\n</div>\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 '../../i-has-host-element';\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  public abstract orient: 'auto' | 'auto-start-reverse' | string;\n\n  public abstract markerUnits: 'strokeWidth' | 'userSpaceOnUse';\n}\n","import {\n  Directive, ElementRef, inject, Input, OnDestroy, OnInit\n} from \"@angular/core\";\nimport { F_MARKER, FMarkerBase } from './f-marker-base';\nimport { EFMarkerType } from './e-f-marker-type';\nimport { FMediator } from '@foblex/mediator';\nimport { AddConnectionMarkerToStoreRequest, RemoveConnectionMarkerFromStoreRequest } from '../../domain';\n\n@Directive({\n  selector: \"svg[fMarker]\",\n  host: {\n    class: \"f-component f-marker\"\n  },\n  providers: [ { provide: F_MARKER, useExisting: FMarkerDirective } ],\n})\nexport class FMarkerDirective extends FMarkerBase implements OnInit, OnDestroy {\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  @Input()\n  public override type: string = EFMarkerType.START;\n\n  @Input()\n  public override orient: 'auto' | 'auto-start-reverse' | 'calculated' | string = 'auto';\n\n  @Input()\n  public override markerUnits: 'strokeWidth' | 'userSpaceOnUse' = 'strokeWidth';\n\n  private _fMediator = inject(FMediator);\n\n  constructor(\n    private elementReference: ElementRef<HTMLElement>,\n  ) {\n    super();\n    this.hostElement.style.display = 'none';\n  }\n\n  public ngOnInit(): void {\n    this._fMediator.execute(new AddConnectionMarkerToStoreRequest(this));\n  }\n\n  public ngOnDestroy(): void {\n    this._fMediator.execute(new RemoveConnectionMarkerFromStoreRequest(this));\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChildren,\n  ElementRef,\n  inject,\n  Input,\n  numberAttribute,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  QueryList,\n  ViewChild\n} from \"@angular/core\";\nimport {\n  CONNECTION_GRADIENT,\n  CONNECTION_PATH, CONNECTION_TEXT,\n  FConnectionDragHandleEndComponent, FConnectionSelectionComponent, IConnectionGradient,\n  IConnectionPath, IConnectionText,\n} from '../common';\nimport { EFConnectionBehavior } from '../common';\nimport { EFConnectionType } from '../common';\nimport { FConnectionCenterDirective } from '../f-connection-center';\nimport { FConnectionFactory } from '../f-connection-builder';\nimport { NotifyDataChangedRequest } from '../../f-storage';\nimport { F_CONNECTION } from '../common/f-connection.injection-token';\nimport { FConnectionBase } from '../common/f-connection-base';\nimport { castToEnum } from '@foblex/utils';\nimport { FMediator } from '@foblex/mediator';\nimport { AddSnapConnectionToStoreRequest, RemoveSnapConnectionFromStoreRequest } from '../../domain';\n\nlet uniqueId: number = 0;\n\n@Component({\n  selector: \"f-snap-connection\",\n  templateUrl: \"./f-snap-connection.component.html\",\n  styleUrls: [ \"./f-snap-connection.component.scss\" ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"f-component f-connection f-snap-connection\"\n  },\n  providers: [ { provide: F_CONNECTION, useExisting: FSnapConnectionComponent } ],\n})\nexport class FSnapConnectionComponent\n  extends FConnectionBase implements AfterViewInit, OnInit, OnChanges, OnDestroy {\n\n  public override fId: string = `f-snap-connection-${ uniqueId++ }`;\n\n  public override fText: string = '';\n\n  public override fTextStartOffset: string = '';\n\n  @Input()\n  public override fStartColor: string = 'black';\n\n  @Input()\n  public override fEndColor: string = 'black';\n\n  @Input({ transform: numberAttribute })\n  public fSnapThreshold: number = 20;\n\n  public override fOutputId!: string;\n\n  public override fInputId!: string;\n\n  @Input({ transform: numberAttribute })\n  public override fRadius: number = 8;\n\n  @Input({ transform: numberAttribute })\n  public override fOffset: number = 12;\n\n  @Input({ transform: (value: unknown) => castToEnum(value, 'fBehavior', EFConnectionBehavior) })\n  public override fBehavior: EFConnectionBehavior = EFConnectionBehavior.FIXED;\n\n  @Input()\n  public override fType: EFConnectionType | string = EFConnectionType.STRAIGHT;\n\n  public override fDraggingDisabled: boolean = false;\n\n  public override fSelectionDisabled: boolean = false;\n\n  @ViewChild('defs', { static: true })\n  public override fDefs!: ElementRef<SVGDefsElement>;\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(FConnectionDragHandleEndComponent, { static: true })\n  public override fDragHandle!: FConnectionDragHandleEndComponent;\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: false })\n  public override fConnectionCenter!: ElementRef<HTMLDivElement>;\n\n  @ContentChildren(FConnectionCenterDirective, { descendants: true })\n  public fConnectionCenters!: QueryList<FConnectionCenterDirective>;\n\n  public override get boundingElement(): HTMLElement | SVGElement {\n    return this.fPath.hostElement;\n  }\n\n  private _fMediator = inject(FMediator);\n\n  constructor(\n    elementReference: ElementRef<HTMLElement>,\n    fConnectionFactory: FConnectionFactory,\n  ) {\n    super(elementReference, fConnectionFactory);\n  }\n\n  public ngOnInit(): void {\n    this._fMediator.execute(new AddSnapConnectionToStoreRequest(this));\n  }\n\n  public ngAfterViewInit(): void {\n    this.hide();\n  }\n\n  public ngOnChanges(): void {\n    this._fMediator.execute(new NotifyDataChangedRequest());\n  }\n\n  public ngOnDestroy(): void {\n    this._fMediator.execute(new RemoveSnapConnectionFromStoreRequest());\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-end></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\" *ngIf=\"fConnectionCenters.length\">\n  <ng-content select=\"[fConnectionCenter]\"></ng-content>\n</div>\n","import {\n  FConnectionDragHandleEndComponent, FConnectionDragHandleStartComponent,\n  FConnectionGradientComponent, FConnectionPathComponent, FConnectionSelectionComponent,\n  FConnectionTextComponent,\n  FConnectionTextPathDirective\n} from './common';\nimport { FConnectionComponent } from './f-connection';\nimport { FConnectionCenterDirective } from './f-connection-center';\nimport { FConnectionForCreateComponent } from './f-connection-for-create';\nimport { FMarkerDirective } from './f-marker';\nimport { FSnapConnectionComponent } from './f-snap-connection';\n\nexport const F_CONNECTION_PROVIDERS = [\n\n  FConnectionTextComponent,\n  FConnectionTextPathDirective,\n  FConnectionDragHandleStartComponent,\n  FConnectionDragHandleEndComponent,\n  FConnectionGradientComponent,\n  FConnectionPathComponent,\n  FConnectionSelectionComponent,\n\n  FConnectionComponent,\n  FConnectionCenterDirective,\n  FConnectionForCreateComponent,\n  FMarkerDirective,\n  FSnapConnectionComponent\n];\n","import { GetIntersections, ILine, IPoint } from '@foblex/2d';\nimport { CalculateConnectionLineByBehaviorRequest } from './calculate-connection-line-by-behavior.request';\nimport { calculatePositionAfterRotation } from '../../../f-draggable/f-node-rotate/calculate-difference-after-rotation';\n\nexport function floatingBehavior(payload: CalculateConnectionLineByBehaviorRequest): ILine {\n  return _getIntersectionsLine(\n    _fromRoundedRectIntersections(payload),\n    _toRoundedRectIntersections(payload),\n    payload\n  );\n}\n\nfunction _fromRoundedRectIntersections(payload: CalculateConnectionLineByBehaviorRequest) {\n  return GetIntersections.getRoundedRectIntersections(\n    payload.outputRect.gravityCenter, payload.inputRect.gravityCenter, payload.outputRect\n  )[ 0 ];\n}\n\nfunction _toRoundedRectIntersections(payload: CalculateConnectionLineByBehaviorRequest) {\n  return GetIntersections.getRoundedRectIntersections(\n    payload.inputRect.gravityCenter, payload.outputRect.gravityCenter, payload.inputRect\n  )[ 0 ];\n}\n\nfunction _getIntersectionsLine(from: IPoint, to: IPoint, payload: CalculateConnectionLineByBehaviorRequest): ILine {\n  return {\n    point1: from ? from : payload.outputRect.gravityCenter,\n    point2: to ? to : payload.inputRect.gravityCenter\n  };\n}\n","import { ILine, Line } from '@foblex/2d';\nimport { CalculateConnectionLineByBehaviorRequest } from './calculate-connection-line-by-behavior.request';\n\nexport function fixedCenterBehavior(payload: CalculateConnectionLineByBehaviorRequest): ILine {\n  return {\n    point1: payload.outputRect.gravityCenter,\n    point2: payload.inputRect.gravityCenter\n  };\n}\n","import { ILine, IPoint, IRect } from '@foblex/2d';\nimport { CalculateConnectionLineByBehaviorRequest } from './calculate-connection-line-by-behavior.request';\nimport { EFConnectableSide } from '../../../f-connectors';\n\nexport function fixedOutboundBehavior(payload: CalculateConnectionLineByBehaviorRequest): ILine {\n  return {\n    point1: _getPosition(\n      payload.outputRect,\n      payload.outputSide === EFConnectableSide.AUTO ? EFConnectableSide.BOTTOM : payload.outputSide\n    ),\n    point2: _getPosition(\n      payload.inputRect,\n      payload.inputSide === EFConnectableSide.AUTO ? EFConnectableSide.TOP : payload.inputSide\n    )\n  };\n}\n\nfunction _getPosition(rect: IRect, side: EFConnectableSide): IPoint {\n  switch (side) {\n    case EFConnectableSide.TOP:\n      return { x: rect.x + rect.width / 2, y: rect.y };\n    case EFConnectableSide.BOTTOM:\n      return { x: rect.x + rect.width / 2, y: rect.y + rect.height };\n    case EFConnectableSide.LEFT:\n      return { x: rect.x, y: rect.y + rect.height / 2 };\n    case EFConnectableSide.RIGHT:\n      return { x: rect.x + rect.width, y: rect.y + rect.height / 2 };\n    default:\n      throw new Error(`Unknown side: ${ side }`);\n  }\n}\n\n\n\n\n","import { CalculateConnectionLineByBehaviorRequest } from './calculate-connection-line-by-behavior.request';\nimport { Injectable } from '@angular/core';\nimport { EFConnectionBehavior } from '../../../f-connection';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ILine } from '@foblex/2d';\nimport { floatingBehavior } from './floating-behavior';\nimport { fixedCenterBehavior } from './fixed-center-behavior';\nimport { fixedOutboundBehavior } from './fixed-outbound-behavior';\n\n@Injectable()\n@FExecutionRegister(CalculateConnectionLineByBehaviorRequest)\nexport class CalculateConnectionLineByBehaviorExecution\n  implements IExecution<CalculateConnectionLineByBehaviorRequest, ILine> {\n\n  private _handlers = {\n\n    [ EFConnectionBehavior.FLOATING.toString() ]: floatingBehavior,\n\n    [ EFConnectionBehavior.FIXED_CENTER.toString() ]: fixedCenterBehavior,\n\n    [ EFConnectionBehavior.FIXED.toString() ]: fixedOutboundBehavior,\n  }\n\n  public handle(payload: CalculateConnectionLineByBehaviorRequest): ILine {\n    return this._handlers[ payload.behavior ](payload);\n  }\n}\n\n","export class RedrawConnectionsRequest {\n}\n","export class GetNormalizedConnectorRectRequest {\n    constructor(\n        public element: HTMLElement | SVGElement,\n    ) {\n    }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class GetNormalizedPointRequest {\n  constructor(\n    public position: IPoint\n  ) {\n  }\n}\n","import { IPoint, ITransformModel, Point } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { GetNormalizedPointRequest } from './get-normalized-point-request';\nimport { FComponentsStore } from '../../f-storage';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\n\n@Injectable()\n@FExecutionRegister(GetNormalizedPointRequest)\nexport class GetNormalizedPointExecution implements IExecution<GetNormalizedPointRequest, IPoint> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n  // BrowserWindow\n  // +------------------------------------------+\n  // |  F-Flow                                  |\n  // |  +----------------------------------+    |\n  // |  |  F-Canvas (scale: 0.5)           |    |\n  // |  |  +-------------------------+     |    |\n  // |  |  |                         |     |    |\n  // |  |  |   Element               |     |    |\n  // |  |  |   System: (500,300)     |     |    |\n  // |  |  |   Normalize: (200,150)  |     |    |\n  // |  |  |                         |     |    |\n  // |  |  |                         |     |    |\n  // |  |  +-------------------------+     |    |\n  // |  |                                  |    |\n  // |  +----------------------------------+    |\n  // |                                          |\n  // +------------------------------------------+\n  // Transform from the browser window to the canvas coordinates:\n  public handle(request: GetNormalizedPointRequest): IPoint {\n    return Point.fromPoint(request.position)\n      .elementTransform(this._fComponentsStore.flowHost)\n      .sub(this._transform.scaledPosition)\n      .sub(this._transform.position)\n      .div(this._transform.scale);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { GetNormalizedConnectorRectRequest } from './get-normalized-connector-rect-request';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../f-storage';\nimport {\n  IRoundedRect,\n  RoundedRect,\n  IPoint,\n  ISize,\n  SizeExtensions,\n  ITransformModel,\n} from '@foblex/2d';\nimport { GetElementRoundedRectRequest } from '../get-element-rounded-rect';\nimport {GetNormalizedPointRequest} from \"../get-normalized-point\";\n\n@Injectable()\n@FExecutionRegister(GetNormalizedConnectorRectRequest)\nexport class GetNormalizedConnectorRectExecution implements IExecution<GetNormalizedConnectorRectRequest, IRoundedRect> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fMediator = inject(FMediator);\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  public handle(request: GetNormalizedConnectorRectRequest): IRoundedRect {\n    const systemRect = this._getElementRoundedRect(request);\n    const position = this._normalizePosition(systemRect);\n    const unscaledSize = this._unscaleSize(systemRect);\n    const unscaledRect = this._getUnscaledRect(position, unscaledSize, systemRect)\n\n    const offsetSize = this._getOffsetSize(request.element, unscaledSize);\n    return RoundedRect.fromCenter(unscaledRect, offsetSize.width, offsetSize.height);\n  }\n\n  private _getElementRoundedRect(request: GetNormalizedConnectorRectRequest): IRoundedRect {\n    return this._fMediator.execute<IRoundedRect>(\n      new GetElementRoundedRectRequest(request.element)\n    );\n  }\n\n  private _normalizePosition(rect: IRoundedRect): IPoint {\n    return this._fMediator.execute(new GetNormalizedPointRequest(rect));\n  }\n\n  private _unscaleSize(rect: IRoundedRect): ISize {\n    return SizeExtensions.initialize(rect.width / this._transform.scale, rect.height / this._transform.scale);\n  }\n\n  private _getUnscaledRect(position: IPoint, size: ISize, rect: IRoundedRect): IRoundedRect {\n    return new RoundedRect(\n      position.x, position.y, size.width, size.height,\n      rect.radius1, rect.radius2, rect.radius3, rect.radius4\n    )\n  }\n\n  private _getOffsetSize(element: HTMLElement | SVGElement, size: ISize): ISize {\n    return SizeExtensions.offsetFromElement(element) || size\n  }\n}\n","import {ILine, IRoundedRect} from '@foblex/2d';\nimport {inject, Injectable} from '@angular/core';\nimport {RedrawConnectionsRequest} from './redraw-connections-request';\nimport {FComponentsStore} from '../../../f-storage';\nimport {CalculateConnectionLineByBehaviorRequest} from '../calculate-connection-line-by-behavior';\nimport {FConnectorBase} from '../../../f-connectors';\nimport {FConnectionBase} from '../../../f-connection';\nimport {FExecutionRegister, FMediator, IExecution} from '@foblex/mediator';\nimport {CreateConnectionMarkersRequest} from '../create-connection-markers';\nimport {GetNormalizedConnectorRectRequest} from \"../../get-normalized-connector-rect\";\n\n@Injectable()\n@FExecutionRegister(RedrawConnectionsRequest)\nexport class RedrawConnectionsExecution implements IExecution<RedrawConnectionsRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RedrawConnectionsRequest): void {\n    this._resetConnectors();\n\n    if (this._fComponentsStore.fTempConnection) {\n      this._setMarkers(this._fComponentsStore.fTempConnection);\n    }\n\n    if (this._fComponentsStore.fSnapConnection) {\n      this._setMarkers(this._fComponentsStore.fSnapConnection);\n    }\n\n    this._fComponentsStore.fConnections.forEach((x) => {\n      this._setupConnection(this._getOutput(x.fOutputId), this._getInput(x.fInputId), x);\n    });\n  }\n\n  private _getOutput(id: string): FConnectorBase {\n    const result = this._fComponentsStore.fOutputs.find((x) => x.fId === id)!;\n    if (!result) {\n      throw new Error(`Output with id ${id} not found`);\n    }\n    return result;\n  }\n\n  private _getInput(id: string): FConnectorBase {\n    const result = this._fComponentsStore.fInputs.find((x) => x.fId === id)!;\n    if (!result) {\n      throw new Error(`Input with id ${id} not found`);\n    }\n    return result;\n  }\n\n  private _resetConnectors(): void {\n    this._fComponentsStore.fOutputs.forEach((x) => x.resetConnected());\n    this._fComponentsStore.fInputs.forEach((x) => x.resetConnected());\n  }\n\n  private _setupConnection(fOutput: FConnectorBase, fInput: FConnectorBase, fConnection: FConnectionBase): void {\n    fOutput.setConnected(fInput);\n    fInput.setConnected(fOutput);\n\n    const line = this._getLine(fOutput, fInput, fConnection);\n\n    this._setMarkers(fConnection);\n\n    fConnection.setLine(line, fOutput.fConnectableSide, fInput.fConnectableSide);\n\n    fConnection.initialize();\n    fConnection.isSelected() ? fConnection.markAsSelected() : null;\n  }\n\n  private _getLine(output: FConnectorBase, input: FConnectorBase, connection: FConnectionBase): ILine {\n    return this._fMediator.execute(new CalculateConnectionLineByBehaviorRequest(\n        this._fMediator.execute<IRoundedRect>(new GetNormalizedConnectorRectRequest(output.hostElement)),\n        this._fMediator.execute<IRoundedRect>(new GetNormalizedConnectorRectRequest(input.hostElement)),\n        connection.fBehavior,\n        output.fConnectableSide,\n        input.fConnectableSide\n      )\n    );\n  }\n\n  private _setMarkers(connection: FConnectionBase): void {\n    this._fMediator.execute(\n      new CreateConnectionMarkersRequest(connection)\n    );\n  }\n}\n\n","export class RemoveConnectionForCreateFromStoreRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveConnectionForCreateFromStoreRequest } from './remove-connection-for-create-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveConnectionForCreateFromStoreRequest)\nexport class RemoveConnectionForCreateFromStoreExecution implements IExecution<RemoveConnectionForCreateFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveConnectionForCreateFromStoreRequest): void {\n    this._fComponentsStore.fTempConnection = undefined;\n  }\n}\n","import { FConnectionBase } from '../../../f-connection';\n\nexport class RemoveConnectionFromStoreRequest {\n\n    constructor(\n      public fConnection: FConnectionBase\n    ) {\n    }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveConnectionFromStoreRequest } from './remove-connection-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FConnectionBase } from '../../../f-connection/common';\n\n@Injectable()\n@FExecutionRegister(RemoveConnectionFromStoreRequest)\nexport class RemoveConnectionFromStoreExecution implements IExecution<RemoveConnectionFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveConnectionFromStoreRequest): void {\n    this._fComponentsStore.fConnections.splice(this._getIndexOfConnection(request.fConnection), 1);\n    this._fComponentsStore.dataChanged();\n  }\n\n  private _getIndexOfConnection(fConnection: FConnectionBase): number {\n    const result = this._fComponentsStore.fConnections.indexOf(fConnection);\n    if (result === -1) {\n      throw new Error(`Connection not found in store`);\n    }\n    return result;\n  }\n}\n","import { FMarkerBase } from '../../../f-connection';\n\nexport class RemoveConnectionMarkerFromStoreRequest {\n\n  constructor(\n    public fComponent: FMarkerBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveConnectionMarkerFromStoreRequest } from './remove-connection-marker-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveConnectionMarkerFromStoreRequest)\nexport class RemoveConnectionMarkerFromStoreExecution implements IExecution<RemoveConnectionMarkerFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveConnectionMarkerFromStoreRequest): void {\n    this._fComponentsStore.removeComponent(this._fComponentsStore.fMarkers, request.fComponent);\n  }\n}\n","export class RemoveSnapConnectionFromStoreRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveSnapConnectionFromStoreRequest } from './remove-snap-connection-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveSnapConnectionFromStoreRequest)\nexport class RemoveSnapConnectionFromStoreExecution implements IExecution<RemoveSnapConnectionFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveSnapConnectionFromStoreRequest): void {\n    this._fComponentsStore.fSnapConnection = undefined;\n  }\n}\n","import { CreateConnectionMarkersExecution } from './create-connection-markers';\nimport { AddConnectionForCreateToStoreExecution } from './add-connection-for-create-to-store';\nimport { AddConnectionToStoreExecution } from './add-connection-to-store';\nimport { AddSnapConnectionToStoreExecution } from './add-snap-connection-to-store';\nimport { RemoveConnectionForCreateFromStoreExecution } from './remove-connection-for-create-from-store';\nimport { RemoveConnectionFromStoreExecution } from './remove-connection-from-store';\nimport { RemoveSnapConnectionFromStoreExecution } from './remove-snap-connection-from-store';\nimport { AddConnectionMarkerToStoreExecution } from './add-connection-marker-to-store';\nimport { RemoveConnectionMarkerFromStoreExecution } from './remove-connection-marker-from-store';\nimport { RedrawConnectionsExecution } from './redraw-connections';\nimport { CalculateConnectionLineByBehaviorExecution } from './calculate-connection-line-by-behavior';\n\nexport const F_CONNECTION_FEATURES = [\n\n  AddConnectionForCreateToStoreExecution,\n\n  AddConnectionMarkerToStoreExecution,\n\n  AddConnectionToStoreExecution,\n\n  AddSnapConnectionToStoreExecution,\n\n  CreateConnectionMarkersExecution,\n\n  CalculateConnectionLineByBehaviorExecution,\n\n  RedrawConnectionsExecution,\n\n  RemoveConnectionForCreateFromStoreExecution,\n\n  RemoveConnectionFromStoreExecution,\n\n  RemoveConnectionMarkerFromStoreExecution,\n\n  RemoveSnapConnectionFromStoreExecution\n];\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class AddInputToStoreRequest {\n\n  constructor(\n    public fComponent: FConnectorBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddInputToStoreRequest } from './add-input-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddInputToStoreRequest)\nexport class AddInputToStoreExecution implements IExecution<AddInputToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddInputToStoreRequest): void {\n    this._fComponentsStore.addComponent(this._fComponentsStore.fInputs, request.fComponent);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class AddOutletToStoreRequest {\n\n  constructor(\n    public fComponent: FConnectorBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddOutletToStoreRequest } from './add-outlet-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddOutletToStoreRequest)\nexport class AddOutletToStoreExecution implements IExecution<AddOutletToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddOutletToStoreRequest): void {\n    this._fComponentsStore.addComponent(this._fComponentsStore.fOutlets, request.fComponent);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class AddOutputToStoreRequest {\n\n  constructor(\n    public fComponent: FConnectorBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddOutputToStoreRequest } from './add-output-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddOutputToStoreRequest)\nexport class AddOutputToStoreExecution implements IExecution<AddOutputToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddOutputToStoreRequest): void {\n    this._fComponentsStore.addComponent(this._fComponentsStore.fOutputs, request.fComponent);\n  }\n}\n","import { IPoint } from '@foblex/2d';\nimport { IConnectorAndRect } from '../index';\n\nexport class CalculateClosestInputRequest {\n\n  constructor(\n    public position: IPoint,\n    public canBeConnectedInputs: IConnectorAndRect[],\n  ) {\n  }\n}\n","import { CalculateClosestInputRequest } from './calculate-closest-input.request';\nimport { Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { IPoint } from '@foblex/2d';\nimport { IClosestInput } from '../i-closest-input';\nimport { IConnectorAndRect } from '../index';\n\n@Injectable()\n@FExecutionRegister(CalculateClosestInputRequest)\nexport class CalculateClosestInputExecution\n  implements IExecution<CalculateClosestInputRequest, IClosestInput | undefined> {\n\n  public handle(payload: CalculateClosestInputRequest): IClosestInput | undefined {\n    let result: IConnectorAndRect | undefined;\n    let minDistance = Infinity;\n\n    for (const element of payload.canBeConnectedInputs) {\n      const distance = this._distanceToRectangle(payload.position, element);\n\n      if (distance < minDistance) {\n        minDistance = distance;\n        result = element;\n      }\n    }\n\n    return result ? {\n      ...result,\n      distance: minDistance,\n    } : undefined;\n  }\n\n  private _distanceToRectangle(point: IPoint, inputWithRect: IConnectorAndRect): number {\n    const closestX = this._clamp(point.x, inputWithRect.fRect.x, inputWithRect.fRect.x + inputWithRect.fRect.width);\n    const closestY = this._clamp(point.y, inputWithRect.fRect.y, inputWithRect.fRect.y + inputWithRect.fRect.height);\n\n    const dx = point.x - closestX;\n    const dy = point.y - closestY;\n\n    return Math.sqrt(dx * dx + dy * dy);\n  }\n\n  private _clamp(value: number, min: number, max: number): number {\n    return Math.max(min, Math.min(max, value));\n  }\n}\n","import { IPoint, IRoundedRect } from '@foblex/2d';\nimport { IConnectorAndRect } from '../i-connector-and-rect';\n\nexport class FindInputAtPositionRequest {\n\n  constructor(\n    public pointerPosition: IPoint,\n    public toConnectorRect: IRoundedRect,\n    public canBeConnectedInputs: IConnectorAndRect[],\n  ) {\n  }\n}\n","import { IPoint, ITransformModel, Point, RectExtensions } from '@foblex/2d';\nimport { FindInputAtPositionRequest } from './find-input-at-position.request';\nimport { inject, Injectable } from '@angular/core';\nimport { BrowserService } from '@foblex/platform';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FConnectorBase } from '../../../f-connectors';\nimport { FNodeBase } from '../../../f-node';\nimport { FComponentsStore } from '../../../f-storage';\nimport { IClosestInput } from '../i-closest-input';\nimport { CalculateClosestInputRequest } from '../calculate-closest-input';\nimport { FSnapConnectionComponent } from '../../../f-connection';\nimport { IConnectorAndRect } from '../i-connector-and-rect';\n\n@Injectable()\n@FExecutionRegister(FindInputAtPositionRequest)\nexport class FindInputAtPositionExecution\n  implements IExecution<FindInputAtPositionRequest, FConnectorBase | undefined> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n  private _fBrowser = inject(BrowserService);\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow!.hostElement;\n  }\n\n  private get _fNodes(): FNodeBase[] {\n    return this._fComponentsStore.fNodes;\n  }\n\n  private get _fSnapConnection(): FSnapConnectionComponent | undefined {\n    return this._fComponentsStore.fSnapConnection as FSnapConnectionComponent;\n  }\n\n  public handle(payload: FindInputAtPositionRequest): FConnectorBase | undefined {\n    const fInputs = this._findInputsAtPosition(payload,);\n    return fInputs.length > 0 ? fInputs[ 0 ] : undefined;\n  }\n\n  private _findInputsAtPosition(request: FindInputAtPositionRequest): FConnectorBase[] {\n    const result: FConnectorBase[] = [];\n\n    result.push(...this._getConnectableInputsAtPosition(request));\n\n    const fClosestInput = this._calculateClosetInput(request);\n    if (fClosestInput) {\n      result.unshift(fClosestInput.fConnector);\n    }\n\n    const fInput = this._getFirstConnectableInputOfNodeAtPosition(request);\n    if (fInput) {\n      result.push(fInput);\n    }\n\n    return result;\n  }\n\n  private _getConnectableInputsAtPosition(request: FindInputAtPositionRequest): FConnectorBase[] {\n    return request.canBeConnectedInputs.filter((x) => {\n      return RectExtensions.isIncludePoint(x.fRect, this._getPointInFlow(request.pointerPosition));\n    }).map((x) => x.fConnector);\n  }\n\n  private _getPointInFlow(position: IPoint): IPoint {\n    return Point.fromPoint(position)\n      .elementTransform(this._fHost)\n      .sub(this._transform.scaledPosition).sub(this._transform.position)\n      .div(this._transform.scale);\n  }\n\n  //if the closest input is valid, return it\n  private _calculateClosetInput(request: FindInputAtPositionRequest): IClosestInput | undefined {\n    if (!this._fSnapConnection) {\n      return undefined;\n    }\n\n    const fClosestInput = this._fMediator.execute<IClosestInput | undefined>(\n      new CalculateClosestInputRequest(this._getPointInFlow(request.pointerPosition), request.canBeConnectedInputs)\n    );\n\n    return this._isValidClosestInput(fClosestInput) ? fClosestInput : undefined;\n  }\n\n  private _isValidClosestInput(fClosestInput: IClosestInput | undefined): boolean {\n    return !!fClosestInput && fClosestInput.distance < this._fSnapConnection!.fSnapThreshold;\n  }\n\n  //if node placed in position and fConnectOnNode is true, return the first connectable input of the node\n  private _getFirstConnectableInputOfNodeAtPosition(request: FindInputAtPositionRequest): FConnectorBase | undefined {\n    return this._getElementsFromPoint(request.pointerPosition)\n      .map((x) => this._findConnectableNode(x))\n      .filter((x) => !!x)\n      .map((x) => this._findFirstConnectableInputOfNode(request.canBeConnectedInputs, x))\n      .find((x) => !!x);\n  }\n\n  private _getElementsFromPoint(position: IPoint): HTMLElement[] {\n    return this._fBrowser.document.elementsFromPoint(position.x, position.y) as HTMLElement[];\n  }\n\n  private _findConnectableNode(element: HTMLElement): FNodeBase | undefined {\n    return this._fNodes.find((x) => x.isContains(element) && x.fConnectOnNode);\n  }\n\n  private _findFirstConnectableInputOfNode(connectableInputs: IConnectorAndRect[], fNode: FNodeBase): FConnectorBase | undefined {\n    return connectableInputs.find((x) => x.fConnector.fNodeId === fNode.fId)?.fConnector\n  }\n}\n","import { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\n\nexport class GetAllCanBeConnectedInputsAndRectsRequest {\n\n  constructor(\n    public fOutputOrOutlet: FNodeOutputBase | FNodeOutletBase,\n  ) {\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class GetConnectorAndRectRequest {\n\n  constructor(\n    public fConnector: FConnectorBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { GetConnectorAndRectRequest } from './get-connector-and-rect-request';\nimport { IRoundedRect } from '@foblex/2d';\nimport { IConnectorAndRect } from '../i-connector-and-rect';\nimport { FConnectorBase } from '../../../f-connectors';\nimport {GetNormalizedConnectorRectRequest} from \"../../get-normalized-connector-rect\";\n\n@Injectable()\n@FExecutionRegister(GetConnectorAndRectRequest)\nexport class GetConnectorAndRectExecution implements IExecution<GetConnectorAndRectRequest, IConnectorAndRect> {\n\n  private readonly _fMediator = inject(FMediator);\n\n  public handle(request: GetConnectorAndRectRequest): IConnectorAndRect {\n    return {\n      fConnector: request.fConnector,\n      fRect: this._getConnectorRect(request.fConnector)\n    }\n  }\n\n  private _getConnectorRect(fConnector: FConnectorBase): IRoundedRect {\n    return this._fMediator.execute<IRoundedRect>(new GetNormalizedConnectorRectRequest(fConnector.hostElement));\n  }\n}\n","import { GetAllCanBeConnectedInputsAndRectsRequest } from './get-all-can-be-connected-inputs-and-rects.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FConnectorBase, FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\nimport { FComponentsStore } from '../../../f-storage';\nimport { IConnectorAndRect } from '../i-connector-and-rect';\nimport { GetConnectorAndRectRequest } from '../get-connector-and-rect';\n\n@Injectable()\n@FExecutionRegister(GetAllCanBeConnectedInputsAndRectsRequest)\nexport class GetAllCanBeConnectedInputsAndRectsExecution\n  implements IExecution<GetAllCanBeConnectedInputsAndRectsRequest, IConnectorAndRect[]> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n\n  private get _fInputs(): FConnectorBase[] {\n    return this._fComponentsStore.fInputs;\n  }\n\n  public handle(payload: GetAllCanBeConnectedInputsAndRectsRequest): IConnectorAndRect[] {\n    return this._getCanBeConnectedInputs(payload.fOutputOrOutlet).map((x) => {\n      return this._fMediator.execute(new GetConnectorAndRectRequest(x));\n    });\n  }\n\n  private _getCanBeConnectedInputs(fOutputOrOutlet: FNodeOutputBase | FNodeOutletBase): FConnectorBase[] {\n    let fInputs: FConnectorBase[] = [];\n    if (fOutputOrOutlet.canBeConnectedInputs?.length) {\n      fInputs = this._fInputs.filter((x) => fOutputOrOutlet.canBeConnectedInputs.includes(x.fId));\n    } else {\n      fInputs = this._fInputs.filter((x) => x.canBeConnected);\n\n      if(!fOutputOrOutlet.isSelfConnectable) {\n        fInputs = this._filterSelfConnectable(fInputs, fOutputOrOutlet);\n      }\n    }\n    return fInputs;\n  }\n\n  private _filterSelfConnectable(fInputs: FConnectorBase[], fOutputOrOutlet: FConnectorBase): FConnectorBase[] {\n    return fInputs.filter((x) => fOutputOrOutlet.fNodeId !== x.fNodeId);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class MarkAllCanBeConnectedInputsRequest {\n\n  constructor(\n    public fInputs: FConnectorBase[],\n  ) {\n  }\n}\n","import { MarkAllCanBeConnectedInputsRequest } from './mark-all-can-be-connected-inputs.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FConnectorBase } from '../../../f-connectors';\nimport { F_CSS_CLASS } from '../../css-cls';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(MarkAllCanBeConnectedInputsRequest)\nexport class MarkAllCanBeConnectedInputsExecution\n  implements IExecution<MarkAllCanBeConnectedInputsRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(payload: MarkAllCanBeConnectedInputsRequest): void {\n    this._fComponentsStore.flowHost.classList.add(F_CSS_CLASS.DRAG_AND_DROP.CONNECTIONS_DRAGGING);\n    payload.fInputs.forEach((fInput) => this._markCanBeConnectedTo(fInput));\n  }\n\n  private _markCanBeConnectedTo(fInput: FConnectorBase): void {\n    fInput.hostElement.classList.add(F_CSS_CLASS.CONNECTOR.INPUT_CAN_BE_CONNECTED_TO);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class RemoveInputFromStoreRequest {\n\n  constructor(\n    public fComponent: FConnectorBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveInputFromStoreRequest } from './remove-input-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveInputFromStoreRequest)\nexport class RemoveInputFromStoreExecution implements IExecution<RemoveInputFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveInputFromStoreRequest): void {\n    this._fComponentsStore.removeComponent(this._fComponentsStore.fInputs, request.fComponent);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class RemoveOutletFromStoreRequest {\n\n  constructor(\n    public fComponent: FConnectorBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveOutletFromStoreRequest } from './remove-outlet-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveOutletFromStoreRequest)\nexport class RemoveOutletFromStoreExecution implements IExecution<RemoveOutletFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveOutletFromStoreRequest): void {\n    this._fComponentsStore.removeComponent(this._fComponentsStore.fOutlets, request.fComponent);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class RemoveOutputFromStoreRequest {\n\n  constructor(\n    public fComponent: FConnectorBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveOutputFromStoreRequest } from './remove-output-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveOutputFromStoreRequest)\nexport class RemoveOutputFromStoreExecution implements IExecution<RemoveOutputFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveOutputFromStoreRequest): void {\n    this._fComponentsStore.removeComponent(this._fComponentsStore.fOutputs, request.fComponent);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class UnmarkAllCanBeConnectedInputsRequest {\n\n  constructor(\n    public fInputs: FConnectorBase[],\n  ) {\n  }\n}\n","import { UnmarkAllCanBeConnectedInputsRequest } from './unmark-all-can-be-connected-inputs.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FConnectorBase } from '../../../f-connectors';\nimport { F_CSS_CLASS } from '../../css-cls';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(UnmarkAllCanBeConnectedInputsRequest)\nexport class UnmarkAllCanBeConnectedInputsExecution\n  implements IExecution<UnmarkAllCanBeConnectedInputsRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(payload: UnmarkAllCanBeConnectedInputsRequest): void {\n    this._fComponentsStore.flowHost.classList.remove(F_CSS_CLASS.DRAG_AND_DROP.CONNECTIONS_DRAGGING);\n    payload.fInputs.forEach((fInput) => this._unmarkCanBeConnectedTo(fInput));\n  }\n\n  private _unmarkCanBeConnectedTo(fInput: FConnectorBase): void {\n    fInput.hostElement.classList.remove(F_CSS_CLASS.CONNECTOR.INPUT_CAN_BE_CONNECTED_TO);\n  }\n}\n","import { AddInputToStoreExecution } from './add-input-to-store';\nimport { AddOutletToStoreExecution } from './add-outlet-to-store';\nimport { AddOutputToStoreExecution } from './add-output-to-store';\nimport { RemoveInputFromStoreExecution } from './remove-input-from-store';\nimport { RemoveOutletFromStoreExecution } from './remove-outlet-from-store';\nimport { RemoveOutputFromStoreExecution } from './remove-output-from-store';\nimport { MarkAllCanBeConnectedInputsExecution } from './mark-all-can-be-connected-inputs';\nimport { UnmarkAllCanBeConnectedInputsExecution } from './unmark-all-can-be-connected-inputs';\nimport { GetAllCanBeConnectedInputsAndRectsExecution } from './get-all-can-be-connected-inputs-and-rects';\nimport { GetConnectorAndRectExecution } from './get-connector-and-rect';\nimport { CalculateClosestInputExecution } from './calculate-closest-input';\nimport { FindInputAtPositionExecution } from './find-input-at-position';\n\nexport const F_CONNECTORS_FEATURES = [\n\n  AddInputToStoreExecution,\n\n  AddOutletToStoreExecution,\n\n  AddOutputToStoreExecution,\n\n  CalculateClosestInputExecution,\n\n  FindInputAtPositionExecution,\n\n  GetAllCanBeConnectedInputsAndRectsExecution,\n\n  GetConnectorAndRectExecution,\n\n  MarkAllCanBeConnectedInputsExecution,\n\n  RemoveInputFromStoreExecution,\n\n  RemoveOutletFromStoreExecution,\n\n  RemoveOutputFromStoreExecution,\n\n  UnmarkAllCanBeConnectedInputsExecution\n];\n","import { FDraggableBase } from '../../../f-draggable';\n\nexport class AddDndToStoreRequest {\n\n  constructor(\n    public fComponent: FDraggableBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddDndToStoreRequest } from './add-dnd-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddDndToStoreRequest)\nexport class AddDndToStoreExecution implements IExecution<AddDndToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddDndToStoreRequest): void {\n    this._fComponentsStore.fDraggable = request.fComponent;\n  }\n}\n","export class EmitSelectionChangeEventRequest {\n\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class GetNormalizedParentNodeRectRequest {\n\n  constructor(\n    public fNode: FNodeBase\n  ) {\n  }\n}\n","import {inject, Injectable} from '@angular/core';\nimport { GetNormalizedParentNodeRectRequest } from './get-normalized-parent-node-rect.request';\nimport { IRect, RectExtensions } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../f-node';\nimport { FComponentsStore } from '../../../f-storage';\nimport { GetNodePaddingRequest } from '../../../domain';\nimport { GetNormalizedElementRectRequest } from '../../../domain';\n\n@Injectable()\n@FExecutionRegister(GetNormalizedParentNodeRectRequest)\nexport class GetNormalizedParentNodeRectExecution\n  implements IExecution<GetNormalizedParentNodeRectRequest, IRect> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fMediator = inject(FMediator);\n\n  public handle(request: GetNormalizedParentNodeRectRequest): IRect {\n    let result = RectExtensions.initialize(-Infinity, -Infinity, Infinity, Infinity);\n    const parentNode = this._getNode(request.fNode.fParentId);\n    if (parentNode) {\n      result = this._getParentRect(parentNode);\n    }\n    return result;\n  }\n\n  private _getNode(fId?: string | null): FNodeBase | undefined {\n    return this._fComponentsStore.fNodes.find((x) => x.fId === fId);\n  }\n  //   Parent Node\n  // +----------------------------------------+\n  // |  padding-top                           |\n  // |  +----------------------------------+  |\n  // |  |                                  |  |\n  // |  |   Available area for             |  |\n  // |p |   child nodes                    |p |\n  // |a |                                  |a |\n  // |d |   (width - padLeft - padRight)   |d |\n  // |  |                                  |d |\n  // |l |   (height - padTop - padBottom)  |i |\n  // |e |                                  |n |\n  // |f |                                  |g |\n  // |t |                                  |  |\n  // |  |                                  |r |\n  // |  |                                  |i |\n  // |  |                                  |g |\n  // |  |                                  |h |\n  // |  |                                  |t |\n  // |  +----------------------------------+  |\n  // |  padding-bottom                        |\n  // +----------------------------------------+\n  private _getParentRect(node: FNodeBase): IRect {\n    const rect = this._getNodeRect(node);\n    const padding = this._getNodePadding(node, rect);\n    return RectExtensions.initialize(\n      rect.x + padding[ 0 ],\n      rect.y + padding[ 1 ],\n      rect.width - padding[ 0 ] - padding[ 2 ],\n      rect.height - padding[ 1 ] - padding[ 3 ]\n    );\n  }\n\n  private _getNodeRect(fNode: FNodeBase): IRect {\n    return this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(fNode.hostElement));\n  }\n\n  private _getNodePadding(node: FNodeBase, rect: IRect): [ number, number, number, number ] {\n    return this._fMediator.execute<[ number, number, number, number ]>(new GetNodePaddingRequest(node, rect));\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class IsArrayHasParentNodeRequest {\n\n  constructor(\n    public fParentNodes: FNodeBase[],\n    public fDraggedNodes: FNodeBase[]\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IsArrayHasParentNodeRequest } from './is-array-has-parent-node.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../f-node';\n\n@Injectable()\n@FExecutionRegister(IsArrayHasParentNodeRequest)\nexport class IsArrayHasParentNodeExecution\n  implements IExecution<IsArrayHasParentNodeRequest, boolean> {\n\n  public handle(request: IsArrayHasParentNodeRequest): boolean {\n    return this._isParentNodeInArray(this._getParentNodeIds(request.fParentNodes), request.fDraggedNodes);\n  }\n\n  private _getParentNodeIds(fParentNodes: FNodeBase[]): string[] {\n    return fParentNodes.map((x) => x.fId);\n  }\n\n  private _isParentNodeInArray(parentNodeIds: string[], fDraggedNodes: FNodeBase[]): boolean {\n    return fDraggedNodes.some((x) => parentNodeIds.includes(x.fId));\n  }\n}\n\n\n","export class FNodeIntersectedWithConnections {\n\n  constructor(\n    public fNodeId: string,\n    public fConnectionIds: string[],\n  ) {\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class IsConnectionUnderNodeRequest {\n\n  constructor(\n    public fNode: FNodeBase\n  ) {\n  }\n}\n","import { GetIntersections, IRoundedRect } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IsConnectionUnderNodeRequest } from './is-connection-under-node.request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FNodeIntersectedWithConnections } from '../../index';\nimport { FNodeBase } from '../../../f-node';\nimport { FConnectorBase } from '../../../f-connectors';\nimport { FConnectionBase } from '../../../f-connection';\nimport {GetNormalizedConnectorRectRequest, GetNormalizedElementRectRequest} from '../../../domain';\n\n@Injectable()\n@FExecutionRegister(IsConnectionUnderNodeRequest)\nexport class IsConnectionUnderNodeExecution implements IExecution<IsConnectionUnderNodeRequest, void> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: IsConnectionUnderNodeRequest): void {\n\n    const fOutputConnectors = this._getOutputConnectors(request.fNode);\n    const fInputConnectors = this._getInputConnectors(request.fNode);\n\n    if (!fOutputConnectors.length || !fInputConnectors.length) {\n      return;\n    }\n\n    const fOutputConnections = this._getOutputConnectionsId(fOutputConnectors);\n    const fInputConnections = this._getInputConnectionsId(fInputConnectors);\n\n    const fConnectionsUnderNode = this._calculateConnectionsUnderNode(request.fNode).filter((x) => {\n      return !fOutputConnections.includes(x.fId) && !fInputConnections.includes(x.fId);\n    });\n\n    if (!fConnectionsUnderNode.length) {\n      return;\n    }\n\n    this._emitNodeIntersectedWithConnections(request.fNode, fConnectionsUnderNode);\n  }\n\n  private _getOutputConnectors(fNode: FNodeBase): FConnectorBase[] {\n    return this._fComponentsStore.fOutputs.filter((x) => {\n      return fNode.isContains(x.hostElement) && x.canBeConnected;\n    });\n  }\n\n  private _getInputConnectors(fNode: FNodeBase): FConnectorBase[] {\n    return this._fComponentsStore.fInputs.filter((x) => {\n      return fNode.isContains(x.hostElement) && x.canBeConnected;\n    });\n  }\n\n  private _getOutputConnectionsId(connectors: FConnectorBase[]): string[] {\n    const connectorsId = this._getConnectorsId(connectors);\n    return this._fComponentsStore.fConnections\n      .filter((x) => connectorsId.includes(x.fOutputId))\n      .map((x) => x.fId);\n  }\n\n  private _getInputConnectionsId(connectors: FConnectorBase[]): string[] {\n    const connectorsId = this._getConnectorsId(connectors);\n    return this._fComponentsStore.fConnections\n      .filter((x) => connectorsId.includes(x.fInputId))\n      .map((x) => x.fId);\n  }\n\n  private _getConnectorsId(connectors: FConnectorBase[]): string[] {\n    return connectors.map((x) => x.fId);\n  }\n\n  private _calculateConnectionsUnderNode(fNode: FNodeBase): FConnectionBase[] {\n    const fNodeRect = this._fMediator.execute<IRoundedRect>(new GetNormalizedConnectorRectRequest(fNode.hostElement));\n    return this._fComponentsStore.fConnections.filter((x) => this._isConnectionHasIntersectionsWithNode(x, fNodeRect));\n  }\n\n  private _isConnectionHasIntersectionsWithNode(fConnection: FConnectionBase, fNodeRect: IRoundedRect): boolean {\n    return GetIntersections.getRoundedRectIntersectionsWithSVGPath(fConnection.fPath.hostElement, fNodeRect).length > 0;\n  }\n\n  private _emitNodeIntersectedWithConnections(fNode: FNodeBase, fConnections: FConnectionBase[]): void {\n    this._fComponentsStore.fDraggable?.fNodeIntersectedWithConnections.emit(\n      new FNodeIntersectedWithConnections(\n        fNode.fId,\n        fConnections.map((x) => x.fId)\n      )\n    );\n  }\n}\n","export class FDragStartedEvent {\n\n  constructor(\n    public fEventType: string,\n    public fData?: any,\n  ) {\n  }\n}\n","import { IsArrayHasParentNodeExecution } from './is-array-has-parent-node';\nimport { GetNormalizedParentNodeRectExecution } from './get-normalized-parent-node-rect';\nimport { IsConnectionUnderNodeExecution } from './is-connection-under-node';\n\nexport const DRAG_AND_DROP_COMMON_PROVIDERS = [\n\n  GetNormalizedParentNodeRectExecution,\n\n  IsArrayHasParentNodeExecution,\n\n  IsConnectionUnderNodeExecution,\n];\n","import {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FCanvasMoveFinalizeRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Point } from '@foblex/2d';\nimport { IFDragHandler } from './f-drag-handler';\nimport { ISelectable } from '../mixins';\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: IFDragHandler[] = [];\n\n  public reset(): void {\n    this.draggableItems = [];\n    this.onPointerDownScale = 1;\n    this.onPointerDownPosition = new Point(0, 0);\n  }\n\n  public markSelectionAsChanged(): void {\n    this.isSelectedChanged = true;\n  }\n\n  public isEmpty(): boolean {\n    return !this.draggableItems.length;\n  }\n}\n","import { IPoint, Point, PointExtensions } from '@foblex/2d';\nimport { IFDragHandler } from '../f-drag-handler';\nimport { FComponentsStore } from '../../f-storage';\nimport { Injector } from '@angular/core';\n\nexport class FCanvasDragHandler implements IFDragHandler {\n\n  public fEventType = 'canvas-move';\n\n  private readonly _fComponentsStore: FComponentsStore;\n  private _onPointerDownPosition: IPoint = PointExtensions.initialize();\n\n  constructor(\n    _injector: Injector,\n  ) {\n    this._fComponentsStore = _injector.get(FComponentsStore);\n  }\n\n  public prepareDragSequence(): void {\n    this._onPointerDownPosition = this._fComponentsStore.fCanvas!.transform.position;\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    this._fComponentsStore.fCanvas!.setPosition(Point.fromPoint(this._onPointerDownPosition).add(difference));\n    this._fComponentsStore.fCanvas!.redraw();\n  }\n\n  public onPointerUp(): void {\n    this._fComponentsStore.fCanvas!.emitCanvasChangeEvent();\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FCanvasMoveFinalizeRequest } from './f-canvas-move-finalize.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FCanvasDragHandler } from '../f-canvas.drag-handler';\n\n@Injectable()\n@FExecutionRegister(FCanvasMoveFinalizeRequest)\nexport class FCanvasMoveFinalizeExecution implements IExecution<FCanvasMoveFinalizeRequest, void> {\n\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(request: FCanvasMoveFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    this._fDraggableDataContext.draggableItems.forEach((x) => x.onPointerUp?.());\n  }\n\n  private _isValid(): boolean {\n    return this._fDraggableDataContext.draggableItems.some(\n      (x) => x instanceof FCanvasDragHandler\n    );\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FCanvasMovePreparationRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public fTrigger: FEventTrigger\n  ) {\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { FCanvasMovePreparationRequest } from './f-canvas-move-preparation.request';\nimport { Point } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FCanvasDragHandler } from '../f-canvas.drag-handler';\nimport { FNodeBase } from '../../../f-node';\nimport { isValidEventTrigger } from '../../../domain';\n\n@Injectable()\n@FExecutionRegister(FCanvasMovePreparationRequest)\nexport class FCanvasMovePreparationExecution implements IExecution<FCanvasMovePreparationRequest, void> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n  private readonly _injector = inject(Injector);\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow!.hostElement;\n  }\n\n  public handle(request: FCanvasMovePreparationRequest): void {\n    if (!this._isValid(request) || !this._isValidTrigger(request)) {\n      return;\n    }\n    this._fDraggableDataContext.onPointerDownScale = 1;\n    this._fDraggableDataContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost);\n    this._fDraggableDataContext.draggableItems = [ new FCanvasDragHandler(this._injector) ];\n  }\n\n  private _isValid(request: FCanvasMovePreparationRequest): boolean {\n    return this._fDraggableDataContext.isEmpty() &&\n      (this._isBackgroundElement(request.event.targetElement) || this._isDragOnHost(request.event.targetElement));\n  }\n\n  private _isBackgroundElement(targetElement: HTMLElement): boolean | undefined {\n    return this._fComponentsStore.fBackground?.hostElement.contains(targetElement);\n  }\n\n  private _isDragOnHost(targetElement: HTMLElement): boolean {\n    return this._fHost.contains(targetElement) && !this._getNode(targetElement);\n  }\n\n  private _getNode(targetElement: HTMLElement): FNodeBase | undefined {\n    let result = this._fComponentsStore.fNodes\n      .find(x => x.isContains(targetElement));\n    if (result && result.fDraggingDisabled) {\n      result = undefined;\n    }\n    return result;\n  }\n\n  private _isValidTrigger(request: FCanvasMovePreparationRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n}\n","import { FCanvasMovePreparationExecution } from './move-preparation';\nimport { FCanvasMoveFinalizeExecution } from './move-finalize';\n\nexport const CANVAS_PROVIDERS = [\n\n  FCanvasMoveFinalizeExecution,\n\n  FCanvasMovePreparationExecution,\n];\n","import {IPointerEvent} from \"../../../../drag-toolkit\";\n\nexport class FCreateConnectionFinalizeRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import { FNodeOutletBase } from '../../../../f-connectors';\n\nexport class GetFirstConnectableOutputRequest {\n\n  constructor(\n    public fOutlet: FNodeOutletBase\n  ) {\n  }\n}\n","import { IHandler } from '@foblex/mediator';\nimport { inject, Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FConnectorBase, FNodeOutletBase } from '../../../../f-connectors';\nimport { FNodeBase } from '../../../../f-node';\nimport { GetFirstConnectableOutputRequest } from './get-first-connectable-output.request';\nimport { FExecutionRegister } from '@foblex/mediator';\n\n@Injectable()\n@FExecutionRegister(GetFirstConnectableOutputRequest)\nexport class GetFirstConnectableOutputExecution\n  implements IHandler<GetFirstConnectableOutputRequest, FConnectorBase | undefined> {\n\n  private readonly _fComponentStore = inject(FComponentsStore);\n\n  private get _fNodes(): FNodeBase[] {\n    return this._fComponentStore.fNodes;\n  }\n\n  private get _fOutputs(): FConnectorBase[] {\n    return this._fComponentStore.fOutputs;\n  }\n\n  private _fNode: FNodeBase | undefined;\n\n  public handle(request: GetFirstConnectableOutputRequest): FConnectorBase | undefined {\n    if(!this._isValid(request)) {\n      return;\n    }\n\n    const fOutputs = this._getConnectableOutputs();\n    if(!fOutputs.length) {\n      throw new Error('The fNode must contain at least one fOutput if there is an fOutlet')\n    }\n    return fOutputs[0];\n  }\n\n  private _isValid(request: GetFirstConnectableOutputRequest): boolean {\n    return !!this._getNode(request.fOutlet);\n  }\n\n  private _getNode(fOutlet: FNodeOutletBase): FNodeBase {\n    this._fNode = this._fNodes.find((x) => x.isContains(fOutlet.hostElement))!;\n    return this._fNode;\n  }\n\n  private _getConnectableOutputs(): FConnectorBase[] {\n    return this._fOutputs\n      .filter((x) => this._fNode!.isContains(x.hostElement) && x.canBeConnected);\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class FCreateConnectionEvent {\n\n  constructor(\n    public fOutputId: string,\n    public fInputId: string | undefined,\n    public fDropPosition: IPoint,\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class FDragHandlerResult<T> {\n\n  private _data: T | undefined;\n\n  public setData(data: Partial<T>): void {\n    this._data = { ...this._data, ...data } as T;\n  }\n\n  public getData(): T {\n    return this._data!;\n  }\n\n  public clear(): void {\n    this._data = undefined;\n  }\n}\n","import { FDragHandlerResult, IFDragHandler } from '../../f-drag-handler';\nimport {\n  CalculateClosestInputRequest,\n  GetAllCanBeConnectedInputsAndRectsRequest,\n  CalculateConnectionLineByBehaviorRequest,\n  GetConnectorAndRectRequest,\n  IConnectorAndRect, IClosestInput, MarkAllCanBeConnectedInputsRequest, UnmarkAllCanBeConnectedInputsRequest\n} from '../../../domain';\nimport { FConnectionBase, FSnapConnectionComponent } from '../../../f-connection';\nimport {\n  EFConnectableSide, FNodeOutletBase,\n  FNodeOutputBase,\n} from '../../../f-connectors';\nimport { FMediator } from '@foblex/mediator';\nimport { RoundedRect, ILine, IPoint, PointExtensions, RectExtensions, IRoundedRect } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\nimport { IFCreateConnectionDragResult } from './i-f-create-connection-drag-result';\nimport { Injector } from '@angular/core';\n\nexport class FCreateConnectionDragHandler implements IFDragHandler {\n\n  public fEventType = 'create-connection';\n  public fData: any;\n\n  private readonly _fResult: FDragHandlerResult<IFCreateConnectionDragResult>;\n  private readonly _fMediator: FMediator;\n  private readonly _fComponentsStore: FComponentsStore;\n\n  private readonly _toConnectorRect = new RoundedRect();\n\n  private get _fConnection(): FConnectionBase {\n    return this._fComponentsStore.fTempConnection!;\n  }\n\n  private get _fSnapConnection(): FSnapConnectionComponent | undefined {\n    return this._fComponentsStore.fSnapConnection as FSnapConnectionComponent;\n  }\n\n  private _fOutputWithRect!: IConnectorAndRect;\n\n  private _canBeConnectedInputs: IConnectorAndRect[] = [];\n\n  constructor(\n    _injector: Injector,\n    private _fOutputOrOutlet: FNodeOutputBase | FNodeOutletBase,\n    _onPointerDownPosition: IPoint,\n  ) {\n    this._fResult = _injector.get(FDragHandlerResult);\n    this._fMediator = _injector.get(FMediator);\n    this._fComponentsStore = _injector.get(FComponentsStore);\n\n    this._toConnectorRect = RoundedRect.fromRect(\n      RectExtensions.initialize(_onPointerDownPosition.x, _onPointerDownPosition.y)\n    );\n    this.fData = {\n      fOutputOrOutletId: this._fOutputOrOutlet.fId,\n    };\n  }\n\n  public prepareDragSequence(): void {\n    this._getAndMarkCanBeConnectedInputs();\n    this._initializeSnapConnection();\n    this._initializeConnectionForCreate();\n\n    this._fOutputWithRect = this._fMediator.execute<IConnectorAndRect>(new GetConnectorAndRectRequest(this._fOutputOrOutlet));\n\n    this._fConnection.show();\n    this.onPointerMove(PointExtensions.initialize());\n\n    this._fResult.setData({\n      toConnectorRect: this._toConnectorRect,\n      canBeConnectedInputs: this._canBeConnectedInputs,\n      fOutputId: this._fOutputOrOutlet.fId,\n    });\n  }\n\n  private _getAndMarkCanBeConnectedInputs(): void {\n    this._canBeConnectedInputs = this._fMediator.execute<IConnectorAndRect[]>(\n      new GetAllCanBeConnectedInputsAndRectsRequest(this._fOutputOrOutlet)\n    );\n\n    this._fMediator.execute(\n      new MarkAllCanBeConnectedInputsRequest(this._canBeConnectedInputs.map((x) => x.fConnector))\n    );\n  }\n\n  private _initializeSnapConnection(): void {\n    if (!this._fSnapConnection) {\n      return;\n    }\n    this._fSnapConnection.fOutputId = this._fOutputOrOutlet.fId;\n    this._fSnapConnection.initialize();\n  }\n\n  private _initializeConnectionForCreate(): void {\n    this._fConnection.fOutputId = this._fOutputOrOutlet.fId;\n    this._fConnection.initialize();\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const fClosestInput = this._findClosestInput(difference);\n\n    this._drawConnectionForCreate(\n      this._toConnectorRect.addPoint(difference),\n      fClosestInput?.fConnector.fConnectableSide || EFConnectableSide.TOP\n    );\n\n    if (this._fSnapConnection) {\n      this._drawSnapConnection(this._getClosestInputForSnapConnection(fClosestInput));\n    }\n  }\n\n  private _drawConnectionForCreate(toConnectorRect: IRoundedRect, fSide: EFConnectableSide): void {\n    const line = this._fMediator.execute<ILine>(new CalculateConnectionLineByBehaviorRequest(\n        this._fOutputWithRect.fRect,\n        toConnectorRect,\n        this._fConnection.fBehavior,\n        this._fOutputWithRect.fConnector.fConnectableSide,\n        fSide\n      )\n    );\n\n    this._fConnection.setLine(line, this._fOutputWithRect.fConnector.fConnectableSide, fSide);\n    this._fConnection.redraw();\n  }\n\n  private _drawSnapConnection(fClosestInput: IClosestInput | undefined): void {\n    if (fClosestInput) {\n      const line = this._fMediator.execute<ILine>(new CalculateConnectionLineByBehaviorRequest(\n          this._fOutputWithRect.fRect,\n          fClosestInput.fRect,\n          this._fSnapConnection!.fBehavior,\n          this._fOutputWithRect.fConnector.fConnectableSide,\n          fClosestInput.fConnector.fConnectableSide\n        )\n      );\n      this._fSnapConnection!.show();\n      this._fSnapConnection!.setLine(line, this._fOutputWithRect.fConnector.fConnectableSide, fClosestInput.fConnector.fConnectableSide);\n      this._fSnapConnection!.redraw();\n    } else {\n      this._fSnapConnection?.hide();\n    }\n  }\n\n  private _findClosestInput(difference: IPoint): IClosestInput | undefined {\n    return this._fMediator.execute<IClosestInput | undefined>(\n      new CalculateClosestInputRequest(\n        this._toConnectorRect.addPoint(difference),\n        this._canBeConnectedInputs,\n      )\n    );\n  }\n\n  private _getClosestInputForSnapConnection(fClosestInput: IClosestInput | undefined): IClosestInput | undefined {\n    return fClosestInput && fClosestInput.distance < this._fSnapConnection!.fSnapThreshold ? fClosestInput : undefined;\n  }\n\n  public onPointerUp(): void {\n    this._fConnection.redraw();\n    this._fConnection.hide();\n    this._fSnapConnection?.hide();\n\n    this._fMediator.execute(\n      new UnmarkAllCanBeConnectedInputsRequest(this._canBeConnectedInputs.map((x) => x.fConnector))\n    );\n  }\n}\n","import { IHandler } from '@foblex/mediator';\nimport { inject, Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FConnectorBase, FNodeOutletBase, FNodeOutputBase, isNodeOutlet } from '../../../../f-connectors';\nimport { FCreateConnectionFinalizeRequest } from './f-create-connection-finalize.request';\nimport { FExecutionRegister, FMediator } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../../f-draggable-data-context';\nimport { GetFirstConnectableOutputRequest } from '../get-first-connectable-output';\nimport { FCreateConnectionEvent } from '../f-create-connection.event';\nimport { FCreateConnectionDragHandler } from '../f-create-connection.drag-handler';\nimport { FindInputAtPositionRequest } from '../../../../domain';\nimport { FDragHandlerResult } from '../../../f-drag-handler';\nimport { IFCreateConnectionDragResult } from '../i-f-create-connection-drag-result';\nimport {IPointerEvent} from \"../../../../drag-toolkit\";\n\n@Injectable()\n@FExecutionRegister(FCreateConnectionFinalizeRequest)\nexport class FCreateConnectionFinalizeExecution\n  implements IHandler<FCreateConnectionFinalizeRequest, void> {\n\n  private _fResult: FDragHandlerResult<IFCreateConnectionDragResult> = inject(FDragHandlerResult);\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  private get _fDragHandler(): FCreateConnectionDragHandler {\n    return this._fDraggableDataContext.draggableItems[ 0 ] as FCreateConnectionDragHandler;\n  }\n\n  public handle(request: FCreateConnectionFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    this.emitEvent(request.event);\n    this._fDragHandler.onPointerUp();\n  }\n\n  private _isValid(): boolean {\n    return this._fDraggableDataContext.draggableItems.some(\n      (x) => x instanceof FCreateConnectionDragHandler\n    );\n  }\n\n  private getTargetOutput(output: FConnectorBase | undefined): FConnectorBase {\n    if (!output) {\n      throw new Error(`Output with fOutputId ${ this._fResult.getData().fOutputId } not found. Make sure there is no f-connection to a non-existent fOutput.`);\n    }\n    return isNodeOutlet(output.hostElement) ? this._fMediator.execute<FNodeOutputBase>(\n      new GetFirstConnectableOutputRequest(output as FNodeOutletBase)\n    ) : output;\n  }\n\n  private getOutput(): FConnectorBase | undefined {\n    return this._fComponentsStore.fOutputs.find((x) => x.fId === this._fResult.getData().fOutputId);\n  }\n\n  private getOutlet(): FConnectorBase | undefined {\n    return this._fComponentsStore.fOutlets.find((x) => x.fId === this._fResult.getData().fOutputId);\n  }\n\n  private emitEvent(event: IPointerEvent): void {\n    this._fComponentsStore.fDraggable?.fCreateConnection.emit(\n      new FCreateConnectionEvent(\n        this.getTargetOutput(this.getOutput() || this.getOutlet()).fId,\n        this._getInputUnderPointer(event)?.fId,\n        event.getPosition()\n      )\n    );\n  }\n\n  private _getInputUnderPointer(event: IPointerEvent): FConnectorBase | undefined {\n    return this._fMediator.execute<FConnectorBase | undefined>(\n      new FindInputAtPositionRequest(\n        event.getPosition(),\n        this._fResult.getData().toConnectorRect,\n        this._fResult.getData().canBeConnectedInputs\n      )\n    );\n  }\n}\n","import { IPoint } from '@foblex/2d';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../../../f-connectors';\n\nexport class FCreateConnectionDragHandlerPreparationRequest {\n\n  constructor(\n    public onPointerDownPosition: IPoint,\n    public fOutputOrOutlet: FNodeOutputBase | FNodeOutletBase\n  ) {\n  }\n}\n","import { ITransformModel, Point } from '@foblex/2d';\nimport { IHandler } from '@foblex/mediator';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { FCreateConnectionDragHandlerPreparationRequest } from './f-create-connection-drag-handler-preparation.request';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { FExecutionRegister } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../../../f-draggable-data-context';\nimport { FCreateConnectionDragHandler } from '../../f-create-connection.drag-handler';\n\n@Injectable()\n@FExecutionRegister(FCreateConnectionDragHandlerPreparationRequest)\nexport class FCreateConnectionDragHandlerPreparationExecution\n  implements IHandler<FCreateConnectionDragHandlerPreparationRequest, void> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n  private readonly _injector = inject(Injector);\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow!.hostElement;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  public handle(request: FCreateConnectionDragHandlerPreparationRequest): void {\n    this._fDraggableDataContext.onPointerDownScale = this._transform.scale;\n    const positionRelativeToFlowComponent = Point.fromPoint(request.onPointerDownPosition)\n      .elementTransform(this._fHost).div(this._transform.scale);\n    this._fDraggableDataContext.onPointerDownPosition = positionRelativeToFlowComponent;\n\n    const positionRelativeToCanvasComponent = Point.fromPoint(positionRelativeToFlowComponent).mult(this._transform.scale)\n      .sub(this._transform.position).sub(this._transform.scaledPosition).div(this._transform.scale);\n\n    this._fDraggableDataContext.draggableItems = [\n      new FCreateConnectionDragHandler(\n        this._injector, request.fOutputOrOutlet, positionRelativeToCanvasComponent\n      )\n    ];\n  }\n}\n","import { FNodeBase } from '../../../../../f-node';\nimport {IPointerEvent} from \"../../../../../drag-toolkit\";\n\nexport class FCreateConnectionFromOutletPreparationRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public fNode: FNodeBase\n  ) {\n  }\n}\n","import { IHandler } from '@foblex/mediator';\nimport { IPoint } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { FCreateConnectionFromOutletPreparationRequest } from './f-create-connection-from-outlet-preparation.request';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { FExecutionRegister, FMediator } from '@foblex/mediator';\nimport {\n  FConnectorBase,\n  FNodeOutletBase,\n  FNodeOutputBase,\n} from '../../../../../f-connectors';\nimport { GetFirstConnectableOutputRequest } from '../../get-first-connectable-output';\nimport { FCreateConnectionDragHandlerPreparationRequest } from '../drag-handler-preparation';\nimport { FNodeBase } from '../../../../../f-node';\n\n@Injectable()\n@FExecutionRegister(FCreateConnectionFromOutletPreparationRequest)\nexport class FCreateConnectionFromOutletPreparationExecution\n  implements IHandler<FCreateConnectionFromOutletPreparationRequest, void> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: FCreateConnectionFromOutletPreparationRequest): void {\n\n    const fOutlet = this._getNodeOutlet(request.fNode);\n    const fOutputs = this._getNodeOutputs(request.fNode);\n\n    fOutlet.setOutputs(fOutputs);\n\n    if (!fOutlet.canBeConnected) {\n      return;\n    }\n\n    if (fOutlet.isConnectionFromOutlet) {\n      this._createDragHandler(request.event.getPosition(), fOutlet);\n    } else {\n      this._createDragHandler(request.event.getPosition(), this._getConnectableOutput(fOutlet));\n    }\n  }\n\n  private _getNodeOutlet(fNode: FNodeBase): FNodeOutletBase {\n    const result = this._fComponentsStore.fOutlets\n      .find((x) => fNode.isContains(x.hostElement));\n    if (!result) {\n      throw new Error('Outlet not found');\n    }\n    return result as FNodeOutletBase;\n  }\n\n  private _getNodeOutputs(fNode: FNodeBase): FConnectorBase[] {\n    return this._fComponentsStore.fOutputs\n      .filter((x) => fNode.isContains(x.hostElement));\n  }\n\n  private _createDragHandler(position: IPoint, fOutputOrOutlet: FNodeOutputBase | FNodeOutletBase): void {\n    this._fMediator.execute(new FCreateConnectionDragHandlerPreparationRequest(position, fOutputOrOutlet));\n  }\n\n  private _getConnectableOutput(fOutlet: FNodeOutletBase): FNodeOutputBase {\n    return this._fMediator.execute<FNodeOutputBase>(new GetFirstConnectableOutputRequest(fOutlet));\n  }\n}\n","import { FNodeBase } from '../../../../../f-node';\nimport {IPointerEvent} from \"../../../../../drag-toolkit\";\n\nexport class FCreateConnectionFromOutputPreparationRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public fNode: FNodeBase\n  ) {\n  }\n}\n","import { IHandler } from '@foblex/mediator';\nimport { inject, Injectable } from '@angular/core';\nimport { FCreateConnectionFromOutputPreparationRequest } from './f-create-connection-from-output-preparation.request';\nimport { FConnectorBase, FNodeOutputBase, isNodeOutput } from '../../../../../f-connectors';\nimport { FCreateConnectionDragHandlerPreparationRequest } from '../drag-handler-preparation';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { FExecutionRegister, FMediator } from '@foblex/mediator';\nimport { FNodeBase } from '../../../../../f-node';\n\n@Injectable()\n@FExecutionRegister(FCreateConnectionFromOutputPreparationRequest)\nexport class FCreateConnectionFromOutputPreparationExecution\n  implements IHandler<FCreateConnectionFromOutputPreparationRequest, void> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: FCreateConnectionFromOutputPreparationRequest): void {\n    if(!this._isValid(request)) {\n      return;\n    }\n    const fOutput = this._getOutput(request.event.targetElement);\n\n    if (fOutput.canBeConnected) {\n      this._fMediator.execute(\n        new FCreateConnectionDragHandlerPreparationRequest(request.event.getPosition(), fOutput)\n      );\n    }\n  }\n\n  private _isValid(request: FCreateConnectionFromOutputPreparationRequest): boolean {\n    return this._isNodeOutput(request.event.targetElement, request.fNode);\n  }\n\n  private _isNodeOutput(element: HTMLElement, fNode: FNodeBase): boolean {\n    return isNodeOutput(element) && !this._getNodeOutlets(fNode).length;\n  }\n\n  private _getNodeOutlets(node: FNodeBase): FConnectorBase[] {\n    return this._fComponentsStore.fOutlets\n      .filter((x) => node.isContains(x.hostElement));\n  }\n\n  private _getOutput(element: Element): FNodeOutputBase {\n    const result = this._fComponentsStore.fOutputs\n      .find((x) => x.hostElement.contains(element));\n    if (!result) {\n      throw new Error('Output not found');\n    }\n    return result as FNodeOutputBase;\n  }\n}\n","import { FEventTrigger } from '../../../../domain';\nimport {IPointerEvent} from \"../../../../drag-toolkit\";\n\nexport class FCreateConnectionPreparationRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public fTrigger: FEventTrigger\n  ) {\n  }\n}\n","import { IHandler } from '@foblex/mediator';\nimport { inject, Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { isNodeOutlet, isNodeOutput } from '../../../../f-connectors';\nimport { FNodeBase } from '../../../../f-node';\nimport { FCreateConnectionPreparationRequest } from './f-create-connection-preparation.request';\nimport { FExecutionRegister, FMediator } from '@foblex/mediator';\nimport { FCreateConnectionFromOutletPreparationRequest } from './from-outlet-preparation';\nimport { FCreateConnectionFromOutputPreparationRequest } from './from-output-preparation';\nimport { FDraggableDataContext } from '../../../f-draggable-data-context';\nimport { FReassignConnectionPreparationRequest } from '../../f-reassign-connection';\nimport { isValidEventTrigger } from '../../../../domain';\nimport {IPointerEvent} from \"../../../../drag-toolkit\";\n\n@Injectable()\n@FExecutionRegister(FCreateConnectionPreparationRequest)\nexport class FCreateConnectionPreparationExecution\n  implements IHandler<FCreateConnectionPreparationRequest, void> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  private _fNode: FNodeBase | undefined;\n\n  public handle(request: FCreateConnectionPreparationRequest): void {\n    if (!this._isValid(request) || !this._isValidTrigger(request)) {\n      return;\n    }\n\n    if (isNodeOutlet(request.event.targetElement)) {\n      this._fMediator.execute<void>(\n        new FCreateConnectionFromOutletPreparationRequest(request.event, this._fNode!)\n      );\n    } else if (isNodeOutput(request.event.targetElement)) {\n      this._fMediator.execute<void>(\n        new FCreateConnectionFromOutputPreparationRequest(request.event, this._fNode!)\n      );\n    }\n  }\n\n  private _isValid(request: FCreateConnectionPreparationRequest): boolean {\n    return !!this._getNode(request.event) && this._isValidConditions();\n  }\n\n  private _getNode(event: IPointerEvent): FNodeBase | undefined {\n    this._fNode = this._fComponentsStore\n      .fNodes.find(n => n.isContains(event.targetElement));\n    return this._fNode;\n  }\n\n  private _isValidConditions(): boolean {\n    return this._fDraggableDataContext.isEmpty() && !!this._fComponentsStore.fTempConnection;\n  }\n\n  private _isValidTrigger(request: FReassignConnectionPreparationRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n}\n","import {IPointerEvent} from \"../../../../drag-toolkit\";\n\nexport class FReassignConnectionFinalizeRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import { FDragHandlerResult, IFDragHandler } from '../../f-drag-handler';\nimport {\n  CalculateClosestInputRequest,\n  GetAllCanBeConnectedInputsAndRectsRequest,\n  CalculateConnectionLineByBehaviorRequest, GetConnectorAndRectRequest,\n  IConnectorAndRect, IClosestInput, MarkAllCanBeConnectedInputsRequest, UnmarkAllCanBeConnectedInputsRequest\n} from '../../../domain';\nimport { FConnectionBase, FSnapConnectionComponent } from '../../../f-connection';\nimport { EFConnectableSide, FConnectorBase, FNodeOutputDirective } from '../../../f-connectors';\nimport { ILine, IPoint, RectExtensions, RoundedRect } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { IFReassignConnectionDragResult } from './i-f-reassign-connection-drag-result';\nimport { Injector } from '@angular/core';\n\nexport class FReassignConnectionDragHandler implements IFDragHandler {\n\n  public fEventType = 'reassign-connection';\n  public fData: any;\n\n  private readonly _fResult: FDragHandlerResult<IFReassignConnectionDragResult>;\n  private readonly _fMediator: FMediator;\n  private readonly _fComponentsStore: FComponentsStore;\n\n  private readonly _toConnectorRect = new RoundedRect();\n\n  private get _fSnapConnection(): FSnapConnectionComponent | undefined {\n    return this._fComponentsStore.fSnapConnection as FSnapConnectionComponent;\n  }\n\n  private _fOutputWithRect!: IConnectorAndRect;\n  private _fInputWithRect!: IConnectorAndRect;\n\n  private _canBeConnectedInputs: IConnectorAndRect[] = [];\n\n  private get _fOutput(): FConnectorBase {\n    const result = this._fComponentsStore.fOutputs.find((x) => x.fId === this._fConnection.fOutputId);\n    if (!result) {\n      throw new Error('Connection output not found');\n    }\n    return result;\n  }\n\n  private get _fInput(): FConnectorBase {\n    const result = this._fComponentsStore.fInputs.find((x) => x.fId === this._fConnection.fInputId);\n    if (!result) {\n      throw new Error('Connection input not found');\n    }\n    return result;\n  }\n\n  constructor(\n    _injector: Injector,\n    private _fConnection: FConnectionBase,\n  ) {\n    this._fResult = _injector.get(FDragHandlerResult);\n    this._fMediator = _injector.get(FMediator);\n    this._fComponentsStore = _injector.get(FComponentsStore);\n\n    this._toConnectorRect = RoundedRect.fromRect(\n      RectExtensions.initialize(this._fConnection.line.point2.x, this._fConnection.line.point2.y)\n    );\n    this.fData = {\n      fConnectionId: this._fConnection.fId\n    };\n  }\n\n  public prepareDragSequence(): void {\n    this._getAndMarkCanBeConnectedInputs();\n    this._initializeSnapConnection();\n\n    this._fOutputWithRect = this._fMediator.execute<IConnectorAndRect>(new GetConnectorAndRectRequest(this._fOutput));\n    this._fInputWithRect = this._fMediator.execute<IConnectorAndRect>(new GetConnectorAndRectRequest(this._fInput));\n\n    this._fResult.setData({\n      toConnectorRect: this._toConnectorRect,\n      canBeConnectedInputs: this._canBeConnectedInputs,\n      fConnection: this._fConnection\n    });\n  }\n\n  private _getAndMarkCanBeConnectedInputs(): void {\n    this._canBeConnectedInputs = this._fMediator.execute<IConnectorAndRect[]>(\n      new GetAllCanBeConnectedInputsAndRectsRequest(this._fOutput as FNodeOutputDirective)\n    );\n\n    this._fMediator.execute(\n      new MarkAllCanBeConnectedInputsRequest(this._canBeConnectedInputs.map((x) => x.fConnector))\n    );\n  }\n\n  private _initializeSnapConnection(): void {\n    if (!this._fSnapConnection) {\n      return;\n    }\n    this._fSnapConnection.fOutputId = this._fConnection.fOutputId;\n    this._fSnapConnection.initialize();\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const fClosestInput = this._findClosestInput(difference);\n\n    this._drawConnection(\n      this._toConnectorRect.addPoint(difference),\n      fClosestInput?.fConnector.fConnectableSide || this._fInputWithRect.fConnector.fConnectableSide\n    );\n    if (this._fSnapConnection) {\n      this._drawSnapConnection(this._getClosestInputForSnapConnection(fClosestInput));\n    }\n  }\n\n  private _drawConnection(difference: IPoint, fSide: EFConnectableSide): void {\n    const line = this._getLineToPointer(difference, fSide);\n    this._fConnection.setLine(line, this._fOutputWithRect.fConnector.fConnectableSide, fSide);\n    this._fConnection.redraw();\n  }\n\n  private _getLineToPointer(difference: IPoint, fSide: EFConnectableSide): ILine {\n    return this._fMediator.execute<ILine>(new CalculateConnectionLineByBehaviorRequest(\n        this._fOutputWithRect.fRect,\n        RoundedRect.fromRect(RectExtensions.initialize(difference.x, difference.y)),\n        this._fConnection.fBehavior,\n        this._fOutputWithRect.fConnector.fConnectableSide,\n        fSide\n      )\n    );\n  }\n\n  private _drawSnapConnection(fClosestInput: IClosestInput | undefined): void {\n    if (fClosestInput) {\n      const line = this._getLineToClosestInput(fClosestInput);\n      this._fSnapConnection!.show();\n      this._fSnapConnection!.setLine(line, this._fOutputWithRect.fConnector.fConnectableSide, fClosestInput.fConnector.fConnectableSide);\n      this._fSnapConnection!.redraw();\n    } else {\n      this._fSnapConnection?.hide();\n    }\n  }\n\n  private _getLineToClosestInput(fClosestInput: IClosestInput): ILine {\n    return this._fMediator.execute<ILine>(new CalculateConnectionLineByBehaviorRequest(\n      this._fOutputWithRect.fRect,\n      fClosestInput.fRect,\n      this._fSnapConnection!.fBehavior,\n      this._fOutputWithRect.fConnector.fConnectableSide,\n      fClosestInput.fConnector.fConnectableSide\n    ));\n  }\n\n  private _findClosestInput(difference: IPoint): IClosestInput | undefined {\n    return this._fMediator.execute<IClosestInput | undefined>(\n      new CalculateClosestInputRequest(\n        this._toConnectorRect.addPoint(difference),\n        this._canBeConnectedInputs,\n      )\n    );\n  }\n\n  private _getClosestInputForSnapConnection(fClosestInput: IClosestInput | undefined): IClosestInput | undefined {\n    return fClosestInput && fClosestInput.distance < this._fSnapConnection!.fSnapThreshold ? fClosestInput : undefined;\n  }\n\n  public onPointerUp(): void {\n    this._drawConnection(this._toConnectorRect, this._fInputWithRect.fConnector.fConnectableSide);\n    this._fSnapConnection?.hide();\n\n    this._fMediator.execute(\n      new UnmarkAllCanBeConnectedInputsRequest(this._canBeConnectedInputs.map((x) => x.fConnector))\n    );\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class FReassignConnectionEvent {\n\n  constructor(\n    public fConnectionId: string,\n    public fOutputId: string,\n    public oldFInputId: string,\n    public newFInputId: string | undefined,\n    public fDropPosition: IPoint,\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FReassignConnectionFinalizeRequest } from './f-reassign-connection-finalize.request';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable-data-context';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FReassignConnectionDragHandler } from '../f-reassign-connection.drag-handler';\nimport { FDraggableBase } from '../../../f-draggable-base';\nimport { FReassignConnectionEvent } from '../f-reassign-connection.event';\nimport { FConnectorBase } from '../../../../f-connectors';\nimport { FindInputAtPositionRequest } from '../../../../domain';\nimport { FDragHandlerResult } from '../../../f-drag-handler';\nimport { IFReassignConnectionDragResult } from '../i-f-reassign-connection-drag-result';\nimport {IPointerEvent} from \"../../../../drag-toolkit\";\n\n@Injectable()\n@FExecutionRegister(FReassignConnectionFinalizeRequest)\nexport class FReassignConnectionFinalizeExecution implements IExecution<FReassignConnectionFinalizeRequest, void> {\n\n  private _fResult: FDragHandlerResult<IFReassignConnectionDragResult> = inject(FDragHandlerResult);\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  private get _fDraggable(): FDraggableBase {\n    return this._fComponentsStore.fDraggable!;\n  }\n\n  private get _fDragHandler(): FReassignConnectionDragHandler {\n    return this._fDraggableDataContext.draggableItems[ 0 ] as FReassignConnectionDragHandler;\n  }\n\n  public handle(request: FReassignConnectionFinalizeRequest): void {\n    if (!this._isDroppedConnectionReassignEvent()) {\n      return;\n    }\n    this._applyReassignEvent(request.event);\n    this._fDragHandler.onPointerUp();\n  }\n\n  private _isDroppedConnectionReassignEvent(): boolean {\n    return this._fDraggableDataContext.draggableItems.some(\n      (x) => x instanceof FReassignConnectionDragHandler\n    );\n  }\n\n  private _applyReassignEvent(event: IPointerEvent): void {\n    const fInput = this._getInputUnderPointer(event);\n    if (\n      !!fInput && !this._isReassignToDifferentInput(fInput)\n    ) {\n      return;\n    }\n\n    this._emitReassignConnectionEvent(event, fInput);\n  }\n\n  private _getInputUnderPointer(event: IPointerEvent): FConnectorBase | undefined {\n    return this._fMediator.execute<FConnectorBase | undefined>(\n      new FindInputAtPositionRequest(\n        event.getPosition(),\n        this._fResult.getData().toConnectorRect,\n        this._fResult.getData().canBeConnectedInputs\n      )\n    );\n  }\n\n  private _isReassignToDifferentInput(fInput: FConnectorBase): boolean {\n    return this._fResult.getData().fConnection.fInputId !== fInput.fId;\n  }\n\n  private _emitReassignConnectionEvent(event: IPointerEvent, fInput?: FConnectorBase): void {\n    this._fDraggable.fReassignConnection.emit(this._getEventData(event, fInput));\n  }\n\n  private _getEventData(event: IPointerEvent, fInput?: FConnectorBase): FReassignConnectionEvent {\n    const fConnection = this._fResult.getData().fConnection;\n\n    return new FReassignConnectionEvent(\n      fConnection.fId,\n      fConnection.fOutputId,\n      fConnection.fInputId,\n      fInput?.fId, event.getPosition()\n    );\n  }\n}\n","import { FEventTrigger } from '../../../../domain';\nimport {IPointerEvent} from \"../../../../drag-toolkit\";\n\nexport class FReassignConnectionPreparationRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public fTrigger: FEventTrigger\n  ) {\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { FReassignConnectionPreparationRequest } from './f-reassign-connection-preparation.request';\nimport { IPoint, ITransformModel, Point } from '@foblex/2d';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable-data-context';\nimport { isValidEventTrigger, UpdateItemAndChildrenLayersRequest } from '../../../../domain';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FConnectionBase } from '../../../../f-connection';\nimport { FReassignConnectionDragHandler } from '../f-reassign-connection.drag-handler';\n\n@Injectable()\n@FExecutionRegister(FReassignConnectionPreparationRequest)\nexport class FReassignConnectionPreparationExecution implements IExecution<FReassignConnectionPreparationRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n  private readonly _injector = inject(Injector);\n\n  private _fConnection: FConnectionBase | undefined;\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow!.hostElement;\n  }\n\n  private get _fConnections(): FConnectionBase[] {\n    return this._fComponentsStore.fConnections;\n  }\n\n  public handle(request: FReassignConnectionPreparationRequest): void {\n    if (!this._isValid(request) || !this._isValidTrigger(request)) {\n      return;\n    }\n\n    this._fDraggableDataContext.onPointerDownScale = this._transform.scale;\n    this._fDraggableDataContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost).div(this._transform.scale);\n    this._fDraggableDataContext.draggableItems = [\n      new FReassignConnectionDragHandler(this._injector, this._fConnection!)\n    ];\n\n    setTimeout(() => this._updateConnectionLayer());\n  }\n\n  private _isValid(request: FReassignConnectionPreparationRequest): boolean {\n    this._fConnection = this._getConnectionToReassign(this._getPointInFlow(request));\n    return !!this._fConnection && !this._fDraggableDataContext.draggableItems.length;\n  }\n\n  private _isValidTrigger(request: FReassignConnectionPreparationRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n\n  private _getPointInFlow(request: FReassignConnectionPreparationRequest): IPoint {\n    return Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost)\n      .sub(this._transform.scaledPosition).sub(this._transform.position)\n      .div(this._transform.scale);\n  }\n\n  private _getConnectionToReassign(position: IPoint): FConnectionBase | undefined {\n    const connections = this._getConnectionsFromPoint(position);\n    return connections.length ? connections[0] : undefined;\n  }\n\n  private _getConnectionsFromPoint(position: IPoint): FConnectionBase[] {\n    return this._fConnections.filter((x) => {\n      return x.fDragHandle?.point && this._isPointInsideCircle(position, x.fDragHandle.point) && !x.fDraggingDisabled;\n    });\n  }\n\n  private _isPointInsideCircle(point: IPoint, circleCenter: IPoint): boolean {\n    return (point.x - circleCenter.x) ** 2 + (point.y - circleCenter.y) ** 2 <= 8 ** 2;\n  }\n\n  private _updateConnectionLayer(): void {\n    this._fMediator.execute<void>(\n      new UpdateItemAndChildrenLayersRequest(\n        this._fConnection!, this._fComponentsStore.fCanvas!.fConnectionsContainer().nativeElement\n      )\n    );\n  }\n}\n","import {\n  FCreateConnectionDragHandlerPreparationExecution,\n  FCreateConnectionFinalizeExecution,\n  FCreateConnectionFromOutletPreparationExecution,\n  FCreateConnectionFromOutputPreparationExecution,\n  FCreateConnectionPreparationExecution,\n  GetFirstConnectableOutputExecution,\n} from './f-create-connection';\nimport {\n  FReassignConnectionFinalizeExecution,\n  FReassignConnectionPreparationExecution,\n} from './f-reassign-connection';\n\nexport const CONNECTIONS_PROVIDERS = [\n\n  FCreateConnectionFinalizeExecution,\n\n  FCreateConnectionDragHandlerPreparationExecution,\n\n  FCreateConnectionFromOutletPreparationExecution,\n\n  GetFirstConnectableOutputExecution,\n\n  FCreateConnectionFromOutputPreparationExecution,\n\n  FCreateConnectionPreparationExecution,\n\n  FReassignConnectionFinalizeExecution,\n\n  FReassignConnectionPreparationExecution,\n];\n","import {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FNodeDropToGroupFinalizeRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import { Directive, Injector } from '@angular/core';\nimport { IPoint, ITransformModel, Point, PointExtensions, RectExtensions } from '@foblex/2d';\nimport { IFDragHandler } from '../f-drag-handler';\nimport { FComponentsStore } from '../../f-storage';\nimport { INodeWithRect } from '../domain';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\n\n@Directive()\nexport class FNodeDropToGroupDragHandler implements IFDragHandler {\n\n  private readonly _fComponentsStore: FComponentsStore;\n  private readonly _fDraggableDataContext: FDraggableDataContext;\n\n  public fEventType = 'move-node-to-parent';\n\n  private _DEBOUNCE_TIME = 1;\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  private _onPointerDownPosition: IPoint = PointExtensions.initialize();\n  private _debounceTimer: any = null;\n\n  public fNodeWithRect: INodeWithRect | null = null;\n\n  constructor(\n    _injector: Injector,\n    private notDraggedNodesRects: INodeWithRect[],\n  ) {\n    this._fComponentsStore = _injector.get(FComponentsStore);\n    this._fDraggableDataContext = _injector.get(FDraggableDataContext);\n    this._onPointerDownPosition = this._fDraggableDataContext.onPointerDownPosition;\n  }\n\n  private _toggleParentNode(difference: IPoint): void {\n    const isInclude = this._isNodeInsideAnotherNode(this._getNewPosition(difference));\n    if (isInclude) {\n      this._markIncludeNode(isInclude);\n    } else {\n      this._unmarkIncludeNode();\n    }\n  }\n\n  private _getNewPosition(difference: IPoint): IPoint {\n    return Point.fromPoint(this._onPointerDownPosition).add(difference).mult(this._transform.scale);\n  }\n\n  private _isNodeInsideAnotherNode(point: IPoint): INodeWithRect | undefined {\n    return this.notDraggedNodesRects.find((x) => RectExtensions.isIncludePoint(x.rect, point));\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    if (this._debounceTimer) {\n      clearTimeout(this._debounceTimer);\n    }\n\n    this._debounceTimer = setTimeout(() => this._toggleParentNode(difference), this._DEBOUNCE_TIME);\n  }\n\n  private _markIncludeNode(nodeWithRect: INodeWithRect): void {\n    this._unmarkIncludeNode();\n    this.fNodeWithRect = nodeWithRect;\n    nodeWithRect.node.setClass('f-parent-for-drop');\n  }\n\n  private _unmarkIncludeNode(): void {\n    this.fNodeWithRect?.node.removeClass('f-parent-for-drop');\n    this.fNodeWithRect = null;\n  }\n\n  public onPointerUp(): void {\n    this._unmarkIncludeNode();\n\n    if (this._debounceTimer) {\n      clearTimeout(this._debounceTimer);\n      this._debounceTimer = null;\n    }\n  }\n}\n","import { ILine, IPoint, PointExtensions, RoundedRect } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  CalculateConnectionLineByBehaviorRequest,\n  GetConnectorAndRectRequest,\n  IConnectorAndRect\n} from '../../../domain';\nimport { FConnectorBase } from '../../../f-connectors';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FConnectionBase } from '../../../f-connection';\nimport { Injector } from '@angular/core';\n\nexport class BaseConnectionDragHandler {\n\n  private readonly _fMediator: FMediator;\n  private readonly _fComponentsStore: FComponentsStore;\n\n  private _fOutputWithRect!: IConnectorAndRect;\n  private _fInputWithRect!: IConnectorAndRect;\n\n  private get _fOutput(): FConnectorBase {\n    const result = this._fComponentsStore.fOutputs.find((x) => x.fId === this.fConnection.fOutputId)!;\n    if (!result) {\n      throw new Error(this._connectorNotFoundPrefix(`fOutput with id ${ this.fConnection.fOutputId } not found`));\n    }\n    return result;\n  }\n\n  private get _fInput(): FConnectorBase {\n    const result = this._fComponentsStore.fInputs.find((x) => x.fId === this.fConnection.fInputId)!;\n    if (!result) {\n      throw new Error(this._connectorNotFoundPrefix(`fInput with id ${ this.fConnection.fInputId } not found`));\n    }\n    return result;\n  }\n\n  private _sourceDifference = PointExtensions.initialize();\n  private _targetDifference = PointExtensions.initialize();\n\n  constructor(\n    _injector: Injector,\n    public fConnection: FConnectionBase,\n  ) {\n    this._fMediator = _injector.get(FMediator);\n    this._fComponentsStore = _injector.get(FComponentsStore);\n    this._initialize();\n  }\n\n  private _initialize(): void {\n    this._fOutputWithRect = this._fMediator.execute<IConnectorAndRect>(new GetConnectorAndRectRequest(this._fOutput));\n    this._fInputWithRect = this._fMediator.execute<IConnectorAndRect>(new GetConnectorAndRectRequest(this._fInput));\n  }\n\n  public setSourceDifference(difference: IPoint): void {\n    this._sourceDifference = difference;\n  }\n\n  public setTargetDifference(difference: IPoint): void {\n    this._targetDifference = difference;\n  }\n\n  protected redraw(): void {\n    this._redrawConnection(this._recalculateConnection());\n  }\n\n  private _recalculateConnection(): ILine {\n    return this._fMediator.execute<ILine>(new CalculateConnectionLineByBehaviorRequest(\n      RoundedRect.fromRoundedRect(this._fOutputWithRect.fRect).addPoint(this._sourceDifference),\n      RoundedRect.fromRoundedRect(this._fInputWithRect.fRect).addPoint(this._targetDifference),\n      this.fConnection.fBehavior,\n      this._fOutputWithRect.fConnector.fConnectableSide,\n      this._fInputWithRect.fConnector.fConnectableSide\n    ));\n  }\n\n  private _redrawConnection(line: ILine): void {\n    this.fConnection.setLine(\n      line,\n      this._fOutputWithRect.fConnector.fConnectableSide,\n      this._fInputWithRect.fConnector.fConnectableSide\n    );\n    this.fConnection.redraw();\n  }\n\n  private _connectorNotFoundPrefix(message: string): string {\n    return `ConnectionDragHandler Error: Connection From (fOutput)${ this.fConnection.fOutputId } To (fInput)${ this.fConnection.fInputId }. ${ message }. Please ensure that all f-connections are associated with existing connectors`;\n  }\n}\n","import { BaseConnectionDragHandler } from './base-connection.drag-handler';\nimport { FConnectionBase } from '../../../f-connection';\nimport { IPoint } from '@foblex/2d';\nimport { Injector } from '@angular/core';\n\nexport class SourceConnectionDragHandler extends BaseConnectionDragHandler {\n\n  constructor(injector: Injector, fConnection: FConnectionBase) {\n    super(injector, fConnection);\n  }\n\n  public override setSourceDifference(difference: IPoint) {\n    super.setSourceDifference(difference);\n    this.redraw();\n  }\n}\n","import { BaseConnectionDragHandler } from './base-connection.drag-handler';\nimport { FConnectionBase } from '../../../f-connection';\nimport { IPoint } from '@foblex/2d';\nimport { Injector } from '@angular/core';\n\nexport class SourceTargetConnectionDragHandler extends BaseConnectionDragHandler {\n\n  private readonly _callTracker = new Map<string, boolean>();\n\n  constructor(injector: Injector, fConnection: FConnectionBase) {\n    super(injector, fConnection);\n  }\n\n  public override setSourceDifference(difference: IPoint) {\n    super.setSourceDifference(difference);\n    this._checkAndTriggerAction();\n  }\n\n  public override setTargetDifference(difference: IPoint) {\n    super.setTargetDifference(difference);\n    this._checkAndTriggerAction();\n  }\n\n  private _checkAndTriggerAction() {\n    if ([...this._callTracker.values()].every(Boolean)) {\n      this._callTracker.clear();\n      this.redraw();\n    }\n  }\n}\n\n","import { FConnectionBase } from '../../../f-connection';\nimport { BaseConnectionDragHandler } from './base-connection.drag-handler';\nimport { IPoint } from '@foblex/2d';\nimport { Injector } from '@angular/core';\n\nexport class TargetConnectionDragHandler extends BaseConnectionDragHandler {\n\n  constructor(injector: Injector, fConnection: FConnectionBase) {\n    super(injector, fConnection);\n  }\n\n  public override setTargetDifference(difference: IPoint) {\n    super.setTargetDifference(difference);\n    this.redraw();\n  }\n}\n","import { INodeMoveLimitsAndPosition } from '../../i-node-move-limits-and-position';\n\nexport class CalculateCommonNodeMoveLimitsRequest {\n\n  constructor(\n    public limits: INodeMoveLimitsAndPosition[]\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CalculateCommonNodeMoveLimitsRequest } from './calculate-common-node-move-limits.request';\nimport { IPoint } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { INodeMoveLimitsAndPosition } from '../../i-node-move-limits-and-position';\nimport { INodeMoveLimits } from '../../i-node-move-limits';\n\n@Injectable()\n@FExecutionRegister(CalculateCommonNodeMoveLimitsRequest)\nexport class CalculateCommonNodeMoveLimitsExecution\n  implements IExecution<CalculateCommonNodeMoveLimitsRequest, INodeMoveLimits> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  private get _vCellSize(): number {\n    return this._fComponentsStore.fDraggable!.vCellSize;\n  }\n\n  private get _hCellSize(): number {\n    return this._fComponentsStore.fDraggable!.hCellSize;\n  }\n\n  public handle(request: CalculateCommonNodeMoveLimitsRequest): INodeMoveLimits {\n    return this._calculateCommonLimits(request.limits);\n  }\n\n  private _calculateCommonLimits(limits: INodeMoveLimitsAndPosition[]): INodeMoveLimits {\n    this._snapLimitToGrid(limits[0]);\n    return limits.reduce((result: INodeMoveLimits, x) => {\n      this._snapLimitToGrid(x);\n      return this._clampRestrictions(result, x);\n    }, limits[0]);\n  }\n\n  private _clampRestrictions(common: INodeMoveLimits, x: INodeMoveLimitsAndPosition): INodeMoveLimits {\n    common.min = this._clampMinRestrictions(common.min, x.min);\n    common.max = this._clampMaxRestrictions(common.max, x.max);\n    return common;\n  }\n\n  private _clampMinRestrictions(common: IPoint, node: IPoint): IPoint {\n    return {\n      x: Math.max(common.x, node.x),\n      y: Math.max(common.y, node.y),\n    }\n  }\n\n  private _clampMaxRestrictions(common: IPoint, node: IPoint): IPoint {\n    return {\n      x: Math.min(common.x, node.x),\n      y: Math.min(common.y, node.y),\n    }\n  }\n\n  private _snapLimitToGrid(restriction: INodeMoveLimitsAndPosition): void {\n    const { min, max, position } = restriction;\n    restriction.min = {\n      x: this._snapLimitToGridMinimum(position.x + min.x, this._hCellSize) - position.x,\n      y: this._snapLimitToGridMinimum(position.y + min.y, this._vCellSize) - position.y,\n    };\n    restriction.max = {\n      x: this._snapLimitToGridMaximum(position.x + max.x, this._hCellSize) - position.x,\n      y: this._snapLimitToGridMaximum(position.y + max.y, this._vCellSize) - position.y,\n    };\n  }\n\n  private _snapLimitToGridMinimum(value: number, cellSize: number): number {\n    return Math.ceil(value / cellSize) * cellSize;\n  }\n\n  private _snapLimitToGridMaximum(value: number, cellSize: number): number {\n    return Math.floor(value / cellSize) * cellSize;\n  }\n}\n","import { FNodeMoveDragHandler } from '../../../f-node-move.drag-handler';\nimport { BaseConnectionDragHandler } from '../../../connection-drag-handlers/base-connection.drag-handler';\n\nexport class PutInputConnectionHandlersToArrayRequest {\n\n  constructor(\n    public fDragHandler: FNodeMoveDragHandler,\n    public outputIds: string[],\n    public result: BaseConnectionDragHandler[]\n  ) {\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { PutInputConnectionHandlersToArrayRequest } from './put-input-connection-handlers-to-array.request';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../../../f-node';\nimport { FConnectionBase } from '../../../../../f-connection';\nimport { BaseConnectionDragHandler } from '../../../connection-drag-handlers/base-connection.drag-handler';\nimport { SourceTargetConnectionDragHandler } from '../../../connection-drag-handlers/source-target-connection.drag-handler';\nimport { TargetConnectionDragHandler } from '../../../connection-drag-handlers/target-connection.drag-handler';\n\n@Injectable()\n@FExecutionRegister(PutInputConnectionHandlersToArrayRequest)\nexport class PutInputConnectionHandlersToArrayExecution\n  implements IExecution<PutInputConnectionHandlersToArrayRequest, void> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _injector = inject(Injector);\n\n  private get _fConnections(): FConnectionBase[] {\n    return this._fComponentsStore.fConnections;\n  }\n\n  public handle(request: PutInputConnectionHandlersToArrayRequest): void {\n    this._getInputConnections(request.fDragHandler.fNode).forEach((fConnection) => {\n      this._createAndSetConnectionToNodeHandler(fConnection, request);\n    });\n  }\n\n  private _getInputConnections(fNode: FNodeBase): FConnectionBase[] {\n    const ids = new Set(this._getNodeInputIds(fNode));\n    return this._fConnections.filter((x) => ids.has(x.fInputId));\n  }\n\n  private _getNodeInputIds(fNode: FNodeBase): string[] {\n    return this._fComponentsStore.fInputs\n      .filter((x) => fNode.isContains(x.hostElement))\n      .map((x) => x.fId);\n  }\n\n  private _createAndSetConnectionToNodeHandler(fConnection: FConnectionBase, request: PutInputConnectionHandlersToArrayRequest): void {\n    let fHandler = this._getExistingConnectionHandler(request.result, fConnection);\n    if (!fHandler) {\n      fHandler = this._createConnectionHandler(request.outputIds, fConnection);\n      request.result.push(fHandler);\n    }\n    request.fDragHandler.fTargetHandlers.push(fHandler);\n  }\n\n  private _getExistingConnectionHandler(fHandlers: BaseConnectionDragHandler[], fConnection: FConnectionBase): BaseConnectionDragHandler | undefined {\n    return fHandlers.find((x) => x.fConnection.fId === fConnection.fId);\n  }\n\n  private _createConnectionHandler(outputIds: string[], fConnection: FConnectionBase): BaseConnectionDragHandler {\n    let result: BaseConnectionDragHandler | undefined;\n    if (outputIds.includes(fConnection.fOutputId)) {\n      result = new SourceTargetConnectionDragHandler(this._injector, fConnection);\n    } else {\n      result = new TargetConnectionDragHandler(this._injector, fConnection);\n    }\n    return result;\n  }\n}\n\n","import { FNodeMoveDragHandler } from '../../../f-node-move.drag-handler';\nimport { BaseConnectionDragHandler } from '../../../connection-drag-handlers/base-connection.drag-handler';\n\nexport class PutOutputConnectionHandlersToArrayRequest {\n\n  constructor(\n    public fDragHandler: FNodeMoveDragHandler,\n    public inputIds: string[],\n    public result: BaseConnectionDragHandler[]\n  ) {\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { PutOutputConnectionHandlersToArrayRequest } from './put-output-connection-handlers-to-array.request';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../../../f-node';\nimport { FConnectionBase } from '../../../../../f-connection';\nimport { SourceTargetConnectionDragHandler } from '../../../connection-drag-handlers/source-target-connection.drag-handler';\nimport { BaseConnectionDragHandler } from '../../../connection-drag-handlers/base-connection.drag-handler';\nimport { SourceConnectionDragHandler } from '../../../connection-drag-handlers/source-connection.drag-handler';\n\n@Injectable()\n@FExecutionRegister(PutOutputConnectionHandlersToArrayRequest)\nexport class PutOutputConnectionHandlersToArrayExecution\n  implements IExecution<PutOutputConnectionHandlersToArrayRequest, void> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _injector = inject(Injector);\n\n  private get _fConnections(): FConnectionBase[] {\n    return this._fComponentsStore.fConnections;\n  }\n\n  public handle(request: PutOutputConnectionHandlersToArrayRequest): void {\n    this._getOutputConnections(request.fDragHandler.fNode).forEach((fConnection) => {\n      this._createAndSetConnectionToNodeHandler(fConnection, request);\n    });\n  }\n\n  public _getOutputConnections(node: FNodeBase): FConnectionBase[] {\n    const ids = new Set(this._getNodeOutputIds(node));\n    return this._fConnections.filter((x) => ids.has(x.fOutputId));\n  }\n\n  private _getNodeOutputIds(node: FNodeBase): string[] {\n    return this._fComponentsStore.fOutputs\n      .filter((x) => node.isContains(x.hostElement))\n      .map((x) => x.fId);\n  }\n\n  private _createAndSetConnectionToNodeHandler(fConnection: FConnectionBase, request: PutOutputConnectionHandlersToArrayRequest): void {\n    let fHandler = this._getExistingConnectionHandler(request.result, fConnection);\n    if (!fHandler) {\n      fHandler = this._createConnectionHandler(request.inputIds, fConnection);\n      request.result.push(fHandler);\n    }\n    request.fDragHandler.fSourceHandlers.push(fHandler);\n  }\n\n  private _getExistingConnectionHandler(fHandlers: BaseConnectionDragHandler[], fConnection: FConnectionBase): BaseConnectionDragHandler | undefined {\n    return fHandlers.find((x) => x.fConnection.fId === fConnection.fId);\n  }\n\n  private _createConnectionHandler(inputIds: string[], fConnection: FConnectionBase): BaseConnectionDragHandler {\n    let result: BaseConnectionDragHandler;\n    if (inputIds.includes(fConnection.fInputId)) {\n      result = new SourceTargetConnectionDragHandler(this._injector, fConnection);\n    } else {\n      result = new SourceConnectionDragHandler(this._injector, fConnection)\n    }\n    return result;\n  }\n}\n\n","import { FNodeBase } from '../../../../../f-node';\n\nexport class CalculateNodeMoveLimitsRequest {\n\n  constructor(\n    public fNode: FNodeBase,\n    public hasParentNodeInSelected: boolean\n  ) {\n  }\n}\n","import {IMinMaxPoint} from \"@foblex/2d\";\n\nexport function infinityMinMax(): IMinMaxPoint {\n  return {\n    min: { x: -Infinity, y: -Infinity },\n    max: { x: Infinity, y: Infinity }\n  };\n}\n","import {inject, Injectable} from '@angular/core';\nimport {CalculateNodeMoveLimitsRequest} from './calculate-node-move-limits.request';\nimport {IPoint, IRect, PointExtensions} from '@foblex/2d';\nimport {FExecutionRegister, FMediator, IExecution} from '@foblex/mediator';\nimport {GetNormalizedParentNodeRectRequest} from '../../../../domain';\nimport {FNodeBase} from '../../../../../f-node';\nimport {GetNormalizedElementRectRequest} from '../../../../../domain';\nimport {INodeMoveLimits} from '../../i-node-move-limits';\nimport {infinityMinMax} from \"../../../../../utils\";\n\n@Injectable()\n@FExecutionRegister(CalculateNodeMoveLimitsRequest)\nexport class CalculateNodeMoveLimitsExecution\n  implements IExecution<CalculateNodeMoveLimitsRequest, INodeMoveLimits> {\n\n  private _fMediator = inject(FMediator);\n\n  public handle(request: CalculateNodeMoveLimitsRequest): INodeMoveLimits {\n    if (!request.fNode.fParentId || request.hasParentNodeInSelected) {\n      return {...infinityMinMax()};\n    }\n\n    return this._calculateDifference(\n      this._fParentRect(request.fNode), this._fNodeRect(request.fNode)\n    );\n  }\n\n  private _fNodeRect(fNode: FNodeBase): IRect {\n    return this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(fNode.hostElement));\n  }\n\n  private _fParentRect(fNode: FNodeBase): IRect {\n    return this._fMediator.execute<IRect>(new GetNormalizedParentNodeRectRequest(fNode));\n  }\n\n  private _calculateDifference(fParentRect: IRect, fRect: IRect): INodeMoveLimits {\n    return {\n      min: this._calculateMinimumDifference(fParentRect, fRect),\n      max: this._calculateMaximumDifference(fParentRect, fRect)\n    };\n  }\n\n  private _calculateMinimumDifference(fParentRect: IRect, fRect: IRect): IPoint {\n    return PointExtensions.initialize(fParentRect.x - fRect.x, fParentRect.y - fRect.y);\n  }\n\n  private _calculateMaximumDifference(fParentRect: IRect, fRect: IRect): IPoint {\n    return PointExtensions.initialize(\n      (fParentRect.x + fParentRect.width) - (fRect.x + fRect.width),\n      (fParentRect.y + fParentRect.height) - (fRect.y + fRect.height),\n    );\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class CreateMoveNodesDragModelFromSelectionRequest {\n\n  constructor(\n    public nodeWithDisabledSelection?: FNodeBase\n  ) {\n  }\n}\n","import { IPoint, PointExtensions } from '@foblex/2d';\nimport { IFDragHandler } from '../f-drag-handler';\nimport { FNodeBase } from '../../f-node';\nimport { BaseConnectionDragHandler } from './connection-drag-handlers';\n\nexport class FNodeMoveDragHandler implements IFDragHandler {\n\n  public readonly fEventType = 'move-node';\n\n  private readonly _onPointerDownPosition = PointExtensions.initialize();\n\n  constructor(\n    public fNode: FNodeBase,\n    public fSourceHandlers: BaseConnectionDragHandler[] = [],\n    public fTargetHandlers: BaseConnectionDragHandler[] = [],\n  ) {\n    this._onPointerDownPosition = { ...fNode.position };\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    this._redraw(this._calculateNewPosition(difference));\n\n    this.fSourceHandlers.forEach((x) => x.setSourceDifference(difference));\n    this.fTargetHandlers.forEach((x) => x.setTargetDifference(difference));\n  }\n\n  private _calculateNewPosition(difference: IPoint): IPoint {\n    return PointExtensions.sum(this._onPointerDownPosition, difference);\n  }\n\n  private _redraw(position: IPoint): void {\n    this.fNode.updatePosition(position);\n    this.fNode.redraw();\n  }\n\n  public onPointerUp(): void {\n    this.fNode.positionChange.emit(this.fNode.position);\n  }\n}\n","import { IMinMaxPoint, IPoint } from '@foblex/2d';\nimport { FComponentsStore } from '../../f-storage';\nimport { Injector } from '@angular/core';\n\nexport class PointBoundsLimiter {\n\n  private readonly _fComponentsStore: FComponentsStore;\n\n  private readonly _vCellSize: number;\n  private readonly _hCellSize: number;\n\n  constructor(\n    _injector: Injector,\n    private _onPointerDown: IPoint,\n    private readonly _limit: IMinMaxPoint\n  ) {\n    this._fComponentsStore = _injector.get(FComponentsStore);\n    this._vCellSize = this._fComponentsStore.fDraggable!.vCellSize;\n    this._hCellSize = this._fComponentsStore.fDraggable!.hCellSize;\n  }\n\n  public limit(difference: IPoint, adjustCellSize: boolean): IPoint {\n    const { min, max } = this._limit;\n\n    const { x, y } = this._cellSizeStrategies[ +adjustCellSize ](difference);\n\n    return {\n      x: this._clamp(x, min.x, max.x),\n      y: this._clamp(y, min.y, max.y),\n    };\n  }\n\n  private _cellSizeStrategies: Record<number, (difference: IPoint) => IPoint> = {\n    0: this._skipCellSize.bind(this),\n    1: this._applyCellSize.bind(this)\n  };\n\n  private _applyCellSize(difference: IPoint): IPoint {\n    return {\n      x: this._snapToGrid(this._onPointerDown.x + difference.x, this._hCellSize) - this._onPointerDown.x,\n      y: this._snapToGrid(this._onPointerDown.y + difference.y, this._vCellSize) - this._onPointerDown.y\n    };\n  }\n\n  private _skipCellSize(difference: IPoint): IPoint {\n    return difference;\n  }\n\n  private _clamp(value: number, min: number, max: number): number {\n    return Math.min(Math.max(value, min), max);\n  }\n\n  private _snapToGrid(value: number, cellSize: number): number {\n    return Math.round(value / cellSize) * cellSize;\n  }\n}\n","import { IMinMaxPoint, IPoint, IRect } from '@foblex/2d';\nimport { IFDragHandler } from '../f-drag-handler';\nimport { FComponentsStore } from '../../f-storage';\nimport { PointBoundsLimiter } from './point-bounds-limiter';\nimport { FNodeMoveDragHandler } from './f-node-move.drag-handler';\nimport { Injector } from '@angular/core';\n\nexport class FSummaryNodeMoveDragHandler implements IFDragHandler {\n\n  public readonly fEventType = 'move-node';\n  public readonly fData: any;\n\n  private readonly _fComponentStore: FComponentsStore;\n  private readonly _fBoundsLimiter: PointBoundsLimiter;\n\n  constructor(\n    _injector: Injector,\n    public limits: IMinMaxPoint,\n    public fHandlers: FNodeMoveDragHandler[],\n    public commonRect: IRect\n  ) {\n    this._fComponentStore = _injector.get(FComponentsStore);\n    this._fBoundsLimiter = new PointBoundsLimiter(_injector, this.commonRect, limits);\n    this.fData = {\n      fNodeIds: this.fHandlers.map((x) => x.fNode.fId)\n    };\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const adjustCellSize = this._fComponentStore.fDraggable!.fCellSizeWhileDragging;\n    const differenceWithRestrictions = this._fBoundsLimiter.limit(difference, adjustCellSize);\n\n    this.fHandlers.forEach((x) => x.onPointerMove(differenceWithRestrictions));\n  }\n\n  public onPointerUp(): void {\n    this.fHandlers.forEach((x) => x.onPointerUp());\n  }\n\n  public calculateRestrictedDifference(difference: IPoint): IPoint {\n    return this._fBoundsLimiter.limit(difference, true);\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { CreateMoveNodesDragModelFromSelectionRequest } from './create-move-nodes-drag-model-from-selection.request';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FNodeMoveDragHandler } from '../f-node-move.drag-handler';\nimport { FNodeBase } from '../../../f-node';\nimport { CalculateNodeMoveLimitsRequest } from './domain/calculate-node-move-limits';\nimport { PutOutputConnectionHandlersToArrayRequest } from './domain/put-output-connection-handlers-to-array';\nimport {\n  PutInputConnectionHandlersToArrayRequest\n} from './domain/put-input-connection-handlers-to-array';\nimport { IsArrayHasParentNodeRequest } from '../../domain';\nimport {\n  GetDeepChildrenNodesAndGroupsRequest,\n  GetNormalizedElementRectRequest,\n  GetParentNodesRequest\n} from '../../../domain';\nimport { flatMap } from '@foblex/utils';\nimport { CalculateCommonNodeMoveLimitsRequest } from './domain/calculate-common-node-move-limits';\nimport { IMinMaxPoint, IRect, RectExtensions } from '@foblex/2d';\nimport { BaseConnectionDragHandler } from '../connection-drag-handlers';\nimport { FSummaryNodeMoveDragHandler } from '../f-summary-node-move.drag-handler';\nimport { INodeMoveLimitsAndPosition } from './i-node-move-limits-and-position';\nimport { INodeMoveLimits } from './i-node-move-limits';\n\n@Injectable()\n@FExecutionRegister(CreateMoveNodesDragModelFromSelectionRequest)\nexport class CreateMoveNodesDragModelFromSelectionExecution\n  implements IExecution<CreateMoveNodesDragModelFromSelectionRequest, FSummaryNodeMoveDragHandler> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n  private readonly _injector = inject(Injector);\n\n  public handle(request: CreateMoveNodesDragModelFromSelectionRequest): FSummaryNodeMoveDragHandler {\n    const fDraggedNodes = this._getDraggedNodes(request.nodeWithDisabledSelection);\n\n    const fNodesToDrag = this._getNodesToDragWithCommonLimits(fDraggedNodes);\n\n    const fDragHandlers = this._mapToNodeDragHandlers(fNodesToDrag);\n\n    this._setConnectionsHandlersToNodes(fDragHandlers, this._getAllOutputIds(fNodesToDrag), this._getAllInputIds(fNodesToDrag));\n\n    const commonLimits = this._calculateCommonLimits(\n      this._getNodesMoveLimits(fNodesToDrag, [], fDraggedNodes)\n    );\n\n    return new FSummaryNodeMoveDragHandler(\n      this._injector,\n      commonLimits, fDragHandlers, this._getDraggedNodesBoundingRect(fNodesToDrag)\n    );\n  }\n\n  private _getDraggedNodes(nodeWithDisabledSelection?: FNodeBase): FNodeBase[] {\n    const result = this._getNodesFromSelection();\n    if (nodeWithDisabledSelection) {\n      result.push(nodeWithDisabledSelection);\n    }\n    return result;\n  }\n\n  private _getNodesFromSelection(): FNodeBase[] {\n    return this._fDraggableDataContext.selectedItems\n      .map((x) => this._findNode(x.hostElement))\n      .filter((x): x is FNodeBase => !!x);\n  }\n\n  private _findNode(hostElement: HTMLElement | SVGElement): FNodeBase | undefined {\n    return this._fComponentsStore.fNodes\n      .find(n => n.isContains(hostElement));\n  }\n\n  private _getNodesToDragWithCommonLimits(fDraggedNodes: FNodeBase[]): FNodeBase[] {\n    return fDraggedNodes.reduce((result: FNodeBase[], x: FNodeBase) => {\n      result.push(x);\n      return result.concat(this._getChildrenNodes(x.fId));\n    }, []);\n  }\n\n  private _getNodesMoveLimits(fNodes: FNodeBase[], fParentNodes: FNodeBase[], fDraggedNodes: FNodeBase[]): INodeMoveLimitsAndPosition[] {\n    return fDraggedNodes.map((x) => {\n      const fParentNodes = this._fMediator.execute<FNodeBase[]>(new GetParentNodesRequest(x));\n      return { position: x.position, ...this._getNodeMoveLimits(x, fParentNodes, fDraggedNodes) };\n    });\n  }\n\n  private _getNodeMoveLimits(fNode: FNodeBase, fParentNodes: FNodeBase[], fDraggedNodes: FNodeBase[]): INodeMoveLimits {\n    return this._fMediator.execute<IMinMaxPoint>(\n      new CalculateNodeMoveLimitsRequest(fNode, this._isParentNodeInArray(fParentNodes, fDraggedNodes))\n    );\n  }\n\n  private _isParentNodeInArray(fParentNodes: FNodeBase[], fDraggedNodes: FNodeBase[]): boolean {\n    return this._fMediator.execute<boolean>(new IsArrayHasParentNodeRequest(fParentNodes, fDraggedNodes))\n  }\n\n  private _getChildrenNodes(fId: string): FNodeBase[] {\n    return this._fMediator.execute<FNodeBase[]>(new GetDeepChildrenNodesAndGroupsRequest(fId));\n  }\n\n  private _calculateCommonLimits(limits: INodeMoveLimitsAndPosition[]): IMinMaxPoint {\n    return this._fMediator.execute<IMinMaxPoint>(\n      new CalculateCommonNodeMoveLimitsRequest(limits)\n    );\n  }\n\n  private _getAllOutputIds(fNodes: FNodeBase[]): string[] {\n    return flatMap(fNodes, (fNode) => this._getNodeOutputIds(fNode));\n  }\n\n  private _getNodeOutputIds(fNode: FNodeBase): string[] {\n    return this._fComponentsStore.fOutputs.filter((x) => fNode.fId === x.fNodeId)\n      .map((x) => x.fId);\n  }\n\n  private _getAllInputIds(fNodes: FNodeBase[]): string[] {\n    return flatMap(fNodes, (fNode) => this._getNodeInputIds(fNode));\n  }\n\n  private _getNodeInputIds(fNode: FNodeBase): string[] {\n    return this._fComponentsStore.fInputs.filter((x) => fNode.fId === x.fNodeId)\n      .map((x) => x.fId);\n  }\n\n  private _mapToNodeDragHandlers(items: FNodeBase[]): FNodeMoveDragHandler[] {\n    return items.map((x) => new FNodeMoveDragHandler(x));\n  }\n\n  private _setConnectionsHandlersToNodes(\n    handlers: FNodeMoveDragHandler[], outputIds: string[], inputIds: string[]\n  ): void {\n    const fConnectionHandlers: BaseConnectionDragHandler[] = [];\n    handlers.forEach((fNodeHandler) => {\n      this._fMediator.execute(new PutOutputConnectionHandlersToArrayRequest(fNodeHandler, inputIds, fConnectionHandlers));\n      this._fMediator.execute(new PutInputConnectionHandlersToArrayRequest(fNodeHandler, outputIds, fConnectionHandlers));\n    });\n  }\n\n  private _getDraggedNodesBoundingRect(fNodes: FNodeBase[]): IRect {\n    return RectExtensions.union(fNodes.map((x) => {\n      return this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(x.hostElement));\n    })) || RectExtensions.initialize();\n  }\n}\n","import { CreateMoveNodesDragModelFromSelectionExecution } from './create-move-nodes-drag-model-from-selection.execution';\nimport { CalculateNodeMoveLimitsExecution } from './domain/calculate-node-move-limits';\nimport { PutInputConnectionHandlersToArrayExecution } from './domain/put-input-connection-handlers-to-array';\nimport { PutOutputConnectionHandlersToArrayExecution } from './domain/put-output-connection-handlers-to-array';\nimport { CalculateCommonNodeMoveLimitsExecution } from './domain/calculate-common-node-move-limits';\n\nexport const CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS = [\n\n  CalculateCommonNodeMoveLimitsExecution,\n\n  CalculateNodeMoveLimitsExecution,\n\n  PutInputConnectionHandlersToArrayExecution,\n\n  PutOutputConnectionHandlersToArrayExecution,\n\n  CreateMoveNodesDragModelFromSelectionExecution,\n];\n","import { IRect } from '@foblex/2d';\nimport { FNodeBase } from '../../../f-node';\n\nexport class LineAlignmentPreparationRequest {\n\n  constructor(\n    public fNodes: FNodeBase[],\n    public commonRect: IRect\n  ) {\n  }\n}\n","import { findClosestAlignment, IMinMaxPoint, IPoint, IRect, ISize, ITransformModel, RectExtensions } from '@foblex/2d';\nimport { IFDragHandler } from '../index';\nimport { FComponentsStore } from '../../f-storage';\nimport { ILineAlignmentResult, LineService } from '../../f-line-alignment';\nimport { Injector } from '@angular/core';\n\nexport class FLineAlignmentDragHandler implements IFDragHandler {\n\n  public readonly fEventType = 'line-alignment';\n\n  private readonly _fComponentsStore: FComponentsStore;\n\n  private _debounceTimer: any = null;\n\n  private readonly _transform: ITransformModel;\n\n  constructor(\n    _injector: Injector,\n    private _lineService: LineService,\n    private _size: ISize,\n    private _draggedNodeRect: IRect,\n    private _rects: IRect[],\n    private _restrictions: IMinMaxPoint,\n  ) {\n    this._fComponentsStore = _injector.get(FComponentsStore);\n    this._transform = this._fComponentsStore.fCanvas?.transform!;\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const restrictedDifference = this._getDifference(difference);\n    if (this._debounceTimer) {\n      clearTimeout(this._debounceTimer);\n    }\n\n    this._debounceTimer = setTimeout(() => this._drawIntersectingLines(restrictedDifference), 15);\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  private _getDifference(difference: IPoint): IPoint {\n    return {\n      x: Math.min(Math.max(difference.x, this._restrictions.min.x), this._restrictions.max.x),\n      y: Math.min(Math.max(difference.y, this._restrictions.min.y), this._restrictions.max.y)\n    }\n  }\n\n  public findNearestCoordinate(difference: IPoint): ILineAlignmentResult {\n    const rect = RectExtensions.addPoint(this._draggedNodeRect, difference);\n    return findClosestAlignment(this._rects, rect, this._fComponentsStore.fLineAlignment!.fAlignThreshold());\n  }\n\n  public onPointerUp(): void {\n    this._lineService.hideVerticalLine();\n    this._lineService.hideHorizontalLine();\n\n    if (this._debounceTimer) {\n      clearTimeout(this._debounceTimer);\n      this._debounceTimer = null;\n    }\n  }\n}\n","import { ILineAlignmentRect } from './i-line-alignment-rect';\nimport { BrowserService } from '@foblex/platform';\n\nexport class LineElement {\n\n  private readonly element: HTMLElement;\n\n  constructor(\n    fBrowser: BrowserService,\n    private readonly hostElement: HTMLElement,\n  ) {\n    this.element = fBrowser.document.createElement('div');\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\n","import { ISize, ITransformModel } from '@foblex/2d';\nimport { LineElement } from './line-element';\nimport { BrowserService } from '@foblex/platform';\n\nexport class LineService {\n\n  private fHorizontalLine: LineElement;\n  private fVerticalLine: LineElement;\n\n  constructor(fBrowser: BrowserService, private hostElement: HTMLElement) {\n    this.fHorizontalLine = new LineElement(fBrowser, this.hostElement);\n    this.fVerticalLine = new LineElement(fBrowser, this.hostElement);\n    this.fHorizontalLine.hide();\n    this.fVerticalLine.hide();\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 { Directive, InjectionToken, InputSignalWithTransform } from '@angular/core';\nimport { IHasHostElement } from '../i-has-host-element';\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;\n\n  public abstract fAlignThreshold: InputSignalWithTransform<number, unknown>;\n}\n","import { Component, ElementRef, inject, input, numberAttribute, OnDestroy, OnInit } from '@angular/core';\nimport { F_LINE_ALIGNMENT, FLineAlignmentBase } from './f-line-alignment-base';\nimport {\n  RemoveLineAlignmentFromStoreRequest,\n  AddLineAlignmentToStoreRequest,\n} from '../domain';\nimport { FMediator } from '@foblex/mediator';\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\n  extends FLineAlignmentBase implements OnInit, OnDestroy {\n\n  public override fAlignThreshold = input<number, unknown>(10, { transform: numberAttribute });\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _elementReference = inject(ElementRef);\n\n  public override get hostElement(): HTMLElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public ngOnInit(): void {\n    this._fMediator.execute(new AddLineAlignmentToStoreRequest(this));\n  }\n\n  public ngOnDestroy(): void {\n    this._fMediator.execute(new RemoveLineAlignmentFromStoreRequest());\n  }\n}\n","import { FLineAlignmentComponent } from './f-line-alignment.component';\n\nexport const F_LINE_ALIGNMENT_PROVIDERS = [\n    FLineAlignmentComponent\n];\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { LineAlignmentPreparationRequest } from './line-alignment-preparation.request';\nimport { IMinMaxPoint, IRect, ISize } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { GetFlowHostElementRequest } from '../../../domain';\nimport { GetNormalizedElementRectRequest } from '../../../domain';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext, FSummaryNodeMoveDragHandler } from '../../index';\nimport { FLineAlignmentDragHandler } from '../f-line-alignment.drag-handler';\nimport { FNodeBase } from '../../../f-node';\nimport { LineService } from '../../../f-line-alignment';\nimport { BrowserService } from '@foblex/platform';\n\n@Injectable()\n@FExecutionRegister(LineAlignmentPreparationRequest)\nexport class LineAlignmentPreparationExecution implements IExecution<LineAlignmentPreparationRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n  private readonly _fBrowser = inject(BrowserService);\n  private readonly _injector = inject(Injector);\n\n  private _lineService: LineService | undefined;\n\n  public handle(request: LineAlignmentPreparationRequest): void {\n    this._addLineAlignmentDragHandler(request.fNodes, request.commonRect);\n  }\n\n  private _addLineAlignmentDragHandler(fNodes: FNodeBase[], commonRect: IRect): void {\n    this._fDraggableDataContext.draggableItems.push(\n      new FLineAlignmentDragHandler(\n        this._injector,\n        this._lineService || this._createLineService(),\n        this._getFlowHostSize(),\n        commonRect,\n        this._getStaticNodeRects(fNodes),\n        this._getCommonRestrictions()\n      )\n    );\n  }\n\n  private _getFlowHostSize(): ISize {\n    return this._fMediator.execute<HTMLElement>(new GetFlowHostElementRequest())\n      .getBoundingClientRect();\n  }\n\n  private _createLineService(): LineService {\n    this._lineService = new LineService(\n      this._fBrowser,\n      this._fComponentsStore.fLineAlignment!.hostElement\n    );\n    return this._lineService;\n  }\n\n  private _getStaticNodeRects(fNodes: FNodeBase[]): IRect[] {\n    return this._getStaticNodes(fNodes).map((x) => {\n      return this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(x.hostElement));\n    })\n  }\n\n  private _getStaticNodes(fNodes: FNodeBase[]): FNodeBase[] {\n    return this._fComponentsStore.fNodes\n      .filter((x) => !fNodes.includes(x));\n  }\n\n  private _getCommonRestrictions(): IMinMaxPoint {\n    return this._fDraggableDataContext.draggableItems\n      .filter((x) => x instanceof FSummaryNodeMoveDragHandler)[0].limits;\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FNodeMovePreparationRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public fTrigger: FEventTrigger\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FNodeMovePreparationRequest } from './f-node-move-preparation.request';\nimport { ITransformModel, Point } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FNodeBase } from '../../../f-node';\nimport { CreateMoveNodesDragModelFromSelectionRequest } from '../create-move-nodes-drag-model-from-selection';\nimport { isValidEventTrigger, SelectAndUpdateNodeLayerRequest } from '../../../domain';\nimport { isClosestElementHasClass } from '@foblex/utils';\nimport { LineAlignmentPreparationRequest } from '../line-alignment-preparation';\nimport { FSummaryNodeMoveDragHandler } from '../f-summary-node-move.drag-handler';\n\n@Injectable()\n@FExecutionRegister(FNodeMovePreparationRequest)\nexport class FNodeMovePreparationExecution implements IExecution<FNodeMovePreparationRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow!.hostElement;\n  }\n\n  private _fNode: FNodeBase | undefined;\n\n  public handle(request: FNodeMovePreparationRequest): void {\n    if(!this._isValid(request) || !this._isValidTrigger(request)) {\n      return;\n    }\n\n    const summaryDragHandler = this._calculateDraggedItems(this._fNode!);\n\n    this._fDraggableDataContext.onPointerDownScale = this._transform.scale;\n    this._fDraggableDataContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost).div(this._transform.scale);\n    this._fDraggableDataContext.draggableItems = [summaryDragHandler];\n\n    if(this._fComponentsStore.fLineAlignment) {\n      this._fMediator.execute<void>(\n        new LineAlignmentPreparationRequest(\n          summaryDragHandler.fHandlers.map((x) => x.fNode), summaryDragHandler.commonRect\n        )\n      );\n    }\n  }\n\n  private _isValid(request: FNodeMovePreparationRequest): boolean {\n    return this._fDraggableDataContext.isEmpty()\n      && this._isDragHandleElement(request.event.targetElement)\n      && !!this._getNode(request.event.targetElement);\n  }\n\n  private _isDragHandleElement(element: HTMLElement): boolean {\n    return isClosestElementHasClass(element, '.f-drag-handle');\n  }\n\n  private _getNode(element: HTMLElement): FNodeBase | undefined {\n    this._fNode = this._fComponentsStore.fNodes\n      .find(x => x.isContains(element) && !x.fDraggingDisabled);\n    return this._fNode;\n  }\n\n  private _isValidTrigger(request: FNodeMovePreparationRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n\n  //We drag nodes from selection model\n  private _calculateDraggedItems(fNode: FNodeBase): FSummaryNodeMoveDragHandler {\n    let result: FSummaryNodeMoveDragHandler;\n    if (!fNode.fSelectionDisabled) {\n      // Need to select node before drag\n      this._fMediator.execute(new SelectAndUpdateNodeLayerRequest(fNode));\n\n      result = this._dragModelFromSelection();\n    } else {\n      // User can drag node that can't be selected\n      result = this._dragModelFromSelection(fNode);\n    }\n    return result;\n  }\n\n  private _dragModelFromSelection(nodeWithDisabledSelection?: FNodeBase): FSummaryNodeMoveDragHandler {\n    return this._fMediator.execute(\n      new CreateMoveNodesDragModelFromSelectionRequest(nodeWithDisabledSelection)\n    );\n  }\n}\n","import {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FNodeMoveFinalizeRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FNodeMoveFinalizeRequest } from './f-node-move-finalize.request';\nimport { IPoint, Point } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport {\n  IsConnectionUnderNodeRequest\n} from '../../domain';\nimport { IFDragHandler } from '../../f-drag-handler';\nimport { FNodeDropToGroupDragHandler } from '../../f-drop-to-group';\nimport { ILineAlignmentResult, INearestCoordinateResult } from '../../../f-line-alignment';\nimport { FLineAlignmentDragHandler } from '../f-line-alignment.drag-handler';\nimport { FSummaryNodeMoveDragHandler } from '../f-summary-node-move.drag-handler';\nimport { FNodeBase } from '../../../f-node';\n\n@Injectable()\n@FExecutionRegister(FNodeMoveFinalizeRequest)\nexport class FNodeMoveFinalizeExecution implements IExecution<FNodeMoveFinalizeRequest, void> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow!.hostElement;\n  }\n\n  public handle(request: FNodeMoveFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    const difference = this._getDifferenceWithLineAlignment(\n      this._getDifferenceBetweenPreparationAndFinalize(request.event.getPosition())\n    );\n\n    const firstNodeOrGroup: FSummaryNodeMoveDragHandler = this._fDraggableDataContext.draggableItems\n      .find((x) => x instanceof FSummaryNodeMoveDragHandler)!;\n\n    this._finalizeMove(firstNodeOrGroup.calculateRestrictedDifference(difference));\n\n    this._applyConnectionUnderDroppedNode();\n  }\n\n  private _isValid(): boolean {\n    return this._fDraggableDataContext.draggableItems.some((x) => x instanceof FSummaryNodeMoveDragHandler);\n  }\n\n  private _finalizeMove(difference: IPoint): void {\n    this._getItems().forEach((x) => {\n      x.onPointerMove({ ...difference });\n      x.onPointerUp?.();\n    });\n  }\n\n  private _getItems(): IFDragHandler[] {\n    return this._fDraggableDataContext.draggableItems\n      .filter((x) => !(x instanceof FNodeDropToGroupDragHandler));\n  }\n\n  private _getDifferenceBetweenPreparationAndFinalize(position: IPoint): Point {\n    return Point.fromPoint(position).elementTransform(this._fHost)\n      .div(this._fDraggableDataContext.onPointerDownScale)\n      .sub(this._fDraggableDataContext.onPointerDownPosition);\n  }\n\n  private _getDifferenceWithLineAlignment(difference: IPoint): IPoint {\n\n    return this._applyLineAlignmentDifference(\n      difference,\n      this._getLineAlignmentDifference(difference)\n    );\n  }\n\n  private _getLineAlignmentDifference(difference: IPoint): ILineAlignmentResult | undefined {\n    return this._fDraggableDataContext.draggableItems\n      .find((x) => x instanceof FLineAlignmentDragHandler)\n      ?.findNearestCoordinate(difference);\n  }\n\n  private _applyLineAlignmentDifference(difference: IPoint, intersection: ILineAlignmentResult | undefined): IPoint {\n    if (intersection) {\n      difference.x = this._isIntersectValue(intersection.xResult) ? (difference.x - intersection.xResult.distance!) : difference.x;\n      difference.y = this._isIntersectValue(intersection.yResult) ? (difference.y - intersection.yResult.distance!) : difference.y;\n    }\n    return difference;\n  }\n\n  private _isIntersectValue(result: INearestCoordinateResult): boolean {\n    return result.value !== undefined && result.value !== null;\n  }\n\n  private _applyConnectionUnderDroppedNode(): void {\n    if (this._isDraggedJustOneNode() && this._fComponentsStore.fDraggable?.fEmitOnNodeIntersect) {\n\n      const fNode = this._getFirstNodeOrGroup();\n      setTimeout(() => this._fMediator.execute(new IsConnectionUnderNodeRequest(fNode)));\n    }\n  }\n\n  private _isDraggedJustOneNode(): boolean {\n    return (this._fDraggableDataContext.draggableItems[ 0 ] as FSummaryNodeMoveDragHandler).fHandlers.length === 1;\n  }\n\n  private _getFirstNodeOrGroup(): FNodeBase {\n    return (this._fDraggableDataContext.draggableItems[ 0 ] as FSummaryNodeMoveDragHandler).fHandlers[ 0 ].fNode;\n  }\n}\n","import { CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS } from './create-move-nodes-drag-model-from-selection';\nimport { FNodeMoveFinalizeExecution } from './move-finalize';\nimport { FNodeMovePreparationExecution } from './move-preparation';\nimport { LineAlignmentPreparationExecution } from './line-alignment-preparation';\n\nexport const NODE_PROVIDERS = [\n\n  ...CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS,\n\n  LineAlignmentPreparationExecution,\n\n  FNodeMoveFinalizeExecution,\n\n  FNodeMovePreparationExecution,\n];\n","import { IPoint } from '@foblex/2d';\n\nexport class FDropToGroupEvent {\n\n  constructor(\n    public fTargetNode: string,\n    public fNodes: string[],\n    public fDropPosition: IPoint,\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FNodeDropToGroupFinalizeRequest } from './f-node-drop-to-group-finalize.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FNodeDropToGroupDragHandler } from '../f-node-drop-to-group.drag-handler';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FSummaryNodeMoveDragHandler } from '../../f-node-move';\nimport { FDropToGroupEvent } from '../f-drop-to-group.event';\nimport {IPointerEvent} from \"../../../drag-toolkit\";\n\n@Injectable()\n@FExecutionRegister(FNodeDropToGroupFinalizeRequest)\nexport class FNodeDropToGroupFinalizeExecution\n  implements IExecution<FNodeDropToGroupFinalizeRequest, void> {\n\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: FNodeDropToGroupFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    const item = this._getDragHandleItem();\n    if(item.fNodeWithRect) {\n      this._emitDroppedChildrenEvent(item.fNodeWithRect.node.fId, request.event);\n    }\n    item.onPointerUp?.();\n  }\n\n  private _isValid(): boolean {\n    return this._fDraggableDataContext.draggableItems\n      .some((x) => x instanceof FNodeDropToGroupDragHandler);\n  }\n\n  private _emitDroppedChildrenEvent(fTargetId: string, event: IPointerEvent): void {\n    this._fComponentsStore.fDraggable?.fDropToGroup.emit(\n      new FDropToGroupEvent(fTargetId, this._getDraggedNodeIds(), event.getPosition())\n    );\n  }\n\n  private _getDragHandleItem(): FNodeDropToGroupDragHandler {\n    const result = this._findDragHandleItem();\n    if(!result) {\n      throw new Error('NodeDragToParentDragHandler not found');\n    }\n    return result;\n  }\n\n  private _findDragHandleItem(): FNodeDropToGroupDragHandler | undefined {\n    return this._fDraggableDataContext.draggableItems\n      .find((x) => x instanceof FNodeDropToGroupDragHandler);\n  }\n\n  private _getDraggedNodeIds(): string[] {\n    return this._fDraggableDataContext.draggableItems\n      .find((x) => x instanceof FSummaryNodeMoveDragHandler)?.fHandlers\n      .map((x) => x.fNode.fId) || [];\n  }\n}\n","import {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FNodeDropToGroupPreparationRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import { FExternalItemBase } from '../../f-external-item-base';\n\nexport class FExternalItemCreatePlaceholderRequest {\n\n  constructor(\n    public fExternalItem: FExternalItemBase,\n  ) {\n  }\n}\n","import { FExternalItemCreatePlaceholderRequest } from './f-external-item-create-placeholder.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { EmbeddedViewRef, inject, Injectable, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { deepCloneNode, getOrCreateRootNodeForViewRef } from '@foblex/utils';\nimport { BrowserService } from '@foblex/platform';\n\n@Injectable()\n@FExecutionRegister(FExternalItemCreatePlaceholderRequest)\nexport class FExternalItemCreatePlaceholderExecution\n  implements IExecution<FExternalItemCreatePlaceholderRequest, HTMLElement | SVGElement> {\n\n  private readonly _fBrowser = inject(BrowserService);\n  private readonly _containerRef = inject(ViewContainerRef);\n\n  public handle(request: FExternalItemCreatePlaceholderRequest): HTMLElement | SVGElement {\n    const { hostElement, fPlaceholder } = request.fExternalItem;\n\n    const result = fPlaceholder ?\n      this._fromTemplate(fPlaceholder) :\n      this._fromHost(hostElement as HTMLElement);\n\n    result.classList.add('f-external-item-placeholder');\n    result.style.pointerEvents = 'none';\n\n    return result;\n  }\n\n  private _fromTemplate(template: TemplateRef<any>): HTMLElement {\n    return getOrCreateRootNodeForViewRef(this._createViewRef(template), this._fBrowser.document);\n  }\n\n  private _fromHost(element: HTMLElement): HTMLElement {\n    return deepCloneNode(element);\n  }\n\n  private _createViewRef(template: TemplateRef<any>): EmbeddedViewRef<any> {\n    const result = this._containerRef.createEmbeddedView(template);\n    result.detectChanges();\n    return result;\n  }\n}\n","import { FExternalItemBase } from '../../f-external-item-base';\n\nexport class FExternalItemCreatePreviewRequest {\n\n  constructor(\n    public fExternalItem: FExternalItemBase,\n  ) {\n  }\n}\n","import { FExternalItemCreatePreviewRequest } from './f-external-item-create-preview.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { EmbeddedViewRef, inject, Injectable, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { deepCloneNode, disableDragInteractions, extendStyles, getOrCreateRootNodeForViewRef } from '@foblex/utils';\nimport { BrowserService } from '@foblex/platform';\n\n@Injectable()\n@FExecutionRegister(FExternalItemCreatePreviewRequest)\nexport class FExternalItemCreatePreviewExecution\n  implements IExecution<FExternalItemCreatePreviewRequest, HTMLElement | SVGElement> {\n\n  private readonly _fBrowser = inject(BrowserService);\n  private readonly _containerRef = inject(ViewContainerRef);\n\n  public handle(request: FExternalItemCreatePreviewRequest): HTMLElement | SVGElement {\n    const { hostElement, fPreview } = request.fExternalItem;\n\n    const result = fPreview ?\n      this._fromTemplate(fPreview) :\n      this._fromHost(hostElement as HTMLElement);\n\n    this._setPreviewStyles(result);\n    disableDragInteractions(result);\n    result.classList.add('f-external-item-preview');\n\n    return result;\n  }\n\n  private _fromTemplate(template: TemplateRef<any>): HTMLElement {\n    return getOrCreateRootNodeForViewRef(this._createViewRef(template), this._fBrowser.document);\n  }\n\n  private _fromHost(element: HTMLElement): HTMLElement {\n    return deepCloneNode(element);\n  }\n\n  private _createViewRef(template: TemplateRef<any>): EmbeddedViewRef<any> {\n    const result = this._containerRef.createEmbeddedView(template);\n    result.detectChanges();\n    return result;\n  }\n\n  private _setPreviewStyles(element: HTMLElement): void {\n    extendStyles(\n      element.style,\n      {\n        'pointer-events': 'none',\n        'margin': 'showPopover' in element ? '0 auto 0 0' : '0',\n        'position': 'fixed',\n        'top': '0',\n        'left': '0',\n        'z-index': '1000',\n      },\n      new Set([ 'position', ]),\n    );\n  }\n}\n","import {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FExternalItemFinalizeRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import {IPoint, IRect, ITransformModel, Point, RectExtensions} from '@foblex/2d';\nimport {\n  FExternalItemBase,\n  FExternalItemCreatePlaceholderRequest,\n  FExternalItemCreatePreviewRequest,\n  IFExternalItemDragResult\n} from '../../f-external-item';\nimport {FDragHandlerResult, IFDragHandler, PointBoundsLimiter} from '../../f-draggable';\nimport {BrowserService} from '@foblex/platform';\nimport {FMediator} from '@foblex/mediator';\nimport {Injector} from '@angular/core';\nimport {FComponentsStore} from \"../../f-storage\";\nimport {GetNormalizedElementRectRequest} from \"../../domain\";\nimport {infinityMinMax} from \"../../utils\";\n\nexport class FExternalItemDragHandler implements IFDragHandler {\n\n  public fEventType = 'external-item';\n  public fData: any;\n\n  private readonly _fResult: FDragHandlerResult<IFExternalItemDragResult>;\n  private readonly _fMediator: FMediator;\n  private readonly _fBrowser: BrowserService;\n  private readonly _fComponentStore: FComponentsStore;\n\n  private _preview: HTMLElement | SVGElement | undefined;\n  private _placeholder: HTMLElement | SVGElement | undefined;\n  private _onPointerDownRect: IRect = RectExtensions.initialize();\n  private readonly _fBoundsLimiter: PointBoundsLimiter;\n\n  private get _fItemHost(): HTMLElement | SVGElement {\n    return this._fExternalItem.hostElement;\n  }\n\n  private get _body(): Element {\n    return this._fBrowser.document.fullscreenElement ?? this._fBrowser.document.body;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._fComponentStore.fCanvas!.transform;\n  }\n\n  private readonly _fItemHostDisplay: string | undefined;\n\n  constructor(\n    _injector: Injector,\n    private _fExternalItem: FExternalItemBase,\n  ) {\n    this.fData = {fData: _fExternalItem.fData};\n    this._fResult = _injector.get(FDragHandlerResult);\n    this._fMediator = _injector.get(FMediator);\n    this._fBrowser = _injector.get(BrowserService);\n    this._fComponentStore = _injector.get(FComponentsStore);\n\n    this._fBoundsLimiter = new PointBoundsLimiter(\n      _injector, this._getStartPoint(), infinityMinMax()\n    );\n\n    this._fItemHostDisplay = this._fItemHost.style.display;\n  }\n\n  private _getStartPoint(): IPoint {\n    return this._fMediator.execute<IRect>(\n      new GetNormalizedElementRectRequest(this._fExternalItem.hostElement)\n    );\n  }\n\n  public prepareDragSequence(): void {\n    this._onPointerDownRect = this._getExternalItemRect();\n\n    this._createAndAppendPreview();\n    this._createAndAppendPlaceholder();\n\n    this._setFResultData();\n  }\n\n  private _createAndAppendPreview(): void {\n    this._preview = this._fMediator.execute<HTMLElement>(\n      new FExternalItemCreatePreviewRequest(this._fExternalItem)\n    );\n    if (this._fExternalItem.fPreviewMatchSize) {\n      this._matchElementSize(this._preview, this._onPointerDownRect);\n    }\n    this._preview!.style.transform = setTransform(this._onPointerDownRect);\n    this._body.appendChild(this._preview);\n  }\n\n  private _createAndAppendPlaceholder(): void {\n    this._placeholder = this._fMediator.execute<HTMLElement>(\n      new FExternalItemCreatePlaceholderRequest(this._fExternalItem)\n    );\n    this._body.appendChild(this._fItemHost.parentElement!.replaceChild(this._placeholder!, this._fItemHost));\n    this._fItemHost.style.display = 'none';\n  }\n\n  private _matchElementSize(target: HTMLElement, sourceRect: IRect): void {\n    target.style.width = `${sourceRect.width}px`;\n    target.style.height = `${sourceRect.height}px`;\n  }\n\n  private _setFResultData(): void {\n    this._fResult.setData({\n      preview: this._preview,\n      fExternalItem: this._fExternalItem,\n    });\n  }\n\n  private _getExternalItemRect(): IRect {\n    const rect = this._fExternalItem.hostElement.getBoundingClientRect();\n    const scrollTop = this._fBrowser.window.pageYOffset || this._fBrowser.document.documentElement.scrollTop;\n    const scrollLeft = this._fBrowser.window.pageXOffset || this._fBrowser.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 onPointerMove(difference: IPoint): void {\n    const adjustCellSize = this._fComponentStore.fDraggable?.fCellSizeWhileDragging ?? false;\n    const differenceWithRestrictions = Point.fromPoint(this._fBoundsLimiter.limit(difference, adjustCellSize))\n      .mult(this._transform.scale);\n\n    const position = Point.fromPoint(this._onPointerDownRect).add(differenceWithRestrictions);\n    this._preview!.style.transform = setTransform(position);\n  }\n\n  public onPointerUp(): void {\n    this._body.removeChild(this._preview!);\n\n    this._placeholder!.parentElement!.replaceChild(this._fItemHost, this._placeholder!);\n    this._fItemHost.style.display = this._fItemHostDisplay ?? 'block';\n  }\n}\n\nfunction setTransform({x, y}: IPoint): string {\n  return `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;\n}\n\n","import {IPoint, IRect} from '@foblex/2d';\n\nexport class FCreateNodeEvent<TData = any> {\n\n  constructor(\n    public rect: IRect,\n    public data: TData,\n    public fTargetNode?: string,\n    public fDropPosition?: IPoint,\n  ) {\n  }\n}\n","import {EventEmitter, inject, Injectable} from '@angular/core';\nimport {FExternalItemFinalizeRequest} from './f-external-item-finalize.request';\nimport {IPoint, IRect} from '@foblex/2d';\nimport {FExecutionRegister, FMediator, IExecution} from '@foblex/mediator';\nimport {FComponentsStore} from '../../../f-storage';\nimport {FExternalItemDragHandler} from '../f-external-item.drag-handler';\nimport {FCreateNodeEvent} from '../f-create-node.event';\nimport {GetNormalizedElementRectRequest} from '../../../domain';\nimport {\n  FDraggableDataContext,\n  FDragHandlerResult,\n  FNodeDropToGroupDragHandler\n} from '../../../f-draggable';\nimport {BrowserService} from '@foblex/platform';\nimport {IFExternalItemDragResult} from '../i-f-external-item-drag-result';\n\n@Injectable()\n@FExecutionRegister(FExternalItemFinalizeRequest)\nexport class FExternalItemFinalizeExecution implements IExecution<FExternalItemFinalizeRequest, void> {\n\n  private readonly _fResult: FDragHandlerResult<IFExternalItemDragResult> = inject(FDragHandlerResult);\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n  private readonly _fBrowser = inject(BrowserService);\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow!.hostElement;\n  }\n\n  private get _fCreateNode(): EventEmitter<FCreateNodeEvent> {\n    return this._fComponentsStore.fDraggable!.fCreateNode;\n  }\n\n  private get _fDragHandler(): FExternalItemDragHandler {\n    return this._fDraggableDataContext.draggableItems[0] as FExternalItemDragHandler;\n  }\n\n  public handle(request: FExternalItemFinalizeRequest): void {\n    if (!this._isValid()) {\n      return\n    }\n\n    const destinationNodeOrGroupId = this._getDestinationNodeOrGroupId();\n\n    this._emitEvent(\n      this._getElementsFromPoint(request.event.getPosition()),\n      destinationNodeOrGroupId, request.event.getPosition()\n    );\n\n    this._fDragHandler.onPointerUp();\n    this._fDraggableDataContext.draggableItems = [];\n  }\n\n  private _isValid(): boolean {\n    return this._fDraggableDataContext.draggableItems.some(\n      (x) => x instanceof FExternalItemDragHandler\n    );\n  }\n\n  private _getDestinationNodeOrGroupId(): string | undefined {\n    const dropToGroupHandler = this._getDropToGroupHandler();\n    let result = dropToGroupHandler.fNodeWithRect?.node.fId;\n    dropToGroupHandler.onPointerUp?.();\n    return result;\n  }\n\n  private _getDropToGroupHandler(): FNodeDropToGroupDragHandler {\n    const result = this._fDraggableDataContext.draggableItems\n      .find((x) => x instanceof FNodeDropToGroupDragHandler)\n    if (!result) {\n      throw new Error('NodeDragToParentDragHandler not found');\n    }\n    return result;\n  }\n\n  private _getElementsFromPoint(position: IPoint): HTMLElement[] {\n    return this._fBrowser.document.elementsFromPoint(position.x, position.y)\n      .filter(x => !x.closest('.f-external-item')\n        && !x.closest('.f-external-item-preview')) as HTMLElement[];\n  }\n\n  private _emitEvent(elements: HTMLElement[], destinationNodeOrGroupId: string | undefined, eventPosition: IPoint): void {\n    if (this.isPointerInCanvasRect(elements)) {\n      this._fCreateNode.emit(\n        new FCreateNodeEvent(\n          this._getPreviewRect(), this._fResult.getData().fExternalItem.fData,\n          destinationNodeOrGroupId, destinationNodeOrGroupId ? eventPosition : undefined\n        )\n      );\n    }\n  }\n\n  private isPointerInCanvasRect(elements: HTMLElement[]): boolean {\n    return elements.length ? this._fHost.contains(elements[0]) : false;\n  }\n\n  private _getPreviewRect(): IRect {\n    return this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(this._fResult.getData().preview));\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FExternalItemPreparationRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public fTrigger: FEventTrigger\n  ) {\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { FExternalItemPreparationRequest } from './f-external-item-preparation.request';\nimport {ITransformModel, Point} from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FExternalItemBase, FExternalItemService, getExternalItem, isExternalItem } from '../../../f-external-item';\nimport { FExternalItemDragHandler } from '../f-external-item.drag-handler';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { isValidEventTrigger } from '../../../domain';\n\n@Injectable()\n@FExecutionRegister(FExternalItemPreparationRequest)\nexport class FExternalItemPreparationExecution implements IExecution<FExternalItemPreparationRequest, void> {\n\n  private readonly _fExternalItemService = inject(FExternalItemService);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _injector = inject(Injector);\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow!.hostElement;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  public handle(request: FExternalItemPreparationRequest): void {\n    if (!this._isValid(request) || !this._isValidTrigger(request)) {\n      return;\n    }\n    this._fDraggableDataContext.onPointerDownScale = this._transform.scale;\n    this._fDraggableDataContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost).div(this._transform.scale);\n    this._fDraggableDataContext.draggableItems = [\n      new FExternalItemDragHandler(\n        this._injector,\n        this._getExternalItem(request.event.targetElement)!,\n      )\n    ];\n  }\n\n  private _isValid(request: FExternalItemPreparationRequest): boolean {\n    return this._isValidExternalItem(request.event.targetElement, this._getExternalItem(request.event.targetElement));\n  }\n\n  private _isValidExternalItem(element: HTMLElement, fExternalItem?: FExternalItemBase): boolean {\n    return isExternalItem(element) && !!fExternalItem && !fExternalItem.fDisabled;\n  }\n\n  private _getExternalItem(targetElement: HTMLElement): FExternalItemBase<any> | undefined {\n    return this._fExternalItemService.getItem(getExternalItem(targetElement));\n  }\n\n  private _isValidTrigger(request: FExternalItemPreparationRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n}\n","export class PreventDefaultIsExternalItemRequest {\n\n  constructor(\n    public event: Event\n  ) {\n  }\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 { PreventDefaultIsExternalItemRequest } from './prevent-default-is-external-item.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { Injectable } from '@angular/core';\nimport { isExternalItem } from '../../is-external-item';\n\n@Injectable()\n@FExecutionRegister(PreventDefaultIsExternalItemRequest)\nexport class PreventDefaultIsExternalItemExecution implements IExecution<PreventDefaultIsExternalItemRequest, void> {\n\n  public handle(request: PreventDefaultIsExternalItemRequest): void {\n    if (this._isTargetItemExternal(request.event)) {\n      request.event.preventDefault();\n    }\n  }\n\n  private _isTargetItemExternal(event: Event): boolean {\n    let isTargetItemExternal = this._isExternalItem(event.target as HTMLElement);\n    let isTargetParentItemExternal = this._isExternalItem((event.target as Node).parentNode as HTMLElement);\n    return isTargetItemExternal || isTargetParentItemExternal;\n  }\n\n  private _isExternalItem(target: HTMLElement): boolean {\n    let result = false;\n    try {\n      result = isExternalItem(target);\n    } catch (e) {\n    }\n    return result;\n  }\n}\n","import { FExternalItemPreparationExecution } from './preparation';\nimport { FExternalItemFinalizeExecution } from './finalize';\nimport { PreventDefaultIsExternalItemExecution } from './prevent-default-is-external-item';\nimport { FExternalItemCreatePreviewExecution } from './create-preview';\nimport { FExternalItemCreatePlaceholderExecution } from './create-placeholder';\n\nexport const F_EXTERNAL_ITEM_DRAG_AND_DROP_PROVIDERS = [\n\n  FExternalItemCreatePlaceholderExecution,\n\n  FExternalItemCreatePreviewExecution,\n\n  FExternalItemFinalizeExecution,\n\n  FExternalItemPreparationExecution,\n\n  PreventDefaultIsExternalItemExecution,\n];\n","import { Directive, TemplateRef } from '@angular/core';\nimport { IHasHostElement } from '../i-has-host-element';\n\n@Directive()\nexport abstract class FExternalItemBase<TData = any> implements IHasHostElement {\n\n  public abstract fExternalItemId: string;\n\n  public abstract hostElement: HTMLElement | SVGElement;\n\n  public abstract fData: TData | undefined;\n\n  public abstract fDisabled: boolean;\n\n  public abstract fPreview: TemplateRef<any> | undefined;\n\n  public abstract fPreviewMatchSize: boolean;\n\n  public abstract fPlaceholder: TemplateRef<any> | undefined;\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 { InjectionToken } from '@angular/core';\nimport { FExternalItemBase } from './f-external-item-base';\n\nexport const F_EXTERNAL_ITEM = new InjectionToken<FExternalItemBase>('F_EXTERNAL_ITEM');\n","import {\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  TemplateRef\n} from '@angular/core';\nimport { FExternalItemBase } from './f-external-item-base';\nimport { FExternalItemService } from './f-external-item.service';\nimport { F_EXTERNAL_ITEM } from './f-external-item-token';\n\nlet uniqueId: number = 0;\n\n@Directive({\n  selector: \"[fExternalItem]\",\n  standalone: true,\n  host: {\n    '[attr.id]': 'fExternalItemId',\n    class: \"f-component f-external-item\",\n    '[class.f-external-item-disabled]': 'fDisabled',\n  },\n  providers: [\n    { provide: F_EXTERNAL_ITEM, useExisting: FExternalItemDirective }\n  ],\n})\nexport class FExternalItemDirective<TData> extends FExternalItemBase<TData> implements OnInit, OnDestroy {\n\n  private readonly _elementReference = inject(ElementRef);\n  private readonly _fExternalItemService = inject(FExternalItemService);\n\n  @Input()\n  public override fExternalItemId: 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 fData: TData | undefined;\n\n  @Input({ transform: booleanAttribute })\n  public override fDisabled: boolean = false;\n\n  @Input()\n  public override fPreview: TemplateRef<any> | undefined;\n\n  @Input({ transform: booleanAttribute })\n  public override fPreviewMatchSize: boolean = true;\n\n  @Input()\n  public override fPlaceholder: TemplateRef<any> | undefined;\n\n  public ngOnInit(): void {\n    this._fExternalItemService.registerItem(this);\n    this.disablePointerEvents(Array.from(this.hostElement.children) as HTMLElement[]);\n  }\n\n  private disablePointerEvents(children: HTMLElement[]): void {\n    children.forEach((x) => {\n      x.style.pointerEvents = 'none';\n      this.disablePointerEvents(Array.from(x.children) as HTMLElement[]);\n    });\n  }\n\n  public ngOnDestroy(): void {\n    this._fExternalItemService.removeItem(this);\n  }\n}\n","import {\n  Directive,\n  inject,\n  OnDestroy,\n  OnInit, TemplateRef,\n} from '@angular/core';\nimport { F_EXTERNAL_ITEM } from './f-external-item-token';\n\n@Directive({\n  selector: \"ng-template[fExternalItemPlaceholder]\",\n  standalone: true,\n  host: {\n    class: \"f-component f-external-item-placeholder\",\n  }\n})\nexport class FExternalItemPlaceholderDirective<T = any> implements OnInit, OnDestroy {\n\n  private readonly _fExternalItem = inject(F_EXTERNAL_ITEM);\n  private readonly _templateRef = inject<TemplateRef<T>>(TemplateRef);\n\n  public ngOnInit(): void {\n    this._fExternalItem.fPlaceholder = this._templateRef;\n  }\n\n  public ngOnDestroy(): void {\n    this._fExternalItem.fPlaceholder = undefined;\n  }\n}\n","import {\n  Directive,\n  inject,\n  OnDestroy,\n  OnInit, TemplateRef,\n} from '@angular/core';\nimport { F_EXTERNAL_ITEM } from './f-external-item-token';\n\n@Directive({\n  selector: \"ng-template[fExternalItemPreview]\",\n  standalone: true,\n  host: {\n    class: \"f-component f-external-item-preview\",\n  },\n})\nexport class FExternalItemPreviewDirective<T = any> implements OnInit, OnDestroy {\n\n  private readonly _fExternalItem = inject(F_EXTERNAL_ITEM);\n  private readonly _templateRef = inject<TemplateRef<T>>(TemplateRef);\n\n  public ngOnInit(): void {\n    this._fExternalItem.fPreview = this._templateRef;\n  }\n\n  public ngOnDestroy(): void {\n    this._fExternalItem.fPreview = undefined;\n  }\n}\n","import { FExternalItemDirective } from './f-external-item.directive';\n\nexport const F_EXTERNAL_ITEM_PROVIDERS = [\n  FExternalItemDirective\n];\n","import {inject, Injectable, Injector} from '@angular/core';\nimport {FNodeDropToGroupPreparationRequest} from './f-node-drop-to-group-preparation.request';\nimport {FExecutionRegister, FMediator, IExecution} from '@foblex/mediator';\nimport {FComponentsStore} from '../../../f-storage';\nimport {INodeWithRect} from '../../domain';\nimport {IPoint, IRect, ITransformModel, PointExtensions, RectExtensions} from '@foblex/2d';\nimport {GetNormalizedElementRectRequest, GetParentNodesRequest} from '../../../domain';\nimport {FNodeBase} from '../../../f-node';\nimport {FDraggableDataContext} from '../../f-draggable-data-context';\nimport {FNodeDropToGroupDragHandler} from '../f-node-drop-to-group.drag-handler';\nimport {FSummaryNodeMoveDragHandler} from '../../f-node-move';\nimport {FExternalItemDragHandler} from \"../../../f-external-item\";\n\n@Injectable()\n@FExecutionRegister(FNodeDropToGroupPreparationRequest)\nexport class FNodeDropToGroupPreparationExecution\n  implements IExecution<FNodeDropToGroupPreparationRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _injector = inject(Injector);\n\n  private get _fNodes(): FNodeBase[] {\n    return this._fComponentsStore.fNodes;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  private get _fCanvasPosition(): IPoint {\n    return PointExtensions.sum(this._transform.position, this._transform.scaledPosition)\n  }\n\n  public handle(request: FNodeDropToGroupPreparationRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    const fNode = this._fComponentsStore\n      .fNodes.find(n => n.isContains(request.event.targetElement));\n    if (!fNode && !this._isExternalItemDragHandler()) {\n      throw new Error('Node not found');\n    }\n\n    this._fDraggableDataContext.draggableItems.push(\n      new FNodeDropToGroupDragHandler(\n        this._injector,\n        this._getNotDraggedNodesRects()\n      )\n    );\n  }\n\n  private _isValid(): boolean {\n    return this._isNodeDragHandler() || this._isExternalItemDragHandler();\n  }\n\n  private _isNodeDragHandler(): boolean {\n    return this._fDraggableDataContext.draggableItems\n      .some((x) => x instanceof FSummaryNodeMoveDragHandler);\n  }\n\n  private _isExternalItemDragHandler(): boolean {\n    return this._fDraggableDataContext.draggableItems\n      .some((x) => x instanceof FExternalItemDragHandler);\n  }\n\n  private _getNotDraggedNodesRects(): INodeWithRect[] {\n    const draggedNodes = this._addParentNodes(this._getNodesBeingDragged());\n    return this._getNotDraggedNodes(draggedNodes).map((x) => {\n      const rect = this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(x.hostElement));\n      return {\n        node: x,\n        rect: RectExtensions.initialize(\n          rect.x * this._transform.scale + this._fCanvasPosition.x,\n          rect.y * this._transform.scale + this._fCanvasPosition.y,\n          rect.width * this._transform.scale,\n          rect.height * this._transform.scale\n        )\n      }\n    });\n  }\n\n  private _getNodesBeingDragged(): FNodeBase[] {\n    return this._fDraggableDataContext.draggableItems\n      .find((x) => x instanceof FSummaryNodeMoveDragHandler)\n      ?.fHandlers.map((x) => x.fNode) || [];\n  }\n\n  private _addParentNodes(fNodes: FNodeBase[]): FNodeBase[] {\n    return fNodes.reduce((result: FNodeBase[], x: FNodeBase) => {\n      result.push(x, ...this._fMediator.execute<FNodeBase[]>(new GetParentNodesRequest(x)));\n      return result;\n    }, []);\n  }\n\n  private _getNotDraggedNodes(draggedNodes: FNodeBase[]): FNodeBase[] {\n    return this._fNodes.filter((x) => !draggedNodes.includes(x));\n  }\n}\n","import { FNodeDropToGroupPreparationExecution } from './drop-to-group-preparation';\nimport { FNodeDropToGroupFinalizeExecution } from './drop-to-group-finalize';\n\nexport const NODE_DROP_TO_GROUP_PROVIDERS = [\n\n  FNodeDropToGroupPreparationExecution,\n\n  FNodeDropToGroupFinalizeExecution\n];\n","import { IRect } from '@foblex/2d';\nimport { INodeResizeRestrictions } from '../get-node-resize-restrictions';\n\nexport class ApplyChildResizeRestrictionsRequest {\n\n  constructor(\n    public rect: IRect,\n    public restrictions: INodeResizeRestrictions\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ApplyChildResizeRestrictionsRequest } from './apply-child-resize-restrictions.request';\nimport { IRect } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\n\nconst CHILD_RESIZE_OFFSET = 0;\n\n@Injectable()\n@FExecutionRegister(ApplyChildResizeRestrictionsRequest)\nexport class ApplyChildResizeRestrictionsExecution\n  implements IExecution<ApplyChildResizeRestrictionsRequest, void> {\n\n  public handle(request: ApplyChildResizeRestrictionsRequest): void {\n    this._apply(request.rect, request.restrictions.childrenBounds!);\n  }\n\n  private _apply(rect: IRect, restrictionsRect: IRect): void {\n    this._restrictLeft(rect, restrictionsRect);\n    this._restrictTop(rect, restrictionsRect);\n    this._restrictRight(rect, restrictionsRect);\n    this._restrictBottom(rect, restrictionsRect);\n  }\n\n  private _restrictLeft(rect: IRect, restrictions: IRect): void {\n    const delta = rect.x - (restrictions.x - CHILD_RESIZE_OFFSET);\n    if (delta > 0) {\n      rect.x -= delta;\n      rect.width += delta;\n    }\n  }\n\n  private _restrictTop(rect: IRect, restrictions: IRect): void {\n    const delta = rect.y - (restrictions.y - CHILD_RESIZE_OFFSET);\n    if (delta > 0) {\n      rect.y -= delta;\n      rect.height += delta;\n    }\n  }\n\n  private _restrictRight(rect: IRect, restrictions: IRect): void {\n    const maxRight = restrictions.x + restrictions.width + CHILD_RESIZE_OFFSET;\n    if (rect.x + rect.width <= maxRight) {\n      rect.width = maxRight - rect.x;\n    }\n  }\n\n  private _restrictBottom(rect: IRect, restrictions: IRect): void {\n    const maxBottom = restrictions.y + restrictions.height + CHILD_RESIZE_OFFSET;\n    if (rect.y + rect.height <= maxBottom) {\n      rect.height = maxBottom - rect.y;\n    }\n  }\n}\n","import { IRect } from '@foblex/2d';\n\nexport class ApplyParentResizeRestrictionsRequest {\n\n  constructor(\n    public rect: IRect,\n    public restrictionsRect: IRect,\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ApplyParentResizeRestrictionsRequest } from './apply-parent-resize-restrictions.request';\nimport { IRect } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\n\nconst OFFSET = 0;\n\n@Injectable()\n@FExecutionRegister(ApplyParentResizeRestrictionsRequest)\nexport class ApplyParentResizeRestrictionsExecution\n  implements IExecution<ApplyParentResizeRestrictionsRequest, void> {\n\n  public handle(request: ApplyParentResizeRestrictionsRequest): void {\n    this.applyRestrictions(request.rect, request.restrictionsRect);\n  }\n\n  private applyRestrictions(rect: IRect, restrictionsRect: IRect): void {\n    this.left(rect, restrictionsRect);\n    this.top(rect, restrictionsRect);\n    this.right(rect, restrictionsRect);\n    this.bottom(rect, restrictionsRect);\n  }\n\n  private left(rect: IRect, restrictionsRect: IRect): void {\n    if (rect.x <= restrictionsRect.x + OFFSET) {\n      rect.width -= restrictionsRect.x - rect.x + OFFSET;\n      rect.x = restrictionsRect.x + OFFSET;\n    }\n  }\n\n  private top(rect: IRect, restrictionsRect: IRect): void {\n    if (rect.y <= restrictionsRect.y + OFFSET) {\n      rect.height -= restrictionsRect.y - rect.y + OFFSET;\n      rect.y = restrictionsRect.y + OFFSET;\n    }\n  }\n\n  private right(rect: IRect, restrictionsRect: IRect): void {\n    if (rect.x + rect.width > restrictionsRect.x + restrictionsRect.width - OFFSET) {\n      rect.width = restrictionsRect.x + restrictionsRect.width - rect.x - OFFSET;\n    }\n  }\n\n  private bottom(rect: IRect, restrictionsRect: IRect): void {\n    if (rect.y + rect.height > restrictionsRect.y + restrictionsRect.height - OFFSET) {\n      rect.height = restrictionsRect.y + restrictionsRect.height - rect.y - OFFSET;\n    }\n  }\n}\n","import { IPoint, IRect } from '@foblex/2d';\nimport { EFResizeHandleType } from '../../../f-node';\n\nexport class CalculateChangedPositionRequest {\n\n  constructor(\n    public originalRect: IRect,\n    public changedRect: IRect,\n    public difference: IPoint,\n    public fResizeHandleType: EFResizeHandleType,\n  ) {\n  }\n}\n","import { EFResizeHandleType } from '../../f-node';\n\nexport const RESIZE_DIRECTIONS = {\n\n  [ EFResizeHandleType.LEFT ]: { x: -1, y: 0 },\n\n  [ EFResizeHandleType.LEFT_TOP ]: { x: -1, y: -1 },\n\n  [ EFResizeHandleType.TOP ]: { x: 0, y: -1 },\n\n  [ EFResizeHandleType.RIGHT_TOP ]: { x: 1, y: -1 },\n\n  [ EFResizeHandleType.RIGHT ]: { x: 1, y: 0 },\n\n  [ EFResizeHandleType.RIGHT_BOTTOM ]: { x: 1, y: 1 },\n\n  [ EFResizeHandleType.BOTTOM ]: { x: 0, y: 1 },\n\n  [ EFResizeHandleType.LEFT_BOTTOM ]: { x: -1, y: 1 },\n};\n","import { Injectable } from '@angular/core';\nimport { CalculateChangedPositionRequest } from './calculate-changed-position.request';\nimport { IPoint, IRect, ISize, RectExtensions } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RESIZE_DIRECTIONS } from '../resize-direction';\n\n@Injectable()\n@FExecutionRegister(CalculateChangedPositionRequest)\nexport class CalculateChangedPositionExecution\n  implements IExecution<CalculateChangedPositionRequest, IRect> {\n\n  public handle(request: CalculateChangedPositionRequest): IRect {\n    return this.change(\n      request.originalRect, request.difference,\n      RESIZE_DIRECTIONS[ request.fResizeHandleType ], request.changedRect,\n    );\n  }\n\n  private change(originalRect: IRect, difference: IPoint, direction: IPoint, changedRect: IRect): IRect {\n    return RectExtensions.initialize(\n      originalRect.x + (direction.x === -1 ? difference.x : 0) + changedRect.x,\n      originalRect.y + (direction.y === -1 ? difference.y : 0) + changedRect.y,\n      changedRect.width,\n      changedRect.height\n    );\n  }\n}\n","import { IPoint, IRect, ISize } from '@foblex/2d';\nimport { EFResizeHandleType } from '../../../f-node';\n\nexport class CalculateChangedSizeRequest {\n\n  constructor(\n    public originalRect: IRect,\n    public difference: IPoint,\n    public fResizeHandleType: EFResizeHandleType,\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CalculateChangedSizeRequest } from './calculate-changed-size.request';\nimport { IPoint, IRect, RectExtensions } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RESIZE_DIRECTIONS } from '../resize-direction';\n\n@Injectable()\n@FExecutionRegister(CalculateChangedSizeRequest)\nexport class CalculateChangedSizeExecution\n  implements IExecution<CalculateChangedSizeRequest, IRect> {\n\n  public handle(request: CalculateChangedSizeRequest): IRect {\n    return this.change(\n      request.originalRect,\n      request.difference,\n      RESIZE_DIRECTIONS[ request.fResizeHandleType ],\n    );\n  }\n\n  private change(\n    rect: IRect, difference: IPoint, direction: IPoint\n  ): IRect {\n    const result = RectExtensions.initialize(\n      0, 0,\n      rect.width + direction.x * difference.x,\n      rect.height + direction.y * difference.y\n    );\n\n    if (result.width < 0) {\n      result.x = result.width;\n      result.width = Math.abs(result.width);\n    }\n\n    if (result.height < 0) {\n      result.y = result.height;\n      result.height = Math.abs(result.height);\n    }\n\n    return RectExtensions.copy(result);\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class GetNormalizedChildrenNodesRectRequest {\n\n  constructor(\n    public fNode: FNodeBase,\n    public paddings: [ number, number, number, number ]\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { GetNormalizedChildrenNodesRectRequest } from './get-normalized-children-nodes-rect.request';\nimport { IRect, RectExtensions } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../f-node';\nimport { GetDeepChildrenNodesAndGroupsRequest, GetNormalizedElementRectRequest } from '../../../domain';\n\n@Injectable()\n@FExecutionRegister(GetNormalizedChildrenNodesRectRequest)\nexport class GetNormalizedChildrenNodesRectExecution\n  implements IExecution<GetNormalizedChildrenNodesRectRequest, IRect | null> {\n\n  constructor(\n    private fMediator: FMediator\n  ) {\n  }\n\n  public handle(request: GetNormalizedChildrenNodesRectRequest): IRect | null {\n    const childNodeRect = RectExtensions.union(\n      this.getChildrenNodes(request.fNode.fId).map((x) => this.normalizeRect(x))\n    );\n    return childNodeRect ?\n      this.concatRectWithParentPadding(childNodeRect, request.paddings) : null;\n  }\n\n  private getChildrenNodes(fId: string): FNodeBase[] {\n    return this.fMediator.execute<FNodeBase[]>(new GetDeepChildrenNodesAndGroupsRequest(fId));\n  }\n\n  private normalizeRect(fNode: FNodeBase): IRect {\n    return this.fMediator.execute<IRect>(new GetNormalizedElementRectRequest(fNode.hostElement));\n  }\n\n  private concatRectWithParentPadding(rect: IRect, padding: [ number, number, number, number ]): IRect {\n    return RectExtensions.initialize(\n      rect.x - padding[0],\n      rect.y - padding[1],\n      rect.width + padding[0] + padding[2],\n      rect.height + + padding[1] + padding[3]\n    );\n  }\n}\n","import { FNodeBase } from '../../../f-node';\nimport { IRect } from '@foblex/2d';\n\nexport class GetNodeResizeRestrictionsRequest {\n\n  constructor(\n    public fNode: FNodeBase,\n    public rect: IRect\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { GetNodeResizeRestrictionsRequest } from './get-node-resize-restrictions.request';\nimport { IRect, SizeExtensions } from '@foblex/2d';\nimport { INodeResizeRestrictions } from './i-node-resize-restrictions';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { GetNormalizedParentNodeRectRequest } from '../../domain';\nimport { GetNormalizedChildrenNodesRectRequest } from '../get-normalized-children-nodes-rect';\nimport { FNodeBase } from '../../../f-node';\nimport { GetNodePaddingRequest } from '../../../domain';\n\n\n@Injectable()\n@FExecutionRegister(GetNodeResizeRestrictionsRequest)\nexport class GetNodeResizeRestrictionsExecution\n  implements IExecution<GetNodeResizeRestrictionsRequest, INodeResizeRestrictions> {\n\n  private _fMediator = inject(FMediator);\n\n  public handle(request: GetNodeResizeRestrictionsRequest): INodeResizeRestrictions {\n    const paddings = this._calculateNodePaddings(request.fNode, request.rect);\n\n    return {\n      parentBounds: this._getNormalizedParentBounds(request.fNode),\n      childrenBounds: this._getNormalizedChildrenBounds(request.fNode, paddings),\n      minimumSize: SizeExtensions.initialize(paddings[0] + paddings[2], paddings[1] + paddings[3])\n    }\n  }\n\n  private _calculateNodePaddings(node: FNodeBase, rect: IRect): [ number, number, number, number ] {\n    return this._fMediator.execute<[ number, number, number, number ]>(new GetNodePaddingRequest(node, rect));\n  }\n\n  private _getNormalizedParentBounds(fNode: FNodeBase): IRect {\n    return this._fMediator.execute<IRect>(new GetNormalizedParentNodeRectRequest(fNode));\n  }\n\n  private _getNormalizedChildrenBounds(fNode: FNodeBase, fNodePaddings: [ number, number, number, number ]): IRect | null {\n    return this._fMediator.execute<IRect | null>(new GetNormalizedChildrenNodesRectRequest(fNode, fNodePaddings));\n  }\n}\n","import {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FNodeResizeFinalizeRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import { IPoint, IRect, ISize, RectExtensions } from '@foblex/2d';\nimport { IFDragHandler } from '../f-drag-handler';\nimport { EFResizeHandleType, FNodeBase } from '../../f-node';\nimport { FMediator } from '@foblex/mediator';\nimport { GetNodeResizeRestrictionsRequest, INodeResizeRestrictions } from './get-node-resize-restrictions';\nimport { ApplyChildResizeRestrictionsRequest } from './apply-child-resize-restrictions';\nimport { CalculateChangedSizeRequest } from './calculate-changed-size';\nimport { CalculateChangedPositionRequest } from './calculate-changed-position';\nimport { ApplyParentResizeRestrictionsRequest } from './apply-parent-resize-restrictions';\nimport { GetNormalizedElementRectRequest } from '../../domain';\nimport { Injector } from '@angular/core';\n\nexport class FNodeResizeDragHandler implements IFDragHandler {\n\n  public readonly fEventType = 'node-resize';\n  public readonly fData: any;\n\n  private readonly _fMediator: FMediator;\n\n  private _originalRect!: IRect;\n  private _resizeRestrictions!: INodeResizeRestrictions;\n\n  constructor(\n    _injector: Injector,\n    private _fNode: FNodeBase,\n    private _fResizeHandleType: EFResizeHandleType,\n  ) {\n    this.fData = {\n      fNodeId: _fNode.fId,\n    };\n    this._fMediator = _injector.get(FMediator);\n  }\n\n  public prepareDragSequence(): void {\n    this._originalRect = this._getOriginalNodeRect();\n    this._resizeRestrictions = this._getNodeResizeRestrictions();\n  }\n\n  private _getOriginalNodeRect(): IRect {\n    return this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(this._fNode.hostElement));\n  }\n\n  private _getNodeResizeRestrictions(): INodeResizeRestrictions {\n    return this._fMediator.execute<INodeResizeRestrictions>(\n      new GetNodeResizeRestrictionsRequest(this._fNode, this._originalRect)\n    );\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    this._applyResizeChanges(this._calculateChangedRect(difference));\n  }\n\n  private _calculateChangedRect(difference: IPoint): IRect {\n    const changedSize = this._calculateSize(difference);\n    return this._calculatePosition(difference, changedSize);\n  }\n\n  private _calculateSize(difference: IPoint): IRect {\n    return this._fMediator.execute<IRect>(\n      new CalculateChangedSizeRequest(this._originalRect, difference, this._fResizeHandleType)\n    );\n  }\n\n  private _calculatePosition(difference: IPoint, changedSize: IRect): IRect {\n    return this._fMediator.execute<IRect>(\n      new CalculateChangedPositionRequest(this._originalRect, changedSize, difference, this._fResizeHandleType)\n    );\n  }\n\n  private _applyResizeChanges(changedRect: IRect): void {\n    if (this._resizeRestrictions.childrenBounds) {\n      this._applyChildRestrictions(changedRect);\n    }\n\n    this._applyParentRestrictions(changedRect, this._resizeRestrictions.parentBounds);\n    this._updateNodeRendering(changedRect);\n  }\n\n  private _updateNodeRendering(changedRect: IRect): void {\n    this._fNode.updatePosition(changedRect);\n    this._fNode.updateSize(changedRect);\n    this._fNode.redraw();\n  }\n\n  private _applyChildRestrictions(changedRect: IRect): void {\n    this._fMediator.execute(\n      new ApplyChildResizeRestrictionsRequest(changedRect, this._resizeRestrictions)\n    );\n  }\n\n  private _applyParentRestrictions(changedRect: IRect, restrictions: IRect): void {\n    this._fMediator.execute(\n      new ApplyParentResizeRestrictionsRequest(changedRect, restrictions)\n    );\n  }\n\n  public onPointerUp(): void {\n    this._fNode.sizeChange.emit(this._getNewRect());\n  }\n\n  private _getNewRect(): IRect {\n    return RectExtensions.initialize(\n      this._fNode.position.x, this._fNode.position.y, this._fNode.size?.width, this._fNode.size?.height\n    );\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FNodeResizeFinalizeRequest } from './f-node-resize-finalize.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FNodeResizeDragHandler } from '../f-node-resize.drag-handler';\n\n@Injectable()\n@FExecutionRegister(FNodeResizeFinalizeRequest)\nexport class FNodeResizeFinalizeExecution implements IExecution<FNodeResizeFinalizeRequest, void> {\n\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(request: FNodeResizeFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    this._fDraggableDataContext.draggableItems.forEach((x) => {\n      x.onPointerUp?.();\n    });\n  }\n\n  private _isValid(): boolean {\n    return this._fDraggableDataContext.draggableItems.some((x) =>\n      x instanceof FNodeResizeDragHandler\n    );\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FNodeResizePreparationRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public fTrigger: FEventTrigger\n  ) {\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { FNodeResizePreparationRequest } from './f-node-resize-preparation.request';\nimport { ITransformModel, Point } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport {\n  isValidEventTrigger,\n  SelectAndUpdateNodeLayerRequest,\n} from '../../../domain';\nimport { EFResizeHandleType, FNodeBase } from '../../../f-node';\nimport { FNodeResizeDragHandler } from '../f-node-resize.drag-handler';\nimport { getDataAttrValueFromClosestElementWithClass, isClosestElementHasClass } from '@foblex/utils';\n\n@Injectable()\n@FExecutionRegister(FNodeResizePreparationRequest)\nexport class FNodeResizePreparationExecution implements IExecution<FNodeResizePreparationRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n  private readonly _injector = inject(Injector);\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow!.hostElement;\n  }\n\n  private _fNode: FNodeBase | undefined;\n\n  public handle(request: FNodeResizePreparationRequest): void {\n    if(!this._isValid(request) || !this._isValidTrigger(request)) {\n      return;\n    }\n\n    this._selectAndUpdateNodeLayer();\n\n    this._fDraggableDataContext.onPointerDownScale = this._transform.scale;\n    this._fDraggableDataContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost).div(this._transform.scale);\n\n    const resizeHandleType = EFResizeHandleType[ this._getHandleType(request.event.targetElement) ];\n    this._fDraggableDataContext.draggableItems = [\n      new FNodeResizeDragHandler(\n        this._injector,\n        this._fNode!, resizeHandleType\n      )\n    ];\n  }\n\n  private _isValid(request: FNodeResizePreparationRequest): boolean {\n    return this._fDraggableDataContext.isEmpty()\n      && this._isDragHandleElement(request.event.targetElement)\n      && this._isNodeCanBeDragged(this._getNode(request.event.targetElement));\n  }\n\n  private _isDragHandleElement(element: HTMLElement): boolean {\n    return isClosestElementHasClass(element, '.f-resize-handle');\n  }\n\n  private _isNodeCanBeDragged(fNode?: FNodeBase): boolean {\n    return !!fNode && !fNode.fDraggingDisabled;\n  }\n\n  private _getNode(element: HTMLElement): FNodeBase | undefined {\n    this._fNode = this._fComponentsStore\n      .fNodes.find(x => x.isContains(element));\n    return this._fNode;\n  }\n\n  private _isValidTrigger(request: FNodeResizePreparationRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n\n  private _selectAndUpdateNodeLayer() {\n    this._fMediator.execute(\n      new SelectAndUpdateNodeLayerRequest(this._fNode!)\n    );\n  }\n\n  private _getHandleType(element: HTMLElement): keyof typeof EFResizeHandleType {\n    return getDataAttrValueFromClosestElementWithClass(element, 'fResizeHandleType', '.f-resize-handle');\n  }\n}\n","import { FNodeResizeFinalizeExecution } from './resize-finalize';\nimport { FNodeResizePreparationExecution } from './resize-preparation';\nimport { GetNodeResizeRestrictionsExecution } from './get-node-resize-restrictions';\nimport { ApplyChildResizeRestrictionsExecution } from './apply-child-resize-restrictions';\nimport { ApplyParentResizeRestrictionsExecution } from './apply-parent-resize-restrictions';\nimport { CalculateChangedSizeExecution } from './calculate-changed-size';\nimport { CalculateChangedPositionExecution } from './calculate-changed-position';\nimport { GetNormalizedChildrenNodesRectExecution } from './get-normalized-children-nodes-rect';\n\nexport const NODE_RESIZE_PROVIDERS = [\n\n  ApplyChildResizeRestrictionsExecution,\n\n  ApplyParentResizeRestrictionsExecution,\n\n  CalculateChangedPositionExecution,\n\n  CalculateChangedSizeExecution,\n\n  GetNormalizedChildrenNodesRectExecution,\n\n  GetNodeResizeRestrictionsExecution,\n\n  FNodeResizeFinalizeExecution,\n\n  FNodeResizePreparationExecution,\n];\n","import {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FNodeRotateFinalizeRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","export function calculateDifferenceAfterRotation(\n  position: { x: number; y: number },\n  rotation: number,\n  pivot: { x: number; y: number }\n): { x: number; y: number } {\n\n  const { x: newX, y: newY } = calculatePositionAfterRotation(position, rotation, pivot);\n\n  const dx = newX - position.x;\n  const dy = newY - position.y;\n\n  return { x: dx, y: dy };\n}\n\nexport function calculatePositionAfterRotation(\n  position: { x: number; y: number },\n  rotation: number,\n  pivot: { x: number; y: number }\n): { x: number; y: number } {\n  const translatedX = position.x - pivot.x;\n  const translatedY = position.y - pivot.y;\n\n  const theta = rotation * Math.PI / 180;\n\n  const cosTheta = Math.cos(theta);\n  const sinTheta = Math.sin(theta);\n\n  const rotatedX = translatedX * cosTheta - translatedY * sinTheta;\n  const rotatedY = translatedX * sinTheta + translatedY * cosTheta;\n\n  const newX = rotatedX + pivot.x;\n  const newY = rotatedY + pivot.y;\n\n  return { x: newX, y: newY };\n}\n\n","import { IPoint, IRect, ITransformModel, PointExtensions } from '@foblex/2d';\nimport { IFDragHandler } from '../f-drag-handler';\nimport { FNodeBase } from '../../f-node';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { FComponentsStore } from '../../f-storage';\nimport { BaseConnectionDragHandler } from '../f-node-move';\nimport {\n  calculateDifferenceAfterRotation,\n} from './calculate-difference-after-rotation';\nimport { GetNormalizedElementRectRequest } from '../../domain';\nimport { FMediator } from '@foblex/mediator';\nimport { Injector } from '@angular/core';\n\nexport class FNodeRotateDragHandler implements IFDragHandler {\n\n  private readonly _fComponentsStore: FComponentsStore;\n  private readonly _fMediator: FMediator;\n  private readonly _fDraggableDataContext: FDraggableDataContext;\n\n  public fEventType = 'node-rotate';\n  public fData: any;\n\n  private _initialRotationToX: number = 0;\n  private readonly _startRotation: number = 0;\n\n  private _onDownPoint!: IPoint;\n  private _fNodeRect!: IRect;\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  constructor(\n    _injector: Injector,\n    private _fNode: FNodeBase,\n    private _fSourceHandlers: {\n      connection: BaseConnectionDragHandler,\n      connector: IPoint,\n    }[],\n    private _fTargetHandlers: {\n      connection: BaseConnectionDragHandler,\n      connector: IPoint,\n    }[],\n  ) {\n    this._startRotation = this._fNode.rotate;\n    this.fData = {\n      fNodeId: _fNode.fId,\n    };\n\n    this._fComponentsStore = _injector.get(FComponentsStore);\n    this._fMediator = _injector.get(FMediator);\n    this._fDraggableDataContext = _injector.get(FDraggableDataContext);\n  }\n\n  public prepareDragSequence(): void {\n    this._fNodeRect = this._getOriginalNodeRect();\n    this._onDownPoint = this._calculateDownPoint();\n    this._initialRotationToX = this._calculateAngleBetweenVectors(this._onDownPoint) - this._startRotation;\n  }\n\n  private _getOriginalNodeRect(): IRect {\n    return this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(this._fNode!.hostElement));\n  }\n\n  private _calculateDownPoint(): IPoint {\n    return PointExtensions.sub(\n      this._fDraggableDataContext.onPointerDownPosition,\n      PointExtensions.sum(this._transform.position, this._transform.scaledPosition)\n    );\n  }\n\n  private _calculateAngleBetweenVectors(position: IPoint): number {\n    return Math.atan2(\n      position.y - this._fNodeRect.gravityCenter.y,\n      position.x - this._fNodeRect.gravityCenter.x\n    ) * (180 / Math.PI);\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const position = PointExtensions.sum(this._onDownPoint, difference);\n    const rotation = this._calculateAngleBetweenVectors(position) - this._initialRotationToX;\n    this._updateNodeRendering(rotation);\n\n    this._fSourceHandlers.forEach((x) => {\n      x.connection.setSourceDifference(\n        this._calculateDifferenceAfterRotation(x.connector, rotation)\n      )\n    });\n    this._fTargetHandlers.forEach((x) => {\n      x.connection.setTargetDifference(\n        this._calculateDifferenceAfterRotation(x.connector, rotation)\n      );\n    });\n  }\n\n  private _updateNodeRendering(rotation: number): void {\n    this._fNode.updateRotate(rotation);\n    this._fNode.redraw();\n  }\n\n  private _calculateDifferenceAfterRotation(position: IPoint, rotation: number): IPoint {\n    return calculateDifferenceAfterRotation(\n      position,\n      rotation - this._startRotation,\n      this._fNodeRect.gravityCenter\n    )\n  }\n\n  public onPointerUp(): void {\n    this._fNode.rotateChange.emit(this._fNode.rotate);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FNodeRotateFinalizeRequest } from './f-node-rotate-finalize.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FNodeRotateDragHandler } from '../f-node-rotate.drag-handler';\n\n@Injectable()\n@FExecutionRegister(FNodeRotateFinalizeRequest)\nexport class FNodeRotateFinalizeExecution implements IExecution<FNodeRotateFinalizeRequest, void> {\n\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(request: FNodeRotateFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    this._fDraggableDataContext.draggableItems.forEach((x) => {\n      x.onPointerUp?.();\n    });\n  }\n\n  private _isValid(): boolean {\n    return this._fDraggableDataContext.draggableItems.some((x) =>\n      x instanceof FNodeRotateDragHandler\n    );\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class FNodeRotatePreparationRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public fTrigger: FEventTrigger\n  ) {\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { FNodeRotatePreparationRequest } from './f-node-rotate-preparation.request';\nimport { IPoint, IRect, ITransformModel, Point, RectExtensions } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport {\n  CalculateInputConnectionsRequest, CalculateOutputConnectionsRequest, GetNormalizedElementRectRequest,\n  isValidEventTrigger,\n  SelectAndUpdateNodeLayerRequest,\n} from '../../../domain';\nimport { FNodeBase, isRotateHandle } from '../../../f-node';\nimport { FNodeRotateDragHandler } from '../f-node-rotate.drag-handler';\nimport { BaseConnectionDragHandler, SourceConnectionDragHandler, TargetConnectionDragHandler } from '../../f-node-move';\nimport { FConnectionBase } from '../../../f-connection';\n\n@Injectable()\n@FExecutionRegister(FNodeRotatePreparationRequest)\nexport class FNodeRotatePreparationExecution implements IExecution<FNodeRotatePreparationRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n  private readonly _injector = inject(Injector);\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow!.hostElement;\n  }\n\n  private _fNode: FNodeBase | undefined;\n\n  public handle(request: FNodeRotatePreparationRequest): void {\n    if (!this._isValid(request) || !this._isValidTrigger(request)) {\n      return;\n    }\n\n    this._selectAndUpdateNodeLayer();\n\n    this._fDraggableDataContext.onPointerDownScale = this._transform.scale;\n    this._fDraggableDataContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost).div(this._transform.scale);\n\n    this._fDraggableDataContext.draggableItems = [\n      new FNodeRotateDragHandler(\n        this._injector,\n        this._fNode!,\n        this._calculateOutputConnectionsDragHandlers(),\n        this._calculateInputConnectionsDragHandlers(),\n      )\n    ];\n  }\n\n  private _isValid(request: FNodeRotatePreparationRequest): boolean {\n    return this._fDraggableDataContext.isEmpty()\n      && isRotateHandle(request.event.targetElement)\n      && this._isNodeCanBeDragged(this._getNode(request.event.targetElement));\n  }\n\n  private _isNodeCanBeDragged(fNode?: FNodeBase): boolean {\n    return !!fNode && !fNode.fDraggingDisabled;\n  }\n\n  private _getNode(element: HTMLElement): FNodeBase | undefined {\n    this._fNode = this._fComponentsStore\n      .fNodes.find(x => x.isContains(element));\n    return this._fNode;\n  }\n\n  private _isValidTrigger(request: FNodeRotatePreparationRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n\n  private _selectAndUpdateNodeLayer() {\n    this._fMediator.execute(\n      new SelectAndUpdateNodeLayerRequest(this._fNode!)\n    );\n  }\n\n  private _calculateInputConnectionsDragHandlers(): {\n    connection: BaseConnectionDragHandler,\n    connector: IPoint,\n  }[] {\n    return this._fMediator.execute<FConnectionBase[]>(\n      new CalculateInputConnectionsRequest(this._fNode!)\n    ).map((x: FConnectionBase) => {\n      const connector = this._fComponentsStore.fInputs.find((y) => y.fId === x.fInputId)!.hostElement;\n      return {\n        connection: new TargetConnectionDragHandler(this._injector, x),\n        connector: this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(connector)).gravityCenter\n      }\n    });\n  }\n\n  private _calculateOutputConnectionsDragHandlers(): {\n    connection: BaseConnectionDragHandler,\n    connector: IPoint,\n  }[] {\n    return this._fMediator.execute<FConnectionBase[]>(\n      new CalculateOutputConnectionsRequest(this._fNode!)\n    ).map((x: FConnectionBase) => {\n      const connector = this._fComponentsStore.fOutputs.find((y) => y.fId === x.fOutputId)!.hostElement;\n      return {\n        connection: new SourceConnectionDragHandler(this._injector, x),\n        connector: this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(connector)).gravityCenter\n      }\n    });\n  }\n}\n","import { FNodeRotateFinalizeExecution } from './rotate-finalize';\nimport { FNodeRotatePreparationExecution } from './rotate-preparation';\n\nexport const NODE_ROTATE_PROVIDERS = [\n\n  FNodeRotateFinalizeExecution,\n\n  FNodeRotatePreparationExecution,\n];\n","import { FEventTrigger } from '../../domain';\nimport {IPointerEvent} from \"../../drag-toolkit\";\n\nexport class FSingleSelectRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public fMultiSelectTrigger: FEventTrigger\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FSingleSelectRequest } from './f-single-select.request';\nimport { isValidEventTrigger, UpdateItemAndChildrenLayersRequest } from '../../domain';\nimport { FConnectionBase } from '../../f-connection';\nimport { FComponentsStore } from '../../f-storage';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { ISelectable } from '../../mixins';\nimport { FNodeBase } from '../../f-node';\nimport {IPointerEvent} from \"../../drag-toolkit\";\n\n/**\n * Implements the functionality for selecting elements in a graphical interface.\n * This class handles both single and multi-selection, updating the selection state\n * of elements and managing related data.\n *\n * Logic flow:\n * 1. **Validate the selection event**:\n *    - The event is considered valid if it occurs within the flow boundaries\n *      and there are no active draggable data operations.\n *\n * 2. **Determine the target element to select**:\n *    - The target element is determined based on the event’s target.\n *      It can be a node, a group of nodes, or a connection.\n *    - If no element is found, the current selection state is cleared.\n *\n * 3. **Update element layers**:\n *    - If an element is found, its visual layer and the layers of its child elements are updated.\n *\n * 4. **Single or multi-selection**:\n *    - If the event meets the criteria for multi-selection (e.g., a modifier key is pressed),\n *      multi-selection logic is applied.\n *    - Otherwise, single-selection logic is used.\n *\n * 5. **Single-selection logic**:\n *    - If the element is not selected and can be selected:\n *      - Clear the selection of all other elements.\n *      - Mark the current element as selected.\n *    - If the element cannot be selected, the current selection is cleared.\n *\n * 6. **Multi-selection logic**:\n *    - If the element is already selected, it is removed from the selection.\n *    - If the element is not selected and can be selected, it is added to the selection.\n *\n * 7. **Manage selection state**:\n *    - Adding or removing an element from the selection triggers the corresponding methods.\n *    - Selection state is tracked in the shared context for future use.\n */\n\n@Injectable()\n@FExecutionRegister(FSingleSelectRequest)\nexport class FSingleSelectExecution implements IExecution<FSingleSelectRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(request: FSingleSelectRequest): void {\n    if (!this._isValid(request)) {\n      return;\n    }\n\n    const fItem = this._getItemToSelect(request.event);\n\n    setTimeout(() => this._updateItemAndChildrenLayers(fItem));\n\n    this._isMultiSelect(request) ? this._multiSelect(fItem) : this._singleSelect(fItem);\n  }\n\n  private _isValid(request: FSingleSelectRequest): boolean {\n    return this._isEventInFlowBounds(request.event) && this._fDraggableDataContext.isEmpty();\n  }\n\n  private _isEventInFlowBounds(event: IPointerEvent): boolean {\n    return this._fComponentsStore.fFlow!.hostElement.contains(event.targetElement);\n  }\n\n  private _getItemToSelect(event: IPointerEvent): ISelectable | undefined {\n    return this._getNodeOrGroup(event.targetElement) || this._getConnection(event.targetElement);\n  }\n\n  private _getNodeOrGroup(targetElement: HTMLElement): FNodeBase | undefined {\n    return this._fComponentsStore.fNodes.find((x) => (x).isContains(targetElement));\n  }\n\n  private _getConnection(element: HTMLElement | SVGElement): FConnectionBase | undefined {\n    return this._fComponentsStore.fConnections\n      .find(c => c.isContains(element) || c.fConnectionCenter?.nativeElement?.contains(element));\n  }\n\n  private _updateItemAndChildrenLayers(fItem?: ISelectable): void {\n    if (fItem) {\n      this._fMediator.execute<void>(\n        new UpdateItemAndChildrenLayersRequest(fItem, fItem.hostElement.parentElement!)\n      );\n    }\n  }\n\n  private _isMultiSelect(request: FSingleSelectRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fMultiSelectTrigger);\n  }\n\n  private _singleSelect(fItem?: ISelectable): void {\n    if (fItem) {\n      if (this._isItemNotSelectedAndSelectable(fItem)) {\n        this._clearSelection();\n        this._selectItem(fItem);\n      } else if (fItem.fSelectionDisabled) {\n        this._clearSelection();\n      }\n    } else {\n      this._clearSelection();\n    }\n  }\n\n  private _isItemNotSelectedAndSelectable(item: ISelectable): boolean {\n    return !item.isSelected() && !item.fSelectionDisabled;\n  }\n\n  private _clearSelection(): void {\n    this._fDraggableDataContext.selectedItems.forEach((x) => {\n      x.unmarkAsSelected();\n      this._fDraggableDataContext.markSelectionAsChanged();\n    });\n    this._fDraggableDataContext.selectedItems = [];\n  }\n\n  private _multiSelect(fItem?: ISelectable): void {\n    if (fItem && !fItem.fSelectionDisabled) {\n      fItem.isSelected() ? this._deselectItem(fItem) : this._selectItem(fItem);\n    }\n  }\n\n  private _deselectItem(fItem: ISelectable): void {\n    this._removeItemFromSelectedItems(fItem);\n    fItem.unmarkAsSelected();\n    this._fDraggableDataContext.markSelectionAsChanged();\n  }\n\n  private _removeItemFromSelectedItems(fItem: ISelectable): void {\n    const indexInSelection = this._fDraggableDataContext.selectedItems.indexOf(fItem);\n    if (indexInSelection > -1) {\n      this._fDraggableDataContext.selectedItems.splice(indexInSelection, 1);\n    }\n  }\n\n  private _selectItem(fItem: ISelectable): void {\n    this._fDraggableDataContext.selectedItems.push(fItem);\n    fItem.markAsSelected();\n    this._fDraggableDataContext.markSelectionAsChanged();\n  }\n}\n","import { FSingleSelectExecution } from './f-single-select.execution';\n\nexport const SINGLE_SELECT_PROVIDERS = [\n\n  FSingleSelectExecution,\n];\n","export abstract class IPointerEvent {\n\n  public get originalEvent(): (MouseEvent | TouchEvent) {\n    return this.event;\n  }\n\n  public get targetElement(): HTMLElement {\n    return this.target || this.originalEvent.target as HTMLElement;\n  }\n\n  protected constructor(private readonly event: (MouseEvent | TouchEvent), private target?: HTMLElement) {\n    this.event = event;\n  }\n\n  public setTarget(target: HTMLElement): void {\n    this.target = target;\n  }\n\n  public abstract isMouseLeftButton(): boolean;\n\n  public abstract isMouseRightButton(): boolean;\n\n  public preventDefault(): void {\n    this.originalEvent.preventDefault();\n  }\n\n  public abstract getPosition(): { x: number, y: number };\n\n  public get isEventInLockedContext(): boolean {\n    return this.targetElement.closest('[fLockedContext]') !== null;\n  }\n}\n","import { IPointerEvent } from './i-pointer-event';\n\nexport class IMouseEvent extends IPointerEvent {\n\n  constructor(event: MouseEvent, target?: HTMLElement) {\n    super(event, target);\n  }\n\n  public isMouseLeftButton(): boolean {\n    return (this.originalEvent as MouseEvent).button === 0;\n  }\n\n  public isMouseRightButton(): boolean {\n    return (this.originalEvent as MouseEvent).buttons === 2;\n  }\n\n  public getPosition(): { x: number, y: number } {\n    return { x: (this.originalEvent as MouseEvent).clientX, y: (this.originalEvent as MouseEvent).clientY };\n  }\n}\n","import {IPointerEvent} from \"./i-pointer-event\";\n\nexport class IPointerUpEvent extends IPointerEvent {\n\n  constructor(event: PointerEvent, target?: HTMLElement) {\n    super(event, target);\n  }\n\n  public isMouseLeftButton(): boolean {\n    const evt = this.originalEvent as PointerEvent;\n    return evt.pointerType === 'mouse' && evt.button === 0 || evt.pointerType === 'touch';\n  }\n\n  public isMouseRightButton(): boolean {\n    const evt = this.originalEvent as PointerEvent;\n    return evt.pointerType === 'mouse' && evt.button === 2 || evt.pointerType === 'touch';\n  }\n\n  public getPosition(): { x: number, y: number } {\n    const evt = this.originalEvent as PointerEvent;\n    return { x: evt.clientX, y: evt.clientY };\n  }\n\n  public getPointerType(): string {\n    return (this.originalEvent as PointerEvent).pointerType;\n  }\n\n  public getPointerId(): number {\n    return (this.originalEvent as PointerEvent).pointerId;\n  }\n}\n","import { IPointerEvent } from './i-pointer-event';\n\nexport class ITouchDownEvent extends IPointerEvent {\n\n  constructor(event: TouchEvent) {\n    super(event);\n  }\n\n  public isMouseLeftButton(): boolean {\n    return true;\n  }\n\n  public isMouseRightButton(): boolean {\n    return false;\n  }\n\n  public getPosition(): { x: number, y: number } {\n    const touches = (this.originalEvent as TouchEvent).touches;\n    return { x: touches[ 0 ].clientX, y: touches[ 0 ].clientY };\n  }\n}\n","import { IPointerEvent } from './i-pointer-event';\n\nexport class ITouchMoveEvent extends IPointerEvent {\n\n  constructor(event: TouchEvent, target?: HTMLElement) {\n    super(event, target);\n  }\n\n  public isMouseLeftButton(): boolean {\n    return true;\n  }\n\n  public isMouseRightButton(): boolean {\n    return false;\n  }\n\n  public getPosition(): { x: number, y: number } {\n    const touch = (this.originalEvent as TouchEvent).targetTouches[0];\n    return { x: touch.clientX, y: touch.clientY };\n  }\n}\n","export class EventExtensions {\n\n  private static isSupported: boolean;\n\n  private static isPassiveEventListenerSupported(): boolean {\n\n    if (EventExtensions.isSupported == null && typeof window !== 'undefined') {\n      try {\n        window.addEventListener('test', EventExtensions.emptyListener, { passive: true });\n        EventExtensions.isSupported = true;\n      } catch (e) {\n        EventExtensions.isSupported = false;\n      }\n    }\n\n    return EventExtensions.isSupported;\n  }\n\n  private static passiveEventListener(options: AddEventListenerOptions): AddEventListenerOptions | boolean {\n    return EventExtensions.isPassiveEventListenerSupported() ? options : !!options.capture;\n  }\n\n  public static activeListener(): boolean | AddEventListenerOptions {\n    return EventExtensions.passiveEventListener({ passive: false });\n  }\n\n  public static passiveListener(): boolean | AddEventListenerOptions {\n    return EventExtensions.passiveEventListener({ passive: true });\n  }\n\n  public static emptyListener(): Function {\n    return () => {\n    };\n  }\n}\n","import { ICanRunOutsideAngular } from './i-can-run-outside-angular';\nimport {\n  IMouseEvent,\n  IPointerEvent,\n  IPointerUpEvent,\n  ITouchDownEvent,\n  ITouchMoveEvent,\n} from './pointer-events';\nimport { EventExtensions } from './event.extensions';\n\nexport const MOUSE_EVENT_IGNORE_TIME = 800;\n\nexport abstract class DragAndDropBase {\n\n  public abstract hostElement: HTMLElement;\n\n  private document: Document | undefined;\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    return !!this.lastTouchEventTime &&\n      (this.lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now());\n  }\n\n  private lastTouchEventTime: number = 0;\n\n  public isDragStarted: boolean = false;\n  private dragStartThreshold: number = 3;\n  private dragStartDelay: number = 0;\n\n  private dragStartTime: number = 0;\n  private dragStartPosition: { x: number, y: number } = { x: 0, y: 0 };\n\n  public abstract disabled: boolean;\n\n  private moveHandler: Function = this.checkDragSequenceToStart;\n\n  private pointerDownElement: HTMLElement | null = null;\n\n  protected constructor(\n    protected ngZone: ICanRunOutsideAngular | undefined\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    this.pointerDownElement = mouseEvent.targetElement;\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.document?.addEventListener('selectstart', this.onSelectStart, EventExtensions.activeListener());\n        this.document?.addEventListener('mousemove', this.onMouseMove);\n        this.document?.addEventListener('pointerup', this.onPointerUpEvent);\n      });\n\n      this.mouseListeners = () => {\n        this.document?.removeEventListener('selectstart', this.onSelectStart, EventExtensions.activeListener());\n        this.document?.removeEventListener('mousemove', this.onMouseMove);\n        this.document?.removeEventListener('pointerup', this.onPointerUpEvent);\n      };\n    }\n  }\n\n  private onTouchDown = (event: TouchEvent) => {\n    const isFakeEvent = isFakeTouchstartFromScreenReader(event as TouchEvent)\n    const touchEvent = new ITouchDownEvent(event);\n    this.pointerDownElement = touchEvent.targetElement;\n\n    if (isFakeEvent || this.disabled) {\n      return;\n    }\n    let result = this.onPointerDown(touchEvent);\n    if (result) {\n\n      this.dragStartTime = Date.now();\n      this.dragStartPosition = touchEvent.getPosition();\n\n      this.ngZone?.runOutsideAngular(() => {\n        this.document?.addEventListener('selectstart', this.onSelectStart, EventExtensions.activeListener());\n        this.document?.addEventListener('touchmove', this.onTouchMove);\n        this.document?.addEventListener('pointerup', this.onPointerUpEvent);\n      });\n\n      this.touchListeners = () => {\n        this.document?.removeEventListener('selectstart', this.onSelectStart, EventExtensions.activeListener());\n        this.document?.removeEventListener('touchmove', this.onTouchMove);\n        this.document?.removeEventListener('pointerup', this.onPointerUpEvent);\n      };\n    }\n  }\n\n  private onSelectStart = (event: Event) => {\n    this.onSelect(event);\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 && this.pointerDownElement) {\n      event.setTarget(this.pointerDownElement);\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 onPointerUpEvent = (event: PointerEvent) => {\n    if (this.isDragStarted) {\n      this.onPointerUp(new IPointerUpEvent(event));\n    }\n    this.endDragSequence();\n  }\n\n  private endDragSequence(): void {\n    this.isDragStarted = false;\n    this.pointerDownElement = null;\n\n    this.moveHandler = this.checkDragSequenceToStart;\n    this.mouseListeners();\n    this.mouseListeners = EventExtensions.emptyListener();\n    this.touchListeners();\n    this.touchListeners = EventExtensions.emptyListener();\n    this.finalizeDragSequence();\n  }\n\n  protected abstract finalizeDragSequence(): void;\n\n  protected abstract onSelect(event: Event): void;\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(fDocument: Document): void {\n    if (this.document) {\n      this.unsubscribe();\n    }\n    this.document = fDocument;\n\n    this.ngZone?.runOutsideAngular(() => {\n      fDocument.addEventListener('mousedown', this.onMouseDown, EventExtensions.activeListener());\n      fDocument.addEventListener('touchstart', this.onTouchDown, EventExtensions.passiveListener());\n    });\n\n    this.startListeners = () => {\n      fDocument.removeEventListener('mousedown', this.onMouseDown, EventExtensions.activeListener());\n      fDocument.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 { Directive, EventEmitter, } from '@angular/core';\nimport { FCreateConnectionEvent, FReassignConnectionEvent } from './f-connection';\nimport { FSelectionChangeEvent } from './f-selection-change-event';\nimport { FCreateNodeEvent } from '../f-external-item';\nimport { FDragStartedEvent, FNodeIntersectedWithConnections } from './domain';\nimport { FDropToGroupEvent } from './f-drop-to-group';\nimport {DragAndDropBase, ICanRunOutsideAngular} from \"../drag-toolkit\";\n\n@Directive()\nexport abstract class FDraggableBase extends DragAndDropBase  {\n\n  public abstract fSelectionChange: EventEmitter<FSelectionChangeEvent>;\n\n  public abstract fNodeIntersectedWithConnections: EventEmitter<FNodeIntersectedWithConnections>;\n\n  public abstract fEmitOnNodeIntersect: boolean;\n\n  public abstract fCreateNode: EventEmitter<FCreateNodeEvent>;\n\n  public abstract fReassignConnection: EventEmitter<FReassignConnectionEvent>;\n\n  public abstract fCreateConnection: EventEmitter<FCreateConnectionEvent>;\n\n  public abstract fDropToGroup: EventEmitter<FDropToGroupEvent>;\n\n  public abstract vCellSize: number;\n\n  public abstract hCellSize: number;\n\n  public abstract fCellSizeWhileDragging: boolean;\n\n  public abstract fDragStarted: EventEmitter<FDragStartedEvent>;\n\n  public abstract fDragEnded: EventEmitter<void>;\n\n  protected constructor(\n    ngZone: ICanRunOutsideAngular | undefined\n  ) {\n    super(ngZone);\n  }\n}\n","import {InjectionToken} from '@angular/core';\nimport {IPointerEvent} from \"../drag-toolkit\";\n\nexport const F_BEFORE_MAIN_PLUGIN = new InjectionToken<IFDragAndDropPlugin>('F_BEFORE_MAIN_PLUGIN');\nexport const F_AFTER_MAIN_PLUGIN = new InjectionToken<IFDragAndDropPlugin>('F_AFTER_MAIN_PLUGIN');\n\nexport interface IFDragAndDropPlugin {\n\n  onSelect?(event: Event): void;\n\n  onPointerDown?(event: IPointerEvent): void;\n\n  prepareDragSequence?(event: IPointerEvent): void;\n\n  onPointerUp?(event: IPointerEvent): void;\n}\n","import {\n  AfterViewInit, booleanAttribute, ContentChildren,\n  Directive,\n  ElementRef,\n  EventEmitter, inject, Inject,\n  Input,\n  NgZone, numberAttribute,\n  OnDestroy,\n  OnInit, Optional, Output, QueryList\n} from \"@angular/core\";\nimport { FDraggableBase } from './f-draggable-base';\nimport {\n  FNodeMoveFinalizeRequest,\n  FNodeMovePreparationRequest\n} from './f-node-move';\nimport { FCanvasMoveFinalizeRequest, FCanvasMovePreparationRequest } from './f-canvas';\nimport {\n  FCreateConnectionEvent,\n  FReassignConnectionEvent,\n  FReassignConnectionPreparationRequest,\n  FReassignConnectionFinalizeRequest,\n  FCreateConnectionPreparationRequest,\n  FCreateConnectionFinalizeRequest\n} from './f-connection';\nimport { FSelectionChangeEvent } from './f-selection-change-event';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddDndToStoreRequest,\n  EmitSelectionChangeEventRequest,\n  PrepareDragSequenceRequest,\n  RemoveDndFromStoreRequest,\n  EndDragSequenceRequest,\n  InitializeDragSequenceRequest,\n  OnPointerMoveRequest, FEventTrigger, FTriggerEvent, defaultEventTrigger\n} from '../domain';\nimport {\n  FExternalItemFinalizeRequest,\n  FExternalItemPreparationRequest,\n  FCreateNodeEvent,\n  PreventDefaultIsExternalItemRequest\n} from '../f-external-item';\nimport { FSingleSelectRequest } from './f-single-select';\nimport { FNodeResizeFinalizeRequest, FNodeResizePreparationRequest } from './f-node-resize';\nimport { F_AFTER_MAIN_PLUGIN, F_BEFORE_MAIN_PLUGIN, IFDragAndDropPlugin } from './i-f-drag-and-drop-plugin';\nimport { BrowserService, EOperationSystem, PlatformService } from '@foblex/platform';\nimport { FDragStartedEvent, FNodeIntersectedWithConnections } from './domain';\nimport { FDragHandlerResult } from './f-drag-handler';\nimport {\n  FDropToGroupEvent,\n  FNodeDropToGroupFinalizeRequest,\n  FNodeDropToGroupPreparationRequest\n} from './f-drop-to-group';\nimport { FNodeRotateFinalizeRequest, FNodeRotatePreparationRequest } from './f-node-rotate';\nimport {ICanRunOutsideAngular, IPointerEvent} from \"../drag-toolkit\";\n// ┌──────────────────────────────┐\n// │        Angular Realm         │\n// │                              │\n// │  ┌────────────────────────┐  │\n// │  │  FDraggableDirective   │  │\n// │  └──────────┬─────────────┘  │\n// │             │ extends        │\n// │  ┌──────────▼─────────────┐  │\n// │  │     FDraggableBase     │  │\n// │  └──────────┬─────────────┘  │\n// │             │                │\n// │             │ overrides      │\n// │  ┌──────────▼─────────────┐  │\n// │  │   DragAndDropBase      │  │\n// │  └──────────┬─────────────┘  │\n// │             │                │\n// │      subscribes to           │\n// │             │                │\n// │        ┌────▼────┐           │\n// │        │ Document│           │\n// │        └─────────┘           │\n// │                              │\n// │  ┌────────────────────────┐  │\n// │  │       FMediator        │◄─┬────┐\n// │  └─────┬────────┬─────────┘  │    │\n// │        │        │            │    │\n// │   executes   executes        │    │\n// │   F*Request   F*Event        │    │\n// │        │        │            │    │\n// └────────┴────────┴────────────┴────┘\n//\n//\n// ┌──────────────────────────────────────┐\n// │       Drag & Drop Runtime Layer      │\n// │                                      │\n// │  Events from DOM:                    │\n// │    - mousedown / touchstart          │\n// │    - mousemove / touchmove           │\n// │    - pointerup                       │\n// │                                      │\n// │  ↓ Routed to                         │\n// │                                      │\n// │  ┌──────────────────────────────┐    │\n// │  │     DragAndDropBase          │    │\n// │  └──────────────────────────────┘    │\n// │        ▲             ▲               │\n// │        │             │               │\n// │   checkDrag     onPointerMove        │\n// │   Sequence      + Finalization       │\n// │   To Start                           │\n// └──────────────────────────────────────┘\n@Directive({\n  selector: \"f-flow[fDraggable]\",\n  exportAs: 'fDraggable',\n  providers: [ FDragHandlerResult ]\n})\nexport class FDraggableDirective extends FDraggableBase implements OnInit, AfterViewInit, OnDestroy {\n\n  private _elementReference = inject(ElementRef);\n\n  private _fResult = inject(FDragHandlerResult);\n  private _fMediator = inject(FMediator);\n  private _fPlatform = inject(PlatformService);\n\n  @Input({ transform: booleanAttribute, alias: 'fDraggableDisabled' })\n  public override disabled: boolean = false;\n\n  public override get hostElement(): HTMLElement {\n    return this._elementReference.nativeElement;\n  }\n\n  @Input()\n  public fMultiSelectTrigger: FEventTrigger = (event: FTriggerEvent) => {\n    return (this._fPlatform.getOS() === EOperationSystem.MAC_OS) ? event.metaKey : event.ctrlKey;\n  };\n\n  @Input()\n  public fReassignConnectionTrigger: FEventTrigger = defaultEventTrigger;\n\n  @Input()\n  public fCreateConnectionTrigger: FEventTrigger = defaultEventTrigger;\n\n  @Input()\n  public fNodeResizeTrigger: FEventTrigger = defaultEventTrigger;\n\n  @Input()\n  public fNodeRotateTrigger: FEventTrigger = defaultEventTrigger;\n\n  @Input()\n  public fNodeMoveTrigger: FEventTrigger = defaultEventTrigger;\n\n  @Input()\n  public fCanvasMoveTrigger: FEventTrigger = defaultEventTrigger;\n\n  @Input()\n  public fExternalItemTrigger: FEventTrigger = defaultEventTrigger;\n\n  @Output()\n  public override fSelectionChange = new EventEmitter<FSelectionChangeEvent>();\n\n  @Output()\n  public override fNodeIntersectedWithConnections = new EventEmitter<FNodeIntersectedWithConnections>();\n\n  @Input({ transform: booleanAttribute })\n  public override fEmitOnNodeIntersect: boolean = false;\n\n  @Output()\n  public override fCreateNode = new EventEmitter<FCreateNodeEvent>();\n\n  @Output()\n  public override fReassignConnection = new EventEmitter<FReassignConnectionEvent>();\n\n  @Output()\n  public override fCreateConnection = new EventEmitter<FCreateConnectionEvent>();\n\n  @Output()\n  public override fDropToGroup = new EventEmitter<FDropToGroupEvent>();\n\n  @Input({ transform: numberAttribute })\n  public override vCellSize = 1;\n\n  @Input({ transform: numberAttribute })\n  public override hCellSize = 1;\n\n  @Input({ transform: booleanAttribute })\n  public override fCellSizeWhileDragging: boolean = false;\n\n  @Output()\n  public override fDragStarted = new EventEmitter<FDragStartedEvent>();\n\n  @Output()\n  public override fDragEnded = new EventEmitter<void>();\n\n  @ContentChildren(F_BEFORE_MAIN_PLUGIN, { descendants: true })\n  private _beforePlugins!: QueryList<IFDragAndDropPlugin>;\n\n  @ContentChildren(F_AFTER_MAIN_PLUGIN, { descendants: true })\n  private _afterPlugins!: QueryList<IFDragAndDropPlugin>;\n\n  constructor(\n    @Inject(NgZone) @Optional() ngZone: ICanRunOutsideAngular,\n    private _fBrowser: BrowserService,\n  ) {\n    super(ngZone);\n  }\n\n  public ngOnInit(): void {\n    this._fMediator.execute<void>(new AddDndToStoreRequest(this));\n  }\n\n  public ngAfterViewInit(): void {\n    super.subscribe(this._fBrowser.document);\n  }\n\n  public override onPointerDown(event: IPointerEvent): boolean {\n    this._fResult.clear();\n\n    this._fMediator.execute<void>(new InitializeDragSequenceRequest());\n\n    this._beforePlugins.forEach((p) => p.onPointerDown?.(event));\n\n    this._fMediator.execute<void>(new FSingleSelectRequest(event, this.fMultiSelectTrigger));\n\n    this._fMediator.execute<void>(new FReassignConnectionPreparationRequest(event, this.fReassignConnectionTrigger));\n\n    this._fMediator.execute<void>(new FCreateConnectionPreparationRequest(event, this.fCreateConnectionTrigger));\n\n    this._afterPlugins.forEach((p) => p.onPointerDown?.(event));\n\n    const isMouseLeftOrTouch = event.isMouseLeftButton();\n    if (!isMouseLeftOrTouch) {\n      this.finalizeDragSequence();\n    }\n    return isMouseLeftOrTouch;\n  }\n\n  protected override prepareDragSequence(event: IPointerEvent) {\n\n    this._beforePlugins.forEach((p) => p.prepareDragSequence?.(event));\n\n    this._fMediator.execute<void>(new FNodeResizePreparationRequest(event, this.fNodeResizeTrigger));\n\n    this._fMediator.execute<void>(new FNodeRotatePreparationRequest(event, this.fNodeRotateTrigger));\n\n    this._fMediator.execute<void>(new FNodeMovePreparationRequest(event, this.fNodeMoveTrigger));\n\n    this._fMediator.execute<void>(new FExternalItemPreparationRequest(event, this.fExternalItemTrigger));\n\n    this._fMediator.execute<void>(new FNodeDropToGroupPreparationRequest(event));\n\n    this._fMediator.execute<void>(new FCanvasMovePreparationRequest(event, this.fCanvasMoveTrigger));\n\n    this._afterPlugins.forEach((p) => p.prepareDragSequence?.(event));\n\n    this._fMediator.execute<void>(new PrepareDragSequenceRequest());\n  }\n\n  protected override onSelect(event: Event): void {\n    this._fMediator.execute<void>(new PreventDefaultIsExternalItemRequest(event));\n  }\n\n  public override onPointerMove(event: IPointerEvent): void {\n    this._fMediator.execute<void>(new OnPointerMoveRequest(event));\n  }\n\n  public override onPointerUp(event: IPointerEvent): void {\n    this._beforePlugins.forEach((x) => x.onPointerUp?.(event));\n\n    this._fMediator.execute<void>(new FReassignConnectionFinalizeRequest(event));\n\n    this._fMediator.execute<void>(new FCreateConnectionFinalizeRequest(event));\n\n    this._fMediator.execute<void>(new FNodeResizeFinalizeRequest(event));\n\n    this._fMediator.execute<void>(new FNodeRotateFinalizeRequest(event));\n\n    this._fMediator.execute<void>(new FNodeMoveFinalizeRequest(event));\n\n    this._fMediator.execute<void>(new FExternalItemFinalizeRequest(event));\n\n    this._fMediator.execute<void>(new FNodeDropToGroupFinalizeRequest(event));\n\n    this._fMediator.execute<void>(new FCanvasMoveFinalizeRequest(event));\n\n    this._afterPlugins.forEach((x) => x.onPointerUp?.(event));\n\n    this._fMediator.execute<void>(new EndDragSequenceRequest());\n  }\n\n  protected override finalizeDragSequence(): void {\n    this._fMediator.execute<void>(new EmitSelectionChangeEventRequest());\n\n    this._fResult.clear();\n  }\n\n  public ngOnDestroy(): void {\n    this._fMediator.execute<void>(new RemoveDndFromStoreRequest());\n    super.unsubscribe();\n  }\n}\n\n","import { ICurrentSelection } from '../domain';\n\nexport class FSelectionChangeEvent implements ICurrentSelection {\n\n  constructor(\n    public fNodeIds: string[],\n    public fGroupIds: string[],\n    public fConnectionIds: string[],\n  ) {\n  }\n}\n","import { FMinimapData } from '../f-minimap-data';\nimport {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class MinimapDragPreparationRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public minimap: FMinimapData\n  ) {\n  }\n}\n","import { IPoint, IRect } from '@foblex/2d';\nimport { FMinimapData } from '../f-minimap-data';\n\nexport class CalculateFlowPointFromMinimapPointRequest {\n\n  constructor(\n    public flowRect: IRect,\n    public canvasPosition: IPoint,\n    public eventPoint: IPoint,\n    public minimap: FMinimapData\n  ) {\n  }\n}\n","import { IPoint, IRect, Point, PointExtensions, RectExtensions } from '@foblex/2d';\nimport { CalculateFlowPointFromMinimapPointRequest } from './calculate-flow-point-from-minimap-point.request';\nimport { Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FMinimapData } from '../f-minimap-data';\n\n@Injectable()\n@FExecutionRegister(CalculateFlowPointFromMinimapPointRequest)\nexport class CalculateFlowPointFromMinimapPointExecution\n  implements IExecution<CalculateFlowPointFromMinimapPointRequest, IPoint> {\n\n  private get canvasScale(): number {\n    return this.fComponentsStore.fCanvas!.transform.scale;\n  }\n\n  constructor(\n    private fComponentsStore: FComponentsStore\n  ) {\n  }\n\n  public handle(payload: CalculateFlowPointFromMinimapPointRequest): IPoint {\n    return PointExtensions.sub(\n      payload.canvasPosition,\n      PointExtensions.sub(\n        this.getPositionInViewBox(payload.eventPoint, payload.minimap),\n        this.getNormalizedFlowCenter(payload.flowRect)\n      )\n    );\n  }\n\n  private getNormalizedFlowCenter(flowRect: IRect): IPoint {\n    return Point.fromPoint(flowRect.gravityCenter).sub(flowRect);\n  }\n\n  private getPositionInViewBox(eventPoint: IPoint, minimap: FMinimapData): IPoint {\n    const eventPointInFlow = this.normalizeEventPoint(eventPoint, minimap);\n    return PointExtensions.sum(\n      eventPointInFlow,\n      RectExtensions.mult(minimap.viewBox, this.canvasScale)\n    );\n  }\n\n  public normalizeEventPoint(point: IPoint, minimap: FMinimapData): Point {\n    return this.getEventPointInMinimap(point, minimap)\n     .mult(minimap.scale).mult(this.canvasScale);\n  }\n\n  private getEventPointInMinimap(eventPoint: IPoint, minimap: FMinimapData): Point {\n    return Point.fromPoint(eventPoint).elementTransform(minimap.element as unknown as HTMLElement);\n  }\n}\n","import { IPoint, IRect, Point } from '@foblex/2d';\nimport { FComponentsStore } from '../../f-storage';\nimport { IFDragHandler } from '../../f-draggable';\nimport { FMediator } from '@foblex/mediator';\nimport { CalculateFlowPointFromMinimapPointRequest } from './calculate-flow-point-from-minimap-point';\nimport { FMinimapData } from './f-minimap-data';\n\nexport class FMinimapDragHandler implements IFDragHandler {\n\n  public fEventType = 'minimap';\n\n  private lastDifference: IPoint | null = null;\n\n  constructor(\n    private fComponentsStore: FComponentsStore,\n    private fMediator: FMediator,\n    private flowRect: IRect,\n    private canvasPosition: IPoint,\n    private eventPoint: IPoint,\n    private minimap: FMinimapData\n  ) {\n  }\n\n  public prepareDragSequence(): void {\n    this.fComponentsStore.fCanvas?.hostElement.classList.add('f-scaled-animate');\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    if (this.lastDifference && this.isSamePoint(difference, this.lastDifference)) {\n      return;\n    }\n\n    this.lastDifference = difference;\n    this.fComponentsStore.fCanvas!.setPosition(this.getNewPosition(Point.fromPoint(this.eventPoint).add(difference)));\n    this.fComponentsStore.fCanvas!.redraw();\n  }\n\n  private isSamePoint(point1: IPoint, point2: IPoint): boolean {\n    return point1.x === point2.x && point1.y === point2.y;\n  }\n\n  private getNewPosition(eventPoint: IPoint): IPoint {\n    return this.fMediator.execute<IPoint>(new CalculateFlowPointFromMinimapPointRequest(\n      this.flowRect, this.canvasPosition, eventPoint, this.minimap\n    ));\n  }\n\n  public onPointerUp(): void {\n    this.fComponentsStore.fCanvas?.hostElement.classList.remove('f-scaled-animate');\n    this.fComponentsStore.fCanvas!.emitCanvasChangeEvent();\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { MinimapDragPreparationRequest } from './minimap-drag-preparation.request';\nimport { IPoint, IRect, Point, RectExtensions } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FMinimapDragHandler } from '../f-minimap.drag-handler';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { CalculateFlowPointFromMinimapPointRequest } from '../calculate-flow-point-from-minimap-point';\nimport { FMinimapData } from '../f-minimap-data';\n\n@Injectable()\n@FExecutionRegister(MinimapDragPreparationRequest)\nexport class MinimapDragPreparationExecution implements IExecution<MinimapDragPreparationRequest, void> {\n\n  private get flowHost(): HTMLElement {\n    return this.fComponentsStore.fFlow!.hostElement;\n  }\n\n  constructor(\n    private fComponentsStore: FComponentsStore,\n    private fMediator: FMediator,\n    private fDraggableDataContext: FDraggableDataContext,\n  ) {\n  }\n\n  public handle(request: MinimapDragPreparationRequest): void {\n    if(!this._isValid(request)) {\n      return;\n    }\n    const eventPoint = request.event.getPosition();\n    const startCanvasPosition = Point.fromPoint(this.fComponentsStore.fCanvas!.transform.position);\n\n    this.fComponentsStore.fCanvas!.setPosition(this.getNewPosition(eventPoint, request.minimap));\n    this.fComponentsStore.fCanvas!.redraw();\n    this.fComponentsStore.fCanvas!.emitCanvasChangeEvent();\n\n    this.fDraggableDataContext.onPointerDownScale = 1;\n    this.fDraggableDataContext.onPointerDownPosition = Point.fromPoint(eventPoint).elementTransform(this.flowHost);\n    this.fDraggableDataContext.draggableItems = [\n      new FMinimapDragHandler(\n        this.fComponentsStore, this.fMediator, this.getFlowRect(),\n        startCanvasPosition, eventPoint, request.minimap,\n      )\n    ];\n  }\n\n  private _isValid(request: MinimapDragPreparationRequest): boolean {\n    return !this.fDraggableDataContext.draggableItems.length &&\n      !!request.event.targetElement.closest('.f-minimap') &&\n      this.fComponentsStore.flowHost.contains(request.event.targetElement);\n  }\n\n  private getNewPosition(eventPoint: IPoint, minimap: FMinimapData): IPoint {\n    return this.fMediator.execute<IPoint>(new CalculateFlowPointFromMinimapPointRequest(\n      this.getFlowRect(),\n      Point.fromPoint(this.fComponentsStore.fCanvas!.transform.position),\n      eventPoint, minimap,\n    ));\n  }\n\n  private getFlowRect(): IRect {\n    return RectExtensions.fromElement(this.flowHost);\n  }\n}\n","import { MinimapDragPreparationExecution } from './minimap-drag-preparation.execution';\n\nexport const MINIMAP_DRAG_PREPARATION_PROVIDERS = [\n\n  MinimapDragPreparationExecution,\n];\n","import {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class MinimapDragFinalizeRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { MinimapDragFinalizeRequest } from './minimap-drag-finalize.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { FMinimapDragHandler } from '../f-minimap.drag-handler';\n\n@Injectable()\n@FExecutionRegister(MinimapDragFinalizeRequest)\nexport class MinimapDragFinalizeExecution implements IExecution<MinimapDragFinalizeRequest, void> {\n\n  constructor(\n    private fDraggableDataContext: FDraggableDataContext,\n  ) {\n  }\n\n  public handle(request: MinimapDragFinalizeRequest): void {\n    if(!this._isValid()) {\n      return;\n    }\n    this.fDraggableDataContext.draggableItems.forEach((x) => {\n      x.onPointerUp?.();\n    });\n  }\n\n  private _isValid(): boolean {\n    return this.fDraggableDataContext.draggableItems.some(\n      (x) => x instanceof FMinimapDragHandler\n    );\n  }\n}\n","import { MinimapDragFinalizeExecution } from './minimap-drag-finalize.execution';\n\nexport const MINIMAP_DRAG_FINALIZE_PROVIDERS = [\n\n  MinimapDragFinalizeExecution,\n];\n","export class MinimapDrawNodesRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MinimapDrawNodesRequest } from './minimap-draw-nodes.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { createSVGElement } from '../../../domain';\nimport { FNodeBase, FNodeDirective } from '../../../f-node';\nimport { IRect, RectExtensions, setRectToElement } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\nimport { BrowserService } from '@foblex/platform';\nimport { FCanvasBase } from '../../../f-canvas';\nimport { FFlowBase } from '../../../f-flow';\n\n@Injectable()\n@FExecutionRegister(MinimapDrawNodesRequest)\nexport class MinimapDrawNodesExecution implements IExecution<MinimapDrawNodesRequest, SVGRectElement[]> {\n\n  private readonly _fBrowser = inject(BrowserService);\n  private readonly _fComponentStore = inject(FComponentsStore);\n\n  private get _fFlow(): FFlowBase | undefined {\n    return this._fComponentStore.fFlow;\n  }\n\n  private get _fNodes(): FNodeBase[] {\n    return this._fComponentStore.fNodes;\n  }\n\n  private get _fCanvas(): FCanvasBase {\n    return this._fComponentStore.fCanvas!;\n  }\n\n  public handle(request: MinimapDrawNodesRequest): SVGRectElement[] {\n    return this._createMinimapNodeElements(request);\n  }\n\n  private _createMinimapNodeElements(request: MinimapDrawNodesRequest): SVGRectElement[] {\n    return this._fNodes.map((x) => {\n      const element = this._createNodeElement();\n      setRectToElement(this._getNodeRect(x), element);\n      this._applyClassList(element, x, x instanceof FNodeDirective);\n      return element;\n    });\n  }\n\n  private _createNodeElement(): SVGRectElement {\n    return createSVGElement('rect', this._fBrowser);\n  }\n\n  private _getNodeRect(node: FNodeBase): IRect {\n    return RectExtensions.div(this._getNodeRectInFlow(node), this._fCanvas.transform.scale);\n  }\n\n  private _getNodeRectInFlow(node: FNodeBase): IRect {\n    return RectExtensions.elementTransform(RectExtensions.fromElement(node.hostElement), this._fFlow!.hostElement);\n  }\n\n  private _applyClassList(element: SVGRectElement, node: FNodeBase, isNode: boolean): void {\n    element.classList.add('f-component', isNode ? 'f-minimap-node' : 'f-minimap-group');\n    element.classList.add(...this._getClassList(node));\n    if (node.isSelected()) {\n      element.classList.add('f-selected');\n    }\n  }\n\n  private _getClassList(node: FNodeBase): string[] {\n    if (Array.isArray(node.fMinimapClass)) {\n      return node.fMinimapClass;\n    } else {\n      return [node.fMinimapClass];\n    }\n  }\n}\n","export class MinimapCalculateViewBoxRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MinimapCalculateViewBoxRequest } from './minimap-calculate-view-box.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { IRect, RectExtensions } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FCanvasBase } from '../../../f-canvas';\nimport { FFlowBase } from '../../../f-flow';\n\n@Injectable()\n@FExecutionRegister(MinimapCalculateViewBoxRequest)\nexport class MinimapCalculateViewBoxExecution implements IExecution<MinimapCalculateViewBoxRequest, IRect> {\n\n  private _fComponentStore = inject(FComponentsStore);\n\n  private get _fFlow(): FFlowBase | undefined {\n    return this._fComponentStore.fFlow;\n  }\n\n  private get _fCanvas(): FCanvasBase {\n    return this._fComponentStore.fCanvas!;\n  }\n\n  public handle(request: MinimapCalculateViewBoxRequest): IRect {\n    if(!this._fFlow || !this._fCanvas) {\n      return RectExtensions.initialize();\n    }\n    return this._getRectForMinimapView();\n  }\n\n  private _getRectForMinimapView(): IRect {\n    const result = this._calculateViewBox();\n    result.x = 0;\n    result.y = 0;\n    return result;\n  }\n\n  private _calculateViewBox(): IRect {\n    return RectExtensions.div(RectExtensions.fromElement(this._fFlow!.hostElement), this._fCanvas.transform.scale);\n  }\n}\n","export class MinimapCalculateSvgScaleAndViewBoxRequest {\n\n  constructor(\n    public element: SVGSVGElement,\n    public minSize: number,\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MinimapCalculateSvgScaleAndViewBoxRequest } from './minimap-calculate-svg-scale-and-view-box.request';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { adjustRectToMinSize, IRect, ISize, RectExtensions, SizeExtensions } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FCanvasBase } from '../../../f-canvas';\nimport { FFlowBase } from '../../../f-flow';\nimport { CalculateNodesBoundingBoxRequest } from '../../../domain';\nimport { IFMinimapScaleAndViewBox } from './i-f-minimap-scale-and-view-box';\n\n@Injectable()\n@FExecutionRegister(MinimapCalculateSvgScaleAndViewBoxRequest)\nexport class MinimapCalculateSvgScaleAndViewBoxExecution\n  implements IExecution<MinimapCalculateSvgScaleAndViewBoxRequest, IFMinimapScaleAndViewBox> {\n\n  private _fMediator = inject(FMediator);\n\n  private _fComponentStore = inject(FComponentsStore);\n\n  private get _fFlow(): FFlowBase {\n    return this._fComponentStore.fFlow!;\n  }\n\n  private get _fCanvas(): FCanvasBase {\n    return this._fComponentStore.fCanvas!;\n  }\n\n  public handle(request: MinimapCalculateSvgScaleAndViewBoxRequest): IFMinimapScaleAndViewBox {\n    if(!this._fFlow) {\n      return { scale: 1, viewBox: RectExtensions.initialize(0, 0, 0, 0) };\n    }\n\n    const nodesRect = this._getScaledNodesBoundingBox(request.minSize);\n    const minimapRect = this._getMinimapRect(request.element);\n    const scale = this._calculateViewScale(nodesRect, minimapRect);\n\n    return {\n      scale,\n      viewBox: this._calculateViewBox(nodesRect, minimapRect, scale)\n    }\n  }\n\n  private _getScaledNodesBoundingBox(minSize: number): IRect {\n    const globalRect = this._calculateNodesBoundingBox();\n    const flowRect = this._convertFromGlobalToFlowRect(globalRect);\n    const scaledRect = this._convertRectToMinimapScale(flowRect);\n    return adjustRectToMinSize(scaledRect, minSize);\n  }\n\n  private _calculateNodesBoundingBox(): IRect {\n    return this._fMediator.execute<IRect | null>(new CalculateNodesBoundingBoxRequest())\n      || RectExtensions.initialize(0, 0, 0, 0);\n  }\n\n  private _convertFromGlobalToFlowRect(rect: IRect): IRect {\n    return RectExtensions.elementTransform(rect, this._fFlow!.hostElement)\n  }\n\n  private _convertRectToMinimapScale(rect: IRect): IRect {\n    return RectExtensions.div(rect, this._fCanvas.transform.scale);\n  }\n\n  private _getMinimapRect(element: SVGSVGElement): IRect {\n    return RectExtensions.elementTransform(RectExtensions.fromElement(element), this._fFlow.hostElement);\n  }\n\n  private _calculateViewScale(nodesRect: IRect, minimapRect: IRect): number {\n    return Math.max(nodesRect.width / minimapRect.width, nodesRect.height / minimapRect.height);\n  }\n\n  private _calculateViewBox(nodesRect: IRect, minimapRect: IRect, scale: number): IRect {\n    return this._calculateCenteredViewBox(nodesRect, this._calculateViewSize(minimapRect, scale));\n  }\n\n  private _calculateViewSize(minimapRect: IRect, scale: number): ISize {\n    return SizeExtensions.initialize(minimapRect.width * scale || 0, minimapRect.height * scale || 0);\n  }\n\n  private _calculateCenteredViewBox(nodesRect: IRect, viewSize: ISize): IRect {\n    const centeredX = nodesRect.x - (viewSize.width - nodesRect.width) / 2;\n    const centeredY = nodesRect.y - (viewSize.height - nodesRect.height) / 2;\n    return RectExtensions.initialize(centeredX, centeredY, viewSize.width, viewSize.height);\n  }\n}\n","import { MINIMAP_DRAG_PREPARATION_PROVIDERS } from './minimap-drag-preparation';\nimport { MINIMAP_DRAG_FINALIZE_PROVIDERS } from './minimap-drag-finalize';\nimport { CalculateFlowPointFromMinimapPointExecution } from './calculate-flow-point-from-minimap-point';\nimport { MinimapDrawNodesExecution } from './minimap-draw-nodes';\nimport { MinimapCalculateViewBoxExecution } from './minimap-calculate-view-box';\nimport { MinimapCalculateSvgScaleAndViewBoxExecution } from './minimap-calculate-svg-scale-and-view-box';\n\nexport const F_MINIMAP_DRAG_AND_DROP_PROVIDERS = [\n\n  CalculateFlowPointFromMinimapPointExecution,\n\n  ...MINIMAP_DRAG_FINALIZE_PROVIDERS,\n\n  ...MINIMAP_DRAG_PREPARATION_PROVIDERS,\n\n  MinimapDrawNodesExecution,\n\n  MinimapCalculateSvgScaleAndViewBoxExecution,\n\n  MinimapCalculateViewBoxExecution,\n];\n","import {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class SelectionAreaFinalizeRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import { IPoint, Point, PointExtensions, RectExtensions } from '@foblex/2d';\nimport { FComponentsStore, NotifyTransformChangedRequest } from '../../f-storage';\nimport { GetCanBeSelectedItemsRequest, ICanBeSelectedElementAndRect } from '../../domain';\nimport { FMediator } from '@foblex/mediator';\nimport { FDraggableDataContext, IFDragHandler } from '../../f-draggable';\nimport { FSelectionAreaBase } from '../f-selection-area-base';\nimport { ISelectable } from '../../mixins';\n\nexport class SelectionAreaDragHandle implements IFDragHandler {\n\n  public fEventType: string = 'selection-area';\n\n  private _canBeSelected: ICanBeSelectedElementAndRect[] = [];\n  private _selectedByMove: ISelectable[] = [];\n\n  private get _fCanvasPosition(): IPoint {\n    return Point.fromPoint(this._fComponentsStore.fCanvas!.transform.position)\n      .add(this._fComponentsStore.fCanvas!.transform.scaledPosition);\n  }\n\n  constructor(\n    private _fComponentsStore: FComponentsStore,\n    private _fSelectionArea: FSelectionAreaBase,\n    private _fDraggableDataContext: FDraggableDataContext,\n    private _fMediator: FMediator,\n  ) {\n  }\n\n  public prepareDragSequence(): void {\n    this._canBeSelected = this._fMediator.execute(new GetCanBeSelectedItemsRequest());\n\n    this._fSelectionArea.show();\n    this._fSelectionArea.draw(\n      RectExtensions.initialize(\n        this._fDraggableDataContext.onPointerDownPosition.x,\n        this._fDraggableDataContext.onPointerDownPosition.y\n      )\n    );\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const currentPoint = Point.fromPoint(difference).add(this._fDraggableDataContext.onPointerDownPosition);\n\n    const point = this._getMinimumPoint(this._fDraggableDataContext.onPointerDownPosition, currentPoint);\n\n    const width = Math.abs(difference.x);\n    const height = Math.abs(difference.y);\n\n    const fSelectionAreaRect = RectExtensions.initialize(point.x, point.y, width, height);\n\n    this._fSelectionArea.draw(fSelectionAreaRect);\n    this._selectedByMove = [];\n    this._canBeSelected.forEach((item) => {\n      item.element.unmarkAsSelected();\n\n      const fItemRect = RectExtensions.addPoint(item.fRect, this._fCanvasPosition);\n\n      const isIntersect = RectExtensions.intersectionWithRect(fItemRect, fSelectionAreaRect);\n      if (isIntersect) {\n\n        item.element.markAsSelected();\n        this._selectedByMove.push(item.element);\n      }\n    });\n    this._fMediator.execute<void>(new NotifyTransformChangedRequest());\n  }\n\n  private _getMinimumPoint(point1: IPoint, point2: IPoint): IPoint {\n    return PointExtensions.initialize(\n      Math.min(point1.x, point2.x),\n      Math.min(point1.y, point2.y)\n    );\n  }\n\n  public onPointerUp(): void {\n    this._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 { inject, Injectable } from '@angular/core';\nimport { SelectionAreaFinalizeRequest } from './selection-area-finalize.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { SelectionAreaDragHandle } from '../selection-area.drag-handle';\n\n@Injectable()\n@FExecutionRegister(SelectionAreaFinalizeRequest)\nexport class SelectionAreaFinalizeExecution implements IExecution<SelectionAreaFinalizeRequest, void> {\n\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(request: SelectionAreaFinalizeRequest): void {\n    if(!this._isValid()) {\n      return;\n    }\n    this._fDraggableDataContext.draggableItems.forEach((x) => {\n      x.onPointerUp?.();\n    });\n  }\n\n  private _isValid(): boolean {\n    return this._fDraggableDataContext.draggableItems.some((x) =>\n      x instanceof SelectionAreaDragHandle\n    );\n  }\n}\n","import { FSelectionAreaBase } from '../../f-selection-area-base';\nimport { FEventTrigger } from '../../../domain';\nimport {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class SelectionAreaPreparationRequest {\n\n  constructor(\n    public event: IPointerEvent,\n    public fSelectionArea: FSelectionAreaBase,\n    public fTrigger: FEventTrigger\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SelectionAreaPreparationRequest } from './selection-area-preparation.request';\nimport { Point } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { SelectionAreaDragHandle } from '../selection-area.drag-handle';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { isValidEventTrigger } from '../../../domain';\n\n@Injectable()\n@FExecutionRegister(SelectionAreaPreparationRequest)\nexport class SelectionAreaPreparationExecution implements IExecution<SelectionAreaPreparationRequest, void> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow!.hostElement;\n  }\n\n  public handle(request: SelectionAreaPreparationRequest): void {\n    if (!this._isValid(request)) {\n      return;\n    }\n    this._fDraggableDataContext.draggableItems = [\n      new SelectionAreaDragHandle(\n        this._fComponentsStore, request.fSelectionArea, this._fDraggableDataContext, this._fMediator\n      )\n    ];\n\n    this._fDraggableDataContext.onPointerDownScale = 1;\n    this._fDraggableDataContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost);\n  }\n\n  private _isValid(request: SelectionAreaPreparationRequest): boolean {\n    return this._fDraggableDataContext.isEmpty()\n      && isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n}\n","import { SelectionAreaPreparationExecution } from './selection-area-preparation';\nimport { SelectionAreaFinalizeExecution } from './selection-area-finalize';\n\nexport const F_SELECTION_AREA_DRAG_AND_DROP_PROVIDERS = [\n\n  SelectionAreaPreparationExecution,\n\n  SelectionAreaFinalizeExecution\n];\n","import { IRect } from '@foblex/2d';\nimport { Directive } from '@angular/core';\nimport { IHasHostElement } from '../i-has-host-element';\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: IRect): void;\n}\n","import { Component, ElementRef, inject, Input, OnInit } from '@angular/core';\nimport { FSelectionAreaBase } from './f-selection-area-base';\nimport { F_BEFORE_MAIN_PLUGIN, IFDragAndDropPlugin } from '../f-draggable';\nimport { IRect } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport { SelectionAreaFinalizeRequest, SelectionAreaPreparationRequest } from './domain';\nimport { FEventTrigger, FTriggerEvent } from '../domain';\nimport {IPointerEvent} from \"../drag-toolkit\";\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_BEFORE_MAIN_PLUGIN, useExisting: FSelectionAreaComponent },\n  ],\n})\nexport class FSelectionAreaComponent extends FSelectionAreaBase implements OnInit, IFDragAndDropPlugin  {\n\n  private _fMediator = inject(FMediator);\n  private _elementReference = inject(ElementRef);\n\n  @Input()\n  public fTrigger: FEventTrigger = (event: FTriggerEvent) => {\n    return event.shiftKey;\n  };\n\n  public override get hostElement(): HTMLElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public ngOnInit(): void {\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: IRect): void {\n    const style = this.hostElement.style;\n    style.left = object.x + 'px';\n    style.top = object.y + 'px';\n    style.width = object.width + 'px';\n    style.height = object.height + 'px';\n  }\n\n  public onPointerDown(event: IPointerEvent): void {\n    this._fMediator.execute(new SelectionAreaPreparationRequest(event, this, this.fTrigger));\n  }\n\n  public onPointerUp(event: IPointerEvent): void {\n    this._fMediator.execute(new SelectionAreaFinalizeRequest(event));\n  }\n}\n","import { FSelectionAreaComponent } from './f-selection-area.component';\n\nexport const F_SELECTION_AREA_PROVIDERS = [\n\n  FSelectionAreaComponent\n];\n","import { CANVAS_PROVIDERS } from './f-canvas';\nimport { CONNECTIONS_PROVIDERS } from './f-connection';\nimport { SINGLE_SELECT_PROVIDERS } from './f-single-select';\nimport { NODE_PROVIDERS } from './f-node-move';\nimport { NODE_RESIZE_PROVIDERS } from './f-node-resize';\nimport { F_MINIMAP_DRAG_AND_DROP_PROVIDERS } from '../f-minimap/domain/providers';\nimport { F_EXTERNAL_ITEM_DRAG_AND_DROP_PROVIDERS } from '../f-external-item';\nimport { F_SELECTION_AREA_DRAG_AND_DROP_PROVIDERS } from '../f-selection-area';\nimport { DRAG_AND_DROP_COMMON_PROVIDERS } from './domain';\nimport { NODE_DROP_TO_GROUP_PROVIDERS } from './f-drop-to-group';\nimport { NODE_ROTATE_PROVIDERS } from './f-node-rotate';\n\nexport const F_DRAGGABLE_PROVIDERS = [\n\n  ...CANVAS_PROVIDERS,\n\n  ...CONNECTIONS_PROVIDERS,\n\n  ...DRAG_AND_DROP_COMMON_PROVIDERS,\n\n  ...SINGLE_SELECT_PROVIDERS,\n\n  ...F_EXTERNAL_ITEM_DRAG_AND_DROP_PROVIDERS,\n\n  ...NODE_PROVIDERS,\n\n  ...NODE_DROP_TO_GROUP_PROVIDERS,\n\n  ...NODE_RESIZE_PROVIDERS,\n\n  ...NODE_ROTATE_PROVIDERS,\n\n  ...F_SELECTION_AREA_DRAG_AND_DROP_PROVIDERS,\n\n  ...F_MINIMAP_DRAG_AND_DROP_PROVIDERS\n];\n","export class ClearSelectionRequest {\n\n}\n","import { ClearSelectionRequest } from './clear-selection.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../../f-draggable';\n\n@Injectable()\n@FExecutionRegister(ClearSelectionRequest)\nexport class ClearSelectionExecution implements IExecution<ClearSelectionRequest, void> {\n\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(request: ClearSelectionRequest): void {\n    this._fDraggableDataContext.selectedItems.forEach((x) => x.unmarkAsSelected());\n    this._fDraggableDataContext.selectedItems = [];\n    this._fDraggableDataContext.isSelectedChanged = true;\n  }\n}\n","export class GetCanBeSelectedItemsRequest {\n}\n","export class GetNormalizedElementRectRequest {\n    constructor(\n        public element: HTMLElement | SVGElement\n    ) {\n    }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { GetNormalizedElementRectRequest } from './get-normalized-element-rect-request';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../f-storage';\nimport {\n  IRoundedRect,\n  RoundedRect,\n  IPoint,\n  ISize,\n  SizeExtensions,\n  ITransformModel,\n  RectExtensions, IRect\n} from '@foblex/2d';\nimport {GetNormalizedPointRequest} from \"../get-normalized-point\";\n\n@Injectable()\n@FExecutionRegister(GetNormalizedElementRectRequest)\nexport class GetNormalizedElementRectExecution implements IExecution<GetNormalizedElementRectRequest, IRect> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fMediator = inject(FMediator);\n\n  private get _transform(): ITransformModel {\n    return this._fComponentsStore.fCanvas!.transform;\n  }\n\n  public handle(request: GetNormalizedElementRectRequest): IRect {\n    const systemRect = this._getElementRoundedRect(request);\n    const position = this._normalizePosition(systemRect);\n    const unscaledSize = this._unscaleSize(systemRect);\n    const unscaledRect = this._getUnscaledRect(position, unscaledSize, systemRect)\n\n    const offsetSize = this._getOffsetSize(request.element, unscaledSize);\n    return RoundedRect.fromCenter(unscaledRect, offsetSize.width, offsetSize.height);\n  }\n\n  // BrowserWindow\n  // +--------------------------------+\n  // |                                |\n  // |     Element                    |\n  // |     (x: 100, y: 50)            |\n  // |     +--------+                 |\n  // |     |        |                 |\n  // |     |        |                 |\n  // |     +--------+                 |\n  // |                                |\n  // +--------------------------------+\n  // This data of the element is relative to the browser window, not the canvas, with all transformations applied.\n  private _getElementRoundedRect(request: GetNormalizedElementRectRequest): IRoundedRect {\n    return RoundedRect.fromRect(RectExtensions.fromElement(request.element));\n  }\n\n  private _normalizePosition(rect: IRoundedRect): IPoint {\n    return this._fMediator.execute(new GetNormalizedPointRequest(rect));\n  }\n\n  private _unscaleSize(rect: IRoundedRect): ISize {\n    return SizeExtensions.initialize(rect.width / this._transform.scale, rect.height / this._transform.scale);\n  }\n\n  private _getUnscaledRect(position: IPoint, size: ISize, rect: IRoundedRect): IRoundedRect {\n    return new RoundedRect(\n      position.x, position.y, size.width, size.height,\n      rect.radius1, rect.radius2, rect.radius3, rect.radius4\n    )\n  }\n\n  private _getOffsetSize(element: HTMLElement | SVGElement, size: ISize): ISize {\n    return SizeExtensions.offsetFromElement(element) || size\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IRect, ITransformModel, RectExtensions } from '@foblex/2d';\nimport { ICanBeSelectedElementAndRect } from './i-can-be-selected-element-and-rect';\nimport { GetCanBeSelectedItemsRequest } from './get-can-be-selected-items-request';\nimport { FNodeBase } from '../../../f-node';\nimport { FConnectionBase } from '../../../f-connection';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { GetNormalizedElementRectRequest } from '../../get-normalized-element-rect';\n\n@Injectable()\n@FExecutionRegister(GetCanBeSelectedItemsRequest)\nexport class GetCanBeSelectedItemsExecution implements IExecution<void, ICanBeSelectedElementAndRect[]> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n  private _fDraggableDataContext = inject(FDraggableDataContext);\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  public handle(): ICanBeSelectedElementAndRect[] {\n    return [ ...this.getNodesWithRects(), ...this.getConnectionsWithRects() ].filter((x) => {\n      return !this._fDraggableDataContext.selectedItems.includes(x.element);\n    });\n  }\n\n  private getNodesWithRects(): ICanBeSelectedElementAndRect[] {\n    return this.fNodes.filter((x) => !x.fSelectionDisabled).map((x) => {\n      return {\n        element: x,\n        fRect: RectExtensions.mult(\n          this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(x.hostElement)),\n          this.transform.scale\n        )\n      };\n    });\n  }\n\n  private getConnectionsWithRects(): ICanBeSelectedElementAndRect[] {\n    return this.fConnections.filter((x) => !x.fSelectionDisabled).map((x) => {\n      return {\n        element: x,\n        fRect: RectExtensions.mult(\n          this._fMediator.execute<IRect>(new GetNormalizedElementRectRequest(x.boundingElement)),\n          this.transform.scale\n        )\n      };\n    });\n  }\n}\n","export class GetCurrentSelectionRequest {\n\n}\n","import { GetCurrentSelectionRequest } from './get-current-selection.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { ICurrentSelection } from './i-current-selection';\n\n@Injectable()\n@FExecutionRegister(GetCurrentSelectionRequest)\nexport class GetCurrentSelectionExecution implements IExecution<GetCurrentSelectionRequest, ICurrentSelection> {\n\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(): ICurrentSelection {\n    return {\n      fNodeIds: this._getSelectedNodes(),\n      fGroupIds: this._getSelectedGroups(),\n      fConnectionIds: this._getSelectedConnections()\n    }\n  }\n\n  private _getSelectedNodes(): string[] {\n    return this._fDraggableDataContext.selectedItems\n      .filter(x => x.hostElement.classList.contains('f-node'))\n      .map(x => x.hostElement.dataset[ 'fNodeId' ]!);\n  }\n\n  private _getSelectedGroups(): string[] {\n    return this._fDraggableDataContext.selectedItems\n      .filter(x => x.hostElement.classList.contains('f-group'))\n      .map(x => x.hostElement.dataset[ 'fGroupId' ]!);\n  }\n\n  private _getSelectedConnections(): string[] {\n    return this._fDraggableDataContext.selectedItems\n      .filter(x => !x.hostElement.classList.contains('f-node') && !x.hostElement.classList.contains('f-group'))\n      .map(x => x.hostElement.id);\n  }\n}\n","export class SelectRequest {\n\n  constructor(\n    public nodes: string[],\n    public connections: string[]\n  ) {\n  }\n}\n","import { SelectRequest } from './select.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable';\n\n@Injectable()\n@FExecutionRegister(SelectRequest)\nexport class SelectExecution implements IExecution<SelectRequest, void> {\n\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: SelectRequest): void {\n    this._fDraggableDataContext.selectedItems.forEach((x) => {\n      x.unmarkAsSelected();\n    });\n    this._fDraggableDataContext.selectedItems = [];\n\n    request.nodes.forEach((key) => {\n      const node = this._fComponentsStore.fNodes.find((x) => x.fId === key);\n      if(node) {\n        node.markAsSelected();\n        this._fDraggableDataContext.selectedItems.push(node);\n      }\n    });\n\n    request.connections.forEach((key) => {\n      const connection = this._fComponentsStore.fConnections.find((x) => x.fId === key);\n      if(connection) {\n        connection.markAsSelected();\n        this._fDraggableDataContext.selectedItems.push(connection);\n      }\n    });\n\n    this._fDraggableDataContext.isSelectedChanged = true;\n  }\n}\n","export class SelectAllRequest {\n\n}\n","import { SelectAllRequest } from './select-all.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable';\n\n@Injectable()\n@FExecutionRegister(SelectAllRequest)\nexport class SelectAllExecution implements IExecution<SelectAllRequest, void> {\n\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: SelectAllRequest): void {\n    this._fDraggableDataContext.selectedItems.forEach((x) => {\n      x.unmarkAsSelected();\n    });\n    this._fDraggableDataContext.selectedItems = [];\n    this._fComponentsStore.fNodes.forEach((x) => {\n      x.markAsSelected();\n      this._fDraggableDataContext.selectedItems.push(x);\n    });\n    this._fComponentsStore.fConnections.forEach((x) => {\n      x.markAsSelected();\n      this._fDraggableDataContext.selectedItems.push(x);\n    });\n    this._fDraggableDataContext.isSelectedChanged = true;\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class SelectAndUpdateNodeLayerRequest {\n\n  constructor(\n    public fNode: FNodeBase\n  ) {\n  }\n}\n","export class MoveFrontElementsBeforeTargetElementRequest {\n\n  constructor(\n    public fItemsContainer: HTMLElement, // fGroupsContainer || fNodesContainer || fConnectionsContainer\n    public allElements: Element[],\n    public elementsThatShouldBeInFront: Element[],\n    public targetIndex: number\n  ) {\n  }\n}\n","import { MoveFrontElementsBeforeTargetElementRequest } from './move-front-elements-before-target-element.request';\nimport { Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\n\n@Injectable()\n@FExecutionRegister(MoveFrontElementsBeforeTargetElementRequest)\nexport class MoveFrontElementsBeforeTargetElementExecution implements IExecution<MoveFrontElementsBeforeTargetElementRequest, void> {\n\n  public handle(request: MoveFrontElementsBeforeTargetElementRequest): void {\n    const elementsToMove: Element[] = [];\n    for (let i = request.targetIndex + 1; i < request.allElements.length; i++) {\n      const element = request.allElements[ i ];\n      if (!request.elementsThatShouldBeInFront.includes(element)) {\n        elementsToMove.push(element);\n      }\n    }\n    elementsToMove.forEach((x) => {\n      request.fItemsContainer.removeChild(x);\n      request.fItemsContainer.insertBefore(x, request.allElements[ request.targetIndex ]);\n    });\n  }\n}\n","import { ISelectable } from '../../mixins';\n\nexport class UpdateItemAndChildrenLayersRequest {\n\n  constructor(\n    public item: ISelectable,\n    public itemContainer: HTMLElement,\n  ) {\n  }\n}\n","export class GetDeepChildrenNodesAndGroupsRequest {\n\n  constructor(\n    public fId: string\n  ) {\n  }\n}\n","import {inject, Injectable} from '@angular/core';\nimport { GetDeepChildrenNodesAndGroupsRequest } from './get-deep-children-nodes-and-groups.request';\nimport { FComponentsStore } from '../../f-storage';\nimport { FNodeBase } from '../../f-node';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\n\n@Injectable()\n@FExecutionRegister(GetDeepChildrenNodesAndGroupsRequest)\nexport class GetDeepChildrenNodesAndGroupsExecution\n  implements IExecution<GetDeepChildrenNodesAndGroupsRequest, FNodeBase[]> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: GetDeepChildrenNodesAndGroupsRequest): FNodeBase[] {\n    return this._getChildrenNodes(request.fId);\n  }\n\n  private _getChildrenNodes(fId: string, visited: Set<string> = new Set()): FNodeBase[] {\n    if (visited.has(fId)) {\n      throw new Error('Circular reference detected in the node hierarchy. Node id: ' + fId);\n    }\n    visited.add(fId);\n\n    const directChildren = this._fComponentsStore.fNodes.filter((x) => x.fParentId === fId);\n    return directChildren.reduce((result, x) => {\n      return result.concat(this._getChildrenNodes(x.fId, visited));\n    }, directChildren);\n  }\n}\n","import { UpdateItemAndChildrenLayersRequest } from './update-item-and-children-layers.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../f-storage';\nimport { FNodeBase } from '../../f-node';\nimport { GetDeepChildrenNodesAndGroupsRequest } from '../get-deep-children-nodes-and-groups';\nimport { MoveFrontElementsBeforeTargetElementRequest } from './move-front-elements-before-target-element';\nimport { FCanvasBase } from '../../f-canvas';\n\n@Injectable()\n@FExecutionRegister(UpdateItemAndChildrenLayersRequest)\nexport class UpdateItemAndChildrenLayersExecution implements IExecution<UpdateItemAndChildrenLayersRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  private get _fCanvas(): FCanvasBase {\n    return this._fComponentsStore.fCanvas!;\n  }\n\n  private get _fGroupsContainer(): HTMLElement {\n    return this._fCanvas.fGroupsContainer().nativeElement;\n  }\n\n  private get _fNodesContainer(): HTMLElement {\n    return this._fCanvas.fNodesContainer().nativeElement;\n  }\n\n  private get _fConnectionsContainer(): HTMLElement {\n    return this._fCanvas.fConnectionsContainer().nativeElement;\n  }\n\n  public handle(request: UpdateItemAndChildrenLayersRequest): void {\n\n    switch (request.itemContainer) {\n      case this._fGroupsContainer:\n        this._handleGroup(request);\n        break;\n      case this._fNodesContainer:\n        this._handleNode(request);\n        break;\n      case this._fConnectionsContainer:\n        this._handleConnection(request);\n        break;\n      default:\n        throw new Error('Unknown container');\n    }\n  }\n\n  private _handleGroup(request: UpdateItemAndChildrenLayersRequest): void {\n    const childrenNodesAndGroups = this._getChildrenNodesAndGroups(request.item.fId);\n    const childrenGroups = this._getChildrenGroups(childrenNodesAndGroups);\n    this._updateLayers(this._fGroupsContainer, request.item.hostElement as HTMLElement, childrenGroups);\n    const childrenNodes = this._getChildrenNodes(childrenNodesAndGroups);\n    if (childrenNodes.length) {\n      this._updateLayers(this._fNodesContainer, childrenNodes[ 0 ], childrenNodes);\n    }\n  }\n\n  private _handleNode(request: UpdateItemAndChildrenLayersRequest): void {\n    const childrenNodesAndGroups = this._getChildrenNodesAndGroups(request.item.fId);\n    const childrenNodes = this._getChildrenNodes(childrenNodesAndGroups);\n    this._updateLayers(request.itemContainer, request.item.hostElement as HTMLElement, childrenNodes);\n  }\n\n  private _handleConnection(request: UpdateItemAndChildrenLayersRequest): void {\n    this._updateLayers(request.itemContainer, request.item.hostElement as HTMLElement, []);\n  }\n\n  private _updateLayers(itemContainer: HTMLElement, item: HTMLElement, elementsThatShouldBeInFront: HTMLElement[]): void {\n    const allElements = Array.from(itemContainer.children) as HTMLElement[];\n    const targetIndex = allElements.findIndex((x) => x === item);\n    if (this._isAnythingNeedToBeMoved(allElements, targetIndex, elementsThatShouldBeInFront)) {\n      this._fMediator.execute(\n        new MoveFrontElementsBeforeTargetElementRequest(itemContainer, allElements, elementsThatShouldBeInFront, targetIndex)\n      );\n    }\n  }\n\n  private _isAnythingNeedToBeMoved(allElements: HTMLElement[], targetIndex: number, elementsThatShouldBeInFront: HTMLElement[]): boolean {\n    for (let i = targetIndex + 1; i < allElements.length; i++) {\n      if (!elementsThatShouldBeInFront.includes(allElements[ i ])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  private _getChildrenGroups(elements: HTMLElement[]): HTMLElement[] {\n    const allElements = Array.from(this._fGroupsContainer.children) as HTMLElement[];\n    return elements.filter((x) => this._fGroupsContainer.contains(x))\n      .sort((a, b) => allElements.indexOf(a) - allElements.indexOf(b));\n  }\n\n  private _getChildrenNodes(elements: HTMLElement[]): HTMLElement[] {\n    const allElements = Array.from(this._fNodesContainer.children) as HTMLElement[];\n    return elements.filter((x) => this._fNodesContainer.contains(x))\n      .sort((a, b) => allElements.indexOf(a) - allElements.indexOf(b));\n  }\n\n  private _getChildrenNodesAndGroups(fId: string): HTMLElement[] {\n    return this._fMediator.execute<FNodeBase[]>(new GetDeepChildrenNodesAndGroupsRequest(fId)).map((x) => x.hostElement);\n  }\n}\n","import { IHandler } from '@foblex/mediator';\nimport { Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator } from '@foblex/mediator';\nimport { SelectAndUpdateNodeLayerRequest } from './select-and-update-node-layer.request';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { UpdateItemAndChildrenLayersRequest } from '../../update-item-and-children-layers';\nimport { FNodeBase } from '../../../f-node';\n\n@Injectable()\n@FExecutionRegister(SelectAndUpdateNodeLayerRequest)\nexport class SelectAndUpdateNodeLayerExecution implements IHandler<SelectAndUpdateNodeLayerRequest, void> {\n\n  constructor(\n    private fDraggableDataContext: FDraggableDataContext,\n    private fMediator: FMediator\n  ) {\n  }\n  public handle(request: SelectAndUpdateNodeLayerRequest): void {\n    this.selectNodeIfNotSelected(request.fNode);\n\n    this.fMediator.execute<void>(\n      new UpdateItemAndChildrenLayersRequest(request.fNode, request.fNode.hostElement.parentElement as HTMLElement)\n    );\n  }\n\n  private selectNodeIfNotSelected(fNode: FNodeBase) {\n    if (!this.fDraggableDataContext.selectedItems.includes(fNode) && !fNode.fSelectionDisabled) {\n      this.fDraggableDataContext.selectedItems.push(fNode);\n      fNode.markAsSelected();\n      this.fDraggableDataContext.isSelectedChanged = true;\n    }\n  }\n}\n","import { ClearSelectionExecution } from './clear-selection';\nimport { GetCurrentSelectionExecution } from './get-current-selection';\nimport { SelectExecution } from './select';\nimport { SelectAllExecution } from './select-all';\nimport { SelectAndUpdateNodeLayerExecution } from './select-and-update-node-layer';\nimport { GetCanBeSelectedItemsExecution } from './get-can-be-selected-items';\n\nexport const F_SELECTION_FEATURES = [\n\n  ClearSelectionExecution,\n\n  GetCanBeSelectedItemsExecution,\n\n  GetCurrentSelectionExecution,\n\n  SelectExecution,\n\n  SelectAllExecution,\n\n  SelectAndUpdateNodeLayerExecution\n];\n","import { EventEmitter, inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { EmitSelectionChangeEventRequest } from './emit-selection-change-event-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext, FSelectionChangeEvent } from '../../../f-draggable';\nimport { GetCurrentSelectionRequest, ICurrentSelection } from '../../f-selection';\nimport { NotifyTransformChangedRequest } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(EmitSelectionChangeEventRequest)\nexport class EmitSelectionChangeEventExecution implements IExecution<EmitSelectionChangeEventRequest, void> {\n\n  private _fMediator = inject(FMediator);\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  private get _fSelectionChange(): EventEmitter<FSelectionChangeEvent> {\n    return this._fComponentsStore.fDraggable!.fSelectionChange;\n  }\n\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(request: EmitSelectionChangeEventRequest): void {\n    if (\n      !this._fDraggableDataContext.isSelectedChanged\n    ) {\n      return;\n    }\n\n    this._emitSelectionChange(this._getSelection());\n    this._fDraggableDataContext.isSelectedChanged = false;\n    this._fMediator.execute<void>(new NotifyTransformChangedRequest());\n  }\n\n  private _getSelection(): ICurrentSelection {\n    return this._fMediator.execute<ICurrentSelection>(new GetCurrentSelectionRequest());\n  }\n\n  private _emitSelectionChange(selection: ICurrentSelection): void {\n    this._fSelectionChange.emit(\n      new FSelectionChangeEvent(selection.fNodeIds, selection.fGroupIds, selection.fConnectionIds)\n    );\n  }\n}\n","export class EndDragSequenceRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { EndDragSequenceRequest } from './end-drag-sequence-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { F_CSS_CLASS } from '../../css-cls';\n\n@Injectable()\n@FExecutionRegister(EndDragSequenceRequest)\nexport class EndDragSequenceExecution implements IExecution<EndDragSequenceRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  private get _hostElement(): HTMLElement {\n    return this._fComponentsStore.fDraggable!.hostElement;\n  }\n\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(request: EndDragSequenceRequest): void {\n    this._hostElement.classList.remove(F_CSS_CLASS.DRAG_AND_DROP.DRAGGING);\n\n    this._fDraggableDataContext.reset();\n    this._emitDragEnded();\n  }\n\n  private _emitDragEnded(): void {\n    this._fComponentsStore.fDraggable?.fDragEnded?.emit();\n  }\n}\n","import {IPointerEvent} from \"../../../drag-toolkit\";\n\nexport class OnPointerMoveRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { OnPointerMoveRequest } from './on-pointer-move-request';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { IPoint, Point } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\nimport {IPointerEvent} from \"../../../drag-toolkit\";\n\n@Injectable()\n@FExecutionRegister(OnPointerMoveRequest)\nexport class OnPointerMoveExecution implements IExecution<OnPointerMoveRequest, void> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  private get _hostElement(): HTMLElement {\n    return this._fComponentsStore.fDraggable!.hostElement;\n  }\n\n  private readonly _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(request: OnPointerMoveRequest): void {\n    this._setDifferenceToDraggableItems(\n      this._getDifferenceBetweenPointerAndPointerDown(request.event)\n    );\n  }\n\n  private _setDifferenceToDraggableItems(difference: IPoint): void {\n    this._fDraggableDataContext.draggableItems.forEach((item) => {\n      item.onPointerMove({ ...difference });\n    });\n  }\n\n  private _getDifferenceBetweenPointerAndPointerDown(event: IPointerEvent): IPoint {\n    return this._getPointerPositionInCanvas(event)\n      .div(this._fDraggableDataContext.onPointerDownScale)\n      .sub(this._fDraggableDataContext.onPointerDownPosition);\n  }\n\n  private _getPointerPositionInCanvas(event: IPointerEvent): Point {\n    return Point.fromPoint(event.getPosition()).elementTransform(this._hostElement);\n  }\n}\n","export class InitializeDragSequenceRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { InitializeDragSequenceRequest } from './initialize-drag-sequence-request';\nimport { FDraggableDataContext } from '../../../f-draggable';\n\n@Injectable()\n@FExecutionRegister(InitializeDragSequenceRequest)\nexport class InitializeDragSequenceExecution implements IExecution<InitializeDragSequenceRequest, void> {\n\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(request: InitializeDragSequenceRequest): void {\n    this._fDraggableDataContext.reset();\n  }\n}\n","export class IsDragStartedRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { IsDragStartedRequest } from './is-drag-started-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(IsDragStartedRequest)\nexport class IsDragStartedExecution implements IExecution<IsDragStartedRequest, boolean> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: IsDragStartedRequest): boolean {\n    return !!this._fComponentsStore.fDraggable?.isDragStarted;\n  }\n}\n","export class PrepareDragSequenceRequest {\n\n}\n","export class StartDragSequenceRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { StartDragSequenceRequest } from './start-drag-sequence-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { EmitSelectionChangeEventRequest } from '../emit-selection-change-event';\nimport { F_CSS_CLASS } from '../../css-cls';\n\n@Injectable()\n@FExecutionRegister(StartDragSequenceRequest)\nexport class StartDragSequenceExecution implements IExecution<StartDragSequenceRequest, void> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  private get _hostElement(): HTMLElement {\n    return this._fComponentsStore.fDraggable!.hostElement;\n  }\n\n  public handle(request: StartDragSequenceRequest): void {\n    if (this._fDraggableDataContext.draggableItems.length > 0) {\n      this._hostElement.classList.add(F_CSS_CLASS.DRAG_AND_DROP.DRAGGING);\n      this._fMediator.execute<void>(new EmitSelectionChangeEventRequest());\n      this._emitDragStarted();\n    }\n  }\n\n  private _emitDragStarted(): void {\n    this._fComponentsStore.fDraggable?.fDragStarted?.emit({\n      fEventType: this._fDraggableDataContext.draggableItems[ 0 ].fEventType,\n      fData: { ...this._fDraggableDataContext.draggableItems[ 0 ].fData }\n    });\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { PrepareDragSequenceRequest } from './prepare-drag-sequence-request';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { StartDragSequenceRequest } from '../start-drag-sequence';\n\n@Injectable()\n@FExecutionRegister(PrepareDragSequenceRequest)\nexport class PrepareDragSequenceExecution implements IExecution<PrepareDragSequenceRequest, void> {\n\n  private _fMediator = inject(FMediator);\n\n  private _fDraggableDataContext = inject(FDraggableDataContext);\n\n  public handle(request: PrepareDragSequenceRequest): void {\n    this._callPrepareDragSequence();\n\n    this._fMediator.execute<void>(new StartDragSequenceRequest());\n  }\n\n  private _callPrepareDragSequence(): void {\n    this._fDraggableDataContext.draggableItems.forEach((item) => {\n      item.prepareDragSequence?.();\n    });\n  }\n}\n","export class RemoveDndFromStoreRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveDndFromStoreRequest } from './remove-dnd-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveDndFromStoreRequest)\nexport class RemoveDndFromStoreExecution implements IExecution<RemoveDndFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveDndFromStoreRequest): void {\n    this._fComponentsStore.fDraggable = undefined;\n  }\n}\n","import { AddDndToStoreExecution } from './add-dnd-to-store';\nimport { EmitSelectionChangeEventExecution } from './emit-selection-change-event';\nimport { RemoveDndFromStoreExecution } from './remove-dnd-from-store';\nimport { PrepareDragSequenceExecution } from './prepare-drag-sequence';\nimport { EndDragSequenceExecution } from './end-drag-sequence';\nimport { InitializeDragSequenceExecution } from './initialize-drag-sequence';\nimport { OnPointerMoveExecution } from './on-pointer-move';\nimport { IsDragStartedExecution } from './is-drag-started';\nimport { StartDragSequenceExecution } from './start-drag-sequence';\n\nexport const F_DRAGGABLE_FEATURES = [\n\n  AddDndToStoreExecution,\n\n  EmitSelectionChangeEventExecution,\n\n  EndDragSequenceExecution,\n\n  OnPointerMoveExecution,\n\n  InitializeDragSequenceExecution,\n\n  PrepareDragSequenceExecution,\n\n  IsDragStartedExecution,\n\n  StartDragSequenceExecution,\n\n  RemoveDndFromStoreExecution\n];\n","import { FFlowBase } from '../../../f-flow';\n\nexport class AddFlowToStoreRequest {\n\n  constructor(\n    public fComponent: FFlowBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddFlowToStoreRequest } from './add-flow-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddFlowToStoreRequest)\nexport class AddFlowToStoreExecution implements IExecution<AddFlowToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddFlowToStoreRequest): void {\n    this._fComponentsStore.fFlow = request.fComponent;\n  }\n}\n","export class GetFlowRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { GetFlowRequest } from './get-flow-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FFlowBase } from '../../../f-flow';\n\n@Injectable()\n@FExecutionRegister(GetFlowRequest)\nexport class GetFlowExecution implements IExecution<GetFlowRequest, FFlowBase> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: GetFlowRequest): FFlowBase {\n    const result = this._fComponentsStore.fFlow;\n    if (!result) {\n      throw new Error(`Flow not found in store`);\n    }\n    return result;\n  }\n}\n","export class GetFlowHostElementRequest {\n\n}\n","import { GetFlowHostElementRequest } from './get-flow-host-element.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(GetFlowHostElementRequest)\nexport class GetFlowHostElementExecution implements IExecution<GetFlowHostElementRequest, HTMLElement> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(): HTMLElement {\n    return this._fComponentsStore.flowHost;\n  }\n}\n","export class GetFlowStateConnectionsRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { GetFlowStateConnectionsRequest } from './get-flow-state-connections-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { IFFlowStateConnection } from '../i-f-flow-state-connection';\nimport { FConnectionBase } from '../../../../f-connection';\n\n@Injectable()\n@FExecutionRegister(GetFlowStateConnectionsRequest)\nexport class GetFlowStateConnectionsExecution implements IExecution<GetFlowStateConnectionsRequest, IFFlowStateConnection[]> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: GetFlowStateConnectionsRequest): IFFlowStateConnection[] {\n    return this._fComponentsStore.fConnections.map(this._mapToConnectionState);\n  }\n\n  private _mapToConnectionState(x: FConnectionBase): IFFlowStateConnection {\n    return {\n      id: x.fId,\n      fOutputId: x.fOutputId,\n      fInputId: x.fInputId,\n      fType: x.fType,\n      fBehavior: x.fBehavior,\n      isSelected: x.isSelected()\n    }\n  }\n}\n","import { Type } from '@angular/core';\n\nexport class GetFlowStateNodesRequest {\n\n  constructor(\n    public type: Type<any>\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { GetFlowStateNodesRequest } from './get-flow-state-nodes-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { IFFlowStateNode } from '../i-f-flow-state-node';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { IFFlowStateConnector } from '../i-f-flow-state-connector';\n\n@Injectable()\n@FExecutionRegister(GetFlowStateNodesRequest)\nexport class GetFlowStateNodesExecution implements IExecution<GetFlowStateNodesRequest, IFFlowStateNode[]> {\n\n  constructor(\n    private fComponentsStore: FComponentsStore,\n  ) {\n  }\n\n  public handle(request: GetFlowStateNodesRequest): IFFlowStateNode[] {\n    return this.fComponentsStore.fNodes.filter((x) => x instanceof request.type).map((x) => {\n      return {\n        id: x.fId,\n        parent: x.fParentId,\n        position: x.position,\n        size: x.size,\n        fOutputs: this._getOutputs(x.hostElement),\n        fInputs: this._getInputs(x.hostElement),\n        isSelected: x.isSelected()\n      };\n    });\n  }\n\n  private _getOutputs(hostElement: HTMLElement): IFFlowStateConnector[] {\n    return this.fComponentsStore.fOutputs.filter((x) => hostElement.contains(x.hostElement)).map((x) => {\n      return {\n        id: x.fId,\n        fConnectableSide: x.fConnectableSide\n      }\n    });\n  }\n\n  private _getInputs(hostElement: HTMLElement): IFFlowStateConnector[] {\n    return this.fComponentsStore.fInputs.filter((x) => hostElement.contains(x.hostElement)).map((x) => {\n      return {\n        id: x.fId,\n        fConnectableSide: x.fConnectableSide\n      }\n    });\n  }\n}\n","export class GetFlowStateRequest {\n}\n","import { GetFlowStateRequest } from './get-flow-state.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IFFlowState } from './i-f-flow-state';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FGroupDirective, FNodeDirective } from '../../../f-node';\nimport { IPoint, ITransformModel, PointExtensions } from '@foblex/2d';\nimport { GetFlowStateNodesRequest } from './get-flow-state-nodes';\nimport { GetFlowStateConnectionsRequest } from './get-flow-state-connections';\n\n@Injectable()\n@FExecutionRegister(GetFlowStateRequest)\nexport class GetFlowStateExecution implements IExecution<GetFlowStateRequest, IFFlowState> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(payload: GetFlowStateRequest): IFFlowState {\n    return {\n      position: this._getCanvasPosition(this._fComponentsStore.fCanvas!.transform),\n      scale: this._fComponentsStore.fCanvas!.transform.scale,\n      nodes: this._fMediator.execute(new GetFlowStateNodesRequest(FNodeDirective)),\n      groups: this._fMediator.execute(new GetFlowStateNodesRequest(FGroupDirective)),\n      connections: this._fMediator.execute(new GetFlowStateConnectionsRequest())\n    }\n  }\n\n  private _getCanvasPosition(transform: ITransformModel): IPoint {\n    return PointExtensions.sum(transform.position, transform.scaledPosition);\n  }\n}\n\n\n\n","import { GetFlowStateExecution } from './get-flow-state.execution';\nimport { GetFlowStateNodesExecution } from './get-flow-state-nodes';\nimport { GetFlowStateConnectionsExecution } from './get-flow-state-connections';\n\nexport const GET_FLOW_STATE_PROVIDERS = [\n\n  GetFlowStateExecution,\n\n  GetFlowStateNodesExecution,\n\n  GetFlowStateConnectionsExecution\n];\n","export class RemoveFlowFromStoreRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveFlowFromStoreRequest } from './remove-flow-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveFlowFromStoreRequest)\nexport class RemoveFlowFromStoreExecution implements IExecution<RemoveFlowFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveFlowFromStoreRequest): void {\n    this._fComponentsStore.fFlow = undefined;\n  }\n}\n","import { GetFlowHostElementExecution } from './get-flow-host-element';\nimport { AddFlowToStoreExecution } from './add-flow-to-store';\nimport { RemoveFlowFromStoreExecution } from './remove-flow-from-store';\nimport { GetFlowExecution } from './get-flow';\nimport { GET_FLOW_STATE_PROVIDERS } from './get-flow-state';\n\nexport const F_FLOW_FEATURES = [\n\n  AddFlowToStoreExecution,\n\n  GetFlowExecution,\n\n  GetFlowHostElementExecution,\n\n  ...GET_FLOW_STATE_PROVIDERS,\n\n  RemoveFlowFromStoreExecution\n];\n","import { FLineAlignmentBase } from '../../../f-line-alignment';\n\nexport class AddLineAlignmentToStoreRequest {\n\n  constructor(\n    public fComponent: FLineAlignmentBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddLineAlignmentToStoreRequest } from './add-line-alignment-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddLineAlignmentToStoreRequest)\nexport class AddLineAlignmentToStoreExecution implements IExecution<AddLineAlignmentToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddLineAlignmentToStoreRequest): void {\n    this._fComponentsStore.fLineAlignment = request.fComponent;\n  }\n}\n","export class RemoveLineAlignmentFromStoreRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveLineAlignmentFromStoreRequest } from './remove-line-alignment-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveLineAlignmentFromStoreRequest)\nexport class RemoveLineAlignmentFromStoreExecution implements IExecution<RemoveLineAlignmentFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveLineAlignmentFromStoreRequest): void {\n    this._fComponentsStore.fLineAlignment = undefined;\n  }\n}\n","import { AddLineAlignmentToStoreExecution } from './add-line-alignment-to-store';\nimport { RemoveLineAlignmentFromStoreExecution } from './remove-line-alignment-from-store';\n\nexport const F_LINE_ALIGNMENT_FEATURES = [\n\n  AddLineAlignmentToStoreExecution,\n\n  RemoveLineAlignmentFromStoreExecution\n];\n","import { FNodeBase } from '../../../f-node';\n\nexport class AddNodeToStoreRequest {\n\n  constructor(\n    public fComponent: FNodeBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddNodeToStoreRequest } from './add-node-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(AddNodeToStoreRequest)\nexport class AddNodeToStoreExecution implements IExecution<AddNodeToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddNodeToStoreRequest): void {\n    this._fComponentsStore.addComponent(this._fComponentsStore.fNodes, request.fComponent);\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class CalculateInputConnectionsRequest {\n\n  constructor(\n    public fNode: FNodeBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { CalculateInputConnectionsRequest } from './calculate-input-connections-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FNodeBase } from '../../../f-node';\nimport { FConnectionBase } from '../../../f-connection';\n\n@Injectable()\n@FExecutionRegister(CalculateInputConnectionsRequest)\nexport class CalculateInputConnectionsExecution implements IExecution<CalculateInputConnectionsRequest, FConnectionBase[]> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: CalculateInputConnectionsRequest): FConnectionBase[] {\n    return this._calculateConnections(\n      new Set(this._calculateConnectors(request.fNode))\n    );\n  }\n\n  private _calculateConnectors(fNode: FNodeBase): string[] {\n    return this._fComponentsStore.fInputs\n      .filter((x) => fNode.isContains(x.hostElement))\n      .map((x) => x.fId);\n  }\n\n  private _calculateConnections(ids: Set<string>): FConnectionBase[] {\n    return this._fComponentsStore.fConnections\n      .filter((x) => ids.has(x.fInputId));\n  }\n}\n","export class CalculateNodesBoundingBoxRequest {\n\n}\n","import { IRect, RectExtensions } from '@foblex/2d';\nimport { CalculateNodesBoundingBoxRequest } from './calculate-nodes-bounding-box.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\n\n@Injectable()\n@FExecutionRegister(CalculateNodesBoundingBoxRequest)\nexport class CalculateNodesBoundingBoxExecution implements IExecution<CalculateNodesBoundingBoxRequest, IRect | null> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: CalculateNodesBoundingBoxRequest): IRect | null {\n    return RectExtensions.union(this._getNodesRects());\n  }\n\n  private _getNodesRects(): IRect[] {\n    return this._fComponentsStore.fNodes.map((x) => {\n      return this._getElementRect(x.hostElement);\n    });\n  }\n\n  private _getElementRect(element: HTMLElement | SVGElement): IRect {\n    return RectExtensions.fromElement(element)\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class CalculateNodesBoundingBoxNormalizedPositionRequest {\n\n  constructor(\n    public fNodes?: FNodeBase[],\n  ) {\n  }\n}\n","import { IRect, RectExtensions } from '@foblex/2d';\nimport { CalculateNodesBoundingBoxNormalizedPositionRequest } from './calculate-nodes-bounding-box-normalized-position.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../f-node';\n\n@Injectable()\n@FExecutionRegister(CalculateNodesBoundingBoxNormalizedPositionRequest)\nexport class CalculateNodesBoundingBoxNormalizedPositionExecution implements IExecution<CalculateNodesBoundingBoxNormalizedPositionRequest, IRect | null> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: CalculateNodesBoundingBoxNormalizedPositionRequest): IRect | null {\n    return RectExtensions.union(this._getNodesRects(request.fNodes || this._fComponentsStore.fNodes));\n  }\n\n  private _getNodesRects(fNodes: FNodeBase[]): IRect[] {\n    return fNodes.map((x) => {\n      return this._getElementRect(x, RectExtensions.fromElement(x.hostElement));\n    });\n  }\n\n  private _getElementRect(fNode: FNodeBase, rect: IRect): IRect {\n    return RectExtensions.initialize(fNode.position.x, fNode.position.y, rect.width, rect.height)\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class CalculateOutputConnectionsRequest {\n\n  constructor(\n    public fNode: FNodeBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { CalculateOutputConnectionsRequest } from './calculate-output-connections-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FNodeBase } from '../../../f-node';\nimport { FConnectionBase } from '../../../f-connection';\n\n@Injectable()\n@FExecutionRegister(CalculateOutputConnectionsRequest)\nexport class CalculateOutputConnectionsExecution implements IExecution<CalculateOutputConnectionsRequest, FConnectionBase[]> {\n\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: CalculateOutputConnectionsRequest): FConnectionBase[] {\n    return this._calculateConnections(\n      new Set(this._calculateConnectors(request.fNode))\n    );\n  }\n\n  private _calculateConnectors(fNode: FNodeBase): string[] {\n    return this._fComponentsStore.fOutputs\n      .filter((x) => fNode.isContains(x.hostElement))\n      .map((x) => x.fId);\n  }\n\n  private _calculateConnections(ids: Set<string>): FConnectionBase[] {\n    return this._fComponentsStore.fConnections\n      .filter((x) => ids.has(x.fOutputId));\n  }\n}\n","import { FNodeBase } from '../../../f-node';\nimport { IRect } from '@foblex/2d';\n\nexport class GetNodePaddingRequest {\n\n  constructor(\n    public fNode: FNodeBase,\n    public rect: IRect\n  ) {\n  }\n}\n","import {inject, Injectable} from '@angular/core';\nimport { GetNodePaddingRequest } from './get-node-padding.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../f-node';\nimport { IRect } from '@foblex/2d';\nimport { BrowserService } from '@foblex/platform';\n\n@Injectable()\n@FExecutionRegister(GetNodePaddingRequest)\nexport class GetNodePaddingExecution\n  implements IExecution<GetNodePaddingRequest, [ number, number, number, number ]> {\n\n  private readonly _browser = inject(BrowserService);\n\n  public handle(request: GetNodePaddingRequest): [ number, number, number, number ] {\n    return request.fNode.fIncludePadding ? this.getPaddingData(request.fNode, request.rect) : [ 0, 0, 0, 0 ];\n  }\n\n  private getPaddingData(node: FNodeBase, rect: IRect): [ number, number, number, number ] {\n    const style = this._browser.window.getComputedStyle(node.hostElement);\n    return [\n      this._browser.toPixels(style.paddingLeft, rect.width, rect.height, style.fontSize),\n      this._browser.toPixels(style.paddingTop, rect.width, rect.height, style.fontSize),\n      this._browser.toPixels(style.paddingRight, rect.width, rect.height, style.fontSize),\n      this._browser.toPixels(style.paddingBottom, rect.width, rect.height, style.fontSize)\n    ];\n  }\n}\n","export class GetNodesRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { GetNodesRequest } from './get-nodes-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FNodeBase } from '../../../f-node';\n\n@Injectable()\n@FExecutionRegister(GetNodesRequest)\nexport class GetNodesExecution implements IExecution<GetNodesRequest, FNodeBase[]> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: GetNodesRequest): FNodeBase[] {\n    return this._fComponentsStore.fNodes;\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class GetParentNodesRequest {\n\n  constructor(\n    public fNode: FNodeBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { GetParentNodesRequest } from './get-parent-nodes.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../f-node';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(GetParentNodesRequest)\nexport class GetParentNodesExecution\n  implements IExecution<GetParentNodesRequest, FNodeBase[]> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: GetParentNodesRequest): FNodeBase[] {\n    return this._getParentNodes(request.fNode, new Set<string>(), []);\n  }\n\n  private _getParentNodes(fNode: FNodeBase, visited: Set<string>, result: FNodeBase[]): FNodeBase[] {\n    if (visited.has(fNode.fId)) {\n      throw new Error('Circular reference detected in the node hierarchy. Node id: ' + fNode.fId);\n    }\n    visited.add(fNode.fId);\n\n    const parent = this._fComponentsStore.fNodes.find((x) => x.fId === fNode.fParentId);\n    if (!parent) {\n      return result;\n    }\n\n    result.push(parent);\n    return this._getParentNodes(parent, visited, result);\n  }\n}\n","import { DestroyRef } from '@angular/core';\nimport { FNodeBase } from '../../../f-node';\n\nexport class UpdateNodeWhenStateOrSizeChangedRequest {\n\n  constructor(\n    public fComponent: FNodeBase,\n    public destroyRef: DestroyRef,\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { UpdateNodeWhenStateOrSizeChangedRequest } from './update-node-when-state-or-size-changed-request';\nimport { EFConnectableSide, FConnectorBase } from '../../../f-connectors';\nimport { NotifyDataChangedRequest } from '../../../f-storage';\nimport { debounceTime, FChannelHub, notifyOnStart } from '../../../reactivity';\nimport { FResizeChannel } from '../../../reactivity';\nimport { RectExtensions } from '@foblex/2d';\n\n@Injectable()\n@FExecutionRegister(UpdateNodeWhenStateOrSizeChangedRequest)\nexport class UpdateNodeWhenStateOrSizeChangedExecution\n  implements IExecution<UpdateNodeWhenStateOrSizeChangedRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n\n  public handle(request: UpdateNodeWhenStateOrSizeChangedRequest): void {\n    const { hostElement, connectors, stateChanges } = request.fComponent;\n\n    new FChannelHub(\n      new FResizeChannel(hostElement),\n      stateChanges\n    ).pipe(notifyOnStart(), debounceTime(10)).listen(request.destroyRef, () => {\n      this._calculateConnectorsConnectableSide(connectors, hostElement);\n      this._fMediator.execute<void>(new NotifyDataChangedRequest());\n    });\n  }\n\n  private _calculateConnectorsConnectableSide(fConnectors: FConnectorBase[], fNodeHost: HTMLElement | SVGElement): void {\n    fConnectors.forEach((x: FConnectorBase) => {\n      x.fConnectableSide = this._calculateConnectorConnectableSide(x, fNodeHost);\n    });\n  }\n\n  private _calculateConnectorConnectableSide(fConnector: FConnectorBase, fNodeHost: HTMLElement | SVGElement): EFConnectableSide {\n    let result: EFConnectableSide | undefined;\n\n    if (fConnector.userFConnectableSide === EFConnectableSide.AUTO) {\n      result = this._getSideByDelta(fConnector.hostElement, fNodeHost);\n    } else {\n      result = fConnector.userFConnectableSide;\n    }\n    return result;\n  }\n\n  private _getSideByDelta(fConnectorHost: HTMLElement | SVGElement, fNodeHost: HTMLElement | SVGElement): EFConnectableSide {\n    let result: EFConnectableSide | undefined;\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\n","import { FNodeBase } from '../../../f-node';\n\nexport class RemoveNodeFromStoreRequest {\n\n  constructor(\n    public fComponent: FNodeBase\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveNodeFromStoreRequest } from './remove-node-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(RemoveNodeFromStoreRequest)\nexport class RemoveNodeFromStoreExecution implements IExecution<RemoveNodeFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveNodeFromStoreRequest): void {\n    this._fComponentsStore.removeComponent(this._fComponentsStore.fNodes, request.fComponent);\n  }\n}\n","import { AddNodeToStoreExecution } from './add-node-to-store';\nimport { RemoveNodeFromStoreExecution } from './remove-node-from-store';\nimport { UpdateNodeWhenStateOrSizeChangedExecution } from './update-node-when-state-or-size-changed';\nimport { GetNodesExecution } from './get-nodes';\nimport { CalculateNodesBoundingBoxExecution } from './calculate-nodes-bounding-box';\nimport {\n  CalculateNodesBoundingBoxNormalizedPositionExecution\n} from './calculate-nodes-bounding-box-normalized-position';\nimport { GetNodePaddingExecution } from './get-node-padding';\nimport { GetParentNodesExecution } from './get-parent-nodes';\nimport { CalculateInputConnectionsExecution } from './calculate-input-connections';\nimport { CalculateOutputConnectionsExecution } from './calculate-output-connections';\n\nexport const F_NODE_FEATURES = [\n\n  AddNodeToStoreExecution,\n\n  CalculateInputConnectionsExecution,\n\n  CalculateNodesBoundingBoxExecution,\n\n  CalculateNodesBoundingBoxNormalizedPositionExecution,\n\n  CalculateOutputConnectionsExecution,\n\n  GetNodePaddingExecution,\n\n  GetNodesExecution,\n\n  GetParentNodesExecution,\n\n  UpdateNodeWhenStateOrSizeChangedExecution,\n\n  RemoveNodeFromStoreExecution\n];\n","import { FZoomBase } from '../../../f-zoom';\n\nexport class AddZoomToStoreRequest {\n\n  constructor(\n    public fComponent: FZoomBase\n  ) {\n  }\n}\n","export const F_ZOOM_TAG = 'F_ZOOM';\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { AddZoomToStoreRequest } from './add-zoom-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { F_ZOOM_TAG } from '../f-zoom-tag';\n\n@Injectable()\n@FExecutionRegister(AddZoomToStoreRequest)\nexport class AddZoomToStoreExecution implements IExecution<AddZoomToStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: AddZoomToStoreRequest): void {\n    this._fComponentsStore.fComponents = {\n      [F_ZOOM_TAG]: request.fComponent\n    };\n  }\n}\n","export class RemoveZoomFromStoreRequest {\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemoveZoomFromStoreRequest } from './remove-zoom-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { F_ZOOM_TAG } from '../f-zoom-tag';\n\n@Injectable()\n@FExecutionRegister(RemoveZoomFromStoreRequest)\nexport class RemoveZoomFromStoreExecution implements IExecution<RemoveZoomFromStoreRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  public handle(request: RemoveZoomFromStoreRequest): void {\n    this._fComponentsStore.fComponents = {\n      [F_ZOOM_TAG]: undefined\n    };\n  }\n}\n","export class ResetZoomRequest {\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ResetZoomRequest } from './reset-zoom-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FCanvasBase } from '../../../f-canvas';\n\n@Injectable()\n@FExecutionRegister(ResetZoomRequest)\nexport class ResetZoomExecution implements IExecution<ResetZoomRequest, void> {\n\n  private _fComponentsStore = inject(FComponentsStore);\n\n  private get _fCanvas(): FCanvasBase {\n    return this._fComponentsStore.fCanvas!;\n  }\n\n  public handle(request: ResetZoomRequest): void {\n    this._fCanvas.resetScale();\n    this._fCanvas.redraw();\n    this._fCanvas.emitCanvasChangeEvent();\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class SetZoomRequest {\n\n  constructor(\n    public position: IPoint,\n    public step: number,\n    public direction: number,\n    public animate: boolean = false\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { SetZoomRequest } from './set-zoom-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { F_ZOOM_TAG } from '../f-zoom-tag';\nimport { IPoint, Point } from '@foblex/2d';\nimport { FCanvasBase } from '../../../f-canvas';\nimport { FZoomBase } from '../../../f-zoom';\nimport { IsDragStartedRequest } from '../../f-draggable';\n\n@Injectable()\n@FExecutionRegister(SetZoomRequest)\nexport class SetZoomExecution implements IExecution<SetZoomRequest, void> {\n\n  private _fMediator = inject(FMediator);\n  private _fComponentsStore = inject(FComponentsStore);\n\n  private get _fHost(): HTMLElement {\n    return this._fComponentsStore.fFlow?.hostElement!;\n  }\n\n  private get _fCanvas(): FCanvasBase {\n    return this._fComponentsStore.fCanvas!;\n  }\n\n  private get _fZoomComponent(): FZoomBase {\n    return this._fComponentsStore.fComponents[F_ZOOM_TAG]!;\n  }\n\n  private get _isDragStarted(): boolean {\n    return this._fMediator.execute<boolean>(new IsDragStartedRequest());\n  }\n\n  public handle(request: SetZoomRequest): void {\n    if (this._isDragStarted || !this._fZoomComponent) {\n      return;\n    }\n\n    const result = this._fCanvas.transform.scale + request.step * request.direction;\n\n    this._fCanvas.setScale(this._clamp(result), this._castPositionToFlow(request.position));\n    request.animate ? this._fCanvas.redrawWithAnimation() : this._fCanvas.redraw();\n    this._fCanvas.emitCanvasChangeEvent();\n  }\n\n  private _clamp(value: number): number {\n    return Math.max(this._fZoomComponent.minimum, Math.min(value, this._fZoomComponent.maximum));\n  }\n\n  private _castPositionToFlow(position: IPoint): IPoint {\n    return Point.fromPoint(position).elementTransform(this._fHost);\n  }\n}\n","import { AddZoomToStoreExecution } from './add-zoom-to-store';\nimport { RemoveZoomFromStoreExecution } from './remove-zoom-from-store';\nimport { SetZoomExecution } from './set-zoom';\nimport { ResetZoomExecution } from './reset-zoom';\n\nexport const F_ZOOM_FEATURES = [\n\n  AddZoomToStoreExecution,\n\n  RemoveZoomFromStoreExecution,\n\n  ResetZoomExecution,\n\n  SetZoomExecution\n];\n","export class SortNodeLayersRequest {\n\n}\n","import { SortNodeLayersRequest } from './sort-node-layers.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FNodeBase } from '../../../f-node';\nimport { GetDeepChildrenNodesAndGroupsRequest } from '../../get-deep-children-nodes-and-groups';\nimport { BrowserService } from '@foblex/platform';\nimport { FCanvasBase } from '../../../f-canvas';\n\n@Injectable()\n@FExecutionRegister(SortNodeLayersRequest)\nexport class SortNodeLayersExecution implements IExecution<SortNodeLayersRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fBrowser = inject(BrowserService);\n\n  private get _fCanvas(): FCanvasBase {\n    return this._fComponentsStore.fCanvas!;\n  }\n\n  private get _fGroupsContainer(): HTMLElement {\n    return this._fCanvas.fGroupsContainer().nativeElement;\n  }\n\n  private get _fNodesContainer(): HTMLElement {\n    return this._fCanvas.fNodesContainer().nativeElement;\n  }\n\n  private get _fNodeElements(): HTMLElement[] {\n    return Array.from(this._fNodesContainer.children) as HTMLElement[];\n  }\n\n  public handle(request: SortNodeLayersRequest): void {\n    this._getGroups().forEach((parent: FNodeBase) => {\n      this._moveChildrenNodes(this._getSortedChildrenNodes(parent));\n    });\n  }\n\n  private _getGroups(): FNodeBase[] {\n    return this._fComponentsStore.fNodes\n      .filter((x) => this._fGroupsContainer.contains(x.hostElement));\n  }\n\n  private _getSortedChildrenNodes(\n    parent: FNodeBase,\n  ): HTMLElement[] {\n    const allElements = this._fNodeElements;\n    return this._getChildrenNodes(parent.fId)\n      .sort((a, b) => allElements.indexOf(a) - allElements.indexOf(b));\n  }\n\n  private _getChildrenNodes(fId: string): HTMLElement[] {\n    return this._fMediator.execute<FNodeBase[]>(new GetDeepChildrenNodesAndGroupsRequest(fId))\n      .filter((x) => this._fNodesContainer.contains(x.hostElement)).map((x) => x.hostElement);\n  }\n\n  private _moveChildrenNodes(\n    sortedChildrenGroups: HTMLElement[],\n  ): void {\n    const fragment = this._fBrowser.document.createDocumentFragment();\n    sortedChildrenGroups.forEach((childGroup: HTMLElement) => {\n      fragment.appendChild(childGroup); // Append automatically removes the element from its current position\n    });\n    this._fNodesContainer.appendChild(fragment);\n  }\n}\n","export class SortItemsByParentRequest {\n\n  constructor(\n    public fItemsContainer: HTMLElement // fGroupsContainer || fNodesContainer\n  ) {\n  }\n}\n","import { SortItemsByParentRequest } from './sort-items-by-parent.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FNodeBase } from '../../../f-node';\nimport { GetDeepChildrenNodesAndGroupsRequest } from '../../get-deep-children-nodes-and-groups';\nimport { BrowserService } from '@foblex/platform';\n\n@Injectable()\n@FExecutionRegister(SortItemsByParentRequest)\nexport class SortItemsByParentExecution implements IExecution<SortItemsByParentRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n  private readonly _fBrowser = inject(BrowserService);\n\n  private _fItemsContainer!: HTMLElement;\n\n  private get _fItemElements(): HTMLElement[] {\n    return Array.from(this._fItemsContainer.children) as HTMLElement[];\n  }\n\n  public handle(request: SortItemsByParentRequest): void {\n    this._fItemsContainer = request.fItemsContainer;\n    this._getItemsOfContainer().forEach((fItem: FNodeBase) => {\n      this._moveChildrenItems(this._getSortedChildrenItems(fItem), fItem);\n    });\n  }\n\n  private _getItemsOfContainer(): FNodeBase[] {\n    return this._fComponentsStore.fNodes\n      .filter((x) => this._fItemsContainer.contains(x.hostElement));\n  }\n\n  private _getSortedChildrenItems(\n    fItem: FNodeBase,\n  ): HTMLElement[] {\n    const indexInContainer = this._fItemElements.indexOf(fItem.hostElement);\n    return this._getChildrenItems(fItem.fId)\n      .filter((child: HTMLElement) => this._fItemElements.indexOf(child) < indexInContainer)\n      .sort((a, b) => this._fItemElements.indexOf(a) - this._fItemElements.indexOf(b));\n  }\n\n  private _getChildrenItems(fId: string): HTMLElement[] {\n    return this._fMediator.execute<FNodeBase[]>(new GetDeepChildrenNodesAndGroupsRequest(fId))\n      .filter((x) => this._fItemsContainer.contains(x.hostElement)).map((x) => x.hostElement);\n  }\n\n  private _moveChildrenItems(\n    sortedChildrenItems: HTMLElement[],\n    parent: FNodeBase,\n  ): void {\n    let nextSibling = parent.hostElement.nextElementSibling;\n\n    const fragment = this._fBrowser.document.createDocumentFragment();\n\n    sortedChildrenItems.forEach((child: HTMLElement) => {\n      fragment.appendChild(child); // Append automatically removes the element from its current position\n    });\n    this._fItemsContainer.insertBefore(fragment, nextSibling);\n  }\n}\n","export class SortItemLayersRequest {\n\n}\n","import { SortItemLayersRequest } from './sort-item-layers.request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { SortNodeLayersRequest } from './sort-node-layers-by-groups';\nimport { SortItemsByParentRequest } from './sort-items-by-parent';\nimport { FComponentsStore } from '../../f-storage';\nimport { FCanvasBase } from '../../f-canvas';\n\n@Injectable()\n@FExecutionRegister(SortItemLayersRequest)\nexport class SortItemLayersExecution implements IExecution<SortItemLayersRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _fComponentsStore = inject(FComponentsStore);\n\n  private get _fCanvas(): FCanvasBase {\n    return this._fComponentsStore.fCanvas!;\n  }\n\n  public handle(request: SortItemLayersRequest): void {\n    if(!this._fComponentsStore.fCanvas) {\n      return;\n    }\n    this._fMediator.execute(new SortItemsByParentRequest(this._fCanvas.fGroupsContainer().nativeElement));\n    this._fMediator.execute(new SortNodeLayersRequest());\n    this._fMediator.execute(new SortItemsByParentRequest(this._fCanvas.fNodesContainer().nativeElement));\n  }\n}\n","import { BrowserService } from '@foblex/platform';\n\nexport function createSVGElement<K extends keyof SVGElementTagNameMap>(tag: K, fBrowser: BrowserService): SVGElementTagNameMap[K] {\n  return fBrowser.document.createElementNS('http://www.w3.org/2000/svg', tag);\n}\n","export type FEventTrigger = (event: FTriggerEvent) => boolean;\n\nexport type FTriggerEvent = MouseEvent | TouchEvent | WheelEvent;\n\nexport function isValidEventTrigger(event: FTriggerEvent, fTrigger: FEventTrigger): boolean {\n  return fTrigger(event);\n}\n\nexport function defaultEventTrigger(event: FTriggerEvent): boolean {\n  return true;\n}\n","export function isMobile(): boolean {\n  // @ts-ignore\n  return /android|iPad|iPhone|iPod/i.test(navigator.userAgent || navigator.vendor || window[ 'opera' ])\n}\n","export function Deprecated(newMethodName: string, removalVersion: string = '18.0.0'): MethodDecorator {\n  return function (\n    target: Object,\n    propertyKey: string | symbol,\n    descriptor: TypedPropertyDescriptor<any>\n  ): TypedPropertyDescriptor<any> | void {\n    const originalMethod = descriptor.value;\n    descriptor.value = function (...args: any[]) {\n      console.warn(\n        `Method \"${String(propertyKey)}\" is deprecated. Use \"${newMethodName}\" instead. This method will be removed in version ${removalVersion}.`,\n      );\n      return originalMethod.apply(this, args);\n    };\n    return descriptor;\n  };\n}\n\n","export function LogExecutionTime(label?: string): MethodDecorator {\n  return function (\n    target: Object,\n    propertyKey: string | symbol,\n    descriptor: TypedPropertyDescriptor<any>\n  ): TypedPropertyDescriptor<any> | void {\n    const originalMethod = descriptor.value;\n    descriptor.value = function (...args: any[]) {\n      console.time(label || String(propertyKey));\n      const result = originalMethod.apply(this, args);\n\n      if (result instanceof Promise) {\n        return result.finally(() => console.timeEnd(label || String(propertyKey)));\n      }\n\n      console.timeEnd(label || String(propertyKey));\n      return result;\n    };\n\n    return descriptor;\n  };\n}\n","import {GetNormalizedElementRectExecution} from './get-normalized-element-rect';\nimport {\n  MoveFrontElementsBeforeTargetElementExecution,\n  UpdateItemAndChildrenLayersExecution\n} from './update-item-and-children-layers';\nimport {GetNormalizedPointExecution} from './get-normalized-point';\nimport {SortItemLayersExecution, SortItemsByParentExecution, SortNodeLayersExecution} from './sort-item-layers';\nimport {GetDeepChildrenNodesAndGroupsExecution} from './get-deep-children-nodes-and-groups';\nimport {GetElementRoundedRectExecution} from './get-element-rounded-rect';\nimport {F_SELECTION_FEATURES} from './f-selection';\nimport {F_BACKGROUND_FEATURES} from './f-background';\nimport {F_CANVAS_FEATURES} from './f-canvas';\nimport {F_CONNECTION_FEATURES} from './f-connection';\nimport {F_CONNECTORS_FEATURES} from './f-connectors';\nimport {F_FLOW_FEATURES} from './f-flow';\nimport {F_DRAGGABLE_FEATURES} from './f-draggable';\nimport {F_NODE_FEATURES} from './f-node';\nimport {F_LINE_ALIGNMENT_FEATURES} from './f-line-alignment';\nimport {F_ZOOM_FEATURES} from './f-zoom';\nimport {GetNormalizedConnectorRectExecution} from \"./get-normalized-connector-rect\";\n\nexport const COMMON_PROVIDERS = [\n\n  ...F_CANVAS_FEATURES,\n\n  ...F_CONNECTION_FEATURES,\n\n  ...F_BACKGROUND_FEATURES,\n\n  ...F_CONNECTORS_FEATURES,\n\n  ...F_DRAGGABLE_FEATURES,\n\n  ...F_FLOW_FEATURES,\n\n  ...F_LINE_ALIGNMENT_FEATURES,\n\n  ...F_NODE_FEATURES,\n\n  GetElementRoundedRectExecution,\n\n  ...F_SELECTION_FEATURES,\n\n  ...F_ZOOM_FEATURES,\n\n  GetDeepChildrenNodesAndGroupsExecution,\n\n  GetNormalizedConnectorRectExecution,\n\n  GetNormalizedElementRectExecution,\n\n  GetNormalizedPointExecution,\n\n  SortItemLayersExecution,\n\n  SortItemsByParentExecution,\n\n  SortNodeLayersExecution,\n\n  UpdateItemAndChildrenLayersExecution,\n\n  MoveFrontElementsBeforeTargetElementExecution,\n];\n","import {\n  ChangeDetectionStrategy,\n  Component, DestroyRef,\n  ElementRef, inject, input, numberAttribute, OnChanges,\n  OnInit, SimpleChanges\n} from \"@angular/core\";\nimport {\n  ITransformModel,\n  PointExtensions, SizeExtensions, TransformModelExtensions\n} from '@foblex/2d';\nimport { F_BACKGROUND_PATTERN, IFBackgroundPattern } from '../domain';\nimport { createSVGElement } from '../../domain';\nimport { BrowserService } from '@foblex/platform';\nimport { FChannel, FChannelHub, notifyOnStart } from '../../reactivity';\n\nlet uniqueId: number = 0;\n\n@Component({\n  selector: \"f-rect-pattern\",\n  template: ``,\n  standalone: true,\n  host: {\n    '[attr.id]': 'id'\n  },\n  providers: [\n    { provide: F_BACKGROUND_PATTERN, useExisting: FRectPatternComponent }\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FRectPatternComponent implements OnInit, OnChanges, IFBackgroundPattern {\n\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _elementReference = inject(ElementRef);\n  private readonly _fBrowser = inject(BrowserService);\n\n  private readonly _stateChanges = new FChannel();\n\n  public get hostElement(): HTMLElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public id = input<string>(`f-pattern-${ uniqueId++ }`);\n  public vColor = input<string>('rgba(0,0,0,0.1)');\n  public hColor = input<string>('rgba(0,0,0,0.1)');\n  public vSize = input<number, unknown>(20, { transform: numberAttribute});\n  public hSize = input<number, unknown>(20, { transform: numberAttribute});\n\n  private _transform = TransformModelExtensions.default();\n\n  private _position = PointExtensions.initialize();\n\n  private _size = SizeExtensions.initialize(this.hSize(), this.vSize());\n\n  private _pattern!: SVGPatternElement;\n  private _vLine!: SVGLineElement;\n  private _hLine!: SVGLineElement;\n\n  constructor(\n  ) {\n    this._createPattern();\n  }\n\n  private _createPattern(): void {\n    this._pattern = createSVGElement('pattern', this._fBrowser);\n    this._pattern.setAttribute('patternUnits', 'userSpaceOnUse');\n    this.hostElement.appendChild(this._pattern);\n\n    this._vLine = createSVGElement('line', this._fBrowser);\n    this._pattern.appendChild(this._vLine);\n\n    this._hLine = createSVGElement('line', this._fBrowser);\n    this._pattern.appendChild(this._hLine);\n  }\n\n  public ngOnInit(): void {\n    this._listenStateChanges();\n  }\n\n  private _listenStateChanges(): void {\n    new FChannelHub(this._stateChanges).pipe(notifyOnStart()).listen(this._destroyRef, () => this._redraw());\n  }\n\n  public ngOnChanges(changes: SimpleChanges) {\n    if (changes['vSize'] || changes['hSize'] || changes['vColor'] || changes['hColor']) {\n      this._refresh();\n    }\n  }\n\n  private _redraw(): void {\n    this._calculatePattern();\n    this._redrawPattern();\n\n    this.redrawLine(this._vLine, this.vColor(), this._size.width, 0, this._size.width, this._size.height);\n    this.redrawLine(this._hLine, this.hColor(), 0, this._size.height, this._size.width, this._size.height);\n  }\n\n  private _calculatePattern(): void {\n    this._position.x = this._transform.position.x + this._transform.scaledPosition.x;\n    this._position.y = this._transform.position.y + this._transform.scaledPosition.y;\n    this._size = SizeExtensions.initialize(this.hSize() * this._transform.scale, this.vSize() * this._transform.scale);\n  }\n\n  private _redrawPattern(): void {\n    this._pattern.setAttribute('x', `${ this._position.x }`);\n    this._pattern.setAttribute('y', `${ this._position.y }`);\n    this._pattern.setAttribute('width', `${ this._size.width }`);\n    this._pattern.setAttribute('height', `${ this._size.height }`);\n  }\n\n  private redrawLine(line: SVGLineElement, color: string, x1: number, y1: number, x2: number, y2: number): void {\n    line.setAttribute('stroke', `${ color }`);\n    line.setAttribute('x1', `${ x1 }`);\n    line.setAttribute('x2', `${ x2 }`);\n    line.setAttribute('y1', `${ y1 }`);\n    line.setAttribute('y2', `${ y2 }`);\n  }\n\n  public setTransform(transform: ITransformModel): void {\n    this._transform = transform;\n    this._refresh();\n  }\n\n  private _refresh(): void {\n    this._stateChanges.notify();\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component, DestroyRef,\n  ElementRef, inject, input, Input, numberAttribute, OnChanges, OnDestroy,\n  OnInit, SimpleChanges\n} from \"@angular/core\";\nimport {\n  IPoint,\n  ITransformModel,\n  PointExtensions,\n  TransformModelExtensions\n} from '@foblex/2d';\nimport { F_BACKGROUND_PATTERN, IFBackgroundPattern } from '../domain';\nimport { BrowserService } from '@foblex/platform';\nimport { createSVGElement } from '../../domain';\nimport { FChannel, FChannelHub, notifyOnStart } from '../../reactivity';\n\nlet uniqueId: number = 0;\n\n@Component({\n  selector: \"f-circle-pattern\",\n  template: ``,\n  standalone: true,\n  host: {\n    '[attr.id]': 'id'\n  },\n  providers: [\n    { provide: F_BACKGROUND_PATTERN, useExisting: FCirclePatternComponent }\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FCirclePatternComponent implements OnInit, OnChanges, IFBackgroundPattern {\n\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _elementReference = inject(ElementRef);\n  private readonly _fBrowser = inject(BrowserService);\n\n  private readonly _stateChanges = new FChannel();\n\n  public get hostElement(): HTMLElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public id = input<string>(`f-pattern-${ uniqueId++ }`);\n  public color = input<string>('rgba(0,0,0,0.1)');\n  public radius = input<number, unknown>(20, { transform: numberAttribute});\n\n  private _scaledRadius: number = 20;\n\n  private _transform: ITransformModel = TransformModelExtensions.default();\n\n  private _position: IPoint = PointExtensions.initialize();\n\n  private _pattern!: SVGPatternElement;\n  private _circle!: SVGCircleElement;\n\n  constructor(\n  ) {\n    this._createPattern();\n  }\n\n  private _createPattern(): void {\n    this._pattern = createSVGElement('pattern', this._fBrowser);\n    this._pattern.setAttribute('patternUnits', 'userSpaceOnUse');\n    this.hostElement.appendChild(this._pattern);\n\n    this._circle = createSVGElement('circle', this._fBrowser);\n    this._pattern.appendChild(this._circle);\n  }\n\n  public ngOnInit(): void {\n    this._listenStateChanges();\n  }\n\n  private _listenStateChanges(): void {\n    new FChannelHub(this._stateChanges).pipe(notifyOnStart()).listen(this._destroyRef, () => this._redraw());\n  }\n\n  public ngOnChanges(changes: SimpleChanges) {\n    if (changes['radius'] || changes['color']) {\n      this._refresh();\n    }\n  }\n\n  private _redraw(): void {\n    this._calculatePattern();\n    this._redrawPattern();\n    this._redrawElement();\n  }\n\n  private _calculatePattern(): void {\n    this._position.x = this._transform.position.x + this._transform.scaledPosition.x;\n    this._position.y = this._transform.position.y + this._transform.scaledPosition.y;\n    this._scaledRadius = this.radius() * this._transform.scale;\n  }\n\n  private _redrawPattern(): void {\n    this._pattern.setAttribute('x', `${ this._position.x }`);\n    this._pattern.setAttribute('y', `${ this._position.y }`);\n    this._pattern.setAttribute('width', `${ this._scaledRadius }`);\n    this._pattern.setAttribute('height', `${ this._scaledRadius }`);\n  }\n\n  private _redrawElement(): void {\n    this._circle.setAttribute('fill', this.color());\n    this._circle.setAttribute('cx', `${ this._scaledRadius / 2 }`);\n    this._circle.setAttribute('cy', `${ this._scaledRadius / 2 }`);\n    this._circle.setAttribute('r', `${ this._scaledRadius / this.radius() }`);\n  }\n\n  public setTransform(transform: ITransformModel): void {\n    this._transform = transform;\n    this._refresh();\n  }\n\n  private _refresh(): void {\n    this._stateChanges.notify();\n  }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { ITransformModel } from '@foblex/2d';\nimport { IHasHostElement } from '../i-has-host-element';\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 setTransform(transform: ITransformModel): void;\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component, contentChild,\n  ElementRef, inject, OnDestroy,\n  OnInit\n} from \"@angular/core\";\nimport { F_BACKGROUND, FBackgroundBase } from './f-background-base';\nimport { ITransformModel } from '@foblex/2d';\nimport { F_BACKGROUND_PATTERN } from './domain';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddBackgroundToStoreRequest,\n  AddPatternToBackgroundRequest,\n  RemoveBackgroundFromStoreRequest\n} from '../domain';\n\n@Component({\n  selector: \"f-background\",\n  template: \"<svg><ng-content></ng-content></svg>\",\n  styleUrls: [ \"./f-background.component.scss\" ],\n  standalone: true,\n  host: {\n    'class': 'f-component f-background'\n  },\n  providers: [ { provide: F_BACKGROUND, useExisting: FBackgroundComponent } ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FBackgroundComponent\n  extends FBackgroundBase implements OnInit, AfterContentInit, OnDestroy {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _elementReference = inject(ElementRef);\n\n  public override get hostElement(): HTMLElement {\n    return this._elementReference.nativeElement;\n  }\n\n  protected fBackgroundPattern = contentChild(F_BACKGROUND_PATTERN);\n\n  public ngOnInit(): void {\n    this._fMediator.execute(new AddBackgroundToStoreRequest(this));\n  }\n\n  public ngAfterContentInit(): void {\n    this._fMediator.execute(new AddPatternToBackgroundRequest(this.fBackgroundPattern()));\n  }\n\n  public setTransform(transform: ITransformModel): void {\n    this.fBackgroundPattern()?.setTransform(transform);\n  }\n\n  public ngOnDestroy() {\n    this._fMediator.execute(new RemoveBackgroundFromStoreRequest(this));\n  }\n}\n","import { FBackgroundComponent } from './f-background.component';\nimport { FRectPatternComponent } from './f-rect-pattern';\nimport { FCirclePatternComponent } from './f-circle-pattern';\n\nexport const F_BACKGROUND_PROVIDERS = [\n\n  FBackgroundComponent,\n\n  FRectPatternComponent,\n\n  FCirclePatternComponent\n];\n","import { IPoint } from '@foblex/2d';\n\nexport class FCanvasChangeEvent {\n  constructor(\n    public readonly position: IPoint,\n    public readonly scale: number,\n  ) {\n  }\n}\n","import { PointExtensions, TransformModelExtensions, IPoint } from '@foblex/2d';\nimport { Directive, ElementRef, InjectionToken, OutputEmitterRef, Signal } from '@angular/core';\nimport { FCanvasChangeEvent } from './domain';\nimport { IHasHostElement } from '../i-has-host-element';\n\nexport const F_CANVAS = new InjectionToken<FCanvasBase>('F_CANVAS');\n\n@Directive()\nexport abstract class FCanvasBase implements IHasHostElement {\n\n  public abstract fCanvasChange: OutputEmitterRef<FCanvasChangeEvent>;\n\n  public abstract hostElement: HTMLElement;\n\n  public abstract fGroupsContainer: Signal<ElementRef<HTMLElement>>;\n\n  public abstract fNodesContainer: Signal<ElementRef<HTMLElement>>;\n\n  public abstract fConnectionsContainer: Signal<ElementRef<HTMLElement>>;\n\n  public transform = TransformModelExtensions.default();\n\n  public abstract redraw(): void;\n\n  public abstract redrawWithAnimation(): void;\n\n  public getPosition(): IPoint {\n    return this.transform.position;\n  }\n\n  public setPosition(position: IPoint): void {\n    this.transform.position = position;\n  }\n\n  public abstract setScale(scale: number, toPosition: IPoint): void;\n\n  public abstract resetScale(): void;\n\n  public emitCanvasChangeEvent(): void {\n    this.fCanvasChange.emit(\n        new FCanvasChangeEvent(PointExtensions.sum(this.transform.position, this.transform.scaledPosition), this.transform.scale)\n    );\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component, computed, effect,\n  ElementRef,\n  inject,\n  Injector,\n  input, numberAttribute,\n  OnDestroy,\n  OnInit,\n  output,\n  viewChild,\n} from \"@angular/core\";\nimport {\n  FCanvasBase, F_CANVAS\n} from './f-canvas-base';\nimport { IPoint, PointExtensions, TransformModelExtensions } from '@foblex/2d';\nimport {\n  FCanvasChangeEvent,\n} from './domain';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddCanvasToStoreRequest,\n  CenterGroupOrNodeRequest,\n  FitToFlowRequest, GetFlowRequest,\n  InputCanvasPositionRequest,\n  InputCanvasScaleRequest, isMobile, RemoveCanvasFromStoreRequest,\n  ResetScaleAndCenterRequest, ResetScaleRequest, SetBackgroundTransformRequest, transitionEnd, UpdateScaleRequest,\n} from '../domain';\nimport { NotifyTransformChangedRequest } from '../f-storage';\nimport { Deprecated } from '../domain';\nimport { FFlowBase } from '../f-flow';\n\n@Component({\n  selector: 'f-canvas',\n  templateUrl: './f-canvas.component.html',\n  styleUrls: [ './f-canvas.component.scss' ],\n  standalone: true,\n  host: {\n    'class': 'f-component f-canvas',\n  },\n  providers: [\n    { provide: F_CANVAS, useExisting: FCanvasComponent }\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FCanvasComponent extends FCanvasBase implements OnInit, OnDestroy {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _elementReference = inject(ElementRef);\n  private readonly _injector = inject(Injector);\n\n  private _flowId: string | undefined;\n\n  public override fCanvasChange = output<FCanvasChangeEvent>();\n\n  public readonly position = input<IPoint, IPoint | null | undefined>(PointExtensions.initialize(), { transform: PointExtensions.castToPoint });\n  public readonly scale = input<number, unknown>(1, { transform: numberAttribute });\n\n  public override get hostElement(): HTMLElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public override fGroupsContainer = viewChild.required<ElementRef<HTMLElement>>('fGroupsContainer');\n  public override fNodesContainer = viewChild.required<ElementRef<HTMLElement>>('fNodesContainer');\n  public override fConnectionsContainer = viewChild.required<ElementRef<HTMLElement>>('fConnectionsContainer');\n\n  public get flowId(): string {\n    return this._flowId!;\n  }\n\n  public ngOnInit(): void {\n    this._flowId = this._fMediator.execute<FFlowBase>(new GetFlowRequest()).fId();\n    this._fMediator.execute(new AddCanvasToStoreRequest(this));\n    this._positionChange();\n    this._scaleChange();\n  }\n\n  private _positionChange(): void {\n    effect(() => {\n      this._fMediator.execute(new InputCanvasPositionRequest(this.transform, this.position()));\n    }, { injector: this._injector });\n  }\n\n  private _scaleChange(): void {\n    effect(() => {\n      this._fMediator.execute(new InputCanvasScaleRequest(this.transform, this.scale()));\n    }, { injector: this._injector });\n  }\n\n  public override redraw(): void {\n    this._fMediator.execute(new SetBackgroundTransformRequest(this.transform));\n    this.hostElement.setAttribute(\"style\", `transform: ${ TransformModelExtensions.toString(this.transform) }`);\n    this._fMediator.execute(new NotifyTransformChangedRequest());\n  }\n\n  public override redrawWithAnimation(): void {\n    this._fMediator.execute(new SetBackgroundTransformRequest(this.transform));\n    this.hostElement.setAttribute(\"style\", `transition: transform ${ isMobile() ? 80 : 150 }ms ease-in-out; transform: ${ TransformModelExtensions.toString(this.transform) }`);\n    transitionEnd(this.hostElement, () => this.redraw());\n  }\n\n  public centerGroupOrNode(id: string, animated: boolean = true): void {\n    setTimeout(() => this._fMediator.execute(new CenterGroupOrNodeRequest(id, animated)));\n  }\n\n  public fitToScreen(toCenter: IPoint = PointExtensions.initialize(), animated: boolean = true): void {\n    setTimeout(() => this._fMediator.execute(new FitToFlowRequest(toCenter, animated)));\n  }\n\n  public resetScaleAndCenter(animated: boolean = true): void {\n    setTimeout(() => this._fMediator.execute(new ResetScaleAndCenterRequest(animated)));\n  }\n\n  public getScale(): number {\n    return this.transform.scale || 1;\n  }\n\n  /**\n   *  @deprecated Method \"setZoom\" is deprecated. Use \"setScale\" instead. This method will be removed in version 18.0.0.`,\n   */\n  @Deprecated('setScale')\n  public setZoom(scale: number, toPosition: IPoint = PointExtensions.initialize()): void {\n    this.setScale(scale, toPosition);\n  }\n\n  public override setScale(scale: number, toPosition: IPoint = PointExtensions.initialize()): void {\n    this._fMediator.execute(new UpdateScaleRequest(scale, toPosition));\n  }\n\n  /**\n   *  @deprecated Method \"resetZoom\" is deprecated. Use \"resetScale\" instead. This method will be removed in version 18.0.0.`,\n   */\n  @Deprecated('resetScale')\n  public resetZoom(): void {\n    this.resetScale();\n  }\n\n  public override resetScale(): void {\n    this._fMediator.execute(new ResetScaleRequest());\n  }\n\n  public ngOnDestroy(): void {\n    this._fMediator.execute(new RemoveCanvasFromStoreRequest());\n  }\n}\n","<ng-container>\n  <div #fGroupsContainer>\n    <ng-content select=\"[fGroup]\"></ng-content>\n  </div>\n  <div #fConnectionsContainer>\n    <ng-content select=\"f-snap-connection\"></ng-content>\n    <ng-content select=\"f-connection\"></ng-content>\n    <ng-content select=\"f-connection-for-create\"></ng-content>\n  </div>\n\n  <div #fNodesContainer>\n    <ng-content select=\"[fNode]\"></ng-content>\n  </div>\n</ng-container>\n","import { FCanvasComponent } from './f-canvas.component';\n\nexport const F_CANVAS_PROVIDERS = [\n  FCanvasComponent,\n];\n","import { IRect, RectExtensions } from '@foblex/2d';\n\nexport class FMinimapData {\n\n  constructor(\n    public element: SVGSVGElement,\n    public scale: number = 1,\n    public viewBox: IRect = RectExtensions.initialize(0, 0, 0, 0)\n  ) {\n  }\n}\n","import {\n  Directive, ElementRef, inject, Input, OnInit,\n} from \"@angular/core\";\nimport { setRectToViewBox } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport { FMinimapData, IFMinimapScaleAndViewBox, MinimapCalculateSvgScaleAndViewBoxRequest } from './domain';\n\n@Directive({\n  selector: 'svg[fMinimapFlow]'\n})\nexport class FMinimapFlowDirective {\n\n  @Input()\n  public fMinSize: number = 1000;\n\n  private _fMediator = inject(FMediator);\n  private _elementReference = inject(ElementRef);\n\n  public get hostElement(): SVGSVGElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public model: FMinimapData = new FMinimapData(this.hostElement);\n\n  public redraw(): void {\n    const { scale, viewBox} = this._fMediator.execute<IFMinimapScaleAndViewBox>(\n      new MinimapCalculateSvgScaleAndViewBoxRequest(this.hostElement, this.fMinSize)\n    );\n    this.model = new FMinimapData(this.hostElement, scale, viewBox);\n\n    setRectToViewBox(viewBox, this.hostElement);\n  }\n}\n","import {\n  Directive, ElementRef, inject,\n} from \"@angular/core\";\nimport { FMediator } from '@foblex/mediator';\nimport { MinimapDrawNodesRequest } from './domain';\n\n@Directive({\n  selector: 'g[fMinimapCanvas]'\n})\nexport class FMinimapCanvasDirective {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _elementReference = inject(ElementRef);\n\n  public get hostElement(): SVGGElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public redraw(): void {\n    this._clearCanvas();\n\n    this._fMediator.execute<SVGRectElement[]>(new MinimapDrawNodesRequest())\n      .forEach((x) => {\n        this.hostElement.appendChild(x);\n      });\n  }\n\n  private _clearCanvas(): void {\n    this.hostElement.innerHTML = '';\n  }\n}\n","import { Directive, ElementRef, inject } from \"@angular/core\";\nimport { IRect, setRectToElement } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport { MinimapCalculateViewBoxRequest } from './domain';\n\n@Directive({\n  selector: 'rect[fMinimapView]',\n  host: {\n    'class': 'f-component f-minimap-view',\n  }\n})\nexport class FMinimapViewDirective {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _elementReference = inject(ElementRef);\n\n  public get hostElement(): SVGGElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public redraw(): void {\n    setRectToElement(\n      this._fMediator.execute<IRect>(new MinimapCalculateViewBoxRequest()),\n      this.hostElement\n    );\n  }\n}\n","import {\n  AfterViewInit, ChangeDetectionStrategy, Component, DestroyRef,\n  inject, Input, ViewChild,\n} from \"@angular/core\";\nimport { FMediator } from '@foblex/mediator';\nimport { FMinimapFlowDirective } from './f-minimap-flow.directive';\nimport { FMinimapCanvasDirective } from './f-minimap-canvas.directive';\nimport { FMinimapViewDirective } from './f-minimap-view.directive';\nimport { F_BEFORE_MAIN_PLUGIN, IFDragAndDropPlugin } from '../f-draggable';\nimport { MinimapDragFinalizeRequest, MinimapDragPreparationRequest } from './domain';\nimport { ListenTransformChangesRequest } from '../f-storage';\nimport { debounceTime, FChannelHub, notifyOnStart } from '../reactivity';\nimport { BrowserService } from '@foblex/platform';\nimport {IPointerEvent} from \"../drag-toolkit\";\n\n@Component({\n  selector: 'f-minimap',\n  templateUrl: './f-minimap.component.html',\n  styleUrls: [ './f-minimap.component.scss' ],\n  exportAs: 'fComponent',\n  host: {\n    'class': 'f-component f-minimap',\n  },\n  providers: [\n    { provide: F_BEFORE_MAIN_PLUGIN, useExisting: FMinimapComponent },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FMinimapComponent implements AfterViewInit, IFDragAndDropPlugin {\n\n  private _destroyRef = inject(DestroyRef);\n  private _fMediator = inject(FMediator);\n  private _fBrowser = inject(BrowserService);\n\n  @ViewChild(FMinimapCanvasDirective, { static: true })\n  public fMinimapCanvas!: FMinimapCanvasDirective;\n\n  @ViewChild(FMinimapFlowDirective, { static: true })\n  public fMinimapFlow!: FMinimapFlowDirective;\n\n  @ViewChild(FMinimapViewDirective, { static: true })\n  public fMinimapView!: FMinimapViewDirective;\n\n  @Input()\n  public fMinSize: number = 1000;\n\n  public ngAfterViewInit(): void {\n    this._listenTransformChanges();\n  }\n\n  private _listenTransformChanges(): void {\n    this._fMediator.execute<FChannelHub>(new ListenTransformChangesRequest()).pipe(\n      notifyOnStart(), debounceTime(2)\n    ).listen(this._destroyRef, () => {\n      this._redraw()\n    });\n  }\n\n  private _redraw(): void {\n    if (!this._fBrowser.isBrowser()) {\n      return;\n    }\n    this.fMinimapFlow.redraw();\n    this.fMinimapView.redraw();\n    this.fMinimapCanvas.redraw();\n  }\n\n  public onPointerDown(event: IPointerEvent): void {\n    this._fMediator.execute(new MinimapDragPreparationRequest(event, this.fMinimapFlow.model));\n  }\n\n  public onPointerUp(event: IPointerEvent): void {\n    this._fMediator.execute(new MinimapDragFinalizeRequest(event));\n  }\n}\n","<svg fMinimapFlow width=\"100%\" height=\"100%\" fLockedContext [fMinSize]=\"fMinSize\">\n  <g fMinimapCanvas></g>\n  <rect fMinimapView x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" stroke=\"none\"/>\n</svg>\n\n","import { FMinimapComponent } from './f-minimap.component';\nimport { FMinimapViewDirective } from './f-minimap-view.directive';\nimport { FMinimapFlowDirective } from './f-minimap-flow.directive';\nimport { FMinimapCanvasDirective } from './f-minimap-canvas.directive';\n\nexport const F_MINIMAP_PROVIDERS = [\n\n  FMinimapComponent,\n\n  FMinimapCanvasDirective,\n\n  FMinimapViewDirective,\n\n  FMinimapFlowDirective,\n];\n","import { InjectionToken, InputSignal, OutputEmitterRef } from '@angular/core';\nimport { IHasHostElement } from '../i-has-host-element';\n\nexport const F_FLOW = new InjectionToken<FFlowBase>('F_FLOW');\n\nexport abstract class FFlowBase implements IHasHostElement {\n\n  public abstract fId: InputSignal<string>;\n\n  public abstract hostElement: HTMLElement;\n\n  public abstract fLoaded: OutputEmitterRef<string>;\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component, DestroyRef, ElementRef, inject, input, OnDestroy, OnInit, output\n} from '@angular/core';\nimport { F_FLOW, FFlowBase } from './f-flow-base';\nimport {\n  ClearSelectionRequest,\n  CalculateNodesBoundingBoxNormalizedPositionRequest,\n  GetNormalizedPointRequest,\n  GetCurrentSelectionRequest,\n  RedrawConnectionsRequest,\n  SelectAllRequest,\n  SelectRequest,\n  IFFlowState,\n  GetFlowStateRequest, RemoveFlowFromStoreRequest, AddFlowToStoreRequest, SortItemLayersRequest, ICurrentSelection\n} from '../domain';\nimport { IPoint, IRect } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  FDraggableDataContext\n} from '../f-draggable';\nimport { FConnectionFactory } from '../f-connection';\nimport {\n  NotifyDataChangedRequest,\n  F_STORAGE_PROVIDERS,\n  ListenCountChangesRequest,\n  ListenDataChangesRequest\n} from '../f-storage';\nimport { BrowserService } from '@foblex/platform';\nimport { COMMON_PROVIDERS } from '../domain';\nimport { F_DRAGGABLE_PROVIDERS } from '../f-draggable';\nimport { FChannelHub } from '../reactivity';\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  standalone: true,\n  host: {\n    '[attr.id]': 'fId()',\n    class: \"f-component f-flow\",\n  },\n  providers: [\n    FMediator,\n    ...F_STORAGE_PROVIDERS,\n    FDraggableDataContext,\n    FConnectionFactory,\n    ...COMMON_PROVIDERS,\n    ...F_DRAGGABLE_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 readonly _destroyRef = inject(DestroyRef);\n  private readonly _fMediator = inject(FMediator);\n  private readonly _browserService = inject(BrowserService);\n  private readonly _elementReference = inject(ElementRef);\n\n  public override fId = input<string>(`f-flow-${ uniqueId++ }`, { alias: 'fFlowId' });\n\n  public override get hostElement(): HTMLElement {\n    return this._elementReference.nativeElement;\n  }\n\n  public override fLoaded = output<string>();\n\n  private _isLoaded: boolean = false;\n\n  public ngOnInit(): void {\n    this._fMediator.execute(new AddFlowToStoreRequest(this));\n  }\n\n  public ngAfterContentInit(): void {\n    if (!this._browserService.isBrowser()) {\n      return;\n    }\n    this._listenCountChanges();\n    this._listenDataChanges();\n  }\n\n  private _listenCountChanges(): void {\n    this._fMediator.execute<FChannelHub>(\n      new ListenCountChangesRequest()\n    ).listen(this._destroyRef, () => {\n      this._fMediator.execute(new SortItemLayersRequest())\n    });\n  }\n\n  private _listenDataChanges(): void {\n    this._fMediator.execute<FChannelHub>(\n      new ListenDataChangesRequest()\n    ).listen(this._destroyRef, () => {\n      this._fMediator.execute(new RedrawConnectionsRequest());\n\n      this._emitLoaded();\n    });\n  }\n\n  private _emitLoaded(): void {\n    if (!this._isLoaded) {\n      this._isLoaded = true;\n      this.fLoaded.emit(this.fId());\n    }\n  }\n\n  public redraw(): void {\n    this._fMediator.execute(new NotifyDataChangedRequest());\n  }\n\n  public reset(): void {\n    this._isLoaded = false;\n  }\n\n  public getNodesBoundingBox(): IRect | null {\n    return this._fMediator.execute<IRect | null>(new CalculateNodesBoundingBoxNormalizedPositionRequest());\n  }\n\n  public getSelection(): ICurrentSelection {\n    return this._fMediator.execute<ICurrentSelection>(new GetCurrentSelectionRequest());\n  }\n\n  public getPositionInFlow(position: IPoint): IRect {\n    return this._fMediator.execute(new GetNormalizedPointRequest(position));\n  }\n\n  public getState(): IFFlowState {\n    return this._fMediator.execute(new GetFlowStateRequest());\n  }\n\n  public selectAll(): void {\n    this._fMediator.execute<void>(new SelectAllRequest());\n  }\n\n  public select(nodes: string[], connections: string[]): void {\n    this._fMediator.execute<void>(new SelectRequest(nodes, connections));\n  }\n\n  public clearSelection(): void {\n    this._fMediator.execute<void>(new ClearSelectionRequest());\n  }\n\n  public ngOnDestroy(): void {\n    this._fMediator.execute(new RemoveFlowFromStoreRequest());\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\n  <ng-content select=\"f-minimap\"></ng-content>\n</ng-container>\n","import { FFlowComponent } from './f-flow.component';\n\nexport const F_FLOW_PROVIDERS = [\n  FFlowComponent\n];\n","export enum EFZoomDirection {\n\n  ZOOM_IN = 1,\n\n  ZOOM_OUT = -1,\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const F_ZOOM = new InjectionToken<FZoomBase>('F_ZOOM');\n\nexport abstract class FZoomBase {\n\n  public abstract minimum: number;\n\n  public abstract maximum: number;\n\n  public abstract step: number;\n\n  public abstract dblClickStep: number;\n}\n","import {\n  AfterViewInit,\n  booleanAttribute,\n  Directive,\n  inject,\n  Input,\n  numberAttribute,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  SimpleChanges\n} from \"@angular/core\";\nimport { F_ZOOM, FZoomBase } from './f-zoom-base';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddZoomToStoreRequest, defaultEventTrigger,\n  Deprecated,\n  FEventTrigger,\n  GetCanvasRequest,\n  GetFlowHostElementRequest, isValidEventTrigger,\n  RemoveZoomFromStoreRequest,\n  ResetZoomRequest,\n  SetZoomRequest\n} from '../domain';\nimport { FCanvasBase } from '../f-canvas';\nimport { IPoint, IRect, PointExtensions, RectExtensions } from '@foblex/2d';\nimport { isNode } from '../f-node';\nimport { EFZoomDirection } from './e-f-zoom-direction';\n\n@Directive({\n  selector: \"f-canvas[fZoom]\",\n  exportAs: 'fComponent',\n  standalone: true,\n  host: {\n    'class': 'f-zoom f-component'\n  },\n  providers: [ { provide: F_ZOOM, useExisting: FZoomDirective } ],\n})\nexport class FZoomDirective extends FZoomBase implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n\n  private _fMediator = inject(FMediator);\n  private _rendered = inject(Renderer2);\n\n  private _triggersListener: Function[] = [];\n\n  @Input({ alias: 'fZoom', transform: booleanAttribute })\n  public isEnabled: boolean = false;\n\n  @Input()\n  public fWheelTrigger: FEventTrigger = defaultEventTrigger;\n\n  @Input()\n  public fDblClickTrigger: FEventTrigger = defaultEventTrigger;\n\n  @Input({ alias: 'fZoomMinimum', transform: numberAttribute })\n  public override minimum: number = 0.1;\n\n  @Input({ alias: 'fZoomMaximum', transform: numberAttribute })\n  public override maximum: number = 4;\n\n  @Input({ alias: 'fZoomStep', transform: numberAttribute })\n  public override step: number = 0.1;\n\n  @Input({ alias: 'fZoomDblClickStep', transform: numberAttribute })\n  public override dblClickStep: number = 0.5;\n\n  private get _fHost(): HTMLElement {\n    return this._fMediator.execute(new GetFlowHostElementRequest());\n  }\n\n  private get _fCanvas(): FCanvasBase {\n    return this._fMediator.execute(new GetCanvasRequest());\n  }\n\n  public ngOnInit(): void {\n    this._fMediator.execute(new AddZoomToStoreRequest(this));\n  }\n\n  public ngAfterViewInit(): void {\n    this._listenTriggers();\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes[ 'isEnabled' ]) {\n      this._listenTriggers();\n    }\n  }\n\n  private _listenTriggers(): void {\n    if (!this._fHost) {\n      return;\n    }\n\n    this._disposeListeners();\n    if (!this.isEnabled) {\n      return;\n    }\n\n    this._triggersListener.push(this._rendered.listen(this._fHost, 'wheel', this._onWheel));\n    this._triggersListener.push(this._rendered.listen(this._fHost, 'dblclick', this._onDoubleClick));\n  }\n\n  private _onWheel = (event: WheelEvent) => {\n    if (!isValidEventTrigger(event, this.fWheelTrigger)) {\n      return;\n    }\n    event.preventDefault();\n    const targetElement = event.target as HTMLElement;\n\n    if (targetElement?.closest('[fLockedContext]')) {\n      return;\n    }\n\n    this.setZoom(\n      PointExtensions.initialize(event.clientX, event.clientY),\n      this.step, this._calculateDirection(event.deltaY), false\n    );\n  }\n\n  private _calculateDirection(deltaY: number): number {\n    return deltaY > 0 ? EFZoomDirection.ZOOM_OUT : EFZoomDirection.ZOOM_IN;\n  }\n\n  private _onDoubleClick = (event: MouseEvent) => {\n    if (!isValidEventTrigger(event, this.fDblClickTrigger)) {\n      return;\n    }\n    event.preventDefault();\n    const targetElement = event.target as HTMLElement;\n\n    if (isNode(targetElement) || targetElement?.closest('[fLockedContext]')) {\n      return;\n    }\n\n    this.setZoom(\n      PointExtensions.initialize(event.clientX, event.clientY),\n      this.dblClickStep, EFZoomDirection.ZOOM_IN, true\n    );\n  }\n\n  private _getToCenterPosition(position: IPoint | undefined, rect: IRect): IPoint {\n    return PointExtensions.initialize(position?.x || rect.gravityCenter.x, position?.y || rect.gravityCenter.y);\n  }\n\n  public zoomIn(position?: IPoint): void {\n    this._onZoomToCenter(EFZoomDirection.ZOOM_IN, position);\n  }\n\n  public zoomOut(position?: IPoint): void {\n    this._onZoomToCenter(EFZoomDirection.ZOOM_OUT, position);\n  }\n\n  private _onZoomToCenter(direction: EFZoomDirection, position?: IPoint): void {\n    this.setZoom(\n      this._getToCenterPosition(position, RectExtensions.fromElement(this._fHost)),\n      this.step, direction, false\n    );\n  }\n\n  public setZoom(position: IPoint, step: number, direction: EFZoomDirection, animated: boolean) {\n    this._fMediator.execute(\n      new SetZoomRequest(position, step, direction, animated)\n    );\n  }\n\n  /**\n   *  @deprecated Method \"getScale\" is deprecated. Use \"getZoomValue\" instead. This method will be removed in version 18.0.0.`,\n   */\n  @Deprecated('getZoomValue')\n  public getScale(): number {\n    return this.getZoomValue();\n  }\n\n  public getZoomValue(): number {\n    return this._fCanvas.transform.scale || 1;\n  }\n\n  public reset(): void {\n    this._fMediator.execute(new ResetZoomRequest());\n  }\n\n  private _disposeListeners(): void {\n    this._triggersListener.forEach((listener) => listener());\n    this._triggersListener = [];\n  }\n\n  public ngOnDestroy(): void {\n    this._disposeListeners();\n    this._fMediator.execute(new RemoveZoomFromStoreRequest());\n  }\n}\n","import { FZoomDirective } from './f-zoom.directive';\n\nexport const F_ZOOM_PROVIDERS = [\n  FZoomDirective\n];\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { F_CONNECTION_PROVIDERS, } from './f-connection';\nimport { F_NODE_PROVIDERS } from './f-node';\nimport { F_BACKGROUND_PROVIDERS } from './f-backgroud';\nimport { F_CONNECTORS_PROVIDERS } from './f-connectors';\nimport { FDraggableDirective } from './f-draggable';\nimport { F_SELECTION_AREA_PROVIDERS } from './f-selection-area';\nimport { F_LINE_ALIGNMENT_PROVIDERS } from './f-line-alignment';\nimport { F_MINIMAP_PROVIDERS } from './f-minimap';\nimport { F_FLOW_PROVIDERS } from './f-flow';\nimport { F_CANVAS_PROVIDERS } from './f-canvas';\nimport { F_ZOOM_PROVIDERS } from './f-zoom';\nimport { F_EXTERNAL_ITEM_PROVIDERS } from './f-external-item';\n\n@NgModule({\n  declarations: [\n    ...F_CONNECTION_PROVIDERS,\n    ...F_CONNECTORS_PROVIDERS,\n    ...F_LINE_ALIGNMENT_PROVIDERS,\n    ...F_MINIMAP_PROVIDERS,\n    ...F_NODE_PROVIDERS,\n    ...F_SELECTION_AREA_PROVIDERS,\n\n    FDraggableDirective,\n  ],\n  imports: [\n    ...F_FLOW_PROVIDERS,\n    ...F_CANVAS_PROVIDERS,\n    ...F_BACKGROUND_PROVIDERS,\n    ...F_ZOOM_PROVIDERS,\n    ...F_EXTERNAL_ITEM_PROVIDERS,\n\n    CommonModule,\n  ],\n  exports: [\n    ...F_FLOW_PROVIDERS,\n    ...F_CANVAS_PROVIDERS,\n    ...F_BACKGROUND_PROVIDERS,\n    ...F_ZOOM_PROVIDERS,\n    ...F_EXTERNAL_ITEM_PROVIDERS,\n\n\n    ...F_CONNECTION_PROVIDERS,\n    ...F_CONNECTORS_PROVIDERS,\n    ...F_LINE_ALIGNMENT_PROVIDERS,\n    ...F_MINIMAP_PROVIDERS,\n    ...F_NODE_PROVIDERS,\n    ...F_SELECTION_AREA_PROVIDERS,\n\n    FDraggableDirective,\n  ]\n})\nexport class FFlowModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uniqueId","createSVGElement","i2.FComponentsStore","MIXIN_BASE","i1.FConnectionTextPathDirective","i1.FConnectionFactory","i3.FConnectionTextComponent","i4.FConnectionDragHandleEndComponent","i5.FConnectionGradientComponent","i6.FConnectionPathComponent","i7.FConnectionSelectionComponent","i1","i1.FComponentsStore","i2","i3.FDraggableDataContext","i1.FDraggableDataContext","i1.FMinimapCanvasDirective","i2.FMinimapViewDirective","i3.FMinimapFlowDirective","i1.FConnectionTextComponent","i2.FConnectionTextPathDirective","i3.FConnectionDragHandleStartComponent","i8.FConnectionComponent","i9.FConnectionCenterDirective","i10.FConnectionForCreateComponent","i11.FMarkerDirective","i12.FSnapConnectionComponent","i13.FNodeInputDirective","i14.FNodeOutletDirective","i15.FNodeOutputDirective","i16.FLineAlignmentComponent","i17.FMinimapComponent","i18.FMinimapCanvasDirective","i19.FMinimapViewDirective","i20.FMinimapFlowDirective","i21.FGroupDirective","i22.FNodeDirective","i23.FDragHandleDirective","i24.FResizeHandleDirective","i25.FRotateHandleDirective","i26.FSelectionAreaComponent","i27.FFlowComponent","i28.FCanvasComponent","i29.FBackgroundComponent","i30.FRectPatternComponent","i31.FCirclePatternComponent","i32.FZoomDirective","i33.FExternalItemDirective"],"mappings":"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"}