{"version":3,"file":"foblex-flow.mjs","sources":["../../../libs/f-flow/src/f-backgroud/domain/i-f-background-pattern.ts","../../../libs/f-flow/src/domain/f-background/add-pattern-to-background/add-pattern-to-background-request.ts","../../../libs/f-flow/src/f-storage/base/f-id-registry-base.ts","../../../libs/f-flow/src/f-storage/base/f-single-registry-base.ts","../../../libs/f-flow/src/f-storage/f-connector-registry.ts","../../../libs/f-flow/src/f-storage/f-connection-marker-registry.ts","../../../libs/f-flow/src/f-storage/f-connection-registry.ts","../../../libs/f-flow/src/f-storage/f-node-registry.ts","../../../libs/f-flow/src/f-storage/features/listen-connections-changes/listen-connections-changes-request.ts","../../../libs/f-flow/src/reactivity/after-next-paint.ts","../../../libs/f-flow/src/reactivity/debounce-animation-frame.ts","../../../libs/f-flow/src/reactivity/debounce-microtask.ts","../../../libs/f-flow/src/reactivity/debounce-time.ts","../../../libs/f-flow/src/reactivity/f-channel.ts","../../../libs/f-flow/src/reactivity/f-resize-channel.ts","../../../libs/f-flow/src/reactivity/f-channel-hub.ts","../../../libs/f-flow/src/reactivity/notify-on-start.ts","../../../libs/f-flow/src/reactivity/take-one.ts","../../../libs/f-flow/src/f-storage/features/listen-connections-changes/listen-connections-changes.ts","../../../libs/f-flow/src/f-storage/features/listen-nodes-changes/listen-nodes-changes-request.ts","../../../libs/f-flow/src/f-storage/features/listen-nodes-changes/listen-nodes-changes.ts","../../../libs/f-flow/src/f-storage/features/listen-transform-changes/listen-transform-changes-request.ts","../../../libs/f-flow/src/f-storage/features/listen-transform-changes/listen-transform-changes.ts","../../../libs/f-flow/src/f-storage/features/emit-connections-changes/emit-connections-changes-request.ts","../../../libs/f-flow/src/f-storage/features/emit-connections-changes/emit-connections-changes.ts","../../../libs/f-flow/src/f-storage/features/notify-transform-changed/notify-transform-changed-request.ts","../../../libs/f-flow/src/f-storage/f-components-store.ts","../../../libs/f-flow/src/f-storage/features/notify-transform-changed/notify-transform-changed.ts","../../../libs/f-flow/src/f-storage/features/register-plugin-instance/register-plugin-instance-request.ts","../../../libs/f-flow/src/f-storage/features/register-plugin-instance/register-plugin-instance.ts","../../../libs/f-flow/src/f-storage/features/remove-plugin-instance/remove-plugin-instance-request.ts","../../../libs/f-flow/src/f-storage/features/remove-plugin-instance/remove-plugin-instance.ts","../../../libs/f-flow/src/f-storage/providers.ts","../../../libs/f-flow/src/domain/f-background/add-pattern-to-background/add-pattern-to-background.ts","../../../libs/f-flow/src/domain/f-background/set-background-transform/set-background-transform-request.ts","../../../libs/f-flow/src/domain/f-background/set-background-transform/set-background-transform.ts","../../../libs/f-flow/src/domain/f-background/providers.ts","../../../libs/f-flow/src/domain/f-canvas/add-canvas-to-store/add-canvas-to-store-request.ts","../../../libs/f-flow/src/domain/f-canvas/add-canvas-to-store/add-canvas-to-store.ts","../../../libs/f-flow/src/domain/f-canvas/center-group-or-node/center-group-or-node-request.ts","../../../libs/f-flow/src/domain/f-canvas/center-group-or-node/center-group-or-node.ts","../../../libs/f-flow/src/domain/f-canvas/fit-to-flow/fit-to-flow-request.ts","../../../libs/f-flow/src/domain/f-canvas/fit-to-flow/fit-to-flow.ts","../../../libs/f-flow/src/domain/f-canvas/input-canvas-position/input-canvas-position-request.ts","../../../libs/f-flow/src/domain/f-canvas/input-canvas-position/input-canvas-position.ts","../../../libs/f-flow/src/domain/f-canvas/input-canvas-scale/input-canvas-scale-request.ts","../../../libs/f-flow/src/domain/f-canvas/input-canvas-scale/input-canvas-scale.ts","../../../libs/f-flow/src/domain/f-canvas/redraw-canvas-with-animation/e-canvas-redraw-context.ts","../../../libs/f-flow/src/domain/f-canvas/redraw-canvas-with-animation/redraw-canvas-with-animation-request.ts","../../../libs/f-flow/src/domain/transition-end.ts","../../../libs/f-flow/src/domain/f-canvas/redraw-canvas-with-animation/redraw-canvas-with-animation.ts","../../../libs/f-flow/src/domain/f-canvas/remove-canvas-from-store/remove-canvas-from-store-request.ts","../../../libs/f-flow/src/domain/f-canvas/remove-canvas-from-store/remove-canvas-from-store.ts","../../../libs/f-flow/src/domain/f-canvas/reset-scale/reset-scale-request.ts","../../../libs/f-flow/src/domain/f-canvas/reset-scale/reset-scale.ts","../../../libs/f-flow/src/domain/f-canvas/reset-scale-and-center/reset-scale-and-center-request.ts","../../../libs/f-flow/src/domain/f-canvas/reset-scale-and-center/reset-scale-and-center.ts","../../../libs/f-flow/src/domain/f-canvas/update-scale/update-scale-request.ts","../../../libs/f-flow/src/domain/f-canvas/update-scale/update-scale.ts","../../../libs/f-flow/src/domain/f-canvas/providers.ts","../../../libs/f-flow/src/domain/f-connection/add-connection-for-create-to-store/add-connection-for-create-to-store-request.ts","../../../libs/f-flow/src/domain/f-connection/add-connection-for-create-to-store/add-connection-for-create-to-store.ts","../../../libs/f-flow/src/domain/f-connection/add-connection-marker-to-store/add-connection-marker-to-store-request.ts","../../../libs/f-flow/src/domain/f-connection/add-connection-marker-to-store/add-connection-marker-to-store.ts","../../../libs/f-flow/src/domain/f-connection/add-connection-to-store/add-connection-to-store-request.ts","../../../libs/f-flow/src/domain/f-connection/add-connection-to-store/add-connection-to-store.ts","../../../libs/f-flow/src/domain/f-connection/add-snap-connection-to-store/add-snap-connection-to-store-request.ts","../../../libs/f-flow/src/domain/f-connection/add-snap-connection-to-store/add-snap-connection-to-store.ts","../../../libs/f-flow/src/domain/f-connection/create-connection-markers/create-connection-markers-request.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-content/models/f-connection-content-base.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-content/utils/polyline-sampler/polyline.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-content/utils/polyline-sampler/polyline-sampler.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-content/utils/polyline-content-align.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-content/utils/polyline-content-place.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-content/utils/polyline-content-layout-engine.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-content/f-connection-content.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-waypoints/models/f-connection-waypoints-base.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-waypoints/utils/is-pointer-inside-point.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-waypoints/utils/find-waypoint-candidate.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-waypoints/utils/find-existing-waypoint.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-waypoints/utils/pick-waypoint.ts","../../../libs/f-flow/src/f-connection-v2/models/f-connection-components-parent.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-waypoints/f-connection-waypoints.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-waypoints/f-connection-waypoints.html","../../../libs/f-flow/src/f-connection-v2/components/connection-marker/enums/e-f-marker-type.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-marker/models/f-connection-marker-base.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-marker/utils/coerce-marker-type.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-marker/shape-markers/f-connection-marker-arrow.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-marker/shape-markers/f-connection-marker-circle.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-marker/f-connection-marker.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-behaviour/enums/e-f-connection-behavior.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-behaviour/enums/e-f-connection-connectable-side.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-behaviour/utils/fixed-center-behavior.ts","../../../libs/f-flow/src/f-connection-v2/enums/e-f-connectable-side.ts","../../../libs/f-flow/src/f-connection-v2/enums/e-f-connection-type.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-behaviour/utils/fixed-outbound-behavior.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-behaviour/utils/get-rotated-rounded-rect-intersection.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-behaviour/utils/floating-behavior.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-behaviour/connection-behaviour-builder.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-behaviour/connection-behaviour-builder-request.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/utils/build-connection-anchors.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/utils/calculate-center-between-points.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/utils/sample-cubic-bezier-uniform.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/utils/calculate-curve-candidates.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/utils/calculate-polyline-candidates.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/utils/merge-point-chains.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/utils/multi-cubic.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/utils/normalize-polyline.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/adaptive-curve/calculate-adaptive-curve-data.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/bezier-curve/calculate-bezier-curve-data.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/segment-line/build-corner-mid-points-and-apply-offsets.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/segment-line/create-segment-line-path.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/segment-line/calculate-segment-line-data.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/builders/straight-line/calculate-straight-line-data.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/providers/f-connection-builders.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/connection-line-builder.ts","../../../libs/f-flow/src/f-connection-v2/utils/connection-line-builder/connection-line-builder-request.ts","../../../libs/f-flow/src/f-connection-v2/utils/create-connection-dom-identifier.ts","../../../libs/f-flow/src/f-connection-v2/utils/create-connection-selection-dom-identifier.ts","../../../libs/f-flow/src/f-connection-v2/utils/create-gradient-dom-identifier.ts","../../../libs/f-flow/src/f-connection-v2/utils/create-gradient-dom-url.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-gradient/components/render/models/f-connection-gradient-renderer-base.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-gradient/components/render/f-connection-gradient-renderer.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-gradient/components/render/f-connection-gradient-renderer.html","../../../libs/f-flow/src/f-connection-v2/components/connection-gradient/models/f-connection-gradient-base.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-gradient/f-connection-gradient.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-path/models/f-connection-path-base.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-path/f-connection-path.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-selection/models/f-connection-selection-base.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-selection/f-connection-selection.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-drag-handles/models/f-connection-drag-handle-base.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-drag-handles/f-connection-drag-handle-start.ts","../../../libs/f-flow/src/f-connection-v2/components/connection-drag-handles/f-connection-drag-handle-end.ts","../../../libs/f-flow/src/mixins/change-selection/change-selection.ts","../../../libs/f-flow/src/mixins/change-visibility/change-visibility.ts","../../../libs/f-flow/src/f-connection-v2/components/f-connection-base.ts","../../../libs/f-flow/src/domain/f-connection/create-connection-markers/create-connection-markers.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/models/connection-redraw-state.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/runtime/connection-worker-runtime.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/models/connection-worker-state.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/main-thread/apply-connection-render/apply-connection-render-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/main-thread/apply-connection-render/apply-connection-render.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/main-thread/mark-connection-connectors-as-connected/mark-connection-connectors-as-connected-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/main-thread/mark-connection-connectors-as-connected/mark-connection-connectors-as-connected.ts","../../../libs/f-flow/src/domain/get-normalized-connector-rect/get-normalized-connector-rect-request.ts","../../../libs/f-flow/src/f-cache/config/f-cache-options.ts","../../../libs/f-flow/src/f-cache/features/f-cache-connectors/register-connector/register-connector-request.ts","../../../libs/f-flow/src/f-cache/model/f-cache.ts","../../../libs/f-flow/src/f-cache/model/f-cache-connector.ts","../../../libs/f-flow/src/f-cache/model/f-cache-connector-key.ts","../../../libs/f-flow/src/f-cache/model/f-cache-node.ts","../../../libs/f-flow/src/f-cache/features/f-cache-nodes/invalidate-node/invalidate-node-request.ts","../../../libs/f-flow/src/f-cache/features/f-cache-nodes/invalidate-node/invalidate-node.ts","../../../libs/f-flow/src/f-cache/features/f-cache-nodes/register-node/register-node-request.ts","../../../libs/f-flow/src/f-cache/features/f-cache-nodes/register-node/register-node.ts","../../../libs/f-flow/src/f-cache/features/f-cache-nodes/unregister-node/unregister-node-request.ts","../../../libs/f-flow/src/f-cache/features/f-cache-nodes/unregister-node/unregister-node.ts","../../../libs/f-flow/src/f-cache/features/f-cache-connectors/register-connector/register-connector.ts","../../../libs/f-flow/src/f-cache/features/f-cache-connectors/unregister-connector/unregister-connector-request.ts","../../../libs/f-flow/src/f-cache/features/f-cache-connectors/unregister-connector/unregister-connector.ts","../../../libs/f-flow/src/f-cache/features/f-cache-rects/get-cached-rect/get-cached-rect-request.ts","../../../libs/f-flow/src/f-cache/features/f-cache-rects/get-cached-rect/get-cached-rect.ts","../../../libs/f-flow/src/f-cache/features/f-cache-rects/set-connector-rect/set-connector-rect-request.ts","../../../libs/f-flow/src/f-cache/features/f-cache-rects/set-connector-rect/set-connector-rect.ts","../../../libs/f-flow/src/f-cache/features/f-cache-rects/set-node-rect/set-node-rect-request.ts","../../../libs/f-flow/src/f-cache/features/f-cache-rects/set-node-rect/set-node-rect.ts","../../../libs/f-flow/src/f-cache/features/f-cache-rects/update-rect-by-element/update-rect-by-element-request.ts","../../../libs/f-flow/src/f-cache/features/f-cache-rects/update-rect-by-element/update-rect-by-element.ts","../../../libs/f-flow/src/f-cache/providers.ts","../../../libs/f-flow/src/utils/calculate-pointer-in-flow.ts","../../../libs/f-flow/src/utils/infinity-min-max.ts","../../../libs/f-flow/src/utils/string-attribute.ts","../../../libs/f-flow/src/domain/get-normalized-connector-rect/get-normalized-connector-rect.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/shared/resolve-connection-endpoint-rect/resolve-connection-endpoint-rect-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/shared/resolve-connection-endpoint-rect/resolve-connection-endpoint-rect.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/shared/resolve-connection-endpoints/resolve-connection-endpoints-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/shared/resolve-connection-endpoints/resolve-connection-endpoints.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/shared/resolve-connection-geometry/resolve-connection-geometry-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/shared/resolve-connection-geometry/resolve-connection-geometry.ts","../../../libs/f-flow/src/domain/get-normalized-element-rect/get-normalized-element-rect-request.ts","../../../libs/f-flow/src/domain/get-normalized-element-rect/get-normalized-element-rect.ts","../../../libs/f-flow/src/domain/f-connection/resolve-connection-endpoint-rotation-context/resolve-connection-endpoint-rotation-context-request.ts","../../../libs/f-flow/src/domain/f-connection/resolve-connection-endpoint-rotation-context/resolve-connection-endpoint-rotation-context.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/shared/build-connection-line/build-connection-line-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/shared/build-connection-line/build-connection-line.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/main-thread/render-connection-with-line/render-connection-with-line-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/main-thread/render-connection-with-line/render-connection-with-line.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/main-thread/render-connection-from-geometry/render-connection-from-geometry-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/main-thread/render-connection-from-geometry/render-connection-from-geometry.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/main-thread/render-connection/render-connection-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/main-thread/render-connection/render-connection.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/pipeline/is-connection-redraw-current/is-connection-redraw-current-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/pipeline/is-connection-redraw-current/is-connection-redraw-current.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/pipeline/complete-connection-redraw/complete-connection-redraw-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/pipeline/complete-connection-redraw/complete-connection-redraw.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/apply-connection-worker-result/apply-connection-worker-result-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/apply-connection-worker-result/apply-connection-worker-result.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/pipeline/run-connection-redraw-slice/run-connection-redraw-slice-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/pipeline/run-connection-redraw-slice/run-connection-redraw-slice.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/pipeline/start-connection-redraw/start-connection-redraw-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/pipeline/start-connection-redraw/start-connection-redraw.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/redraw-connections-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/should-use-connection-worker/should-use-connection-worker-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/is-connection-worker-enabled/is-connection-worker-enabled-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/is-connection-worker-enabled/is-connection-worker-enabled.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/should-use-connection-worker/should-use-connection-worker.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/build-connection-worker-payload-item/build-connection-worker-payload-item-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/build-connection-worker-payload-item/build-connection-worker-payload-item.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/build-connection-worker-batch/build-connection-worker-batch-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/build-connection-worker-batch/build-connection-worker-batch.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/disable-connection-worker/disable-connection-worker-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/reset-connection-worker-runtime/reset-connection-worker-runtime-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/reset-connection-worker-runtime/reset-connection-worker-runtime.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/disable-connection-worker/disable-connection-worker.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/handle-connection-worker-message/handle-connection-worker-message-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/handle-connection-worker-message/handle-connection-worker-message.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/ensure-connection-worker/ensure-connection-worker-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/ensure-connection-worker/ensure-connection-worker.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/run-connection-worker/run-connection-worker-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/run-connection-worker/run-connection-worker.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/run-connection-worker-batch/run-connection-worker-batch-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/run-connection-worker-batch/run-connection-worker-batch.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/start-connection-worker-redraw/start-connection-worker-redraw-request.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/worker/start-connection-worker-redraw/start-connection-worker-redraw.ts","../../../libs/f-flow/src/domain/f-connection/redraw-connections/redraw-connections.ts","../../../libs/f-flow/src/domain/f-connection/remove-connection-for-create-from-store/remove-connection-for-create-from-store-request.ts","../../../libs/f-flow/src/domain/f-connection/remove-connection-for-create-from-store/remove-connection-for-create-from-store.ts","../../../libs/f-flow/src/domain/f-connection/remove-connection-from-store/remove-connection-from-store-request.ts","../../../libs/f-flow/src/domain/f-connection/remove-connection-from-store/remove-connection-from-store.ts","../../../libs/f-flow/src/domain/f-connection/remove-connection-marker-from-store/remove-connection-marker-from-store-request.ts","../../../libs/f-flow/src/domain/f-connection/remove-connection-marker-from-store/remove-connection-marker-from-store.ts","../../../libs/f-flow/src/domain/f-connection/remove-connection-waypoint/remove-connection-waypoint-request.ts","../../../libs/f-flow/src/f-draggable/domain/emit-end-drag-sequence-event/emit-end-drag-sequence-event-request.ts","../../../libs/f-flow/src/f-draggable/domain/emit-end-drag-sequence-event/emit-end-drag-sequence-event.ts","../../../libs/f-flow/src/f-draggable/domain/emit-start-drag-sequence-event/emit-start-drag-sequence-event-request.ts","../../../libs/f-flow/src/f-draggable/domain/emit-start-drag-sequence-event/emit-start-drag-sequence-event.ts","../../../libs/f-flow/src/f-draggable/domain/emit-selection-change-event/emit-selection-change-event-request.ts","../../../libs/f-flow/src/f-draggable/f-draggable-data-context.ts","../../../libs/f-flow/src/f-draggable/f-selection-change-event.ts","../../../libs/f-flow/src/f-draggable/domain/emit-selection-change-event/emit-selection-change-event.ts","../../../libs/f-flow/src/f-draggable/domain/get-normalized-parent-node-rect/get-normalized-parent-node-rect-request.ts","../../../libs/f-flow/src/f-draggable/domain/get-normalized-parent-node-rect/get-normalized-parent-node-rect.ts","../../../libs/f-flow/src/f-draggable/domain/is-array-has-parent-node/is-array-has-parent-node-request.ts","../../../libs/f-flow/src/f-draggable/domain/is-array-has-parent-node/is-array-has-parent-node.ts","../../../libs/f-flow/src/f-draggable/domain/detect-connections-under-drag-node/f-node-intersected-with-connections-event.ts","../../../libs/f-flow/src/f-draggable/domain/detect-connections-under-drag-node/detect-connections-under-drag-node-request.ts","../../../libs/f-flow/src/f-draggable/domain/detect-connections-under-drag-node/detect-connections-under-drag-node.ts","../../../libs/f-flow/src/f-draggable/domain/providers.ts","../../../libs/f-flow/src/f-draggable/auto-pan/auto-pan.utils.ts","../../../libs/f-flow/src/f-draggable/auto-pan/run-auto-pan-frame/run-auto-pan-frame-request.ts","../../../libs/f-flow/src/f-draggable/auto-pan/stop-auto-pan/stop-auto-pan-request.ts","../../../libs/f-flow/src/f-draggable/auto-pan/stop-auto-pan/stop-auto-pan.ts","../../../libs/f-flow/src/f-draggable/auto-pan/schedule-auto-pan-frame/schedule-auto-pan-frame-request.ts","../../../libs/f-flow/src/f-draggable/auto-pan/schedule-auto-pan-frame/schedule-auto-pan-frame.ts","../../../libs/f-flow/src/f-draggable/auto-pan/run-auto-pan-frame/run-auto-pan-frame.ts","../../../libs/f-flow/src/f-draggable/auto-pan/providers.ts","../../../libs/f-flow/src/f-draggable/drag-canvas/drag-canvas-finalize/drag-canvas-finalize-request.ts","../../../libs/f-flow/src/f-draggable/infrastructure/pointer-events/i-pointer-event.ts","../../../libs/f-flow/src/f-draggable/infrastructure/pointer-events/i-mouse-event.ts","../../../libs/f-flow/src/f-draggable/infrastructure/pointer-events/i-pointer-up-event.ts","../../../libs/f-flow/src/f-draggable/infrastructure/pointer-events/i-touch-down-event.ts","../../../libs/f-flow/src/f-draggable/infrastructure/pointer-events/i-touch-move-event.ts","../../../libs/f-flow/src/f-draggable/infrastructure/event-extensions.ts","../../../libs/f-flow/src/f-draggable/infrastructure/drag-and-drop-base.ts","../../../libs/f-flow/src/f-draggable/f-drag-started-event.ts","../../../libs/f-flow/src/f-draggable/infrastructure/drag-handler-base.ts","../../../libs/f-flow/src/f-connectors/f-connector-base.ts","../../../libs/f-flow/src/f-connectors/f-node-input/f-node-input-base.ts","../../../libs/f-flow/src/f-node/f-resize-handle/e-f-resize-handle-type.ts","../../../libs/f-flow/src/f-node/f-resize-handle/f-resize-handle.directive.ts","../../../libs/f-flow/src/f-node/f-rotate-handle/f-rotate-handle.directive.ts","../../../libs/f-flow/src/f-node/f-rotate-handle/is-rotate-handle.ts","../../../libs/f-flow/src/f-node/f-drag-handle.directive.ts","../../../libs/f-flow/src/f-node/f-node-base.ts","../../../libs/f-flow/src/f-node/f-group.directive.ts","../../../libs/f-flow/src/f-node/f-node.directive.ts","../../../libs/f-flow/src/f-node/is-node.ts","../../../libs/f-flow/src/f-node/providers.ts","../../../libs/f-flow/src/f-connectors/f-node-input/f-node-input.directive.ts","../../../libs/f-flow/src/f-connectors/f-source-connector-base.ts","../../../libs/f-flow/src/f-connectors/f-node-outlet/f-node-outlet-base.ts","../../../libs/f-flow/src/f-connectors/f-node-outlet/is-node-outlet.ts","../../../libs/f-flow/src/f-connectors/f-node-outlet/f-node-outlet.directive.ts","../../../libs/f-flow/src/f-connectors/f-node-output/f-node-output-base.ts","../../../libs/f-flow/src/f-connectors/f-node-output/is-node-output.ts","../../../libs/f-flow/src/f-connectors/f-node-output/f-node-output.directive.ts","../../../libs/f-flow/src/f-connectors/providers.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/create-connection-finalize/create-connection-finalize-request.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/resolve-connectable-output-for-outlet/resolve-connectable-output-for-outlet-request.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/resolve-connectable-output-for-outlet/resolve-connectable-output-for-outlet.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/f-create-connection-event.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/create-connection-handler/create-connection-handler.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/create-connection-finalize/create-connection-finalize.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/create-connection-preparation/create-drag-handler/create-connection-create-drag-handler-request.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/create-connection-preparation/create-drag-handler/create-connection-create-drag-handler.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/create-connection-preparation/from-outlet-preparation/create-connection-from-outlet-preparation-request.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/create-connection-preparation/from-outlet-preparation/create-connection-from-outlet-preparation.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/create-connection-preparation/from-output-preparation/create-connection-from-output-preparation-request.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/create-connection-preparation/from-output-preparation/create-connection-from-output-preparation.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/create-connection-preparation/create-connection-preparation-request.ts","../../../libs/f-flow/src/f-draggable/connection/create-connection/create-connection-preparation/create-connection-preparation.ts","../../../libs/f-flow/src/f-draggable/connection/reassign-connection/reassign-connection-finalize/reassign-connection-finalize-request.ts","../../../libs/f-flow/src/f-draggable/connection/reassign-connection/f-reassign-connection-event.ts","../../../libs/f-flow/src/f-draggable/connection/reassign-connection/reassign-connection-finalize/reassign-connection-finalize.ts","../../../libs/f-flow/src/f-draggable/connection/reassign-connection/reassign-connection-preparation/reassign-connection-preparation-request.ts","../../../libs/f-flow/src/f-draggable/connection/reassign-connection/reassign-connection-preparation/is-pointer-inside-start-or-end-drag-handles.ts","../../../libs/f-flow/src/f-draggable/connection/reassign-connection/reassign-connection-handler/i-reassign-handler.ts","../../../libs/f-flow/src/f-draggable/connection/reassign-connection/reassign-connection-handler/reassign-connection-source-handler.ts","../../../libs/f-flow/src/f-draggable/connection/reassign-connection/reassign-connection-handler/reassign-connection-target-handler.ts","../../../libs/f-flow/src/f-draggable/connection/reassign-connection/reassign-connection-handler/reassign-connection-handler.ts","../../../libs/f-flow/src/f-draggable/connection/reassign-connection/reassign-connection-preparation/reassign-connection-preparation.ts","../../../libs/f-flow/src/f-draggable/connection/drag-connection-waypoint/drag-connection-waypoint-finalize/drag-connection-waypoint-finalize-request.ts","../../../libs/f-flow/src/f-draggable/connection/drag-connection-waypoint/f-connection-waypoints-changed-event.ts","../../../libs/f-flow/src/f-draggable/connection/drag-connection-waypoint/drag-connection-waypoint-handler/drag-connection-waypoint-handler.ts","../../../libs/f-flow/src/f-draggable/connection/drag-connection-waypoint/drag-connection-waypoint-finalize/drag-connection-waypoint-finalize.ts","../../../libs/f-flow/src/f-draggable/connection/drag-connection-waypoint/drag-connection-waypoint-preparation/drag-connection-waypoint-preparation-request.ts","../../../libs/f-flow/src/f-draggable/connection/drag-connection-waypoint/drag-connection-waypoint-preparation/drag-connection-waypoint-preparation.ts","../../../libs/f-flow/src/f-draggable/connection/providers.ts","../../../libs/f-flow/src/f-draggable/drop-to-group/drop-to-group-finalize/drop-to-group-finalize-request.ts","../../../libs/f-flow/src/f-draggable/drop-to-group/drop-to-group-handler/drop-to-group-handler.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/create-drag-node-hierarchy/create-drag-node-hierarchy-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/create-drag-node-hierarchy/drag-node-hierarchy.ts","../../../libs/f-flow/src/f-draggable/drag-node/f-drag-node-start-event-data.ts","../../../libs/f-flow/src/f-draggable/drag-node/is-drag-node-handler.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-handler/drag-node-handler.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-constraint/delta-clamp.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-constraint/grid-snapper.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-constraint/drag-node-delta-constraints.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-constraint/expand-rect-by-overflow.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-handler/drag-node-item-handler.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/create-drag-node-hierarchy/create-drag-node-hierarchy.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/build-drag-node-constraints/build-drag-node-constraints-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/read-node-bounds-with-paddings/read-node-bounds-with-paddings-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/read-node-bounds-with-paddings/read-node-bounds-with-paddings-response.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/read-node-bounds-with-paddings/read-node-bounds-with-paddings.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/build-drag-node-constraints/build-drag-node-constraints.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/create-drag-node-handler/create-drag-node-handler-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/attach-soft-parent-connection-drag-handlers-to-node/attach-soft-parent-connection-drag-handlers-to-node-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-dependent-connection-handlers/drag-node-connection-handler-base.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-dependent-connection-handlers/drag-node-connection-source-handler.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-dependent-connection-handlers/drag-node-connection-both-sides-handler.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-dependent-connection-handlers/drag-node-connection-target-handler.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/attach-soft-parent-connection-drag-handlers-to-node/attach-soft-parent-connection-drag-handlers-to-node.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/create-drag-node-handler/create-drag-node-handler.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/attach-target-connection-drag-handlers-to-node/attach-target-connection-drag-handlers-to-node-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/attach-target-connection-drag-handlers-to-node/attach-target-connection-drag-handlers-to-node.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/attach-source-connection-drag-handlers-to-node/attach-source-connection-drag-handlers-to-node-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/attach-source-connection-drag-handlers-to-node/attach-source-connection-drag-handlers-to-node.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/attach-drag-node-handler-from-selection-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/attach-drag-node-handler-from-selection.ts","../../../libs/f-flow/src/f-draggable/drag-node/attach-drag-node-handler-from-selection/providers.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-lines/domain/calculate-magnetic-guides.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-lines/domain/magnetic-line-element.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-lines/domain/magnetic-line-renderer.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-lines/magnetic-lines-preparation/magnetic-lines-preparation-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-lines/magnetic-lines-preparation/magnetic-lines-preparation.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-lines/magnetic-lines-handler/magnetic-lines-handler.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-rects/domain/calculate-magnetic-rects.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-rects/domain/magnetic-rect-element.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-rects/domain/magnetic-rects-renderer.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-rects/magnetic-rects-preparation/magnetic-rects-preparation-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-rects/magnetic-rects-preparation/magnetic-rects-preparation.ts","../../../libs/f-flow/src/f-draggable/drag-node/magnetic-rects/magnetic-rects-handler/magnetic-rects-handler.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-finalize/drag-node-finalize-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/f-move-nodes-event.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-finalize/drag-node-finalize.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-preparation/drag-node-preparation-request.ts","../../../libs/f-flow/src/f-draggable/drag-node/drag-node-preparation/drag-node-preparation.ts","../../../libs/f-flow/src/f-draggable/drag-node/providers.ts","../../../libs/f-flow/src/f-draggable/drop-to-group/f-drop-to-group-event.ts","../../../libs/f-flow/src/f-draggable/drop-to-group/drop-to-group-finalize/drop-to-group-finalize.ts","../../../libs/f-flow/src/f-draggable/drop-to-group/drop-to-group-preparation/drop-to-group-preparation-request.ts","../../../libs/f-flow/src/f-draggable/drop-to-group/sort-drop-candidates-by-layer/sort-drop-candidates-by-layer-request.ts","../../../libs/f-flow/src/f-draggable/drop-to-group/sort-drop-candidates-by-layer/sort-drop-candidates-by-layer.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/constraints/external-rect-constraint.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/drag-external-item-create-placeholder/drag-external-item-create-placeholder-request.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/drag-external-item-create-placeholder/drag-external-item-create-placeholder.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/drag-external-item-create-preview/drag-external-item-create-preview-request.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/drag-external-item-create-preview/drag-external-item-create-preview.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/drag-external-item-finalize/drag-external-item-finalize-request.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/f-create-node-event.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/is-drag-external-item-handler.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/drag-external-item-finalize/drag-external-item-finalize.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/f-drag-external-item-start-event-data.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/drag-external-item-handler/drag-external-item-handler.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/drag-external-item-preparation/drag-external-item-preparation-request.ts","../../../libs/f-flow/src/f-external-item/f-external-item-base.ts","../../../libs/f-flow/src/f-external-item/is-external-item.ts","../../../libs/f-flow/src/f-external-item/f-external-item.service.ts","../../../libs/f-flow/src/f-external-item/f-external-item.ts","../../../libs/f-flow/src/f-external-item/f-external-item-placeholder.ts","../../../libs/f-flow/src/f-external-item/f-external-item-preview.ts","../../../libs/f-flow/src/f-external-item/providers.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/drag-external-item-preparation/drag-external-item-preparation.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/prevent-default-is-external-item/prevent-default-is-external-item-request.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/prevent-default-is-external-item/prevent-default-is-external-item.ts","../../../libs/f-flow/src/f-draggable/drag-external-item/providers.ts","../../../libs/f-flow/src/f-draggable/drop-to-group/drop-to-group-preparation/drop-to-group-preparation.ts","../../../libs/f-flow/src/f-draggable/drop-to-group/providers.ts","../../../libs/f-flow/src/f-draggable/pinch-to-zoom/pinch-to-zoom-finalize/pinch-to-zoom-finalize-request.ts","../../../libs/f-flow/src/f-draggable/pinch-to-zoom/handler/pinch-to-zoom-handler.ts","../../../libs/f-flow/src/f-draggable/pinch-to-zoom/pinch-to-zoom-finalize/pinch-to-zoom-finalize.ts","../../../libs/f-flow/src/f-draggable/pinch-to-zoom/pinch-to-zoom-preparation/pinch-to-zoom-preparation-request.ts","../../../libs/f-flow/src/f-draggable/pinch-to-zoom/pinch-to-zoom-preparation/pinch-to-zoom-preparation.ts","../../../libs/f-flow/src/f-draggable/pinch-to-zoom/providers.ts","../../../libs/f-flow/src/f-draggable/selection-area/selection-area-finalize/selection-area-finalize-request.ts","../../../libs/f-flow/src/f-draggable/selection-area/selection-area-finalize/selection-area-finalize.ts","../../../libs/f-flow/src/f-draggable/selection-area/selection-area-handler/selection-area-handler.ts","../../../libs/f-flow/src/f-draggable/selection-area/selection-area-preparation/selection-area-preparation-request.ts","../../../libs/f-flow/src/f-draggable/selection-area/selection-area-preparation/selection-area-preparation.ts","../../../libs/f-flow/src/f-draggable/selection-area/providers.ts","../../../libs/f-flow/src/f-draggable/resize-node/apply-child-resize-constraints/apply-child-resize-constraints-request.ts","../../../libs/f-flow/src/f-draggable/resize-node/apply-child-resize-constraints/apply-child-resize-constraints.ts","../../../libs/f-flow/src/f-draggable/resize-node/apply-parent-resize-constraints/apply-parent-resize-constraints-request.ts","../../../libs/f-flow/src/f-draggable/resize-node/apply-parent-resize-constraints/apply-parent-resize-constraints.ts","../../../libs/f-flow/src/f-draggable/resize-node/calculate-changed-rect-from-difference/calculate-changed-rect-from-difference-request.ts","../../../libs/f-flow/src/f-draggable/resize-node/constraint/resize-direction.ts","../../../libs/f-flow/src/f-draggable/resize-node/calculate-changed-rect-from-difference/calculate-changed-rect-from-difference.ts","../../../libs/f-flow/src/f-draggable/resize-node/calculate-direct-children-union-rect/calculate-direct-children-union-rect-request.ts","../../../libs/f-flow/src/f-draggable/resize-node/calculate-direct-children-union-rect/calculate-direct-children-union-rect.ts","../../../libs/f-flow/src/f-draggable/resize-node/calculate-resize-limits/calculate-resize-limits-request.ts","../../../libs/f-flow/src/f-draggable/resize-node/calculate-resize-limits/calculate-resize-limits.ts","../../../libs/f-flow/src/f-draggable/resize-node/resize-node-finalize/resize-node-finalize-request.ts","../../../libs/f-flow/src/f-draggable/resize-node/is-resize-node-handler.ts","../../../libs/f-flow/src/f-draggable/resize-node/resize-node-finalize/resize-node-finalize.ts","../../../libs/f-flow/src/f-draggable/resize-node/f-resize-node-start-event-data.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/enums/e-f-reflow-mode.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/enums/e-f-reflow-collision.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/enums/e-f-reflow-scope.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/enums/e-f-reflow-axis.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/enums/e-f-reflow-delta-source.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/i-f-reflow-on-resize-config.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/i-reflow-plan.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/delta/i-f-reflow-delta-calculator.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/delta/edge-based-delta-calculator.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/delta/center-based-delta-calculator.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/selection/center-of-mass-selection-strategy.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/selection/x-range-selection-strategy.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/selection/f-reflow-cycle-guard.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/selection/downstream-connections-selection-strategy.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/scope/global-scope-filter.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/scope/group-scope-filter.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/scope/connected-subgraph-scope-filter.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/collision/stop-collision-resolver.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/collision/chain-push-collision-resolver.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/planner/f-reflow-planner.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/f-reflow-controller.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/directives/f-reflow-ignore-registry.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/f-reflow-baseline-tracker.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/orchestrator/f-reflow-orchestrator.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/directives/f-reflow-ignore.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/providers.ts","../../../libs/f-flow/src/provide-f-flow/i-f-flow-config.ts","../../../libs/f-flow/src/provide-f-flow/f-flow-feature.ts","../../../libs/f-flow/src/provide-f-flow/provide-f-flow.ts","../../../libs/f-flow/src/plugins/layout/f-reflow-on-resize/with-reflow-on-resize.ts","../../../libs/f-flow/src/f-draggable/resize-node/resize-node-handler/resize-node-handler.ts","../../../libs/f-flow/src/f-draggable/resize-node/resize-node-handler/resize-node-dependent-connection-handlers/resize-node-connection-handler-base.ts","../../../libs/f-flow/src/f-draggable/resize-node/resize-node-handler/resize-node-dependent-connection-handlers/resize-node-connection-both-sides-handler.ts","../../../libs/f-flow/src/f-draggable/resize-node/resize-node-handler/resize-node-dependent-connection-handlers/resize-node-connection-source-handler.ts","../../../libs/f-flow/src/f-draggable/resize-node/resize-node-handler/resize-node-dependent-connection-handlers/resize-node-connection-target-handler.ts","../../../libs/f-flow/src/f-draggable/resize-node/resize-preparation/resize-node-preparation-request.ts","../../../libs/f-flow/src/f-draggable/resize-node/resize-preparation/attach-resize-connection-drag-handlers-to-node/attach-resize-connection-drag-handlers-to-node-request.ts","../../../libs/f-flow/src/f-draggable/resize-node/resize-preparation/attach-resize-connection-drag-handlers-to-node/attach-resize-connection-drag-handlers-to-node.ts","../../../libs/f-flow/src/f-draggable/resize-node/resize-preparation/resize-node-preparation.ts","../../../libs/f-flow/src/f-draggable/resize-node/providers.ts","../../../libs/f-flow/src/f-draggable/rotate-node/rotate-node-finalize/rotate-node-finalize-request.ts","../../../libs/f-flow/src/f-draggable/rotate-node/is-rotate-node-handler.ts","../../../libs/f-flow/src/f-draggable/rotate-node/rotate-node-finalize/rotate-node-finalize.ts","../../../libs/f-flow/src/f-draggable/rotate-node/rotate-node-preparation/rotate-node-preparation-request.ts","../../../libs/f-flow/src/f-draggable/rotate-node/f-rotate-node-start-event-data.ts","../../../libs/f-flow/src/f-draggable/rotate-node/calculate-difference-after-rotation.ts","../../../libs/f-flow/src/f-draggable/rotate-node/rotate-node-handler/rotate-node-handler.ts","../../../libs/f-flow/src/f-draggable/rotate-node/rotate-node-preparation/rotate-node-preparation.ts","../../../libs/f-flow/src/f-draggable/rotate-node/providers.ts","../../../libs/f-flow/src/f-draggable/drag-minimap/calculate-flow-point-from-minimap-point/calculate-flow-point-from-minimap-point-request.ts","../../../libs/f-flow/src/f-draggable/drag-minimap/calculate-flow-point-from-minimap-point/calculate-flow-point-from-minimap-point.ts","../../../libs/f-flow/src/f-draggable/drag-minimap/drag-minimap-finalize/drag-minimap-finalize-request.ts","../../../libs/f-flow/src/f-draggable/drag-minimap/drag-minimap-finalize/drag-minimap-finalize.ts","../../../libs/f-flow/src/f-draggable/drag-minimap/is-drag-minimap-handler.ts","../../../libs/f-flow/src/f-draggable/drag-minimap/drag-minimap-handler/drag-minimap-handler.ts","../../../libs/f-flow/src/f-draggable/drag-minimap/drag-minimap-preparation/drag-minimap-preparation-request.ts","../../../libs/f-flow/src/f-draggable/drag-minimap/drag-minimap-preparation/drag-minimap-preparation.ts","../../../libs/f-flow/src/f-draggable/drag-minimap/providers.ts","../../../libs/f-flow/src/f-draggable/infrastructure/drag-handler-injector.ts","../../../libs/f-flow/src/f-draggable/infrastructure/f-drag-handler-result.ts","../../../libs/f-flow/src/f-draggable/drag-canvas/drag-canvas-handler/drag-canvas-handler.ts","../../../libs/f-flow/src/f-draggable/drag-canvas/drag-canvas-finalize/drag-canvas-finalize.ts","../../../libs/f-flow/src/f-draggable/drag-canvas/drag-canvas-preparation/drag-canvas-preparation-request.ts","../../../libs/f-flow/src/f-draggable/drag-canvas/drag-canvas-preparation/drag-canvas-preparation.ts","../../../libs/f-flow/src/f-draggable/drag-canvas/providers.ts","../../../libs/f-flow/src/f-draggable/select-by-pointer/select-by-pointer-request.ts","../../../libs/f-flow/src/f-draggable/select-by-pointer/select-by-pointer.ts","../../../libs/f-flow/src/f-draggable/select-by-pointer/providers.ts","../../../libs/f-flow/src/f-draggable/f-drag-blocker.directive.ts","../../../libs/f-flow/src/f-draggable/f-draggable-base.ts","../../../libs/f-flow/src/f-draggable/is-drag-blocker.ts","../../../libs/f-flow/src/f-draggable/f-draggable.directive.ts","../../../libs/f-flow/src/f-draggable/providers.ts","../../../libs/f-flow/src/domain/f-connection/remove-connection-waypoint/remove-connection-waypoint.ts","../../../libs/f-flow/src/domain/f-connection/remove-snap-connection-from-store/remove-snap-connection-from-store-request.ts","../../../libs/f-flow/src/domain/f-connection/remove-snap-connection-from-store/remove-snap-connection-from-store.ts","../../../libs/f-flow/src/domain/f-connection/providers.ts","../../../libs/f-flow/src/domain/f-connectors/add-connector-to-store/add-connector-to-store-request.ts","../../../libs/f-flow/src/domain/f-connectors/add-connector-to-store/add-connector-to-store.ts","../../../libs/f-flow/src/domain/f-connectors/calculate-closest-connector/calculate-closest-connector-request.ts","../../../libs/f-flow/src/domain/f-connectors/calculate-closest-connector/calculate-closest-connector.ts","../../../libs/f-flow/src/domain/f-connectors/find-connectable-connector-using-priority-and-position/find-connectable-connector-using-priority-and-position-request.ts","../../../libs/f-flow/src/domain/f-connectors/find-connectable-connector-using-priority-and-position/find-connectable-connector-using-priority-and-position.ts","../../../libs/f-flow/src/domain/f-connectors/calculate-target-connectors-to-connect/calculate-target-connectors-to-connect-request.ts","../../../libs/f-flow/src/domain/f-connectors/get-connector-rect-reference/get-connector-rect-reference-request.ts","../../../libs/f-flow/src/domain/f-connectors/get-connector-rect-reference/get-connector-rect-reference.ts","../../../libs/f-flow/src/domain/f-node/add-node-to-store/add-node-to-store-request.ts","../../../libs/f-flow/src/domain/f-node/add-node-to-store/add-node-to-store.ts","../../../libs/f-flow/src/domain/f-node/calculate-input-connections/calculate-input-connections-request.ts","../../../libs/f-flow/src/domain/f-node/calculate-input-connections/calculate-input-connections.ts","../../../libs/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/calculate-connectable-side-by-connected-positions-request.ts","../../../libs/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/utils/determine-side.ts","../../../libs/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/utils/is-calculate-mode.ts","../../../libs/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/constants/calculatable-sides.ts","../../../libs/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/calculate-connectable-side-by-connected-positions.ts","../../../libs/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/calculate-connectable-side-by-internal-position/calculate-connectable-side-by-internal-position-request.ts","../../../libs/f-flow/src/domain/f-draggable/add-dnd-to-store/add-dnd-to-store-request.ts","../../../libs/f-flow/src/domain/f-draggable/add-dnd-to-store/add-dnd-to-store.ts","../../../libs/f-flow/src/domain/f-draggable/on-pointer-move/on-pointer-move-request.ts","../../../libs/f-flow/src/domain/f-draggable/on-pointer-move/on-pointer-move.ts","../../../libs/f-flow/src/domain/f-draggable/initialize-drag-sequence/initialize-drag-sequence-request.ts","../../../libs/f-flow/src/domain/f-draggable/initialize-drag-sequence/initialize-drag-sequence.ts","../../../libs/f-flow/src/domain/f-draggable/is-drag-started/is-drag-started-request.ts","../../../libs/f-flow/src/domain/f-draggable/is-drag-started/is-drag-started.ts","../../../libs/f-flow/src/domain/f-draggable/prepare-drag-sequence/prepare-drag-sequence-request.ts","../../../libs/f-flow/src/domain/f-draggable/prepare-drag-sequence/prepare-drag-sequence.ts","../../../libs/f-flow/src/domain/f-draggable/remove-dnd-from-store/remove-dnd-from-store-request.ts","../../../libs/f-flow/src/domain/f-draggable/remove-dnd-from-store/remove-dnd-from-store.ts","../../../libs/f-flow/src/domain/f-draggable/providers.ts","../../../libs/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/calculate-connectable-side-by-internal-position/calculate-connectable-side-by-internal-position.ts","../../../libs/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/calculate-connectors-connectable-sides-request.ts","../../../libs/f-flow/src/domain/f-node/calculate-connectors-connectable-sides/calculate-connectors-connectable-sides.ts","../../../libs/f-flow/src/domain/f-node/calculate-nodes-bounding-box/calculate-nodes-bounding-box-request.ts","../../../libs/f-flow/src/domain/f-node/calculate-nodes-bounding-box/calculate-nodes-bounding-box.ts","../../../libs/f-flow/src/domain/f-node/calculate-nodes-bounding-box-normalized-position/calculate-nodes-bounding-box-normalized-position-request.ts","../../../libs/f-flow/src/domain/f-node/calculate-nodes-bounding-box-normalized-position/calculate-nodes-bounding-box-normalized-position.ts","../../../libs/f-flow/src/domain/f-node/calculate-output-connections/calculate-output-connections-request.ts","../../../libs/f-flow/src/domain/f-node/calculate-output-connections/calculate-output-connections.ts","../../../libs/f-flow/src/domain/f-node/fit-to-child-nodes-and-groups/fit-to-child-nodes-and-groups-request.ts","../../../libs/f-flow/src/domain/f-node/get-node-padding/get-node-padding-request.ts","../../../libs/f-flow/src/domain/f-node/get-node-padding/get-node-padding.ts","../../../libs/f-flow/src/domain/f-node/fit-to-child-nodes-and-groups/fit-to-child-nodes-and-groups.ts","../../../libs/f-flow/src/domain/f-node/get-child-node-ids/get-child-node-ids-request.ts","../../../libs/f-flow/src/domain/f-node/get-child-node-ids/get-child-node-ids.ts","../../../libs/f-flow/src/domain/f-node/get-parent-nodes/get-parent-nodes-request.ts","../../../libs/f-flow/src/domain/f-node/get-parent-nodes/get-parent-nodes.ts","../../../libs/f-flow/src/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed-request.ts","../../../libs/f-flow/src/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed.ts","../../../libs/f-flow/src/domain/f-node/remove-node-from-store/remove-node-from-store-request.ts","../../../libs/f-flow/src/domain/f-node/remove-node-from-store/remove-node-from-store.ts","../../../libs/f-flow/src/domain/f-node/providers.ts","../../../libs/f-flow/src/domain/f-connectors/calculate-target-connectors-to-connect/calculate-target-connectors-to-connect.ts","../../../libs/f-flow/src/domain/f-connectors/calculate-source-connectors-to-connect/calculate-source-connectors-to-connect-request.ts","../../../libs/f-flow/src/domain/f-connectors/calculate-source-connectors-to-connect/calculate-source-connectors-to-connect.ts","../../../libs/f-flow/src/domain/f-connectors/mark-connectable-connectors/mark-connectable-connectors-request.ts","../../../libs/f-flow/src/domain/css-cls.ts","../../../libs/f-flow/src/domain/f-connectors/mark-connectable-connectors/mark-connectable-connectors.ts","../../../libs/f-flow/src/domain/f-connectors/remove-connector-from-store/remove-connector-from-store-request.ts","../../../libs/f-flow/src/domain/f-connectors/remove-connector-from-store/remove-connector-from-store.ts","../../../libs/f-flow/src/domain/f-connectors/unmark-connectable-connectors/unmark-connectable-connectors-request.ts","../../../libs/f-flow/src/domain/f-connectors/unmark-connectable-connectors/unmark-connectable-connectors.ts","../../../libs/f-flow/src/domain/f-connectors/providers.ts","../../../libs/f-flow/src/domain/f-flow/add-flow-to-store/add-flow-to-store-request.ts","../../../libs/f-flow/src/plugins/layout/f-layout/enums/e-f-layout-direction.ts","../../../libs/f-flow/src/plugins/layout/f-layout/enums/e-f-layout-mode.ts","../../../libs/f-flow/src/plugins/layout/f-layout/flow-integration/normalize-flow-layout-data.ts","../../../libs/f-flow/src/plugins/layout/f-layout/flow-integration/f-layout-controller.ts","../../../libs/f-flow/src/plugins/layout/f-layout/models/i-f-layout-provider-config.ts","../../../libs/f-flow/src/plugins/layout/f-layout/models/merge-layout-nodes.ts","../../../libs/f-flow/src/plugins/layout/f-layout/f-layout-engine.ts","../../../libs/f-flow/src/plugins/layout/f-layout/providers.ts","../../../libs/f-flow/src/domain/f-flow/add-flow-to-store/add-flow-to-store.ts","../../../libs/f-flow/src/domain/f-flow/get-flow/get-flow-request.ts","../../../libs/f-flow/src/domain/f-flow/get-flow/get-flow.ts","../../../libs/f-flow/src/domain/f-flow/calculate-flow-state/calculate-connections-state/calculate-connections-state-request.ts","../../../libs/f-flow/src/domain/f-flow/calculate-flow-state/calculate-connections-state/calculate-connections-state.ts","../../../libs/f-flow/src/domain/f-flow/calculate-flow-state/calculate-nodes-state/calculate-nodes-state-request.ts","../../../libs/f-flow/src/domain/f-flow/calculate-flow-state/calculate-nodes-state/calculate-nodes-state.ts","../../../libs/f-flow/src/domain/f-flow/calculate-flow-state/calculate-flow-state-request.ts","../../../libs/f-flow/src/domain/f-flow/calculate-flow-state/calculate-flow-state.ts","../../../libs/f-flow/src/domain/f-flow/calculate-flow-state/providers.ts","../../../libs/f-flow/src/domain/f-flow/remove-flow-from-store/remove-flow-from-store-request.ts","../../../libs/f-flow/src/domain/f-flow/remove-flow-from-store/remove-flow-from-store.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/render-lifecycle-state.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/notify-nodes-rendered/notify-nodes-rendered-request.ts","../../../libs/f-flow/src/f-flow/f-flow-base.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/notify-nodes-rendered/notify-nodes-rendered.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/notify-full-rendered/notify-full-rendered-request.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/notify-full-rendered/notify-full-rendered.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/wait-for-connections-rendered/wait-for-connections-rendered-request.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/wait-for-connections-rendered/wait-for-connections-rendered.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/reset-render-lifecycle/reset-render-lifecycle-request.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/reset-render-lifecycle/reset-render-lifecycle.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/queue-connection-redraw/queue-connection-redraw-request.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/queue-connection-redraw/queue-connection-redraw-state.ts","../../../libs/f-flow/src/domain/f-flow/render-lifecycle/queue-connection-redraw/queue-connection-redraw.ts","../../../libs/f-flow/src/domain/f-flow/providers.ts","../../../libs/f-flow/src/domain/f-selection/clear-selection/clear-selection-request.ts","../../../libs/f-flow/src/domain/f-selection/clear-selection/clear-selection.ts","../../../libs/f-flow/src/domain/f-selection/calculate-selectable-items/calculate-selectable-items-request.ts","../../../libs/f-flow/src/domain/f-selection/calculate-selectable-items/calculate-selectable-items.ts","../../../libs/f-flow/src/domain/f-selection/get-current-selection/get-current-selection-request.ts","../../../libs/f-flow/src/domain/f-selection/get-current-selection/get-current-selection.ts","../../../libs/f-flow/src/domain/f-selection/select-items/select-request.ts","../../../libs/f-flow/src/domain/f-selection/select-items/select.ts","../../../libs/f-flow/src/domain/f-selection/select-all/select-all-request.ts","../../../libs/f-flow/src/domain/f-selection/select-all/select-all.ts","../../../libs/f-flow/src/domain/f-selection/select-and-update-node-layer/select-and-update-node-layer-request.ts","../../../libs/f-flow/src/domain/update-item-and-children-layers/move-front-elements-before-target-element/move-front-elements-before-target-element-request.ts","../../../libs/f-flow/src/domain/update-item-and-children-layers/move-front-elements-before-target-element/move-front-elements-before-target-element.ts","../../../libs/f-flow/src/domain/update-item-and-children-layers/update-item-and-children-layers-request.ts","../../../libs/f-flow/src/domain/get-deep-children-nodes-and-groups/get-deep-children-nodes-and-groups-request.ts","../../../libs/f-flow/src/domain/get-deep-children-nodes-and-groups/get-deep-children-nodes-and-groups.ts","../../../libs/f-flow/src/domain/update-item-and-children-layers/update-item-and-children-layers.ts","../../../libs/f-flow/src/domain/f-selection/select-and-update-node-layer/select-and-update-node-layer.ts","../../../libs/f-flow/src/domain/f-selection/providers.ts","../../../libs/f-flow/src/domain/f-zoom/reset-zoom/reset-zoom-request.ts","../../../libs/f-flow/src/domain/f-zoom/reset-zoom/reset-zoom.ts","../../../libs/f-flow/src/domain/f-zoom/set-zoom/set-zoom-request.ts","../../../libs/f-flow/src/domain/f-zoom/set-zoom/set-zoom.ts","../../../libs/f-flow/src/domain/f-zoom/providers.ts","../../../libs/f-flow/src/domain/minimap/minimap-draw-nodes/minimap-draw-nodes-request.ts","../../../libs/f-flow/src/domain/minimap/minimap-draw-nodes/minimap-draw-nodes.ts","../../../libs/f-flow/src/domain/minimap/minimap-calculate-viewport/minimap-calculate-viewport-request.ts","../../../libs/f-flow/src/domain/minimap/minimap-calculate-viewport/minimap-calculate-viewport.ts","../../../libs/f-flow/src/domain/minimap/minimap-calculate-view-rect/minimap-calculate-view-rect-request.ts","../../../libs/f-flow/src/domain/minimap/minimap-calculate-view-rect/minimap-calculate-view-rect.ts","../../../libs/f-flow/src/domain/minimap/f-minimap-state.ts","../../../libs/f-flow/src/domain/minimap/providers.ts","../../../libs/f-flow/src/domain/get-normalized-point/get-normalized-point-request.ts","../../../libs/f-flow/src/domain/get-normalized-point/get-normalized-point.ts","../../../libs/f-flow/src/domain/sort-item-layers/sort-node-layers-by-groups/sort-node-layers-request.ts","../../../libs/f-flow/src/domain/sort-item-layers/sort-node-layers-by-groups/sort-node-layers.ts","../../../libs/f-flow/src/domain/sort-item-layers/sort-items-by-parent/sort-items-by-parent-request.ts","../../../libs/f-flow/src/domain/sort-item-layers/sort-items-by-parent/sort-items-by-parent.ts","../../../libs/f-flow/src/domain/sort-item-layers/sort-item-layers-request.ts","../../../libs/f-flow/src/domain/sort-item-layers/sort-item-layers.ts","../../../libs/f-flow/src/domain/create-dom-element.ts","../../../libs/f-flow/src/domain/f-event-trigger.ts","../../../libs/f-flow/src/domain/is-mobile.ts","../../../libs/f-flow/src/domain/log-deprecated.ts","../../../libs/f-flow/src/domain/log-execution-time.ts","../../../libs/f-flow/src/domain/providers.ts","../../../libs/f-flow/src/f-backgroud/f-rect-pattern/f-rect-pattern.component.ts","../../../libs/f-flow/src/f-backgroud/f-circle-pattern/f-circle-pattern.component.ts","../../../libs/f-flow/src/f-backgroud/f-background-base.ts","../../../libs/f-flow/src/f-backgroud/f-background.component.ts","../../../libs/f-flow/src/f-backgroud/providers.ts","../../../libs/f-flow/src/f-auto-pan/f-auto-pan-base.ts","../../../libs/f-flow/src/f-auto-pan/f-auto-pan.ts","../../../libs/f-flow/src/f-auto-pan/providers.ts","../../../libs/f-flow/src/f-canvas/enums/e-f-canvas-layer.ts","../../../libs/f-flow/src/f-canvas/constants/f-default-layer-order.ts","../../../libs/f-flow/src/f-canvas/models/f-canvas-base.ts","../../../libs/f-flow/src/f-canvas/models/f-canvas-change-event.ts","../../../libs/f-flow/src/f-canvas/layers/resolve-layer-order.ts","../../../libs/f-flow/src/f-canvas/utils/merge-f-canvas-config.ts","../../../libs/f-flow/src/f-canvas/utils/with-f-canvas.ts","../../../libs/f-flow/src/f-canvas/f-canvas.component.ts","../../../libs/f-flow/src/f-canvas/f-canvas.component.html","../../../libs/f-flow/src/f-canvas/providers.ts","../../../libs/f-flow/src/f-connection/f-connection/f-connection.component.ts","../../../libs/f-flow/src/f-connection/f-connection/f-connection.component.html","../../../libs/f-flow/src/f-connection/f-connection-for-create/f-connection-for-create.component.ts","../../../libs/f-flow/src/f-connection/f-connection-for-create/f-connection-for-create.component.html","../../../libs/f-flow/src/f-connection/f-snap-connection/f-snap-connection.component.ts","../../../libs/f-flow/src/f-connection/f-snap-connection/f-snap-connection.component.html","../../../libs/f-flow/src/f-connection/providers.ts","../../../libs/f-flow/src/plugins/snapping/f-magnetic-lines/f-magnetic-lines-base.ts","../../../libs/f-flow/src/plugins/snapping/f-magnetic-lines/f-magnetic-lines.ts","../../../libs/f-flow/src/plugins/snapping/f-magnetic-lines/providers.ts","../../../libs/f-flow/src/plugins/snapping/f-line-alignment/f-line-alignment.component.ts","../../../libs/f-flow/src/plugins/snapping/f-line-alignment/providers.ts","../../../libs/f-flow/src/plugins/snapping/f-magnetic-rects/f-magnetic-rects-base.ts","../../../libs/f-flow/src/plugins/snapping/f-magnetic-rects/f-magnetic-rects.ts","../../../libs/f-flow/src/plugins/snapping/f-magnetic-rects/providers.ts","../../../libs/f-flow/src/f-minimap/f-minimap-flow.directive.ts","../../../libs/f-flow/src/f-minimap/f-minimap-canvas.directive.ts","../../../libs/f-flow/src/f-minimap/f-minimap-view.directive.ts","../../../libs/f-flow/src/f-minimap/f-minimap-base.ts","../../../libs/f-flow/src/f-minimap/f-minimap.component.ts","../../../libs/f-flow/src/f-minimap/f-minimap.component.html","../../../libs/f-flow/src/f-minimap/providers.ts","../../../libs/f-flow/src/f-selection-area/f-selection-area-base.ts","../../../libs/f-flow/src/f-selection-area/f-selection-area.ts","../../../libs/f-flow/src/f-selection-area/providers.ts","../../../libs/f-flow/src/f-flow/f-flow.component.ts","../../../libs/f-flow/src/f-flow/f-flow.component.html","../../../libs/f-flow/src/f-flow/providers.ts","../../../libs/f-flow/src/f-virtual/f-virtual-for.ts","../../../libs/f-flow/src/f-virtual/providers.ts","../../../libs/f-flow/src/f-zoom/e-f-zoom-direction.ts","../../../libs/f-flow/src/f-zoom/f-zoom-base.ts","../../../libs/f-flow/src/f-zoom/wheel-zoom.utils.ts","../../../libs/f-flow/src/f-zoom/f-zoom.directive.ts","../../../libs/f-flow/src/f-zoom/providers.ts","../../../libs/f-flow/src/f-flow.module.ts","../../../libs/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","import { IFBackgroundPattern } from '../../../f-backgroud';\n\nexport class AddPatternToBackgroundRequest {\n  static readonly fToken = Symbol('AddPatternToBackgroundRequest');\n\n  constructor(public fPattern: IFBackgroundPattern | undefined) {}\n}\n","import { Signal } from '@angular/core';\n\nexport interface FHasId {\n  fId: Signal<string>;\n}\n\n/**\n * Stores instances indexed by `fId()` + preserves insertion order.\n *\n * - `get(id)` returns `undefined`\n * - `require(id)` throws with a readable message that includes `kind`\n */\nexport abstract class FIdRegistryBase<TInstance extends FHasId> {\n  private readonly _items: TInstance[] = [];\n  private readonly _byId = new Map<string, TInstance>();\n\n  /** Used only for error messages. Example: \"node\", \"connection\", \"input\". */\n  protected abstract readonly kind: string;\n\n  public get(id: string): TInstance | undefined {\n    return this._byId.get(id);\n  }\n\n  public require(id: string): TInstance {\n    const found = this._byId.get(id);\n    if (!found) {\n      throw new Error(`${this.kind} not found: ${id}`);\n    }\n\n    return found;\n  }\n\n  public has(id: string): boolean {\n    return this._byId.has(id);\n  }\n\n  public getAll(): TInstance[] {\n    return this._items;\n  }\n\n  public size(): number {\n    return this._items.length;\n  }\n\n  /**\n   * Adds an instance.\n   * If instance with the same id already exists — throws (keeps data consistent).\n   */\n  public add(instance: TInstance): void {\n    const id = instance.fId();\n\n    if (this._byId.has(id)) {\n      throw new Error(`${this.kind} already exists: ${id}`);\n    }\n\n    this._items.push(instance);\n    this._byId.set(id, instance);\n  }\n\n  public addMany(instances: readonly TInstance[]): void {\n    for (const instance of instances) {\n      this.add(instance);\n    }\n  }\n\n  /**\n   * Removes by instance reference (fast path).\n   * Returns `true` if removed, `false` if not found.\n   */\n  public remove(instance: TInstance): boolean {\n    const id = instance.fId();\n    const existing = this._byId.get(id);\n\n    if (!existing) {\n      return false;\n    }\n\n    // Defensive: if another instance with same id is in registry (shouldn't happen),\n    // we remove by id anyway.\n    this._byId.delete(id);\n\n    const index = this._items.indexOf(existing);\n    if (index >= 0) {\n      this._items.splice(index, 1);\n    }\n\n    return true;\n  }\n\n  /**\n   * Removes by id.\n   * Returns removed instance (if existed).\n   */\n  public removeById(id: string): TInstance | undefined {\n    const existing = this._byId.get(id);\n    if (!existing) {\n      return undefined;\n    }\n\n    this._byId.delete(id);\n\n    const index = this._items.indexOf(existing);\n    if (index >= 0) {\n      this._items.splice(index, 1);\n    }\n\n    return existing;\n  }\n\n  /**\n   * Clears registry (does NOT touch other state outside).\n   */\n  public clear(): void {\n    this._items.length = 0;\n    this._byId.clear();\n  }\n}\n","export type FInstanceKey<T> = {\n  readonly name: string;\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  readonly __type?: T;\n};\n\nexport function fInstanceKey<T>(name: string): FInstanceKey<T> {\n  return { name } as FInstanceKey<T>;\n}\n\nexport class FSingleRegistryBase {\n  private readonly _instances = new Map<string, unknown>();\n\n  public get<T>(key: FInstanceKey<T>): T | undefined {\n    return this._instances.get(key.name) as T | undefined;\n  }\n\n  public require<T>(key: FInstanceKey<T>): T {\n    const instance = this.get(key);\n    if (!instance) {\n      throw new Error(`Instance not found: ${key.name}`);\n    }\n\n    return instance;\n  }\n\n  public has(key: FInstanceKey<unknown>): boolean {\n    return this._instances.has(key.name);\n  }\n\n  public add<T>(key: FInstanceKey<T>, instance: T): void {\n    if (this._instances.has(key.name)) {\n      throw new Error(`${key.name} already exists`);\n    }\n    this._instances.set(key.name, instance);\n  }\n\n  public remove(key: FInstanceKey<unknown>): boolean {\n    const existed = this._instances.has(key.name);\n    if (!existed) {\n      throw new Error(`${key.name} does not exist`);\n    }\n    this._instances.delete(key.name);\n\n    return true;\n  }\n\n  public clear(): void {\n    this._instances.clear();\n  }\n}\n","import { FHasId, FIdRegistryBase } from './base';\n\nexport class FConnectorRegistry<TInstance extends FHasId> extends FIdRegistryBase<TInstance> {\n  constructor(protected kind: string) {\n    super();\n  }\n}\n","import { FIdRegistryBase } from './base';\nimport { FConnectionMarkerBase } from '../f-connection-v2';\n\nexport class FConnectionMarkerRegistry extends FIdRegistryBase<FConnectionMarkerBase> {\n  protected readonly kind = 'Connection Marker';\n}\n","import { FIdRegistryBase } from './base';\nimport { FConnectionForCreateComponent, FSnapConnectionComponent } from '../f-connection';\nimport { FConnectionBase } from '../f-connection-v2';\n\nexport class FConnectionRegistry extends FIdRegistryBase<FConnectionBase> {\n  protected readonly kind = 'Connection';\n\n  private _instancesForCreate: FConnectionForCreateComponent | undefined;\n  private _instancesForSnap: FSnapConnectionComponent | undefined;\n\n  public getForSnap(): FSnapConnectionComponent | undefined {\n    return this._instancesForSnap;\n  }\n\n  public getForCreate(): FConnectionForCreateComponent | undefined {\n    return this._instancesForCreate;\n  }\n\n  public addForCreate(instance: FConnectionForCreateComponent): void {\n    this._instancesForCreate = instance;\n  }\n\n  public addForSnap(instance: FSnapConnectionComponent): void {\n    this._instancesForSnap = instance;\n  }\n\n  public removeInstanceForCreate(): void {\n    this._instancesForCreate = undefined;\n  }\n\n  public removeInstanceForSnap(): void {\n    this._instancesForSnap = undefined;\n  }\n}\n","import { FIdRegistryBase } from './base';\nimport { FNodeBase } from '../f-node';\n\nexport class FNodeRegistry extends FIdRegistryBase<FNodeBase> {\n  protected readonly kind = 'Node';\n}\n","export class ListenConnectionsChangesRequest {\n  static readonly fToken = Symbol('ListenConnectionsChangesRequest');\n\n  constructor(public readonly notifyOnSubscribe: boolean = true) {}\n}\n","import { FChannelOperator } from './types';\n\nexport function afterNextPaint(): FChannelOperator {\n  return (callback) => {\n    let raf1: number | null = null;\n    let raf2: number | null = null;\n\n    const cancel = () => {\n      if (raf1 !== null) cancelAnimationFrame(raf1);\n      if (raf2 !== null) cancelAnimationFrame(raf2);\n      raf1 = raf2 = null;\n    };\n\n    return {\n      callback: () => {\n        cancel();\n        raf1 = requestAnimationFrame(() => {\n          raf1 = null;\n          raf2 = requestAnimationFrame(() => {\n            raf2 = null;\n            callback();\n          });\n        });\n      },\n      cleanup: cancel,\n    };\n  };\n}\n","import { FChannelOperator } from './types';\n\nexport function debounceAnimationFrame(): FChannelOperator {\n  return (callback) => {\n    let rafId: number | null = null;\n\n    return {\n      callback: () => {\n        if (rafId !== null) cancelAnimationFrame(rafId);\n        rafId = requestAnimationFrame(() => {\n          rafId = null;\n          callback();\n        });\n      },\n      cleanup: () => {\n        if (rafId !== null) cancelAnimationFrame(rafId);\n        rafId = null;\n      },\n    };\n  };\n}\n","import { FChannelOperator } from './types';\n\nexport function debounceMicrotask(): FChannelOperator {\n  return (callback) => {\n    let scheduled = false;\n\n    return {\n      callback: () => {\n        if (scheduled) return;\n        scheduled = true;\n\n        queueMicrotask(() => {\n          scheduled = false;\n          callback();\n        });\n      },\n      cleanup: () => {\n        scheduled = false;\n      },\n    };\n  };\n}\n","import { FChannelOperator } from './types';\n\nexport function debounceTime(delay: number): FChannelOperator {\n  return (callback) => {\n    let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n    return {\n      callback: () => {\n        if (timeoutId !== null) clearTimeout(timeoutId);\n        timeoutId = setTimeout(() => {\n          timeoutId = null;\n          callback();\n        }, delay);\n      },\n      cleanup: () => {\n        if (timeoutId !== null) clearTimeout(timeoutId);\n        timeoutId = null;\n      },\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  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 current = callback;\n\n    const cleanups: (() => void)[] = [];\n    const onSubscribes: ((finalCb: FChannelListener) => void)[] = [];\n    const teardownSetters: ((teardown: () => void) => void)[] = [];\n\n    for (const operator of [...this._operators].reverse()) {\n      const res = operator(current);\n      current = res.callback;\n\n      if (res.cleanup) cleanups.push(res.cleanup);\n      if (res.onSubscribe) onSubscribes.push(res.onSubscribe);\n      if (res.setTeardown) teardownSetters.push(res.setTeardown);\n    }\n\n    const unsubs = this._channels.map((ch) => ch.listen(() => current()));\n\n    let unregisterOnDestroy: (() => void) | null = null;\n    let tornDown = false;\n    const teardown = () => {\n      if (tornDown) return;\n      tornDown = true;\n\n      unregisterOnDestroy?.();\n      unregisterOnDestroy = null;\n\n      unsubs.forEach((u) => u());\n      cleanups.forEach((c) => c());\n    };\n\n    teardownSetters\n      .slice()\n      .reverse()\n      .forEach((set) => set(teardown));\n    onSubscribes\n      .slice()\n      .reverse()\n      .forEach((fn) => fn(current));\n\n    unregisterOnDestroy = destroyRef.onDestroy(teardown);\n  }\n}\n","import { FChannelOperator } from './types';\n\n// export function notifyOnStart(): FChannelOperator {\n//   return (callback) => {\n//     let teardown: (() => void) | null = null;\n//\n//     return {\n//       setTeardown: (t) => (teardown = t),\n//       callback,\n//       onSubscribe: (finalCallback) => {\n//         if (!teardown) return;\n//         finalCallback();\n//       },\n//     };\n//   };\n// }\nexport function notifyOnStart(): FChannelOperator {\n  return (callback) => {\n    let active = true;\n\n    return {\n      callback,\n      onSubscribe: (finalCallback) => {\n        queueMicrotask(() => {\n          if (!active) return;\n          finalCallback();\n        });\n      },\n      cleanup: () => {\n        active = false;\n      },\n    };\n  };\n}\n","import { FChannelOperator } from './types';\n\nexport function takeOne(): FChannelOperator {\n  return (callback) => {\n    let taken = false;\n    let teardown: (() => void) | null = null;\n\n    return {\n      setTeardown: (t) => (teardown = t),\n      callback: () => {\n        if (taken) return;\n        taken = true;\n\n        try {\n          callback();\n        } finally {\n          teardown?.();\n        }\n      },\n    };\n  };\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ListenConnectionsChangesRequest } from './listen-connections-changes-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { debounceTime, FChannelHub, notifyOnStart } from '../../../reactivity';\n\n@Injectable()\n@FExecutionRegister(ListenConnectionsChangesRequest)\nexport class ListenConnectionsChanges implements IExecution<\n  ListenConnectionsChangesRequest,\n  FChannelHub\n> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ notifyOnSubscribe }: ListenConnectionsChangesRequest): FChannelHub {\n    return notifyOnSubscribe\n      ? new FChannelHub(this._store.connectionsChanges$).pipe(notifyOnStart(), debounceTime(1))\n      : new FChannelHub(this._store.connectionsChanges$).pipe(debounceTime(1));\n  }\n}\n","export class ListenNodesChangesRequest {\n  static readonly fToken = Symbol('ListenNodesChangesRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ListenNodesChangesRequest } from './listen-nodes-changes-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FChannelHub } from '../../../reactivity';\n\n@Injectable()\n@FExecutionRegister(ListenNodesChangesRequest)\nexport class ListenNodesChanges implements IExecution<ListenNodesChangesRequest, FChannelHub> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_: ListenNodesChangesRequest): FChannelHub {\n    return new FChannelHub(this._store.nodesChanges$);\n  }\n}\n","export class ListenTransformChangesRequest {\n  static readonly fToken = Symbol('ListenTransformChangesRequest');\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 ListenTransformChanges implements IExecution<\n  ListenTransformChangesRequest,\n  FChannelHub\n> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_: ListenTransformChangesRequest): FChannelHub {\n    return new FChannelHub(\n      this._store.transformChanges$,\n      this._store.connectionsChanges$,\n      this._store.nodesChanges$,\n    );\n  }\n}\n","export class EmitConnectionsChangesRequest {\n  static readonly fToken = Symbol('EmitConnectionsChangesRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { EmitConnectionsChangesRequest } from './emit-connections-changes-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(EmitConnectionsChangesRequest)\nexport class EmitConnectionsChanges implements IExecution<EmitConnectionsChangesRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_: EmitConnectionsChangesRequest): void {\n    this._store.emitConnectionChanges();\n  }\n}\n","export class NotifyTransformChangedRequest {\n  static readonly fToken = Symbol('NotifyTransformChangedRequest');\n}\n","import { Injectable } from '@angular/core';\nimport { FFlowBase } from '../f-flow';\nimport { FCanvasBase } from '../f-canvas';\nimport { FBackgroundBase } from '../f-backgroud';\nimport { FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../f-connectors';\nimport { FDraggableBase } from '../f-draggable';\nimport { FChannel } from '../reactivity';\nimport { ITransformModel } from '@foblex/2d';\nimport { FConnectorRegistry } from './f-connector-registry';\nimport { FNodeRegistry } from './f-node-registry';\nimport { FConnectionRegistry } from './f-connection-registry';\nimport { FConnectionMarkerRegistry } from './f-connection-marker-registry';\nimport { fInstanceKey, FSingleRegistryBase } from './base';\nimport { FZoomBase } from '../f-zoom';\nimport { FSelectionAreaBase } from '../f-selection-area';\nimport { FMagneticLinesBase } from '../plugins/snapping/f-magnetic-lines';\nimport { FMagneticRectsBase } from '../plugins/snapping/f-magnetic-rects';\nimport { FMinimapBase } from '../f-minimap';\nimport { FAutoPanBase } from '../f-auto-pan';\n\n@Injectable()\nexport class FComponentsStore {\n  public readonly transformChanges$ = new FChannel();\n  public readonly viewportAnimationChanges$ = new FChannel();\n\n  public readonly connectionsChanges$ = new FChannel();\n  private _connectionsRevision = 0;\n  public readonly connectionsRenderedChanges$ = new FChannel();\n  private _connectionsRenderedRevision = 0;\n  private _connectionsRenderedNodesRevision = 0;\n  private _viewportAnimationCount = 0;\n\n  public readonly nodesChanges$ = new FChannel();\n  private _nodesRevision = 0;\n\n  public readonly progressiveRenderChanges$ = new FChannel();\n  private _pendingProgressiveRenderCount = 0;\n\n  public get connectionsRevision(): number {\n    return this._connectionsRevision;\n  }\n\n  public get connectionsRenderedRevision(): number {\n    return this._connectionsRenderedRevision;\n  }\n\n  public get connectionsRenderedNodesRevision(): number {\n    return this._connectionsRenderedNodesRevision;\n  }\n\n  public get nodesRevision(): number {\n    return this._nodesRevision;\n  }\n\n  public get hasPendingProgressiveRender(): boolean {\n    return this._pendingProgressiveRenderCount > 0;\n  }\n\n  public get isViewportAnimating(): boolean {\n    return this._viewportAnimationCount > 0;\n  }\n\n  public get flowHost(): HTMLElement {\n    return this.fFlow?.hostElement as HTMLElement;\n  }\n\n  public fFlow: FFlowBase | undefined;\n\n  public fCanvas: FCanvasBase | undefined;\n\n  public get transform(): ITransformModel {\n    return this.fCanvas?.transform as ITransformModel;\n  }\n\n  public readonly nodes = new FNodeRegistry();\n  public readonly connections = new FConnectionRegistry();\n  public readonly connectionMarkers = new FConnectionMarkerRegistry();\n\n  public readonly outputs = new FConnectorRegistry<FNodeOutputBase>('Output');\n  public readonly inputs = new FConnectorRegistry<FNodeInputBase>('Input');\n  public readonly outlets = new FConnectorRegistry<FNodeOutletBase>('Outlet');\n\n  public readonly instances = new FSingleRegistryBase();\n\n  public fDraggable: FDraggableBase | undefined;\n\n  public emitNodeChanges(): void {\n    this._nodesRevision++;\n    this.nodesChanges$.notify();\n  }\n\n  public emitConnectionChanges(): void {\n    this._connectionsRevision++;\n    this.connectionsChanges$.notify();\n  }\n\n  public completeConnectionsRender(revision: number, nodesRevision: number): void {\n    if (\n      revision < this._connectionsRenderedRevision ||\n      (revision === this._connectionsRenderedRevision &&\n        nodesRevision <= this._connectionsRenderedNodesRevision)\n    ) {\n      return;\n    }\n\n    this._connectionsRenderedRevision = Math.min(revision, this._connectionsRevision);\n    this._connectionsRenderedNodesRevision = nodesRevision;\n    this.connectionsRenderedChanges$.notify();\n  }\n\n  public beginProgressiveRender(): void {\n    this._pendingProgressiveRenderCount++;\n    this.progressiveRenderChanges$.notify();\n  }\n\n  public endProgressiveRender(): void {\n    if (!this._pendingProgressiveRenderCount) {\n      return;\n    }\n\n    this._pendingProgressiveRenderCount--;\n    this.progressiveRenderChanges$.notify();\n  }\n\n  public transformChanged(): void {\n    this.transformChanges$.notify();\n  }\n\n  public beginViewportAnimation(): void {\n    this._viewportAnimationCount++;\n    this.viewportAnimationChanges$.notify();\n  }\n\n  public endViewportAnimation(): void {\n    if (!this._viewportAnimationCount) {\n      return;\n    }\n\n    this._viewportAnimationCount--;\n    this.viewportAnimationChanges$.notify();\n  }\n}\n\nexport const INSTANCES = {\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  MAGNETIC_LINES: fInstanceKey<FMagneticLinesBase>('magnetic-lines'),\n\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  MAGNETIC_RECTS: fInstanceKey<FMagneticRectsBase>('magnetic-rects'),\n\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  ZOOM: fInstanceKey<FZoomBase>('zoom-controls'),\n\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  BACKGROUND: fInstanceKey<FBackgroundBase>('background'),\n\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  SELECTION_AREA: fInstanceKey<FSelectionAreaBase>('selection-area'),\n\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  MINIMAP: fInstanceKey<FMinimapBase>('minimap'),\n\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  AUTO_PAN: fInstanceKey<FAutoPanBase>('auto-pan'),\n} as const;\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 NotifyTransformChanged\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 { FInstanceKey } from '../../base';\n\nexport class RegisterPluginInstanceRequest {\n  static readonly fToken = Symbol('RegisterPluginInstanceRequest');\n  constructor(\n    public readonly key: FInstanceKey<unknown>,\n    public readonly instance: unknown,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RegisterPluginInstanceRequest } from './register-plugin-instance-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n/**\n * Execution that adds a line alignment to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RegisterPluginInstanceRequest)\nexport class RegisterPluginInstance implements IExecution<RegisterPluginInstanceRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ key, instance }: RegisterPluginInstanceRequest): void {\n    this._store.instances.add(key, instance);\n  }\n}\n","import { FInstanceKey } from '../../base';\n\nexport class RemovePluginInstanceRequest {\n  static readonly fToken = Symbol('RemovePluginInstanceRequest');\n  constructor(public readonly key: FInstanceKey<unknown>) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RemovePluginInstanceRequest } from './remove-plugin-instance-request';\nimport { FComponentsStore } from '../../../f-storage';\n\n/**\n * Execution that removes a line alignment from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemovePluginInstanceRequest)\nexport class RemovePluginInstance implements IExecution<RemovePluginInstanceRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ key }: RemovePluginInstanceRequest): void {\n    this._store.instances.remove(key);\n  }\n}\n","import {\n  ListenNodesChanges,\n  ListenConnectionsChanges,\n  ListenTransformChanges,\n  EmitConnectionsChanges,\n  NotifyTransformChanged,\n  RegisterPluginInstance,\n} from './features';\nimport { FComponentsStore } from './f-components-store';\nimport { RemovePluginInstance } from './features';\n\nexport const F_STORAGE_PROVIDERS = [\n  FComponentsStore,\n\n  ListenNodesChanges,\n  ListenConnectionsChanges,\n  ListenTransformChanges,\n  EmitConnectionsChanges,\n  NotifyTransformChanged,\n\n  RegisterPluginInstance,\n  RemovePluginInstance,\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, INSTANCES } 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 AddPatternToBackground implements IExecution<AddPatternToBackgroundRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _browser = inject(BrowserService);\n\n  private get _backgroundElement(): HTMLElement {\n    return this._store.instances.get(INSTANCES.BACKGROUND)?.hostElement as HTMLElement;\n  }\n\n  public handle(request: AddPatternToBackgroundRequest): void {\n    const patterns = this._getPatterns(request.fPattern?.hostElement);\n    if (!patterns?.length) {\n      return;\n    }\n    const defs = createSVGElement('defs', this._browser);\n    request.fPattern?.hostElement.remove();\n\n    patterns.forEach((pattern) => {\n      defs.append(pattern);\n    });\n\n    if (patterns.length) {\n      this._backgroundElement?.firstChild?.appendChild(defs);\n      patterns[patterns.length - 1].id = 'f-background-pattern-' + uniqueId++;\n      const lastPatternId = patterns[patterns.length - 1].id;\n      const rect = createSVGElement('rect', this._browser);\n      rect.setAttribute('fill', 'url(#' + lastPatternId + ')');\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  private _getPatterns(element?: HTMLElement | SVGElement | undefined): SVGPatternElement[] {\n    return Array.from(element?.getElementsByTagName('pattern') || []);\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, INSTANCES } 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 SetBackgroundTransform implements IExecution<SetBackgroundTransformRequest, void> {\n\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: SetBackgroundTransformRequest): void {\n    this._store.instances.get(INSTANCES.BACKGROUND)?.setTransform(request.fTransform);\n  }\n}\n","import { AddPatternToBackground } from './add-pattern-to-background';\nimport { SetBackgroundTransform } 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  AddPatternToBackground,\n\n  SetBackgroundTransform,\n];\n","import { FCanvasBase } from '../../../f-canvas';\n\nexport class AddCanvasToStoreRequest {\n  static readonly fToken = Symbol('AddCanvasToStoreRequest');\n  constructor(public readonly instance: FCanvasBase) {}\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 AddCanvasToStore implements IExecution<AddCanvasToStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ instance }: AddCanvasToStoreRequest): void {\n    this._store.fCanvas = instance;\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 { ECanvasRedrawContext, 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 CenterGroupOrNode implements IExecution<CenterGroupOrNodeRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  public handle({ id, animated }: CenterGroupOrNodeRequest): void {\n    const node = this._store.nodes.get(id);\n    if (!node) {\n      return;\n    }\n\n    this._toCenter(this._getNodeRect(node), this._getFlowRect(), node._position);\n\n    this._mediator.execute(\n      new RedrawCanvasWithAnimationRequest(animated, ECanvasRedrawContext.VIEWPORT_ONLY),\n    );\n  }\n\n  private _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 _getNodeRect(fNode: FNodeBase): IRect {\n    return RectExtensions.fromElement(fNode.hostElement);\n  }\n\n  private _getFlowRect(): IRect {\n    return RectExtensions.fromElement(this._store.flowHost);\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class FitToFlowRequest {\n  static readonly fToken = Symbol('FitToFlowRequest');\n  constructor(\n    public readonly toCenter: IPoint,\n    public readonly animated: boolean,\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 {\n  CalculateNodesBoundingBoxRequest,\n  ECanvasRedrawContext,\n  RedrawCanvasWithAnimationRequest,\n} 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 FitToFlow implements IExecution<FitToFlowRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ toCenter, animated }: FitToFlowRequest): void {\n    const fNodesRect =\n      this._mediator.execute<IRect | null>(new CalculateNodesBoundingBoxRequest()) ||\n      RectExtensions.initialize();\n    if (fNodesRect.width === 0 || fNodesRect.height === 0) {\n      return;\n    }\n\n    this.fitToParent(\n      fNodesRect,\n      RectExtensions.fromElement(this._store.flowHost),\n      this._store.nodes.getAll().map((x) => x._position),\n      toCenter,\n    );\n\n    this._mediator.execute(\n      new RedrawCanvasWithAnimationRequest(animated, ECanvasRedrawContext.VIEWPORT_ONLY),\n    );\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 ||\n      itemsContainerHeight > parentRect.height ||\n      (itemsContainerWidth < parentRect.width && itemsContainerHeight < parentRect.height)\n    ) {\n      this._transform.scale = Math.min(\n        parentRect.width / itemsContainerWidth,\n        parentRect.height / itemsContainerHeight,\n      );\n    }\n\n    const newX =\n      (parentRect.width - itemsContainerWidth * this._transform.scale) / 2 -\n      this._transform.position.x * this._transform.scale;\n    const newY =\n      (parentRect.height - itemsContainerHeight * this._transform.scale) / 2 -\n      this._transform.position.y * this._transform.scale;\n\n    this._transform.position = PointExtensions.initialize(\n      newX + (toCenter.x / 2) * this._transform.scale,\n      newY + (toCenter.y / 2) * this._transform.scale,\n    );\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, ITransformModel } from '@foblex/2d';\n\nexport class InputCanvasPositionRequest {\n  static readonly fToken = Symbol('InputCanvasPositionRequest');\n  constructor(\n    public readonly transform: ITransformModel,\n    public readonly position: IPoint | undefined,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { InputCanvasPositionRequest } from './input-canvas-position-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { IPoint, ITransformModel, 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 InputCanvasPosition implements IExecution<InputCanvasPositionRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ transform, position }: InputCanvasPositionRequest): void {\n    if (!position) {\n      return;\n    }\n    if (!PointExtensions.isEqual(this._calculateTransformPosition(transform), position)) {\n      transform.position = position;\n      transform.scaledPosition = PointExtensions.initialize();\n      this._store.fCanvas?.redraw();\n    }\n  }\n\n  private _calculateTransformPosition(transform: ITransformModel): IPoint {\n    return PointExtensions.sum(transform.position, transform.scaledPosition);\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 InputCanvasScale implements IExecution<InputCanvasScaleRequest, void> {\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 enum ECanvasRedrawContext {\n  VIEWPORT_ONLY = 'VIEWPORT_ONLY',\n  WITH_CONNECTION_CHANGES = 'WITH_CONNECTION_CHANGES',\n}\n","import { ECanvasRedrawContext } from './e-canvas-redraw-context';\n\nexport class RedrawCanvasWithAnimationRequest {\n  static readonly fToken = Symbol('RedrawCanvasWithAnimationRequest');\n  constructor(\n    public readonly animated: boolean,\n    public readonly context: ECanvasRedrawContext = ECanvasRedrawContext.WITH_CONNECTION_CHANGES,\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 { ECanvasRedrawContext } from './e-canvas-redraw-context';\nimport { RedrawCanvasWithAnimationRequest } from './redraw-canvas-with-animation-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { transitionEnd } from '../../transition-end';\nimport { FCanvasBase } from '../../../f-canvas';\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 RedrawCanvasWithAnimation\n  implements IExecution<RedrawCanvasWithAnimationRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  public handle(request: RedrawCanvasWithAnimationRequest): void {\n    request.animated ? this._redrawWithAnimation(request.context) : this._redraw(request.context);\n    this._canvas?.emitCanvasChangeEvent();\n  }\n\n  private _redrawWithAnimation(context: ECanvasRedrawContext): void {\n    this._store.beginViewportAnimation();\n    this._canvas?.redrawWithAnimation();\n\n    transitionEnd(this._canvas.hostElement, () => {\n      this._store.endViewportAnimation();\n\n      if (context === ECanvasRedrawContext.WITH_CONNECTION_CHANGES) {\n        this._store.emitConnectionChanges();\n      }\n    });\n  }\n\n  private _redraw(context: ECanvasRedrawContext): void {\n    this._canvas?.redraw();\n\n    if (context === ECanvasRedrawContext.WITH_CONNECTION_CHANGES) {\n      this._store.emitConnectionChanges();\n    }\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 RemoveCanvasFromStore implements IExecution<RemoveCanvasFromStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_: 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 ResetScale implements IExecution<ResetScaleRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  public handle(_: 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(public readonly animated: boolean) {}\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 {\n  CalculateNodesBoundingBoxRequest,\n  ECanvasRedrawContext,\n  RedrawCanvasWithAnimationRequest,\n} 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 ResetScaleAndCenter implements IExecution<ResetScaleAndCenterRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  public handle({ animated }: ResetScaleAndCenterRequest): void {\n    const nodesRect =\n      this._mediator.execute<IRect | null>(new CalculateNodesBoundingBoxRequest()) ||\n      RectExtensions.initialize();\n    if (nodesRect.width === 0 || nodesRect.height === 0) {\n      return;\n    }\n    this._oneToOneCentering(\n      nodesRect,\n      RectExtensions.fromElement(this._store.flowHost),\n      this._store.nodes.getAll().map((x) => x._position),\n    );\n\n    this._mediator.execute(\n      new RedrawCanvasWithAnimationRequest(animated, ECanvasRedrawContext.VIEWPORT_ONLY),\n    );\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 =\n      (parentRect.width - rect.width / this._transform.scale) / 2 - this._transform.position.x;\n    const newY =\n      (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 readonly scale: number,\n    public readonly toPosition: IPoint,\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 UpdateScale implements IExecution<UpdateScaleRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  public handle({ scale, toPosition }: UpdateScaleRequest): void {\n    if (scale === this._transform.scale) {\n      return;\n    }\n    const summaryPosition = PointExtensions.sum(\n      this._transform.scaledPosition,\n      this._transform.position,\n    );\n\n    const newX =\n      toPosition.x - ((toPosition.x - summaryPosition.x) * scale) / this._transform.scale;\n    const newY =\n      toPosition.y - ((toPosition.y - summaryPosition.y) * scale) / this._transform.scale;\n\n    this._transform.scale = scale;\n    this._transform.scaledPosition = PointExtensions.sub(\n      PointExtensions.initialize(newX, newY),\n      this._transform.position,\n    );\n  }\n}\n","import { CenterGroupOrNode } from './center-group-or-node';\nimport { FitToFlow } from './fit-to-flow';\nimport { ResetScaleAndCenter } from './reset-scale-and-center';\nimport { ResetScale } from './reset-scale';\nimport { UpdateScale } from './update-scale';\nimport { InputCanvasPosition } from './input-canvas-position';\nimport { InputCanvasScale } from './input-canvas-scale';\nimport { AddCanvasToStore } from './add-canvas-to-store';\nimport { RemoveCanvasFromStore } from './remove-canvas-from-store';\nimport { RedrawCanvasWithAnimation } 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  AddCanvasToStore,\n\n  CenterGroupOrNode,\n\n  FitToFlow,\n\n  InputCanvasPosition,\n\n  InputCanvasScale,\n\n  RedrawCanvasWithAnimation,\n\n  RemoveCanvasFromStore,\n\n  ResetScale,\n\n  ResetScaleAndCenter,\n\n  UpdateScale,\n];\n","import { FConnectionForCreateComponent } from '../../../f-connection';\n\nexport class AddConnectionForCreateToStoreRequest {\n  static readonly fToken = Symbol('AddConnectionForCreateToStoreRequest');\n\n  constructor(public readonly connection: FConnectionForCreateComponent) {}\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 AddConnectionForCreateToStore\n  implements IExecution<AddConnectionForCreateToStoreRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ connection }: AddConnectionForCreateToStoreRequest): void {\n    this._store.connections.addForCreate(connection);\n  }\n}\n","import { FConnectionMarkerBase } from '../../../f-connection-v2/components/connection-marker/models';\n\nexport class AddConnectionMarkerToStoreRequest {\n  static readonly fToken = Symbol('AddConnectionMarkerToStoreRequest');\n\n  constructor(public readonly instance: FConnectionMarkerBase) {}\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 AddConnectionMarkerToStore implements IExecution<\n  AddConnectionMarkerToStoreRequest,\n  void\n> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ instance }: AddConnectionMarkerToStoreRequest): void {\n    this._store.connectionMarkers.add(instance);\n    this._store.emitNodeChanges();\n  }\n}\n","import { FConnectionBase } from '../../../f-connection-v2';\n\nexport class AddConnectionToStoreRequest {\n  static readonly fToken = Symbol('AddConnectionToStoreRequest');\n\n  constructor(public readonly connection: FConnectionBase) {}\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 AddConnectionToStore implements IExecution<AddConnectionToStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ connection }: AddConnectionToStoreRequest): void {\n    this._store.connections.add(connection);\n    this._store.emitConnectionChanges();\n  }\n}\n","import { FSnapConnectionComponent } from '../../../f-connection';\n\nexport class AddSnapConnectionToStoreRequest {\n  static readonly fToken = Symbol('AddSnapConnectionToStoreRequest');\n\n  constructor(public readonly connection: FSnapConnectionComponent) {}\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 AddSnapConnectionToStore implements IExecution<AddSnapConnectionToStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ connection }: AddSnapConnectionToStoreRequest): void {\n    this._store.connections.addForSnap(connection);\n  }\n}\n","import { FConnectionBase } from '../../../f-connection-v2';\n\nexport class CreateConnectionMarkersRequest {\n  static readonly fToken = Symbol('CreateConnectionMarkersRequest');\n\n  constructor(public readonly connection: FConnectionBase) {}\n}\n","import { DestroyRef, ElementRef, inject, InjectionToken, Signal } from '@angular/core';\nimport { ISize } from '@foblex/2d';\nimport { IPolylineContent, PolylineContentAlign } from '../utils';\n\nexport const F_CONNECTION_CONTENT = new InjectionToken<FConnectionContentBase>(\n  'F_CONNECTION_CONTENT',\n);\n\nexport abstract class FConnectionContentBase implements IPolylineContent {\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  // ResizeObserver-backed size cache. Avoids `getBoundingClientRect`\n  // inside the placement loop, where one DOM read per label per redraw\n  // forced a synchronous layout flush and dominated drag-time at a few\n  // hundred labelled connections (issue #304). The observer also keeps\n  // the cache correct when the label content actually resizes.\n  //\n  // The initial size is populated by the observer's first asynchronous\n  // delivery — calling `getBoundingClientRect()` from the constructor\n  // re-introduces the thrashing during Angular CD when many labels\n  // mount in the same tick. Until the first delivery, the size stays\n  // at zero; the only visible effect is that the edge-guard does not\n  // push labels away from path endpoints on the very first frame.\n  // Labels at `position` ≠ 0 / 1 are unaffected.\n  private _cachedSize: ISize = { width: 0, height: 0 };\n  private _observer: ResizeObserver | null = null;\n\n  constructor() {\n    if (typeof ResizeObserver === 'undefined') {\n      return;\n    }\n\n    this._observer = new ResizeObserver((entries) => {\n      for (const entry of entries) {\n        const rect = entry.contentRect;\n        this._cachedSize = { width: rect.width, height: rect.height };\n      }\n    });\n    this._observer.observe(this.hostElement);\n\n    inject(DestroyRef).onDestroy(() => {\n      this._observer?.disconnect();\n      this._observer = null;\n    });\n  }\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 abstract position: Signal<number>;\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 abstract offset: Signal<number>;\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 abstract align: Signal<PolylineContentAlign>;\n\n  public measureSize(): ISize {\n    return this._cachedSize;\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 = [\n        { x: 0, y: 0 },\n        { x: 1, y: 0 },\n      ];\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';\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, 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  // Reads the size via `content.measureSize()` — a ResizeObserver-backed\n  // cache. This loop runs interleaved with `style.transform` writes for\n  // every label, so a `getBoundingClientRect()` here would force a\n  // synchronous layout flush per label and stall drag at a few hundred\n  // labelled connections (issue #304).\n  private _sizeAlongDirection(content: IPolylineContent, dir: IPoint): number {\n    const size = content.measureSize();\n\n    return Math.abs(dir.x) * size.width + Math.abs(dir.y) * size.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 { 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(points: IPoint[], contents: Iterable<IPolylineContent>): number {\n    const sampler = new PolylineSampler(points);\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","import { Directive, effect, inject, Injector, input, OnInit, untracked } from '@angular/core';\nimport { EmitConnectionsChangesRequest } from '../../../f-storage';\nimport { FMediator } from '@foblex/mediator';\nimport { castToEnum } from '@foblex/utils';\nimport { F_CONNECTION_CONTENT, FConnectionContentBase } from './models';\nimport { PolylineContentAlign } from './utils';\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  providers: [{ provide: F_CONNECTION_CONTENT, useExisting: FConnectionContent, multi: true }],\n})\nexport class FConnectionContent extends FConnectionContentBase implements OnInit {\n  private readonly _mediator = inject(FMediator);\n  private readonly _injector = inject(Injector);\n\n  public override readonly position = input<number, unknown>(0.5, {\n    transform: (x) => {\n      const v = coerceConnectionContentNumber(x);\n\n      return v < 0 ? 0 : v > 1 ? 1 : v;\n    },\n  });\n\n  public override readonly offset = input<number, unknown>(0, {\n    transform: (x) => coerceConnectionContentNumber(x),\n  });\n\n  public override 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 EmitConnectionsChangesRequest()));\n      },\n      { injector: this._injector },\n    );\n  }\n}\n\nfunction coerceConnectionContentNumber(value: unknown, fallbackValue: number = 0): number {\n  return isNumberValue(value) ? Number(value) : fallbackValue;\n}\n\nfunction isNumberValue(value: unknown): value is number | string | bigint {\n  if (typeof value === 'number') {\n    return !Number.isNaN(value);\n  }\n\n  if (typeof value === 'bigint') {\n    return true;\n  }\n\n  if (typeof value === 'string') {\n    return value.trim() !== '' && !Number.isNaN(Number(value));\n  }\n\n  return false;\n}\n","import { ElementRef, inject, InjectionToken, ModelSignal, signal, Signal } from '@angular/core';\nimport { IPoint, PointExtensions } from '@foblex/2d';\n\nexport const F_CONNECTION_WAYPOINTS = new InjectionToken<FConnectionWaypointsBase>(\n  'F_CONNECTION_WAYPOINTS',\n);\n\nexport abstract class FConnectionWaypointsBase {\n  public readonly hostElement = inject(ElementRef<SVGElement>).nativeElement;\n\n  public readonly candidates = signal<IPoint[]>([]);\n\n  public abstract waypoints: ModelSignal<IPoint[]>;\n  public abstract radius: Signal<number>;\n  public abstract visibility: Signal<boolean>;\n\n  private _activeIndex = 0;\n  private _waypoints: IPoint[] = [];\n\n  public insert(candidate: IPoint): void {\n    const current = this.waypoints().slice();\n\n    this._activeIndex = Math.max(0, Math.min(this.candidates().indexOf(candidate), current.length));\n\n    current.splice(this._activeIndex, 0, { ...candidate });\n    this.waypoints.set(current);\n    this._waypoints = current;\n  }\n\n  public select(waypoint: IPoint): void {\n    this._activeIndex = this.waypoints().findIndex((x) => PointExtensions.isEqual(waypoint, x));\n    this._waypoints = this.waypoints();\n  }\n\n  public move(point: IPoint): void {\n    this._waypoints[this._activeIndex] = { ...point };\n  }\n\n  public update(): void {\n    this.waypoints.set([...this._waypoints]);\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport function isPointerInsidePoint(point: IPoint, circleCenter: IPoint, radius: number): boolean {\n  return (point.x - circleCenter.x) ** 2 + (point.y - circleCenter.y) ** 2 <= radius ** 2;\n}\n","import { Signal } from '@angular/core';\nimport { IPoint } from '@foblex/2d';\nimport { isPointerInsidePoint } from './is-pointer-inside-point';\nimport { FConnectionWaypointsBase } from '../models';\n\nexport function findWaypointCandidate(\n  connection: { fWaypoints: Signal<FConnectionWaypointsBase | undefined> },\n  position: IPoint,\n): IPoint | undefined {\n  const component = connection.fWaypoints();\n  const radius = component?.radius() || 8;\n\n  return component?.candidates().find((x) => isPointerInsidePoint(position, x, radius));\n}\n","import { IPoint } from '@foblex/2d';\nimport { FConnectionWaypointsBase } from '../models';\nimport { Signal } from '@angular/core';\nimport { isPointerInsidePoint } from './is-pointer-inside-point';\n\nexport function findExistingWaypoint(\n  connection: { fWaypoints: Signal<FConnectionWaypointsBase | undefined> },\n  position: IPoint,\n): IPoint | undefined {\n  const component = connection.fWaypoints();\n  const radius = component?.radius() || 8;\n\n  return component?.waypoints().find((x) => isPointerInsidePoint(position, x, radius));\n}\n","import { IPoint } from '@foblex/2d';\nimport { Signal } from '@angular/core';\n\nimport { FConnectionWaypointsBase } from '../models';\nimport { findWaypointCandidate } from './find-waypoint-candidate';\nimport { findExistingWaypoint } from './find-existing-waypoint';\n\nexport type WaypointPick<T> =\n  | { connection: T; waypoint: IPoint; candidate?: never }\n  | { connection: T; candidate: IPoint; waypoint?: never };\n\ntype HasWaypoints = {\n  fWaypoints: Signal<FConnectionWaypointsBase | undefined>;\n};\n\nexport function pickWaypoint<T extends HasWaypoints>(\n  connections: readonly T[],\n  position: IPoint,\n): WaypointPick<T> | undefined {\n  for (const connection of connections) {\n    const waypoint = findExistingWaypoint(connection, position);\n    if (waypoint && connection.fWaypoints()?.visibility()) {\n      return { connection, waypoint };\n    }\n\n    const candidate = findWaypointCandidate(connection, position);\n    if (candidate && connection.fWaypoints()?.visibility()) {\n      return { connection, candidate };\n    }\n  }\n\n  return undefined;\n}\n","import { InjectionToken, Signal } from '@angular/core';\nimport { EFConnectableSide } from '../enums';\nimport { EFConnectionBehavior, EFConnectionConnectableSide } from '../utils';\n\nexport const F_CONNECTION_COMPONENTS_PARENT = new InjectionToken<FConnectionComponentsParent>(\n  'F_CONNECTION_COMPONENTS_PARENT',\n);\n\nexport abstract class FConnectionComponentsParent {\n  public abstract fId: Signal<string>;\n\n  public abstract fOutputId: Signal<string>;\n\n  public abstract fInputId: Signal<string>;\n\n  public abstract fBehavior: EFConnectionBehavior;\n\n  public abstract _applyResolvedSidesToConnection(\n    sourceSide: EFConnectableSide,\n    targetSide: EFConnectableSide,\n  ): void;\n\n  public abstract fInputSide: Signal<EFConnectionConnectableSide>;\n\n  public abstract fOutputSide: Signal<EFConnectionConnectableSide>;\n}\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  effect,\n  inject,\n  Injector,\n  input,\n  model,\n  numberAttribute,\n  OnDestroy,\n  OnInit,\n  untracked,\n} from '@angular/core';\nimport { F_CONNECTION_WAYPOINTS, FConnectionWaypointsBase } from './models';\nimport { IPoint } from '@foblex/2d';\nimport { EmitConnectionsChangesRequest } from '../../../f-storage';\nimport { FMediator } from '@foblex/mediator';\nimport { F_CONNECTION_COMPONENTS_PARENT } from '../../models';\nimport { RemoveConnectionWaypointRequest } from '../../../domain';\n\n@Component({\n  selector: 'f-connection-waypoints',\n  templateUrl: './f-connection-waypoints.html',\n  styleUrls: ['./f-connection-waypoints.scss'],\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'f-component f-connection-waypoints',\n  },\n  providers: [{ provide: F_CONNECTION_WAYPOINTS, useExisting: FConnectionWaypoints }],\n})\nexport class FConnectionWaypoints extends FConnectionWaypointsBase implements OnInit, OnDestroy {\n  private readonly _mediator = inject(FMediator);\n  private readonly _injector = inject(Injector);\n  private readonly _connection = inject(F_CONNECTION_COMPONENTS_PARENT);\n\n  public override readonly radius = input(4, {\n    transform: numberAttribute,\n  });\n  public override readonly waypoints = model<IPoint[]>([]);\n\n  public override readonly visibility = input(true, {\n    transform: booleanAttribute,\n  });\n\n  public ngOnInit(): void {\n    this._listenChanges();\n  }\n\n  private _listenChanges(): void {\n    effect(\n      () => {\n        this.radius();\n        this.waypoints();\n        this.visibility();\n        untracked(() => this._notifyDataChanged());\n      },\n      { injector: this._injector },\n    );\n  }\n\n  private _notifyDataChanged(): void {\n    this._mediator.execute(new EmitConnectionsChangesRequest());\n  }\n\n  protected remove(index: number, event: MouseEvent): void {\n    this._mediator.execute(new RemoveConnectionWaypointRequest(index, this._connection.fId()));\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  public ngOnDestroy(): void {\n    this._notifyDataChanged();\n  }\n}\n","@if (visibility()) {\n  <svg xmlns=\"http://www.w3.org/2000/svg\">\n    <g>\n      @for (candidate of candidates(); track $index) {\n        <circle\n          [attr.r]=\"radius()\"\n          class=\"f-candidate\"\n          [attr.cx]=\"candidate.x\"\n          [attr.cy]=\"candidate.y\"\n        ></circle>\n      }\n      @for (point of waypoints(); track $index) {\n        <circle\n          [attr.r]=\"radius()\"\n          (contextmenu)=\"remove($index, $event)\"\n          class=\"f-waypoint\"\n          [attr.cx]=\"point.x\"\n          [attr.cy]=\"point.y\"\n        ></circle>\n      }\n    </g>\n  </svg>\n}\n\n","export enum EFMarkerType {\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  START_ALL_STATES = 'f-connection-marker-start-all-states',\n\n  END_ALL_STATES = 'f-connection-marker-end-all-states',\n}\n","import { ElementRef, inject, InjectionToken, signal } from '@angular/core';\nimport { EFMarkerType } from '../enums';\n\nexport const F_CONNECTION_MARKER = new InjectionToken<FConnectionMarkerBase>('F_CONNECTION_MARKER');\n\nlet uniqueId = 0;\n\nexport abstract class FConnectionMarkerBase {\n  public readonly fId = signal<string>(`f-marker-${uniqueId++}`);\n\n  public readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n  public abstract markerElement: SVGElement;\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 get type(): EFMarkerType;\n\n  public abstract orient: 'auto' | 'auto-start-reverse' | string;\n\n  public abstract markerUnits: 'strokeWidth' | 'userSpaceOnUse';\n}\n","import { EFMarkerType } from '../enums';\n\nexport function coerceMarkerType(\n  value: unknown,\n  fallbackValue: EFMarkerType = EFMarkerType.START,\n): EFMarkerType {\n  if (typeof value !== 'string') {\n    return fallbackValue;\n  }\n\n  const normalizedValue = value.trim().toLowerCase();\n  if (!normalizedValue) {\n    return fallbackValue;\n  }\n\n  return mapMarkerTypeAlias(normalizedValue) ?? fallbackValue;\n}\n\nfunction mapMarkerTypeAlias(value: string): EFMarkerType | null {\n  switch (value) {\n    case 'start':\n    case 'f-connection-marker-start':\n      return EFMarkerType.START;\n\n    case 'end':\n    case 'f-connection-marker-end':\n      return EFMarkerType.END;\n\n    case 'selected-start':\n    case 'f-connection-selected-marker-start':\n      return EFMarkerType.SELECTED_START;\n\n    case 'selected-end':\n    case 'f-connection-selected-marker-end':\n      return EFMarkerType.SELECTED_END;\n\n    case 'start-all-states':\n    case 'f-connection-marker-start-all-states':\n    case 'start-all':\n    case 'all-start':\n      return EFMarkerType.START_ALL_STATES;\n\n    case 'end-all-states':\n    case 'f-connection-marker-end-all-states':\n    case 'end-all':\n    case 'all-end':\n      return EFMarkerType.END_ALL_STATES;\n\n    default:\n      return null;\n  }\n}\n","import { Component, ElementRef, input, viewChild } from '@angular/core';\nimport { EFMarkerType } from '../enums';\nimport { F_CONNECTION_MARKER, FConnectionMarkerBase } from '../models';\nimport { coerceMarkerType } from '../utils';\n\n@Component({\n  selector: 'f-connection-marker-arrow',\n  standalone: true,\n  template: `\n    <svg #markerElement viewBox=\"0 0 6 6\" class=\"f-marker\">\n      <svg:path d=\"M0,0 L6,3 0,6Z\" />\n    </svg>\n  `,\n  host: {\n    class: 'f-component',\n    style: 'display: none;',\n  },\n  providers: [{ provide: F_CONNECTION_MARKER, useExisting: FConnectionMarkerArrow }],\n})\nexport class FConnectionMarkerArrow extends FConnectionMarkerBase {\n  private readonly _markerElement = viewChild.required<ElementRef<SVGSVGElement>>('markerElement');\n\n  public readonly _type = input(EFMarkerType.END_ALL_STATES, {\n    alias: 'type',\n    transform: (value: unknown) => coerceMarkerType(value, EFMarkerType.END_ALL_STATES),\n  });\n\n  public override get markerElement(): SVGSVGElement {\n    return this._markerElement().nativeElement;\n  }\n\n  public override width = 6;\n\n  public override height = 7;\n\n  public override refX = 5.5;\n\n  public override refY = 3.5;\n\n  public override get type(): EFMarkerType {\n    return this._type();\n  }\n\n  public override orient: 'auto' | 'auto-start-reverse' | string = 'auto';\n\n  public override markerUnits: 'strokeWidth' | 'userSpaceOnUse' = 'strokeWidth';\n}\n","import { Component, ElementRef, input, viewChild } from '@angular/core';\nimport { EFMarkerType } from '../enums';\nimport { F_CONNECTION_MARKER, FConnectionMarkerBase } from '../models';\nimport { coerceMarkerType } from '../utils';\n\n@Component({\n  selector: 'f-connection-marker-circle',\n  standalone: true,\n  template: `\n    <svg #markerElement viewBox=\"0 0 10 10\" class=\"f-marker\">\n      <svg:circle cx=\"5\" cy=\"5\" r=\"5\" />\n    </svg>\n  `,\n  host: {\n    class: 'f-component',\n    style: 'display: none;',\n  },\n  providers: [{ provide: F_CONNECTION_MARKER, useExisting: FConnectionMarkerCircle }],\n})\nexport class FConnectionMarkerCircle extends FConnectionMarkerBase {\n  private readonly _markerElement = viewChild.required<ElementRef<SVGSVGElement>>('markerElement');\n\n  public readonly _type = input(EFMarkerType.START_ALL_STATES, {\n    alias: 'type',\n    transform: (value: unknown) => coerceMarkerType(value, EFMarkerType.START_ALL_STATES),\n  });\n\n  public override get markerElement(): SVGSVGElement {\n    return this._markerElement().nativeElement;\n  }\n\n  public override width = 5;\n\n  public override height = 5;\n\n  public override refX = 2.5;\n\n  public override refY = 2.5;\n\n  public override get type(): EFMarkerType {\n    return this._type();\n  }\n\n  public override orient: 'auto' | 'auto-start-reverse' | string = 'auto';\n\n  public override markerUnits: 'strokeWidth' | 'userSpaceOnUse' = 'strokeWidth';\n}\n","import { Directive, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FMediator } from '@foblex/mediator';\nimport { F_CONNECTION_MARKER, FConnectionMarkerBase } from './models';\nimport { EFMarkerType } from './enums';\nimport { coerceMarkerType } from './utils';\nimport {\n  AddConnectionMarkerToStoreRequest,\n  RemoveConnectionMarkerFromStoreRequest,\n} from '../../../domain';\n\n@Directive({\n  standalone: false,\n  selector: 'svg[fMarker]',\n  host: {\n    class: 'f-component f-marker',\n  },\n  providers: [{ provide: F_CONNECTION_MARKER, useExisting: FConnectionMarker }],\n})\nexport class FConnectionMarker extends FConnectionMarkerBase implements OnInit, OnDestroy {\n  private readonly _mediator = inject(FMediator);\n\n  public override markerElement: SVGElement = this.hostElement as unknown as SVGElement;\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({ transform: (value: unknown) => coerceMarkerType(value, EFMarkerType.START) })\n  public override type: EFMarkerType = 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","export enum EFConnectionBehavior {\n  FIXED = 'fixed',\n\n  FIXED_CENTER = 'fixed_center',\n\n  FLOATING = 'floating',\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 { ILine } from '@foblex/2d';\nimport { ICalculateBehaviorRequest } from '../models';\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 }: ICalculateBehaviorRequest): ILine {\n  return {\n    point1: sourceRect.gravityCenter,\n    point2: targetRect.gravityCenter,\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","export enum EFConnectionType {\n  SEGMENT = 'segment',\n\n  STRAIGHT = 'straight',\n\n  BEZIER = 'bezier',\n\n  ADAPTIVE_CURVE = 'adaptive-curve',\n}\n","import { ILine, IPoint, IRect } from '@foblex/2d';\nimport { ICalculateBehaviorRequest } from '../models';\nimport { EFConnectableSide } from '../../../enums';\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}: ICalculateBehaviorRequest): 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 { GetIntersections, IPoint, IRoundedRect, RoundedRect } from '@foblex/2d';\nimport { IConnectionEndpointRotationContext } from '../models';\n\nexport function getRotatedRoundedRectIntersection(\n  from: IPoint,\n  to: IPoint,\n  rect: IRoundedRect,\n  rotationContext?: IConnectionEndpointRotationContext,\n): IPoint | undefined {\n  if (!rotationContext || !rotationContext.rotationDeg) {\n    return GetIntersections.getRoundedRectIntersections(from, to, rect)[0];\n  }\n\n  const localFrom = _rotatePoint(from, -rotationContext.rotationDeg, rotationContext.pivot);\n  const localTo = _rotatePoint(to, -rotationContext.rotationDeg, rotationContext.pivot);\n  const localRect = _rotateRect(rect, -rotationContext.rotationDeg, rotationContext.pivot);\n  const intersection = GetIntersections.getRoundedRectIntersections(\n    localFrom,\n    localTo,\n    localRect,\n  )[0];\n\n  return intersection\n    ? _rotatePoint(intersection, rotationContext.rotationDeg, rotationContext.pivot)\n    : undefined;\n}\n\nfunction _rotateRect(rect: IRoundedRect, rotationDeg: number, pivot: IPoint): IRoundedRect {\n  const center = _rotatePoint(_getRectCenter(rect), rotationDeg, pivot);\n\n  return new RoundedRect(\n    center.x - rect.width / 2,\n    center.y - rect.height / 2,\n    rect.width,\n    rect.height,\n    rect.radius1,\n    rect.radius2,\n    rect.radius3,\n    rect.radius4,\n  );\n}\n\nfunction _getRectCenter(rect: IRoundedRect): IPoint {\n  return {\n    x: rect.x + rect.width / 2,\n    y: rect.y + rect.height / 2,\n  };\n}\n\nfunction _rotatePoint(point: IPoint, rotationDeg: number, pivot: IPoint): IPoint {\n  const translatedX = point.x - pivot.x;\n  const translatedY = point.y - pivot.y;\n\n  const theta = (rotationDeg * Math.PI) / 180;\n  const cosTheta = Math.cos(theta);\n  const sinTheta = Math.sin(theta);\n\n  return {\n    x: translatedX * cosTheta - translatedY * sinTheta + pivot.x,\n    y: translatedX * sinTheta + translatedY * cosTheta + pivot.y,\n  };\n}\n","import { ILine, IPoint, IRoundedRect } from '@foblex/2d';\nimport { ICalculateBehaviorRequest } from '../models';\nimport { getRotatedRoundedRectIntersection } from './get-rotated-rounded-rect-intersection';\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({\n  sourceRect,\n  targetRect,\n  sourceRotationContext,\n  targetRotationContext,\n}: ICalculateBehaviorRequest): ILine {\n  return _getIntersectionsLine(\n    _fromRoundedRectIntersections(sourceRect, targetRect, sourceRotationContext),\n    _toRoundedRectIntersections(sourceRect, targetRect, targetRotationContext),\n    sourceRect,\n    targetRect,\n  );\n}\n\nfunction _fromRoundedRectIntersections(\n  sourceRect: IRoundedRect,\n  targetRect: IRoundedRect,\n  rotationContext: ICalculateBehaviorRequest['sourceRotationContext'],\n) {\n  return getRotatedRoundedRectIntersection(\n    sourceRect.gravityCenter,\n    targetRect.gravityCenter,\n    sourceRect,\n    rotationContext,\n  );\n}\n\nfunction _toRoundedRectIntersections(\n  sourceRect: IRoundedRect,\n  targetRect: IRoundedRect,\n  rotationContext: ICalculateBehaviorRequest['targetRotationContext'],\n) {\n  return getRotatedRoundedRectIntersection(\n    targetRect.gravityCenter,\n    sourceRect.gravityCenter,\n    targetRect,\n    rotationContext,\n  );\n}\n\nfunction _getIntersectionsLine(\n  from: IPoint | undefined,\n  to: IPoint | undefined,\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 { ConnectionBehaviourBuilderRequest } from './connection-behaviour-builder-request';\nimport { ILine } from '@foblex/2d';\nimport { fixedCenterBehavior, fixedOutboundBehavior, floatingBehavior } from './utils';\nimport { EFConnectionBehavior, EFConnectionConnectableSide } from './enums';\nimport { EFConnectableSide } from '../../enums';\nimport { ICalculateBehaviorRequest } from './models';\nimport { Injectable } from '@angular/core';\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: ICalculateBehaviorRequest) => 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()\nexport class ConnectionBehaviourBuilder {\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: ConnectionBehaviourBuilderRequest): 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      sourceRotationContext: request.sourceRotationContext,\n      targetRotationContext: request.targetRotationContext,\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: ConnectionBehaviourBuilderRequest,\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: ConnectionBehaviourBuilderRequest,\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","import { IRoundedRect } from '@foblex/2d';\nimport { EFConnectableSide } from '../../enums';\nimport { FConnectionComponentsParent } from '../../models';\nimport { IConnectionEndpointRotationContext } from './models';\n\nexport class ConnectionBehaviourBuilderRequest {\n  constructor(\n    public readonly sourceRect: IRoundedRect,\n    public readonly targetRect: IRoundedRect,\n    public readonly connection: FConnectionComponentsParent,\n    public readonly sourceConnectableSide: EFConnectableSide,\n    public readonly targetConnectableSide: EFConnectableSide,\n    public readonly sourceRotationContext?: IConnectionEndpointRotationContext,\n    public readonly targetRotationContext?: IConnectionEndpointRotationContext,\n  ) {}\n}\n","import { IPoint } from '@foblex/2d';\n\nexport function buildConnectionAnchors(\n  source: IPoint,\n  target: IPoint,\n  waypoints?: IPoint[],\n): IPoint[] {\n  return [source, ...(waypoints ?? []), target];\n}\n","import { IPoint } from '@foblex/2d';\n\nexport function calculateCenterBetweenPoints(source: IPoint, target: IPoint): IPoint {\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 { x: centerX, y: centerY };\n}\n","import { IPoint } from '@foblex/2d';\n\n/**\n * Uniformly samples a cubic Bézier segment.\n *\n * @param points - Start point, First control point, Second control point, 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 */\nexport function sampleCubicBezierUniform(points: IPoint[], samples = 32): IPoint[] {\n  const out: IPoint[] = new Array(samples + 1);\n  out[0] = { ...points[0] };\n  for (let i = 1; i <= samples; i++) {\n    out[i] = cubicBezierAtT(points[0], points[1], points[2], points[3], i / samples);\n  }\n\n  return out;\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 */\nexport function cubicBezierAtT(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","import { ICubicSegment } from './multi-cubic';\nimport { cubicBezierAtT } from './sample-cubic-bezier-uniform';\nimport { IPoint } from '@foblex/2d';\n\nexport function calculateCurveCandidates(segments: ICubicSegment[]): IPoint[] {\n  return segments.map((s) => {\n    return cubicBezierAtT(s.p0, s.c1, s.c2, s.p3, 0.5);\n  });\n}\n","import { IPoint } from '@foblex/2d';\n\nexport function calculatePolylineCandidates(\n  polyline: IPoint[],\n): IPoint[] {\n  if (polyline.length < 2) {\n    throw new Error('Polylines must be at least two points');\n  }\n\n  const total = polylineTotalLength(polyline);\n  if (total <= 0) {\n    return [{ ...polyline[0] }];\n  }\n\n  const mid = pointAtPolylineLength(polyline, total / 2);\n\n  return [mid];\n}\n\nfunction polylineTotalLength(points: IPoint[]): number {\n  let len = 0;\n  for (let i = 0; i < points.length - 1; i++) {\n    len += dist(points[i], points[i + 1]);\n  }\n\n  return len;\n}\n\nfunction pointAtPolylineLength(points: IPoint[], s: number): IPoint {\n  let acc = 0;\n\n  for (let i = 0; i < points.length - 1; i++) {\n    const a = points[i];\n    const b = points[i + 1];\n    const segLen = dist(a, b);\n\n    if (segLen <= 0) continue;\n\n    if (acc + segLen >= s) {\n      const t = (s - acc) / segLen;\n\n      return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };\n    }\n\n    acc += segLen;\n  }\n\n  const last = points[points.length - 1];\n\n  return { x: last.x, y: last.y };\n}\n\nfunction dist(a: IPoint, b: IPoint): number {\n  return Math.hypot(b.x - a.x, b.y - a.y);\n}\n","import { IPoint } from '@foblex/2d';\n\nexport function mergePointChains(chains: IPoint[][]): IPoint[] {\n  const out: IPoint[] = [];\n  for (const chain of chains) {\n    for (const p of chain) {\n      const last = out[out.length - 1];\n      if (!last || last.x !== p.x || last.y !== p.y) out.push(p);\n    }\n  }\n\n  return out;\n}\n","import { IPoint } from '@foblex/2d';\nimport { sampleCubicBezierUniform } from './sample-cubic-bezier-uniform';\n\nexport interface ICubicSegment {\n  p0: IPoint;\n  c1: IPoint;\n  c2: IPoint;\n  p3: IPoint;\n  chainIndex: number;\n}\n\nexport function createMultiCubicPath(segments: ICubicSegment[]): string {\n  if (!segments.length) return '';\n  let d = `M ${segments[0].p0.x} ${segments[0].p0.y}`;\n\n  for (let i = 0; i < segments.length; i++) {\n    const s = segments[i];\n    const isLast = i === segments.length - 1;\n\n    const x = isLast ? s.p3.x + 0.0002 : s.p3.x;\n    const y = isLast ? s.p3.y + 0.0002 : s.p3.y;\n\n    d += ` C ${s.c1.x} ${s.c1.y}, ${s.c2.x} ${s.c2.y}, ${x} ${y}`;\n  }\n\n  return d;\n}\n\nexport function sampleMultiCubicUniform(\n  segments: ICubicSegment[],\n  samplesPerSegment = 16,\n): IPoint[] {\n  if (!segments.length) return [];\n  const out: IPoint[] = [];\n\n  for (let i = 0; i < segments.length; i++) {\n    const s = segments[i];\n    const pts = sampleCubicBezierUniform([s.p0, s.c1, s.c2, s.p3], samplesPerSegment);\n\n    if (i > 0) pts.shift();\n    out.push(...pts);\n  }\n\n  return out;\n}\n","import { IPoint } from '@foblex/2d';\n\nexport function normalizePolyline(points: IPoint[], eps = 1e-6): IPoint[] {\n  const n = points.length;\n  if (n <= 2) return points;\n\n  const tmp: IPoint[] = [];\n  tmp.push(points[0]);\n\n  for (let i = 1; i < n; i++) {\n    const p = points[i];\n    const last = tmp[tmp.length - 1];\n\n    if (Math.abs(p.x - last.x) > eps || Math.abs(p.y - last.y) > eps) {\n      tmp.push(p);\n    }\n  }\n\n  if (tmp.length <= 2) return tmp;\n\n  const out: IPoint[] = [];\n  out.push(tmp[0]);\n\n  for (let i = 1; i < tmp.length - 1; i++) {\n    const a = out[out.length - 1];\n    const b = tmp[i];\n    const c = tmp[i + 1];\n\n    const collinearX = Math.abs(a.x - b.x) <= eps && Math.abs(b.x - c.x) <= eps;\n    const collinearY = Math.abs(a.y - b.y) <= eps && Math.abs(b.y - c.y) <= eps;\n\n    if (!collinearX && !collinearY) out.push(b);\n  }\n\n  out.push(tmp[tmp.length - 1]);\n\n  return out;\n}\n","import { IPoint } from '@foblex/2d';\nimport {\n  buildConnectionAnchors,\n  calculateCurveCandidates,\n  createMultiCubicPath,\n  ICubicSegment,\n  sampleMultiCubicUniform,\n} from '../utils';\nimport {\n  IFConnectionBuilder,\n  IFConnectionBuilderRequest,\n  IFConnectionBuilderResponse,\n} from '../../models';\nimport { EFConnectableSide } from '../../../../enums';\n\nexport class CalculateAdaptiveCurveData implements IFConnectionBuilder {\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      case EFConnectableSide.AUTO:\n        return { x: 0, y: 0 };\n    }\n\n    return { x: 0, y: 0 };\n  }\n\n  private static _isHorizontal(side: EFConnectableSide): boolean {\n    return side === EFConnectableSide.LEFT || side === EFConnectableSide.RIGHT;\n  }\n\n  private static _handleLength(\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\n    const along =\n      side === EFConnectableSide.AUTO ? Math.max(dx, dy) : this._isHorizontal(side) ? dx : dy;\n\n    const MIN = Math.max(8, offset);\n    const MAX = offset + 0.5 * d;\n    const len = offset * 1.05 + along * 0.3;\n\n    return Math.min(MAX, Math.max(MIN, len));\n  }\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    if (side === EFConnectableSide.AUTO) {\n      return { x: source.x + tx * handle, y: source.y + ty * handle };\n    }\n\n    const dot = v.x * tx + v.y * ty;\n\n    const baseBlend = 0.12;\n    const extra = Math.max(0, -dot) * 0.08;\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  public handle({\n    source,\n    sourceSide,\n    target,\n    targetSide,\n    offset,\n    waypoints,\n  }: IFConnectionBuilderRequest): IFConnectionBuilderResponse {\n    const clampedOffset = Math.max(0, offset ?? 0);\n\n    const anchors = buildConnectionAnchors(source, target, waypoints);\n\n    const segments: ICubicSegment[] = [];\n\n    for (let i = 0; i < anchors.length - 1; i++) {\n      const a = anchors[i];\n      const b = anchors[i + 1];\n\n      const h0 = CalculateAdaptiveCurveData._handleLength(a, b, sourceSide, clampedOffset);\n      const h3 = CalculateAdaptiveCurveData._handleLength(b, a, targetSide, clampedOffset);\n\n      const c1 = CalculateAdaptiveCurveData._softControl(sourceSide, a, b, h0);\n      const c2 = CalculateAdaptiveCurveData._softControl(targetSide, b, a, h3);\n\n      segments.push({ p0: a, c1, c2, p3: b, chainIndex: i });\n    }\n\n    const points = sampleMultiCubicUniform(segments, 12);\n\n    return {\n      path: createMultiCubicPath(segments),\n      secondPoint: segments[0]?.c1 ?? source,\n      penultimatePoint: segments[segments.length - 1]?.c2 ?? target,\n      points,\n      candidates: calculateCurveCandidates(segments),\n    };\n  }\n}\n","import { IPoint } from '@foblex/2d';\nimport {\n  buildConnectionAnchors,\n  calculateCurveCandidates,\n  createMultiCubicPath,\n  ICubicSegment,\n  sampleMultiCubicUniform,\n} from '../utils';\nimport {\n  IFConnectionBuilder,\n  IFConnectionBuilderRequest,\n  IFConnectionBuilderResponse,\n} from '../../models';\nimport { EFConnectableSide } from '../../../../enums';\n\nexport class CalculateBezierCurveData implements IFConnectionBuilder {\n  public handle({\n    source,\n    sourceSide,\n    target,\n    targetSide,\n    offset,\n    waypoints,\n  }: IFConnectionBuilderRequest): IFConnectionBuilderResponse {\n    const anchors = buildConnectionAnchors(source, target, waypoints);\n\n    const segments: ICubicSegment[] = [];\n\n    for (let i = 0; i < anchors.length - 1; i++) {\n      const a = anchors[i];\n      const b = anchors[i + 1];\n\n      const c1 = getAnglePoint(sourceSide, a, b, offset ?? 0);\n      const c2 = getAnglePoint(targetSide, b, a, offset ?? 0);\n\n      segments.push({ p0: a, c1, c2, p3: b, chainIndex: i });\n    }\n\n    const points = sampleMultiCubicUniform(segments, 12);\n\n    return {\n      path: createMultiCubicPath(segments),\n      secondPoint: segments[0]?.c1 ?? source,\n      penultimatePoint: segments[segments.length - 1]?.c2 ?? target,\n      points,\n      candidates: calculateCurveCandidates(segments),\n    };\n  }\n}\n\nfunction 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 -= getConnectorOffset(source.x - target.x, offset);\n      break;\n    case EFConnectableSide.RIGHT:\n      result.x += getConnectorOffset(target.x - source.x, offset);\n      break;\n    case EFConnectableSide.TOP:\n      result.y -= getConnectorOffset(source.y - target.y, offset);\n      break;\n    case EFConnectableSide.BOTTOM:\n      result.y += getConnectorOffset(target.y - source.y, offset);\n      break;\n    case EFConnectableSide.AUTO:\n      break;\n  }\n\n  return result;\n}\n\nfunction getConnectorOffset(distance: number, offset: number): number {\n  if (distance >= offset) return distance;\n\n  return offset * Math.sqrt(offset - distance);\n}\n","import { IPoint } from '@foblex/2d';\nimport { EFConnectableSide } from '../../../../enums';\n\nexport function buildCornerMidPointsAndApplyOffsets(params: {\n  axis: 'x' | 'y';\n  source: IPoint;\n  target: IPoint;\n\n  sourceSide: EFConnectableSide;\n  targetSide: EFConnectableSide;\n\n  sourceGap: IPoint;\n  targetGap: IPoint;\n\n  sourceDir: IPoint;\n  targetDir: IPoint;\n\n  currentDir: number;\n  offset: number;\n\n  sourceGapOffset: IPoint;\n  targetGapOffset: IPoint;\n}): IPoint[] {\n  const {\n    axis,\n    source,\n    target,\n    sourceSide,\n    targetSide,\n    sourceGap,\n    targetGap,\n    sourceDir,\n    targetDir,\n    currentDir,\n    offset,\n    sourceGapOffset,\n    targetGapOffset,\n  } = params;\n\n  const corners = buildCornerPoints(sourceGap, targetGap);\n\n  let midPoints = pickCornerByDirection(axis, sourceDir, currentDir, corners);\n\n  if (sourceSide === targetSide) {\n    applySameSideGapOffsetFix(\n      axis,\n      source,\n      target,\n      offset,\n      sourceDir,\n      currentDir,\n      sourceGap,\n      targetGap,\n      sourceGapOffset,\n      targetGapOffset,\n    );\n  } else {\n    midPoints = maybeFlipCornerForDifferentSides(\n      axis,\n      sourceDir,\n      targetDir,\n      sourceGap,\n      targetGap,\n      corners,\n      midPoints,\n    );\n  }\n\n  return midPoints;\n}\n\nfunction buildCornerPoints(\n  sourceGap: IPoint,\n  targetGap: IPoint,\n): { sourceTarget: IPoint[]; targetSource: IPoint[] } {\n  return {\n    sourceTarget: [{ x: sourceGap.x, y: targetGap.y }],\n    targetSource: [{ x: targetGap.x, y: sourceGap.y }],\n  };\n}\n\nfunction pickCornerByDirection(\n  axis: 'x' | 'y',\n  sourceDir: IPoint,\n  currentDir: number,\n  corners: { sourceTarget: IPoint[]; targetSource: IPoint[] },\n): IPoint[] {\n  if (axis === 'x') {\n    return sourceDir.x === currentDir ? corners.targetSource : corners.sourceTarget;\n  }\n\n  return sourceDir.y === currentDir ? corners.sourceTarget : corners.targetSource;\n}\n\nfunction applySameSideGapOffsetFix(\n  axis: 'x' | 'y',\n  source: IPoint,\n  target: IPoint,\n  offset: number,\n  sourceDir: IPoint,\n  currentDir: number,\n  sourceGap: IPoint,\n  targetGap: IPoint,\n  sourceGapOffset: IPoint,\n  targetGapOffset: IPoint,\n): void {\n  const diff = Math.abs(source[axis] - target[axis]);\n  if (diff > offset) return;\n\n  const gapOffset = Math.min(offset - 1, offset - diff);\n  if (gapOffset <= 0) return;\n\n  if (sourceDir[axis] === currentDir) {\n    sourceGapOffset[axis] = (sourceGap[axis] > source[axis] ? -1 : 1) * gapOffset;\n  } else {\n    targetGapOffset[axis] = (targetGap[axis] > target[axis] ? -1 : 1) * gapOffset;\n  }\n}\n\nfunction maybeFlipCornerForDifferentSides(\n  axis: 'x' | 'y',\n  sourceDir: IPoint,\n  targetDir: IPoint,\n  sourceGap: IPoint,\n  targetGap: IPoint,\n  corners: { sourceTarget: IPoint[]; targetSource: IPoint[] },\n  currentPicked: IPoint[],\n): IPoint[] {\n  const opp = axis === 'x' ? 'y' : 'x';\n\n  const isSameDir = sourceDir[axis] === targetDir[opp];\n  const sourceGt = sourceGap[opp] > targetGap[opp];\n  const sourceLt = sourceGap[opp] < targetGap[opp];\n\n  const flip =\n    (sourceDir[axis] === 1 && ((!isSameDir && sourceGt) || (isSameDir && sourceLt))) ||\n    (sourceDir[axis] !== 1 && ((!isSameDir && sourceLt) || (isSameDir && sourceGt)));\n\n  if (!flip) return currentPicked;\n\n  return axis === 'x' ? corners.sourceTarget : corners.targetSource;\n}\n","import { IPoint } from '@foblex/2d';\n\nconst EPS = 1e-6;\nconst END_EPS = 0.0002;\nconst MIN_VISIBLE = 0.75;\n\nexport function createSegmentLinePath(points: IPoint[], borderRadius: number): string {\n  const n = points.length;\n  const parts: string[] = [];\n  parts.push(`M ${points[0].x} ${points[0].y}`);\n\n  for (let i = 1; i < n - 1; i++) {\n    parts.push(getBend(points[i - 1], points[i], points[i + 1], borderRadius));\n  }\n\n  const last = points[n - 1];\n  parts.push(`L ${last.x + END_EPS} ${last.y + END_EPS}`);\n\n  return parts.join(' ');\n}\n\nfunction getBend(a: IPoint, b: IPoint, c: IPoint, size: number): string {\n  const x = b.x;\n  const y = b.y;\n\n  if (size <= 0) {\n    return `L ${x} ${y}`;\n  }\n\n  const collinearX = Math.abs(a.x - x) <= EPS && Math.abs(x - c.x) <= EPS;\n  const collinearY = Math.abs(a.y - y) <= EPS && Math.abs(y - c.y) <= EPS;\n  if (collinearX || collinearY) {\n    return `L ${x} ${y}`;\n  }\n\n  const ab = Math.hypot(x - a.x, y - a.y);\n  const bc = Math.hypot(c.x - x, c.y - y);\n\n  const bendSize = Math.min(ab * 0.5, bc * 0.5, size);\n\n  if (bendSize < MIN_VISIBLE) {\n    return `L ${x} ${y}`;\n  }\n\n  const incomingHorizontal = Math.abs(a.y - y) <= EPS;\n\n  if (incomingHorizontal) {\n    const xDir = a.x < c.x ? -1 : 1;\n    const yDir = a.y < c.y ? 1 : -1;\n\n    const lx = x + bendSize * xDir;\n    const qy = y + bendSize * yDir;\n\n    return `L ${lx} ${y} Q ${x} ${y} ${x} ${qy}`;\n  }\n\n  const xDir = a.x < c.x ? 1 : -1;\n  const yDir = a.y < c.y ? -1 : 1;\n\n  const ly = y + bendSize * yDir;\n  const qx = x + bendSize * xDir;\n\n  return `L ${x} ${ly} Q ${x} ${y} ${qx} ${y}`;\n}\n","import { IPoint, PointExtensions } from '@foblex/2d';\nimport {\n  buildConnectionAnchors,\n  calculateCenterBetweenPoints,\n  calculatePolylineCandidates,\n  mergePointChains,\n  normalizePolyline,\n} from '../utils';\nimport { createSegmentLinePath } from './create-segment-line-path';\nimport {\n  IFConnectionBuilder,\n  IFConnectionBuilderRequest,\n  IFConnectionBuilderResponse,\n} from '../../models';\nimport { EFConnectableSide } from '../../../../enums';\nimport { buildCornerMidPointsAndApplyOffsets } from './build-corner-mid-points-and-apply-offsets';\n\nconst CONNECTOR_SIDE_POINT: Record<string, 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 CalculateSegmentLineData implements IFConnectionBuilder {\n  public handle({\n    source,\n    sourceSide,\n    target,\n    targetSide,\n    waypoints,\n    offset,\n    radius,\n  }: IFConnectionBuilderRequest): IFConnectionBuilderResponse {\n    const anchors = buildConnectionAnchors(source, target, waypoints);\n\n    const chains: IPoint[][] = [];\n    const candidates: IPoint[] = [];\n\n    for (let i = 0; i < anchors.length - 1; i++) {\n      const a = anchors[i];\n      const b = anchors[i + 1];\n\n      const points = this._getPathPoints(a, sourceSide, b, targetSide, offset ?? 0);\n\n      chains.push(points);\n      candidates.push(...calculatePolylineCandidates(points));\n    }\n\n    const polyline = normalizePolyline(mergePointChains(chains));\n\n    const penultimatePoint = polyline.length > 1 ? polyline[polyline.length - 2] : source;\n    const secondPoint = polyline.length > 1 ? polyline[1] : target;\n\n    return {\n      path: createSegmentLinePath(polyline, radius ?? 0),\n      penultimatePoint,\n      secondPoint,\n      points: polyline,\n      candidates,\n    };\n  }\n\n  private _getPathPoints(\n    source: IPoint,\n    sourceSide: EFConnectableSide,\n    target: IPoint,\n    targetSide: EFConnectableSide,\n    offset: number,\n  ): 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: 'x' | 'y' = 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 = calculateCenterBetweenPoints(source, target);\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      points = buildCornerMidPointsAndApplyOffsets({\n        axis: directionAccessor,\n        source,\n        target,\n        sourceSide,\n        targetSide,\n        sourceGap,\n        targetGap,\n        sourceDir: sourceDirection,\n        targetDir: targetDirection,\n        currentDir: currentDirection,\n        offset,\n        sourceGapOffset,\n        targetGapOffset,\n      });\n    }\n\n    return [\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\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","import {\n  IFConnectionBuilder,\n  IFConnectionBuilderRequest,\n  IFConnectionBuilderResponse,\n} from '../../models';\nimport { buildConnectionAnchors } from '../utils';\nimport { IPoint } from '@foblex/2d';\n\nconst EPS = 0.0002;\n\nexport class CalculateStraightLineData implements IFConnectionBuilder {\n  public handle(request: IFConnectionBuilderRequest): IFConnectionBuilderResponse {\n    const anchors = buildConnectionAnchors(request.source, request.target, request.waypoints);\n\n    const n = anchors.length;\n\n    const p0 = anchors[0];\n    let d = `M ${p0.x} ${p0.y}`;\n\n    const candidates: IPoint[] = new Array(n - 1);\n\n    for (let i = 0; i < n - 1; i++) {\n      const a = anchors[i];\n      const b = anchors[i + 1];\n\n      const isLast = i === n - 2;\n      const bx = isLast ? b.x + EPS : b.x;\n      const by = isLast ? b.y + EPS : b.y;\n\n      d += ` L ${bx} ${by}`;\n\n      candidates[i] = { x: (a.x + b.x) * 0.5, y: (a.y + b.y) * 0.5 };\n    }\n\n    return {\n      path: d,\n      candidates,\n      points: anchors,\n      secondPoint: anchors[1] ?? request.target,\n      penultimatePoint: anchors[n - 2] ?? request.source,\n    };\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { IFConnectionBuilder } from '../models';\n\nexport type IConnectionBuilders = Record<string, IFConnectionBuilder>;\n\nexport const F_CONNECTION_BUILDERS = new InjectionToken<IConnectionBuilders>(\n  'F_CONNECTION_BUILDERS',\n);\n","import { IFConnectionBuilderResponse, IFConnectionBuilder } from './models';\nimport {\n  CalculateAdaptiveCurveData,\n  CalculateBezierCurveData,\n  CalculateSegmentLineData,\n  CalculateStraightLineData,\n} from './builders';\nimport { ConnectionLineBuilderRequest } from './connection-line-builder-request';\nimport { inject, Injectable } from '@angular/core';\nimport { F_CONNECTION_BUILDERS } from './providers';\nimport { EFConnectionType } from '../../enums';\n\n@Injectable()\nexport class ConnectionLineBuilder {\n  private readonly _builtinBuilders: Record<string, IFConnectionBuilder> = {\n    [EFConnectionType.STRAIGHT]: new CalculateStraightLineData(),\n    [EFConnectionType.BEZIER]: new CalculateBezierCurveData(),\n    [EFConnectionType.ADAPTIVE_CURVE]: new CalculateAdaptiveCurveData(),\n    [EFConnectionType.SEGMENT]: new CalculateSegmentLineData(),\n  };\n\n  private readonly _providedBuilders: Record<string, IFConnectionBuilder>;\n  private readonly _builders: Record<string, IFConnectionBuilder>;\n\n  constructor() {\n    this._providedBuilders = inject(F_CONNECTION_BUILDERS, { optional: true }) || {};\n    this._builders = {\n      ...this._builtinBuilders,\n      ...this._providedBuilders,\n    };\n  }\n\n  public handle({ type, payload }: ConnectionLineBuilderRequest): IFConnectionBuilderResponse {\n    const builder = this._builders[type];\n    if (!builder) {\n      throw this._createBuilderNotFoundError(type);\n    }\n\n    return builder.handle(payload);\n  }\n\n  private _createBuilderNotFoundError(requestedType: string): Error {\n    const builtinTypes = Object.keys(this._builtinBuilders).sort();\n    const providedTypes = Object.keys(this._providedBuilders).sort();\n    const registeredTypes = Object.keys(this._builders).sort();\n\n    const overriddenBuiltins = builtinTypes.filter((t) => t in this._providedBuilders).sort();\n\n    const lines = [\n      `Connection Builder Error: builder type \"${requestedType}\" not found.`,\n      `Registered types: ${registeredTypes.length ? registeredTypes.join(', ') : '(none)'}`,\n      `Built-in types: ${builtinTypes.length ? builtinTypes.join(', ') : '(none)'}`,\n      `Provided (F_CONNECTION_BUILDERS) types: ${providedTypes.length ? providedTypes.join(', ') : '(none)'}`,\n      overriddenBuiltins.length ? `Overridden built-ins: ${overriddenBuiltins.join(', ')}` : null,\n      `Tip: ensure you pass a valid Connection Type or provide a builder via F_CONNECTION_BUILDERS.`,\n    ].filter(Boolean);\n\n    return new Error(lines.join('\\n'));\n  }\n}\n","import { IFConnectionBuilderRequest } from './models';\nimport { EFConnectionType } from '../../enums';\n\nexport class ConnectionLineBuilderRequest {\n  constructor(\n    public readonly type: string | EFConnectionType,\n    public readonly payload: IFConnectionBuilderRequest,\n  ) {}\n}\n","import { normalizeDomElementId } from '@foblex/utils';\n\nexport function createConnectionDomIdentifier(\n  componentId: string,\n  sourceId: string,\n  targetId: string,\n): string {\n  return normalizeDomElementId('connection_' + componentId + sourceId + targetId);\n}\n","import { normalizeDomElementId } from '@foblex/utils';\n\nexport function createConnectionSelectionDomIdentifier(\n  componentId: string,\n  sourceId: string,\n  targetId: string,\n): string {\n  return normalizeDomElementId('connection_for_selection_' + componentId + sourceId + targetId);\n}\n","import { normalizeDomElementId } from '@foblex/utils';\n\nexport function createGradientDomIdentifier(componentId: string): string {\n  return normalizeDomElementId('connection_gradient_' + componentId);\n}\n","import { createGradientDomIdentifier } from './create-gradient-dom-identifier';\n\nexport function createGradientDomUrl(componentId: string): string {\n  return `url(#${createGradientDomIdentifier(componentId)})`;\n}\n","import {\n  computed,\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  InputSignal,\n  OnInit,\n  untracked,\n} from '@angular/core';\nimport { ILine, Point } from '@foblex/2d';\nimport { F_CONNECTION_COMPONENTS_PARENT } from '../../../../../models';\nimport { createGradientDomIdentifier } from '../../../../../utils';\nimport { FConnectionGradientBase } from '../../../models';\n\n@Directive({})\nexport abstract class FConnectionGradientRendererBase implements OnInit {\n  private readonly _connection = inject(F_CONNECTION_COMPONENTS_PARENT);\n  private readonly _hostElement = inject(ElementRef<SVGLinearGradientElement>).nativeElement;\n  private readonly _injector = inject(Injector);\n  private readonly _hostAttributes = new Map<string, string>();\n  private _startColor?: string;\n  private _endColor?: string;\n\n  public abstract gradient: InputSignal<FConnectionGradientBase>;\n\n  public readonly gradientId = computed(() => createGradientDomIdentifier(this._connection.fId()));\n\n  public ngOnInit(): void {\n    this._listenColorChanges();\n  }\n\n  private _listenColorChanges(): void {\n    effect(\n      () => {\n        this.gradient().fStartColor();\n        this.gradient().fEndColor();\n        untracked(() => {\n          this._updateGradient();\n        });\n      },\n      { injector: this._injector },\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 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._setHostAttribute('x1', from.x.toString());\n    this._setHostAttribute('y1', from.y.toString());\n\n    const to = new Point(0.5 + (0.5 * x) / distance, 0.5 + (0.5 * y) / distance);\n    this._setHostAttribute('x2', to.x.toString());\n    this._setHostAttribute('y2', to.y.toString());\n    this._updateGradient();\n  }\n\n  private _updateGradient(): void {\n    const gradient = this.gradient();\n    this._setFromColor(gradient.fStartColor());\n    this._setToColor(gradient.fEndColor());\n  }\n\n  private _setFromColor(color: string | undefined): void {\n    const nextColor = color || 'transparent';\n    if (this._startColor === nextColor) {\n      return;\n    }\n    this._startColor = nextColor;\n    this.stop1Element.setAttribute('stop-color', nextColor);\n    this.stop1Element.style.setProperty('stop-color', nextColor);\n  }\n\n  private _setToColor(color: string | undefined): void {\n    const nextColor = color || 'transparent';\n    if (this._endColor === nextColor) {\n      return;\n    }\n    this._endColor = nextColor;\n    this.stop2Element.setAttribute('stop-color', nextColor);\n    this.stop2Element.style.setProperty('stop-color', nextColor);\n  }\n\n  private _setHostAttribute(name: string, value: string): void {\n    if (this._hostAttributes.get(name) === value) {\n      return;\n    }\n    this._hostAttributes.set(name, value);\n    this._hostElement.setAttribute(name, value);\n  }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FConnectionGradientRendererBase } from './models';\nimport { FConnectionGradientBase } from '../../models';\n\n@Component({\n  selector: 'linearGradient[fConnectionGradientRenderer]',\n  templateUrl: './f-connection-gradient-renderer.html',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[attr.id]': 'gradientId()',\n  },\n})\nexport class FConnectionGradientRenderer extends FConnectionGradientRendererBase {\n  public override readonly gradient = input.required<FConnectionGradientBase>({\n    alias: 'fConnectionGradientRendererFor',\n  });\n}\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n  <svg:stop offset=\"0%\" />\n  <svg:stop offset=\"100%\" />\n</ng-container>\n","import { InjectionToken, Signal } from '@angular/core';\n\nexport const F_CONNECTION_GRADIENT = new InjectionToken<FConnectionGradientBase>(\n  'F_CONNECTION_GRADIENT',\n);\n\nexport abstract class FConnectionGradientBase {\n  public abstract fStartColor: Signal<string>;\n  public abstract fEndColor: Signal<string>;\n}\n","import { Component, input } from '@angular/core';\nimport { F_CONNECTION_GRADIENT, FConnectionGradientBase } from './models';\n\n@Component({\n  selector: 'f-connection-gradient',\n  template: '',\n  standalone: true,\n  host: {\n    style: 'display: none;',\n  },\n  providers: [{ provide: F_CONNECTION_GRADIENT, useExisting: FConnectionGradient }],\n})\nexport class FConnectionGradient extends FConnectionGradientBase {\n  public override readonly fStartColor = input.required<string>();\n  public override readonly fEndColor = input.required<string>();\n}\n","import { ElementRef, inject, InjectionToken } from '@angular/core';\n\nexport const F_CONNECTION_PATH = new InjectionToken<FConnectionPathBase>('F_CONNECTION_PATH');\n\nexport abstract class FConnectionPathBase {\n  public readonly hostElement = inject(ElementRef<SVGPathElement>).nativeElement;\n\n  public abstract initialize(): void;\n\n  public abstract setPath(path: string): void;\n\n  public abstract select(): void;\n\n  public abstract deselect(): void;\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { normalizeDomElementId } from '@foblex/utils';\nimport { F_CONNECTION_PATH, FConnectionPathBase } from './models';\nimport { createConnectionDomIdentifier, createGradientDomUrl } from '../../utils';\nimport { F_CONNECTION_COMPONENTS_PARENT } from '../../models';\n\n@Component({\n  standalone: false,\n  selector: 'path[f-connection-path]',\n  template: '',\n  styleUrls: ['./f-connection-path.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    '[style.stroke]': 'linkToGradient()',\n  },\n  providers: [\n    {\n      provide: F_CONNECTION_PATH,\n      useExisting: FConnectionPath,\n    },\n  ],\n})\nexport class FConnectionPath extends FConnectionPathBase {\n  private readonly _connection = inject(F_CONNECTION_COMPONENTS_PARENT);\n\n  public readonly useGradient = input(false);\n  public readonly linkToGradient = computed<string | null>(() => {\n    if (!this.useGradient()) {\n      return null;\n    }\n\n    return createGradientDomUrl(this._connection.fId());\n  });\n\n  public get fPathId(): string {\n    return this._connection.fId();\n  }\n\n  public get attrConnectionId(): string {\n    return createConnectionDomIdentifier(\n      this._connection.fId(),\n      this._connection.fOutputId(),\n      this._connection.fInputId(),\n    );\n  }\n\n  public override initialize(): void {\n    this.deselect();\n  }\n\n  public override setPath(path: string): void {\n    this.hostElement.setAttribute('d', `${path}`);\n  }\n\n  public override select(): void {\n    this.hostElement.setAttribute(\n      'marker-start',\n      `url(#${getMarkerSelectedStartId(this._connection.fId())})`,\n    );\n    this.hostElement.setAttribute(\n      'marker-end',\n      `url(#${getMarkerSelectedEndId(this._connection.fId())})`,\n    );\n  }\n\n  public override deselect(): void {\n    this.hostElement.setAttribute(\n      'marker-start',\n      `url(#${getMarkerStartId(this._connection.fId())})`,\n    );\n    this.hostElement.setAttribute('marker-end', `url(#${getMarkerEndId(this._connection.fId())})`);\n  }\n}\n\nfunction getMarkerStartId(fConnectionId: string): string {\n  return normalizeDomElementId(`f-connection-marker-start-${fConnectionId}`);\n}\n\nfunction getMarkerEndId(fConnectionId: string): string {\n  return normalizeDomElementId(`f-connection-marker-end-${fConnectionId}`);\n}\n\nfunction getMarkerSelectedStartId(fConnectionId: string): string {\n  return normalizeDomElementId(`f-connection-selected-marker-start-${fConnectionId}`);\n}\n\nfunction getMarkerSelectedEndId(fConnectionId: string): string {\n  return normalizeDomElementId(`f-connection-selected-marker-end-${fConnectionId}`);\n}\n","import { ElementRef, inject, InjectionToken } from '@angular/core';\n\nexport const F_CONNECTION_SELECTION = new InjectionToken<FConnectionSelectionBase>(\n  'F_CONNECTION_SELECTION',\n);\n\nexport abstract class FConnectionSelectionBase {\n  public readonly hostElement = inject(ElementRef<SVGPathElement>).nativeElement;\n\n  public abstract setPath(path: string): void;\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { F_CONNECTION_SELECTION, FConnectionSelectionBase } from './models';\nimport { createConnectionSelectionDomIdentifier } from '../../utils';\nimport { F_CONNECTION_COMPONENTS_PARENT } from '../../models';\n\n@Component({\n  standalone: false,\n  selector: 'path[fConnectionSelection]',\n  template: '',\n  styleUrls: ['./f-connection-selection.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'f-component f-connection-selection',\n    '[attr.id]': 'connectionForSelectionId',\n  },\n  providers: [\n    {\n      provide: F_CONNECTION_SELECTION,\n      useExisting: FConnectionSelection,\n    },\n  ],\n})\nexport class FConnectionSelection extends FConnectionSelectionBase {\n  private readonly _connection = inject(F_CONNECTION_COMPONENTS_PARENT);\n\n  public get connectionForSelectionId(): string {\n    return createConnectionSelectionDomIdentifier(\n      this._connection.fId(),\n      this._connection.fOutputId(),\n      this._connection.fInputId(),\n    );\n  }\n\n  public override setPath(path: string) {\n    this.hostElement.setAttribute('d', `${path}`);\n  }\n}\n","import { ElementRef, inject, InjectionToken } from '@angular/core';\nimport { IPoint, PointExtensions } from '@foblex/2d';\n\nexport const F_CONNECTION_DRAG_HANDLE_END = new InjectionToken<FConnectionDragHandleBase>(\n  'F_CONNECTION_DRAG_HANDLE_END',\n);\n\nexport const F_CONNECTION_DRAG_HANDLE_START = new InjectionToken<FConnectionDragHandleBase>(\n  'F_CONNECTION_DRAG_HANDLE_START',\n);\n\nexport abstract class FConnectionDragHandleBase {\n  public readonly hostElement = inject(ElementRef).nativeElement;\n\n  public point = PointExtensions.initialize();\n\n  protected readonly class = 'f-connection-drag-handle';\n\n  public abstract redraw(penultimatePoint: IPoint, startPoint: IPoint): void;\n\n  protected 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","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { IPoint } from '@foblex/2d';\nimport { F_CONNECTION_DRAG_HANDLE_START, FConnectionDragHandleBase } from './models';\n\n@Component({\n  standalone: false,\n  selector: 'circle[f-connection-drag-handle-start]',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class]': 'class',\n  },\n  providers: [\n    {\n      provide: F_CONNECTION_DRAG_HANDLE_START,\n      useExisting: FConnectionDragHandleStart,\n    },\n  ],\n})\nexport class FConnectionDragHandleStart extends FConnectionDragHandleBase {\n  public override 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","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { IPoint } from '@foblex/2d';\nimport { F_CONNECTION_DRAG_HANDLE_END, FConnectionDragHandleBase } from './models';\n\n@Component({\n  standalone: false,\n  selector: 'circle[f-connection-drag-handle-end]',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class]': 'class',\n  },\n  providers: [\n    {\n      provide: F_CONNECTION_DRAG_HANDLE_END,\n      useExisting: FConnectionDragHandleEnd,\n    },\n  ],\n})\nexport class FConnectionDragHandleEnd extends FConnectionDragHandleBase {\n  public override 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","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  contentChild,\n  contentChildren,\n  Directive,\n  ElementRef,\n  inject,\n  signal,\n  Signal,\n  viewChild,\n} from '@angular/core';\nimport { ILine, IPoint, LineExtensions, PointExtensions } from '@foblex/2d';\nimport {\n  ICanChangeVisibility,\n  ISelectable,\n  mixinChangeSelection,\n  mixinChangeVisibility,\n} from '../../mixins';\nimport { ConnectionLineBuilder, EFConnectionBehavior, EFConnectionConnectableSide } from '../utils';\nimport { EFConnectableSide, EFConnectionType } from '../enums';\nimport { F_CONNECTION_PATH } from './connection-path';\nimport {\n  F_CONNECTION_DRAG_HANDLE_END,\n  F_CONNECTION_DRAG_HANDLE_START,\n} from './connection-drag-handles';\nimport { F_CONNECTION_SELECTION } from './connection-selection';\nimport {\n  ConnectionContentLayoutEngine,\n  F_CONNECTION_CONTENT,\n  FConnectionContentBase,\n} from './connection-content';\nimport { F_CONNECTION_MARKER } from './connection-marker';\nimport { F_CONNECTION_WAYPOINTS } from './connection-waypoints';\nimport { F_CONNECTION_GRADIENT, FConnectionGradientRenderer } from './connection-gradient';\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 ISelectable, ICanChangeVisibility\n{\n  private readonly _fConnectionBuilder = inject(ConnectionLineBuilder);\n\n  public abstract override fId: Signal<string>;\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(F_CONNECTION_PATH);\n\n  public readonly fDragHandleStart = viewChild(F_CONNECTION_DRAG_HANDLE_START);\n\n  public readonly fDragHandleEnd = viewChild.required(F_CONNECTION_DRAG_HANDLE_END);\n\n  public readonly fSelection = viewChild.required(F_CONNECTION_SELECTION);\n\n  public readonly fContents = contentChildren(F_CONNECTION_CONTENT, {\n    descendants: true,\n  });\n\n  public readonly fMarkers = contentChildren(F_CONNECTION_MARKER, {\n    descendants: true,\n  });\n\n  public readonly fGradient = contentChild(F_CONNECTION_GRADIENT);\n\n  private readonly _fGradientRenderer = viewChild(FConnectionGradientRenderer);\n\n  public readonly fWaypoints = contentChild(F_CONNECTION_WAYPOINTS);\n\n  public readonly fInputSide: Signal<EFConnectionConnectableSide> = signal(\n    EFConnectionConnectableSide.DEFAULT,\n  );\n\n  private readonly _contentLayoutEngine = new ConnectionContentLayoutEngine();\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.redraw();\n    this.isSelected() ? this.markChildrenAsSelected() : this.unmarkChildrenAsSelected();\n  }\n\n  public isContains(element: HTMLElement | SVGElement): boolean {\n    return (\n      (this.hostElement.firstChild?.lastChild as HTMLElement).contains(element) ||\n      Array.from(this.fContents()?.values() ?? []).some((x) => x.hostElement?.contains(element)) ||\n      this.fWaypoints()?.hostElement?.contains(element)\n    );\n  }\n\n  public setLine({ point1, point2 }: ILine): void {\n    this.line = LineExtensions.initialize(point1, point2);\n\n    const { path, points, penultimatePoint, secondPoint, candidates } = this._getPathResult(\n      point1,\n      point2,\n    );\n\n    this.path = path;\n    this._penultimatePoint = penultimatePoint || point1;\n    this._secondPoint = secondPoint || point2;\n    this.fWaypoints()?.candidates.set(candidates || []);\n\n    this._contentLayoutEngine.layout(points || [], this._contents());\n  }\n\n  private _contents(): FConnectionContentBase[] {\n    return Array.from(this.fContents()?.values() ?? []);\n  }\n\n  private _getPathResult(source: IPoint, target: IPoint) {\n    return this._fConnectionBuilder.handle({\n      type: this.fType,\n      payload: {\n        source,\n        sourceSide: this._sourceSide,\n        target,\n        targetSide: this._targetSide,\n        radius: this.fRadius,\n        offset: this.fOffset,\n        waypoints: this.fWaypoints()?.waypoints() || [],\n      },\n    });\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.fDragHandleEnd().redraw(this._penultimatePoint, this.line.point2);\n    this.fDragHandleStart()?.redraw(this._secondPoint, this.line.point1);\n    this._fGradientRenderer()?.redraw(this.line);\n  }\n\n  public getResolvedSides(): { sourceSide: EFConnectableSide; targetSide: EFConnectableSide } {\n    return {\n      sourceSide: this._sourceSide,\n      targetSide: this._targetSide,\n    };\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","import { inject, Injectable } from '@angular/core';\nimport { CreateConnectionMarkersRequest } from './create-connection-markers-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { BrowserService } from '@foblex/platform';\nimport { normalizeDomElementId } from '@foblex/utils';\nimport { FConnectionBase, FConnectionMarkerBase } from '../../../f-connection-v2';\nimport { EFMarkerType } from '../../../f-connection-v2';\n\n/**\n * Execution that creates connection markers for a given connection.\n */\n@Injectable()\n@FExecutionRegister(CreateConnectionMarkersRequest)\nexport class CreateConnectionMarkers\n  implements IExecution<CreateConnectionMarkersRequest, boolean>\n{\n  private readonly _browser = inject(BrowserService);\n  private readonly _markerCache = new WeakMap<\n    FConnectionBase,\n    { signature: string; defsElement: SVGDefsElement }\n  >();\n\n  public handle({ connection }: CreateConnectionMarkersRequest): boolean {\n    const markers = this._findConnectionMarkers(connection);\n    const defs = connection.fDefs();\n    if (!defs) {\n      return false;\n    }\n\n    const signature = createConnectionMarkersSignature(markers);\n    const cached = this._markerCache.get(connection);\n    if (cached?.signature === signature && cached.defsElement === defs.nativeElement) {\n      return false;\n    }\n\n    const element = createSVGElement('defs', this._browser);\n\n    markers.forEach((marker) => {\n      resolveMarkerTypes(marker.type).forEach((type) => {\n        const markerElement = createMarkerElement(type, marker, connection.fId(), this._browser);\n\n        const clone = marker.markerElement.cloneNode(true) as SVGElement;\n        clone.setAttribute('height', `${marker.height}`);\n        clone.setAttribute('width', `${marker.width}`);\n        clone.removeAttribute('markerUnits');\n        clone.style.display = 'unset';\n        markerElement.append(clone);\n\n        element.append(markerElement);\n      });\n    });\n\n    defs.nativeElement.innerHTML = element.innerHTML;\n    this._markerCache.set(connection, {\n      signature,\n      defsElement: defs.nativeElement,\n    });\n    this._makeSafariCompatible(connection);\n\n    return true;\n  }\n\n  public _findConnectionMarkers(connection: FConnectionBase): FConnectionMarkerBase[] {\n    return Array.from(connection.fMarkers() ?? []);\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\nfunction createConnectionMarkersSignature(markers: readonly FConnectionMarkerBase[]): string {\n  return markers\n    .map((marker) =>\n      [\n        ...resolveMarkerTypes(marker.type),\n        marker.width,\n        marker.height,\n        marker.refX,\n        marker.refY,\n        marker.orient,\n        marker.markerUnits,\n        marker.markerElement.outerHTML,\n      ].join('|'),\n    )\n    .join('||');\n}\n\nfunction createMarkerElement(\n  type: string,\n  marker: FConnectionMarkerBase,\n  connectionId: string,\n  browser: BrowserService,\n): SVGElement {\n  const markerElement = createSVGElement('marker', browser);\n\n  markerElement.setAttribute('id', normalizeDomElementId(type + '-' + connectionId));\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\nfunction resolveMarkerTypes(type: EFMarkerType): string[] {\n  switch (type) {\n    case EFMarkerType.START:\n      return [EFMarkerType.START];\n\n    case EFMarkerType.END:\n      return [EFMarkerType.END];\n\n    case EFMarkerType.SELECTED_START:\n      return [EFMarkerType.SELECTED_START];\n\n    case EFMarkerType.SELECTED_END:\n      return [EFMarkerType.SELECTED_END];\n\n    case EFMarkerType.START_ALL_STATES:\n      return [EFMarkerType.START, EFMarkerType.SELECTED_START];\n\n    case EFMarkerType.END_ALL_STATES:\n      return [EFMarkerType.END, EFMarkerType.SELECTED_END];\n\n    default:\n      return [];\n  }\n}\n\nfunction createSVGElement<K extends keyof SVGElementTagNameMap>(\n  tag: K,\n  fBrowser: BrowserService,\n): SVGElementTagNameMap[K] {\n  return fBrowser.document.createElementNS('http://www.w3.org/2000/svg', tag);\n}\n","import { Injectable } from '@angular/core';\nimport { FConnectorBase } from '../../../../f-connectors';\n\n@Injectable()\nexport class ConnectionRedrawState {\n  public renderTicket = 0;\n\n  private readonly _connectedInPreviousRender = new Set<FConnectorBase>();\n\n  public beginRender(): number {\n    return ++this.renderTicket;\n  }\n\n  public resetConnectedConnectors(): void {\n    for (const connector of this._connectedInPreviousRender) {\n      connector.resetConnected();\n    }\n\n    this._connectedInPreviousRender.clear();\n  }\n\n  public trackConnectedConnectors(source: FConnectorBase, target: FConnectorBase): void {\n    this._connectedInPreviousRender.add(source);\n    this._connectedInPreviousRender.add(target);\n  }\n}\n","type TConnectionWorkerUrlApi = Pick<typeof URL, 'createObjectURL' | 'revokeObjectURL'>;\n\ntype TConnectionWorkerRuntime = {\n  blobCtor: typeof Blob;\n  workerCtor: typeof Worker;\n  urlApi: TConnectionWorkerUrlApi;\n};\n\nconst F_CONNECTION_WORKER_SOURCE = String.raw`\nconst EPSILON = 0.5;\n\naddEventListener('message', (event) => {\n  const data = event?.data;\n  const requestId = data?.requestId;\n  const items = Array.isArray(data?.items) ? data.items : [];\n\n  try {\n    const results = items.map((item) => calculateItem(item));\n    postMessage({ requestId, results });\n  } catch (error) {\n    const message = error instanceof Error ? error.message : 'Connection worker failed.';\n    postMessage({ requestId, error: message });\n  }\n});\n\nfunction calculateItem(item) {\n  const sourceCenterX = item.sourceRect.x + item.sourceRect.width / 2;\n  const sourceCenterY = item.sourceRect.y + item.sourceRect.height / 2;\n  const targetCenterX = item.targetRect.x + item.targetRect.width / 2;\n  const targetCenterY = item.targetRect.y + item.targetRect.height / 2;\n\n  const sourceSide = resolveConnectableSide(\n    item.outputSide,\n    targetCenterX - sourceCenterX,\n    targetCenterY - sourceCenterY,\n    item.sourceConnectableSide,\n  );\n\n  const targetSide = resolveConnectableSide(\n    item.inputSide,\n    sourceCenterX - targetCenterX,\n    sourceCenterY - targetCenterY,\n    item.targetConnectableSide,\n  );\n\n  if (item.behavior === 'fixed_center') {\n    return {\n      originalIndex: item.originalIndex,\n      supported: true,\n      sourceSide,\n      targetSide,\n      line: {\n        point1: { x: sourceCenterX, y: sourceCenterY },\n        point2: { x: targetCenterX, y: targetCenterY },\n      },\n    };\n  }\n\n  if (item.sourceRotation || item.targetRotation) {\n    return { originalIndex: item.originalIndex, supported: false };\n  }\n\n  if (item.behavior !== 'fixed') {\n    if (item.behavior !== 'floating') {\n      return { originalIndex: item.originalIndex, supported: false };\n    }\n\n    if (hasRoundedCorners(item.sourceRect) || hasRoundedCorners(item.targetRect)) {\n      return { originalIndex: item.originalIndex, supported: false };\n    }\n\n    return {\n      originalIndex: item.originalIndex,\n      supported: true,\n      sourceSide,\n      targetSide,\n      line: buildFloatingLine(item.sourceRect, item.targetRect),\n    };\n  }\n\n  const line = buildFixedLine(item.sourceRect, item.targetRect, sourceSide, targetSide);\n  if (!line) {\n    return { originalIndex: item.originalIndex, supported: false };\n  }\n\n  return {\n    originalIndex: item.originalIndex,\n    supported: true,\n    sourceSide,\n    targetSide,\n    line,\n  };\n}\n\nfunction resolveConnectableSide(requestedSide, deltaX, deltaY, fallbackSide) {\n  if (requestedSide === 'default') {\n    return fallbackSide;\n  }\n\n  const absX = Math.abs(deltaX);\n  const absY = Math.abs(deltaY);\n  const nearZero = absX < EPSILON && absY < EPSILON;\n\n  if (nearZero) {\n    return fallbackSide;\n  }\n\n  const horizontalDominant = absX >= absY;\n\n  switch (requestedSide) {\n    case 'calculate':\n      return horizontalDominant ? (deltaX >= 0 ? 'right' : 'left') : deltaY >= 0 ? 'bottom' : 'top';\n\n    case 'calculate_horizontal':\n      if (absX < EPSILON) {\n        return fallbackSide;\n      }\n\n      return deltaX >= 0 ? 'right' : 'left';\n\n    case 'calculate_vertical':\n      if (absY < EPSILON) {\n        return fallbackSide;\n      }\n\n      return deltaY >= 0 ? 'bottom' : 'top';\n\n    case 'top':\n    case 'bottom':\n    case 'left':\n    case 'right':\n      return requestedSide;\n\n    default:\n      return fallbackSide;\n  }\n}\n\nfunction buildFixedLine(sourceRect, targetRect, sourceSide, targetSide) {\n  const sourceAnchor = sourceSide === 'auto' ? 'bottom' : sourceSide;\n  const targetAnchor = targetSide === 'auto' ? 'top' : targetSide;\n\n  const point1 = getSidePoint(sourceRect, sourceAnchor);\n  const point2 = getSidePoint(targetRect, targetAnchor);\n\n  if (!point1 || !point2) {\n    return null;\n  }\n\n  return { point1, point2 };\n}\n\nfunction buildFloatingLine(sourceRect, targetRect) {\n  const sourceCenter = getRectCenter(sourceRect);\n  const targetCenter = getRectCenter(targetRect);\n\n  return {\n    point1: getRectBorderIntersection(sourceRect, sourceCenter, targetCenter),\n    point2: getRectBorderIntersection(targetRect, targetCenter, sourceCenter),\n  };\n}\n\nfunction hasRoundedCorners(rect) {\n  return !!(rect.radius1 || rect.radius2 || rect.radius3 || rect.radius4);\n}\n\nfunction getRectCenter(rect) {\n  return {\n    x: rect.x + rect.width / 2,\n    y: rect.y + rect.height / 2,\n  };\n}\n\nfunction getRectBorderIntersection(rect, from, to) {\n  const halfWidth = rect.width / 2;\n  const halfHeight = rect.height / 2;\n  const center = getRectCenter(rect);\n\n  const dx = to.x - from.x;\n  const dy = to.y - from.y;\n\n  if (Math.abs(dx) < EPSILON && Math.abs(dy) < EPSILON) {\n    return center;\n  }\n\n  const scaleX = Math.abs(dx) < EPSILON ? Number.POSITIVE_INFINITY : halfWidth / Math.abs(dx);\n  const scaleY = Math.abs(dy) < EPSILON ? Number.POSITIVE_INFINITY : halfHeight / Math.abs(dy);\n  const scale = Math.min(scaleX, scaleY);\n\n  return {\n    x: center.x + dx * scale,\n    y: center.y + dy * scale,\n  };\n}\n\nfunction getSidePoint(rect, side) {\n  const centerX = rect.x + rect.width / 2;\n  const centerY = rect.y + rect.height / 2;\n\n  switch (side) {\n    case 'top':\n      return { x: centerX, y: rect.y };\n\n    case 'right':\n      return { x: rect.x + rect.width, y: centerY };\n\n    case 'bottom':\n      return { x: centerX, y: rect.y + rect.height };\n\n    case 'left':\n      return { x: rect.x, y: centerY };\n\n    default:\n      return null;\n  }\n}\n`.trim();\n\nexport function isConnectionWorkerRuntimeSupported(windowRef: Window | null | undefined): boolean {\n  return !!resolveConnectionWorkerRuntime(windowRef);\n}\n\nexport function resolveConnectionWorkerRuntime(\n  windowRef: Window | null | undefined,\n): TConnectionWorkerRuntime | null {\n  const runtimeWindow = windowRef as Partial<Window & typeof globalThis> | null | undefined;\n  const blobCtor = runtimeWindow?.Blob;\n  const workerCtor = runtimeWindow?.Worker;\n  const urlApi = runtimeWindow?.URL;\n  if (!blobCtor || !workerCtor) {\n    return null;\n  }\n\n  if (\n    typeof urlApi?.createObjectURL !== 'function' ||\n    typeof urlApi.revokeObjectURL !== 'function'\n  ) {\n    return null;\n  }\n\n  return {\n    blobCtor,\n    workerCtor,\n    urlApi,\n  };\n}\n\nexport function createConnectionWorkerUrl(runtime: TConnectionWorkerRuntime): string {\n  const blob = new runtime.blobCtor([F_CONNECTION_WORKER_SOURCE], {\n    type: 'text/javascript',\n  });\n\n  return runtime.urlApi.createObjectURL(blob);\n}\n\nexport function revokeConnectionWorkerUrl(\n  workerUrl: string | null | undefined,\n  urlApi?: Pick<typeof URL, 'revokeObjectURL'> | null,\n): void {\n  if (!workerUrl) {\n    return;\n  }\n\n  const resolvedUrlApi = urlApi ?? (typeof URL === 'undefined' ? null : URL);\n  if (typeof resolvedUrlApi?.revokeObjectURL !== 'function') {\n    return;\n  }\n\n  resolvedUrlApi.revokeObjectURL(workerUrl);\n}\n","import { Injectable } from '@angular/core';\nimport { TConnectionWorkerPendingRequest } from './t-connection-worker-pending-request';\nimport { revokeConnectionWorkerUrl } from '../worker/runtime/connection-worker-runtime';\n\n@Injectable()\nexport class ConnectionWorkerState {\n  public worker: Worker | null = null;\n  public workerUrl: string | null = null;\n\n  public nextRequestId = 0;\n  public isDisabled = false;\n\n  public pending = new Map<number, TConnectionWorkerPendingRequest>();\n\n  public resetRuntime(error: Error): void {\n    this.pending.forEach((request) => request.reject(error));\n    this.pending.clear();\n\n    this.worker?.terminate();\n    this.worker = null;\n\n    revokeConnectionWorkerUrl(this.workerUrl);\n    this.workerUrl = null;\n  }\n\n  public dispose(): void {\n    this.resetRuntime(new Error('Connection worker was destroyed.'));\n  }\n}\n","import { ILine } from '@foblex/2d';\nimport { FConnectionBase } from '../../../../../f-connection-v2';\n\nexport class ApplyConnectionRenderRequest {\n  static readonly fToken = Symbol('ApplyConnectionRenderRequest');\n\n  constructor(\n    public connection: FConnectionBase,\n    public line: ILine,\n  ) {}\n}\n","import { ILine, IPoint } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { CreateConnectionMarkersRequest } from '../../../create-connection-markers';\nimport { FConnectionBase, FConnectionContentBase } from '../../../../../f-connection-v2';\nimport { ApplyConnectionRenderRequest } from './apply-connection-render-request';\n\n@Injectable()\n@FExecutionRegister(ApplyConnectionRenderRequest)\nexport class ApplyConnectionRender implements IExecution<ApplyConnectionRenderRequest, void> {\n  private readonly _mediator = inject(FMediator);\n\n  private readonly _renderCache = new WeakMap<\n    FConnectionBase,\n    { signature: string; pathElement: SVGElement }\n  >();\n\n  public handle({ connection, line }: ApplyConnectionRenderRequest): void {\n    const markersChanged = this._mediator.execute<boolean>(\n      new CreateConnectionMarkersRequest(connection),\n    );\n    if (!markersChanged && !this._shouldRender(connection, line)) {\n      return;\n    }\n\n    connection.setLine(line);\n    connection.initialize();\n  }\n\n  private _shouldRender(connection: FConnectionBase, line: ILine): boolean {\n    const pathElement = connection.fPath().hostElement;\n    const signature = this._createConnectionRenderSignature(connection, line);\n    const cached = this._renderCache.get(connection);\n    if (cached?.signature === signature && cached.pathElement === pathElement) {\n      return false;\n    }\n\n    this._renderCache.set(connection, { signature, pathElement });\n\n    return true;\n  }\n\n  private _createConnectionRenderSignature(connection: FConnectionBase, line: ILine): string {\n    const { sourceSide, targetSide } = connection.getResolvedSides();\n\n    return [\n      connection.fBehavior,\n      connection.fType,\n      connection.fRadius,\n      connection.fOffset,\n      connection.fReassignableStart(),\n      this._serializeContents([...(connection.fContents() || [])]),\n      sourceSide,\n      targetSide,\n      this._serializePoint(line.point1),\n      this._serializePoint(line.point2),\n      this._serializeWaypoints(connection.fWaypoints()?.waypoints() || []),\n    ].join('|');\n  }\n\n  private _serializePoint(point: IPoint): string {\n    return `${point.x}:${point.y}`;\n  }\n\n  private _serializeWaypoints(waypoints: IPoint[]): string {\n    return waypoints.map(this._serializePoint).join(';');\n  }\n\n  private _serializeContents(contents: FConnectionContentBase[]): string {\n    return contents\n      .map((content) => {\n        return [content.position(), content.offset(), content.align()].join(':');\n      })\n      .join(';');\n  }\n}\n","import { FConnectorBase } from '../../../../../f-connectors';\n\nexport class MarkConnectionConnectorsAsConnectedRequest {\n  static readonly fToken = Symbol('MarkConnectionConnectorsAsConnectedRequest');\n\n  constructor(\n    public source: FConnectorBase,\n    public target: FConnectorBase,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { MarkConnectionConnectorsAsConnectedRequest } from './mark-connection-connectors-as-connected-request';\nimport { ConnectionRedrawState } from '../../models';\n\n@Injectable()\n@FExecutionRegister(MarkConnectionConnectorsAsConnectedRequest)\nexport class MarkConnectionConnectorsAsConnected\n  implements IExecution<MarkConnectionConnectorsAsConnectedRequest, void>\n{\n  private readonly _state = inject(ConnectionRedrawState);\n\n  public handle({ source, target }: MarkConnectionConnectorsAsConnectedRequest): void {\n    source.setConnected(target);\n    target.setConnected(source);\n    this._state.trackConnectedConnectors(source, target);\n  }\n}\n","export class GetNormalizedConnectorRectRequest {\n  static readonly fToken = Symbol('GetNormalizedConnectorRectRequest');\n\n  constructor(\n    public readonly element: HTMLElement | SVGElement,\n    public readonly cache: boolean = true,\n  ) {}\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\nexport interface ICacheOptions {\n  enabled: boolean;\n}\n\nconst DEFAULT_CACHE_OPTIONS: ICacheOptions = {\n  enabled: false,\n};\n\nexport const F_CACHE_OPTIONS = new InjectionToken<ICacheOptions>('F_CACHE_OPTIONS', {\n  providedIn: 'root',\n  factory: () => ({\n    ...DEFAULT_CACHE_OPTIONS,\n  }),\n});\n\nexport function fProvideCache(options: Partial<ICacheOptions> = {}): Provider {\n  return {\n    provide: F_CACHE_OPTIONS,\n    useValue: {\n      ...DEFAULT_CACHE_OPTIONS,\n      ...options,\n    },\n  };\n}\n","export class RegisterFCacheConnectorRequest {\n  static readonly fToken = Symbol('RegisterFCacheConnectorRequest');\n\n  constructor(\n    public readonly id: string,\n    public readonly nodeId: string,\n    public readonly kind: string,\n    public readonly element: HTMLElement | SVGElement,\n  ) {}\n}\n","import { Injectable } from '@angular/core';\nimport { FCacheConnector } from './f-cache-connector';\nimport { FCacheConnectorKey } from './f-cache-connector-key';\nimport { FCacheNode } from './f-cache-node';\n\n@Injectable()\nexport class FCache {\n  public readonly nodeEntries = new Map<string, FCacheNode>();\n  public readonly nodeIdByElement = new WeakMap<Element, string>();\n\n  public readonly connectorEntries = new Map<FCacheConnectorKey, FCacheConnector>();\n  public readonly connectorKeysByNodeId = new Map<string, Set<FCacheConnectorKey>>();\n  public readonly connectorKeyByElement = new WeakMap<Element, FCacheConnectorKey>();\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { FCacheConnectorKey } from './f-cache-connector-key';\n\nexport class FCacheConnector {\n  constructor(\n    public readonly key: FCacheConnectorKey,\n    public readonly id: string,\n    public readonly kind: string,\n    public readonly nodeId: string,\n    public element: HTMLElement | SVGElement,\n    public rect?: IRoundedRect | null,\n  ) {}\n}\n","export type FCacheConnectorKey = string;\n\nexport class FCacheConnectorKeyFactory {\n  public static build(connectorId: string, kind: string): FCacheConnectorKey {\n    return `${connectorId}:${kind}`;\n  }\n}\n","import { IRect } from '@foblex/2d';\nimport { IFCacheNodeRef } from './i-f-cache-node-ref';\n\nexport class FCacheNode {\n  constructor(\n    public readonly id: string,\n    public readonly element: HTMLElement | SVGElement,\n    public readonly reference: IFCacheNodeRef,\n    public rect?: IRect | null,\n  ) {}\n}\n","export class InvalidateFCacheNodeRequest {\n  static readonly fToken = Symbol('InvalidateFCacheNodeRequest');\n\n  constructor(\n    public readonly nodeId: string,\n    public readonly reason: string = 'manual',\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { InvalidateFCacheNodeRequest } from './invalidate-node-request';\nimport { FCache } from '../../../model';\nimport { F_CACHE_OPTIONS } from '../../../config';\n\n@Injectable()\n@FExecutionRegister(InvalidateFCacheNodeRequest)\nexport class InvalidateFCacheNode implements IExecution<InvalidateFCacheNodeRequest, void> {\n  private readonly _store = inject(FCache);\n  private readonly _options = inject(F_CACHE_OPTIONS);\n\n  public handle({ nodeId, reason: _reason }: InvalidateFCacheNodeRequest): void {\n    if (!this._options.enabled) {\n      return;\n    }\n\n    const node = this._store.nodeEntries.get(nodeId);\n    if (!node) {\n      return;\n    }\n\n    node.rect = undefined;\n\n    const connectorKeys = this._store.connectorKeysByNodeId.get(nodeId);\n    if (!connectorKeys?.size) {\n      return;\n    }\n\n    for (const connectorKey of connectorKeys) {\n      const connector = this._store.connectorEntries.get(connectorKey);\n      if (connector) {\n        connector.rect = undefined;\n      }\n    }\n  }\n}\n","import { IFCacheNodeRef } from '../../../model';\n\nexport class RegisterFCacheNodeRequest {\n  static readonly fToken = Symbol('RegisterFCacheNodeRequest');\n\n  constructor(\n    public readonly id: string,\n    public readonly element: HTMLElement | SVGElement,\n    public readonly reference: IFCacheNodeRef,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { RegisterFCacheNodeRequest } from './register-node-request';\nimport { FCache, FCacheNode } from '../../../model';\nimport { F_CACHE_OPTIONS } from '../../../config';\n\n@Injectable()\n@FExecutionRegister(RegisterFCacheNodeRequest)\nexport class RegisterFCacheNode implements IExecution<RegisterFCacheNodeRequest, void> {\n  private readonly _store = inject(FCache);\n  private readonly _options = inject(F_CACHE_OPTIONS);\n\n  public handle({ id, element, reference }: RegisterFCacheNodeRequest): void {\n    if (!this._options.enabled) {\n      return;\n    }\n\n    const next = new FCacheNode(id, element, reference);\n\n    this._store.nodeEntries.set(id, next);\n    this._store.nodeIdByElement.set(element, id);\n\n    this._store.connectorKeysByNodeId.set(\n      id,\n      this._store.connectorKeysByNodeId.get(id) ?? new Set(),\n    );\n  }\n}\n","export class UnregisterFCacheNodeRequest {\n  static readonly fToken = Symbol('UnregisterFCacheNodeRequest');\n\n  constructor(public readonly id: string) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { UnregisterFCacheNodeRequest } from './unregister-node-request';\nimport { FCache } from '../../../model';\nimport { UnregisterFCacheConnectorRequest } from '../../f-cache-connectors';\nimport { F_CACHE_OPTIONS } from '../../../config';\n\n@Injectable()\n@FExecutionRegister(UnregisterFCacheNodeRequest)\nexport class UnregisterFCacheNode implements IExecution<UnregisterFCacheNodeRequest, void> {\n  private readonly _store = inject(FCache);\n  private readonly _mediator = inject(FMediator);\n  private readonly _options = inject(F_CACHE_OPTIONS);\n\n  public handle({ id }: UnregisterFCacheNodeRequest): void {\n    if (!this._options.enabled) {\n      return;\n    }\n\n    const entry = this._store.nodeEntries.get(id);\n    if (!entry) {\n      return;\n    }\n\n    this._store.nodeEntries.delete(id);\n    this._store.nodeIdByElement.delete(entry.element);\n\n    const connectorKeys = Array.from(this._store.connectorKeysByNodeId.get(id) ?? []);\n\n    for (const connectorKey of connectorKeys) {\n      const connector = this._store.connectorEntries.get(connectorKey);\n      if (!connector) {\n        continue;\n      }\n\n      this._mediator.execute(new UnregisterFCacheConnectorRequest(connector.id, connector.kind));\n    }\n\n    this._store.connectorKeysByNodeId.delete(id);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { RegisterFCacheConnectorRequest } from './register-connector-request';\nimport { FCache, FCacheConnector, FCacheConnectorKeyFactory } from '../../../model';\nimport { InvalidateFCacheNodeRequest } from '../../f-cache-nodes';\nimport { F_CACHE_OPTIONS } from '../../../config';\n\n@Injectable()\n@FExecutionRegister(RegisterFCacheConnectorRequest)\nexport class RegisterFCacheConnector implements IExecution<RegisterFCacheConnectorRequest, void> {\n  private readonly _store = inject(FCache);\n  private readonly _mediator = inject(FMediator);\n  private readonly _options = inject(F_CACHE_OPTIONS);\n\n  public handle({ id, nodeId, kind, element }: RegisterFCacheConnectorRequest): void {\n    if (!this._options.enabled) {\n      return;\n    }\n\n    const key = FCacheConnectorKeyFactory.build(id, kind);\n\n    const previous = this._store.connectorEntries.get(key);\n    if (previous) {\n      this._detachConnectorFromNode(previous.key, previous.nodeId);\n      this._store.connectorKeyByElement.delete(previous.element);\n    }\n\n    const next = new FCacheConnector(key, id, kind, nodeId, element);\n\n    this._store.connectorEntries.set(key, next);\n    this._store.connectorKeyByElement.set(element, key);\n\n    const connectorKeys = this._store.connectorKeysByNodeId.get(nodeId) ?? new Set();\n    connectorKeys.add(key);\n    this._store.connectorKeysByNodeId.set(nodeId, connectorKeys);\n\n    this._mediator.execute(new InvalidateFCacheNodeRequest(nodeId, 'connector-registered'));\n  }\n\n  private _detachConnectorFromNode(connectorKey: string, nodeId: string): void {\n    const connectorKeys = this._store.connectorKeysByNodeId.get(nodeId);\n    if (!connectorKeys) {\n      return;\n    }\n\n    connectorKeys.delete(connectorKey);\n    if (!connectorKeys.size) {\n      this._store.connectorKeysByNodeId.delete(nodeId);\n    }\n  }\n}\n","export class UnregisterFCacheConnectorRequest {\n  static readonly fToken = Symbol('UnregisterFCacheConnectorRequest');\n\n  constructor(\n    public readonly connectorId: string,\n    public readonly kind: string,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { UnregisterFCacheConnectorRequest } from './unregister-connector-request';\nimport { FCache, FCacheConnectorKeyFactory } from '../../../model';\nimport { InvalidateFCacheNodeRequest } from '../../f-cache-nodes';\nimport { F_CACHE_OPTIONS } from '../../../config';\n\n@Injectable()\n@FExecutionRegister(UnregisterFCacheConnectorRequest)\nexport class UnregisterFCacheConnector implements IExecution<\n  UnregisterFCacheConnectorRequest,\n  void\n> {\n  private readonly _store = inject(FCache);\n  private readonly _mediator = inject(FMediator);\n  private readonly _options = inject(F_CACHE_OPTIONS);\n\n  public handle({ connectorId, kind }: UnregisterFCacheConnectorRequest): void {\n    if (!this._options.enabled) {\n      return;\n    }\n\n    const key = FCacheConnectorKeyFactory.build(connectorId, kind);\n\n    const entry = this._store.connectorEntries.get(key);\n    if (!entry) {\n      return;\n    }\n\n    this._store.connectorEntries.delete(key);\n    this._store.connectorKeyByElement.delete(entry.element);\n\n    this._detachConnectorFromNode(key, entry.nodeId);\n\n    if (this._store.nodeEntries.has(entry.nodeId)) {\n      this._mediator.execute(\n        new InvalidateFCacheNodeRequest(entry.nodeId, 'connector-unregistered'),\n      );\n    }\n  }\n\n  private _detachConnectorFromNode(connectorKey: string, nodeId: string): void {\n    const connectorKeys = this._store.connectorKeysByNodeId.get(nodeId);\n    if (!connectorKeys) {\n      return;\n    }\n\n    connectorKeys.delete(connectorKey);\n    if (!connectorKeys.size) {\n      this._store.connectorKeysByNodeId.delete(nodeId);\n    }\n  }\n}\n","export class GetCachedFCacheRectRequest {\n  static readonly fToken = Symbol('GetCachedFCacheRectRequest');\n\n  constructor(public readonly element: HTMLElement | SVGElement) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IRect } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { GetCachedFCacheRectRequest } from './get-cached-rect-request';\nimport { FCache } from '../../../model';\nimport { F_CACHE_OPTIONS } from '../../../config';\n\n@Injectable()\n@FExecutionRegister(GetCachedFCacheRectRequest)\nexport class GetCachedFCacheRect implements IExecution<\n  GetCachedFCacheRectRequest,\n  IRect | undefined\n> {\n  private readonly _store = inject(FCache);\n  private readonly _options = inject(F_CACHE_OPTIONS);\n\n  public handle({ element }: GetCachedFCacheRectRequest): IRect | undefined {\n    if (!this._options.enabled) {\n      return undefined;\n    }\n\n    const nodeId = this._store.nodeIdByElement.get(element);\n    if (nodeId) {\n      const nodeRect = this._store.nodeEntries.get(nodeId)?.rect;\n      if (nodeRect) {\n        return nodeRect;\n      }\n    }\n\n    const key = this._store.connectorKeyByElement.get(element);\n    if (!key) {\n      return undefined;\n    }\n\n    return this._store.connectorEntries.get(key)?.rect ?? undefined;\n  }\n}\n","import { IRoundedRect } from '@foblex/2d';\n\nexport class SetFCacheConnectorRectRequest {\n  static readonly fToken = Symbol('SetFCacheConnectorRectRequest');\n\n  constructor(\n    public readonly connectorId: string,\n    public readonly kind: string,\n    public readonly rect: IRoundedRect,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { RoundedRect } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { SetFCacheConnectorRectRequest } from './set-connector-rect-request';\nimport { FCache, FCacheConnectorKeyFactory } from '../../../model';\nimport { F_CACHE_OPTIONS } from '../../../config';\n\n@Injectable()\n@FExecutionRegister(SetFCacheConnectorRectRequest)\nexport class SetFCacheConnectorRect implements IExecution<SetFCacheConnectorRectRequest, void> {\n  private readonly _store = inject(FCache);\n  private readonly _options = inject(F_CACHE_OPTIONS);\n\n  public handle({ connectorId, kind, rect }: SetFCacheConnectorRectRequest): void {\n    if (!this._options.enabled) {\n      return;\n    }\n\n    const key = FCacheConnectorKeyFactory.build(connectorId, kind);\n    const connector = this._store.connectorEntries.get(key);\n    if (!connector) {\n      return;\n    }\n\n    connector.rect = RoundedRect.fromRoundedRect(rect);\n  }\n}\n","import { IRect } from '@foblex/2d';\n\nexport class SetFCacheNodeRectRequest {\n  static readonly fToken = Symbol('SetFCacheNodeRectRequest');\n\n  constructor(\n    public readonly nodeId: string,\n    public readonly rect: IRect,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IRect, RectExtensions, RoundedRect } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { SetFCacheNodeRectRequest } from './set-node-rect-request';\nimport { FCache } from '../../../model';\nimport { F_CACHE_OPTIONS } from '../../../config';\n\n@Injectable()\n@FExecutionRegister(SetFCacheNodeRectRequest)\nexport class SetFCacheNodeRect implements IExecution<SetFCacheNodeRectRequest, void> {\n  private readonly _store = inject(FCache);\n  private readonly _options = inject(F_CACHE_OPTIONS);\n\n  public handle({ nodeId, rect }: SetFCacheNodeRectRequest): void {\n    if (!this._options.enabled) {\n      return;\n    }\n\n    const node = this._store.nodeEntries.get(nodeId);\n    if (!node) {\n      return;\n    }\n\n    const previousRect = node.rect;\n    node.rect = RectExtensions.initialize(rect.x, rect.y, rect.width, rect.height);\n\n    if (!previousRect) {\n      return;\n    }\n\n    this._updateConnectorRectsByNodeRect(nodeId, previousRect, node.rect);\n  }\n\n  private _updateConnectorRectsByNodeRect(\n    nodeId: string,\n    previousRect: IRect,\n    nextRect: IRect,\n  ): void {\n    const connectorKeys = this._store.connectorKeysByNodeId.get(nodeId);\n    if (!connectorKeys?.size) {\n      return;\n    }\n\n    const dx = nextRect.x - previousRect.x;\n    const dy = nextRect.y - previousRect.y;\n\n    const hasScaleX = previousRect.width !== 0;\n    const hasScaleY = previousRect.height !== 0;\n    const scaleX = hasScaleX ? nextRect.width / previousRect.width : 1;\n    const scaleY = hasScaleY ? nextRect.height / previousRect.height : 1;\n\n    for (const key of connectorKeys) {\n      const connector = this._store.connectorEntries.get(key);\n      if (!connector?.rect) {\n        continue;\n      }\n\n      const previousConnectorRect = connector.rect;\n      const previousCenter = previousConnectorRect.gravityCenter;\n\n      const nextCenterX = hasScaleX\n        ? nextRect.x + (previousCenter.x - previousRect.x) * scaleX\n        : previousCenter.x + dx;\n      const nextCenterY = hasScaleY\n        ? nextRect.y + (previousCenter.y - previousRect.y) * scaleY\n        : previousCenter.y + dy;\n\n      connector.rect = new RoundedRect(\n        nextCenterX - previousConnectorRect.width / 2,\n        nextCenterY - previousConnectorRect.height / 2,\n        previousConnectorRect.width,\n        previousConnectorRect.height,\n        previousConnectorRect.radius1,\n        previousConnectorRect.radius2,\n        previousConnectorRect.radius3,\n        previousConnectorRect.radius4,\n      );\n    }\n  }\n}\n","import { IRect, IRoundedRect } from '@foblex/2d';\n\nexport class UpdateFCacheRectByElementRequest {\n  static readonly fToken = Symbol('UpdateFCacheRectByElementRequest');\n\n  constructor(\n    public readonly element: HTMLElement | SVGElement,\n    public readonly rect: IRect | IRoundedRect,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IRoundedRect } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { UpdateFCacheRectByElementRequest } from './update-rect-by-element-request';\nimport { FCache } from '../../../model';\nimport { F_CACHE_OPTIONS } from '../../../config';\n\n@Injectable()\n@FExecutionRegister(UpdateFCacheRectByElementRequest)\nexport class UpdateFCacheRectByElement implements IExecution<\n  UpdateFCacheRectByElementRequest,\n  void\n> {\n  private readonly _store = inject(FCache);\n  private readonly _options = inject(F_CACHE_OPTIONS);\n\n  public handle({ element, rect }: UpdateFCacheRectByElementRequest): void {\n    if (!this._options.enabled) {\n      return;\n    }\n\n    const nodeId = this._store.nodeIdByElement.get(element);\n    if (nodeId) {\n      const node = this._store.nodeEntries.get(nodeId);\n      if (node) {\n        node.rect = rect;\n      }\n\n      return;\n    }\n\n    const key = this._store.connectorKeyByElement.get(element);\n    if (!key) {\n      return;\n    }\n\n    const connector = this._store.connectorEntries.get(key);\n    if (connector) {\n      connector.rect = rect as IRoundedRect;\n    }\n  }\n}\n","import { FCache } from './model';\nimport {\n  GetCachedFCacheRect,\n  InvalidateFCacheNode,\n  RegisterFCacheConnector,\n  RegisterFCacheNode,\n  SetFCacheConnectorRect,\n  SetFCacheNodeRect,\n  UnregisterFCacheConnector,\n  UnregisterFCacheNode,\n  UpdateFCacheRectByElement,\n} from './features';\n\nexport const F_CACHE_FEATURES = [\n  FCache,\n\n  RegisterFCacheNode,\n  UnregisterFCacheNode,\n  InvalidateFCacheNode,\n\n  RegisterFCacheConnector,\n  UnregisterFCacheConnector,\n\n  GetCachedFCacheRect,\n  SetFCacheNodeRect,\n  SetFCacheConnectorRect,\n  UpdateFCacheRectByElement,\n];\n","import { IPoint, ITransformModel, Point } from '@foblex/2d';\n\nexport function calculatePointerInFlow(\n  position: IPoint,\n  flowHost: HTMLElement,\n  transform: ITransformModel,\n): Point {\n  if (!flowHost) {\n    return Point.fromPoint(position);\n  }\n\n  return Point.fromPoint(position)\n    .elementTransform(flowHost)\n    .sub(transform.scaledPosition)\n    .sub(transform.position)\n    .div(transform.scale);\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 { 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  IPoint,\n  IRect,\n  IRoundedRect,\n  ISize,\n  ITransformModel,\n  RectExtensions,\n  RoundedRect,\n  SizeExtensions,\n} from '@foblex/2d';\nimport { GetCachedFCacheRectRequest, UpdateFCacheRectByElementRequest } from '../../f-cache';\nimport { BrowserService } from '@foblex/platform';\nimport { calculatePointerInFlow } from '../../utils';\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 GetNormalizedConnectorRect\n  implements IExecution<GetNormalizedConnectorRectRequest, IRoundedRect>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n  private readonly _browser = inject(BrowserService);\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  public handle({ element, cache }: GetNormalizedConnectorRectRequest): IRoundedRect {\n    const cachedRect = this._mediator.execute<IRoundedRect | undefined>(\n      new GetCachedFCacheRectRequest(element),\n    );\n    if (cachedRect && cache) {\n      return cachedRect;\n    }\n\n    const systemRect = this._getElementRoundedRect(element);\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(element, unscaledSize);\n\n    const rect = RoundedRect.fromCenter(unscaledRect, offsetSize.width, offsetSize.height);\n\n    this._mediator.execute(new UpdateFCacheRectByElementRequest(element, rect));\n\n    return rect;\n  }\n\n  private _getElementRoundedRect(element: HTMLElement | SVGElement): IRoundedRect {\n    return this._getRoundedRect(\n      RectExtensions.fromElement(element),\n      element,\n      this._getComputedStyle(element),\n    );\n  }\n\n  private _getRoundedRect(\n    rect: IRect,\n    element: HTMLElement | SVGElement,\n    styles: CSSStyleDeclaration,\n  ): RoundedRect {\n    const [radius1, radius2, radius3, radius4] = this._normalizeCircularBorderRadii(\n      rect.width,\n      rect.height,\n      [\n        this._getSystemRadius(styles.borderTopLeftRadius, element, styles.fontSize),\n        this._getSystemRadius(styles.borderTopRightRadius, element, styles.fontSize),\n        this._getSystemRadius(styles.borderBottomRightRadius, element, styles.fontSize),\n        this._getSystemRadius(styles.borderBottomLeftRadius, element, styles.fontSize),\n      ],\n    );\n\n    return new RoundedRect(\n      rect.x,\n      rect.y,\n      rect.width,\n      rect.height,\n      radius1,\n      radius2,\n      radius3,\n      radius4,\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  private _getSystemRadius(\n    value: string,\n    element: HTMLElement | SVGElement,\n    fontSize: string,\n  ): number {\n    return this._toPixels(value, element, fontSize) * this._transform.scale;\n  }\n\n  /**\n   * Mirrors CSS border-radius normalization so oversized values like `999px`\n   * collapse to the largest valid circular radii for the current rect.\n   */\n  private _normalizeCircularBorderRadii(\n    width: number,\n    height: number,\n    radii: [number, number, number, number],\n  ): [number, number, number, number] {\n    const [topLeft, topRight, bottomRight, bottomLeft] = radii.map((value) =>\n      Math.max(0, value),\n    ) as [number, number, number, number];\n\n    const scale = Math.min(\n      1,\n      this._getRadiusScaleFactor(width, topLeft + topRight),\n      this._getRadiusScaleFactor(height, topRight + bottomRight),\n      this._getRadiusScaleFactor(width, bottomRight + bottomLeft),\n      this._getRadiusScaleFactor(height, bottomLeft + topLeft),\n    );\n\n    return [topLeft * scale, topRight * scale, bottomRight * scale, bottomLeft * scale];\n  }\n\n  private _getRadiusScaleFactor(limit: number, sum: number): number {\n    if (sum <= 0) {\n      return 1;\n    }\n\n    if (limit <= 0) {\n      return 0;\n    }\n\n    return limit / sum;\n  }\n\n  private _normalizePosition(rect: IRoundedRect): IPoint {\n    return calculatePointerInFlow(rect, this._store.flowHost, this._transform);\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      this._unscaleRadius(rect.radius1),\n      this._unscaleRadius(rect.radius2),\n      this._unscaleRadius(rect.radius3),\n      this._unscaleRadius(rect.radius4),\n    );\n  }\n\n  private _unscaleRadius(radius: number): number {\n    return radius / this._transform.scale;\n  }\n\n  private _getOffsetSize(element: HTMLElement | SVGElement, size: ISize): ISize {\n    return SizeExtensions.offsetFromElement(element) || size;\n  }\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { FConnectorBase } from '../../../../../f-connectors';\n\nexport class ResolveConnectionEndpointRectRequest {\n  static readonly fToken = Symbol('ResolveConnectionEndpointRectRequest');\n\n  constructor(\n    public connector: FConnectorBase,\n    public cache: Map<string, IRoundedRect>,\n  ) {}\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { GetNormalizedConnectorRectRequest } from '../../../../get-normalized-connector-rect';\nimport { FConnectorBase } from '../../../../../f-connectors';\nimport { ResolveConnectionEndpointRectRequest } from './resolve-connection-endpoint-rect-request';\n\n@Injectable()\n@FExecutionRegister(ResolveConnectionEndpointRectRequest)\nexport class ResolveConnectionEndpointRect\n  implements IExecution<ResolveConnectionEndpointRectRequest, IRoundedRect>\n{\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ connector, cache }: ResolveConnectionEndpointRectRequest): IRoundedRect {\n    const cacheKey = this._buildCacheKey(connector);\n    const rect = cache.get(cacheKey) ?? this._calculateRect(connector);\n    cache.set(cacheKey, rect);\n\n    return rect;\n  }\n\n  private _buildCacheKey(connector: FConnectorBase): string {\n    return `${connector.kind}::${connector.fId()}`;\n  }\n\n  private _calculateRect(connector: FConnectorBase): IRoundedRect {\n    return this._mediator.execute<IRoundedRect>(\n      new GetNormalizedConnectorRectRequest(connector.hostElement),\n    );\n  }\n}\n","import { FConnectionBase } from '../../../../../f-connection-v2';\n\nexport class ResolveConnectionEndpointsRequest {\n  static readonly fToken = Symbol('ResolveConnectionEndpointsRequest');\n\n  constructor(public connection: FConnectionBase) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { ResolveConnectionEndpointsRequest } from './resolve-connection-endpoints-request';\nimport { IConnectionEndpoints } from '../../models';\n\n@Injectable()\n@FExecutionRegister(ResolveConnectionEndpointsRequest)\nexport class ResolveConnectionEndpoints\n  implements IExecution<ResolveConnectionEndpointsRequest, IConnectionEndpoints | null>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ connection }: ResolveConnectionEndpointsRequest): IConnectionEndpoints | null {\n    const source = this._store.outputs.get(connection.fOutputId());\n    const target = this._store.inputs.get(connection.fInputId());\n    if (!source || !target) {\n      return null;\n    }\n\n    return { source, target };\n  }\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { FConnectionBase } from '../../../../../f-connection-v2';\n\nexport class ResolveConnectionGeometryRequest {\n  static readonly fToken = Symbol('ResolveConnectionGeometryRequest');\n\n  constructor(\n    public connection: FConnectionBase,\n    public cache: Map<string, IRoundedRect>,\n  ) {}\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { ResolveConnectionEndpointRectRequest } from '../resolve-connection-endpoint-rect';\nimport { ResolveConnectionEndpointsRequest } from '../resolve-connection-endpoints';\nimport { ResolveConnectionGeometryRequest } from './resolve-connection-geometry-request';\nimport { IConnectionEndpoints, IConnectionGeometry } from '../../models';\nimport { FConnectionBase } from '../../../../../f-connection-v2';\nimport { FConnectorBase } from '../../../../../f-connectors';\n\n@Injectable()\n@FExecutionRegister(ResolveConnectionGeometryRequest)\nexport class ResolveConnectionGeometry\n  implements IExecution<ResolveConnectionGeometryRequest, IConnectionGeometry | null>\n{\n  private readonly _mediator = inject(FMediator);\n\n  public handle({\n    connection,\n    cache,\n  }: ResolveConnectionGeometryRequest): IConnectionGeometry | null {\n    const endpoints = this._resolveConnectionEndpoints(connection);\n    if (!endpoints) {\n      return null;\n    }\n\n    return {\n      ...endpoints,\n      sourceRect: this._resolveEndpointRect(endpoints.source, cache),\n      targetRect: this._resolveEndpointRect(endpoints.target, cache),\n    };\n  }\n\n  private _resolveConnectionEndpoints(connection: FConnectionBase): IConnectionEndpoints | null {\n    return this._mediator.execute<IConnectionEndpoints | null>(\n      new ResolveConnectionEndpointsRequest(connection),\n    );\n  }\n\n  private _resolveEndpointRect(\n    connector: FConnectorBase,\n    cache: Map<string, IRoundedRect>,\n  ): IRoundedRect {\n    return this._mediator.execute<IRoundedRect>(\n      new ResolveConnectionEndpointRectRequest(connector, cache),\n    );\n  }\n}\n","export class GetNormalizedElementRectRequest {\n  static readonly fToken = Symbol('GetNormalizedElementRectRequest');\n\n  constructor(public readonly element: HTMLElement | SVGElement) {}\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  IPoint,\n  IRect,\n  ISize,\n  ITransformModel,\n  RectExtensions,\n  RoundedRect,\n  SizeExtensions,\n} from '@foblex/2d';\nimport { GetCachedFCacheRectRequest, UpdateFCacheRectByElementRequest } from '../../f-cache';\nimport { calculatePointerInFlow } from '../../utils';\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 GetNormalizedElementRect implements IExecution<\n  GetNormalizedElementRectRequest,\n  IRect\n> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  public handle({ element }: GetNormalizedElementRectRequest): IRect {\n    const cachedRect = this._mediator.execute<IRect | undefined>(\n      new GetCachedFCacheRectRequest(element),\n    );\n    if (cachedRect) {\n      return cachedRect;\n    }\n\n    const systemRect = RectExtensions.fromElement(element);\n    const position = this._normalizePosition(systemRect);\n    const unscaledSize = this._unscaleSize(systemRect);\n    const unscaledRect = this._getUnscaledRect(position, unscaledSize);\n\n    const offsetSize = this._getOffsetSize(element, unscaledSize);\n\n    const rect = this._fromCenter(unscaledRect, offsetSize.width, offsetSize.height);\n\n    this._mediator.execute(new UpdateFCacheRectByElementRequest(element, rect));\n\n    return rect;\n  }\n\n  private _fromCenter(rect: IRect, width: number, height: number): IRect {\n    return RectExtensions.initialize(\n      rect.gravityCenter.x - width / 2,\n      rect.gravityCenter.y - height / 2,\n      width,\n      height,\n    );\n  }\n\n  private _normalizePosition(rect: IRect): IPoint {\n    return calculatePointerInFlow(rect, this._store.flowHost, this._transform);\n  }\n\n  private _unscaleSize(rect: IRect): 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): IRect {\n    return new RoundedRect(position.x, position.y, size.width, size.height);\n  }\n\n  private _getOffsetSize(element: HTMLElement | SVGElement, size: ISize): ISize {\n    return SizeExtensions.offsetFromElement(element) || size;\n  }\n}\n","import { FConnectorBase } from '../../../f-connectors';\nimport { IConnectionEndpointRotationContext } from '../../../f-connection-v2';\n\nexport class ResolveConnectionEndpointRotationContextRequest {\n  static readonly fToken = Symbol('ResolveConnectionEndpointRotationContextRequest');\n\n  constructor(public readonly connector?: FConnectorBase) {}\n}\n\nexport type TResolveConnectionEndpointRotationContextResponse =\n  | IConnectionEndpointRotationContext\n  | undefined;\n","import { IRect } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { GetNormalizedElementRectRequest } from '../../get-normalized-element-rect';\nimport {\n  ResolveConnectionEndpointRotationContextRequest,\n  TResolveConnectionEndpointRotationContextResponse,\n} from './resolve-connection-endpoint-rotation-context-request';\n\n@Injectable()\n@FExecutionRegister(ResolveConnectionEndpointRotationContextRequest)\nexport class ResolveConnectionEndpointRotationContext\n  implements\n    IExecution<\n      ResolveConnectionEndpointRotationContextRequest,\n      TResolveConnectionEndpointRotationContextResponse\n    >\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  public handle({\n    connector,\n  }: ResolveConnectionEndpointRotationContextRequest): TResolveConnectionEndpointRotationContextResponse {\n    if (!connector) {\n      return undefined;\n    }\n\n    const node = this._store.nodes.get(connector.fNodeId);\n    if (!node || !node._rotate) {\n      return undefined;\n    }\n\n    const nodeRect = this._mediator.execute<IRect>(\n      new GetNormalizedElementRectRequest(node.hostElement),\n    );\n\n    return {\n      rotationDeg: node._rotate,\n      pivot: nodeRect.gravityCenter,\n    };\n  }\n}\n","import { FConnectionBase } from '../../../../../f-connection-v2';\nimport { IConnectionGeometry } from '../../models';\n\nexport class BuildConnectionLineRequest {\n  static readonly fToken = Symbol('BuildConnectionLineRequest');\n\n  constructor(\n    public connection: FConnectionBase,\n    public geometry: IConnectionGeometry,\n  ) {}\n}\n","import { ILine } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport {\n  ConnectionBehaviourBuilder,\n  ConnectionBehaviourBuilderRequest,\n} from '../../../../../f-connection-v2';\nimport {\n  ResolveConnectionEndpointRotationContextRequest,\n  TResolveConnectionEndpointRotationContextResponse,\n} from '../../../resolve-connection-endpoint-rotation-context';\nimport { BuildConnectionLineRequest } from './build-connection-line-request';\nimport { FConnectorBase } from '../../../../../f-connectors';\n\n@Injectable()\n@FExecutionRegister(BuildConnectionLineRequest)\nexport class BuildConnectionLine implements IExecution<BuildConnectionLineRequest, ILine> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _connectionBehaviour = inject(ConnectionBehaviourBuilder);\n\n  public handle({ connection, geometry }: BuildConnectionLineRequest): ILine {\n    return this._connectionBehaviour.handle(\n      new ConnectionBehaviourBuilderRequest(\n        geometry.sourceRect,\n        geometry.targetRect,\n        connection,\n        geometry.source.fConnectableSide,\n        geometry.target.fConnectableSide,\n        this._resolveRotationContext(geometry.source),\n        this._resolveRotationContext(geometry.target),\n      ),\n    );\n  }\n\n  private _resolveRotationContext(\n    connector: FConnectorBase,\n  ): TResolveConnectionEndpointRotationContextResponse {\n    return this._mediator.execute<TResolveConnectionEndpointRotationContextResponse>(\n      new ResolveConnectionEndpointRotationContextRequest(connector),\n    );\n  }\n}\n","import { ILine } from '@foblex/2d';\nimport { FConnectorBase } from '../../../../../f-connectors';\nimport { FConnectionBase } from '../../../../../f-connection-v2';\n\nexport class RenderConnectionWithLineRequest {\n  static readonly fToken = Symbol('RenderConnectionWithLineRequest');\n\n  constructor(\n    public connection: FConnectionBase,\n    public source: FConnectorBase,\n    public target: FConnectorBase,\n    public line: ILine,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { ApplyConnectionRenderRequest } from '../apply-connection-render';\nimport { MarkConnectionConnectorsAsConnectedRequest } from '../mark-connection-connectors-as-connected';\nimport { RenderConnectionWithLineRequest } from './render-connection-with-line-request';\n\n@Injectable()\n@FExecutionRegister(RenderConnectionWithLineRequest)\nexport class RenderConnectionWithLine implements IExecution<RenderConnectionWithLineRequest, void> {\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ connection, source, target, line }: RenderConnectionWithLineRequest): void {\n    this._mediator.execute<void>(new MarkConnectionConnectorsAsConnectedRequest(source, target));\n    this._mediator.execute<void>(new ApplyConnectionRenderRequest(connection, line));\n  }\n}\n","import { FConnectionBase } from '../../../../../f-connection-v2';\nimport { IConnectionGeometry } from '../../models';\n\nexport class RenderConnectionFromGeometryRequest {\n  static readonly fToken = Symbol('RenderConnectionFromGeometryRequest');\n\n  constructor(\n    public connection: FConnectionBase,\n    public geometry: IConnectionGeometry,\n  ) {}\n}\n","import { ILine } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { BuildConnectionLineRequest } from '../../shared/build-connection-line';\nimport { RenderConnectionWithLineRequest } from '../render-connection-with-line';\nimport { RenderConnectionFromGeometryRequest } from './render-connection-from-geometry-request';\n\n@Injectable()\n@FExecutionRegister(RenderConnectionFromGeometryRequest)\nexport class RenderConnectionFromGeometry\n  implements IExecution<RenderConnectionFromGeometryRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ connection, geometry }: RenderConnectionFromGeometryRequest): void {\n    const line = this._mediator.execute<ILine>(\n      new BuildConnectionLineRequest(connection, geometry),\n    );\n\n    this._mediator.execute<void>(\n      new RenderConnectionWithLineRequest(connection, geometry.source, geometry.target, line),\n    );\n  }\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { FConnectionBase } from '../../../../../f-connection-v2';\n\nexport class RenderConnectionRequest {\n  static readonly fToken = Symbol('RenderConnectionRequest');\n\n  constructor(\n    public connection: FConnectionBase,\n    public cache: Map<string, IRoundedRect>,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { ResolveConnectionGeometryRequest } from '../../shared/resolve-connection-geometry';\nimport { IConnectionGeometry } from '../../models';\nimport { RenderConnectionFromGeometryRequest } from '../render-connection-from-geometry';\nimport { RenderConnectionRequest } from './render-connection-request';\n\n@Injectable()\n@FExecutionRegister(RenderConnectionRequest)\nexport class RenderConnection implements IExecution<RenderConnectionRequest, void> {\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ connection, cache }: RenderConnectionRequest): void {\n    const geometry = this._mediator.execute<IConnectionGeometry | null>(\n      new ResolveConnectionGeometryRequest(connection, cache),\n    );\n    if (!geometry) {\n      return;\n    }\n\n    this._mediator.execute<void>(new RenderConnectionFromGeometryRequest(connection, geometry));\n  }\n}\n","import { IConnectionRedrawSession } from '../../models';\n\nexport class IsConnectionRedrawCurrentRequest {\n  static readonly fToken = Symbol('IsConnectionRedrawCurrentRequest');\n\n  constructor(public session: IConnectionRedrawSession) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { IsConnectionRedrawCurrentRequest } from './is-connection-redraw-current-request';\nimport { ConnectionRedrawState } from '../../models';\n\n@Injectable()\n@FExecutionRegister(IsConnectionRedrawCurrentRequest)\nexport class IsConnectionRedrawCurrent\n  implements IExecution<IsConnectionRedrawCurrentRequest, boolean>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _state = inject(ConnectionRedrawState);\n\n  public handle({ session }: IsConnectionRedrawCurrentRequest): boolean {\n    return (\n      session.renderTicket === this._state.renderTicket &&\n      session.nodesRevision === this._store.nodesRevision\n    );\n  }\n}\n","import { IConnectionRedrawSession } from '../../models';\n\nexport class CompleteConnectionRedrawRequest {\n  static readonly fToken = Symbol('CompleteConnectionRedrawRequest');\n\n  constructor(public session: IConnectionRedrawSession) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { IsConnectionRedrawCurrentRequest } from '../is-connection-redraw-current';\nimport { CompleteConnectionRedrawRequest } from './complete-connection-redraw-request';\n\n@Injectable()\n@FExecutionRegister(CompleteConnectionRedrawRequest)\nexport class CompleteConnectionRedraw implements IExecution<CompleteConnectionRedrawRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ session }: CompleteConnectionRedrawRequest): void {\n    if (!this._mediator.execute<boolean>(new IsConnectionRedrawCurrentRequest(session))) {\n      return;\n    }\n\n    this._store.completeConnectionsRender(session.connectionsRevision, session.nodesRevision);\n  }\n}\n","import { IConnectionWorkerBatchItem, IConnectionWorkerResultItem } from '../../models';\n\nexport class ApplyConnectionWorkerResultRequest {\n  static readonly fToken = Symbol('ApplyConnectionWorkerResultRequest');\n\n  constructor(\n    public batchItem: IConnectionWorkerBatchItem | null,\n    public result?: IConnectionWorkerResultItem,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { ILine } from '@foblex/2d';\nimport { EFConnectableSide } from '../../../../../f-connection-v2';\nimport { RenderConnectionFromGeometryRequest } from '../../main-thread/render-connection-from-geometry';\nimport { RenderConnectionWithLineRequest } from '../../main-thread/render-connection-with-line';\nimport { IConnectionWorkerBatchItem, IConnectionWorkerResultItem } from '../../models';\nimport { ApplyConnectionWorkerResultRequest } from './apply-connection-worker-result-request';\n\n@Injectable()\n@FExecutionRegister(ApplyConnectionWorkerResultRequest)\nexport class ApplyConnectionWorkerResult\n  implements IExecution<ApplyConnectionWorkerResultRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ batchItem, result }: ApplyConnectionWorkerResultRequest): void {\n    if (!batchItem) {\n      return;\n    }\n\n    if (!this._isSupportedWorkerResult(result)) {\n      this._fallbackToMainThread(batchItem);\n\n      return;\n    }\n\n    try {\n      batchItem.connection._applyResolvedSidesToConnection(\n        result.sourceSide as EFConnectableSide,\n        result.targetSide as EFConnectableSide,\n      );\n      this._mediator.execute<void>(\n        new RenderConnectionWithLineRequest(\n          batchItem.connection,\n          batchItem.geometry.source,\n          batchItem.geometry.target,\n          result.line,\n        ),\n      );\n    } catch {\n      this._fallbackToMainThread(batchItem);\n    }\n  }\n\n  private _fallbackToMainThread(batchItem: IConnectionWorkerBatchItem): void {\n    this._mediator.execute<void>(\n      new RenderConnectionFromGeometryRequest(batchItem.connection, batchItem.geometry),\n    );\n  }\n\n  private _isSupportedWorkerResult(\n    result: IConnectionWorkerResultItem | undefined,\n  ): result is IConnectionWorkerResultItem & {\n    sourceSide: string;\n    targetSide: string;\n    line: NonNullable<ILine>;\n  } {\n    return !!(result?.supported && result.sourceSide && result.targetSide && result.line);\n  }\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { FConnectionBase } from '../../../../../f-connection-v2';\nimport {\n  IConnectionRedrawSession,\n  IConnectionWorkerBatchItem,\n  IConnectionWorkerResultItem,\n} from '../../models';\n\nexport class RunConnectionRedrawSliceRequest {\n  static readonly fToken = Symbol('RunConnectionRedrawSliceRequest');\n\n  constructor(\n    public connections: FConnectionBase[],\n    public cache: Map<string, IRoundedRect>,\n    public startIndex: number,\n    public session: IConnectionRedrawSession,\n    public batchItems?: (IConnectionWorkerBatchItem | null)[],\n    public workerResults?: (IConnectionWorkerResultItem | undefined)[],\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { BrowserService } from '@foblex/platform';\nimport { CompleteConnectionRedrawRequest } from '../complete-connection-redraw';\nimport { IsConnectionRedrawCurrentRequest } from '../is-connection-redraw-current';\nimport { RenderConnectionRequest } from '../../main-thread/render-connection';\nimport { ApplyConnectionWorkerResultRequest } from '../../worker/apply-connection-worker-result';\nimport { IConnectionRedrawSession } from '../../models';\nimport { RunConnectionRedrawSliceRequest } from './run-connection-redraw-slice-request';\n\nconst CONNECTIONS_PER_SLICE_LIMIT = 500;\nconst SLICE_BUDGET_MS = 6;\n\n@Injectable()\n@FExecutionRegister(RunConnectionRedrawSliceRequest)\nexport class RunConnectionRedrawSlice implements IExecution<RunConnectionRedrawSliceRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _browser = inject(BrowserService);\n\n  public handle({\n    connections,\n    cache,\n    startIndex,\n    session,\n    batchItems,\n    workerResults,\n  }: RunConnectionRedrawSliceRequest): void {\n    if (!this._isCurrent(session)) {\n      return;\n    }\n\n    const sliceStart = this._now();\n    let endIndex = startIndex;\n    let processed = 0;\n\n    while (\n      endIndex < connections.length &&\n      processed < CONNECTIONS_PER_SLICE_LIMIT &&\n      this._isWithinSliceBudget(sliceStart)\n    ) {\n      const connection = connections[endIndex];\n\n      if (batchItems) {\n        this._mediator.execute<void>(\n          new ApplyConnectionWorkerResultRequest(\n            batchItems[endIndex] ?? null,\n            workerResults?.[endIndex],\n          ),\n        );\n      } else {\n        this._mediator.execute<void>(new RenderConnectionRequest(connection, cache));\n      }\n\n      endIndex++;\n      processed++;\n\n      if (!this._isCurrent(session)) {\n        return;\n      }\n    }\n\n    if (endIndex >= connections.length) {\n      this._mediator.execute<void>(new CompleteConnectionRedrawRequest(session));\n\n      return;\n    }\n\n    this._requestAnimationFrame(() =>\n      this._mediator.execute<void>(\n        new RunConnectionRedrawSliceRequest(\n          connections,\n          cache,\n          endIndex,\n          session,\n          batchItems,\n          workerResults,\n        ),\n      ),\n    );\n  }\n\n  private _isCurrent(session: IConnectionRedrawSession): boolean {\n    return this._mediator.execute<boolean>(new IsConnectionRedrawCurrentRequest(session));\n  }\n\n  private _requestAnimationFrame(callback: () => void): void {\n    const windowRef = this._browser.document.defaultView;\n    if (!windowRef) {\n      callback();\n\n      return;\n    }\n\n    windowRef.requestAnimationFrame(callback);\n  }\n\n  private _now(): number {\n    const performanceRef = this._browser.document.defaultView?.performance;\n\n    return performanceRef ? performanceRef.now() : Date.now();\n  }\n\n  private _isWithinSliceBudget(sliceStart: number): boolean {\n    if (!this._browser.isBrowser()) {\n      return true;\n    }\n\n    return this._now() - sliceStart < SLICE_BUDGET_MS;\n  }\n}\n","export class StartConnectionRedrawRequest {\n  static readonly fToken = Symbol('StartConnectionRedrawRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { ConnectionRedrawState, IConnectionRedrawSession } from '../../models';\nimport { StartConnectionRedrawRequest } from './start-connection-redraw-request';\n\n@Injectable()\n@FExecutionRegister(StartConnectionRedrawRequest)\nexport class StartConnectionRedraw\n  implements IExecution<StartConnectionRedrawRequest, IConnectionRedrawSession>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _state = inject(ConnectionRedrawState);\n\n  public handle(_: StartConnectionRedrawRequest): IConnectionRedrawSession {\n    this._state.resetConnectedConnectors();\n\n    return {\n      renderTicket: this._state.beginRender(),\n      connectionsRevision: this._store.connectionsRevision,\n      nodesRevision: this._store.nodesRevision,\n    };\n  }\n}\n","export class RedrawConnectionsRequest {\n  static readonly fToken = Symbol('RedrawConnectionsRequest');\n}\n","export class ShouldUseConnectionWorkerRequest {\n  static readonly fToken = Symbol('ShouldUseConnectionWorkerRequest');\n\n  constructor(public connectionCount: number) {}\n}\n","export class IsConnectionWorkerEnabledRequest {\n  static readonly fToken = Symbol('IsConnectionWorkerEnabledRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BrowserService } from '@foblex/platform';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ConnectionWorkerState } from '../../models';\nimport { IsConnectionWorkerEnabledRequest } from './is-connection-worker-enabled-request';\nimport { isConnectionWorkerRuntimeSupported } from '../runtime/connection-worker-runtime';\n\n@Injectable()\n@FExecutionRegister(IsConnectionWorkerEnabledRequest)\nexport class IsConnectionWorkerEnabled\n  implements IExecution<IsConnectionWorkerEnabledRequest, boolean>\n{\n  private readonly _browser = inject(BrowserService);\n  private readonly _state = inject(ConnectionWorkerState);\n\n  public handle(_: IsConnectionWorkerEnabledRequest): boolean {\n    if (this._state.isDisabled) {\n      return false;\n    }\n\n    if (!this._isWorkerAvailable()) {\n      return false;\n    }\n\n    const windowRef = this._browser.document.defaultView;\n\n    return isConnectionWorkerRuntimeSupported(windowRef);\n  }\n\n  private _isWorkerAvailable(): boolean {\n    return this._browser.isBrowser();\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { ShouldUseConnectionWorkerRequest } from './should-use-connection-worker-request';\nimport { IsConnectionWorkerEnabledRequest } from '../is-connection-worker-enabled';\n\n@Injectable()\n@FExecutionRegister(ShouldUseConnectionWorkerRequest)\nexport class ShouldUseConnectionWorker\n  implements IExecution<ShouldUseConnectionWorkerRequest, boolean>\n{\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ connectionCount }: ShouldUseConnectionWorkerRequest): boolean {\n    return (\n      connectionCount > 0 && this._mediator.execute<boolean>(new IsConnectionWorkerEnabledRequest())\n    );\n  }\n}\n","import { FConnectionBase } from '../../../../../f-connection-v2';\nimport { IConnectionGeometry } from '../../models';\n\nexport class BuildConnectionWorkerPayloadItemRequest {\n  static readonly fToken = Symbol('BuildConnectionWorkerPayloadItemRequest');\n\n  constructor(\n    public connection: FConnectionBase,\n    public geometry: IConnectionGeometry,\n    public originalIndex: number,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { IConnectionWorkerPayloadItem } from '../../models';\nimport { BuildConnectionWorkerPayloadItemRequest } from './build-connection-worker-payload-item-request';\n\n@Injectable()\n@FExecutionRegister(BuildConnectionWorkerPayloadItemRequest)\nexport class BuildConnectionWorkerPayloadItem\n  implements IExecution<BuildConnectionWorkerPayloadItemRequest, IConnectionWorkerPayloadItem>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({\n    connection,\n    geometry,\n    originalIndex,\n  }: BuildConnectionWorkerPayloadItemRequest): IConnectionWorkerPayloadItem {\n    const { source, target, sourceRect, targetRect } = geometry;\n\n    return {\n      originalIndex,\n      behavior: connection.fBehavior,\n      outputSide: connection.fOutputSide(),\n      inputSide: connection.fInputSide(),\n      sourceConnectableSide: source.fConnectableSide,\n      targetConnectableSide: target.fConnectableSide,\n      sourceRotation: this._store.nodes.get(source.fNodeId)?._rotate || 0,\n      targetRotation: this._store.nodes.get(target.fNodeId)?._rotate || 0,\n      sourceRect: {\n        x: sourceRect.x,\n        y: sourceRect.y,\n        width: sourceRect.width,\n        height: sourceRect.height,\n        radius1: sourceRect.radius1,\n        radius2: sourceRect.radius2,\n        radius3: sourceRect.radius3,\n        radius4: sourceRect.radius4,\n      },\n      targetRect: {\n        x: targetRect.x,\n        y: targetRect.y,\n        width: targetRect.width,\n        height: targetRect.height,\n        radius1: targetRect.radius1,\n        radius2: targetRect.radius2,\n        radius3: targetRect.radius3,\n        radius4: targetRect.radius4,\n      },\n    };\n  }\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { FConnectionBase } from '../../../../../f-connection-v2';\n\nexport class BuildConnectionWorkerBatchRequest {\n  static readonly fToken = Symbol('BuildConnectionWorkerBatchRequest');\n\n  constructor(\n    public connections: FConnectionBase[],\n    public cache: Map<string, IRoundedRect>,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IRoundedRect } from '@foblex/2d';\nimport { FConnectionBase } from '../../../../../f-connection-v2';\nimport {\n  IConnectionGeometry,\n  IConnectionWorkerBatch,\n  IConnectionWorkerBatchItem,\n  IConnectionWorkerPayloadItem,\n} from '../../models';\nimport { ResolveConnectionGeometryRequest } from '../../shared/resolve-connection-geometry';\nimport { BuildConnectionWorkerPayloadItemRequest } from '../build-connection-worker-payload-item';\nimport { BuildConnectionWorkerBatchRequest } from './build-connection-worker-batch-request';\n\n@Injectable()\n@FExecutionRegister(BuildConnectionWorkerBatchRequest)\nexport class BuildConnectionWorkerBatch\n  implements IExecution<BuildConnectionWorkerBatchRequest, IConnectionWorkerBatch>\n{\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ connections, cache }: BuildConnectionWorkerBatchRequest): IConnectionWorkerBatch {\n    const items: (IConnectionWorkerBatchItem | null)[] = new Array(connections.length);\n    const payload: IConnectionWorkerPayloadItem[] = [];\n\n    for (let index = 0; index < connections.length; index++) {\n      const item = this._buildBatchItem(connections[index], cache, index);\n      items[index] = item;\n\n      if (!item) {\n        continue;\n      }\n\n      payload.push(item.payload);\n    }\n\n    return { items, payload };\n  }\n\n  private _buildBatchItem(\n    connection: FConnectionBase,\n    cache: Map<string, IRoundedRect>,\n    originalIndex: number,\n  ): IConnectionWorkerBatchItem | null {\n    const geometry = this._mediator.execute<IConnectionGeometry | null>(\n      new ResolveConnectionGeometryRequest(connection, cache),\n    );\n    if (!geometry) {\n      return null;\n    }\n\n    return {\n      connection,\n      geometry,\n      payload: this._mediator.execute<IConnectionWorkerPayloadItem>(\n        new BuildConnectionWorkerPayloadItemRequest(connection, geometry, originalIndex),\n      ),\n    };\n  }\n}\n","export class DisableConnectionWorkerRequest {\n  static readonly fToken = Symbol('DisableConnectionWorkerRequest');\n\n  constructor(public error: Error) {}\n}\n","export class ResetConnectionWorkerRuntimeRequest {\n  static readonly fToken = Symbol('ResetConnectionWorkerRuntimeRequest');\n\n  constructor(public error: Error) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ConnectionWorkerState } from '../../models';\nimport { ResetConnectionWorkerRuntimeRequest } from './reset-connection-worker-runtime-request';\n\n@Injectable()\n@FExecutionRegister(ResetConnectionWorkerRuntimeRequest)\nexport class ResetConnectionWorkerRuntime\n  implements IExecution<ResetConnectionWorkerRuntimeRequest, void>\n{\n  private readonly _state = inject(ConnectionWorkerState);\n\n  public handle({ error }: ResetConnectionWorkerRuntimeRequest): void {\n    this._state.resetRuntime(error);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { ConnectionWorkerState } from '../../models';\nimport { DisableConnectionWorkerRequest } from './disable-connection-worker-request';\nimport { ResetConnectionWorkerRuntimeRequest } from '../reset-connection-worker-runtime';\n\n@Injectable()\n@FExecutionRegister(DisableConnectionWorkerRequest)\nexport class DisableConnectionWorker implements IExecution<DisableConnectionWorkerRequest, void> {\n  private readonly _state = inject(ConnectionWorkerState);\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ error }: DisableConnectionWorkerRequest): void {\n    this._state.isDisabled = true;\n\n    this._mediator.execute(new ResetConnectionWorkerRuntimeRequest(error));\n  }\n}\n","import { IConnectionWorkerResponse } from '../../models';\n\nexport class HandleConnectionWorkerMessageRequest {\n  static readonly fToken = Symbol('HandleConnectionWorkerMessageRequest');\n\n  constructor(public message?: IConnectionWorkerResponse) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ConnectionWorkerState } from '../../models';\nimport { HandleConnectionWorkerMessageRequest } from './handle-connection-worker-message-request';\n\n@Injectable()\n@FExecutionRegister(HandleConnectionWorkerMessageRequest)\nexport class HandleConnectionWorkerMessage\n  implements IExecution<HandleConnectionWorkerMessageRequest, void>\n{\n  private readonly _state = inject(ConnectionWorkerState);\n\n  public handle({ message }: HandleConnectionWorkerMessageRequest): void {\n    if (!message || typeof message.requestId !== 'number') {\n      return;\n    }\n\n    const request = this._state.pending.get(message.requestId);\n    if (!request) {\n      return;\n    }\n\n    this._state.pending.delete(message.requestId);\n\n    if (message.error) {\n      request.reject(new Error(message.error));\n\n      return;\n    }\n\n    request.resolve(message.results ?? []);\n  }\n}\n","export class EnsureConnectionWorkerRequest {\n  static readonly fToken = Symbol('EnsureConnectionWorkerRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BrowserService } from '@foblex/platform';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { ConnectionWorkerState, IConnectionWorkerResponse } from '../../models';\nimport { DisableConnectionWorkerRequest } from '../disable-connection-worker';\nimport { HandleConnectionWorkerMessageRequest } from '../handle-connection-worker-message';\nimport { EnsureConnectionWorkerRequest } from './ensure-connection-worker-request';\nimport { ResetConnectionWorkerRuntimeRequest } from '../reset-connection-worker-runtime';\nimport {\n  createConnectionWorkerUrl,\n  isConnectionWorkerRuntimeSupported,\n  resolveConnectionWorkerRuntime,\n  revokeConnectionWorkerUrl,\n} from '../runtime/connection-worker-runtime';\n\n@Injectable()\n@FExecutionRegister(EnsureConnectionWorkerRequest)\nexport class EnsureConnectionWorker\n  implements IExecution<EnsureConnectionWorkerRequest, Worker | null>\n{\n  private readonly _browser = inject(BrowserService);\n  private readonly _state = inject(ConnectionWorkerState);\n  private readonly _mediator = inject(FMediator);\n\n  public handle(_: EnsureConnectionWorkerRequest): Worker | null {\n    if (this._state.worker) {\n      return this._state.worker;\n    }\n\n    const windowRef = this._browser.document.defaultView;\n    if (!isConnectionWorkerRuntimeSupported(windowRef)) {\n      return null;\n    }\n\n    const runtime = resolveConnectionWorkerRuntime(windowRef);\n    if (!runtime) {\n      return null;\n    }\n\n    const workerUrl = createConnectionWorkerUrl(runtime);\n\n    try {\n      const worker = new runtime.workerCtor(workerUrl, {\n        name: 'f-flow-connection-worker',\n      });\n\n      worker.onmessage = (event: MessageEvent<IConnectionWorkerResponse>) => {\n        this._mediator.execute(new HandleConnectionWorkerMessageRequest(event.data));\n      };\n      worker.onerror = () => {\n        this._resetWorkerAfterRuntimeError(new Error('Connection worker runtime error.'));\n      };\n      worker.onmessageerror = () => {\n        this._resetWorkerAfterRuntimeError(\n          new Error('Connection worker message deserialization error.'),\n        );\n      };\n\n      this._state.workerUrl = workerUrl;\n      this._state.worker = worker;\n\n      return worker;\n    } catch (error) {\n      revokeConnectionWorkerUrl(workerUrl, runtime.urlApi);\n      this._disableWorker(\n        error instanceof Error ? error : new Error('Connection worker initialization failed.'),\n      );\n\n      return null;\n    }\n  }\n\n  private _disableWorker(error: Error): void {\n    this._mediator.execute(new DisableConnectionWorkerRequest(error));\n  }\n\n  private _resetWorkerAfterRuntimeError(error: Error): void {\n    this._mediator.execute(new ResetConnectionWorkerRuntimeRequest(error));\n  }\n}\n","import { IConnectionWorkerPayloadItem } from '../../models';\n\nexport class RunConnectionWorkerRequest {\n  static readonly fToken = Symbol('RunConnectionWorkerRequest');\n\n  constructor(public payload: IConnectionWorkerPayloadItem[]) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { ConnectionWorkerState, IConnectionWorkerResultItem } from '../../models';\nimport { EnsureConnectionWorkerRequest } from '../ensure-connection-worker';\nimport { IsConnectionWorkerEnabledRequest } from '../is-connection-worker-enabled';\nimport { RunConnectionWorkerRequest } from './run-connection-worker-request';\n\n@Injectable()\n@FExecutionRegister(RunConnectionWorkerRequest)\nexport class RunConnectionWorker\n  implements IExecution<RunConnectionWorkerRequest, Promise<IConnectionWorkerResultItem[]>>\n{\n  private readonly _state = inject(ConnectionWorkerState);\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ payload }: RunConnectionWorkerRequest): Promise<IConnectionWorkerResultItem[]> {\n    if (!payload.length) {\n      return Promise.resolve([]);\n    }\n\n    if (!this._mediator.execute<boolean>(new IsConnectionWorkerEnabledRequest())) {\n      return Promise.reject(new Error('Connection worker is disabled.'));\n    }\n\n    this._interruptPendingRequests();\n\n    const worker = this._mediator.execute<Worker | null>(new EnsureConnectionWorkerRequest());\n    if (!worker) {\n      return Promise.reject(new Error('Unable to initialize connection worker.'));\n    }\n\n    const requestId = ++this._state.nextRequestId;\n\n    return new Promise((resolve, reject) => {\n      this._state.pending.set(requestId, { resolve, reject });\n\n      try {\n        worker.postMessage({\n          requestId,\n          items: payload,\n        });\n      } catch (error) {\n        this._state.pending.delete(requestId);\n        reject(\n          error instanceof Error\n            ? error\n            : new Error('Unknown error while posting message to connection worker.'),\n        );\n      }\n    });\n  }\n\n  private _interruptPendingRequests(): void {\n    if (!this._state.pending.size) {\n      return;\n    }\n\n    const error = new Error('Connection worker request was superseded by a newer redraw.');\n    this._state.pending.forEach((request) => request.reject(error));\n    this._state.pending.clear();\n  }\n}\n","import { IConnectionWorkerBatch } from '../../models';\n\nexport class RunConnectionWorkerBatchRequest {\n  static readonly fToken = Symbol('RunConnectionWorkerBatchRequest');\n\n  constructor(public batch: IConnectionWorkerBatch) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IConnectionWorkerResultItem } from '../../models';\nimport { RunConnectionWorkerRequest } from '../run-connection-worker';\nimport { RunConnectionWorkerBatchRequest } from './run-connection-worker-batch-request';\n\n@Injectable()\n@FExecutionRegister(RunConnectionWorkerBatchRequest)\nexport class RunConnectionWorkerBatch\n  implements IExecution<RunConnectionWorkerBatchRequest, Promise<IConnectionWorkerResultItem[]>>\n{\n  private readonly _mediator = inject(FMediator);\n\n  public handle({\n    batch,\n  }: RunConnectionWorkerBatchRequest): Promise<IConnectionWorkerResultItem[]> {\n    if (!batch.payload.length) {\n      return Promise.resolve([]);\n    }\n\n    return this._mediator.execute<Promise<IConnectionWorkerResultItem[]>>(\n      new RunConnectionWorkerRequest(batch.payload),\n    );\n  }\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { FConnectionBase } from '../../../../../f-connection-v2';\nimport { IConnectionRedrawSession } from '../../models';\n\nexport class StartConnectionWorkerRedrawRequest {\n  static readonly fToken = Symbol('StartConnectionWorkerRedrawRequest');\n\n  constructor(\n    public connections: FConnectionBase[],\n    public cache: Map<string, IRoundedRect>,\n    public session: IConnectionRedrawSession,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IConnectionWorkerBatch, IConnectionWorkerResultItem } from '../../models';\nimport { IsConnectionRedrawCurrentRequest, RunConnectionRedrawSliceRequest } from '../../pipeline';\nimport { BuildConnectionWorkerBatchRequest } from '../build-connection-worker-batch';\nimport { RunConnectionWorkerBatchRequest } from '../run-connection-worker-batch';\nimport { StartConnectionWorkerRedrawRequest } from './start-connection-worker-redraw-request';\n\n@Injectable()\n@FExecutionRegister(StartConnectionWorkerRedrawRequest)\nexport class StartConnectionWorkerRedraw\n  implements IExecution<StartConnectionWorkerRedrawRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ connections, cache, session }: StartConnectionWorkerRedrawRequest): void {\n    const batch = this._mediator.execute<IConnectionWorkerBatch>(\n      new BuildConnectionWorkerBatchRequest(connections, cache),\n    );\n    if (!batch.payload.length) {\n      this._mediator.execute<void>(\n        new RunConnectionRedrawSliceRequest(connections, cache, 0, session, batch.items),\n      );\n\n      return;\n    }\n\n    this._mediator\n      .execute<Promise<IConnectionWorkerResultItem[]>>(new RunConnectionWorkerBatchRequest(batch))\n      .then((results) => {\n        if (!this._mediator.execute<boolean>(new IsConnectionRedrawCurrentRequest(session))) {\n          return;\n        }\n\n        this._mediator.execute<void>(\n          new RunConnectionRedrawSliceRequest(\n            connections,\n            cache,\n            0,\n            session,\n            batch.items,\n            this._alignWorkerResults(results, connections.length),\n          ),\n        );\n      })\n      .catch(() => {\n        if (!this._mediator.execute<boolean>(new IsConnectionRedrawCurrentRequest(session))) {\n          return;\n        }\n\n        this._mediator.execute<void>(\n          new RunConnectionRedrawSliceRequest(connections, cache, 0, session, batch.items),\n        );\n      });\n  }\n\n  private _alignWorkerResults(\n    results: IConnectionWorkerResultItem[],\n    connectionCount: number,\n  ): (IConnectionWorkerResultItem | undefined)[] {\n    const aligned: (IConnectionWorkerResultItem | undefined)[] = new Array(connectionCount);\n\n    for (const result of results) {\n      const index = result.originalIndex;\n      if (index < 0 || index >= connectionCount) {\n        continue;\n      }\n\n      aligned[index] = result;\n    }\n\n    return aligned;\n  }\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { RedrawConnectionsRequest } from './redraw-connections-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { CreateConnectionMarkersRequest } from '../create-connection-markers';\nimport { CompleteConnectionRedrawRequest } from './pipeline/complete-connection-redraw';\nimport { RunConnectionRedrawSliceRequest } from './pipeline/run-connection-redraw-slice';\nimport { StartConnectionRedrawRequest } from './pipeline/start-connection-redraw';\nimport { IConnectionRedrawSession } from './models';\nimport { ShouldUseConnectionWorkerRequest } from './worker/should-use-connection-worker';\nimport { StartConnectionWorkerRedrawRequest } from './worker/start-connection-worker-redraw';\nimport { FConnectionBase } from '../../../f-connection-v2';\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(_: RedrawConnectionsRequest): void {\n    const session = this._mediator.execute<IConnectionRedrawSession>(\n      new StartConnectionRedrawRequest(),\n    );\n\n    this._createMarkersForCreate();\n\n    this._createMarkersForSnap();\n\n    const connections = [...this._store.connections.getAll()];\n    const connectorRectCache = new Map<string, IRoundedRect>();\n\n    if (!connections.length) {\n      this._mediator.execute<void>(new CompleteConnectionRedrawRequest(session));\n\n      return;\n    }\n\n    if (this._shouldUseConnectionWorker(connections.length)) {\n      this._redrawUsingWorker(connections, connectorRectCache, session);\n    } else {\n      this._redrawWithoutWorker(connections, connectorRectCache, session);\n    }\n  }\n\n  private _createMarkersForCreate(): void {\n    const instance = this._store.connections.getForCreate();\n    if (instance) {\n      this._mediator.execute<boolean>(new CreateConnectionMarkersRequest(instance));\n    }\n  }\n\n  private _createMarkersForSnap(): void {\n    const instance = this._store.connections.getForSnap();\n    if (instance) {\n      this._mediator.execute<boolean>(new CreateConnectionMarkersRequest(instance));\n    }\n  }\n\n  private _shouldUseConnectionWorker(connectionLength: number) {\n    return this._mediator.execute<boolean>(new ShouldUseConnectionWorkerRequest(connectionLength));\n  }\n\n  private _redrawUsingWorker(\n    connections: FConnectionBase[],\n    cache: Map<string, IRoundedRect>,\n    session: IConnectionRedrawSession,\n  ): void {\n    this._mediator.execute<void>(\n      new StartConnectionWorkerRedrawRequest(connections, cache, session),\n    );\n  }\n\n  private _redrawWithoutWorker(\n    connections: FConnectionBase[],\n    cache: Map<string, IRoundedRect>,\n    session: IConnectionRedrawSession,\n  ): void {\n    this._mediator.execute<void>(\n      new RunConnectionRedrawSliceRequest(connections, cache, 0, session),\n    );\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 RemoveConnectionForCreateFromStore\n  implements IExecution<RemoveConnectionForCreateFromStoreRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: RemoveConnectionForCreateFromStoreRequest): void {\n    this._store.connections.removeInstanceForCreate();\n  }\n}\n","import { FConnectionBase } from '../../../f-connection-v2';\n\nexport class RemoveConnectionFromStoreRequest {\n  static readonly fToken = Symbol('RemoveConnectionFromStoreRequest');\n\n  constructor(public readonly connection: FConnectionBase) {}\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';\n\n@Injectable()\n@FExecutionRegister(RemoveConnectionFromStoreRequest)\nexport class RemoveConnectionFromStore implements IExecution<\n  RemoveConnectionFromStoreRequest,\n  void\n> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ connection }: RemoveConnectionFromStoreRequest): void {\n    this._store.connections.remove(connection);\n    this._store.emitConnectionChanges();\n  }\n}\n","import { FConnectionMarkerBase } from '../../../f-connection-v2/components/connection-marker/models';\n\nexport class RemoveConnectionMarkerFromStoreRequest {\n  static readonly fToken = Symbol('RemoveConnectionMarkerFromStoreRequest');\n\n  constructor(public readonly instance: FConnectionMarkerBase) {}\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 RemoveConnectionMarkerFromStore implements IExecution<\n  RemoveConnectionMarkerFromStoreRequest,\n  void\n> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ instance }: RemoveConnectionMarkerFromStoreRequest): void {\n    this._store.connectionMarkers.remove(instance);\n    this._store.emitNodeChanges();\n  }\n}\n","export class RemoveConnectionWaypointRequest {\n  static readonly fToken = Symbol('RemoveConnectionWaypointRequest');\n  constructor(\n    public readonly waypointIndex: number,\n    public readonly connectionId: string,\n  ) {}\n}\n","export class EmitEndDragSequenceEventRequest {\n  static readonly fToken = Symbol('EmitEndDragSequenceEventRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { EmitEndDragSequenceEventRequest } from './emit-end-drag-sequence-event-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { F_CSS_CLASS } from '../../../domain';\n\n/**\n * Execution that handles the end of a drag sequence.\n */\n@Injectable()\n@FExecutionRegister(EmitEndDragSequenceEventRequest)\nexport class EmitEndDragSequenceEvent implements IExecution<EmitEndDragSequenceEventRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  public handle(_request: EmitEndDragSequenceEventRequest): void {\n    this._store.flowHost.classList.remove(F_CSS_CLASS.DRAG_AND_DROP.DRAGGING);\n\n    this._dragSession.reset();\n    this._emitEvent();\n  }\n\n  private _emitEvent(): void {\n    this._store.fDraggable?.fDragEnded?.emit();\n  }\n}\n","export class EmitStartDragSequenceEventRequest {\n  static readonly fToken = Symbol('EmitStartDragSequenceEventRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { EmitStartDragSequenceEventRequest } from './emit-start-drag-sequence-event-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport {\n  EmitSelectionChangeEventRequest,\n  FDraggableDataContext,\n  FDragStartedEvent,\n} from '../../../f-draggable';\nimport { F_CSS_CLASS } from '../../../domain';\n\n/**\n * Execution that starts the drag sequence by adding a dragging class to the host element\n */\n@Injectable()\n@FExecutionRegister(EmitStartDragSequenceEventRequest)\nexport class EmitStartDragSequenceEvent\n  implements IExecution<EmitStartDragSequenceEventRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(_request: EmitStartDragSequenceEventRequest): void {\n    if (this._dragContext.draggableItems.length > 0) {\n      this._store.flowHost.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    const event = this._dragContext.draggableItems[0].getEvent();\n    this._store.fDraggable?.fDragStarted?.emit(\n      new FDragStartedEvent(\n        event.kind,\n        event.data ? { ...event.data } : undefined,\n        event.fEventType,\n      ),\n    );\n  }\n}\n","export class EmitSelectionChangeEventRequest {\n  static readonly fToken = Symbol('EmitSelectionChangeEventRequest');\n}\n","import { Injectable } from '@angular/core';\nimport { IPoint, Point } from '@foblex/2d';\nimport { DragHandlerBase, IPointerEvent } from './infrastructure';\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: DragHandlerBase<unknown>[] = [];\n\n  public autoPanFrameId: number | null = null;\n\n  public lastPointerPosition: IPoint | null = null;\n\n  public isAutoPanCanvasMoved: boolean = false;\n\n  public reset(): void {\n    for (const h of this.draggableItems) {\n      try {\n        h.destroy?.();\n      } catch {\n        console.error(`Error while destroying drag handler of type ${h['type']}`);\n      }\n    }\n    this.draggableItems = [];\n    this.onPointerDownScale = 1;\n    this.onPointerDownPosition = new Point(0, 0);\n    this.autoPanFrameId = null;\n    this.lastPointerPosition = null;\n    this.isAutoPanCanvasMoved = false;\n  }\n\n  public markSelectionAsChanged(): void {\n    this.isSelectedChanged = true;\n  }\n\n  public rememberPointerPosition(event: IPointerEvent): void {\n    this.lastPointerPosition = event.getPosition();\n  }\n\n  public isEmpty(): boolean {\n    return !this.draggableItems.length;\n  }\n}\n","import { ICurrentSelection } from '../domain';\n\nexport class FSelectionChangeEvent implements ICurrentSelection {\n  /** @deprecated Use `nodeIds` */\n  public get fNodeIds(): string[] {\n    return this.nodeIds;\n  }\n\n  /** @deprecated Use `groupIds` */\n  public get fGroupIds(): string[] {\n    return this.groupIds;\n  }\n\n  /** @deprecated Use `connectionIds` */\n  public get fConnectionIds(): string[] {\n    return this.connectionIds;\n  }\n\n  constructor(\n    public readonly nodeIds: string[],\n    public readonly groupIds: string[],\n    public readonly connectionIds: string[],\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { EmitSelectionChangeEventRequest } from './emit-selection-change-event-request';\nimport { FComponentsStore, NotifyTransformChangedRequest } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { GetCurrentSelectionRequest, ICurrentSelection } from '../../../domain';\nimport { FSelectionChangeEvent } from '../../f-selection-change-event';\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 EmitSelectionChangeEvent implements IExecution<EmitSelectionChangeEventRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  public handle(_request: EmitSelectionChangeEventRequest): void {\n    if (!this._dragSession.isSelectedChanged) {\n      return;\n    }\n\n    this._emitSelectionChange(this._getSelection());\n    this._dragSession.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._store.fDraggable?.fSelectionChange.emit(\n      new FSelectionChangeEvent(selection.fNodeIds, selection.fGroupIds, selection.fConnectionIds),\n    );\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class GetNormalizedParentNodeRectRequest {\n  static readonly fToken = Symbol('GetNormalizedParentNodeRectRequest');\n\n  constructor(public readonly nodeOrGroup: FNodeBase) {}\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 GetNormalizedParentNodeRect implements IExecution<\n  GetNormalizedParentNodeRectRequest,\n  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() as string);\n    if (parentNode) {\n      result = this._getParentRect(parentNode);\n    }\n\n    return result;\n  }\n\n  private _getNode(fId: string): FNodeBase | undefined {\n    return this._store.nodes.get(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>(\n      new GetNormalizedElementRectRequest(nodeOrGroup.hostElement),\n    );\n  }\n\n  private _getNodePadding(nodeOrGroup: FNodeBase, rect: IRect): [number, number, number, number] {\n    return this._mediator.execute<[number, number, number, number]>(\n      new GetNodePaddingRequest(nodeOrGroup, rect),\n    );\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","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 IsArrayHasParentNode implements IExecution<IsArrayHasParentNodeRequest, boolean> {\n  public handle(request: IsArrayHasParentNodeRequest): boolean {\n    return this._isParentNodeInArray(\n      this._getParentNodeIds(request.fParentNodes),\n      request.fDraggedNodes,\n    );\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 * @deprecated Use `FNodeConnectionsIntersectionEvent`.\n * Will be removed in a future major release.\n */\nexport class FNodeIntersectedWithConnections {\n  constructor(\n    /** @deprecated Use `nodeId` */\n    public readonly fNodeId: string,\n    /** @deprecated Use `connectionIds` */\n    public readonly fConnectionIds: string[],\n  ) {}\n}\n\n/**\n * @public API\n * Emitted when a dragged node intersects connections\n * that are not attached to this node.\n */\nexport class FNodeConnectionsIntersectionEvent extends FNodeIntersectedWithConnections {\n  public constructor(\n    public readonly nodeId: string,\n    public readonly connectionIds: string[],\n  ) {\n    // keep backward compat fields on the same instance\n    super(nodeId, connectionIds);\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class DetectConnectionsUnderDragNodeRequest {\n  static readonly fToken = Symbol('DetectConnectionsUnderDragNodeRequest');\n  constructor(public readonly nodeOrGroup: FNodeBase) {}\n}\n","import { GetIntersections, IRoundedRect } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { DetectConnectionsUnderDragNodeRequest } from './detect-connections-under-drag-node-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FNodeConnectionsIntersectionEvent } from '../../index';\nimport { FNodeBase } from '../../../f-node';\nimport { GetNormalizedConnectorRectRequest } from '../../../domain';\nimport { FConnectionBase } from '../../../f-connection-v2';\n\n@Injectable()\n@FExecutionRegister(DetectConnectionsUnderDragNodeRequest)\nexport class DetectConnectionsUnderDragNode implements IExecution<\n  DetectConnectionsUnderDragNodeRequest,\n  void\n> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ nodeOrGroup }: DetectConnectionsUnderDragNodeRequest): void {\n    const sourceConnectorIds = this._collectConnectableConnectorIds(nodeOrGroup, 'source');\n    const targetConnectorIds = this._collectConnectableConnectorIds(nodeOrGroup, 'target');\n\n    if (!sourceConnectorIds.size || !targetConnectorIds.size) {\n      return;\n    }\n\n    const attachedConnectionIds = this._collectAttachedConnectionIds(\n      sourceConnectorIds,\n      targetConnectorIds,\n    );\n\n    const underNode = this._collectConnectionsUnderNode(nodeOrGroup);\n\n    const intersectedIds: string[] = [];\n    for (const c of underNode) {\n      const id = c.fId();\n      if (!attachedConnectionIds.has(id)) {\n        intersectedIds.push(id);\n      }\n    }\n\n    if (!intersectedIds.length) {\n      return;\n    }\n\n    this._store.fDraggable?.fNodeIntersectedWithConnections.emit(\n      new FNodeConnectionsIntersectionEvent(nodeOrGroup.fId(), intersectedIds),\n    );\n    this._store.fDraggable?.fNodeConnectionsIntersection.emit(\n      new FNodeConnectionsIntersectionEvent(nodeOrGroup.fId(), intersectedIds),\n    );\n  }\n\n  private _collectConnectableConnectorIds(node: FNodeBase, kind: 'target' | 'source'): Set<string> {\n    const list = kind === 'source' ? this._store.outputs.getAll() : this._store.inputs.getAll();\n\n    const ids = new Set<string>();\n    for (const c of list) {\n      if (c.canBeConnected && node.isContains(c.hostElement)) {\n        ids.add(c.fId());\n      }\n    }\n\n    return ids;\n  }\n\n  private _collectAttachedConnectionIds(\n    outputConnectorIds: Set<string>,\n    inputConnectorIds: Set<string>,\n  ): Set<string> {\n    const ids = new Set<string>();\n\n    for (const connection of this._store.connections.getAll()) {\n      if (\n        outputConnectorIds.has(connection.fOutputId()) ||\n        inputConnectorIds.has(connection.fInputId())\n      ) {\n        ids.add(connection.fId());\n      }\n    }\n\n    return ids;\n  }\n\n  private _collectConnectionsUnderNode(node: FNodeBase): FConnectionBase[] {\n    const nodeRect = this._mediator.execute<IRoundedRect>(\n      new GetNormalizedConnectorRectRequest(node.hostElement, false),\n    );\n\n    const result: FConnectionBase[] = [];\n    for (const c of this._store.connections.getAll()) {\n      if (this._hasIntersection(c, nodeRect)) {\n        result.push(c);\n      }\n    }\n\n    return result;\n  }\n\n  private _hasIntersection(connection: FConnectionBase, nodeRect: IRoundedRect): boolean {\n    return (\n      GetIntersections.getRoundedRectIntersectionsWithSVGPath(\n        connection.fPath().hostElement,\n        nodeRect,\n      ).length > 0\n    );\n  }\n}\n","import { IsArrayHasParentNode } from './is-array-has-parent-node';\nimport { GetNormalizedParentNodeRect } from './get-normalized-parent-node-rect';\nimport { DetectConnectionsUnderDragNode } from './detect-connections-under-drag-node';\nimport { EmitStartDragSequenceEvent } from './emit-start-drag-sequence-event';\nimport { EmitEndDragSequenceEvent } from './emit-end-drag-sequence-event';\nimport { EmitSelectionChangeEvent } from './emit-selection-change-event';\n\nexport const DRAG_AND_DROP_COMMON_PROVIDERS = [\n  EmitStartDragSequenceEvent,\n\n  EmitEndDragSequenceEvent,\n\n  EmitSelectionChangeEvent,\n\n  GetNormalizedParentNodeRect,\n\n  IsArrayHasParentNode,\n\n  DetectConnectionsUnderDragNode,\n];\n","import { IPoint, Point, PointExtensions } from '@foblex/2d';\n\nexport type TAutoPanMode = 'rebase' | 'direct';\n\nconst REBASE_AUTO_PAN_KINDS = new Set(['create-connection', 'reassign-connection', 'drag-node']);\nconst DIRECT_AUTO_PAN_KINDS = new Set(['selection-area']);\nconst AUXILIARY_AUTO_PAN_KINDS = new Set(['assign-to-container']);\n\nexport function resolveAutoPanMode(kinds: string[]): TAutoPanMode | null {\n  let result: TAutoPanMode | null = null;\n\n  for (const kind of kinds) {\n    if (AUXILIARY_AUTO_PAN_KINDS.has(kind)) {\n      continue;\n    }\n\n    const next = REBASE_AUTO_PAN_KINDS.has(kind)\n      ? 'rebase'\n      : DIRECT_AUTO_PAN_KINDS.has(kind)\n        ? 'direct'\n        : null;\n\n    if (!next) {\n      return null;\n    }\n\n    if (!result) {\n      result = next;\n\n      continue;\n    }\n\n    if (result !== next) {\n      return null;\n    }\n  }\n\n  return result;\n}\n\nexport function calculateAutoPanDelta(\n  pointerPosition: IPoint,\n  hostRect: DOMRect,\n  threshold: number,\n  speed: number,\n  acceleration: boolean,\n): IPoint {\n  return PointExtensions.initialize(\n    calculateAutoPanAxisDelta(\n      pointerPosition.x,\n      hostRect.left,\n      hostRect.right,\n      threshold,\n      speed,\n      acceleration,\n    ),\n    calculateAutoPanAxisDelta(\n      pointerPosition.y,\n      hostRect.top,\n      hostRect.bottom,\n      threshold,\n      speed,\n      acceleration,\n    ),\n  );\n}\n\nexport function calculateAutoPanAxisDelta(\n  pointerCoordinate: number,\n  min: number,\n  max: number,\n  threshold: number,\n  speed: number,\n  acceleration: boolean,\n): number {\n  const normalizedThreshold = Math.max(0, threshold);\n  const normalizedSpeed = Math.max(0, speed);\n\n  if (!normalizedThreshold || !normalizedSpeed) {\n    return 0;\n  }\n\n  if (pointerCoordinate <= min + normalizedThreshold) {\n    const ratio = clamp(\n      (min + normalizedThreshold - pointerCoordinate) / normalizedThreshold,\n      0,\n      1,\n    );\n\n    return resolveAxisSpeed(ratio, normalizedSpeed, acceleration);\n  }\n\n  if (pointerCoordinate >= max - normalizedThreshold) {\n    const ratio = clamp(\n      (pointerCoordinate - (max - normalizedThreshold)) / normalizedThreshold,\n      0,\n      1,\n    );\n\n    return -resolveAxisSpeed(ratio, normalizedSpeed, acceleration);\n  }\n\n  return 0;\n}\n\nexport function rebaseAutoPanPointerDownPosition(\n  position: IPoint,\n  canvasDelta: IPoint,\n  scale: number,\n): Point {\n  const normalizedScale = scale || 1;\n\n  return Point.fromPoint(position).add(Point.fromPoint(canvasDelta).div(normalizedScale));\n}\n\nfunction resolveAxisSpeed(ratio: number, speed: number, acceleration: boolean): number {\n  return acceleration ? speed * ratio : speed;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n  return Math.max(min, Math.min(max, value));\n}\n","export class RunAutoPanFrameRequest {\n  static readonly fToken = Symbol('RunAutoPanFrameRequest');\n}\n","export class StopAutoPanRequest {\n  static readonly fToken = Symbol('StopAutoPanRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { StopAutoPanRequest } from './stop-auto-pan-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\n\n@Injectable()\n@FExecutionRegister(StopAutoPanRequest)\nexport class StopAutoPan implements IExecution<StopAutoPanRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(_request: StopAutoPanRequest): void {\n    if (this._dragContext.autoPanFrameId !== null) {\n      cancelAnimationFrame(this._dragContext.autoPanFrameId);\n      this._dragContext.autoPanFrameId = null;\n    }\n\n    if (!this._dragContext.isAutoPanCanvasMoved) {\n      return;\n    }\n\n    this._store.fCanvas?.emitCanvasChangeEvent();\n    this._dragContext.isAutoPanCanvasMoved = false;\n  }\n}\n","export class ScheduleAutoPanFrameRequest {\n  static readonly fToken = Symbol('ScheduleAutoPanFrameRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IPoint, PointExtensions } from '@foblex/2d';\nimport { ScheduleAutoPanFrameRequest } from './schedule-auto-pan-frame-request';\nimport { StopAutoPanRequest } from '../stop-auto-pan';\nimport { RunAutoPanFrameRequest } from '../run-auto-pan-frame';\nimport { FComponentsStore, INSTANCES } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { calculateAutoPanDelta, resolveAutoPanMode } from '../auto-pan.utils';\n\n@Injectable()\n@FExecutionRegister(ScheduleAutoPanFrameRequest)\nexport class ScheduleAutoPanFrame implements IExecution<ScheduleAutoPanFrameRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(_request: ScheduleAutoPanFrameRequest): void {\n    if (!this._canAutoPan() || !this._hasAutoPanDelta()) {\n      this._mediator.execute<void>(new StopAutoPanRequest());\n\n      return;\n    }\n\n    if (this._dragContext.autoPanFrameId !== null) {\n      return;\n    }\n\n    this._dragContext.autoPanFrameId = requestAnimationFrame(() => {\n      this._dragContext.autoPanFrameId = null;\n      this._mediator.execute<void>(new RunAutoPanFrameRequest());\n    });\n  }\n\n  private _canAutoPan(): boolean {\n    return (\n      !!this._store.fFlow &&\n      !!this._store.fCanvas &&\n      !!this._store.fDraggable?.isDragStarted &&\n      !!this._autoPan() &&\n      !!this._getAutoPanMode() &&\n      this._edgeThreshold() > 0 &&\n      this._speed() > 0\n    );\n  }\n\n  private _hasAutoPanDelta(): boolean {\n    const delta = this._getAutoPanDelta();\n\n    return !!delta.x || !!delta.y;\n  }\n\n  private _getAutoPanDelta(): IPoint {\n    const pointerPosition = this._dragContext.lastPointerPosition;\n    const flowHost = this._store.fFlow?.hostElement;\n\n    if (!pointerPosition || !flowHost) {\n      return PointExtensions.initialize();\n    }\n\n    return calculateAutoPanDelta(\n      pointerPosition,\n      flowHost.getBoundingClientRect(),\n      this._edgeThreshold(),\n      this._speed(),\n      this._acceleration(),\n    );\n  }\n\n  private _getAutoPanMode() {\n    return resolveAutoPanMode(this._dragContext.draggableItems.map((x) => x.getEvent().kind));\n  }\n\n  private _edgeThreshold(): number {\n    return Math.max(0, this._autoPan()?.fEdgeThreshold() ?? 0);\n  }\n\n  private _speed(): number {\n    return Math.max(0, this._autoPan()?.fSpeed() ?? 0);\n  }\n\n  private _acceleration(): boolean {\n    return !!this._autoPan()?.fAcceleration();\n  }\n\n  private _autoPan() {\n    return this._store.instances.get(INSTANCES.AUTO_PAN);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IPoint, Point, PointExtensions } from '@foblex/2d';\nimport { RunAutoPanFrameRequest } from './run-auto-pan-frame-request';\nimport { FComponentsStore, INSTANCES } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport {\n  calculateAutoPanDelta,\n  rebaseAutoPanPointerDownPosition,\n  resolveAutoPanMode,\n  TAutoPanMode,\n} from '../auto-pan.utils';\nimport { StopAutoPanRequest } from '../stop-auto-pan';\nimport { ScheduleAutoPanFrameRequest } from '../schedule-auto-pan-frame';\n\n@Injectable()\n@FExecutionRegister(RunAutoPanFrameRequest)\nexport class RunAutoPanFrame implements IExecution<RunAutoPanFrameRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(_request: RunAutoPanFrameRequest): void {\n    const mode = this._getAutoPanMode();\n    if (!this._canAutoPan(mode)) {\n      this._mediator.execute<void>(new StopAutoPanRequest());\n\n      return;\n    }\n\n    const delta = this._getAutoPanDelta();\n    if (!delta.x && !delta.y) {\n      this._mediator.execute<void>(new StopAutoPanRequest());\n\n      return;\n    }\n\n    this._applyCanvasDelta(delta, mode);\n    this._replayLastPointerMove();\n    this._mediator.execute<void>(new ScheduleAutoPanFrameRequest());\n  }\n\n  private _applyCanvasDelta(delta: IPoint, mode: TAutoPanMode): void {\n    const transform = this._store.transform;\n\n    if (mode === 'rebase') {\n      this._dragContext.onPointerDownPosition = rebaseAutoPanPointerDownPosition(\n        this._dragContext.onPointerDownPosition,\n        delta,\n        this._dragContext.onPointerDownScale || transform.scale || 1,\n      );\n    }\n\n    transform.position = Point.fromPoint(transform.position).add(delta);\n    this._store.fCanvas?.redraw();\n    this._dragContext.isAutoPanCanvasMoved = true;\n  }\n\n  private _replayLastPointerMove(): void {\n    const pointerPosition = this._dragContext.lastPointerPosition;\n    if (!pointerPosition) {\n      return;\n    }\n\n    const difference = this._getPointerPositionInCanvas(pointerPosition)\n      .div(this._dragContext.onPointerDownScale)\n      .sub(this._dragContext.onPointerDownPosition);\n\n    this._dragContext.draggableItems.forEach((item) => {\n      item.onPointerMove({ ...difference });\n    });\n  }\n\n  private _getPointerPositionInCanvas(pointerPosition: IPoint): Point {\n    return Point.fromPoint(pointerPosition).elementTransform(this._store.flowHost);\n  }\n\n  private _canAutoPan(mode: TAutoPanMode | null): mode is TAutoPanMode {\n    return (\n      !!this._store.fFlow &&\n      !!this._store.fCanvas &&\n      !!this._store.fDraggable?.isDragStarted &&\n      !!this._autoPan() &&\n      !!mode &&\n      this._edgeThreshold() > 0 &&\n      this._speed() > 0\n    );\n  }\n\n  private _getAutoPanMode(): TAutoPanMode | null {\n    return resolveAutoPanMode(this._dragContext.draggableItems.map((x) => x.getEvent().kind));\n  }\n\n  private _getAutoPanDelta(): IPoint {\n    const pointerPosition = this._dragContext.lastPointerPosition;\n    const flowHost = this._store.fFlow?.hostElement;\n\n    if (!pointerPosition || !flowHost) {\n      return PointExtensions.initialize();\n    }\n\n    return calculateAutoPanDelta(\n      pointerPosition,\n      flowHost.getBoundingClientRect(),\n      this._edgeThreshold(),\n      this._speed(),\n      this._acceleration(),\n    );\n  }\n\n  private _edgeThreshold(): number {\n    return Math.max(0, this._autoPan()?.fEdgeThreshold() ?? 0);\n  }\n\n  private _speed(): number {\n    return Math.max(0, this._autoPan()?.fSpeed() ?? 0);\n  }\n\n  private _acceleration(): boolean {\n    return !!this._autoPan()?.fAcceleration();\n  }\n\n  private _autoPan() {\n    return this._store.instances.get(INSTANCES.AUTO_PAN);\n  }\n}\n","import { RunAutoPanFrame } from './run-auto-pan-frame';\nimport { ScheduleAutoPanFrame } from './schedule-auto-pan-frame';\nimport { StopAutoPan } from './stop-auto-pan';\n\nexport const DRAG_AUTO_PAN_PROVIDERS = [ScheduleAutoPanFrame, RunAutoPanFrame, StopAutoPan];\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class DragCanvasFinalizeRequest {\n  static readonly fToken = Symbol('DragCanvasFinalizeRequest');\n  constructor(public readonly event: IPointerEvent) {}\n}\n","export abstract class IPointerEvent {\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  public get touchEvent(): TouchEvent {\n    return this._event as TouchEvent;\n  }\n\n  public get touches(): TouchList {\n    return this.touchEvent.touches;\n  }\n\n  protected constructor(\n    private readonly _event: MouseEvent | TouchEvent,\n    private _target?: HTMLElement,\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  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 {\n      x: (this.originalEvent as MouseEvent).clientX,\n      y: (this.originalEvent as MouseEvent).clientY,\n    };\n  }\n}\n","import { IPointerEvent } from './i-pointer-event';\n\nexport class IPointerUpEvent extends IPointerEvent {\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  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  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","export class FDragStartedEvent<TData = unknown> {\n  /** New identifier (can differ from legacy). */\n  public readonly kind: string;\n\n  /** Payload. */\n  public readonly data?: TData;\n\n  /**\n   * Legacy identifier.\n   * Kept as own property to preserve Object.keys / hasOwnProperty / spread behavior.\n   * @deprecated Use `kind`\n   */\n  public readonly fEventType: string;\n\n  /** @deprecated Use `data` */\n  public get fData(): TData | undefined {\n    return this.data;\n  }\n\n  constructor(kind: string, data?: TData, legacyKind?: string) {\n    this.kind = kind;\n    this.data = data;\n\n    // own property (max compatibility)\n    this.fEventType = legacyKind ?? kind;\n  }\n}\n","import { IPoint } from '@foblex/2d';\nimport { FDragStartedEvent } from '../f-drag-started-event';\nimport { IDragSessionContext, IDragSessionFeature } from './i-drag-session-feature';\nimport { IPointerEvent } from './pointer-events';\n\nexport abstract class DragHandlerBase<TData> {\n  protected abstract readonly type: string;\n  protected abstract readonly kind: string;\n\n  protected data(): TData | undefined {\n    return undefined;\n  }\n\n  private readonly _features: IDragSessionFeature[] = [];\n\n  public getEvent(): FDragStartedEvent<TData> {\n    return new FDragStartedEvent(this.kind, this.data(), this.type);\n  }\n\n  public attachFeature(feature: IDragSessionFeature): void {\n    this._features.push(feature);\n  }\n\n  protected featuresPrepare(ctx: IDragSessionContext): void {\n    for (const feature of this._features) {\n      feature.onPrepare?.(ctx);\n    }\n  }\n\n  protected featuresMove(ctx: IDragSessionContext, delta: IPoint): void {\n    for (const feature of this._features) {\n      feature.onMove?.(ctx, delta);\n    }\n  }\n\n  protected featuresFinalize(ctx: IDragSessionContext, delta: IPoint): void {\n    for (const feature of this._features) {\n      feature.onFinalize?.(ctx, delta);\n    }\n  }\n\n  protected featuresEnd(ctx: IDragSessionContext): void {\n    for (const feature of this._features) {\n      feature.onEnd?.(ctx);\n    }\n  }\n\n  public prepareDragSequence?(): void;\n  public abstract onPointerMove(difference: IPoint, event?: IPointerEvent): void;\n  public onPointerUp?(): void;\n\n  public destroy?(): void;\n}\n","import { IHasHostElement } from '../i-has-host-element';\nimport { Signal } from '@angular/core';\nimport { EFConnectableSide } from '../f-connection-v2/enums/e-f-connectable-side';\n\nexport type FConnectorKind = 'input' | 'output' | 'outlet';\n\nexport abstract class FConnectorBase implements IHasHostElement {\n  public abstract readonly kind: FConnectorKind;\n\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, FConnectorKind } 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 override kind: FConnectorKind = 'input';\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  standalone: false,\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  standalone: false,\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  standalone: false,\n  selector: \"[fDragHandle]\",\n  host: {\n    class: \"f-drag-handle f-component\",\n  },\n})\nexport class FDragHandleDirective {}\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  standalone: false,\n  selector: '[fGroup]',\n  exportAs: 'fComponent',\n  host: {\n    '[attr.data-f-group-id]': 'fId()',\n    '[attr.data-f-group-parent-id]': 'fParentId()',\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.connectors.length) {\n      return;\n    }\n\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 {\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  standalone: false,\n  selector: '[fNode]',\n  exportAs: 'fComponent',\n  host: {\n    '[attr.data-f-node-id]': 'fId()',\n    '[attr.data-f-node-parent-id]': 'fParentId()',\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.connectors.length) {\n      return;\n    }\n\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  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 { F_NODE } from '../../f-node';\nimport { castToEnum } from '@foblex/utils';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddConnectorToStoreRequest,\n  F_CSS_CLASS,\n  RemoveConnectorFromStoreRequest,\n} from '../../domain';\nimport { FConnectorBase } from '../f-connector-base';\nimport { stringAttribute } from '../../utils';\nimport { EFConnectableSide } from '../../f-connection-v2';\n\nlet uniqueId = 0;\n\n@Directive({\n  standalone: false,\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 AddConnectorToStoreRequest(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 RemoveConnectorFromStoreRequest(this));\n  }\n}\n","import { FConnectorBase } from './f-connector-base';\nimport { FNodeInputBase } from './f-node-input';\nimport { Directive } from '@angular/core';\n\n@Directive()\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, FConnectorKind } 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 override kind: FConnectorKind = 'outlet';\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 { FMediator } from '@foblex/mediator';\nimport { AddConnectorToStoreRequest, RemoveConnectorFromStoreRequest } from '../../domain';\nimport { stringAttribute } from '../../utils';\nimport { EFConnectableSide } from '../../f-connection-v2';\n\nlet uniqueId = 0;\n\n@Directive({\n  standalone: false,\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 AddConnectorToStoreRequest(this));\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemoveConnectorFromStoreRequest(this));\n  }\n}\n","import { Directive, InjectionToken, Signal } from '@angular/core';\nimport { FSourceConnectorBase } from '../f-source-connector-base';\nimport { FConnectorKind } from '../f-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 override kind: FConnectorKind = 'output';\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 { F_NODE_OUTPUT, FNodeOutputBase } from './f-node-output-base';\nimport { F_NODE } from '../../f-node';\nimport { castToEnum } from '@foblex/utils';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddConnectorToStoreRequest,\n  F_CSS_CLASS,\n  RemoveConnectorFromStoreRequest,\n} from '../../domain';\nimport { FConnectorBase } from '../f-connector-base';\nimport { stringAttribute } from '../../utils';\nimport { EFConnectableSide } from '../../f-connection-v2';\n\nlet uniqueId = 0;\n\n@Directive({\n  standalone: false,\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 AddConnectorToStoreRequest(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 RemoveConnectorFromStoreRequest(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 { IPointerEvent } from '../../../infrastructure';\n\nexport class CreateConnectionFinalizeRequest {\n  static readonly fToken = Symbol('CreateConnectionFinalizeRequest');\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { FNodeOutletBase } from '../../../../f-connectors';\n\nexport class ResolveConnectableOutputForOutletRequest {\n  static readonly fToken = Symbol('ResolveConnectableOutputForOutletRequest');\n  constructor(public readonly outlet: FNodeOutletBase) {}\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 { ResolveConnectableOutputForOutletRequest } from './resolve-connectable-output-for-outlet-request';\nimport { FExecutionRegister } from '@foblex/mediator';\n\n@Injectable()\n@FExecutionRegister(ResolveConnectableOutputForOutletRequest)\nexport class ResolveConnectableOutputForOutlet\n  implements IHandler<ResolveConnectableOutputForOutletRequest, FConnectorBase | undefined>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ outlet }: ResolveConnectableOutputForOutletRequest): FConnectorBase | undefined {\n    const node = this._findOwnerNode(outlet);\n    if (!node) {\n      throw new Error('The fOutlet must belong to an fNode');\n    }\n\n    const output = this._findFirstConnectableOutputInNode(node);\n    if (!output) {\n      throw new Error('Outlet requires at least one connectable output in the same node.');\n    }\n\n    return output;\n  }\n\n  private _findOwnerNode(outlet: FNodeOutletBase): FNodeBase | undefined {\n    const host = outlet.hostElement;\n\n    return this._store.nodes.getAll().find((n) => n.isContains(host));\n  }\n\n  private _findFirstConnectableOutputInNode(node: FNodeBase): FConnectorBase | undefined {\n    return this._store.outputs\n      .getAll()\n      .find((x) => node.isContains(x.hostElement) && x.canBeConnected);\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class FCreateConnectionEvent {\n  // -----------------------------\n  // Preferred API\n  // -----------------------------\n\n  /** Source connector id */\n  public readonly sourceId: string;\n\n  /** Target connector id (can be undefined if dropped to nowhere) */\n  public readonly targetId: string | undefined;\n\n  /** Pointer position where the user dropped pointer. */\n  public readonly dropPosition: IPoint;\n\n  // -----------------------------\n  // Deprecated compatibility API (keep as FIELDS)\n  // -----------------------------\n\n  /** @deprecated Use `sourceId` */\n  public readonly fOutputId: string;\n\n  /** @deprecated Use `targetId` */\n  public readonly fInputId: string | undefined;\n\n  /** @deprecated Use `dropPosition` */\n  public readonly fDropPosition: IPoint;\n\n  constructor(sourceId: string, targetId: string | undefined, dropPosition: IPoint) {\n    // preferred\n    this.sourceId = sourceId;\n    this.targetId = targetId;\n    this.dropPosition = dropPosition;\n\n    // legacy aliases\n    this.fOutputId = sourceId;\n    this.fInputId = targetId;\n    this.fDropPosition = dropPosition;\n  }\n}\n","import { FMediator } from '@foblex/mediator';\nimport { IPoint, IRoundedRect, PointExtensions, RectExtensions, RoundedRect } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { FConnectorBase, FNodeOutletBase, FNodeOutputBase } from '../../../../f-connectors';\nimport { DragHandlerBase, FDragHandlerResult } from '../../../infrastructure';\nimport { ICreateConnectionEventData } from '../i-create-connection-event-data';\nimport {\n  ConnectionBehaviourBuilder,\n  ConnectionBehaviourBuilderRequest,\n  EFConnectableSide,\n  IConnectionEndpointRotationContext,\n} from '../../../../f-connection-v2';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FConnectionForCreateComponent, FSnapConnectionComponent } from '../../../../f-connection';\nimport {\n  CalculateClosestConnectorRequest,\n  CalculateTargetConnectorsToConnectRequest,\n  GetConnectorRectReferenceRequest,\n  IClosestConnectorRef,\n  IConnectorRectRef,\n  MarkConnectableConnectorsRequest,\n  ResolveConnectionEndpointRotationContextRequest,\n  UnmarkConnectableConnectorsRequest,\n} from '../../../../domain';\n\ntype FSourceConnector = FNodeOutputBase | FNodeOutletBase;\n\n@Injectable()\nexport class CreateConnectionHandler extends DragHandlerBase<ICreateConnectionEventData> {\n  protected readonly type = 'create-connection';\n  protected readonly kind = 'create-connection';\n\n  protected override data() {\n    return { fOutputOrOutletId: this._sourceRef.connector.fId() };\n  }\n\n  private readonly _result = inject(FDragHandlerResult);\n  private readonly _mediator = inject(FMediator);\n  private readonly _connectionBehaviour = inject(ConnectionBehaviourBuilder);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _connection(): FConnectionForCreateComponent {\n    return this._store.connections.getForCreate() as FConnectionForCreateComponent;\n  }\n\n  private get _snapConnection(): FSnapConnectionComponent | undefined {\n    return this._store.connections.getForSnap();\n  }\n\n  private _targets: IConnectorRectRef[] = [];\n  private _sourceRef!: IConnectorRectRef<FSourceConnector>;\n  private _pointerDown = new RoundedRect();\n\n  public initialize(source: FSourceConnector, pointer: IPoint): void {\n    this._sourceRef = this._mediator.execute<IConnectorRectRef<FSourceConnector>>(\n      new GetConnectorRectReferenceRequest(source),\n    );\n    this._pointerDown = RoundedRect.fromRect(RectExtensions.initialize(pointer.x, pointer.y));\n  }\n\n  public override prepareDragSequence(): void {\n    this._collectAndMarkTargets();\n    this._initSnapConnection();\n    this._initCreateConnection();\n\n    this._connection.show();\n    this.onPointerMove(PointExtensions.initialize());\n\n    this._result.setData({\n      toConnectorRect: this._pointerDown,\n      canBeConnectedInputs: this._targets,\n      fOutputId: this._sourceRef.connector.fId(),\n    });\n  }\n\n  private _collectAndMarkTargets(): void {\n    this._targets = this._mediator.execute<IConnectorRectRef[]>(\n      new CalculateTargetConnectorsToConnectRequest(\n        this._sourceRef.connector,\n        this._sourceRef.rect.gravityCenter,\n      ),\n    );\n\n    this._mediator.execute(\n      new MarkConnectableConnectorsRequest(this._targets.map((x) => x.connector)),\n    );\n  }\n\n  private _initSnapConnection(): void {\n    if (!this._snapConnection) {\n      return;\n    }\n    this._snapConnection.fOutputId.set(this._sourceRef.connector.fId());\n    this._snapConnection.initialize();\n  }\n\n  private _initCreateConnection(): void {\n    this._connection.fOutputId.set(this._sourceRef.connector.fId());\n    this._connection.initialize();\n  }\n\n  public override onPointerMove(difference: IPoint): void {\n    const pointer = this._pointerDown.addPoint(difference);\n\n    const closest = this._findClosestTarget(pointer);\n    const targetSide = closest?.connector.fConnectableSide || EFConnectableSide.TOP;\n\n    this._drawCreateConnection(pointer, targetSide);\n\n    const snap = this._snapConnection;\n    if (!snap) {\n      return;\n    }\n\n    const snapTarget = closest && closest.distance < snap.fSnapThreshold ? closest : undefined;\n    this._drawSnapConnection(snapTarget);\n  }\n\n  private _findClosestTarget(pointer: IPoint): IClosestConnectorRef | undefined {\n    return this._mediator.execute<IClosestConnectorRef | undefined>(\n      new CalculateClosestConnectorRequest(pointer, this._targets),\n    );\n  }\n\n  private _drawCreateConnection(pointer: IRoundedRect, targetSide: EFConnectableSide): void {\n    const line = this._connectionBehaviour.handle(\n      new ConnectionBehaviourBuilderRequest(\n        this._sourceRef.rect,\n        pointer,\n        this._connection,\n        this._sourceRef.connector.fConnectableSide,\n        targetSide,\n        this._resolveRotationContext(this._sourceRef.connector),\n      ),\n    );\n\n    this._connection.setLine(line);\n    this._connection.redraw();\n  }\n\n  private _drawSnapConnection(target: IClosestConnectorRef | undefined): void {\n    const snap = this._snapConnection;\n    if (!snap) {\n      return;\n    }\n\n    if (!target) {\n      snap.hide();\n\n      return;\n    }\n\n    const line = this._connectionBehaviour.handle(\n      new ConnectionBehaviourBuilderRequest(\n        this._sourceRef.rect,\n        target.rect,\n        snap,\n        this._sourceRef.connector.fConnectableSide,\n        target.connector.fConnectableSide,\n        this._resolveRotationContext(this._sourceRef.connector),\n        this._resolveRotationContext(target.connector),\n      ),\n    );\n    snap.show();\n    snap.setLine(line);\n    snap.redraw();\n  }\n\n  public override onPointerUp(): void {\n    this._connection.redraw();\n    this._connection.hide();\n    this._snapConnection?.hide();\n\n    this._mediator.execute(\n      new UnmarkConnectableConnectorsRequest(this._targets.map((x) => x.connector)),\n    );\n  }\n\n  private _resolveRotationContext(\n    connector?: FConnectorBase,\n  ): IConnectionEndpointRotationContext | undefined {\n    return this._mediator.execute<IConnectionEndpointRotationContext | undefined>(\n      new ResolveConnectionEndpointRotationContextRequest(connector),\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 { CreateConnectionFinalizeRequest } from './create-connection-finalize-request';\nimport { FExecutionRegister, FMediator } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../../f-draggable-data-context';\nimport { ResolveConnectableOutputForOutletRequest } from '../resolve-connectable-output-for-outlet';\nimport { FCreateConnectionEvent } from '../f-create-connection-event';\nimport { CreateConnectionHandler } from '../create-connection-handler';\nimport { FDragHandlerResult } from '../../../infrastructure';\nimport { ICreateConnectionDragResult } from '../i-create-connection-drag-result';\nimport { IPointerEvent } from '../../../infrastructure';\nimport { FindConnectableConnectorUsingPriorityAndPositionRequest } from '../../../../domain';\n\n@Injectable()\n@FExecutionRegister(CreateConnectionFinalizeRequest)\nexport class CreateConnectionFinalize implements IHandler<CreateConnectionFinalizeRequest, void> {\n  private readonly _result: FDragHandlerResult<ICreateConnectionDragResult> =\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(): CreateConnectionHandler {\n    return this._dragContext.draggableItems[0] as CreateConnectionHandler;\n  }\n\n  public handle(request: CreateConnectionFinalizeRequest): 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 CreateConnectionHandler);\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 ResolveConnectableOutputForOutletRequest(output as FNodeOutletBase),\n        )\n      : output;\n  }\n\n  private _getOutput(): FNodeOutputBase | undefined {\n    return this._store.outputs.get(this._result.getData().fOutputId);\n  }\n\n  private _getOutlet(): FNodeOutletBase | undefined {\n    return this._store.outlets.get(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 CreateConnectionCreateDragHandlerRequest {\n  static readonly fToken = Symbol('CreateConnectionCreateDragHandlerRequest');\n  constructor(\n    public readonly eventPosition: IPoint,\n    public readonly source: FNodeOutputBase | FNodeOutletBase,\n  ) {}\n}\n","import { IPoint, ITransformModel, Point } from '@foblex/2d';\nimport { FExecutionRegister, IHandler } from '@foblex/mediator';\nimport { inject, Injectable } from '@angular/core';\nimport { CreateConnectionCreateDragHandlerRequest } from './create-connection-create-drag-handler-request';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { FDraggableDataContext } from '../../../../f-draggable-data-context';\nimport { DragHandlerInjector } from '../../../../infrastructure';\nimport { CreateConnectionHandler } from '../../create-connection-handler';\n\n@Injectable()\n@FExecutionRegister(CreateConnectionCreateDragHandlerRequest)\nexport class CreateConnectionCreateDragHandler\n  implements IHandler<CreateConnectionCreateDragHandlerRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  public handle({ source, eventPosition }: CreateConnectionCreateDragHandlerRequest): void {\n    this._dragContext.onPointerDownScale = this._transform.scale;\n\n    const pointerDownInFlowSpace = this._toFlowSpace(eventPosition);\n    this._dragContext.onPointerDownPosition = pointerDownInFlowSpace;\n\n    // 2) Convert to canvas-local space for connection creation handler\n    const pointerDownInCanvasSpace = this._toCanvasSpace(pointerDownInFlowSpace);\n\n    const handler = this._dragInjector.get(CreateConnectionHandler);\n    handler.initialize(source, pointerDownInCanvasSpace);\n\n    this._dragContext.draggableItems = [handler];\n  }\n\n  /**\n   * Converts raw pointer position to \"flow host space\":\n   * - applies elementTransform(flowHost)\n   * - normalizes by scale\n   */\n  private _toFlowSpace(position: IPoint): Point {\n    return Point.fromPoint(position)\n      .elementTransform(this._store.flowHost)\n      .div(this._transform.scale);\n  }\n\n  /**\n   * Converts from flow space to \"canvas local space\":\n   * - removes transform offsets (position, scaledPosition)\n   * - keeps normalization consistent\n   *\n   * (Same math as your original chain, just named.)\n   */\n  private _toCanvasSpace(flowSpace: IPoint): Point {\n    return Point.fromPoint(flowSpace)\n      .mult(this._transform.scale)\n      .sub(this._transform.position)\n      .sub(this._transform.scaledPosition)\n      .div(this._transform.scale);\n  }\n}\n","import { FNodeBase } from '../../../../../f-node';\nimport { IPointerEvent } from '../../../../infrastructure';\n\nexport class CreateConnectionFromOutletPreparationRequest {\n  static readonly fToken = Symbol('CreateConnectionFromOutletPreparationRequest');\n  constructor(\n    public readonly event: IPointerEvent,\n    public readonly node: FNodeBase,\n  ) {}\n}\n","import { FExecutionRegister, FMediator, IHandler } from '@foblex/mediator';\nimport { IPoint } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { CreateConnectionFromOutletPreparationRequest } from './create-connection-from-outlet-preparation-request';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { FConnectorBase, FNodeOutletBase, FNodeOutputBase } from '../../../../../f-connectors';\nimport { ResolveConnectableOutputForOutletRequest } from '../../resolve-connectable-output-for-outlet';\nimport { CreateConnectionCreateDragHandlerRequest } from '../create-drag-handler';\nimport { FNodeBase } from '../../../../../f-node';\n\n@Injectable()\n@FExecutionRegister(CreateConnectionFromOutletPreparationRequest)\nexport class CreateConnectionFromOutletPreparation\n  implements IHandler<CreateConnectionFromOutletPreparationRequest, void>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ event, node }: CreateConnectionFromOutletPreparationRequest): void {\n    const outlet = this._findOutlet(node);\n    if (!outlet) {\n      return;\n    }\n\n    outlet.setOutputs(this._getOutputs(node));\n\n    if (!outlet.canBeConnected) {\n      return;\n    }\n\n    const source = outlet.isConnectionFromOutlet ? outlet : this._resolveOutput(outlet);\n    if (!source || !source.canBeConnected) {\n      return;\n    }\n\n    this._startDrag(event.getPosition(), source);\n  }\n\n  private _findOutlet(node: FNodeBase): FNodeOutletBase | undefined {\n    return this._store.outlets.getAll().find((x) => node.isContains(x.hostElement));\n  }\n\n  private _getOutputs(node: FNodeBase): FConnectorBase[] {\n    return this._store.outputs.getAll().filter((x) => node.isContains(x.hostElement));\n  }\n\n  private _resolveOutput(outlet: FNodeOutletBase): FNodeOutputBase | undefined {\n    return this._mediator.execute<FNodeOutputBase | undefined>(\n      new ResolveConnectableOutputForOutletRequest(outlet),\n    );\n  }\n\n  private _startDrag(position: IPoint, source: FNodeOutputBase | FNodeOutletBase): void {\n    this._mediator.execute<void>(new CreateConnectionCreateDragHandlerRequest(position, source));\n  }\n}\n","import { FNodeBase } from '../../../../../f-node';\nimport { IPointerEvent } from '../../../../infrastructure';\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 { FExecutionRegister, FMediator, IHandler } from '@foblex/mediator';\nimport { inject, Injectable } from '@angular/core';\nimport { CreateConnectionFromOutputPreparationRequest } from './create-connection-from-output-preparation-request';\nimport { FNodeOutputBase, isNodeOutput } from '../../../../../f-connectors';\nimport { CreateConnectionCreateDragHandlerRequest } from '../create-drag-handler';\nimport { FComponentsStore } from '../../../../../f-storage';\nimport { FNodeBase } from '../../../../../f-node';\nimport { IPoint } from '@foblex/2d';\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({ event, node }: CreateConnectionFromOutputPreparationRequest): void {\n    if (!isNodeOutput(event.targetElement) || this._hasOutlet(node)) {\n      return;\n    }\n\n    const output = this._findOutput(event.targetElement);\n    if (!output || !output.canBeConnected) {\n      return;\n    }\n\n    this._startDrag(event.getPosition(), output);\n  }\n\n  private _hasOutlet(node: FNodeBase): boolean {\n    return this._store.outlets.getAll().some((x) => node.isContains(x.hostElement));\n  }\n\n  private _findOutput(target: HTMLElement): FNodeOutputBase | undefined {\n    return this._store.outputs.getAll().find((x) => x.hostElement.contains(target));\n  }\n\n  private _startDrag(position: IPoint, source: FNodeOutputBase): void {\n    this._mediator.execute<void>(new CreateConnectionCreateDragHandlerRequest(position, source));\n  }\n}\n","import { FEventTrigger } from '../../../../domain';\nimport { IPointerEvent } from '../../../infrastructure';\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 { FExecutionRegister, FMediator, 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 { CreateConnectionFromOutletPreparationRequest } from './from-outlet-preparation';\nimport { CreateConnectionFromOutputPreparationRequest } from './from-output-preparation';\nimport { FDraggableDataContext } from '../../../f-draggable-data-context';\nimport { FEventTrigger, isValidEventTrigger } from '../../../../domain';\nimport { IPointerEvent } from '../../../infrastructure';\n\n@Injectable()\n@FExecutionRegister(CreateConnectionPreparationRequest)\nexport class CreateConnectionPreparation implements IHandler<\n  CreateConnectionPreparationRequest,\n  void\n> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle({ event, fTrigger }: CreateConnectionPreparationRequest): void {\n    if (!this._isValidConditions() || !this._isValidTrigger(event, fTrigger)) {\n      return;\n    }\n\n    const isOutlet = isNodeOutlet(event.targetElement);\n    const isOutput = !isOutlet && isNodeOutput(event.targetElement);\n    if (!isOutlet && !isOutput) {\n      return;\n    }\n\n    const node = this._findOwnerNode(event.targetElement);\n    if (!node) {\n      return;\n    }\n\n    if (isOutlet) {\n      this._mediator.execute<void>(new CreateConnectionFromOutletPreparationRequest(event, node));\n    } else {\n      this._mediator.execute<void>(new CreateConnectionFromOutputPreparationRequest(event, node));\n    }\n  }\n\n  private _findOwnerNode(target: HTMLElement | SVGElement): FNodeBase | undefined {\n    return this._store.nodes.getAll().find((n) => n.isContains(target));\n  }\n\n  private _isValidConditions(): boolean {\n    return this._dragContext.isEmpty() && !!this._store.connections.getForCreate();\n  }\n\n  private _isValidTrigger(event: IPointerEvent, fTrigger: FEventTrigger): boolean {\n    return isValidEventTrigger(event.originalEvent, fTrigger);\n  }\n}\n","import { IPointerEvent } from '../../../infrastructure';\n\nexport class ReassignConnectionFinalizeRequest {\n  static readonly fToken = Symbol('ReassignConnectionFinalizeRequest');\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { IPoint } from '@foblex/2d';\n\nexport type FConnectionEndpoint = 'source' | 'target';\n\nexport class FReassignConnectionEvent {\n  // -----------------------------\n  // Preferred API\n  // -----------------------------\n\n  public readonly connectionId: string;\n\n  /** Which endpoint was reassigned. */\n  public readonly endpoint: FConnectionEndpoint;\n\n  /** Previous and next ids; `next*Id` can be `undefined` if dropped to nowhere. */\n  public readonly previousSourceId: string;\n  public readonly nextSourceId: string | undefined;\n\n  public readonly previousTargetId: string;\n  public readonly nextTargetId: string | undefined;\n\n  /** Pointer position where the user dropped pointer. */\n  public readonly dropPosition: IPoint;\n\n  // -----------------------------\n  // Deprecated compatibility API (keep as FIELDS)\n  // -----------------------------\n\n  /** @deprecated Use `endpoint === 'source'` */\n  public readonly isSourceReassign: boolean;\n\n  /** @deprecated Use `endpoint === 'target'` */\n  public readonly isTargetReassign: boolean;\n\n  /** @deprecated Use `previousSourceId` */\n  public readonly oldSourceId: string;\n\n  /** @deprecated Use `nextSourceId` */\n  public readonly newSourceId: string | undefined;\n\n  /** @deprecated Use `previousTargetId` */\n  public readonly oldTargetId: string;\n\n  /** @deprecated Use `nextTargetId` */\n  public readonly newTargetId: string | undefined;\n\n  /** @deprecated Use `dropPosition` */\n  public readonly dropPoint: IPoint;\n\n  constructor(\n    connectionId: string,\n    endpoint: FConnectionEndpoint,\n\n    previousSourceId: string,\n    nextSourceId: string | undefined,\n\n    previousTargetId: string,\n    nextTargetId: string | undefined,\n\n    dropPosition: IPoint,\n  ) {\n    // preferred\n    this.connectionId = connectionId;\n    this.endpoint = endpoint;\n\n    this.previousSourceId = previousSourceId;\n    this.nextSourceId = nextSourceId;\n\n    this.previousTargetId = previousTargetId;\n    this.nextTargetId = nextTargetId;\n\n    this.dropPosition = dropPosition;\n\n    // legacy aliases (same values / references)\n    this.isSourceReassign = endpoint === 'source';\n    this.isTargetReassign = endpoint === 'target';\n\n    this.oldSourceId = previousSourceId;\n    this.newSourceId = nextSourceId;\n\n    this.oldTargetId = previousTargetId;\n    this.newTargetId = nextTargetId;\n\n    this.dropPoint = dropPosition;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ReassignConnectionFinalizeRequest } from './reassign-connection-finalize-request';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable-data-context';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FDraggableBase } from '../../../f-draggable-base';\nimport { FReassignConnectionEvent } from '../f-reassign-connection-event';\nimport { FConnectorBase } from '../../../../f-connectors';\nimport {\n  FindConnectableConnectorUsingPriorityAndPositionRequest,\n  IConnectorRectRef,\n} from '../../../../domain';\nimport { FDragHandlerResult } from '../../../infrastructure';\nimport { IPointerEvent } from '../../../infrastructure';\nimport { IReassignConnectionDragResult } from '../i-reassign-connection-drag-result';\nimport { ReassignConnectionHandler } from '../reassign-connection-handler';\n\n@Injectable()\n@FExecutionRegister(ReassignConnectionFinalizeRequest)\nexport class ReassignConnectionFinalize implements IExecution<\n  ReassignConnectionFinalizeRequest,\n  void\n> {\n  private readonly _dragResult =\n    inject<FDragHandlerResult<IReassignConnectionDragResult>>(FDragHandlerResult);\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  private get _dragDirective(): FDraggableBase {\n    return this._store.fDraggable as FDraggableBase;\n  }\n\n  public handle({ event }: ReassignConnectionFinalizeRequest): void {\n    const handler = this._findReassignHandler();\n    if (!handler) {\n      return;\n    }\n\n    this._emitIfChanged(event);\n    handler.onPointerUp();\n  }\n\n  private _findReassignHandler(): ReassignConnectionHandler | undefined {\n    const result = this._dragContext.draggableItems.find(\n      (x) => x.getEvent().fEventType === 'reassign-connection',\n    );\n\n    return result as ReassignConnectionHandler | undefined;\n  }\n\n  private _emitIfChanged(event: IPointerEvent): void {\n    const data = this._dragResult.getData();\n    const nextConnector = this._findConnectableConnector(event, data.candidates);\n\n    if (nextConnector && !this._isReassignedToDifferentConnector(data, nextConnector)) {\n      return;\n    }\n\n    this._dragDirective.fReassignConnection.emit(this._buildEvent(data, event, nextConnector));\n  }\n\n  private _findConnectableConnector(\n    event: IPointerEvent,\n    connectable: IConnectorRectRef[],\n  ): FConnectorBase | undefined {\n    return this._mediator.execute<FConnectorBase | undefined>(\n      new FindConnectableConnectorUsingPriorityAndPositionRequest(event.getPosition(), connectable),\n    );\n  }\n\n  private _isReassignedToDifferentConnector(\n    data: IReassignConnectionDragResult,\n    next: FConnectorBase,\n  ): boolean {\n    const connection = data.connection;\n\n    if (data.draggedEnd === 'target') {\n      return connection.fInputId() !== next.fId();\n    }\n\n    return connection.fOutputId() !== next.fId();\n  }\n\n  private _buildEvent(\n    data: IReassignConnectionDragResult,\n    event: IPointerEvent,\n    next?: FConnectorBase,\n  ): FReassignConnectionEvent {\n    const connection = data.connection;\n\n    return new FReassignConnectionEvent(\n      connection.fId(),\n      data.draggedEnd,\n      connection.fOutputId(),\n      data.draggedEnd === 'source' ? next?.fId() : undefined,\n      connection.fInputId(),\n      data.draggedEnd === 'target' ? next?.fId() : undefined,\n      event.getPosition(),\n    );\n  }\n}\n","import { FEventTrigger } from '../../../../domain';\nimport { IPointerEvent } from '../../../infrastructure';\n\nexport class ReassignConnectionPreparationRequest {\n  static readonly fToken = Symbol('ReassignConnectionPreparationRequest');\n  constructor(\n    public readonly event: IPointerEvent,\n    public readonly fTrigger: FEventTrigger,\n  ) {}\n}\n","import { IPoint } from '@foblex/2d';\nimport { FConnectionBase } from '../../../../f-connection-v2';\n\nexport function isPointerInsideStartOrEndDragHandles(\n  connection: FConnectionBase,\n  position: IPoint,\n): boolean {\n  return isDragHandleEnd(connection, position) || isDragHandleStart(connection, position);\n}\n\nexport function isDragHandleEnd(connection: FConnectionBase, position: IPoint): boolean {\n  return (\n    connection.fDragHandleEnd()?.point &&\n    _isPointInsideCircle(position, connection.fDragHandleEnd().point) &&\n    !connection.fDraggingDisabled()\n  );\n}\n\nexport function isDragHandleStart(connection: FConnectionBase, position: IPoint): boolean {\n  return (\n    !!connection.fDragHandleStart()?.point &&\n    _isPointInsideCircle(position, connection.fDragHandleStart()!.point) &&\n    !connection.fDraggingDisabled() &&\n    connection.fReassignableStart()\n  );\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 { IPoint, RectExtensions, RoundedRect } from '@foblex/2d';\nimport { FSnapConnectionComponent } from '../../../../f-connection';\nimport { IClosestConnectorRef, IConnectorRectRef } from '../../../../domain';\n\nexport interface IReassignHandler {\n  /** List used by finalize step to find the closest candidate connector. */\n  candidates(): IConnectorRectRef[];\n\n  /** Collects candidates and marks them in UI. */\n  collectAndMarkCandidates(): void;\n\n  /** Optional snap connection preview. */\n  setSnapConnection(snap: FSnapConnectionComponent | undefined): void;\n\n  onPointerMove(difference: IPoint): void;\n  onPointerUp(): void;\n}\n\nexport function withinSnapThreshold(\n  fClosestConnector: IClosestConnectorRef | undefined,\n  snapConnection: FSnapConnectionComponent,\n): IClosestConnectorRef | undefined {\n  return fClosestConnector && fClosestConnector.distance < snapConnection.fSnapThreshold\n    ? fClosestConnector\n    : undefined;\n}\n\nexport function rectFromPoint(point: IPoint) {\n  return RoundedRect.fromRect(RectExtensions.initialize(point.x, point.y));\n}\n","import { FMediator } from '@foblex/mediator';\nimport {\n  CalculateClosestConnectorRequest,\n  CalculateSourceConnectorsToConnectRequest,\n  IClosestConnectorRef,\n  IConnectorRectRef,\n  MarkConnectableConnectorsRequest,\n  ResolveConnectionEndpointRotationContextRequest,\n  UnmarkConnectableConnectorsRequest,\n} from '../../../../domain';\nimport {\n  FConnectorBase,\n  FNodeInputDirective,\n  FNodeOutputDirective,\n} from '../../../../f-connectors';\nimport { FSnapConnectionComponent } from '../../../../f-connection';\nimport { ILine, IPoint, RoundedRect } from '@foblex/2d';\nimport { IReassignHandler, rectFromPoint, withinSnapThreshold } from './i-reassign-handler';\nimport {\n  ConnectionBehaviourBuilder,\n  ConnectionBehaviourBuilderRequest,\n  EFConnectableSide,\n  FConnectionBase,\n  IConnectionEndpointRotationContext,\n} from '../../../../f-connection-v2';\n\nexport class ReassignConnectionSourceHandler implements IReassignHandler {\n  private _candidates: IConnectorRectRef[] = [];\n  private _snap: FSnapConnectionComponent | undefined;\n\n  private readonly _anchorRect: RoundedRect;\n\n  private get _source(): FNodeOutputDirective {\n    return this._sourceRef.connector as FNodeOutputDirective;\n  }\n\n  private get _target(): FNodeInputDirective {\n    return this._targetRef.connector as FNodeInputDirective;\n  }\n\n  constructor(\n    private readonly _mediator: FMediator,\n    private readonly _behaviour: ConnectionBehaviourBuilder,\n    private readonly _connection: FConnectionBase,\n    private readonly _sourceRef: IConnectorRectRef,\n    private readonly _targetRef: IConnectorRectRef,\n  ) {\n    this._anchorRect = rectFromPoint(this._connection.line.point1);\n  }\n\n  public candidates(): IConnectorRectRef[] {\n    return this._candidates;\n  }\n\n  public collectAndMarkCandidates(): void {\n    this._candidates = this._mediator.execute<IConnectorRectRef[]>(\n      new CalculateSourceConnectorsToConnectRequest(\n        this._target,\n        this._targetRef.rect.gravityCenter,\n      ),\n    );\n\n    // Ensure current source is always available as a fallback.\n    if (!this._candidates.some((x) => x.connector.fId() === this._source.fId())) {\n      this._candidates.push(this._sourceRef);\n    }\n\n    this._mediator.execute(\n      new MarkConnectableConnectorsRequest(this._candidates.map((x) => x.connector)),\n    );\n  }\n\n  public setSnapConnection(snap: FSnapConnectionComponent | undefined): void {\n    this._snap = snap;\n    if (!snap) {\n      return;\n    }\n\n    // Target is fixed, so snap-preview always ends at current target.\n    snap.fInputId.set(this._connection.fInputId());\n    snap.initialize();\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const pointerRect = this._anchorRect.addPoint(difference);\n\n    const closest = this._findClosest(pointerRect.gravityCenter);\n    const sourceSide = closest?.connector.fConnectableSide ?? this._source.fConnectableSide;\n\n    this._draw(pointerRect, sourceSide);\n\n    const snap = this._snap;\n    if (!snap) {\n      return;\n    }\n\n    this._drawSnap(withinSnapThreshold(closest, snap));\n  }\n\n  private _findClosest(point: IPoint): IClosestConnectorRef | undefined {\n    return this._mediator.execute<IClosestConnectorRef | undefined>(\n      new CalculateClosestConnectorRequest(point, this._candidates),\n    );\n  }\n\n  private _draw(sourceRect: RoundedRect, sourceSide: EFConnectableSide): void {\n    const line = this._behaviour.handle(\n      new ConnectionBehaviourBuilderRequest(\n        sourceRect,\n        this._targetRef.rect,\n        this._connection,\n        sourceSide,\n        this._targetRef.connector.fConnectableSide,\n        undefined,\n        this._resolveRotationContext(this._targetRef.connector),\n      ),\n    );\n\n    this._connection.setLine(line);\n    this._connection.redraw();\n  }\n\n  private _drawSnap(closest: IClosestConnectorRef | undefined): void {\n    const snap = this._snap;\n    if (!snap) {\n      return;\n    }\n\n    if (!closest) {\n      snap.hide();\n\n      return;\n    }\n\n    const line: ILine = this._behaviour.handle(\n      new ConnectionBehaviourBuilderRequest(\n        closest.rect,\n        this._targetRef.rect,\n        snap,\n        closest.connector.fConnectableSide,\n        this._target.fConnectableSide,\n        this._resolveRotationContext(closest.connector),\n        this._resolveRotationContext(this._targetRef.connector),\n      ),\n    );\n\n    snap.show();\n    snap.setLine(line);\n    snap.redraw();\n  }\n\n  public onPointerUp(): void {\n    this._draw(this._anchorRect, this._sourceRef.connector.fConnectableSide);\n    this._snap?.hide();\n\n    this._mediator.execute(\n      new UnmarkConnectableConnectorsRequest(this._candidates.map((x) => x.connector)),\n    );\n  }\n\n  private _resolveRotationContext(\n    connector?: FConnectorBase,\n  ): IConnectionEndpointRotationContext | undefined {\n    return this._mediator.execute<IConnectionEndpointRotationContext | undefined>(\n      new ResolveConnectionEndpointRotationContextRequest(connector),\n    );\n  }\n}\n","import { FMediator } from '@foblex/mediator';\nimport {\n  CalculateClosestConnectorRequest,\n  CalculateTargetConnectorsToConnectRequest,\n  IClosestConnectorRef,\n  IConnectorRectRef,\n  MarkConnectableConnectorsRequest,\n  ResolveConnectionEndpointRotationContextRequest,\n  UnmarkConnectableConnectorsRequest,\n} from '../../../../domain';\nimport {\n  FConnectorBase,\n  FNodeInputDirective,\n  FNodeOutputDirective,\n} from '../../../../f-connectors';\nimport { FSnapConnectionComponent } from '../../../../f-connection';\nimport { ILine, IPoint, RoundedRect } from '@foblex/2d';\nimport { IReassignHandler, rectFromPoint, withinSnapThreshold } from './i-reassign-handler';\nimport {\n  ConnectionBehaviourBuilder,\n  ConnectionBehaviourBuilderRequest,\n  EFConnectableSide,\n  FConnectionBase,\n  IConnectionEndpointRotationContext,\n} from '../../../../f-connection-v2';\n\nexport class ReassignConnectionTargetHandler implements IReassignHandler {\n  private _candidates: IConnectorRectRef[] = [];\n  private _snap: FSnapConnectionComponent | undefined;\n\n  private readonly _anchorRect: RoundedRect;\n\n  private get _source(): FNodeOutputDirective {\n    return this._sourceRef.connector as FNodeOutputDirective;\n  }\n\n  private get _target(): FNodeInputDirective {\n    return this._targetRef.connector as FNodeInputDirective;\n  }\n\n  constructor(\n    private readonly _mediator: FMediator,\n    private readonly _behaviour: ConnectionBehaviourBuilder,\n    private readonly _connection: FConnectionBase,\n    private readonly _sourceRef: IConnectorRectRef,\n    private readonly _targetRef: IConnectorRectRef,\n  ) {\n    this._anchorRect = rectFromPoint(this._connection.line.point2);\n  }\n\n  public candidates(): IConnectorRectRef[] {\n    return this._candidates;\n  }\n\n  public collectAndMarkCandidates(): void {\n    this._candidates = this._mediator.execute<IConnectorRectRef[]>(\n      new CalculateTargetConnectorsToConnectRequest(\n        this._source,\n        this._sourceRef.rect.gravityCenter,\n      ),\n    );\n\n    // Ensure current target exists (usually it already does).\n    const currentTargetId = this._connection.fInputId();\n    if (currentTargetId && !this._candidates.some((x) => x.connector.fId() === currentTargetId)) {\n      this._candidates.push(this._targetRef);\n    }\n\n    this._mediator.execute(\n      new MarkConnectableConnectorsRequest(this._candidates.map((x) => x.connector)),\n    );\n  }\n\n  public setSnapConnection(snap: FSnapConnectionComponent | undefined): void {\n    this._snap = snap;\n    if (!snap) {\n      return;\n    }\n\n    // Source is fixed, so snap-preview always starts at current source.\n    snap.fOutputId.set(this._connection.fOutputId());\n    snap.initialize();\n  }\n\n  public onPointerMove(difference: IPoint): void {\n    const pointerRect = this._anchorRect.addPoint(difference);\n\n    const closest = this._findClosest(pointerRect.gravityCenter);\n    const targetSide = closest?.connector.fConnectableSide ?? this._target.fConnectableSide;\n\n    this._draw(pointerRect, targetSide);\n\n    const snap = this._snap;\n    if (!snap) {\n      return;\n    }\n\n    this._drawSnap(withinSnapThreshold(closest, snap));\n  }\n\n  public onPointerUp(): void {\n    this._draw(this._anchorRect, this._targetRef.connector.fConnectableSide);\n    this._snap?.hide();\n\n    this._mediator.execute(\n      new UnmarkConnectableConnectorsRequest(this._candidates.map((x) => x.connector)),\n    );\n  }\n\n  private _findClosest(point: IPoint): IClosestConnectorRef | undefined {\n    return this._mediator.execute<IClosestConnectorRef | undefined>(\n      new CalculateClosestConnectorRequest(point, this._candidates),\n    );\n  }\n\n  private _draw(targetRect: RoundedRect, targetSide: EFConnectableSide): void {\n    const line = this._behaviour.handle(\n      new ConnectionBehaviourBuilderRequest(\n        this._sourceRef.rect,\n        targetRect,\n        this._connection,\n        this._source.fConnectableSide,\n        targetSide,\n        this._resolveRotationContext(this._sourceRef.connector),\n        undefined,\n      ),\n    );\n\n    this._connection.setLine(line);\n    this._connection.redraw();\n  }\n\n  private _drawSnap(closest: IClosestConnectorRef | undefined): void {\n    const snap = this._snap;\n    if (!snap) {\n      return;\n    }\n\n    if (!closest) {\n      snap.hide();\n\n      return;\n    }\n\n    const line: ILine = this._behaviour.handle(\n      new ConnectionBehaviourBuilderRequest(\n        this._sourceRef.rect,\n        closest.rect,\n        snap,\n        this._source.fConnectableSide,\n        closest.connector.fConnectableSide,\n        this._resolveRotationContext(this._sourceRef.connector),\n        this._resolveRotationContext(closest.connector),\n      ),\n    );\n\n    snap.show();\n    snap.setLine(line);\n    snap.redraw();\n  }\n\n  private _resolveRotationContext(\n    connector?: FConnectorBase,\n  ): IConnectionEndpointRotationContext | undefined {\n    return this._mediator.execute<IConnectionEndpointRotationContext | undefined>(\n      new ResolveConnectionEndpointRotationContextRequest(connector),\n    );\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DragHandlerBase, FDragHandlerResult } from '../../../infrastructure';\nimport { IReassignConnectionEventData } from '../i-reassign-connection-event-data';\nimport { IReassignConnectionDragResult } from '../i-reassign-connection-drag-result';\nimport { FMediator } from '@foblex/mediator';\nimport { ConnectionBehaviourBuilder, FConnectionBase } from '../../../../f-connection-v2';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FSnapConnectionComponent } from '../../../../f-connection';\nimport { GetConnectorRectReferenceRequest, IConnectorRectRef } from '../../../../domain';\nimport { IReassignHandler, rectFromPoint } from './i-reassign-handler';\nimport { ReassignConnectionSourceHandler } from './reassign-connection-source-handler';\nimport { ReassignConnectionTargetHandler } from './reassign-connection-target-handler';\nimport { IPoint } from '@foblex/2d';\n\n@Injectable()\nexport class ReassignConnectionHandler extends DragHandlerBase<IReassignConnectionEventData> {\n  protected readonly type = 'reassign-connection';\n  protected readonly kind = 'reassign-connection';\n  protected override data() {\n    return { fConnectionId: this._connection.fId() };\n  }\n\n  private readonly _result =\n    inject<FDragHandlerResult<IReassignConnectionDragResult>>(FDragHandlerResult);\n  private readonly _mediator = inject(FMediator);\n  private readonly _connectionBehaviour = inject(ConnectionBehaviourBuilder);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _snapConnection(): FSnapConnectionComponent | undefined {\n    return this._store.connections.getForSnap();\n  }\n\n  private _connection!: FConnectionBase;\n  private _draggedEnd!: 'source' | 'target';\n  private _sourceRef!: IConnectorRectRef;\n  private _targetRef!: IConnectorRectRef;\n\n  private _reassignHandler!: IReassignHandler;\n\n  public initialize(connection: FConnectionBase, isTargetDragHandle: boolean): void {\n    this._connection = connection;\n    this._draggedEnd = isTargetDragHandle ? 'target' : 'source';\n\n    this._sourceRef = this._mediator.execute<IConnectorRectRef>(\n      new GetConnectorRectReferenceRequest(\n        this._store.outputs.require(this._connection.fOutputId()),\n      ),\n    );\n    this._targetRef = this._mediator.execute<IConnectorRectRef>(\n      new GetConnectorRectReferenceRequest(this._store.inputs.require(this._connection.fInputId())),\n    );\n\n    this._reassignHandler =\n      this._draggedEnd === 'target' ? this._createTargetHandler() : this._createSourceHandler();\n  }\n\n  private _createSourceHandler(): ReassignConnectionSourceHandler {\n    return new ReassignConnectionSourceHandler(\n      this._mediator,\n      this._connectionBehaviour,\n      this._connection,\n      this._sourceRef,\n      this._targetRef,\n    );\n  }\n\n  private _createTargetHandler(): ReassignConnectionTargetHandler {\n    return new ReassignConnectionTargetHandler(\n      this._mediator,\n      this._connectionBehaviour,\n      this._connection,\n      this._sourceRef,\n      this._targetRef,\n    );\n  }\n\n  public override prepareDragSequence(): void {\n    this._reassignHandler.collectAndMarkCandidates();\n    this._reassignHandler.setSnapConnection(this._snapConnection);\n\n    this._result.setData({\n      draggedEnd: this._draggedEnd,\n      sourceAnchorRect: rectFromPoint(this._connection.line.point1),\n      targetAnchorRect: rectFromPoint(this._connection.line.point2),\n      candidates: this._reassignHandler.candidates(),\n      connection: this._connection,\n    });\n  }\n\n  public override onPointerMove(difference: IPoint): void {\n    this._reassignHandler.onPointerMove(difference);\n  }\n\n  public override onPointerUp(): void {\n    this._reassignHandler.onPointerUp();\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ReassignConnectionPreparationRequest } from './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 {\n  isDragHandleEnd,\n  isPointerInsideStartOrEndDragHandles,\n} from './is-pointer-inside-start-or-end-drag-handles';\nimport { calculatePointerInFlow } from '../../../../utils';\nimport { FCanvasBase } from '../../../../f-canvas';\nimport { FConnectionBase } from '../../../../f-connection-v2';\nimport { DragHandlerInjector } from '../../../infrastructure';\nimport { ReassignConnectionHandler } from '../reassign-connection-handler';\n\n@Injectable()\n@FExecutionRegister(ReassignConnectionPreparationRequest)\nexport class ReassignConnectionPreparation implements IExecution<\n  ReassignConnectionPreparationRequest,\n  void\n> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  private get _connections(): FConnectionBase[] {\n    return this._store.connections.getAll();\n  }\n\n  public handle(request: ReassignConnectionPreparationRequest): void {\n    if (!this._dragContext.isEmpty() || !this._isValidTrigger(request)) {\n      return;\n    }\n\n    const pointerInFlow = calculatePointerInFlow(\n      request.event.getPosition(),\n      this._store.flowHost,\n      this._transform,\n    );\n    const connection = this._findConnectionAt(pointerInFlow);\n\n    if (!connection) {\n      return;\n    }\n\n    this._capturePointerDown(request);\n    this._startDrag(connection, pointerInFlow);\n\n    queueMicrotask(() => this._bringToFront(connection));\n  }\n\n  private _findConnectionAt(pointerInFlow: IPoint): FConnectionBase | undefined {\n    return this._connections.find((c) => isPointerInsideStartOrEndDragHandles(c, pointerInFlow));\n  }\n\n  private _capturePointerDown(request: ReassignConnectionPreparationRequest): void {\n    this._dragContext.onPointerDownScale = this._transform.scale;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._store.flowHost)\n      .div(this._transform.scale);\n  }\n\n  private _startDrag(connection: FConnectionBase, pointerInFlow: IPoint): void {\n    const handle = this._dragInjector.get(ReassignConnectionHandler);\n    handle.initialize(connection, isDragHandleEnd(connection, pointerInFlow));\n\n    this._dragContext.draggableItems = [handle];\n  }\n\n  private _isValidTrigger(request: ReassignConnectionPreparationRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n\n  private _bringToFront(connection: FConnectionBase): void {\n    this._mediator.execute<void>(\n      new UpdateItemAndChildrenLayersRequest(\n        connection,\n        this._canvas.fConnectionsContainer().nativeElement,\n      ),\n    );\n  }\n}\n","import { IPointerEvent } from '../../../infrastructure';\n\nexport class DragConnectionWaypointFinalizeRequest {\n  static readonly fToken = Symbol('DragConnectionWaypointFinalizeRequest');\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class FConnectionWaypointsChangedEvent {\n  constructor(\n    public readonly connectionId: string,\n    public readonly waypoints: IPoint[],\n  ) {}\n}\n","import { IPoint, PointExtensions } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { DragHandlerBase } from '../../../infrastructure';\nimport { FComponentsStore } from '../../../../f-storage';\nimport {\n  FConnectionBase,\n  FConnectionWaypointsBase,\n  WaypointPick,\n} from '../../../../f-connection-v2';\nimport { FConnectionWaypointsChangedEvent } from '../f-connection-waypoints-changed-event';\n\n@Injectable()\nexport class DragConnectionWaypointHandler extends DragHandlerBase<unknown> {\n  protected readonly type = 'move-connection-waypoint';\n  protected readonly kind = 'drag-connection-waypoint';\n\n  private readonly _store = inject(FComponentsStore);\n\n  private _point: IPoint | undefined;\n  private _pick: WaypointPick<FConnectionBase> | undefined;\n\n  private get _waypointsComponent(): FConnectionWaypointsBase {\n    return this._pick?.connection.fWaypoints() as FConnectionWaypointsBase;\n  }\n\n  private get _connection(): FConnectionBase {\n    return this._pick?.connection as FConnectionBase;\n  }\n\n  public setPick(pick: WaypointPick<FConnectionBase>): void {\n    this._pick = pick;\n  }\n\n  public override prepareDragSequence(): void {\n    if (this._pick?.candidate) {\n      this._point = { ...this._pick.candidate };\n      this._waypointsComponent.insert(this._pick.candidate);\n    } else if (this._pick?.waypoint) {\n      this._point = { ...this._pick.waypoint };\n      this._waypointsComponent.select(this._pick.waypoint);\n    }\n    this._redrawConnection();\n  }\n\n  public onPointerMove(_difference: IPoint): void {\n    this._waypointsComponent.move(PointExtensions.sum(this._point!, _difference));\n    this._redrawConnection();\n  }\n\n  public override onPointerUp(): void {\n    this._waypointsComponent.update();\n    this._store.fDraggable?.fConnectionWaypointsChanged.emit(this._eventFromPick());\n  }\n\n  private _redrawConnection(): void {\n    this._connection.setLine(this._connection.line);\n    this._connection.redraw();\n  }\n\n  private _eventFromPick(): FConnectionWaypointsChangedEvent {\n    return new FConnectionWaypointsChangedEvent(\n      this._connection.fId(),\n      this._connection.fWaypoints()?.waypoints() || [],\n    );\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DragConnectionWaypointFinalizeRequest } from './drag-connection-waypoint-finalize-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { DragConnectionWaypointHandler } from '../drag-connection-waypoint-handler';\nimport { FDraggableDataContext } from '../../../../f-draggable';\n\n@Injectable()\n@FExecutionRegister(DragConnectionWaypointFinalizeRequest)\nexport class DragConnectionWaypointFinalize\n  implements IExecution<DragConnectionWaypointFinalizeRequest, void>\n{\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  private get _fDragHandler(): DragConnectionWaypointHandler {\n    return this._dragContext.draggableItems[0] as DragConnectionWaypointHandler;\n  }\n\n  public handle(_request: DragConnectionWaypointFinalizeRequest): void {\n    if (!this._isDroppedConnectionReassignEvent()) {\n      return;\n    }\n    this._fDragHandler.onPointerUp();\n  }\n\n  private _isDroppedConnectionReassignEvent(): boolean {\n    return this._dragContext.draggableItems.some((x) => x instanceof DragConnectionWaypointHandler);\n  }\n}\n","import { IPointerEvent } from '../../../infrastructure';\nimport { FEventTrigger } from '../../../../domain';\n\nexport class DragConnectionWaypointPreparationRequest {\n  static readonly fToken = Symbol('DragConnectionWaypointPreparationRequest');\n  constructor(\n    public readonly event: IPointerEvent,\n    public readonly fTrigger: FEventTrigger,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DragConnectionWaypointPreparationRequest } from './drag-connection-waypoint-preparation-request';\nimport { IPoint, ITransformModel, Point } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { DragConnectionWaypointHandler } from '../drag-connection-waypoint-handler';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { DragHandlerInjector, FDraggableDataContext } from '../../../../f-draggable';\nimport { isValidEventTrigger, UpdateItemAndChildrenLayersRequest } from '../../../../domain';\nimport { FCanvasBase } from '../../../../f-canvas';\nimport { calculatePointerInFlow } from '../../../../utils';\nimport { FConnectionBase, pickWaypoint } from '../../../../f-connection-v2';\n\n@Injectable()\n@FExecutionRegister(DragConnectionWaypointPreparationRequest)\nexport class DragConnectionWaypointPreparation implements IExecution<\n  DragConnectionWaypointPreparationRequest,\n  void\n> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._canvas.transform as ITransformModel;\n  }\n\n  private get _flowHost(): HTMLElement {\n    return this._store.flowHost;\n  }\n\n  private get _connections(): FConnectionBase[] {\n    return this._store.connections.getAll();\n  }\n\n  public handle(request: DragConnectionWaypointPreparationRequest): void {\n    const position = calculatePointerInFlow(\n      request.event.getPosition(),\n      this._flowHost,\n      this._transform,\n    );\n\n    const pick = this._pickControlPoint(position);\n    if (!pick || !this._isValidTrigger(request)) {\n      return;\n    }\n\n    const handler = this._dragInjector.get(DragConnectionWaypointHandler);\n    handler.setPick(pick);\n\n    this._dragContext.onPointerDownScale = this._transform.scale;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._flowHost)\n      .div(this._transform.scale);\n    this._dragContext.draggableItems = [handler];\n\n    queueMicrotask(() => this._updateConnectionLayer(pick.connection));\n  }\n\n  private _pickControlPoint(position: IPoint) {\n    if (!this._dragContext.isEmpty()) {\n      return undefined;\n    }\n\n    return pickWaypoint(this._connections, position);\n  }\n\n  private _isValidTrigger(request: DragConnectionWaypointPreparationRequest): boolean {\n    return isValidEventTrigger(request.event.originalEvent, request.fTrigger);\n  }\n\n  private _updateConnectionLayer(connection: FConnectionBase): void {\n    this._mediator.execute<void>(\n      new UpdateItemAndChildrenLayersRequest(\n        connection,\n        this._canvas.fConnectionsContainer().nativeElement,\n      ),\n    );\n  }\n}\n","import {\n  CreateConnectionFromOutputPreparation,\n  CreateConnectionPreparation,\n  CreateConnectionCreateDragHandler,\n  CreateConnectionFinalize,\n  CreateConnectionFromOutletPreparation,\n  ResolveConnectableOutputForOutlet,\n} from './create-connection';\nimport { ReassignConnectionFinalize, ReassignConnectionPreparation } from './reassign-connection';\nimport {\n  DragConnectionWaypointFinalize,\n  DragConnectionWaypointPreparation,\n} from './drag-connection-waypoint';\n\nexport const DRAG_CONNECTIONS_PROVIDERS = [\n  CreateConnectionFinalize,\n\n  CreateConnectionCreateDragHandler,\n\n  CreateConnectionFromOutletPreparation,\n\n  ResolveConnectableOutputForOutlet,\n\n  CreateConnectionFromOutputPreparation,\n\n  CreateConnectionPreparation,\n\n  ReassignConnectionFinalize,\n\n  ReassignConnectionPreparation,\n\n  DragConnectionWaypointPreparation,\n\n  DragConnectionWaypointFinalize,\n];\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class DropToGroupFinalizeRequest {\n  static readonly fToken = Symbol('DropToGroupFinalizeRequest');\n\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IPoint, ITransformModel, Point, RectExtensions } from '@foblex/2d';\nimport { DragHandlerBase } from '../../infrastructure';\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_MS = 1;\n\n@Injectable()\nexport class DropToGroupHandler extends DragHandlerBase<unknown> {\n  /** Legacy identifier (external compatibility). */\n  protected readonly type = 'move-node-to-parent';\n  /** New identifier. */\n  protected readonly kind = 'assign-to-container';\n\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  private _candidateGroups: INodeWithRect[] = [];\n\n  private _debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n  private _activeTarget: INodeWithRect | null = null;\n\n  /** Read-only access for finalize stage. */\n  public get activeTarget(): INodeWithRect | null {\n    return this._activeTarget;\n  }\n\n  public initialize(candidateGroups: INodeWithRect[]) {\n    this._candidateGroups = candidateGroups;\n  }\n\n  public override prepareDragSequence(): void {\n    for (const { node } of this._candidateGroups) {\n      node.hostElement.classList.add(F_CSS_CLASS.GROUPING.DROP_ACTIVE);\n    }\n  }\n\n  public override onPointerMove(difference: IPoint): void {\n    if (this._debounceTimer) {\n      clearTimeout(this._debounceTimer);\n    }\n\n    this._debounceTimer = setTimeout(() => this._updateActiveTarget(difference), DEBOUNCE_MS);\n  }\n\n  public override onPointerUp(): void {\n    this._clearActiveTarget();\n\n    for (const { node } of this._candidateGroups) {\n      node.hostElement.classList.remove(F_CSS_CLASS.GROUPING.DROP_ACTIVE);\n    }\n\n    if (this._debounceTimer) {\n      clearTimeout(this._debounceTimer);\n      this._debounceTimer = null;\n    }\n  }\n\n  private _updateActiveTarget(difference: IPoint): void {\n    const pointerInFlow = this._getPointerInFlow(difference);\n    const next = this._findTargetUnderPointer(pointerInFlow);\n\n    if (next) {\n      this._setActiveTarget(next);\n    } else {\n      this._clearActiveTarget();\n    }\n  }\n\n  private _getPointerInFlow(difference: IPoint): IPoint {\n    const pointerInScaledFlow = Point.fromPoint(this._dragSession.onPointerDownPosition).add(\n      difference,\n    );\n    const transformOffsetInFlow = Point.fromPoint(this._transform.position)\n      .add(this._transform.scaledPosition)\n      .div(this._transform.scale);\n\n    return pointerInScaledFlow.sub(transformOffsetInFlow);\n  }\n\n  private _findTargetUnderPointer(pointer: IPoint): INodeWithRect | undefined {\n    return this._candidateGroups.find((x) => RectExtensions.isIncludePoint(x.rect, pointer));\n  }\n\n  private _setActiveTarget(target: INodeWithRect): void {\n    if (this._activeTarget?.node === target.node) {\n      return;\n    }\n\n    this._clearActiveTarget();\n    this._activeTarget = target;\n    target.node.setClass(F_CSS_CLASS.GROUPING.OVER_BOUNDARY);\n  }\n\n  private _clearActiveTarget(): void {\n    this._activeTarget?.node.removeClass(F_CSS_CLASS.GROUPING.OVER_BOUNDARY);\n    this._activeTarget = null;\n  }\n}\n","import { FNodeBase } from '../../../../f-node';\n\nexport class CreateDragNodeHierarchyRequest {\n  static readonly fToken = Symbol('CreateDragNodeHierarchyRequest');\n\n  /** Selected nodes and groups including their deep children. */\n  constructor(public readonly nodesAndGroups: FNodeBase[]) {}\n}\n","import { DragNodeItemHandler } from '../../drag-node-handler';\n\nexport class DragNodeHierarchy {\n  constructor(\n    public readonly rootHandlers: DragNodeItemHandler[],\n    public readonly participants: DragNodeItemHandler[],\n  ) {}\n}\n","export class FDragNodeStartEventData {\n  constructor(public readonly fNodeIds: string[]) {}\n}\n","import { DragHandlerBase } from '../infrastructure';\nimport { DragNodeHandler } from './drag-node-handler';\n\nexport const DRAG_NODE_HANDLER_TYPE = 'move-node';\nexport const DRAG_NODE_HANDLER_KIND = 'drag-node';\n\nexport function isDragNodeHandler(value: DragHandlerBase<unknown>): value is DragNodeHandler {\n  return (\n    value.getEvent().kind === DRAG_NODE_HANDLER_KIND ||\n    value.getEvent().fEventType === DRAG_NODE_HANDLER_TYPE\n  );\n}\n","import { IPoint, IRect, RectExtensions } from '@foblex/2d';\nimport { DragNodeItemHandler } from './drag-node-item-handler';\nimport { Injectable } from '@angular/core';\nimport { DragHandlerBase } from '../../infrastructure';\nimport { FDragNodeStartEventData } from '../f-drag-node-start-event-data';\nimport { IMagneticGuidesResult, MagneticLinesHandler } from '../magnetic-lines';\nimport { IMagneticRectsResult, MagneticRectsHandler } from '../magnetic-rects';\nimport { DRAG_NODE_HANDLER_KIND, DRAG_NODE_HANDLER_TYPE } from '../is-drag-node-handler';\n\n@Injectable()\nexport class DragNodeHandler extends DragHandlerBase<FDragNodeStartEventData> {\n  protected readonly type = DRAG_NODE_HANDLER_TYPE;\n  protected readonly kind = DRAG_NODE_HANDLER_KIND;\n\n  protected override data(): FDragNodeStartEventData {\n    return new FDragNodeStartEventData(this.items.map((x) => x.nodeOrGroup.fId()));\n  }\n\n  private _magneticLines: MagneticLinesHandler | null = null;\n  private _magneticRects: MagneticRectsHandler | null = null;\n\n  /** Every dragged item (nodes + groups including deep children) */\n  public items!: DragNodeItemHandler[];\n  /** Roots of drag hierarchy (top-level items without selected parents) */\n  public roots!: DragNodeItemHandler[];\n\n  public initialize(\n    /** Every dragged item (nodes + groups including deep children) */\n    items: DragNodeItemHandler[],\n    /** Roots of drag hierarchy (top-level items without selected parents) */\n    roots: DragNodeItemHandler[],\n  ): void {\n    this.items = items;\n    this.roots = roots;\n  }\n\n  public setMagneticLines(handler: MagneticLinesHandler): void {\n    this._magneticLines = handler;\n  }\n\n  public setMagneticRects(handler: MagneticRectsHandler): void {\n    this._magneticRects = handler;\n  }\n\n  public calculateMagneticLinesGuides(delta: IPoint): IMagneticGuidesResult | undefined {\n    return this.calculateMagneticSnaps(delta).lines;\n  }\n\n  public calculateMagneticSnaps(delta: IPoint): {\n    lines?: IMagneticGuidesResult;\n    rects?: IMagneticRectsResult;\n  } {\n    // preview move roots to update their last rects\n    this._previewRoots(delta);\n\n    const draggedRect = this._rootsUnionRect();\n\n    return {\n      lines: this._magneticLines?._computeGuides(draggedRect),\n      rects: this._magneticRects?._computeRects(draggedRect),\n    };\n  }\n\n  public override prepareDragSequence(): void {\n    for (const root of this.roots) {\n      root.prepareDragSequence();\n    }\n  }\n\n  public override onPointerMove(delta: IPoint): void {\n    this._previewRoots(delta);\n\n    const draggedRect = this._rootsUnionRect();\n    this._magneticLines?.scheduleRender(draggedRect);\n    this._magneticRects?.scheduleRender(draggedRect);\n  }\n\n  public override onPointerUp(): void {\n    for (const root of this.roots) {\n      root.onPointerUp();\n    }\n\n    this._magneticLines?.clearGuides();\n    this._magneticRects?.clearGuides();\n    requestAnimationFrame(() => this._refreshDraggedNodes());\n  }\n\n  private _previewRoots(delta: IPoint): void {\n    for (const root of this.roots) {\n      root.onPointerMove(delta);\n    }\n  }\n\n  private _rootsUnionRect(): IRect {\n    let result: IRect | null = null;\n\n    for (const root of this.roots) {\n      const rect = root.getLastRect();\n      result = result ? RectExtensions.union([result, rect]) : rect;\n    }\n\n    return result ?? RectExtensions.initialize();\n  }\n\n  private _refreshDraggedNodes(): void {\n    for (const { nodeOrGroup } of this.roots) {\n      nodeOrGroup.refresh();\n    }\n  }\n\n  public override destroy(): void {\n    for (const root of this.roots ?? []) {\n      root.destroy?.();\n    }\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 IDeltaClampResult {\n  value: IPoint; // clamped\n  overflow: IPoint; // abs overflow after quantize\n  edges: IConstraintEdges;\n}\n\nexport class DeltaClamp {\n  constructor(\n    private readonly _limits: IMinMaxPoint,\n    private readonly _quantizeStep: number = 0.5,\n  ) {}\n\n  public applyInto(offset: IPoint, out: IDeltaClampResult): void {\n    const { min, max } = this._limits;\n\n    const x = this._clamp(offset.x, min.x, max.x);\n    const y = this._clamp(offset.y, min.y, max.y);\n\n    const rawOverflowX = offset.x - x;\n    const rawOverflowY = offset.y - y;\n\n    const overflowX = this._quantizeSigned(rawOverflowX, this._quantizeStep);\n    const overflowY = this._quantizeSigned(rawOverflowY, this._quantizeStep);\n\n    out.value.x = x;\n    out.value.y = y;\n\n    out.edges.left = overflowX < 0;\n    out.edges.right = overflowX > 0;\n    out.edges.top = overflowY < 0;\n    out.edges.bottom = overflowY > 0;\n\n    out.overflow.x = Math.abs(overflowX);\n    out.overflow.y = Math.abs(overflowY);\n  }\n\n  private _quantizeSigned(v: number, step: number): number {\n    if (step <= 0 || v === 0) {\n      return 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 { Signal } from '@angular/core';\nimport { IPoint } from '@foblex/2d';\n\nexport class GridSnapper {\n  private readonly _vCellSize: number;\n  private readonly _hCellSize: number;\n  private readonly _snapWhileDragging: boolean;\n\n  constructor(\n    data: {\n      vCellSize: Signal<number>;\n      hCellSize: Signal<number>;\n      fCellSizeWhileDragging: Signal<boolean>;\n    },\n    private readonly _pointerDown: IPoint,\n  ) {\n    this._vCellSize = data.vCellSize();\n    this._hCellSize = data.hCellSize();\n    this._snapWhileDragging = data.fCellSizeWhileDragging();\n  }\n\n  public snap(difference: IPoint, adjustCellSize: boolean): IPoint {\n    const _adjustCellSize = adjustCellSize || this._snapWhileDragging;\n\n    return this._strategies[+_adjustCellSize](difference);\n  }\n\n  private _strategies: 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:\n        this._snapToGrid(this._pointerDown.x + difference.x, this._hCellSize) - this._pointerDown.x,\n      y:\n        this._snapToGrid(this._pointerDown.y + difference.y, this._vCellSize) - this._pointerDown.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 { IPoint } from '@foblex/2d';\nimport { GridSnapper } from './grid-snapper';\nimport { DeltaClamp, IDeltaClampResult } from './delta-clamp';\nimport { Injector } from '@angular/core';\nimport { IDragNodeDeltaConstraintsResult } from './i-drag-node-delta-constraints-result';\nimport { FComponentsStore } from '../../../f-storage';\nimport { IDragNodeDeltaConstraints } from './i-drag-node-delta-constraints';\n\nfunction _createClampResult(): IDeltaClampResult {\n  return {\n    value: { x: 0, y: 0 },\n    overflow: { x: 0, y: 0 },\n    edges: { left: false, right: false, top: false, bottom: false },\n  };\n}\n\nexport class DragNodeDeltaConstraints {\n  private readonly _snapper: GridSnapper;\n\n  private readonly _hardClamp: DeltaClamp;\n  private readonly _hardResult: IDeltaClampResult = _createClampResult();\n\n  private readonly _softClamps: DeltaClamp[] = [];\n  private readonly _softResults: IDeltaClampResult[] = [];\n\n  constructor(injector: Injector, pointerDown: IPoint, limits: IDragNodeDeltaConstraints) {\n    const dnd = injector.get(FComponentsStore).fDraggable!;\n    this._snapper = new GridSnapper(dnd, pointerDown);\n\n    this._hardClamp = new DeltaClamp(limits.hard, 0.5);\n\n    for (const soft of limits.soft) {\n      this._softClamps.push(new DeltaClamp(soft.limits, 0.5));\n      this._softResults.push(_createClampResult());\n    }\n  }\n\n  public apply(delta: IPoint, forceSnap: boolean = false): IDragNodeDeltaConstraintsResult {\n    const snapped = this._snapper.snap(delta, forceSnap);\n\n    this._hardClamp.applyInto(snapped, this._hardResult);\n\n    const hardDelta = {\n      x: this._hardResult.value.x,\n      y: this._hardResult.value.y,\n    };\n\n    for (let i = 0; i < this._softClamps.length; i++) {\n      this._softClamps[i].applyInto(hardDelta, this._softResults[i]);\n    }\n\n    return { hardDelta, soft: this._softResults };\n  }\n\n  public finalize(delta: IPoint): IDragNodeDeltaConstraintsResult {\n    return this.apply(delta, true);\n  }\n}\n","import { IPoint, IRect, RectExtensions } from '@foblex/2d';\nimport { IConstraintEdges } from './delta-clamp';\n\nexport function expandRectByOverflow(\n  baselineRect: IRect,\n  overflowDelta: IPoint,\n  edges: IConstraintEdges,\n): IRect {\n  let { x, y, width, height } = baselineRect;\n\n  if (edges.right && overflowDelta.x > 0) {\n    width += overflowDelta.x;\n  }\n  if (edges.left && overflowDelta.x > 0) {\n    x -= overflowDelta.x;\n    width += overflowDelta.x;\n  }\n\n  if (edges.bottom && overflowDelta.y > 0) {\n    height += overflowDelta.y;\n  }\n  if (edges.top && overflowDelta.y > 0) {\n    y -= overflowDelta.y;\n    height += overflowDelta.y;\n  }\n\n  return RectExtensions.initialize(x, y, width, height);\n}\n","import { IPoint, IRect, IRoundedRect, PointExtensions, RectExtensions } from '@foblex/2d';\nimport { Injector } from '@angular/core';\nimport { FMediator } from '@foblex/mediator';\nimport { DragHandlerBase } from '../../infrastructure';\nimport {\n  DragNodeDeltaConstraints,\n  expandRectByOverflow,\n  IDeltaClampResult,\n  IDragNodeDeltaConstraints,\n} from '../drag-node-constraint';\nimport { FNodeBase } from '../../../f-node';\nimport { DragNodeConnectionHandlerBase } from '../drag-node-dependent-connection-handlers';\nimport {\n  F_CSS_CLASS,\n  GetConnectorRectReferenceRequest,\n  GetNormalizedElementRectRequest,\n  IConnectorRectRef,\n} from '../../../domain';\nimport { FConnectorBase } from '../../../f-connectors';\nimport { IParentConnectionHandlers } from './i-soft-parent-connection-handlers';\nimport { SetFCacheNodeRectRequest } from '../../../f-cache';\nimport { DRAG_NODE_HANDLER_KIND, DRAG_NODE_HANDLER_TYPE } from '../is-drag-node-handler';\n\nexport class DragNodeItemHandler extends DragHandlerBase<unknown> {\n  protected readonly type = DRAG_NODE_HANDLER_TYPE;\n  protected readonly kind = DRAG_NODE_HANDLER_KIND;\n\n  private readonly _startPosition = PointExtensions.initialize();\n  private readonly _startRect = RectExtensions.initialize();\n\n  private _applyConstraints: (delta: IPoint) => IPoint = (delta) => delta;\n\n  private _lastSoftResults: IDeltaClampResult[] = [];\n  private _deltaConstraints!: DragNodeDeltaConstraints;\n\n  private _constraints!: IDragNodeDeltaConstraints;\n  private _lastPosition = PointExtensions.initialize();\n  private _softParentConnectionHandlers: IParentConnectionHandlers[] = [];\n\n  private readonly _mediator: FMediator;\n\n  constructor(\n    private readonly _injector: Injector,\n    public readonly nodeOrGroup: FNodeBase,\n\n    public children: DragNodeItemHandler[] = [],\n    public sourceConnectionHandlers: DragNodeConnectionHandlerBase[] = [],\n    public targetConnectionHandlers: DragNodeConnectionHandlerBase[] = [],\n  ) {\n    super();\n\n    this._mediator = _injector.get(FMediator);\n\n    this._startRect = this._mediator.execute(\n      new GetNormalizedElementRectRequest(nodeOrGroup.hostElement),\n    );\n    this._startPosition = { ...nodeOrGroup._position };\n  }\n\n  public setConstraints(constraints: IDragNodeDeltaConstraints): void {\n    this._constraints = constraints;\n    this._deltaConstraints = new DragNodeDeltaConstraints(\n      this._injector,\n      this._startPosition,\n      constraints,\n    );\n\n    this._applyConstraints = (difference) => {\n      const summary = this._deltaConstraints.apply(difference);\n      this._applySoftExpansions(summary.soft);\n\n      return summary.hardDelta;\n    };\n  }\n\n  public setSoftParentConnectionHandlers(handlers: IParentConnectionHandlers[]): void {\n    this._softParentConnectionHandlers = handlers;\n  }\n\n  public finalizeConstraints(): void {\n    // in finalize we force snap and commit expansions based on finalized delta\n    this._applyConstraints = (delta) => {\n      const summary = this._deltaConstraints.finalize(delta);\n      this._applySoftExpansions(summary.soft);\n\n      return summary.hardDelta;\n    };\n  }\n\n  public getLastRect(): IRect {\n    return RectExtensions.initialize(\n      this._lastPosition.x,\n      this._lastPosition.y,\n      this._startRect.width,\n      this._startRect.height,\n    );\n  }\n\n  public override prepareDragSequence(): void {\n    for (const child of this.children) {\n      child.prepareDragSequence();\n    }\n\n    this.nodeOrGroup.hostElement.classList.add(F_CSS_CLASS.DRAG_AND_DROP.DRAGGING);\n  }\n\n  public override onPointerMove(delta: IPoint): void {\n    const constrained = this._applyConstraints(delta);\n\n    for (const child of this.children) {\n      child.onPointerMove(constrained);\n    }\n\n    this._redraw(this._startPlus(constrained));\n\n    for (const h of this.sourceConnectionHandlers) {\n      h.setSourceDelta(constrained);\n    }\n    for (const h of this.targetConnectionHandlers) {\n      h.setTargetDelta(constrained);\n    }\n  }\n\n  public override onPointerUp(): void {\n    for (const child of this.children) {\n      child.onPointerUp();\n    }\n\n    this.nodeOrGroup.position.set(this.nodeOrGroup._position);\n    this.nodeOrGroup.hostElement.classList.remove(F_CSS_CLASS.DRAG_AND_DROP.DRAGGING);\n\n    this._emitExpandedEvent();\n  }\n\n  private _startPlus(delta: IPoint): IPoint {\n    return PointExtensions.sum(this._startPosition, delta);\n  }\n\n  private _redraw(position: IPoint): void {\n    this._lastPosition = position;\n    this.nodeOrGroup.updatePosition(position);\n    this._mediator.execute(\n      new SetFCacheNodeRectRequest(\n        this.nodeOrGroup.fId(),\n        RectExtensions.initialize(\n          position.x,\n          position.y,\n          this._startRect.width,\n          this._startRect.height,\n        ),\n      ),\n    );\n    this.nodeOrGroup.redraw();\n  }\n\n  private _applySoftExpansions(results: IDeltaClampResult[]): void {\n    this._lastSoftResults = results;\n\n    for (let i = 0; i < results.length; i++) {\n      const r = results[i];\n      const soft = this._constraints.soft[i];\n\n      const expandedRect = expandRectByOverflow(soft.boundingRect, r.overflow, r.edges);\n\n      if (this._commitParentRect(soft.nodeOrGroup, expandedRect)) {\n        this._updateParentConnectionHandlers(i);\n      }\n    }\n  }\n\n  private _commitParentRect(parent: FNodeBase, rect: IRect): boolean {\n    const changed =\n      parent._position.x !== rect.x ||\n      parent._position.y !== rect.y ||\n      parent._size?.width !== rect.width ||\n      parent._size?.height !== rect.height;\n\n    parent.updateSize({ width: rect.width, height: rect.height });\n    parent.updatePosition({ x: rect.x, y: rect.y });\n    this._mediator.execute(new SetFCacheNodeRectRequest(parent.fId(), rect));\n    parent.redraw();\n\n    return changed;\n  }\n\n  private _updateParentConnectionHandlers(softConstraintIndex: number): void {\n    const handlers = this._softParentConnectionHandlers[softConstraintIndex];\n    if (!handlers) {\n      return;\n    }\n\n    const currentRectByConnectorId = new Map<string, IRoundedRect>();\n\n    for (const source of handlers.source) {\n      const currentRect = this._readConnectorRect(source.connector, currentRectByConnectorId);\n      source.handler.setSourceDelta(this._buildDelta(source.baselineRect, currentRect));\n    }\n\n    for (const target of handlers.target) {\n      const currentRect = this._readConnectorRect(target.connector, currentRectByConnectorId);\n      target.handler.setTargetDelta(this._buildDelta(target.baselineRect, currentRect));\n    }\n  }\n\n  private _readConnectorRect(\n    connector: FConnectorBase,\n    cache: Map<string, IRoundedRect>,\n  ): IRoundedRect {\n    const cacheKey = `${connector.kind}::${connector.fId()}`;\n    const cached = cache.get(cacheKey);\n    if (cached) {\n      return cached;\n    }\n\n    const rect = this._mediator.execute<IConnectorRectRef>(\n      new GetConnectorRectReferenceRequest(connector),\n    ).rect;\n    cache.set(cacheKey, rect);\n\n    return rect;\n  }\n\n  private _buildDelta(baselineRect: IRoundedRect, currentRect: IRoundedRect): IPoint {\n    return PointExtensions.initialize(\n      currentRect.x - baselineRect.x,\n      currentRect.y - baselineRect.y,\n    );\n  }\n\n  private _emitExpandedEvent(): void {\n    for (let i = 0; i < this._lastSoftResults.length; i++) {\n      const r = this._lastSoftResults[i];\n      if (!r.overflow.x && !r.overflow.y) {\n        continue;\n      }\n\n      const soft = this._constraints.soft[i];\n      const expandedRect = expandRectByOverflow(soft.boundingRect, r.overflow, r.edges);\n\n      soft.nodeOrGroup.sizeChange.emit(expandedRect);\n    }\n  }\n\n  public override destroy(): void {\n    for (const child of this.children) {\n      child.destroy?.();\n    }\n\n    this.children = [];\n    this.sourceConnectionHandlers = [];\n    this.targetConnectionHandlers = [];\n\n    // this._constraints = null;\n    this._lastSoftResults = [];\n    this._applyConstraints = (d) => d;\n    this._softParentConnectionHandlers = [];\n  }\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { CreateDragNodeHierarchyRequest } from './create-drag-node-hierarchy-request';\nimport { DragNodeHierarchy } from './drag-node-hierarchy';\nimport { FNodeBase } from '../../../../f-node';\nimport { DragNodeItemHandler } from '../../drag-node-handler';\n\n@Injectable()\n@FExecutionRegister(CreateDragNodeHierarchyRequest)\nexport class CreateDragNodeHierarchy\n  implements IExecution<CreateDragNodeHierarchyRequest, DragNodeHierarchy>\n{\n  private readonly _injector = inject(Injector);\n\n  public handle({ nodesAndGroups }: CreateDragNodeHierarchyRequest): DragNodeHierarchy {\n    const handlerByNodeId = this._createHandlerByNodeId(nodesAndGroups);\n    const rootHandlers = this._linkParentsAndCollectRoots(nodesAndGroups, handlerByNodeId);\n\n    return new DragNodeHierarchy(rootHandlers, Array.from(handlerByNodeId.values()));\n  }\n\n  private _createHandlerByNodeId(nodesAndGroups: FNodeBase[]): Map<string, DragNodeItemHandler> {\n    const result = new Map<string, DragNodeItemHandler>();\n\n    for (const nodeOrGroup of nodesAndGroups) {\n      result.set(nodeOrGroup.fId(), new DragNodeItemHandler(this._injector, nodeOrGroup));\n    }\n\n    return result;\n  }\n\n  private _linkParentsAndCollectRoots(\n    nodesAndGroups: FNodeBase[],\n    handlerByNodeId: Map<string, DragNodeItemHandler>,\n  ): DragNodeItemHandler[] {\n    const rootHandlers: DragNodeItemHandler[] = [];\n\n    for (const nodeOrGroup of nodesAndGroups) {\n      const handler = handlerByNodeId.get(nodeOrGroup.fId());\n      if (!handler) {\n        continue;\n      }\n\n      const parentId = nodeOrGroup.fParentId();\n      const parentHandler = parentId ? handlerByNodeId.get(parentId) : undefined;\n\n      if (parentHandler) {\n        parentHandler.children.push(handler);\n      } else {\n        rootHandlers.push(handler);\n      }\n    }\n\n    return rootHandlers;\n  }\n}\n","import { FNodeBase } from '../../../../f-node';\n\nexport class BuildDragNodeConstraintsRequest {\n  static readonly fToken = Symbol('BuildDragNodeConstraintsRequest');\n\n  constructor(public readonly nodeOrGroup: FNodeBase) {}\n}\n","import { FNodeBase } from '../../../../f-node';\n\nexport class ReadNodeBoundsWithPaddingsRequest {\n  static readonly fToken = Symbol('ReadNodeBoundsWithPaddingsRequest');\n\n  constructor(\n    public readonly nodeOrGroup: FNodeBase,\n    public readonly childrenPaddings: [number, number, number, number],\n  ) {}\n}\n","import { FNodeBase } from '../../../../f-node';\nimport { IRect } from '@foblex/2d';\n\nexport class ReadNodeBoundsWithPaddingsResponse {\n  constructor(\n    public readonly nodeOrGroup: FNodeBase,\n    public readonly boundingRect: IRect,\n    public readonly innerRect: IRect,\n    public readonly paddings: [number, number, number, number],\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ReadNodeBoundsWithPaddingsRequest } from './read-node-bounds-with-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 { ReadNodeBoundsWithPaddingsResponse } from './read-node-bounds-with-paddings-response';\n\n@Injectable()\n@FExecutionRegister(ReadNodeBoundsWithPaddingsRequest)\nexport class ReadNodeBoundsWithPaddings\n  implements IExecution<ReadNodeBoundsWithPaddingsRequest, ReadNodeBoundsWithPaddingsResponse>\n{\n  private readonly _mediator = inject(FMediator);\n\n  public handle({\n    nodeOrGroup,\n    childrenPaddings,\n  }: ReadNodeBoundsWithPaddingsRequest): ReadNodeBoundsWithPaddingsResponse {\n    const boundingRect = this._readBoundingRect(nodeOrGroup);\n    const ownPaddings = this._readOwnPaddings(nodeOrGroup, boundingRect);\n\n    const paddings: [number, number, number, number] = [\n      ownPaddings[0] + childrenPaddings[0],\n      ownPaddings[1] + childrenPaddings[1],\n      ownPaddings[2] + childrenPaddings[2],\n      ownPaddings[3] + childrenPaddings[3],\n    ];\n\n    const innerRect = 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\n    return new ReadNodeBoundsWithPaddingsResponse(nodeOrGroup, boundingRect, innerRect, paddings);\n  }\n\n  private _readBoundingRect(nodeOrGroup: FNodeBase): IRect {\n    return this._mediator.execute<IRect>(\n      new GetNormalizedElementRectRequest(nodeOrGroup.hostElement),\n    );\n  }\n\n  private _readOwnPaddings(nodeOrGroup: FNodeBase, rect: IRect): [number, number, number, number] {\n    return this._mediator.execute<[number, number, number, number]>(\n      new GetNodePaddingRequest(nodeOrGroup, rect),\n    );\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 { BuildDragNodeConstraintsRequest } from './build-drag-node-constraints-request';\nimport { infinityMinMax } from '../../../../utils';\nimport { FNodeBase } from '../../../../f-node';\nimport { GetNormalizedElementRectRequest, GetParentNodesRequest } from '../../../../domain';\nimport {\n  ReadNodeBoundsWithPaddingsRequest,\n  ReadNodeBoundsWithPaddingsResponse,\n} from '../read-node-bounds-with-paddings';\nimport { IDragNodeDeltaConstraints, IDragNodeSoftConstraint } from '../../drag-node-constraint';\n\n@Injectable()\n@FExecutionRegister(BuildDragNodeConstraintsRequest)\nexport class BuildDragNodeConstraints\n  implements IExecution<BuildDragNodeConstraintsRequest, IDragNodeDeltaConstraints>\n{\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ nodeOrGroup }: BuildDragNodeConstraintsRequest): IDragNodeDeltaConstraints {\n    const currentRect = this._readCurrentRect(nodeOrGroup);\n    const parents = this._readParentsChain(nodeOrGroup);\n\n    return this._buildConstraints(parents, currentRect);\n  }\n\n  private _readCurrentRect(nodeOrGroup: FNodeBase): IRect {\n    return this._mediator.execute<IRect>(\n      new GetNormalizedElementRectRequest(nodeOrGroup.hostElement),\n    );\n  }\n\n  private _readParentsChain(nodeOrGroup: FNodeBase): FNodeBase[] {\n    return this._mediator.execute<FNodeBase[]>(new GetParentNodesRequest(nodeOrGroup)) ?? [];\n  }\n\n  private _buildConstraints(parents: FNodeBase[], childRect: IRect): IDragNodeDeltaConstraints {\n    const soft: IDragNodeSoftConstraint[] = [];\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._readParentBounds(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 _readParentBounds(\n    parent: FNodeBase,\n    childrenPaddings: [number, number, number, number],\n  ): ReadNodeBoundsWithPaddingsResponse {\n    return this._mediator.execute<ReadNodeBoundsWithPaddingsResponse>(\n      new ReadNodeBoundsWithPaddingsRequest(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  ): IDragNodeSoftConstraint {\n    return { nodeOrGroup, boundingRect, initialSize: nodeOrGroup._size, limits };\n  }\n}\n","import { DragNodeItemHandler } from '../../drag-node-handler';\n\nexport class CreateDragNodeHandlerRequest {\n  static readonly fToken = Symbol('CreateDragNodeHandlerRequest');\n\n  constructor(\n    /** Root handlers (handlers without parents in the selection). */\n    public readonly rootHandlers: DragNodeItemHandler[],\n\n    /** All handlers participating in the drag operation. */\n    public readonly participants: DragNodeItemHandler[],\n  ) {}\n}\n","import { IDragNodeDeltaConstraints } from '../../drag-node-constraint';\nimport { DragNodeConnectionHandlerBase } from '../../drag-node-dependent-connection-handlers';\nimport { DragNodeItemHandler } from '../../drag-node-handler';\n\nexport class AttachSoftParentConnectionDragHandlersToNodeRequest {\n  static readonly fToken = Symbol('AttachSoftParentConnectionDragHandlersToNodeRequest');\n\n  constructor(\n    /** Node move handler that owns soft parent constraints. */\n    public readonly dragHandler: DragNodeItemHandler,\n\n    /** Constraints calculated for the root handler. */\n    public readonly constraints: IDragNodeDeltaConstraints,\n\n    /** Shared pool to reuse already created handlers for the same connection. */\n    public readonly handlerPool: DragNodeConnectionHandlerBase[],\n  ) {}\n}\n","import { ILine, IPoint, PointExtensions, RoundedRect } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  GetConnectorRectReferenceRequest,\n  IConnectorRectRef,\n  ResolveConnectionEndpointRotationContextRequest,\n} from '../../../domain';\nimport { FConnectorBase } from '../../../f-connectors';\nimport { FComponentsStore } from '../../../f-storage';\nimport { inject } from '@angular/core';\nimport {\n  ConnectionBehaviourBuilder,\n  ConnectionBehaviourBuilderRequest,\n  FConnectionBase,\n  IConnectionEndpointRotationContext,\n} from '../../../f-connection-v2';\nimport { SetFCacheConnectorRectRequest } from '../../../f-cache';\n\nexport class DragNodeConnectionHandlerBase {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _behaviour = inject(ConnectionBehaviourBuilder);\n\n  private _source!: FConnectorBase;\n  private _target!: FConnectorBase;\n\n  private _sourceRef!: IConnectorRectRef;\n  private _targetRef!: IConnectorRectRef;\n\n  private _sourceDelta: IPoint = PointExtensions.initialize();\n  private _targetDelta: IPoint = PointExtensions.initialize();\n\n  public connection!: FConnectionBase;\n\n  public initialize(connection: FConnectionBase): void {\n    this.connection = connection;\n\n    this._source = this._store.outputs.require(this.connection.fOutputId());\n    this._target = this._store.inputs.require(this.connection.fInputId());\n\n    this._sourceRef = this._readRectRef(this._source);\n    this._targetRef = this._readRectRef(this._target);\n  }\n\n  public setSourceDelta(delta: IPoint): void {\n    this._sourceDelta = delta;\n    this._mediator.execute(\n      new SetFCacheConnectorRectRequest(\n        this._source.fId(),\n        this._source.kind,\n        this._withDelta(this._sourceRef.rect, delta),\n      ),\n    );\n  }\n\n  public setTargetDelta(delta: IPoint): void {\n    this._targetDelta = delta;\n    this._mediator.execute(\n      new SetFCacheConnectorRectRequest(\n        this._target.fId(),\n        this._target.kind,\n        this._withDelta(this._targetRef.rect, delta),\n      ),\n    );\n  }\n\n  protected redraw(): void {\n    const line = this._buildLine();\n    this.connection.setLine(line);\n    this.connection.redraw();\n  }\n\n  private _buildLine(): ILine {\n    const sourceRect = RoundedRect.fromRoundedRect(this._sourceRef.rect).addPoint(\n      this._sourceDelta,\n    );\n    const targetRect = RoundedRect.fromRoundedRect(this._targetRef.rect).addPoint(\n      this._targetDelta,\n    );\n\n    return this._behaviour.handle(\n      new ConnectionBehaviourBuilderRequest(\n        sourceRect,\n        targetRect,\n        this.connection,\n        this._sourceRef.connector.fConnectableSide,\n        this._targetRef.connector.fConnectableSide,\n        this._resolveRotationContext(this._sourceRef.connector),\n        this._resolveRotationContext(this._targetRef.connector),\n      ),\n    );\n  }\n\n  private _readRectRef(connector: FConnectorBase): IConnectorRectRef {\n    return this._mediator.execute<IConnectorRectRef>(\n      new GetConnectorRectReferenceRequest(connector),\n    );\n  }\n\n  private _withDelta(rect: IConnectorRectRef['rect'], delta: IPoint): IConnectorRectRef['rect'] {\n    return RoundedRect.fromRoundedRect(rect).addPoint(delta);\n  }\n\n  private _resolveRotationContext(\n    connector?: FConnectorBase,\n  ): IConnectionEndpointRotationContext | undefined {\n    return this._mediator.execute<IConnectionEndpointRotationContext | undefined>(\n      new ResolveConnectionEndpointRotationContextRequest(connector),\n    );\n  }\n}\n","import { DragNodeConnectionHandlerBase } from './drag-node-connection-handler-base';\nimport { IPoint } from '@foblex/2d';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DragNodeConnectionSourceHandler extends DragNodeConnectionHandlerBase {\n  public override setSourceDelta(delta: IPoint) {\n    super.setSourceDelta(delta);\n    super.redraw();\n  }\n}\n","import { DragNodeConnectionHandlerBase } from './drag-node-connection-handler-base';\nimport { IPoint } from '@foblex/2d';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DragNodeConnectionBothSidesHandler extends DragNodeConnectionHandlerBase {\n  private _sourceUpdated = false;\n  private _targetUpdated = false;\n\n  public override setSourceDelta(delta: IPoint) {\n    super.setSourceDelta(delta);\n    this._sourceUpdated = true;\n    this._redrawIfReady();\n  }\n\n  public override setTargetDelta(delta: IPoint) {\n    super.setTargetDelta(delta);\n    this._targetUpdated = true;\n    this._redrawIfReady();\n  }\n\n  private _redrawIfReady() {\n    if (!this._sourceUpdated || !this._targetUpdated) {\n      return;\n    }\n\n    this._sourceUpdated = false;\n    this._targetUpdated = false;\n\n    this.redraw();\n  }\n}\n","import { DragNodeConnectionHandlerBase } from './drag-node-connection-handler-base';\nimport { IPoint } from '@foblex/2d';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DragNodeConnectionTargetHandler extends DragNodeConnectionHandlerBase {\n  public override setTargetDelta(delta: IPoint) {\n    super.setTargetDelta(delta);\n    this.redraw();\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { AttachSoftParentConnectionDragHandlersToNodeRequest } from './attach-soft-parent-connection-drag-handlers-to-node-request';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FNodeBase } from '../../../../f-node';\nimport { FConnectionBase } from '../../../../f-connection-v2';\nimport {\n  DragNodeConnectionBothSidesHandler,\n  DragNodeConnectionHandlerBase,\n  DragNodeConnectionSourceHandler,\n  DragNodeConnectionTargetHandler,\n} from '../../drag-node-dependent-connection-handlers';\nimport { IParentConnectionHandlers } from '../../drag-node-handler';\nimport { FConnectorBase } from '../../../../f-connectors';\nimport { IRoundedRect } from '@foblex/2d';\nimport { GetConnectorRectReferenceRequest, IConnectorRectRef } from '../../../../domain';\nimport { DragHandlerInjector } from '../../../infrastructure';\n\n@Injectable()\n@FExecutionRegister(AttachSoftParentConnectionDragHandlersToNodeRequest)\nexport class AttachSoftParentConnectionDragHandlersToNode implements IExecution<\n  AttachSoftParentConnectionDragHandlersToNodeRequest,\n  void\n> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  public handle({\n    dragHandler,\n    constraints,\n    handlerPool,\n  }: AttachSoftParentConnectionDragHandlersToNodeRequest): void {\n    const softParentsHandlers = constraints.soft.map((x) =>\n      this._buildParentConnectionHandlers(x.nodeOrGroup, handlerPool),\n    );\n    dragHandler.setSoftParentConnectionHandlers(softParentsHandlers);\n  }\n\n  private _buildParentConnectionHandlers(\n    parent: FNodeBase,\n    handlerPool: DragNodeConnectionHandlerBase[],\n  ): IParentConnectionHandlers {\n    const outputConnectors = this._store.outputs.getAll().filter((x) => x.fNodeId === parent.fId());\n    const inputConnectors = this._store.inputs.getAll().filter((x) => x.fNodeId === parent.fId());\n\n    if (!outputConnectors.length && !inputConnectors.length) {\n      return { source: [], target: [] };\n    }\n\n    const outputIds = new Set(outputConnectors.map((x) => x.fId()));\n    const inputIds = new Set(inputConnectors.map((x) => x.fId()));\n    const baselineRectByConnectorId = new Map<string, IRoundedRect>();\n\n    const result: IParentConnectionHandlers = { source: [], target: [] };\n\n    for (const connection of this._store.connections.getAll()) {\n      const isSource = outputIds.has(connection.fOutputId());\n      const isTarget = inputIds.has(connection.fInputId());\n      if (!isSource && !isTarget) {\n        continue;\n      }\n\n      let connectionHandler = this._getExistingConnectionHandler(handlerPool, connection);\n      if (!connectionHandler) {\n        connectionHandler = this._createConnectionHandler(connection, isSource, isTarget);\n        handlerPool.push(connectionHandler);\n      }\n\n      if (isSource) {\n        const sourceConnector = this._store.outputs.require(connection.fOutputId());\n        result.source.push({\n          handler: connectionHandler,\n          connector: sourceConnector,\n          baselineRect: this._readConnectorRect(sourceConnector, baselineRectByConnectorId),\n        });\n      }\n\n      if (isTarget) {\n        const targetConnector = this._store.inputs.require(connection.fInputId());\n        result.target.push({\n          handler: connectionHandler,\n          connector: targetConnector,\n          baselineRect: this._readConnectorRect(targetConnector, baselineRectByConnectorId),\n        });\n      }\n    }\n\n    return result;\n  }\n\n  private _getExistingConnectionHandler(\n    existingConnectionHandlers: DragNodeConnectionHandlerBase[],\n    connection: FConnectionBase,\n  ): DragNodeConnectionHandlerBase | undefined {\n    return existingConnectionHandlers.find((x) => x.connection.fId() === connection.fId());\n  }\n\n  private _createConnectionHandler(\n    connection: FConnectionBase,\n    isSource: boolean,\n    isTarget: boolean,\n  ): DragNodeConnectionHandlerBase {\n    let result: DragNodeConnectionHandlerBase;\n    if (isSource && isTarget) {\n      result = this._dragInjector.createInstance(DragNodeConnectionBothSidesHandler);\n    } else if (isSource) {\n      result = this._dragInjector.createInstance(DragNodeConnectionSourceHandler);\n    } else {\n      result = this._dragInjector.createInstance(DragNodeConnectionTargetHandler);\n    }\n    result.initialize(connection);\n\n    return result;\n  }\n\n  private _readConnectorRect(\n    connector: FConnectorBase,\n    cache: Map<string, IRoundedRect>,\n  ): IRoundedRect {\n    const cacheKey = `${connector.kind}::${connector.fId()}`;\n    const cached = cache.get(cacheKey);\n    if (cached) {\n      return cached;\n    }\n\n    const rect = this._mediator.execute<IConnectorRectRef>(\n      new GetConnectorRectReferenceRequest(connector),\n    ).rect;\n    cache.set(cacheKey, rect);\n\n    return rect;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { CreateDragNodeHandlerRequest } from './create-drag-node-handler-request';\nimport { DragNodeHandler, DragNodeItemHandler } from '../../drag-node-handler';\nimport { FNodeBase } from '../../../../f-node';\nimport { BuildDragNodeConstraintsRequest } from '../build-drag-node-constraints';\nimport { IDragNodeDeltaConstraints } from '../../drag-node-constraint';\nimport { DragHandlerInjector } from '../../../infrastructure';\nimport { DragNodeConnectionHandlerBase } from '../../drag-node-dependent-connection-handlers';\nimport { AttachSoftParentConnectionDragHandlersToNodeRequest } from '../attach-soft-parent-connection-drag-handlers-to-node';\n\n@Injectable()\n@FExecutionRegister(CreateDragNodeHandlerRequest)\nexport class CreateDragNodeHandler implements IExecution<\n  CreateDragNodeHandlerRequest,\n  DragNodeHandler\n> {\n  private readonly _dragInjector = inject(DragHandlerInjector);\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ rootHandlers, participants }: CreateDragNodeHandlerRequest): DragNodeHandler {\n    const handlerPool = this._collectConnectionHandlers(participants);\n    this._applyConstraintsToRoots(rootHandlers, handlerPool);\n\n    const handler = this._dragInjector.createInstance(DragNodeHandler);\n    handler.initialize(participants, rootHandlers);\n\n    return handler;\n  }\n\n  private _applyConstraintsToRoots(\n    roots: DragNodeItemHandler[],\n    handlerPool: DragNodeConnectionHandlerBase[],\n  ): void {\n    for (const handler of roots) {\n      const constraints = this._calculateConstraints(handler.nodeOrGroup);\n      handler.setConstraints(constraints);\n      this._attachSoftParentConnectionHandlers(handler, constraints, handlerPool);\n    }\n  }\n\n  private _collectConnectionHandlers(\n    participants: DragNodeItemHandler[],\n  ): DragNodeConnectionHandlerBase[] {\n    const result = new Map<string, DragNodeConnectionHandlerBase>();\n\n    for (const participant of participants) {\n      for (const handler of participant.sourceConnectionHandlers) {\n        result.set(handler.connection.fId(), handler);\n      }\n      for (const handler of participant.targetConnectionHandlers) {\n        result.set(handler.connection.fId(), handler);\n      }\n    }\n\n    return Array.from(result.values());\n  }\n\n  private _attachSoftParentConnectionHandlers(\n    dragHandler: DragNodeItemHandler,\n    constraints: IDragNodeDeltaConstraints,\n    handlerPool: DragNodeConnectionHandlerBase[],\n  ): void {\n    this._mediator.execute<void>(\n      new AttachSoftParentConnectionDragHandlersToNodeRequest(\n        dragHandler,\n        constraints,\n        handlerPool,\n      ),\n    );\n  }\n\n  private _calculateConstraints(nodeOrGroup: FNodeBase): IDragNodeDeltaConstraints {\n    return this._mediator.execute<IDragNodeDeltaConstraints>(\n      new BuildDragNodeConstraintsRequest(nodeOrGroup),\n    );\n  }\n}\n","import { DragNodeConnectionHandlerBase } from '../../drag-node-dependent-connection-handlers';\nimport { DragNodeItemHandler } from '../../drag-node-handler';\n\nexport class AttachTargetConnectionDragHandlersToNodeRequest {\n  static readonly fToken = Symbol('AttachTargetConnectionDragHandlersToNodeRequest');\n\n  constructor(\n    /** Node move handler we attach connection handlers to. */\n    public readonly dragHandler: DragNodeItemHandler,\n\n    /**\n     * Connectors considered \"source side\" for connections (previously: outputIds).\n     * These are source connector ids that are within current drag selection.\n     */\n    public readonly sourceIds: string[],\n\n    /**\n     * Shared pool to reuse already created handlers for the same connection.\n     */\n    public readonly handlerPool: DragNodeConnectionHandlerBase[],\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { AttachTargetConnectionDragHandlersToNodeRequest } from './attach-target-connection-drag-handlers-to-node-request';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../../f-node';\nimport {\n  DragNodeConnectionBothSidesHandler,\n  DragNodeConnectionHandlerBase,\n  DragNodeConnectionTargetHandler,\n} from '../../drag-node-dependent-connection-handlers';\nimport { FConnectionBase } from '../../../../f-connection-v2';\nimport { DragHandlerInjector } from '../../../infrastructure';\n\n@Injectable()\n@FExecutionRegister(AttachTargetConnectionDragHandlersToNodeRequest)\nexport class AttachTargetConnectionDragHandlersToNode\n  implements IExecution<AttachTargetConnectionDragHandlersToNodeRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  private get _connections(): FConnectionBase[] {\n    return this._store.connections.getAll();\n  }\n\n  public handle(request: AttachTargetConnectionDragHandlersToNodeRequest): 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.inputs\n      .getAll()\n      .filter((x) => nodeOrGroup.isContains(x.hostElement))\n      .map((x) => x.fId());\n  }\n\n  private _createAndSetConnectionToNodeHandler(\n    connection: FConnectionBase,\n    request: AttachTargetConnectionDragHandlersToNodeRequest,\n  ): void {\n    let connectionHandler = this._getExistingConnectionHandler(request.handlerPool, connection);\n    if (!connectionHandler) {\n      connectionHandler = this._createConnectionHandler(request.sourceIds, connection);\n      request.handlerPool.push(connectionHandler);\n    }\n    request.dragHandler.targetConnectionHandlers.push(connectionHandler);\n  }\n\n  private _getExistingConnectionHandler(\n    existingConnectionHandlers: DragNodeConnectionHandlerBase[],\n    connection: FConnectionBase,\n  ): DragNodeConnectionHandlerBase | undefined {\n    return existingConnectionHandlers.find((x) => x.connection.fId() === connection.fId());\n  }\n\n  private _createConnectionHandler(\n    outputIds: string[],\n    connection: FConnectionBase,\n  ): DragNodeConnectionHandlerBase {\n    let result: DragNodeConnectionHandlerBase | undefined;\n    if (outputIds.includes(connection.fOutputId())) {\n      result = this._dragInjector.createInstance(DragNodeConnectionBothSidesHandler);\n    } else {\n      result = this._dragInjector.createInstance(DragNodeConnectionTargetHandler);\n    }\n    result.initialize(connection);\n\n    return result;\n  }\n}\n","import { DragNodeConnectionHandlerBase } from '../../drag-node-dependent-connection-handlers';\nimport { DragNodeItemHandler } from '../../drag-node-handler';\n\nexport class AttachSourceConnectionDragHandlersToNodeRequest {\n  static readonly fToken = Symbol('AttachSourceConnectionDragHandlersToNodeRequest');\n\n  constructor(\n    /** Node move handler we attach connection handlers to. */\n    public readonly dragHandler: DragNodeItemHandler,\n\n    /**\n     * Connectors considered \"target side\" for connections (previously: inputIds).\n     * These are target connector ids that are within current drag selection.\n     */\n    public readonly targetIds: string[],\n\n    /**\n     * Shared pool to reuse already created handlers for the same connection.\n     */\n    public readonly handlerPool: DragNodeConnectionHandlerBase[],\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { AttachSourceConnectionDragHandlersToNodeRequest } from './attach-source-connection-drag-handlers-to-node-request';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../../f-node';\nimport {\n  DragNodeConnectionBothSidesHandler,\n  DragNodeConnectionHandlerBase,\n  DragNodeConnectionSourceHandler,\n} from '../../drag-node-dependent-connection-handlers';\nimport { FConnectionBase } from '../../../../f-connection-v2';\nimport { DragHandlerInjector } from '../../../infrastructure';\n\n@Injectable()\n@FExecutionRegister(AttachSourceConnectionDragHandlersToNodeRequest)\nexport class AttachSourceConnectionDragHandlersToNode\n  implements IExecution<AttachSourceConnectionDragHandlersToNodeRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  private get _connections(): FConnectionBase[] {\n    return this._store.connections.getAll();\n  }\n\n  public handle(request: AttachSourceConnectionDragHandlersToNodeRequest): void {\n    this._getOutputConnections(request.dragHandler.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.outputs\n      .getAll()\n      .filter((x) => nodeOrGroup.isContains(x.hostElement))\n      .map((x) => x.fId());\n  }\n\n  private _createAndSetConnectionToNodeHandler(\n    connection: FConnectionBase,\n    request: AttachSourceConnectionDragHandlersToNodeRequest,\n  ): void {\n    let connectionHandler = this._getExistingConnectionHandler(request.handlerPool, connection);\n    if (!connectionHandler) {\n      connectionHandler = this._createConnectionHandler(request.targetIds, connection);\n      request.handlerPool.push(connectionHandler);\n    }\n    request.dragHandler.sourceConnectionHandlers.push(connectionHandler);\n  }\n\n  private _getExistingConnectionHandler(\n    existingConnectionHandlers: DragNodeConnectionHandlerBase[],\n    connection: FConnectionBase,\n  ): DragNodeConnectionHandlerBase | undefined {\n    return existingConnectionHandlers.find((x) => x.connection.fId() === connection.fId());\n  }\n\n  private _createConnectionHandler(\n    inputIds: string[],\n    connection: FConnectionBase,\n  ): DragNodeConnectionHandlerBase {\n    let result: DragNodeConnectionHandlerBase;\n    if (inputIds.includes(connection.fInputId())) {\n      result = this._dragInjector.createInstance(DragNodeConnectionBothSidesHandler);\n    } else {\n      result = this._dragInjector.createInstance(DragNodeConnectionSourceHandler);\n    }\n    result.initialize(connection);\n\n    return result;\n  }\n}\n","import { FNodeBase } from '../../../f-node';\n\nexport class AttachDragNodeHandlerFromSelectionRequest {\n  static readonly fToken = Symbol('AttachDragNodeHandlerFromSelectionRequest');\n  constructor(public readonly nodeOrGroup?: FNodeBase) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { AttachDragNodeHandlerFromSelectionRequest } from './attach-drag-node-handler-from-selection-request';\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 { AttachSourceConnectionDragHandlersToNodeRequest } from './attach-source-connection-drag-handlers-to-node';\nimport { AttachTargetConnectionDragHandlersToNodeRequest } from './attach-target-connection-drag-handlers-to-node';\nimport { GetDeepChildrenNodesAndGroupsRequest } from '../../../domain';\nimport { flatMap } from '@foblex/utils';\nimport { DragNodeConnectionHandlerBase } from '../drag-node-dependent-connection-handlers';\nimport { DragNodeHandler, DragNodeItemHandler } from '../drag-node-handler';\nimport { CreateDragNodeHierarchyRequest, DragNodeHierarchy } from './create-drag-node-hierarchy';\nimport { CreateDragNodeHandlerRequest } from './create-drag-node-handler';\n\n// This execution is responsible for creating a drag model for moving nodes based on the current selection.\n@Injectable()\n@FExecutionRegister(AttachDragNodeHandlerFromSelectionRequest)\nexport class AttachDragNodeHandlerFromSelection implements IExecution<\n  AttachDragNodeHandlerFromSelectionRequest,\n  DragNodeHandler\n> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  public handle({ nodeOrGroup }: AttachDragNodeHandlerFromSelectionRequest): DragNodeHandler {\n    const selected = this._collectSelected(nodeOrGroup);\n    const selectedWithChildren = this._withDeepChildren(selected);\n\n    const hierarchy = this._mediator.execute<DragNodeHierarchy>(\n      new CreateDragNodeHierarchyRequest(selectedWithChildren),\n    );\n\n    const selectedSourceConnectorIds = this._collectSourceConnectorIds(selectedWithChildren);\n    const selectedTargetConnectorIds = this._collectTargetConnectorIds(selectedWithChildren);\n\n    this._attachConnectionHandlers(\n      hierarchy.participants,\n      selectedSourceConnectorIds,\n      selectedTargetConnectorIds,\n    );\n\n    return this._mediator.execute(\n      new CreateDragNodeHandlerRequest(hierarchy.rootHandlers, hierarchy.participants),\n    );\n  }\n\n  private _collectSelected(nodeOrGroup?: FNodeBase): FNodeBase[] {\n    const result: FNodeBase[] = [];\n\n    for (const item of this._dragSession.selectedItems) {\n      const node = this._findNodeByHost(item.hostElement);\n      if (node) {\n        result.push(node);\n      }\n    }\n\n    if (nodeOrGroup && !result.includes(nodeOrGroup)) {\n      result.push(nodeOrGroup);\n    }\n\n    return result;\n  }\n\n  private _findNodeByHost(host: HTMLElement | SVGElement): FNodeBase | undefined {\n    return this._store.nodes.getAll().find((x) => x.isContains(host));\n  }\n\n  private _withDeepChildren(nodes: FNodeBase[]): FNodeBase[] {\n    const result: FNodeBase[] = [];\n\n    for (const node of nodes) {\n      result.push(node);\n\n      const children = this._mediator.execute<FNodeBase[]>(\n        new GetDeepChildrenNodesAndGroupsRequest(node.fId()),\n      );\n\n      result.push(...children);\n    }\n\n    return result;\n  }\n\n  private _collectSourceConnectorIds(nodes: FNodeBase[]): string[] {\n    return flatMap(nodes, (n) =>\n      this._store.outputs\n        .getAll()\n        .filter((x) => x.fNodeId === n.fId())\n        .map((x) => x.fId()),\n    );\n  }\n\n  private _collectTargetConnectorIds(nodes: FNodeBase[]): string[] {\n    return flatMap(nodes, (n) =>\n      this._store.inputs\n        .getAll()\n        .filter((x) => x.fNodeId === n.fId())\n        .map((x) => x.fId()),\n    );\n  }\n\n  private _attachConnectionHandlers(\n    participants: DragNodeItemHandler[],\n    selectedSourceConnectorIds: string[],\n    selectedTargetConnectorIds: string[],\n  ): void {\n    const handlerPool: DragNodeConnectionHandlerBase[] = [];\n\n    for (const handler of participants) {\n      // Source-side dragging depends on whether target side is inside selection\n      this._mediator.execute(\n        new AttachSourceConnectionDragHandlersToNodeRequest(\n          handler,\n          selectedTargetConnectorIds,\n          handlerPool,\n        ),\n      );\n\n      // Target-side dragging depends on whether source side is inside selection\n      this._mediator.execute(\n        new AttachTargetConnectionDragHandlersToNodeRequest(\n          handler,\n          selectedSourceConnectorIds,\n          handlerPool,\n        ),\n      );\n    }\n  }\n}\n","import { AttachDragNodeHandlerFromSelection } from './attach-drag-node-handler-from-selection';\nimport { AttachTargetConnectionDragHandlersToNode } from './attach-target-connection-drag-handlers-to-node';\nimport { AttachSourceConnectionDragHandlersToNode } from './attach-source-connection-drag-handlers-to-node';\nimport { CreateDragNodeHierarchy } from './create-drag-node-hierarchy';\nimport { BuildDragNodeConstraints } from './build-drag-node-constraints';\nimport { CreateDragNodeHandler } from './create-drag-node-handler';\nimport { ReadNodeBoundsWithPaddings } from './read-node-bounds-with-paddings';\nimport { AttachSoftParentConnectionDragHandlersToNode } from './attach-soft-parent-connection-drag-handlers-to-node';\n\nexport const CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS = [\n  CreateDragNodeHierarchy,\n\n  BuildDragNodeConstraints,\n\n  CreateDragNodeHandler,\n\n  AttachTargetConnectionDragHandlersToNode,\n\n  AttachSourceConnectionDragHandlersToNode,\n\n  AttachSoftParentConnectionDragHandlersToNode,\n\n  ReadNodeBoundsWithPaddings,\n\n  AttachDragNodeHandlerFromSelection,\n];\n","import { IRect } from '@foblex/2d';\nimport { IMagneticGuidesResult } from './i-magnetic-guides-result';\n\nexport function calculateMagneticGuides(\n  elements: IRect[],\n  target: IRect,\n  alignThreshold: number = 10,\n): IMagneticGuidesResult {\n  const tx = target.x;\n  const ty = target.y;\n\n  const tr = tx + target.width;\n  const tb = ty + target.height;\n\n  const tcx = target.gravityCenter.x;\n  const tcy = target.gravityCenter.y;\n\n  // Best candidates\n  let bestXGuide: number | undefined;\n  let bestXDelta: number | undefined;\n  let bestXAbs = Infinity;\n\n  let bestYGuide: number | undefined;\n  let bestYDelta: number | undefined;\n  let bestYAbs = Infinity;\n\n  // Small helpers: readable + avoids repeated Math.abs calls.\n  const considerX = (guide: number, delta: number): void => {\n    const abs = delta < 0 ? -delta : delta;\n    if (abs <= alignThreshold && abs < bestXAbs) {\n      bestXAbs = abs;\n      bestXGuide = guide;\n      bestXDelta = delta;\n    }\n  };\n\n  const considerY = (guide: number, delta: number): void => {\n    const abs = delta < 0 ? -delta : delta;\n    if (abs <= alignThreshold && abs < bestYAbs) {\n      bestYAbs = abs;\n      bestYGuide = guide;\n      bestYDelta = delta;\n    }\n  };\n\n  for (let i = 0; i < elements.length; i++) {\n    const el = elements[i];\n\n    // Precompute element anchors once per element\n    const ex = el.x;\n    const ey = el.y;\n\n    const er = ex + el.width; // element right\n    const eb = ey + el.height; // element bottom\n\n    const ecx = el.gravityCenter.x;\n    const ecy = el.gravityCenter.y;\n\n    // X candidates\n    considerX(ex, tx - ex); // target.left - element.left\n    considerX(er, tx - er); // target.left - element.right\n    considerX(ecx, tcx - ecx); // target.center - element.center\n    considerX(ex, tr - ex); // target.right - element.left\n    considerX(er, tr - er); // target.right - element.right\n\n    // Y candidates\n    considerY(ey, ty - ey); // target.top - element.top\n    considerY(eb, ty - eb); // target.top - element.bottom\n    considerY(ecy, tcy - ecy); // target.center - element.center\n    considerY(ey, tb - ey); // target.bottom - element.top\n    considerY(eb, tb - eb); // target.bottom - element.bottom\n  }\n\n  return {\n    x: { guide: bestXGuide, delta: bestXDelta },\n    y: { guide: bestYGuide, delta: bestYDelta },\n  };\n}\n","import { BrowserService } from '@foblex/platform';\n\ntype MagneticLineRect = {\n  left: number;\n  top: number;\n  width: number;\n  height: number;\n};\n\nconst MAGNETIC_LINE_RECT_KEYS: (keyof MagneticLineRect)[] = ['left', 'top', 'width', 'height'];\n\nexport class MagneticLineElement {\n  private readonly _element: HTMLElement;\n\n  constructor(browser: BrowserService, hostElement: HTMLElement, className = 'f-line') {\n    this._element = browser.document.createElement('div');\n    this._element.classList.add(className);\n    this._element.style.position = 'absolute';\n    this._element.style.display = 'none';\n\n    hostElement.appendChild(this._element);\n  }\n\n  public show(): void {\n    this._element.style.display = 'block';\n  }\n\n  public hide(): void {\n    this._element.style.display = 'none';\n  }\n\n  public render(rect: Partial<MagneticLineRect>): void {\n    for (const key of MAGNETIC_LINE_RECT_KEYS) {\n      const value = rect[key];\n      if (value != null) {\n        this._element.style[key as never] = `${value}px`;\n      }\n    }\n  }\n\n  public clearRect(): void {\n    for (const key of MAGNETIC_LINE_RECT_KEYS) {\n      this._element.style.removeProperty(key);\n    }\n  }\n\n  public destroy(): void {\n    this._element.remove();\n  }\n}\n","import { ISize, ITransformModel } from '@foblex/2d';\nimport { MagneticLineElement } from './magnetic-line-element';\nimport { BrowserService } from '@foblex/platform';\n\nexport class MagneticLineRenderer {\n  private readonly _horizontal: MagneticLineElement;\n  private readonly _vertical: MagneticLineElement;\n\n  constructor(browser: BrowserService, hostElement: HTMLElement) {\n    this._horizontal = new MagneticLineElement(browser, hostElement);\n    this._vertical = new MagneticLineElement(browser, hostElement);\n    this._horizontal.hide();\n    this._vertical.hide();\n  }\n\n  public drawVerticalLine(x: number, size: ISize, transform: ITransformModel): void {\n    this._vertical.show();\n    this._vertical.render({\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._horizontal.show();\n    this._horizontal.render({\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 hideVertical(): void {\n    this._vertical.hide();\n  }\n\n  public hideHorizontal(): void {\n    this._horizontal.hide();\n  }\n\n  public hideAll(): void {\n    this._vertical.hide();\n    this._horizontal.hide();\n  }\n\n  public destroy(): void {\n    this._vertical.destroy();\n    this._horizontal.destroy();\n  }\n}\n","export class MagneticLinesPreparationRequest {\n  static readonly fToken = Symbol('MagneticLinesPreparationRequest');\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { MagneticLinesPreparationRequest } from './magnetic-lines-preparation-request';\nimport { IRect, ISize } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport {\n  DragNodeHandler,\n  DragNodeItemHandler,\n  MagneticLineRenderer,\n  MagneticLinesHandler,\n} from '../../index';\nimport { BrowserService } from '@foblex/platform';\nimport { FComponentsStore, INSTANCES } from '../../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable-data-context';\nimport { FNodeBase } from '../../../../f-node';\nimport { GetNormalizedElementRectRequest } from '../../../../domain';\nimport { FMagneticLinesBase } from '../../../../plugins/snapping/f-magnetic-lines';\n\n@Injectable()\n@FExecutionRegister(MagneticLinesPreparationRequest)\nexport class MagneticLinesPreparation implements IExecution<MagneticLinesPreparationRequest, void> {\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  private readonly _dragSession = inject(FDraggableDataContext);\n\n  private _renderer: MagneticLineRenderer | undefined;\n\n  public handle(_: MagneticLinesPreparationRequest): void {\n    const magneticLines = this._store.instances.get(INSTANCES.MAGNETIC_LINES);\n    if (!magneticLines) {\n      return;\n    }\n\n    const handler = this._dragSession.draggableItems.find((x) => x instanceof DragNodeHandler);\n    if (!handler) {\n      return;\n    }\n\n    handler.setMagneticLines(\n      new MagneticLinesHandler(\n        this._injector,\n        this._renderer ?? this._createRenderer(magneticLines),\n        this._flowHostSize(),\n        this._notDraggedRects(this._draggedNodes(handler.items)),\n      ),\n    );\n  }\n\n  private _draggedNodes(items: DragNodeItemHandler[]): FNodeBase[] {\n    return items.map((x) => x.nodeOrGroup);\n  }\n\n  private _flowHostSize(): ISize {\n    return this._store.flowHost.getBoundingClientRect();\n  }\n\n  private _createRenderer({ hostElement }: FMagneticLinesBase): MagneticLineRenderer {\n    this._renderer = new MagneticLineRenderer(this._browser, hostElement);\n\n    return this._renderer;\n  }\n\n  private _notDraggedRects(draggedNodes: FNodeBase[]): IRect[] {\n    const dragged = new Set(draggedNodes);\n    const notDragged = this._store.nodes.getAll().filter((x) => !dragged.has(x));\n\n    return notDragged.map((x) =>\n      this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(x.hostElement)),\n    );\n  }\n}\n","import { IRect, ISize, ITransformModel } from '@foblex/2d';\nimport { Injector } from '@angular/core';\nimport { FComponentsStore, INSTANCES } from '../../../../f-storage';\nimport { calculateMagneticGuides, IMagneticGuidesResult, MagneticLineRenderer } from '../domain';\n\nexport class MagneticLinesHandler {\n  private _timerId: 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 _renderer: MagneticLineRenderer,\n    private _size: ISize,\n    private _rects: IRect[],\n  ) {\n    const store = injector.get(FComponentsStore);\n    this._alignThreshold = store.instances.require(INSTANCES.MAGNETIC_LINES).threshold();\n    this._canvasTransform = store.transform;\n  }\n\n  public scheduleRender(_draggedRect: IRect): void {\n    if (this._timerId) {\n      clearTimeout(this._timerId);\n    }\n\n    this._timerId = setTimeout(() => this._renderGuides(this._computeGuides(_draggedRect)), 15);\n  }\n\n  private _renderGuides(guides: IMagneticGuidesResult): void {\n    this._renderVertical(guides);\n    this._renderHorizontal(guides);\n  }\n\n  private _renderVertical(guides: IMagneticGuidesResult): void {\n    if (guides.x.guide !== undefined) {\n      this._renderer.drawVerticalLine(guides.x.guide, this._size, this._canvasTransform);\n    } else {\n      this._renderer.hideVertical();\n    }\n  }\n\n  private _renderHorizontal(guides: IMagneticGuidesResult): void {\n    if (guides.y.guide !== undefined) {\n      this._renderer.drawHorizontalLine(guides.y.guide, this._size, this._canvasTransform);\n    } else {\n      this._renderer.hideHorizontal();\n    }\n  }\n\n  public _computeGuides(_draggedRect: IRect): IMagneticGuidesResult {\n    return calculateMagneticGuides(this._rects, _draggedRect, this._alignThreshold);\n  }\n\n  public clearGuides(): void {\n    this._renderer.hideAll();\n\n    if (this._timerId) {\n      clearTimeout(this._timerId);\n      this._timerId = null;\n    }\n  }\n}\n","import { IRect } from '@foblex/2d';\nimport { IMagneticGapRect } from './i-magnetic-gap-rect';\nimport { IMagneticRectsResult, MagneticRectsAlignMode } from './i-magnetic-rects-result';\n\ntype IAxisCandidate = {\n  delta: number;\n  absDelta: number;\n  gap: number;\n  rects: IMagneticGapRect[];\n  alignMode: MagneticRectsAlignMode;\n\n  crossDelta: number;\n};\n\nconst AXIS_X_ALIGN_MODES: MagneticRectsAlignMode[] = ['top', 'center', 'bottom'];\nconst AXIS_Y_ALIGN_MODES: MagneticRectsAlignMode[] = ['left', 'center', 'right'];\n\nexport function calculateMagneticRects(\n  elements: IRect[],\n  target: IRect,\n  alignThreshold: number = 10,\n  spacingThreshold: number = 10,\n): IMagneticRectsResult {\n  const tx = target.x;\n  const ty = target.y;\n\n  const tr = tx + target.width;\n  const tb = ty + target.height;\n\n  const tcx = target.gravityCenter.x;\n  const tcy = target.gravityCenter.y;\n\n  const xCandidate = _calculateAxisX_FigmaLike(\n    elements,\n    target,\n    tx,\n    ty,\n    tr,\n    tb,\n    tcx,\n    tcy,\n    alignThreshold,\n    spacingThreshold,\n  );\n\n  const yCandidate = _calculateAxisY_FigmaLike(\n    elements,\n    target,\n    tx,\n    ty,\n    tr,\n    tb,\n    tcx,\n    tcy,\n    alignThreshold,\n    spacingThreshold,\n  );\n\n  if (xCandidate && (!yCandidate || xCandidate.absDelta <= yCandidate.absDelta)) {\n    return {\n      axis: 'x',\n      delta: xCandidate.delta,\n      gap: xCandidate.gap,\n      rects: xCandidate.rects,\n      alignMode: xCandidate.alignMode,\n\n      crossDelta: xCandidate.crossDelta,\n    };\n  }\n\n  if (yCandidate) {\n    return {\n      axis: 'y',\n      delta: yCandidate.delta,\n      gap: yCandidate.gap,\n      rects: yCandidate.rects,\n      alignMode: yCandidate.alignMode,\n\n      crossDelta: yCandidate.crossDelta,\n    };\n  }\n\n  return { rects: [] };\n}\n\nfunction _calculateAxisX_FigmaLike(\n  elements: IRect[],\n  target: IRect,\n  tx: number,\n  ty: number,\n  _tr: number,\n  tb: number,\n  tcx: number,\n  tcy: number,\n  alignThreshold: number,\n  spacingThreshold: number,\n): IAxisCandidate | undefined {\n  let bestAbs = Infinity;\n  let bestDelta: number | undefined;\n  let bestGap = 0;\n  let bestAlignMode: MagneticRectsAlignMode | undefined;\n  let bestRects: IMagneticGapRect[] = [];\n\n  let bestCrossDelta = 0;\n\n  const indices: number[] = [];\n  const starts: number[] = [];\n  const ends: number[] = [];\n\n  for (let modeIndex = 0; modeIndex < AXIS_X_ALIGN_MODES.length; modeIndex++) {\n    const targetAnchor = modeIndex === 0 ? ty : modeIndex === 1 ? tcy : tb;\n\n    indices.length = 0;\n    starts.length = 0;\n    ends.length = 0;\n\n    let bandTop = Infinity;\n    let bandBottom = -Infinity;\n\n    // pick guide anchor deterministically: min abs to targetAnchor, tie - smaller element index\n    let guideAnchor = 0;\n    let guideAbs = Infinity;\n    let guideElementIndex = Infinity;\n\n    for (let i = 0; i < elements.length; i++) {\n      const el = elements[i];\n\n      const elAnchor =\n        modeIndex === 0 ? el.y : modeIndex === 1 ? el.gravityCenter.y : el.y + el.height;\n\n      const alignDelta = targetAnchor - elAnchor;\n      const alignAbs = _abs(alignDelta);\n      if (alignAbs > alignThreshold) continue;\n\n      indices.push(i);\n      starts.push(el.x);\n      ends.push(el.x + el.width);\n\n      const top = el.y;\n      const bottom = el.y + el.height;\n      if (top < bandTop) bandTop = top;\n      if (bottom > bandBottom) bandBottom = bottom;\n\n      // guide selection\n      if (alignAbs < guideAbs || (alignAbs === guideAbs && i < guideElementIndex)) {\n        guideAbs = alignAbs;\n        guideAnchor = elAnchor;\n        guideElementIndex = i;\n      }\n    }\n\n    const count = indices.length;\n    if (count < 2) continue;\n\n    _stableSortByStart(indices, starts, ends);\n\n    let insertion = 0;\n    while (insertion < count && starts[insertion] <= tcx) insertion++;\n\n    const between = insertion > 0 && insertion < count;\n\n    let leftIndex: number;\n    let rightIndex: number;\n\n    if (between) {\n      leftIndex = insertion - 1;\n      rightIndex = insertion;\n    } else if (insertion <= 0) {\n      leftIndex = 0;\n      rightIndex = 1;\n    } else {\n      leftIndex = count - 2;\n      rightIndex = count - 1;\n    }\n\n    const g = starts[rightIndex] - ends[leftIndex];\n    if (g < 0) continue;\n\n    let desiredLeft: number;\n\n    if (between) {\n      desiredLeft = ends[leftIndex] + g;\n\n      const desiredRight = desiredLeft + target.width;\n      const rightGap = starts[rightIndex] - desiredRight;\n      if (_abs(rightGap - g) > spacingThreshold) continue;\n    } else if (insertion <= 0) {\n      desiredLeft = starts[0] - g - target.width;\n    } else {\n      desiredLeft = ends[count - 1] + g;\n    }\n\n    const delta = tx - desiredLeft;\n    const absDelta = _abs(delta);\n\n    if (absDelta > spacingThreshold) continue;\n    if (absDelta >= bestAbs) continue;\n\n    const rects = _buildGapRectsXWithBand(indices, starts, ends, bandTop, bandBottom);\n\n    // extra rects around snapped target, same band\n    if (between) {\n      const snappedLeft = desiredLeft;\n      const snappedRight = desiredLeft + target.width;\n\n      rects.push({\n        left: ends[leftIndex],\n        top: bandTop,\n        width: snappedLeft - ends[leftIndex],\n        height: bandBottom - bandTop,\n      });\n\n      rects.push({\n        left: snappedRight,\n        top: bandTop,\n        width: starts[rightIndex] - snappedRight,\n        height: bandBottom - bandTop,\n      });\n    } else if (insertion <= 0) {\n      const snappedRight = desiredLeft + target.width;\n\n      rects.push({\n        left: snappedRight,\n        top: bandTop,\n        width: starts[0] - snappedRight,\n        height: bandBottom - bandTop,\n      });\n    } else {\n      rects.push({\n        left: ends[count - 1],\n        top: bandTop,\n        width: desiredLeft - ends[count - 1],\n        height: bandBottom - bandTop,\n      });\n    }\n\n    const crossDelta = targetAnchor - guideAnchor;\n\n    bestAbs = absDelta;\n    bestDelta = delta;\n    bestGap = g;\n    bestAlignMode = AXIS_X_ALIGN_MODES[modeIndex];\n    bestRects = rects;\n\n    bestCrossDelta = crossDelta;\n  }\n\n  if (bestDelta === undefined || bestAlignMode === undefined) return undefined;\n\n  return {\n    delta: bestDelta,\n    absDelta: bestAbs,\n    gap: bestGap,\n    rects: bestRects,\n    alignMode: bestAlignMode,\n\n    crossDelta: bestCrossDelta,\n  };\n}\n\nfunction _calculateAxisY_FigmaLike(\n  elements: IRect[],\n  target: IRect,\n  tx: number,\n  ty: number,\n  tr: number,\n  _tb: number,\n  tcx: number,\n  tcy: number,\n  alignThreshold: number,\n  spacingThreshold: number,\n): IAxisCandidate | undefined {\n  let bestAbs = Infinity;\n  let bestDelta: number | undefined;\n  let bestGap = 0;\n  let bestAlignMode: MagneticRectsAlignMode | undefined;\n  let bestRects: IMagneticGapRect[] = [];\n\n  let bestCrossDelta = 0;\n\n  const indices: number[] = [];\n  const starts: number[] = [];\n  const ends: number[] = [];\n\n  for (let modeIndex = 0; modeIndex < AXIS_Y_ALIGN_MODES.length; modeIndex++) {\n    const targetAnchor = modeIndex === 0 ? tx : modeIndex === 1 ? tcx : tr;\n\n    indices.length = 0;\n    starts.length = 0;\n    ends.length = 0;\n\n    let bandLeft = Infinity;\n    let bandRight = -Infinity;\n\n    let guideAnchor = 0;\n    let guideAbs = Infinity;\n    let guideElementIndex = Infinity;\n\n    for (let i = 0; i < elements.length; i++) {\n      const el = elements[i];\n\n      const elAnchor =\n        modeIndex === 0 ? el.x : modeIndex === 1 ? el.gravityCenter.x : el.x + el.width;\n\n      const alignDelta = targetAnchor - elAnchor;\n      const alignAbs = _abs(alignDelta);\n      if (alignAbs > alignThreshold) continue;\n\n      indices.push(i);\n      starts.push(el.y);\n      ends.push(el.y + el.height);\n\n      const left = el.x;\n      const right = el.x + el.width;\n      if (left < bandLeft) bandLeft = left;\n      if (right > bandRight) bandRight = right;\n\n      if (alignAbs < guideAbs || (alignAbs === guideAbs && i < guideElementIndex)) {\n        guideAbs = alignAbs;\n        guideAnchor = elAnchor;\n        guideElementIndex = i;\n      }\n    }\n\n    const count = indices.length;\n    if (count < 2) continue;\n\n    _stableSortByStart(indices, starts, ends);\n\n    let insertion = 0;\n    while (insertion < count && starts[insertion] <= tcy) insertion++;\n\n    const between = insertion > 0 && insertion < count;\n\n    let topIndex: number;\n    let bottomIndex: number;\n\n    if (between) {\n      topIndex = insertion - 1;\n      bottomIndex = insertion;\n    } else if (insertion <= 0) {\n      topIndex = 0;\n      bottomIndex = 1;\n    } else {\n      topIndex = count - 2;\n      bottomIndex = count - 1;\n    }\n\n    const g = starts[bottomIndex] - ends[topIndex];\n    if (g < 0) continue;\n\n    let desiredTop: number;\n\n    if (between) {\n      desiredTop = ends[topIndex] + g;\n\n      const desiredBottom = desiredTop + target.height;\n      const bottomGap = starts[bottomIndex] - desiredBottom;\n      if (_abs(bottomGap - g) > spacingThreshold) continue;\n    } else if (insertion <= 0) {\n      desiredTop = starts[0] - g - target.height;\n    } else {\n      desiredTop = ends[count - 1] + g;\n    }\n\n    const delta = ty - desiredTop;\n    const absDelta = _abs(delta);\n\n    if (absDelta > spacingThreshold) continue;\n    if (absDelta >= bestAbs) continue;\n\n    const rects = _buildGapRectsYWithBand(indices, starts, ends, bandLeft, bandRight);\n\n    if (between) {\n      const snappedTop = desiredTop;\n      const snappedBottom = desiredTop + target.height;\n\n      rects.push({\n        left: bandLeft,\n        top: ends[topIndex],\n        width: bandRight - bandLeft,\n        height: snappedTop - ends[topIndex],\n      });\n\n      rects.push({\n        left: bandLeft,\n        top: snappedBottom,\n        width: bandRight - bandLeft,\n        height: starts[bottomIndex] - snappedBottom,\n      });\n    } else if (insertion <= 0) {\n      const snappedBottom = desiredTop + target.height;\n\n      rects.push({\n        left: bandLeft,\n        top: snappedBottom,\n        width: bandRight - bandLeft,\n        height: starts[0] - snappedBottom,\n      });\n    } else {\n      rects.push({\n        left: bandLeft,\n        top: ends[count - 1],\n        width: bandRight - bandLeft,\n        height: desiredTop - ends[count - 1],\n      });\n    }\n\n    const crossDelta = targetAnchor - guideAnchor;\n\n    bestAbs = absDelta;\n    bestDelta = delta;\n    bestGap = g;\n    bestAlignMode = AXIS_Y_ALIGN_MODES[modeIndex];\n    bestRects = rects;\n\n    bestCrossDelta = crossDelta;\n  }\n\n  if (bestDelta === undefined || bestAlignMode === undefined) return undefined;\n\n  return {\n    delta: bestDelta,\n    absDelta: bestAbs,\n    gap: bestGap,\n    rects: bestRects,\n    alignMode: bestAlignMode,\n\n    crossDelta: bestCrossDelta,\n  };\n}\n\nfunction _buildGapRectsXWithBand(\n  indices: number[],\n  starts: number[],\n  ends: number[],\n  bandTop: number,\n  bandBottom: number,\n): IMagneticGapRect[] {\n  const rects: IMagneticGapRect[] = [];\n  const height = bandBottom - bandTop;\n\n  for (let i = 0; i < indices.length - 1; i++) {\n    const gap = starts[i + 1] - ends[i];\n    if (gap < 0) continue;\n\n    rects.push({\n      left: ends[i],\n      top: bandTop,\n      width: gap,\n      height,\n    });\n  }\n\n  return rects;\n}\n\nfunction _buildGapRectsYWithBand(\n  indices: number[],\n  starts: number[],\n  ends: number[],\n  bandLeft: number,\n  bandRight: number,\n): IMagneticGapRect[] {\n  const rects: IMagneticGapRect[] = [];\n  const width = bandRight - bandLeft;\n\n  for (let i = 0; i < indices.length - 1; i++) {\n    const gap = starts[i + 1] - ends[i];\n    if (gap < 0) continue;\n\n    rects.push({\n      left: bandLeft,\n      top: ends[i],\n      width,\n      height: gap,\n    });\n  }\n\n  return rects;\n}\n\nfunction _stableSortByStart(indices: number[], starts: number[], ends: number[]): void {\n  for (let i = 1; i < starts.length; i++) {\n    const start = starts[i];\n    const end = ends[i];\n    const index = indices[i];\n\n    let j = i - 1;\n\n    while (j >= 0) {\n      const prevStart = starts[j];\n      const prevIndex = indices[j];\n\n      const shouldStop = prevStart < start || (prevStart === start && prevIndex < index);\n      if (shouldStop) break;\n\n      starts[j + 1] = prevStart;\n      ends[j + 1] = ends[j];\n      indices[j + 1] = prevIndex;\n      j--;\n    }\n\n    starts[j + 1] = start;\n    ends[j + 1] = end;\n    indices[j + 1] = index;\n  }\n}\n\nfunction _abs(v: number): number {\n  return v < 0 ? -v : v;\n}\n","import { BrowserService } from '@foblex/platform';\n\nexport class MagneticRectElement {\n  private readonly _element: HTMLElement;\n\n  private _isVisible = false;\n\n  private _left = Number.NaN;\n  private _top = Number.NaN;\n  private _width = Number.NaN;\n  private _height = Number.NaN;\n\n  constructor(browser: BrowserService, hostElement: HTMLElement, className = 'f-rect') {\n    this._element = browser.document.createElement('div');\n    this._element.classList.add(className);\n\n    const style = this._element.style;\n    style.position = 'absolute';\n    style.display = 'none';\n    style.boxSizing = 'border-box';\n    style.pointerEvents = 'none';\n\n    hostElement.appendChild(this._element);\n  }\n\n  public show(): void {\n    if (this._isVisible) {\n      return;\n    }\n\n    this._isVisible = true;\n    this._element.style.display = 'block';\n  }\n\n  public hide(): void {\n    if (!this._isVisible) {\n      return;\n    }\n\n    this._isVisible = false;\n    this._element.style.display = 'none';\n  }\n\n  public render(left: number, top: number, width: number, height: number): void {\n    const style = this._element.style;\n\n    if (left !== this._left) {\n      this._left = left;\n      style.left = left + 'px';\n    }\n\n    if (top !== this._top) {\n      this._top = top;\n      style.top = top + 'px';\n    }\n\n    if (width !== this._width) {\n      this._width = width;\n      style.width = width + 'px';\n    }\n\n    if (height !== this._height) {\n      this._height = height;\n      style.height = height + 'px';\n    }\n  }\n\n  public clearRect(): void {\n    this._left = Number.NaN;\n    this._top = Number.NaN;\n    this._width = Number.NaN;\n    this._height = Number.NaN;\n\n    const style = this._element.style;\n    style.removeProperty('left');\n    style.removeProperty('top');\n    style.removeProperty('width');\n    style.removeProperty('height');\n  }\n\n  public destroy(): void {\n    this._element.remove();\n  }\n}\n","import { ITransformModel } from '@foblex/2d';\nimport { BrowserService } from '@foblex/platform';\nimport { IMagneticGapRect } from './i-magnetic-gap-rect';\nimport { MagneticRectElement } from './magnetic-rect-element';\n\nexport class MagneticRectsRenderer {\n  private readonly _pool: MagneticRectElement[] = [];\n\n  private _activeCount = 0;\n\n  constructor(\n    private readonly _browser: BrowserService,\n    private readonly _hostElement: HTMLElement,\n    private readonly _className = 'f-rect',\n  ) {}\n\n  public draw(rects: IMagneticGapRect[], transform: ITransformModel): void {\n    const scale = transform.scale;\n    const offsetX = transform.position.x + transform.scaledPosition.x;\n    const offsetY = transform.position.y + transform.scaledPosition.y;\n\n    for (let i = 0; i < rects.length; i++) {\n      const magneticRect = this._getOrCreate(i);\n      const rect = rects[i];\n\n      magneticRect.show();\n      magneticRect.render(\n        rect.left * scale + offsetX,\n        rect.top * scale + offsetY,\n        rect.width * scale,\n        rect.height * scale,\n      );\n    }\n\n    for (let i = rects.length; i < this._activeCount; i++) {\n      this._pool[i].hide();\n    }\n\n    this._activeCount = rects.length;\n  }\n\n  public hideAll(): void {\n    for (let i = 0; i < this._activeCount; i++) {\n      this._pool[i].hide();\n    }\n\n    this._activeCount = 0;\n  }\n\n  public destroy(): void {\n    for (const item of this._pool) {\n      item.destroy();\n    }\n\n    this._pool.length = 0;\n    this._activeCount = 0;\n  }\n\n  private _getOrCreate(index: number): MagneticRectElement {\n    if (index < this._pool.length) {\n      return this._pool[index];\n    }\n\n    const item = new MagneticRectElement(this._browser, this._hostElement, this._className);\n\n    this._pool.push(item);\n\n    return item;\n  }\n}\n","export class MagneticRectsPreparationRequest {\n  static readonly fToken = Symbol('MagneticRectsPreparationRequest');\n}\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { MagneticRectsPreparationRequest } from './magnetic-rects-preparation-request';\nimport { IRect } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport {\n  DragNodeHandler,\n  DragNodeItemHandler,\n  MagneticRectsHandler,\n  MagneticRectsRenderer,\n} from '../../index';\nimport { BrowserService } from '@foblex/platform';\nimport { FComponentsStore, INSTANCES } from '../../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable-data-context';\nimport { FNodeBase } from '../../../../f-node';\nimport { GetNormalizedElementRectRequest } from '../../../../domain';\nimport { FMagneticRectsBase } from '../../../../plugins/snapping/f-magnetic-rects';\n\n@Injectable()\n@FExecutionRegister(MagneticRectsPreparationRequest)\nexport class MagneticRectsPreparation implements IExecution<MagneticRectsPreparationRequest, void> {\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  private readonly _dragSession = inject(FDraggableDataContext);\n\n  private _renderer: MagneticRectsRenderer | undefined;\n\n  public handle(_: MagneticRectsPreparationRequest): void {\n    const magneticRects = this._store.instances.get(INSTANCES.MAGNETIC_RECTS);\n    if (!magneticRects) {\n      return;\n    }\n\n    const handler = this._dragSession.draggableItems.find((x) => x instanceof DragNodeHandler);\n    if (!handler) {\n      return;\n    }\n\n    handler.setMagneticRects(\n      new MagneticRectsHandler(\n        this._injector,\n        this._getRenderer(magneticRects),\n        this._notDraggedRects(this._draggedNodes(handler.items)),\n      ),\n    );\n  }\n\n  private _draggedNodes(items: DragNodeItemHandler[]): FNodeBase[] {\n    return items.map((x) => x.nodeOrGroup);\n  }\n\n  private _getRenderer(instance: FMagneticRectsBase): MagneticRectsRenderer {\n    if (!this._renderer) {\n      this._renderer = new MagneticRectsRenderer(this._browser, instance.hostElement);\n    }\n    this._renderer?.destroy();\n\n    return this._renderer;\n  }\n\n  private _notDraggedRects(draggedNodes: FNodeBase[]): IRect[] {\n    const dragged = new Set(draggedNodes);\n    const notDragged = this._store.nodes.getAll().filter((x) => !dragged.has(x));\n\n    return notDragged.map((x) =>\n      this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(x.hostElement)),\n    );\n  }\n}\n","import { IRect, ITransformModel } from '@foblex/2d';\nimport { Injector } from '@angular/core';\nimport { FComponentsStore, INSTANCES } from '../../../../f-storage';\nimport { calculateMagneticRects, IMagneticRectsResult, MagneticRectsRenderer } from '../domain';\n\nexport class MagneticRectsHandler {\n  private _timerId: ReturnType<typeof setTimeout> | null = null;\n\n  private readonly _canvasTransform: ITransformModel;\n  private readonly _alignThreshold: number = 10;\n  private readonly _spacingThreshold: number = 10;\n\n  constructor(\n    injector: Injector,\n    private readonly _renderer: MagneticRectsRenderer,\n    private readonly _rects: IRect[],\n  ) {\n    const store = injector.get(FComponentsStore);\n\n    const magneticRects = store.instances.require(INSTANCES.MAGNETIC_RECTS);\n\n    this._alignThreshold = magneticRects.alignThreshold();\n    this._spacingThreshold = magneticRects.spacingThreshold();\n    this._canvasTransform = store.transform;\n  }\n\n  public scheduleRender(_draggedRect: IRect): void {\n    if (this._timerId) {\n      clearTimeout(this._timerId);\n    }\n\n    this._timerId = setTimeout(() => this._renderRects(this._computeRects(_draggedRect)), 15);\n  }\n\n  private _renderRects(result: IMagneticRectsResult): void {\n    if (result.axis !== undefined && result.delta !== undefined && result.rects.length > 0) {\n      this._renderer.draw(result.rects, this._canvasTransform);\n\n      return;\n    }\n\n    this._renderer.hideAll();\n  }\n\n  public _computeRects(_draggedRect: IRect): IMagneticRectsResult {\n    return calculateMagneticRects(\n      this._rects,\n      _draggedRect,\n      this._alignThreshold,\n      this._spacingThreshold,\n    );\n  }\n\n  public clearGuides(): void {\n    this._renderer.hideAll();\n\n    if (this._timerId) {\n      clearTimeout(this._timerId);\n      this._timerId = null;\n    }\n  }\n}\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class DragNodeFinalizeRequest {\n  static readonly fToken = Symbol('DragNodeFinalizeRequest');\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { IPoint } from '@foblex/2d';\n\nexport type FMoveNodePosition = { id: string; position: IPoint };\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  /** Preferred name */\n  public readonly nodes: FMoveNodePosition[];\n\n  /** @deprecated Use `nodes` */\n  public readonly fNodes: FMoveNodePosition[];\n\n  constructor(nodes: FMoveNodePosition[]) {\n    // single source of truth, same reference\n    this.nodes = nodes;\n    this.fNodes = nodes;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DragNodeFinalizeRequest } from './drag-node-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 { DetectConnectionsUnderDragNodeRequest } from '../../domain';\nimport { DragNodeHandler } from '../drag-node-handler';\nimport { FNodeBase } from '../../../f-node';\nimport { FMoveNodesEvent } from '../f-move-nodes-event';\nimport { IMagneticAxisGuide, IMagneticGuidesResult } from '../magnetic-lines';\nimport { IMagneticRectsResult } from '../magnetic-rects';\nimport { isDragNodeHandler } from '../is-drag-node-handler';\n\n@Injectable()\n@FExecutionRegister(DragNodeFinalizeRequest)\nexport class DragNodeFinalize implements IExecution<DragNodeFinalizeRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  private _dragHandler?: DragNodeHandler | undefined;\n\n  public handle({ event }: DragNodeFinalizeRequest): void {\n    this._dragHandler = this._getDragHandler();\n    if (!this._dragHandler) {\n      return;\n    }\n\n    const delta = this._buildDragDelta(event.getPosition());\n    const snaps = this._dragHandler.calculateMagneticSnaps(delta);\n    const snappedDelta = this._applySnapToDelta(delta, snaps.lines, snaps.rects);\n\n    this._finalizeMove(this._dragHandler, snappedDelta);\n    this._emitNodeIntersectIfNeeded(this._dragHandler);\n  }\n\n  private _getDragHandler(): DragNodeHandler | undefined {\n    return this._dragSession.draggableItems.find(isDragNodeHandler);\n  }\n\n  private _buildDragDelta(pointerPosition: IPoint): Point {\n    return Point.fromPoint(pointerPosition)\n      .elementTransform(this._store.flowHost)\n      .div(this._dragSession.onPointerDownScale)\n      .sub(this._dragSession.onPointerDownPosition);\n  }\n\n  private _applySnapToDelta(\n    delta: IPoint,\n    lineSnap?: IMagneticGuidesResult,\n    rectSnap?: IMagneticRectsResult,\n  ): IPoint {\n    let x = delta.x;\n    let y = delta.y;\n\n    if (lineSnap) {\n      x = this._hasLineSnapValue(lineSnap.x) ? delta.x - (lineSnap.x.delta || 0) : x;\n      y = this._hasLineSnapValue(lineSnap.y) ? delta.y - (lineSnap.y.delta || 0) : y;\n    }\n\n    if (this._hasRectSnapValue(rectSnap)) {\n      if (rectSnap.axis === 'x') {\n        x = delta.x - rectSnap.delta;\n        y = delta.y - (rectSnap.crossDelta ?? 0);\n      } else {\n        y = delta.y - rectSnap.delta;\n        x = delta.x - (rectSnap.crossDelta ?? 0);\n      }\n    }\n\n    return { x, y };\n  }\n\n  private _hasLineSnapValue(result: IMagneticAxisGuide): boolean {\n    // distance is assumed to exist when value is defined (as in your current logic)\n    return result.guide !== undefined && result.guide !== null;\n  }\n\n  private _hasRectSnapValue(\n    result?: IMagneticRectsResult,\n  ): result is IMagneticRectsResult & { axis: 'x' | 'y'; delta: number } {\n    return !!result && result.axis !== undefined && result.delta !== undefined;\n  }\n\n  private _finalizeMove(handler: DragNodeHandler, delta: IPoint): void {\n    // finalize constraints for roots\n    for (const root of handler.roots) {\n      root.finalizeConstraints();\n    }\n\n    handler.onPointerMove(delta);\n    handler.onPointerUp?.();\n\n    this._store.fDraggable?.fMoveNodes.emit(this._buildMoveNodesEvent(handler));\n  }\n\n  private _buildMoveNodesEvent(handler: DragNodeHandler): FMoveNodesEvent {\n    // Prefer new event shape: kind/data\n    // but keep backward compat: fData\n    const dragEvent = handler.getEvent();\n    const data = dragEvent.data ?? dragEvent.fData;\n\n    const ids: string[] = data?.fNodeIds ?? [];\n\n    const nodes = ids.map((id) => ({\n      id,\n      position: this._store.nodes.get(id)?._position as IPoint,\n    }));\n\n    return new FMoveNodesEvent(nodes);\n  }\n\n  private _emitNodeIntersectIfNeeded(handler: DragNodeHandler): void {\n    if (!this._isDraggedJustOneNode(handler) || !this._store.fDraggable?.fEmitOnNodeIntersect) {\n      return;\n    }\n\n    const nodeOrGroup = handler.roots[0].nodeOrGroup as FNodeBase;\n\n    queueMicrotask(() =>\n      this._mediator.execute(new DetectConnectionsUnderDragNodeRequest(nodeOrGroup)),\n    );\n  }\n\n  private _isDraggedJustOneNode(handler: DragNodeHandler): boolean {\n    return handler.roots.length === 1;\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport { IPointerEvent } from '../../infrastructure';\n\nexport class DragNodePreparationRequest {\n  static readonly fToken = Symbol('DragNodePreparationRequest');\n\n  constructor(\n    public readonly event: IPointerEvent,\n    public readonly trigger: FEventTrigger,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DragNodePreparationRequest } from './drag-node-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 { AttachDragNodeHandlerFromSelectionRequest } from '../attach-drag-node-handler-from-selection';\nimport {\n  FEventTrigger,\n  isValidEventTrigger,\n  SelectAndUpdateNodeLayerRequest,\n} from '../../../domain';\nimport { isClosestElementHasClass } from '@foblex/utils';\nimport { DragNodeHandler } from '../drag-node-handler';\nimport { IPointerEvent } from '../../infrastructure';\nimport { MagneticLinesPreparationRequest } from '../magnetic-lines';\nimport { MagneticRectsPreparationRequest } from '../magnetic-rects';\n\n@Injectable()\n@FExecutionRegister(DragNodePreparationRequest)\nexport class DragNodePreparation implements IExecution<DragNodePreparationRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  public handle({ event, trigger }: DragNodePreparationRequest): void {\n    if (!this._canStartDrag(event, trigger)) {\n      return;\n    }\n\n    const node = this._findDraggableNode(event.targetElement);\n    if (!node) {\n      return;\n    }\n\n    this._storePointerDownContext(event);\n\n    // Store pointer-down context for other handlers\n    this._dragSession.draggableItems = [this._buildDragNodeHandler(node)];\n\n    this._mediator.execute<void>(new MagneticLinesPreparationRequest());\n    this._mediator.execute<void>(new MagneticRectsPreparationRequest());\n  }\n\n  private _canStartDrag(event: IPointerEvent, trigger: FEventTrigger): boolean {\n    return (\n      this._dragSession.isEmpty() &&\n      this._isDragHandle(event.targetElement) &&\n      isValidEventTrigger(event.originalEvent, trigger)\n    );\n  }\n\n  private _isDragHandle(element: HTMLElement): boolean {\n    return isClosestElementHasClass(element, '.f-drag-handle');\n  }\n\n  private _findDraggableNode(target: HTMLElement): FNodeBase | undefined {\n    const nodes = this._store.nodes.getAll();\n\n    for (const node of nodes) {\n      if (node.fDraggingDisabled()) {\n        continue;\n      }\n\n      if (node.isContains(target)) {\n        return node;\n      }\n    }\n\n    return undefined;\n  }\n\n  private _storePointerDownContext(event: IPointerEvent): void {\n    this._dragSession.onPointerDownScale = this._store.transform.scale;\n    this._dragSession.onPointerDownPosition = Point.fromPoint(event.getPosition())\n      .elementTransform(this._store.flowHost)\n      .div(this._store.transform.scale);\n  }\n\n  private _buildDragNodeHandler(node: FNodeBase): DragNodeHandler {\n    if (node.fSelectionDisabled() || !node.isSelected()) {\n      queueMicrotask(() => {\n        this._mediator.execute<void>(new SelectAndUpdateNodeLayerRequest(node));\n      });\n    }\n\n    return this._mediator.execute(new AttachDragNodeHandlerFromSelectionRequest(node));\n  }\n}\n","import { CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS } from './attach-drag-node-handler-from-selection';\nimport { DragNodeFinalize } from './drag-node-finalize';\nimport { DragNodePreparation } from './drag-node-preparation';\nimport { MagneticLinesPreparation } from './magnetic-lines';\nimport { MagneticRectsPreparation } from './magnetic-rects';\n\nexport const NODE_PROVIDERS = [\n  ...CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS,\n\n  MagneticLinesPreparation,\n  MagneticRectsPreparation,\n\n  DragNodeFinalize,\n\n  DragNodePreparation,\n];\n","import { IPoint } from '@foblex/2d';\n\nexport class FDropToGroupEvent {\n  /** Preferred name: Group (target) id */\n  public readonly targetGroupId: string;\n\n  /** Preferred name: Dropped node ids */\n  public readonly nodeIds: string[];\n\n  /** Preferred name: Pointer drop position */\n  public readonly dropPosition: IPoint;\n\n  /** @deprecated Use `targetGroupId` */\n  public readonly fTargetNode: string;\n\n  /** @deprecated Use `nodeIds` */\n  public readonly fNodes: string[];\n\n  /** @deprecated Use `dropPosition` */\n  public readonly fDropPosition: IPoint;\n\n  constructor(targetGroupId: string, nodeIds: string[], dropPosition: IPoint) {\n    this.targetGroupId = targetGroupId;\n    this.nodeIds = nodeIds;\n    this.dropPosition = dropPosition;\n\n    // legacy aliases (same values / references)\n    this.fTargetNode = targetGroupId;\n    this.fNodes = nodeIds;\n    this.fDropPosition = dropPosition;\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 { DropToGroupHandler } from '../drop-to-group-handler';\nimport { FComponentsStore } from '../../../f-storage';\nimport { DragNodeHandler } from '../../drag-node';\nimport { FDropToGroupEvent } from '../f-drop-to-group-event';\nimport { IPointerEvent } from '../../infrastructure';\n\n@Injectable()\n@FExecutionRegister(DropToGroupFinalizeRequest)\nexport class DropToGroupFinalize implements IExecution<DropToGroupFinalizeRequest, void> {\n  private readonly _dragSession = inject(FDraggableDataContext);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ event }: DropToGroupFinalizeRequest): void {\n    const dropHandler = this._findDropHandler();\n    if (!dropHandler) {\n      return;\n    }\n\n    const target = dropHandler.activeTarget?.node;\n    if (target) {\n      this._emitDropToGroupEvent(target.fId(), event);\n    }\n\n    dropHandler.onPointerUp?.();\n  }\n\n  private _findDropHandler(): DropToGroupHandler | undefined {\n    return this._dragSession.draggableItems.find((x) => x instanceof DropToGroupHandler);\n  }\n\n  private _emitDropToGroupEvent(targetId: string, event: IPointerEvent): void {\n    this._store.fDraggable?.fDropToGroup.emit(\n      new FDropToGroupEvent(targetId, this._getTopLevelDraggedIds(), event.getPosition()),\n    );\n  }\n\n  /**\n   * Returns only \"top-level\" dragged items:\n   * if a node's parent is also in dragged set, we exclude the child.\n   */\n  private _getTopLevelDraggedIds(): string[] {\n    const summary = this._getMoveSummaryHandler();\n\n    const dragged = summary.items.map((x) => x.nodeOrGroup);\n\n    const draggedIdSet = new Set(dragged.map((n) => n.fId()));\n\n    const result: string[] = [];\n    for (const node of dragged) {\n      const parentId = node.fParentId();\n      if (!parentId || !draggedIdSet.has(parentId)) {\n        result.push(node.fId());\n      }\n    }\n\n    return result;\n  }\n\n  private _getMoveSummaryHandler(): DragNodeHandler {\n    const handler = this._dragSession.draggableItems.find((x) => x instanceof DragNodeHandler);\n\n    if (!handler) {\n      throw new Error('DropToGroup requires DragNodeHandler.');\n    }\n\n    return handler;\n  }\n}\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class DropToGroupPreparationRequest {\n  static readonly fToken = Symbol('DropToGroupPreparationRequest');\n\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { INodeWithRect } from '../../domain';\n\nexport class SortDropCandidatesByLayerRequest {\n  static readonly fToken = Symbol('SortDropCandidatesByLayerRequest');\n  constructor(public readonly candidates: INodeWithRect[]) {}\n}\n","import { Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { SortDropCandidatesByLayerRequest } from './sort-drop-candidates-by-layer-request';\nimport { INodeWithRect } from '../../domain';\n\n@Injectable()\n@FExecutionRegister(SortDropCandidatesByLayerRequest)\nexport class SortDropCandidatesByLayer\n  implements IExecution<SortDropCandidatesByLayerRequest, INodeWithRect[]>\n{\n  public handle({ candidates }: SortDropCandidatesByLayerRequest): INodeWithRect[] {\n    // Stable sort even if runtime sort stability changes: remember original index.\n    const indexed = candidates.map((candidate, index) => ({ candidate, index }));\n\n    indexed.sort((a, b) => {\n      const domOrder = this._compareDomOrder(\n        a.candidate.node.hostElement,\n        b.candidate.node.hostElement,\n      );\n\n      // We want \"top-most\" candidates first (the ones later in DOM usually paint above).\n      if (domOrder !== 0) {\n        return -domOrder;\n      }\n\n      return a.index - b.index;\n    });\n\n    return indexed.map((x) => x.candidate);\n  }\n\n  private _compareDomOrder(a: Element, b: Element): number {\n    if (a === b) {\n      return 0;\n    }\n\n    const pos = a.compareDocumentPosition(b);\n\n    // If b is after a in DOM => a precedes b.\n    if ((pos & Node.DOCUMENT_POSITION_FOLLOWING) !== 0) {\n      return -1;\n    }\n\n    // If b is before a in DOM => a follows b.\n    if ((pos & Node.DOCUMENT_POSITION_PRECEDING) !== 0) {\n      return 1;\n    }\n\n    // Disconnected: fallback (rare). Use geometry to get deterministic order.\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) {\n        return ar.top < br.top ? -1 : 1;\n      }\n      if (ar.left !== br.left) {\n        return ar.left < br.left ? -1 : 1;\n      }\n\n      return 0;\n    }\n\n    return 0;\n  }\n}\n","import { IMinMaxPoint, IPoint } from '@foblex/2d';\nimport { Injector } from '@angular/core';\nimport { FComponentsStore } from '../../../f-storage';\n\nexport class ExternalRectConstraint {\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:\n        this._snapToGrid(this._onPointerDown.x + difference.x, this._hCellSize) -\n        this._onPointerDown.x,\n      y:\n        this._snapToGrid(this._onPointerDown.y + difference.y, this._vCellSize) -\n        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';\n\nexport class DragExternalItemCreatePlaceholderRequest {\n  static readonly fToken = Symbol('DragExternalItemCreatePlaceholderRequest');\n\n  constructor(public readonly externalItem: FExternalItemBase) {}\n}\n","import { DragExternalItemCreatePlaceholderRequest } from './drag-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(DragExternalItemCreatePlaceholderRequest)\nexport class DragExternalItemCreatePlaceholder implements IExecution<\n  DragExternalItemCreatePlaceholderRequest,\n  HTMLElement | SVGElement\n> {\n  private readonly _browser = inject(BrowserService);\n  private readonly _containerRef = inject(ViewContainerRef);\n\n  public handle({\n    externalItem,\n  }: DragExternalItemCreatePlaceholderRequest): HTMLElement | SVGElement {\n    const { hostElement, placeholder } = externalItem;\n\n    const placeholderElement = placeholder();\n\n    const result = placeholderElement\n      ? this._fromTemplate(placeholderElement)\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<unknown>): HTMLElement {\n    return getOrCreateRootNodeForViewRef(this._createViewRef(template), this._browser.document);\n  }\n\n  private _fromHost(element: HTMLElement): HTMLElement {\n    return deepCloneNode(element);\n  }\n\n  private _createViewRef(template: TemplateRef<unknown>): EmbeddedViewRef<unknown> {\n    const result = this._containerRef.createEmbeddedView(template);\n    result.detectChanges();\n\n    return result;\n  }\n}\n","import { FExternalItemBase } from '../../../f-external-item';\n\nexport class DragExternalItemCreatePreviewRequest {\n  static readonly fToken = Symbol('DragExternalItemCreatePreviewRequest');\n\n  constructor(public readonly externalItem: FExternalItemBase) {}\n}\n","import { DragExternalItemCreatePreviewRequest } from './drag-external-item-create-preview-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { EmbeddedViewRef, inject, Injectable, TemplateRef, ViewContainerRef } from '@angular/core';\nimport {\n  deepCloneNode,\n  disableDragInteractions,\n  extendStyles,\n  getOrCreateRootNodeForViewRef,\n} from '@foblex/utils';\nimport { BrowserService } from '@foblex/platform';\n\n@Injectable()\n@FExecutionRegister(DragExternalItemCreatePreviewRequest)\nexport class DragExternalItemCreatePreview implements IExecution<\n  DragExternalItemCreatePreviewRequest,\n  HTMLElement | SVGElement\n> {\n  private readonly _browser = inject(BrowserService);\n  private readonly _containerRef = inject(ViewContainerRef);\n\n  public handle({ externalItem }: DragExternalItemCreatePreviewRequest): HTMLElement | SVGElement {\n    const { hostElement, preview } = externalItem;\n\n    const previewElement = preview();\n\n    const result = previewElement\n      ? this._fromTemplate(previewElement)\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<unknown>): HTMLElement {\n    return getOrCreateRootNodeForViewRef(this._createViewRef(template), this._browser.document);\n  }\n\n  private _fromHost(element: HTMLElement): HTMLElement {\n    return deepCloneNode(element);\n  }\n\n  private _createViewRef(template: TemplateRef<unknown>): EmbeddedViewRef<unknown> {\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 '../../infrastructure';\n\nexport class DragExternalItemFinalizeRequest {\n  static readonly fToken = Symbol('DragExternalItemFinalizeRequest');\n\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { IPoint, IRect } from '@foblex/2d';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class FCreateNodeEvent<TData = any> {\n  // -----------------------------\n  // Preferred API\n  // -----------------------------\n\n  /** Rect of the dragged external item at the moment of drop (in flow coordinates). */\n  public readonly externalItemRect: IRect;\n\n  /** External item data payload. */\n  public readonly data: TData;\n\n  /** Id of node/group where item was dropped (if any). */\n  public readonly targetContainerId?: string;\n\n  /** Pointer drop position in flow coordinates (if provided). */\n  public readonly dropPosition?: IPoint;\n\n  // -----------------------------\n  // Deprecated compatibility API\n  // -----------------------------\n\n  /** @deprecated Use `externalItemRect` */\n  public readonly rect: IRect;\n\n  /** @deprecated Use `targetContainerId` */\n  public readonly fTargetNode?: string;\n\n  /** @deprecated Use `dropPosition` */\n  public readonly fDropPosition?: IPoint;\n\n  constructor(\n    externalItemRect: IRect,\n    data: TData,\n    targetContainerId?: string,\n    dropPosition?: IPoint,\n  ) {\n    // new\n    this.externalItemRect = externalItemRect;\n    this.data = data;\n    this.targetContainerId = targetContainerId;\n    this.dropPosition = dropPosition;\n\n    // legacy aliases (same values / references)\n    this.rect = externalItemRect;\n    this.fTargetNode = targetContainerId;\n    this.fDropPosition = dropPosition;\n  }\n}\n","import { DragHandlerBase } from '../infrastructure';\nimport { DragExternalItemHandler } from './drag-external-item-handler';\n\nexport const DRAG_EXTERNAL_ITEM_HANDLER_TYPE = 'external-item';\nexport const DRAG_EXTERNAL_ITEM_HANDLER_KIND = 'drag-external-item';\n\nexport function isDragExternalItemHandler(\n  value: DragHandlerBase<unknown>,\n): value is DragExternalItemHandler {\n  return (\n    value.getEvent().kind === DRAG_EXTERNAL_ITEM_HANDLER_KIND ||\n    value.getEvent().fEventType === DRAG_EXTERNAL_ITEM_HANDLER_TYPE\n  );\n}\n","import { EventEmitter, inject, Injectable } from '@angular/core';\nimport { DragExternalItemFinalizeRequest } from './drag-external-item-finalize-request';\nimport { IPoint, IRect } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FCreateNodeEvent } from '../f-create-node-event';\nimport { FDragHandlerResult } from '../../infrastructure';\nimport { FComponentsStore } from '../../../f-storage';\nimport { DragExternalItemHandler } from '../drag-external-item-handler';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { isDragExternalItemHandler } from '../is-drag-external-item-handler';\nimport { DropToGroupHandler } from '../../drop-to-group';\nimport { BrowserService } from '@foblex/platform';\nimport { GetNormalizedElementRectRequest } from '../../../domain';\nimport { IDragExternalItemDragResult } from '../i-drag-external-item-drag-result';\n\n@Injectable()\n@FExecutionRegister(DragExternalItemFinalizeRequest)\nexport class DragExternalItemFinalize implements IExecution<DragExternalItemFinalizeRequest, void> {\n  private readonly _result: FDragHandlerResult<IDragExternalItemDragResult> =\n    inject(FDragHandlerResult);\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n  private readonly _browser = inject(BrowserService);\n\n  private get _createNodeEmitter(): EventEmitter<FCreateNodeEvent> | undefined {\n    return this._store.fDraggable?.fCreateNode;\n  }\n\n  public handle(request: DragExternalItemFinalizeRequest): void {\n    const handler = this._findExternalItemHandler();\n    if (!handler) {\n      return;\n    }\n\n    const targetContainerId = this._getDestinationNodeOrGroupId();\n\n    this._emitEvent(\n      this._getElementsFromPoint(request.event.getPosition()),\n      targetContainerId,\n      request.event.getPosition(),\n    );\n\n    handler.onPointerUp();\n    this._dragSession.draggableItems = [];\n  }\n\n  private _findExternalItemHandler(): DragExternalItemHandler | undefined {\n    return this._dragSession.draggableItems.find((x) => isDragExternalItemHandler(x));\n  }\n\n  private _getDestinationNodeOrGroupId(): string | undefined {\n    const handler = this._getDropToGroupHandler();\n    const result = handler.activeTarget?.node.fId();\n    handler.onPointerUp?.();\n\n    return result;\n  }\n\n  private _getDropToGroupHandler(): DropToGroupHandler {\n    const result = this._dragSession.draggableItems.find((x) => x instanceof DropToGroupHandler);\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._browser.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._createNodeEmitter?.emit(\n        new FCreateNodeEvent(\n          this._getPreviewRect(),\n          this._result.getData().externalItem.data(),\n          destinationNodeOrGroupId,\n          destinationNodeOrGroupId ? eventPosition : undefined,\n        ),\n      );\n    }\n  }\n\n  private _isPointerInCanvasRect(elements: HTMLElement[]): boolean {\n    return elements.length ? this._store.flowHost.contains(elements[0]) : false;\n  }\n\n  private _getPreviewRect(): IRect {\n    return this._mediator.execute<IRect>(\n      new GetNormalizedElementRectRequest(this._result.getData().preview),\n    );\n  }\n}\n","export class FDragExternalItemStartEventData<T> {\n  constructor(public readonly data: T) {}\n}\n","import { IPoint, IRect, ITransformModel, Point, PointExtensions, RectExtensions } from '@foblex/2d';\nimport { BrowserService } from '@foblex/platform';\nimport { FMediator } from '@foblex/mediator';\nimport { Injector } from '@angular/core';\nimport { DragHandlerBase, FDragHandlerResult } from '../../infrastructure';\nimport { FDragExternalItemStartEventData } from '../f-drag-external-item-start-event-data';\nimport { FComponentsStore } from '../../../f-storage';\nimport { infinityMinMax } from '../../../utils';\nimport { ExternalRectConstraint } from '../constraints';\nimport { GetNormalizedElementRectRequest } from '../../../domain';\nimport { IDragExternalItemDragResult } from '../i-drag-external-item-drag-result';\nimport { DragExternalItemCreatePreviewRequest } from '../drag-external-item-create-preview';\nimport { DragExternalItemCreatePlaceholderRequest } from '../drag-external-item-create-placeholder';\nimport { FExternalItemBase } from '../../../f-external-item';\nimport { IPointerEvent } from '../../infrastructure';\n\nexport class DragExternalItemHandler extends DragHandlerBase<unknown> {\n  protected readonly type = 'external-item';\n  protected readonly kind = 'drag-external-item';\n\n  protected override data() {\n    return new FDragExternalItemStartEventData(this._externalItem.data());\n  }\n\n  private readonly _result: FDragHandlerResult<IDragExternalItemDragResult>;\n  private readonly _mediator: FMediator;\n  private readonly _browser: BrowserService;\n  private readonly _store: FComponentsStore;\n\n  private _previewEl?: HTMLElement | SVGElement;\n  private _placeholderEl?: HTMLElement | SVGElement;\n\n  private _startRect: IRect = RectExtensions.initialize();\n  private _pointerDownRect: IRect = RectExtensions.initialize();\n  private _absoluteOffsetFromFlow: IPoint = PointExtensions.initialize();\n  private _grabOffsetFromPointer: IPoint = PointExtensions.initialize();\n\n  private _originalParent?: Node;\n  private _originalNextSibling?: ChildNode | null;\n  private readonly _originalDisplay: string;\n\n  private _applyConstraints: (delta: IPoint) => IPoint = (d) => d;\n\n  constructor(\n    injector: Injector,\n    private readonly _externalItem: FExternalItemBase<unknown>,\n    private readonly _pointerDownClientPosition: IPoint,\n  ) {\n    super();\n\n    this._store = injector.get(FComponentsStore);\n    this._result = injector.get(FDragHandlerResult);\n    this._mediator = injector.get(FMediator);\n    this._browser = injector.get(BrowserService);\n\n    this._originalDisplay = this._host.style.display;\n\n    this._initConstraints(injector);\n  }\n\n  private get _host(): HTMLElement | SVGElement {\n    return this._externalItem.hostElement;\n  }\n\n  /** Overlay root: fullscreenElement (if any) or document.body */\n  private get _overlayRoot(): Element {\n    return this._browser.document.fullscreenElement ?? this._browser.document.body;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  private _initConstraints(injector: Injector): void {\n    this._startRect = this._getStartRect();\n    const constraint = new ExternalRectConstraint(injector, this._startRect, infinityMinMax());\n\n    this._applyConstraints = (delta: IPoint) => constraint.limit(delta);\n  }\n\n  private _getStartRect(): IRect {\n    return this._mediator.execute<IRect>(\n      new GetNormalizedElementRectRequest(this._externalItem.hostElement),\n    );\n  }\n\n  public override prepareDragSequence(): void {\n    this._pointerDownRect = this._readAbsoluteRect(this._host);\n    this._absoluteOffsetFromFlow = Point.fromPoint(this._pointerDownRect).sub(\n      this._toAbsolutePoint(this._startRect),\n    );\n    this._grabOffsetFromPointer = this._clientToAbsolute(this._pointerDownClientPosition).sub(\n      this._pointerDownRect,\n    );\n\n    this._rememberOriginalPlacement();\n\n    this._previewEl = this._createPreview();\n    this._placeholderEl = this._createPlaceholder();\n\n    // 1) Preview goes to overlay\n    this._placePreviewIntoOverlay();\n\n    // 2) Placeholder replaces original *in its parent*\n    // 3) Original is moved into overlay (hidden) — this preserves current behavior\n    this._swapOriginalWithPlaceholderAndMoveOriginalIntoOverlay();\n\n    this._result.setData({\n      preview: this._previewEl,\n      externalItem: this._externalItem,\n    });\n  }\n\n  private _rememberOriginalPlacement(): void {\n    const parent = this._host.parentNode;\n    if (!parent) {\n      // possible if host already detached\n      this._originalParent = undefined;\n      this._originalNextSibling = null;\n\n      return;\n    }\n\n    this._originalParent = parent;\n    this._originalNextSibling = this._host.nextSibling;\n  }\n\n  private _createPreview(): HTMLElement | SVGElement {\n    const el = this._mediator.execute<HTMLElement>(\n      new DragExternalItemCreatePreviewRequest(this._externalItem),\n    );\n\n    if (this._externalItem.previewMatchSize()) {\n      this._matchSize(el as HTMLElement, this._pointerDownRect);\n    }\n\n    el.style.transform = _translate(this._pointerDownRect);\n\n    return el;\n  }\n\n  private _createPlaceholder(): HTMLElement | SVGElement {\n    return this._mediator.execute<HTMLElement>(\n      new DragExternalItemCreatePlaceholderRequest(this._externalItem),\n    );\n  }\n\n  private _placePreviewIntoOverlay(): void {\n    // Ensure it is in overlay root (fullscreen or body)\n    this._overlayRoot.appendChild(this._previewEl!);\n  }\n\n  private _swapOriginalWithPlaceholderAndMoveOriginalIntoOverlay(): void {\n    const parent = this._originalParent;\n    const placeholder = this._placeholderEl;\n\n    if (!parent || !placeholder) return;\n\n    // Replace original in its parent with placeholder\n    const detachedOriginal = parent.replaceChild(placeholder, this._host);\n\n    // Keep original alive but out of layout (current behavior): move to overlay and hide\n    this._overlayRoot.appendChild(detachedOriginal);\n    (this._host as HTMLElement).style.display = 'none';\n  }\n\n  public override onPointerMove(delta: IPoint, event?: IPointerEvent): void {\n    if (!this._previewEl) return;\n\n    const desiredDelta = this._resolveDeltaFromPointer(delta, event);\n    const constrained = this._applyConstraints(desiredDelta);\n    const pointInFlow = Point.fromPoint(this._startRect).add(constrained);\n    const next = this._toAbsolutePoint(pointInFlow).add(this._absoluteOffsetFromFlow);\n    this._previewEl.style.transform = _translate(next);\n  }\n\n  public override onPointerUp(): void {\n    // Remove preview\n    if (this._previewEl && this._previewEl.parentNode) {\n      this._previewEl.parentNode.removeChild(this._previewEl);\n    }\n\n    // Restore original back into its place, remove placeholder\n    this._restoreOriginalInParent();\n\n    // Restore display\n    (this._host as HTMLElement).style.display = this._originalDisplay || 'block';\n\n    // cleanup refs\n    this._previewEl = undefined;\n    this._placeholderEl = undefined;\n    this._originalParent = undefined;\n    this._originalNextSibling = null;\n  }\n\n  private _restoreOriginalInParent(): void {\n    const parent = this._originalParent;\n    const placeholder = this._placeholderEl;\n\n    if (!parent || !placeholder) return;\n\n    // placeholder is currently in parent; swap back\n    if (placeholder.parentNode === parent) {\n      parent.replaceChild(this._host, placeholder);\n\n      return;\n    }\n\n    // fallback: if placeholder somehow moved, re-insert original at remembered position\n    if (this._originalNextSibling && this._originalNextSibling.parentNode === parent) {\n      parent.insertBefore(this._host, this._originalNextSibling);\n    } else {\n      parent.appendChild(this._host);\n    }\n  }\n\n  private _matchSize(target: HTMLElement, rect: IRect): void {\n    target.style.width = `${rect.width}px`;\n    target.style.height = `${rect.height}px`;\n  }\n\n  private _readAbsoluteRect(el: Element): IRect {\n    const rect = el.getBoundingClientRect();\n\n    // page offsets (works for most cases). if you ever support visualViewport, can refine.\n    const scrollTop =\n      this._browser.window.pageYOffset || this._browser.document.documentElement.scrollTop;\n    const scrollLeft =\n      this._browser.window.pageXOffset || this._browser.document.documentElement.scrollLeft;\n\n    return RectExtensions.initialize(\n      rect.left + scrollLeft,\n      rect.top + scrollTop,\n      rect.width,\n      rect.height,\n    );\n  }\n\n  private _toAbsolutePoint(pointInFlow: IPoint): Point {\n    const offset = Point.fromPoint(this._transform.position).add(this._transform.scaledPosition);\n\n    return Point.fromPoint(pointInFlow)\n      .mult(this._transform.scale)\n      .add(offset)\n      .add(this._getFlowHostAbsolutePosition());\n  }\n\n  private _resolveDeltaFromPointer(fallbackDelta: IPoint, event?: IPointerEvent): IPoint {\n    const pointerClient = event?.getPosition();\n    if (!pointerClient) {\n      return fallbackDelta;\n    }\n\n    const desiredPreviewAbsolutePoint = this._clientToAbsolute(pointerClient).sub(\n      this._grabOffsetFromPointer,\n    );\n    const desiredFlowPoint = this._toFlowPoint(desiredPreviewAbsolutePoint);\n\n    return Point.fromPoint(desiredFlowPoint).sub(this._startRect);\n  }\n\n  private _toFlowPoint(absolutePoint: IPoint): Point {\n    const hostAbsolute = this._getFlowHostAbsolutePosition();\n    const offset = Point.fromPoint(this._transform.position).add(this._transform.scaledPosition);\n\n    return Point.fromPoint(absolutePoint).sub(hostAbsolute).sub(offset).div(this._transform.scale);\n  }\n\n  private _getFlowHostAbsolutePosition(): IPoint {\n    const hostRect = this._store.flowHost.getBoundingClientRect();\n    const scrollTop =\n      this._browser.window.pageYOffset || this._browser.document.documentElement.scrollTop;\n    const scrollLeft =\n      this._browser.window.pageXOffset || this._browser.document.documentElement.scrollLeft;\n\n    return PointExtensions.initialize(hostRect.left + scrollLeft, hostRect.top + scrollTop);\n  }\n\n  private _clientToAbsolute(clientPoint: IPoint): Point {\n    const scrollTop =\n      this._browser.window.pageYOffset || this._browser.document.documentElement.scrollTop;\n    const scrollLeft =\n      this._browser.window.pageXOffset || this._browser.document.documentElement.scrollLeft;\n\n    return Point.fromPoint(clientPoint).add(PointExtensions.initialize(scrollLeft, scrollTop));\n  }\n}\n\nfunction _translate({ x, y }: IPoint): string {\n  return `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;\n}\n","import { FEventTrigger } from '../../../domain';\nimport { IPointerEvent } from '../../infrastructure';\n\nexport class DragExternalItemPreparationRequest {\n  static readonly fToken = Symbol('DragExternalItemPreparationRequest');\n\n  constructor(\n    public readonly event: IPointerEvent,\n    public readonly fTrigger: FEventTrigger,\n  ) {}\n}\n","import {\n  Directive,\n  ElementRef,\n  inject,\n  InjectionToken,\n  ModelSignal,\n  Signal,\n  TemplateRef,\n} from '@angular/core';\n\nexport const F_EXTERNAL_ITEM = new InjectionToken<FExternalItemBase>('F_EXTERNAL_ITEM');\n\n@Directive()\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport abstract class FExternalItemBase<TData = any> {\n  public readonly hostElement = inject(ElementRef).nativeElement;\n\n  public abstract externalItemId: Signal<string>;\n  public abstract data: Signal<TData | undefined>;\n  public abstract disabled: Signal<boolean>;\n  public abstract preview: ModelSignal<TemplateRef<unknown> | undefined>;\n  public abstract previewMatchSize: Signal<boolean>;\n  public abstract placeholder: ModelSignal<TemplateRef<unknown> | undefined>;\n}\n","export function isExternalItem(element: HTMLElement | SVGElement): boolean {\n  return !!element.closest?.('[fExternalItem]');\n}\n\n// export function getExternalItem(element: HTMLElement | SVGElement): HTMLElement | SVGElement {\n//   return element.closest('[fExternalItem]') as HTMLElement | SVGElement;\n// }\n\nexport function getExternalItemHost(element: HTMLElement | SVGElement): HTMLElement | SVGElement {\n  return element.closest('[fExternalItem]') as HTMLElement | SVGElement;\n}\n","import { computed, Injectable, signal } from '@angular/core';\nimport { FExternalItemBase } from './f-external-item-base';\nimport { getExternalItemHost } from './is-external-item';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class FExternalItemService {\n  private readonly _byHost = new Map<HTMLElement | SVGElement, FExternalItemBase>();\n  private readonly _items = signal<readonly FExternalItemBase[]>([]);\n\n  /** Reactive list (internal consumers) */\n  public readonly items = computed(() => this._items());\n\n  /** lookup by element (supports passing a nested child) */\n  public getByElement(el: HTMLElement | SVGElement): FExternalItemBase | undefined {\n    const host = getExternalItemHost(el);\n\n    return host ? this._byHost.get(host) : undefined;\n  }\n\n  /** lookup by host */\n  public getByHost(host: HTMLElement | SVGElement): FExternalItemBase | undefined {\n    return this._byHost.get(host);\n  }\n\n  public register(item: FExternalItemBase): void {\n    const host = item.hostElement;\n\n    const existing = this._byHost.get(host);\n    if (existing === item) {\n      return; // idempotent\n    }\n\n    // if same host got re-created (HMR / rerender), replace\n    if (existing && existing !== item) {\n      this._byHost.delete(host);\n    }\n\n    this._byHost.set(host, item);\n    this._sync();\n  }\n\n  public remove(item: FExternalItemBase): void {\n    const host = item.hostElement;\n    if (this._byHost.get(host) !== item) {\n      return; // already removed/replaced\n    }\n\n    this._byHost.delete(host);\n    this._sync();\n  }\n\n  private _sync(): void {\n    // new array reference => signal change\n    this._items.set([...this._byHost.values()]);\n  }\n}\n","import {\n  booleanAttribute,\n  Directive,\n  inject,\n  input,\n  model,\n  OnDestroy,\n  OnInit,\n  TemplateRef,\n} from '@angular/core';\nimport { F_EXTERNAL_ITEM, FExternalItemBase } from './f-external-item-base';\nimport { FExternalItemService } from './f-external-item.service';\n\nlet uniqueId = 0;\n\n@Directive({\n  selector: '[fExternalItem]',\n  standalone: true,\n  host: {\n    '[attr.id]': 'externalItemId()',\n    class: 'f-component f-external-item',\n    '[class.f-external-item-disabled]': 'disabled()',\n  },\n  providers: [{ provide: F_EXTERNAL_ITEM, useExisting: FExternalItem }],\n})\nexport class FExternalItem<TData> extends FExternalItemBase<TData> implements OnInit, OnDestroy {\n  private readonly _apiService = inject(FExternalItemService);\n\n  /** Stable id for matching drag sessions, lookups, etc. */\n  public readonly externalItemId = input<string>(`f-external-item-${uniqueId++}`, {\n    alias: 'fExternalItemId',\n  });\n\n  /** Payload attached to external item. */\n  public readonly data = input<TData | undefined>(undefined, {\n    alias: 'fData',\n  });\n\n  /** Disables dragging/interaction. */\n  public readonly disabled = input<boolean, unknown>(false, {\n    alias: 'fDisabled',\n    transform: booleanAttribute,\n  });\n\n  /** Template shown while item is dragged (preview). */\n  public readonly preview = model<TemplateRef<unknown> | undefined>(undefined, {\n    alias: 'fPreview',\n  });\n\n  /** Whether preview should match original element size. */\n  public readonly previewMatchSize = input<boolean, unknown>(true, {\n    alias: 'fPreviewMatchSize',\n    transform: booleanAttribute,\n  });\n\n  /** Placeholder template that stays in original place while dragging. */\n  public readonly placeholder = model<TemplateRef<unknown> | undefined>(undefined, {\n    alias: 'fPlaceholder',\n  });\n\n  public ngOnInit(): void {\n    this._apiService.register(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._apiService.register(this);\n  }\n}\n","import { Directive, inject, OnDestroy, OnInit, TemplateRef } from '@angular/core';\nimport { F_EXTERNAL_ITEM } from './f-external-item-base';\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 FExternalItemPlaceholder<T = unknown> implements OnInit, OnDestroy {\n  private readonly _instance = inject(F_EXTERNAL_ITEM);\n  private readonly _templateRef = inject<TemplateRef<T>>(TemplateRef);\n\n  public ngOnInit(): void {\n    this._instance.placeholder.set(this._templateRef);\n  }\n\n  public ngOnDestroy(): void {\n    this._instance.placeholder.set(undefined);\n  }\n}\n","import { Directive, inject, OnDestroy, OnInit, TemplateRef } from '@angular/core';\nimport { F_EXTERNAL_ITEM } from './f-external-item-base';\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 FExternalItemPreview<T = unknown> implements OnInit, OnDestroy {\n  private readonly _instance = inject(F_EXTERNAL_ITEM);\n  private readonly _templateRef = inject<TemplateRef<T>>(TemplateRef);\n\n  public ngOnInit(): void {\n    this._instance.preview.set(this._templateRef);\n  }\n\n  public ngOnDestroy(): void {\n    this._instance.preview.set(undefined);\n  }\n}\n","import { FExternalItem } from './f-external-item';\n\nexport const F_EXTERNAL_ITEM_PROVIDERS = [FExternalItem];\n","import { inject, Injectable, Injector } from '@angular/core';\nimport { DragExternalItemPreparationRequest } from './drag-external-item-preparation-request';\nimport { ITransformModel, Point } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FExternalItemBase, FExternalItemService } from '../../../f-external-item';\nimport { DragExternalItemHandler, FDraggableDataContext } from '../../../f-draggable';\nimport { isValidEventTrigger } from '../../../domain';\n\n@Injectable()\n@FExecutionRegister(DragExternalItemPreparationRequest)\nexport class DragExternalItemPreparation implements IExecution<\n  DragExternalItemPreparationRequest,\n  void\n> {\n  private readonly _apiService = inject(FExternalItemService);\n  private readonly _dragSession = inject(FDraggableDataContext);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _injector = inject(Injector);\n\n  private get _flowHost(): HTMLElement {\n    return this._store.flowHost;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  public handle({ event, fTrigger }: DragExternalItemPreparationRequest): void {\n    if (!this._dragSession.isEmpty()) {\n      return;\n    }\n\n    if (!isValidEventTrigger(event.originalEvent, fTrigger)) {\n      return;\n    }\n\n    const item = this._resolveExternalItem(event.targetElement);\n    if (!item || item.disabled()) {\n      return;\n    }\n\n    const scale = this._transform.scale ?? 1;\n\n    this._dragSession.onPointerDownScale = scale;\n    this._dragSession.onPointerDownPosition = Point.fromPoint(event.getPosition())\n      .elementTransform(this._flowHost)\n      .div(scale);\n\n    this._dragSession.draggableItems = [\n      new DragExternalItemHandler(this._injector, item, event.getPosition()),\n    ];\n  }\n\n  private _resolveExternalItem(target: HTMLElement): FExternalItemBase | undefined {\n    return this._apiService.getByElement(target);\n  }\n}\n","export class PreventDefaultIsExternalItemRequest {\n  static readonly fToken = Symbol('PreventDefaultIsExternalItemRequest');\n\n  constructor(public readonly event: Event) {}\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 '../../../f-external-item';\n\n@Injectable()\n@FExecutionRegister(PreventDefaultIsExternalItemRequest)\nexport class PreventDefaultIsExternalItem implements IExecution<\n  PreventDefaultIsExternalItemRequest,\n  void\n> {\n  public handle(request: PreventDefaultIsExternalItemRequest): void {\n    if (!this._isTargetItemExternal(request.event)) {\n      return;\n    }\n    request.event.preventDefault();\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 { PreventDefaultIsExternalItem } from './prevent-default-is-external-item';\nimport { DragExternalItemCreatePlaceholder } from './drag-external-item-create-placeholder';\nimport { DragExternalItemCreatePreview } from './drag-external-item-create-preview';\nimport { DragExternalItemFinalize } from './drag-external-item-finalize';\nimport { DragExternalItemPreparation } from './drag-external-item-preparation';\n\nexport const DRAG_EXTERNAL_ITEM_PROVIDERS = [\n  DragExternalItemCreatePlaceholder,\n\n  DragExternalItemCreatePreview,\n\n  DragExternalItemFinalize,\n\n  DragExternalItemPreparation,\n\n  PreventDefaultIsExternalItem,\n];\n","import { inject, Injectable } 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 { IRect } 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 { DropToGroupHandler } from '../drop-to-group-handler';\nimport { DragNodeHandler } from '../../drag-node';\nimport { SortDropCandidatesByLayerRequest } from '../sort-drop-candidates-by-layer';\nimport { DragHandlerInjector } from '../../infrastructure';\nimport { DragExternalItemHandler } from '../../drag-external-item';\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 _dragInjector = inject(DragHandlerInjector);\n\n  private get _allNodes(): FNodeBase[] {\n    return this._store.nodes.getAll();\n  }\n\n  public handle({ event }: DropToGroupPreparationRequest): void {\n    if (!this._canPrepare()) {\n      return;\n    }\n\n    const dragTargetNode = this._allNodes.find((n) => n.isContains(event.targetElement));\n\n    // If this is not an external drag and we can't resolve a target node — it's an invalid state.\n    if (!dragTargetNode && !this._hasExternalDrag()) {\n      throw new Error('Drag target node not found');\n    }\n\n    let targets = this._sortedTargetsForDrop();\n\n    // We can drop items only to children of direct parent (if target is inside some parent).\n    if (dragTargetNode) {\n      const parentId = dragTargetNode.fParentId();\n      const allowedIds = this._mediator.execute<string[]>(new GetChildNodeIdsRequest(parentId));\n\n      if (allowedIds.length) {\n        targets = targets.filter((t) => allowedIds.includes(t.node.fId()));\n      }\n    }\n\n    const handler = this._dragInjector.get(DropToGroupHandler);\n    handler.initialize(targets);\n\n    this._dragContext.draggableItems.push(handler);\n  }\n\n  private _canPrepare(): boolean {\n    return this._hasMoveDrag() || this._hasExternalDrag();\n  }\n\n  private _hasMoveDrag(): boolean {\n    return this._dragContext.draggableItems.some((x) => x instanceof DragNodeHandler);\n  }\n\n  private _hasExternalDrag(): boolean {\n    return this._dragContext.draggableItems.some((x) => x instanceof DragExternalItemHandler);\n  }\n\n  private _sortedTargetsForDrop(): INodeWithRect[] {\n    const dragged = this._getDraggedNodes();\n    const draggingGroup = dragged.some((x) => x instanceof FGroupDirective);\n\n    const draggedWithParents = this._withParents(dragged);\n    const eligible = this._eligibleTargets(draggedWithParents, draggingGroup);\n\n    const targets = eligible.map((node) => {\n      const rect = this._mediator.execute<IRect>(\n        new GetNormalizedElementRectRequest(node.hostElement),\n      );\n\n      return { node, rect };\n    });\n\n    return this._mediator.execute<INodeWithRect[]>(new SortDropCandidatesByLayerRequest(targets));\n  }\n\n  private _getDraggedNodes(): FNodeBase[] {\n    const handler = this._dragContext.draggableItems.find((x) => x instanceof DragNodeHandler);\n\n    return handler ? handler.items.map((h) => h.nodeOrGroup) : [];\n  }\n\n  private _withParents(nodes: FNodeBase[]): FNodeBase[] {\n    return nodes.reduce((result: FNodeBase[], node: FNodeBase) => {\n      result.push(node);\n\n      const parents = this._mediator.execute<FNodeBase[]>(new GetParentNodesRequest(node));\n      result.push(...parents);\n\n      return result;\n    }, []);\n  }\n\n  private _eligibleTargets(draggedWithParents: FNodeBase[], draggingGroup: boolean): FNodeBase[] {\n    const nonDragged = this._allNodes.filter((n) => !draggedWithParents.includes(n));\n\n    return draggingGroup ? nonDragged.filter((n) => n instanceof FGroupDirective) : nonDragged;\n  }\n}\n","import { DropToGroupPreparation } from './drop-to-group-preparation';\nimport { DropToGroupFinalize } from './drop-to-group-finalize';\nimport { SortDropCandidatesByLayer } from './sort-drop-candidates-by-layer';\n\nexport const DRAG_DROP_TO_GROUP_PROVIDERS = [\n  SortDropCandidatesByLayer,\n\n  DropToGroupPreparation,\n\n  DropToGroupFinalize,\n];\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class PinchToZoomFinalizeRequest {\n  static readonly fToken = Symbol('PinchToZoomFinalizeRequest');\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IPoint, Point, PointExtensions } from '@foblex/2d';\nimport { DragHandlerBase } from '../../infrastructure';\nimport { FComponentsStore, INSTANCES } from '../../../f-storage';\nimport { FCanvasBase } from '../../../f-canvas';\nimport { FZoomBase } from '../../../f-zoom';\nimport { IPointerEvent } from '../../infrastructure';\n\nconst PINCH_MOVEMENT_THRESHOLD = 0.5;\n\n@Injectable()\nexport class PinchToZoomHandler extends DragHandlerBase<unknown> {\n  protected readonly type = 'pinch-to-zoom';\n  protected readonly kind = 'pinch-to-zoom';\n\n  private readonly _store = inject(FComponentsStore);\n\n  private get _flowHost(): HTMLElement {\n    return this._store.flowHost;\n  }\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  private get _zoomComponent(): FZoomBase {\n    return this._store.instances.require(INSTANCES.ZOOM);\n  }\n\n  private _startDistance: number | null = null;\n  private _startScale: number | null = null;\n  private _touches!: TouchList;\n\n  public initialize(touches: TouchList): void {\n    this._touches = touches;\n  }\n\n  public override prepareDragSequence(): void {\n    const distance = calculateTouchDistance(this._touches);\n    if (distance == null) return;\n\n    this._startDistance = distance;\n    this._startScale = this._canvas.transform.scale;\n  }\n\n  public override onPointerMove(_: IPoint, event: IPointerEvent): void {\n    if (event.touches.length !== 2 || this._startDistance == null || this._startScale == null) {\n      return;\n    }\n\n    const distance = calculateTouchDistance(event.touches);\n    const center = calculateTouchCenter(event.touches);\n    if (distance == null || center == null) {\n      this._reset();\n\n      return;\n    }\n\n    if (Math.abs(distance - this._startDistance) < PINCH_MOVEMENT_THRESHOLD) {\n      return;\n    }\n\n    event.preventDefault();\n\n    const ratio = distance / this._startDistance;\n    const nextScale = this._clamp(this._startScale * ratio);\n\n    this._canvas.setScale(nextScale, this._castPositionToFlow(center));\n    this._canvas.redraw();\n  }\n\n  private _clamp(value: number): number {\n    return Math.max(this._zoomComponent.minimum, Math.min(value, this._zoomComponent.maximum));\n  }\n\n  private _castPositionToFlow(position: IPoint): IPoint {\n    return Point.fromPoint(position).elementTransform(this._flowHost);\n  }\n\n  private _reset(): void {\n    this._startScale = null;\n    this._startDistance = null;\n  }\n\n  public override onPointerUp(): void {\n    this._reset();\n    this._canvas.emitCanvasChangeEvent();\n  }\n}\n\nfunction calculateTouchCenter(touches: TouchList): IPoint | null {\n  if (touches.length !== 2) {\n    return null;\n  }\n\n  const a = touches[0];\n  const b = touches[1];\n\n  return PointExtensions.initialize((a.clientX + b.clientX) / 2, (a.clientY + b.clientY) / 2);\n}\n\nfunction calculateTouchDistance(touches: TouchList): number | null {\n  if (touches.length !== 2) {\n    return null;\n  }\n\n  const a = touches[0];\n  const b = touches[1];\n\n  return Math.hypot(b.clientX - a.clientX, b.clientY - a.clientY);\n}\n","import { inject, Injectable } from '@angular/core';\nimport { PinchToZoomFinalizeRequest } from './pinch-to-zoom-finalize-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { PinchToZoomHandler } from '../handler';\n\n@Injectable()\n@FExecutionRegister(PinchToZoomFinalizeRequest)\nexport class PinchToZoomFinalize implements IExecution<PinchToZoomFinalizeRequest, void> {\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  public handle(_: PinchToZoomFinalizeRequest): void {\n    if (!this._hasPinchZoomHandler()) {\n      return;\n    }\n\n    for (const item of this._dragSession.draggableItems) {\n      item.onPointerUp?.();\n    }\n  }\n\n  private _hasPinchZoomHandler(): boolean {\n    return this._dragSession.draggableItems.some((x) => x instanceof PinchToZoomHandler);\n  }\n}\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class PinchToZoomPreparationRequest {\n  static readonly fToken = Symbol('PinchToZoomPreparationRequest');\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { PinchToZoomPreparationRequest } from './pinch-to-zoom-preparation-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { IPointerEvent } from '../../infrastructure';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { Point } from '@foblex/2d';\nimport { FComponentsStore, INSTANCES } from '../../../f-storage';\nimport { PinchToZoomHandler } from '../handler';\nimport { DragHandlerInjector } from '../../infrastructure';\n\n@Injectable()\n@FExecutionRegister(PinchToZoomPreparationRequest)\nexport class PinchToZoomPreparation implements IExecution<PinchToZoomPreparationRequest, void> {\n  private readonly _dragInjector = inject(DragHandlerInjector);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  public handle({ event }: PinchToZoomPreparationRequest): void {\n    if (!this._canStart(event)) {\n      return;\n    }\n\n    this._dragSession.onPointerDownScale = 1;\n    this._dragSession.onPointerDownPosition = new Point();\n    this._dragSession.draggableItems = [this._getHandler(event)];\n  }\n\n  private _canStart(event: IPointerEvent): boolean {\n    return (\n      this._dragSession.isEmpty() &&\n      event.touches?.length === 2 &&\n      !event.isEventInLockedContext &&\n      this._hasZoomComponent()\n    );\n  }\n\n  private _hasZoomComponent(): boolean {\n    return this._store.instances.has(INSTANCES.ZOOM);\n  }\n\n  private _getHandler(event: IPointerEvent): PinchToZoomHandler {\n    const handler = this._dragInjector.get(PinchToZoomHandler);\n    handler.initialize(event.touches);\n\n    return handler;\n  }\n}\n","import { PinchToZoomPreparation } from './pinch-to-zoom-preparation';\nimport { PinchToZoomFinalize } from './pinch-to-zoom-finalize';\n\nexport const PINCH_TO_ZOOM_PROVIDERS = [PinchToZoomPreparation, PinchToZoomFinalize];\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class SelectionAreaFinalizeRequest {\n  static readonly fToken = Symbol('SelectionAreaFinalizeRequest');\n  constructor(public readonly event: IPointerEvent) {}\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';\n\n@Injectable()\n@FExecutionRegister(SelectionAreaFinalizeRequest)\nexport class SelectionAreaFinalize implements IExecution<SelectionAreaFinalizeRequest, void> {\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  public handle(_request: SelectionAreaFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    this._dragSession.draggableItems.forEach((x) => {\n      x.onPointerUp?.();\n    });\n  }\n\n  private _isValid(): boolean {\n    return this._dragSession.draggableItems.some((x) => x.getEvent().kind === 'selection-area');\n  }\n}\n","import { IPoint, IRect, ITransformModel, Point, PointExtensions, RectExtensions } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport { DragHandlerBase } from '../../infrastructure';\nimport { ISelectable } from '../../../mixins';\nimport { FComponentsStore, INSTANCES, NotifyTransformChangedRequest } from '../../../f-storage';\nimport { CalculateSelectableItemsRequest, ICanBeSelectedElementAndRect } from '../../../domain';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { inject, Injectable } from '@angular/core';\nimport { FSelectionAreaBase } from '../../../f-selection-area';\n\n@Injectable()\nexport class SelectionAreaHandler extends DragHandlerBase<unknown> {\n  protected readonly type = 'selection-area';\n  protected readonly kind = 'selection-area';\n\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n  private readonly _mediator = inject(FMediator);\n\n  private _canBeSelected: ICanBeSelectedElementAndRect[] = [];\n  private _selectedByMove: ISelectable[] = [];\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  private get _canvasPosition(): IPoint {\n    return Point.fromPoint(this._transform.position).add(this._transform.scaledPosition);\n  }\n\n  private get _instance(): FSelectionAreaBase {\n    return this._store.instances.require(INSTANCES.SELECTION_AREA);\n  }\n\n  public override prepareDragSequence(): void {\n    this._canBeSelected = this._mediator.execute(new CalculateSelectableItemsRequest());\n\n    this._show();\n    this._draw(\n      RectExtensions.initialize(\n        this._dragSession.onPointerDownPosition.x,\n        this._dragSession.onPointerDownPosition.y,\n      ),\n    );\n  }\n\n  public override onPointerMove(difference: IPoint): void {\n    const currentPoint = Point.fromPoint(difference).add(this._dragSession.onPointerDownPosition);\n\n    const point = this._getMinimumPoint(this._dragSession.onPointerDownPosition, currentPoint);\n\n    const width = Math.abs(difference.x);\n    const height = Math.abs(difference.y);\n\n    const _selectionAreaRect = RectExtensions.initialize(point.x, point.y, width, height);\n\n    this._draw(_selectionAreaRect);\n    this._selectedByMove = [];\n    this._canBeSelected.forEach((item) => {\n      item.element.unmarkAsSelected();\n\n      const _itemRect = RectExtensions.addPoint(\n        RectExtensions.mult(item.fRect, this._transform.scale),\n        this._canvasPosition,\n      );\n\n      const isIntersect = RectExtensions.intersectionWithRect(_itemRect, _selectionAreaRect);\n      if (isIntersect) {\n        item.element.markAsSelected();\n        this._selectedByMove.push(item.element);\n      }\n    });\n    this._mediator.execute<void>(new NotifyTransformChangedRequest());\n  }\n\n  private _getMinimumPoint(point1: IPoint, point2: IPoint): IPoint {\n    return PointExtensions.initialize(Math.min(point1.x, point2.x), Math.min(point1.y, point2.y));\n  }\n\n  public override onPointerUp(): void {\n    this._hide();\n    this._dragSession.selectedItems.push(...this._selectedByMove);\n    if (this._selectedByMove.length > 0) {\n      this._dragSession.isSelectedChanged = true;\n    }\n  }\n\n  private _draw(object: IRect): void {\n    const style = this._instance.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  private _show(): void {\n    this._instance.hostElement.style.display = 'block';\n  }\n\n  private _hide(): void {\n    this._instance.hostElement.style.display = 'none';\n  }\n}\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class SelectionAreaPreparationRequest {\n  static readonly fToken = Symbol('SelectionAreaPreparationRequest');\n\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SelectionAreaPreparationRequest } from './selection-area-preparation-request';\nimport { Point } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore, INSTANCES } from '../../../f-storage';\nimport {\n  DragHandlerInjector,\n  FDraggableDataContext,\n  SelectionAreaHandler,\n} from '../../../f-draggable';\nimport { isValidEventTrigger } from '../../../domain';\nimport { FSelectionAreaBase } from '../../../f-selection-area';\n\n@Injectable()\n@FExecutionRegister(SelectionAreaPreparationRequest)\nexport class SelectionAreaPreparation implements IExecution<SelectionAreaPreparationRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  private get _instance(): FSelectionAreaBase | undefined {\n    return this._store.instances.get(INSTANCES.SELECTION_AREA);\n  }\n\n  public handle(request: SelectionAreaPreparationRequest): void {\n    if (!this._isValid(request)) {\n      return;\n    }\n\n    this._dragSession.onPointerDownScale = 1;\n    this._dragSession.onPointerDownPosition = Point.fromPoint(\n      request.event.getPosition(),\n    ).elementTransform(this._store.flowHost);\n    this._dragSession.draggableItems = [this._dragInjector.createInstance(SelectionAreaHandler)];\n  }\n\n  private _isValid(request: SelectionAreaPreparationRequest): boolean {\n    return (\n      !!this._instance &&\n      this._dragSession.isEmpty() &&\n      isValidEventTrigger(request.event.originalEvent, this._instance.fTrigger)\n    );\n  }\n}\n","import { SelectionAreaPreparation } from './selection-area-preparation';\nimport { SelectionAreaFinalize } from './selection-area-finalize';\n\nexport const DRAG_SELECTION_AREA_PROVIDERS = [SelectionAreaPreparation, SelectionAreaFinalize];\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","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 implements IExecution<\n  ApplyChildResizeConstraintsRequest,\n  void\n> {\n  public handle({ rect, childrenBounds }: ApplyChildResizeConstraintsRequest): void {\n    if (!childrenBounds) {\n      return;\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","import { inject, Injectable } from '@angular/core';\nimport { ApplyParentResizeConstraintsRequest } from './apply-parent-resize-constraints-request';\nimport { IRect } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { IResizeLimit, IResizeLimits, IResizeOverflow } from '../constraint';\nimport { SetFCacheNodeRectRequest } from '../../../f-cache';\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 implements IExecution<\n  ApplyParentResizeConstraintsRequest,\n  void\n> {\n  private readonly _mediator = inject(FMediator);\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    this._mediator.execute(new SetFCacheNodeRectRequest(limit.nodeOrGroup.fId(), 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","import { EFResizeHandleType } from '../../../f-node';\n\nexport const RESIZE_DIRECTIONS = {\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 '../constraint';\n\n@Injectable()\n@FExecutionRegister(CalculateChangedRectFromDifferenceRequest)\nexport class CalculateChangedRectFromDifference implements IExecution<\n  CalculateChangedRectFromDifferenceRequest,\n  IRect\n> {\n  public handle({\n    originalRect,\n    difference,\n    handleType,\n    minimumSize,\n  }: CalculateChangedRectFromDifferenceRequest): IRect {\n    const changedRect = this._changeSizeInRect(\n      originalRect,\n      difference,\n      RESIZE_DIRECTIONS[handleType],\n      minimumSize,\n    );\n\n    return this._changePosition(\n      originalRect,\n      difference,\n      RESIZE_DIRECTIONS[handleType],\n      changedRect,\n    );\n  }\n\n  private _changeSizeInRect(\n    originalRect: IRect,\n    difference: IPoint,\n    direction: IPoint,\n    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(\n    originalRect: IRect,\n    difference: IPoint,\n    direction: IPoint,\n    changedRect: IRect,\n  ): 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(x, y, changedRect.width, changedRect.height);\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","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.nodes.getAll();\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 ? 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>(\n      new GetNormalizedElementRectRequest(nodeOrGroup.hostElement),\n    );\n  }\n\n  private _concatRectWithParentPadding(\n    rect: IRect,\n    padding: [number, number, number, number],\n  ): 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 readonly nodeOrGroup: FNodeBase,\n    public readonly rect: IRect,\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  ReadNodeBoundsWithPaddingsRequest,\n  ReadNodeBoundsWithPaddingsResponse,\n} from '../../drag-node';\n\n@Injectable()\n@FExecutionRegister(CalculateResizeLimitsRequest)\nexport class CalculateResizeLimits implements IExecution<\n  CalculateResizeLimitsRequest,\n  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(\n    nodeOrGroup: FNodeBase,\n    rect: IRect,\n  ): [number, number, number, number] {\n    return this._mediator.execute<[number, number, number, number]>(\n      new GetNodePaddingRequest(nodeOrGroup, rect),\n    );\n  }\n\n  private _getNormalizedChildrenBounds(\n    nodeOrGroup: FNodeBase,\n    paddings: [number, number, number, number],\n  ): IRect | null {\n    return this._mediator.execute<IRect | null>(\n      new CalculateDirectChildrenUnionRectRequest(nodeOrGroup, paddings),\n    );\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(\n    parent: FNodeBase,\n    childrenPaddings: [number, number, number, number],\n  ): ReadNodeBoundsWithPaddingsResponse {\n    return this._mediator.execute<ReadNodeBoundsWithPaddingsResponse>(\n      new ReadNodeBoundsWithPaddingsRequest(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 }: ReadNodeBoundsWithPaddingsResponse,\n  ): IResizeLimit {\n    return { nodeOrGroup, boundingRect, innerRect };\n  }\n}\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class ResizeNodeFinalizeRequest {\n  static readonly fToken = Symbol('ResizeNodeFinalizeRequest');\n\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { DragHandlerBase } from '../infrastructure';\nimport { ResizeNodeHandler } from './resize-node-handler';\n\nexport const RESIZE_NODE_HANDLER_TYPE = 'node-resize';\nexport const RESIZE_NODE_HANDLER_KIND = 'resize-node';\n\nexport function isResizeNodeHandler(value: DragHandlerBase<unknown>): value is ResizeNodeHandler {\n  return (\n    value.getEvent().kind === RESIZE_NODE_HANDLER_KIND ||\n    value.getEvent().fEventType === RESIZE_NODE_HANDLER_TYPE\n  );\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ResizeNodeFinalizeRequest } from './resize-node-finalize-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { isResizeNodeHandler } from '../is-resize-node-handler';\n\n@Injectable()\n@FExecutionRegister(ResizeNodeFinalizeRequest)\nexport class ResizeNodeFinalize implements IExecution<ResizeNodeFinalizeRequest, void> {\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  public handle(_request: ResizeNodeFinalizeRequest): void {\n    if (!this._isNodeResizeHandler()) {\n      return;\n    }\n    this._dragSession.draggableItems.forEach((x) => x.onPointerUp?.());\n  }\n\n  private _isNodeResizeHandler(): boolean {\n    return this._dragSession.draggableItems.some((x) => isResizeNodeHandler(x));\n  }\n}\n","export class FResizeNodeStartEventData {\n  constructor(public readonly fNodeId: string) {}\n}\n","/**\n * Strategy for selecting which nodes are shifted when a node resizes.\n *\n * - `CENTER_OF_MASS` — every node whose geometric center lies beyond the\n *   resizing node's center along the resize axis is a candidate. Simplest,\n *   global default.\n * - `X_RANGE` — like `CENTER_OF_MASS`, but narrowed to nodes whose\n *   perpendicular span overlaps the resizing node. Useful for column-style\n *   layouts.\n * - `DOWNSTREAM_CONNECTIONS` — only nodes reachable via outgoing connections\n *   are candidates; geometric filter applies on top. Cycles are detected.\n */\nexport enum EFReflowMode {\n  CENTER_OF_MASS = 'center-of-mass',\n  X_RANGE = 'x-range',\n  DOWNSTREAM_CONNECTIONS = 'downstream-connections',\n}\n","/**\n * Behavior when a candidate node would collide with a non-candidate during shift.\n *\n * - `STOP` — shift stops at the first collision, respecting the configured gap.\n *   Remaining delta is discarded.\n * - `CHAIN_PUSH` — the colliding non-candidate is absorbed into the plan and\n *   recursively pushed. Bounded by `maxCascadeDepth`.\n */\nexport enum EFReflowCollision {\n  STOP = 'stop',\n  CHAIN_PUSH = 'chain-push',\n}\n","/**\n * Which subset of the graph participates in a reflow plan.\n *\n * - `GLOBAL` — every node and group on the canvas.\n * - `GROUP` — only siblings sharing the resizing node's `fParentId`.\n * - `CONNECTED_SUBGRAPH` — only nodes in the same connected component\n *   (BFS over connections in both directions).\n */\nexport enum EFReflowScope {\n  GLOBAL = 'global',\n  GROUP = 'group',\n  CONNECTED_SUBGRAPH = 'connected-subgraph',\n}\n","/**\n * Axes along which reflow responds to a resize.\n *\n * When `BOTH`, the planner runs the vertical and horizontal passes\n * independently against the same baseline; the axis-order of application\n * is therefore commutative.\n */\nexport enum EFReflowAxis {\n  VERTICAL = 'vertical',\n  HORIZONTAL = 'horizontal',\n  BOTH = 'both',\n}\n","/**\n * How the delta between baseline and next rect is interpreted when shifting candidates.\n *\n * - `EDGE_BASED` (recommended) — the edge that actually moved drives the shift:\n *   nodes below the resizing node follow the bottom edge delta, nodes above\n *   follow the top edge delta. Correct under asymmetric resize (top-handle,\n *   bottom-handle, corner handles).\n * - `CENTER_BASED` — the whole delta is applied to candidates selected by\n *   center-line comparison. Simpler, but can misshift under asymmetric resize.\n */\nexport enum EFReflowDeltaSource {\n  EDGE_BASED = 'edge-based',\n  CENTER_BASED = 'center-based',\n}\n","import { InjectionToken } from '@angular/core';\nimport {\n  EFReflowAxis,\n  EFReflowCollision,\n  EFReflowDeltaSource,\n  EFReflowMode,\n  EFReflowScope,\n} from './enums';\n\nexport interface IFReflowSpacingConfig {\n  vertical?: number;\n  horizontal?: number;\n}\n\nexport interface IFReflowOnResizeConfig {\n  enabled?: boolean;\n  mode?: EFReflowMode;\n  collision?: EFReflowCollision;\n  scope?: EFReflowScope;\n  axis?: EFReflowAxis;\n  deltaSource?: EFReflowDeltaSource;\n  spacing?: IFReflowSpacingConfig;\n  maxCascadeDepth?: number;\n  maxAbsoluteShiftPerPlan?: number;\n}\n\n/**\n * Fully resolved, non-optional configuration. Consumers inside the feature\n * read from this shape after `mergeReflowConfig` fills in defaults.\n */\nexport interface IFReflowOnResizeResolvedConfig {\n  enabled: boolean;\n  mode: EFReflowMode;\n  collision: EFReflowCollision;\n  scope: EFReflowScope;\n  axis: EFReflowAxis;\n  deltaSource: EFReflowDeltaSource;\n  spacing: {\n    vertical: number;\n    horizontal: number;\n  };\n  maxCascadeDepth: number;\n  maxAbsoluteShiftPerPlan: number;\n}\n\nexport const F_REFLOW_CONFIG = new InjectionToken<IFReflowOnResizeResolvedConfig>(\n  'F_REFLOW_CONFIG',\n);\n\nconst DEFAULT_CONFIG: IFReflowOnResizeResolvedConfig = {\n  enabled: true,\n  mode: EFReflowMode.CENTER_OF_MASS,\n  collision: EFReflowCollision.STOP,\n  scope: EFReflowScope.GLOBAL,\n  axis: EFReflowAxis.BOTH,\n  deltaSource: EFReflowDeltaSource.EDGE_BASED,\n  spacing: {\n    vertical: 32,\n    horizontal: 32,\n  },\n  maxCascadeDepth: 8,\n  maxAbsoluteShiftPerPlan: 10000,\n};\n\nexport function mergeReflowConfig(\n  partial: IFReflowOnResizeConfig | undefined,\n): IFReflowOnResizeResolvedConfig {\n  if (!partial) {\n    return {\n      ...DEFAULT_CONFIG,\n      spacing: { ...DEFAULT_CONFIG.spacing },\n    };\n  }\n\n  return {\n    enabled: partial.enabled ?? DEFAULT_CONFIG.enabled,\n    mode: partial.mode ?? DEFAULT_CONFIG.mode,\n    collision: partial.collision ?? DEFAULT_CONFIG.collision,\n    scope: partial.scope ?? DEFAULT_CONFIG.scope,\n    axis: partial.axis ?? DEFAULT_CONFIG.axis,\n    deltaSource: partial.deltaSource ?? DEFAULT_CONFIG.deltaSource,\n    spacing: {\n      vertical: partial.spacing?.vertical ?? DEFAULT_CONFIG.spacing.vertical,\n      horizontal: partial.spacing?.horizontal ?? DEFAULT_CONFIG.spacing.horizontal,\n    },\n    maxCascadeDepth: partial.maxCascadeDepth ?? DEFAULT_CONFIG.maxCascadeDepth,\n    maxAbsoluteShiftPerPlan:\n      partial.maxAbsoluteShiftPerPlan ?? DEFAULT_CONFIG.maxAbsoluteShiftPerPlan,\n  };\n}\n","import { IPoint, IRect } from '@foblex/2d';\n\n/**\n * A single node/group position change as computed by the planner.\n *\n * `fromRect` — rect of the candidate before the plan (canvas units).\n * `toRect`   — rect of the candidate after the plan (canvas units).\n *\n * Animators interpolate `fromRect` → `toRect`; synchronous writers apply `toRect` directly.\n */\nexport interface IReflowShift {\n  id: string;\n  fromRect: IRect;\n  toRect: IRect;\n  toPosition: IPoint;\n}\n\n/**\n * Output of the planner for a single resize event.\n *\n * `sourceNodeId` — the node that was resized.\n * `shifts`       — zero or more candidate shifts. Empty list means no-op.\n * `deltaEdges`   — per-edge deltas of the resize (canvas units). For\n *   `EDGE_BASED` delta-source these drive candidate shifts directly.\n */\nexport interface IReflowPlan {\n  sourceNodeId: string;\n  shifts: IReflowShift[];\n  deltaEdges: {\n    top: number;\n    right: number;\n    bottom: number;\n    left: number;\n  };\n}\n\nexport const EMPTY_REFLOW_PLAN = (sourceNodeId: string): IReflowPlan => ({\n  sourceNodeId,\n  shifts: [],\n  deltaEdges: { top: 0, right: 0, bottom: 0, left: 0 },\n});\n","import { IPoint, IRect } from '@foblex/2d';\nimport { EFReflowAxis } from '../enums';\n\n/**\n * Per-edge deltas produced by a resize.\n *\n * All values are signed:\n * - positive `top` or `left` = the edge moved outward (grow from that side)\n * - positive `bottom` or `right` = the edge moved outward in the same direction\n * - the sum along an axis equals the total size change on that axis.\n */\nexport interface IResizeEdgeDeltas {\n  top: number;\n  right: number;\n  bottom: number;\n  left: number;\n}\n\nexport function computeEdgeDeltas(baseline: IRect, next: IRect): IResizeEdgeDeltas {\n  return {\n    top: baseline.y - next.y,\n    right: next.x + next.width - (baseline.x + baseline.width),\n    bottom: next.y + next.height - (baseline.y + baseline.height),\n    left: baseline.x - next.x,\n  };\n}\n\n/**\n * Computes the raw shift vector a candidate should receive for a single resize\n * event, before collision/scope adjustments.\n *\n * Returns `null` when the candidate is not affected on the active axis.\n */\nexport interface IFReflowDeltaCalculator {\n  calculate(input: {\n    baselineRect: IRect;\n    nextRect: IRect;\n    candidateRect: IRect;\n    axis: EFReflowAxis;\n  }): IPoint | null;\n}\n","import { IPoint, IRect } from '@foblex/2d';\nimport { EFReflowAxis } from '../enums';\nimport {\n  computeEdgeDeltas,\n  IFReflowDeltaCalculator,\n  IResizeEdgeDeltas,\n} from './i-f-reflow-delta-calculator';\n\n/**\n * Computes shift vectors based on which edges of the resized node moved and\n * whether the candidate lies beyond that edge in the pre-resize layout.\n *\n * Rules (vertical axis):\n * - `deltaEdges.bottom > 0` (bottom grew outward) and `candidate.top >= baseline.bottom`\n *   → candidate shifts down by `deltaEdges.bottom`.\n * - `deltaEdges.bottom < 0` (bottom collapsed upward) and `candidate.top >= nextBottom`\n *   → candidate shifts up by `deltaEdges.bottom`.\n * - `deltaEdges.top > 0` (top grew outward, i.e. node expanded upward) and\n *   `candidate.bottom <= baseline.top` → candidate shifts up by `-deltaEdges.top`.\n * - `deltaEdges.top < 0` (top collapsed downward) and `candidate.bottom <= nextTop`\n *   → candidate shifts down by `-deltaEdges.top`.\n *\n * Horizontal axis is symmetric (swap top/bottom with left/right).\n */\nexport class EdgeBasedDeltaCalculator implements IFReflowDeltaCalculator {\n  public calculate({\n    baselineRect,\n    nextRect,\n    candidateRect,\n    axis,\n  }: {\n    baselineRect: IRect;\n    nextRect: IRect;\n    candidateRect: IRect;\n    axis: EFReflowAxis;\n  }): IPoint | null {\n    const deltas = computeEdgeDeltas(baselineRect, nextRect);\n\n    const dy =\n      axis === EFReflowAxis.VERTICAL || axis === EFReflowAxis.BOTH\n        ? this._verticalShift(deltas, baselineRect, nextRect, candidateRect)\n        : 0;\n\n    const dx =\n      axis === EFReflowAxis.HORIZONTAL || axis === EFReflowAxis.BOTH\n        ? this._horizontalShift(deltas, baselineRect, nextRect, candidateRect)\n        : 0;\n\n    if (dx === 0 && dy === 0) {\n      return null;\n    }\n\n    return { x: dx, y: dy };\n  }\n\n  private _verticalShift(\n    deltas: IResizeEdgeDeltas,\n    baseline: IRect,\n    next: IRect,\n    candidate: IRect,\n  ): number {\n    const baselineBottom = baseline.y + baseline.height;\n    const baselineTop = baseline.y;\n    const nextBottom = next.y + next.height;\n    const nextTop = next.y;\n    const candidateTop = candidate.y;\n    const candidateBottom = candidate.y + candidate.height;\n\n    if (deltas.bottom > 0 && candidateTop >= baselineBottom) {\n      return deltas.bottom;\n    }\n\n    if (deltas.bottom < 0 && candidateTop >= nextBottom) {\n      return deltas.bottom;\n    }\n\n    if (deltas.top > 0 && candidateBottom <= baselineTop) {\n      return -deltas.top;\n    }\n\n    if (deltas.top < 0 && candidateBottom <= nextTop) {\n      return -deltas.top;\n    }\n\n    return 0;\n  }\n\n  private _horizontalShift(\n    deltas: IResizeEdgeDeltas,\n    baseline: IRect,\n    next: IRect,\n    candidate: IRect,\n  ): number {\n    const baselineRight = baseline.x + baseline.width;\n    const baselineLeft = baseline.x;\n    const nextRight = next.x + next.width;\n    const nextLeft = next.x;\n    const candidateLeft = candidate.x;\n    const candidateRight = candidate.x + candidate.width;\n\n    if (deltas.right > 0 && candidateLeft >= baselineRight) {\n      return deltas.right;\n    }\n\n    if (deltas.right < 0 && candidateLeft >= nextRight) {\n      return deltas.right;\n    }\n\n    if (deltas.left > 0 && candidateRight <= baselineLeft) {\n      return -deltas.left;\n    }\n\n    if (deltas.left < 0 && candidateRight <= nextLeft) {\n      return -deltas.left;\n    }\n\n    return 0;\n  }\n}\n","import { IPoint, IRect } from '@foblex/2d';\nimport { EFReflowAxis } from '../enums';\nimport { IFReflowDeltaCalculator } from './i-f-reflow-delta-calculator';\n\n/**\n * Roadmap-formula variant: shifts whole scalar delta based on center-line comparison.\n *\n * Vertical:\n *   deltaHeight = nextRect.height - baselineRect.height\n *   if deltaHeight !== 0 AND candidate.centerY > baseline.centerY → shift by deltaHeight\n *\n * This path has a known edge case under asymmetric resize (top-handle vs\n * bottom-handle), where a node's center moves by `deltaHeight/2` but the full\n * `deltaHeight` is applied to candidates — leading to mis-shifts when the top\n * edge is the one that actually moved. The edge-based calculator is preferred\n * for correctness; this implementation matches the formula as written in the\n * technical roadmap for users who opt in explicitly.\n */\nexport class CenterBasedDeltaCalculator implements IFReflowDeltaCalculator {\n  public calculate({\n    baselineRect,\n    nextRect,\n    candidateRect,\n    axis,\n  }: {\n    baselineRect: IRect;\n    nextRect: IRect;\n    candidateRect: IRect;\n    axis: EFReflowAxis;\n  }): IPoint | null {\n    const dy =\n      axis === EFReflowAxis.VERTICAL || axis === EFReflowAxis.BOTH\n        ? this._verticalShift(baselineRect, nextRect, candidateRect)\n        : 0;\n\n    const dx =\n      axis === EFReflowAxis.HORIZONTAL || axis === EFReflowAxis.BOTH\n        ? this._horizontalShift(baselineRect, nextRect, candidateRect)\n        : 0;\n\n    if (dx === 0 && dy === 0) {\n      return null;\n    }\n\n    return { x: dx, y: dy };\n  }\n\n  private _verticalShift(baseline: IRect, next: IRect, candidate: IRect): number {\n    const deltaHeight = next.height - baseline.height;\n\n    if (deltaHeight === 0) {\n      return 0;\n    }\n\n    const baselineCenterY = baseline.y + baseline.height / 2;\n    const candidateCenterY = candidate.y + candidate.height / 2;\n\n    if (deltaHeight > 0 && candidateCenterY > baselineCenterY) {\n      return deltaHeight;\n    }\n\n    if (deltaHeight < 0 && candidateCenterY > baselineCenterY) {\n      return deltaHeight;\n    }\n\n    return 0;\n  }\n\n  private _horizontalShift(baseline: IRect, next: IRect, candidate: IRect): number {\n    const deltaWidth = next.width - baseline.width;\n\n    if (deltaWidth === 0) {\n      return 0;\n    }\n\n    const baselineCenterX = baseline.x + baseline.width / 2;\n    const candidateCenterX = candidate.x + candidate.width / 2;\n\n    if (deltaWidth > 0 && candidateCenterX > baselineCenterX) {\n      return deltaWidth;\n    }\n\n    if (deltaWidth < 0 && candidateCenterX > baselineCenterX) {\n      return deltaWidth;\n    }\n\n    return 0;\n  }\n}\n","import { IFReflowSelectionStrategy, IReflowCandidate } from './i-f-reflow-selection-strategy';\n\n/**\n * Default strategy: every candidate except the source and ignored nodes is\n * eligible. The actual \"who is actually below / above\" decision is made by\n * the delta calculator based on geometric comparison of rects.\n */\nexport class CenterOfMassSelectionStrategy implements IFReflowSelectionStrategy {\n  public select({\n    sourceId,\n    candidates,\n  }: {\n    sourceId: string;\n    candidates: IReflowCandidate[];\n  }): IReflowCandidate[] {\n    // Ignored candidates stay in the stream — the planner skips them\n    // when computing shifts but keeps them in the collision pool.\n    return candidates.filter((candidate) => candidate.id !== sourceId);\n  }\n}\n","import { IRect } from '@foblex/2d';\nimport { EFReflowAxis } from '../enums';\nimport { IFReflowSelectionStrategy, IReflowCandidate } from './i-f-reflow-selection-strategy';\n\n/**\n * Restricts the candidate pool to nodes that overlap the resizing source\n * on the *perpendicular* axis:\n *\n * - Vertical resize → keep candidates whose horizontal span intersects\n *   the source (`[M.left, M.right] ∩ [N.left, N.right] ≠ ∅`).\n * - Horizontal resize → keep candidates whose vertical span intersects\n *   the source.\n * - Combined (`BOTH`) → keep candidates that overlap on either axis.\n *\n * Compared to `CENTER_OF_MASS`, this localises the reflow to the same\n * visual column / row as the source — useful for column-style workflows\n * where global shifts are too aggressive.\n */\nexport class XRangeSelectionStrategy implements IFReflowSelectionStrategy {\n  public select({\n    sourceId,\n    sourceBaselineRect,\n    sourceNextRect,\n    candidates,\n    axis,\n  }: {\n    sourceId: string;\n    sourceBaselineRect: IRect;\n    sourceNextRect: IRect;\n    candidates: IReflowCandidate[];\n    axis: EFReflowAxis;\n  }): IReflowCandidate[] {\n    return candidates.filter((c) => {\n      if (c.id === sourceId) return false;\n\n      switch (axis) {\n        case EFReflowAxis.VERTICAL:\n          return (\n            this._overlapsX(c.rect, sourceBaselineRect) || this._overlapsX(c.rect, sourceNextRect)\n          );\n        case EFReflowAxis.HORIZONTAL:\n          return (\n            this._overlapsY(c.rect, sourceBaselineRect) || this._overlapsY(c.rect, sourceNextRect)\n          );\n        case EFReflowAxis.BOTH:\n        default:\n          return (\n            this._overlapsX(c.rect, sourceBaselineRect) ||\n            this._overlapsX(c.rect, sourceNextRect) ||\n            this._overlapsY(c.rect, sourceBaselineRect) ||\n            this._overlapsY(c.rect, sourceNextRect)\n          );\n      }\n    });\n  }\n\n  private _overlapsX(a: IRect, b: IRect): boolean {\n    return !(a.x + a.width <= b.x || b.x + b.width <= a.x);\n  }\n\n  private _overlapsY(a: IRect, b: IRect): boolean {\n    return !(a.y + a.height <= b.y || b.y + b.height <= a.y);\n  }\n}\n","/**\n * Bounded visited-set guard for graph traversals.\n *\n * BFS / DFS over the connection graph must terminate even when the user\n * has authored cycles (which f-flow allows). The guard rejects already-\n * visited node ids and trips a depth fuse when traversal exceeds the\n * configured ceiling — defending against adversarial graph shapes\n * without imposing a static depth limit on legitimate ones.\n */\nexport class FReflowCycleGuard {\n  private readonly _visited = new Set<string>();\n\n  constructor(private readonly _maxDepth: number) {}\n\n  public visit(id: string): boolean {\n    if (this._visited.has(id)) return false;\n    if (this._visited.size >= this._maxDepth) return false;\n    this._visited.add(id);\n\n    return true;\n  }\n\n  public has(id: string): boolean {\n    return this._visited.has(id);\n  }\n\n  public size(): number {\n    return this._visited.size;\n  }\n}\n","import {\n  IFReflowSelectionStrategy,\n  IReflowCandidate,\n  IReflowConnection,\n} from './i-f-reflow-selection-strategy';\nimport { FReflowCycleGuard } from './f-reflow-cycle-guard';\n\n/**\n * Restricts the candidate pool to nodes reachable from the source via\n * outgoing connections (BFS).\n *\n * - Walks `outputNodeId === sourceId → inputNodeId` repeatedly.\n * - Cycles (legitimate or adversarial) terminate via `FReflowCycleGuard`.\n * - The geometric \"is this candidate actually below / right of the\n *   source\" decision still happens later in the delta calculator —\n *   this strategy only narrows the pool to graph-downstream nodes.\n *\n * Practical use: workflow editors where the user expects a resize to\n * cascade only along the data flow, not to unrelated branches.\n */\nexport class DownstreamConnectionsSelectionStrategy implements IFReflowSelectionStrategy {\n  constructor(private readonly _maxCascadeDepth: number) {}\n\n  public select({\n    sourceId,\n    candidates,\n    connections,\n  }: {\n    sourceId: string;\n    candidates: IReflowCandidate[];\n    connections: IReflowConnection[];\n  }): IReflowCandidate[] {\n    const downstream = new Set<string>();\n    const guard = new FReflowCycleGuard(this._maxCascadeDepth);\n    const queue: string[] = [sourceId];\n\n    // Adjacency list keyed by upstream node — built once, reused per BFS\n    // step to keep the traversal at O(connections + nodes) per plan.\n    const adjacency = this._buildAdjacency(connections);\n\n    while (queue.length > 0) {\n      const current = queue.shift() as string;\n      if (!guard.visit(current)) continue;\n\n      const next = adjacency.get(current);\n      if (!next) continue;\n      for (const nextId of next) {\n        if (downstream.has(nextId) || nextId === sourceId) continue;\n        downstream.add(nextId);\n        queue.push(nextId);\n      }\n    }\n\n    return candidates.filter((c) => c.id !== sourceId && downstream.has(c.id));\n  }\n\n  private _buildAdjacency(connections: IReflowConnection[]): Map<string, string[]> {\n    const map = new Map<string, string[]>();\n    for (const conn of connections) {\n      const list = map.get(conn.outputNodeId);\n      if (list) list.push(conn.inputNodeId);\n      else map.set(conn.outputNodeId, [conn.inputNodeId]);\n    }\n\n    return map;\n  }\n}\n","import { IReflowCandidate } from '../selection';\nimport { IFReflowScopeFilter } from './i-f-reflow-scope-filter';\n\nexport class GlobalScopeFilter implements IFReflowScopeFilter {\n  public filter({ candidates }: { candidates: IReflowCandidate[] }): IReflowCandidate[] {\n    return candidates;\n  }\n}\n","import { IReflowCandidate } from '../selection';\nimport { IFReflowScopeFilter } from './i-f-reflow-scope-filter';\n\n/**\n * Restricts the candidate pool to siblings of the resizing source —\n * candidates whose `fParentId` matches the source's. With no source\n * candidate or a top-level source (`parentId == null`), only top-level\n * candidates pass.\n *\n * Use case: a node inside a group expands; we want neighbors *inside the\n * same group* to shift, but not nodes living outside the group's\n * boundary or under a different parent.\n */\nexport class GroupScopeFilter implements IFReflowScopeFilter {\n  public filter({\n    sourceCandidate,\n    candidates,\n  }: {\n    sourceCandidate: IReflowCandidate | null;\n    candidates: IReflowCandidate[];\n  }): IReflowCandidate[] {\n    const sourceParentId = sourceCandidate?.parentId ?? null;\n\n    return candidates.filter((c) => (c.parentId ?? null) === sourceParentId);\n  }\n}\n","import { IReflowCandidate, IReflowConnection } from '../selection';\nimport { IFReflowScopeFilter } from './i-f-reflow-scope-filter';\n\n/**\n * Restricts the candidate pool to nodes in the same connected component\n * as the resizing source — BFS over connections in *both* directions.\n *\n * Compared to `DOWNSTREAM_CONNECTIONS` selection (one-directional), this\n * scope keeps upstream nodes too. Useful when a graph has multiple\n * disconnected sub-flows on the same canvas and a resize should affect\n * only its own component.\n */\nexport class ConnectedSubgraphScopeFilter implements IFReflowScopeFilter {\n  public filter({\n    sourceCandidate,\n    candidates,\n    connections,\n  }: {\n    sourceCandidate: IReflowCandidate | null;\n    candidates: IReflowCandidate[];\n    connections: IReflowConnection[];\n  }): IReflowCandidate[] {\n    if (!sourceCandidate) return candidates;\n\n    const adjacency = this._buildBidirectionalAdjacency(connections);\n    const reachable = this._bfs(sourceCandidate.id, adjacency);\n\n    return candidates.filter((c) => reachable.has(c.id));\n  }\n\n  private _buildBidirectionalAdjacency(connections: IReflowConnection[]): Map<string, string[]> {\n    const map = new Map<string, string[]>();\n    const add = (a: string, b: string): void => {\n      const list = map.get(a);\n      if (list) list.push(b);\n      else map.set(a, [b]);\n    };\n    for (const conn of connections) {\n      add(conn.outputNodeId, conn.inputNodeId);\n      add(conn.inputNodeId, conn.outputNodeId);\n    }\n\n    return map;\n  }\n\n  private _bfs(start: string, adjacency: Map<string, string[]>): Set<string> {\n    const visited = new Set<string>([start]);\n    const queue: string[] = [start];\n    while (queue.length > 0) {\n      const current = queue.shift() as string;\n      const next = adjacency.get(current);\n      if (!next) continue;\n      for (const id of next) {\n        if (visited.has(id)) continue;\n        visited.add(id);\n        queue.push(id);\n      }\n    }\n\n    return visited;\n  }\n}\n","import { IRect, RectExtensions } from '@foblex/2d';\nimport { IReflowCandidate } from '../selection';\nimport {\n  IFReflowCollisionResolver,\n  IReflowRawShift,\n  IReflowResolvedShift,\n} from './i-f-reflow-collision-resolver';\n\n/**\n * STOP collision: a candidate shifts in its requested direction up to the\n * point where its post-shift rect would violate the configured spacing\n * against any non-shifting obstacle. Remaining delta is discarded.\n *\n * Obstacles considered:\n * - The resized node at its `nextRect`.\n * - Every pool member that is not itself shifting on this plan.\n *\n * Obstacles only block on axes where the candidate and obstacle share\n * perpendicular overlap — nodes side-by-side do not block each other on\n * the vertical axis, and nodes stacked vertically do not block on the\n * horizontal axis.\n */\nexport class StopCollisionResolver implements IFReflowCollisionResolver {\n  public resolve({\n    sourceNextRect,\n    rawShifts,\n    pool,\n    spacing,\n    maxAbsoluteShift,\n  }: {\n    sourceNextRect: IRect;\n    rawShifts: IReflowRawShift[];\n    pool: IReflowCandidate[];\n    spacing: { vertical: number; horizontal: number };\n    maxAbsoluteShift: number;\n  }): IReflowResolvedShift[] {\n    const shiftingIds = new Set(rawShifts.map((s) => s.candidate.id));\n    // Source is the *cause* of the shift, not an obstacle: its resize drives\n    // candidates away from it, and treating it as a spacing-enforcing wall\n    // can block legitimate shifts (e.g. on collapse when the original\n    // source-candidate gap is smaller than the configured spacing).\n    // Obstacles are non-moving nodes outside the shift pool.\n    const obstacles: IRect[] = pool.filter((c) => !shiftingIds.has(c.id)).map((c) => c.rect);\n    // Reference retained to keep the parameter in use across future axes.\n    void sourceNextRect;\n\n    const resolved: IReflowResolvedShift[] = [];\n\n    for (const raw of rawShifts) {\n      const rect = raw.candidate.rect;\n\n      let dx = raw.shift.x;\n      let dy = raw.shift.y;\n\n      if (dy !== 0) {\n        dy = this._clampVerticalShift(rect, dy, obstacles, spacing.vertical);\n      }\n\n      if (dx !== 0) {\n        dx = this._clampHorizontalShift(rect, dx, obstacles, spacing.horizontal);\n      }\n\n      dx = this._clampAbs(dx, maxAbsoluteShift);\n      dy = this._clampAbs(dy, maxAbsoluteShift);\n\n      if (dx === 0 && dy === 0) {\n        continue;\n      }\n\n      const toRect = RectExtensions.initialize(rect.x + dx, rect.y + dy, rect.width, rect.height);\n\n      resolved.push({\n        candidate: raw.candidate,\n        fromRect: rect,\n        toRect,\n        toPosition: { x: rect.x + dx, y: rect.y + dy },\n      });\n    }\n\n    return resolved;\n  }\n\n  private _clampVerticalShift(\n    rect: IRect,\n    dy: number,\n    obstacles: IRect[],\n    spacing: number,\n  ): number {\n    if (dy > 0) {\n      let maxDy = dy;\n      for (const obs of obstacles) {\n        if (!this._overlapsOnX(rect, obs)) continue;\n        if (obs.y < rect.y + rect.height) continue;\n        const availableGap = obs.y - (rect.y + rect.height);\n        const maxForThis = Math.max(0, availableGap - spacing);\n        if (maxForThis < maxDy) maxDy = maxForThis;\n      }\n\n      return maxDy;\n    }\n\n    let minDy = dy;\n    for (const obs of obstacles) {\n      if (!this._overlapsOnX(rect, obs)) continue;\n      if (obs.y + obs.height > rect.y) continue;\n      const availableGap = rect.y - (obs.y + obs.height);\n      const minForThis = Math.min(0, -(availableGap - spacing));\n      if (minForThis > minDy) minDy = minForThis;\n    }\n\n    return minDy;\n  }\n\n  private _clampHorizontalShift(\n    rect: IRect,\n    dx: number,\n    obstacles: IRect[],\n    spacing: number,\n  ): number {\n    if (dx > 0) {\n      let maxDx = dx;\n      for (const obs of obstacles) {\n        if (!this._overlapsOnY(rect, obs)) continue;\n        if (obs.x < rect.x + rect.width) continue;\n        const availableGap = obs.x - (rect.x + rect.width);\n        const maxForThis = Math.max(0, availableGap - spacing);\n        if (maxForThis < maxDx) maxDx = maxForThis;\n      }\n\n      return maxDx;\n    }\n\n    let minDx = dx;\n    for (const obs of obstacles) {\n      if (!this._overlapsOnY(rect, obs)) continue;\n      if (obs.x + obs.width > rect.x) continue;\n      const availableGap = rect.x - (obs.x + obs.width);\n      const minForThis = Math.min(0, -(availableGap - spacing));\n      if (minForThis > minDx) minDx = minForThis;\n    }\n\n    return minDx;\n  }\n\n  private _overlapsOnX(a: IRect, b: IRect): boolean {\n    return !(a.x + a.width <= b.x || b.x + b.width <= a.x);\n  }\n\n  private _overlapsOnY(a: IRect, b: IRect): boolean {\n    return !(a.y + a.height <= b.y || b.y + b.height <= a.y);\n  }\n\n  private _clampAbs(value: number, max: number): number {\n    if (value > max) return max;\n    if (value < -max) return -max;\n\n    return value;\n  }\n}\n","import { IRect, RectExtensions } from '@foblex/2d';\nimport { IReflowCandidate } from '../selection';\nimport {\n  IFReflowCollisionResolver,\n  IReflowRawShift,\n  IReflowResolvedShift,\n} from './i-f-reflow-collision-resolver';\n\ninterface IChainPushEntry {\n  candidate: IReflowCandidate;\n  dx: number;\n  dy: number;\n  toRect: IRect;\n}\n\n/**\n * CHAIN_PUSH collision: when a shifting candidate would collide with a\n * non-shifting pool member, the colliding node is *included* in the\n * plan and pushed away by enough to restore spacing — instead of\n * clamping the original shift like `STOP` would.\n *\n * The pushed node may itself now collide with further pool members; the\n * process iterates until the plan stabilises or `maxCascadeDepth` is\n * exceeded. All work happens in a single `resolve()` call — the planner\n * is not re-invoked, so the result remains stateless.\n *\n * Versus STOP:\n * - STOP preserves the original layout outside the shift pool; remainder\n *   delta is lost when a candidate hits an obstacle.\n * - CHAIN_PUSH treats the obstacle as a domino and absorbs it into the\n *   shift, producing a tighter layout at the cost of touching more nodes.\n */\nexport class ChainPushCollisionResolver implements IFReflowCollisionResolver {\n  constructor(private readonly _maxCascadeDepth: number) {}\n\n  public resolve({\n    rawShifts,\n    pool,\n    spacing,\n    maxAbsoluteShift,\n  }: {\n    sourceNextRect: IRect;\n    rawShifts: IReflowRawShift[];\n    pool: IReflowCandidate[];\n    spacing: { vertical: number; horizontal: number };\n    maxAbsoluteShift: number;\n  }): IReflowResolvedShift[] {\n    const shifts = new Map<string, IChainPushEntry>();\n\n    for (const raw of rawShifts) {\n      const dx = this._clampAbs(raw.shift.x, maxAbsoluteShift);\n      const dy = this._clampAbs(raw.shift.y, maxAbsoluteShift);\n      if (dx === 0 && dy === 0) continue;\n      shifts.set(raw.candidate.id, {\n        candidate: raw.candidate,\n        dx,\n        dy,\n        toRect: this._shifted(raw.candidate.rect, dx, dy),\n      });\n    }\n\n    let depth = 0;\n    let changed = true;\n    while (changed && depth < this._maxCascadeDepth) {\n      changed = false;\n      depth++;\n\n      for (const entry of [...shifts.values()]) {\n        for (const candidate of pool) {\n          if (shifts.has(candidate.id)) continue;\n          const push = this._computePush(entry.toRect, candidate.rect, spacing);\n          if (!push) continue;\n\n          const dx = this._clampAbs(push.dx, maxAbsoluteShift);\n          const dy = this._clampAbs(push.dy, maxAbsoluteShift);\n          if (dx === 0 && dy === 0) continue;\n\n          shifts.set(candidate.id, {\n            candidate,\n            dx,\n            dy,\n            toRect: this._shifted(candidate.rect, dx, dy),\n          });\n          changed = true;\n        }\n      }\n    }\n\n    const resolved: IReflowResolvedShift[] = [];\n    for (const entry of shifts.values()) {\n      resolved.push({\n        candidate: entry.candidate,\n        fromRect: entry.candidate.rect,\n        toRect: entry.toRect,\n        toPosition: { x: entry.toRect.x, y: entry.toRect.y },\n      });\n    }\n\n    return resolved;\n  }\n\n  /**\n   * If `mover` (already shifted) overlaps `target` (stationary) below\n   * the configured per-axis spacing, return the displacement that would\n   * restore that spacing. The push direction is determined by which\n   * edge of the mover is impinging on the target.\n   */\n  private _computePush(\n    mover: IRect,\n    target: IRect,\n    spacing: { vertical: number; horizontal: number },\n  ): { dx: number; dy: number } | null {\n    let dx = 0;\n    let dy = 0;\n\n    if (this._overlapsX(mover, target)) {\n      const moverBottom = mover.y + mover.height;\n      const targetBottom = target.y + target.height;\n      if (moverBottom + spacing.vertical > target.y && mover.y < targetBottom) {\n        if (mover.y < target.y) {\n          // mover is above target → push target down\n          dy = moverBottom + spacing.vertical - target.y;\n        } else {\n          // mover is below target → push target up\n          dy = mover.y - targetBottom - spacing.vertical;\n        }\n      }\n    }\n\n    if (this._overlapsY(mover, target)) {\n      const moverRight = mover.x + mover.width;\n      const targetRight = target.x + target.width;\n      if (moverRight + spacing.horizontal > target.x && mover.x < targetRight) {\n        if (mover.x < target.x) {\n          dx = moverRight + spacing.horizontal - target.x;\n        } else {\n          dx = mover.x - targetRight - spacing.horizontal;\n        }\n      }\n    }\n\n    if (dx === 0 && dy === 0) return null;\n\n    return { dx, dy };\n  }\n\n  private _shifted(rect: IRect, dx: number, dy: number): IRect {\n    return RectExtensions.initialize(rect.x + dx, rect.y + dy, rect.width, rect.height);\n  }\n\n  private _overlapsX(a: IRect, b: IRect): boolean {\n    return !(a.x + a.width <= b.x || b.x + b.width <= a.x);\n  }\n\n  private _overlapsY(a: IRect, b: IRect): boolean {\n    return !(a.y + a.height <= b.y || b.y + b.height <= a.y);\n  }\n\n  private _clampAbs(value: number, max: number): number {\n    if (value > max) return max;\n    if (value < -max) return -max;\n\n    return value;\n  }\n}\n","import { IRect } from '@foblex/2d';\nimport { Injectable } from '@angular/core';\nimport { EFReflowCollision, EFReflowDeltaSource, EFReflowMode, EFReflowScope } from '../enums';\nimport {\n  CenterBasedDeltaCalculator,\n  EdgeBasedDeltaCalculator,\n  IFReflowDeltaCalculator,\n  computeEdgeDeltas,\n} from '../delta';\nimport {\n  IReflowCandidate,\n  IReflowConnection,\n  IFReflowSelectionStrategy,\n  CenterOfMassSelectionStrategy,\n  XRangeSelectionStrategy,\n  DownstreamConnectionsSelectionStrategy,\n} from '../selection';\nimport {\n  ConnectedSubgraphScopeFilter,\n  GlobalScopeFilter,\n  GroupScopeFilter,\n  IFReflowScopeFilter,\n} from '../scope';\nimport {\n  ChainPushCollisionResolver,\n  IFReflowCollisionResolver,\n  IReflowRawShift,\n  StopCollisionResolver,\n} from '../collision';\nimport { IReflowPlan, EMPTY_REFLOW_PLAN } from '../i-reflow-plan';\nimport { IFReflowOnResizeResolvedConfig } from '../i-f-reflow-on-resize-config';\n\nexport interface IReflowPlannerInput {\n  sourceId: string;\n  baselineRect: IRect;\n  nextRect: IRect;\n  candidates: IReflowCandidate[];\n  connections: IReflowConnection[];\n  config: IFReflowOnResizeResolvedConfig;\n}\n\n/**\n * Pure planner: no DI, no side effects. Consumes rect data + config and\n * produces a plan the orchestrator/animator can apply.\n *\n * Phase 1 coverage: `CENTER_OF_MASS` selection, `GLOBAL` scope, `STOP`\n * collision. Unsupported modes fall back to no-op until subsequent phases\n * add their strategies.\n */\n@Injectable()\nexport class FReflowPlanner {\n  private readonly _edgeBased = new EdgeBasedDeltaCalculator();\n  private readonly _centerBased = new CenterBasedDeltaCalculator();\n  private readonly _centerOfMassSelection = new CenterOfMassSelectionStrategy();\n  private readonly _xRangeSelection = new XRangeSelectionStrategy();\n  private readonly _globalScope = new GlobalScopeFilter();\n  private readonly _groupScope = new GroupScopeFilter();\n  private readonly _connectedSubgraphScope = new ConnectedSubgraphScopeFilter();\n  private readonly _stopCollision = new StopCollisionResolver();\n\n  public plan(input: IReflowPlannerInput): IReflowPlan {\n    const { sourceId, baselineRect, nextRect, candidates, connections, config } = input;\n\n    if (this._isNoOpDelta(baselineRect, nextRect)) {\n      return EMPTY_REFLOW_PLAN(sourceId);\n    }\n\n    const selection = this._resolveSelection(config.mode, config);\n    if (!selection) {\n      return EMPTY_REFLOW_PLAN(sourceId);\n    }\n\n    const scopeFilter = this._resolveScope(config.scope);\n    if (!scopeFilter) {\n      return EMPTY_REFLOW_PLAN(sourceId);\n    }\n\n    const collisionResolver = this._resolveCollision(config.collision, config);\n    if (!collisionResolver) {\n      return EMPTY_REFLOW_PLAN(sourceId);\n    }\n\n    const deltaCalculator = this._resolveDeltaCalculator(config.deltaSource);\n\n    // The parent chain and the descendant subtree of the source must never\n    // be shifted. Ancestors own the source's coordinate frame — pushing the\n    // parent while the child stays would visually slide the frame out from\n    // under it. Descendants are anchored inside the source — a parent's\n    // own auto-fit response could otherwise re-enter the plan and explode\n    // positions in a feedback loop.\n    //\n    // Cross-level shifts beyond that are allowed: `scope` is the\n    // user-facing knob for \"how far does this resize reach\". GLOBAL really\n    // does mean global, including across nesting levels.\n    const eligible = this._excludeSourceAncestorsAndDescendants(candidates, sourceId);\n\n    const preselected = selection.select({\n      sourceId,\n      sourceBaselineRect: baselineRect,\n      sourceNextRect: nextRect,\n      candidates: eligible,\n      connections,\n      axis: config.axis,\n    });\n\n    const sourceCandidate = candidates.find((c) => c.id === sourceId) ?? null;\n    const scoped = scopeFilter.filter({\n      sourceCandidate,\n      candidates: preselected,\n      connections,\n    });\n\n    const rawShifts = this._computeRawShifts(\n      deltaCalculator,\n      scoped,\n      baselineRect,\n      nextRect,\n      config,\n    );\n\n    // Containment: a candidate must not be shifted outside its parent\n    // group's rect. The parent's outer bounds act as walls — the shift\n    // is clamped at the wall minus spacing. Without this step, neighbours\n    // inside a fixed-size group leak through the group's borders the\n    // moment the source grows past what the group can accommodate.\n    const containedShifts = this._clampToParentBounds(rawShifts, candidates);\n\n    if (containedShifts.length === 0) {\n      return {\n        sourceNodeId: sourceId,\n        shifts: [],\n        deltaEdges: computeEdgeDeltas(baselineRect, nextRect),\n      };\n    }\n\n    const resolved = collisionResolver.resolve({\n      sourceNextRect: nextRect,\n      rawShifts: containedShifts,\n      // Collision pool follows the user's scope. Out-of-scope nodes are\n      // off-limits to the plan — they must not become stationary\n      // obstacles a shift slams into (STOP) and must not be absorbed\n      // into the cascade (CHAIN_PUSH). With the pool restricted to\n      // `scoped`, the chosen scope semantically owns both who moves and\n      // what counts as solid.\n      //\n      // Anchored nodes (`fReflowIgnore`) stay in the pool: they never\n      // get a primary shift (filtered out in `_computeRawShifts`), but\n      // they must still register as obstacles so STOP clamps against\n      // them and CHAIN_PUSH treats them as something to push past.\n      pool: scoped,\n      spacing: config.spacing,\n      maxAbsoluteShift: config.maxAbsoluteShiftPerPlan,\n    });\n\n    return {\n      sourceNodeId: sourceId,\n      shifts: resolved.map((r) => ({\n        id: r.candidate.id,\n        fromRect: r.fromRect,\n        toRect: r.toRect,\n        toPosition: r.toPosition,\n      })),\n      deltaEdges: computeEdgeDeltas(baselineRect, nextRect),\n    };\n  }\n\n  /**\n   * Clamps each candidate's shift so the post-shift rect cannot extend\n   * past its parent's outer bounds. The parent's edges act as walls —\n   * a shift that would carry a sibling outside the group is reduced to\n   * land flush against the inside edge.\n   *\n   * Top-level candidates (no parent) pass through unchanged. Spacing is\n   * intentionally not applied here: that is a between-nodes concern and\n   * is handled by the collision resolver against fellow shifts. Adding\n   * spacing here would also fight any candidate whose original position\n   * is already on or past the parent's edge.\n   */\n  private _clampToParentBounds(\n    shifts: IReflowRawShift[],\n    candidates: IReflowCandidate[],\n  ): IReflowRawShift[] {\n    const byId = new Map(candidates.map((c) => [c.id, c]));\n    const result: IReflowRawShift[] = [];\n\n    for (const raw of shifts) {\n      const cand = raw.candidate;\n      const parent = cand.parentId ? byId.get(cand.parentId) : null;\n      if (!parent) {\n        result.push(raw);\n        continue;\n      }\n\n      const minX = parent.rect.x;\n      const maxX = parent.rect.x + parent.rect.width - cand.rect.width;\n      const minY = parent.rect.y;\n      const maxY = parent.rect.y + parent.rect.height - cand.rect.height;\n\n      const targetX = cand.rect.x + raw.shift.x;\n      const targetY = cand.rect.y + raw.shift.y;\n\n      const clampedX = Math.max(minX, Math.min(maxX, targetX));\n      const clampedY = Math.max(minY, Math.min(maxY, targetY));\n\n      const dx = clampedX - cand.rect.x;\n      const dy = clampedY - cand.rect.y;\n\n      if (dx === 0 && dy === 0) continue;\n\n      result.push({ candidate: cand, shift: { x: dx, y: dy } });\n    }\n\n    return result;\n  }\n\n  /**\n   * Returns candidates with the source itself, the source's full parent\n   * chain, and the source's descendant subtree all removed. Cycle-safe\n   * via visited sets so malformed parent links cannot loop forever.\n   */\n  private _excludeSourceAncestorsAndDescendants(\n    candidates: IReflowCandidate[],\n    sourceId: string,\n  ): IReflowCandidate[] {\n    const byId = new Map<string, IReflowCandidate>();\n    const childrenOf = new Map<string, string[]>();\n    for (const c of candidates) {\n      byId.set(c.id, c);\n      const pid = c.parentId ?? null;\n      if (pid) {\n        const list = childrenOf.get(pid) ?? [];\n        list.push(c.id);\n        childrenOf.set(pid, list);\n      }\n    }\n\n    const blocked = new Set<string>([sourceId]);\n\n    let cursor = byId.get(sourceId)?.parentId ?? null;\n    const visitedAncestors = new Set<string>();\n    while (cursor && !visitedAncestors.has(cursor)) {\n      visitedAncestors.add(cursor);\n      blocked.add(cursor);\n      cursor = byId.get(cursor)?.parentId ?? null;\n    }\n\n    const queue: string[] = [...(childrenOf.get(sourceId) ?? [])];\n    const visitedDescendants = new Set<string>();\n    while (queue.length > 0) {\n      const id = queue.shift() as string;\n      if (visitedDescendants.has(id)) continue;\n      visitedDescendants.add(id);\n      blocked.add(id);\n      for (const child of childrenOf.get(id) ?? []) {\n        queue.push(child);\n      }\n    }\n\n    return candidates.filter((c) => !blocked.has(c.id));\n  }\n\n  /**\n   * Reflow reacts to SIZE changes only. A pure translation (position\n   * changed, size unchanged) must not generate shifts — doing so would\n   * cascade through every candidate that was just shifted, since each\n   * shift re-enters this path via `stateChanges.notify()` in\n   * `FNodeDirective.refresh()`.\n   */\n  private _isNoOpDelta(baseline: IRect, next: IRect): boolean {\n    return baseline.width === next.width && baseline.height === next.height;\n  }\n\n  private _resolveSelection(\n    mode: EFReflowMode,\n    config: IFReflowOnResizeResolvedConfig,\n  ): IFReflowSelectionStrategy | null {\n    switch (mode) {\n      case EFReflowMode.CENTER_OF_MASS:\n        return this._centerOfMassSelection;\n      case EFReflowMode.X_RANGE:\n        return this._xRangeSelection;\n      case EFReflowMode.DOWNSTREAM_CONNECTIONS:\n        return new DownstreamConnectionsSelectionStrategy(config.maxCascadeDepth);\n      default:\n        return null;\n    }\n  }\n\n  private _resolveScope(scope: EFReflowScope): IFReflowScopeFilter | null {\n    switch (scope) {\n      case EFReflowScope.GLOBAL:\n        return this._globalScope;\n      case EFReflowScope.GROUP:\n        return this._groupScope;\n      case EFReflowScope.CONNECTED_SUBGRAPH:\n        return this._connectedSubgraphScope;\n      default:\n        return null;\n    }\n  }\n\n  private _resolveCollision(\n    collision: EFReflowCollision,\n    config: IFReflowOnResizeResolvedConfig,\n  ): IFReflowCollisionResolver | null {\n    switch (collision) {\n      case EFReflowCollision.STOP:\n        return this._stopCollision;\n      case EFReflowCollision.CHAIN_PUSH:\n        return new ChainPushCollisionResolver(config.maxCascadeDepth);\n      default:\n        return null;\n    }\n  }\n\n  private _resolveDeltaCalculator(source: EFReflowDeltaSource): IFReflowDeltaCalculator {\n    return source === EFReflowDeltaSource.CENTER_BASED ? this._centerBased : this._edgeBased;\n  }\n\n  private _computeRawShifts(\n    calculator: IFReflowDeltaCalculator,\n    candidates: IReflowCandidate[],\n    baselineRect: IRect,\n    nextRect: IRect,\n    config: IFReflowOnResizeResolvedConfig,\n  ): IReflowRawShift[] {\n    const shifts: IReflowRawShift[] = [];\n    for (const candidate of candidates) {\n      // Anchored nodes (`fReflowIgnore`) never receive a primary shift —\n      // they stay where they are. They remain in the collision pool so\n      // STOP can clamp other shifts against them and CHAIN_PUSH treats\n      // them as obstacles to absorb.\n      if (candidate.isIgnored) continue;\n\n      const shift = calculator.calculate({\n        baselineRect,\n        nextRect,\n        candidateRect: candidate.rect,\n        axis: config.axis,\n      });\n      if (shift !== null) {\n        shifts.push({ candidate, shift });\n      }\n    }\n\n    return shifts;\n  }\n}\n","import { computed, inject, Injectable, Signal, signal, WritableSignal } from '@angular/core';\nimport {\n  F_REFLOW_CONFIG,\n  IFReflowOnResizeConfig,\n  IFReflowOnResizeResolvedConfig,\n  mergeReflowConfig,\n} from './i-f-reflow-on-resize-config';\n\n/**\n * Public runtime API for the reflow-on-resize feature.\n *\n * Always instantiated at the `<f-flow>` injector level — regardless of\n * whether `withReflowOnResize(...)` was registered. The feature is inert\n * until `F_REFLOW_CONFIG` becomes available through the optional inject;\n * without it, `isEnabled` is `false` and the orchestrator short-circuits.\n *\n * ```typescript\n * const reflow = inject(FReflowController);\n * reflow.setConfig({ spacing: { vertical: 24 } });\n * ```\n */\n@Injectable()\nexport class FReflowController {\n  private readonly _initial = inject(F_REFLOW_CONFIG, { optional: true });\n\n  private readonly _featureActivated = this._initial !== null;\n\n  private readonly _config: WritableSignal<IFReflowOnResizeResolvedConfig> = signal(\n    this._initial ?? mergeReflowConfig(undefined),\n  );\n\n  public readonly config: Signal<IFReflowOnResizeResolvedConfig> = this._config.asReadonly();\n\n  public readonly isEnabled: Signal<boolean> = computed(\n    () => this._featureActivated && this._config().enabled,\n  );\n\n  public getConfig(): IFReflowOnResizeResolvedConfig {\n    return this._config();\n  }\n\n  public setConfig(partial: IFReflowOnResizeConfig): void {\n    this._config.set(mergeReflowConfig({ ...this._config(), ...partial }));\n  }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * Feature-local registry of node/group ids flagged with `fReflowIgnore`.\n *\n * The directive registers its host id on attach and removes it on detach;\n * the orchestrator queries the set when building the candidate pool.\n *\n * Kept separate from `FNodeBase` so activating the reflow feature never\n * forces a structural change on the core node API.\n */\n@Injectable()\nexport class FReflowIgnoreRegistry {\n  private readonly _ignored = new Set<string>();\n\n  public add(id: string): void {\n    this._ignored.add(id);\n  }\n\n  public remove(id: string): void {\n    this._ignored.delete(id);\n  }\n\n  public has(id: string): boolean {\n    return this._ignored.has(id);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IRect } from '@foblex/2d';\n\n/**\n * Per-node \"last known rect\" used to derive the baseline for the next resize.\n *\n * Independent from `FCache` so reflow works even when the cache feature is\n * disabled (its default state). Populated on every orchestrator invocation:\n * the first observation of a node has no baseline yet and produces no plan\n * — subsequent observations diff against the recorded rect.\n *\n * Not part of serialization — purely transient UI state.\n */\n@Injectable()\nexport class FReflowBaselineTracker {\n  private readonly _baselines = new Map<string, IRect>();\n\n  public get(id: string): IRect | undefined {\n    return this._baselines.get(id);\n  }\n\n  public set(id: string, rect: IRect): void {\n    this._baselines.set(id, rect);\n  }\n\n  public delete(id: string): void {\n    this._baselines.delete(id);\n  }\n\n  public clear(): void {\n    this._baselines.clear();\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IRect } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FNodeBase } from '../../../../f-node';\nimport { GetNormalizedElementRectRequest } from '../../../../domain/get-normalized-element-rect';\nimport { FMoveNodesEvent } from '../../../../f-draggable';\nimport { FReflowController } from '../f-reflow-controller';\nimport { FReflowPlanner } from '../planner';\nimport { FReflowIgnoreRegistry } from '../directives/f-reflow-ignore-registry';\nimport { IReflowCandidate, IReflowConnection } from '../selection';\nimport { FReflowBaselineTracker } from '../f-reflow-baseline-tracker';\n\n/**\n * Drives the resize → plan → apply pipeline.\n *\n * Invoked from two places:\n * - `UpdateNodeWhenStateOrSizeChanged` for content-driven resize (expand /\n *   collapse / programmatic `[fNodeSize]`). The caller does not provide a\n *   baseline — the tracker supplies one.\n * - `ResizeNodeHandler.onPointerUp` for user drag-resize, which provides\n *   the pre-drag baseline captured in `prepareDragSequence`.\n *\n * Shifts apply synchronously through `position.set` — no animator.\n * Per-node DOM writes are gated by `hostElement.isConnected` so a plan\n * that arrives during consumer-side teardown (e.g. parent reset) cannot\n * push stale view models through Angular CD.\n */\n@Injectable()\nexport class FReflowOrchestrator {\n  private readonly _controller = inject(FReflowController, { optional: true });\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n  private readonly _ignoreRegistry = inject(FReflowIgnoreRegistry);\n  private readonly _planner = inject(FReflowPlanner);\n  private readonly _tracker = inject(FReflowBaselineTracker);\n\n  public handleResize(sourceNode: FNodeBase, baselineRect?: IRect): void {\n    if (!this._controller?.isEnabled()) {\n      return;\n    }\n\n    const sourceId = sourceNode.fId();\n    const nextRect = this._safeGetRect(sourceNode);\n    if (!nextRect) {\n      return;\n    }\n\n    // A degenerate rect means the host is mid-unmount (e.g. consumer\n    // replaced its `@for` source, the flow-node directive's view is being\n    // torn down, ResizeObserver fires its final tick with width/height 0).\n    // We must not plan against this state — the registry briefly still\n    // holds the dying node, candidates would include other dying siblings,\n    // and emitting `fMoveNodes` with their ids creates phantom entries in\n    // consumer stores whose models have already moved on.\n    if (!sourceNode.hostElement?.isConnected || nextRect.width === 0 || nextRect.height === 0) {\n      this._tracker.delete(sourceId);\n\n      return;\n    }\n\n    // Source baseline derivation:\n    // - When the caller provides `baselineRect` (drag-resize path), trust\n    //   it: it was captured at pointerdown and reflects the exact pre-drag\n    //   geometry.\n    // - Otherwise (content-driven path) the tracker's last `nextRect`\n    //   carries the previous size, but its position can drift if the\n    //   source moved between resizes — typical example: the parent group\n    //   is dragged, which translates the child without firing a resize\n    //   event. To avoid mixing the drag delta into the edge-deltas, we\n    //   rebase the tracked baseline's position to the source's current\n    //   DOM position. Size stays from the tracker (the canonical\n    //   pre-resize size); position comes from the DOM (where the source\n    //   actually sits at the moment of this resize).\n    let baseline: IRect | undefined = baselineRect;\n    if (!baseline) {\n      const tracked = this._tracker.get(sourceId);\n      if (tracked) {\n        baseline = {\n          x: nextRect.x,\n          y: nextRect.y,\n          width: tracked.width,\n          height: tracked.height,\n          gravityCenter: { x: nextRect.x + tracked.width / 2, y: nextRect.y + tracked.height / 2 },\n        } as IRect;\n      }\n    }\n\n    this._tracker.set(sourceId, nextRect);\n\n    if (!baseline) {\n      return;\n    }\n\n    const candidates = this._buildCandidates();\n    const connections = this._buildConnections();\n    const config = this._controller.getConfig();\n\n    const plan = this._planner.plan({\n      sourceId,\n      baselineRect: baseline,\n      nextRect,\n      candidates,\n      connections,\n      config,\n    });\n\n    if (plan.shifts.length === 0) {\n      return;\n    }\n\n    const moved: { id: string; position: { x: number; y: number } }[] = [];\n    for (const shift of plan.shifts) {\n      const node = this._store.nodes.get(shift.id);\n      if (!node || !node.hostElement?.isConnected) {\n        // Skip nodes the consumer has already unmounted; writing\n        // `position.set` to a destroyed component pushes stale view\n        // models through Angular CD and crashes downstream templates.\n        continue;\n      }\n\n      const pos = { x: shift.toPosition.x, y: shift.toPosition.y };\n      node.position.set(pos);\n      this._tracker.set(shift.id, shift.toRect);\n      moved.push({ id: shift.id, position: pos });\n    }\n\n    if (moved.length > 0) {\n      this._store.fDraggable?.fMoveNodes.emit(new FMoveNodesEvent(moved));\n    }\n  }\n\n  private _buildCandidates(): IReflowCandidate[] {\n    const result: IReflowCandidate[] = [];\n    for (const node of this._store.nodes.getAll()) {\n      const id = node.fId();\n      // DOM is the source of truth for candidate rects. Earlier versions\n      // preferred a tracker-first read to dodge a within-frame race where\n      // a freshly applied plan's `position.set` had not yet reached the\n      // DOM transform — but that race made the tracker stale whenever a\n      // candidate moved through any path other than reflow itself (drag\n      // of the candidate, drag of an ancestor group, manual position\n      // updates from the consumer model). Reading the DOM each time\n      // costs a layout query but keeps candidates in sync with reality.\n      const rect = this._safeGetRect(node);\n      if (!rect) continue;\n      result.push({\n        id,\n        rect,\n        parentId: node.fParentId(),\n        isIgnored: this._ignoreRegistry.has(id),\n      });\n    }\n\n    return result;\n  }\n\n  /**\n   * Resolves f-flow's connector-keyed connections down to node-to-node\n   * links so graph-based selection strategies (DOWNSTREAM) can BFS\n   * without walking the connector registry themselves.\n   */\n  private _buildConnections(): IReflowConnection[] {\n    const connectorToNode = new Map<string, string>();\n    for (const node of this._store.nodes.getAll()) {\n      const nodeId = node.fId();\n      for (const connector of node.connectors) {\n        connectorToNode.set(connector.fId(), nodeId);\n      }\n    }\n\n    const result: IReflowConnection[] = [];\n    for (const conn of this._store.connections.getAll()) {\n      const outputNodeId = connectorToNode.get(conn.fOutputId());\n      const inputNodeId = connectorToNode.get(conn.fInputId());\n      if (!outputNodeId || !inputNodeId) continue;\n      result.push({ outputNodeId, inputNodeId });\n    }\n\n    return result;\n  }\n\n  // We only emit a shift plan for nodes whose model signal matches\n  // `_position`. A mismatch means the node is mid-flight — either its\n  // `positionChanges()` effect has not yet mirrored the latest signal\n  // into `_position`, or an internal write (fit-to-children) advanced\n  // `_position` ahead of the model. Planning against a half-applied\n  // state poisons every candidate read from DOM and propagates one\n  // measured rect onto many siblings (issue #305). Skipping the rect\n  // makes the orchestrator wait until the next coherent tick.\n  private _safeGetRect(node: FNodeBase): IRect | null {\n    if (!node.hostElement) {\n      return null;\n    }\n    const modelPos = node.position();\n    if (modelPos.x !== node._position.x || modelPos.y !== node._position.y) {\n      return null;\n    }\n    try {\n      return this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(node.hostElement));\n    } catch {\n      return null;\n    }\n  }\n}\n","import {\n  booleanAttribute,\n  Directive,\n  effect,\n  inject,\n  input,\n  Injector,\n  OnInit,\n  untracked,\n  OnDestroy,\n} from '@angular/core';\nimport { F_NODE } from '../../../../f-node/f-node-base';\nimport { FReflowIgnoreRegistry } from './f-reflow-ignore-registry';\n\n/**\n * Anchors the host `<f-node>` / `<f-group>` in place during reflow.\n * The node never receives a primary shift even if mode and scope would\n * otherwise pick it as a candidate, but it stays visible to the\n * collision resolver so:\n *\n * - **STOP** clamps neighbouring shifts against this anchor.\n * - **CHAIN_PUSH** treats the anchor as an obstacle to push past — the\n *   cascade can still absorb it if a primary shift physically collides\n *   with it.\n *\n * ```html\n * <div fNode fReflowIgnore>sticky annotation</div>\n * ```\n *\n * Reads as a boolean attribute; ignored when the reflow feature is not\n * registered (the registry is an optional inject).\n */\n@Directive({\n  selector: '[fReflowIgnore]',\n  standalone: true,\n})\nexport class FReflowIgnore implements OnInit, OnDestroy {\n  public readonly fReflowIgnore = input(true, {\n    transform: booleanAttribute,\n  });\n\n  private readonly _registry = inject(FReflowIgnoreRegistry);\n  private readonly _node = inject(F_NODE);\n  private readonly _injector = inject(Injector);\n\n  public ngOnInit(): void {\n    effect(\n      () => {\n        const id = this._node.fId();\n        const shouldIgnore = this.fReflowIgnore();\n\n        untracked(() => {\n          if (shouldIgnore) {\n            this._registry.add(id);\n          } else {\n            this._registry.remove(id);\n          }\n        });\n      },\n      { injector: this._injector },\n    );\n  }\n\n  public ngOnDestroy(): void {\n    this._registry.remove(this._node.fId());\n  }\n}\n","import { FReflowPlanner } from './planner';\nimport { FReflowOrchestrator } from './orchestrator';\nimport { FReflowIgnoreRegistry } from './directives';\nimport { FReflowBaselineTracker } from './f-reflow-baseline-tracker';\n\n/**\n * Services that must live at the `<f-flow>` injector level because they\n * consume `FComponentsStore` and `FMediator` provided there.\n *\n * Wired unconditionally in `FFlowComponent.providers`. They stay inert\n * until `withReflowOnResize(...)` installs `F_REFLOW_CONFIG` further up\n * the injector tree — the orchestrator and friends reach the controller\n * (also installed by `withReflowOnResize`) through the parent chain.\n *\n * `FReflowController` is intentionally NOT in this list: it is provided\n * by `withReflowOnResize(...)` so consumers can `inject(FReflowController)`\n * directly from the same component that calls `provideFFlow(...)`.\n */\nexport const F_REFLOW_PROVIDERS = [\n  FReflowPlanner,\n  FReflowOrchestrator,\n  FReflowIgnoreRegistry,\n  FReflowBaselineTracker,\n];\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Flow-level configuration passed as the first argument to `provideFFlow(...)`.\n *\n * Priority for `id`: `[fFlowId]` input on `<f-flow>` > this config > auto-generated.\n */\nexport interface IFFlowConfig {\n  id?: string;\n}\n\nexport const F_FLOW_CONFIG = new InjectionToken<IFFlowConfig>('F_FLOW_CONFIG');\n","import { Provider } from '@angular/core';\n\n/**\n * Discriminator for `with*()` features composed by `provideFFlow`.\n */\nexport enum EFFlowFeatureKind {\n  REFLOW_ON_RESIZE = 'reflow-on-resize',\n  CANVAS = 'canvas',\n}\n\n/**\n * Feature envelope returned by `with*()` helpers.\n *\n * Each helper returns a kind tag and the provider list that activates the feature.\n * `provideFFlow` flattens these into a single `Provider[]` placed in the host's\n * `providers` array.\n */\nexport interface IFFlowFeature<K extends EFFlowFeatureKind = EFFlowFeatureKind> {\n  readonly kind: K;\n  readonly providers: Provider[];\n}\n","import { Provider } from '@angular/core';\nimport { F_FLOW_CONFIG, IFFlowConfig } from './i-f-flow-config';\nimport { IFFlowFeature } from './f-flow-feature';\n\n/**\n * Entry point for the provider-based Flow configuration surface.\n *\n * Usage:\n * ```typescript\n * providers: [\n *   provideFFlow(\n *     { id: 'main' },                // optional flow-level config\n *     withReflowOnResize({ ... }),    // feature plugins\n *   ),\n * ];\n * ```\n *\n * The first positional argument is an optional `IFFlowConfig`. Any argument that\n * carries a `kind` discriminator is treated as a feature.\n */\nexport function provideFFlow(...features: IFFlowFeature[]): Provider[];\nexport function provideFFlow(config: IFFlowConfig, ...features: IFFlowFeature[]): Provider[];\nexport function provideFFlow(\n  configOrFeature?: IFFlowConfig | IFFlowFeature,\n  ...rest: IFFlowFeature[]\n): Provider[] {\n  const { config, features } = _normalizeArgs(configOrFeature, rest);\n\n  const providers: Provider[] = [{ provide: F_FLOW_CONFIG, useValue: config }];\n\n  for (const feature of features) {\n    providers.push(...feature.providers);\n  }\n\n  return providers;\n}\n\nfunction _normalizeArgs(\n  first: IFFlowConfig | IFFlowFeature | undefined,\n  rest: IFFlowFeature[],\n): { config: IFFlowConfig; features: IFFlowFeature[] } {\n  if (first === undefined) {\n    return { config: {}, features: rest };\n  }\n\n  if (_isFeature(first)) {\n    return { config: {}, features: [first, ...rest] };\n  }\n\n  return { config: first, features: rest };\n}\n\nfunction _isFeature(value: IFFlowConfig | IFFlowFeature): value is IFFlowFeature {\n  return typeof (value as IFFlowFeature).kind === 'string';\n}\n","import { EFFlowFeatureKind, IFFlowFeature } from '../../../provide-f-flow';\nimport { FReflowController } from './f-reflow-controller';\nimport {\n  F_REFLOW_CONFIG,\n  IFReflowOnResizeConfig,\n  mergeReflowConfig,\n} from './i-f-reflow-on-resize-config';\n\n/**\n * Activates the reflow-on-resize feature inside `provideFFlow(...)`.\n *\n * ```typescript\n * @Component({\n *   providers: [\n *     provideFFlow(\n *       withReflowOnResize({ mode: EFReflowMode.CENTER_OF_MASS }),\n *     ),\n *   ],\n * })\n * export class MyFlow {\n *   private readonly _reflow = inject(FReflowController);\n *   // ...\n * }\n * ```\n *\n * Installs `F_REFLOW_CONFIG` and `FReflowController` at the host\n * component's injector — both are reachable from the same component\n * that calls `provideFFlow(...)`. The downstream services\n * (`FReflowOrchestrator`, `FReflowPlanner`, `FReflowIgnoreRegistry`,\n * `FReflowBaselineTracker`) are provided unconditionally by `<f-flow>`\n * and find the controller via the parent injector chain.\n *\n * Registering the feature twice replaces the earlier config via Angular's\n * last-wins provider semantics.\n */\nexport function withReflowOnResize(\n  config?: IFReflowOnResizeConfig,\n): IFFlowFeature<EFFlowFeatureKind.REFLOW_ON_RESIZE> {\n  return {\n    kind: EFFlowFeatureKind.REFLOW_ON_RESIZE,\n    providers: [\n      { provide: F_REFLOW_CONFIG, useValue: mergeReflowConfig(config) },\n      FReflowController,\n    ],\n  };\n}\n","import { IPoint, IRect, IRoundedRect, RectExtensions } from '@foblex/2d';\nimport { DragHandlerBase } from '../../infrastructure';\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 {\n  GetNormalizedConnectorRectRequest,\n  GetNormalizedElementRectRequest,\n} from '../../../domain';\nimport { inject, Injectable } from '@angular/core';\nimport { IResizeConstraint } from '../constraint';\nimport { FResizeNodeStartEventData } from '../f-resize-node-start-event-data';\nimport { RESIZE_NODE_HANDLER_KIND, RESIZE_NODE_HANDLER_TYPE } from '../is-resize-node-handler';\nimport { IResizeNodeConnectionHandlers } from './i-resize-node-connection-handlers';\nimport { FConnectorBase } from '../../../f-connectors';\nimport { SetFCacheNodeRectRequest } from '../../../f-cache';\nimport { FReflowOrchestrator } from '../../../plugins/layout/f-reflow-on-resize';\n\n@Injectable()\nexport class ResizeNodeHandler extends DragHandlerBase<FResizeNodeStartEventData> {\n  protected readonly type = RESIZE_NODE_HANDLER_TYPE;\n  protected readonly kind = RESIZE_NODE_HANDLER_KIND;\n  protected override data() {\n    return new FResizeNodeStartEventData(this._nodeOrGroup.fId());\n  }\n\n  private readonly _mediator = inject(FMediator);\n  private readonly _reflowOrchestrator = inject(FReflowOrchestrator);\n\n  private _baselineRect!: IRect;\n  private _constraints!: IResizeConstraint;\n\n  private _lastRect: IRect | null = null;\n\n  private _nodeOrGroup!: FNodeBase;\n  private _handleType!: EFResizeHandleType;\n  private _nodeConnections: IResizeNodeConnectionHandlers = { source: [], target: [] };\n  private _softParentConnections: IResizeNodeConnectionHandlers[] = [];\n\n  public initialize(nodeOrGroup: FNodeBase, handleType: EFResizeHandleType): void {\n    this._nodeOrGroup = nodeOrGroup;\n    this._handleType = handleType;\n  }\n\n  public setNodeConnectionHandlers(handlers: IResizeNodeConnectionHandlers): void {\n    this._nodeConnections = handlers;\n  }\n\n  public setSoftParentConnectionHandlers(handlers: IResizeNodeConnectionHandlers[]): void {\n    this._softParentConnections = handlers;\n  }\n\n  public override prepareDragSequence(): void {\n    this._baselineRect = this._readBaselineRect();\n    this._constraints = this._buildConstraints(this._baselineRect);\n    this._lastRect = this._baselineRect;\n  }\n\n  public override onPointerMove(delta: IPoint): void {\n    const nextRect = this._calcNextRect(delta);\n    this._applyConstraints(nextRect);\n    this._commitRect(nextRect);\n    this._applyConnectionHandlers(this._nodeConnections);\n\n    for (const parentConnections of this._softParentConnections) {\n      this._applyConnectionHandlers(parentConnections);\n    }\n\n    this._lastRect = nextRect;\n  }\n\n  public override onPointerUp(): void {\n    const rect = this._lastRect ?? this._fallbackRectFromModel();\n    this._nodeOrGroup.sizeChange.emit(rect);\n\n    this._reflowOrchestrator.handleResize(this._nodeOrGroup, this._baselineRect);\n\n    requestAnimationFrame(() => this._nodeOrGroup.refresh());\n  }\n\n  // --------------------------\n  // Build\n  // --------------------------\n\n  private _readBaselineRect(): IRect {\n    return this._mediator.execute<IRect>(\n      new GetNormalizedElementRectRequest(this._nodeOrGroup.hostElement),\n    );\n  }\n\n  private _buildConstraints(baselineRect: IRect): IResizeConstraint {\n    return this._mediator.execute<IResizeConstraint>(\n      new CalculateResizeLimitsRequest(this._nodeOrGroup, baselineRect),\n    );\n  }\n\n  // --------------------------\n  // Apply\n  // --------------------------\n\n  private _calcNextRect(delta: IPoint): IRect {\n    return this._mediator.execute<IRect>(\n      new CalculateChangedRectFromDifferenceRequest(\n        this._baselineRect,\n        delta,\n        this._handleType,\n        this._constraints.minimumSize,\n      ),\n    );\n  }\n\n  private _applyConstraints(rect: IRect): void {\n    this._mediator.execute(\n      new ApplyChildResizeConstraintsRequest(rect, this._constraints.childrenBounds),\n    );\n\n    this._mediator.execute(new ApplyParentResizeConstraintsRequest(rect, this._constraints.limits));\n  }\n\n  private _commitRect(rect: IRect): void {\n    this._nodeOrGroup.updatePosition({ x: rect.x, y: rect.y });\n    this._nodeOrGroup.updateSize({ width: rect.width, height: rect.height });\n    this._mediator.execute(new SetFCacheNodeRectRequest(this._nodeOrGroup.fId(), rect));\n    this._nodeOrGroup.redraw();\n  }\n\n  private _fallbackRectFromModel(): IRect {\n    return RectExtensions.initialize(\n      this._nodeOrGroup._position.x,\n      this._nodeOrGroup._position.y,\n      this._nodeOrGroup._size?.width,\n      this._nodeOrGroup._size?.height,\n    );\n  }\n\n  private _applyConnectionHandlers(handlers: IResizeNodeConnectionHandlers): void {\n    if (!handlers.source.length && !handlers.target.length) {\n      return;\n    }\n\n    const currentRectByConnectorId = new Map<string, IRoundedRect>();\n\n    for (const source of handlers.source) {\n      const currentRect = this._readConnectorRect(source.connector, currentRectByConnectorId);\n      source.handler.setSourceRect(currentRect);\n    }\n\n    for (const target of handlers.target) {\n      const currentRect = this._readConnectorRect(target.connector, currentRectByConnectorId);\n      target.handler.setTargetRect(currentRect);\n    }\n  }\n\n  private _readConnectorRect(\n    connector: FConnectorBase,\n    cache: Map<string, IRoundedRect>,\n  ): IRoundedRect {\n    const cacheKey = `${connector.kind}::${connector.fId()}`;\n    const cached = cache.get(cacheKey);\n    if (cached) {\n      return cached;\n    }\n\n    const rect = this._mediator.execute<IRoundedRect>(\n      new GetNormalizedConnectorRectRequest(connector.hostElement, false),\n    );\n    cache.set(cacheKey, rect);\n\n    return rect;\n  }\n}\n","import { ILine, IRoundedRect, RoundedRect } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  GetNormalizedConnectorRectRequest,\n  IConnectorRectRef,\n  ResolveConnectionEndpointRotationContextRequest,\n} from '../../../../domain';\nimport { FConnectorBase } from '../../../../f-connectors';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { inject } from '@angular/core';\nimport {\n  ConnectionBehaviourBuilder,\n  ConnectionBehaviourBuilderRequest,\n  FConnectionBase,\n  IConnectionEndpointRotationContext,\n} from '../../../../f-connection-v2';\nimport { SetFCacheConnectorRectRequest } from '../../../../f-cache';\n\nexport class ResizeNodeConnectionHandlerBase {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _behaviour = inject(ConnectionBehaviourBuilder);\n\n  private _source!: FConnectorBase;\n  private _target!: FConnectorBase;\n\n  private _sourceRef!: IConnectorRectRef;\n  private _targetRef!: IConnectorRectRef;\n\n  private _sourceRect!: IRoundedRect;\n  private _targetRect!: IRoundedRect;\n\n  public connection!: FConnectionBase;\n\n  public initialize(connection: FConnectionBase): void {\n    this.connection = connection;\n\n    this._source = this._store.outputs.require(this.connection.fOutputId());\n    this._target = this._store.inputs.require(this.connection.fInputId());\n\n    this._sourceRef = this._readRectRef(this._source);\n    this._targetRef = this._readRectRef(this._target);\n\n    this._sourceRect = RoundedRect.fromRoundedRect(this._sourceRef.rect);\n    this._targetRect = RoundedRect.fromRoundedRect(this._targetRef.rect);\n  }\n\n  public setSourceRect(rect: IRoundedRect): void {\n    this._sourceRect = RoundedRect.fromRoundedRect(rect);\n    this._mediator.execute(\n      new SetFCacheConnectorRectRequest(this._source.fId(), this._source.kind, this._sourceRect),\n    );\n  }\n\n  public setTargetRect(rect: IRoundedRect): void {\n    this._targetRect = RoundedRect.fromRoundedRect(rect);\n    this._mediator.execute(\n      new SetFCacheConnectorRectRequest(this._target.fId(), this._target.kind, this._targetRect),\n    );\n  }\n\n  protected redraw(): void {\n    const line = this._buildLine();\n    this.connection.setLine(line);\n    this.connection.redraw();\n  }\n\n  private _buildLine(): ILine {\n    const sourceRect = RoundedRect.fromRoundedRect(this._sourceRect);\n    const targetRect = RoundedRect.fromRoundedRect(this._targetRect);\n\n    return this._behaviour.handle(\n      new ConnectionBehaviourBuilderRequest(\n        sourceRect,\n        targetRect,\n        this.connection,\n        this._sourceRef.connector.fConnectableSide,\n        this._targetRef.connector.fConnectableSide,\n        this._resolveRotationContext(this._sourceRef.connector),\n        this._resolveRotationContext(this._targetRef.connector),\n      ),\n    );\n  }\n\n  private _readRectRef(connector: FConnectorBase): IConnectorRectRef {\n    return {\n      connector,\n      rect: this._mediator.execute<IRoundedRect>(\n        new GetNormalizedConnectorRectRequest(connector.hostElement, false),\n      ),\n    };\n  }\n\n  private _resolveRotationContext(\n    connector?: FConnectorBase,\n  ): IConnectionEndpointRotationContext | undefined {\n    return this._mediator.execute<IConnectionEndpointRotationContext | undefined>(\n      new ResolveConnectionEndpointRotationContextRequest(connector),\n    );\n  }\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { Injectable } from '@angular/core';\nimport { ResizeNodeConnectionHandlerBase } from './resize-node-connection-handler-base';\n\n@Injectable()\nexport class ResizeNodeConnectionBothSidesHandler extends ResizeNodeConnectionHandlerBase {\n  private _sourceUpdated = false;\n  private _targetUpdated = false;\n\n  public override setSourceRect(rect: IRoundedRect): void {\n    super.setSourceRect(rect);\n    this._sourceUpdated = true;\n    this._redrawIfReady();\n  }\n\n  public override setTargetRect(rect: IRoundedRect): void {\n    super.setTargetRect(rect);\n    this._targetUpdated = true;\n    this._redrawIfReady();\n  }\n\n  private _redrawIfReady(): void {\n    if (!this._sourceUpdated || !this._targetUpdated) {\n      return;\n    }\n\n    this._sourceUpdated = false;\n    this._targetUpdated = false;\n\n    super.redraw();\n  }\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { Injectable } from '@angular/core';\nimport { ResizeNodeConnectionHandlerBase } from './resize-node-connection-handler-base';\n\n@Injectable()\nexport class ResizeNodeConnectionSourceHandler extends ResizeNodeConnectionHandlerBase {\n  public override setSourceRect(rect: IRoundedRect): void {\n    super.setSourceRect(rect);\n    super.redraw();\n  }\n}\n","import { IRoundedRect } from '@foblex/2d';\nimport { Injectable } from '@angular/core';\nimport { ResizeNodeConnectionHandlerBase } from './resize-node-connection-handler-base';\n\n@Injectable()\nexport class ResizeNodeConnectionTargetHandler extends ResizeNodeConnectionHandlerBase {\n  public override setTargetRect(rect: IRoundedRect): void {\n    super.setTargetRect(rect);\n    super.redraw();\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport { IPointerEvent } from '../../infrastructure';\n\nexport class ResizeNodePreparationRequest {\n  static readonly fToken = Symbol('ResizeNodePreparationRequest');\n\n  constructor(\n    public readonly event: IPointerEvent,\n    public readonly fTrigger: FEventTrigger,\n  ) {}\n}\n","import { FNodeBase } from '../../../../f-node';\nimport { ResizeNodeHandler } from '../../resize-node-handler';\n\nexport class AttachResizeConnectionDragHandlersToNodeRequest {\n  static readonly fToken = Symbol('AttachResizeConnectionDragHandlersToNodeRequest');\n\n  constructor(\n    public readonly handler: ResizeNodeHandler,\n    public readonly nodeOrGroup: FNodeBase,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { AttachResizeConnectionDragHandlersToNodeRequest } from './attach-resize-connection-drag-handlers-to-node-request';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FNodeBase } from '../../../../f-node';\nimport { FConnectionBase } from '../../../../f-connection-v2';\nimport {\n  ResizeNodeConnectionBothSidesHandler,\n  ResizeNodeConnectionHandlerBase,\n  ResizeNodeConnectionSourceHandler,\n  ResizeNodeConnectionTargetHandler,\n} from '../../resize-node-handler';\nimport { IRect } from '@foblex/2d';\nimport { GetNormalizedElementRectRequest } from '../../../../domain';\nimport { DragHandlerInjector } from '../../../infrastructure';\nimport { CalculateResizeLimitsRequest } from '../../calculate-resize-limits';\nimport { IResizeNodeConnectionHandlers } from '../../resize-node-handler';\nimport { IResizeConstraint, IResizeLimit } from '../../constraint';\n\n@Injectable()\n@FExecutionRegister(AttachResizeConnectionDragHandlersToNodeRequest)\nexport class AttachResizeConnectionDragHandlersToNode\n  implements IExecution<AttachResizeConnectionDragHandlersToNodeRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  public handle({ handler, nodeOrGroup }: AttachResizeConnectionDragHandlersToNodeRequest): void {\n    const softParents = this._readSoftParents(nodeOrGroup);\n    const involvedNodes = [nodeOrGroup, ...softParents];\n\n    const involvedSourceIds = this._collectSourceConnectorIds(involvedNodes);\n    const involvedTargetIds = this._collectTargetConnectorIds(involvedNodes);\n    const connectionHandlerPool = new Map<string, ResizeNodeConnectionHandlerBase>();\n\n    handler.setNodeConnectionHandlers(\n      this._buildConnectionHandlersForNode(\n        nodeOrGroup,\n        involvedSourceIds,\n        involvedTargetIds,\n        connectionHandlerPool,\n      ),\n    );\n\n    handler.setSoftParentConnectionHandlers(\n      softParents.map((parent) =>\n        this._buildConnectionHandlersForNode(\n          parent,\n          involvedSourceIds,\n          involvedTargetIds,\n          connectionHandlerPool,\n        ),\n      ),\n    );\n  }\n\n  private _readSoftParents(nodeOrGroup: FNodeBase): FNodeBase[] {\n    const baselineRect = this._mediator.execute<IRect>(\n      new GetNormalizedElementRectRequest(nodeOrGroup.hostElement),\n    );\n    const constraints = this._mediator.execute<IResizeConstraint>(\n      new CalculateResizeLimitsRequest(nodeOrGroup, baselineRect),\n    );\n\n    return constraints.limits.softLimits.map((x: IResizeLimit) => x.nodeOrGroup);\n  }\n\n  private _collectSourceConnectorIds(nodes: FNodeBase[]): Set<string> {\n    const nodeIds = new Set(nodes.map((x) => x.fId()));\n\n    return new Set(\n      this._store.outputs\n        .getAll()\n        .filter((x) => nodeIds.has(x.fNodeId))\n        .map((x) => x.fId()),\n    );\n  }\n\n  private _collectTargetConnectorIds(nodes: FNodeBase[]): Set<string> {\n    const nodeIds = new Set(nodes.map((x) => x.fId()));\n\n    return new Set(\n      this._store.inputs\n        .getAll()\n        .filter((x) => nodeIds.has(x.fNodeId))\n        .map((x) => x.fId()),\n    );\n  }\n\n  private _buildConnectionHandlersForNode(\n    nodeOrGroup: FNodeBase,\n    involvedSourceIds: Set<string>,\n    involvedTargetIds: Set<string>,\n    connectionHandlerPool: Map<string, ResizeNodeConnectionHandlerBase>,\n  ): IResizeNodeConnectionHandlers {\n    const outputs = this._store.outputs.getAll().filter((x) => x.fNodeId === nodeOrGroup.fId());\n    const inputs = this._store.inputs.getAll().filter((x) => x.fNodeId === nodeOrGroup.fId());\n\n    if (!outputs.length && !inputs.length) {\n      return { source: [], target: [] };\n    }\n\n    const outputIds = new Set(outputs.map((x) => x.fId()));\n    const inputIds = new Set(inputs.map((x) => x.fId()));\n\n    const result: IResizeNodeConnectionHandlers = { source: [], target: [] };\n\n    for (const connection of this._store.connections.getAll()) {\n      const isSource = outputIds.has(connection.fOutputId());\n      const isTarget = inputIds.has(connection.fInputId());\n      if (!isSource && !isTarget) {\n        continue;\n      }\n\n      const connectionHandler =\n        connectionHandlerPool.get(connection.fId()) ??\n        this._createConnectionHandler(connection, involvedSourceIds, involvedTargetIds);\n      connectionHandlerPool.set(connection.fId(), connectionHandler);\n\n      if (isSource) {\n        const sourceConnector = this._store.outputs.require(connection.fOutputId());\n        result.source.push({\n          handler: connectionHandler,\n          connector: sourceConnector,\n        });\n      }\n\n      if (isTarget) {\n        const targetConnector = this._store.inputs.require(connection.fInputId());\n        result.target.push({\n          handler: connectionHandler,\n          connector: targetConnector,\n        });\n      }\n    }\n\n    return result;\n  }\n\n  private _createConnectionHandler(\n    connection: FConnectionBase,\n    involvedSourceIds: Set<string>,\n    involvedTargetIds: Set<string>,\n  ): ResizeNodeConnectionHandlerBase {\n    const isSource = involvedSourceIds.has(connection.fOutputId());\n    const isTarget = involvedTargetIds.has(connection.fInputId());\n\n    const result =\n      isSource && isTarget\n        ? this._dragInjector.createInstance(ResizeNodeConnectionBothSidesHandler)\n        : isSource\n          ? this._dragInjector.createInstance(ResizeNodeConnectionSourceHandler)\n          : this._dragInjector.createInstance(ResizeNodeConnectionTargetHandler);\n\n    result.initialize(connection);\n\n    return result;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ResizeNodePreparationRequest } from './resize-node-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 { isValidEventTrigger, SelectAndUpdateNodeLayerRequest } from '../../../domain';\nimport { EFResizeHandleType, FNodeBase } from '../../../f-node';\nimport { ResizeNodeHandler } from '../resize-node-handler';\nimport {\n  getDataAttrValueFromClosestElementWithClass,\n  isClosestElementHasClass,\n} from '@foblex/utils';\nimport { DragHandlerInjector } from '../../infrastructure';\nimport { AttachResizeConnectionDragHandlersToNodeRequest } from './attach-resize-connection-drag-handlers-to-node';\n\n@Injectable()\n@FExecutionRegister(ResizeNodePreparationRequest)\nexport class ResizeNodePreparation implements IExecution<ResizeNodePreparationRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  public handle({ event, fTrigger }: ResizeNodePreparationRequest): void {\n    if (!this._dragSession.isEmpty()) {\n      return;\n    }\n\n    if (!this._isResizeHandle(event.targetElement)) {\n      return;\n    }\n\n    if (!isValidEventTrigger(event.originalEvent, fTrigger)) {\n      return;\n    }\n\n    const nodeOrGroup = this._findResizableNode(event.targetElement);\n    if (!nodeOrGroup) {\n      return;\n    }\n\n    this._selectBeforeResize(nodeOrGroup);\n\n    const scale = this._transform.scale ?? 1;\n    this._dragSession.onPointerDownScale = scale;\n    this._dragSession.onPointerDownPosition = Point.fromPoint(event.getPosition())\n      .elementTransform(this._store.flowHost)\n      .div(scale);\n\n    const handler = this._dragInjector.createInstance(ResizeNodeHandler);\n    handler.initialize(nodeOrGroup, this._readResizeHandleType(event.targetElement));\n    this._mediator.execute<void>(\n      new AttachResizeConnectionDragHandlersToNodeRequest(handler, nodeOrGroup),\n    );\n\n    this._dragSession.draggableItems = [handler];\n  }\n\n  private _isResizeHandle(target: HTMLElement): boolean {\n    return isClosestElementHasClass(target, '.f-resize-handle');\n  }\n\n  private _findResizableNode(target: HTMLElement): FNodeBase | undefined {\n    const nodeOrGroup = this._store.nodes.getAll().find((x) => x.isContains(target));\n    if (!nodeOrGroup) {\n      return undefined;\n    }\n\n    return nodeOrGroup.fDraggingDisabled() ? undefined : nodeOrGroup;\n  }\n\n  private _selectBeforeResize(nodeOrGroup: FNodeBase): void {\n    queueMicrotask(() => {\n      this._mediator.execute<void>(new SelectAndUpdateNodeLayerRequest(nodeOrGroup));\n    });\n  }\n\n  private _readResizeHandleType(target: HTMLElement): EFResizeHandleType {\n    const key = getDataAttrValueFromClosestElementWithClass(\n      target,\n      'fResizeHandleType',\n      '.f-resize-handle',\n    ) as keyof typeof EFResizeHandleType;\n\n    return EFResizeHandleType[key];\n  }\n}\n","import { ResizeNodeFinalize } from './resize-node-finalize';\nimport { ResizeNodePreparation } 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';\nimport { AttachResizeConnectionDragHandlersToNode } from './resize-preparation';\n\nexport const NODE_RESIZE_PROVIDERS = [\n  ApplyChildResizeConstraints,\n\n  ApplyParentResizeConstraints,\n\n  CalculateChangedRectFromDifference,\n\n  CalculateDirectChildrenUnionRect,\n\n  CalculateResizeLimits,\n\n  AttachResizeConnectionDragHandlersToNode,\n\n  ResizeNodeFinalize,\n\n  ResizeNodePreparation,\n];\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class RotateNodeFinalizeRequest {\n  static readonly fToken = Symbol('RotateNodeFinalizeRequest');\n\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { DragHandlerBase } from '../infrastructure';\nimport { RotateNodeHandler } from './rotate-node-handler';\n\nexport const ROTATE_NODE_HANDLER_TYPE = 'node-rotate';\nexport const ROTATE_NODE_HANDLER_KIND = 'rotate-node';\n\nexport function isRotateNodeHandler(value: DragHandlerBase<unknown>): value is RotateNodeHandler {\n  return (\n    value.getEvent().kind === ROTATE_NODE_HANDLER_KIND ||\n    value.getEvent().fEventType === ROTATE_NODE_HANDLER_TYPE\n  );\n}\n","import { inject, Injectable } from '@angular/core';\nimport { RotateNodeFinalizeRequest } from './rotate-node-finalize-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { isRotateNodeHandler } from '../is-rotate-node-handler';\n\n@Injectable()\n@FExecutionRegister(RotateNodeFinalizeRequest)\nexport class RotateNodeFinalize implements IExecution<RotateNodeFinalizeRequest, void> {\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  public handle(_request: RotateNodeFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    this._dragSession.draggableItems.forEach((x) => {\n      x.onPointerUp?.();\n    });\n  }\n\n  private _isValid(): boolean {\n    return this._dragSession.draggableItems.some((x) => isRotateNodeHandler(x));\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport { IPointerEvent } from '../../infrastructure';\n\nexport class RotateNodePreparationRequest {\n  static readonly fToken = Symbol('RotateNodePreparationRequest');\n\n  constructor(\n    public readonly event: IPointerEvent,\n    public readonly fTrigger: FEventTrigger,\n  ) {}\n}\n","export class FRotateNodeStartEventData {\n  constructor(public readonly fNodeId: string) {}\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  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","import { IPoint, IRect, ITransformModel, PointExtensions } from '@foblex/2d';\nimport { DragHandlerBase } from '../../infrastructure';\nimport { FRotateNodeStartEventData } from '../f-rotate-node-start-event-data';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FMediator } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { inject, Injectable } from '@angular/core';\nimport { FNodeBase } from '../../../f-node';\nimport { DragNodeConnectionHandlerBase } from '../../drag-node';\nimport { GetNormalizedElementRectRequest } from '../../../domain';\nimport { calculateDifferenceAfterRotation } from '../calculate-difference-after-rotation';\nimport { ROTATE_NODE_HANDLER_KIND, ROTATE_NODE_HANDLER_TYPE } from '../is-rotate-node-handler';\n\ntype TRotateConnectionHandler = {\n  connection: DragNodeConnectionHandlerBase;\n  connector: IPoint;\n};\n\n@Injectable()\nexport class RotateNodeHandler extends DragHandlerBase<FRotateNodeStartEventData> {\n  protected readonly type = ROTATE_NODE_HANDLER_TYPE;\n  protected readonly kind = ROTATE_NODE_HANDLER_KIND;\n\n  protected override data() {\n    return new FRotateNodeStartEventData(this._nodeOrGroup.fId());\n  }\n\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  private _nodeOrGroup!: FNodeBase;\n  private _sourceConnections!: TRotateConnectionHandler[];\n  private _targetConnections!: TRotateConnectionHandler[];\n\n  private _startRotation: number = 0;\n\n  private _nodeRect!: IRect;\n  private _nodeCenter!: IPoint;\n\n  private _pointerDownInFlow!: IPoint;\n\n  /**\n   * Difference between pointer angle and node rotation at pointer-down.\n   * This lets us keep rotation “locked” to the initial grab angle.\n   */\n  private _rotationOffsetDeg = 0;\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  public initialize(\n    nodeOrGroup: FNodeBase,\n    sourceConnections: TRotateConnectionHandler[],\n    targetConnections: TRotateConnectionHandler[],\n  ): void {\n    this._nodeOrGroup = nodeOrGroup;\n    this._sourceConnections = sourceConnections;\n    this._targetConnections = targetConnections;\n\n    this._startRotation = this._nodeOrGroup._rotate;\n  }\n\n  public override prepareDragSequence(): void {\n    this._nodeRect = this._readNodeRect();\n    this._nodeCenter = this._nodeRect.gravityCenter;\n\n    this._pointerDownInFlow = this._calculatePointerDownInFlow();\n    const pointerAngleDeg = this._angleDeg(this._pointerDownInFlow);\n\n    // pointerAngle - nodeRotation => offset\n    this._rotationOffsetDeg = pointerAngleDeg - this._startRotation;\n  }\n\n  public onPointerMove(delta: IPoint): void {\n    const pointerPos = PointExtensions.sum(this._pointerDownInFlow, delta);\n    const pointerAngleDeg = this._angleDeg(pointerPos);\n\n    const nextRotation = pointerAngleDeg - this._rotationOffsetDeg;\n    this._applyRotation(nextRotation);\n\n    const rotationDelta = nextRotation - this._startRotation;\n\n    for (const h of this._sourceConnections) {\n      h.connection.setSourceDelta(this._deltaAfterRotation(h.connector, rotationDelta));\n    }\n\n    for (const h of this._targetConnections) {\n      h.connection.setTargetDelta(this._deltaAfterRotation(h.connector, rotationDelta));\n    }\n  }\n\n  public override onPointerUp(): void {\n    this._nodeOrGroup.rotate.set(this._nodeOrGroup._rotate);\n    this._nodeOrGroup.refresh();\n  }\n\n  private _readNodeRect(): IRect {\n    return this._mediator.execute<IRect>(\n      new GetNormalizedElementRectRequest(this._nodeOrGroup.hostElement),\n    );\n  }\n\n  private _calculatePointerDownInFlow(): IPoint {\n    return PointExtensions.sub(\n      this._dragSession.onPointerDownPosition,\n      PointExtensions.sum(this._transform.position, this._transform.scaledPosition),\n    );\n  }\n\n  private _angleDeg(p: IPoint): number {\n    return Math.atan2(p.y - this._nodeCenter.y, p.x - this._nodeCenter.x) * (180 / Math.PI);\n  }\n\n  private _applyRotation(rotationDeg: number): void {\n    this._nodeOrGroup.updateRotate(rotationDeg);\n    this._nodeOrGroup.redraw();\n  }\n\n  private _deltaAfterRotation(connector: IPoint, rotationDeltaDeg: number): IPoint {\n    return calculateDifferenceAfterRotation(connector, rotationDeltaDeg, this._nodeCenter);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { RotateNodePreparationRequest } from './rotate-node-preparation-request';\nimport { IPoint, 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  GetConnectorRectReferenceRequest,\n  IConnectorRectRef,\n  isValidEventTrigger,\n  SelectAndUpdateNodeLayerRequest,\n} from '../../../domain';\nimport { FNodeBase, isRotateHandle } from '../../../f-node';\nimport { RotateNodeHandler } from '../rotate-node-handler';\nimport { DragHandlerInjector } from '../../infrastructure';\nimport {\n  DragNodeConnectionHandlerBase,\n  DragNodeConnectionSourceHandler,\n  DragNodeConnectionTargetHandler,\n} from '../../drag-node';\nimport { FConnectionBase } from '../../../f-connection-v2';\n\ntype TRotateConnectionHandler = {\n  connection: DragNodeConnectionHandlerBase;\n  connector: IPoint;\n};\n\n@Injectable()\n@FExecutionRegister(RotateNodePreparationRequest)\nexport class RotateNodePreparation implements IExecution<RotateNodePreparationRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  private get _transform(): ITransformModel {\n    return this._store.transform;\n  }\n\n  public handle(request: RotateNodePreparationRequest): void {\n    if (!this._isPreparationAllowed(request)) {\n      return;\n    }\n\n    const nodeOrGroup = this._findRotatableNode(request.event.targetElement);\n    if (!nodeOrGroup) {\n      return;\n    }\n\n    this._selectBeforeRotate(nodeOrGroup);\n\n    const scale = this._transform.scale;\n    this._dragContext.onPointerDownScale = scale;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition())\n      .elementTransform(this._store.flowHost)\n      .div(scale);\n\n    const handler = this._dragInjector.createInstance(RotateNodeHandler);\n    handler.initialize(\n      nodeOrGroup,\n      this._buildOutputConnectionHandlers(nodeOrGroup),\n      this._buildInputConnectionHandlers(nodeOrGroup),\n    );\n\n    this._dragContext.draggableItems = [handler];\n  }\n\n  private _isPreparationAllowed({ event, fTrigger }: RotateNodePreparationRequest): boolean {\n    return (\n      this._dragContext.isEmpty() &&\n      isRotateHandle(event.targetElement) &&\n      isValidEventTrigger(event.originalEvent, fTrigger)\n    );\n  }\n\n  private _findRotatableNode(target: HTMLElement): FNodeBase | undefined {\n    for (const node of this._store.nodes.getAll()) {\n      if (node.fDraggingDisabled()) {\n        continue;\n      }\n\n      if (node.isContains(target)) {\n        return node;\n      }\n    }\n\n    return undefined;\n  }\n\n  private _selectBeforeRotate(node: FNodeBase): void {\n    queueMicrotask(() => {\n      this._mediator.execute<void>(new SelectAndUpdateNodeLayerRequest(node));\n    });\n  }\n\n  private _buildInputConnectionHandlers(nodeOrGroup: FNodeBase): TRotateConnectionHandler[] {\n    return this._mediator\n      .execute<FConnectionBase[]>(new CalculateInputConnectionsRequest(nodeOrGroup))\n      .map((x) => {\n        const connector = this._store.inputs.require(x.fInputId());\n        const connectorRef = this._mediator.execute<IConnectorRectRef>(\n          new GetConnectorRectReferenceRequest(connector),\n        );\n        const handler = this._dragInjector.get(DragNodeConnectionTargetHandler);\n        handler.initialize(x);\n\n        return {\n          connection: handler,\n          connector: connectorRef.rect.gravityCenter,\n        };\n      });\n  }\n\n  private _buildOutputConnectionHandlers(nodeOrGroup: FNodeBase): TRotateConnectionHandler[] {\n    return this._mediator\n      .execute<FConnectionBase[]>(new CalculateOutputConnectionsRequest(nodeOrGroup))\n      .map((x) => {\n        const connector = this._store.outputs.require(x.fOutputId());\n        const connectorRef = this._mediator.execute<IConnectorRectRef>(\n          new GetConnectorRectReferenceRequest(connector),\n        );\n        const handler = this._dragInjector.get(DragNodeConnectionSourceHandler);\n        handler.initialize(x);\n\n        return {\n          connection: handler,\n          connector: connectorRef.rect.gravityCenter,\n        };\n      });\n  }\n}\n","import { RotateNodeFinalize } from './rotate-node-finalize';\nimport { RotateNodePreparation } from './rotate-node-preparation';\n\nexport const NODE_ROTATE_PROVIDERS = [RotateNodeFinalize, RotateNodePreparation];\n","import { IPoint, IRect } from '@foblex/2d';\nimport { FMinimapState } from '../../../domain';\n\nexport class CalculateFlowPointFromMinimapPointRequest {\n  static readonly fToken = Symbol('CalculateFlowPointFromMinimapPointRequest');\n\n  constructor(\n    public readonly flowRect: IRect,\n    public readonly canvasPosition: IPoint,\n    public readonly eventPoint: IPoint,\n    public readonly minimap: FMinimapState,\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 { FMinimapState } from '../../../domain';\n\n@Injectable()\n@FExecutionRegister(CalculateFlowPointFromMinimapPointRequest)\nexport class CalculateFlowPointFromMinimapPoint implements IExecution<\n  CalculateFlowPointFromMinimapPointRequest,\n  IPoint\n> {\n  private readonly _store = inject(FComponentsStore);\n\n  private get _canvasScale(): number {\n    return this._store.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: FMinimapState): 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: FMinimapState): Point {\n    return this._getEventPointInMinimap(point, minimap).mult(minimap.scale).mult(this._canvasScale);\n  }\n\n  private _getEventPointInMinimap(eventPoint: IPoint, minimap: FMinimapState): Point {\n    return Point.fromPoint(eventPoint).elementTransform(minimap.element as unknown as HTMLElement);\n  }\n}\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class DragMinimapFinalizeRequest {\n  static readonly fToken = Symbol('DragMinimapFinalizeRequest');\n\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DragMinimapFinalizeRequest } from './drag-minimap-finalize-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext, isDragMinimapHandler } from '../../../f-draggable';\n\n@Injectable()\n@FExecutionRegister(DragMinimapFinalizeRequest)\nexport class DragMinimapFinalize implements IExecution<DragMinimapFinalizeRequest, void> {\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  public handle(_request: DragMinimapFinalizeRequest): void {\n    if (!this._isValid()) {\n      return;\n    }\n    this._dragSession.draggableItems.forEach((x) => {\n      x.onPointerUp?.();\n    });\n  }\n\n  private _isValid(): boolean {\n    return this._dragSession.draggableItems.some(isDragMinimapHandler);\n  }\n}\n","import { DragHandlerBase } from '../infrastructure';\nimport { DragMinimapHandler } from './drag-minimap-handler';\n\nexport const DRAG_MINIMAP_HANDLER_TYPE = 'minimap';\nexport const DRAG_MINIMAP_HANDLER_KIND = 'minimap';\n\nexport function isDragMinimapHandler(value: DragHandlerBase<unknown>): value is DragMinimapHandler {\n  return (\n    value.getEvent().kind === DRAG_MINIMAP_HANDLER_KIND ||\n    value.getEvent().fEventType === DRAG_MINIMAP_HANDLER_TYPE\n  );\n}\n","import { IPoint, IRect, Point } from '@foblex/2d';\nimport { DragHandlerBase } from '../../infrastructure';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FMediator } from '@foblex/mediator';\nimport { DRAG_MINIMAP_HANDLER_KIND, DRAG_MINIMAP_HANDLER_TYPE } from '../is-drag-minimap-handler';\nimport { inject, Injectable } from '@angular/core';\nimport { CalculateFlowPointFromMinimapPointRequest } from '../calculate-flow-point-from-minimap-point';\nimport { FMinimapState } from '../../../domain';\n\n@Injectable()\nexport class DragMinimapHandler extends DragHandlerBase<unknown> {\n  protected readonly type = DRAG_MINIMAP_HANDLER_TYPE;\n  protected readonly kind = DRAG_MINIMAP_HANDLER_KIND;\n\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  private _lastDelta: IPoint | null = null;\n\n  private _flowRect!: IRect;\n  private _startCanvasPosition!: IPoint;\n  private _eventPoint!: IPoint;\n  private _minimap!: FMinimapState;\n\n  public initialize(\n    flowRect: IRect,\n    startCanvasPosition: IPoint,\n    eventPoint: IPoint,\n    minimap: FMinimapState,\n  ): void {\n    this._flowRect = flowRect;\n    this._startCanvasPosition = startCanvasPosition;\n    this._eventPoint = eventPoint;\n    this._minimap = minimap;\n  }\n\n  public override prepareDragSequence(): void {\n    this._store.fCanvas?.hostElement.classList.add('f-scaled-animate');\n  }\n\n  public override onPointerMove(delta: IPoint): void {\n    if (this._lastDelta && this._isSamePoint(delta, this._lastDelta)) {\n      return;\n    }\n\n    this._lastDelta = delta;\n    this._store.fCanvas?._setPosition(\n      this._getNewPosition(Point.fromPoint(this._eventPoint).add(delta)),\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._startCanvasPosition,\n        eventPoint,\n        this._minimap,\n      ),\n    );\n  }\n\n  public override onPointerUp(): void {\n    this._store.fCanvas?.hostElement.classList.remove('f-scaled-animate');\n    this._store.fCanvas?.emitCanvasChangeEvent();\n  }\n}\n","import { IPointerEvent } from '../../infrastructure';\n\nexport class DragMinimapPreparationRequest {\n  static readonly fToken = Symbol('DragMinimapPreparationRequest');\n\n  constructor(public readonly event: IPointerEvent) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DragMinimapPreparationRequest } from './drag-minimap-preparation-request';\nimport { IPoint, IRect, Point, RectExtensions } from '@foblex/2d';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore, INSTANCES } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { FCanvasBase } from '../../../f-canvas';\nimport { DragMinimapHandler } from '../drag-minimap-handler';\nimport { DragHandlerInjector } from '../../infrastructure';\nimport { CalculateFlowPointFromMinimapPointRequest } from '../calculate-flow-point-from-minimap-point';\nimport { FMinimapState } from '../../../domain';\nimport { IPointerEvent } from '../../infrastructure';\n\n@Injectable()\n@FExecutionRegister(DragMinimapPreparationRequest)\nexport class DragMinimapPreparation implements IExecution<DragMinimapPreparationRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n  private readonly _dragSession = inject(FDraggableDataContext);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  private get _flowHost(): HTMLElement {\n    return this._store.flowHost;\n  }\n\n  public handle({ event }: DragMinimapPreparationRequest): void {\n    if (!this._isValid(event)) {\n      return;\n    }\n\n    const state = this._store.instances.require(INSTANCES.MINIMAP).state;\n\n    const eventPoint = event.getPosition();\n    const startCanvasPosition = Point.fromPoint(this._store.transform.position);\n    const flowRect = RectExtensions.fromElement(this._flowHost);\n\n    this._canvas._setPosition(this._calculateCanvasPosition(flowRect, eventPoint, state));\n    this._canvas.redraw();\n    this._canvas.emitCanvasChangeEvent();\n\n    this._dragSession.onPointerDownScale = 1;\n    this._dragSession.onPointerDownPosition = Point.fromPoint(eventPoint).elementTransform(\n      this._flowHost,\n    );\n\n    const handler = this._dragInjector.createInstance(DragMinimapHandler);\n    handler.initialize(flowRect, startCanvasPosition, eventPoint, state);\n\n    this._dragSession.draggableItems = [handler];\n  }\n\n  private _isValid(event: IPointerEvent): boolean {\n    if (!this._dragSession.isEmpty()) {\n      return false;\n    }\n\n    if (!this._flowHost.contains(event.targetElement)) {\n      return false;\n    }\n\n    if (!event.targetElement.closest('.f-minimap')) {\n      return false;\n    }\n\n    if (!this._store.instances.get(INSTANCES.MINIMAP)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  private _calculateCanvasPosition(\n    flowRect: IRect,\n    eventPoint: IPoint,\n    minimap: FMinimapState,\n  ): IPoint {\n    return this._mediator.execute<IPoint>(\n      new CalculateFlowPointFromMinimapPointRequest(\n        flowRect,\n        Point.fromPoint(this._canvas.transform.position),\n        eventPoint,\n        minimap,\n      ),\n    );\n  }\n}\n","import { CalculateFlowPointFromMinimapPoint } from './calculate-flow-point-from-minimap-point';\nimport { DragMinimapFinalize } from './drag-minimap-finalize';\nimport { DragMinimapPreparation } from './drag-minimap-preparation';\n\nexport const DRAG_MINIMAP_PROVIDERS = [\n  CalculateFlowPointFromMinimapPoint,\n\n  DragMinimapFinalize,\n\n  DragMinimapPreparation,\n];\n","import { inject, Injectable, Injector, ProviderToken, runInInjectionContext } from '@angular/core';\nimport { DragCanvasHandler } from '../drag-canvas';\nimport {\n  CreateConnectionHandler,\n  DragConnectionWaypointHandler,\n  ReassignConnectionHandler,\n} from '../connection';\nimport { DropToGroupHandler } from '../drop-to-group';\nimport {\n  DragNodeConnectionBothSidesHandler,\n  DragNodeConnectionSourceHandler,\n  DragNodeConnectionTargetHandler,\n  DragNodeHandler,\n} from '../drag-node';\nimport { PinchToZoomHandler } from '../pinch-to-zoom';\nimport { SelectionAreaHandler } from '../selection-area';\nimport { ResizeNodeHandler } from '../resize-node';\nimport { RotateNodeHandler } from '../rotate-node';\nimport { DragMinimapHandler } from '../drag-minimap';\n\ntype NoArgsCtor<T> = new () => T;\n\nexport interface IDestroyable {\n  destroy(): void;\n}\n\nfunction isDestroyable(value: unknown): value is IDestroyable {\n  return !!value && typeof (value as IDestroyable).destroy === 'function';\n}\n\ninterface IHasDestroy {\n  destroy?(): void;\n}\n\n@Injectable()\nexport class DragHandlerInjector {\n  private readonly _injector = inject(Injector);\n  private _dragInjector: Injector | null = null;\n\n  private _created: unknown[] = [];\n\n  public create(): void {\n    this._dragInjector = Injector.create({\n      providers: [\n        {\n          provide: DragCanvasHandler,\n          useClass: DragCanvasHandler,\n        },\n        {\n          provide: DragConnectionWaypointHandler,\n          useClass: DragConnectionWaypointHandler,\n        },\n        {\n          provide: CreateConnectionHandler,\n          useClass: CreateConnectionHandler,\n        },\n        {\n          provide: ReassignConnectionHandler,\n          useClass: ReassignConnectionHandler,\n        },\n        {\n          provide: DropToGroupHandler,\n          useClass: DropToGroupHandler,\n        },\n        {\n          provide: DragNodeConnectionSourceHandler,\n          useClass: DragNodeConnectionSourceHandler,\n        },\n        {\n          provide: DragNodeConnectionTargetHandler,\n          useClass: DragNodeConnectionTargetHandler,\n        },\n        {\n          provide: DragNodeConnectionBothSidesHandler,\n          useClass: DragNodeConnectionBothSidesHandler,\n        },\n        {\n          provide: DragNodeHandler,\n          useClass: DragNodeHandler,\n        },\n        {\n          provide: PinchToZoomHandler,\n          useClass: PinchToZoomHandler,\n        },\n        {\n          provide: SelectionAreaHandler,\n          useClass: SelectionAreaHandler,\n        },\n        {\n          provide: ResizeNodeHandler,\n          useClass: ResizeNodeHandler,\n        },\n        {\n          provide: RotateNodeHandler,\n          useClass: RotateNodeHandler,\n        },\n        {\n          provide: DragMinimapHandler,\n          useClass: DragMinimapHandler,\n        },\n      ],\n      parent: this._injector,\n    });\n\n    this._created = [];\n  }\n\n  public get<T>(token: ProviderToken<T>): T {\n    if (!this._dragInjector) {\n      throw new Error(\n        'DragHandlerInjector has not been created. Call create() before using get().',\n      );\n    }\n\n    return this._dragInjector.get(token);\n  }\n\n  public createInstance<T>(ctor: NoArgsCtor<T>): T {\n    if (!this._dragInjector) {\n      throw new Error('DragHandlerInjector is not created');\n    }\n\n    const instance = runInInjectionContext(this._dragInjector, () => new ctor());\n\n    this._created.push(instance);\n\n    return instance;\n  }\n\n  public destroy(): void {\n    for (const x of this._created) {\n      if (isDestroyable(x)) {\n        x.destroy();\n      }\n    }\n    this._created = [];\n\n    (this._dragInjector as IHasDestroy)?.destroy?.();\n    this._dragInjector = null;\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class FDragHandlerResult<T> {\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 { IPoint, Point, PointExtensions } from '@foblex/2d';\nimport { inject, Injectable } from '@angular/core';\nimport { DragHandlerBase } from '../../infrastructure';\nimport { FComponentsStore } from '../../../f-storage';\n\nconst F_CANVAS_DRAGGING_CLASS = 'f-canvas-dragging';\n/** @deprecated Use `f-canvas-dragging`. */\nconst LEGACY_CANVAS_DRAGGING_CLASS = 'canvas-dragging';\n\n@Injectable()\nexport class DragCanvasHandler extends DragHandlerBase<unknown> {\n  protected readonly type = 'canvas-move';\n  protected readonly kind = 'drag-canvas';\n\n  private readonly _store = inject(FComponentsStore);\n  private _onPointerDownPosition: IPoint = PointExtensions.initialize();\n\n  constructor() {\n    super();\n    this._store.fCanvas?.hostElement.classList.add(\n      F_CANVAS_DRAGGING_CLASS,\n      LEGACY_CANVAS_DRAGGING_CLASS,\n    );\n  }\n\n  public override prepareDragSequence(): void {\n    this._onPointerDownPosition = this._store.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 override onPointerUp(): void {\n    this._store.fCanvas?.emitCanvasChangeEvent();\n    this._store.fCanvas?.hostElement.classList.remove(\n      F_CANVAS_DRAGGING_CLASS,\n      LEGACY_CANVAS_DRAGGING_CLASS,\n    );\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DragCanvasFinalizeRequest } from './drag-canvas-finalize-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { DragCanvasHandler } from '../drag-canvas-handler';\n\n@Injectable()\n@FExecutionRegister(DragCanvasFinalizeRequest)\nexport class DragCanvasFinalize implements IExecution<DragCanvasFinalizeRequest, void> {\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(_request: DragCanvasFinalizeRequest): 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 DragCanvasHandler);\n  }\n}\n","import { FEventTrigger } from '../../../domain';\nimport { IPointerEvent } from '../../infrastructure';\n\nexport class DragCanvasPreparationRequest {\n  static readonly fToken = Symbol('DragCanvasPreparationRequest');\n  constructor(\n    public readonly event: IPointerEvent,\n    public readonly fTrigger: FEventTrigger,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DragCanvasPreparationRequest } from './drag-canvas-preparation-request';\nimport { Point } from '@foblex/2d';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore, INSTANCES } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../f-draggable-data-context';\nimport { DragCanvasHandler } from '../drag-canvas-handler';\nimport { FNodeBase } from '../../../f-node';\nimport { FEventTrigger, isValidEventTrigger } from '../../../domain';\nimport { DragHandlerInjector } from '../../infrastructure';\nimport { IPointerEvent } from '../../infrastructure';\n\n@Injectable()\n@FExecutionRegister(DragCanvasPreparationRequest)\nexport class DragCanvasPreparation implements IExecution<DragCanvasPreparationRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n  private readonly _dragInjector = inject(DragHandlerInjector);\n\n  public handle({ event, fTrigger }: DragCanvasPreparationRequest): void {\n    if (!this._isValid(event) || !this._isValidTrigger(event, fTrigger)) {\n      return;\n    }\n    this._dragContext.onPointerDownScale = 1;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(event.getPosition()).elementTransform(\n      this._store.flowHost,\n    );\n    this._dragContext.draggableItems = [this._dragInjector.get(DragCanvasHandler)];\n  }\n\n  private _isValid(event: IPointerEvent): boolean {\n    return (\n      this._dragContext.isEmpty() &&\n      (this._isBackgroundElement(event.targetElement) || this._isDragOnHost(event.targetElement))\n    );\n  }\n\n  private _isBackgroundElement(targetElement: HTMLElement): boolean | undefined {\n    return this._store.instances.get(INSTANCES.BACKGROUND)?.hostElement.contains(targetElement);\n  }\n\n  private _isDragOnHost(targetElement: HTMLElement): boolean {\n    return this._store.flowHost.contains(targetElement) && !this._getNode(targetElement);\n  }\n\n  private _getNode(targetElement: HTMLElement): FNodeBase | undefined {\n    let result = this._store.nodes.getAll().find((x) => x.isContains(targetElement));\n    if (result && result.fDraggingDisabled()) {\n      result = undefined;\n    }\n\n    return result;\n  }\n\n  private _isValidTrigger(event: IPointerEvent, fTrigger: FEventTrigger): boolean {\n    return isValidEventTrigger(event.originalEvent, fTrigger);\n  }\n}\n","import { DragCanvasPreparation } from './drag-canvas-preparation';\nimport { DragCanvasFinalize } from './drag-canvas-finalize';\n\nexport const DRAG_CANVAS_PROVIDERS = [DragCanvasFinalize, DragCanvasPreparation];\n","import { FEventTrigger } from '../../domain';\nimport { IPointerEvent } from '../infrastructure';\n\nexport class SelectByPointerRequest {\n  static readonly fToken = Symbol('SelectByPointerRequest');\n\n  constructor(\n    public readonly event: IPointerEvent,\n    public readonly trigger: FEventTrigger,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { SelectByPointerRequest } from './select-by-pointer-request';\nimport { isValidEventTrigger, UpdateItemAndChildrenLayersRequest } from '../../domain';\nimport { FComponentsStore } from '../../f-storage';\nimport { FDraggableDataContext } from '../f-draggable-data-context';\nimport { ISelectable } from '../../mixins';\nimport { FNodeBase } from '../../f-node';\nimport { IPointerEvent } from '../infrastructure';\nimport { FConnectionBase } from '../../f-connection-v2';\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(SelectByPointerRequest)\nexport class SelectByPointer implements IExecution<SelectByPointerRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragSession = inject(FDraggableDataContext);\n\n  public handle({ event, trigger }: SelectByPointerRequest): void {\n    if (!this._isSelectionAllowed(event)) {\n      return;\n    }\n\n    const item = this._resolveSelectable(event.targetElement);\n\n    this._deferRaiseLayerFor(item);\n\n    const isMultiSelect = isValidEventTrigger(event.originalEvent, trigger);\n    isMultiSelect ? this._applyToggleSelect(item) : this._applySingleSelect(item);\n  }\n\n  private _isSelectionAllowed(event: IPointerEvent): boolean {\n    return this._store.flowHost.contains(event.targetElement) && this._dragSession.isEmpty();\n  }\n\n  private _resolveSelectable(target: HTMLElement): ISelectable | undefined {\n    return this._findNodeOrGroupAt(target) ?? this._findConnectionAt(target);\n  }\n\n  private _findNodeOrGroupAt(target: HTMLElement): FNodeBase | undefined {\n    return this._store.nodes.getAll().find((x) => x.isContains(target));\n  }\n\n  private _findConnectionAt(target: HTMLElement | SVGElement): FConnectionBase | undefined {\n    return this._store.connections.getAll().find((x) => x.isContains(target));\n  }\n\n  private _deferRaiseLayerFor(item?: ISelectable): void {\n    if (!item) {\n      return;\n    }\n\n    queueMicrotask(() => {\n      this._mediator.execute<void>(\n        new UpdateItemAndChildrenLayersRequest(item, item.hostElement.parentElement as HTMLElement),\n      );\n    });\n  }\n\n  private _applySingleSelect(item?: ISelectable): void {\n    if (!item || item.fSelectionDisabled()) {\n      this._clearSelection();\n\n      return;\n    }\n\n    if (!item.isSelected()) {\n      this._clearSelection();\n      this._select(item);\n    }\n  }\n\n  private _applyToggleSelect(item?: ISelectable): void {\n    if (!item || item.fSelectionDisabled()) {\n      return;\n    }\n\n    item.isSelected() ? this._deselect(item) : this._select(item);\n  }\n\n  private _clearSelection(): void {\n    if (!this._dragSession.selectedItems.length) {\n      return;\n    }\n\n    for (const item of this._dragSession.selectedItems) {\n      item.unmarkAsSelected();\n    }\n    this._dragSession.markSelectionAsChanged();\n    this._dragSession.selectedItems = [];\n  }\n\n  private _select(item: ISelectable): void {\n    this._dragSession.selectedItems.push(item);\n    item.markAsSelected();\n    this._dragSession.markSelectionAsChanged();\n  }\n\n  private _deselect(item: ISelectable): void {\n    const idx = this._dragSession.selectedItems.indexOf(item);\n    if (idx >= 0) {\n      this._dragSession.selectedItems.splice(idx, 1);\n    }\n\n    item.unmarkAsSelected();\n    this._dragSession.markSelectionAsChanged();\n  }\n}\n","import { SelectByPointer } from './select-by-pointer';\n\nexport const DRAG_SELECT_BY_POINTER_PROVIDERS = [SelectByPointer];\n","import {\n  Directive,\n} from \"@angular/core\";\n\n@Directive({\n  standalone: false,\n  selector: \"[fDragBlocker]\",\n  host: {\n    class: `f-drag-blocker`,\n  },\n})\nexport class FDragBlockerDirective {}\n\n","import {\n  ElementRef,\n  EventEmitter,\n  inject,\n  InputSignalWithTransform,\n  OutputEmitterRef,\n} from '@angular/core';\nimport {\n  FConnectionWaypointsChangedEvent,\n  FCreateConnectionEvent,\n  FReassignConnectionEvent,\n} from './connection';\nimport { FSelectionChangeEvent } from './f-selection-change-event';\nimport { FDropToGroupEvent } from './drop-to-group';\nimport { DragAndDropBase } from './infrastructure';\nimport { FMoveNodesEvent } from './drag-node';\nimport { FDragStartedEvent } from './f-drag-started-event';\nimport { FNodeConnectionsIntersectionEvent, FNodeIntersectedWithConnections } from './domain';\nimport { FCreateNodeEvent } from './drag-external-item';\n\nexport abstract class FDraggableBase extends DragAndDropBase {\n  public readonly hostElement = inject(ElementRef).nativeElement;\n\n  public abstract fSelectionChange: EventEmitter<FSelectionChangeEvent>;\n\n  /** @deprecated Use `fNodeConnectionsIntersection` */\n  public abstract fNodeIntersectedWithConnections: EventEmitter<FNodeIntersectedWithConnections>;\n  public abstract fNodeConnectionsIntersection: OutputEmitterRef<FNodeConnectionsIntersectionEvent>;\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 fConnectionWaypointsChanged: OutputEmitterRef<FConnectionWaypointsChangedEvent>;\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 { 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  Directive,\n  EventEmitter,\n  inject,\n  input,\n  Input,\n  numberAttribute,\n  OnDestroy,\n  OnInit,\n  output,\n  Output,\n} from '@angular/core';\nimport { FDraggableBase } from './f-draggable-base';\nimport { DragNodeFinalizeRequest, DragNodePreparationRequest, FMoveNodesEvent } from './drag-node';\nimport { DragCanvasFinalizeRequest, DragCanvasPreparationRequest } from './drag-canvas';\nimport {\n  CreateConnectionFinalizeRequest,\n  CreateConnectionPreparationRequest,\n  DragConnectionWaypointFinalizeRequest,\n  DragConnectionWaypointPreparationRequest,\n  FConnectionWaypointsChangedEvent,\n  FCreateConnectionEvent,\n  FReassignConnectionEvent,\n  ReassignConnectionFinalizeRequest,\n  ReassignConnectionPreparationRequest,\n} from './connection';\nimport { FSelectionChangeEvent } from './f-selection-change-event';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddDndToStoreRequest,\n  defaultEventTrigger,\n  FEventTrigger,\n  FTriggerEvent,\n  InitializeDragSequenceRequest,\n  OnPointerMoveRequest,\n  PrepareDragSequenceRequest,\n  RemoveDndFromStoreRequest,\n} from '../domain';\nimport { ScheduleAutoPanFrameRequest, StopAutoPanRequest } from './auto-pan';\nimport { SelectByPointerRequest } from './select-by-pointer';\nimport { ResizeNodeFinalizeRequest, ResizeNodePreparationRequest } from './resize-node';\nimport { EOperationSystem, PlatformService } from '@foblex/platform';\nimport {\n  EmitEndDragSequenceEventRequest,\n  EmitSelectionChangeEventRequest,\n  FNodeConnectionsIntersectionEvent,\n  FNodeIntersectedWithConnections,\n} from './domain';\nimport { DragHandlerInjector, FDragHandlerResult } from './infrastructure';\nimport {\n  DropToGroupFinalizeRequest,\n  DropToGroupPreparationRequest,\n  FDropToGroupEvent,\n} from './drop-to-group';\nimport { RotateNodeFinalizeRequest, RotateNodePreparationRequest } from './rotate-node';\nimport { IPointerEvent } from './infrastructure';\nimport { isDragBlocker } from './is-drag-blocker';\nimport { PinchToZoomFinalizeRequest, PinchToZoomPreparationRequest } from './pinch-to-zoom';\nimport { FDragStartedEvent } from './f-drag-started-event';\nimport { SelectionAreaFinalizeRequest, SelectionAreaPreparationRequest } from './selection-area';\nimport {\n  DragExternalItemFinalizeRequest,\n  DragExternalItemPreparationRequest,\n  FCreateNodeEvent,\n  PreventDefaultIsExternalItemRequest,\n} from './drag-external-item';\nimport { DragMinimapFinalizeRequest, DragMinimapPreparationRequest } from './drag-minimap';\n\n@Directive({\n  standalone: false,\n  selector: 'f-flow[fDraggable]',\n  exportAs: 'fDraggable',\n  providers: [FDragHandlerResult, DragHandlerInjector],\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  public fConnectionWaypointsTrigger = input<FEventTrigger>(defaultEventTrigger);\n\n  @Input()\n  public fMoveControlPointTrigger: 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  /** @deprecated Use `fNodeConnectionsIntersection` */\n  @Output()\n  public override fNodeIntersectedWithConnections =\n    new EventEmitter<FNodeIntersectedWithConnections>();\n  public readonly fNodeConnectionsIntersection = output<FNodeConnectionsIntersectionEvent>();\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  public override fConnectionWaypointsChanged = output<FConnectionWaypointsChangedEvent>();\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  private readonly _dragHandlerInjector = inject(DragHandlerInjector);\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    this._dragHandlerInjector.create();\n\n    this._result.clear();\n\n    this._mediator.execute<void>(new InitializeDragSequenceRequest());\n\n    this._mediator.execute<void>(new SelectionAreaPreparationRequest(event));\n\n    this._mediator.execute<void>(new DragMinimapPreparationRequest(event));\n\n    this._mediator.execute<void>(new PinchToZoomPreparationRequest(event));\n\n    this._mediator.execute<void>(new SelectByPointerRequest(event, this.fMultiSelectTrigger));\n\n    this._mediator.execute<void>(\n      new ReassignConnectionPreparationRequest(event, this.fReassignConnectionTrigger),\n    );\n\n    this._mediator.execute<void>(\n      new CreateConnectionPreparationRequest(event, this.fCreateConnectionTrigger),\n    );\n\n    this._mediator.execute<void>(\n      new DragConnectionWaypointPreparationRequest(event, this.fConnectionWaypointsTrigger()),\n    );\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._mediator.execute<void>(new ResizeNodePreparationRequest(event, this.fNodeResizeTrigger));\n\n    this._mediator.execute<void>(new RotateNodePreparationRequest(event, this.fNodeRotateTrigger));\n\n    this._mediator.execute<void>(new DragNodePreparationRequest(event, this.fNodeMoveTrigger));\n\n    this._mediator.execute<void>(\n      new DragExternalItemPreparationRequest(event, this.fExternalItemTrigger),\n    );\n\n    this._mediator.execute<void>(new DropToGroupPreparationRequest(event));\n\n    this._mediator.execute<void>(new DragCanvasPreparationRequest(event, this.fCanvasMoveTrigger));\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    this._mediator.execute<void>(new ScheduleAutoPanFrameRequest());\n  }\n\n  public override onPointerUp(event: IPointerEvent): void {\n    this._mediator.execute<void>(new DragMinimapFinalizeRequest(event));\n\n    this._mediator.execute<void>(new SelectionAreaFinalizeRequest(event));\n\n    this._mediator.execute<void>(new ReassignConnectionFinalizeRequest(event));\n\n    this._mediator.execute<void>(new CreateConnectionFinalizeRequest(event));\n\n    this._mediator.execute<void>(new ResizeNodeFinalizeRequest(event));\n\n    this._mediator.execute<void>(new RotateNodeFinalizeRequest(event));\n\n    this._mediator.execute<void>(new DragNodeFinalizeRequest(event));\n\n    this._mediator.execute<void>(new DragExternalItemFinalizeRequest(event));\n\n    this._mediator.execute<void>(new DropToGroupFinalizeRequest(event));\n\n    this._mediator.execute<void>(new DragCanvasFinalizeRequest(event));\n\n    this._mediator.execute<void>(new PinchToZoomFinalizeRequest(event));\n\n    this._mediator.execute<void>(new DragConnectionWaypointFinalizeRequest(event));\n\n    this._mediator.execute<void>(new EmitEndDragSequenceEventRequest());\n  }\n\n  protected override finalizeDragSequence(): void {\n    this._mediator.execute<void>(new StopAutoPanRequest());\n    this._mediator.execute<void>(new EmitSelectionChangeEventRequest());\n\n    this._result.clear();\n\n    this._dragHandlerInjector.destroy();\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute<void>(new StopAutoPanRequest());\n    this._mediator.execute<void>(new RemoveDndFromStoreRequest());\n    super.unsubscribe();\n  }\n}\n","import { DRAG_CANVAS_PROVIDERS } from './drag-canvas';\nimport { DRAG_CONNECTIONS_PROVIDERS } from './connection';\nimport { DRAG_SELECT_BY_POINTER_PROVIDERS } from './select-by-pointer';\nimport { NODE_PROVIDERS } from './drag-node';\nimport { NODE_RESIZE_PROVIDERS } from './resize-node';\nimport { DRAG_AND_DROP_COMMON_PROVIDERS } from './domain';\nimport { DRAG_DROP_TO_GROUP_PROVIDERS } from './drop-to-group';\nimport { NODE_ROTATE_PROVIDERS } from './rotate-node';\nimport { PINCH_TO_ZOOM_PROVIDERS } from './pinch-to-zoom';\nimport { DRAG_SELECTION_AREA_PROVIDERS } from './selection-area';\nimport { DRAG_EXTERNAL_ITEM_PROVIDERS } from './drag-external-item';\nimport { DRAG_MINIMAP_PROVIDERS } from './drag-minimap';\nimport { DRAG_AUTO_PAN_PROVIDERS } from './auto-pan';\n\nexport const F_DRAGGABLE_PROVIDERS = [\n  ...DRAG_CANVAS_PROVIDERS,\n\n  ...DRAG_CONNECTIONS_PROVIDERS,\n\n  ...DRAG_AND_DROP_COMMON_PROVIDERS,\n\n  ...DRAG_SELECT_BY_POINTER_PROVIDERS,\n\n  ...DRAG_EXTERNAL_ITEM_PROVIDERS,\n\n  ...DRAG_AUTO_PAN_PROVIDERS,\n\n  ...DRAG_MINIMAP_PROVIDERS,\n\n  ...NODE_PROVIDERS,\n\n  ...DRAG_DROP_TO_GROUP_PROVIDERS,\n\n  ...NODE_RESIZE_PROVIDERS,\n\n  ...NODE_ROTATE_PROVIDERS,\n\n  ...DRAG_SELECTION_AREA_PROVIDERS,\n\n  ...PINCH_TO_ZOOM_PROVIDERS,\n];\n","import { inject, Injectable } from '@angular/core';\nimport { RemoveConnectionWaypointRequest } from './remove-connection-waypoint-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FConnectionBase } from '../../../f-connection-v2';\nimport { FConnectionWaypointsChangedEvent } from '../../../f-draggable';\n\n@Injectable()\n@FExecutionRegister(RemoveConnectionWaypointRequest)\nexport class RemoveConnectionWaypoint implements IExecution<RemoveConnectionWaypointRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ waypointIndex, connectionId }: RemoveConnectionWaypointRequest): void {\n    const connection = this._store.connections.require(connectionId);\n\n    const current = connection.fWaypoints()?.waypoints().slice();\n    if (!current) {\n      throw new Error('Connection waypoints not found');\n    }\n    current.splice(waypointIndex, 1);\n\n    connection.fWaypoints()?.waypoints.set(current);\n\n    this._store.fDraggable?.fConnectionWaypointsChanged.emit(this._changeEvent(connection));\n  }\n\n  private _changeEvent(connection: FConnectionBase): FConnectionWaypointsChangedEvent {\n    return new FConnectionWaypointsChangedEvent(\n      connection.fId(),\n      connection.fWaypoints()?.waypoints() || [],\n    );\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 RemoveSnapConnectionFromStore\n  implements IExecution<RemoveSnapConnectionFromStoreRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: RemoveSnapConnectionFromStoreRequest): void {\n    this._store.connections.removeInstanceForSnap();\n  }\n}\n","import { AddConnectionForCreateToStore } from './add-connection-for-create-to-store';\nimport { AddConnectionMarkerToStore } from './add-connection-marker-to-store';\nimport { AddConnectionToStore } from './add-connection-to-store';\nimport { AddSnapConnectionToStore } from './add-snap-connection-to-store';\nimport { CreateConnectionMarkers } from './create-connection-markers';\nimport {\n  ApplyConnectionRender,\n  ApplyConnectionWorkerResult,\n  BuildConnectionLine,\n  BuildConnectionWorkerBatch,\n  BuildConnectionWorkerPayloadItem,\n  CompleteConnectionRedraw,\n  ConnectionRedrawState,\n  ConnectionWorkerState,\n  DisableConnectionWorker,\n  EnsureConnectionWorker,\n  HandleConnectionWorkerMessage,\n  IsConnectionRedrawCurrent,\n  IsConnectionWorkerEnabled,\n  MarkConnectionConnectorsAsConnected,\n  RedrawConnections,\n  RenderConnection,\n  RenderConnectionFromGeometry,\n  RenderConnectionWithLine,\n  ResolveConnectionEndpointRect,\n  ResolveConnectionEndpoints,\n  ResolveConnectionGeometry,\n  ResetConnectionWorkerRuntime,\n  RunConnectionRedrawSlice,\n  RunConnectionWorker,\n  RunConnectionWorkerBatch,\n  ShouldUseConnectionWorker,\n  StartConnectionRedraw,\n  StartConnectionWorkerRedraw,\n} from './redraw-connections';\nimport { RemoveConnectionForCreateFromStore } from './remove-connection-for-create-from-store';\nimport { RemoveConnectionFromStore } from './remove-connection-from-store';\nimport { RemoveConnectionMarkerFromStore } from './remove-connection-marker-from-store';\nimport { RemoveConnectionWaypoint } from './remove-connection-waypoint';\nimport { RemoveSnapConnectionFromStore } from './remove-snap-connection-from-store';\nimport { ResolveConnectionEndpointRotationContext } from './resolve-connection-endpoint-rotation-context';\n\n/**\n * This file exports all the connection-related features for the F-Flow domain.\n */\nexport const F_CONNECTION_FEATURES = [\n  ConnectionRedrawState,\n  ConnectionWorkerState,\n\n  AddConnectionForCreateToStore,\n  AddConnectionMarkerToStore,\n  AddConnectionToStore,\n  AddSnapConnectionToStore,\n\n  CreateConnectionMarkers,\n\n  ApplyConnectionWorkerResult,\n  ApplyConnectionRender,\n  BuildConnectionLine,\n  BuildConnectionWorkerBatch,\n  BuildConnectionWorkerPayloadItem,\n  CompleteConnectionRedraw,\n  DisableConnectionWorker,\n  EnsureConnectionWorker,\n  HandleConnectionWorkerMessage,\n  IsConnectionRedrawCurrent,\n  IsConnectionWorkerEnabled,\n  MarkConnectionConnectorsAsConnected,\n  RedrawConnections,\n  RenderConnection,\n  RenderConnectionFromGeometry,\n  RenderConnectionWithLine,\n  ResolveConnectionEndpointRect,\n  ResolveConnectionEndpointRotationContext,\n  ResolveConnectionEndpoints,\n  ResolveConnectionGeometry,\n  ResetConnectionWorkerRuntime,\n  RunConnectionRedrawSlice,\n  RunConnectionWorker,\n  RunConnectionWorkerBatch,\n  ShouldUseConnectionWorker,\n  StartConnectionRedraw,\n  StartConnectionWorkerRedraw,\n\n  RemoveConnectionForCreateFromStore,\n  RemoveConnectionFromStore,\n  RemoveConnectionMarkerFromStore,\n  RemoveSnapConnectionFromStore,\n  RemoveConnectionWaypoint,\n];\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class AddConnectorToStoreRequest {\n  static readonly fToken = Symbol('AddConnectorToStoreRequest');\n  constructor(public readonly instance: FConnectorBase) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { AddConnectorToStoreRequest } from './add-connector-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport {\n  FConnectorBase,\n  FNodeInputBase,\n  FNodeOutletBase,\n  FNodeOutputBase,\n} from '../../../f-connectors';\nimport { RegisterFCacheConnectorRequest } from '../../../f-cache';\n\n/**\n * Execution that adds an InputConnector to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddConnectorToStoreRequest)\nexport class AddConnectorToStore implements IExecution<AddConnectorToStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ instance }: AddConnectorToStoreRequest): void {\n    switch (instance.kind) {\n      case 'input':\n        this._addInput(instance);\n        break;\n      case 'output':\n        this._addOutput(instance);\n        break;\n      case 'outlet':\n        this._addOutlet(instance);\n        break;\n      default:\n        throw new Error(`Unknown connector kind: ${instance.kind}`);\n    }\n  }\n\n  private _addInput(component: FConnectorBase): void {\n    this._store.inputs.add(component as FNodeInputBase);\n    this._store.emitNodeChanges();\n\n    this._geometryRegister(component);\n  }\n\n  private _addOutput(component: FConnectorBase): void {\n    this._store.outputs.add(component as FNodeOutputBase);\n    this._store.emitNodeChanges();\n\n    this._geometryRegister(component);\n  }\n\n  private _addOutlet(component: FConnectorBase): void {\n    this._store.outlets.add(component as FNodeOutletBase);\n    this._store.emitNodeChanges();\n\n    this._geometryRegister(component);\n  }\n\n  private _geometryRegister(component: FConnectorBase): void {\n    this._mediator.execute(\n      new RegisterFCacheConnectorRequest(\n        component.fId(),\n        component.fNodeId,\n        component.kind,\n        component.hostElement,\n      ),\n    );\n  }\n}\n","import { IPoint } from '@foblex/2d';\nimport { IConnectorRectRef } from '../index';\n\nexport class CalculateClosestConnectorRequest {\n  static readonly fToken = Symbol('CalculateClosestConnectorRequest');\n\n  constructor(\n    public readonly position: IPoint,\n    public readonly connectorRefs: IConnectorRectRef[],\n  ) {}\n}\n","import { CalculateClosestConnectorRequest } from './calculate-closest-connector-request';\nimport { Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { IPoint, IRect } from '@foblex/2d';\nimport { IClosestConnectorRef } from '../i-closest-connector-ref';\nimport { IConnectorRectRef } from '../index';\n\n/**\n * Finds the closest connector rect to the given point.\n */\n@Injectable()\n@FExecutionRegister(CalculateClosestConnectorRequest)\nexport class CalculateClosestConnector\n  implements IExecution<CalculateClosestConnectorRequest, IClosestConnectorRef | undefined>\n{\n  public handle({\n    position,\n    connectorRefs,\n  }: CalculateClosestConnectorRequest): IClosestConnectorRef | undefined {\n    let result: IConnectorRectRef | undefined;\n    let minDistance = Infinity;\n\n    for (const ref of connectorRefs) {\n      const distance = this._distanceToRect(position, ref.rect);\n\n      if (distance < minDistance) {\n        minDistance = distance;\n        result = ref;\n      }\n    }\n\n    return result\n      ? {\n          ...result,\n          distance: minDistance,\n        }\n      : undefined;\n  }\n\n  private _distanceToRect(point: IPoint, { x, y, width, height }: IRect): number {\n    const closestX = this._clamp(point.x, x, x + width);\n    const closestY = this._clamp(point.y, y, y + height);\n\n    const dx = point.x - closestX;\n    const dy = point.y - closestY;\n\n    return Math.sqrt(dx * dx + dy * dy);\n  }\n\n  private _clamp(value: number, min: number, max: number): number {\n    return Math.max(min, Math.min(max, value));\n  }\n}\n","import { IPoint } from '@foblex/2d';\nimport { IConnectorRectRef } from '../i-connector-rect-ref';\n\nexport class FindConnectableConnectorUsingPriorityAndPositionRequest {\n  static readonly fToken = Symbol('FindConnectableConnectorUsingPriorityAndPositionRequest');\n  constructor(\n    public pointerPosition: IPoint,\n    public connectableConnectors: IConnectorRectRef[],\n  ) {}\n}\n","import { IPoint, ITransformModel, 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 { IClosestConnectorRef } from '../i-closest-connector-ref';\nimport { CalculateClosestConnectorRequest } from '../calculate-closest-connector';\nimport { FSnapConnectionComponent } from '../../../f-connection';\nimport { IConnectorRectRef } from '../i-connector-rect-ref';\nimport { calculatePointerInFlow } from '../../../utils';\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 FindConnectableConnectorUsingPriorityAndPosition implements IExecution<\n  FindConnectableConnectorUsingPriorityAndPositionRequest,\n  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.transform;\n  }\n\n  private get _flowHost(): HTMLElement {\n    return this._store.flowHost;\n  }\n\n  private get _fNodes(): FNodeBase[] {\n    return this._store.nodes.getAll();\n  }\n\n  private get _snapConnection(): FSnapConnectionComponent | undefined {\n    return this._store.connections.getForSnap();\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.connector);\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.rect,\n          this._calculatePointerInFlow(request.pointerPosition),\n        );\n      })\n      .map((x) => x.connector);\n  }\n\n  private _calculatePointerInFlow(position: IPoint): IPoint {\n    return calculatePointerInFlow(position, this._flowHost, this._transform);\n  }\n\n  private _isSnapConnectionEnabledAndHasClosestConnector(\n    request: FindConnectableConnectorUsingPriorityAndPositionRequest,\n  ): IClosestConnectorRef | undefined {\n    if (!this._snapConnection) {\n      return undefined;\n    }\n\n    const closestConnector = this._mediator.execute<IClosestConnectorRef | undefined>(\n      new CalculateClosestConnectorRequest(\n        this._calculatePointerInFlow(request.pointerPosition),\n        request.connectableConnectors,\n      ),\n    );\n\n    return this._isValidClosestInput(closestConnector) ? closestConnector : undefined;\n  }\n\n  private _isValidClosestInput(closestConnector: IClosestConnectorRef | undefined): boolean {\n    return !!closestConnector && closestConnector.distance < this._snapConnection!.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: IConnectorRectRef[],\n    fNode: FNodeBase,\n  ): FConnectorBase | undefined {\n    return connectableInputs.find((x) => x.connector.fNodeId === fNode.fId())?.connector;\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 source: FNodeOutputBase | FNodeOutletBase,\n    public readonly pointer: IPoint,\n  ) {}\n}\n","import { FConnectorBase } from '../../../f-connectors';\n\nexport class GetConnectorRectReferenceRequest {\n  static readonly fToken = Symbol('GetConnectorRectReferenceRequest');\n  constructor(public readonly connector: FConnectorBase) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { GetConnectorRectReferenceRequest } from './get-connector-rect-reference-request';\nimport { IRoundedRect } from '@foblex/2d';\nimport { IConnectorRectRef } from '../i-connector-rect-ref';\nimport { FConnectorBase } from '../../../f-connectors';\nimport { GetNormalizedConnectorRectRequest } from '../../get-normalized-connector-rect';\n\n/**\n * Returns a connector + its normalized rounded rect.\n */\n@Injectable()\n@FExecutionRegister(GetConnectorRectReferenceRequest)\nexport class GetConnectorRectReference implements IExecution<\n  GetConnectorRectReferenceRequest,\n  IConnectorRectRef\n> {\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ connector }: GetConnectorRectReferenceRequest): IConnectorRectRef {\n    return {\n      connector,\n      rect: this._getRect(connector),\n    };\n  }\n\n  private _getRect(x: FConnectorBase): IRoundedRect {\n    return this._mediator.execute<IRoundedRect>(\n      new GetNormalizedConnectorRectRequest(x.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, FMediator, IExecution } from '@foblex/mediator';\nimport { AddNodeToStoreRequest } from './add-node-to-store-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { RegisterFCacheNodeRequest } from '../../../f-cache';\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  private readonly _mediator = inject(FMediator);\n\n  public handle({ nodeOrGroup }: AddNodeToStoreRequest): void {\n    this._store.nodes.add(nodeOrGroup);\n    this._mediator.execute(\n      new RegisterFCacheNodeRequest(nodeOrGroup.fId(), nodeOrGroup.hostElement, nodeOrGroup),\n    );\n    this._store.emitNodeChanges();\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-v2';\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    const connectors = this._store.inputs.getAll();\n    for (const connector of connectors) {\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    const connections = this._store.connections.getAll();\n    for (const conn of connections) {\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-connection-v2';\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-connection-v2';\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-connection-v2';\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","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { CalculateConnectableSideByConnectedPositionsRequest } from './calculate-connectable-side-by-connected-positions-request';\nimport { FConnectorBase } from '../../../../f-connectors';\nimport { IPoint, IRect } from '@foblex/2d';\nimport { determineSide } from '../utils';\nimport { CALCULATABLE_SIDES } from '../constants';\nimport { TCalculateMode } from '../models';\nimport { GetNormalizedElementRectRequest } from '../../../get-normalized-element-rect';\nimport { EFConnectableSide } from '../../../../f-connection-v2';\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 implements IExecution<\n  CalculateConnectableSideByConnectedPositionsRequest,\n  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): IRect {\n    return this._mediator.execute<IRect>(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(public fComponent: FDraggableBase) {}\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 AddDndToStore implements IExecution<AddDndToStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(request: AddDndToStoreRequest): void {\n    this._store.fDraggable = request.fComponent;\n  }\n}\n","import { IPointerEvent } from '../../../f-draggable/infrastructure';\n\nexport class OnPointerMoveRequest {\n  static readonly fToken = Symbol('OnPointerMoveRequest');\n\n  constructor(public event: IPointerEvent) {}\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 '../../../f-draggable/infrastructure';\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 OnPointerMove implements IExecution<OnPointerMoveRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  private get _hostElement(): HTMLElement {\n    return this._store.fDraggable?.hostElement as HTMLElement;\n  }\n\n  public handle({ event }: OnPointerMoveRequest): void {\n    this._dragContext.rememberPointerPosition(event);\n\n    this._setDifferenceToDraggableItems(\n      this._getDifferenceBetweenPointerAndPointerDown(event),\n      event,\n    );\n  }\n\n  private _setDifferenceToDraggableItems(difference: IPoint, event: IPointerEvent): void {\n    this._dragContext.draggableItems.forEach((item) => {\n      item.onPointerMove({ ...difference }, event);\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 InitializeDragSequence implements IExecution<InitializeDragSequenceRequest, void> {\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(_: 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  private readonly _store = inject(FComponentsStore);\n\n  public handle(_: IsDragStartedRequest): boolean {\n    return !!this._store.fDraggable?.isDragStarted;\n  }\n}\n","export class PrepareDragSequenceRequest {\n  static readonly fToken = Symbol('PrepareDragSequenceRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { PrepareDragSequenceRequest } from './prepare-drag-sequence-request';\nimport { EmitStartDragSequenceEventRequest, FDraggableDataContext } from '../../../f-draggable';\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 PrepareDragSequence implements IExecution<PrepareDragSequenceRequest, void> {\n  private readonly _mediator = inject(FMediator);\n\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  public handle(_: PrepareDragSequenceRequest): void {\n    this._callPrepareDragSequence();\n\n    this._mediator.execute<void>(new EmitStartDragSequenceEventRequest());\n  }\n\n  private _callPrepareDragSequence(): void {\n    this._dragContext.draggableItems.forEach((x) => x.prepareDragSequence?.());\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 RemoveDndFromStore implements IExecution<RemoveDndFromStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_: RemoveDndFromStoreRequest): void {\n    this._store.fDraggable = undefined;\n  }\n}\n","import { AddDndToStore } from './add-dnd-to-store';\nimport { RemoveDndFromStore } from './remove-dnd-from-store';\nimport { PrepareDragSequence } from './prepare-drag-sequence';\nimport { InitializeDragSequence } from './initialize-drag-sequence';\nimport { OnPointerMove } from './on-pointer-move';\nimport { IsDragStarted } from './is-drag-started';\n\n/**\n * Collection of all FDraggable feature executions.\n */\nexport const F_DRAGGABLE_FEATURES = [\n  AddDndToStore,\n\n  OnPointerMove,\n\n  InitializeDragSequence,\n\n  PrepareDragSequence,\n\n  IsDragStarted,\n\n  RemoveDndFromStore,\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 { RectExtensions } from '@foblex/2d';\nimport { IsDragStartedRequest } from '../../../f-draggable';\nimport { EFConnectableSide } from '../../../../f-connection-v2';\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 { 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';\nimport { EFConnectableSide } from '../../../f-connection-v2';\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 implements IExecution<\n  CalculateNodesBoundingBoxRequest,\n  IRect | null\n> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_: CalculateNodesBoundingBoxRequest): IRect | null {\n    return RectExtensions.union(this._nodesRects());\n  }\n\n  private _nodesRects(): IRect[] {\n    return this._store.nodes.getAll().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(public fNodes?: FNodeBase[]) {}\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, FMediator, IExecution } from '@foblex/mediator';\nimport { FNodeBase } from '../../../f-node';\nimport { GetCachedFCacheRectRequest } from '../../../f-cache';\nimport { GetNormalizedElementRectRequest } from '../../get-normalized-element-rect';\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 implements IExecution<\n  CalculateNodesBoundingBoxNormalizedPositionRequest,\n  IRect | null\n> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  public handle(request: CalculateNodesBoundingBoxNormalizedPositionRequest): IRect | null {\n    return RectExtensions.union(this._getNodesRects(request.fNodes || this._store.nodes.getAll()));\n  }\n\n  private _getNodesRects(fNodes: FNodeBase[]): IRect[] {\n    return fNodes.map((node) => this._getNodeRect(node));\n  }\n\n  private _getNodeRect(node: FNodeBase): IRect {\n    const cached = this._mediator.execute<IRect | undefined>(\n      new GetCachedFCacheRectRequest(node.hostElement),\n    );\n    if (cached) {\n      return this._getElementRect(node, cached);\n    }\n\n    const normalizedRect = this._mediator.execute<IRect>(\n      new GetNormalizedElementRectRequest(node.hostElement),\n    );\n\n    return this._getElementRect(node, normalizedRect);\n  }\n\n  private _getElementRect(node: FNodeBase, rect: IRect): IRect {\n    return RectExtensions.initialize(node._position.x, node._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-v2';\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    const connectors = this._store.outputs.getAll();\n    for (const connector of connectors) {\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    const connections = this._store.connections.getAll();\n    for (const conn of connections) {\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","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 implements IExecution<\n  GetNodePaddingRequest,\n  [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()\n      ? this._getPaddingData(request.fNode, request.rect)\n      : [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 implements IExecution<FitToChildNodesAndGroupsRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _nodes(): FNodeBase[] {\n    return this._store.nodes.getAll();\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(\n          directChildren,\n          this._paddings(nodeOrGroup, currentBounding),\n        );\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 (\n      RectExtensions.union(nodeOrGroups.map((x) => this._boundingRect(x))) ||\n      RectExtensions.initialize()\n    );\n  }\n\n  private _boundingRect(nodeOrGroup: FNodeBase): IRect {\n    return this._mediator.execute<IRect>(\n      new GetNormalizedElementRectRequest(nodeOrGroup.hostElement),\n    );\n  }\n\n  private _paddings(nodeOrGroup: FNodeBase, rect: IRect): [number, number, number, number] {\n    return this._mediator.execute<[number, number, number, number]>(\n      new GetNodePaddingRequest(nodeOrGroup, rect),\n    );\n  }\n\n  private _calculateChildrenBounding(\n    directChildren: FNodeBase[],\n    [left, top, right, bottom]: [number, number, number, number],\n  ): 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","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 implements IExecution<GetChildNodeIdsRequest, string[]> {\n  private readonly _store = inject(FComponentsStore);\n\n  private get _allNodesAndGroups(): FNodeBase[] {\n    return this._store.nodes.getAll();\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\n      .filter((n) => n.fParentId() === nodeId)\n      .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.nodes.get(nodeOrGroup.fParentId() as string);\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 { EmitConnectionsChangesRequest } from '../../../f-storage';\nimport { FChannelHub, FResizeChannel } from '../../../reactivity';\nimport { FitToChildNodesAndGroupsRequest } from '../fit-to-child-nodes-and-groups';\nimport { IsDragStartedRequest } from '../../f-draggable';\nimport { CalculateConnectorsConnectableSidesRequest } from '../calculate-connectors-connectable-sides';\nimport { InvalidateFCacheNodeRequest } from '../../../f-cache';\nimport { FReflowOrchestrator } from '../../../plugins/layout/f-reflow-on-resize';\n\n/**\n * Execution that updates a node's connectors when its state or size changes.\n *\n * Content-driven resize path for the reflow-on-resize feature — after the\n * existing downstream updates (connector sides + fit-to-children), the\n * orchestrator is invoked. It consults its own baseline tracker (not the\n * global cache, which is disabled by default) and short-circuits when the\n * feature is not active.\n */\n@Injectable()\n@FExecutionRegister(UpdateNodeWhenStateOrSizeChangedRequest)\nexport class UpdateNodeWhenStateOrSizeChanged implements IExecution<\n  UpdateNodeWhenStateOrSizeChangedRequest,\n  void\n> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _reflowOrchestrator = inject(FReflowOrchestrator);\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(afterNextPaint()) // Removed: caused ~32ms lag on resize/toggle. Debounce is sufficient for DOM stability.\n      .listen(destroyRef, () => {\n        this._mediator.execute<void>(new EmitConnectionsChangesRequest());\n        if (!this._isDragging()) {\n          this._mediator.execute(\n            new InvalidateFCacheNodeRequest(nodeOrGroup.fId(), 'UpdateNodeWhenStateOrSizeChanged'),\n          );\n\n          this._mediator.execute<void>(new CalculateConnectorsConnectableSidesRequest(nodeOrGroup));\n\n          this._mediator.execute<void>(new FitToChildNodesAndGroupsRequest(nodeOrGroup));\n\n          this._reflowOrchestrator.handleResize(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, FMediator, IExecution } from '@foblex/mediator';\nimport { RemoveNodeFromStoreRequest } from './remove-node-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { UnregisterFCacheNodeRequest } from '../../../f-cache';\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  private readonly _mediator = inject(FMediator);\n\n  public handle({ instance }: RemoveNodeFromStoreRequest): void {\n    this._store.nodes.remove(instance);\n    this._mediator.execute(new UnregisterFCacheNodeRequest(instance.fId()));\n    this._store.emitNodeChanges();\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  FConnectorBase,\n  FNodeInputBase,\n  FNodeOutletBase,\n  FNodeOutputBase,\n} from '../../../f-connectors';\nimport { FComponentsStore } from '../../../f-storage';\nimport { IConnectorRectRef } from '../i-connector-rect-ref';\nimport { GetConnectorRectReferenceRequest } from '../get-connector-rect-reference';\nimport { CalculateConnectableSideByConnectedPositionsRequest, isCalculateMode } from '../../f-node';\nimport { IPoint } from '@foblex/2d';\nimport { EFConnectableSide } from '../../../f-connection-v2';\n\n/**\n * Returns all input connectors that can be connected to the given source (output or outlet),\n * along with their rect references.\n */\n@Injectable()\n@FExecutionRegister(CalculateTargetConnectorsToConnectRequest)\nexport class CalculateTargetConnectorsToConnect\n  implements IExecution<CalculateTargetConnectorsToConnectRequest, IConnectorRectRef[]>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _targets(): FNodeInputBase[] {\n    return this._store.inputs.getAll();\n  }\n\n  public handle({\n    source,\n    pointer,\n  }: CalculateTargetConnectorsToConnectRequest): IConnectorRectRef[] {\n    const targets = this._getConnectableTargets(source);\n\n    const refs: IConnectorRectRef[] = [];\n    for (const input of targets) {\n      refs.push(\n        this._mediator.execute<IConnectorRectRef>(new GetConnectorRectReferenceRequest(input)),\n      );\n    }\n\n    this._scheduleApplyCalculatedSides(refs, pointer);\n\n    return refs;\n  }\n\n  private _getConnectableTargets(source: FNodeOutputBase | FNodeOutletBase): FConnectorBase[] {\n    // 1) Connection limits (strict whitelist)\n    if (source.hasConnectionLimits) {\n      return this._targets.filter((x) => source.canConnectTo(x));\n    }\n\n    // 2) Basic connectable filter\n    let targets = this._targets.filter((x) => x.canBeConnected);\n\n    // 3) Self-connection rule\n    if (!source.isSelfConnectable) {\n      targets = targets.filter((x) => x.fNodeId !== source.fNodeId);\n    }\n\n    return targets;\n  }\n\n  private _scheduleApplyCalculatedSides(refs: IConnectorRectRef[], pointer: IPoint): void {\n    queueMicrotask(() => this._applyCalculatedConnectableSides(refs, pointer));\n  }\n\n  private _applyCalculatedConnectableSides(refs: IConnectorRectRef[], pointer: IPoint): void {\n    for (const { connector } of refs) {\n      if (!isCalculateMode(connector.userFConnectableSide)) continue;\n      connector.fConnectableSide = this._calculateByConnectedPositions(connector, pointer);\n    }\n  }\n\n  /** Delegates to the connected-positions calculation execution. */\n  private _calculateByConnectedPositions(\n    connector: FConnectorBase,\n    pointer: IPoint,\n  ): EFConnectableSide {\n    return this._mediator.execute(\n      new CalculateConnectableSideByConnectedPositionsRequest(connector, pointer),\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 target: FNodeInputBase,\n    public readonly pointer: 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 { FConnectorBase, FNodeInputBase, FNodeOutputBase } from '../../../f-connectors';\nimport { FComponentsStore } from '../../../f-storage';\nimport { IConnectorRectRef } from '../i-connector-rect-ref';\nimport { GetConnectorRectReferenceRequest } from '../get-connector-rect-reference';\nimport { IPoint } from '@foblex/2d';\nimport { CalculateConnectableSideByConnectedPositionsRequest, isCalculateMode } from '../../f-node';\nimport { EFConnectableSide } from '../../../f-connection-v2';\n\n/**\n * Returns all source connectors (outputs/outlets) that can connect to the given target input,\n * along with their rect references.\n */\n@Injectable()\n@FExecutionRegister(CalculateSourceConnectorsToConnectRequest)\nexport class CalculateSourceConnectorsToConnect\n  implements IExecution<CalculateSourceConnectorsToConnectRequest, IConnectorRectRef[]>\n{\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _sources(): FNodeOutputBase[] {\n    return this._store.outputs.getAll();\n  }\n\n  public handle({\n    target,\n    pointer,\n  }: CalculateSourceConnectorsToConnectRequest): IConnectorRectRef[] {\n    const sources = this._getConnectableSources(target);\n\n    const refs: IConnectorRectRef[] = [];\n    for (const connector of sources) {\n      refs.push(\n        this._mediator.execute<IConnectorRectRef>(new GetConnectorRectReferenceRequest(connector)),\n      );\n    }\n\n    this._scheduleApplyCalculatedSides(refs, pointer);\n\n    return refs;\n  }\n\n  private _getConnectableSources(target: FNodeInputBase): FConnectorBase[] {\n    return this._sources.filter((x) => {\n      let result = x.canBeConnected;\n      if (result && x.hasConnectionLimits) {\n        result = x.canConnectTo(target);\n      }\n\n      return result;\n    });\n  }\n\n  private _scheduleApplyCalculatedSides(refs: IConnectorRectRef[], pointer: IPoint): void {\n    queueMicrotask(() => this._applyCalculatedConnectableSides(refs, pointer));\n  }\n\n  private _applyCalculatedConnectableSides(\n    refs: readonly IConnectorRectRef[],\n    pointer: IPoint,\n  ): void {\n    for (const { connector } of refs) {\n      if (!isCalculateMode(connector.userFConnectableSide)) continue;\n      connector.fConnectableSide = this._calculateByConnectedPositions(connector, pointer);\n    }\n  }\n\n  /** Delegates to the connected-positions calculation execution. */\n  private _calculateByConnectedPositions(\n    connector: FConnectorBase,\n    pointer: IPoint,\n  ): EFConnectableSide {\n    return this._mediator.execute(\n      new CalculateConnectableSideByConnectedPositionsRequest(connector, pointer),\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","/* 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","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 RemoveConnectorFromStoreRequest {\n  static readonly fToken = Symbol('RemoveConnectorFromStoreRequest');\n  constructor(public readonly instance: FConnectorBase) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { RemoveConnectorFromStoreRequest } from './remove-connector-from-store-request';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FConnectorBase } from '../../../f-connectors';\nimport { UnregisterFCacheConnectorRequest } from '../../../f-cache';\n\n/**\n * Execution that removes an inputConnector from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveConnectorFromStoreRequest)\nexport class RemoveConnectorFromStore implements IExecution<RemoveConnectorFromStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ instance }: RemoveConnectorFromStoreRequest): void {\n    switch (instance.kind) {\n      case 'input':\n        this._removeInput(instance);\n        break;\n      case 'output':\n        this._removeOutput(instance);\n        break;\n      case 'outlet':\n        this._removeOutlet(instance);\n        break;\n      default:\n        throw new Error(`Unknown connector kind: ${instance.kind}`);\n    }\n  }\n\n  private _removeInput(component: FConnectorBase): void {\n    this._store.inputs.removeById(component.fId());\n    this._store.emitNodeChanges();\n\n    this._geometryUnregister(component);\n  }\n\n  private _removeOutput(component: FConnectorBase): void {\n    this._store.outputs.removeById(component.fId());\n    this._store.emitNodeChanges();\n\n    this._geometryUnregister(component);\n  }\n\n  private _removeOutlet(component: FConnectorBase): void {\n    this._store.outlets.removeById(component.fId());\n    this._store.emitNodeChanges();\n\n    this._geometryUnregister(component);\n  }\n\n  private _geometryUnregister(component: FConnectorBase): void {\n    this._mediator.execute(new UnregisterFCacheConnectorRequest(component.fId(), component.kind));\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 { MarkConnectableConnectors } from './mark-connectable-connectors';\nimport { UnmarkConnectableConnectors } from './unmark-connectable-connectors';\nimport { CalculateTargetConnectorsToConnect } from './calculate-target-connectors-to-connect';\nimport { GetConnectorRectReference } from './get-connector-rect-reference';\nimport { CalculateClosestConnector } from './calculate-closest-connector';\nimport { CalculateSourceConnectorsToConnect } from './calculate-source-connectors-to-connect';\nimport { FindConnectableConnectorUsingPriorityAndPosition } from './find-connectable-connector-using-priority-and-position';\nimport { AddConnectorToStore } from './add-connector-to-store';\nimport { RemoveConnectorFromStore } from './remove-connector-from-store';\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  AddConnectorToStore,\n\n  RemoveConnectorFromStore,\n\n  CalculateClosestConnector,\n\n  FindConnectableConnectorUsingPriorityAndPosition,\n\n  CalculateSourceConnectorsToConnect,\n\n  CalculateTargetConnectorsToConnect,\n\n  GetConnectorRectReference,\n\n  MarkConnectableConnectors,\n\n  UnmarkConnectableConnectors,\n];\n","import { FFlowBase } from '../../../f-flow';\n\nexport class AddFlowToStoreRequest {\n  static readonly fToken = Symbol('AddFlowToStoreRequest');\n\n  constructor(public readonly instance: FFlowBase) {}\n}\n","export enum EFLayoutDirection {\n  TOP_BOTTOM = 'TOP_BOTTOM',\n  BOTTOM_TOP = 'BOTTOM_TOP',\n  LEFT_RIGHT = 'LEFT_RIGHT',\n  RIGHT_LEFT = 'RIGHT_LEFT',\n}\n","export enum EFLayoutMode {\n  MANUAL = 'manual',\n  AUTO = 'auto',\n}\n","import { IFFlowState } from '../../../../domain';\nimport { IFLayoutConnection, IFLayoutGraph, IFLayoutNode } from '../models';\n\nexport interface IFlowLayoutNormalizationResult extends IFLayoutGraph {\n  nodeIds: Set<string>;\n  groupIds: Set<string>;\n}\n\nexport function normalizeFlowLayoutData(state: IFFlowState): IFlowLayoutNormalizationResult {\n  const nodes = [...state.nodes.map(mapNode), ...state.groups.map(mapNode)];\n  const nodeIds = new Set(state.nodes.map((node) => node.id));\n  const groupIds = new Set(state.groups.map((group) => group.id));\n  const outputNodeIds = new Map<string, string>();\n  const inputNodeIds = new Map<string, string>();\n\n  for (const item of [...state.nodes, ...state.groups]) {\n    for (const output of item.fOutputs) {\n      outputNodeIds.set(output.id, item.id);\n    }\n\n    for (const input of item.fInputs) {\n      inputNodeIds.set(input.id, item.id);\n    }\n  }\n\n  const connections = state.connections.reduce<IFLayoutConnection[]>((result, connection) => {\n    const sourceNodeId = outputNodeIds.get(connection.fOutputId);\n    const targetNodeId = inputNodeIds.get(connection.fInputId);\n\n    if (!sourceNodeId || !targetNodeId) {\n      return result;\n    }\n\n    result.push({\n      source: sourceNodeId,\n      target: targetNodeId,\n    });\n\n    return result;\n  }, []);\n\n  return { nodes, connections, nodeIds, groupIds };\n}\n\nfunction mapNode(node: IFFlowState['nodes'][number]): IFLayoutNode {\n  return {\n    id: node.id,\n    size: node.measuredSize ? { ...node.measuredSize } : node.size ? { ...node.size } : undefined,\n  };\n}\n","import { DestroyRef, inject, Injectable } from '@angular/core';\nimport { PointExtensions } from '@foblex/2d';\nimport { EFLayoutMode } from '../enums';\nimport { FLayoutEngine } from '../f-layout-engine';\nimport { IFLayoutNodePosition } from '../models';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { FFlowBase } from '../../../../f-flow';\nimport { normalizeFlowLayoutData } from './normalize-flow-layout-data';\n\nconst FLOW_LAYOUT_DEBOUNCE_MS = 1;\n\ninterface IFlowRegistration {\n  flow: FFlowBase;\n  store: FComponentsStore;\n  nodeSignature: string;\n  connectionSignature: string;\n  timeoutId: ReturnType<typeof setTimeout> | null;\n  raf1: number | null;\n  raf2: number | null;\n  unsubs: (() => void)[];\n  runId: number;\n  isApplying: boolean;\n}\n\n@Injectable()\nexport class FLayoutController {\n  private readonly _destroyRef = inject(DestroyRef);\n\n  private readonly _flows = new Map<string, IFlowRegistration>();\n\n  private _engine?: FLayoutEngine;\n\n  constructor() {\n    this._destroyRef.onDestroy(() => {\n      Array.from(this._flows.keys()).forEach((flowId) => this.unregisterFlow(flowId));\n      this._engine = undefined;\n    });\n  }\n\n  public attachEngine(engine: FLayoutEngine): void {\n    this._engine = engine;\n  }\n\n  public registerFlow(flow: FFlowBase, store: FComponentsStore): void {\n    const flowId = flow.fId();\n\n    this.unregisterFlow(flowId);\n\n    const registration: IFlowRegistration = {\n      flow,\n      store,\n      nodeSignature: this._buildNodeSignature(store),\n      connectionSignature: this._buildConnectionSignature(store),\n      timeoutId: null,\n      raf1: null,\n      raf2: null,\n      unsubs: [],\n      runId: 0,\n      isApplying: false,\n    };\n\n    registration.unsubs.push(\n      store.nodesChanges$.listen(() => this._handleNodesChanges(flowId)),\n      store.connectionsChanges$.listen(() => this._handleConnectionsChanges(flowId)),\n    );\n\n    this._flows.set(flowId, registration);\n\n    if (this._engine?.getMode() === EFLayoutMode.AUTO) {\n      this._scheduleRelayout(flowId);\n    }\n  }\n\n  public unregisterFlow(flowId: string): void {\n    const registration = this._flows.get(flowId);\n\n    if (!registration) {\n      return;\n    }\n\n    registration.unsubs.forEach((unsub) => unsub());\n    this._clearScheduledWork(registration);\n    this._flows.delete(flowId);\n  }\n\n  public handleModeChanged(mode: EFLayoutMode): void {\n    if (mode !== EFLayoutMode.AUTO) {\n      return;\n    }\n\n    for (const flowId of this._flows.keys()) {\n      this._scheduleRelayout(flowId);\n    }\n  }\n\n  public async relayout(flowId?: string): Promise<void> {\n    if (!this._engine) {\n      return;\n    }\n\n    if (flowId) {\n      const registration = this._flows.get(flowId);\n\n      if (registration) {\n        await this._relayoutRegisteredFlow(flowId, registration);\n      }\n\n      return;\n    }\n\n    for (const [id, registration] of this._flows.entries()) {\n      await this._relayoutRegisteredFlow(id, registration);\n    }\n  }\n\n  private _handleNodesChanges(flowId: string): void {\n    const registration = this._flows.get(flowId);\n\n    if (!registration || registration.isApplying) {\n      return;\n    }\n\n    const nextSignature = this._buildNodeSignature(registration.store);\n\n    if (nextSignature === registration.nodeSignature) {\n      return;\n    }\n\n    registration.nodeSignature = nextSignature;\n    this._scheduleRelayout(flowId);\n  }\n\n  private _handleConnectionsChanges(flowId: string): void {\n    const registration = this._flows.get(flowId);\n\n    if (!registration || registration.isApplying) {\n      return;\n    }\n\n    const nextSignature = this._buildConnectionSignature(registration.store);\n\n    if (nextSignature === registration.connectionSignature) {\n      return;\n    }\n\n    registration.connectionSignature = nextSignature;\n    this._scheduleRelayout(flowId);\n  }\n\n  private _scheduleRelayout(flowId: string): void {\n    const registration = this._flows.get(flowId);\n\n    if (!registration || !this._engine || this._engine.getMode() !== EFLayoutMode.AUTO) {\n      return;\n    }\n\n    if (registration.timeoutId !== null) {\n      clearTimeout(registration.timeoutId);\n    }\n\n    this._cancelAnimationFrames(registration);\n    registration.timeoutId = setTimeout(() => {\n      registration.timeoutId = null;\n      this._runAfterNextPaint(registration, () => void this._relayoutFlowIfReady(flowId));\n    }, FLOW_LAYOUT_DEBOUNCE_MS);\n  }\n\n  private async _relayoutFlowIfReady(flowId: string): Promise<void> {\n    const registration = this._flows.get(flowId);\n\n    if (!registration || !this._engine || this._engine.getMode() !== EFLayoutMode.AUTO) {\n      return;\n    }\n\n    if (registration.store.hasPendingProgressiveRender) {\n      this._scheduleRelayout(flowId);\n\n      return;\n    }\n\n    await this._relayoutRegisteredFlow(flowId, registration);\n  }\n\n  private async _relayoutRegisteredFlow(\n    flowId: string,\n    registration: IFlowRegistration,\n  ): Promise<void> {\n    if (!this._engine) {\n      return;\n    }\n\n    const graph = normalizeFlowLayoutData(registration.flow.getState({ measuredSize: true }));\n    const runId = ++registration.runId;\n    const result = await this._engine.calculate(graph.nodes, graph.connections, {\n      flowId,\n      mode: this._engine.getMode(),\n    });\n    const nextRegistration = this._flows.get(flowId);\n\n    if (!nextRegistration || nextRegistration.runId !== runId) {\n      return;\n    }\n\n    const changedNodes = this._applyPositions(nextRegistration.store, result.nodes);\n\n    if (!changedNodes.length) {\n      return;\n    }\n\n    nextRegistration.isApplying = true;\n\n    try {\n      nextRegistration.flow.redraw();\n      this._emitWriteback(flowId, result.nodes, graph.nodeIds, graph.groupIds);\n    } finally {\n      queueMicrotask(() => {\n        const current = this._flows.get(flowId);\n\n        if (current) {\n          current.isApplying = false;\n        }\n      });\n    }\n  }\n\n  private _emitWriteback(\n    flowId: string,\n    nodes: IFLayoutNodePosition[],\n    nodeIds: Set<string>,\n    groupIds: Set<string>,\n  ): void {\n    const handler = this._engine?.getWriteback();\n\n    if (!handler) {\n      return;\n    }\n\n    handler({\n      flowId,\n      nodes: nodes.filter((node) => nodeIds.has(node.id)),\n      groups: nodes.filter((node) => groupIds.has(node.id)),\n    });\n  }\n\n  private _applyPositions(\n    store: FComponentsStore,\n    nodes: IFLayoutNodePosition[],\n  ): IFLayoutNodePosition[] {\n    return nodes.filter((node) => {\n      const registeredNode = store.nodes.get(node.id);\n\n      if (!registeredNode || PointExtensions.isEqual(registeredNode._position, node.position)) {\n        return false;\n      }\n\n      registeredNode.position.set({ ...node.position });\n\n      return true;\n    });\n  }\n\n  private _buildNodeSignature(store: FComponentsStore): string {\n    return store.nodes\n      .getAll()\n      .map((node) => node.fId())\n      .sort()\n      .join('|');\n  }\n\n  private _buildConnectionSignature(store: FComponentsStore): string {\n    return store.connections\n      .getAll()\n      .map((connection) => `${connection.fId()}:${connection.fOutputId()}:${connection.fInputId()}`)\n      .sort()\n      .join('|');\n  }\n\n  private _runAfterNextPaint(registration: IFlowRegistration, callback: () => void): void {\n    this._cancelAnimationFrames(registration);\n\n    if (typeof requestAnimationFrame !== 'function') {\n      callback();\n\n      return;\n    }\n\n    registration.raf1 = requestAnimationFrame(() => {\n      registration.raf1 = null;\n      registration.raf2 = requestAnimationFrame(() => {\n        registration.raf2 = null;\n        callback();\n      });\n    });\n  }\n\n  private _clearScheduledWork(registration: IFlowRegistration): void {\n    if (registration.timeoutId !== null) {\n      clearTimeout(registration.timeoutId);\n      registration.timeoutId = null;\n    }\n\n    this._cancelAnimationFrames(registration);\n  }\n\n  private _cancelAnimationFrames(registration: IFlowRegistration): void {\n    if (registration.raf1 !== null && typeof cancelAnimationFrame === 'function') {\n      cancelAnimationFrame(registration.raf1);\n      registration.raf1 = null;\n    }\n\n    if (registration.raf2 !== null && typeof cancelAnimationFrame === 'function') {\n      cancelAnimationFrame(registration.raf2);\n      registration.raf2 = null;\n    }\n  }\n}\n","import { EFLayoutMode } from '../enums';\nimport { IFLayoutOptions } from './i-f-layout-options';\nimport { TFLayoutWritebackHandler } from './i-f-layout-writeback-payload';\nimport { InjectionToken } from '@angular/core';\n\nexport const F_LAYOUT_OPTIONS = new InjectionToken<IFLayoutProviderConfig>('F_LAYOUT_OPTIONS');\n\nexport interface IFLayoutProviderConfig<\n  TOptions extends IFLayoutOptions<string> = IFLayoutOptions<string>,\n> {\n  mode?: EFLayoutMode;\n\n  writeback?: TFLayoutWritebackHandler | null;\n\n  options?: Partial<TOptions>;\n}\n","import { IPoint } from '@foblex/2d';\nimport { IFLayoutNode } from './i-f-layout-node';\nimport { IFLayoutNodePosition } from './i-f-layout-node-position';\n\nexport function mergeLayoutNodes(\n  nodes: IFLayoutNode[],\n  positions: Map<string, IPoint>,\n): IFLayoutNodePosition[] {\n  return nodes.reduce<IFLayoutNodePosition[]>((result, node) => {\n    const position = positions.get(node.id);\n\n    if (!position) {\n      return result;\n    }\n\n    result.push({\n      id: node.id,\n      position,\n    });\n\n    return result;\n  }, []);\n}\n","import { computed, inject, InjectionToken, Signal, signal, WritableSignal } from '@angular/core';\nimport { EFLayoutMode } from './enums';\nimport { FLayoutController } from './flow-integration';\nimport {\n  F_LAYOUT_OPTIONS,\n  IFLayoutCalculationOptions,\n  IFLayoutConnection,\n  IFLayoutNode,\n  IFLayoutOptions,\n  IFLayoutProviderConfig,\n  IFLayoutResult,\n  TFLayoutWritebackHandler,\n} from './models';\n\nexport const F_LAYOUT = new InjectionToken<FLayoutEngine>('F_LAYOUT');\n\ntype TReadonlyDeep<T> = {\n  readonly [K in keyof T]: T[K] extends object ? TReadonlyDeep<T[K]> : T[K];\n};\n\nexport abstract class FLayoutEngine<\n  TOptions extends IFLayoutOptions<string> = IFLayoutOptions<string>,\n> {\n  private readonly _controller = inject(FLayoutController);\n  private readonly _config =\n    (inject(F_LAYOUT_OPTIONS, { optional: true }) as IFLayoutProviderConfig<TOptions> | null) ?? {};\n\n  private _interactiveOptions!: WritableSignal<TOptions>;\n  private _mode: EFLayoutMode;\n  private _writeback: TFLayoutWritebackHandler | null;\n  private _defaultOptions: TOptions;\n\n  public readonly interactiveOptions!: Signal<TReadonlyDeep<TOptions>>;\n\n  protected constructor(defaultOptions: TOptions) {\n    this._mode = this._config.mode ?? EFLayoutMode.MANUAL;\n    this._writeback = this._config.writeback ?? null;\n    this._defaultOptions = this.mergeOptions(defaultOptions, this._config.options);\n    this._interactiveOptions = signal(this.mergeOptions(this._defaultOptions, {}));\n    this.interactiveOptions = computed(() =>\n      this.mergeOptions(this._interactiveOptions(), {}),\n    ) as Signal<TReadonlyDeep<TOptions>>;\n\n    this._controller.attachEngine(this);\n  }\n\n  public setMode(mode: EFLayoutMode): void {\n    this._mode = mode;\n    this._controller.handleModeChanged(mode);\n  }\n\n  public getMode(): EFLayoutMode {\n    return this._mode;\n  }\n\n  public setWriteback(handler: TFLayoutWritebackHandler | null): void {\n    this._writeback = handler;\n  }\n\n  public getWriteback(): TFLayoutWritebackHandler | null {\n    return this._writeback;\n  }\n\n  public setInteractiveOptions(options: Partial<TOptions>): void {\n    this._interactiveOptions.set(this.mergeOptions(this._interactiveOptions(), options));\n  }\n\n  public relayout(flowId?: string): Promise<void> {\n    return this._controller.relayout(flowId);\n  }\n\n  public getProviderConfig(): IFLayoutProviderConfig<TOptions> {\n    return { ...this._config };\n  }\n\n  protected resolveLayoutOptions(options?: IFLayoutCalculationOptions<TOptions>): TOptions {\n    const layoutOptions = {\n      ...(options ?? {}),\n    } as Partial<TOptions> & { flowId?: string; mode?: EFLayoutMode };\n\n    delete layoutOptions.flowId;\n    delete layoutOptions.mode;\n\n    return this.mergeOptions(this._interactiveOptions(), layoutOptions);\n  }\n\n  protected abstract mergeOptions(\n    currentOptions: TOptions,\n    nextOptions?: Partial<TOptions>,\n  ): TOptions;\n\n  public abstract calculate(\n    nodes: IFLayoutNode[],\n    connections: IFLayoutConnection[],\n    options?: IFLayoutCalculationOptions<TOptions>,\n  ): Promise<IFLayoutResult>;\n}\n","import { Provider, Type } from '@angular/core';\nimport { F_LAYOUT, FLayoutEngine } from './f-layout-engine';\nimport { FLayoutController } from './flow-integration';\nimport { F_LAYOUT_OPTIONS, IFLayoutOptions, IFLayoutProviderConfig } from './models';\n\nexport function provideFLayout<\n  TOptions extends IFLayoutOptions<string>,\n  T extends FLayoutEngine<TOptions>,\n>(engineType: Type<T>, config?: IFLayoutProviderConfig<TOptions>): Provider[] {\n  return [\n    FLayoutController,\n    engineType,\n    {\n      provide: F_LAYOUT,\n      useExisting: engineType,\n    },\n    {\n      provide: F_LAYOUT_OPTIONS,\n      useValue: config ?? {},\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';\nimport { FLayoutController } from '../../../plugins/layout/f-layout';\n\n/**\n * Execution that adds a Flow to the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(AddFlowToStoreRequest)\nexport class AddFlowToStore implements IExecution<AddFlowToStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _layoutController = inject(FLayoutController, { optional: true });\n\n  public handle({ instance }: AddFlowToStoreRequest): void {\n    this._store.fFlow = instance;\n    this._layoutController?.registerFlow(instance, this._store);\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 GetFlow implements IExecution<GetFlowRequest, FFlowBase> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_: 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 CalculateConnectionsStateRequest {\n  static readonly fToken = Symbol('CalculateConnectionsStateRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CalculateConnectionsStateRequest } from './calculate-connections-state-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-v2';\n\n/**\n * Execution that retrieves the current Flow state connections from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(CalculateConnectionsStateRequest)\nexport class CalculateConnectionsState\n  implements IExecution<CalculateConnectionsStateRequest, IFFlowStateConnection[]>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: CalculateConnectionsStateRequest): IFFlowStateConnection[] {\n    return this._store.connections.getAll().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      waypoints: x.fWaypoints()?.waypoints() || [],\n      fInputSide: x.fInputSide(),\n      fOutputSide: x.fOutputSide(),\n    };\n  }\n}\n","import { Type } from '@angular/core';\n\nexport class CalculateNodesStateRequest {\n  static readonly fToken = Symbol('CalculateNodesStateRequest');\n  constructor(\n    public readonly component: Type<unknown>,\n    public readonly measuredSize: boolean = false,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CalculateNodesStateRequest } from './calculate-nodes-state-request';\nimport { FExecutionRegister, FMediator, 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';\nimport { GetNormalizedElementRectRequest } from '../../../get-normalized-element-rect';\nimport { IRect } from '@foblex/2d';\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(CalculateNodesStateRequest)\nexport class CalculateNodesState\n  implements IExecution<CalculateNodesStateRequest, IFFlowStateNode[]>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  public handle({ component, measuredSize }: CalculateNodesStateRequest): IFFlowStateNode[] {\n    return this._store.nodes\n      .getAll()\n      .filter((x) => x instanceof component)\n      .map((x) => {\n        const measuredRect = measuredSize\n          ? this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(x.hostElement))\n          : null;\n\n        return {\n          id: x.fId(),\n          parentId: x.fParentId() ?? undefined,\n          position: { ...x._position },\n          size: x._size ? { ...x._size } : undefined,\n          measuredSize: measuredRect\n            ? {\n                width: measuredRect.width,\n                height: measuredRect.height,\n              }\n            : undefined,\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.outputs\n      .getAll()\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.inputs\n      .getAll()\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 CalculateFlowStateRequest {\n  static readonly fToken = Symbol('CalculateFlowStateRequest');\n\n  constructor(public readonly measuredSize: boolean = false) {}\n}\n","import { CalculateFlowStateRequest } from './calculate-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 { CalculateNodesStateRequest } from './calculate-nodes-state';\nimport { CalculateConnectionsStateRequest } from './calculate-connections-state';\nimport { FCanvasBase } from '../../../f-canvas';\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(CalculateFlowStateRequest)\nexport class CalculateFlowState implements IExecution<CalculateFlowStateRequest, IFFlowState> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  private get _transform(): ITransformModel {\n    return this._canvas.transform;\n  }\n\n  private get _canvasPosition(): IPoint {\n    return PointExtensions.sum(this._transform.position, this._transform.scaledPosition);\n  }\n\n  public handle({ measuredSize }: CalculateFlowStateRequest): IFFlowState {\n    return {\n      position: this._canvasPosition,\n      scale: this._canvas.transform.scale,\n      nodes: this._mediator.execute(new CalculateNodesStateRequest(FNodeDirective, measuredSize)),\n      groups: this._mediator.execute(new CalculateNodesStateRequest(FGroupDirective, measuredSize)),\n      connections: this._mediator.execute(new CalculateConnectionsStateRequest()),\n    };\n  }\n}\n","import { CalculateFlowState } from './calculate-flow-state';\nimport { CalculateNodesState } from './calculate-nodes-state';\nimport { CalculateConnectionsState } from './calculate-connections-state';\n\n/**\n * Providers for retrieving the current Flow state, including nodes, groups, and connections.\n */\nexport const GET_FLOW_STATE_PROVIDERS = [\n  CalculateFlowState,\n\n  CalculateNodesState,\n\n  CalculateConnectionsState,\n];\n","import { FFlowBase } from '../../../f-flow';\n\nexport class RemoveFlowFromStoreRequest {\n  static readonly fToken = Symbol('RemoveFlowFromStoreRequest');\n\n  constructor(public readonly instance: FFlowBase) {}\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';\nimport { FLayoutController } from '../../../plugins/layout/f-layout';\n\n/**\n * Execution that removes a Flow from the FComponentsStore.\n */\n@Injectable()\n@FExecutionRegister(RemoveFlowFromStoreRequest)\nexport class RemoveFlowFromStore implements IExecution<RemoveFlowFromStoreRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _layoutController = inject(FLayoutController, { optional: true });\n\n  public handle({ instance }: RemoveFlowFromStoreRequest): void {\n    this._layoutController?.unregisterFlow(instance.fId());\n    this._store.fFlow = undefined;\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class RenderLifecycleState {\n  public isNodesRendered = false;\n  public isFullRendered = false;\n}\n","export class NotifyNodesRenderedRequest {\n  static readonly fToken = Symbol('NotifyNodesRenderedRequest');\n}\n","import {\n  InjectionToken,\n  InputSignal,\n  InputSignalWithTransform,\n  OutputEmitterRef,\n} from '@angular/core';\nimport { IHasHostElement } from '../i-has-host-element';\nimport type { IFFlowState, IFFlowStateOptions } from '../domain';\n\nexport const F_FLOW = new InjectionToken<FFlowBase>('F_FLOW');\n\nexport abstract class FFlowBase implements IHasHostElement {\n  public abstract fId: InputSignal<string>;\n  public abstract fCache: InputSignalWithTransform<boolean, unknown>;\n\n  public abstract hostElement: HTMLElement;\n\n  public abstract fNodesRendered: OutputEmitterRef<string>;\n\n  public abstract fFullRendered: OutputEmitterRef<string>;\n\n  /**\n   * @deprecated Use `fFullRendered` instead.\n   */\n  public abstract fLoaded: OutputEmitterRef<string>;\n\n  public abstract redraw(): void;\n\n  public abstract getState(options?: IFFlowStateOptions): IFFlowState;\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { NotifyNodesRenderedRequest } from './notify-nodes-rendered-request';\nimport { RenderLifecycleState } from '../render-lifecycle-state';\nimport { F_FLOW, FFlowBase } from '../../../../f-flow/f-flow-base';\n\n@Injectable()\n@FExecutionRegister(NotifyNodesRenderedRequest)\nexport class NotifyNodesRendered implements IExecution<NotifyNodesRenderedRequest, void> {\n  private readonly _state = inject(RenderLifecycleState);\n  private readonly _fFlow = inject<FFlowBase>(F_FLOW);\n\n  public handle(_: NotifyNodesRenderedRequest): void {\n    if (this._state.isNodesRendered) {\n      return;\n    }\n\n    this._state.isNodesRendered = true;\n    this._fFlow.fNodesRendered.emit(this._fFlow.fId());\n  }\n}\n","export class NotifyFullRenderedRequest {\n  static readonly fToken = Symbol('NotifyFullRenderedRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { NotifyFullRenderedRequest } from './notify-full-rendered-request';\nimport { RenderLifecycleState } from '../render-lifecycle-state';\nimport { F_FLOW, FFlowBase } from '../../../../f-flow/f-flow-base';\n\n@Injectable()\n@FExecutionRegister(NotifyFullRenderedRequest)\nexport class NotifyFullRendered implements IExecution<NotifyFullRenderedRequest, void> {\n  private readonly _state = inject(RenderLifecycleState);\n  private readonly _fFlow = inject<FFlowBase>(F_FLOW);\n\n  public handle(_: NotifyFullRenderedRequest): void {\n    if (this._state.isFullRendered) {\n      return;\n    }\n\n    this._state.isFullRendered = true;\n    this._fFlow.fFullRendered.emit(this._fFlow.fId());\n    this._fFlow.fLoaded.emit(this._fFlow.fId());\n  }\n}\n","import { DestroyRef } from '@angular/core';\n\nexport class WaitForConnectionsRenderedRequest {\n  static readonly fToken = Symbol('WaitForConnectionsRenderedRequest');\n\n  constructor(\n    public readonly targetConnectionsRevision: number,\n    public readonly targetNodesRevision: number,\n    public readonly callback: () => void,\n    public readonly destroyRef: DestroyRef,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { WaitForConnectionsRenderedRequest } from './wait-for-connections-rendered-request';\nimport { FComponentsStore } from '../../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(WaitForConnectionsRenderedRequest)\nexport class WaitForConnectionsRendered\n  implements IExecution<WaitForConnectionsRenderedRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({\n    targetConnectionsRevision,\n    targetNodesRevision,\n    callback,\n    destroyRef,\n  }: WaitForConnectionsRenderedRequest): void {\n    if (\n      this._store.connectionsRenderedRevision >= targetConnectionsRevision &&\n      this._store.connectionsRenderedNodesRevision >= targetNodesRevision\n    ) {\n      callback();\n\n      return;\n    }\n\n    const stop = this._store.connectionsRenderedChanges$.listen(() => {\n      if (\n        this._store.connectionsRenderedRevision < targetConnectionsRevision ||\n        this._store.connectionsRenderedNodesRevision < targetNodesRevision\n      ) {\n        return;\n      }\n\n      stop();\n      callback();\n    });\n\n    destroyRef.onDestroy(stop);\n  }\n}\n","export class ResetRenderLifecycleRequest {\n  static readonly fToken = Symbol('ResetRenderLifecycleRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { ResetRenderLifecycleRequest } from './reset-render-lifecycle-request';\nimport { RenderLifecycleState } from '../render-lifecycle-state';\n\n@Injectable()\n@FExecutionRegister(ResetRenderLifecycleRequest)\nexport class ResetRenderLifecycle implements IExecution<ResetRenderLifecycleRequest, void> {\n  private readonly _state = inject(RenderLifecycleState);\n\n  public handle(_: ResetRenderLifecycleRequest): void {\n    this._state.isNodesRendered = false;\n    this._state.isFullRendered = false;\n  }\n}\n","import { DestroyRef } from '@angular/core';\n\nexport class QueueConnectionRedrawRequest {\n  static readonly fToken = Symbol('QueueConnectionRedrawRequest');\n\n  constructor(public readonly destroyRef: DestroyRef) {}\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class QueueConnectionRedrawState {\n  public isWaitingForViewportAnimation = false;\n  public pendingRedraw = false;\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { QueueConnectionRedrawRequest } from './queue-connection-redraw-request';\nimport { QueueConnectionRedrawState } from './queue-connection-redraw-state';\nimport { FComponentsStore } from '../../../../f-storage';\nimport { RedrawConnectionsRequest } from '../../../f-connection';\n\n@Injectable()\n@FExecutionRegister(QueueConnectionRedrawRequest)\nexport class QueueConnectionRedraw implements IExecution<QueueConnectionRedrawRequest, void> {\n  private readonly _state = inject(QueueConnectionRedrawState);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  public handle(request: QueueConnectionRedrawRequest): void {\n    this._state.pendingRedraw = true;\n\n    if (this._state.isWaitingForViewportAnimation) {\n      return;\n    }\n\n    this._state.isWaitingForViewportAnimation = true;\n\n    const stop = this._store.viewportAnimationChanges$.listen(() => {\n      if (this._store.isViewportAnimating) {\n        return;\n      }\n\n      const shouldRedraw = this._state.pendingRedraw;\n      stop();\n      this._state.isWaitingForViewportAnimation = false;\n      this._state.pendingRedraw = false;\n\n      if (!shouldRedraw) {\n        return;\n      }\n\n      this._mediator.execute(new RedrawConnectionsRequest());\n    });\n\n    request.destroyRef.onDestroy(stop);\n  }\n}\n","import { AddFlowToStore } from './add-flow-to-store';\nimport { RemoveFlowFromStore } from './remove-flow-from-store';\nimport { GetFlow } from './get-flow';\nimport { GET_FLOW_STATE_PROVIDERS } from './calculate-flow-state';\nimport {\n  RenderLifecycleState,\n  NotifyNodesRendered,\n  NotifyFullRendered,\n  WaitForConnectionsRendered,\n  ResetRenderLifecycle,\n  QueueConnectionRedrawState,\n  QueueConnectionRedraw,\n} from './render-lifecycle';\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  AddFlowToStore,\n\n  GetFlow,\n\n  ...GET_FLOW_STATE_PROVIDERS,\n\n  RemoveFlowFromStore,\n\n  RenderLifecycleState,\n  NotifyNodesRendered,\n  NotifyFullRendered,\n  WaitForConnectionsRendered,\n  ResetRenderLifecycle,\n\n  QueueConnectionRedrawState,\n  QueueConnectionRedraw,\n];\n","export class ClearSelectionRequest {\n  static readonly fToken = Symbol('ClearSelectionRequest');\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 ClearSelection implements IExecution<ClearSelectionRequest, void> {\n  private _dragContext = inject(FDraggableDataContext);\n\n  public handle(_: ClearSelectionRequest): void {\n    this._dragContext.selectedItems.forEach((x) => x.unmarkAsSelected());\n    this._dragContext.selectedItems = [];\n    this._dragContext.isSelectedChanged = true;\n  }\n}\n","export class CalculateSelectableItemsRequest {\n  static readonly fToken = Symbol('CalculateSelectableItemsRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IRect } from '@foblex/2d';\nimport { ICanBeSelectedElementAndRect } from './i-can-be-selected-element-and-rect';\nimport { CalculateSelectableItemsRequest } from './calculate-selectable-items-request';\nimport { FNodeBase } from '../../../f-node';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FDraggableDataContext } from '../../../f-draggable';\nimport { GetNormalizedElementRectRequest } from '../../get-normalized-element-rect';\nimport { FConnectionBase } from '../../../f-connection-v2';\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(CalculateSelectableItemsRequest)\nexport class CalculateSelectableItems implements IExecution<void, ICanBeSelectedElementAndRect[]> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext);\n\n  private get _nodes(): FNodeBase[] {\n    return this._store.nodes.getAll();\n  }\n\n  private get _connections(): FConnectionBase[] {\n    return this._store.connections.getAll();\n  }\n\n  public handle(): ICanBeSelectedElementAndRect[] {\n    return [...this._nodeRects(), ...this._connectionRects()].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 _nodeRects(): ICanBeSelectedElementAndRect[] {\n    return this._nodes\n      .filter((x) => !x.fSelectionDisabled())\n      .map((x) => {\n        return {\n          element: x,\n          fRect: this._mediator.execute<IRect>(new GetNormalizedElementRectRequest(x.hostElement)),\n        };\n      });\n  }\n\n  /**\n   * Retrieves connections with their bounding rectangles that can be selected.\n   * @private\n   */\n  private _connectionRects(): ICanBeSelectedElementAndRect[] {\n    return this._connections\n      .filter((x) => !x.fSelectionDisabled())\n      .map((x) => {\n        return {\n          element: x,\n          fRect: this._mediator.execute<IRect>(\n            new GetNormalizedElementRectRequest(x.boundingElement),\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 GetCurrentSelection implements IExecution<\n  GetCurrentSelectionRequest,\n  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(\n        (x) =>\n          !x.hostElement.classList.contains('f-node') &&\n          !x.hostElement.classList.contains('f-group'),\n      )\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","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 Select implements IExecution<SelectRequest, void> {\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.nodes.get(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.connections.get(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 SelectAll implements IExecution<SelectAllRequest, void> {\n  private readonly _dragSession = inject(FDraggableDataContext);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: SelectAllRequest): void {\n    this._dragSession.selectedItems.forEach((x) => {\n      x.unmarkAsSelected();\n    });\n    this._dragSession.selectedItems = [];\n    this._store.nodes.getAll().forEach((x) => {\n      x.markAsSelected();\n      this._dragSession.selectedItems.push(x);\n    });\n    this._store.connections.getAll().forEach((x) => {\n      x.markAsSelected();\n      this._dragSession.selectedItems.push(x);\n    });\n    this._dragSession.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","export class GetDeepChildrenNodesAndGroupsRequest {\n  static readonly fToken = Symbol('GetDeepChildrenNodesAndGroupsRequest');\n  constructor(public readonly nodeOrGroupId: string) {}\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 GetDeepChildrenNodesAndGroups implements IExecution<\n  GetDeepChildrenNodesAndGroupsRequest,\n  FNodeBase[]\n> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ nodeOrGroupId }: GetDeepChildrenNodesAndGroupsRequest): FNodeBase[] {\n    return this._getChildrenNodes(nodeOrGroupId);\n  }\n\n  private _getChildrenNodes(nodeOrGroupId: string, visited = new Set<string>()): FNodeBase[] {\n    if (visited.has(nodeOrGroupId)) {\n      throw new Error(\n        'Circular reference detected in the node hierarchy. Node id: ' + nodeOrGroupId,\n      );\n    }\n    visited.add(nodeOrGroupId);\n\n    const directChildren = this._store.nodes\n      .getAll()\n      .filter((x) => x.fParentId() === nodeOrGroupId);\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 UpdateItemAndChildrenLayers\n  implements IExecution<UpdateItemAndChildrenLayersRequest, void>\n{\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  private get _groupsContainer(): HTMLElement {\n    return this._canvas.fGroupsContainer().nativeElement;\n  }\n\n  private get _nodesContainer(): HTMLElement {\n    return this._canvas.fNodesContainer().nativeElement;\n  }\n\n  private get _connectionsContainer(): HTMLElement {\n    return this._canvas.fConnectionsContainer().nativeElement;\n  }\n\n  public handle(request: UpdateItemAndChildrenLayersRequest): void {\n    switch (request.itemContainer) {\n      case this._groupsContainer:\n        this._handleGroup(request);\n        break;\n      case this._nodesContainer:\n        this._handleNode(request);\n        break;\n      case this._connectionsContainer:\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(\n      this._groupsContainer,\n      request.item.hostElement as HTMLElement,\n      childrenGroups,\n    );\n    const childrenNodes = this._getChildrenNodes(childrenNodesAndGroups);\n    if (childrenNodes.length) {\n      this._updateLayers(this._nodesContainer, 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(\n      request.itemContainer,\n      request.item.hostElement as HTMLElement,\n      childrenNodes,\n    );\n  }\n\n  private _handleConnection(request: UpdateItemAndChildrenLayersRequest): void {\n    this._updateLayers(request.itemContainer, request.item.hostElement as HTMLElement, []);\n  }\n\n  private _updateLayers(\n    itemContainer: HTMLElement,\n    item: HTMLElement,\n    elementsThatShouldBeInFront: HTMLElement[],\n  ): 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(\n          itemContainer,\n          allElements,\n          elementsThatShouldBeInFront,\n          targetIndex,\n        ),\n      );\n    }\n  }\n\n  private _isAnythingNeedToBeMoved(\n    allElements: HTMLElement[],\n    targetIndex: number,\n    elementsThatShouldBeInFront: HTMLElement[],\n  ): 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._groupsContainer.children) as HTMLElement[];\n\n    return elements\n      .filter((x) => this._groupsContainer.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._nodesContainer.children) as HTMLElement[];\n\n    return elements\n      .filter((x) => this._nodesContainer.contains(x))\n      .sort((a, b) => allElements.indexOf(a) - allElements.indexOf(b));\n  }\n\n  private _getChildrenNodesAndGroups(fId: string): HTMLElement[] {\n    return this._mediator\n      .execute<FNodeBase[]>(new GetDeepChildrenNodesAndGroupsRequest(fId))\n      .map((x) => x.hostElement);\n  }\n}\n","import { FExecutionRegister, FMediator, IHandler } from '@foblex/mediator';\nimport { inject, Injectable } from '@angular/core';\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 SelectAndUpdateNodeLayer implements IHandler<SelectAndUpdateNodeLayerRequest, void> {\n  private readonly _dragSession = 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(node: FNodeBase) {\n    if (node.fSelectionDisabled()) {\n      return;\n    }\n    if (this._dragSession.selectedItems.includes(node)) {\n      return;\n    }\n    this._dragSession.selectedItems.push(node);\n    node.markAsSelected();\n    this._dragSession.isSelectedChanged = true;\n  }\n}\n","import { ClearSelection } from './clear-selection';\nimport { GetCurrentSelection } from './get-current-selection';\nimport { Select } from './select-items';\nimport { SelectAll } from './select-all';\nimport { SelectAndUpdateNodeLayer } from './select-and-update-node-layer';\nimport { CalculateSelectableItems } from './calculate-selectable-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  ClearSelection,\n\n  CalculateSelectableItems,\n\n  GetCurrentSelection,\n\n  Select,\n\n  SelectAll,\n\n  SelectAndUpdateNodeLayer,\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 ResetZoom implements IExecution<ResetZoomRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  public handle(_request: ResetZoomRequest): void {\n    this._canvas.resetScale();\n    this._canvas.redraw();\n    this._canvas.emitCanvasChangeEvent();\n  }\n}\n","import { IPoint } from '@foblex/2d';\n\nexport class SetZoomRequest {\n  static readonly fToken = Symbol('SetZoomRequest');\n  constructor(\n    public readonly position: IPoint,\n    public readonly step: number,\n    public readonly direction: number,\n    public readonly animate: boolean = false,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, FMediator, IExecution } from '@foblex/mediator';\nimport { SetZoomRequest } from './set-zoom-request';\nimport { FComponentsStore, INSTANCES } from '../../../f-storage';\nimport { IPoint, Point } from '@foblex/2d';\nimport { FCanvasBase } from '../../../f-canvas';\nimport { FZoomBase } from '../../../f-zoom';\nimport { IsDragStartedRequest } from '../../f-draggable';\nimport { FDraggableDataContext } from '../../../f-draggable';\n\nconst DRAG_KINDS_WITH_REBASE = new Set([\n  'drag-node',\n  'drag-external-item',\n  'resize-node',\n  'rotate-node',\n  'create-connection',\n  'reassign-connection',\n  'drag-connection-waypoint',\n  'assign-to-container',\n]);\nconst DRAG_KINDS_WITHOUT_REBASE = new Set(['drag-canvas', 'selection-area']);\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 SetZoom implements IExecution<SetZoomRequest, void> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n  private readonly _dragContext = inject(FDraggableDataContext, { optional: true });\n\n  private get _flowHost(): HTMLElement {\n    return this._store.flowHost;\n  }\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  private get _zoomComponent(): FZoomBase | undefined {\n    return this._store.instances.get(INSTANCES.ZOOM);\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._zoomComponent) {\n      return;\n    }\n    const currentScale = this._canvas.transform.scale;\n    const nextScale = this._clamp(currentScale + request.step * request.direction);\n    if (nextScale === currentScale) {\n      return;\n    }\n\n    const positionInFlowHost = this._castPositionToFlow(request.position);\n    if (this._isDragStarted) {\n      const mode = this._getDragZoomMode();\n      if (mode === 'blocked') {\n        return;\n      }\n\n      if (mode === 'rebase') {\n        this._rebaseDragContext(positionInFlowHost, nextScale);\n      }\n    }\n\n    this._canvas.setScale(nextScale, positionInFlowHost);\n    request.animate ? this._canvas.redrawWithAnimation() : this._canvas.redraw();\n    this._canvas.emitCanvasChangeEvent();\n  }\n\n  private _clamp(value: number): number {\n    return Math.max(\n      this._zoomComponent?.minimum || 1,\n      Math.min(value, this._zoomComponent?.maximum || 1),\n    );\n  }\n\n  private _castPositionToFlow(position: IPoint): IPoint {\n    return Point.fromPoint(position).elementTransform(this._flowHost);\n  }\n\n  private _getDragZoomMode(): 'blocked' | 'rebase' | 'direct' {\n    if (this._dragContext?.isEmpty()) {\n      return 'blocked';\n    }\n\n    let shouldRebase = false;\n\n    for (const handler of this._dragContext?.draggableItems ?? []) {\n      const kind = handler.getEvent().kind;\n      if (DRAG_KINDS_WITH_REBASE.has(kind)) {\n        shouldRebase = true;\n        continue;\n      }\n      if (DRAG_KINDS_WITHOUT_REBASE.has(kind)) {\n        continue;\n      }\n\n      return 'blocked';\n    }\n\n    return shouldRebase ? 'rebase' : 'direct';\n  }\n\n  private _rebaseDragContext(positionInFlowHost: IPoint, nextScale: number): void {\n    if (!this._dragContext) {\n      return;\n    }\n    const pointerDownScale = this._dragContext.onPointerDownScale;\n    if (!pointerDownScale || pointerDownScale === nextScale) {\n      this._dragContext.onPointerDownScale = nextScale;\n\n      return;\n    }\n\n    const scaleDelta = 1 / nextScale - 1 / pointerDownScale;\n    this._dragContext.onPointerDownPosition = Point.fromPoint(\n      this._dragContext.onPointerDownPosition,\n    ).add(Point.fromPoint(positionInFlowHost).mult(scaleDelta));\n    this._dragContext.onPointerDownScale = nextScale;\n  }\n}\n","import { SetZoom } from './set-zoom';\nimport { ResetZoom } 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 = [ResetZoom, SetZoom];\n","export class MinimapDrawNodesRequest {\n  static readonly fToken = Symbol('MinimapDrawNodesRequest');\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 MinimapDrawNodes implements IExecution<MinimapDrawNodesRequest, SVGRectElement[]> {\n  private readonly _browser = inject(BrowserService);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_: MinimapDrawNodesRequest): SVGRectElement[] {\n    const flow = this._store.fFlow;\n    const canvas = this._store.fCanvas;\n\n    if (!flow || !canvas) {\n      return [];\n    }\n\n    const nodes = this._store.nodes.getAll();\n\n    return nodes.map((node) => this._renderNode(node, flow, canvas));\n  }\n\n  private _renderNode(node: FNodeBase, flow: FFlowBase, canvas: FCanvasBase): SVGRectElement {\n    const rect = createSVGElement('rect', this._browser);\n    setRectToElement(this._nodeRect(node, flow, canvas), rect);\n\n    const isNode = node instanceof FNodeDirective;\n\n    rect.classList.add('f-component', isNode ? 'f-minimap-node' : 'f-minimap-group');\n    rect.classList.add(...this._minimapClasses(node));\n\n    if (node.isSelected()) {\n      rect.classList.add('f-selected');\n    }\n\n    return rect;\n  }\n\n  private _nodeRect(node: FNodeBase, flow: FFlowBase, canvas: FCanvasBase): IRect {\n    const inFlow = RectExtensions.elementTransform(\n      RectExtensions.fromElement(node.hostElement),\n      flow.hostElement,\n    );\n\n    return RectExtensions.div(inFlow, canvas.transform.scale);\n  }\n\n  private _minimapClasses(node: FNodeBase): string[] {\n    const classes = node.fMinimapClass();\n\n    return Array.isArray(classes) ? classes : [classes];\n  }\n}\n","export class MinimapCalculateViewportRequest {\n  static readonly fToken = Symbol('MinimapCalculateViewportRequest');\n\n  constructor(\n    public readonly svg: SVGSVGElement,\n    public readonly minSize: number,\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MinimapCalculateViewportRequest } from './minimap-calculate-viewport-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 { IMinimapViewport } from './i-minimap-viewport';\nimport { CalculateNodesBoundingBoxRequest } from '../../f-node';\n\n@Injectable()\n@FExecutionRegister(MinimapCalculateViewportRequest)\nexport class MinimapCalculateViewport implements IExecution<\n  MinimapCalculateViewportRequest,\n  IMinimapViewport\n> {\n  private readonly _mediator = inject(FMediator);\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ svg, minSize }: MinimapCalculateViewportRequest): IMinimapViewport {\n    const flow = this._store.fFlow;\n    const canvas = this._store.fCanvas;\n\n    if (!flow || !canvas) {\n      return { scale: 1, viewBox: RectExtensions.initialize(0, 0, 0, 0) };\n    }\n\n    const contentRect = this._contentRectInMinimapSpace(flow, canvas, minSize);\n    const minimapRect = this._minimapRectInFlowSpace(svg, flow);\n\n    const scale = this._viewportScale(contentRect, minimapRect);\n    const viewBox = this._viewportViewBox(contentRect, minimapRect, scale);\n\n    return { scale, viewBox };\n  }\n\n  private _contentRectInMinimapSpace(flow: FFlowBase, canvas: FCanvasBase, minSize: number): IRect {\n    const global = this._nodesBoundingBox();\n    const inFlow = RectExtensions.elementTransform(global, flow.hostElement);\n    const inMinimap = RectExtensions.div(inFlow, canvas.transform.scale);\n\n    return adjustRectToMinSize(inMinimap, minSize);\n  }\n\n  private _nodesBoundingBox(): IRect {\n    return (\n      this._mediator.execute<IRect | null>(new CalculateNodesBoundingBoxRequest()) ??\n      RectExtensions.initialize(0, 0, 0, 0)\n    );\n  }\n\n  private _minimapRectInFlowSpace(svg: SVGSVGElement, flow: FFlowBase): IRect {\n    return RectExtensions.elementTransform(RectExtensions.fromElement(svg), flow.hostElement);\n  }\n\n  private _viewportScale(contentRect: IRect, minimapRect: IRect): number {\n    // avoid division by zero\n    const mw = minimapRect.width || 1;\n    const mh = minimapRect.height || 1;\n\n    return Math.max(contentRect.width / mw, contentRect.height / mh);\n  }\n\n  private _viewportViewBox(contentRect: IRect, minimapRect: IRect, scale: number): IRect {\n    const viewSize = this._viewportSize(minimapRect, scale);\n\n    const x = contentRect.x - (viewSize.width - contentRect.width) / 2;\n    const y = contentRect.y - (viewSize.height - contentRect.height) / 2;\n\n    return RectExtensions.initialize(x, y, viewSize.width, viewSize.height);\n  }\n\n  private _viewportSize(minimapRect: IRect, scale: number): ISize {\n    return SizeExtensions.initialize(\n      minimapRect.width * scale || 0,\n      minimapRect.height * scale || 0,\n    );\n  }\n}\n","export class MinimapCalculateViewRectRequest {\n  static readonly fToken = Symbol('MinimapCalculateViewRectRequest');\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MinimapCalculateViewRectRequest } from './minimap-calculate-view-rect-request';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { IRect, RectExtensions } from '@foblex/2d';\nimport { FComponentsStore } from '../../../f-storage';\n\n@Injectable()\n@FExecutionRegister(MinimapCalculateViewRectRequest)\nexport class MinimapCalculateViewRect implements IExecution<\n  MinimapCalculateViewRectRequest,\n  IRect\n> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle(_request: MinimapCalculateViewRectRequest): IRect {\n    const flow = this._store.fFlow;\n    const canvas = this._store.fCanvas;\n\n    if (!flow || !canvas) {\n      return RectExtensions.initialize();\n    }\n\n    // \"view rect\" is always drawn inside minimap with x/y = 0,0\n    const rect = RectExtensions.div(\n      RectExtensions.fromElement(flow.hostElement),\n      canvas.transform.scale,\n    );\n    rect.x = 0;\n    rect.y = 0;\n\n    return rect;\n  }\n}\n","import { IRect, RectExtensions } from '@foblex/2d';\n\nexport class FMinimapState {\n  constructor(\n    public element: SVGSVGElement,\n    public scale: number = 1,\n    public viewBox: IRect = RectExtensions.initialize(0, 0, 0, 0),\n  ) {}\n}\n","import { MinimapDrawNodes } from './minimap-draw-nodes';\nimport { MinimapCalculateViewport } from './minimap-calculate-viewport';\nimport { MinimapCalculateViewRect } from './minimap-calculate-view-rect';\n\nexport const F_MINIMAP_FEATURES = [\n  MinimapDrawNodes,\n\n  MinimapCalculateViewport,\n\n  MinimapCalculateViewRect,\n];\n","import { IPoint } from '@foblex/2d';\n\nexport class GetNormalizedPointRequest {\n  static readonly fToken = Symbol('GetNormalizedPointRequest');\n\n  constructor(public readonly position: IPoint) {}\n}\n","import { IPoint } 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';\nimport { calculatePointerInFlow } from '../../utils';\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 GetNormalizedPoint implements IExecution<GetNormalizedPointRequest, IPoint> {\n  private readonly _store = inject(FComponentsStore);\n\n  public handle({ position }: GetNormalizedPointRequest): IPoint {\n    return calculatePointerInFlow(position, this._store.flowHost, this._store.transform);\n  }\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 SortNodeLayers implements IExecution<SortNodeLayersRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n  private readonly _browser = inject(BrowserService);\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  private get _groupsContainer(): HTMLElement {\n    return this._canvas.fGroupsContainer().nativeElement;\n  }\n\n  private get _nodesContainer(): HTMLElement {\n    return this._canvas.fNodesContainer().nativeElement;\n  }\n\n  private get _fNodeElements(): HTMLElement[] {\n    return Array.from(this._nodesContainer.children) as HTMLElement[];\n  }\n\n  public handle(_: 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.nodes.getAll().filter((x) => this._groupsContainer.contains(x.hostElement));\n  }\n\n  private _getSortedChildrenNodes(parent: FNodeBase): HTMLElement[] {\n    const allElements = this._fNodeElements;\n\n    return this._getChildrenNodes(parent.fId()).sort(\n      (a, b) => allElements.indexOf(a) - allElements.indexOf(b),\n    );\n  }\n\n  private _getChildrenNodes(fId: string): HTMLElement[] {\n    return this._mediator\n      .execute<FNodeBase[]>(new GetDeepChildrenNodesAndGroupsRequest(fId))\n      .filter((x) => this._nodesContainer.contains(x.hostElement))\n      .map((x) => x.hostElement);\n  }\n\n  private _moveChildrenNodes(sortedChildrenGroups: HTMLElement[]): void {\n    const fragment = this._browser.document.createDocumentFragment();\n    sortedChildrenGroups.forEach((childGroup: HTMLElement) => {\n      fragment.appendChild(childGroup);\n    });\n    this._nodesContainer.appendChild(fragment);\n  }\n}\n","export class SortItemsByParentRequest {\n  static readonly fToken = Symbol('SortItemsByParentRequest');\n\n  constructor(\n    public readonly itemsContainer: HTMLElement, // fGroupsContainer || fNodesContainer\n  ) {}\n}\n","import { SortItemsByParentRequest } from './sort-items-by-parent-request';\nimport { inject, Injectable } from '@angular/core';\nimport { FExecutionRegister, IExecution } from '@foblex/mediator';\nimport { FComponentsStore } from '../../../f-storage';\nimport { FNodeBase } from '../../../f-node';\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 SortItemsByParent implements IExecution<SortItemsByParentRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _browser = inject(BrowserService);\n\n  public handle({ itemsContainer }: SortItemsByParentRequest): void {\n    const elements = Array.from(itemsContainer.children) as HTMLElement[];\n    if (elements.length < 2) {\n      return;\n    }\n\n    const positions = this._buildPositions(elements);\n\n    const items = this._store.nodes.getAll().filter((x) => itemsContainer.contains(x.hostElement));\n    if (items.length < 2 || !items.some((item) => !!item.fParentId())) {\n      return;\n    }\n\n    const childrenByParentId = this._buildChildrenByParentId(items);\n    const descendantsCache = new Map<string, FNodeBase[]>();\n\n    for (const item of items) {\n      const children = this._getSortedChildrenBeforeParent(\n        itemsContainer,\n        positions,\n        item,\n        childrenByParentId,\n        descendantsCache,\n      );\n      if (!children.length) {\n        continue;\n      }\n\n      this._moveBeforeNextSibling(itemsContainer, children, item.hostElement.nextElementSibling);\n    }\n  }\n\n  private _buildPositions(elements: HTMLElement[]): Map<HTMLElement, number> {\n    const result = new Map<HTMLElement, number>();\n\n    for (let i = 0; i < elements.length; i++) {\n      result.set(elements[i], i);\n    }\n\n    return result;\n  }\n\n  private _getSortedChildrenBeforeParent(\n    container: HTMLElement,\n    positions: Map<HTMLElement, number>,\n    parent: FNodeBase,\n    childrenByParentId: Map<string, FNodeBase[]>,\n    descendantsCache: Map<string, FNodeBase[]>,\n  ): HTMLElement[] {\n    const parentPos = positions.get(parent.hostElement);\n    if (parentPos === undefined) {\n      return [];\n    }\n\n    const children = this._getDeepChildren(parent.fId(), childrenByParentId, descendantsCache);\n    if (!children.length) {\n      return [];\n    }\n\n    const result: HTMLElement[] = [];\n\n    for (const child of children) {\n      const el = child.hostElement;\n\n      if (!container.contains(el)) {\n        continue;\n      }\n\n      const pos = positions.get(el);\n      if (pos === undefined || pos >= parentPos) {\n        continue;\n      }\n\n      result.push(el);\n    }\n\n    result.sort((a, b) => (positions.get(a) ?? 0) - (positions.get(b) ?? 0));\n\n    return result;\n  }\n\n  private _buildChildrenByParentId(nodes: readonly FNodeBase[]): Map<string, FNodeBase[]> {\n    const result = new Map<string, FNodeBase[]>();\n\n    for (const node of nodes) {\n      const parentId = node.fParentId();\n      if (!parentId) {\n        continue;\n      }\n\n      const children = result.get(parentId) ?? [];\n      children.push(node);\n      result.set(parentId, children);\n    }\n\n    return result;\n  }\n\n  private _getDeepChildren(\n    parentId: string,\n    childrenByParentId: Map<string, FNodeBase[]>,\n    descendantsCache: Map<string, FNodeBase[]>,\n  ): FNodeBase[] {\n    const cached = descendantsCache.get(parentId);\n    if (cached) {\n      return cached;\n    }\n\n    const result: FNodeBase[] = [];\n    const stack = [...(childrenByParentId.get(parentId) ?? [])];\n    const visited = new Set<string>([parentId]);\n\n    while (stack.length) {\n      const node = stack.pop();\n      if (!node) {\n        continue;\n      }\n      const nodeId = node.fId();\n      if (visited.has(nodeId)) {\n        continue;\n      }\n\n      visited.add(nodeId);\n      result.push(node);\n\n      const children = childrenByParentId.get(nodeId);\n      if (children?.length) {\n        stack.push(...children);\n      }\n    }\n\n    descendantsCache.set(parentId, result);\n\n    return result;\n  }\n\n  private _moveBeforeNextSibling(\n    container: HTMLElement,\n    items: HTMLElement[],\n    nextSibling: Element | null,\n  ): void {\n    const fragment = this._browser.document.createDocumentFragment();\n\n    for (const item of items) {\n      fragment.appendChild(item);\n    }\n\n    container.insertBefore(fragment, nextSibling);\n  }\n}\n","export class SortItemLayersRequest {\n  static readonly fToken = Symbol('SortItemLayersRequest');\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 SortItemLayers implements IExecution<SortItemLayersRequest, void> {\n  private readonly _store = inject(FComponentsStore);\n  private readonly _mediator = inject(FMediator);\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  public handle(_request: SortItemLayersRequest): void {\n    if (!this._canvas) {\n      return;\n    }\n\n    const nodes = this._store.nodes.getAll();\n    if (nodes.length < 2 || !nodes.some((node) => !!node.fParentId())) {\n      return;\n    }\n\n    this._mediator.execute(\n      new SortItemsByParentRequest(this._canvas.fGroupsContainer().nativeElement),\n    );\n    this._mediator.execute(new SortNodeLayersRequest());\n    this._mediator.execute(\n      new SortItemsByParentRequest(this._canvas.fNodesContainer().nativeElement),\n    );\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","type DecoratedMethod = (...args: unknown[]) => unknown;\n\nexport function Deprecated(newMethodName: string, removalVersion: string = '18.0.0'): MethodDecorator {\n  return function <T>(\n    _target: object,\n    propertyKey: string | symbol,\n    descriptor: TypedPropertyDescriptor<T>,\n  ): TypedPropertyDescriptor<T> | void {\n    const originalMethod = descriptor.value;\n\n    if (typeof originalMethod !== 'function') {\n      return descriptor;\n    }\n\n    descriptor.value = function (this: unknown, ...args: unknown[]) {\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 as DecoratedMethod).apply(this, args);\n    } as T;\n\n    return descriptor;\n  };\n}\n","type DecoratedMethod = (...args: unknown[]) => unknown;\n\nexport function LogExecutionTime(label?: string): MethodDecorator {\n  const logLabel = (propertyKey: string | symbol): string => label || String(propertyKey);\n\n  return function <T>(\n    _target: object,\n    propertyKey: string | symbol,\n    descriptor: TypedPropertyDescriptor<T>,\n  ): TypedPropertyDescriptor<T> | void {\n    const originalMethod = descriptor.value;\n\n    if (typeof originalMethod !== 'function') {\n      return descriptor;\n    }\n\n    descriptor.value = function (this: unknown, ...args: unknown[]) {\n      const startedAt = performance.now();\n      const result = (originalMethod as DecoratedMethod).apply(this, args);\n\n      if (result instanceof Promise) {\n        return result.finally(() => {\n          console.warn(\n            `[LogExecutionTime] ${logLabel(propertyKey)} completed in ${Math.round(performance.now() - startedAt)}ms.`,\n          );\n        });\n      }\n\n      console.warn(\n        `[LogExecutionTime] ${logLabel(propertyKey)} completed in ${Math.round(performance.now() - startedAt)}ms.`,\n      );\n\n      return result;\n    } as T;\n\n    return descriptor;\n  };\n}\n","import { GetNormalizedElementRect } from './get-normalized-element-rect';\nimport {\n  MoveFrontElementsBeforeTargetElement,\n  UpdateItemAndChildrenLayers,\n} from './update-item-and-children-layers';\nimport { GetNormalizedPoint } from './get-normalized-point';\nimport { SortItemLayers, SortItemsByParent, SortNodeLayers } from './sort-item-layers';\nimport { GetDeepChildrenNodesAndGroups } from './get-deep-children-nodes-and-groups';\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_ZOOM_FEATURES } from './f-zoom';\nimport { GetNormalizedConnectorRect } from './get-normalized-connector-rect';\nimport { F_MINIMAP_FEATURES } from './minimap';\nimport { F_CACHE_FEATURES } from '../f-cache';\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_NODE_FEATURES,\n\n  ...F_SELECTION_FEATURES,\n\n  ...F_ZOOM_FEATURES,\n\n  ...F_MINIMAP_FEATURES,\n\n  ...F_CACHE_FEATURES,\n\n  GetDeepChildrenNodesAndGroups,\n\n  GetNormalizedConnectorRect,\n\n  GetNormalizedElementRect,\n\n  GetNormalizedPoint,\n\n  SortItemLayers,\n\n  SortItemsByParent,\n\n  SortNodeLayers,\n\n  UpdateItemAndChildrenLayers,\n\n  MoveFrontElementsBeforeTargetElement,\n];\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  ElementRef,\n  inject,\n  input,\n  numberAttribute,\n  OnChanges,\n  OnInit,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  ITransformModel,\n  PointExtensions,\n  SizeExtensions,\n  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: [{ provide: F_BACKGROUND_PATTERN, useExisting: FRectPatternComponent }],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FRectPatternComponent implements OnInit, OnChanges, IFBackgroundPattern {\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    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)\n      .pipe(notifyOnStart())\n      .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(\n      this._vLine,\n      this.vColor(),\n      this._size.width,\n      0,\n      this._size.width,\n      this._size.height,\n    );\n    this._redrawLine(\n      this._hLine,\n      this.hColor(),\n      0,\n      this._size.height,\n      this._size.width,\n      this._size.height,\n    );\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(\n      this.hSize() * this._transform.scale,\n      this.vSize() * this._transform.scale,\n    );\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(\n    line: SVGLineElement,\n    color: string,\n    x1: number,\n    y1: number,\n    x2: number,\n    y2: number,\n  ): 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, numberAttribute, OnChanges,\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, ElementRef, inject, 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  public readonly hostElement = inject(ElementRef).nativeElement;\n\n  public abstract setTransform(transform: ITransformModel): void;\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  contentChild,\n  inject,\n  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 { AddPatternToBackgroundRequest } from '../domain';\nimport {\n  INSTANCES,\n  RegisterPluginInstanceRequest,\n  RemovePluginInstanceRequest,\n} from '../f-storage';\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\n  implements OnInit, AfterContentInit, OnDestroy\n{\n  private readonly _mediator = inject(FMediator);\n\n  protected readonly fBackgroundPattern = contentChild(F_BACKGROUND_PATTERN);\n\n  public ngOnInit(): void {\n    this._mediator.execute(new RegisterPluginInstanceRequest(INSTANCES.BACKGROUND, this));\n  }\n\n  public ngAfterContentInit(): void {\n    this._mediator.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._mediator.execute(new RemovePluginInstanceRequest(INSTANCES.BACKGROUND));\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 { Directive, ElementRef, inject, InputSignalWithTransform } from '@angular/core';\nimport { IHasHostElement } from '../i-has-host-element';\n\n@Directive()\nexport abstract class FAutoPanBase implements IHasHostElement {\n  public readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n  public abstract fEdgeThreshold: InputSignalWithTransform<number, unknown>;\n\n  public abstract fSpeed: InputSignalWithTransform<number, unknown>;\n\n  public abstract fAcceleration: InputSignalWithTransform<boolean, unknown>;\n}\n","import {\n  booleanAttribute,\n  Component,\n  inject,\n  numberAttribute,\n  OnDestroy,\n  OnInit,\n  input,\n} from '@angular/core';\nimport { FMediator } from '@foblex/mediator';\nimport { FAutoPanBase } from './f-auto-pan-base';\nimport {\n  INSTANCES,\n  RegisterPluginInstanceRequest,\n  RemovePluginInstanceRequest,\n} from '../f-storage';\n\n@Component({\n  selector: 'f-auto-pan',\n  template: ``,\n  standalone: true,\n  host: {\n    class: 'f-auto-pan f-component',\n    style: 'display: none;',\n  },\n})\nexport class FAutoPan extends FAutoPanBase implements OnInit, OnDestroy {\n  private readonly _mediator = inject(FMediator);\n\n  public override fEdgeThreshold = input(20, {\n    transform: (value: unknown) => numberAttribute(value, 20),\n  });\n\n  public override fSpeed = input(8, {\n    transform: (value: unknown) => numberAttribute(value, 8),\n  });\n\n  public override fAcceleration = input(false, {\n    transform: (value: unknown) => booleanAttribute(value),\n  });\n\n  public ngOnInit(): void {\n    this._mediator.execute(new RegisterPluginInstanceRequest(INSTANCES.AUTO_PAN, this));\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemovePluginInstanceRequest(INSTANCES.AUTO_PAN));\n  }\n}\n","import { FAutoPan } from './f-auto-pan';\n\nexport const F_AUTO_PAN_PROVIDERS = [FAutoPan];\n","/**\n * Built-in layers rendered inside `<f-canvas>`. Each one corresponds to\n * a sibling container in the canvas template (groups, connections,\n * nodes) and gets its own z-index based on its position in the order\n * passed to `<f-canvas [fLayers]>` or `withFCanvas({ layers })`.\n *\n * The order of an array of `EFCanvasLayer` values is read **bottom to top**:\n * the first entry sits underneath, the last entry sits on top.\n */\nexport enum EFCanvasLayer {\n  GROUPS = 'groups',\n  CONNECTIONS = 'connections',\n  NODES = 'nodes',\n}\n","import { EFCanvasLayer } from '../enums';\n\n/**\n * Default rendering order, bottom to top:\n * groups → connections → nodes (matches every Foblex Flow release before v18.6).\n */\nexport const F_DEFAULT_LAYER_ORDER: EFCanvasLayer[] = [\n  EFCanvasLayer.GROUPS,\n  EFCanvasLayer.CONNECTIONS,\n  EFCanvasLayer.NODES,\n];\n","import { PointExtensions, TransformModelExtensions, IPoint } from '@foblex/2d';\nimport {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  inject,\n  InjectionToken,\n  OutputEmitterRef,\n  Signal,\n} from '@angular/core';\nimport { FCanvasChangeEvent } from './index';\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  public abstract fCanvasChange: OutputEmitterRef<FCanvasChangeEvent>;\n\n  public readonly hostElement = inject(ElementRef).nativeElement;\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  protected 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(this._fCanvasChange)\n      .pipe(debounceTime(this.debounce()))\n      .listen(this.destroyRef, () => {\n        this.fCanvasChange.emit(\n          new FCanvasChangeEvent(\n            PointExtensions.sum(this.transform.position, this.transform.scaledPosition),\n            this.transform.scale,\n          ),\n        );\n      });\n  }\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","import { EFCanvasLayer } from '../enums';\nimport { F_DEFAULT_LAYER_ORDER } from '../constants';\n\n/**\n * Normalises a user-supplied layer order into a complete, de-duplicated\n * `EFCanvasLayer[]`. Unknown entries are dropped, duplicates collapse to the\n * first occurrence, and any layer the caller forgot to mention is\n * appended in its default position so the canvas always has every layer\n * to render.\n */\nexport function resolveLayerOrder(value: EFCanvasLayer[] | undefined | null): EFCanvasLayer[] {\n  const known = new Set<EFCanvasLayer>(F_DEFAULT_LAYER_ORDER);\n  const seen = new Set<EFCanvasLayer>();\n  const out: EFCanvasLayer[] = [];\n\n  for (const layer of value ?? []) {\n    if (!known.has(layer) || seen.has(layer)) continue;\n    seen.add(layer);\n    out.push(layer);\n  }\n\n  for (const layer of F_DEFAULT_LAYER_ORDER) {\n    if (!seen.has(layer)) out.push(layer);\n  }\n\n  return out;\n}\n","import { InjectionToken } from '@angular/core';\nimport { EFCanvasLayer } from '../enums';\nimport { F_DEFAULT_LAYER_ORDER } from '../constants';\n\n/**\n * Canvas-level configuration consumed by `withFCanvas(...)`.\n *\n * Currently a single field — `layers` — but the shape leaves room\n * for additional canvas-scoped knobs without spawning more `with*()`\n * helpers (e.g. canvas zoom defaults, padding, etc.).\n */\nexport interface MergeFCanvasConfig {\n  /**\n   * Order in which built-in layers are stacked inside `<f-canvas>`,\n   * read bottom to top. Defaults to\n   * `[EFCanvasLayer.GROUPS, EFCanvasLayer.CONNECTIONS, EFCanvasLayer.NODES]`.\n   *\n   * Missing layers are appended in their default position; unknown\n   * values and duplicates are silently dropped.\n   */\n  layers?: EFCanvasLayer[];\n}\n\n/**\n * Fully resolved canvas configuration. The injection token always\n * resolves to this shape — `withFCanvas` runs the partial config\n * through `mergeFCanvasConfig` before binding it to the token, so\n * downstream consumers never have to handle `undefined` fields.\n */\nexport interface IFCanvasResolvedConfig {\n  layers: EFCanvasLayer[];\n}\n\nexport const F_CANVAS_CONFIG = new InjectionToken<IFCanvasResolvedConfig>('F_CANVAS_CONFIG');\n\nconst DEFAULT_CONFIG: IFCanvasResolvedConfig = {\n  layers: [...F_DEFAULT_LAYER_ORDER],\n};\n\nexport function mergeFCanvasConfig(\n  partial: MergeFCanvasConfig | undefined,\n): IFCanvasResolvedConfig {\n  if (!partial) {\n    return { layers: [...DEFAULT_CONFIG.layers] };\n  }\n\n  return {\n    layers: partial.layers ? [...partial.layers] : [...DEFAULT_CONFIG.layers],\n  };\n}\n","import { EFFlowFeatureKind, IFFlowFeature } from '../../provide-f-flow';\nimport { F_CANVAS_CONFIG, MergeFCanvasConfig, mergeFCanvasConfig } from './index';\n\n/**\n * Configures `<f-canvas>` inside `provideFFlow(...)`.\n *\n * ```typescript\n * @Component({\n *   providers: [\n *     provideFFlow(\n *       withFCanvas({ layers: [EFLayer.GROUPS, EFLayer.NODES, EFLayer.CONNECTIONS] }),\n *     ),\n *   ],\n * })\n * export class MyFlow {}\n * ```\n *\n * The order is read bottom to top — the first entry sits underneath,\n * the last entry sits on top. Missing layers are appended in their\n * default position.\n *\n * The same value can also be set per-instance via\n * `<f-canvas [fLayers]=\"...\">`. The component input wins when both are\n * present, so `withFCanvas` acts as the app-wide default and individual\n * canvases can opt out without re-providing the feature.\n *\n * Registering the feature twice replaces the earlier config via\n * Angular's last-wins provider semantics.\n */\nexport function withFCanvas(config?: MergeFCanvasConfig): IFFlowFeature<EFFlowFeatureKind.CANVAS> {\n  return {\n    kind: EFFlowFeatureKind.CANVAS,\n    providers: [{ provide: F_CANVAS_CONFIG, useValue: mergeFCanvasConfig(config) }],\n  };\n}\n","import {\n  afterNextRender,\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  untracked,\n  viewChild,\n} from '@angular/core';\nimport { F_CANVAS, FCanvasBase } from './models';\nimport { IPoint, PointExtensions, TransformModelExtensions } from '@foblex/2d';\nimport { FCanvasChangeEvent } from './models';\nimport { FMediator } from '@foblex/mediator';\nimport { EFCanvasLayer } from './enums';\nimport { resolveLayerOrder } from './layers';\nimport { F_CANVAS_CONFIG } from './utils';\nimport {\n  AddCanvasToStoreRequest,\n  CenterGroupOrNodeRequest,\n  FitToFlowRequest,\n  GetFlowRequest,\n  InputCanvasPositionRequest,\n  InputCanvasScaleRequest,\n  isMobile,\n  RemoveCanvasFromStoreRequest,\n  ResetScaleAndCenterRequest,\n  ResetScaleRequest,\n  SetBackgroundTransformRequest,\n  transitionEnd,\n  UpdateScaleRequest,\n  WaitForConnectionsRenderedRequest,\n} from '../domain';\nimport { FComponentsStore, NotifyTransformChangedRequest } from '../f-storage';\nimport { FFlowBase } from '../f-flow';\nimport { F_DEFAULT_LAYER_ORDER } from './constants';\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: [{ provide: F_CANVAS, useExisting: FCanvasComponent }],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FCanvasComponent extends FCanvasBase implements OnInit, OnDestroy {\n  private readonly _mediator = inject(FMediator);\n  private readonly _components = inject(FComponentsStore);\n  private readonly _injector = inject(Injector);\n  private readonly _config = inject(F_CANVAS_CONFIG, { optional: true });\n\n  private _flowId: string | undefined;\n\n  public override fCanvasChange = output<FCanvasChangeEvent>();\n\n  public readonly position = input<IPoint, IPoint | null | undefined>(\n    PointExtensions.initialize(),\n    { transform: PointExtensions.castToPoint },\n  );\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  /**\n   * Stacking order of the built-in layers (groups, connections, nodes),\n   * read bottom to top. The first entry sits underneath, the last entry\n   * sits on top. Defaults to the order shipped before v18.6:\n   * `[GROUPS, CONNECTIONS, NODES]`.\n   *\n   * When `withFCanvas({ layers })` is provided in the component's\n   * injector, this input falls back to that value; passing `fLayers`\n   * directly always wins. Missing layers are appended in their default\n   * position so every canvas renders all three regardless of input.\n   */\n  public readonly fLayers = input<EFCanvasLayer[] | undefined>(undefined);\n\n  /**\n   * Final layer order rendered in the template. The three sibling\n   * containers are emitted in this order, which (combined with\n   * `isolation: isolate` on each of them) is what visually stacks\n   * groups, connections, and nodes — no per-container z-index involved.\n   */\n  protected readonly resolvedLayers = computed<EFCanvasLayer[]>(() => {\n    const fromInput = this.fLayers();\n    if (fromInput && fromInput.length > 0) {\n      return resolveLayerOrder(fromInput);\n    }\n    if (this._config?.layers) {\n      return resolveLayerOrder(this._config.layers);\n    }\n\n    return [...F_DEFAULT_LAYER_ORDER];\n  });\n\n  public override fGroupsContainer =\n    viewChild.required<ElementRef<HTMLElement>>('fGroupsContainer');\n  public override fNodesContainer = viewChild.required<ElementRef<HTMLElement>>('fNodesContainer');\n  public override fConnectionsContainer =\n    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      () => {\n        const position = this.position();\n        untracked(() => {\n          this._mediator.execute(new InputCanvasPositionRequest(this.transform, position));\n        });\n      },\n      { injector: this._injector },\n    );\n  }\n\n  private _scaleChange(): void {\n    effect(\n      () => {\n        const scale = this.scale();\n        untracked(() => {\n          this._mediator.execute(new InputCanvasScaleRequest(this.transform, scale));\n        });\n      },\n      { injector: this._injector },\n    );\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.style.removeProperty('transition');\n    this.hostElement.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.style.transition = `transform ${isMobile() ? 80 : 150}ms ease-in-out`;\n    this.hostElement.style.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    this._afterRedraw(() => {\n      this._mediator.execute(new CenterGroupOrNodeRequest(groupOrNodeId, animated));\n    });\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(\n    padding: IPoint = PointExtensions.initialize(),\n    animated: boolean = true,\n  ): void {\n    this._afterRedraw(() => {\n      this._mediator.execute(new FitToFlowRequest(padding, animated));\n    });\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    this._afterRedraw(() => {\n      this._mediator.execute(new ResetScaleAndCenterRequest(animated));\n    });\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   * 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   * 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  private _afterRedraw(callback: () => void): void {\n    this._mediator.execute(\n      new WaitForConnectionsRenderedRequest(\n        this._components.connectionsRevision,\n        this._components.nodesRevision,\n        () => afterNextRender(callback, { injector: this._injector }),\n        this.destroyRef,\n      ),\n    );\n  }\n}\n","<ng-container>\n  @for (layer of resolvedLayers(); track layer) {\n    @switch (layer) {\n      @case ('groups') {\n        <div #fGroupsContainer class=\"f-groups-container\">\n          <ng-content select=\"[fGroup], [fGroups]\" />\n        </div>\n      }\n      @case ('connections') {\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      @case ('nodes') {\n        <div #fNodesContainer class=\"f-nodes-container\">\n          <ng-content select=\"[fNode], [fNodes]\" />\n        </div>\n      }\n    }\n  }\n</ng-container>\n","import { FCanvasComponent } from './f-canvas.component';\n\nexport const F_CANVAS_PROVIDERS = [\n  FCanvasComponent,\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 { EmitConnectionsChangesRequest } from '../../f-storage';\nimport { castToEnum } from '@foblex/utils';\nimport { FMediator } from '@foblex/mediator';\nimport { AddConnectionToStoreRequest, RemoveConnectionFromStoreRequest } from '../../domain';\nimport { stringAttribute } from '../../utils';\nimport {\n  EFConnectionBehavior,\n  EFConnectionConnectableSide,\n  EFConnectionType,\n  F_CONNECTION_COMPONENTS_PARENT,\n  FConnectionBase,\n} from '../../f-connection-v2';\n\nlet uniqueId = 0;\n\n@Component({\n  standalone: false,\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    '[attr.data-f-connection-type]': 'fType',\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_COMPONENTS_PARENT, 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  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 EmitConnectionsChangesRequest());\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemoveConnectionFromStoreRequest(this));\n  }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\">\n  <defs #defs></defs>\n  <ng-content select=\"svg[fMarker]\" />\n  <g class=\"f-connection-group\">\n    @if (fGradient(); as gradient) {\n      <linearGradient\n        fConnectionGradientRenderer\n        [fConnectionGradientRendererFor]=\"gradient\"\n      ></linearGradient>\n    }\n    <path fConnectionSelection [attr.d]=\"path\"></path>\n    <g>\n      <path f-connection-path [useGradient]=\"!!fGradient()\" [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  </g>\n</svg>\n<ng-content select=\"f-connection-marker-circle, f-connection-marker-arrow\" />\n<ng-content select=\"f-connection-gradient\" />\n<ng-content select=\"f-connection-waypoints\" />\n\n@if (fContents().length) {\n  <ng-content select=\"[fConnectionContent]\" />\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 { EmitConnectionsChangesRequest } from '../../f-storage';\nimport { castToEnum } from '@foblex/utils';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddConnectionForCreateToStoreRequest,\n  RemoveConnectionForCreateFromStoreRequest,\n} from '../../domain';\nimport {\n  EFConnectionBehavior,\n  EFConnectionConnectableSide,\n  EFConnectionType,\n  F_CONNECTION_COMPONENTS_PARENT,\n  FConnectionBase,\n} from '../../f-connection-v2';\n\nlet uniqueId = 0;\n\n@Component({\n  standalone: false,\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: [\n    { provide: F_CONNECTION_COMPONENTS_PARENT, useExisting: FConnectionForCreateComponent },\n  ],\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 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 EmitConnectionsChangesRequest());\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  <ng-content select=\"svg[fMarker]\" />\n  <g class=\"f-connection-group\">\n    @if (fGradient(); as gradient) {\n      <linearGradient\n        fConnectionGradientRenderer\n        [fConnectionGradientRendererFor]=\"gradient\"\n      ></linearGradient>\n    }\n    <path fConnectionSelection [attr.d]=\"path\"></path>\n    <g>\n      <path f-connection-path [useGradient]=\"!!fGradient()\" [attr.d]=\"path\"></path>\n      <circle f-connection-drag-handle-end r=\"8\"></circle>\n    </g>\n  </g>\n</svg>\n<ng-content select=\"f-connection-marker-circle, f-connection-marker-arrow\" />\n<ng-content select=\"f-connection-gradient\" />\n\n@if (fContents().length) {\n  <ng-content select=\"[fConnectionContent]\" />\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 { EmitConnectionsChangesRequest } from '../../f-storage';\nimport { castToEnum } from '@foblex/utils';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  AddSnapConnectionToStoreRequest,\n  RemoveSnapConnectionFromStoreRequest,\n} from '../../domain';\nimport {\n  EFConnectionBehavior,\n  EFConnectionConnectableSide,\n  EFConnectionType,\n  F_CONNECTION_COMPONENTS_PARENT,\n  FConnectionBase,\n} from '../../f-connection-v2';\n\nlet uniqueId = 0;\n\n@Component({\n  standalone: false,\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_COMPONENTS_PARENT, 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  @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 EmitConnectionsChangesRequest());\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  <ng-content select=\"svg[fMarker]\" />\n  <g class=\"f-connection-group\">\n    @if (fGradient(); as gradient) {\n      <linearGradient\n        fConnectionGradientRenderer\n        [fConnectionGradientRendererFor]=\"gradient\"\n      ></linearGradient>\n    }\n    <path fConnectionSelection [attr.d]=\"path\"></path>\n    <g>\n      <path f-connection-path [useGradient]=\"!!fGradient()\" [attr.d]=\"path\"></path>\n      <circle f-connection-drag-handle-end r=\"8\"></circle>\n    </g>\n  </g>\n</svg>\n<ng-content select=\"f-connection-marker-circle, f-connection-marker-arrow\" />\n<ng-content select=\"f-connection-gradient\" />\n\n@if (fContents().length) {\n  <ng-content select=\"[fConnectionContent]\" />\n}\n","import { FConnectionComponent } from './f-connection';\nimport { FConnectionForCreateComponent } from './f-connection-for-create';\nimport { FSnapConnectionComponent } from './f-snap-connection';\nimport {\n  FConnectionContent,\n  FConnectionMarkerArrow,\n  FConnectionMarkerCircle,\n  FConnectionDragHandleEnd,\n  FConnectionDragHandleStart,\n  FConnectionGradient,\n  FConnectionGradientRenderer,\n  FConnectionMarker,\n  FConnectionPath,\n  FConnectionSelection,\n  FConnectionWaypoints,\n} from '../f-connection-v2';\n\nexport const F_CONNECTION_PROVIDERS = [\n  FConnectionDragHandleStart,\n  FConnectionDragHandleEnd,\n  FConnectionPath,\n  FConnectionSelection,\n  FConnectionMarker,\n\n  FConnectionComponent,\n  FConnectionForCreateComponent,\n  FSnapConnectionComponent,\n];\n\nexport const F_CONNECTION_IMPORTS_EXPORTS = [\n  FConnectionContent,\n  FConnectionMarkerCircle,\n  FConnectionMarkerArrow,\n  FConnectionGradient,\n  FConnectionGradientRenderer,\n  FConnectionWaypoints,\n];\n","import { Directive, ElementRef, inject, InjectionToken, Signal } from '@angular/core';\n\nexport const F_MAGNETIC_LINES = new InjectionToken<FMagneticLinesBase>('F_MAGNETIC_LINES');\n\n@Directive()\nexport abstract class FMagneticLinesBase {\n  public readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n  public abstract threshold: Signal<number>;\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  input,\n  numberAttribute,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { F_MAGNETIC_LINES, FMagneticLinesBase } from './f-magnetic-lines-base';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  INSTANCES,\n  RegisterPluginInstanceRequest,\n  RemovePluginInstanceRequest,\n} from '../../../f-storage';\n\n@Component({\n  selector: 'f-magnetic-lines',\n  template: '',\n  styleUrls: ['./f-magnetic-lines.scss'],\n  host: {\n    'class': 'f-magnetic-lines f-component',\n  },\n  standalone: true,\n  providers: [{ provide: F_MAGNETIC_LINES, useExisting: FMagneticLines }],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FMagneticLines extends FMagneticLinesBase implements OnInit, OnDestroy {\n  public override readonly threshold = input(10, { transform: numberAttribute });\n\n  private readonly _mediator = inject(FMediator);\n\n  public ngOnInit(): void {\n    this._mediator.execute(new RegisterPluginInstanceRequest(INSTANCES.MAGNETIC_LINES, this));\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemovePluginInstanceRequest(INSTANCES.MAGNETIC_LINES));\n  }\n}\n","import { FMagneticLines } from './f-magnetic-lines';\n\nexport const F_MAGNETIC_LINES_PROVIDERS = [FMagneticLines];\n","import { Component, inject, input, numberAttribute, OnDestroy, OnInit } from '@angular/core';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  INSTANCES,\n  RegisterPluginInstanceRequest,\n  RemovePluginInstanceRequest,\n} from '../../../f-storage';\nimport { F_MAGNETIC_LINES, FMagneticLinesBase } from '../f-magnetic-lines';\n\n/**\n * @deprecated Use `f-magnetic-lines` instead.\n * Will be removed in v19.0.0.\n */\n@Component({\n  standalone: false,\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: [{ provide: F_MAGNETIC_LINES, useExisting: FLineAlignmentComponent }],\n})\nexport class FLineAlignmentComponent extends FMagneticLinesBase implements OnInit, OnDestroy {\n  public override readonly threshold = input(10, {\n    transform: numberAttribute,\n    alias: 'fAlignThreshold',\n  });\n\n  private readonly _mediator = inject(FMediator);\n\n  public ngOnInit(): void {\n    this._mediator.execute(new RegisterPluginInstanceRequest(INSTANCES.MAGNETIC_LINES, this));\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemovePluginInstanceRequest(INSTANCES.MAGNETIC_LINES));\n  }\n}\n","import { FLineAlignmentComponent } from './f-line-alignment.component';\n\nexport const F_LINE_ALIGNMENT_PROVIDERS = [FLineAlignmentComponent];\n","import { Directive, ElementRef, inject, InjectionToken, Signal } from '@angular/core';\n\nexport const F_MAGNETIC_RECTS = new InjectionToken<FMagneticRectsBase>('F_MAGNETIC_RECTS');\n\n@Directive()\nexport abstract class FMagneticRectsBase {\n  public readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n  public abstract alignThreshold: Signal<number>;\n  public abstract spacingThreshold: Signal<number>;\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  input,\n  numberAttribute,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { F_MAGNETIC_RECTS, FMagneticRectsBase } from './f-magnetic-rects-base';\nimport { FMediator } from '@foblex/mediator';\nimport {\n  INSTANCES,\n  RegisterPluginInstanceRequest,\n  RemovePluginInstanceRequest,\n} from '../../../f-storage';\n\n@Component({\n  selector: 'f-magnetic-rects',\n  template: '',\n  styleUrls: ['./f-magnetic-rects.scss'],\n  host: {\n    'class': 'f-magnetic-rects f-component',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  providers: [{ provide: F_MAGNETIC_RECTS, useExisting: FMagneticRects }],\n})\nexport class FMagneticRects extends FMagneticRectsBase implements OnInit, OnDestroy {\n  public override readonly alignThreshold = input(100, {\n    transform: numberAttribute,\n  });\n\n  public override readonly spacingThreshold = input(100, {\n    transform: numberAttribute,\n  });\n\n  private readonly _mediator = inject(FMediator);\n\n  public ngOnInit(): void {\n    this._mediator.execute(new RegisterPluginInstanceRequest(INSTANCES.MAGNETIC_RECTS, this));\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemovePluginInstanceRequest(INSTANCES.MAGNETIC_RECTS));\n  }\n}\n","import { FMagneticRects } from './f-magnetic-rects';\n\nexport const F_MAGNETIC_RECTS_PROVIDERS = [FMagneticRects];\n","import { Directive, ElementRef, inject, input } from '@angular/core';\nimport { setRectToViewBox } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport { FMinimapState, IMinimapViewport, MinimapCalculateViewportRequest } from '../domain';\n\n@Directive({\n  selector: 'svg[fMinimapFlow]',\n  standalone: true,\n})\nexport class FMinimapFlowDirective {\n  public readonly fMinSize = input<number>(1000);\n\n  private readonly _mediator = inject(FMediator);\n  public readonly hostElement = inject(ElementRef<SVGSVGElement>).nativeElement;\n\n  public model = new FMinimapState(this.hostElement);\n\n  public redraw(): void {\n    const { scale, viewBox } = this._mediator.execute<IMinimapViewport>(\n      new MinimapCalculateViewportRequest(this.hostElement, this.fMinSize()),\n    );\n    this.model = new FMinimapState(this.hostElement, scale, viewBox);\n\n    setRectToViewBox(viewBox, this.hostElement);\n  }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { FMediator } from '@foblex/mediator';\nimport { MinimapDrawNodesRequest } from '../domain';\n\n@Directive({\n  selector: 'g[fMinimapCanvas]',\n  standalone: true,\n})\nexport class FMinimapCanvasDirective {\n  private readonly _mediator = inject(FMediator);\n  private readonly _elementRef = inject(ElementRef<SVGGElement>);\n  public readonly hostElement = this._elementRef.nativeElement;\n\n  public redraw(): void {\n    this.clear();\n\n    const fragment = this._elementRef.nativeElement.ownerDocument.createDocumentFragment();\n    this._mediator.execute<SVGRectElement[]>(new MinimapDrawNodesRequest()).forEach((x) => {\n      fragment.appendChild(x);\n    });\n    this.hostElement.appendChild(fragment);\n  }\n\n  public clear(): void {\n    this.hostElement.replaceChildren();\n  }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { IRect, setRectToElement } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport { MinimapCalculateViewRectRequest } from '../domain';\n\n@Directive({\n  selector: 'rect[fMinimapView]',\n  host: {\n    'class': 'f-component f-minimap-view',\n  },\n  standalone: true,\n})\nexport class FMinimapViewDirective {\n  private readonly _mediator = inject(FMediator);\n  public readonly hostElement = inject(ElementRef).nativeElement;\n\n  public redraw(): void {\n    setRectToElement(\n      this._mediator.execute<IRect>(new MinimapCalculateViewRectRequest()),\n      this.hostElement,\n    );\n  }\n}\n","import { Directive, ElementRef, inject, InjectionToken } from '@angular/core';\nimport { FMinimapState } from '../domain';\n\nexport const F_MINIMAP_BASE = new InjectionToken<FMinimapBase>('F_MINIMAP_BASE');\n\n@Directive()\nexport abstract class FMinimapBase {\n  public readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n  public abstract state: FMinimapState;\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  inject,\n  input,\n  numberAttribute,\n  OnDestroy,\n  OnInit,\n  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 {\n  FComponentsStore,\n  INSTANCES,\n  ListenTransformChangesRequest,\n  RegisterPluginInstanceRequest,\n  RemovePluginInstanceRequest,\n} from '../f-storage';\nimport { debounceAnimationFrame, FChannelHub, notifyOnStart } from '../reactivity';\nimport { BrowserService } from '@foblex/platform';\nimport { F_MINIMAP_BASE, FMinimapBase } from './f-minimap-base';\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  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  providers: [{ provide: F_MINIMAP_BASE, useExisting: FMinimapComponent }],\n  imports: [FMinimapFlowDirective, FMinimapCanvasDirective, FMinimapViewDirective],\n})\nexport class FMinimapComponent extends FMinimapBase implements AfterViewInit, OnInit, OnDestroy {\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _mediator = inject(FMediator);\n  private readonly _browser = inject(BrowserService);\n  private readonly _store = inject(FComponentsStore);\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  public readonly fNodeRenderLimit = input<number, unknown>(1500, { transform: numberAttribute });\n\n  public override get state() {\n    return this._flow().model;\n  }\n\n  public ngOnInit(): void {\n    this._mediator.execute(new RegisterPluginInstanceRequest(INSTANCES.MINIMAP, this));\n  }\n\n  public ngAfterViewInit(): void {\n    this._listenTransformChanges();\n  }\n\n  private _listenTransformChanges(): void {\n    this._mediator\n      .execute<FChannelHub>(new ListenTransformChangesRequest())\n      .pipe(notifyOnStart(), debounceAnimationFrame())\n      .listen(this._destroyRef, () => {\n        this._redraw();\n      });\n  }\n\n  private _redraw(): void {\n    if (!this._browser.isBrowser()) {\n      return;\n    }\n\n    if (this._isOverNodeRenderLimit()) {\n      this._canvas().clear();\n\n      return;\n    }\n\n    this._flow().redraw();\n    this._minimapView().redraw();\n    this._canvas().redraw();\n  }\n\n  private _isOverNodeRenderLimit(): boolean {\n    const limit = this.fNodeRenderLimit();\n\n    return limit > 0 && this._store.nodes.size() > limit;\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemovePluginInstanceRequest(INSTANCES.MINIMAP));\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 { Directive, ElementRef, inject } from '@angular/core';\nimport { IHasHostElement } from '../i-has-host-element';\nimport { FTriggerEvent } from '../domain';\n\n@Directive()\nexport abstract class FSelectionAreaBase implements IHasHostElement {\n  public readonly hostElement = inject(ElementRef).nativeElement;\n\n  public abstract fTrigger: (event: FTriggerEvent) => boolean;\n\n  protected initialize(): void {\n    this.hostElement.style.display = 'none';\n  }\n}\n","import { Component, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FSelectionAreaBase } from './f-selection-area-base';\nimport { FMediator } from '@foblex/mediator';\nimport { FEventTrigger, FTriggerEvent } from '../domain';\nimport {\n  INSTANCES,\n  RegisterPluginInstanceRequest,\n  RemovePluginInstanceRequest,\n} from '../f-storage';\n\n@Component({\n  selector: 'f-selection-area',\n  template: ``,\n  styleUrls: ['./f-selection-area.scss'],\n  standalone: true,\n  host: {\n    'class': 'f-selection-area f-component',\n  },\n})\nexport class FSelectionArea extends FSelectionAreaBase implements OnInit, OnDestroy {\n  private readonly _mediator = inject(FMediator);\n\n  @Input()\n  public fTrigger: FEventTrigger = (event: FTriggerEvent) => {\n    return event.shiftKey;\n  };\n\n  public ngOnInit(): void {\n    this._mediator.execute(new RegisterPluginInstanceRequest(INSTANCES.SELECTION_AREA, this));\n    super.initialize();\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemovePluginInstanceRequest(INSTANCES.SELECTION_AREA));\n  }\n}\n","import { FSelectionArea } from './f-selection-area';\n\nexport const F_SELECTION_AREA_PROVIDERS = [FSelectionArea];\n","import {\n  AfterContentInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  OnDestroy,\n  OnInit,\n  output,\n} from '@angular/core';\nimport { F_FLOW, FFlowBase } from './f-flow-base';\nimport {\n  AddFlowToStoreRequest,\n  CalculateFlowStateRequest,\n  CalculateNodesBoundingBoxNormalizedPositionRequest,\n  ClearSelectionRequest,\n  COMMON_PROVIDERS,\n  GetCurrentSelectionRequest,\n  GetNormalizedPointRequest,\n  ICurrentSelection,\n  IFFlowState,\n  IFFlowStateOptions,\n  IsDragStartedRequest,\n  NotifyFullRenderedRequest,\n  NotifyNodesRenderedRequest,\n  QueueConnectionRedrawRequest,\n  RedrawConnectionsRequest,\n  RemoveFlowFromStoreRequest,\n  ResetRenderLifecycleRequest,\n  SelectAllRequest,\n  SelectRequest,\n  SortItemLayersRequest,\n  WaitForConnectionsRenderedRequest,\n} from '../domain';\nimport { IPoint, IRect } from '@foblex/2d';\nimport { FMediator } from '@foblex/mediator';\nimport { F_DRAGGABLE_PROVIDERS, FDraggableDataContext } from '../f-draggable';\nimport {\n  EmitConnectionsChangesRequest,\n  FComponentsStore,\n  F_STORAGE_PROVIDERS,\n  ListenConnectionsChangesRequest,\n} from '../f-storage';\nimport { BrowserService } from '@foblex/platform';\nimport { afterNextPaint, debounceTime, FChannelHub, notifyOnStart, takeOne } from '../reactivity';\nimport { ConnectionBehaviourBuilder, ConnectionLineBuilder } from '../f-connection-v2';\nimport { F_CACHE_OPTIONS } from '../f-cache';\nimport { F_FLOW_CONFIG } from '../provide-f-flow';\nimport { F_REFLOW_PROVIDERS } from '../plugins/layout/f-reflow-on-resize';\n\nlet uniqueId = 0;\nconst SORT_ITEM_LAYERS_DEBOUNCE_MS = 120;\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    ConnectionLineBuilder,\n    ConnectionBehaviourBuilder,\n    ...COMMON_PROVIDERS,\n    FDraggableDataContext,\n    ...F_DRAGGABLE_PROVIDERS,\n    ...F_REFLOW_PROVIDERS,\n    { provide: F_FLOW, useExisting: FFlowComponent },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FFlowComponent extends FFlowBase implements OnInit, AfterContentInit, OnDestroy {\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _mediator = inject(FMediator);\n  private readonly _browser = inject(BrowserService);\n  private readonly _componentsStore = inject(FComponentsStore);\n  private readonly _cache = inject(F_CACHE_OPTIONS);\n  private readonly _injector = inject(Injector);\n  private readonly _flowConfig = inject(F_FLOW_CONFIG, { optional: true });\n\n  public override fId = input<string>(this._flowConfig?.id ?? `f-flow-${uniqueId++}`, {\n    alias: 'fFlowId',\n  });\n  public override fCache = input(false, { transform: booleanAttribute });\n\n  public override readonly hostElement = inject(ElementRef).nativeElement;\n\n  public override fNodesRendered = output<string>();\n\n  public override fFullRendered = output<string>();\n\n  /**\n   * @deprecated Use `fFullRendered` instead.\n   */\n  public override fLoaded = output<string>();\n\n  public ngOnInit(): void {\n    this._mediator.execute(new AddFlowToStoreRequest(this));\n    this._listenCacheChanges();\n  }\n\n  public ngAfterContentInit(): void {\n    if (!this._browser.isBrowser()) {\n      return;\n    }\n    this._listenNodesChanges();\n    this._listenConnectionsChanges();\n  }\n\n  public _listenCacheChanges(): void {\n    effect(\n      () => {\n        this._cache.enabled = this.fCache();\n      },\n      { injector: this._injector },\n    );\n  }\n\n  private _listenNodesChanges(): void {\n    new FChannelHub(\n      this._componentsStore.nodesChanges$,\n      this._componentsStore.progressiveRenderChanges$,\n    )\n      .pipe(notifyOnStart(), debounceTime(SORT_ITEM_LAYERS_DEBOUNCE_MS), afterNextPaint())\n      .listen(this._destroyRef, () => {\n        if (this._mediator.execute(new IsDragStartedRequest())) {\n          return;\n        }\n\n        if (this._componentsStore.hasPendingProgressiveRender) {\n          return;\n        }\n\n        this._mediator.execute(new SortItemLayersRequest());\n        this._mediator.execute(new NotifyNodesRenderedRequest());\n        this._mediator.execute(\n          new WaitForConnectionsRenderedRequest(\n            this._componentsStore.connectionsRevision + 1,\n            this._componentsStore.nodesRevision,\n            () => this._mediator.execute(new NotifyFullRenderedRequest()),\n            this._destroyRef,\n          ),\n        );\n        this._mediator.execute<void>(new EmitConnectionsChangesRequest());\n      });\n  }\n\n  private _listenConnectionsChanges(): void {\n    this._mediator\n      .execute<FChannelHub>(new ListenConnectionsChangesRequest())\n      // .pipe(afterNextPaint()) // Removed: caused ~32ms lag on connection redraw. 1ms debounce from ListenConnectionsChanges is sufficient.\n      .listen(this._destroyRef, () => {\n        if (this._mediator.execute(new IsDragStartedRequest())) {\n          return;\n        }\n\n        if (this._componentsStore.isViewportAnimating) {\n          this._mediator.execute(new QueueConnectionRedrawRequest(this._destroyRef));\n\n          return;\n        }\n\n        this._mediator.execute(new RedrawConnectionsRequest());\n      });\n  }\n\n  public redraw(): void {\n    this._mediator.execute(new EmitConnectionsChangesRequest());\n  }\n\n  public reset(): void {\n    this._mediator.execute(new ResetRenderLifecycleRequest());\n  }\n\n  public getNodesBoundingBox(): IRect | null {\n    return this._mediator.execute<IRect | null>(\n      new CalculateNodesBoundingBoxNormalizedPositionRequest(),\n    );\n  }\n\n  public getSelection(): ICurrentSelection {\n    return this._mediator.execute<ICurrentSelection>(new GetCurrentSelectionRequest());\n  }\n\n  public getPositionInFlow(position: IPoint): IRect {\n    return this._mediator.execute(new GetNormalizedPointRequest(position));\n  }\n\n  public getState(options?: IFFlowStateOptions): IFFlowState {\n    return this._mediator.execute(new CalculateFlowStateRequest(options?.measuredSize ?? false));\n  }\n\n  public selectAll(): void {\n    this._mediator\n      .execute<FChannelHub>(new ListenConnectionsChangesRequest())\n      .pipe(takeOne())\n      .listen(this._destroyRef, () => {\n        this._mediator.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    this._mediator\n      .execute<FChannelHub>(new ListenConnectionsChangesRequest())\n      .pipe(takeOne())\n      .listen(this._destroyRef, () => {\n        this._mediator.execute<void>(new SelectRequest(nodes, connections, isSelectedChanged));\n      });\n  }\n\n  public clearSelection(): void {\n    this._mediator.execute<void>(new ClearSelectionRequest());\n  }\n\n  public ngOnDestroy(): void {\n    this._mediator.execute(new RemoveFlowFromStoreRequest(this));\n  }\n}\n","<ng-container>\n  <ng-content select=\"[fDefinitions]\"/>\n\n  <ng-content select=\"f-background\"/>\n\n  <ng-content select=\"f-line-alignment\"/>\n\n  <ng-content select=\"f-canvas\"/>\n\n  <ng-content select=\"f-selection-area\"/>\n\n  <ng-content/>\n</ng-container>\n","import { FFlowComponent } from './f-flow.component';\n\nexport const F_FLOW_PROVIDERS = [\n  FFlowComponent,\n];\n","import {\n  Directive,\n  inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport { FComponentsStore } from '../f-storage';\n\ninterface FVirtualContext<T> {\n  $implicit: T;\n  index: number;\n}\n\n@Directive({\n  selector: '[fVirtualFor][fVirtualForOf]',\n  standalone: true,\n})\nexport class FVirtualFor<T> implements OnChanges, OnDestroy {\n  @Input() fVirtualForOf: readonly T[] = [];\n\n  private readonly _vc = inject(ViewContainerRef);\n  private readonly _tpl = inject<TemplateRef<FVirtualContext<T>>>(TemplateRef);\n  private readonly _zone = inject(NgZone);\n  private readonly _componentsStore = inject(FComponentsStore, { optional: true });\n\n  private _rafId: number | null = null;\n  private _isProgressiveRenderActive = false;\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['fVirtualForOf']) {\n      this._reset();\n      this._renderProgressively();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._reset();\n  }\n\n  private _reset(): void {\n    if (this._rafId !== null) {\n      cancelAnimationFrame(this._rafId);\n      this._rafId = null;\n    }\n\n    this._finishProgressiveRender();\n    this._vc.clear();\n  }\n\n  private _renderProgressively(): void {\n    // Frame budget pump, \"measure once, predict chunk\" style.\n    //\n    // Each frame we first run a small calibration batch to learn how long a\n    // single createEmbeddedView takes RIGHT NOW (cost varies with the template\n    // complexity, the browser, and the size of the existing view tree), then\n    // we derive how many more views fit in the remaining budget and burn\n    // through them without taking another timestamp per iteration. Two\n    // `performance.now()` calls per frame, not one per view.\n    //\n    // SAFETY_FACTOR (< 1) keeps us strictly under budget so a single slow view\n    // in the predicted chunk can't push the frame past 10 ms.\n    const FRAME_BUDGET = 10; // ms\n    const CALIBRATION_SIZE = 5;\n    const SAFETY_FACTOR = 0.9;\n\n    let index = 0;\n    this._startProgressiveRender();\n\n    this._zone.runOutsideAngular(() => {\n      const pump = () => {\n        const total = this.fVirtualForOf.length;\n        const start = performance.now();\n\n        const calibrationEnd = Math.min(total, index + CALIBRATION_SIZE);\n        let measuredViews = 0;\n        while (\n          index < calibrationEnd &&\n          (measuredViews === 0 || performance.now() - start < FRAME_BUDGET)\n        ) {\n          this._insertView(index);\n          index++;\n          measuredViews++;\n        }\n\n        const elapsed = performance.now() - start;\n        const done = index >= total;\n\n        if (!done && elapsed < FRAME_BUDGET) {\n          const msPerView = elapsed / measuredViews;\n          const remainingBudget = (FRAME_BUDGET - elapsed) * SAFETY_FACTOR;\n          const predicted = msPerView > 0 ? Math.floor(remainingBudget / msPerView) : 0;\n          const limit = Math.min(total, index + predicted);\n\n          while (index < limit) {\n            this._insertView(index);\n            index++;\n          }\n        }\n\n        if (index < total) {\n          this._rafId = requestAnimationFrame(pump);\n\n          return;\n        }\n\n        this._rafId = null;\n        this._finishProgressiveRender();\n      };\n\n      this._rafId = requestAnimationFrame(pump);\n    });\n  }\n\n  private _insertView(index: number): void {\n    this._vc.createEmbeddedView(this._tpl, {\n      $implicit: this.fVirtualForOf[index],\n      index,\n    });\n  }\n\n  private _startProgressiveRender(): void {\n    if (this._isProgressiveRenderActive) {\n      return;\n    }\n\n    this._isProgressiveRenderActive = true;\n    this._componentsStore?.beginProgressiveRender();\n  }\n\n  private _finishProgressiveRender(): void {\n    if (!this._isProgressiveRenderActive) {\n      return;\n    }\n\n    this._isProgressiveRenderActive = false;\n    this._componentsStore?.endProgressiveRender();\n  }\n}\n","import { FVirtualFor } from './f-virtual-for';\n\nexport const F_VIRTUAL_FOR_PROVIDERS = [FVirtualFor];\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","const DEFAULT_WHEEL_INTENSITY_MIN = 0.1;\nconst DEFAULT_WHEEL_INTENSITY_MAX = 1;\nconst GESTURE_WHEEL_DELTA_THRESHOLD = 0.5;\nconst GESTURE_WHEEL_INTENSITY_DIVISOR = 60;\nconst GESTURE_WHEEL_INTENSITY_MAX = 0.5;\n\nexport function resolveWheelDelta(event: WheelEvent): number {\n  // With Shift pressed many browsers emit horizontal wheel (deltaX) and keep deltaY near 0.\n  return Math.abs(event.deltaY) >= Math.abs(event.deltaX) ? event.deltaY : event.deltaX;\n}\n\nexport function normalizeWheelStep(event: WheelEvent, delta: number, step: number): number {\n  return isGestureWheelEvent(event)\n    ? normalizeGestureWheelStep(delta, step)\n    : normalizeMouseWheelStep(delta, step);\n}\n\nexport function isGestureWheelEvent(event: WheelEvent): boolean {\n  return (event.ctrlKey || event.metaKey) && event.deltaMode === WheelEvent.DOM_DELTA_PIXEL;\n}\n\nfunction normalizeMouseWheelStep(delta: number, step: number): number {\n  const intensity = Math.abs(delta) / 100;\n  const normalized = clamp(intensity, DEFAULT_WHEEL_INTENSITY_MIN, DEFAULT_WHEEL_INTENSITY_MAX);\n\n  return step * normalized;\n}\n\nfunction normalizeGestureWheelStep(delta: number, step: number): number {\n  if (Math.abs(delta) < GESTURE_WHEEL_DELTA_THRESHOLD) {\n    return 0;\n  }\n\n  const intensity = Math.abs(delta) / GESTURE_WHEEL_INTENSITY_DIVISOR;\n  const normalized = clamp(intensity, 0, GESTURE_WHEEL_INTENSITY_MAX);\n\n  return step * normalized;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n  return Math.max(min, Math.min(max, value));\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  defaultEventTrigger,\n  FEventTrigger,\n  isValidEventTrigger,\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 '../f-draggable/infrastructure';\nimport {\n  FComponentsStore,\n  INSTANCES,\n  RegisterPluginInstanceRequest,\n  RemovePluginInstanceRequest,\n} from '../f-storage';\nimport { normalizeWheelStep, resolveWheelDelta } from './wheel-zoom.utils';\n\n@Directive({\n  selector: 'f-canvas[fZoom]',\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  private readonly _store = inject(FComponentsStore);\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 _flowHost(): HTMLElement {\n    return this._store.flowHost;\n  }\n\n  private get _canvas(): FCanvasBase {\n    return this._store.fCanvas as FCanvasBase;\n  }\n\n  public ngOnInit(): void {\n    this._mediator.execute(new RegisterPluginInstanceRequest(INSTANCES.ZOOM, 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._flowHost) {\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 delta = resolveWheelDelta(event);\n    if (delta === 0) {\n      return;\n    }\n\n    const step = this._normalizeWheelStep(event, delta);\n    if (step === 0) {\n      return;\n    }\n\n    this.setZoom(\n      PointExtensions.initialize(event.clientX, event.clientY),\n      step,\n      this._calculateDirection(delta),\n      false,\n    );\n  };\n\n  private _normalizeWheelStep(event: WheelEvent, delta: number): number {\n    return normalizeWheelStep(event, delta, this.step);\n  }\n\n  private _calculateDirection(delta: number): number {\n    return delta > 0 ? EFZoomDirection.ZOOM_OUT : EFZoomDirection.ZOOM_IN;\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._flowHost)),\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  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 RemovePluginInstanceRequest(INSTANCES.ZOOM));\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._flowHost.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._flowHost.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_IMPORTS_EXPORTS, F_CONNECTION_PROVIDERS } from './f-connection';\nimport { F_NODE_PROVIDERS } from './f-node';\nimport { F_BACKGROUND_PROVIDERS } from './f-backgroud';\nimport { F_AUTO_PAN_PROVIDERS } from './f-auto-pan';\nimport { F_CONNECTORS_PROVIDERS } from './f-connectors';\nimport { FDragBlockerDirective, FDraggableDirective } from './f-draggable';\nimport { F_SELECTION_AREA_PROVIDERS } from './f-selection-area';\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';\nimport {\n  F_LINE_ALIGNMENT_PROVIDERS,\n  F_MAGNETIC_LINES_PROVIDERS,\n  F_MAGNETIC_RECTS_PROVIDERS,\n} from './plugins/snapping';\nimport { F_VIRTUAL_FOR_PROVIDERS } from './f-virtual';\nimport { FReflowIgnore } from './plugins';\n\n@NgModule({\n  declarations: [\n    ...F_CONNECTION_PROVIDERS,\n    ...F_CONNECTORS_PROVIDERS,\n    ...F_LINE_ALIGNMENT_PROVIDERS,\n    ...F_NODE_PROVIDERS,\n\n    FDragBlockerDirective,\n    FDraggableDirective,\n  ],\n  imports: [\n    ...F_FLOW_PROVIDERS,\n    ...F_CANVAS_PROVIDERS,\n    ...F_BACKGROUND_PROVIDERS,\n    ...F_AUTO_PAN_PROVIDERS,\n    ...F_ZOOM_PROVIDERS,\n    ...F_EXTERNAL_ITEM_PROVIDERS,\n    ...F_MINIMAP_PROVIDERS,\n\n    ...F_SELECTION_AREA_PROVIDERS,\n    ...F_MAGNETIC_LINES_PROVIDERS,\n    ...F_MAGNETIC_RECTS_PROVIDERS,\n\n    ...F_CONNECTION_IMPORTS_EXPORTS,\n\n    ...F_VIRTUAL_FOR_PROVIDERS,\n\n    FReflowIgnore,\n\n    CommonModule,\n  ],\n  exports: [\n    ...F_FLOW_PROVIDERS,\n    ...F_CANVAS_PROVIDERS,\n    ...F_BACKGROUND_PROVIDERS,\n    ...F_AUTO_PAN_PROVIDERS,\n    ...F_ZOOM_PROVIDERS,\n    ...F_EXTERNAL_ITEM_PROVIDERS,\n\n    ...F_SELECTION_AREA_PROVIDERS,\n    ...F_MAGNETIC_LINES_PROVIDERS,\n    ...F_MAGNETIC_RECTS_PROVIDERS,\n\n    ...F_CONNECTION_IMPORTS_EXPORTS,\n\n    ...F_CONNECTION_PROVIDERS,\n    ...F_CONNECTORS_PROVIDERS,\n    ...F_LINE_ALIGNMENT_PROVIDERS,\n    ...F_MINIMAP_PROVIDERS,\n    ...F_NODE_PROVIDERS,\n\n    ...F_VIRTUAL_FOR_PROVIDERS,\n\n    FReflowIgnore,\n\n    FDragBlockerDirective,\n    FDraggableDirective,\n  ],\n})\nexport class FFlowModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uniqueId","EPS","MIXIN_BASE","createSVGElement","clamp","_DEBOUNCE_TIME","DEFAULT_CONFIG","i1.FConnectionGradientRenderer","i2.FConnectionDragHandleStart","i3.FConnectionDragHandleEnd","i4.FConnectionPath","i5.FConnectionSelection","i2.FConnectionDragHandleEnd","i3.FConnectionPath","i4.FConnectionSelection"],"mappings":"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"}