{"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/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/f-connectors-store.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/utils/infinity-min-max.ts","../../../projects/f-flow/src/utils/string-attribute.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-source-connector-base.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/adaptive-curve-builder.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/f-connection-center/f-connection-center.directive.ts","../../../projects/f-flow/src/f-connection/f-connection-content/polyline-content-engine/polyline-sampler/polyline.ts","../../../projects/f-flow/src/f-connection/f-connection-content/polyline-content-engine/polyline-sampler/polyline-sampler.ts","../../../projects/f-flow/src/f-connection/f-connection-content/polyline-content-engine/polyline-content-align.ts","../../../projects/f-flow/src/f-connection/f-connection-content/polyline-content-engine/polyline-content-place.ts","../../../projects/f-flow/src/f-connection/f-connection-content/polyline-content-engine/polyline-content-layout-engine.ts","../../../projects/f-flow/src/f-connection/f-connection-content/f-connection-content.ts","../../../projects/f-flow/src/f-connection/common/e-f-connection-connectable-side.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-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/utils/floating-behavior.ts","../../../projects/f-flow/src/domain/f-connection/calculate-connection-line-by-behavior/utils/fixed-center-behavior.ts","../../../projects/f-flow/src/domain/f-connection/calculate-connection-line-by-behavior/utils/fixed-outbound-behavior.ts","../../../projects/f-flow/src/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior.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/drag-rect-cache.ts","../../../projects/f-flow/src/domain/f-connection/redraw-connections/redraw-connections.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.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.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.ts","../../../projects/f-flow/src/domain/f-connectors/calculate-closest-connector/calculate-closest-connector-request.ts","../../../projects/f-flow/src/domain/f-connectors/calculate-closest-connector/calculate-closest-connector.ts","../../../projects/f-flow/src/domain/f-connectors/find-connectable-connector-using-priority-and-position/find-connectable-connector-using-priority-and-position.request.ts","../../../projects/f-flow/src/domain/f-connectors/find-connectable-connector-using-priority-and-position/find-connectable-connector-using-priority-and-position.execution.ts","../../../projects/f-flow/src/domain/f-connectors/calculate-target-connectors-to-connect/calculate-target-connectors-to-connect-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.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.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.ts","../../../projects/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/calculate-connectable-side-by-connected-positions-request.ts","../../../projects/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/utils/determine-side.ts","../../../projects/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/utils/is-calculate-mode.ts","../../../projects/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/constants/calculatable-sides.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-node/calculate-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/calculate-connectable-side-by-connected-positions.ts","../../../projects/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/calculate-connectable-side-by-internal-position/calculate-connectable-side-by-internal-position-request.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/create-connection-from-output-preparation-request.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-preparation/from-output-preparation/create-connection-from-output-preparation.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-preparation/create-connection-preparation-request.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-create-connection/create-preparation/create-connection-preparation.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/i-f-reassign-handler.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-reassign-connection/f-reassign-target.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-connection/f-reassign-connection/f-reassign-source.drag-handler.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/is-pointer-inside-start-or-end-drag-handles.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/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/constraint/snap-to-grid.ts","../../../projects/f-flow/src/f-draggable/f-node-move/constraint/rect-constraint.ts","../../../projects/f-flow/src/f-draggable/f-node-move/constraint/drag-constraint-pipeline.ts","../../../projects/f-flow/src/f-draggable/f-node-move/constraint/expand-rect-from-baseline.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/build-drag-hierarchy/build-drag-hierarchy-request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/move-drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/build-drag-hierarchy/build-drag-hierarchy-response.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/build-drag-hierarchy/build-drag-hierarchy.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/calculate-drag-limits/calculate-drag-limits-request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/get-node-bounding-include-paddings/get-node-bounding-include-paddings-request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/get-node-bounding-include-paddings/get-node-bounding-include-paddings-response.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/get-node-bounding-include-paddings/get-node-bounding-include-paddings.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/calculate-drag-limits/calculate-drag-limits.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/create-summary-drag-handler/create-summary-drag-handler-request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/move-summary-drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/create-summary-drag-handler/create-summary-drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/create-input-connection-handler-and-set-to-node-handler/create-input-connection-handler-and-set-to-node-handler-request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/create-input-connection-handler-and-set-to-node-handler/create-input-connection-handler-and-set-to-node-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/create-output-connection-handler-and-set-to-node-handler/create-output-connection-handler-and-set-to-node-handler-request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/create-output-connection-handler-and-set-to-node-handler/create-output-connection-handler-and-set-to-node-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/create-drag-model-from-selection-request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/create-drag-model-from-selection.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-drag-model-from-selection/providers.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-snap-lines/create-snap-lines-request.ts","../../../projects/f-flow/src/f-draggable/f-node-move/create-snap-lines/snap-lines.drag-handler.ts","../../../projects/f-flow/src/f-line-alignment/domain/snap-line-element.ts","../../../projects/f-flow/src/f-line-alignment/domain/snap-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/create-snap-lines/create-snap-lines.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/f-move-nodes.event.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/drop-to-group-finalize.ts","../../../projects/f-flow/src/f-draggable/f-drop-to-group/drop-to-group-preparation/drop-to-group-preparation-request.ts","../../../projects/f-flow/src/f-external-item/domain/constraint/external-rect-constraint.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/sort-containers-for-drop-by-layer/sort-containers-for-drop-by-layer-request.ts","../../../projects/f-flow/src/f-draggable/f-drop-to-group/sort-containers-for-drop-by-layer/sort-containers-for-drop-by-layer.ts","../../../projects/f-flow/src/f-draggable/f-drop-to-group/drop-to-group-preparation/drop-to-group-preparation.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-constraints/apply-child-resize-constraints-request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/apply-child-resize-constraints/apply-child-resize-constraints.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/apply-parent-resize-constraints/apply-parent-resize-constraints-request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/apply-parent-resize-constraints/apply-parent-resize-constraints.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/calculate-changed-rect-from-difference/calculate-changed-rect-from-difference-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-rect-from-difference/calculate-changed-rect-from-difference.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/calculate-direct-children-union-rect/calculate-direct-children-union-rect-request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/calculate-direct-children-union-rect/calculate-direct-children-union-rect.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/calculate-resize-limits/calculate-resize-limits-request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/calculate-resize-limits/calculate-resize-limits.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/resize-finalize/node-resize-finalize-request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/node-resize.drag-handler.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/resize-finalize/node-resize-finalize.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/resize-preparation/node-resize-preparation-request.ts","../../../projects/f-flow/src/f-draggable/f-node-resize/resize-preparation/node-resize-preparation.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/f-draggable/f-drag-blocker.directive.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/is-drag-blocker.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/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.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.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-node/calculate-connectors-connectable-sides/calculate-connectable-side-by-internal-position/calculate-connectable-side-by-internal-position.ts","../../../projects/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/calculate-connectors-connectable-sides-request.ts","../../../projects/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/calculate-connectors-connectable-sides.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.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.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.ts","../../../projects/f-flow/src/domain/f-node/fit-to-child-nodes-and-groups/fit-to-child-nodes-and-groups-request.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.ts","../../../projects/f-flow/src/domain/f-node/fit-to-child-nodes-and-groups/fit-to-child-nodes-and-groups.ts","../../../projects/f-flow/src/domain/f-node/get-child-node-ids/get-child-node-ids.request.ts","../../../projects/f-flow/src/domain/f-node/get-child-node-ids/get-child-node-ids.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.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.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.ts","../../../projects/f-flow/src/domain/f-node/providers.ts","../../../projects/f-flow/src/domain/f-connectors/calculate-target-connectors-to-connect/calculate-target-connectors-to-connect.ts","../../../projects/f-flow/src/domain/f-connectors/calculate-source-connectors-to-connect/calculate-source-connectors-to-connect-request.ts","../../../projects/f-flow/src/domain/f-connectors/calculate-source-connectors-to-connect/calculate-source-connectors-to-connect.ts","../../../projects/f-flow/src/domain/f-connectors/mark-connectable-connectors/mark-connectable-connectors-request.ts","../../../projects/f-flow/src/domain/f-connectors/mark-connectable-connectors/mark-connectable-connectors.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.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-connectable-connectors/unmark-connectable-connectors-request.ts","../../../projects/f-flow/src/domain/f-connectors/unmark-connectable-connectors/unmark-connectable-connectors.ts","../../../projects/f-flow/src/domain/f-connectors/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.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.ts","../../../projects/f-flow/src/domain/f-line-alignment/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  static readonly fToken = Symbol('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/**\n * Execution that retrieves the rectangle of an element with its border-radius.\n * It calculates the rectangle based on the element's dimensions and its computed style.\n */\n@Injectable()\n@FExecutionRegister(GetElementRoundedRectRequest)\nexport class GetElementRoundedRectExecution implements IExecution<GetElementRoundedRectRequest, RoundedRect> {\n\n  private readonly _browser= 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._browser.window.getComputedStyle(element);\n  }\n\n  private _toPixels(value: string, element: HTMLElement | SVGElement, fontSize: string): number {\n    return this._browser.toPixels(value, element.clientWidth, element.clientHeight, fontSize) || 0\n  }\n}\n","import { FBackgroundBase } from '../../../f-backgroud';\n\nexport class AddBackgroundToStoreRequest {\n    static readonly fToken = Symbol('AddBackgroundToStoreRequest');\n\n    constructor(\n        public fBackground: FBackgroundBase,\n    ) {\n    }\n}\n","export class NotifyDataChangedRequest {\n  static readonly fToken = Symbol('NotifyDataChangedRequest');\n\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  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: NotifyDataChangedRequest): void {\n    this._store.dataChanged();\n  }\n}\n","export class ListenDataChangesRequest {\n  static readonly fToken = Symbol('ListenDataChangesRequest');\n\n}\n","import { FChannelOperator } from './types';\n\nexport function debounceTime(delay: number): FChannelOperator {\n  let timeoutId: ReturnType<typeof setTimeout>;\n\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\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 readonly _observer = new ResizeObserver(() => this.notify());\n\n  private _isObserving = false;\n\n  constructor(\n    private readonly _htmlElement: HTMLElement | SVGElement,\n  ) {\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\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\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 { FChannelOperator } from './types';\n\nexport function notifyOnStart(): FChannelOperator {\n  return callback => {\n    callback();\n\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\n  implements IExecution<ListenDataChangesRequest, FChannelHub>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: ListenDataChangesRequest): FChannelHub {\n    return new FChannelHub(this._store.dataChanges$).pipe(notifyOnStart(), debounceTime(1));\n  }\n}\n","export class ListenCountChangesRequest {\n  static readonly fToken = Symbol('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\n  implements IExecution<ListenCountChangesRequest, FChannelHub>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: ListenCountChangesRequest): FChannelHub {\n    return new FChannelHub(this._store.countChanges$).pipe(notifyOnStart(), debounceTime(1));\n  }\n}\n","export class ListenTransformChangesRequest {\n  static readonly fToken = Symbol('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 readonly _store = inject(FComponentsStore);\n\n  public handle(_request: ListenTransformChangesRequest): FChannelHub {\n    return new FChannelHub(\n      this._store.transformChanges$,\n      this._store.dataChanges$,\n      this._store.countChanges$,\n    );\n  }\n}\n","export class NotifyTransformChangedRequest {\n  static readonly fToken = Symbol('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  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<unknown> = {};\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 readonly _store = inject(FComponentsStore);\n\n  public handle(_request: NotifyTransformChangedRequest): void {\n    this._store.transformChanged();\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EFConnectableSide } from '../f-connectors';\n\n@Injectable()\nexport class FConnectorsStore {\n  private readonly _connectors: Record<string, Record<string, EFConnectableSide>> = {};\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/**\n * Execution that adds a background to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddBackgroundToStoreRequest)\nexport class AddBackgroundToStoreExecution implements IExecution<AddBackgroundToStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: AddBackgroundToStoreRequest): void {\n    this._store.fBackground = request.fBackground;\n  }\n}\n","import { IFBackgroundPattern } from '../../../f-backgroud';\n\nexport class AddPatternToBackgroundRequest {\n  static readonly fToken = Symbol('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';\n\nlet uniqueId = 0;\n\n/**\n * Execution that adds a pattern to the background in the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddPatternToBackgroundRequest)\nexport class AddPatternToBackgroundExecution\n  implements IExecution<AddPatternToBackgroundRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _browser = inject(BrowserService);\n\n  private get _backgroundElement(): HTMLElement {\n    return this._store.fBackground?.hostElement!;\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._browser);\n      pattern.id = 'f-background-pattern-' + uniqueId++;\n      request.fPattern?.hostElement.remove();\n      defs.appendChild(pattern);\n      this._backgroundElement?.firstChild?.appendChild(defs);\n      const rect = createSVGElement('rect', this._browser);\n      rect.setAttribute('fill', 'url(#' + pattern.id + ')');\n      rect.setAttribute('width', '100%');\n      rect.setAttribute('height', '100%');\n      this._backgroundElement.firstChild?.appendChild(rect);\n      const transform = this._store.fCanvas?.transform || TransformModelExtensions.default();\n      request.fPattern?.setTransform(transform);\n    }\n  }\n}\n","import { FBackgroundBase } from '../../../f-backgroud';\n\nexport class RemoveBackgroundFromStoreRequest {\n  static readonly fToken = Symbol('RemoveBackgroundFromStoreRequest');\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/**\n * Execution that removes the background from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveBackgroundFromStoreRequest)\nexport class RemoveBackgroundFromStoreExecution\n  implements IExecution<RemoveBackgroundFromStoreRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: RemoveBackgroundFromStoreRequest): void {\n    this._store.fBackground = undefined;\n  }\n}\n","import { ITransformModel } from '@foblex/2d';\n\nexport class SetBackgroundTransformRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that sets the transform for the background when canvas is transformed.\n */\n@Injectable()\n@FExecutionRegister(SetBackgroundTransformRequest)\nexport class SetBackgroundTransformExecution implements IExecution<SetBackgroundTransformRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: SetBackgroundTransformRequest): void {\n    this._store.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\n/**\n * This file exports all the background-related features for the F-Flow domain.\n * It includes executions for adding, removing, and setting the background in the FComponentsStore.\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  static readonly fToken = Symbol('AddCanvasToStoreRequest');\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/**\n * Execution that adds a canvas to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddCanvasToStoreRequest)\nexport class AddCanvasToStoreExecution implements IExecution<AddCanvasToStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: AddCanvasToStoreRequest): void {\n    this._store.fCanvas = request.fCanvas;\n  }\n}\n","export class CenterGroupOrNodeRequest {\n  static readonly fToken = Symbol('CenterGroupOrNodeRequest');\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/**\n * Execution that centers a group or a node inside the flow.\n */\n@Injectable()\n@FExecutionRegister(CenterGroupOrNodeRequest)\nexport class CenterGroupOrNodeExecution implements IExecution<CenterGroupOrNodeRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n  private readonly _fMediator = inject(FMediator);\n\n  private get transform(): ITransformModel {\n    return this._store.fCanvas!.transform;\n  }\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._store.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._store.fFlow!.hostElement);\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class FitToFlowRequest {\n  static readonly fToken = Symbol('FitToFlowRequest');\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/**\n * Fits all nodes and groups to the flow by scaling and positioning them\n */\n@Injectable()\n@FExecutionRegister(FitToFlowRequest)\nexport class FitToFlowExecution implements IExecution<FitToFlowRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  private get transform(): ITransformModel {\n    return this._store.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._store.fFlow!.hostElement),\n      this._store.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\n    return PointExtensions.initialize(xPoint, yPoint)\n  }\n}\n","export class GetCanvasRequest {\n  static readonly fToken = Symbol('GetCanvasRequest');\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/**\n * Execution that retrieves the canvas from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(GetCanvasRequest)\nexport class GetCanvasExecution implements IExecution<GetCanvasRequest, FCanvasBase> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: GetCanvasRequest): FCanvasBase {\n    const result = this._store.fCanvas;\n    if (!result) {\n      throw new Error(`Canvas not found in store`);\n    }\n\n    return result;\n  }\n}\n","import { IPoint, ITransformModel } from '@foblex/2d';\n\nexport class InputCanvasPositionRequest {\n  static readonly fToken = Symbol('InputCanvasPositionRequest');\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/**\n * It updates the canvas position and redraws the canvas when the user set a new position using the input.\n */\n@Injectable()\n@FExecutionRegister(InputCanvasPositionRequest)\nexport class InputCanvasPositionExecution implements IExecution<InputCanvasPositionRequest, void> {\n\n  private readonly _store = 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._store.fCanvas?.redraw();\n    }\n\n    return void 0;\n  }\n}\n","import { ITransformModel } from '@foblex/2d';\n\nexport class InputCanvasScaleRequest {\n  static readonly fToken = Symbol('InputCanvasScaleRequest');\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 * Execution that handles the scaling of the input canvas.\n * It updates the scale of the canvas transform and redraws the canvas when the user sets a new scale using the input.\n */\n@Injectable()\n@FExecutionRegister(InputCanvasScaleRequest)\nexport class InputCanvasScaleExecution implements IExecution<InputCanvasScaleRequest, void> {\n\n  private readonly _store = 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._store.fCanvas?.redraw();\n  }\n}\n","export class RedrawCanvasWithAnimationRequest {\n  static readonly fToken = Symbol('RedrawCanvasWithAnimationRequest');\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/**\n * Execution that redraws the canvas with or without animation based on the request.\n * If animated, it will redraw with animation and wait for the transition end to notify data change.\n * If not animated, it will redraw immediately and notify data change.\n */\n@Injectable()\n@FExecutionRegister(RedrawCanvasWithAnimationRequest)\nexport class RedrawCanvasWithAnimationExecution implements IExecution<RedrawCanvasWithAnimationRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  private get _fCanvasElement(): HTMLElement {\n    return this._store.fCanvas!.hostElement;\n  }\n\n  public handle(request: RedrawCanvasWithAnimationRequest): void {\n    request.animated ? this._redrawWithAnimation() : this._redraw();\n    this._store.fCanvas!.emitCanvasChangeEvent();\n  }\n\n  private _redrawWithAnimation(): void {\n    this._store.fCanvas!.redrawWithAnimation();\n    transitionEnd(this._fCanvasElement, () => this._store.dataChanged());\n  }\n\n  private _redraw(): void {\n    this._store.fCanvas!.redraw();\n    this._store.dataChanged();\n  }\n}\n","export class RemoveCanvasFromStoreRequest {\n  static readonly fToken = Symbol('RemoveCanvasFromStoreRequest');\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/**\n * Execution that removes the canvas from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveCanvasFromStoreRequest)\nexport class RemoveCanvasFromStoreExecution implements IExecution<RemoveCanvasFromStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: RemoveCanvasFromStoreRequest): void {\n    this._store.fCanvas = undefined;\n  }\n}\n","export class ResetScaleRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that resets the scale of the canvas in the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(ResetScaleRequest)\nexport class ResetScaleExecution implements IExecution<ResetScaleRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  private get transform(): ITransformModel {\n    return this._store.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  static readonly fToken = Symbol('ResetScaleAndCenterRequest');\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/**\n * Execution that resets the scale of the canvas and centers the nodes and groups inside the flow.\n */\n@Injectable()\n@FExecutionRegister(ResetScaleAndCenterRequest)\nexport class ResetScaleAndCenterExecution implements IExecution<ResetScaleAndCenterRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _transform(): ITransformModel {\n    return this._store.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._store.fFlow!.hostElement),\n      this._store.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\n    return PointExtensions.initialize(xPoint, yPoint)\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class UpdateScaleRequest {\n  static readonly fToken = Symbol('UpdateScaleRequest');\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/**\n * Execution that updates the scale of the canvas in the FComponentsStore.\n * Occurs when the fZoom directive or User call the setScale method.\n */\n@Injectable()\n@FExecutionRegister(UpdateScaleRequest)\nexport class UpdateScaleExecution implements IExecution<UpdateScaleRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  private get transform(): ITransformModel {\n    return this._store.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\n/**\n * This file exports all the canvas-related executions that can be used in the FCanvas feature.\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  static readonly fToken = Symbol('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/**\n * Execution that adds a connection for creation to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddConnectionForCreateToStoreRequest)\nexport class AddConnectionForCreateToStoreExecution implements IExecution<AddConnectionForCreateToStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: AddConnectionForCreateToStoreRequest): void {\n    this._store.fTempConnection = request.fConnection;\n  }\n}\n","import { FMarkerBase } from '../../../f-connection';\n\nexport class AddConnectionMarkerToStoreRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that adds a connection marker to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddConnectionMarkerToStoreRequest)\nexport class AddConnectionMarkerToStoreExecution implements IExecution<AddConnectionMarkerToStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: AddConnectionMarkerToStoreRequest): void {\n    this._store.addComponent(this._store.fMarkers, request.fComponent);\n  }\n}\n","import { FConnectionBase } from '../../../f-connection';\n\nexport class AddConnectionToStoreRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that adds a connection to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddConnectionToStoreRequest)\nexport class AddConnectionToStoreExecution implements IExecution<AddConnectionToStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: AddConnectionToStoreRequest): void {\n    this._store.fConnections.push(request.fConnection);\n    this._store.dataChanged();\n  }\n}\n","import { FConnectionBase } from '../../../f-connection';\n\nexport class AddSnapConnectionToStoreRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that adds a snap connection to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddSnapConnectionToStoreRequest)\nexport class AddSnapConnectionToStoreExecution implements IExecution<AddSnapConnectionToStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: AddSnapConnectionToStoreRequest): void {\n    this._store.fSnapConnection = request.fConnection;\n  }\n}\n","import { FConnectionBase } from '../../../f-connection';\n\nexport class CreateConnectionMarkersRequest {\n  static readonly fToken = Symbol('CreateConnectionMarkersRequest');\n\n  constructor(\n    public fConnection: FConnectionBase,\n  ) {\n  }\n}\n","import { inject, 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/**\n * Execution that creates connection markers for a given connection.\n */\n@Injectable()\n@FExecutionRegister(CreateConnectionMarkersRequest)\nexport class CreateConnectionMarkersExecution implements IExecution<CreateConnectionMarkersRequest, void> {\n\n  private readonly _browser = inject(BrowserService);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: CreateConnectionMarkersRequest): void {\n    const element: SVGDefsElement = createSVGElement('defs', this._browser);\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    const defs = fConnection.fDefs();\n    if (defs) {\n      defs.nativeElement.innerHTML = element.innerHTML;\n    }\n\n    this.makeSafariCompatible(fConnection);\n  }\n\n  public getMarkers(fConnection: FConnectionBase): FMarkerBase[] {\n    return this._store.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._browser);\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 { FConnectionBase } from '../../../f-connection';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport { IRoundedRect } from '@foblex/2d';\n\nexport class CalculateConnectionLineByBehaviorRequest {\n  static readonly fToken = Symbol('CalculateConnectionLineByBehaviorRequest');\n\n  constructor(\n    public readonly sourceRect: IRoundedRect,\n    public readonly targetRect: IRoundedRect,\n    public readonly connection: FConnectionBase,\n    public readonly sourceConnectableSide: EFConnectableSide,\n    public readonly targetConnectableSide: EFConnectableSide,\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  static readonly fToken = Symbol('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    const 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\n    return { x, y };\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class CalculateConnectionCenterRequest {\n  static readonly fToken = Symbol('CalculateConnectionCenterRequest');\n\n  constructor(\n    public points: IPoint[],\n  ) {\n  }\n}\n","export enum EFConnectableSide {\n  LEFT = 'left',\n\n  TOP = 'top',\n\n  RIGHT = 'right',\n\n  BOTTOM = 'bottom',\n\n  CALCULATE = 'calculate',\n\n  CALCULATE_HORIZONTAL = 'calculate_horizontal',\n\n  CALCULATE_VERTICAL = 'calculate_vertical',\n\n  AUTO = 'auto',\n}\n","import { EFConnectableSide } from './e-f-connectable-side';\nimport { IHasHostElement } from '../i-has-host-element';\nimport { Signal } from '@angular/core';\n\nexport abstract class FConnectorBase implements IHasHostElement {\n  public abstract fId: Signal<string>;\n\n  public abstract fNodeId: string;\n\n  public abstract fNodeHost: HTMLElement | SVGElement;\n\n  public abstract disabled: Signal<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, Signal } 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  public abstract category: Signal<string | undefined>;\n\n  public abstract multiple: Signal<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 { computed, Directive, input } 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  public type = input.required<EFResizeHandleType, unknown>({\n    alias: 'fResizeHandleType',\n    transform: (x) => castToEnum<EFResizeHandleType>(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';\nimport { signal } from '@angular/core';\n\nexport const F_SELECTED_CLASS = 'f-selected';\n\ntype CanChangeSelectionConstructor = Constructor<ISelectable> & AbstractConstructor<ISelectable>;\n\nexport function mixinChangeSelection<T extends AbstractConstructor<IHasHostElement>>(\n  base: T,\n): CanChangeSelectionConstructor & T;\nexport function mixinChangeSelection<T extends Constructor<IHasHostElement>>(\n  base: T,\n): CanChangeSelectionConstructor & T {\n  return class extends base {\n    public fId = signal('');\n    public fSelectionDisabled = signal(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    public unmarkChildrenAsSelected(): void {}\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\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> &\n  AbstractConstructor<ICanChangeVisibility>;\n\nexport function mixinChangeVisibility<T extends AbstractConstructor<IHasHostElement>>(\n  base: T,\n): CanChangeVisibilityConstructor & T;\nexport function mixinChangeVisibility<T extends Constructor<IHasHostElement>>(\n  base: T,\n): CanChangeVisibilityConstructor & T {\n  return class extends base {\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    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","import {\n  effect,\n  inject,\n  InjectionToken,\n  Injector,\n  InputSignal,\n  ModelSignal,\n  OutputEmitterRef,\n  Renderer2,\n  Signal,\n  untracked,\n} from '@angular/core';\nimport { IPoint, IRect, ISize, PointExtensions } from '@foblex/2d';\nimport { FConnectorBase } from '../f-connectors';\nimport { IHasHostElement } from '../i-has-host-element';\nimport { ISelectable, mixinChangeSelection } from '../mixins';\nimport { FChannel } from '../reactivity';\nimport { BrowserService } from '@foblex/platform';\n\nexport const F_NODE = new InjectionToken<FNodeBase>('F_NODE');\n\nconst MIXIN_BASE = mixinChangeSelection(\n  class {\n    constructor(public hostElement: HTMLElement) {}\n  },\n);\n\nexport abstract class FNodeBase extends MIXIN_BASE implements ISelectable, IHasHostElement {\n  private readonly _injector = inject(Injector);\n\n  protected readonly renderer = inject(Renderer2);\n  protected readonly browser = inject(BrowserService);\n\n  public abstract override fId: Signal<string>;\n\n  public abstract fParentId: Signal<string | null | undefined>;\n\n  public readonly stateChanges = new FChannel();\n\n  public abstract position: ModelSignal<IPoint>;\n\n  public _position = PointExtensions.initialize();\n\n  public abstract rotate: ModelSignal<number>;\n\n  public _rotate: number = 0;\n\n  public abstract sizeChange: OutputEmitterRef<IRect>;\n\n  public abstract size: InputSignal<ISize | undefined>;\n\n  public _size: ISize | undefined;\n\n  //Add ability to connect to first connectable input if node is at pointer position\n  public abstract fConnectOnNode: Signal<boolean>;\n\n  public abstract fMinimapClass: Signal<string[] | string>;\n\n  public abstract fDraggingDisabled: Signal<boolean>;\n\n  public abstract fAutoExpandOnChildHit: Signal<boolean>;\n\n  public abstract fAutoSizeToFitChildren: Signal<boolean>;\n\n  public abstract fIncludePadding: Signal<boolean>;\n\n  public abstract refresh(): void;\n\n  public connectors: FConnectorBase[] = [];\n\n  protected positionChanges(): void {\n    effect(\n      () => {\n        const position = this.position();\n        untracked(() => {\n          if (!PointExtensions.isEqual(this._position, position)) {\n            this._position = position;\n            this.redraw();\n            this.refresh();\n          }\n        });\n      },\n      { injector: this._injector },\n    );\n  }\n\n  protected sizeChanges(): void {\n    effect(\n      () => {\n        const size = this.size();\n        untracked(() => {\n          if (!this._isSizeEqual(size)) {\n            this._size = size;\n            this.redraw();\n            this.refresh();\n          }\n        });\n      },\n      { injector: this._injector },\n    );\n  }\n\n  protected rotateChanges(): void {\n    effect(\n      () => {\n        const rotate = this.rotate();\n        untracked(() => {\n          if (this._rotate !== rotate) {\n            this._rotate = rotate;\n            this.redraw();\n            this.refresh();\n          }\n        });\n      },\n      { injector: this._injector },\n    );\n  }\n\n  protected parentChanges(): void {\n    effect(\n      () => {\n        this.fParentId();\n        this.fIncludePadding();\n        this.fAutoSizeToFitChildren();\n        untracked(() => this.refresh());\n      },\n      { injector: this._injector },\n    );\n  }\n\n  private _isSizeEqual(value?: ISize): boolean {\n    return this._size?.width === value?.width && this._size?.height === value?.height;\n  }\n\n  protected abstract setStyle(name: string, value: string): void;\n\n  protected abstract removeStyle(name: 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(\n      'transform',\n      `translate(${this._position.x}px,${this._position.y}px) rotate(${this._rotate}deg)`,\n    );\n  }\n\n  public resetSize(): void {\n    this.removeStyle('width');\n    this.removeStyle('height');\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,\n  booleanAttribute,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  inject,\n  input,\n  model,\n  OnDestroy,\n  OnInit,\n  output,\n} from '@angular/core';\nimport { IRect, ISize, PointExtensions } from '@foblex/2d';\nimport { F_NODE, FNodeBase } from './f-node-base';\nimport { NotifyTransformChangedRequest } from '../f-storage';\nimport { IHasHostElement } from '../i-has-host-element';\nimport {\n  AddNodeToStoreRequest,\n  UpdateNodeWhenStateOrSizeChangedRequest,\n  RemoveNodeFromStoreRequest,\n  CalculateConnectorsConnectableSidesRequest,\n} from '../domain';\nimport { FMediator } from '@foblex/mediator';\n\nlet uniqueId = 0;\nconst _DEBOUNCE_TIME = 3;\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: [{ provide: F_NODE, useExisting: FGroupDirective }],\n})\nexport class FGroupDirective\n  extends FNodeBase\n  implements OnInit, AfterViewInit, IHasHostElement, OnDestroy\n{\n  private _debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _mediator = inject(FMediator);\n\n  public override readonly fId = input<string>(`f-group-${uniqueId++}`, { alias: 'fGroupId' });\n\n  public override readonly fParentId = input<string | null | undefined>(null, {\n    alias: 'fGroupParentId',\n  });\n\n  public override readonly position = model(PointExtensions.initialize(), {\n    alias: 'fGroupPosition',\n  });\n\n  public override readonly size = input<ISize | undefined>(undefined, {\n    alias: 'fGroupSize',\n  });\n\n  public override sizeChange = output<IRect>({ alias: 'fGroupSizeChange' });\n\n  public override readonly rotate = model(0, {\n    alias: 'fGroupRotate',\n  });\n\n  public override readonly fConnectOnNode = input(true, {\n    transform: booleanAttribute,\n  });\n\n  public override readonly fMinimapClass = input<string[] | string>([]);\n\n  public override readonly fDraggingDisabled = input(false, {\n    alias: 'fGroupDraggingDisabled',\n    transform: booleanAttribute,\n  });\n\n  public override readonly fSelectionDisabled = input(false, {\n    alias: 'fGroupSelectionDisabled',\n    transform: booleanAttribute,\n  });\n\n  public override readonly fIncludePadding = input(true, {\n    transform: booleanAttribute,\n  });\n\n  public override readonly fAutoExpandOnChildHit = input(false, {\n    transform: booleanAttribute,\n  });\n\n  public override readonly fAutoSizeToFitChildren = input(false, {\n    transform: booleanAttribute,\n  });\n\n  constructor(\n    // eslint-disable-next-line @angular-eslint/prefer-inject\n    elementReference: ElementRef<HTMLElement>,\n  ) {\n    super(elementReference.nativeElement);\n    super.positionChanges();\n    super.sizeChanges();\n    super.rotateChanges();\n    super.parentChanges();\n  }\n\n  public ngOnInit(): void {\n    super.redraw();\n\n    this._mediator.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  protected override removeStyle(styleName: string) {\n    this.renderer.removeStyle(this.hostElement, styleName);\n  }\n\n  public override redraw(): void {\n    super.redraw();\n    this._mediator.execute(new NotifyTransformChangedRequest());\n    this._updateConnectorsSides();\n  }\n\n  protected _updateConnectorsSides(): void {\n    if (this._debounceTimer) {\n      clearTimeout(this._debounceTimer);\n    }\n    this._debounceTimer = setTimeout(\n      () => this._calculateNodeConnectorsConnectableSides(),\n      _DEBOUNCE_TIME,\n    );\n  }\n\n  private _calculateNodeConnectorsConnectableSides(): void {\n    this._mediator.execute<void>(new CalculateConnectorsConnectableSidesRequest(this));\n  }\n\n  public ngAfterViewInit(): void {\n    if (!this.browser.isBrowser()) {\n      return;\n    }\n    this._listenStateSizeChanges();\n  }\n\n  private _listenStateSizeChanges(): void {\n    this._mediator.execute<void>(\n      new UpdateNodeWhenStateOrSizeChangedRequest(this, this._destroyRef),\n    );\n  }\n\n  public override refresh(): void {\n    this.stateChanges.notify();\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute<void>(new RemoveNodeFromStoreRequest(this));\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","export function stringAttribute(value: unknown): string | undefined {\n  return value ? `${value}` : undefined;\n}\n","import {\n  AfterViewInit,\n  booleanAttribute,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  inject,\n  input,\n  model,\n  OnDestroy,\n  OnInit,\n  output,\n} from '@angular/core';\nimport { IRect, ISize, PointExtensions } from '@foblex/2d';\nimport { NotifyTransformChangedRequest } from '../f-storage';\nimport { F_NODE, FNodeBase } from './f-node-base';\nimport { IHasHostElement } from '../i-has-host-element';\nimport {\n  AddNodeToStoreRequest,\n  UpdateNodeWhenStateOrSizeChangedRequest,\n  RemoveNodeFromStoreRequest,\n  CalculateConnectorsConnectableSidesRequest,\n} from '../domain';\nimport { stringAttribute } from '../utils';\nimport { FMediator } from '@foblex/mediator';\n\nlet uniqueId = 0;\nconst _DEBOUNCE_TIME = 3;\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: [{ provide: F_NODE, useExisting: FNodeDirective }],\n})\nexport class FNodeDirective\n  extends FNodeBase\n  implements OnInit, AfterViewInit, IHasHostElement, OnDestroy\n{\n  private _debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _mediator = inject(FMediator);\n\n  public override readonly fId = input<string, unknown>(`f-node-${uniqueId++}`, {\n    alias: 'fNodeId',\n    transform: (value) => stringAttribute(value) || `f-node-${uniqueId++}`,\n  });\n\n  public override readonly fParentId = input<string | null | undefined>(null, {\n    alias: 'fNodeParentId',\n  });\n\n  public override readonly position = model(PointExtensions.initialize(), {\n    alias: 'fNodePosition',\n  });\n\n  public override readonly size = input<ISize | undefined>(undefined, {\n    alias: 'fNodeSize',\n  });\n\n  public override sizeChange = output<IRect>({ alias: 'fNodeSizeChange' });\n\n  public override readonly rotate = model(0, {\n    alias: 'fNodeRotate',\n  });\n\n  public override readonly fConnectOnNode = input(true, {\n    transform: booleanAttribute,\n  });\n\n  public override readonly fMinimapClass = input<string[] | string>([]);\n\n  public override readonly fDraggingDisabled = input(false, {\n    alias: 'fNodeDraggingDisabled',\n    transform: booleanAttribute,\n  });\n\n  public override readonly fSelectionDisabled = input(false, {\n    alias: 'fNodeSelectionDisabled',\n    transform: booleanAttribute,\n  });\n\n  public override readonly fIncludePadding = input(true, {\n    transform: booleanAttribute,\n  });\n\n  public override readonly fAutoExpandOnChildHit = input(false, {\n    transform: booleanAttribute,\n  });\n\n  public override readonly fAutoSizeToFitChildren = input(false, {\n    transform: booleanAttribute,\n  });\n\n  constructor(\n    // eslint-disable-next-line @angular-eslint/prefer-inject\n    elementReference: ElementRef<HTMLElement>,\n  ) {\n    super(elementReference.nativeElement);\n    super.positionChanges();\n    super.sizeChanges();\n    super.rotateChanges();\n    super.parentChanges();\n  }\n\n  public ngOnInit(): void {\n    super.redraw();\n\n    this._mediator.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  protected override removeStyle(styleName: string) {\n    this.renderer.removeStyle(this.hostElement, styleName);\n  }\n\n  public override redraw(): void {\n    super.redraw();\n    this._mediator.execute(new NotifyTransformChangedRequest());\n    this._updateConnectorsSides();\n  }\n\n  protected _updateConnectorsSides(): void {\n    if (this._debounceTimer) {\n      clearTimeout(this._debounceTimer);\n    }\n    this._debounceTimer = setTimeout(\n      () => this._calculateNodeConnectorsConnectableSides(),\n      _DEBOUNCE_TIME,\n    );\n  }\n\n  private _calculateNodeConnectorsConnectableSides(): void {\n    this._mediator.execute<void>(new CalculateConnectorsConnectableSidesRequest(this));\n  }\n\n  public ngAfterViewInit(): void {\n    if (!this.browser.isBrowser()) {\n      return;\n    }\n    this._listenStateSizeChanges();\n  }\n\n  private _listenStateSizeChanges(): void {\n    this._mediator.execute<void>(\n      new UpdateNodeWhenStateOrSizeChangedRequest(this, this._destroyRef),\n    );\n  }\n\n  public override refresh(): void {\n    this.stateChanges.notify();\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.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  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  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';\nimport { stringAttribute } from '../../utils';\n\nlet uniqueId = 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  public readonly hostElement = inject(ElementRef).nativeElement;\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _node = inject(F_NODE);\n\n  public override fId = input<string, unknown>(`f-node-input-${uniqueId++}`, {\n    alias: 'fInputId',\n    transform: (value) => stringAttribute(value) || `f-node-input-${uniqueId++}`,\n  });\n\n  public override category = input<string | undefined, unknown>(undefined, {\n    alias: 'fInputCategory',\n    transform: stringAttribute,\n  });\n\n  public override multiple = input<boolean, unknown>(true, {\n    alias: 'fInputMultiple',\n    transform: booleanAttribute,\n  });\n\n  public override disabled = input<boolean, unknown>(false, {\n    alias: 'fInputDisabled',\n    transform: booleanAttribute,\n  });\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._node.fId();\n  }\n\n  public override get fNodeHost(): HTMLElement | SVGElement {\n    return this._node.hostElement;\n  }\n\n  public ngOnInit() {\n    this._mediator.execute(new AddInputToStoreRequest(this));\n    this._node.addConnector(this);\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes['userFConnectableSide']) {\n      this._node.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(\n      F_CSS_CLASS.CONNECTOR.INPUT_NOT_CONNECTABLE,\n      !this.canBeConnected,\n    );\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(\n      F_CSS_CLASS.CONNECTOR.INPUT_NOT_CONNECTABLE,\n      !this.canBeConnected,\n    );\n  }\n\n  public ngOnDestroy(): void {\n    this._node.removeConnector(this);\n    this._mediator.execute(new RemoveInputFromStoreRequest(this));\n  }\n}\n","import { FConnectorBase } from './f-connector-base';\nimport { FNodeInputBase } from './f-node-input';\n\nexport abstract class FSourceConnectorBase extends FConnectorBase {\n  public abstract canBeConnectedInputs: string[];\n\n  public get hasConnectionLimits(): boolean {\n    return !!this.canBeConnectedInputs && this.canBeConnectedInputs.length > 0;\n  }\n\n  public canConnectTo(targetConnector: FNodeInputBase): boolean {\n    const candidates = [targetConnector.fId(), targetConnector.category()];\n\n    return candidates.some((c) => c && this.canBeConnectedInputs?.includes(c));\n  }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FConnectorBase } from '../f-connector-base';\nimport { FSourceConnectorBase } from '../f-source-connector-base';\n\nexport const F_NODE_OUTLET = new InjectionToken<FNodeOutletBase>('F_NODE_OUTLET');\n\n@Directive()\nexport abstract class FNodeOutletBase extends FSourceConnectorBase {\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 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 {\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  inject,\n  input,\n  Input,\n  OnDestroy,\n  OnInit,\n} 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 { stringAttribute } from '../../utils';\n\nlet uniqueId = 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  public readonly hostElement = inject(ElementRef).nativeElement;\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _node = inject(F_NODE);\n\n  public override fId = input<string, unknown>(`f-node-outlet-${uniqueId++}`, {\n    alias: 'fOutletId',\n    transform: (value) => stringAttribute(value) || `f-node-outlet-${uniqueId++}`,\n  });\n\n  public override disabled = input<boolean, unknown>(false, {\n    alias: 'fOutletDisabled',\n    transform: booleanAttribute,\n  });\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._node.fId();\n  }\n\n  public override get fNodeHost(): HTMLElement | SVGElement {\n    return this._node.hostElement;\n  }\n\n  public ngOnInit() {\n    this._mediator.execute(new AddOutletToStoreRequest(this));\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemoveOutletFromStoreRequest(this));\n  }\n}\n","import { Directive, InjectionToken, Signal } from '@angular/core';\nimport { FSourceConnectorBase } from '../f-source-connector-base';\n\nexport const F_NODE_OUTPUT = new InjectionToken<FNodeOutputBase>('F_NODE_OUTPUT');\n\n@Directive()\nexport abstract class FNodeOutputBase extends FSourceConnectorBase {\n  public abstract multiple: Signal<boolean>;\n\n  public override get canBeConnected(): boolean {\n    return !this.disabled() && (this.multiple() ? true : !this.isConnected);\n  }\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  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  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';\nimport { stringAttribute } from '../../utils';\n\nlet uniqueId = 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  public readonly hostElement = inject(ElementRef).nativeElement;\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _node = inject(F_NODE);\n\n  public override fId = input<string, unknown>(`f-node-output-${uniqueId++}`, {\n    alias: 'fOutputId',\n    transform: (value) => stringAttribute(value) || `f-node-output-${uniqueId++}`,\n  });\n\n  public override multiple = input<boolean, unknown>(false, {\n    alias: 'fOutputMultiple',\n    transform: booleanAttribute,\n  });\n\n  public override disabled = input<boolean, unknown>(false, {\n    alias: 'fOutputDisabled',\n    transform: booleanAttribute,\n  });\n\n  @Input({\n    alias: 'fOutputConnectableSide',\n    transform: (value: unknown) => castToEnum(value, 'fOutputConnectableSide', EFConnectableSide),\n  })\n  public override userFConnectableSide = 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._node.fId();\n  }\n\n  public override get fNodeHost(): HTMLElement | SVGElement {\n    return this._node.hostElement;\n  }\n\n  public ngOnInit() {\n    this._mediator.execute(new AddOutputToStoreRequest(this));\n    this._node.addConnector(this);\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes['userFConnectableSide']) {\n      this._node.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(\n      F_CSS_CLASS.CONNECTOR.OUTPUT_NOT_CONNECTABLE,\n      !this.canBeConnected,\n    );\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(\n      F_CSS_CLASS.CONNECTOR.OUTPUT_NOT_CONNECTABLE,\n      !this.canBeConnected,\n    );\n  }\n\n  public ngOnDestroy(): void {\n    this._node.removeConnector(this);\n    this._mediator.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 {\n  CalculateConnectionCenterHandler,\n  CalculateConnectionCenterRequest,\n} from './calculate-connection-center';\nimport {\n  IFConnectionBuilder,\n  IFConnectionBuilderRequest,\n  IFConnectionBuilderResponse,\n} from '../../f-connection-builder';\n\n/**\n * AdaptiveCurveBuilder\n *\n * Builds a smooth **adaptive connector curve** between two points using a cubic Bézier path,\n * but with control points computed differently from a classic “Bezier” connector.\n *\n * Key differences from a classic Bézier builder:\n * - Control handles are **aligned with the port side** (LEFT/RIGHT/TOP/BOTTOM),\n *   yet are **slightly blended toward the target direction** to reduce harsh S-shapes.\n * - Handle lengths are **adaptive**: based on the `offset` (your “padding” from ports)\n *   and the projected distance along the side’s axis. This produces a subtler curvature\n *   and a distinct look & feel compared to a standard Bézier connector.\n *\n * Compatibility:\n * - Implements {@link IFConnectionBuilder}; output shape is the same:\n *   SVG path, sampled points for hit-testing, and connection center.\n * - Only the four base sides are expected to be passed here:\n *   {@link EFConnectableSide.LEFT}, {@link EFConnectableSide.RIGHT},\n *   {@link EFConnectableSide.TOP}, {@link EFConnectableSide.BOTTOM}.\n *\n * Usage example:\n * ```ts\n * const builder = new AdaptiveCurveBuilder();\n * const res = builder.handle({\n *   source: { x: 100, y: 120 },\n *   sourceSide: EFConnectableSide.RIGHT,\n *   target: { x: 340, y: 220 },\n *   targetSide: EFConnectableSide.LEFT,\n *   offset: 16, // acts as padding + minimal handle baseline\n * });\n * // res.path -> SVG \"M … C …\" string\n * // res.points -> sampled points along the curve\n * ```\n */\nexport class AdaptiveCurveBuilder implements IFConnectionBuilder {\n  /**\n   * Returns a unit direction vector for a given side.\n   *\n   * @param side - One of LEFT/RIGHT/TOP/BOTTOM.\n   * @returns Unit vector pointing outwards from the side.\n   * @remarks\n   * Only base sides should reach this builder. A fallback `{0,0}` is returned\n   * defensively, but should not occur in normal usage.\n   */\n  private static _dir(side: EFConnectableSide): IPoint {\n    switch (side) {\n      case EFConnectableSide.LEFT:\n        return { x: -1, y: 0 };\n      case EFConnectableSide.RIGHT:\n        return { x: 1, y: 0 };\n      case EFConnectableSide.TOP:\n        return { x: 0, y: -1 };\n      case EFConnectableSide.BOTTOM:\n        return { x: 0, y: 1 };\n    }\n\n    return { x: 0, y: 0 };\n  }\n\n  /**\n   * Checks whether a side is horizontal (LEFT/RIGHT).\n   *\n   * @param side - Side to check.\n   * @returns `true` for LEFT/RIGHT, otherwise `false`.\n   */\n  private static _isH(side: EFConnectableSide): boolean {\n    return side === EFConnectableSide.LEFT || side === EFConnectableSide.RIGHT;\n  }\n\n  /**\n   * Computes a **soft** handle length for a control point.\n   *\n   * The handle length is derived from:\n   * - `offset` (acts as padding & the baseline handle),\n   * - distance projected along the side’s axis (dx for horizontal, dy for vertical),\n   * - a conservative upper bound to avoid bloated curves.\n   *\n   * @param p0 - Start (or end) point of the segment.\n   * @param p3 - Opposite end (or start) point.\n   * @param side - Side at which the handle originates.\n   * @param offset - Visual padding/minimal handle baseline (must be ≥ 0).\n   * @returns A bounded positive handle length.\n   */\n  private static _handleLen(\n    p0: IPoint,\n    p3: IPoint,\n    side: EFConnectableSide,\n    offset: number,\n  ): number {\n    const dx = Math.abs(p3.x - p0.x);\n    const dy = Math.abs(p3.y - p0.y);\n    const d = Math.hypot(dx, dy);\n    const along = this._isH(side) ? dx : dy;\n\n    const MIN = Math.max(8, offset);\n    const MAX = offset + 0.5 * d; // upper cap to keep the shape compact\n    const len = offset * 1.05 + along * 0.3; // moderate growth along the axis\n\n    return Math.min(MAX, Math.max(MIN, len));\n  }\n\n  /**\n   * Computes a control point by taking the side direction and **lightly blending**\n   * it toward the target direction. This reduces harsh inflections while keeping\n   * the perceptual attachment to the port side.\n   *\n   * @param side - Base side defining the primary direction (LEFT/RIGHT/TOP/BOTTOM).\n   * @param source - Anchor point where the control handle is attached.\n   * @param target - Opposite end; used to orient the handle slightly toward the goal.\n   * @param handle - Handle length (see {@link _handleLen}).\n   * @returns Control point coordinates for the cubic Bézier segment.\n   */\n  private static _softControl(\n    side: EFConnectableSide,\n    source: IPoint,\n    target: IPoint,\n    handle: number,\n  ): IPoint {\n    const v = this._dir(side);\n\n    const dx = target.x - source.x;\n    const dy = target.y - source.y;\n    const dist = Math.hypot(dx, dy) || 1;\n    const tx = dx / dist;\n    const ty = dy / dist;\n\n    // Orientation of side vs. target direction (in [-1, 1])\n    const dot = v.x * tx + v.y * ty;\n\n    // Small base blend toward the target; slightly increase if the side points away.\n    const baseBlend = 0.12;\n    const extra = Math.max(0, -dot) * 0.08; // add a bit when pointing “backwards”\n    const blend = Math.min(0.2, baseBlend + extra);\n\n    const dirX = v.x * (1 - blend) + tx * blend;\n    const dirY = v.y * (1 - blend) + ty * blend;\n    const len = Math.hypot(dirX, dirY) || 1;\n\n    return { x: source.x + (dirX / len) * handle, y: source.y + (dirY / len) * handle };\n  }\n\n  /**\n   * Builds an adaptive connector between `source` and `target`.\n   *\n   * @param request - Connection build request.\n   * @param request.source - Start point of the connector.\n   * @param request.sourceSide - Side at the source port (LEFT/RIGHT/TOP/BOTTOM).\n   * @param request.target - End point of the connector.\n   * @param request.targetSide - Side at the target port (LEFT/RIGHT/TOP/BOTTOM).\n   * @param request.offset - Visual padding & minimal handle baseline (≥ 0).\n   *\n   * @returns Standard {@link IFConnectionBuilderResponse}:\n   * - `path`: SVG cubic path (“M … C …”),\n   * - `points`: discretized samples along the curve,\n   * - `connectionCenter`: approximate visual center for labeling/interaction,\n   * - `secondPoint`/`penultimatePoint`: first/second control points (for tooling).\n   *\n   * @remarks\n   * The returned path slightly offsets the end point by +0.0002 on both axes\n   * to avoid edge cases in some renderers and hit-testing implementations.\n   */\n  public handle(request: IFConnectionBuilderRequest): IFConnectionBuilderResponse {\n    const { source, sourceSide, target, targetSide } = request;\n    const offset = Math.max(0, request.offset ?? 0);\n\n    const p0 = { x: source.x, y: source.y };\n    const p3 = { x: target.x, y: target.y };\n\n    const h0 = AdaptiveCurveBuilder._handleLen(p0, p3, sourceSide, offset);\n    const h3 = AdaptiveCurveBuilder._handleLen(p3, p0, targetSide, offset);\n\n    const c1 = AdaptiveCurveBuilder._softControl(sourceSide, p0, p3, h0);\n    const c2 = AdaptiveCurveBuilder._softControl(targetSide, p3, p0, h3);\n\n    const path = `M ${p0.x} ${p0.y} C ${c1.x} ${c1.y}, ${c2.x} ${c2.y}, ${p3.x + 0.0002} ${p3.y + 0.0002}`;\n\n    const connectionCenter = new CalculateConnectionCenterHandler().handle(\n      new CalculateConnectionCenterRequest([p0, c1, c2, p3]),\n    );\n\n    return {\n      path,\n      connectionCenter,\n      secondPoint: c1,\n      penultimatePoint: c2,\n      points: _sampleCubic(p0, c1, c2, p3, 32),\n    };\n  }\n}\n\n/**\n * Evaluates a cubic Bézier at parameter `t` in [0, 1].\n *\n * @param p0 - Start point.\n * @param p1 - First control point.\n * @param p2 - Second control point.\n * @param p3 - End point.\n * @param t - Parameter in [0, 1].\n * @returns Point on the curve at `t`.\n */\nfunction bez3(p0: IPoint, p1: IPoint, p2: IPoint, p3: IPoint, t: number): IPoint {\n  const u = 1 - t,\n    tt = t * t,\n    uu = u * u,\n    uuu = uu * u,\n    ttt = tt * t;\n\n  return {\n    x: uuu * p0.x + 3 * uu * t * p1.x + 3 * u * tt * p2.x + ttt * p3.x,\n    y: uuu * p0.y + 3 * uu * t * p1.y + 3 * u * tt * p2.y + ttt * p3.y,\n  };\n}\n\n/**\n * Uniformly samples a cubic Bézier segment.\n *\n * @param p0 - Start point.\n * @param p1 - First control point.\n * @param p2 - Second control point.\n * @param p3 - End point.\n * @param samples - Number of sub-segments (default: 32). The function returns `samples + 1` points.\n * @returns Array of sampled points including both endpoints.\n * @remarks\n * Sampling is uniform in parameter `t`, not in arc length. This is typically\n * sufficient for hit-testing and bounding boxes; if you need error-bounded\n * flattening, consider an adaptive subdivision strategy instead.\n */\nfunction _sampleCubic(p0: IPoint, p1: IPoint, p2: IPoint, p3: IPoint, samples = 32): IPoint[] {\n  const out: IPoint[] = new Array(samples + 1);\n  out[0] = { ...p0 };\n  for (let i = 1; i <= samples; i++) {\n    out[i] = bez3(p0, p1, p2, p3, i / samples);\n  }\n\n  return out;\n}\n","import { IPoint } from '@foblex/2d';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport {\n  CalculateConnectionCenterHandler,\n  CalculateConnectionCenterRequest,\n} from './calculate-connection-center';\nimport {\n  IFConnectionBuilder,\n  IFConnectionBuilderRequest,\n  IFConnectionBuilderResponse,\n} from '../../f-connection-builder';\n\nexport class FBezierPathBuilder implements IFConnectionBuilder {\n  private static _getConnectorOffset(distance: number, offset: number): number {\n    if (distance >= offset) {\n      return distance;\n    }\n\n    return offset * Math.sqrt(offset - distance);\n  }\n\n  private static _getAnglePoint(\n    side: EFConnectableSide,\n    source: IPoint,\n    target: IPoint,\n    offset: number,\n  ): IPoint {\n    const 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 {\n      path,\n      connectionCenter,\n      penultimatePoint: targetAnglePoint,\n      secondPoint: sourceAnglePoint,\n      points: _sampleCubic(source, sourceAnglePoint, targetAnglePoint, target, 32),\n    };\n  }\n}\n\nfunction bez3(p0: IPoint, p1: IPoint, p2: IPoint, p3: IPoint, t: number): IPoint {\n  const u = 1 - t,\n    tt = t * t,\n    uu = u * u,\n    uuu = uu * u,\n    ttt = tt * t;\n\n  return {\n    x: uuu * p0.x + 3 * uu * t * p1.x + 3 * u * tt * p2.x + ttt * p3.x,\n    y: uuu * p0.y + 3 * uu * t * p1.y + 3 * u * tt * p2.y + ttt * p3.y,\n  };\n}\n\nfunction _sampleCubic(p0: IPoint, p1: IPoint, p2: IPoint, p3: IPoint, samples = 32): IPoint[] {\n  const out: IPoint[] = new Array(samples + 1);\n  out[0] = { ...p0 };\n  for (let i = 1; i <= samples; i++) {\n    out[i] = bez3(p0, p1, p2, p3, i / samples);\n  }\n\n  return out;\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 {\n  CalculateConnectionCenterHandler,\n  CalculateConnectionCenterRequest,\n} 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  [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  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    const secondPoint = points.length > 1 ? points[1] : target;\n\n    return {\n      path,\n      connectionCenter: center,\n      penultimatePoint,\n      secondPoint,\n      points,\n    };\n  }\n\n  private _getPathPoints(\n    source: IPoint,\n    sourceSide: EFConnectableSide,\n    target: IPoint,\n    targetSide: EFConnectableSide,\n    offset: number,\n  ): { points: IPoint[]; center: IPoint } {\n    const sourceDirection = CONNECTOR_SIDE_POINT[sourceSide];\n    const targetDirection = CONNECTOR_SIDE_POINT[targetSide];\n\n    const sourceGap: IPoint = {\n      x: source.x + sourceDirection.x * offset,\n      y: source.y + sourceDirection.y * offset,\n    };\n    const targetGap: IPoint = {\n      x: target.x + targetDirection.x * offset,\n      y: target.y + targetDirection.y * offset,\n    };\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] =\n              (sourceGap[directionAccessor] > source[directionAccessor] ? -1 : 1) * gapOffset;\n          } else {\n            targetGapOffset[directionAccessor] =\n              (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 =\n          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 };\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\n        ? PointExtensions.initialize(1, 0)\n        : PointExtensions.initialize(-1, 0);\n    }\n\n    return source.y < target.y\n      ? PointExtensions.initialize(0, 1)\n      : 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\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\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 {\n  CalculateConnectionCenterHandler,\n  CalculateConnectionCenterRequest,\n} from './calculate-connection-center';\nimport {\n  IFConnectionBuilder,\n  IFConnectionBuilderRequest,\n  IFConnectionBuilderResponse,\n} from '../../f-connection-builder';\n\nexport class FStraightPathBuilder implements IFConnectionBuilder {\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 {\n      path,\n      connectionCenter,\n      penultimatePoint: source,\n      secondPoint: target,\n      points: [source, connectionCenter, target],\n    };\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  public readonly hostElement = inject(ElementRef<SVGTextPathElement>).nativeElement;\n  private readonly _base = inject(F_CONNECTION) as IHasConnectionText & IHasConnectionFromTo;\n  private readonly _browser = inject(BrowserService);\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 symbolWidth: number = 8;\n  public fontSize: string = '12px';\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._browser.window.getComputedStyle(element);\n\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._browser.document.createElement('canvas');\n    let context;\n\n    try {\n      context = canvas.getContext('2d');\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\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\n    return symbolWidth;\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 { ChangeDetectionStrategy, Component, ElementRef, inject, viewChild } 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  public readonly hostElement = inject(ElementRef<SVGTextElement>).nativeElement;\n  private readonly _base = inject(F_CONNECTION) as IHasConnectionText & IHasConnectionFromTo;\n\n  private readonly _textPathDirective = viewChild.required(FConnectionTextPathDirective);\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 text(): string {\n    return this._base.fText || '';\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(\n      'transform',\n      isTextReverse ? `rotate(180, ${textRectCenter})` : '',\n    );\n    const startOffset = FConnectionTextComponent._getTextStartOffset(\n      line,\n      this._base.fText || '',\n      this._textPathDirective().symbolWidth,\n    );\n    if (startOffset < 0) {\n      this.hostElement.style.display = 'none';\n    } else {\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\n    return vectorLength / 2 - ((name || '').length * symbolWidth) / 2;\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","/* eslint-disable */\nexport const F_CSS_CLASS = {\n  DRAG_AND_DROP: {\n    DRAGGING: 'f-dragging',\n\n    CONNECTIONS_DRAGGING: 'f-connections-dragging',\n  },\n\n  GROUPING: {\n    OVER_BOUNDARY: 'f-grouping-over-boundary',\n\n    DROP_ACTIVE: 'f-grouping-drop-active',\n  },\n\n  CONNECTOR: {\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    CONNECTABLE: 'f-connector-connectable',\n  },\n\n  CONNECTION: {\n    DRAG_HANDLE: 'f-connection-drag-handle',\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\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\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  public readonly hostElement = inject(ElementRef<SVGLinearGradientElement>).nativeElement;\n  private readonly _base = inject(F_CONNECTION) as IHasConnectionColor & IHasConnectionFromTo;\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 stop1Element(): SVGStopElement {\n    return this.hostElement.children.item(0) as SVGStopElement;\n  }\n\n  public get stop2Element(): SVGStopElement {\n    return this.hostElement.children.item(1) as SVGStopElement;\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","<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  public readonly hostElement = inject(ElementRef<SVGPathElement>).nativeElement;\n  private readonly _base = inject(F_CONNECTION) as IHasConnectionColor & IHasConnectionFromTo;\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 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(\n      'marker-start',\n      `url(#${getMarkerSelectedStartId(this._base.fId())})`,\n    );\n    this.hostElement.setAttribute(\n      'marker-end',\n      `url(#${getMarkerSelectedEndId(this._base.fId())})`,\n    );\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 { ChangeDetectionStrategy, Component, ElementRef, inject } 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  public readonly hostElement = inject(ElementRef<SVGPathElement>).nativeElement;\n  private readonly _base = inject(F_CONNECTION) as IHasConnectionFromTo;\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 setPath(path: string) {\n    this.hostElement.setAttribute('d', `${path}`);\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 type IFConnectionBuilders = Record<string, IFConnectionBuilder>;\n","import { inject, Injectable } from '@angular/core';\nimport { IFConnectionBuilder } from './i-f-connection-builder';\nimport {\n  AdaptiveCurveBuilder,\n  EFConnectionType,\n  FBezierPathBuilder,\n  FSegmentPathBuilder,\n  FStraightPathBuilder,\n} from '../common';\nimport { F_CONNECTION_BUILDERS } 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  private readonly _builders: IMap<IFConnectionBuilder> = {\n    [EFConnectionType.STRAIGHT]: new FStraightPathBuilder(),\n\n    [EFConnectionType.BEZIER]: new FBezierPathBuilder(),\n\n    [EFConnectionType.ADAPTIVE_CURVE]: new AdaptiveCurveBuilder(),\n\n    [EFConnectionType.SEGMENT]: new FSegmentPathBuilder(),\n\n    ...(inject(F_CONNECTION_BUILDERS, { optional: true }) || {}),\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 { booleanAttribute, Directive, input, isDevMode } from '@angular/core';\n\nlet warnedFConnectionCenter = false;\n/** @deprecated '[fConnectionCenter] is deprecated and will be removed in v18.0.0. Use FConnectionContent directive instead.' */\n@Directive({\n  selector: '[fConnectionCenter]',\n})\nexport class FConnectionCenterDirective {\n  /**\n   * @deprecated '[fConnectionCenter] is deprecated and will be removed in v18.0.0. Use FConnectionContent directive instead.'\n   */\n  readonly fConnectionCenter = input<boolean, unknown>(true, {\n    alias: 'fConnectionCenter',\n    transform: (v: unknown) => {\n      // Превращаем presence-атрибут в boolean\n      const val = booleanAttribute(v);\n      if (!warnedFConnectionCenter && isDevMode()) {\n        warnedFConnectionCenter = true;\n        console.warn(\n          '[fConnectionCenter] is deprecated and will be removed in v18.0.0. Use [FConnectionContent] instead.',\n        );\n      }\n\n      return val;\n    },\n  });\n}\n","import { IPoint } from '@foblex/2d';\nimport { ITangent } from './i-tangent';\n\n/**\n * Immutable polyline geometry with precomputed cumulative lengths and segment tangents.\n * Keep this class focused on geometry only; sampling/traversal lives in PolylineSampler.\n */\nexport class Polyline {\n  /** Cleaned points (with consecutive duplicates removed). */\n  public readonly points: IPoint[];\n  /** Cumulative length from start to each vertex. Same length as `points`. */\n  public readonly cumulativeLengths: number[];\n  /** Unit tangent per segment `i` for segment [i -> i+1]. Length = points.length - 1. */\n  public readonly segmentTangents: ITangent[];\n  /** Total length of the polyline (>= 1 for the degenerate fallback). */\n  public readonly totalLength: number;\n\n  /**\n   * Construct a polyline from raw points.\n   * Consecutive duplicate points are removed.\n   * If less than 2 points remain, it falls back to a unit horizontal segment [0,0] → [1,0].\n   */\n  constructor(points: IPoint[]) {\n    const cleaned = Polyline._removeConsecutiveDuplicates(points);\n\n    if (cleaned.length < 2) {\n      // Fallback to a unit segment to avoid zero-length edge cases.\n      this.points = [{ x: 0, y: 0 }, { x: 1, y: 0 }];\n      this.cumulativeLengths = [0, 1];\n      this.segmentTangents = [{ x: 1, y: 0 }];\n      this.totalLength = 1;\n\n      return;\n    }\n\n    this.points = cleaned;\n\n    const vertexCount = this.points.length;\n    const segmentCount = vertexCount - 1;\n\n    const cumulative: number[] = new Array(vertexCount).fill(0);\n    const tangents: ITangent[] = new Array(segmentCount);\n\n    let accumulated = 0;\n    for (let i = 0; i < segmentCount; i++) {\n      const dx = this.points[i + 1].x - this.points[i].x;\n      const dy = this.points[i + 1].y - this.points[i].y;\n      const length = Math.hypot(dx, dy);\n\n      const ux = length ? dx / length : 1;\n      const uy = length ? dy / length : 0;\n\n      tangents[i] = { x: ux, y: uy };\n      accumulated += length;\n      cumulative[i + 1] = accumulated;\n    }\n\n    this.cumulativeLengths = cumulative;\n    this.segmentTangents = tangents;\n    this.totalLength = accumulated || 1;\n  }\n\n  /**\n   * Create a polyline by cloning points (defensive copy).\n   * @param points Raw input points; they will be copied and cleaned.\n   */\n  public static from(points: IPoint[]): Polyline {\n    return new Polyline(points.map(p => ({ x: p.x, y: p.y })));\n  }\n\n  /** Remove consecutive duplicate points. */\n  private static _removeConsecutiveDuplicates(points: IPoint[]): IPoint[] {\n    const result: IPoint[] = [];\n    for (const p of points) {\n      const last = result[result.length - 1];\n      if (!last || last.x !== p.x || last.y !== p.y) {\n        result.push({ x: p.x, y: p.y });\n      }\n    }\n\n    return result;\n  }\n}\n","import { Polyline } from './polyline';\nimport { IPoint } from '@foblex/2d';\nimport { ISamplerResult } from './i-sampler-result';\n\n/**\n * Provides sampling (interpolation) along a {@link Polyline}.\n * Separates traversal logic from pure geometry stored in {@link Polyline}.\n */\nexport class PolylineSampler {\n  private _polyline: Polyline;\n\n  /**\n   * @param points Initial points to build the underlying polyline.\n   *               You can later call {@link updatePoints} to rebuild.\n   */\n  constructor(points: IPoint[] = []) {\n    this._polyline = new Polyline(points);\n  }\n\n  /**\n   * Rebuild the underlying polyline from new points.\n   * @returns Total length of the rebuilt polyline.\n   */\n  public updatePoints(points: IPoint[]): number {\n    this._polyline = new Polyline(points);\n\n    return this._polyline.totalLength;\n  }\n\n  /**\n   * Backward-compatible alias for older API naming.\n   * @returns Total length of the rebuilt polyline.\n   */\n  public calculateTotalLength(points: IPoint[]): number {\n    return this.updatePoints(points);\n  }\n\n  /** Total length of the current polyline. */\n  public get totalLength(): number {\n    return this._polyline.totalLength;\n  }\n\n  /**\n   * Sample a point by normalized progress along the whole length.\n   *\n   * - `progress = 0` → start vertex\n   * - `progress = 1` → end vertex\n   *\n   * Uses a small edge threshold (0.5 units) to snap near-start/near-end queries to exact vertices,\n   * mirroring the behavior in the original implementation.\n   *\n   * @param progress Normalized value in [0..1]. Values are clamped to this range.\n   * @returns Interpolated point, segment tangent, and whether it was clamped to an edge.\n   */\n  public getPointAtProgress(progress: number): ISamplerResult {\n    const { points, cumulativeLengths, segmentTangents, totalLength } = this._polyline;\n\n    const clamped = PolylineSampler._clamp(progress, 0, 1);\n    const target = clamped * totalLength;\n\n    const edgeThreshold = 0.5;\n    if (target <= edgeThreshold) {\n      return {\n        point: points[0],\n        tangent: segmentTangents[0] ?? { x: 1, y: 0 },\n        atEdge: true,\n      };\n    }\n    if (totalLength - target <= edgeThreshold) {\n      const last = points.length - 1;\n\n      return {\n        point: points[last],\n        tangent: segmentTangents[last - 1] ?? { x: 1, y: 0 },\n        atEdge: true,\n      };\n    }\n\n    const rightIndex = PolylineSampler._findRightIndex(cumulativeLengths, target);\n    const i = Math.max(1, rightIndex);\n\n    const leftLen = cumulativeLengths[i - 1];\n    const rightLen = cumulativeLengths[i];\n    const t = PolylineSampler._safeRatio(target - leftLen, rightLen - leftLen);\n\n    const a = points[i - 1];\n    const b = points[i];\n    const point = {\n      x: PolylineSampler._lerp(a.x, b.x, t),\n      y: PolylineSampler._lerp(a.y, b.y, t),\n    };\n    const tangent = segmentTangents[i - 1] ?? { x: 1, y: 0 };\n\n    return { point, tangent, atEdge: false };\n  }\n\n  /**\n   * Backward-compatible alias.\n   * Equivalent to {@link getPointAtProgress}.\n   */\n  public getPointAtLength(progress: number): ISamplerResult {\n    return this.getPointAtProgress(progress);\n  }\n\n  /**\n   * Sample a point by absolute distance from the start (in the same units as your points).\n   * This is a convenience wrapper over {@link getPointAtProgress}.\n   *\n   * @param distance Distance from 0 to {@link totalLength}. Values outside are clamped.\n   * @returns Interpolated point, segment tangent, and whether it was clamped to an edge.\n   */\n  public getPointAtDistance(distance: number): ISamplerResult {\n    const progress = this._polyline.totalLength ? distance / this._polyline.totalLength : 0;\n\n    return this.getPointAtProgress(progress);\n  }\n\n  // =============== Internal utilities ===============\n\n  /** Binary-search the first index where cumulativeLengths[index] >= target. */\n  private static _findRightIndex(cumulativeLengths: number[], target: number): number {\n    let lo = 0;\n    let hi = cumulativeLengths.length - 1;\n    while (lo < hi) {\n      const mid = (lo + hi) >> 1;\n      if (cumulativeLengths[mid] < target) lo = mid + 1;\n      else hi = mid;\n    }\n\n    return lo;\n  }\n\n  /** Linear interpolation between `a` and `b`. */\n  private static _lerp(a: number, b: number, t: number): number {\n    return a + (b - a) * t;\n  }\n\n  /** Clamp `value` into [min, max]. */\n  private static _clamp(value: number, min: number, max: number): number {\n    return value < min ? min : value > max ? max : value;\n  }\n\n  /** Safe ratio `num / den` with tiny-denominator guard. */\n  private static _safeRatio(num: number, den: number): number {\n    const d = Math.abs(den) < 1e-6 ? 1e-6 : den;\n\n    return num / d;\n  }\n}\n\n/* ============================\n   Example\n===============================\nconst sampler = new PolylineSampler([\n  { x: 0, y: 0 },\n  { x: 10, y: 0 },\n  { x: 10, y: 10 },\n]);\n\nconsole.log('Total length:', sampler.totalLength); // -> 20\n\nconst s1 = sampler.getPointAtProgress(0.25);\nconsole.log(s1.point, s1.tangent, s1.atEdge);\n\nconst s2 = sampler.getPointAtDistance(15); // same as progress 0.75\nconsole.log(s2.point, s2.tangent, s2.atEdge);\n*/\n","export enum PolylineContentAlign {\n  NONE = 'none',\n\n  ALONG = 'along',\n}\n","import { IPolylineContent } from './i-polyline-content';\nimport { IPoint } from '@foblex/2d';\nimport { PolylineSampler } from './polyline-sampler';\nimport { PolylineContentAlign } from './polyline-content-align';\nimport { DragRectCache } from '../../../domain';\n\n/**\n * Encapsulates placement logic for a single content item along the path.\n */\nexport class PolylineContentPlace {\n  public compute(\n    sampler: PolylineSampler,\n    content: IPolylineContent,\n  ): { position: IPoint; rotationDeg: number } {\n    const progress = this._clamp01(content.position());\n    const { point, tangent } = sampler.getPointAtLength(progress);\n\n    // Left-hand normal\n    const normal = { x: -tangent.y, y: tangent.x };\n\n    // Apply lateral offset\n    const lateral = content.offset() ?? 0;\n    const x = point.x + normal.x * lateral;\n    const y = point.y + normal.y * lateral;\n\n    // Edge guard\n    const projectedSize = this._sizeAlongDirection(content.hostElement, tangent);\n    const halfExtent = projectedSize * 0.5;\n\n    const distanceFromStart = progress * sampler.totalLength;\n    const distanceFromEnd = sampler.totalLength - distanceFromStart;\n\n    const position = this._applyEdgeGuard(\n      x,\n      y,\n      tangent,\n      distanceFromStart,\n      distanceFromEnd,\n      halfExtent,\n    );\n\n    const rotationDeg = this._calculateContentRotation(content.align(), tangent);\n\n    return { position, rotationDeg };\n  }\n\n  private _clamp01(v: number): number {\n    return v <= 0 ? 0 : v >= 1 ? 1 : v;\n  }\n\n  private _applyEdgeGuard(\n    x: number,\n    y: number,\n    tangent: IPoint,\n    distanceFromStart: number,\n    distanceFromEnd: number,\n    halfExtent: number,\n  ): IPoint {\n    if (distanceFromStart <= halfExtent) {\n      const push = halfExtent - distanceFromStart;\n\n      return { x: x + tangent.x * push, y: y + tangent.y * push };\n    }\n    if (distanceFromEnd <= halfExtent) {\n      const push = halfExtent - distanceFromEnd;\n\n      return { x: x - tangent.x * push, y: y - tangent.y * push };\n    }\n\n    return { x, y };\n  }\n\n  private _sizeAlongDirection(element: HTMLElement, dir: IPoint): number {\n    const rect = DragRectCache.fromElement(element);\n\n    return Math.abs(dir.x) * rect.width + Math.abs(dir.y) * rect.height;\n  }\n\n  private _normalize180(angleDeg: number): number {\n    let a = (angleDeg + 180) % 360;\n    if (a < 0) a += 360;\n\n    return a - 180;\n  }\n\n  private _keepUpright(angleDeg: number): number {\n    let a = this._normalize180(angleDeg);\n    if (a > 90) a -= 180;\n    else if (a < -90) a += 180;\n\n    return a;\n  }\n\n  private _calculateContentRotation(align: PolylineContentAlign, tangent: IPoint) {\n    let result = 0;\n\n    if (align === PolylineContentAlign.ALONG) {\n      result = (Math.atan2(tangent.y, tangent.x) * 180) / Math.PI;\n      result = this._keepUpright(result);\n    }\n\n    return result;\n  }\n}\n","import { ILine, IPoint } from '@foblex/2d';\nimport { PolylineSampler } from './polyline-sampler';\nimport { IPolylineContent } from './i-polyline-content';\nimport { PolylineContentPlace } from './polyline-content-place';\n\n/**\n * Engine that orchestrates positioning and orientation of all\n * connection contents along a computed path.\n */\nexport class ConnectionContentLayoutEngine {\n  constructor(private readonly _placement = new PolylineContentPlace()) {}\n\n  public layout(\n    line: { point1: IPoint; point2: IPoint },\n    builderResult: {\n      points?: IPoint[];\n      secondPoint: IPoint;\n      connectionCenter: IPoint;\n      penultimatePoint: IPoint;\n    },\n    contents: Iterable<IPolylineContent>,\n  ): number {\n    const sampler = new PolylineSampler(\n      builderResult.points ?? calculatePathPointsIfEmpty(line, builderResult),\n    );\n    const total = sampler.totalLength;\n\n    for (const item of contents) {\n      const { position, rotationDeg } = this._placement.compute(sampler, item);\n      item.hostElement.style.transform = this._createTransformString(position, rotationDeg);\n    }\n\n    return total;\n  }\n\n  private _createTransformString(position: IPoint, rotationDeg: number): string {\n    return `translate3d(${position.x}px, ${position.y}px, 0) translate(-50%, -50%) rotate(${rotationDeg}deg)`;\n  }\n}\n\nfunction calculatePathPointsIfEmpty(\n  { point1, point2 }: ILine,\n  {\n    secondPoint,\n    connectionCenter,\n    penultimatePoint,\n  }: { secondPoint: IPoint; connectionCenter: IPoint; penultimatePoint: IPoint },\n): IPoint[] {\n  return [point1, secondPoint || point1, connectionCenter, penultimatePoint || point2, point2];\n}\n","import {\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  OnInit,\n  untracked,\n} from '@angular/core';\nimport { NotifyDataChangedRequest } from '../../f-storage';\nimport { FMediator } from '@foblex/mediator';\nimport { castToEnum } from '@foblex/utils';\nimport { IPolylineContent, PolylineContentAlign } from './polyline-content-engine';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\n\n/**\n * Directive for placing custom user content (text, icons, buttons, etc.)\n * along a connection line.\n *\n * It allows you to specify the position along the connection,\n * shift the content sideways (perpendicular to the path),\n * apply a margin near the edges, and control orientation.\n *\n * ### Usage examples\n *\n * ```html\n * <!-- Text centered on the connection -->\n * <div fConnectionContent [position]=\"0.5\">\n *   Hello\n * </div>\n *\n * <!-- Button near the start of the connection, shifted upward by 12px -->\n * <button fConnectionContent [position]=\"0.2\" [offset]=\"-12\">\n *   +\n * </button>\n *\n * <!-- Icon at the end of the connection, with 6px margin and rotated along the path -->\n * <span fConnectionContent [position]=\"1\" [margin]=\"6\" align=\"along\">\n *   ⮕\n * </span>\n * ```\n */\n@Directive({\n  selector: '[fConnectionContent]',\n  standalone: true,\n  host: {\n    'class': 'f-connection-content',\n  },\n})\nexport class FConnectionContent implements OnInit, IPolylineContent {\n  private readonly _mediator = inject(FMediator);\n  private readonly _injector = inject(Injector);\n\n  /**\n   * The host DOM element to which the directive is applied.\n   * Used internally for positioning calculations.\n   */\n  public readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n  /**\n   * Position along the connection.\n   *\n   * A normalized value in the range `0..1`:\n   * - `0` — at the start of the connection,\n   * - `1` — at the end of the connection,\n   * - `0.5` — at the middle of the connection (default).\n   */\n  public readonly position = input<number, unknown>(0.5, {\n    transform: (x) => {\n      const v = coerceNumberProperty(x);\n\n      return v < 0 ? 0 : v > 1 ? 1 : v;\n    },\n  });\n\n  /**\n   * Perpendicular offset from the connection line (in pixels).\n   *\n   * - Positive values shift the element to the right\n   *   relative to the line direction.\n   * - Negative values shift it to the left.\n   * - Default: `0` (no shift).\n   */\n  public readonly offset = input<number, unknown>(0, {\n    transform: (x) => coerceNumberProperty(x),\n  });\n\n  /**\n   * Controls the orientation (rotation) of the content relative to the connection.\n   *\n   * Possible values:\n   * - `'none'` — no rotation (default).\n   * - `'along'` — aligned along the path (tangent).\n   */\n  public readonly align = input<PolylineContentAlign, unknown>(PolylineContentAlign.NONE, {\n    transform: (x) => castToEnum<PolylineContentAlign>(x, 'align', PolylineContentAlign),\n  });\n\n  public ngOnInit(): void {\n    this._listenChanges();\n  }\n\n  private _listenChanges(): void {\n    effect(\n      () => {\n        this.offset();\n        this.position();\n        this.align();\n        untracked(() => this._mediator.execute(new NotifyDataChangedRequest()));\n      },\n      { injector: this._injector },\n    );\n  }\n}\n","export enum EFConnectionConnectableSide {\n  DEFAULT = 'default',\n\n  TOP = 'top',\n\n  BOTTOM = 'bottom',\n\n  LEFT = 'left',\n\n  RIGHT = 'right',\n\n  CALCULATE = 'calculate',\n\n  CALCULATE_HORIZONTAL = 'calculate_horizontal',\n\n  CALCULATE_VERTICAL = 'calculate_vertical',\n}\n","import {\n  contentChildren,\n  Directive,\n  ElementRef,\n  inject,\n  input,\n  signal,\n  Signal,\n  viewChild,\n} 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 { CONNECTION_PATH, IConnectionPath } from './f-path';\nimport { CONNECTION_GRADIENT, IConnectionGradient } from './f-gradient';\nimport {\n  FConnectionDragHandleEndComponent,\n  FConnectionDragHandleStartComponent,\n} from './f-drag-handle';\nimport { FConnectionSelectionComponent } from './f-selection';\nimport { CONNECTION_TEXT, 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,\n  ICanChangeVisibility,\n  mixinChangeSelection,\n  mixinChangeVisibility,\n} from '../../mixins';\nimport { FConnectionCenterDirective } from '../f-connection-center';\nimport { ConnectionContentLayoutEngine, FConnectionContent } from '../f-connection-content';\nimport { EFConnectionConnectableSide } from './e-f-connection-connectable-side';\n\nconst MIXIN_BASE = mixinChangeSelection(\n  mixinChangeVisibility(\n    class {\n      constructor(public hostElement: HTMLElement) {}\n    },\n  ),\n);\n\n@Directive()\nexport abstract class FConnectionBase\n  extends MIXIN_BASE\n  implements\n    IHasHostElement,\n    ISelectable,\n    ICanChangeVisibility,\n    IHasConnectionColor,\n    IHasConnectionFromTo,\n    IHasConnectionText\n{\n  private readonly _connectionFactory = inject(FConnectionFactory);\n\n  public abstract override fId: Signal<string>;\n\n  public readonly fStartColor = input<string>('black');\n\n  public readonly fEndColor = input<string>('black');\n\n  public abstract fOutputId: Signal<string>;\n\n  public abstract fInputId: Signal<string>;\n\n  public abstract fRadius: number;\n\n  public abstract fOffset: number;\n\n  protected path: string = '';\n\n  public line = LineExtensions.initialize();\n\n  public readonly fReassignableStart: Signal<boolean> = signal(false);\n\n  public readonly fDraggingDisabled: Signal<boolean> = signal(false);\n\n  public override readonly fSelectionDisabled: Signal<boolean> = signal(false);\n\n  public abstract boundingElement: HTMLElement | SVGElement;\n\n  public abstract fBehavior: EFConnectionBehavior;\n\n  public abstract fType: EFConnectionType | string;\n\n  public readonly fDefs = viewChild.required<ElementRef<SVGDefsElement>>('defs');\n\n  public readonly fPath = viewChild.required<IConnectionPath>(CONNECTION_PATH);\n\n  public readonly fGradient = viewChild.required<IConnectionGradient>(CONNECTION_GRADIENT);\n\n  public readonly fDragHandleStart = viewChild(FConnectionDragHandleStartComponent);\n\n  public readonly fDragHandleEnd = viewChild.required(FConnectionDragHandleEndComponent);\n\n  public readonly fSelection = viewChild.required(FConnectionSelectionComponent);\n\n  public readonly fTextComponent = viewChild<IConnectionText>(CONNECTION_TEXT);\n\n  public abstract fText: string;\n\n  public abstract fTextStartOffset: string;\n\n  public readonly fConnectionCenter = viewChild<ElementRef<HTMLDivElement>>('fConnectionCenter');\n\n  public readonly fConnectionCenters = contentChildren(FConnectionCenterDirective, {\n    descendants: true,\n  });\n\n  public readonly fConnectionContents = contentChildren(FConnectionContent, {\n    descendants: true,\n  });\n\n  public readonly fInputSide: Signal<EFConnectionConnectableSide> = signal(\n    EFConnectionConnectableSide.DEFAULT,\n  );\n\n  private _sourceSide = EFConnectableSide.AUTO;\n\n  public readonly fOutputSide: Signal<EFConnectionConnectableSide> = signal(\n    EFConnectionConnectableSide.DEFAULT,\n  );\n\n  private _targetSide = EFConnectableSide.AUTO;\n\n  private _penultimatePoint = PointExtensions.initialize();\n  private _secondPoint = PointExtensions.initialize();\n\n  protected constructor() {\n    super(inject(ElementRef<HTMLElement>).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): void {\n    this.line = LineExtensions.initialize(point1, point2);\n\n    const pathResult = this._getPathResult(point1, point2);\n\n    this.path = pathResult.path;\n    this._penultimatePoint = pathResult.penultimatePoint || point1;\n    this._secondPoint = pathResult.secondPoint || point2;\n\n    new ConnectionContentLayoutEngine().layout(this.line, pathResult, this._contents());\n\n    this.fConnectionCenter()?.nativeElement?.setAttribute(\n      'style',\n      this._createTransformString(pathResult.connectionCenter),\n    );\n  }\n\n  private _contents(): FConnectionContent[] {\n    return Array.from(this.fConnectionContents()?.values() ?? []);\n  }\n\n  private _getPathResult(source: IPoint, target: IPoint) {\n    const radius = this.fRadius > 0 ? this.fRadius : 0;\n    const offset = this.fOffset > 0 ? this.fOffset : 1;\n\n    return this._connectionFactory.handle({\n      type: this.fType,\n      payload: {\n        source,\n        sourceSide: this._sourceSide,\n        target,\n        targetSide: this._targetSide,\n        radius,\n        offset,\n      },\n    });\n  }\n\n  private _createTransformString(position: IPoint, rotate: number = 0): string {\n    return `position: absolute; pointer-events: all; transform: translate(-50%, -50%) rotate(${rotate}deg); 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.fDragHandleEnd().redraw(this._penultimatePoint, this.line.point2);\n    this.fDragHandleStart()?.redraw(this._secondPoint, this.line.point1);\n    this.fTextComponent()?.redraw(this.line);\n  }\n\n  /**\n   * Applies the resolved sides to the connection. Don't call this method directly; it's used internally.\n   *\n   * @param sourceSide The resolved side for the source element.\n   * @param targetSide The resolved side for the target element.\n   */\n  public _applyResolvedSidesToConnection(\n    sourceSide: EFConnectableSide,\n    targetSide: EFConnectableSide,\n  ): void {\n    this._sourceSide = sourceSide;\n    this._targetSide = targetSide;\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  SEGMENT = 'segment',\n\n  STRAIGHT = 'straight',\n\n  BEZIER = 'bezier',\n\n  ADAPTIVE_CURVE = 'adaptive-curve',\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  input,\n  Input,\n  numberAttribute,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  signal,\n} from '@angular/core';\nimport { EFConnectionBehavior, EFConnectionConnectableSide } from '../common';\nimport { EFConnectionType } from '../common';\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 {\n  AddConnectionForCreateToStoreRequest,\n  RemoveConnectionForCreateFromStoreRequest,\n} from '../../domain';\n\nlet uniqueId = 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\n  implements AfterViewInit, OnInit, OnChanges, OnDestroy\n{\n  public override fId = signal<string>(`f-connection-for-create-${uniqueId++}`);\n\n  public override fText: string = '';\n\n  public override fTextStartOffset: string = '';\n\n  public override fOutputId = signal('');\n\n  public override fInputId = signal('');\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 fInputSide = input(EFConnectionConnectableSide.DEFAULT, {\n    transform: (x) => {\n      return castToEnum(x, 'fInputSide', EFConnectionConnectableSide);\n    },\n  });\n\n  public override fOutputSide = input(EFConnectionConnectableSide.DEFAULT, {\n    transform: (x) => {\n      return castToEnum(x, 'fOutputSide', EFConnectionConnectableSide);\n    },\n  });\n\n  public override get boundingElement(): HTMLElement | SVGElement {\n    return this.fPath().hostElement;\n  }\n\n  private readonly _mediator = inject(FMediator);\n\n  public ngOnInit(): void {\n    this._mediator.execute(new AddConnectionForCreateToStoreRequest(this));\n  }\n\n  public ngAfterViewInit(): void {\n    this.hide();\n  }\n\n  public ngOnChanges(): void {\n    this._mediator.execute(new NotifyDataChangedRequest());\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.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 [attr.d]=\"path\"></path>\n      <circle f-connection-drag-handle-start r=\"8\"></circle>\n      <circle f-connection-drag-handle-end r=\"8\"></circle>\n    </g>\n    <text f-connection-text></text>\n  </g>\n  <ng-content></ng-content>\n</svg>\n@if (fConnectionCenters().length) {\n  <div #fConnectionCenter class=\"f-connection-center\">\n    <ng-content select=\"[fConnectionCenter]\"></ng-content>\n  </div>\n}\n\n@if (fConnectionContents().length) {\n  <ng-content select=\"[fConnectionContent]\"></ng-content>\n}\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  input,\n  Input,\n  numberAttribute,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { EFConnectionBehavior, EFConnectionConnectableSide, EFConnectionType } from '../common';\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 { AddConnectionToStoreRequest, RemoveConnectionFromStoreRequest } from '../../domain';\nimport { stringAttribute } from '../../utils';\n\nlet uniqueId = 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 extends FConnectionBase implements OnInit, OnChanges, OnDestroy {\n  public override fId = input<string>(`f-connection-${uniqueId++}`, { alias: 'fConnectionId' });\n\n  /** @deprecated [fText] is deprecated and will be removed in v18.0.0. Use FConnectionContent directive instead. */\n  @Input()\n  public override fText: string = '';\n\n  /** @deprecated [fTextStartOffset] is deprecated and will be removed in v18.0.0. Use FConnectionContent directive instead. */\n  @Input()\n  public override fTextStartOffset: string = '';\n\n  public override fOutputId = input<string, unknown>('', {\n    transform: (value) => stringAttribute(value) || '',\n  });\n\n  public override fInputId = input<string, unknown>('', {\n    transform: (value) => stringAttribute(value) || '',\n  });\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 fSelectionDisabled = input(false, { transform: booleanAttribute });\n\n  public override fReassignableStart = input(false, { transform: booleanAttribute });\n\n  public override fDraggingDisabled = input(false, {\n    alias: 'fReassignDisabled',\n    transform: booleanAttribute,\n  });\n\n  public override fInputSide = input(EFConnectionConnectableSide.DEFAULT, {\n    transform: (x) => {\n      return castToEnum(x, 'fInputSide', EFConnectionConnectableSide);\n    },\n  });\n\n  public override fOutputSide = input(EFConnectionConnectableSide.DEFAULT, {\n    transform: (x) => {\n      return castToEnum(x, 'fOutputSide', EFConnectionConnectableSide);\n    },\n  });\n\n  public override get boundingElement(): HTMLElement | SVGElement {\n    return this.fPath().hostElement;\n  }\n\n  private readonly _mediator = inject(FMediator);\n\n  public ngOnInit(): void {\n    this._mediator.execute(new AddConnectionToStoreRequest(this));\n  }\n\n  public ngOnChanges(): void {\n    this._mediator.execute(new NotifyDataChangedRequest());\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemoveConnectionFromStoreRequest(this));\n  }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: block; vertical-align: middle;\">\n  <defs #defs></defs>\n  <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      @if (fReassignableStart()) {\n        <circle f-connection-drag-handle-start r=\"8\"></circle>\n      }\n      <circle f-connection-drag-handle-end r=\"8\"></circle>\n    </g>\n    @if (fText) {\n      <text f-connection-text></text>\n    }\n  </g>\n</svg>\n@if (fConnectionCenters().length) {\n  <div #fConnectionCenter class=\"f-connection-center\">\n    <ng-content select=\"[fConnectionCenter]\" />\n  </div>\n}\n\n@if (fConnectionContents().length) {\n  <ng-content select=\"[fConnectionContent]\" />\n}\n","export enum EFMarkerType {\n\n  START = 'f-connection-marker-start',\n\n  END = 'f-connection-marker-end',\n\n  SELECTED_START = 'f-connection-selected-marker-start',\n\n  SELECTED_END = 'f-connection-selected-marker-end',\n}\n","import { InjectionToken } from '@angular/core';\nimport { IHasHostElement } from '../../i-has-host-element';\n\nexport const F_MARKER = new InjectionToken('F_MARKER');\n\nexport abstract class FMarkerBase implements IHasHostElement {\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 { Directive, ElementRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { F_MARKER, FMarkerBase } from './f-marker-base';\nimport { EFMarkerType } from './e-f-marker-type';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddConnectionMarkerToStoreRequest,\n  RemoveConnectionMarkerFromStoreRequest,\n} 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  public readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n  private readonly _mediator = inject(FMediator);\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  public ngOnInit(): void {\n    this.hostElement.style.display = 'none';\n    this._mediator.execute(new AddConnectionMarkerToStoreRequest(this));\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemoveConnectionMarkerFromStoreRequest(this));\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  input,\n  Input,\n  numberAttribute,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  signal,\n} from '@angular/core';\nimport { EFConnectionBehavior, EFConnectionConnectableSide } from '../common';\nimport { EFConnectionType } from '../common';\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 {\n  AddSnapConnectionToStoreRequest,\n  RemoveSnapConnectionFromStoreRequest,\n} from '../../domain';\n\nlet uniqueId = 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\n  implements AfterViewInit, OnInit, OnChanges, OnDestroy\n{\n  public override fId = signal<string>(`f-snap-connection-${uniqueId++}`);\n\n  public override fText: string = '';\n\n  public override fTextStartOffset: string = '';\n\n  @Input({ transform: numberAttribute })\n  public fSnapThreshold: number = 20;\n\n  public override fOutputId = signal('');\n\n  public override fInputId = signal('');\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 fInputSide = input(EFConnectionConnectableSide.DEFAULT, {\n    transform: (x) => {\n      return castToEnum(x, 'fInputSide', EFConnectionConnectableSide);\n    },\n  });\n\n  public override fOutputSide = input(EFConnectionConnectableSide.DEFAULT, {\n    transform: (x) => {\n      return castToEnum(x, 'fOutputSide', EFConnectionConnectableSide);\n    },\n  });\n\n  public override get boundingElement(): HTMLElement | SVGElement {\n    return this.fPath().hostElement;\n  }\n\n  private readonly _mediator = inject(FMediator);\n\n  public ngOnInit(): void {\n    this._mediator.execute(new AddSnapConnectionToStoreRequest(this));\n  }\n\n  public ngAfterViewInit(): void {\n    this.hide();\n  }\n\n  public ngOnChanges(): void {\n    this._mediator.execute(new NotifyDataChangedRequest());\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.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 [attr.d]=\"path\"></path>\n      <circle f-connection-drag-handle-start r=\"8\"></circle>\n      <circle f-connection-drag-handle-end r=\"8\"></circle>\n    </g>\n    <text f-connection-text></text>\n  </g>\n  <ng-content></ng-content>\n</svg>\n@if (fConnectionCenters().length) {\n  <div #fConnectionCenter class=\"f-connection-center\">\n    <ng-content select=\"[fConnectionCenter]\"></ng-content>\n  </div>\n}\n\n@if (fConnectionContents().length) {\n  <ng-content select=\"[fConnectionContent]\"></ng-content>\n}\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, IRoundedRect } from '@foblex/2d';\nimport { CalculateBehaviorRequest } from '../models/calculate-behavior-request';\n\n/**\n * Floating behavior calculates the connection line\n * It constructs a line between the intersections of the connectors rectangles and line from the centers of the connector rectangles\n * @param payload\n */\nexport function floatingBehavior({ sourceRect, targetRect }: CalculateBehaviorRequest): ILine {\n  return _getIntersectionsLine(\n    _fromRoundedRectIntersections(sourceRect, targetRect),\n    _toRoundedRectIntersections(sourceRect, targetRect),\n    sourceRect,\n    targetRect,\n  );\n}\n\nfunction _fromRoundedRectIntersections(sourceRect: IRoundedRect, targetRect: IRoundedRect) {\n  return GetIntersections.getRoundedRectIntersections(\n    sourceRect.gravityCenter,\n    targetRect.gravityCenter,\n    sourceRect,\n  )[0];\n}\n\nfunction _toRoundedRectIntersections(sourceRect: IRoundedRect, targetRect: IRoundedRect) {\n  return GetIntersections.getRoundedRectIntersections(\n    targetRect.gravityCenter,\n    sourceRect.gravityCenter,\n    targetRect,\n  )[0];\n}\n\nfunction _getIntersectionsLine(\n  from: IPoint,\n  to: IPoint,\n  sourceRect: IRoundedRect,\n  targetRect: IRoundedRect,\n): ILine {\n  return {\n    point1: from ? from : sourceRect.gravityCenter,\n    point2: to ? to : targetRect.gravityCenter,\n  };\n}\n","import { ILine } from '@foblex/2d';\nimport { CalculateBehaviorRequest } from '../models/calculate-behavior-request';\n\n/**\n * Fixed center behavior calculates the connection line\n * It constructs a line between the gravity centers of the connector rectangles\n * @param payload\n */\nexport function fixedCenterBehavior({ sourceRect, targetRect }: CalculateBehaviorRequest): ILine {\n  return {\n    point1: sourceRect.gravityCenter,\n    point2: targetRect.gravityCenter,\n  };\n}\n","import { ILine, IPoint, IRect } from '@foblex/2d';\nimport { EFConnectableSide } from '../../../../f-connectors';\nimport { CalculateBehaviorRequest } from '../models/calculate-behavior-request';\n\n/**\n * Fixed outbound behavior calculates the connection line\n * It constructs a line between the specified sides of the output and input rectangles\n * @param payload\n */\nexport function fixedOutboundBehavior({\n  sourceRect,\n  sourceConnectableSide,\n  targetRect,\n  targetConnectableSide,\n}: CalculateBehaviorRequest): ILine {\n  return {\n    point1: _getPosition(\n      sourceRect,\n      sourceConnectableSide === EFConnectableSide.AUTO\n        ? EFConnectableSide.BOTTOM\n        : sourceConnectableSide,\n    ),\n    point2: _getPosition(\n      targetRect,\n      targetConnectableSide === EFConnectableSide.AUTO\n        ? EFConnectableSide.TOP\n        : targetConnectableSide,\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","import { CalculateConnectionLineByBehaviorRequest } from './calculate-connection-line-by-behavior-request';\nimport { Injectable } from '@angular/core';\nimport { EFConnectionBehavior, EFConnectionConnectableSide } from '../../../f-connection';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ILine } from '@foblex/2d';\nimport { floatingBehavior } from './utils/floating-behavior';\nimport { fixedCenterBehavior } from './utils/fixed-center-behavior';\nimport { fixedOutboundBehavior } from './utils/fixed-outbound-behavior';\nimport { EFConnectableSide } from '../../../f-connectors';\nimport { CalculateBehaviorRequest } from './models/calculate-behavior-request';\n\n/**\n * Small epsilon to treat near-zero differences as negligible.\n */\nconst EPSILON = 0.5;\n\n/**\n * Function signature for behavior-specific connection line handlers.\n */\ntype BehaviorHandler = (args: CalculateBehaviorRequest) => ILine;\n\n/**\n * Registry of all connection behavior handlers.\n */\nconst BEHAVIOR_HANDLERS: Record<string, BehaviorHandler> = {\n  [EFConnectionBehavior.FLOATING]: floatingBehavior,\n  [EFConnectionBehavior.FIXED_CENTER]: fixedCenterBehavior,\n  [EFConnectionBehavior.FIXED]: fixedOutboundBehavior,\n};\n\n/**\n * Represents the directional deltas between two rectangles.\n */\ninterface IDirectionalVectors {\n  sourceToTargetX: number;\n  sourceToTargetY: number;\n  targetToSourceX: number;\n  targetToSourceY: number;\n}\n\n/**\n * Calculates connection lines based on behavior rules.\n * It determines which sides of the source and target should connect,\n * then delegates to a registered behavior handler.\n */\n@Injectable()\n@FExecutionRegister(CalculateConnectionLineByBehaviorRequest)\nexport class CalculateConnectionLineByBehavior\n  implements IExecution<CalculateConnectionLineByBehaviorRequest, ILine>\n{\n  /**\n   * Main execution entry point.\n   *\n   * @param request The request containing source, target, and connection details.\n   * @returns A calculated connection line (ILine).\n   */\n  public handle(request: CalculateConnectionLineByBehaviorRequest): ILine {\n    const vectors = this._calculateDirectionalVectors(\n      request.sourceRect.gravityCenter.x,\n      request.sourceRect.gravityCenter.y,\n      request.targetRect.gravityCenter.x,\n      request.targetRect.gravityCenter.y,\n    );\n\n    const sourceSide = this._determineSourceSide(request, vectors);\n    const targetSide = this._determineTargetSide(request, vectors);\n\n    request.connection._applyResolvedSidesToConnection(sourceSide, targetSide);\n\n    const handler = this._getBehaviorHandler(request.connection.fBehavior);\n\n    return handler({\n      sourceRect: request.sourceRect,\n      targetRect: request.targetRect,\n      sourceConnectableSide: sourceSide,\n      targetConnectableSide: targetSide,\n    });\n  }\n\n  /**\n   * Computes the directional deltas between two rectangles.\n   */\n  private _calculateDirectionalVectors(\n    sourceX: number,\n    sourceY: number,\n    targetX: number,\n    targetY: number,\n  ): IDirectionalVectors {\n    const sourceToTargetX = targetX - sourceX;\n    const sourceToTargetY = targetY - sourceY;\n\n    return {\n      sourceToTargetX,\n      sourceToTargetY,\n      targetToSourceX: -sourceToTargetX,\n      targetToSourceY: -sourceToTargetY,\n    };\n  }\n\n  /**\n   * Determines the side for the source element.\n   */\n  private _determineSourceSide(\n    request: CalculateConnectionLineByBehaviorRequest,\n    vectors: IDirectionalVectors,\n  ): EFConnectableSide {\n    return this._resolveConnectableSide(\n      request.connection.fOutputSide(),\n      vectors.sourceToTargetX,\n      vectors.sourceToTargetY,\n      request.sourceConnectableSide,\n    );\n  }\n\n  /**\n   * Determines the side for the target element.\n   */\n  private _determineTargetSide(\n    request: CalculateConnectionLineByBehaviorRequest,\n    vectors: IDirectionalVectors,\n  ): EFConnectableSide {\n    return this._resolveConnectableSide(\n      request.connection.fInputSide(),\n      vectors.targetToSourceX,\n      vectors.targetToSourceY,\n      request.targetConnectableSide,\n    );\n  }\n\n  /**\n   * Resolves which side of a shape to connect to based on direction, fallback, and connection mode.\n   *\n   * @param requestedSide The side mode (e.g. CALCULATE, CALCULATE_HORIZONTAL, FIXED, etc.).\n   * @param deltaX Difference in X between source and target.\n   * @param deltaY Difference in Y between source and target.\n   * @param fallbackSide The default fallback side if calculation is ambiguous.\n   */\n  private _resolveConnectableSide(\n    requestedSide: EFConnectionConnectableSide,\n    deltaX: number,\n    deltaY: number,\n    fallbackSide: EFConnectableSide,\n  ): EFConnectableSide {\n    if (requestedSide === EFConnectionConnectableSide.DEFAULT) {\n      return fallbackSide;\n    }\n\n    const absoluteX = Math.abs(deltaX);\n    const absoluteY = Math.abs(deltaY);\n    const isNearZero = absoluteX < EPSILON && absoluteY < EPSILON;\n\n    if (isNearZero) {\n      return fallbackSide;\n    }\n\n    const isHorizontalDominant = absoluteX >= absoluteY;\n\n    switch (requestedSide) {\n      case EFConnectionConnectableSide.CALCULATE:\n        return isHorizontalDominant\n          ? deltaX >= 0\n            ? EFConnectableSide.RIGHT\n            : EFConnectableSide.LEFT\n          : deltaY >= 0\n            ? EFConnectableSide.BOTTOM\n            : EFConnectableSide.TOP;\n\n      case EFConnectionConnectableSide.CALCULATE_HORIZONTAL:\n        if (absoluteX < EPSILON) {\n          return fallbackSide;\n        }\n\n        return deltaX >= 0 ? EFConnectableSide.RIGHT : EFConnectableSide.LEFT;\n\n      case EFConnectionConnectableSide.CALCULATE_VERTICAL:\n        if (absoluteY < EPSILON) {\n          return fallbackSide;\n        }\n\n        return deltaY >= 0 ? EFConnectableSide.BOTTOM : EFConnectableSide.TOP;\n\n      case EFConnectionConnectableSide.TOP:\n        return EFConnectableSide.TOP;\n      case EFConnectionConnectableSide.BOTTOM:\n        return EFConnectableSide.BOTTOM;\n      case EFConnectionConnectableSide.LEFT:\n        return EFConnectableSide.LEFT;\n      case EFConnectionConnectableSide.RIGHT:\n        return EFConnectableSide.RIGHT;\n\n      default:\n        return fallbackSide;\n    }\n  }\n\n  /**\n   * Returns the appropriate handler for the given connection behavior.\n   *\n   * @throws Error if no handler is registered for the behavior.\n   */\n  private _getBehaviorHandler(behavior: EFConnectionBehavior): BehaviorHandler {\n    const handler = BEHAVIOR_HANDLERS[behavior];\n    if (!handler) {\n      throw new Error(`[Behavior] No handler for behavior: ${behavior}`);\n    }\n\n    return handler;\n  }\n}\n","export class RedrawConnectionsRequest {\n  static readonly fToken = Symbol('RedrawConnectionsRequest');\n}\n","export class GetNormalizedConnectorRectRequest {\n  static readonly fToken = Symbol('GetNormalizedConnectorRectRequest');\n\n  constructor(public element: HTMLElement | SVGElement) {}\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class GetNormalizedPointRequest {\n  static readonly fToken = Symbol('GetNormalizedPointRequest');\n\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/**\n * Execution that retrieves the normalized point of a position.\n * It calculates the point based on the position's transformation\n * and the canvas transformation.\n */\n@Injectable()\n@FExecutionRegister(GetNormalizedPointRequest)\nexport class GetNormalizedPointExecution implements IExecution<GetNormalizedPointRequest, IPoint> {\n  private readonly _store = inject(FComponentsStore);\n\n  private get _transform(): ITransformModel {\n    return this._store.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    if (!this._store.flowHost) {\n      return request.position;\n    }\n\n    return Point.fromPoint(request.position)\n      .elementTransform(this._store.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/**\n * Execution that retrieves the normalized rectangle of a connector.\n * It calculates the rectangle based on the element's position and size,\n * adjusting for the canvas transformation and element offsets.\n */\n@Injectable()\n@FExecutionRegister(GetNormalizedConnectorRectRequest)\nexport class GetNormalizedConnectorRectExecution\n  implements IExecution<GetNormalizedConnectorRectRequest, IRoundedRect>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  private get _transform(): ITransformModel {\n    return this._store.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\n    return RoundedRect.fromCenter(unscaledRect, offsetSize.width, offsetSize.height);\n  }\n\n  private _getElementRoundedRect(request: GetNormalizedConnectorRectRequest): IRoundedRect {\n    return this._mediator.execute<IRoundedRect>(new GetElementRoundedRectRequest(request.element));\n  }\n\n  private _normalizePosition(rect: IRoundedRect): IPoint {\n    return this._mediator.execute(new GetNormalizedPointRequest(rect));\n  }\n\n  private _unscaleSize(rect: IRoundedRect): ISize {\n    return SizeExtensions.initialize(\n      rect.width / this._transform.scale,\n      rect.height / this._transform.scale,\n    );\n  }\n\n  private _getUnscaledRect(position: IPoint, size: ISize, rect: IRoundedRect): IRoundedRect {\n    return new RoundedRect(\n      position.x,\n      position.y,\n      size.width,\n      size.height,\n      rect.radius1,\n      rect.radius2,\n      rect.radius3,\n      rect.radius4,\n    );\n  }\n\n  private _getOffsetSize(element: HTMLElement | SVGElement, size: ISize): ISize {\n    return SizeExtensions.offsetFromElement(element) || size;\n  }\n}\n","import { IRect, RectExtensions } from '@foblex/2d';\n\nexport class DragRectCache {\n  private static _cache = new WeakMap<Element, IRect>();\n\n  public static fromElement(element: HTMLElement | SVGElement): IRect {\n    const rect = this._cache.get(element) || RectExtensions.fromElement(element);\n    this._cache.set(element, rect);\n\n    return rect;\n  }\n\n  public static set(element: HTMLElement | SVGElement): void {\n    this._cache.set(element, RectExtensions.fromElement(element));\n  }\n\n  public static invalidate(element: HTMLElement | SVGElement): void {\n    this._cache.delete(element);\n  }\n\n  public static invalidateAll(): void {\n    this._cache = new WeakMap<Element, IRect>();\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';\nimport { DragRectCache } from '../../drag-rect-cache';\n\n/**\n * Execution that redraws connections in the FComponentsStore.\n * It resets connectors, sets markers for temporary and snap connections,\n * and sets up connections based on the stored outputs and inputs.\n */\n@Injectable()\n@FExecutionRegister(RedrawConnectionsRequest)\nexport class RedrawConnections implements IExecution<RedrawConnectionsRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: RedrawConnectionsRequest): void {\n    this._resetConnectors();\n\n    if (this._store.fTempConnection) {\n      this._setMarkers(this._store.fTempConnection);\n    }\n\n    if (this._store.fSnapConnection) {\n      this._setMarkers(this._store.fSnapConnection);\n    }\n\n    this._store.fConnections.forEach((x) => {\n      this._setupConnection(this._getOutput(x.fOutputId()), this._getInput(x.fInputId()), x);\n    });\n    DragRectCache.invalidateAll();\n  }\n\n  private _getOutput(id: string): FConnectorBase {\n    const result = this._store.fOutputs.find((x) => x.fId() === id);\n    if (!result) {\n      throw new Error(`Output with id ${id} not found`);\n    }\n\n    return result;\n  }\n\n  private _getInput(id: string): FConnectorBase {\n    const result = this._store.fInputs.find((x) => x.fId() === id);\n    if (!result) {\n      throw new Error(`Input with id ${id} not found`);\n    }\n\n    return result;\n  }\n\n  private _resetConnectors(): void {\n    this._store.fOutputs.forEach((x) => x.resetConnected());\n    this._store.fInputs.forEach((x) => x.resetConnected());\n  }\n\n  private _setupConnection(\n    fOutput: FConnectorBase,\n    fInput: FConnectorBase,\n    fConnection: FConnectionBase,\n  ): 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);\n\n    fConnection.initialize();\n    fConnection.isSelected() ? fConnection.markAsSelected() : null;\n  }\n\n  private _getLine(\n    output: FConnectorBase,\n    input: FConnectorBase,\n    connection: FConnectionBase,\n  ): ILine {\n    return this._mediator.execute(\n      new CalculateConnectionLineByBehaviorRequest(\n        this._mediator.execute<IRoundedRect>(\n          new GetNormalizedConnectorRectRequest(output.hostElement),\n        ),\n        this._mediator.execute<IRoundedRect>(\n          new GetNormalizedConnectorRectRequest(input.hostElement),\n        ),\n        connection,\n        output.fConnectableSide,\n        input.fConnectableSide,\n      ),\n    );\n  }\n\n  private _setMarkers(connection: FConnectionBase): void {\n    this._mediator.execute(new CreateConnectionMarkersRequest(connection));\n  }\n}\n","export class RemoveConnectionForCreateFromStoreRequest {\n  static readonly fToken = Symbol('RemoveConnectionForCreateFromStoreRequest');\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/**\n * Execution that removes a connection for creation from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveConnectionForCreateFromStoreRequest)\nexport class RemoveConnectionForCreateFromStoreExecution implements IExecution<RemoveConnectionForCreateFromStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: RemoveConnectionForCreateFromStoreRequest): void {\n    this._store.fTempConnection = undefined;\n  }\n}\n","import { FConnectionBase } from '../../../f-connection';\n\nexport class RemoveConnectionFromStoreRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that removes a connection from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveConnectionFromStoreRequest)\nexport class RemoveConnectionFromStoreExecution implements IExecution<RemoveConnectionFromStoreRequest, void> {\n\n  private _store = inject(FComponentsStore);\n\n  public handle(request: RemoveConnectionFromStoreRequest): void {\n    this._store.fConnections.splice(this._getIndexOfConnection(request.fConnection), 1);\n    this._store.dataChanged();\n  }\n\n  private _getIndexOfConnection(fConnection: FConnectionBase): number {\n    const result = this._store.fConnections.indexOf(fConnection);\n    if (result === -1) {\n      throw new Error(`Connection not found in store`);\n    }\n\n    return result;\n  }\n}\n","import { FMarkerBase } from '../../../f-connection';\n\nexport class RemoveConnectionMarkerFromStoreRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that removes a connection marker from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveConnectionMarkerFromStoreRequest)\nexport class RemoveConnectionMarkerFromStoreExecution implements IExecution<RemoveConnectionMarkerFromStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: RemoveConnectionMarkerFromStoreRequest): void {\n    this._store.removeComponent(this._store.fMarkers, request.fComponent);\n  }\n}\n","export class RemoveSnapConnectionFromStoreRequest {\n  static readonly fToken = Symbol('RemoveSnapConnectionFromStoreRequest');\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/**\n * Execution that removes the snap connection from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveSnapConnectionFromStoreRequest)\nexport class RemoveSnapConnectionFromStoreExecution implements IExecution<RemoveSnapConnectionFromStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: RemoveSnapConnectionFromStoreRequest): void {\n    this._store.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 { RedrawConnections } from './redraw-connections';\nimport { CalculateConnectionLineByBehavior } from './calculate-connection-line-by-behavior';\n\n/**\n * This file exports all the connection-related features for the F-Flow domain.\n */\nexport const F_CONNECTION_FEATURES = [\n  AddConnectionForCreateToStoreExecution,\n\n  AddConnectionMarkerToStoreExecution,\n\n  AddConnectionToStoreExecution,\n\n  AddSnapConnectionToStoreExecution,\n\n  CreateConnectionMarkersExecution,\n\n  CalculateConnectionLineByBehavior,\n\n  RedrawConnections,\n\n  RemoveConnectionForCreateFromStoreExecution,\n\n  RemoveConnectionFromStoreExecution,\n\n  RemoveConnectionMarkerFromStoreExecution,\n\n  RemoveSnapConnectionFromStoreExecution,\n];\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class AddInputToStoreRequest {\n  static readonly fToken = Symbol('AddInputToStoreRequest');\n  constructor(public readonly component: FConnectorBase) {}\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/**\n * Execution that adds an InputConnector to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddInputToStoreRequest)\nexport class AddInputToStore implements IExecution<AddInputToStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ component }: AddInputToStoreRequest): void {\n    this._store.addComponent(this._store.fInputs, component);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class AddOutletToStoreRequest {\n  static readonly fToken = Symbol('AddOutletToStoreRequest');\n  constructor(public readonly component: FConnectorBase) {}\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/**\n * Execution that adds an OutletConnector to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddOutletToStoreRequest)\nexport class AddOutletToStore implements IExecution<AddOutletToStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ component }: AddOutletToStoreRequest): void {\n    this._store.addComponent(this._store.fOutlets, component);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class AddOutputToStoreRequest {\n  static readonly fToken = Symbol('AddOutputToStoreRequest');\n  constructor(public readonly component: FConnectorBase) {}\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/**\n * Execution that adds an OutputConnector to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddOutputToStoreRequest)\nexport class AddOutputToStore implements IExecution<AddOutputToStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ component }: AddOutputToStoreRequest): void {\n    this._store.addComponent(this._store.fOutputs, component);\n  }\n}\n","import { IPoint } from '@foblex/2d';\nimport { IConnectorAndRect } from '../index';\n\nexport class CalculateClosestConnectorRequest {\n  static readonly fToken = Symbol('CalculateClosestConnectorRequest');\n\n  constructor(\n    public readonly position: IPoint,\n    public readonly connectors: IConnectorAndRect[],\n  ) {}\n}\n","import { CalculateClosestConnectorRequest } from './calculate-closest-connector-request';\nimport { Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { IPoint } from '@foblex/2d';\nimport { IClosestConnector } from '../i-closest-connector';\nimport { IConnectorAndRect } from '../index';\n\n/**\n * Execution that finds the closest connector to a given point.\n * It calculates the distance from the point to each connector's rectangle\n * and returns the closest one along with its distance.\n */\n@Injectable()\n@FExecutionRegister(CalculateClosestConnectorRequest)\nexport class CalculateClosestConnector\n  implements IExecution<CalculateClosestConnectorRequest, IClosestConnector | undefined>\n{\n  public handle({\n    position,\n    connectors,\n  }: CalculateClosestConnectorRequest): IClosestConnector | undefined {\n    let result: IConnectorAndRect | undefined;\n    let minDistance = Infinity;\n\n    for (const element of connectors) {\n      const distance = this._distanceToRectangle(position, element);\n\n      if (distance < minDistance) {\n        minDistance = distance;\n        result = element;\n      }\n    }\n\n    return result\n      ? {\n          ...result,\n          distance: minDistance,\n        }\n      : undefined;\n  }\n\n  private _distanceToRectangle(point: IPoint, inputWithRect: IConnectorAndRect): number {\n    const closestX = this._clamp(\n      point.x,\n      inputWithRect.fRect.x,\n      inputWithRect.fRect.x + inputWithRect.fRect.width,\n    );\n    const closestY = this._clamp(\n      point.y,\n      inputWithRect.fRect.y,\n      inputWithRect.fRect.y + inputWithRect.fRect.height,\n    );\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 } from '@foblex/2d';\nimport { IConnectorAndRect } from '../i-connector-and-rect';\n\nexport class FindConnectableConnectorUsingPriorityAndPositionRequest {\n  static readonly fToken = Symbol('FindConnectableConnectorUsingPriorityAndPositionRequest');\n  constructor(\n    public pointerPosition: IPoint,\n    public connectableConnectors: IConnectorAndRect[],\n  ) {\n  }\n}\n","import { IPoint, ITransformModel, Point, RectExtensions } from '@foblex/2d';\nimport { FindConnectableConnectorUsingPriorityAndPositionRequest } from './find-connectable-connector-using-priority-and-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 { IClosestConnector } from '../i-closest-connector';\nimport { CalculateClosestConnectorRequest } from '../calculate-closest-connector';\nimport { FSnapConnectionComponent } from '../../../f-connection';\nimport { IConnectorAndRect } from '../i-connector-and-rect';\n\n/**\n * Execution that finds a connectable connector at a given position with priority.\n * It checks for connectors at the position, the closest connector if snap connection is enabled,\n * and the first connectable connector of the node at that position.\n */\n@Injectable()\n@FExecutionRegister(FindConnectableConnectorUsingPriorityAndPositionRequest)\nexport class FindConnectableConnectorUsingPriorityAndPositionExecution\n  implements\n    IExecution<FindConnectableConnectorUsingPriorityAndPositionRequest, FConnectorBase | undefined>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _browser = inject(BrowserService);\n\n  private get _transform(): ITransformModel {\n    return this._store.fCanvas!.transform;\n  }\n\n  private get _fHost(): HTMLElement {\n    return this._store.fFlow!.hostElement;\n  }\n\n  private get _fNodes(): FNodeBase[] {\n    return this._store.fNodes;\n  }\n\n  private get _fSnapConnection(): FSnapConnectionComponent | undefined {\n    return this._store.fSnapConnection as FSnapConnectionComponent;\n  }\n\n  public handle(\n    payload: FindConnectableConnectorUsingPriorityAndPositionRequest,\n  ): FConnectorBase | undefined {\n    const connectors = this._findConnectorAtPosition(payload);\n\n    return connectors.length > 0 ? connectors[0] : undefined;\n  }\n\n  private _findConnectorAtPosition(\n    request: FindConnectableConnectorUsingPriorityAndPositionRequest,\n  ): FConnectorBase[] {\n    const result: FConnectorBase[] = [];\n\n    result.push(...this._filterConnectorsThatLocatedAtPosition(request));\n\n    // Closest connector is only added if snap connection is enabled and there is a closest connector found\n    // Closest connector has more priority than the first connectable input of the node at position\n    const closestConnector = this._isSnapConnectionEnabledAndHasClosestConnector(request);\n    if (closestConnector) {\n      result.unshift(closestConnector.fConnector);\n    }\n\n    const fInput = this._getFirstConnectableConnectorOfNodeAtPosition(request);\n    if (fInput) {\n      result.push(fInput);\n    }\n\n    return result;\n  }\n\n  private _filterConnectorsThatLocatedAtPosition(\n    request: FindConnectableConnectorUsingPriorityAndPositionRequest,\n  ): FConnectorBase[] {\n    return request.connectableConnectors\n      .filter((x) => {\n        return RectExtensions.isIncludePoint(\n          x.fRect,\n          this._getPointInFlow(request.pointerPosition),\n        );\n      })\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)\n      .sub(this._transform.position)\n      .div(this._transform.scale);\n  }\n\n  private _isSnapConnectionEnabledAndHasClosestConnector(\n    request: FindConnectableConnectorUsingPriorityAndPositionRequest,\n  ): IClosestConnector | undefined {\n    if (!this._fSnapConnection) {\n      return undefined;\n    }\n\n    const closestConnector = this._mediator.execute<IClosestConnector | undefined>(\n      new CalculateClosestConnectorRequest(\n        this._getPointInFlow(request.pointerPosition),\n        request.connectableConnectors,\n      ),\n    );\n\n    return this._isValidClosestInput(closestConnector) ? closestConnector : undefined;\n  }\n\n  private _isValidClosestInput(closestConnector: IClosestConnector | undefined): boolean {\n    return !!closestConnector && closestConnector.distance < this._fSnapConnection!.fSnapThreshold;\n  }\n\n  //if node placed in position and fConnectOnNode is true, return the first connectable connector of the node\n  private _getFirstConnectableConnectorOfNodeAtPosition(\n    request: FindConnectableConnectorUsingPriorityAndPositionRequest,\n  ): FConnectorBase | undefined {\n    return this._getElementsFromPoint(request.pointerPosition)\n      .map((x) => this._findConnectableNode(x))\n      .filter((x) => !!x)\n      .map((x) => this._findFirstConnectableConnectorOfNode(request.connectableConnectors, x))\n      .find((x) => !!x);\n  }\n\n  private _getElementsFromPoint(position: IPoint): HTMLElement[] {\n    return this._browser.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 _findFirstConnectableConnectorOfNode(\n    connectableInputs: IConnectorAndRect[],\n    fNode: FNodeBase,\n  ): FConnectorBase | undefined {\n    return connectableInputs.find((x) => x.fConnector.fNodeId === fNode.fId())?.fConnector;\n  }\n}\n","import { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\nimport { IPoint } from '@foblex/2d';\n\nexport class CalculateTargetConnectorsToConnectRequest {\n  static readonly fToken = Symbol('CalculateTargetConnectorsToConnectRequest');\n  constructor(\n    public readonly sourceConnector: FNodeOutputBase | FNodeOutletBase,\n    public readonly pointerPosition: IPoint,\n  ) {}\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class GetConnectorAndRectRequest {\n  static readonly fToken = Symbol('GetConnectorAndRectRequest');\n  constructor(public readonly connector: FConnectorBase) {}\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/**\n * Execution that retrieves a connector and its rectangle.\n */\n@Injectable()\n@FExecutionRegister(GetConnectorAndRectRequest)\nexport class GetConnectorAndRect\n  implements IExecution<GetConnectorAndRectRequest, IConnectorAndRect>\n{\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ connector }: GetConnectorAndRectRequest): IConnectorAndRect {\n    return {\n      fConnector: connector,\n      fRect: this._getConnectorRect(connector),\n    };\n  }\n\n  private _getConnectorRect(fConnector: FConnectorBase): IRoundedRect {\n    return this._mediator.execute<IRoundedRect>(\n      new GetNormalizedConnectorRectRequest(fConnector.hostElement),\n    );\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class AddNodeToStoreRequest {\n  static readonly fToken = Symbol('AddNodeToStoreRequest');\n  constructor(public readonly nodeOrGroup: FNodeBase) {}\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/**\n * Execution that adds a Node to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddNodeToStoreRequest)\nexport class AddNodeToStore implements IExecution<AddNodeToStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: AddNodeToStoreRequest): void {\n    this._store.addComponent(this._store.fNodes, request.nodeOrGroup);\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class CalculateInputConnectionsRequest {\n  static readonly fToken = Symbol('CalculateInputConnectionsRequest');\n  constructor(public readonly nodeOrGroup: FNodeBase) {}\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/**\n * Execution that calculates input connections for a given FNode.\n */\n@Injectable()\n@FExecutionRegister(CalculateInputConnectionsRequest)\nexport class CalculateInputConnections\n  implements IExecution<CalculateInputConnectionsRequest, FConnectionBase[]>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ nodeOrGroup }: CalculateInputConnectionsRequest): FConnectionBase[] {\n    const ids = this._collectInputIds(nodeOrGroup);\n\n    return this._collectConnections(ids);\n  }\n\n  private _collectInputIds(nodeOrGroup: FNodeBase): Set<string> {\n    const ids = new Set<string>();\n    for (const connector of this._store.fInputs) {\n      if (nodeOrGroup.isContains(connector.hostElement)) {\n        ids.add(connector.fId());\n      }\n    }\n\n    return ids;\n  }\n\n  private _collectConnections(ids: Set<string>): FConnectionBase[] {\n    const result: FConnectionBase[] = [];\n    for (const conn of this._store.fConnections) {\n      if (ids.has(conn.fInputId())) {\n        result.push(conn);\n      }\n    }\n\n    return result;\n  }\n}\n","import { FConnectorBase } from '../../../../f-connectors';\nimport { IPoint } from '@foblex/2d';\n\nexport class CalculateConnectableSideByConnectedPositionsRequest {\n  static readonly fToken = Symbol('CalculateConnectableSideByConnectedPositionsRequest');\n  constructor(\n    public readonly connector: FConnectorBase,\n    public readonly pointerPosition?: IPoint,\n  ) {}\n}\n","/**\n * Converts allowed sides array to a compact bit mask.\n * If not provided or empty -> all sides allowed.\n */\nimport { EFConnectableSide } from '../../../../f-connectors';\n\nconst SNAP_EPS = 2;\n\nenum SideMask {\n  NONE = 0,\n  LEFT = 1 << 0,\n  RIGHT = 1 << 1,\n  TOP = 1 << 2,\n  BOTTOM = 1 << 3,\n  ALL = (1 << 4) - 1,\n}\n\n/**\n * Determines final side using ideal side first; if disallowed, picks best fallback.\n * Inputs are numbers to avoid object wrappers on hot path.\n */\nexport function determineSide(\n  selfX: number,\n  selfY: number,\n  avgX: number,\n  avgY: number,\n  allowed?: EFConnectableSide[],\n): EFConnectableSide {\n  const allowedMask = _toSideMask(allowed);\n\n  const dx = avgX - selfX;\n  const dy = avgY - selfY;\n\n  const ideal = _pickIdealSide(dx, dy);\n\n  if (_isAllowed(ideal, allowedMask)) {\n    return ideal;\n  }\n\n  return _pickFallbackSide(dx, dy, allowedMask, ideal);\n}\n\n/**\n * Converts allowed sides array to a compact bit mask.\n * If not provided or empty -> all sides allowed.\n */\nfunction _toSideMask(allowed?: EFConnectableSide[]): SideMask {\n  if (!allowed || allowed.length === 0) return SideMask.ALL;\n\n  let mask = SideMask.NONE;\n  for (let i = 0; i < allowed.length; i++) {\n    switch (allowed[i]) {\n      case EFConnectableSide.LEFT:\n        mask |= SideMask.LEFT;\n        break;\n      case EFConnectableSide.RIGHT:\n        mask |= SideMask.RIGHT;\n        break;\n      case EFConnectableSide.TOP:\n        mask |= SideMask.TOP;\n        break;\n      case EFConnectableSide.BOTTOM:\n        mask |= SideMask.BOTTOM;\n        break;\n    }\n  }\n\n  return mask || SideMask.ALL;\n}\n\n/**\n * Picks the \"ideal\" side based on vector (dx, dy) with hysteresis.\n */\nfunction _pickIdealSide(dx: number, dy: number): EFConnectableSide {\n  const ax = dx < 0 ? -dx : dx;\n  const ay = dy < 0 ? -dy : dy;\n\n  if (ax - ay > SNAP_EPS) {\n    return dx < 0 ? EFConnectableSide.LEFT : EFConnectableSide.RIGHT;\n  }\n  if (ay - ax > SNAP_EPS) {\n    return dy < 0 ? EFConnectableSide.TOP : EFConnectableSide.BOTTOM;\n  }\n\n  return dy < 0 ? EFConnectableSide.TOP : EFConnectableSide.BOTTOM;\n}\n\n/**\n * Quick membership check via bit mask.\n */\nfunction _isAllowed(side: EFConnectableSide, mask: SideMask): boolean {\n  switch (side) {\n    case EFConnectableSide.LEFT:\n      return (mask & SideMask.LEFT) !== 0;\n    case EFConnectableSide.RIGHT:\n      return (mask & SideMask.RIGHT) !== 0;\n    case EFConnectableSide.TOP:\n      return (mask & SideMask.TOP) !== 0;\n    case EFConnectableSide.BOTTOM:\n      return (mask & SideMask.BOTTOM) !== 0;\n    default:\n      return true;\n  }\n}\n\n/**\n * Picks the best available side from allowed mask by maximizing directional score.\n * No intermediate objects, constant-time operations.\n */\nfunction _pickFallbackSide(\n  dx: number,\n  dy: number,\n  allowedMask: SideMask,\n  ideal: EFConnectableSide,\n): EFConnectableSide {\n  let bestSide: EFConnectableSide = ideal;\n  let bestScore = -Infinity;\n\n  if (allowedMask & SideMask.RIGHT) {\n    const s = dx;\n    if (s > bestScore) {\n      bestScore = s;\n      bestSide = EFConnectableSide.RIGHT;\n    }\n  }\n  if (allowedMask & SideMask.LEFT) {\n    const s = -dx;\n    if (s > bestScore) {\n      bestScore = s;\n      bestSide = EFConnectableSide.LEFT;\n    }\n  }\n  if (allowedMask & SideMask.BOTTOM) {\n    const s = dy;\n    if (s > bestScore) {\n      bestScore = s;\n      bestSide = EFConnectableSide.BOTTOM;\n    }\n  }\n  if (allowedMask & SideMask.TOP) {\n    const s = -dy;\n    if (s > bestScore) {\n      bestScore = s;\n      bestSide = EFConnectableSide.TOP;\n    }\n  }\n\n  return bestSide;\n}\n","import { EFConnectableSide } from '../../../../f-connectors';\n\n/**\n * Checks if the given side is one of the calculate modes.\n * @param side The connectable side to check.\n * @returns True if the side is a calculate mode, false otherwise.\n */\nexport function isCalculateMode(side: EFConnectableSide): boolean {\n  return (\n    side === EFConnectableSide.CALCULATE ||\n    side === EFConnectableSide.CALCULATE_HORIZONTAL ||\n    side === EFConnectableSide.CALCULATE_VERTICAL\n  );\n}\n","import { EFConnectableSide } from '../../../../f-connectors';\n\nexport const CALCULATABLE_SIDES = {\n  [EFConnectableSide.CALCULATE]: [\n    EFConnectableSide.TOP,\n    EFConnectableSide.BOTTOM,\n    EFConnectableSide.LEFT,\n    EFConnectableSide.RIGHT,\n  ],\n  [EFConnectableSide.CALCULATE_HORIZONTAL]: [EFConnectableSide.LEFT, EFConnectableSide.RIGHT],\n  [EFConnectableSide.CALCULATE_VERTICAL]: [EFConnectableSide.TOP, EFConnectableSide.BOTTOM],\n};\n","export class GetNormalizedElementRectRequest {\n  static readonly fToken = Symbol('GetNormalizedElementRectRequest');\n\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,\n  IRect,\n} from '@foblex/2d';\nimport { GetNormalizedPointRequest } from '../get-normalized-point';\n\n/**\n * Execution that retrieves the normalized rectangle of an element.\n * It calculates the rectangle based on the element's position and size,\n * adjusting for the canvas transformation and element offsets.\n */\n@Injectable()\n@FExecutionRegister(GetNormalizedElementRectRequest)\nexport class GetNormalizedElementRectExecution\n  implements IExecution<GetNormalizedElementRectRequest, IRect>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  private get _transform(): ITransformModel {\n    return this._store.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\n    return RoundedRect.fromCenter(unscaledRect, offsetSize.width, offsetSize.height);\n  }\n\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._mediator.execute(new GetNormalizedPointRequest(rect));\n  }\n\n  private _unscaleSize(rect: IRoundedRect): ISize {\n    return SizeExtensions.initialize(\n      rect.width / this._transform.scale,\n      rect.height / this._transform.scale,\n    );\n  }\n\n  private _getUnscaledRect(position: IPoint, size: ISize, rect: IRoundedRect): IRoundedRect {\n    return new RoundedRect(\n      position.x,\n      position.y,\n      size.width,\n      size.height,\n      rect.radius1,\n      rect.radius2,\n      rect.radius3,\n      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 { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { CalculateConnectableSideByConnectedPositionsRequest } from './calculate-connectable-side-by-connected-positions-request';\nimport { EFConnectableSide, FConnectorBase } from '../../../../f-connectors';\nimport { IPoint, IRoundedRect } from '@foblex/2d';\nimport { determineSide } from '../utils';\nimport { CALCULATABLE_SIDES } from '../constants';\nimport { TCalculateMode } from '../models';\nimport { GetNormalizedElementRectRequest } from '../../../get-normalized-element-rect';\n\n/**\n * Execution that calculates the connectable side for a connector\n * based on positions of connected connectors and allowed sides.\n */\n@Injectable()\n@FExecutionRegister(CalculateConnectableSideByConnectedPositionsRequest)\nexport class CalculateConnectableSideByConnectedPositions\n  implements IExecution<CalculateConnectableSideByConnectedPositionsRequest, EFConnectableSide>\n{\n  private readonly _mediator = inject(FMediator);\n\n  /**\n   * Entry point (hot path). Avoids intermediate arrays and redundant allocations.\n   *\n   * @param request - Contains the connector and optionally allowed sides.\n   * @returns {EFConnectableSide} - The chosen connectable side.\n   */\n  public handle({\n    connector,\n    pointerPosition,\n  }: CalculateConnectableSideByConnectedPositionsRequest): EFConnectableSide {\n    const mode = connector.userFConnectableSide as TCalculateMode;\n    const selfCenter = this._getConnectorRect(connector.hostElement).gravityCenter;\n    const acc = this._accumulateConnectedCenters(\n      connector.hostElement,\n      connector.toConnector,\n      pointerPosition,\n    );\n\n    const avgX = acc.sumX / acc.count;\n    const avgY = acc.sumY / acc.count;\n\n    return determineSide(selfCenter.x, selfCenter.y, avgX, avgY, CALCULATABLE_SIDES[mode]);\n  }\n\n  private _accumulateConnectedCenters(\n    selfHost: HTMLElement | SVGElement,\n    connected: FConnectorBase[] | null | undefined,\n    pointerPosition: IPoint | undefined,\n  ): { sumX: number; sumY: number; count: number } {\n    let sumX = pointerPosition?.x || 0;\n    let sumY = pointerPosition?.y || 0;\n    let count = pointerPosition ? 1 : 0;\n\n    if (connected && connected.length) {\n      for (let i = 0; i < connected.length; i++) {\n        const el = connected[i].hostElement;\n        if (el === selfHost) continue;\n\n        const c = this._getConnectorRect(el).gravityCenter;\n        sumX += c.x;\n        sumY += c.y;\n        count++;\n      }\n    }\n\n    return { sumX, sumY, count };\n  }\n\n  private _getConnectorRect(element: HTMLElement | SVGElement): IRoundedRect {\n    return this._mediator.execute<IRoundedRect>(new GetNormalizedElementRectRequest(element));\n  }\n}\n","import { FConnectorBase } from '../../../../f-connectors';\n\nexport class CalculateConnectableSideByInternalPositionRequest {\n  static readonly fToken = Symbol('CalculateConnectableSideByInternalPositionRequest');\n  constructor(public readonly connector: FConnectorBase) {}\n}\n","import { FDraggableBase } from '../../../f-draggable';\n\nexport class AddDndToStoreRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that adds a drag and drop directive to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddDndToStoreRequest)\nexport class AddDndToStoreExecution implements IExecution<AddDndToStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: AddDndToStoreRequest): void {\n    this._store.fDraggable = request.fComponent;\n  }\n}\n","export class EmitSelectionChangeEventRequest {\n  static readonly fToken = Symbol('EmitSelectionChangeEventRequest');\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class GetNormalizedParentNodeRectRequest {\n  static readonly fToken = Symbol('GetNormalizedParentNodeRectRequest');\n\n  constructor(\n    public readonly nodeOrGroup: 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 _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ nodeOrGroup }: GetNormalizedParentNodeRectRequest): IRect {\n    let result = RectExtensions.initialize(-Infinity, -Infinity, Infinity, Infinity);\n    const parentNode = this._getNode(nodeOrGroup.fParentId());\n    if (parentNode) {\n      result = this._getParentRect(parentNode);\n    }\n\n    return result;\n  }\n\n  private _getNode(fId?: string | null): FNodeBase | undefined {\n    return this._store.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(nodeOrGroup: FNodeBase): IRect {\n    const rect = this._getNodeRect(nodeOrGroup);\n    const padding = this._getNodePadding(nodeOrGroup, rect);\n\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(nodeOrGroup: FNodeBase): IRect {\n    return this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(nodeOrGroup.hostElement));\n  }\n\n  private _getNodePadding(nodeOrGroup: FNodeBase, rect: IRect): [ number, number, number, number ] {\n    return this._mediator.execute<[ number, number, number, number ]>(new GetNodePaddingRequest(nodeOrGroup, rect));\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class IsArrayHasParentNodeRequest {\n  static readonly fToken = Symbol('IsArrayHasParentNodeRequest');\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  static readonly fToken = Symbol('IsConnectionUnderNodeRequest');\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 } from '../../../domain';\n\n@Injectable()\n@FExecutionRegister(IsConnectionUnderNodeRequest)\nexport class IsConnectionUnderNodeExecution\n  implements IExecution<IsConnectionUnderNodeRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: IsConnectionUnderNodeRequest): void {\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._store.fOutputs.filter((x) => {\n      return fNode.isContains(x.hostElement) && x.canBeConnected;\n    });\n  }\n\n  private _getInputConnectors(fNode: FNodeBase): FConnectorBase[] {\n    return this._store.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\n    return this._store.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\n    return this._store.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._mediator.execute<IRoundedRect>(\n      new GetNormalizedConnectorRectRequest(fNode.hostElement),\n    );\n\n    return this._store.fConnections.filter((x) =>\n      this._isConnectionHasIntersectionsWithNode(x, fNodeRect),\n    );\n  }\n\n  private _isConnectionHasIntersectionsWithNode(\n    fConnection: FConnectionBase,\n    fNodeRect: IRoundedRect,\n  ): boolean {\n    return (\n      GetIntersections.getRoundedRectIntersectionsWithSVGPath(\n        fConnection.fPath().hostElement,\n        fNodeRect,\n      ).length > 0\n    );\n  }\n\n  private _emitNodeIntersectedWithConnections(\n    fNode: FNodeBase,\n    fConnections: FConnectionBase[],\n  ): void {\n    this._store.fDraggable?.fNodeIntersectedWithConnections.emit(\n      new FNodeIntersectedWithConnections(\n        fNode.fId(),\n        fConnections.map((x) => x.fId()),\n      ),\n    );\n  }\n}\n","export class FDragStartedEvent {\n  constructor(\n    public fEventType: string,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public fData?: any,\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  static readonly fToken = Symbol('FCanvasMoveFinalizeRequest');\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  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  public fEventType = 'canvas-move';\n\n  private readonly _store: FComponentsStore;\n  private _onPointerDownPosition: IPoint = PointExtensions.initialize();\n\n  constructor(_injector: Injector) {\n    this._store = _injector.get(FComponentsStore);\n    this._store.fCanvas?.hostElement.classList.add('canvas-dragging');\n  }\n\n  public prepareDragSequence(): void {\n    this._onPointerDownPosition = this._store.fCanvas!.transform.position;\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    this._store.fCanvas!.setPosition(Point.fromPoint(this._onPointerDownPosition).add(difference));\n    this._store.fCanvas!.redraw();\n  }\n\n  public onPointerUp(): void {\n    this._store.fCanvas!.emitCanvasChangeEvent();\n    this._store.fCanvas?.hostElement.classList.remove('canvas-dragging');\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  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(_request: FCanvasMoveFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    this._dragContext.draggableItems.forEach((x) => x.onPointerUp?.());\n  }\n\n  private _isValid(): boolean {\n    return this._dragContext.draggableItems.some((x) => x instanceof FCanvasDragHandler);\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport { IPointerEvent } from \"../../../drag-toolkit\";\n\nexport class FCanvasMovePreparationRequest {\n  static readonly fToken = Symbol('FCanvasMovePreparationRequest');\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 _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _injector = inject(Injector);\n\n  private get _fHost(): HTMLElement {\n    return this._store.fFlow!.hostElement;\n  }\n\n  public handle(request: FCanvasMovePreparationRequest): void {\n    if (!this._isValid(request) || !this._isValidTrigger(request)) {\n      return;\n    }\n    this._dragContext.onPointerDownScale = 1;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost);\n    this._dragContext.draggableItems = [ new FCanvasDragHandler(this._injector) ];\n  }\n\n  private _isValid(request: FCanvasMovePreparationRequest): boolean {\n    return this._dragContext.isEmpty() &&\n      (this._isBackgroundElement(request.event.targetElement) || this._isDragOnHost(request.event.targetElement));\n  }\n\n  private _isBackgroundElement(targetElement: HTMLElement): boolean | undefined {\n    return this._store.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._store.fNodes\n      .find(x => x.isContains(targetElement));\n    if (result && result.fDraggingDisabled()) {\n      result = undefined;\n    }\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  static readonly fToken = Symbol('FCreateConnectionFinalizeRequest');\n  constructor(\n    public event: IPointerEvent,\n  ) {\n  }\n}\n","import { FNodeOutletBase } from '../../../../f-connectors';\n\nexport class GetFirstConnectableOutputRequest {\n  static readonly fToken = Symbol('GetFirstConnectableOutputRequest');\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\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\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  CalculateClosestConnectorRequest,\n  CalculateTargetConnectorsToConnectRequest,\n  CalculateConnectionLineByBehaviorRequest,\n  GetConnectorAndRectRequest,\n  IConnectorAndRect,\n  IClosestConnector,\n  MarkConnectableConnectorsRequest,\n  UnmarkConnectableConnectorsRequest,\n} from '../../../domain';\nimport { FConnectionForCreateComponent, FSnapConnectionComponent } from '../../../f-connection';\nimport { EFConnectableSide, FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  RoundedRect,\n  ILine,\n  IPoint,\n  PointExtensions,\n  RectExtensions,\n  IRoundedRect,\n} 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  public fEventType = 'create-connection';\n  public fData: unknown;\n\n  private readonly _result: FDragHandlerResult<IFCreateConnectionDragResult>;\n  private readonly _mediator: FMediator;\n  private readonly _store: FComponentsStore;\n\n  private readonly _toConnectorRect = new RoundedRect();\n\n  private get _connection(): FConnectionForCreateComponent {\n    return this._store.fTempConnection as FConnectionForCreateComponent;\n  }\n\n  private get _snapConnection(): FSnapConnectionComponent | undefined {\n    return this._store.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._result = _injector.get(FDragHandlerResult);\n    this._mediator = _injector.get(FMediator);\n    this._store = _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._fOutputWithRect = this._mediator.execute<IConnectorAndRect>(\n      new GetConnectorAndRectRequest(this._fOutputOrOutlet),\n    );\n    this._getAndMarkCanBeConnectedInputs();\n    this._initializeSnapConnection();\n    this._initializeConnectionForCreate();\n\n    this._connection.show();\n    this.onPointerMove(PointExtensions.initialize());\n\n    this._result.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._mediator.execute<IConnectorAndRect[]>(\n      new CalculateTargetConnectorsToConnectRequest(\n        this._fOutputOrOutlet,\n        this._fOutputWithRect.fRect.gravityCenter,\n      ),\n    );\n\n    this._mediator.execute(\n      new MarkConnectableConnectorsRequest(this._canBeConnectedInputs.map((x) => x.fConnector)),\n    );\n  }\n\n  private _initializeSnapConnection(): void {\n    if (!this._snapConnection) {\n      return;\n    }\n    this._snapConnection.fOutputId.set(this._fOutputOrOutlet.fId());\n    this._snapConnection.initialize();\n  }\n\n  private _initializeConnectionForCreate(): void {\n    this._connection.fOutputId.set(this._fOutputOrOutlet.fId());\n    this._connection.initialize();\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const closestInput = this._findClosestInput(difference);\n\n    this._drawConnectionForCreate(\n      this._toConnectorRect.addPoint(difference),\n      closestInput?.fConnector.fConnectableSide || EFConnectableSide.TOP,\n    );\n\n    if (this._snapConnection) {\n      this._drawSnapConnection(this._getClosestInputForSnapConnection(closestInput));\n    }\n  }\n\n  private _drawConnectionForCreate(toConnectorRect: IRoundedRect, fSide: EFConnectableSide): void {\n    const line = this._mediator.execute<ILine>(\n      new CalculateConnectionLineByBehaviorRequest(\n        this._fOutputWithRect.fRect,\n        toConnectorRect,\n        this._connection,\n        this._fOutputWithRect.fConnector.fConnectableSide,\n        fSide,\n      ),\n    );\n\n    this._connection.setLine(line);\n    this._connection.redraw();\n  }\n\n  private _drawSnapConnection(fClosestInput: IClosestConnector | undefined): void {\n    if (fClosestInput) {\n      const line = this._mediator.execute<ILine>(\n        new CalculateConnectionLineByBehaviorRequest(\n          this._fOutputWithRect.fRect,\n          fClosestInput.fRect,\n          this._snapConnection!,\n          this._fOutputWithRect.fConnector.fConnectableSide,\n          fClosestInput.fConnector.fConnectableSide,\n        ),\n      );\n      this._snapConnection?.show();\n      this._snapConnection?.setLine(line);\n      this._snapConnection?.redraw();\n    } else {\n      this._snapConnection?.hide();\n    }\n  }\n\n  private _findClosestInput(difference: IPoint): IClosestConnector | undefined {\n    return this._mediator.execute<IClosestConnector | undefined>(\n      new CalculateClosestConnectorRequest(\n        this._toConnectorRect.addPoint(difference),\n        this._canBeConnectedInputs,\n      ),\n    );\n  }\n\n  private _getClosestInputForSnapConnection(\n    fClosestInput: IClosestConnector | undefined,\n  ): IClosestConnector | undefined {\n    return fClosestInput && fClosestInput.distance < this._snapConnection!.fSnapThreshold\n      ? fClosestInput\n      : undefined;\n  }\n\n  public onPointerUp(): void {\n    this._connection.redraw();\n    this._connection.hide();\n    this._snapConnection?.hide();\n\n    this._mediator.execute(\n      new UnmarkConnectableConnectorsRequest(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 {\n  FConnectorBase,\n  FNodeOutletBase,\n  FNodeOutputBase,\n  isNodeOutlet,\n} 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 { FDragHandlerResult } from '../../../f-drag-handler';\nimport { IFCreateConnectionDragResult } from '../i-f-create-connection-drag-result';\nimport { IPointerEvent } from '../../../../drag-toolkit';\nimport { FindConnectableConnectorUsingPriorityAndPositionRequest } from '../../../../domain';\n\n@Injectable()\n@FExecutionRegister(FCreateConnectionFinalizeRequest)\nexport class FCreateConnectionFinalizeExecution\n  implements IHandler<FCreateConnectionFinalizeRequest, void>\n{\n  private readonly _result: FDragHandlerResult<IFCreateConnectionDragResult> =\n    inject(FDragHandlerResult);\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  private get _dragHandler(): FCreateConnectionDragHandler {\n    return this._dragContext.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._dragHandler.onPointerUp();\n  }\n\n  private _isValid(): boolean {\n    return this._dragContext.draggableItems.some((x) => x instanceof FCreateConnectionDragHandler);\n  }\n\n  private _getTargetOutput(output: FConnectorBase | undefined): FConnectorBase {\n    if (!output) {\n      throw new Error(\n        `Output with fOutputId ${this._result.getData().fOutputId} not found. Make sure there is no f-connection to a non-existent fOutput.`,\n      );\n    }\n\n    return isNodeOutlet(output.hostElement)\n      ? this._mediator.execute<FNodeOutputBase>(\n          new GetFirstConnectableOutputRequest(output as FNodeOutletBase),\n        )\n      : output;\n  }\n\n  private _getOutput(): FConnectorBase | undefined {\n    return this._store.fOutputs.find((x) => x.fId() === this._result.getData().fOutputId);\n  }\n\n  private _getOutlet(): FConnectorBase | undefined {\n    return this._store.fOutlets.find((x) => x.fId() === this._result.getData().fOutputId);\n  }\n\n  private _emitEvent(event: IPointerEvent): void {\n    this._store.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._mediator.execute<FConnectorBase | undefined>(\n      new FindConnectableConnectorUsingPriorityAndPositionRequest(\n        event.getPosition(),\n        this._result.getData().canBeConnectedInputs,\n      ),\n    );\n  }\n}\n","import { IPoint } from '@foblex/2d';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../../../f-connectors';\n\nexport class FCreateConnectionDragHandlerPreparationRequest {\n  static readonly fToken = Symbol('FCreateConnectionDragHandlerPreparationRequest');\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 _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _injector = inject(Injector);\n\n  private get _fHost(): HTMLElement {\n    return this._store.fFlow!.hostElement;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._store.fCanvas!.transform;\n  }\n\n  public handle(request: FCreateConnectionDragHandlerPreparationRequest): void {\n    this._dragContext.onPointerDownScale = this._transform.scale;\n    const positionRelativeToFlowComponent = Point.fromPoint(request.onPointerDownPosition)\n      .elementTransform(this._fHost).div(this._transform.scale);\n    this._dragContext.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._dragContext.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  static readonly fToken = Symbol('FCreateConnectionFromOutletPreparationRequest');\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 _store = 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._store.fOutlets\n      .find((x) => fNode.isContains(x.hostElement));\n    if (!result) {\n      throw new Error('Outlet not found');\n    }\n\n    return result as FNodeOutletBase;\n  }\n\n  private _getNodeOutputs(fNode: FNodeBase): FConnectorBase[] {\n    return this._store.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 CreateConnectionFromOutputPreparationRequest {\n  static readonly fToken = Symbol('CreateConnectionFromOutputPreparationRequest');\n  constructor(\n    public readonly event: IPointerEvent,\n    public readonly node: FNodeBase,\n  ) {}\n}\n","import { IHandler } from '@foblex/mediator';\nimport { inject, Injectable } from '@angular/core';\nimport { CreateConnectionFromOutputPreparationRequest } from './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(CreateConnectionFromOutputPreparationRequest)\nexport class CreateConnectionFromOutputPreparation\n  implements IHandler<CreateConnectionFromOutputPreparationRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: CreateConnectionFromOutputPreparationRequest): void {\n    if (!this._isValid(request)) {\n      return;\n    }\n    const fOutput = this._getOutput(request.event.targetElement);\n\n    if (fOutput.canBeConnected) {\n      this._mediator.execute(\n        new FCreateConnectionDragHandlerPreparationRequest(request.event.getPosition(), fOutput),\n      );\n    }\n  }\n\n  private _isValid(request: CreateConnectionFromOutputPreparationRequest): boolean {\n    return this._isNodeOutput(request.event.targetElement, request.node);\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._store.fOutlets.filter((x) => node.isContains(x.hostElement));\n  }\n\n  private _getOutput(element: Element): FNodeOutputBase {\n    const result = this._store.fOutputs.find((x) => x.hostElement.contains(element));\n    if (!result) {\n      throw new Error('Output not found');\n    }\n\n    return result as FNodeOutputBase;\n  }\n}\n","import { FEventTrigger } from '../../../../domain';\nimport { IPointerEvent } from '../../../../drag-toolkit';\n\nexport class CreateConnectionPreparationRequest {\n  static readonly fToken = Symbol('CreateConnectionPreparationRequest');\n  constructor(\n    public readonly event: IPointerEvent,\n    public readonly fTrigger: FEventTrigger,\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 { CreateConnectionPreparationRequest } from './create-connection-preparation-request';\nimport { FExecutionRegister, FMediator } from '@foblex/mediator';\nimport { FCreateConnectionFromOutletPreparationRequest } from './from-outlet-preparation';\nimport { CreateConnectionFromOutputPreparationRequest } 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// import { IPoint } from '@foblex/2d';\n// import { BrowserService } from '@foblex/platform';\n\n@Injectable()\n@FExecutionRegister(CreateConnectionPreparationRequest)\nexport class CreateConnectionPreparation\n  implements IHandler<CreateConnectionPreparationRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  // private readonly _browser = inject(BrowserService);\n\n  private _node: FNodeBase | undefined;\n\n  public handle(request: CreateConnectionPreparationRequest): void {\n    if (!this._isValid(request) || !this._isValidTrigger(request)) {\n      return;\n    }\n    // const elements = this._elementsFromPoint(request.event.getPosition());\n    //\n    // const outlet = this._findOutlet(elements);\n    // const output = this._findOutput(elements);\n\n    if (isNodeOutlet(request.event.targetElement)) {\n      this._mediator.execute<void>(\n        new FCreateConnectionFromOutletPreparationRequest(request.event, this._node!),\n      );\n    } else if (isNodeOutput(request.event.targetElement)) {\n      this._mediator.execute<void>(\n        new CreateConnectionFromOutputPreparationRequest(request.event, this._node!),\n      );\n    }\n  }\n\n  private _isValid(request: CreateConnectionPreparationRequest): boolean {\n    return !!this._getNode(request.event) && this._isValidConditions();\n  }\n\n  private _getNode(event: IPointerEvent): FNodeBase | undefined {\n    this._node = this._store.fNodes.find((n) => n.isContains(event.targetElement));\n\n    return this._node;\n  }\n\n  private _isValidConditions(): boolean {\n    return this._dragContext.isEmpty() && !!this._store.fTempConnection;\n  }\n\n  private _isValidTrigger(request: FReassignConnectionPreparationRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n\n  // private _elementsFromPoint(position: IPoint): HTMLElement[] {\n  //   return this._browser.document.elementsFromPoint(position.x, position.y) as HTMLElement[];\n  // }\n  //\n  // private _findOutlet(elements: HTMLElement[]): HTMLElement | undefined {\n  //   return elements.find((el) => isNodeOutlet(el));\n  // }\n  //\n  // private _findOutput(elements: HTMLElement[]): HTMLElement | undefined {\n  //   return elements.find((el) => isNodeOutput(el));\n  // }\n}\n","import { IPointerEvent } from \"../../../../drag-toolkit\";\n\nexport class FReassignConnectionFinalizeRequest {\n  static readonly fToken = Symbol('FReassignConnectionFinalizeRequest');\n  constructor(\n    public event: IPointerEvent,\n  ) {\n  }\n}\n","import { IPoint, RectExtensions, RoundedRect } from \"@foblex/2d\";\nimport { IClosestConnector, IConnectorAndRect } from \"../../../domain\";\nimport { FSnapConnectionComponent } from \"../../../f-connection\";\n\nexport interface IFReassignHandler {\n\n  getConnectableConnectors(): IConnectorAndRect[];\n\n  markConnectableConnector(): void;\n\n  initializeSnapConnection(snapConnection: FSnapConnectionComponent | undefined): void;\n\n  onPointerMove(difference: IPoint): void;\n\n  onPointerUp(): void;\n}\n\nexport function isClosestConnectorInsideSnapThreshold(fClosestConnector: IClosestConnector | undefined, snapConnection: FSnapConnectionComponent): IClosestConnector | undefined {\n  return fClosestConnector && fClosestConnector.distance < snapConnection.fSnapThreshold ? fClosestConnector : undefined;\n}\n\nexport function roundedRectFromPoint(point: IPoint) {\n  return RoundedRect.fromRect(RectExtensions.initialize(point.x, point.y))\n}\n","import { FMediator } from '@foblex/mediator';\nimport {\n  CalculateConnectionLineByBehaviorRequest,\n  CalculateClosestConnectorRequest,\n  CalculateTargetConnectorsToConnectRequest,\n  IClosestConnector,\n  IConnectorAndRect,\n  MarkConnectableConnectorsRequest,\n  UnmarkConnectableConnectorsRequest,\n} from '../../../domain';\nimport {\n  EFConnectableSide,\n  FNodeInputDirective,\n  FNodeOutputDirective,\n} from '../../../f-connectors';\nimport { FConnectionBase, FSnapConnectionComponent } from '../../../f-connection';\nimport { ILine, IPoint, IRoundedRect, RoundedRect } from '@foblex/2d';\nimport {\n  IFReassignHandler,\n  isClosestConnectorInsideSnapThreshold,\n  roundedRectFromPoint,\n} from './i-f-reassign-handler';\n\nexport class FReassignTargetDragHandler implements IFReassignHandler {\n  private _connectableConnectors: IConnectorAndRect[] = [];\n\n  private get _sourceConnector(): FNodeOutputDirective {\n    return this._sourceConnectorAndRect.fConnector as FNodeOutputDirective;\n  }\n\n  private get _sourceConnectorRect(): IRoundedRect {\n    return this._sourceConnectorAndRect.fRect;\n  }\n\n  private get _targetConnector(): FNodeInputDirective {\n    return this._targetConnectorAndRect.fConnector as FNodeInputDirective;\n  }\n\n  private readonly _connectorRect!: RoundedRect;\n\n  private _snapConnection: FSnapConnectionComponent | undefined;\n\n  constructor(\n    private readonly _mediator: FMediator,\n    private readonly _connection: FConnectionBase,\n    private readonly _sourceConnectorAndRect: IConnectorAndRect,\n    private readonly _targetConnectorAndRect: IConnectorAndRect,\n  ) {\n    this._connectorRect = roundedRectFromPoint(this._connection.line.point2);\n  }\n\n  public getConnectableConnectors(): IConnectorAndRect[] {\n    return this._connectableConnectors;\n  }\n\n  public markConnectableConnector(): void {\n    this._connectableConnectors = this._mediator.execute<IConnectorAndRect[]>(\n      new CalculateTargetConnectorsToConnectRequest(\n        this._sourceConnector,\n        this._sourceConnectorRect.gravityCenter,\n      ),\n    );\n\n    this._mediator.execute(\n      new MarkConnectableConnectorsRequest(this._connectableConnectors.map((x) => x.fConnector)),\n    );\n  }\n\n  public initializeSnapConnection(snapConnection: FSnapConnectionComponent | undefined): void {\n    this._snapConnection = snapConnection;\n    if (!snapConnection) {\n      return;\n    }\n    snapConnection.fOutputId.set(this._connection.fOutputId());\n    snapConnection.initialize();\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const newPoint = this._connectorRect.addPoint(difference);\n\n    const fClosestConnector = this._findClosestConnector(newPoint, this._connectableConnectors);\n    this._drawConnection(\n      newPoint,\n      fClosestConnector?.fConnector.fConnectableSide || this._targetConnector.fConnectableSide,\n    );\n    if (this._snapConnection) {\n      this._drawSnapConnection(\n        isClosestConnectorInsideSnapThreshold(fClosestConnector, this._snapConnection),\n      );\n    }\n  }\n\n  private _findClosestConnector(\n    point: IPoint,\n    connectors: IConnectorAndRect[],\n  ): IClosestConnector | undefined {\n    return this._mediator.execute<IClosestConnector | undefined>(\n      new CalculateClosestConnectorRequest(point, connectors),\n    );\n  }\n\n  private _drawConnection(newPoint: IPoint, fSide: EFConnectableSide): void {\n    const line = this._calculateNewLine(newPoint, fSide);\n    this._connection.setLine(line);\n    this._connection.redraw();\n  }\n\n  private _calculateNewLine(targetPoint: IPoint, fSide: EFConnectableSide): ILine {\n    return this._mediator.execute<ILine>(\n      new CalculateConnectionLineByBehaviorRequest(\n        this._sourceConnectorRect,\n        roundedRectFromPoint(targetPoint),\n        this._connection,\n        this._sourceConnector.fConnectableSide,\n        fSide,\n      ),\n    );\n  }\n\n  private _drawSnapConnection(closestConnector: IClosestConnector | undefined): void {\n    const snapConnection = this._snapConnection!;\n    if (closestConnector) {\n      const line = this._getLineToClosestTargetConnector(closestConnector, snapConnection);\n      snapConnection.show();\n      snapConnection.setLine(line);\n      snapConnection.redraw();\n    } else {\n      snapConnection.hide();\n    }\n  }\n\n  private _getLineToClosestTargetConnector(\n    fClosestInput: IClosestConnector,\n    snapConnection: FSnapConnectionComponent,\n  ): ILine {\n    return this._mediator.execute<ILine>(\n      new CalculateConnectionLineByBehaviorRequest(\n        this._sourceConnectorRect,\n        fClosestInput.fRect,\n        snapConnection,\n        this._sourceConnector.fConnectableSide,\n        fClosestInput.fConnector.fConnectableSide,\n      ),\n    );\n  }\n\n  public onPointerUp(): void {\n    this._drawConnection(\n      this._connectorRect,\n      this._targetConnectorAndRect.fConnector.fConnectableSide,\n    );\n    this._snapConnection?.hide();\n\n    this._mediator.execute(\n      new UnmarkConnectableConnectorsRequest(this._connectableConnectors.map((x) => x.fConnector)),\n    );\n  }\n}\n","import { FMediator } from '@foblex/mediator';\nimport {\n  CalculateConnectionLineByBehaviorRequest,\n  CalculateClosestConnectorRequest,\n  CalculateSourceConnectorsToConnectRequest,\n  IClosestConnector,\n  IConnectorAndRect,\n  MarkConnectableConnectorsRequest,\n  UnmarkConnectableConnectorsRequest,\n} from '../../../domain';\nimport {\n  EFConnectableSide,\n  FNodeInputDirective,\n  FNodeOutputDirective,\n} from '../../../f-connectors';\nimport { FConnectionBase, FSnapConnectionComponent } from '../../../f-connection';\nimport { ILine, IPoint, RoundedRect } from '@foblex/2d';\nimport {\n  IFReassignHandler,\n  isClosestConnectorInsideSnapThreshold,\n  roundedRectFromPoint,\n} from './i-f-reassign-handler';\n\nexport class FReassignSourceDragHandler implements IFReassignHandler {\n  private _connectableConnectors: IConnectorAndRect[] = [];\n\n  private get _sourceConnector(): FNodeOutputDirective {\n    return this._sourceConnectorAndRect.fConnector as FNodeOutputDirective;\n  }\n\n  private get _targetConnector(): FNodeInputDirective {\n    return this._targetConnectorAndRect.fConnector as FNodeInputDirective;\n  }\n\n  private readonly _connectorRect!: RoundedRect;\n\n  private _snapConnection: FSnapConnectionComponent | undefined;\n\n  constructor(\n    private readonly _mediator: FMediator,\n    private readonly _connection: FConnectionBase,\n    private readonly _sourceConnectorAndRect: IConnectorAndRect,\n    private readonly _targetConnectorAndRect: IConnectorAndRect,\n  ) {\n    this._connectorRect = roundedRectFromPoint(this._connection.line.point1);\n  }\n\n  public getConnectableConnectors(): IConnectorAndRect[] {\n    return this._connectableConnectors;\n  }\n\n  public markConnectableConnector(): void {\n    this._connectableConnectors = this._mediator.execute<IConnectorAndRect[]>(\n      new CalculateSourceConnectorsToConnectRequest(\n        this._targetConnector,\n        this._targetConnectorAndRect.fRect.gravityCenter,\n      ),\n    );\n    const isExistCurrentSourceConnector = this._connectableConnectors.some(\n      (x) => x.fConnector.fId() === this._sourceConnector.fId(),\n    );\n    if (!isExistCurrentSourceConnector) {\n      this._connectableConnectors.push(this._sourceConnectorAndRect);\n    }\n\n    this._mediator.execute(\n      new MarkConnectableConnectorsRequest(this._connectableConnectors.map((x) => x.fConnector)),\n    );\n  }\n\n  public initializeSnapConnection(snapConnection: FSnapConnectionComponent | undefined): void {\n    this._snapConnection = snapConnection;\n    if (!snapConnection) {\n      return;\n    }\n    snapConnection.fInputId.set(this._connection.fInputId());\n    snapConnection.initialize();\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const newPoint = this._connectorRect.addPoint(difference);\n\n    const fClosestConnector = this._findClosestConnector(newPoint, this._connectableConnectors);\n    this._drawConnection(\n      newPoint,\n      fClosestConnector?.fConnector.fConnectableSide || this._sourceConnector.fConnectableSide,\n    );\n    if (this._snapConnection) {\n      this._drawSnapConnection(\n        isClosestConnectorInsideSnapThreshold(fClosestConnector, this._snapConnection),\n      );\n    }\n  }\n\n  private _findClosestConnector(\n    point: IPoint,\n    connectors: IConnectorAndRect[],\n  ): IClosestConnector | undefined {\n    return this._mediator.execute<IClosestConnector | undefined>(\n      new CalculateClosestConnectorRequest(point, connectors),\n    );\n  }\n\n  private _drawConnection(newPoint: IPoint, fSide: EFConnectableSide): void {\n    const line = this._calculateNewLine(newPoint, fSide);\n    this._connection.setLine(line);\n    this._connection.redraw();\n  }\n\n  private _calculateNewLine(sourcePoint: IPoint, fSide: EFConnectableSide): ILine {\n    return this._mediator.execute<ILine>(\n      new CalculateConnectionLineByBehaviorRequest(\n        roundedRectFromPoint(sourcePoint),\n        this._targetConnectorAndRect.fRect,\n        this._connection,\n        fSide,\n        this._targetConnectorAndRect.fConnector.fConnectableSide,\n      ),\n    );\n  }\n\n  private _drawSnapConnection(fClosestConnector: IClosestConnector | undefined): void {\n    const snapConnection = this._snapConnection!;\n    if (fClosestConnector) {\n      const line = this._getLineToClosestSourceConnector(fClosestConnector, snapConnection);\n      snapConnection.show();\n      snapConnection.setLine(line);\n      snapConnection.redraw();\n    } else {\n      snapConnection.hide();\n    }\n  }\n\n  private _getLineToClosestSourceConnector(\n    fClosestInput: IClosestConnector,\n    snapConnection: FSnapConnectionComponent,\n  ): ILine {\n    return this._mediator.execute<ILine>(\n      new CalculateConnectionLineByBehaviorRequest(\n        fClosestInput.fRect,\n        this._targetConnectorAndRect.fRect,\n        snapConnection,\n        fClosestInput.fConnector.fConnectableSide,\n        this._targetConnector.fConnectableSide,\n      ),\n    );\n  }\n\n  public onPointerUp(): void {\n    this._drawConnection(\n      this._connectorRect,\n      this._sourceConnectorAndRect.fConnector.fConnectableSide,\n    );\n    this._snapConnection?.hide();\n\n    this._mediator.execute(\n      new UnmarkConnectableConnectorsRequest(this._connectableConnectors.map((x) => x.fConnector)),\n    );\n  }\n}\n","import { FDragHandlerResult, IFDragHandler } from '../../f-drag-handler';\nimport { GetConnectorAndRectRequest, IConnectorAndRect } from '../../../domain';\nimport { FConnectionBase, FSnapConnectionComponent } from '../../../f-connection';\nimport { FNodeInputDirective, FNodeOutputDirective } from '../../../f-connectors';\nimport { IPoint } 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';\nimport { IFReassignHandler, roundedRectFromPoint } from './i-f-reassign-handler';\nimport { FReassignTargetDragHandler } from './f-reassign-target.drag-handler';\nimport { FReassignSourceDragHandler } from './f-reassign-source.drag-handler';\n\nexport class FReassignConnectionDragHandler implements IFDragHandler {\n  public fEventType = 'reassign-connection';\n  public fData: unknown;\n\n  private readonly _result: FDragHandlerResult<IFReassignConnectionDragResult>;\n  private readonly _mediator: FMediator;\n  private readonly _store: FComponentsStore;\n\n  private get _snapConnection(): FSnapConnectionComponent | undefined {\n    return this._store.fSnapConnection as FSnapConnectionComponent;\n  }\n\n  private get _sourceConnector(): FNodeOutputDirective {\n    const result = this._store.fOutputs.find((x) => x.fId() === this._connection.fOutputId());\n    if (!result) {\n      throw new Error('Connection output not found');\n    }\n\n    return result as FNodeOutputDirective;\n  }\n\n  private get _targetConnector(): FNodeInputDirective {\n    const result = this._store.fInputs.find((x) => x.fId() === this._connection.fInputId());\n    if (!result) {\n      throw new Error('Connection input not found');\n    }\n\n    return result as FNodeInputDirective;\n  }\n\n  private get _sourceConnectorAndRect(): IConnectorAndRect {\n    return this._mediator.execute<IConnectorAndRect>(\n      new GetConnectorAndRectRequest(this._sourceConnector),\n    );\n  }\n\n  private get _targetConnectorAndRect(): IConnectorAndRect {\n    return this._mediator.execute<IConnectorAndRect>(\n      new GetConnectorAndRectRequest(this._targetConnector),\n    );\n  }\n\n  private _reassignHandler!: IFReassignHandler;\n\n  constructor(\n    _injector: Injector,\n    private _connection: FConnectionBase,\n    private _isTargetDragHandle: boolean,\n  ) {\n    this._result = _injector.get(FDragHandlerResult);\n    this._mediator = _injector.get(FMediator);\n    this._store = _injector.get(FComponentsStore);\n\n    this.fData = {\n      fConnectionId: this._connection.fId(),\n    };\n\n    this._reassignHandler = this._isTargetDragHandle\n      ? this._targetDragHandler()\n      : this._sourceDragHandler();\n  }\n\n  private _sourceDragHandler(): FReassignSourceDragHandler {\n    return new FReassignSourceDragHandler(\n      this._mediator,\n      this._connection,\n      this._sourceConnectorAndRect,\n      this._targetConnectorAndRect,\n    );\n  }\n\n  private _targetDragHandler(): FReassignTargetDragHandler {\n    return new FReassignTargetDragHandler(\n      this._mediator,\n      this._connection,\n      this._sourceConnectorAndRect,\n      this._targetConnectorAndRect,\n    );\n  }\n\n  public prepareDragSequence(): void {\n    this._reassignHandler.markConnectableConnector();\n    this._reassignHandler.initializeSnapConnection(this._snapConnection);\n\n    this._result.setData({\n      isTargetDragHandle: this._isTargetDragHandle,\n      sourceConnectorRect: roundedRectFromPoint(this._connection.line.point1),\n      targetConnectorRect: roundedRectFromPoint(this._connection.line.point2),\n      connectableConnectors: this._reassignHandler.getConnectableConnectors(),\n      fConnection: this._connection,\n    });\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    this._reassignHandler.onPointerMove(difference);\n  }\n\n  public onPointerUp(): void {\n    this._reassignHandler.onPointerUp();\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class FReassignConnectionEvent {\n\n  constructor(\n    public connectionId: string,\n    public isSourceReassign: boolean,\n    public isTargetReassign: boolean,\n    public oldSourceId: string,\n    public newSourceId: string | undefined,\n    public oldTargetId: string,\n    public newTargetId: string | undefined,\n    public dropPoint: 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 { FindConnectableConnectorUsingPriorityAndPositionRequest } 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\n  implements IExecution<FReassignConnectionFinalizeRequest, void>\n{\n  private readonly _dragResult: FDragHandlerResult<IFReassignConnectionDragResult> =\n    inject(FDragHandlerResult);\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _draggableContext = inject(FDraggableDataContext);\n\n  private get _fDraggable(): FDraggableBase {\n    return this._store.fDraggable!;\n  }\n\n  private get _fDragHandler(): FReassignConnectionDragHandler {\n    return this._draggableContext.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._draggableContext.draggableItems.some(\n      (x) => x instanceof FReassignConnectionDragHandler,\n    );\n  }\n\n  private _applyReassignEvent(event: IPointerEvent): void {\n    const fConnector = this._findConnectableConnectorUsingPriorityAndPosition(event);\n    if (!!fConnector && !this._isReassignToDifferentConnector(fConnector)) {\n      return;\n    }\n\n    this._emitReassignConnectionEvent(event, fConnector);\n  }\n\n  private _findConnectableConnectorUsingPriorityAndPosition(\n    event: IPointerEvent,\n  ): FConnectorBase | undefined {\n    return this._mediator.execute<FConnectorBase | undefined>(\n      new FindConnectableConnectorUsingPriorityAndPositionRequest(\n        event.getPosition(),\n        this._dragResult.getData().connectableConnectors,\n      ),\n    );\n  }\n\n  private _isReassignToDifferentConnector(fConnector: FConnectorBase): boolean {\n    if (!this._dragResult.getData().isTargetDragHandle) {\n      return this._dragResult.getData().fConnection.fInputId() !== fConnector.fId();\n    } else {\n      return this._dragResult.getData().fConnection.fOutputId() !== fConnector.fId();\n    }\n  }\n\n  private _emitReassignConnectionEvent(event: IPointerEvent, fConnector?: FConnectorBase): void {\n    this._fDraggable.fReassignConnection.emit(this._getEventData(event, fConnector));\n  }\n\n  private _getEventData(\n    event: IPointerEvent,\n    fConnector?: FConnectorBase,\n  ): FReassignConnectionEvent {\n    const fConnection = this._dragResult.getData().fConnection;\n\n    const isTargetDragHandle = this._dragResult.getData().isTargetDragHandle;\n\n    return new FReassignConnectionEvent(\n      fConnection.fId(),\n      !isTargetDragHandle,\n      isTargetDragHandle,\n      fConnection.fOutputId(),\n      !isTargetDragHandle ? fConnector?.fId() : undefined,\n      fConnection.fInputId(),\n      isTargetDragHandle ? fConnector?.fId() : undefined,\n      event.getPosition(),\n    );\n  }\n}\n","import { FEventTrigger } from '../../../../domain';\nimport { IPointerEvent } from \"../../../../drag-toolkit\";\n\nexport class FReassignConnectionPreparationRequest {\n  static readonly fToken = Symbol('FReassignConnectionPreparationRequest');\n  constructor(\n    public event: IPointerEvent,\n    public fTrigger: FEventTrigger,\n  ) {\n  }\n}\n","import { IPoint } from \"@foblex/2d\";\nimport { FConnectionBase } from \"../../../../f-connection\";\n\nexport function isPointerInsideStartOrEndDragHandles(connection: FConnectionBase, position: IPoint): boolean {\n  return isDragHandleEnd(connection, position) || isDragHandleStart(connection, position);\n}\n\nexport function isDragHandleEnd(connection: FConnectionBase, position: IPoint): boolean {\n  return connection.fDragHandleEnd()?.point\n    && _isPointInsideCircle(position, connection.fDragHandleEnd().point)\n    && !connection.fDraggingDisabled();\n}\n\nexport function isDragHandleStart(connection: FConnectionBase, position: IPoint): boolean {\n  return !!connection.fDragHandleStart()?.point\n    && _isPointInsideCircle(position, connection.fDragHandleStart()!.point)\n    && !connection.fDraggingDisabled() && connection.fReassignableStart();\n}\n\nfunction _isPointInsideCircle(point: IPoint, circleCenter: IPoint): boolean {\n  return (point.x - circleCenter.x) ** 2 + (point.y - circleCenter.y) ** 2 <= 8 ** 2;\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';\nimport {\n  isDragHandleEnd,\n  isPointerInsideStartOrEndDragHandles,\n} from \"./is-pointer-inside-start-or-end-drag-handles\";\n\n@Injectable()\n@FExecutionRegister(FReassignConnectionPreparationRequest)\nexport class FReassignConnectionPreparationExecution implements IExecution<FReassignConnectionPreparationRequest, void> {\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _injector = inject(Injector);\n\n  private _fConnection: FConnectionBase | undefined;\n\n  private get _transform(): ITransformModel {\n    return this._store.fCanvas!.transform;\n  }\n\n  private get _fHost(): HTMLElement {\n    return this._store.fFlow!.hostElement;\n  }\n\n  private get _fConnections(): FConnectionBase[] {\n    return this._store.fConnections;\n  }\n\n  public handle(request: FReassignConnectionPreparationRequest): void {\n    const position = this._getPointInFlow(request);\n    if (!this._isValid(position) || !this._isValidTrigger(request)) {\n      return;\n    }\n\n    this._dragContext.onPointerDownScale = this._transform.scale;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost).div(this._transform.scale);\n\n    this._dragContext.draggableItems = [\n      new FReassignConnectionDragHandler(\n        this._injector, this._fConnection!, isDragHandleEnd(this._fConnection!, position),\n      ),\n    ];\n\n    setTimeout(() => this._updateConnectionLayer());\n  }\n\n  private _isValid(position: IPoint): boolean {\n    this._fConnection = this._getConnectionToReassign(position);\n\n    return !!this._fConnection && !this._dragContext.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\n    return connections.length ? connections[0] : undefined;\n  }\n\n  private _getConnectionsFromPoint(position: IPoint): FConnectionBase[] {\n    return this._fConnections.filter((x) => isPointerInsideStartOrEndDragHandles(x, position));\n  }\n\n  private _updateConnectionLayer(): void {\n    this._fMediator.execute<void>(\n      new UpdateItemAndChildrenLayersRequest(\n        this._fConnection!, this._store.fCanvas!.fConnectionsContainer().nativeElement,\n      ),\n    );\n  }\n}\n","import {\n  FCreateConnectionDragHandlerPreparationExecution,\n  FCreateConnectionFinalizeExecution,\n  FCreateConnectionFromOutletPreparationExecution,\n  CreateConnectionFromOutputPreparation,\n  CreateConnectionPreparation,\n  GetFirstConnectableOutputExecution,\n} from './f-create-connection';\nimport {\n  FReassignConnectionFinalizeExecution,\n  FReassignConnectionPreparationExecution,\n} from './f-reassign-connection';\n\nexport const CONNECTIONS_PROVIDERS = [\n  FCreateConnectionFinalizeExecution,\n\n  FCreateConnectionDragHandlerPreparationExecution,\n\n  FCreateConnectionFromOutletPreparationExecution,\n\n  GetFirstConnectableOutputExecution,\n\n  CreateConnectionFromOutputPreparation,\n\n  CreateConnectionPreparation,\n\n  FReassignConnectionFinalizeExecution,\n\n  FReassignConnectionPreparationExecution,\n];\n","import { IPointerEvent } from \"../../../drag-toolkit\";\n\nexport class DropToGroupFinalizeRequest {\n  static readonly fToken = Symbol('DropToGroupFinalizeRequest');\n\n  constructor(\n    public event: IPointerEvent,\n  ) {\n  }\n}\n","import { 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';\nimport { F_CSS_CLASS } from '../../domain';\n\nconst _DEBOUNCE_TIME = 1;\n\nexport class FNodeDropToGroupDragHandler implements IFDragHandler {\n  private readonly _store: FComponentsStore;\n\n  public fEventType = 'move-node-to-parent';\n\n  private get _transform(): ITransformModel {\n    return this._store.fCanvas!.transform;\n  }\n\n  private _onPointerDownPosition: IPoint = PointExtensions.initialize();\n  private _debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n  public fNodeWithRect: INodeWithRect | null = null;\n\n  constructor(\n    injector: Injector,\n    private _containersForDrop: INodeWithRect[],\n  ) {\n    this._store = injector.get(FComponentsStore);\n    this._onPointerDownPosition = injector.get(FDraggableDataContext).onPointerDownPosition;\n  }\n\n  public prepareDragSequence(): void {\n    this._containersForDrop.forEach(({ node }) => {\n      node.hostElement.classList.add(F_CSS_CLASS.GROUPING.DROP_ACTIVE);\n    });\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._containersForDrop.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), _DEBOUNCE_TIME);\n  }\n\n  private _markIncludeNode(nodeWithRect: INodeWithRect): void {\n    this._unmarkIncludeNode();\n    this.fNodeWithRect = nodeWithRect;\n    nodeWithRect.node.setClass(F_CSS_CLASS.GROUPING.OVER_BOUNDARY);\n  }\n\n  private _unmarkIncludeNode(): void {\n    this.fNodeWithRect?.node.removeClass(F_CSS_CLASS.GROUPING.OVER_BOUNDARY);\n    this.fNodeWithRect = null;\n  }\n\n  public onPointerUp(): void {\n    this._unmarkIncludeNode();\n    this._containersForDrop.forEach(({ node }) => {\n      node.hostElement.classList.remove(F_CSS_CLASS.GROUPING.DROP_ACTIVE);\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  private readonly _mediator: FMediator;\n  private readonly _store: FComponentsStore;\n\n  private _fOutputWithRect!: IConnectorAndRect;\n  private _fInputWithRect!: IConnectorAndRect;\n\n  private get _fOutput(): FConnectorBase {\n    const result = this._store.fOutputs.find((x) => x.fId() === this.fConnection.fOutputId());\n    if (!result) {\n      throw new Error(\n        this._connectorNotFoundPrefix(`fOutput with id ${this.fConnection.fOutputId} not found`),\n      );\n    }\n\n    return result;\n  }\n\n  private get _fInput(): FConnectorBase {\n    const result = this._store.fInputs.find((x) => x.fId() === this.fConnection.fInputId());\n    if (!result) {\n      throw new Error(\n        this._connectorNotFoundPrefix(`fInput with id ${this.fConnection.fInputId} not found`),\n      );\n    }\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._mediator = _injector.get(FMediator);\n    this._store = _injector.get(FComponentsStore);\n    this._initialize();\n  }\n\n  private _initialize(): void {\n    this._fOutputWithRect = this._mediator.execute<IConnectorAndRect>(\n      new GetConnectorAndRectRequest(this._fOutput),\n    );\n    this._fInputWithRect = this._mediator.execute<IConnectorAndRect>(\n      new GetConnectorAndRectRequest(this._fInput),\n    );\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._mediator.execute<ILine>(\n      new CalculateConnectionLineByBehaviorRequest(\n        RoundedRect.fromRoundedRect(this._fOutputWithRect.fRect).addPoint(this._sourceDifference),\n        RoundedRect.fromRoundedRect(this._fInputWithRect.fRect).addPoint(this._targetDifference),\n        this.fConnection,\n        this._fOutputWithRect.fConnector.fConnectableSide,\n        this._fInputWithRect.fConnector.fConnectableSide,\n      ),\n    );\n  }\n\n  private _redrawConnection(line: ILine): void {\n    this.fConnection.setLine(line);\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 { Injector } from \"@angular/core\";\nimport { FComponentsStore } from \"../../../f-storage\";\nimport { IPoint } from \"@foblex/2d\";\n\nexport class SnapToGrid {\n\n  private readonly _store: FComponentsStore;\n\n  private readonly _vCellSize: number;\n  private readonly _hCellSize: number;\n  private readonly _adjustCellSize: boolean;\n\n  constructor(\n    _injector: Injector,\n    private _onPointerDown: IPoint,\n  ) {\n    this._store = _injector.get(FComponentsStore);\n    this._vCellSize = this._store.fDraggable!.vCellSize();\n    this._hCellSize = this._store.fDraggable!.hCellSize();\n    this._adjustCellSize = this._store.fDraggable!.fCellSizeWhileDragging();\n  }\n\n  public snap(difference: IPoint, adjustCellSize: boolean): IPoint {\n    const _adjustCellSize = adjustCellSize || this._adjustCellSize;\n\n    return this._cellSizeStrategies[+_adjustCellSize](difference);\n  }\n\n  private _cellSizeStrategies: Record<number, (difference: IPoint) => IPoint> = {\n    0: this._noSnap.bind(this),\n    1: this._snapWithCellSize.bind(this),\n  };\n\n  private _snapWithCellSize(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 _noSnap(difference: IPoint): IPoint {\n    return difference;\n  }\n\n  private _snapToGrid(value: number, cellSize: number): number {\n    return Math.round(value / cellSize) * cellSize;\n  }\n}\n","import { IMinMaxPoint, IPoint } from \"@foblex/2d\";\n\nexport interface IConstraintEdges {\n  left: boolean;\n  right: boolean;\n  top: boolean;\n  bottom: boolean;\n}\n\nexport interface IConstraintResult {\n  value: IPoint;\n  overflow: IPoint;\n  edges: IConstraintEdges;\n}\n\nexport class RectConstraint {\n  constructor(\n    private readonly _limits: IMinMaxPoint,\n  ) {\n  }\n\n  public apply(offset: IPoint): IConstraintResult {\n    const { min, max } = this._limits;\n\n    const clampedX = this._clamp(offset.x, min.x, max.x);\n    const clampedY = this._clamp(offset.y, min.y, max.y);\n\n    const rawOverflowX = offset.x - clampedX;\n    const rawOverflowY = offset.y - clampedY;\n\n    const overflowX = this._quantizeSigned(rawOverflowX, 0.5);\n    const overflowY = this._quantizeSigned(rawOverflowY, 0.5);\n\n    const edges: IConstraintEdges = {\n      left: overflowX < 0,\n      right: overflowX > 0,\n      top: overflowY < 0,\n      bottom: overflowY > 0,\n    };\n\n    return {\n      value: { x: clampedX, y: clampedY },\n      overflow: { x: Math.abs(overflowX), y: Math.abs(overflowY) },\n      edges,\n    };\n  }\n\n  private _quantizeSigned(v: number, step: number): number {\n    if (step <= 0 || v === 0) {\nreturn 0;\n}\n    const k = v / step;\n\n    return (v > 0 ? Math.ceil(k) : Math.floor(k)) * step;\n  }\n\n  private _clamp(value: number, min: number, max: number): number {\n    return Math.min(Math.max(value, min), max);\n  }\n}\n","import { IPoint } from \"@foblex/2d\";\nimport { SnapToGrid } from \"./snap-to-grid\";\nimport { IConstraintResult, RectConstraint } from \"./rect-constraint\";\nimport { Injector } from \"@angular/core\";\nimport { IDragLimits } from \"../create-drag-model-from-selection\";\n\nexport interface IConstraintSummary {\n  hardDifference: IPoint;\n  soft: IConstraintResult[];\n}\n\nexport class DragConstraintPipeline {\n  private readonly _snapper: SnapToGrid;\n  private readonly _hardConstraint: RectConstraint;\n  private readonly _softConstraints: RectConstraint[] = [];\n\n  constructor(\n    injector: Injector,\n    pointerDown: IPoint,\n    limits: IDragLimits,\n  ) {\n    this._snapper = new SnapToGrid(injector, pointerDown);\n    this._hardConstraint = new RectConstraint(limits.hard);\n    this._initSoftConstraints(limits);\n  }\n\n  private _initSoftConstraints(limits: IDragLimits): void {\n    for (const soft of limits.soft) {\n      this._softConstraints.push(new RectConstraint(soft.limits));\n    }\n  }\n\n  public apply(difference: IPoint, adjustCellSize: boolean = false): IConstraintSummary {\n    const snapped = this._snapper.snap(difference, adjustCellSize);\n    const hardDifference = this._hardConstraint.apply(snapped).value;\n\n    return {\n      hardDifference,\n      soft: this._softConstraints.map(c => c.apply(hardDifference)),\n    };\n  }\n\n  public finalize(difference: IPoint): IConstraintSummary {\n    return this.apply(difference, true);\n  }\n}\n","import { IPoint, IRect, RectExtensions } from \"@foblex/2d\";\nimport { IConstraintEdges } from \"./rect-constraint\";\n\nexport function expandRectFromBaseline(boundingRect: IRect, overflow: IPoint, edges: IConstraintEdges): IRect {\n  let { x, y, width, height } = boundingRect;\n\n  if (edges.right && overflow.x > 0) {\nwidth += overflow.x;\n}\n  if (edges.left && overflow.x > 0) {\n    x -= overflow.x;\n    width += overflow.x;\n  }\n\n  if (edges.bottom && overflow.y > 0) {\nheight += overflow.y;\n}\n  if (edges.top && overflow.y > 0) {\n    y -= overflow.y;\n    height += overflow.y;\n  }\n\n  return RectExtensions.initialize(x, y, width, height);\n}\n","import { FNodeBase } from \"../../../../f-node\";\n\nexport class BuildDragHierarchyRequest {\n  static readonly fToken = Symbol('BuildDragHierarchyRequest');\n\n  constructor(\n    public selectedNodesAndGroupsWithChildren: FNodeBase[],\n  ) {\n  }\n}\n","import { IPoint, IRect, PointExtensions, RectExtensions } from '@foblex/2d';\nimport { IFDragHandler } from '../f-drag-handler';\nimport { FNodeBase } from '../../f-node';\nimport { BaseConnectionDragHandler } from './connection-drag-handlers';\nimport { F_CSS_CLASS, GetNormalizedElementRectRequest } from \"../../domain\";\nimport { Injector } from \"@angular/core\";\nimport { IDragLimits } from \"./create-drag-model-from-selection\";\nimport { DragConstraintPipeline, expandRectFromBaseline, IConstraintResult } from \"./constraint\";\nimport { FMediator } from \"@foblex/mediator\";\n\nexport class MoveDragHandler implements IFDragHandler {\n\n  public readonly fEventType = 'move-node';\n\n  private readonly _startPosition = PointExtensions.initialize();\n  private readonly _startRect = RectExtensions.initialize();\n\n  private _applyConstraints: (difference: IPoint) => IPoint = (difference) => difference;\n\n  private _lastSoftResults: IConstraintResult[] = [];\n  private _pipeline!: DragConstraintPipeline;\n  private _limits: IDragLimits | null = null;\n  private _lastPosition = PointExtensions.initialize();\n\n  constructor(\n    private readonly _injector: Injector,\n    public nodeOrGroup: FNodeBase,\n    public childrenNodeAndGroups: MoveDragHandler[] = [],\n    public fSourceHandlers: BaseConnectionDragHandler[] = [],\n    public fTargetHandlers: BaseConnectionDragHandler[] = [],\n  ) {\n    this._startRect = _injector.get(FMediator).execute(new GetNormalizedElementRectRequest(nodeOrGroup.hostElement))\n    this._startPosition = { ...nodeOrGroup._position };\n  }\n\n  public setLimits(limits: IDragLimits): void {\n    this._limits = limits;\n    this._pipeline = new DragConstraintPipeline(this._injector, this._startPosition, limits);\n\n    this._applyConstraints = (difference: IPoint) => {\n      const summary = this._pipeline.apply(difference);\n      this._applySoftExpansions(summary.soft);\n\n      return summary.hardDifference;\n    }\n  }\n\n  private _applySoftExpansions(\n    softResults: IConstraintResult[],\n  ): void {\n    this._lastSoftResults = softResults;\n    this._lastSoftResults.forEach((result, index) => {\n      const softLimit = this._limits!.soft[index];\n      const expandedRect = expandRectFromBaseline(softLimit.boundingRect, result.overflow, result.edges);\n      this._commitParentRect(softLimit.nodeOrGroup, expandedRect);\n    });\n  }\n\n  private _commitParentRect(parent: FNodeBase, rect: IRect): void {\n    parent.updateSize({ width: rect.width, height: rect.height });\n    parent.updatePosition({ x: rect.x, y: rect.y });\n    parent.redraw();\n  }\n\n  public getLastRect(): IRect {\n    return RectExtensions.initialize(this._lastPosition.x, this._lastPosition.y, this._startRect.width, this._startRect.height);\n  }\n\n  public prepareDragSequence(): void {\n    this.childrenNodeAndGroups.forEach((x) => x.prepareDragSequence());\n    this.nodeOrGroup.hostElement.classList.add(F_CSS_CLASS.DRAG_AND_DROP.DRAGGING);\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const differenceWithRestrictions = this._applyConstraints(difference);\n\n    this.childrenNodeAndGroups.forEach((x) => x.onPointerMove(differenceWithRestrictions));\n    this._redraw(this._nodeOrGroupNewPosition(differenceWithRestrictions));\n\n    this.fSourceHandlers.forEach((x) => x.setSourceDifference(differenceWithRestrictions));\n    this.fTargetHandlers.forEach((x) => x.setTargetDifference(differenceWithRestrictions));\n  }\n\n  public assignFinalConstraints(): void {\n    this._applyConstraints = (difference: IPoint) => {\n      const summary = this._pipeline.finalize(difference);\n      this._applySoftExpansions(summary.soft);\n\n      return summary.hardDifference;\n    }\n  }\n\n  private _nodeOrGroupNewPosition(difference: IPoint): IPoint {\n    return PointExtensions.sum(this._startPosition, difference);\n  }\n\n  private _redraw(position: IPoint): void {\n    this._lastPosition = position;\n    this.nodeOrGroup.updatePosition(position);\n    this.nodeOrGroup.redraw();\n  }\n\n  public onPointerUp(): void {\n    this.childrenNodeAndGroups.forEach((x) => x.onPointerUp());\n    this.nodeOrGroup.position.set(this.nodeOrGroup._position);\n    this.nodeOrGroup.hostElement.classList.remove(F_CSS_CLASS.DRAG_AND_DROP.DRAGGING);\n    this._emitEventIfNodeExpanded();\n  }\n\n  private _emitEventIfNodeExpanded(): void {\n    this._lastSoftResults.forEach((result, index) => {\n      const softLimit = this._limits!.soft[index];\n      const expandedRect = expandRectFromBaseline(softLimit.boundingRect, result.overflow, result.edges);\n      if (result.overflow.x || result.overflow.y) {\n        softLimit.nodeOrGroup.sizeChange.emit(expandedRect);\n      }\n    });\n  }\n}\n","import { MoveDragHandler } from \"../../move-drag-handler\";\n\nexport class BuildDragHierarchyResponse {\n\n  constructor(\n    public roots: MoveDragHandler[],\n    public list: MoveDragHandler[],\n  ) {\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { BuildDragHierarchyRequest } from \"./build-drag-hierarchy-request\";\nimport { MoveDragHandler } from \"../../move-drag-handler\";\nimport { BuildDragHierarchyResponse } from \"./build-drag-hierarchy-response\";\nimport { FNodeBase } from \"../../../../f-node\";\n\n@Injectable()\n@FExecutionRegister(BuildDragHierarchyRequest)\nexport class BuildDragHierarchy\n  implements IExecution<BuildDragHierarchyRequest, BuildDragHierarchyResponse> {\n\n  private readonly _injector = inject(Injector);\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ selectedNodesAndGroupsWithChildren }: BuildDragHierarchyRequest): BuildDragHierarchyResponse {\n    const byId = this._createHandlersMap(selectedNodesAndGroupsWithChildren);\n    const roots = this._linkParentsAndCollectRoots(selectedNodesAndGroupsWithChildren, byId);\n\n    return new BuildDragHierarchyResponse(roots, Array.from(byId.values()));\n  }\n\n  private _createHandlersMap(\n    selectedNodesAndGroupsWithChildren: FNodeBase[],\n  ): Map<string, MoveDragHandler> {\n    const byId = new Map<string, MoveDragHandler>();\n    for (const item of selectedNodesAndGroupsWithChildren) {\n      byId.set(item.fId(), new MoveDragHandler(this._injector, item));\n    }\n\n    return byId;\n  }\n\n  private _linkParentsAndCollectRoots(\n    selectedNodesAndGroupsWithChildren: FNodeBase[],\n    byId: Map<string, MoveDragHandler>,\n  ): MoveDragHandler[] {\n    const roots: MoveDragHandler[] = [];\n\n    for (const item of selectedNodesAndGroupsWithChildren) {\n      const handler = byId.get(item.fId())!;\n      const parentId = item.fParentId();\n\n      if (parentId && byId.has(parentId)) {\n        byId.get(parentId)!.childrenNodeAndGroups.push(handler);\n      } else {\n        roots.push(handler);\n      }\n    }\n\n    return roots;\n  }\n}\n","import { FNodeBase } from \"../../../../f-node\";\n\nexport class CalculateDragLimitsRequest {\n  static readonly fToken = Symbol('CalculateDragLimitsRequest');\n\n  constructor(\n    public readonly nodeOrGroup: FNodeBase,\n  ) {\n  }\n}\n","import { FNodeBase } from \"../../../../f-node\";\n\nexport class GetNodeBoundingIncludePaddingsRequest {\n  static readonly fToken = Symbol('GetNodeBoundingIncludePaddingsRequest');\n\n  constructor(\n    public readonly nodeOrGroup: FNodeBase,\n    public readonly childrenPaddings: [number, number, number, number],\n  ) {\n  }\n}\n","import { FNodeBase } from \"../../../../f-node\";\nimport { IRect } from \"@foblex/2d\";\n\nexport class GetNodeBoundingIncludePaddingsResponse {\n\n  constructor(\n    public nodeOrGroup: FNodeBase,\n    public boundingRect: IRect,\n    public innerRect: IRect,\n    public paddings: [number, number, number, number],\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { GetNodeBoundingIncludePaddingsRequest } from './get-node-bounding-include-paddings-request';\nimport { IRect, RectExtensions } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from \"../../../../f-node\";\nimport { GetNodePaddingRequest, GetNormalizedElementRectRequest } from \"../../../../domain\";\nimport { GetNodeBoundingIncludePaddingsResponse } from \"./get-node-bounding-include-paddings-response\";\n\n@Injectable()\n@FExecutionRegister(GetNodeBoundingIncludePaddingsRequest)\nexport class GetNodeBoundingIncludePaddings\n  implements IExecution<GetNodeBoundingIncludePaddingsRequest, GetNodeBoundingIncludePaddingsResponse> {\n\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ nodeOrGroup, childrenPaddings }: GetNodeBoundingIncludePaddingsRequest): GetNodeBoundingIncludePaddingsResponse {\n    return this._rect(nodeOrGroup, childrenPaddings);\n  }\n\n  private _rect(nodeOrGroup: FNodeBase, childrenPaddings: [number, number, number, number]): GetNodeBoundingIncludePaddingsResponse {\n    const boundingRect = this._boundingRect(nodeOrGroup);\n    const paddings = this._paddings(nodeOrGroup, boundingRect);\n    paddings[0] += childrenPaddings[0];\n    paddings[1] += childrenPaddings[1];\n    paddings[2] += childrenPaddings[2];\n    paddings[3] += childrenPaddings[3];\n\n    return new GetNodeBoundingIncludePaddingsResponse(\n      nodeOrGroup,\n      boundingRect,\n      RectExtensions.initialize(\n        boundingRect.x + paddings[0],\n        boundingRect.y + paddings[1],\n        boundingRect.width - paddings[0] - paddings[2],\n        boundingRect.height - paddings[1] - paddings[3],\n      ),\n      paddings,\n    )\n  }\n\n  private _boundingRect(nodeOrGroup: FNodeBase): IRect {\n    return this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(nodeOrGroup.hostElement));\n  }\n\n  private _paddings(nodeOrGroup: FNodeBase, rect: IRect): [number, number, number, number] {\n    return this._mediator.execute<[number, number, number, number]>(new GetNodePaddingRequest(nodeOrGroup, rect));\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IMinMaxPoint, IPoint, IRect, PointExtensions } from \"@foblex/2d\";\nimport { CalculateDragLimitsRequest } from \"./calculate-drag-limits-request\";\nimport { infinityMinMax } from \"../../../../utils\";\nimport { FNodeBase } from \"../../../../f-node\";\nimport { GetNormalizedElementRectRequest, GetParentNodesRequest } from \"../../../../domain\";\nimport {\n  GetNodeBoundingIncludePaddingsRequest,\n  GetNodeBoundingIncludePaddingsResponse,\n} from \"../get-node-bounding-include-paddings\";\nimport { ISoftLimit } from \"./i-soft-limit\";\nimport { IDragLimits } from \"./i-drag-limits\";\n\n@Injectable()\n@FExecutionRegister(CalculateDragLimitsRequest)\nexport class CalculateDragLimits\n  implements IExecution<CalculateDragLimitsRequest, IDragLimits> {\n\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ nodeOrGroup }: CalculateDragLimitsRequest): IDragLimits {\n    const currentRect = this._getCurrentRect(nodeOrGroup);\n    const parents = this._getParentsChain(nodeOrGroup);\n\n    return this._buildSoftHardLimits(parents, currentRect);\n  }\n\n  private _getCurrentRect(nodeOrGroup: FNodeBase): IRect {\n    return this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(nodeOrGroup.hostElement));\n  }\n\n  private _getParentsChain(nodeOrGroup: FNodeBase): FNodeBase[] {\n    return this._mediator.execute<FNodeBase[]>(new GetParentNodesRequest(nodeOrGroup)) ?? [];\n  }\n\n  private _buildSoftHardLimits(parents: FNodeBase[], childRect: IRect): IDragLimits {\n    const soft: ISoftLimit[] = [];\n    let hard: IMinMaxPoint = infinityMinMax();\n\n    let childrenPaddings: [number, number, number, number] = [0, 0, 0, 0];\n\n    for (const parent of parents) {\n      const parentInfo = this._getParentInfo(parent, childrenPaddings);\n      childrenPaddings = parentInfo.paddings;\n      const limits = this._calculateDifference(parentInfo.innerRect, childRect);\n\n      if (this._isAutoExpand(parent)) {\n        soft.push(this._makeSoftLimit(parent, parentInfo.boundingRect, limits));\n      } else {\n        hard = limits;\n        break;\n      }\n    }\n\n    return { soft, hard };\n  }\n\n  private _getParentInfo(parent: FNodeBase, childrenPaddings: [number, number, number, number]): GetNodeBoundingIncludePaddingsResponse {\n    return this._mediator.execute<GetNodeBoundingIncludePaddingsResponse>(\n      new GetNodeBoundingIncludePaddingsRequest(parent, childrenPaddings),\n    );\n  }\n\n  private _calculateDifference(parentRect: IRect, currentRect: IRect): IMinMaxPoint {\n    return {\n      min: this._calculateMinimumDifference(parentRect, currentRect),\n      max: this._calculateMaximumDifference(parentRect, currentRect),\n    };\n  }\n\n  private _calculateMinimumDifference(parentRect: IRect, currentRect: IRect): IPoint {\n    return PointExtensions.initialize(parentRect.x - currentRect.x, parentRect.y - currentRect.y);\n  }\n\n  private _calculateMaximumDifference(parentRect: IRect, currentRect: IRect): IPoint {\n    return PointExtensions.initialize(\n      (parentRect.x + parentRect.width) - (currentRect.x + currentRect.width),\n      (parentRect.y + parentRect.height) - (currentRect.y + currentRect.height),\n    );\n  }\n\n  private _isAutoExpand(nodeOrGroup: FNodeBase): boolean {\n    return nodeOrGroup.fAutoExpandOnChildHit();\n  }\n\n  private _makeSoftLimit(\n    nodeOrGroup: FNodeBase,\n    boundingRect: IRect,\n    limits: IMinMaxPoint,\n  ): ISoftLimit {\n    return { nodeOrGroup, boundingRect, initialSize: nodeOrGroup._size, limits };\n  }\n}\n","import { MoveDragHandler } from \"../../move-drag-handler\";\n\nexport class CreateSummaryDragHandlerRequest {\n  static readonly fToken = Symbol('CreateSummaryDragHandlerRequest');\n\n  constructor(\n    public readonly roots: MoveDragHandler[],\n    public readonly list: MoveDragHandler[],\n  ) {\n  }\n}\n","import { IPoint, IRect, RectExtensions } from '@foblex/2d';\nimport { IFDragHandler } from '../f-drag-handler';\nimport { MoveDragHandler } from './move-drag-handler';\nimport { Injector } from \"@angular/core\";\nimport { SnapLinesDragHandler } from \"./create-snap-lines/snap-lines.drag-handler\";\nimport { ISnapResult } from \"../../f-line-alignment\";\n\nexport class MoveSummaryDragHandler implements IFDragHandler {\n\n  public readonly fEventType = 'move-node';\n  public readonly fData: any;\n\n  private _lineAlignment: SnapLinesDragHandler | null = null;\n\n  constructor(\n    _injector: Injector,\n    public allDraggedNodeHandlers: MoveDragHandler[],\n    public rootHandlers: MoveDragHandler[],\n  ) {\n    this.fData = {\n      fNodeIds: allDraggedNodeHandlers.map((x) => x.nodeOrGroup.fId()),\n    };\n  }\n\n  public setLineAlignment(handler: SnapLinesDragHandler): void {\n    this._lineAlignment = handler;\n  }\n\n  public findClosestAlignment(difference: IPoint): ISnapResult | undefined {\n    this.rootHandlers.forEach((x) => x.onPointerMove(difference));\n\n    return this._lineAlignment?.findClosestAlignment(this._unionRect());\n  }\n\n  public prepareDragSequence(): void {\n    this.rootHandlers.forEach((x) => x.prepareDragSequence());\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    this.rootHandlers.forEach((x) => x.onPointerMove(difference));\n    this._lineAlignment?.drawGuidesFor(this._unionRect());\n  }\n\n  public onPointerUp(): void {\n    this.rootHandlers.forEach((x) => x.onPointerUp());\n    this._lineAlignment?.clearGuides();\n    requestAnimationFrame(() => this._refreshDraggedNodes());\n  }\n\n  private _unionRect(): IRect {\n    return RectExtensions.union(this._getRootRects()) || RectExtensions.initialize();\n  }\n\n  private _getRootRects(): IRect[] {\n    return this.rootHandlers.map((x) => x.getLastRect());\n  }\n\n  private _refreshDraggedNodes(): void {\n    this.rootHandlers.forEach(({ nodeOrGroup }) => nodeOrGroup.refresh());\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { CreateSummaryDragHandlerRequest } from \"./create-summary-drag-handler-request\";\nimport { MoveSummaryDragHandler } from \"../../move-summary-drag-handler\";\nimport { MoveDragHandler } from \"../../move-drag-handler\";\nimport { FNodeBase } from \"../../../../f-node\";\nimport { CalculateDragLimitsRequest, IDragLimits } from \"../calculate-drag-limits\";\n\n@Injectable()\n@FExecutionRegister(CreateSummaryDragHandlerRequest)\nexport class CreateSummaryDragHandler\n  implements IExecution<CreateSummaryDragHandlerRequest, MoveSummaryDragHandler> {\n\n  private readonly _injector = inject(Injector);\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ roots, list }: CreateSummaryDragHandlerRequest): MoveSummaryDragHandler {\n    this._setLimitsToTheRootHandlers(roots);\n\n    return new MoveSummaryDragHandler(this._injector, list, roots);\n  }\n\n  private _setLimitsToTheRootHandlers(roots: MoveDragHandler[]): void {\n    roots.forEach((dragHandler) => {\n      dragHandler.setLimits(this._calculateDragLimits(dragHandler.nodeOrGroup));\n    });\n  }\n\n  private _calculateDragLimits(nodeOrGroup: FNodeBase): IDragLimits {\n    return this._mediator.execute<IDragLimits>(new CalculateDragLimitsRequest(nodeOrGroup));\n  }\n}\n","import { MoveDragHandler } from '../../move-drag-handler';\nimport { BaseConnectionDragHandler } from '../../connection-drag-handlers';\n\nexport class CreateInputConnectionHandlerAndSetToNodeHandlerRequest {\n  static readonly fToken = Symbol('CreateInputConnectionHandlerAndSetToNodeHandlerRequest');\n\n  constructor(\n    public dragHandler: MoveDragHandler,\n    public outputIds: string[],\n    public existingConnectionHandlers: BaseConnectionDragHandler[],\n  ) {\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { CreateInputConnectionHandlerAndSetToNodeHandlerRequest } from './create-input-connection-handler-and-set-to-node-handler-request';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../../f-node';\nimport { FConnectionBase } from '../../../../f-connection';\nimport {\n  BaseConnectionDragHandler,\n  SourceTargetConnectionDragHandler,\n  TargetConnectionDragHandler,\n} from '../../connection-drag-handlers';\n\n@Injectable()\n@FExecutionRegister(CreateInputConnectionHandlerAndSetToNodeHandlerRequest)\nexport class CreateInputConnectionHandlerAndSetToNodeHandler\n  implements IExecution<CreateInputConnectionHandlerAndSetToNodeHandlerRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _injector = inject(Injector);\n\n  private get _connections(): FConnectionBase[] {\n    return this._store.fConnections;\n  }\n\n  public handle(request: CreateInputConnectionHandlerAndSetToNodeHandlerRequest): void {\n    this._getInputConnections(request.dragHandler.nodeOrGroup).forEach((connection) => {\n      this._createAndSetConnectionToNodeHandler(connection, request);\n    });\n  }\n\n  private _getInputConnections(nodeOrGroup: FNodeBase): FConnectionBase[] {\n    const ids = new Set(this._getNodeInputIds(nodeOrGroup));\n\n    return this._connections.filter((x) => ids.has(x.fInputId()));\n  }\n\n  private _getNodeInputIds(nodeOrGroup: FNodeBase): string[] {\n    return this._store.fInputs\n      .filter((x) => nodeOrGroup.isContains(x.hostElement))\n      .map((x) => x.fId());\n  }\n\n  private _createAndSetConnectionToNodeHandler(\n    connection: FConnectionBase,\n    request: CreateInputConnectionHandlerAndSetToNodeHandlerRequest,\n  ): void {\n    let connectionHandler = this._getExistingConnectionHandler(\n      request.existingConnectionHandlers,\n      connection,\n    );\n    if (!connectionHandler) {\n      connectionHandler = this._createConnectionHandler(request.outputIds, connection);\n      request.existingConnectionHandlers.push(connectionHandler);\n    }\n    request.dragHandler.fTargetHandlers.push(connectionHandler);\n  }\n\n  private _getExistingConnectionHandler(\n    existingConnectionHandlers: BaseConnectionDragHandler[],\n    connection: FConnectionBase,\n  ): BaseConnectionDragHandler | undefined {\n    return existingConnectionHandlers.find((x) => x.fConnection.fId() === connection.fId());\n  }\n\n  private _createConnectionHandler(\n    outputIds: string[],\n    connection: FConnectionBase,\n  ): BaseConnectionDragHandler {\n    let result: BaseConnectionDragHandler | undefined;\n    if (outputIds.includes(connection.fOutputId())) {\n      result = new SourceTargetConnectionDragHandler(this._injector, connection);\n    } else {\n      result = new TargetConnectionDragHandler(this._injector, connection);\n    }\n\n    return result;\n  }\n}\n","import { MoveDragHandler } from '../../move-drag-handler';\nimport { BaseConnectionDragHandler } from \"../../connection-drag-handlers\";\n\nexport class CreateOutputConnectionHandlerAndSetToNodeHandlerRequest {\n  static readonly fToken = Symbol('CreateOutputConnectionHandlerAndSetToNodeHandlerRequest');\n\n  constructor(\n    public fDragHandler: MoveDragHandler,\n    public inputIds: string[],\n    public existingConnectionHandlers: BaseConnectionDragHandler[],\n  ) {\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { CreateOutputConnectionHandlerAndSetToNodeHandlerRequest } from './create-output-connection-handler-and-set-to-node-handler-request';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../../f-node';\nimport { FConnectionBase } from '../../../../f-connection';\nimport {\n  BaseConnectionDragHandler,\n  SourceTargetConnectionDragHandler,\n  SourceConnectionDragHandler,\n} from '../../connection-drag-handlers';\n\n@Injectable()\n@FExecutionRegister(CreateOutputConnectionHandlerAndSetToNodeHandlerRequest)\nexport class CreateOutputConnectionHandlerAndSetToNodeHandler\n  implements IExecution<CreateOutputConnectionHandlerAndSetToNodeHandlerRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _injector = inject(Injector);\n\n  private get _connections(): FConnectionBase[] {\n    return this._store.fConnections;\n  }\n\n  public handle(request: CreateOutputConnectionHandlerAndSetToNodeHandlerRequest): void {\n    this._getOutputConnections(request.fDragHandler.nodeOrGroup).forEach((fConnection) => {\n      this._createAndSetConnectionToNodeHandler(fConnection, request);\n    });\n  }\n\n  public _getOutputConnections(nodeOrGroup: FNodeBase): FConnectionBase[] {\n    const ids = new Set(this._getNodeOutputIds(nodeOrGroup));\n\n    return this._connections.filter((x) => ids.has(x.fOutputId()));\n  }\n\n  private _getNodeOutputIds(nodeOrGroup: FNodeBase): string[] {\n    return this._store.fOutputs\n      .filter((x) => nodeOrGroup.isContains(x.hostElement))\n      .map((x) => x.fId());\n  }\n\n  private _createAndSetConnectionToNodeHandler(\n    connection: FConnectionBase,\n    request: CreateOutputConnectionHandlerAndSetToNodeHandlerRequest,\n  ): void {\n    let connectionHandler = this._getExistingConnectionHandler(\n      request.existingConnectionHandlers,\n      connection,\n    );\n    if (!connectionHandler) {\n      connectionHandler = this._createConnectionHandler(request.inputIds, connection);\n      request.existingConnectionHandlers.push(connectionHandler);\n    }\n    request.fDragHandler.fSourceHandlers.push(connectionHandler);\n  }\n\n  private _getExistingConnectionHandler(\n    existingConnectionHandlers: BaseConnectionDragHandler[],\n    connection: FConnectionBase,\n  ): BaseConnectionDragHandler | undefined {\n    return existingConnectionHandlers.find((x) => x.fConnection.fId() === connection.fId());\n  }\n\n  private _createConnectionHandler(\n    inputIds: string[],\n    connection: FConnectionBase,\n  ): BaseConnectionDragHandler {\n    let result: BaseConnectionDragHandler;\n    if (inputIds.includes(connection.fInputId())) {\n      result = new SourceTargetConnectionDragHandler(this._injector, connection);\n    } else {\n      result = new SourceConnectionDragHandler(this._injector, connection);\n    }\n\n    return result;\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class CreateDragModelFromSelectionRequest {\n  static readonly fToken = Symbol('CreateDragModelFromSelectionRequest');\n\n  constructor(\n    public nodeWithDisabledSelection?: FNodeBase,\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CreateDragModelFromSelectionRequest } from './create-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 { MoveDragHandler } from '../move-drag-handler';\nimport { FNodeBase } from '../../../f-node';\nimport { CreateOutputConnectionHandlerAndSetToNodeHandlerRequest } from './create-output-connection-handler-and-set-to-node-handler';\nimport { CreateInputConnectionHandlerAndSetToNodeHandlerRequest } from './create-input-connection-handler-and-set-to-node-handler';\nimport { GetDeepChildrenNodesAndGroupsRequest } from '../../../domain';\nimport { flatMap } from '@foblex/utils';\nimport { BaseConnectionDragHandler } from '../connection-drag-handlers';\nimport { MoveSummaryDragHandler } from '../move-summary-drag-handler';\nimport { BuildDragHierarchyRequest, BuildDragHierarchyResponse } from './build-drag-hierarchy';\nimport { CreateSummaryDragHandlerRequest } from './create-summary-drag-handler';\n\n// This execution is responsible for creating a drag model for moving nodes based on the current selection.\n@Injectable()\n@FExecutionRegister(CreateDragModelFromSelectionRequest)\nexport class CreateDragModelFromSelection\n  implements IExecution<CreateDragModelFromSelectionRequest, MoveSummaryDragHandler>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(request: CreateDragModelFromSelectionRequest): MoveSummaryDragHandler {\n    const selectedNodesAndGroups = this._collectSelectedNodesAndGroups(\n      request.nodeWithDisabledSelection,\n    );\n    const selectedNodesAndGroupsWithChildren =\n      this._collectSelectedAndAllChildren(selectedNodesAndGroups);\n\n    const dragHierarchy = this._buildDragHierarchy(selectedNodesAndGroupsWithChildren);\n\n    this._setConnectionsHandlersToNodes(\n      dragHierarchy.list,\n      this._getAllOutputIds(selectedNodesAndGroupsWithChildren),\n      this._getAllInputIds(selectedNodesAndGroupsWithChildren),\n    );\n\n    return this._createSummaryDragHandler(dragHierarchy);\n  }\n\n  private _collectSelectedNodesAndGroups(nodeWithDisabledSelection?: FNodeBase): FNodeBase[] {\n    const result = this._getNodesFromSelection();\n    if (nodeWithDisabledSelection) {\n      result.push(nodeWithDisabledSelection);\n    }\n\n    return result;\n  }\n\n  private _getNodesFromSelection(): FNodeBase[] {\n    return this._dragContext.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._store.fNodes.find((n) => n.isContains(hostElement));\n  }\n\n  private _collectSelectedAndAllChildren(selectedNodesAndGroups: FNodeBase[]): FNodeBase[] {\n    return selectedNodesAndGroups.reduce((result: FNodeBase[], x: FNodeBase) => {\n      result.push(x);\n\n      return result.concat(this._getChildrenNodes(x.fId()));\n    }, []);\n  }\n\n  private _buildDragHierarchy(\n    selectedNodesAndGroupsWithChildren: FNodeBase[],\n  ): BuildDragHierarchyResponse {\n    return this._mediator.execute(\n      new BuildDragHierarchyRequest(selectedNodesAndGroupsWithChildren),\n    );\n  }\n\n  private _getChildrenNodes(fId: string): FNodeBase[] {\n    return this._mediator.execute<FNodeBase[]>(new GetDeepChildrenNodesAndGroupsRequest(fId));\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._store.fOutputs.filter((x) => fNode.fId() === x.fNodeId).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._store.fInputs.filter((x) => fNode.fId() === x.fNodeId).map((x) => x.fId());\n  }\n\n  private _setConnectionsHandlersToNodes(\n    dragHandlers: MoveDragHandler[],\n    outputIds: string[],\n    inputIds: string[],\n  ): void {\n    const existingConnectionHandlers: BaseConnectionDragHandler[] = [];\n    dragHandlers.forEach((x) => {\n      this._mediator.execute(\n        new CreateOutputConnectionHandlerAndSetToNodeHandlerRequest(\n          x,\n          inputIds,\n          existingConnectionHandlers,\n        ),\n      );\n      this._mediator.execute(\n        new CreateInputConnectionHandlerAndSetToNodeHandlerRequest(\n          x,\n          outputIds,\n          existingConnectionHandlers,\n        ),\n      );\n    });\n  }\n\n  private _createSummaryDragHandler({\n    roots,\n    list,\n  }: BuildDragHierarchyResponse): MoveSummaryDragHandler {\n    return this._mediator.execute(new CreateSummaryDragHandlerRequest(roots, list));\n  }\n}\n","import { CreateDragModelFromSelection } from './create-drag-model-from-selection';\nimport { CreateInputConnectionHandlerAndSetToNodeHandler } from './create-input-connection-handler-and-set-to-node-handler';\nimport { CreateOutputConnectionHandlerAndSetToNodeHandler } from './create-output-connection-handler-and-set-to-node-handler';\nimport { BuildDragHierarchy } from \"./build-drag-hierarchy\";\nimport { CalculateDragLimits } from \"./calculate-drag-limits\";\nimport { CreateSummaryDragHandler } from \"./create-summary-drag-handler\";\nimport { GetNodeBoundingIncludePaddings } from \"./get-node-bounding-include-paddings\";\n\nexport const CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS = [\n\n  BuildDragHierarchy,\n\n  CalculateDragLimits,\n\n  CreateSummaryDragHandler,\n\n  CreateInputConnectionHandlerAndSetToNodeHandler,\n\n  CreateOutputConnectionHandlerAndSetToNodeHandler,\n\n  GetNodeBoundingIncludePaddings,\n\n  CreateDragModelFromSelection,\n];\n","import { MoveSummaryDragHandler } from \"../move-summary-drag-handler\";\n\nexport class CreateSnapLinesRequest {\n  static readonly fToken = Symbol('CreateSnapLinesRequest');\n\n  constructor(\n    public readonly summaryHandler: MoveSummaryDragHandler,\n  ) {\n  }\n}\n","import { findClosestAlignment, IRect, ISize, ITransformModel } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\nimport { ISnapResult, SnapLineService } from '../../../f-line-alignment';\nimport { Injector } from '@angular/core';\n\nexport class SnapLinesDragHandler {\n  private _debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n  private readonly _canvasTransform: ITransformModel;\n  private readonly _alignThreshold: number = 10;\n\n  constructor(\n    injector: Injector,\n    private _lineService: SnapLineService,\n    private _size: ISize,\n    private _rects: IRect[],\n  ) {\n    const store = injector.get(FComponentsStore);\n    this._alignThreshold = store.fLineAlignment!.fAlignThreshold();\n    this._canvasTransform = store.fCanvas?.transform!;\n  }\n\n  public drawGuidesFor(_draggedRect: IRect): void {\n    if (this._debounceTimer) {\n      clearTimeout(this._debounceTimer);\n    }\n\n    this._debounceTimer = setTimeout(() => this._renderGuides(_draggedRect), 15);\n  }\n\n  private _renderGuides(_draggedRect: IRect): void {\n    const intersect = this.findClosestAlignment(_draggedRect);\n    if (intersect.xResult.value !== undefined) {\n      this._lineService.drawVerticalLine(\n        intersect.xResult.value,\n        this._size,\n        this._canvasTransform,\n      );\n    } else {\n      this._lineService.hideVerticalLine();\n    }\n    if (intersect.yResult.value !== undefined) {\n      this._lineService.drawHorizontalLine(\n        intersect.yResult.value,\n        this._size,\n        this._canvasTransform,\n      );\n    } else {\n      this._lineService.hideHorizontalLine();\n    }\n  }\n\n  public findClosestAlignment(_draggedRect: IRect): ISnapResult {\n    return findClosestAlignment(this._rects, _draggedRect, this._alignThreshold);\n  }\n\n  public clearGuides(): 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 SnapLineElement {\n  private readonly _element: HTMLElement;\n\n  constructor(browser: BrowserService, hostElement: HTMLElement) {\n    this._element = browser.document.createElement('div');\n    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\n    type RectKey = keyof ILineAlignmentRect;\n    for (const [prop, value] of Object.entries(object) as [RectKey, number | undefined][]) {\n      if (value != null) {\n        this._element.style.setProperty(prop as string, `${value}px`);\n      }\n    }\n    //\n    //\n    // Object.keys(object).forEach((key: string) => {\n    //   this.element.style[ key ] = object[ key ] + 'px';\n    // });\n  }\n}\n","import { ISize, ITransformModel } from '@foblex/2d';\nimport { SnapLineElement } from './snap-line-element';\nimport { BrowserService } from '@foblex/platform';\n\nexport class SnapLineService {\n  private readonly _horizontalLine: SnapLineElement;\n  private readonly _verticalLine: SnapLineElement;\n\n  constructor(browser: BrowserService, hostElement: HTMLElement) {\n    this._horizontalLine = new SnapLineElement(browser, hostElement);\n    this._verticalLine = new SnapLineElement(browser, hostElement);\n    this._horizontalLine.hide();\n    this._verticalLine.hide();\n  }\n\n  public drawVerticalLine(x: number, size: ISize, transform: ITransformModel): void {\n    this._verticalLine.show();\n    this._verticalLine.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._horizontalLine.show();\n    this._horizontalLine.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._verticalLine.hide();\n  }\n\n  public hideHorizontalLine(): void {\n    this._horizontalLine.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 { CreateSnapLinesRequest } from './create-snap-lines-request';\nimport { 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 { MoveSummaryDragHandler } from '../../index';\nimport { SnapLinesDragHandler } from './snap-lines.drag-handler';\nimport { FNodeBase } from '../../../f-node';\nimport { SnapLineService } from '../../../f-line-alignment';\nimport { BrowserService } from '@foblex/platform';\n\n@Injectable()\n@FExecutionRegister(CreateSnapLinesRequest)\nexport class CreateSnapLines implements IExecution<CreateSnapLinesRequest, void> {\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _browser = inject(BrowserService);\n  private readonly _injector = inject(Injector);\n\n  private _lineService: SnapLineService | undefined;\n\n  public handle({ summaryHandler }: CreateSnapLinesRequest): void {\n    this._addLineAlignmentDragHandler(summaryHandler);\n  }\n\n  private _addLineAlignmentDragHandler(handler: MoveSummaryDragHandler): void {\n    handler.setLineAlignment(\n      new SnapLinesDragHandler(\n        this._injector,\n        this._lineService || this._createLineService(),\n        this._getFlowHostSize(),\n        this._collectNotDraggedNodeRects(this._allDraggedNodes(handler)),\n      ),\n    )\n  }\n\n  private _allDraggedNodes(handler: MoveSummaryDragHandler): FNodeBase[] {\n    return handler.allDraggedNodeHandlers.map((x) => x.nodeOrGroup);\n  }\n\n  private _getFlowHostSize(): ISize {\n    return this._mediator.execute<HTMLElement>(new GetFlowHostElementRequest()).getBoundingClientRect();\n  }\n\n  private _createLineService(): SnapLineService {\n    this._lineService = new SnapLineService(this._browser, this._store.fLineAlignment!.hostElement);\n\n    return this._lineService;\n  }\n\n  private _collectNotDraggedNodeRects(allDraggedNodes: FNodeBase[]): IRect[] {\n    return this._calculateNotDraggedNodes(allDraggedNodes).map((x) => {\n      return this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(x.hostElement));\n    })\n  }\n\n  private _calculateNotDraggedNodes(allDraggedNodes: FNodeBase[]): FNodeBase[] {\n    return this._store.fNodes.filter((x) => !allDraggedNodes.includes(x));\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport { IPointerEvent } from '../../../drag-toolkit';\n\nexport class FNodeMovePreparationRequest {\n  static readonly fToken = Symbol('FNodeMovePreparationRequest');\n\n  constructor(\n    public event: IPointerEvent,\n    public fTrigger: FEventTrigger,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FNodeMovePreparationRequest } from './f-node-move-preparation.request';\nimport { 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 { CreateDragModelFromSelectionRequest } from '../create-drag-model-from-selection';\nimport {\n  FEventTrigger,\n  isValidEventTrigger,\n  SelectAndUpdateNodeLayerRequest,\n} from '../../../domain';\nimport { isClosestElementHasClass } from '@foblex/utils';\nimport { CreateSnapLinesRequest } from '../create-snap-lines';\nimport { MoveSummaryDragHandler } from '../move-summary-drag-handler';\nimport { IPointerEvent } from '../../../drag-toolkit';\n\n@Injectable()\n@FExecutionRegister(FNodeMovePreparationRequest)\nexport class FNodeMovePreparationExecution\n  implements IExecution<FNodeMovePreparationRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  private get _scale(): number {\n    return this._store.fCanvas?.transform.scale || 1;\n  }\n\n  private get _fHost(): HTMLElement {\n    return this._store.fFlow!.hostElement;\n  }\n\n  private _fNode: FNodeBase | undefined;\n\n  public handle({ event, fTrigger }: FNodeMovePreparationRequest): void {\n    if (!this._isValid(event) || !this._isValidTrigger(event, fTrigger)) {\n      return;\n    }\n\n    const summaryDragHandler = this._calculateDraggedItems(this._fNode!);\n\n    this._dragContext.onPointerDownScale = this._scale;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(event.getPosition())\n      .elementTransform(this._fHost)\n      .div(this._scale);\n    this._dragContext.draggableItems = [summaryDragHandler];\n\n    if (this._store.fLineAlignment) {\n      this._mediator.execute<void>(new CreateSnapLinesRequest(summaryDragHandler));\n    }\n  }\n\n  private _isValid(event: IPointerEvent): boolean {\n    return (\n      this._dragContext.isEmpty() &&\n      this._isDragHandleElement(event.targetElement) &&\n      !!this._getNode(event.targetElement)\n    );\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._store.fNodes.find((x) => x.isContains(element) && !x.fDraggingDisabled());\n\n    return this._fNode;\n  }\n\n  private _isValidTrigger(event: IPointerEvent, fTrigger: FEventTrigger): boolean {\n    return isValidEventTrigger(event.originalEvent, fTrigger);\n  }\n\n  //We drag nodes from selection model\n  private _calculateDraggedItems(fNode: FNodeBase): MoveSummaryDragHandler {\n    let result: MoveSummaryDragHandler;\n    if (!fNode.fSelectionDisabled()) {\n      // Need to select node before drag\n      setTimeout(() => {\n        this._mediator.execute(new SelectAndUpdateNodeLayerRequest(fNode));\n      });\n\n      result = this._dragModelFromSelection();\n    } else {\n      // User can drag node that can't be selected\n      result = this._dragModelFromSelection(fNode);\n    }\n\n    return result;\n  }\n\n  private _dragModelFromSelection(nodeWithDisabledSelection?: FNodeBase): MoveSummaryDragHandler {\n    return this._mediator.execute(\n      new CreateDragModelFromSelectionRequest(nodeWithDisabledSelection),\n    );\n  }\n}\n","import { IPointerEvent } from \"../../../drag-toolkit\";\n\nexport class FNodeMoveFinalizeRequest {\n  static readonly fToken = Symbol('FNodeMoveFinalizeRequest');\n\n  constructor(\n    public event: IPointerEvent,\n  ) {\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\n/**\n * Event that is emitted when nodes and groups are moved.\n * It contains the moved nodes and groups and their new positions.\n */\nexport class FMoveNodesEvent {\n\n  constructor(\n    // Moved nodes and groups\n    public fNodes: { id: string; position: IPoint }[],\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 { ISnapResult, ISnapCoordinate } from '../../../f-line-alignment';\nimport { MoveSummaryDragHandler } from '../move-summary-drag-handler';\nimport { FNodeBase } from '../../../f-node';\nimport { FMoveNodesEvent } from \"../f-move-nodes.event\";\n\n@Injectable()\n@FExecutionRegister(FNodeMoveFinalizeRequest)\nexport class FNodeMoveFinalizeExecution implements IExecution<FNodeMoveFinalizeRequest, void> {\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  private _summaryHandler: MoveSummaryDragHandler | undefined;\n\n  private get _fHost(): HTMLElement {\n    return this._store.fFlow!.hostElement;\n  }\n\n  public handle({ event }: FNodeMoveFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    const difference = this._getDifferenceBetweenPreparationAndFinalize(event.getPosition());\n\n    const snapLinesDifference = this._applySnapLinesDifference(difference, this._getSnapLinesResult(difference))\n\n    this._finalizeMove(snapLinesDifference);\n\n    this._applyConnectionUnderDroppedNode();\n  }\n\n  private _isValid(): boolean {\n    this._summaryHandler = this._dragContext.draggableItems.find((x) => x instanceof MoveSummaryDragHandler);\n\n    return !!this._summaryHandler;\n  }\n\n  private _getDifferenceBetweenPreparationAndFinalize(position: IPoint): Point {\n    return Point.fromPoint(position).elementTransform(this._fHost)\n      .div(this._dragContext.onPointerDownScale)\n      .sub(this._dragContext.onPointerDownPosition);\n  }\n\n  private _getSnapLinesResult(difference: IPoint): ISnapResult | undefined {\n    return this._summaryHandler?.findClosestAlignment(difference);\n  }\n\n  private _applySnapLinesDifference(difference: IPoint, intersection: ISnapResult | 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\n    return difference;\n  }\n\n  private _isIntersectValue(result: ISnapCoordinate): boolean {\n    return result.value !== undefined && result.value !== null;\n  }\n\n  private _finalizeMove(snappedDifference: IPoint): void {\n    this._summaryHandler?.rootHandlers.forEach((x) => x.assignFinalConstraints());\n    this._summaryHandler!.onPointerMove({ ...snappedDifference });\n    this._summaryHandler!.onPointerUp?.();\n\n    this._store.fDraggable?.fMoveNodes.emit(this._createMoveNodesEvent());\n  }\n\n  private _createMoveNodesEvent(): FMoveNodesEvent {\n    const eventNodes = this._summaryHandler!.fData.fNodeIds.map((id: string) => {\n      return {\n        id,\n        position: this._store.fNodes.find(x => x.fId() === id)!._position,\n      }\n    });\n\n    return new FMoveNodesEvent(eventNodes);\n  }\n\n  private _applyConnectionUnderDroppedNode(): void {\n    if (this._isDraggedJustOneNode() && this._store.fDraggable?.fEmitOnNodeIntersect) {\n      setTimeout(() => this._mediator.execute(new IsConnectionUnderNodeRequest(this._firstNodeOrGroup())));\n    }\n  }\n\n  private _isDraggedJustOneNode(): boolean {\n    return this._summaryHandler!.rootHandlers.length === 1;\n  }\n\n  private _firstNodeOrGroup(): FNodeBase {\n    return this._summaryHandler!.rootHandlers[0].nodeOrGroup;\n  }\n}\n","import { CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS } from './create-drag-model-from-selection';\nimport { FNodeMoveFinalizeExecution } from './move-finalize';\nimport { FNodeMovePreparationExecution } from './move-preparation';\nimport { CreateSnapLines } from './create-snap-lines';\n\nexport const NODE_PROVIDERS = [\n\n  ...CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS,\n\n  CreateSnapLines,\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 { DropToGroupFinalizeRequest } from './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 { MoveSummaryDragHandler } from '../../f-node-move';\nimport { FDropToGroupEvent } from '../f-drop-to-group.event';\nimport { IPointerEvent } from \"../../../drag-toolkit\";\n\n@Injectable()\n@FExecutionRegister(DropToGroupFinalizeRequest)\nexport class DropToGroupFinalize\n  implements IExecution<DropToGroupFinalizeRequest, void> {\n\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: DropToGroupFinalizeRequest): 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._dragContext.draggableItems\n      .some((x) => x instanceof FNodeDropToGroupDragHandler);\n  }\n\n  private _emitDroppedChildrenEvent(fTargetId: string, event: IPointerEvent): void {\n    this._store.fDraggable?.fDropToGroup.emit(\n      new FDropToGroupEvent(fTargetId, this._getDroppedIds(), 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\n    return result;\n  }\n\n  private _findDragHandleItem(): FNodeDropToGroupDragHandler | undefined {\n    return this._dragContext.draggableItems\n      .find((x) => x instanceof FNodeDropToGroupDragHandler);\n  }\n\n  private _getDroppedIds(): string[] {\n    const nodeOrGroups = this._getSummaryHandler().allDraggedNodeHandlers\n      .map((x) => x.nodeOrGroup);\n\n    const idSet = new Set(nodeOrGroups.map(n => n.fId()));\n\n    return nodeOrGroups.filter(node => {\n      const parentId = node.fParentId();\n\n      return !parentId || !idSet.has(parentId);\n    }).map(node => node.fId());\n  }\n\n  private _getSummaryHandler(): MoveSummaryDragHandler {\n    const result = this._dragContext.draggableItems\n      .find((x) => x instanceof MoveSummaryDragHandler);\n    if (!result) {\n      throw new Error('Drop To Group can`t be used without MoveSummaryDragHandler');\n    }\n\n    return result;\n  }\n}\n","import { IPointerEvent } from '../../../drag-toolkit';\n\nexport class DropToGroupPreparationRequest {\n  static readonly fToken = Symbol('DropToGroupPreparationRequest');\n\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { IMinMaxPoint, IPoint } from '@foblex/2d';\nimport { Injector } from '@angular/core';\nimport { FComponentsStore } from \"../../../f-storage\";\n\nexport class ExternalRectConstraint {\n\n  private readonly _vCellSize: number;\n  private readonly _hCellSize: number;\n  private readonly _adjustCellSize: boolean;\n\n  constructor(\n    injector: Injector,\n    private _onPointerDown: IPoint,\n    private readonly _limit: IMinMaxPoint,\n  ) {\n    const store = injector.get(FComponentsStore);\n    this._vCellSize = store.fDraggable!.vCellSize();\n    this._hCellSize = store.fDraggable!.hCellSize();\n    this._adjustCellSize = store.fDraggable!.fCellSizeWhileDragging();\n  }\n\n  public limit(difference: IPoint): IPoint {\n    const { min, max } = this._limit;\n\n    const { x, y } = this._cellSizeStrategies[ +this._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 { FExternalItemBase } from '../../f-external-item-base';\n\nexport class FExternalItemCreatePlaceholderRequest {\n  static readonly fToken = Symbol('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\n    return result;\n  }\n}\n","import { FExternalItemBase } from '../../f-external-item-base';\n\nexport class FExternalItemCreatePreviewRequest {\n  static readonly fToken = Symbol('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\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  static readonly fToken = Symbol('FExternalItemFinalizeRequest');\n\n  constructor(\n    public event: IPointerEvent,\n  ) {\n  }\n}\n","import { IPoint, IRect, ITransformModel, Point, RectExtensions } from '@foblex/2d';\nimport {\n  ExternalRectConstraint,\n  FExternalItemBase,\n  FExternalItemCreatePlaceholderRequest,\n  FExternalItemCreatePreviewRequest,\n  IFExternalItemDragResult,\n} from '../../f-external-item';\nimport { FDragHandlerResult, IFDragHandler } 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 _mediator: FMediator;\n  private readonly _browser: BrowserService;\n  private readonly _store: FComponentsStore;\n\n  private _preview: HTMLElement | SVGElement | undefined;\n  private _placeholder: HTMLElement | SVGElement | undefined;\n  private _onPointerDownRect: IRect = RectExtensions.initialize();\n\n  private get _fItemHost(): HTMLElement | SVGElement {\n    return this._fExternalItem.hostElement;\n  }\n\n  private get _body(): Element {\n    return this._browser.document.fullscreenElement ?? this._browser.document.body;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._store.fCanvas!.transform;\n  }\n\n  private readonly _fItemHostDisplay: string | undefined;\n\n  private _applyConstraints: (difference: IPoint) => IPoint = (difference) => difference;\n\n  constructor(\n    injector: Injector,\n    private _fExternalItem: FExternalItemBase,\n  ) {\n    this._store = injector.get(FComponentsStore);\n    this._fResult = injector.get(FDragHandlerResult);\n    this._mediator = injector.get(FMediator);\n    this._browser = injector.get(BrowserService);\n    this.fData = { fData: _fExternalItem.fData };\n    this._initializeConstraints(injector);\n    this._fItemHostDisplay = this._fItemHost.style.display;\n  }\n\n  private _initializeConstraints(injector: Injector): void {\n    const constraint = new ExternalRectConstraint(injector, this._getStartPoint(), infinityMinMax())\n    this._applyConstraints = (difference: IPoint): IPoint => {\n      return constraint.limit(difference);\n    }\n  }\n\n  private _getStartPoint(): IPoint {\n    return this._mediator.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._mediator.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._mediator.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._browser.window.pageYOffset || this._browser.document.documentElement.scrollTop;\n    const scrollLeft = this._browser.window.pageXOffset || this._browser.document.documentElement.scrollLeft;\n    const offsetTop = rect.top + scrollTop;\n    const offsetLeft = rect.left + scrollLeft;\n\n    return RectExtensions.initialize(offsetLeft, offsetTop, rect.width, rect.height);\n  }\n\n  public onPointerMove(difference: IPoint): void {\n\n    const differenceWithRestrictions = Point.fromPoint(this._applyConstraints(difference))\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\n  implements IExecution<FExternalItemFinalizeRequest, void>\n{\n  private readonly _fResult: FDragHandlerResult<IFExternalItemDragResult> =\n    inject(FDragHandlerResult);\n\n  private readonly _fMediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _fBrowser = inject(BrowserService);\n\n  private get _fHost(): HTMLElement {\n    return this._store.fFlow!.hostElement;\n  }\n\n  private get _fCreateNode(): EventEmitter<FCreateNodeEvent> {\n    return this._store.fDraggable!.fCreateNode;\n  }\n\n  private get _fDragHandler(): FExternalItemDragHandler {\n    return this._dragContext.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,\n      request.event.getPosition(),\n    );\n\n    this._fDragHandler.onPointerUp();\n    this._dragContext.draggableItems = [];\n  }\n\n  private _isValid(): boolean {\n    return this._dragContext.draggableItems.some((x) => x instanceof FExternalItemDragHandler);\n  }\n\n  private _getDestinationNodeOrGroupId(): string | undefined {\n    const dropToGroupHandler = this._getDropToGroupHandler();\n    const result = dropToGroupHandler.fNodeWithRect?.node.fId();\n    dropToGroupHandler.onPointerUp?.();\n\n    return result;\n  }\n\n  private _getDropToGroupHandler(): FNodeDropToGroupDragHandler {\n    const result = this._dragContext.draggableItems.find(\n      (x) => x instanceof FNodeDropToGroupDragHandler,\n    );\n    if (!result) {\n      throw new Error('NodeDragToParentDragHandler not found');\n    }\n\n    return result;\n  }\n\n  private _getElementsFromPoint(position: IPoint): HTMLElement[] {\n    return this._fBrowser.document\n      .elementsFromPoint(position.x, position.y)\n      .filter(\n        (x) => !x.closest('.f-external-item') && !x.closest('.f-external-item-preview'),\n      ) as HTMLElement[];\n  }\n\n  private _emitEvent(\n    elements: HTMLElement[],\n    destinationNodeOrGroupId: string | undefined,\n    eventPosition: IPoint,\n  ): void {\n    if (this._isPointerInCanvasRect(elements)) {\n      this._fCreateNode.emit(\n        new FCreateNodeEvent(\n          this._getPreviewRect(),\n          this._fResult.getData().fExternalItem.fData,\n          destinationNodeOrGroupId,\n          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>(\n      new GetNormalizedElementRectRequest(this._fResult.getData().preview),\n    );\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport { IPointerEvent } from \"../../../drag-toolkit\";\n\nexport class FExternalItemPreparationRequest {\n  static readonly fToken = Symbol('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 _dragContext = inject(FDraggableDataContext);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _injector = inject(Injector);\n\n  private get _fHost(): HTMLElement {\n    return this._store.fFlow!.hostElement;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._store.fCanvas!.transform;\n  }\n\n  public handle(request: FExternalItemPreparationRequest): void {\n    if (!this._isValid(request) || !this._isValidTrigger(request)) {\n      return;\n    }\n    this._dragContext.onPointerDownScale = this._transform.scale;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost).div(this._transform.scale);\n\n    this._dragContext.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  static readonly fToken = Symbol('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\n  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    const isTargetItemExternal = this._isExternalItem(event.target as HTMLElement);\n    const isTargetParentItemExternal = this._isExternalItem(\n      (event.target as Node).parentNode as HTMLElement,\n    );\n\n    return isTargetItemExternal || isTargetParentItemExternal;\n  }\n\n  private _isExternalItem(target: HTMLElement): boolean {\n    let result = false;\n    try {\n      result = isExternalItem(target);\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\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 = unknown> implements IHasHostElement {\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<unknown> | undefined;\n\n  public abstract fPreviewMatchSize: boolean;\n\n  public abstract fPlaceholder: TemplateRef<unknown> | 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  private readonly _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 = 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: [{ provide: F_EXTERNAL_ITEM, useExisting: FExternalItemDirective }],\n})\nexport class FExternalItemDirective<TData>\n  extends FExternalItemBase<TData>\n  implements OnInit, OnDestroy\n{\n  public override hostElement = inject(ElementRef).nativeElement as HTMLElement;\n\n  private readonly _externalItemService = inject(FExternalItemService);\n\n  @Input()\n  public override fExternalItemId: string = `f-external-item-${uniqueId++}`;\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<unknown> | undefined;\n\n  @Input({ transform: booleanAttribute })\n  public override fPreviewMatchSize: boolean = true;\n\n  @Input()\n  public override fPlaceholder: TemplateRef<unknown> | undefined;\n\n  public ngOnInit(): void {\n    this._externalItemService.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._externalItemService.removeItem(this);\n  }\n}\n","import { Directive, inject, OnDestroy, OnInit, TemplateRef } 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 = unknown> implements OnInit, OnDestroy {\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 { Directive, inject, OnDestroy, OnInit, TemplateRef } 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 = unknown> implements OnInit, OnDestroy {\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 { INodeWithRect } from \"../../domain\";\n\nexport class SortContainersForDropByLayerRequest {\n  static readonly fToken = Symbol('SortContainersForDropByLayerRequest');\n\n  constructor(\n    public containersForDrop: INodeWithRect[],\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { SortContainersForDropByLayerRequest } from \"./sort-containers-for-drop-by-layer-request\";\nimport { INodeWithRect } from \"../../domain\";\n\n@Injectable()\n@FExecutionRegister(SortContainersForDropByLayerRequest)\nexport class SortContainersForDropByLayer implements IExecution<SortContainersForDropByLayerRequest, INodeWithRect[]> {\n\n  public handle({ containersForDrop }: SortContainersForDropByLayerRequest): INodeWithRect[] {\n    const decorated = containersForDrop.map((item, idx) => ({ item, idx }));\n\n    decorated.sort((a, b) => {\n      const elA = a.item.node.hostElement;\n      const elB = b.item.node.hostElement;\n\n      const domOrder = this._domOrder(elA, elB);\n\n      if (domOrder !== 0) {\nreturn -domOrder;\n}\n\n      return a.idx - b.idx;\n    });\n\n    return decorated.map(d => d.item);\n  }\n\n  private _domOrder(a: Element, b: Element): number {\n    if (a === b) {\nreturn 0;\n}\n\n    const pos = a.compareDocumentPosition(b);\n\n    if (pos & Node.DOCUMENT_POSITION_FOLLOWING) {\nreturn -1;\n}\n    if (pos & Node.DOCUMENT_POSITION_PRECEDING) {\nreturn 1;\n}\n\n    if (pos & Node.DOCUMENT_POSITION_DISCONNECTED) {\n      const ar = (a as HTMLElement).getBoundingClientRect?.() ?? { top: 0, left: 0 };\n      const br = (b as HTMLElement).getBoundingClientRect?.() ?? { top: 0, left: 0 };\n\n      if (ar.top !== br.top) {\nreturn ar.top < br.top ? -1 : 1;\n}\n      if (ar.left !== br.left) {\nreturn ar.left < br.left ? -1 : 1;\n}\n\n      return 0;\n    }\n\n    return 0;\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { DropToGroupPreparationRequest } from './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 {\n  GetChildNodeIdsRequest,\n  GetNormalizedElementRectRequest,\n  GetParentNodesRequest,\n} from '../../../domain';\nimport { FGroupDirective, FNodeBase } from '../../../f-node';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FNodeDropToGroupDragHandler } from '../f-node-drop-to-group.drag-handler';\nimport { MoveSummaryDragHandler } from '../../f-node-move';\nimport { FExternalItemDragHandler } from '../../../f-external-item';\nimport { SortContainersForDropByLayerRequest } from '../sort-containers-for-drop-by-layer';\n\n@Injectable()\n@FExecutionRegister(DropToGroupPreparationRequest)\nexport class DropToGroupPreparation implements IExecution<DropToGroupPreparationRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _injector = inject(Injector);\n\n  private get _allNodesAndGroups(): FNodeBase[] {\n    return this._store.fNodes;\n  }\n\n  private get _canvasTransform(): ITransformModel {\n    return this._store.fCanvas!.transform;\n  }\n\n  private get _canvasPosition(): IPoint {\n    return PointExtensions.sum(\n      this._canvasTransform.position,\n      this._canvasTransform.scaledPosition,\n    );\n  }\n\n  public handle({ event }: DropToGroupPreparationRequest): void {\n    if (!this._canPrepareDropToGroup()) {\n      return;\n    }\n    const _dragTarget = this._allNodesAndGroups.find((x) => x.isContains(event.targetElement));\n\n    if (!_dragTarget && !this._isExternalItemDragHandler()) {\n      throw new Error('Drag target node not found');\n    }\n\n    let targetRects = this._mediator.execute<INodeWithRect[]>(\n      new SortContainersForDropByLayerRequest(this._collectGroupingTargetRects()),\n    );\n\n    if (_dragTarget) {\n      // We can drop items only to children of direct parent\n      const childIds = this._mediator.execute<string[]>(\n        new GetChildNodeIdsRequest(_dragTarget.fParentId()),\n      );\n      if (childIds.length) {\n        targetRects = targetRects.filter((t) => childIds.includes(t.node.fId()));\n      }\n    }\n\n    this._dragContext.draggableItems.push(\n      new FNodeDropToGroupDragHandler(this._injector, targetRects),\n    );\n  }\n\n  private _canPrepareDropToGroup(): boolean {\n    return this._isNodeDragHandler() || this._isExternalItemDragHandler();\n  }\n\n  private _isNodeDragHandler(): boolean {\n    return this._dragContext.draggableItems.some((x) => x instanceof MoveSummaryDragHandler);\n  }\n\n  private _isExternalItemDragHandler(): boolean {\n    return this._dragContext.draggableItems.some((x) => x instanceof FExternalItemDragHandler);\n  }\n\n  private _collectGroupingTargetRects(): INodeWithRect[] {\n    const dragged = this._draggedNodes();\n    const draggingGroup = dragged.some((x) => x instanceof FGroupDirective);\n\n    const draggedNodes = this._draggedNodesWithParents(dragged);\n\n    return this._eligibleTargets(draggedNodes, draggingGroup).map((node) => {\n      const rect = this._mediator.execute<IRect>(\n        new GetNormalizedElementRectRequest(node.hostElement),\n      );\n\n      return { node, rect: this._toCanvasRect(rect) };\n    });\n  }\n\n  private _draggedNodes(): FNodeBase[] {\n    return (\n      this._dragContext.draggableItems\n        .find((x) => x instanceof MoveSummaryDragHandler)\n        ?.allDraggedNodeHandlers.map((x) => x.nodeOrGroup) || []\n    );\n  }\n\n  /**\n   * Returns the list of dragged nodes extended with all of their parent nodes.\n   *\n   * This ensures that parent nodes are excluded from the potential drop targets,\n   * since they already act as containers for the dragged elements.\n   */\n  private _draggedNodesWithParents(nodes: FNodeBase[]): FNodeBase[] {\n    return nodes.reduce((result: FNodeBase[], x: FNodeBase) => {\n      result.push(x, ...this._mediator.execute<FNodeBase[]>(new GetParentNodesRequest(x)));\n\n      return result;\n    }, []);\n  }\n\n  private _eligibleTargets(dragged: FNodeBase[], draggingGroup: boolean): FNodeBase[] {\n    const nonDragged = this._allNodesAndGroups.filter((x) => !dragged.includes(x));\n\n    return draggingGroup ? nonDragged.filter((x) => x instanceof FGroupDirective) : nonDragged;\n  }\n\n  private _toCanvasRect(rect: IRect): IRect {\n    return RectExtensions.initialize(\n      rect.x * this._canvasTransform.scale + this._canvasPosition.x,\n      rect.y * this._canvasTransform.scale + this._canvasPosition.y,\n      rect.width * this._canvasTransform.scale,\n      rect.height * this._canvasTransform.scale,\n    );\n  }\n}\n","import { DropToGroupPreparation } from './drop-to-group-preparation';\nimport { DropToGroupFinalize } from './drop-to-group-finalize';\nimport { SortContainersForDropByLayer } from './sort-containers-for-drop-by-layer';\n\nexport const NODE_DROP_TO_GROUP_PROVIDERS = [\n\n  SortContainersForDropByLayer,\n\n  DropToGroupPreparation,\n\n  DropToGroupFinalize,\n];\n","import { IRect } from '@foblex/2d';\n\nexport class ApplyChildResizeConstraintsRequest {\n  static readonly fToken = Symbol('ApplyChildResizeConstraintsRequest');\n\n  constructor(\n    public readonly rect: IRect,\n    public readonly childrenBounds: IRect | null,\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ApplyChildResizeConstraintsRequest } from './apply-child-resize-constraints-request';\nimport { IRect } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\n\n@Injectable()\n@FExecutionRegister(ApplyChildResizeConstraintsRequest)\nexport class ApplyChildResizeConstraints\n  implements IExecution<ApplyChildResizeConstraintsRequest, void> {\n\n  public handle({ rect, childrenBounds }: ApplyChildResizeConstraintsRequest): void {\n    if (!childrenBounds) {\nreturn;\n}\n    this._apply(rect, 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    rect.width = Math.max(0, rect.width);\n    rect.height = Math.max(0, rect.height);\n  }\n\n  private _restrictLeft(rect: IRect, restrictions: IRect): void {\n    const delta = rect.x - restrictions.x;\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;\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;\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;\n    if (rect.y + rect.height <= maxBottom) {\n      rect.height = maxBottom - rect.y;\n    }\n  }\n}\n","import { IRect } from '@foblex/2d';\nimport { IResizeLimits } from \"../constraint\";\n\nexport class ApplyParentResizeConstraintsRequest {\n  static readonly fToken = Symbol('ApplyParentResizeConstraintsRequest');\n\n  constructor(\n    public rect: IRect,\n    public limits: IResizeLimits,\n  ) {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ApplyParentResizeConstraintsRequest } from './apply-parent-resize-constraints-request';\nimport { IRect } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { IResizeLimit, IResizeLimits, IResizeOverflow } from '../constraint';\n\n/**\n * Resize constraints behavior:\n * - SOFT (parents): if the child hits the innerRect, a NEW parent rect is calculated\n *   from the original boundingRect and applied via updatePosition/Size/redraw.\n *   The original boundingRect/innerRect are never mutated.\n * - HARD (child): the child rect is clamped to stay within the hard.innerRect.\n */\n@Injectable()\n@FExecutionRegister(ApplyParentResizeConstraintsRequest)\nexport class ApplyParentResizeConstraints\n  implements IExecution<ApplyParentResizeConstraintsRequest, void>\n{\n  /** Entry point: applies soft and hard resize constraints. */\n  public handle({ rect, limits }: ApplyParentResizeConstraintsRequest): void {\n    this._applyResizeConstraints(rect, limits);\n  }\n\n  // ──────────────────────────────────────────────────────────────────────────────\n  // Top–level orchestration\n  // ──────────────────────────────────────────────────────────────────────────────\n\n  private _applyResizeConstraints(childRect: IRect, limits: IResizeLimits): void {\n    if (!limits) {\n      return;\n    }\n\n    // 1) Clone child rect and pre-clamp it by hard limit (calculation only).\n    const childForCalc: IRect = this._clampedCopyForCalculation(childRect, limits);\n\n    // 2) Apply SOFT expansions for all parent limits based on the clamped child.\n    this._applySoftParentExpansions(childForCalc, limits.softLimits);\n\n    // 3) Final HARD clamp on the real child rect.\n    if (limits.hardLimit) {\n      this._clampRectToInner(childRect, limits.hardLimit.innerRect);\n    }\n  }\n\n  // ──────────────────────────────────────────────────────────────────────────────\n  // Hard-limit stage\n  // ──────────────────────────────────────────────────────────────────────────────\n\n  /** Returns a copy of the child rect pre-clamped to the hard innerRect if it exists. */\n  private _clampedCopyForCalculation(rect: IRect, limits: IResizeLimits): IRect {\n    const copy: IRect = { ...rect };\n    if (limits.hardLimit) {\n      this._clampRectToInner(copy, limits.hardLimit.innerRect);\n    }\n\n    return copy;\n  }\n\n  /** Clamps the rect inside the given innerRect. Mutates the rect directly. */\n  private _clampRectToInner(rect: IRect, inner: IRect): void {\n    // Left\n    if (rect.x < inner.x) {\n      const diff = inner.x - rect.x;\n      rect.x += diff;\n      rect.width -= diff;\n    }\n\n    // Top\n    if (rect.y < inner.y) {\n      const diff = inner.y - rect.y;\n      rect.y += diff;\n      rect.height -= diff;\n    }\n\n    // Right\n    const rightMax = inner.x + inner.width;\n    if (rect.x + rect.width > rightMax) {\n      rect.width = rightMax - rect.x;\n    }\n\n    // Bottom\n    const bottomMax = inner.y + inner.height;\n    if (rect.y + rect.height > bottomMax) {\n      rect.height = bottomMax - rect.y;\n    }\n\n    // Ensure non-negative sizes\n    rect.width = Math.max(0, rect.width);\n    rect.height = Math.max(0, rect.height);\n  }\n\n  // ──────────────────────────────────────────────────────────────────────────────\n  // Soft-limit stage\n  // ──────────────────────────────────────────────────────────────────────────────\n\n  /** Iterates over all soft limits and applies expansion if overflow is detected. */\n  private _applySoftParentExpansions(childForCalc: IRect, softLimits: IResizeLimit[]): void {\n    if (!softLimits?.length) {\n      return;\n    }\n    for (const limit of softLimits) {\n      this._expandParentFromOriginalIfOverflow(childForCalc, limit);\n    }\n  }\n\n  /**\n   * If the child overflows the parent's innerRect, calculate a new parent rect\n   * based on the original boundingRect and apply it. Otherwise, reset to original.\n   */\n  private _expandParentFromOriginalIfOverflow(child: IRect, limit: IResizeLimit): void {\n    const inner = limit.innerRect; // detector only\n    const original = limit.boundingRect; // parent's original rect\n\n    const overflow = this._computeOverflow(inner, child);\n\n    if (!this._hasOverflow(overflow)) {\n      this._applyParentRect(limit, original);\n\n      return;\n    }\n\n    const nextParent = this._buildExpandedParentRect(original, overflow);\n    this._applyParentRect(limit, nextParent);\n  }\n\n  /** Returns true if any overflow exists. */\n  private _hasOverflow(o: IResizeOverflow): boolean {\n    return !!(o.left || o.top || o.right || o.bottom);\n  }\n\n  /** Computes overflow values for each side relative to innerRect. */\n  private _computeOverflow(inner: IRect, child: IRect): IResizeOverflow {\n    const left = Math.max(0, inner.x - child.x);\n    const top = Math.max(0, inner.y - child.y);\n    const right = Math.max(0, child.x + child.width - (inner.x + inner.width));\n    const bottom = Math.max(0, child.y + child.height - (inner.y + inner.height));\n\n    return { left, top, right, bottom };\n  }\n\n  /** Builds new parent rect from original rect and overflow values. */\n  private _buildExpandedParentRect(original: IRect, o: IResizeOverflow): IRect {\n    const parent: IRect = { ...original };\n\n    if (o.left) {\n      parent.x = original.x - o.left;\n      parent.width = original.width + o.left;\n    }\n    if (o.top) {\n      parent.y = original.y - o.top;\n      parent.height = original.height + o.top;\n    }\n    if (o.right) {\n      parent.width = (parent.width ?? original.width) + o.right;\n    }\n    if (o.bottom) {\n      parent.height = (parent.height ?? original.height) + o.bottom;\n    }\n\n    return parent;\n  }\n\n  /** Applies the calculated parent rect to the node/group. */\n  private _applyParentRect(limit: IResizeLimit, rect: IRect): void {\n    limit.nodeOrGroup.updatePosition(rect);\n    limit.nodeOrGroup.updateSize(rect);\n    limit.nodeOrGroup.redraw();\n  }\n}\n","import { IPoint, IRect, ISize } from '@foblex/2d';\nimport { EFResizeHandleType } from '../../../f-node';\n\nexport class CalculateChangedRectFromDifferenceRequest {\n  static readonly fToken = Symbol('CalculateChangedRectFromDifferenceRequest');\n\n  constructor(\n    public readonly originalRect: IRect,\n    public readonly difference: IPoint,\n    public readonly handleType: EFResizeHandleType,\n    public readonly minimumSize: ISize,\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 { CalculateChangedRectFromDifferenceRequest } from './calculate-changed-rect-from-difference-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(CalculateChangedRectFromDifferenceRequest)\nexport class CalculateChangedRectFromDifference\n  implements IExecution<CalculateChangedRectFromDifferenceRequest, IRect> {\n\n  public handle({ originalRect, difference, handleType, minimumSize }: CalculateChangedRectFromDifferenceRequest): IRect {\n    const changedRect = this._changeSizeInRect(originalRect, difference, RESIZE_DIRECTIONS[handleType], minimumSize);\n\n    return this._changePosition(originalRect, difference, RESIZE_DIRECTIONS[handleType], changedRect);\n  }\n\n  private _changeSizeInRect(\n    originalRect: IRect, difference: IPoint, direction: IPoint, minimumSize: ISize,\n  ): IRect {\n    let w = originalRect.width + direction.x * difference.x;\n    let h = originalRect.height + direction.y * difference.y;\n\n    let rx = 0;\n    let ry = 0;\n\n    if (w < 0) {\n      rx = w;\n      w = Math.abs(w);\n    }\n\n    if (w < minimumSize.width) {\n      if (direction.x === -1) {\n        rx += (w - minimumSize.width);\n      }\n      w = minimumSize.width;\n    }\n\n    if (h < 0) {\n      ry = h;\n      h = Math.abs(h);\n    }\n\n    if (h < minimumSize.height) {\n      if (direction.y === -1) {\n        ry += (h - minimumSize.height);\n      }\n      h = minimumSize.height;\n    }\n\n    return RectExtensions.initialize(rx, ry, w, h);\n  }\n\n  private _changePosition(originalRect: IRect, difference: IPoint, direction: IPoint, changedRect: IRect): IRect {\n    const x = originalRect.x + (direction.x === -1 ? difference.x : 0) + changedRect.x;\n    const y = originalRect.y + (direction.y === -1 ? difference.y : 0) + changedRect.y;\n\n    return RectExtensions.initialize(\n      x, y,\n      changedRect.width, changedRect.height,\n    );\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class CalculateDirectChildrenUnionRectRequest {\n  static readonly fToken = Symbol('CalculateDirectChildrenUnionRectRequest');\n\n  constructor(\n    public nodeOrGroup: FNodeBase,\n    public paddings: [ number, number, number, number ],\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CalculateDirectChildrenUnionRectRequest } from './calculate-direct-children-union-rect-request';\nimport { IRect, RectExtensions } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../f-node';\nimport { GetNormalizedElementRectRequest } from '../../../domain';\nimport { FComponentsStore } from \"../../../f-storage\";\n\n@Injectable()\n@FExecutionRegister(CalculateDirectChildrenUnionRectRequest)\nexport class CalculateDirectChildrenUnionRect\n  implements IExecution<CalculateDirectChildrenUnionRectRequest, IRect | null> {\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _allNodesAndGroups(): FNodeBase[] {\n    return this._store.fNodes;\n  }\n\n  public handle({ nodeOrGroup, paddings }: CalculateDirectChildrenUnionRectRequest): IRect | null {\n    const childNodeRect = RectExtensions.union(\n      this._calculateDirectChildren(nodeOrGroup.fId()).map((x) => this._normalizeRect(x)),\n    );\n\n    return childNodeRect ?\n      this._concatRectWithParentPadding(childNodeRect, paddings) : null;\n  }\n\n  private _calculateDirectChildren(nodeOrGroupId: string): FNodeBase[] {\n    return this._allNodesAndGroups.filter((x) => x.fParentId() === nodeOrGroupId);\n  }\n\n  private _normalizeRect(nodeOrGroup: FNodeBase): IRect {\n    return this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(nodeOrGroup.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 CalculateResizeLimitsRequest {\n  static readonly fToken = Symbol('CalculateResizeLimitsRequest');\n\n  constructor(\n    public nodeOrGroup: FNodeBase,\n    public rect: IRect,\n  ) {\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CalculateResizeLimitsRequest } from './calculate-resize-limits-request';\nimport { IRect, SizeExtensions } from '@foblex/2d';\nimport { IResizeConstraint, IResizeLimit, IResizeLimits } from '../constraint';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { CalculateDirectChildrenUnionRectRequest } from '../calculate-direct-children-union-rect';\nimport { FNodeBase } from '../../../f-node';\nimport { GetNodePaddingRequest, GetParentNodesRequest } from '../../../domain';\nimport {\n  GetNodeBoundingIncludePaddingsRequest,\n  GetNodeBoundingIncludePaddingsResponse,\n} from \"../../f-node-move\";\n\n@Injectable()\n@FExecutionRegister(CalculateResizeLimitsRequest)\nexport class CalculateResizeLimits\n  implements IExecution<CalculateResizeLimitsRequest, IResizeConstraint> {\n\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ nodeOrGroup, rect }: CalculateResizeLimitsRequest): IResizeConstraint {\n    const parents = this._getParentsChain(nodeOrGroup);\n\n    const paddings = this._calculateNodePaddings(nodeOrGroup, rect);\n\n    return {\n      limits: this._buildSoftHardLimits(parents),\n      childrenBounds: this._getNormalizedChildrenBounds(nodeOrGroup, paddings),\n      minimumSize: SizeExtensions.initialize(paddings[0] + paddings[2], paddings[1] + paddings[3]),\n    }\n  }\n\n  private _calculateNodePaddings(nodeOrGroup: FNodeBase, rect: IRect): [number, number, number, number] {\n    return this._mediator.execute<[number, number, number, number]>(new GetNodePaddingRequest(nodeOrGroup, rect));\n  }\n\n  private _getNormalizedChildrenBounds(nodeOrGroup: FNodeBase, paddings: [number, number, number, number]): IRect | null {\n    return this._mediator.execute<IRect | null>(new CalculateDirectChildrenUnionRectRequest(nodeOrGroup, paddings));\n  }\n\n  private _getParentsChain(nodeOrGroup: FNodeBase): FNodeBase[] {\n    return this._mediator.execute<FNodeBase[]>(new GetParentNodesRequest(nodeOrGroup)) ?? [];\n  }\n\n  private _buildSoftHardLimits(parents: FNodeBase[]): IResizeLimits {\n    const soft: IResizeLimit[] = [];\n    let hard: IResizeLimit | undefined;\n\n    let childrenPaddings: [number, number, number, number] = [0, 0, 0, 0];\n\n    for (const parent of parents) {\n      const parentInfo = this._getParentInfo(parent, childrenPaddings);\n      childrenPaddings = parentInfo.paddings;\n\n      if (this._isAutoExpand(parent)) {\n        soft.push(this._makeLimit(parent, parentInfo));\n      } else {\n        hard = this._makeLimit(parent, parentInfo);\n        break;\n      }\n    }\n\n    return {\n      softLimits: soft,\n      hardLimit: hard,\n    }\n  }\n\n  private _getParentInfo(parent: FNodeBase, childrenPaddings: [number, number, number, number]): GetNodeBoundingIncludePaddingsResponse {\n    return this._mediator.execute<GetNodeBoundingIncludePaddingsResponse>(\n      new GetNodeBoundingIncludePaddingsRequest(parent, childrenPaddings),\n    );\n  }\n\n  private _isAutoExpand(nodeOrGroup: FNodeBase): boolean {\n    return nodeOrGroup.fAutoExpandOnChildHit();\n  }\n\n  private _makeLimit(\n    nodeOrGroup: FNodeBase,\n    { boundingRect, innerRect }: GetNodeBoundingIncludePaddingsResponse,\n  ): IResizeLimit {\n    return { nodeOrGroup, boundingRect, innerRect };\n  }\n}\n","import { IPointerEvent } from \"../../../drag-toolkit\";\n\nexport class NodeResizeFinalizeRequest {\n  static readonly fToken = Symbol('NodeResizeFinalizeRequest');\n\n  constructor(\n    public readonly event: IPointerEvent,\n  ) {\n  }\n}\n","import { IPoint, IRect, RectExtensions } from '@foblex/2d';\nimport { IFDragHandler } from '../f-drag-handler';\nimport { EFResizeHandleType, FNodeBase } from '../../f-node';\nimport { FMediator } from '@foblex/mediator';\nimport { CalculateResizeLimitsRequest } from './calculate-resize-limits';\nimport { ApplyChildResizeConstraintsRequest } from './apply-child-resize-constraints';\nimport { CalculateChangedRectFromDifferenceRequest } from './calculate-changed-rect-from-difference';\nimport { ApplyParentResizeConstraintsRequest } from './apply-parent-resize-constraints';\nimport { GetNormalizedElementRectRequest } from '../../domain';\nimport { Injector } from '@angular/core';\nimport { IResizeConstraint } from \"./constraint\";\n\nexport class NodeResizeDragHandler implements IFDragHandler {\n\n  public readonly fEventType = 'node-resize';\n  public readonly fData: any;\n\n  private readonly _mediator: FMediator;\n\n  private _originalRect!: IRect;\n  private _constraints!: IResizeConstraint;\n\n  constructor(\n    injector: Injector,\n    private _nodeOrGroup: FNodeBase,\n    private _handleType: EFResizeHandleType,\n  ) {\n    this.fData = {\n      fNodeId: _nodeOrGroup.fId(),\n    };\n    this._mediator = injector.get(FMediator);\n  }\n\n  public prepareDragSequence(): void {\n    this._originalRect = this._getOriginalNodeRect();\n    this._constraints = this._calculateResizeLimits();\n  }\n\n  private _getOriginalNodeRect(): IRect {\n    return this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(this._nodeOrGroup.hostElement));\n  }\n\n  private _calculateResizeLimits(): IResizeConstraint {\n    return this._mediator.execute<IResizeConstraint>(\n      new CalculateResizeLimitsRequest(this._nodeOrGroup, this._originalRect),\n    );\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    this._applyResizeChanges(this._newRect(difference));\n  }\n\n  private _newRect(difference: IPoint): IRect {\n    return this._mediator.execute<IRect>(\n      new CalculateChangedRectFromDifferenceRequest(this._originalRect, difference, this._handleType, this._constraints.minimumSize),\n    );\n  }\n\n  private _applyResizeChanges(changedRect: IRect): void {\n    this._applyChildConstraints(changedRect);\n    this._applyParentConstraints(changedRect);\n    this._redraw(changedRect);\n  }\n\n  private _redraw(changedRect: IRect): void {\n    this._nodeOrGroup.updatePosition(changedRect);\n    this._nodeOrGroup.updateSize(changedRect);\n    this._nodeOrGroup.redraw();\n  }\n\n  private _applyChildConstraints(changedRect: IRect): void {\n    this._mediator.execute(\n      new ApplyChildResizeConstraintsRequest(changedRect, this._constraints.childrenBounds),\n    );\n  }\n\n  private _applyParentConstraints(changedRect: IRect): void {\n    this._mediator.execute(\n      new ApplyParentResizeConstraintsRequest(changedRect, this._constraints.limits),\n    );\n  }\n\n  public onPointerUp(): void {\n    this._nodeOrGroup.sizeChange.emit(this._getNewRect());\n    requestAnimationFrame(() => this._nodeOrGroup.refresh());\n  }\n\n  private _getNewRect(): IRect {\n    return RectExtensions.initialize(\n      this._nodeOrGroup._position.x, this._nodeOrGroup._position.y,\n      this._nodeOrGroup._size?.width, this._nodeOrGroup._size?.height,\n    );\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { NodeResizeFinalizeRequest } from './node-resize-finalize-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { NodeResizeDragHandler } from '../node-resize.drag-handler';\n\n@Injectable()\n@FExecutionRegister(NodeResizeFinalizeRequest)\nexport class NodeResizeFinalize implements IExecution<NodeResizeFinalizeRequest, void> {\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(_request: NodeResizeFinalizeRequest): void {\n    if (!this._isNodeResizeHandler()) {\n      return;\n    }\n    this._dragContext.draggableItems.forEach((x) => x.onPointerUp?.());\n  }\n\n  private _isNodeResizeHandler(): boolean {\n    return this._dragContext.draggableItems.some((x) => x instanceof NodeResizeDragHandler);\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport { IPointerEvent } from \"../../../drag-toolkit\";\n\nexport class NodeResizePreparationRequest {\n  static readonly fToken = Symbol('NodeResizePreparationRequest');\n\n  constructor(\n    public event: IPointerEvent,\n    public fTrigger: FEventTrigger,\n  ) {\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { NodeResizePreparationRequest } from './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 { NodeResizeDragHandler } from '../node-resize.drag-handler';\nimport { getDataAttrValueFromClosestElementWithClass, isClosestElementHasClass } from '@foblex/utils';\n\n@Injectable()\n@FExecutionRegister(NodeResizePreparationRequest)\nexport class NodeResizePreparation implements IExecution<NodeResizePreparationRequest, void> {\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _injector = inject(Injector);\n\n  private get _transform(): ITransformModel {\n    return this._store.fCanvas!.transform;\n  }\n\n  private get _fHost(): HTMLElement {\n    return this._store.fFlow!.hostElement;\n  }\n\n  private _nodeOrGroup: FNodeBase | undefined;\n\n  public handle(request: NodeResizePreparationRequest): void {\n    if(!this._isValid(request) || !this._isValidTrigger(request)) {\n      return;\n    }\n\n    this._selectAndUpdateNodeLayer();\n\n    this._dragContext.onPointerDownScale = this._transform.scale;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost).div(this._transform.scale);\n\n    this._dragContext.draggableItems = [\n      new NodeResizeDragHandler(\n        this._injector, this._nodeOrGroup!, EFResizeHandleType[ this._getHandleType(request.event.targetElement) ],\n      ),\n    ];\n  }\n\n  private _isValid(request: NodeResizePreparationRequest): boolean {\n    return this._dragContext.isEmpty()\n      && this._isResizeHandleElement(request.event.targetElement)\n      && this._isNodeCanBeDragged(this._getNode(request.event.targetElement));\n  }\n\n  private _isResizeHandleElement(element: HTMLElement): boolean {\n    return isClosestElementHasClass(element, '.f-resize-handle');\n  }\n\n  private _isNodeCanBeDragged(nodeOrGroup?: FNodeBase): boolean {\n    return !!nodeOrGroup && !nodeOrGroup.fDraggingDisabled();\n  }\n\n  private _getNode(element: HTMLElement): FNodeBase | undefined {\n    this._nodeOrGroup = this._store.fNodes.find(x => x.isContains(element));\n\n    return this._nodeOrGroup;\n  }\n\n  private _isValidTrigger(request: NodeResizePreparationRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n\n  private _selectAndUpdateNodeLayer() {\n    this._mediator.execute(\n      new SelectAndUpdateNodeLayerRequest(this._nodeOrGroup!),\n    );\n  }\n\n  private _getHandleType(element: HTMLElement): keyof typeof EFResizeHandleType {\n    return getDataAttrValueFromClosestElementWithClass(element, 'fResizeHandleType', '.f-resize-handle');\n  }\n}\n","import { NodeResizeFinalize } from './resize-finalize';\nimport { NodeResizePreparation } from './resize-preparation';\nimport { CalculateResizeLimits } from './calculate-resize-limits';\nimport { ApplyChildResizeConstraints } from './apply-child-resize-constraints';\nimport { ApplyParentResizeConstraints } from './apply-parent-resize-constraints';\nimport { CalculateChangedRectFromDifference } from './calculate-changed-rect-from-difference';\nimport { CalculateDirectChildrenUnionRect } from './calculate-direct-children-union-rect';\n\nexport const NODE_RESIZE_PROVIDERS = [\n\n  ApplyChildResizeConstraints,\n\n  ApplyParentResizeConstraints,\n\n  CalculateChangedRectFromDifference,\n\n  CalculateDirectChildrenUnionRect,\n\n  CalculateResizeLimits,\n\n  NodeResizeFinalize,\n\n  NodeResizePreparation,\n];\n","import { IPointerEvent } from \"../../../drag-toolkit\";\n\nexport class FNodeRotateFinalizeRequest {\n  static readonly fToken = Symbol('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 _store: FComponentsStore;\n  private readonly _mediator: FMediator;\n  private readonly _dragContext: 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._store.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._store = _injector.get(FComponentsStore);\n    this._mediator = _injector.get(FMediator);\n    this._dragContext = _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._mediator.execute<IRect>(new GetNormalizedElementRectRequest(this._fNode!.hostElement));\n  }\n\n  private _calculateDownPoint(): IPoint {\n    return PointExtensions.sub(\n      this._dragContext.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.rotate.set(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 _draggableDataContext = inject(FDraggableDataContext);\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  public handle(request: FNodeRotateFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    this._draggableDataContext.draggableItems.forEach((x) => {\n      x.onPointerUp?.();\n    });\n  }\n\n  private _isValid(): boolean {\n    return this._draggableDataContext.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  static readonly fToken = Symbol('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 } 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,\n  CalculateOutputConnectionsRequest,\n  GetNormalizedElementRectRequest,\n  isValidEventTrigger,\n  SelectAndUpdateNodeLayerRequest,\n} from '../../../domain';\nimport { FNodeBase, isRotateHandle } from '../../../f-node';\nimport { FNodeRotateDragHandler } from '../f-node-rotate.drag-handler';\nimport {\n  BaseConnectionDragHandler,\n  SourceConnectionDragHandler,\n  TargetConnectionDragHandler,\n} from '../../f-node-move';\nimport { FConnectionBase } from '../../../f-connection';\n\n@Injectable()\n@FExecutionRegister(FNodeRotatePreparationRequest)\nexport class FNodeRotatePreparationExecution\n  implements IExecution<FNodeRotatePreparationRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _injector = inject(Injector);\n\n  private get _transform(): ITransformModel {\n    return this._store.fCanvas!.transform;\n  }\n\n  private get _fHost(): HTMLElement {\n    return this._store.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._dragContext.onPointerDownScale = this._transform.scale;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost)\n      .div(this._transform.scale);\n\n    this._dragContext.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 (\n      this._dragContext.isEmpty() &&\n      isRotateHandle(request.event.targetElement) &&\n      this._isNodeCanBeDragged(this._getNode(request.event.targetElement))\n    );\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._store.fNodes.find((x) => x.isContains(element));\n\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._mediator.execute(new SelectAndUpdateNodeLayerRequest(this._fNode!));\n  }\n\n  private _calculateInputConnectionsDragHandlers(): {\n    connection: BaseConnectionDragHandler;\n    connector: IPoint;\n  }[] {\n    return this._mediator\n      .execute<FConnectionBase[]>(new CalculateInputConnectionsRequest(this._fNode!))\n      .map((x: FConnectionBase) => {\n        const connector = this._store.fInputs.find((y) => y.fId() === x.fInputId())?.hostElement;\n\n        if (!connector) {\n          throw new Error(`Connector with id ${x.fInputId()} not found`);\n        }\n\n        return {\n          connection: new TargetConnectionDragHandler(this._injector, x),\n          connector: this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(connector))\n            .gravityCenter,\n        };\n      });\n  }\n\n  private _calculateOutputConnectionsDragHandlers(): {\n    connection: BaseConnectionDragHandler;\n    connector: IPoint;\n  }[] {\n    return this._mediator\n      .execute<FConnectionBase[]>(new CalculateOutputConnectionsRequest(this._fNode!))\n      .map((x: FConnectionBase) => {\n        const connector = this._store.fOutputs.find((y) => y.fId() === x.fOutputId())?.hostElement;\n\n        if (!connector) {\n          throw new Error(`Connector with id ${x.fOutputId()} not found`);\n        }\n\n        return {\n          connection: new SourceConnectionDragHandler(this._injector, x),\n          connector: this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(connector))\n            .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  static readonly fToken = Symbol('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  private readonly _fMediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = 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._dragContext.isEmpty();\n  }\n\n  private _isEventInFlowBounds(event: IPointerEvent): boolean {\n    return this._store.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._store.fNodes.find((x) => x.isContains(targetElement));\n  }\n\n  private _getConnection(element: HTMLElement | SVGElement): FConnectionBase | undefined {\n    return this._store.fConnections.find(\n      (c) =>\n        c.isContains(element) ||\n        c.fConnectionCenter()?.nativeElement?.contains(element) ||\n        Array.from(c.fConnectionContents()?.values() ?? []).some((content) =>\n          content.hostElement?.contains(element),\n        ),\n    );\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._dragContext.selectedItems.forEach((x) => {\n      x.unmarkAsSelected();\n      this._dragContext.markSelectionAsChanged();\n    });\n    this._dragContext.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._dragContext.markSelectionAsChanged();\n  }\n\n  private _removeItemFromSelectedItems(fItem: ISelectable): void {\n    const indexInSelection = this._dragContext.selectedItems.indexOf(fItem);\n    if (indexInSelection > -1) {\n      this._dragContext.selectedItems.splice(indexInSelection, 1);\n    }\n  }\n\n  private _selectItem(fItem: ISelectable): void {\n    this._dragContext.selectedItems.push(fItem);\n    fItem.markAsSelected();\n    this._dragContext.markSelectionAsChanged();\n  }\n}\n","import { FSingleSelectExecution } from './f-single-select.execution';\n\nexport const SINGLE_SELECT_PROVIDERS = [\n\n  FSingleSelectExecution,\n];\n","import {\n  Directive,\n} from \"@angular/core\";\n\n@Directive({\n  selector: \"[fDragBlocker]\",\n  host: {\n    class: `f-drag-blocker`,\n  },\n})\nexport class FDragBlockerDirective {}\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\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\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\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\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\n    return { x: touch.clientX, y: touch.clientY };\n  }\n}\n","export class EventExtensions {\n  private static _isSupported: boolean;\n\n  private static _isPassiveEventListenerSupported(): boolean {\n    if (EventExtensions._isSupported == null && typeof window !== 'undefined') {\n      try {\n        window.addEventListener('test', EventExtensions.emptyListener, { passive: true });\n        EventExtensions._isSupported = true;\n      } catch {\n        EventExtensions._isSupported = false;\n      }\n    }\n\n    return EventExtensions._isSupported;\n  }\n\n  private static _passiveEventListener(\n    options: AddEventListenerOptions,\n  ): 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 activeCaptureListener(): boolean | AddEventListenerOptions {\n    return EventExtensions._passiveEventListener({ passive: false, capture: true });\n  }\n\n  public static emptyListener(): () => void {\n    return () => {};\n  }\n}\n","import {\n  IMouseEvent,\n  IPointerEvent,\n  IPointerUpEvent,\n  ITouchDownEvent,\n  ITouchMoveEvent,\n} from './pointer-events';\nimport { EventExtensions } from './event.extensions';\nimport { inject, NgZone } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nexport const MOUSE_EVENT_IGNORE_TIME = 800;\n\n/**\n * Base class for implementing drag and drop functionality.\n * It handles mouse and touch events, manages the drag start sequence,\n * and provides abstract methods for derived classes to implement specific behaviors.\n */\nexport abstract class DragAndDropBase {\n  private readonly _document = inject(DOCUMENT);\n  private readonly _ngZone = inject(NgZone, { optional: true });\n\n  private _mouseListeners = EventExtensions.emptyListener();\n  private _touchListeners = EventExtensions.emptyListener();\n\n  private _startListeners = EventExtensions.emptyListener();\n\n  public isSyntheticEvent(_event: MouseEvent): boolean {\n    return (\n      !!this._lastTouchEventTime && this._lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now()\n    );\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 = this._checkDragSequenceToStart;\n\n  private _pointerDownElement: HTMLElement | null = null;\n\n  /**\n   * Handles the mouse down event to initiate the drag sequence.\n   * It checks if the event is synthetic or fake, and if the drag is already started.\n   * If not, it sets up the drag start sequence by adding necessary event listeners.\n   * @param event - The mouse event that triggered the drag.\n   */\n  private _onMouseDown = (event: MouseEvent) => {\n    const isSyntheticEvent = this.isSyntheticEvent(event);\n    const isFakeEvent = isFakeMousedownFromScreenReader(event);\n    const mouseEvent = new IMouseEvent(event);\n\n    if (isSyntheticEvent || isFakeEvent || this.disabled || this.isDragStarted) {\n      return;\n    }\n    this._pointerDownElement = mouseEvent.targetElement;\n    const result = this.onPointerDown(mouseEvent);\n    if (result) {\n      this._dragStartTime = Date.now();\n      this._dragStartPosition = mouseEvent.getPosition();\n\n      this._ngZone?.runOutsideAngular(() => {\n        this._listen('selectstart', this._onSelectStart, EventExtensions.activeListener());\n        this._listen('mousemove', this._onMouseMove);\n        this._listen('pointerup', this._onPointerUpEvent);\n        this._listen(\n          'pointercancel',\n          this._onPointerUpEvent,\n          EventExtensions.activeCaptureListener(),\n        );\n        this._listen(\n          'contextmenu',\n          this._preventDuringDrag,\n          EventExtensions.activeCaptureListener(),\n        );\n      });\n\n      this._mouseListeners = () => {\n        this._unlisten('selectstart', this._onSelectStart, EventExtensions.activeListener());\n        this._unlisten('mousemove', this._onMouseMove);\n        this._unlisten('pointerup', this._onPointerUpEvent);\n        this._unlisten(\n          'pointercancel',\n          this._onPointerUpEvent,\n          EventExtensions.activeCaptureListener(),\n        );\n        this._unlisten(\n          'contextmenu',\n          this._preventDuringDrag,\n          EventExtensions.activeCaptureListener(),\n        );\n      };\n    }\n  };\n\n  /**\n   * Handles the touch down event to initiate the drag sequence.\n   * It checks if the event is synthetic or fake, and if the drag is already started.\n   * If not, it sets up the drag start sequence by adding necessary event listeners.\n   * @param event - The touch event that triggered the drag.\n   */\n  private _onTouchDown = (event: TouchEvent) => {\n    const isFakeEvent = isFakeTouchstartFromScreenReader(event as TouchEvent);\n    const touchEvent = new ITouchDownEvent(event);\n\n    if (isFakeEvent || this.disabled || this.isDragStarted) {\n      return;\n    }\n    this._pointerDownElement = touchEvent.targetElement;\n    const result = this.onPointerDown(touchEvent);\n    if (result) {\n      this._dragStartTime = Date.now();\n      this._dragStartPosition = touchEvent.getPosition();\n\n      this._ngZone?.runOutsideAngular(() => {\n        this._listen('selectstart', this._onSelectStart, EventExtensions.activeListener());\n        this._listen('touchmove', this._onTouchMove);\n        this._listen('pointerup', this._onPointerUpEvent);\n        this._listen(\n          'pointercancel',\n          this._onPointerUpEvent,\n          EventExtensions.activeCaptureListener(),\n        );\n        this._listen(\n          'contextmenu',\n          this._preventDuringDrag,\n          EventExtensions.activeCaptureListener(),\n        );\n      });\n\n      this._touchListeners = () => {\n        this._unlisten('selectstart', this._onSelectStart, EventExtensions.activeListener());\n        this._unlisten('touchmove', this._onTouchMove);\n        this._unlisten('pointerup', this._onPointerUpEvent);\n        this._unlisten(\n          'pointercancel',\n          this._onPointerUpEvent,\n          EventExtensions.activeCaptureListener(),\n        );\n        this._unlisten(\n          'contextmenu',\n          this._preventDuringDrag,\n          EventExtensions.activeCaptureListener(),\n        );\n      };\n    }\n  };\n\n  /**\n   * Handles the select start event.\n   * This method is called when the user starts selecting text or elements.\n   * It prevents the default behavior and calls the onSelect method to handle the selection.\n   * @param event - The event that triggered the select start.\n   */\n  private _onSelectStart = (event: Event) => {\n    this.onSelect(event);\n  };\n\n  /**\n   * Handles the mouse move event during the drag sequence.\n   * It checks if the drag sequence should start and calls the move handler accordingly.\n   * @param event - The mouse event that triggered the move.\n   */\n  private _onMouseMove = (event: MouseEvent) => {\n    this._moveHandler(new IMouseEvent(event));\n  };\n\n  /**\n   * Handles the touch move event during the drag sequence.\n   * It checks if the drag sequence should start and calls the move handler accordingly.\n   * @param event - The touch event that triggered the move.\n   */\n  private _onTouchMove = (event: TouchEvent) => {\n    this._moveHandler(new ITouchMoveEvent(event));\n  };\n\n  /**\n   * Checks if the drag sequence should start based on the pointer position.\n   * It compares the current pointer position with the initial drag start position\n   * and checks if the distance exceeds the drag start threshold.\n   * If the threshold is exceeded and the delay has passed,\n   * it prepares the drag sequence and sets the move handler to onPointerMove.\n   * @param event - The pointer event that triggered the check.\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\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  /**\n   * Prepares the drag sequence by setting up necessary event listeners\n   * and initializing any required state for the drag operation.\n   * This method should be implemented by derived classes to define specific drag behavior.\n   * @param event - The pointer event that triggered the preparation.\n   */\n  protected abstract prepareDragSequence(event: IPointerEvent): void;\n\n  /**\n   * Handles the pointer up event at the end of the drag sequence.\n   * It checks if the drag has started and calls the onPointerUp method.\n   * It also ends the drag sequence by resetting the state and removing event listeners.\n   * This method is called when the user releases the mouse button or lifts their finger from the touch screen.\n   * @param event - The pointer event that triggered the up action.\n   */\n  private _onPointerUpEvent = (event: PointerEvent) => {\n    if (this.isDragStarted) {\n      this.onPointerUp(new IPointerUpEvent(event));\n    }\n    this._endDragSequence();\n  };\n\n  /**\n   * Ends the drag sequence by resetting the state and removing event listeners.\n   * It sets the isDragStarted flag to false, clears the pointerDownElement,\n   * and resets the moveHandler to checkDragSequenceToStart.\n   * It also removes all mouse and touch event listeners that were added during the drag sequence.\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  protected abstract onPointerDown(event: IPointerEvent): boolean;\n\n  protected abstract onPointerMove(event: IPointerEvent): void;\n\n  protected abstract onPointerUp(event: IPointerEvent): void;\n\n  protected subscribe(): void {\n    this.unsubscribe();\n\n    this._ngZone?.runOutsideAngular(() => {\n      this._listen('mousedown', this._onMouseDown, EventExtensions.activeListener());\n      this._listen('touchstart', this._onTouchDown, EventExtensions.passiveListener());\n    });\n\n    this._startListeners = () => {\n      this._unlisten('mousedown', this._onMouseDown, EventExtensions.activeListener());\n      this._unlisten('touchstart', this._onTouchDown, EventExtensions.passiveListener());\n    };\n  }\n\n  protected unsubscribe(): void {\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  private _listen<K extends keyof DocumentEventMap>(\n    type: K,\n    listener: (this: Document, ev: DocumentEventMap[K]) => unknown,\n    options?: boolean | AddEventListenerOptions,\n  ): void {\n    this._document.addEventListener(type, listener, options);\n  }\n\n  private _unlisten<K extends keyof DocumentEventMap>(\n    type: K,\n    listener: (this: Document, ev: DocumentEventMap[K]) => unknown,\n    options?: boolean | AddEventListenerOptions,\n  ): void {\n    this._document.removeEventListener(type, listener, options);\n  }\n\n  private _preventDuringDrag = (e: Event) => {\n    if (this.isDragStarted) {\n      e.preventDefault();\n    }\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\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 { ElementRef, EventEmitter, inject, InputSignalWithTransform } 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 } from '../drag-toolkit';\nimport { FMoveNodesEvent } from './f-node-move';\n\nexport abstract class FDraggableBase extends DragAndDropBase {\n  public readonly hostElement = inject(ElementRef).nativeElement;\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 fMoveNodes: EventEmitter<FMoveNodesEvent>;\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: InputSignalWithTransform<number, unknown>;\n\n  public abstract hCellSize: InputSignalWithTransform<number, unknown>;\n\n  public abstract fCellSizeWhileDragging: InputSignalWithTransform<boolean, unknown>;\n\n  public abstract fDragStarted: EventEmitter<FDragStartedEvent>;\n\n  public abstract fDragEnded: EventEmitter<void>;\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 { isClosestElementHasClass } from '@foblex/utils';\n\nexport function isDragBlocker(element: HTMLElement): boolean {\n  return isClosestElementHasClass(element, '.f-drag-blocker');\n}\n","import {\n  AfterViewInit,\n  booleanAttribute,\n  ContentChildren,\n  Directive,\n  EventEmitter,\n  inject,\n  input,\n  Input,\n  numberAttribute,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n} from '@angular/core';\nimport { FDraggableBase } from './f-draggable-base';\nimport {\n  FMoveNodesEvent,\n  FNodeMoveFinalizeRequest,\n  FNodeMovePreparationRequest,\n} from './f-node-move';\nimport { FCanvasMoveFinalizeRequest, FCanvasMovePreparationRequest } from './f-canvas';\nimport {\n  FCreateConnectionEvent,\n  FCreateConnectionFinalizeRequest,\n  CreateConnectionPreparationRequest,\n  FReassignConnectionEvent,\n  FReassignConnectionFinalizeRequest,\n  FReassignConnectionPreparationRequest,\n} from './f-connection';\nimport { FSelectionChangeEvent } from './f-selection-change-event';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddDndToStoreRequest,\n  defaultEventTrigger,\n  EmitSelectionChangeEventRequest,\n  EndDragSequenceRequest,\n  FEventTrigger,\n  FTriggerEvent,\n  InitializeDragSequenceRequest,\n  OnPointerMoveRequest,\n  PrepareDragSequenceRequest,\n  DragRectCache,\n  RemoveDndFromStoreRequest,\n} from '../domain';\nimport {\n  FCreateNodeEvent,\n  FExternalItemFinalizeRequest,\n  FExternalItemPreparationRequest,\n  PreventDefaultIsExternalItemRequest,\n} from '../f-external-item';\nimport { FSingleSelectRequest } from './f-single-select';\nimport { NodeResizeFinalizeRequest, NodeResizePreparationRequest } from './f-node-resize';\nimport {\n  F_AFTER_MAIN_PLUGIN,\n  F_BEFORE_MAIN_PLUGIN,\n  IFDragAndDropPlugin,\n} from './i-f-drag-and-drop-plugin';\nimport { EOperationSystem, PlatformService } from '@foblex/platform';\nimport { FDragStartedEvent, FNodeIntersectedWithConnections } from './domain';\nimport { FDragHandlerResult } from './f-drag-handler';\nimport {\n  FDropToGroupEvent,\n  DropToGroupFinalizeRequest,\n  DropToGroupPreparationRequest,\n} from './f-drop-to-group';\nimport { FNodeRotateFinalizeRequest, FNodeRotatePreparationRequest } from './f-node-rotate';\nimport { IPointerEvent } from '../drag-toolkit';\nimport { isDragBlocker } from './is-drag-blocker';\n\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\n  extends FDraggableBase\n  implements OnInit, AfterViewInit, OnDestroy\n{\n  private readonly _result = inject(FDragHandlerResult);\n  private readonly _mediator = inject(FMediator);\n  private readonly _platform = inject(PlatformService);\n\n  @Input({ transform: booleanAttribute, alias: 'fDraggableDisabled' })\n  public override disabled: boolean = false;\n\n  @Input()\n  public fMultiSelectTrigger: FEventTrigger = (event: FTriggerEvent) => {\n    return this._platform.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 =\n    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 fMoveNodes = new EventEmitter<FMoveNodesEvent>();\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  /**\n   * Defines the vertical cell size for the grid.\n   * This value is used to snap nodes to a vertical grid while dragging.\n   * The default value is `1`, which means that nodes will snap to every pixel vertically.\n   */\n  public override vCellSize = input(1, {\n    transform: (value: unknown) => numberAttribute(value, 1),\n  });\n\n  /**\n   * Defines the horizontal cell size for the grid.\n   * This value is used to snap nodes to a horizontal grid while dragging.\n   * The default value is `1`, which means that nodes will snap to every pixel horizontally.\n   */\n  public override hCellSize = input(1, {\n    transform: (value: unknown) => numberAttribute(value, 1),\n  });\n\n  /**\n   * Defines whether the cell size should be applied while dragging.\n   * If set to `true`, the dragged nodes will snap to the grid defined by `vCellSize` and `hCellSize`.\n   * If set to `false`, the nodes will move freely without snapping to the grid.\n   */\n  public override fCellSizeWhileDragging = input(false, {\n    transform: (value: unknown) => booleanAttribute(value),\n  });\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  public ngOnInit(): void {\n    this._mediator.execute<void>(new AddDndToStoreRequest(this));\n  }\n\n  public ngAfterViewInit(): void {\n    super.subscribe();\n  }\n\n  public override onPointerDown(event: IPointerEvent): boolean {\n    if (isDragBlocker(event.targetElement)) {\n      return false;\n    }\n\n    this._result.clear();\n\n    this._mediator.execute<void>(new InitializeDragSequenceRequest());\n\n    this._beforePlugins.forEach((p) => p.onPointerDown?.(event));\n\n    this._mediator.execute<void>(new FSingleSelectRequest(event, this.fMultiSelectTrigger));\n\n    this._mediator.execute<void>(\n      new FReassignConnectionPreparationRequest(event, this.fReassignConnectionTrigger),\n    );\n\n    this._mediator.execute<void>(\n      new CreateConnectionPreparationRequest(event, this.fCreateConnectionTrigger),\n    );\n\n    this._afterPlugins.forEach((p) => p.onPointerDown?.(event));\n\n    const isMouseLeftOrTouch = event.isMouseLeftButton();\n    if (!isMouseLeftOrTouch) {\n      this.finalizeDragSequence();\n    }\n\n    return isMouseLeftOrTouch;\n  }\n\n  protected override prepareDragSequence(event: IPointerEvent) {\n    this._beforePlugins.forEach((p) => p.prepareDragSequence?.(event));\n\n    this._mediator.execute<void>(new NodeResizePreparationRequest(event, this.fNodeResizeTrigger));\n\n    this._mediator.execute<void>(new FNodeRotatePreparationRequest(event, this.fNodeRotateTrigger));\n\n    this._mediator.execute<void>(new FNodeMovePreparationRequest(event, this.fNodeMoveTrigger));\n\n    this._mediator.execute<void>(\n      new FExternalItemPreparationRequest(event, this.fExternalItemTrigger),\n    );\n\n    this._mediator.execute<void>(new DropToGroupPreparationRequest(event));\n\n    this._mediator.execute<void>(new FCanvasMovePreparationRequest(event, this.fCanvasMoveTrigger));\n\n    this._afterPlugins.forEach((p) => p.prepareDragSequence?.(event));\n\n    this._mediator.execute<void>(new PrepareDragSequenceRequest());\n  }\n\n  protected override onSelect(event: Event): void {\n    this._mediator.execute<void>(new PreventDefaultIsExternalItemRequest(event));\n  }\n\n  public override onPointerMove(event: IPointerEvent): void {\n    this._mediator.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._mediator.execute<void>(new FReassignConnectionFinalizeRequest(event));\n\n    this._mediator.execute<void>(new FCreateConnectionFinalizeRequest(event));\n\n    this._mediator.execute<void>(new NodeResizeFinalizeRequest(event));\n\n    this._mediator.execute<void>(new FNodeRotateFinalizeRequest(event));\n\n    this._mediator.execute<void>(new FNodeMoveFinalizeRequest(event));\n\n    this._mediator.execute<void>(new FExternalItemFinalizeRequest(event));\n\n    this._mediator.execute<void>(new DropToGroupFinalizeRequest(event));\n\n    this._mediator.execute<void>(new FCanvasMoveFinalizeRequest(event));\n\n    this._afterPlugins.forEach((x) => x.onPointerUp?.(event));\n\n    this._mediator.execute<void>(new EndDragSequenceRequest());\n  }\n\n  protected override finalizeDragSequence(): void {\n    DragRectCache.invalidateAll();\n    this._mediator.execute<void>(new EmitSelectionChangeEventRequest());\n\n    this._result.clear();\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute<void>(new RemoveDndFromStoreRequest());\n    super.unsubscribe();\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  static readonly fToken = Symbol('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  static readonly fToken = Symbol('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 { inject, 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 readonly _store = inject(FComponentsStore);\n\n  private get _canvasScale(): number {\n    return this._store.fCanvas?.transform.scale || 1;\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\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).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  public fEventType = 'minimap';\n\n  private _lastDifference: IPoint | null = null;\n\n  constructor(\n    private readonly _store: FComponentsStore,\n    private readonly _mediator: FMediator,\n    private readonly _flowRect: IRect,\n    private readonly _canvasPosition: IPoint,\n    private readonly _eventPoint: IPoint,\n    private readonly _minimap: FMinimapData,\n  ) {}\n\n  public prepareDragSequence(): void {\n    this._store.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._store.fCanvas?.setPosition(\n      this._getNewPosition(Point.fromPoint(this._eventPoint).add(difference)),\n    );\n    this._store.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._mediator.execute<IPoint>(\n      new CalculateFlowPointFromMinimapPointRequest(\n        this._flowRect,\n        this._canvasPosition,\n        eventPoint,\n        this._minimap,\n      ),\n    );\n  }\n\n  public onPointerUp(): void {\n    this._store.fCanvas?.hostElement.classList.remove('f-scaled-animate');\n    this._store.fCanvas?.emitCanvasChangeEvent();\n  }\n}\n","import { inject, 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\n  implements IExecution<MinimapDragPreparationRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n  private readonly _draggableDataContext = inject(FDraggableDataContext);\n\n  private get _flowHost(): HTMLElement {\n    return this._store.fFlow!.hostElement;\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._store.fCanvas!.transform.position);\n\n    this._store.fCanvas!.setPosition(this._getNewPosition(eventPoint, request.minimap));\n    this._store.fCanvas!.redraw();\n    this._store.fCanvas!.emitCanvasChangeEvent();\n\n    this._draggableDataContext.onPointerDownScale = 1;\n    this._draggableDataContext.onPointerDownPosition = Point.fromPoint(eventPoint).elementTransform(\n      this._flowHost,\n    );\n    this._draggableDataContext.draggableItems = [\n      new FMinimapDragHandler(\n        this._store,\n        this._mediator,\n        this._getFlowRect(),\n        startCanvasPosition,\n        eventPoint,\n        request.minimap,\n      ),\n    ];\n  }\n\n  private _isValid(request: MinimapDragPreparationRequest): boolean {\n    return (\n      !this._draggableDataContext.draggableItems.length &&\n      !!request.event.targetElement.closest('.f-minimap') &&\n      this._store.flowHost.contains(request.event.targetElement)\n    );\n  }\n\n  private _getNewPosition(eventPoint: IPoint, minimap: FMinimapData): IPoint {\n    return this._mediator.execute<IPoint>(\n      new CalculateFlowPointFromMinimapPointRequest(\n        this._getFlowRect(),\n        Point.fromPoint(this._store.fCanvas!.transform.position),\n        eventPoint,\n        minimap,\n      ),\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  static readonly fToken = Symbol('MinimapDragFinalizeRequest');\n\n  constructor(\n    public event: IPointerEvent,\n  ) {\n  }\n}\n","import { inject, 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  private readonly _draggableDataContext = inject(FDraggableDataContext);\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  public handle(request: MinimapDragFinalizeRequest): void {\n    if(!this._isValid()) {\n      return;\n    }\n    this._draggableDataContext.draggableItems.forEach((x) => {\n      x.onPointerUp?.();\n    });\n  }\n\n  private _isValid(): boolean {\n    return this._draggableDataContext.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  static readonly fToken = Symbol('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 _browser = inject(BrowserService);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _fFlow(): FFlowBase | undefined {\n    return this._store.fFlow;\n  }\n\n  private get _fNodes(): FNodeBase[] {\n    return this._store.fNodes;\n  }\n\n  private get _fCanvas(): FCanvasBase {\n    return this._store.fCanvas!;\n  }\n\n  public handle(request: MinimapDrawNodesRequest): SVGRectElement[] {\n    return this._createMinimapNodeElements(request);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\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\n      return element;\n    });\n  }\n\n  private _createNodeElement(): SVGRectElement {\n    return createSVGElement('rect', this._browser);\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    const classList = node.fMinimapClass();\n    if (Array.isArray(classList)) {\n      return classList;\n    } else {\n      return [classList];\n    }\n  }\n}\n","export class MinimapCalculateViewBoxRequest {\n  static readonly fToken = Symbol('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 readonly _store = inject(FComponentsStore);\n\n  private get _flowComponent(): FFlowBase | undefined {\n    return this._store.fFlow;\n  }\n\n  private get _canvasComponent(): FCanvasBase {\n    return this._store.fCanvas!;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  public handle(request: MinimapCalculateViewBoxRequest): IRect {\n    if(!this._flowComponent || !this._canvasComponent) {\n      return RectExtensions.initialize();\n    }\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\n    return result;\n  }\n\n  private _calculateViewBox(): IRect {\n    return RectExtensions.div(RectExtensions.fromElement(this._flowComponent!.hostElement), this._canvasComponent.transform.scale);\n  }\n}\n","export class MinimapCalculateSvgScaleAndViewBoxRequest {\n  static readonly fToken = Symbol('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\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\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  static readonly fToken = Symbol('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._store.fCanvas!.transform.position)\n      .add(this._store.fCanvas!.transform.scaledPosition);\n  }\n\n  constructor(\n    private _store: FComponentsStore,\n    private _fSelectionArea: FSelectionAreaBase,\n    private _dragContext: 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._dragContext.onPointerDownPosition.x,\n        this._dragContext.onPointerDownPosition.y,\n      ),\n    );\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const currentPoint = Point.fromPoint(difference).add(this._dragContext.onPointerDownPosition);\n\n    const point = this._getMinimumPoint(this._dragContext.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._dragContext.selectedItems.push(...this._selectedByMove);\n    if (this._selectedByMove.length > 0) {\n      this._dragContext.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\n  implements IExecution<SelectionAreaFinalizeRequest, void>\n{\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(_request: SelectionAreaFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    this._dragContext.draggableItems.forEach((x) => {\n      x.onPointerUp?.();\n    });\n  }\n\n  private _isValid(): boolean {\n    return this._dragContext.draggableItems.some((x) => x instanceof SelectionAreaDragHandle);\n  }\n}\n","import { FSelectionAreaBase } from '../../f-selection-area-base';\nimport { FEventTrigger } from '../../../domain';\nimport { IPointerEvent } from \"../../../drag-toolkit\";\n\nexport class SelectionAreaPreparationRequest {\n  static readonly fToken = Symbol('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 _store = inject(FComponentsStore);\n  private _dragContext = inject(FDraggableDataContext);\n\n  private get _fHost(): HTMLElement {\n    return this._store.fFlow!.hostElement;\n  }\n\n  public handle(request: SelectionAreaPreparationRequest): void {\n    if (!this._isValid(request)) {\n      return;\n    }\n    this._dragContext.draggableItems = [\n      new SelectionAreaDragHandle(\n        this._store, request.fSelectionArea, this._dragContext, this._fMediator,\n      ),\n    ];\n\n    this._dragContext.onPointerDownScale = 1;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._fHost);\n  }\n\n  private _isValid(request: SelectionAreaPreparationRequest): boolean {\n    return this._dragContext.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  static readonly fToken = Symbol('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/**\n * Execution that clears the selection of items in the FDraggableDataContext.\n */\n@Injectable()\n@FExecutionRegister(ClearSelectionRequest)\nexport class ClearSelectionExecution implements IExecution<ClearSelectionRequest, void> {\n\n  private _dragContext = inject(FDraggableDataContext);\n\n  public handle(request: ClearSelectionRequest): void {\n    this._dragContext.selectedItems.forEach((x) => x.unmarkAsSelected());\n    this._dragContext.selectedItems = [];\n    this._dragContext.isSelectedChanged = true;\n  }\n}\n","export class GetCanBeSelectedItemsRequest {\n  static readonly fToken = Symbol('GetCanBeSelectedItemsRequest');\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/**\n * Execution that retrieves elements that can be selected in the Flow, along with their bounding rectangles.\n * It filters out elements that are already selected in the FDraggableDataContext.\n */\n@Injectable()\n@FExecutionRegister(GetCanBeSelectedItemsRequest)\nexport class GetCanBeSelectedItemsExecution implements IExecution<void, ICanBeSelectedElementAndRect[]> {\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  private get fNodes(): FNodeBase[] {\n    return this._store.fNodes;\n  }\n\n  private get fConnections(): FConnectionBase[] {\n    return this._store.fConnections;\n  }\n\n  private get transform(): ITransformModel {\n    return this._store.fCanvas!.transform;\n  }\n\n  public handle(): ICanBeSelectedElementAndRect[] {\n    return [ ...this.getNodesWithRects(), ...this.getConnectionsWithRects() ].filter((x) => {\n      return !this._dragContext.selectedItems.includes(x.element);\n    });\n  }\n\n  /**\n   * Retrieves nodes with their bounding rectangles that can be selected.\n   * @private\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._mediator.execute<IRect>(new GetNormalizedElementRectRequest(x.hostElement)),\n          this.transform.scale,\n        ),\n      };\n    });\n  }\n\n  /**\n   * Retrieves connections with their bounding rectangles that can be selected.\n   * @private\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._mediator.execute<IRect>(new GetNormalizedElementRectRequest(x.boundingElement)),\n          this.transform.scale,\n        ),\n      };\n    });\n  }\n}\n","export class GetCurrentSelectionRequest {\n  static readonly fToken = Symbol('GetCurrentSelectionRequest');\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/**\n * Execution that retrieves the current selection of items in the FDraggableDataContext.\n */\n@Injectable()\n@FExecutionRegister(GetCurrentSelectionRequest)\nexport class GetCurrentSelectionExecution implements IExecution<GetCurrentSelectionRequest, ICurrentSelection> {\n\n  private _dragContext = 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._dragContext.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._dragContext.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._dragContext.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  static readonly fToken = Symbol('SelectRequest');\n  constructor(\n    public nodes: string[],\n    public connections: string[],\n    public isSelectedChanged: boolean = true,\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/**\n * Execution that handles the selection of nodes and connections in the FFlow.\n */\n@Injectable()\n@FExecutionRegister(SelectRequest)\nexport class SelectExecution implements IExecution<SelectRequest, void> {\n\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: SelectRequest): void {\n    this._dragContext.selectedItems.forEach((x) => {\n      x.unmarkAsSelected();\n    });\n    this._dragContext.selectedItems = [];\n\n    request.nodes.forEach((key) => {\n      const node = this._store.fNodes.find((x) => x.fId() === key);\n      if(node) {\n        node.markAsSelected();\n        this._dragContext.selectedItems.push(node);\n      }\n    });\n\n    request.connections.forEach((key) => {\n      const connection = this._store.fConnections.find((x) => x.fId() === key);\n      if(connection) {\n        connection.markAsSelected();\n        this._dragContext.selectedItems.push(connection);\n      }\n    });\n\n    this._dragContext.isSelectedChanged = request.isSelectedChanged;\n  }\n}\n","export class SelectAllRequest {\n  static readonly fToken = Symbol('SelectAllRequest');\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/**\n * Execution that selects all components in the FComponentsStore.\n * It marks all nodes and connections as selected and updates the selected items in the FDraggableDataContext.\n */\n@Injectable()\n@FExecutionRegister(SelectAllRequest)\nexport class SelectAllExecution implements IExecution<SelectAllRequest, void> {\n\n  private _dragContext = inject(FDraggableDataContext);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: SelectAllRequest): void {\n    this._dragContext.selectedItems.forEach((x) => {\n      x.unmarkAsSelected();\n    });\n    this._dragContext.selectedItems = [];\n    this._store.fNodes.forEach((x) => {\n      x.markAsSelected();\n      this._dragContext.selectedItems.push(x);\n    });\n    this._store.fConnections.forEach((x) => {\n      x.markAsSelected();\n      this._dragContext.selectedItems.push(x);\n    });\n    this._dragContext.isSelectedChanged = true;\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class SelectAndUpdateNodeLayerRequest {\n  static readonly fToken = Symbol('SelectAndUpdateNodeLayerRequest');\n  constructor(public readonly nodeOrGroup: FNodeBase) {}\n}\n","export class MoveFrontElementsBeforeTargetElementRequest {\n  static readonly fToken = Symbol('MoveFrontElementsBeforeTargetElementRequest');\n  constructor(\n    public readonly fItemsContainer: HTMLElement, // fGroupsContainer || fNodesContainer || fConnectionsContainer\n    public readonly allElements: Element[],\n    public readonly elementsThatShouldBeInFront: Element[],\n    public readonly targetIndex: number,\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/**\n * Execution that moves elements in the FItemsContainer before a target element.\n * It removes elements that should not be in front and inserts them before the target element.\n */\n@Injectable()\n@FExecutionRegister(MoveFrontElementsBeforeTargetElementRequest)\nexport class MoveFrontElementsBeforeTargetElement\n  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  static readonly fToken = Symbol('UpdateItemAndChildrenLayersRequest');\n\n  constructor(\n    public item: ISelectable,\n    public itemContainer: HTMLElement,\n  ) {\n  }\n}\n","export class GetDeepChildrenNodesAndGroupsRequest {\n  static readonly fToken = Symbol('GetDeepChildrenNodesAndGroupsRequest');\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/**\n * Execution that retrieves all deep children nodes and groups from the FComponentsStore.\n * It traverses the node hierarchy to find all descendants of a given node.\n */\n@Injectable()\n@FExecutionRegister(GetDeepChildrenNodesAndGroupsRequest)\nexport class GetDeepChildrenNodesAndGroupsExecution\n  implements IExecution<GetDeepChildrenNodesAndGroupsRequest, FNodeBase[]> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: GetDeepChildrenNodesAndGroupsRequest): FNodeBase[] {\n    return this._getChildrenNodes(request.fId);\n  }\n\n  private _getChildrenNodes(fId: string, visited = new Set<string>()): 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._store.fNodes.filter((x) => x.fParentId() === fId);\n\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/**\n * Execution that updates the layers of an item and its children in the FCanvas.\n * It handles different item containers (groups, nodes, connections) and updates their layers accordingly.\n */\n@Injectable()\n@FExecutionRegister(UpdateItemAndChildrenLayersRequest)\nexport class UpdateItemAndChildrenLayersExecution implements IExecution<UpdateItemAndChildrenLayersRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  private get _fCanvas(): FCanvasBase {\n    return this._store.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._mediator.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\n    return false;\n  }\n\n  private _getChildrenGroups(elements: HTMLElement[]): HTMLElement[] {\n    const allElements = Array.from(this._fGroupsContainer.children) as HTMLElement[];\n\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\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._mediator.execute<FNodeBase[]>(new GetDeepChildrenNodesAndGroupsRequest(fId)).map((x) => x.hostElement);\n  }\n}\n","import { IHandler } from '@foblex/mediator';\nimport { inject, 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/**\n * Execution that selects a node and updates its layer along with its children.\n * It checks if the node is already selected, and if not, it marks it as selected\n * and updates the layers of the node and its children.\n */\n@Injectable()\n@FExecutionRegister(SelectAndUpdateNodeLayerRequest)\nexport class SelectAndUpdateNodeLayerExecution\n  implements IHandler<SelectAndUpdateNodeLayerRequest, void>\n{\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ nodeOrGroup }: SelectAndUpdateNodeLayerRequest): void {\n    this._selectNodeIfNotSelected(nodeOrGroup);\n\n    this._mediator.execute<void>(\n      new UpdateItemAndChildrenLayersRequest(\n        nodeOrGroup,\n        nodeOrGroup.hostElement.parentElement as HTMLElement,\n      ),\n    );\n  }\n\n  private _selectNodeIfNotSelected(fNode: FNodeBase) {\n    if (!this._dragContext.selectedItems.includes(fNode) && !fNode.fSelectionDisabled()) {\n      this._dragContext.selectedItems.push(fNode);\n      fNode.markAsSelected();\n      this._dragContext.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\n/**\n * This module provides a collection of executions related to selection features in the FFlow domain.\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/**\n * Execution that emits a selection change event when the selection changes.\n * It retrieves the current selection and emits it through the FSelectionChangeEvent.\n */\n@Injectable()\n@FExecutionRegister(EmitSelectionChangeEventRequest)\nexport class EmitSelectionChangeEventExecution\n  implements IExecution<EmitSelectionChangeEventRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _fSelectionChange(): EventEmitter<FSelectionChangeEvent> {\n    return this._store.fDraggable!.fSelectionChange;\n  }\n\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(_request: EmitSelectionChangeEventRequest): void {\n    if (!this._dragContext.isSelectedChanged) {\n      return;\n    }\n\n    this._emitSelectionChange(this._getSelection());\n    this._dragContext.isSelectedChanged = false;\n    this._mediator.execute<void>(new NotifyTransformChangedRequest());\n  }\n\n  private _getSelection(): ICurrentSelection {\n    return this._mediator.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  static readonly fToken = Symbol('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/**\n * Execution that handles the end of a drag sequence.\n */\n@Injectable()\n@FExecutionRegister(EndDragSequenceRequest)\nexport class EndDragSequenceExecution implements IExecution<EndDragSequenceRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  private get _hostElement(): HTMLElement {\n    return this._store.fDraggable!.hostElement;\n  }\n\n  private _dragContext = inject(FDraggableDataContext);\n\n  public handle(request: EndDragSequenceRequest): void {\n    this._hostElement.classList.remove(F_CSS_CLASS.DRAG_AND_DROP.DRAGGING);\n\n    this._dragContext.reset();\n    this._emitDragEnded();\n  }\n\n  private _emitDragEnded(): void {\n    this._store.fDraggable?.fDragEnded?.emit();\n  }\n}\n","import { IPointerEvent } from \"../../../drag-toolkit\";\n\nexport class OnPointerMoveRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that handles pointer move events during a drag operation.\n * It calculates the difference between the current pointer position and the position\n * when the drag started, and updates the draggable items accordingly.\n */\n@Injectable()\n@FExecutionRegister(OnPointerMoveRequest)\nexport class OnPointerMoveExecution implements IExecution<OnPointerMoveRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  private get _hostElement(): HTMLElement {\n    return this._store.fDraggable!.hostElement;\n  }\n\n  private readonly _dragContext = 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._dragContext.draggableItems.forEach((item) => {\n      item.onPointerMove({ ...difference });\n    });\n  }\n\n  private _getDifferenceBetweenPointerAndPointerDown(event: IPointerEvent): IPoint {\n    return this._getPointerPositionInCanvas(event)\n      .div(this._dragContext.onPointerDownScale)\n      .sub(this._dragContext.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  static readonly fToken = Symbol('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/**\n * Execution that initializes the drag sequence by resetting the FDraggableDataContext.\n */\n@Injectable()\n@FExecutionRegister(InitializeDragSequenceRequest)\nexport class InitializeDragSequenceExecution implements IExecution<InitializeDragSequenceRequest, void> {\n\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(request: InitializeDragSequenceRequest): void {\n    this._dragContext.reset();\n  }\n}\n","export class IsDragStartedRequest {\n  static readonly fToken = Symbol('IsDragStartedRequest');\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/**\n * Execution that checks if a drag operation has started.\n */\n@Injectable()\n@FExecutionRegister(IsDragStartedRequest)\nexport class IsDragStarted implements IExecution<IsDragStartedRequest, boolean> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: IsDragStartedRequest): boolean {\n    return !!this._store.fDraggable?.isDragStarted;\n  }\n}\n","export class PrepareDragSequenceRequest {\n  static readonly fToken = Symbol('PrepareDragSequenceRequest');\n\n}\n","export class StartDragSequenceRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that starts the drag sequence by adding a dragging class to the host element\n */\n@Injectable()\n@FExecutionRegister(StartDragSequenceRequest)\nexport class StartDragSequenceExecution implements IExecution<StartDragSequenceRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  private get _hostElement(): HTMLElement {\n    return this._store.fDraggable!.hostElement;\n  }\n\n  public handle(_request: StartDragSequenceRequest): void {\n    if (this._dragContext.draggableItems.length > 0) {\n      this._hostElement.classList.add(F_CSS_CLASS.DRAG_AND_DROP.DRAGGING);\n      this._mediator.execute<void>(new EmitSelectionChangeEventRequest());\n      this._emitDragStarted();\n    }\n  }\n\n  private _emitDragStarted(): void {\n    this._store.fDraggable?.fDragStarted?.emit({\n      fEventType: this._dragContext.draggableItems[0].fEventType,\n      fData: { ...this._dragContext.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/**\n * Execution that prepares the drag sequence by invoking the prepareDragSequence method on each draggable item.\n */\n@Injectable()\n@FExecutionRegister(PrepareDragSequenceRequest)\nexport class PrepareDragSequenceExecution implements IExecution<PrepareDragSequenceRequest, void> {\n\n  private readonly _mediator = inject(FMediator);\n\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(request: PrepareDragSequenceRequest): void {\n    this._callPrepareDragSequence();\n\n    this._mediator.execute<void>(new StartDragSequenceRequest());\n  }\n\n  private _callPrepareDragSequence(): void {\n    this._dragContext.draggableItems.forEach((item) => {\n      item.prepareDragSequence?.();\n    });\n  }\n}\n","export class RemoveDndFromStoreRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that removes the drag and drop directive from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveDndFromStoreRequest)\nexport class RemoveDndFromStoreExecution implements IExecution<RemoveDndFromStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: RemoveDndFromStoreRequest): void {\n    this._store.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 { IsDragStarted } from './is-drag-started';\nimport { StartDragSequenceExecution } from './start-drag-sequence';\n\n/**\n * Collection of all FDraggable feature executions.\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  IsDragStarted,\n\n  StartDragSequenceExecution,\n\n  RemoveDndFromStoreExecution,\n];\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { CalculateConnectableSideByInternalPositionRequest } from './calculate-connectable-side-by-internal-position-request';\nimport { EFConnectableSide } from '../../../../f-connectors';\nimport { RectExtensions } from '@foblex/2d';\nimport { IsDragStartedRequest } from '../../../f-draggable';\n\n/**\n * Injection token for configuring the side detection tolerance (in pixels).\n * A new side must beat the previous side by more than this value to switch.\n */\nexport const CONNECTABLE_SIDE_EPSILON = new InjectionToken<number>('CONNECTABLE_SIDE_EPSILON');\n\n/**\n * Calculates the connectable side of a connector relative to its node host.\n *\n * Optimizations & behavior:\n * - Hysteresis via epsilon to avoid jitter near boundaries.\n * - Per-connector memoization using WeakMap (no leaks).\n * - During drag (isDragging === true) the last memorized side is returned immediately\n *   for maximum stability and performance; a safe fallback computes it if missing.\n */\n@Injectable()\n@FExecutionRegister(CalculateConnectableSideByInternalPositionRequest)\nexport class CalculateConnectableSideByInternalPosition\n  implements IExecution<CalculateConnectableSideByInternalPositionRequest, EFConnectableSide>\n{\n  private readonly _mediator = inject(FMediator);\n\n  /**\n   * Stores the last computed side per connector.\n   * WeakMap ensures entries are garbage-collected with the connector objects.\n   */\n  private readonly _lastSide = new WeakMap<object, EFConnectableSide>();\n\n  /** Pixel threshold to prevent side switching unless the new side is sufficiently better. */\n  private readonly _epsilon: number = Math.max(\n    0,\n    inject(CONNECTABLE_SIDE_EPSILON, { optional: true }) ?? 2,\n  );\n\n  /**\n   * Entry point: returns the connectable side for a given connector.\n   * If a drag is in progress, returns the last memorized side for stability.\n   */\n  public handle({\n    connector,\n  }: CalculateConnectableSideByInternalPositionRequest): EFConnectableSide {\n    // Fast path during drag: use memorized side (guaranteed to be present by caller’s contract).\n    if (this._isDragging()) {\n      const cached = this._lastSide.get(connector);\n      if (cached !== undefined) return cached;\n      // Safe fallback: compute once and cache.\n      const computed = this._getSideByDelta(connector.hostElement, connector.fNodeHost, connector);\n      this._lastSide.set(connector, computed);\n\n      return computed;\n    }\n\n    // Normal path: compute with hysteresis, then remember.\n    const side = this._getSideByDelta(connector.hostElement, connector.fNodeHost, connector);\n    this._lastSide.set(connector, side);\n\n    return side;\n  }\n\n  /**\n   * Determines the side of the connector relative to the node host by\n   * comparing distances from the connector's gravity center to each host edge.\n   *\n   * Hysteresis rule:\n   * If the previously chosen side is within `epsilon` pixels of the new best side,\n   * keep the previous side to avoid flicker.\n   *\n   * @param connectorHost - The connector element (HTML or SVG).\n   * @param nodeHost - The parent node element (HTML or SVG).\n   * @param connectorKey - The connector object, used as WeakMap key.\n   * @returns The most stable connectable side.\n   */\n  private _getSideByDelta(\n    connectorHost: HTMLElement | SVGElement,\n    nodeHost: HTMLElement | SVGElement,\n    connectorKey: object,\n  ): EFConnectableSide {\n    const childRect = RectExtensions.fromElement(connectorHost);\n    const parentRect = nodeHost.getBoundingClientRect();\n\n    const cx = childRect.gravityCenter.x;\n    const cy = childRect.gravityCenter.y;\n\n    const deltaLeft = cx - parentRect.left;\n    const deltaRight = parentRect.right - cx;\n    const deltaTop = cy - parentRect.top;\n    const deltaBottom = parentRect.bottom - cy;\n\n    // Determine best side (min delta) in one pass\n    let minIdx = 0;\n    let minVal = deltaLeft;\n\n    // i=1..3 correspond to Right, Top, Bottom respectively\n    const candidates = [deltaLeft, deltaRight, deltaTop, deltaBottom] as const;\n    for (let i = 1; i < 4; i++) {\n      const v = candidates[i];\n      if (v < minVal) {\n        minVal = v;\n        minIdx = i;\n      }\n    }\n\n    let candidate =\n      minIdx === 0\n        ? EFConnectableSide.LEFT\n        : minIdx === 1\n          ? EFConnectableSide.RIGHT\n          : minIdx === 2\n            ? EFConnectableSide.TOP\n            : EFConnectableSide.BOTTOM;\n\n    // Hysteresis: prefer previously chosen side if it's almost as good\n    const prev = this._lastSide.get(connectorKey);\n    if (prev !== undefined && prev !== candidate) {\n      const prevIdx =\n        prev === EFConnectableSide.LEFT\n          ? 0\n          : prev === EFConnectableSide.RIGHT\n            ? 1\n            : prev === EFConnectableSide.TOP\n              ? 2\n              : 3;\n\n      const prevDelta =\n        prevIdx === 0\n          ? deltaLeft\n          : prevIdx === 1\n            ? deltaRight\n            : prevIdx === 2\n              ? deltaTop\n              : deltaBottom;\n\n      // How much better the new side is (smaller is better)\n      const advantage = prevDelta - minVal;\n      if (advantage <= this._epsilon) {\n        candidate = prev;\n      }\n    }\n\n    return candidate;\n  }\n\n  /** Returns true if a drag operation is currently active. */\n  private _isDragging(): boolean {\n    return this._mediator.execute(new IsDragStartedRequest());\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class CalculateConnectorsConnectableSidesRequest {\n  static readonly fToken = Symbol('CalculateConnectorsConnectableSidesRequest');\n  constructor(public readonly nodeOrGroup: FNodeBase) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { CalculateConnectorsConnectableSidesRequest } from './calculate-connectors-connectable-sides-request';\nimport { EFConnectableSide, FConnectorBase } from '../../../f-connectors';\nimport { CalculateConnectableSideByConnectedPositionsRequest } from './calculate-connectable-side-by-connected-positions';\nimport { CalculateConnectableSideByInternalPositionRequest } from './calculate-connectable-side-by-internal-position';\nimport { isCalculateMode } from './utils';\n\n/**\n * Execution that calculates connectable sides for all connectors of a node.\n */\n@Injectable()\n@FExecutionRegister(CalculateConnectorsConnectableSidesRequest)\nexport class CalculateConnectorsConnectableSides\n  implements IExecution<CalculateConnectorsConnectableSidesRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n\n  /**\n   * Orchestrates side calculation for all connectors of the given node.\n   */\n  public handle({ nodeOrGroup }: CalculateConnectorsConnectableSidesRequest): void {\n    const connectors = nodeOrGroup.connectors;\n    const len = connectors.length;\n\n    for (let i = 0; i < len; i++) {\n      const connection = connectors[i];\n      connection.fConnectableSide = this._resolveSideForConnectorFast(connection);\n    }\n\n    const toRecalc = new Set<FConnectorBase>();\n\n    for (let i = 0; i < len; i++) {\n      const source = connectors[i];\n      const outs = source.toConnector;\n      if (outs && outs.length) {\n        for (let j = 0, m = outs.length; j < m; j++) {\n          const target = outs[j];\n          const userSide = target.userFConnectableSide;\n          if (isCalculateMode(userSide)) {\n            toRecalc.add(target);\n          }\n        }\n      }\n    }\n\n    if (toRecalc.size > 0) {\n      toRecalc.forEach((target) => {\n        target.fConnectableSide = this._calculateByConnectedPositions(target);\n      });\n    }\n  }\n\n  /**\n   * Resolves the connectable side for a connector quickly.\n   * Avoids intermediate arrays and redundant allocations.\n   */\n  private _resolveSideForConnectorFast(connector: FConnectorBase): EFConnectableSide {\n    const mode = connector.userFConnectableSide;\n\n    if (mode === EFConnectableSide.AUTO) {\n      return this._mediator.execute<EFConnectableSide>(\n        new CalculateConnectableSideByInternalPositionRequest(connector),\n      );\n    }\n\n    if (isCalculateMode(mode)) {\n      return this._calculateByConnectedPositions(connector);\n    }\n\n    return mode;\n  }\n\n  /** Delegates to the connected-positions calculation execution. */\n  private _calculateByConnectedPositions(connector: FConnectorBase): EFConnectableSide {\n    return this._mediator.execute(\n      new CalculateConnectableSideByConnectedPositionsRequest(connector),\n    );\n  }\n}\n","export class CalculateNodesBoundingBoxRequest {\n  static readonly fToken = Symbol('CalculateNodesBoundingBoxRequest');\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/**\n * Execution that calculates the bounding box of all nodes in the FComponentsStore.\n * It retrieves the rectangles of each node's host element and computes their union.\n */\n@Injectable()\n@FExecutionRegister(CalculateNodesBoundingBoxRequest)\nexport class CalculateNodesBoundingBox\n  implements IExecution<CalculateNodesBoundingBoxRequest, IRect | null>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: CalculateNodesBoundingBoxRequest): IRect | null {\n    return RectExtensions.union(this._nodesRects());\n  }\n\n  private _nodesRects(): IRect[] {\n    return this._store.fNodes.map((x) => RectExtensions.fromElement(x.hostElement));\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class CalculateNodesBoundingBoxNormalizedPositionRequest {\n  static readonly fToken = Symbol('CalculateNodesBoundingBoxNormalizedPositionRequest');\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/**\n * Execution that calculates the bounding box of all nodes in the FComponentsStore\n * and returns their normalized positions.\n * It retrieves the rectangles of each node's host element and computes their union.\n */\n@Injectable()\n@FExecutionRegister(CalculateNodesBoundingBoxNormalizedPositionRequest)\nexport class CalculateNodesBoundingBoxNormalizedPosition\n  implements IExecution<CalculateNodesBoundingBoxNormalizedPositionRequest, IRect | null>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: CalculateNodesBoundingBoxNormalizedPositionRequest): IRect | null {\n    return RectExtensions.union(this._getNodesRects(request.fNodes || this._store.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  static readonly fToken = Symbol('CalculateOutputConnectionsRequest');\n  constructor(public readonly nodeOrGroup: FNodeBase) {}\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/**\n * Execution that calculates output connections for a given FNode.\n */\n@Injectable()\n@FExecutionRegister(CalculateOutputConnectionsRequest)\nexport class CalculateOutputConnections\n  implements IExecution<CalculateOutputConnectionsRequest, FConnectionBase[]>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ nodeOrGroup }: CalculateOutputConnectionsRequest): FConnectionBase[] {\n    const ids = this._collectOutputIds(nodeOrGroup);\n\n    return this._collectConnections(ids);\n  }\n\n  private _collectOutputIds(nodeOrGroup: FNodeBase): Set<string> {\n    const ids = new Set<string>();\n    for (const connector of this._store.fOutputs) {\n      if (nodeOrGroup.isContains(connector.hostElement)) {\n        ids.add(connector.fId());\n      }\n    }\n\n    return ids;\n  }\n\n  private _collectConnections(ids: Set<string>): FConnectionBase[] {\n    const result: FConnectionBase[] = [];\n    for (const conn of this._store.fConnections) {\n      if (ids.has(conn.fOutputId())) {\n        result.push(conn);\n      }\n    }\n\n    return result;\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class FitToChildNodesAndGroupsRequest {\n  static readonly fToken = Symbol('FitToChildNodesAndGroupsRequest');\n\n  constructor(public readonly nodeOrGroup: FNodeBase) {}\n}\n","import { FNodeBase } from '../../../f-node';\nimport { IRect } from '@foblex/2d';\n\nexport class GetNodePaddingRequest {\n  static readonly fToken = Symbol('GetNodePaddingRequest');\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/**\n * Execution that retrieves the padding data of a Node.\n * If the Node does not include padding, it returns [0, 0, 0, 0].\n */\n@Injectable()\n@FExecutionRegister(GetNodePaddingRequest)\nexport class GetNodePadding\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\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","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FitToChildNodesAndGroupsRequest } from './fit-to-child-nodes-and-groups-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FNodeBase } from \"../../../f-node\";\nimport { IRect, RectExtensions } from \"@foblex/2d\";\nimport { GetNormalizedElementRectRequest } from \"../../get-normalized-element-rect\";\nimport { GetNodePaddingRequest } from \"../get-node-padding\";\n\n@Injectable()\n@FExecutionRegister(FitToChildNodesAndGroupsRequest)\nexport class FitToChildNodesAndGroups\n  implements IExecution<FitToChildNodesAndGroupsRequest, void> {\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _nodes(): FNodeBase[] {\n    return this._store.fNodes;\n  }\n\n  public handle({ nodeOrGroup }: FitToChildNodesAndGroupsRequest): void {\n    if (nodeOrGroup.fAutoSizeToFitChildren()) {\n      const directChildren = this._calculateDirectChildren(nodeOrGroup);\n      if (directChildren.length) {\n        const currentBounding = this._boundingRect(nodeOrGroup);\n        const childrenBounding = this._calculateChildrenBounding(directChildren, this._paddings(nodeOrGroup, currentBounding));\n\n        nodeOrGroup.updatePosition(childrenBounding);\n        nodeOrGroup.updateSize(childrenBounding);\n        nodeOrGroup.redraw();\n      }\n    }\n\n    const parent = nodeOrGroup.fParentId();\n    if (!parent) {\n      return;\n    }\n\n    const parentNode = this._nodes.find(x => x.fId() === parent);\n    if (!parentNode) {\n      return;\n    }\n\n    this._mediator.execute<void>(new FitToChildNodesAndGroupsRequest(parentNode));\n  }\n\n  private _calculateDirectChildren(nodeOrGroup: FNodeBase): FNodeBase[] {\n    return this._nodes.filter(x => x.fParentId() === nodeOrGroup.fId());\n  }\n\n  private _unionRect(nodeOrGroups: FNodeBase[]): IRect {\n    return RectExtensions.union(\n      nodeOrGroups.map((x) => this._boundingRect(x)),\n    ) || RectExtensions.initialize();\n  }\n\n  private _boundingRect(nodeOrGroup: FNodeBase): IRect {\n    return this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(nodeOrGroup.hostElement));\n  }\n\n  private _paddings(nodeOrGroup: FNodeBase, rect: IRect): [number, number, number, number] {\n    return this._mediator.execute<[number, number, number, number]>(new GetNodePaddingRequest(nodeOrGroup, rect));\n  }\n\n  private _calculateChildrenBounding(directChildren: FNodeBase[], [top, right, bottom, left]: [number, number, number, number]): IRect {\n    let childrenBounding = this._unionRect(directChildren);\n    childrenBounding = RectExtensions.initialize(\n      childrenBounding.x - left,\n      childrenBounding.y - top,\n      childrenBounding.width + left + right,\n      childrenBounding.height + top + bottom,\n    );\n\n    return childrenBounding;\n  }\n}\n\n","export class GetChildNodeIdsRequest {\n  static readonly fToken = Symbol('GetChildNodeIdsRequest');\n  constructor(public id?: string | null) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { GetChildNodeIdsRequest } from './get-child-node-ids.request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../f-node';\nimport { FComponentsStore } from '../../../f-storage';\n\n/**\n * Execution that retrieves all child nodes of a given node in the Flow.\n */\n@Injectable()\n@FExecutionRegister(GetChildNodeIdsRequest)\nexport class GetChildNodeIds\n  implements IExecution<GetChildNodeIdsRequest, string[]> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  private get _allNodesAndGroups(): FNodeBase[] {\n    return this._store.fNodes;\n  }\n\n  public handle(request: GetChildNodeIdsRequest): string[] {\n    if (!request.id) {\n      return [];\n    }\n    const visited = new Set<string>();\n    const result: string[] = [];\n    this._collectDescendants(request.id, result, visited);\n\n    return result;\n  }\n\n  private _collectDescendants(nodeId: string, result: string[], visited: Set<string>): void {\n    if (visited.has(nodeId)) {\n      throw new Error(`Circular reference detected in the node hierarchy. Node id: ${nodeId}`);\n    }\n    visited.add(nodeId);\n\n    const children = this._allNodesAndGroups.filter(n => n.fParentId() === nodeId).map((x) => x.fId());\n    result.push(...children);\n    for (const id of children) {\n      this._collectDescendants(id, result, visited);\n    }\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class GetParentNodesRequest {\n  static readonly fToken = Symbol('GetParentNodesRequest');\n  constructor(public readonly nodeOrGroup: FNodeBase) {}\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/**\n * Execution that retrieves all parent nodes of a given node from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(GetParentNodesRequest)\nexport class GetParentNodes implements IExecution<GetParentNodesRequest, FNodeBase[]> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ nodeOrGroup }: GetParentNodesRequest): FNodeBase[] {\n    return this._getParentNodes(nodeOrGroup, new Set<string>(), []);\n  }\n\n  private _getParentNodes(\n    nodeOrGroup: FNodeBase,\n    visited: Set<string>,\n    result: FNodeBase[],\n  ): FNodeBase[] {\n    if (visited.has(nodeOrGroup.fId())) {\n      throw new Error(\n        'Circular reference detected in the node hierarchy. Node id: ' + nodeOrGroup.fId(),\n      );\n    }\n    visited.add(nodeOrGroup.fId());\n\n    const parent = this._store.fNodes.find((x) => x.fId() === nodeOrGroup.fParentId());\n    if (!parent) {\n      return result;\n    }\n\n    result.push(parent);\n\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  static readonly fToken = Symbol('UpdateNodeWhenStateOrSizeChangedRequest');\n\n  constructor(\n    public readonly nodeOrGroup: FNodeBase,\n    public readonly destroyRef: DestroyRef,\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 { NotifyDataChangedRequest } from '../../../f-storage';\nimport { debounceTime, FChannelHub, notifyOnStart } from '../../../reactivity';\nimport { FResizeChannel } from '../../../reactivity';\nimport { FitToChildNodesAndGroupsRequest } from '../fit-to-child-nodes-and-groups';\nimport { IsDragStartedRequest } from '../../f-draggable';\nimport { CalculateConnectorsConnectableSidesRequest } from '../calculate-connectors-connectable-sides';\n\n/**\n * Execution that updates a node's connectors when its state or size changes.\n */\n@Injectable()\n@FExecutionRegister(UpdateNodeWhenStateOrSizeChangedRequest)\nexport class UpdateNodeWhenStateOrSizeChanged\n  implements IExecution<UpdateNodeWhenStateOrSizeChangedRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n\n  /**\n   * Handles the request to update the node's connectors based on state or size changes.\n   * It listens for resize events and recalculates the connectable sides of the connectors.\n   * @param request\n   */\n  public handle({ nodeOrGroup, destroyRef }: UpdateNodeWhenStateOrSizeChangedRequest): void {\n    const { hostElement, stateChanges } = nodeOrGroup;\n\n    new FChannelHub(new FResizeChannel(hostElement), stateChanges)\n      .pipe(notifyOnStart(), debounceTime(10))\n      .listen(destroyRef, () => {\n        this._mediator.execute<void>(new NotifyDataChangedRequest());\n\n        if (!this._isDragging()) {\n          this._mediator.execute<void>(new CalculateConnectorsConnectableSidesRequest(nodeOrGroup));\n\n          this._mediator.execute<void>(new FitToChildNodesAndGroupsRequest(nodeOrGroup));\n        }\n      });\n  }\n\n  private _isDragging(): boolean {\n    return this._mediator.execute(new IsDragStartedRequest());\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class RemoveNodeFromStoreRequest {\n  static readonly fToken = Symbol('RemoveNodeFromStoreRequest');\n  constructor(public readonly instance: FNodeBase) {}\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/**\n * Execution that removes a node from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveNodeFromStoreRequest)\nexport class RemoveNodeFromStore implements IExecution<RemoveNodeFromStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ instance }: RemoveNodeFromStoreRequest): void {\n    this._store.removeComponent(this._store.fNodes, instance);\n  }\n}\n","import { AddNodeToStore } from './add-node-to-store';\nimport { RemoveNodeFromStore } from './remove-node-from-store';\nimport { UpdateNodeWhenStateOrSizeChanged } from './update-node-when-state-or-size-changed';\nimport { CalculateNodesBoundingBox } from './calculate-nodes-bounding-box';\nimport { CalculateNodesBoundingBoxNormalizedPosition } from './calculate-nodes-bounding-box-normalized-position';\nimport { GetNodePadding } from './get-node-padding';\nimport { GetParentNodes } from './get-parent-nodes';\nimport { CalculateInputConnections } from './calculate-input-connections';\nimport { CalculateOutputConnections } from './calculate-output-connections';\nimport { GetChildNodeIds } from './get-child-node-ids';\nimport { FitToChildNodesAndGroups } from './fit-to-child-nodes-and-groups';\nimport {\n  CalculateConnectableSideByConnectedPositions,\n  CalculateConnectableSideByInternalPosition,\n  CalculateConnectorsConnectableSides,\n} from './calculate-connectors-connectable-sides';\n\n/**\n * This file exports all the node-related executions that can be used in the F-Flow domain.\n */\nexport const F_NODE_FEATURES = [\n  AddNodeToStore,\n\n  CalculateConnectableSideByConnectedPositions,\n\n  CalculateConnectableSideByInternalPosition,\n\n  CalculateInputConnections,\n\n  CalculateConnectorsConnectableSides,\n\n  CalculateNodesBoundingBox,\n\n  CalculateNodesBoundingBoxNormalizedPosition,\n\n  CalculateOutputConnections,\n\n  FitToChildNodesAndGroups,\n\n  GetChildNodeIds,\n\n  GetNodePadding,\n\n  GetParentNodes,\n\n  UpdateNodeWhenStateOrSizeChanged,\n\n  RemoveNodeFromStore,\n];\n","import { CalculateTargetConnectorsToConnectRequest } from './calculate-target-connectors-to-connect-request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport {\n  EFConnectableSide,\n  FConnectorBase,\n  FNodeInputBase,\n  FNodeOutletBase,\n  FNodeOutputBase,\n} from '../../../f-connectors';\nimport { FComponentsStore } from '../../../f-storage';\nimport { IConnectorAndRect } from '../i-connector-and-rect';\nimport { GetConnectorAndRectRequest } from '../get-connector-and-rect';\nimport { CalculateConnectableSideByConnectedPositionsRequest, isCalculateMode } from '../../f-node';\nimport { IPoint } from '@foblex/2d';\n\n/**\n * Execution that retrieves all input connectors that can be connected to a given output or outlet connector,\n */\n@Injectable()\n@FExecutionRegister(CalculateTargetConnectorsToConnectRequest)\nexport class CalculateTargetConnectorsToConnect\n  implements IExecution<CalculateTargetConnectorsToConnectRequest, IConnectorAndRect[]>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _targetConnectors(): FConnectorBase[] {\n    return this._store.fInputs;\n  }\n\n  public handle({\n    sourceConnector,\n    pointerPosition,\n  }: CalculateTargetConnectorsToConnectRequest): IConnectorAndRect[] {\n    const result = this._getCanBeConnectedInputs(sourceConnector).map((x) => {\n      return this._mediator.execute<IConnectorAndRect>(new GetConnectorAndRectRequest(x));\n    });\n\n    setTimeout(() => {\n      this._calculateConnectableSides(result, pointerPosition);\n    });\n\n    return result;\n  }\n\n  private _getCanBeConnectedInputs(\n    outputOrOutlet: FNodeOutputBase | FNodeOutletBase,\n  ): FConnectorBase[] {\n    let targetConnectors: FConnectorBase[] = [];\n    if (outputOrOutlet.hasConnectionLimits) {\n      targetConnectors = this._targetConnectors.filter((x) =>\n        outputOrOutlet.canConnectTo(x as FNodeInputBase),\n      );\n    } else {\n      targetConnectors = this._targetConnectors.filter((x) => x.canBeConnected);\n\n      if (!outputOrOutlet.isSelfConnectable) {\n        targetConnectors = this._filterSelfConnectable(targetConnectors, outputOrOutlet);\n      }\n    }\n\n    return targetConnectors;\n  }\n\n  private _filterSelfConnectable(\n    targetConnectors: FConnectorBase[],\n    outputOrOutlet: FConnectorBase,\n  ): FConnectorBase[] {\n    return targetConnectors.filter(({ fNodeId }) => outputOrOutlet.fNodeId !== fNodeId);\n  }\n\n  private _calculateConnectableSides(\n    connectors: IConnectorAndRect[],\n    pointerPosition: IPoint,\n  ): void {\n    connectors.forEach((x) => {\n      if (isCalculateMode(x.fConnector.userFConnectableSide)) {\n        x.fConnector.fConnectableSide = this._calculateByConnectedPositions(\n          x.fConnector,\n          pointerPosition,\n        );\n      }\n    });\n  }\n\n  /** Delegates to the connected-positions calculation execution. */\n  private _calculateByConnectedPositions(\n    connector: FConnectorBase,\n    pointerPosition: IPoint,\n  ): EFConnectableSide {\n    return this._mediator.execute(\n      new CalculateConnectableSideByConnectedPositionsRequest(connector, pointerPosition),\n    );\n  }\n}\n","import { FNodeInputBase } from '../../../f-connectors';\nimport { IPoint } from '@foblex/2d';\n\nexport class CalculateSourceConnectorsToConnectRequest {\n  static readonly fToken = Symbol('CalculateSourceConnectorsToConnectRequest');\n\n  constructor(\n    public readonly targetConnector: FNodeInputBase,\n    public readonly pointerPosition: IPoint,\n  ) {}\n}\n","import { CalculateSourceConnectorsToConnectRequest } from './calculate-source-connectors-to-connect-request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport {\n  EFConnectableSide,\n  FConnectorBase,\n  FNodeInputBase,\n  FNodeOutputBase,\n} from '../../../f-connectors';\nimport { FComponentsStore } from '../../../f-storage';\nimport { IConnectorAndRect } from '../i-connector-and-rect';\nimport { GetConnectorAndRectRequest } from '../get-connector-and-rect';\nimport { IPoint } from '@foblex/2d';\nimport { CalculateConnectableSideByConnectedPositionsRequest, isCalculateMode } from '../../f-node';\n\n/**\n * Execution that retrieves all source connectors that can be connected to a given target connector,\n * along with their rectangles.\n * Source - Output or Outlet connectors.\n */\n@Injectable()\n@FExecutionRegister(CalculateSourceConnectorsToConnectRequest)\nexport class CalculateSourceConnectorsToConnect\n  implements IExecution<CalculateSourceConnectorsToConnectRequest, IConnectorAndRect[]>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _sourceConnectors(): FNodeOutputBase[] {\n    return this._store.fOutputs as FNodeOutputBase[];\n  }\n\n  public handle({\n    targetConnector,\n    pointerPosition,\n  }: CalculateSourceConnectorsToConnectRequest): IConnectorAndRect[] {\n    const result = this._getConnectableSources(targetConnector).map((x) => {\n      return this._mediator.execute<IConnectorAndRect>(new GetConnectorAndRectRequest(x));\n    });\n\n    setTimeout(() => {\n      this._calculateConnectableSides(result, pointerPosition);\n    });\n\n    return result;\n  }\n\n  private _getConnectableSources(targetConnector: FNodeInputBase): FConnectorBase[] {\n    return this._sourceConnectors.filter((x) => {\n      let result = x.canBeConnected;\n      if (result && x.hasConnectionLimits) {\n        result = x.canConnectTo(targetConnector);\n      }\n\n      return result;\n    });\n  }\n\n  private _calculateConnectableSides(\n    connectors: IConnectorAndRect[],\n    pointerPosition: IPoint,\n  ): void {\n    connectors.forEach((x) => {\n      if (isCalculateMode(x.fConnector.userFConnectableSide)) {\n        x.fConnector.fConnectableSide = this._calculateByConnectedPositions(\n          x.fConnector,\n          pointerPosition,\n        );\n      }\n    });\n  }\n\n  /** Delegates to the connected-positions calculation execution. */\n  private _calculateByConnectedPositions(\n    connector: FConnectorBase,\n    pointerPosition: IPoint,\n  ): EFConnectableSide {\n    return this._mediator.execute(\n      new CalculateConnectableSideByConnectedPositionsRequest(connector, pointerPosition),\n    );\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class MarkConnectableConnectorsRequest {\n  static readonly fToken = Symbol('MarkConnectableConnectorsRequest');\n\n  constructor(public readonly connectors: FConnectorBase[]) {}\n}\n","import { MarkConnectableConnectorsRequest } from './mark-connectable-connectors-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/**\n * Execution that marks connectors as connectable.\n */\n@Injectable()\n@FExecutionRegister(MarkConnectableConnectorsRequest)\nexport class MarkConnectableConnectors\n  implements IExecution<MarkConnectableConnectorsRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ connectors }: MarkConnectableConnectorsRequest): void {\n    this._store.flowHost.classList.add(F_CSS_CLASS.DRAG_AND_DROP.CONNECTIONS_DRAGGING);\n    connectors.forEach((x) => this._markConnector(x));\n  }\n\n  private _markConnector({ hostElement }: FConnectorBase): void {\n    hostElement.classList.add(F_CSS_CLASS.CONNECTOR.CONNECTABLE);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class RemoveInputFromStoreRequest {\n  static readonly fToken = Symbol('RemoveInputFromStoreRequest');\n  constructor(public readonly component: FConnectorBase) {}\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/**\n * Execution that removes an inputConnector from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveInputFromStoreRequest)\nexport class RemoveInputFromStore implements IExecution<RemoveInputFromStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ component }: RemoveInputFromStoreRequest): void {\n    this._store.removeComponent(this._store.fInputs, component);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class RemoveOutletFromStoreRequest {\n  static readonly fToken = Symbol('RemoveOutletFromStoreRequest');\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/**\n * Execution that removes an outlet connector from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveOutletFromStoreRequest)\nexport class RemoveOutletFromStoreExecution implements IExecution<RemoveOutletFromStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: RemoveOutletFromStoreRequest): void {\n    this._store.removeComponent(this._store.fOutlets, request.fComponent);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class RemoveOutputFromStoreRequest {\n  static readonly fToken = Symbol('RemoveOutputFromStoreRequest');\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/**\n * Execution that removes an outlet connector from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveOutputFromStoreRequest)\nexport class RemoveOutputFromStoreExecution implements IExecution<RemoveOutputFromStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: RemoveOutputFromStoreRequest): void {\n    this._store.removeComponent(this._store.fOutputs, request.fComponent);\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class UnmarkConnectableConnectorsRequest {\n  static readonly fToken = Symbol('UnmarkConnectableConnectorsRequest');\n\n  constructor(public readonly connectors: FConnectorBase[]) {}\n}\n","import { UnmarkConnectableConnectorsRequest } from './unmark-connectable-connectors-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/**\n * Execution that unmarks connectors as connectable.\n */\n@Injectable()\n@FExecutionRegister(UnmarkConnectableConnectorsRequest)\nexport class UnmarkConnectableConnectors\n  implements IExecution<UnmarkConnectableConnectorsRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ connectors }: UnmarkConnectableConnectorsRequest): void {\n    this._store.flowHost.classList.remove(F_CSS_CLASS.DRAG_AND_DROP.CONNECTIONS_DRAGGING);\n    connectors.forEach((x) => this._unmarkConnector(x));\n  }\n\n  private _unmarkConnector({ hostElement }: FConnectorBase): void {\n    hostElement.classList.remove(F_CSS_CLASS.CONNECTOR.CONNECTABLE);\n  }\n}\n","import { AddInputToStore } from './add-input-to-store';\nimport { AddOutletToStore } from './add-outlet-to-store';\nimport { AddOutputToStore } from './add-output-to-store';\nimport { RemoveInputFromStore } from './remove-input-from-store';\nimport { RemoveOutletFromStoreExecution } from './remove-outlet-from-store';\nimport { RemoveOutputFromStoreExecution } from './remove-output-from-store';\nimport { MarkConnectableConnectors } from './mark-connectable-connectors';\nimport { UnmarkConnectableConnectors } from './unmark-connectable-connectors';\nimport { CalculateTargetConnectorsToConnect } from './calculate-target-connectors-to-connect';\nimport { GetConnectorAndRect } from './get-connector-and-rect';\nimport { CalculateClosestConnector } from './calculate-closest-connector';\nimport { CalculateSourceConnectorsToConnect } from './calculate-source-connectors-to-connect';\nimport { FindConnectableConnectorUsingPriorityAndPositionExecution } from './find-connectable-connector-using-priority-and-position';\n/*\n * This file exports all the connector-related executions that can be used in the FFlow domain.\n */\nexport const F_CONNECTORS_FEATURES = [\n  AddInputToStore,\n\n  AddOutletToStore,\n\n  AddOutputToStore,\n\n  CalculateClosestConnector,\n\n  FindConnectableConnectorUsingPriorityAndPositionExecution,\n\n  CalculateSourceConnectorsToConnect,\n\n  CalculateTargetConnectorsToConnect,\n\n  GetConnectorAndRect,\n\n  MarkConnectableConnectors,\n\n  RemoveInputFromStore,\n\n  RemoveOutletFromStoreExecution,\n\n  RemoveOutputFromStoreExecution,\n\n  UnmarkConnectableConnectors,\n];\n","import { FFlowBase } from '../../../f-flow';\n\nexport class AddFlowToStoreRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that adds a Flow to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddFlowToStoreRequest)\nexport class AddFlowToStoreExecution implements IExecution<AddFlowToStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: AddFlowToStoreRequest): void {\n    this._store.fFlow = request.fComponent;\n  }\n}\n","export class GetFlowRequest {\n  static readonly fToken = Symbol('GetFlowRequest');\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/**\n * Execution that retrieves the current Flow from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(GetFlowRequest)\nexport class GetFlowExecution implements IExecution<GetFlowRequest, FFlowBase> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: GetFlowRequest): FFlowBase {\n    const result = this._store.fFlow;\n    if (!result) {\n      throw new Error(`Flow not found in store`);\n    }\n\n    return result;\n  }\n}\n","export class GetFlowHostElementRequest {\n  static readonly fToken = Symbol('GetFlowHostElementRequest');\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/**\n * Execution that retrieves the Flow host element from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(GetFlowHostElementRequest)\nexport class GetFlowHostElementExecution implements IExecution<GetFlowHostElementRequest, HTMLElement> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(): HTMLElement {\n    return this._store.flowHost;\n  }\n}\n","export class GetFlowStateConnectionsRequest {\n  static readonly fToken = Symbol('GetFlowStateConnectionsRequest');\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/**\n * Execution that retrieves the current Flow state connections from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(GetFlowStateConnectionsRequest)\nexport class GetFlowStateConnectionsExecution\n  implements IExecution<GetFlowStateConnectionsRequest, IFFlowStateConnection[]>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: GetFlowStateConnectionsRequest): IFFlowStateConnection[] {\n    return this._store.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  static readonly fToken = Symbol('GetFlowStateNodesRequest');\n  constructor(\n    public type: Type<any>,\n  ) {\n  }\n}\n","import { inject, 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/**\n * Execution that retrieves the state of Flow nodes, including their position, size, inputs, outputs, and selection status.\n */\n@Injectable()\n@FExecutionRegister(GetFlowStateNodesRequest)\nexport class GetFlowStateNodesExecution\n  implements IExecution<GetFlowStateNodesRequest, IFFlowStateNode[]>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: GetFlowStateNodesRequest): IFFlowStateNode[] {\n    return this._store.fNodes\n      .filter((x) => x instanceof request.type)\n      .map((x) => {\n        return {\n          id: x.fId(),\n          parent: x.fParentId(),\n          position: x._position,\n          size: x._size,\n          rotate: x._rotate,\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._store.fOutputs\n      .filter((x) => hostElement.contains(x.hostElement))\n      .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._store.fInputs\n      .filter((x) => hostElement.contains(x.hostElement))\n      .map((x) => {\n        return {\n          id: x.fId(),\n          fConnectableSide: x.fConnectableSide,\n        };\n      });\n  }\n}\n","export class GetFlowStateRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that retrieves the current state of the Flow, including its position, scale, nodes, groups, and connections.\n */\n@Injectable()\n@FExecutionRegister(GetFlowStateRequest)\nexport class GetFlowStateExecution implements IExecution<GetFlowStateRequest, IFFlowState> {\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(payload: GetFlowStateRequest): IFFlowState {\n    return {\n      position: this._getCanvasPosition(this._store.fCanvas!.transform),\n      scale: this._store.fCanvas!.transform.scale,\n      nodes: this._mediator.execute(new GetFlowStateNodesRequest(FNodeDirective)),\n      groups: this._mediator.execute(new GetFlowStateNodesRequest(FGroupDirective)),\n      connections: this._mediator.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","import { GetFlowStateExecution } from './get-flow-state.execution';\nimport { GetFlowStateNodesExecution } from './get-flow-state-nodes';\nimport { GetFlowStateConnectionsExecution } from './get-flow-state-connections';\n\n/**\n * Providers for retrieving the current Flow state, including nodes, groups, and connections.\n */\nexport const GET_FLOW_STATE_PROVIDERS = [\n\n  GetFlowStateExecution,\n\n  GetFlowStateNodesExecution,\n\n  GetFlowStateConnectionsExecution,\n];\n","export class RemoveFlowFromStoreRequest {\n  static readonly fToken = Symbol('RemoveFlowFromStoreRequest');\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/**\n * Execution that removes a Flow from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveFlowFromStoreRequest)\nexport class RemoveFlowFromStoreExecution implements IExecution<RemoveFlowFromStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: RemoveFlowFromStoreRequest): void {\n    this._store.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\n/**\n * Providers for managing the Flow in the FComponentsStore.\n * This includes adding, retrieving, and removing the Flow,\n * as well as getting the Flow host element and its 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  static readonly fToken = Symbol('AddLineAlignmentToStoreRequest');\n  constructor(public readonly instance: FLineAlignmentBase) {}\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/**\n * Execution that adds a line alignment to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddLineAlignmentToStoreRequest)\nexport class AddLineAlignmentToStore implements IExecution<AddLineAlignmentToStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ instance }: AddLineAlignmentToStoreRequest): void {\n    this._store.fLineAlignment = instance;\n  }\n}\n","export class RemoveLineAlignmentFromStoreRequest {\n  static readonly fToken = Symbol('RemoveLineAlignmentFromStoreRequest');\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/**\n * Execution that removes a line alignment from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveLineAlignmentFromStoreRequest)\nexport class RemoveLineAlignmentFromStore\n  implements IExecution<RemoveLineAlignmentFromStoreRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: RemoveLineAlignmentFromStoreRequest): void {\n    this._store.fLineAlignment = undefined;\n  }\n}\n","import { AddLineAlignmentToStore } from './add-line-alignment-to-store';\nimport { RemoveLineAlignmentFromStore } from './remove-line-alignment-from-store';\n\n/**\n * Collection of all FLineAlignment feature executions.\n * These executions handle the addition and removal of line alignments\n * in the FComponentsStore.\n */\nexport const F_LINE_ALIGNMENT_FEATURES = [AddLineAlignmentToStore, RemoveLineAlignmentFromStore];\n","import { FZoomBase } from '../../../f-zoom';\n\nexport class AddZoomToStoreRequest {\n  static readonly fToken = Symbol('AddZoomToStoreRequest');\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/**\n * Execution that adds a Zoom to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddZoomToStoreRequest)\nexport class AddZoomToStoreExecution\n  implements IExecution<AddZoomToStoreRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: AddZoomToStoreRequest): void {\n    this._store.fComponents = {\n      [F_ZOOM_TAG]: request.fComponent,\n    };\n  }\n}\n","export class RemoveZoomFromStoreRequest {\n  static readonly fToken = Symbol('RemoveZoomFromStoreRequest');\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/**\n * Execution that removes a Zoom from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveZoomFromStoreRequest)\nexport class RemoveZoomFromStoreExecution implements IExecution<RemoveZoomFromStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: RemoveZoomFromStoreRequest): void {\n    this._store.fComponents = {\n      [F_ZOOM_TAG]: undefined,\n    };\n  }\n}\n","export class ResetZoomRequest {\n  static readonly fToken = Symbol('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/**\n * Execution that resets the zoom level of the FCanvas.\n */\n@Injectable()\n@FExecutionRegister(ResetZoomRequest)\nexport class ResetZoomExecution implements IExecution<ResetZoomRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  private get _fCanvas(): FCanvasBase {\n    return this._store.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  static readonly fToken = Symbol('SetZoomRequest');\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/**\n * Execution that sets the zoom level of the FCanvas based on the provided request.\n * It adjusts the zoom level by a specified step and direction, ensuring it stays within defined limits.\n */\n@Injectable()\n@FExecutionRegister(SetZoomRequest)\nexport class SetZoomExecution implements IExecution<SetZoomRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _fHost(): HTMLElement {\n    return this._store.fFlow?.hostElement!;\n  }\n\n  private get _fCanvas(): FCanvasBase {\n    return this._store.fCanvas!;\n  }\n\n  private get _fZoomComponent(): FZoomBase {\n    return this._store.fComponents[F_ZOOM_TAG]! as FZoomBase;\n  }\n\n  private get _isDragStarted(): boolean {\n    return this._mediator.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\n/**\n * Collection of all FZoom feature executions.\n * These executions handle the addition, removal, and resetting of zoom levels\n * in the FComponentsStore.\n */\nexport const F_ZOOM_FEATURES = [\n\n  AddZoomToStoreExecution,\n\n  RemoveZoomFromStoreExecution,\n\n  ResetZoomExecution,\n\n  SetZoomExecution,\n];\n","export class SortNodeLayersRequest {\n  static readonly fToken = Symbol('SortNodeLayersRequest');\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/**\n * Execution that sorts node layers by their parent nodes in the FCanvas.\n * It retrieves all groups, sorts their children nodes based on their current order,\n * and moves them to maintain the correct hierarchy.\n */\n@Injectable()\n@FExecutionRegister(SortNodeLayersRequest)\nexport class SortNodeLayersExecution implements IExecution<SortNodeLayersRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n  private readonly _browser = inject(BrowserService);\n\n  private get _fCanvas(): FCanvasBase {\n    return this._store.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._store.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\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._mediator.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._browser.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  static readonly fToken = Symbol('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/**\n * Execution that sorts items by their parent nodes in the FItemsContainer.\n * It retrieves all items within the container, sorts their children based on their current order,\n * and moves them to maintain the correct hierarchy.\n */\n@Injectable()\n@FExecutionRegister(SortItemsByParentRequest)\nexport class SortItemsByParentExecution implements IExecution<SortItemsByParentRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n  private readonly _browser = 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._store.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\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._mediator.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    const nextSibling = parent.hostElement.nextElementSibling;\n\n    const fragment = this._browser.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  static readonly fToken = Symbol('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/**\n * Execution that sorts item layers in the FCanvas by their parent nodes.\n * This execution is registered to handle SortItemLayersRequest and\n * ensures that items are sorted correctly within their parent nodes.\n * It first sorts items by their parent nodes in the groups container,\n * then sorts the node layers, and finally sorts items by their parent nodes in the nodes container.\n */\n@Injectable()\n@FExecutionRegister(SortItemLayersRequest)\nexport class SortItemLayersExecution implements IExecution<SortItemLayersRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  private get _fCanvas(): FCanvasBase {\n    return this._store.fCanvas!;\n  }\n\n  public handle(request: SortItemLayersRequest): void {\n    if(!this._store.fCanvas) {\n      return;\n    }\n    this._mediator.execute(new SortItemsByParentRequest(this._fCanvas.fGroupsContainer().nativeElement));\n    this._mediator.execute(new SortNodeLayersRequest());\n    this._mediator.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  return /android|iPad|iPhone|iPod/i.test(\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-expect-error\n    navigator.userAgent || navigator.vendor || window['opera'],\n  );\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\n      return originalMethod.apply(this, args);\n    };\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\n      return result;\n    };\n\n    return descriptor;\n  };\n}\n","import { GetNormalizedElementRectExecution } from './get-normalized-element-rect';\nimport {\n  MoveFrontElementsBeforeTargetElement,\n  UpdateItemAndChildrenLayersExecution,\n} from './update-item-and-children-layers';\nimport { GetNormalizedPointExecution } from './get-normalized-point';\nimport {\n  SortItemLayersExecution,\n  SortItemsByParentExecution,\n  SortNodeLayersExecution,\n} 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\n/**\n * This module provides a collection of common providers for the FFlow domain.\n * It includes features related to canvas, connections, background, connectors,\n * draggable elements, flow, line alignment, nodes, selection, zoom,\n * and various utility executions.\n */\nexport const COMMON_PROVIDERS = [\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  MoveFrontElementsBeforeTargetElement,\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 = 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 = 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 { DestroyRef, Directive, ElementRef, inject, InjectionToken, OutputEmitterRef, Signal } from '@angular/core';\nimport { FCanvasChangeEvent } from './domain';\nimport { IHasHostElement } from '../i-has-host-element';\nimport { debounceTime, FChannel, FChannelHub } from \"../reactivity\";\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 debounce: Signal<number>;\n\n  private readonly _fCanvasChange = new FChannel();\n  private readonly _destroyRef = inject(DestroyRef);\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.notify();\n  }\n\n  protected subscribeOnCanvasChange(): void {\n    new FChannelHub(\n      this._fCanvasChange,\n    ).pipe(debounceTime(this.debounce())).listen(this._destroyRef, () => {\n      this.fCanvasChange.emit(\n        new FCanvasChangeEvent(PointExtensions.sum(this.transform.position, this.transform.scaledPosition), this.transform.scale),\n      );\n    });\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  numberAttribute,\n  OnDestroy,\n  OnInit,\n  output,\n  viewChild,\n} from \"@angular/core\";\nimport { F_CANVAS, FCanvasBase } from './f-canvas-base';\nimport { IPoint, PointExtensions, TransformModelExtensions } from '@foblex/2d';\nimport { FCanvasChangeEvent } from './domain';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddCanvasToStoreRequest,\n  CenterGroupOrNodeRequest,\n  Deprecated,\n  FitToFlowRequest,\n  GetFlowRequest,\n  InputCanvasPositionRequest,\n  InputCanvasScaleRequest,\n  isMobile,\n  RemoveCanvasFromStoreRequest,\n  ResetScaleAndCenterRequest,\n  ResetScaleRequest,\n  SetBackgroundTransformRequest,\n  transitionEnd,\n  UpdateScaleRequest,\n} from '../domain';\nimport { NotifyTransformChangedRequest } from '../f-storage';\nimport { FFlowBase } from '../f-flow';\n\n/**\n * Component representing a canvas in the F-Flow framework.\n * It handles the rendering of nodes, connections, and groups,\n * as well as user interactions such as zooming and panning.\n * It extends the FCanvasBase class and implements OnInit and OnDestroy lifecycle hooks.\n * It provides methods to manipulate the canvas, such as centering nodes or groups,\n * fitting the canvas to the screen, and resetting the scale.\n * It also emits events when the canvas changes, allowing other components to react to these changes.\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 _mediator = 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  public readonly debounceTime = input<number, unknown>(0, { transform: numberAttribute });\n  public override debounce = computed(() => this.debounceTime() < 0 ? 0 : this.debounceTime());\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._mediator.execute<FFlowBase>(new GetFlowRequest()).fId();\n    this._mediator.execute(new AddCanvasToStoreRequest(this));\n    this._positionChange();\n    this._scaleChange();\n    super.subscribeOnCanvasChange();\n  }\n\n  private _positionChange(): void {\n    effect(() => {\n      this._mediator.execute(new InputCanvasPositionRequest(this.transform, this.position()));\n    }, { injector: this._injector });\n  }\n\n  private _scaleChange(): void {\n    effect(() => {\n      this._mediator.execute(new InputCanvasScaleRequest(this.transform, this.scale()));\n    }, { injector: this._injector });\n  }\n\n  /**\n   * Redraws the canvas by applying the current transformation.\n   */\n  public override redraw(): void {\n    this._mediator.execute(new SetBackgroundTransformRequest(this.transform));\n    this.hostElement.setAttribute(\"style\", `transform: ${TransformModelExtensions.toString(this.transform)}`);\n    this._mediator.execute(new NotifyTransformChangedRequest());\n  }\n\n  /**\n   * Redraws the canvas with an animation effect.\n   * This method applies a CSS transition to the canvas element,\n   * allowing for a smooth visual update of the canvas's transformation.\n   */\n  public override redrawWithAnimation(): void {\n    this._mediator.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  /**\n   * Centers the specified group or node on the canvas.\n   * @param groupOrNodeId - The ID of the group or node to center.\n   * @param animated - If true, the centering will be animated; otherwise, it will be instantaneous.\n   */\n  public centerGroupOrNode(groupOrNodeId: string, animated: boolean = true): void {\n    setTimeout(() => this._mediator.execute(new CenterGroupOrNodeRequest(groupOrNodeId, animated)));\n  }\n\n  /**\n   * Fits the canvas to the screen by adjusting the scale and position.\n   * @param padding - paddings from the bounds of the canvas\n   * @param animated - If true, the fit will be animated; otherwise, it will be instantaneous.\n   */\n  public fitToScreen(padding: IPoint = PointExtensions.initialize(), animated: boolean = true): void {\n    setTimeout(() => this._mediator.execute(new FitToFlowRequest(padding, animated)));\n  }\n\n  /**\n   * Resets the scale and center all nodes and groups on the canvas.\n   * This method is used to restore the canvas to its default scale and position,\n   * allowing users to quickly return to a standard view of the canvas content.\n   * @param animated - If true, the reset will be animated; otherwise, it will be instantaneous.\n   * This is useful for providing a smooth user experience when resetting the view.\n   */\n  public resetScaleAndCenter(animated: boolean = true): void {\n    setTimeout(() => this._mediator.execute(new ResetScaleAndCenterRequest(animated)));\n  }\n\n  /**\n   *  Gets the current scale of the canvas.\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  /**\n   * Sets the scale of the canvas to a specified value.\n   * This method is used to zoom in or out of the canvas,\n   * allowing users to adjust the view of the canvas content.\n   * @param scale - The scale factor to set for the canvas.\n   * @param toPosition - The position to which the canvas should be centered after scaling.\n   */\n  public override setScale(scale: number, toPosition: IPoint = PointExtensions.initialize()): void {\n    this._mediator.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  /**\n   * Resets the scale of the canvas to its default value.\n   * This method is used to restore the canvas to its original scale.\n   */\n  public override resetScale(): void {\n    this._mediator.execute(new ResetScaleRequest());\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemoveCanvasFromStoreRequest());\n  }\n}\n","<ng-container>\n  <div #fGroupsContainer>\n    <ng-content select=\"[fGroup], [fGroups]\" />\n  </div>\n  <div #fConnectionsContainer class=\"f-connections-container\">\n    <ng-content select=\"f-snap-connection\" />\n    <ng-content select=\"f-connection, [fConnections]\" />\n    <ng-content select=\"f-connection-for-create\" />\n  </div>\n\n  <div #fNodesContainer>\n    <ng-content select=\"[fNode], [fNodes]\" />\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,\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  public readonly fMinSize = input<number>(1000);\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _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._mediator.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 _mediator = 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._mediator.execute<SVGRectElement[]>(new MinimapDrawNodesRequest()).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 _mediator = 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._mediator.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 readonly _destroyRef = inject(DestroyRef);\n  private readonly _mediator = inject(FMediator);\n  private readonly _browser = inject(BrowserService);\n\n  public readonly _canvas= viewChild.required(FMinimapCanvasDirective);\n  public readonly _flow = viewChild.required(FMinimapFlowDirective);\n  public readonly _minimapView= viewChild.required(FMinimapViewDirective);\n\n  public readonly fMinSize = input<number>(1000);\n\n  public ngAfterViewInit(): void {\n    this._listenTransformChanges();\n  }\n\n  private _listenTransformChanges(): void {\n    this._mediator.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._browser.isBrowser()) {\n      return;\n    }\n    this._flow().redraw();\n    this._minimapView().redraw();\n    this._canvas().redraw();\n  }\n\n  public onPointerDown(event: IPointerEvent): void {\n    this._mediator.execute(new MinimapDragPreparationRequest(event, this._flow().model));\n  }\n\n  public onPointerUp(event: IPointerEvent): void {\n    this._mediator.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 = 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    setTimeout(() => {\n      this._fMediator.execute<void>(new SelectAllRequest());\n    });\n  }\n\n  /**\n   * Programmatically selects nodes and connections by their IDs.\n   *\n   * This method allows external components to control the selection state of the canvas.\n   * Selected elements will appear visually highlighted. If `isSelectedChanged` is true,\n   * the next user interaction (e.g., clicking the canvas) will emit a selection change event.\n   *\n   * @param nodes - An array of node IDs to select.\n   * @param connections - An array of connection IDs to select.\n   * @param isSelectedChanged - Optional. If true (default), marks the selection state as changed,\n   * triggering a `fSelectionChange` event on the next user interaction.\n   */\n  public select(nodes: string[], connections: string[], isSelectedChanged: boolean = true): void {\n    setTimeout(() => {\n      this._fMediator.execute<void>(new SelectRequest(nodes, connections, isSelectedChanged));\n    });\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></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  effect,\n  inject,\n  Injector,\n  input,\n  Input,\n  numberAttribute,\n  OnDestroy,\n  OnInit,\n  untracked,\n} from '@angular/core';\nimport { F_ZOOM, FZoomBase } from './f-zoom-base';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddZoomToStoreRequest,\n  defaultEventTrigger,\n  Deprecated,\n  FEventTrigger,\n  GetCanvasRequest,\n  GetFlowHostElementRequest,\n  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';\nimport { EventExtensions } from '../drag-toolkit';\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, OnDestroy {\n  private readonly _mediator = inject(FMediator);\n  private readonly _injector = inject(Injector);\n\n  private _triggersListener = EventExtensions.emptyListener();\n\n  public readonly isEnabled = input(false, { alias: 'fZoom', transform: booleanAttribute });\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 _hostElement(): HTMLElement {\n    return this._mediator.execute(new GetFlowHostElementRequest());\n  }\n\n  private get _canvas(): FCanvasBase {\n    return this._mediator.execute(new GetCanvasRequest());\n  }\n\n  public ngOnInit(): void {\n    this._mediator.execute(new AddZoomToStoreRequest(this));\n  }\n\n  public ngAfterViewInit(): void {\n    this._listenZoomEnabledChanges();\n  }\n\n  private _listenZoomEnabledChanges(): void {\n    effect(\n      () => {\n        this.isEnabled();\n        untracked(() => this._listenTriggers());\n      },\n      { injector: this._injector },\n    );\n  }\n\n  private _listenTriggers(): void {\n    if (!this._hostElement) {\n      return;\n    }\n\n    this._disposeListeners();\n    if (!this.isEnabled()) {\n      return;\n    }\n    this._listen('wheel', this._onWheel, EventExtensions.activeListener());\n    this._listen('dblclick', this._onDoubleClick);\n\n    this._triggersListener = () => {\n      this._unlisten('wheel', this._onWheel, EventExtensions.activeListener());\n      this._unlisten('dblclick', this._onDoubleClick);\n    };\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    const step = this._normalizeWheelStep(event.deltaY);\n    this.setZoom(\n      PointExtensions.initialize(event.clientX, event.clientY),\n      step,\n      this._calculateDirection(event.deltaY),\n      false,\n    );\n  };\n\n  private _normalizeWheelStep(deltaY: number): number {\n    const intensity = Math.abs(deltaY) / 100;\n    const normalized = Math.max(0.1, Math.min(intensity, 1));\n\n    return this.step * normalized;\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,\n      EFZoomDirection.ZOOM_IN,\n      true,\n    );\n  };\n\n  private _getToCenterPosition(position: IPoint | undefined, rect: IRect): IPoint {\n    return PointExtensions.initialize(\n      position?.x || rect.gravityCenter.x,\n      position?.y || rect.gravityCenter.y,\n    );\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._hostElement)),\n      this.step,\n      direction,\n      false,\n    );\n  }\n\n  public setZoom(position: IPoint, step: number, direction: EFZoomDirection, animated: boolean) {\n    this._mediator.execute(new SetZoomRequest(position, step, direction, animated));\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._canvas.transform.scale || 1;\n  }\n\n  public reset(): void {\n    this._mediator.execute(new ResetZoomRequest());\n  }\n\n  private _disposeListeners(): void {\n    this._triggersListener();\n    this._triggersListener = EventExtensions.emptyListener();\n  }\n\n  public ngOnDestroy(): void {\n    this._disposeListeners();\n    this._mediator.execute(new RemoveZoomFromStoreRequest());\n  }\n\n  private _listen<K extends keyof HTMLElementEventMap>(\n    type: K,\n    listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => unknown,\n    options?: boolean | AddEventListenerOptions,\n  ): void {\n    this._hostElement.addEventListener(type, listener, options);\n  }\n\n  private _unlisten<K extends keyof HTMLElementEventMap>(\n    type: K,\n    listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => unknown,\n    options?: boolean | AddEventListenerOptions,\n  ): void {\n    this._hostElement.removeEventListener(type, listener, options);\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 { FDragBlockerDirective, 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    FDragBlockerDirective,\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    ...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    FDragBlockerDirective,\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","MIXIN_BASE","_DEBOUNCE_TIME","_sampleCubic","bez3","i1.FConnectionTextPathDirective","i1.FConnectionTextComponent","i2.FConnectionDragHandleStartComponent","i3.FConnectionDragHandleEndComponent","i4.FConnectionGradientComponent","i5.FConnectionPathComponent","i6.FConnectionSelectionComponent","i1.FMinimapCanvasDirective","i2.FMinimapViewDirective","i3.FMinimapFlowDirective","i27.FFlowComponent","i28.FCanvasComponent","i29.FBackgroundComponent","i30.FRectPatternComponent","i31.FCirclePatternComponent","i32.FZoomDirective","i33.FExternalItemDirective","i2.FConnectionTextPathDirective","i3.FConnectionDragHandleStartComponent","i4.FConnectionDragHandleEndComponent","i5.FConnectionGradientComponent","i6.FConnectionPathComponent","i7.FConnectionSelectionComponent","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"],"mappings":"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"}