# KnowledgeGraph

- File ID: file:jo64ly:knowledgegraph-razor
- Path: NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor
- Role: ui-component
- Layer: frontend

## Purpose

Blazor UI component that renders and manages an interactive knowledge graph visualization via JS interop, wiring app-level graph services and user interactions to the client-side graph module.

## Key Details

Wires graph service events to a JS D3-like module, mounts/unmounts the client module, guards on missing _module, swallows JS interop exceptions during focus simulation and disposal, and exposes node clicks to application via InteractionService and EventCallback.

## Symbols

- KnowledgeGraph: Blazor UI component that renders and manages an interactive knowledge graph visualization via JS interop, wiring app-level graph services and user interactions to the client-side graph module.
- OnInitialized(): Subscribe component handlers to FocusMode and GraphService events during component initialization.
- HandleGraphUpdate(): Respond to graph data changes by instructing the JS graph module to clear or update and force a UI re-render.
- HandleActiveNodeChange(): Tell the JS graph module to highlight/set the active node when the active node changes in the graph service.
- HandleLoadingChange(): Trigger a UI re-render when the graph loading state changes.
- OnAfterRenderAsync(): On first render, initialize the JS graph module and, if data already exists, perform an initial graph update.
- InitializeGraphAsync(): Import the client JS module, create a DotNet helper reference and mount the graph with initial data.
- ZoomIn(): Request the JS graph module to zoom in.
- ZoomOut(): Request the JS graph module to zoom out.
- ZoomReset(): Request the JS graph module to reset zoom/transform.
- OnNodeClicked(): Called from JS when a node is clicked: notify the interaction service and forward the event to any parent via EventCallback.
- HandleFocusSimulation(): Respond to focus-mode toggles by pausing or resuming the client JS graph simulation.
- DisposeAsync(): Unsubscribe event handlers, unmount and dispose the JS module and DotNet helper when the component is disposed.

## Dependencies

- No resolved dependencies.

## Calls

- No resolved calls.

## Unresolved References

- dependency-target: ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js
- dependency-target: NexusReader.UI.Shared/Services/IKnowledgeGraphService
- dependency-target: NexusReader.UI.Shared/Services/IReaderInteractionService
- dependency-target: NexusReader.UI.Shared/Services/IFocusModeService
- call-target: NexusReader.UI.Shared/Services/IFocusModeService
- call-target: NexusReader.UI.Shared/Services/IKnowledgeGraphService
- call-target: NexusReader.UI.Shared/Services/IKnowledgeGraphService
- call-target: NexusReader.UI.Shared/Services/IKnowledgeGraphService
- call-target: ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js
- call-target: ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js
- call-target: NexusReader.UI.Shared/Services/IKnowledgeGraphService
- call-target: ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js
- call-target: self
- call-target: NexusReader.UI.Shared/Services/IKnowledgeGraphService
- call-target: self
- call-target: ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js
- call-target: NexusReader.UI.Shared/Services/IKnowledgeGraphService
- call-target: ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js
- call-target: ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js
- call-target: ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js
- call-target: NexusReader.UI.Shared/Services/IReaderInteractionService
- call-target: NexusReader.UI.Shared/Services/IFocusModeService
- call-target: ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js
- call-target: ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js
- call-target: NexusReader.UI.Shared/Services/IFocusModeService
- call-target: NexusReader.UI.Shared/Services/IKnowledgeGraphService
- call-target: NexusReader.UI.Shared/Services/IKnowledgeGraphService
- call-target: NexusReader.UI.Shared/Services/IKnowledgeGraphService
- call-target: ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js

## Coverage

- Symbols: 13
- Executable symbols: 12
- Executable symbols with control flow: 12
- Grounded edges: 13
- Unresolved references: 29
- Control-flow fragments: 12
- Unresolved jumps: 23
- Unsupported constructs: 0
- Control-flow coverage: 100%
- Required diagrams: 2
- Generated diagrams: 13

## Control Flow Fragments

- OnInitialized: 10 nodes, 9 edges, 4 jumps, 0 unsupported constructs
- HandleGraphUpdate: 29 nodes, 33 edges, 3 jumps, 0 unsupported constructs
- HandleActiveNodeChange: 12 nodes, 13 edges, 1 jumps, 0 unsupported constructs
- HandleLoadingChange: 4 nodes, 3 edges, 0 jumps, 0 unsupported constructs
- OnAfterRenderAsync: 19 nodes, 21 edges, 3 jumps, 0 unsupported constructs
- InitializeGraphAsync: 9 nodes, 8 edges, 2 jumps, 0 unsupported constructs
- ZoomIn: 5 nodes, 4 edges, 1 jumps, 0 unsupported constructs
- ZoomOut: 5 nodes, 4 edges, 1 jumps, 0 unsupported constructs
- ZoomReset: 5 nodes, 4 edges, 1 jumps, 0 unsupported constructs
- OnNodeClicked: 16 nodes, 17 edges, 1 jumps, 0 unsupported constructs
- HandleFocusSimulation: 30 nodes, 34 edges, 3 jumps, 0 unsupported constructs
- DisposeAsync: 20 nodes, 20 edges, 5 jumps, 0 unsupported constructs

## Diagrams

### KnowledgeGraph Neighborhood

_Warnings: diagram file_jo64ly_knowledgegraph_razor_neighborhood_view exceeds preferred complexity thresholds (14 nodes, 0 edges)._

```mermaid
---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart LR
    class_11lr4zo_knowledgegraph("KnowledgeGraph")
    file_jo64ly_knowledgegraph_razor("KnowledgeGraph")
    method_129w46l_zoomreset[["ZoomReset()"]]
    method_14hlcms_handlegraphupdate[["HandleGraphUpdate()"]]
    method_16kjevr_handleactivenodechange[["HandleActiveNodeChange()"]]
    method_1ari3ha_oninitialized[["OnInitialized()"]]
    method_1cayj92_onafterrenderasync[["OnAfterRenderAsync()"]]
    method_1l8ubet_zoomout[["ZoomOut()"]]
    method_1muyu85_zoomin[["ZoomIn()"]]
    method_1to2smv_initializegraphasync[["InitializeGraphAsync()"]]
    method_1xjbcak_handleloadingchange[["HandleLoadingChange()"]]
    method_66cucs_onnodeclicked[["OnNodeClicked()"]]
    method_lvsss7_disposeasync[["DisposeAsync()"]]
    method_qjg1lv_handlefocussimulation[["HandleFocusSimulation()"]]
```

### KnowledgeGraph Execution Overview

_Warnings: diagram file_jo64ly_knowledgegraph_razor_execution_view exceeds preferred complexity thresholds (38 nodes, 37 edges)._

```mermaid
---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart TD
    class_11lr4zo_knowledgegraph("KnowledgeGraph")
    method_129w46l_zoomreset[["ZoomReset()"]]
    method_14hlcms_handlegraphupdate[["HandleGraphUpdate()"]]
    method_16kjevr_handleactivenodechange[["HandleActiveNodeChange()"]]
    method_1ari3ha_oninitialized[["OnInitialized()"]]
    method_1cayj92_onafterrenderasync[["OnAfterRenderAsync()"]]
    method_1l8ubet_zoomout[["ZoomOut()"]]
    method_1muyu85_zoomin[["ZoomIn()"]]
    method_1to2smv_initializegraphasync[["InitializeGraphAsync()"]]
    method_1xjbcak_handleloadingchange[["HandleLoadingChange()"]]
    method_66cucs_onnodeclicked[["OnNodeClicked()"]]
    method_lvsss7_disposeasync[["DisposeAsync()"]]
    method_qjg1lv_handlefocussimulation[["HandleFocusSimulation()"]]
    unresolved_unresolved_10ntjpd_call_target{"Unresolved: pause"}
    unresolved_unresolved_13n5skw_call_target{"Unresolved: CurrentGraphData"}
    unresolved_unresolved_15rvkdv_call_target{"Unresolved: OnActiveNodeChanged"}
    unresolved_unresolved_18xu0uy_call_target{"Unresolved: InitializeGraphAsync"}
    unresolved_unresolved_1dic9oz_call_target{"Unresolved: OnLoadingChanged"}
    unresolved_unresolved_1ftxrfl_call_target{"Unresolved: zoomIn"}
    unresolved_unresolved_1jt5jy8_call_target{"Unresolved: zoomReset"}
    unresolved_unresolved_1k2kio7_call_target{"Unresolved: OnFocusModeChanged"}
    unresolved_unresolved_1t03yb9_call_target{"Unresolved: CurrentGraphData"}
    unresolved_unresolved_1t911zi_call_target{"Unresolved: unmount"}
    unresolved_unresolved_1tm32an_call_target{"Unresolved: clear"}
    unresolved_unresolved_1torkt6_call_target{"Unresolved: CurrentGraphData"}
    unresolved_unresolved_1uyw1m_call_target{"Unresolved: mount"}
    unresolved_unresolved_1xrm9ho_call_target{"Unresolved: NotifyNodeSelected"}
    unresolved_unresolved_3gfwx2_call_target{"Unresolved: zoomOut"}
    unresolved_unresolved_4132f3_call_target{"Unresolved: updateData"}
    unresolved_unresolved_7hdicu_call_target{"Unresolved: OnLoadingChanged"}
    unresolved_unresolved_7i1fw4_call_target{"Unresolved: OnGraphUpdated"}
    unresolved_unresolved_87xiei_call_target{"Unresolved: setActiveNode"}
    unresolved_unresolved_9u6o3t_call_target{"Unresolved: OnGraphUpdated"}
    unresolved_unresolved_itxtwm_call_target{"Unresolved: resume"}
    unresolved_unresolved_kwph20_call_target{"Unresolved: OnActiveNodeChanged"}
    unresolved_unresolved_pxnbrk_call_target{"Unresolved: OnFocusModeChanged"}
    unresolved_unresolved_tch553_call_target{"Unresolved: IsFocusModeActive"}
    unresolved_unresolved_z3vcy7_call_target{"Unresolved: HandleGraphUpdate"}
    class_11lr4zo_knowledgegraph -->|contains| method_129w46l_zoomreset
    class_11lr4zo_knowledgegraph -->|contains| method_14hlcms_handlegraphupdate
    class_11lr4zo_knowledgegraph -->|contains| method_16kjevr_handleactivenodechange
    class_11lr4zo_knowledgegraph -->|contains| method_1ari3ha_oninitialized
    class_11lr4zo_knowledgegraph -->|contains| method_1cayj92_onafterrenderasync
    class_11lr4zo_knowledgegraph -->|contains| method_1l8ubet_zoomout
    class_11lr4zo_knowledgegraph -->|contains| method_1muyu85_zoomin
    class_11lr4zo_knowledgegraph -->|contains| method_1to2smv_initializegraphasync
    class_11lr4zo_knowledgegraph -->|contains| method_1xjbcak_handleloadingchange
    class_11lr4zo_knowledgegraph -->|contains| method_66cucs_onnodeclicked
    class_11lr4zo_knowledgegraph -->|contains| method_lvsss7_disposeasync
    class_11lr4zo_knowledgegraph -->|contains| method_qjg1lv_handlefocussimulation
    method_129w46l_zoomreset -->|unresolved call| unresolved_unresolved_1jt5jy8_call_target
    method_14hlcms_handlegraphupdate -->|unresolved call| unresolved_unresolved_1t03yb9_call_target
    method_14hlcms_handlegraphupdate -->|unresolved call| unresolved_unresolved_1tm32an_call_target
    method_14hlcms_handlegraphupdate -->|unresolved call| unresolved_unresolved_4132f3_call_target
    method_16kjevr_handleactivenodechange -->|unresolved call| unresolved_unresolved_87xiei_call_target
    method_1ari3ha_oninitialized -->|unresolved call| unresolved_unresolved_7hdicu_call_target
    method_1ari3ha_oninitialized -->|unresolved call| unresolved_unresolved_9u6o3t_call_target
    method_1ari3ha_oninitialized -->|unresolved call| unresolved_unresolved_kwph20_call_target
    method_1ari3ha_oninitialized -->|unresolved call| unresolved_unresolved_pxnbrk_call_target
    method_1cayj92_onafterrenderasync -->|unresolved call| unresolved_unresolved_13n5skw_call_target
    method_1cayj92_onafterrenderasync -->|unresolved call| unresolved_unresolved_18xu0uy_call_target
    method_1cayj92_onafterrenderasync -->|unresolved call| unresolved_unresolved_z3vcy7_call_target
    method_1l8ubet_zoomout -->|unresolved call| unresolved_unresolved_3gfwx2_call_target
    method_1muyu85_zoomin -->|unresolved call| unresolved_unresolved_1ftxrfl_call_target
    method_1to2smv_initializegraphasync -->|unresolved call| unresolved_unresolved_1torkt6_call_target
    method_1to2smv_initializegraphasync -->|unresolved call| unresolved_unresolved_1uyw1m_call_target
    method_66cucs_onnodeclicked -->|unresolved call| unresolved_unresolved_1xrm9ho_call_target
    method_lvsss7_disposeasync -->|unresolved call| unresolved_unresolved_15rvkdv_call_target
    method_lvsss7_disposeasync -->|unresolved call| unresolved_unresolved_1dic9oz_call_target
    method_lvsss7_disposeasync -->|unresolved call| unresolved_unresolved_1k2kio7_call_target
    method_lvsss7_disposeasync -->|unresolved call| unresolved_unresolved_1t911zi_call_target
    method_lvsss7_disposeasync -->|unresolved call| unresolved_unresolved_7i1fw4_call_target
    method_qjg1lv_handlefocussimulation -->|unresolved call| unresolved_unresolved_10ntjpd_call_target
    method_qjg1lv_handlefocussimulation -->|unresolved call| unresolved_unresolved_itxtwm_call_target
    method_qjg1lv_handlefocussimulation -->|unresolved call| unresolved_unresolved_tch553_call_target
```

### OnInitialized() Control Flow

```mermaid
flowchart TD
    method_1ari3ha_oninitialized__call_43_OnFocusModeChanged[["OnFocusModeChanged"]]
    method_1ari3ha_oninitialized__call_44_OnGraphUpdated[["OnGraphUpdated"]]
    method_1ari3ha_oninitialized__call_45_OnActiveNodeChanged[["OnActiveNodeChanged"]]
    method_1ari3ha_oninitialized__call_46_OnLoadingChanged[["OnLoadingChanged"]]
    method_1ari3ha_oninitialized__action_43_event_subscribe_43__linear("Subscribe FocusMode change")
    method_1ari3ha_oninitialized__action_44_event_subscribe_44__linear("Subscribe graph updates")
    method_1ari3ha_oninitialized__action_45_event_subscribe_45__linear("Subscribe active node")
    method_1ari3ha_oninitialized__action_46_event_subscribe_46__linear("Subscribe loading state")
    method_1ari3ha_oninitialized__entry(["OnInitialized entry"])
    method_1ari3ha_oninitialized__implicit_return(["return"])
    method_1ari3ha_oninitialized__action_43_event_subscribe_43__linear -->|subscribe HandleFocusSimulation| method_1ari3ha_oninitialized__call_43_OnFocusModeChanged
    method_1ari3ha_oninitialized__action_44_event_subscribe_44__linear -->|subscribe HandleGraphUpdate| method_1ari3ha_oninitialized__call_44_OnGraphUpdated
    method_1ari3ha_oninitialized__action_45_event_subscribe_45__linear -->|subscribe HandleActiveNodeChange| method_1ari3ha_oninitialized__call_45_OnActiveNodeChanged
    method_1ari3ha_oninitialized__action_46_event_subscribe_46__linear -->|subscribe HandleLoadingChange| method_1ari3ha_oninitialized__call_46_OnLoadingChanged
    method_1ari3ha_oninitialized__call_43_OnFocusModeChanged -->|next| method_1ari3ha_oninitialized__action_44_event_subscribe_44__linear
    method_1ari3ha_oninitialized__call_44_OnGraphUpdated -->|next| method_1ari3ha_oninitialized__action_45_event_subscribe_45__linear
    method_1ari3ha_oninitialized__call_45_OnActiveNodeChanged -->|next| method_1ari3ha_oninitialized__action_46_event_subscribe_46__linear
    method_1ari3ha_oninitialized__call_46_OnLoadingChanged -->|return| method_1ari3ha_oninitialized__implicit_return
    method_1ari3ha_oninitialized__entry -->|next| method_1ari3ha_oninitialized__action_43_event_subscribe_43__linear
```

### HandleGraphUpdate() Control Flow

_Warnings: diagram method_14hlcms_handlegraphupdate__fragment_diagram exceeds preferred complexity thresholds (29 nodes, 33 edges)._

```mermaid
---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart TD
    method_14hlcms_handlegraphupdate__call_53_CurrentGraphData[["CurrentGraphData"]]
    method_14hlcms_handlegraphupdate__call_55_clear[["clear"]]
    method_14hlcms_handlegraphupdate__call_59_updateData[["updateData"]]
    method_14hlcms_handlegraphupdate__action_51_guard_clause_51__condition{"_module == null"}
    method_14hlcms_handlegraphupdate__action_51_guard_clause_51__false("otherwise")
    method_14hlcms_handlegraphupdate__action_51_guard_clause_51__merge("merge")
    method_14hlcms_handlegraphupdate__action_51_guard_clause_51__true("return")
    method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__condition{"_module == null"}
    method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__false("continue")
    method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge("merge")
    method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__true("exit")
    method_14hlcms_handlegraphupdate__action_53_branch_53__condition{"GraphService.CurrentGraphData == null"}
    method_14hlcms_handlegraphupdate__action_53_branch_53__false("update")
    method_14hlcms_handlegraphupdate__action_53_branch_53__merge("merge")
    method_14hlcms_handlegraphupdate__action_53_branch_53__true("clear")
    method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__condition{"GraphService.CurrentGraphData == null"}
    method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__false("false")
    method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge("merge")
    method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__true("true")
    method_14hlcms_handlegraphupdate__action_55_handlegraphupdate_await_55_2__await[["Waits for async work"]]
    method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__condition{"Falls back to alternate path"}
    method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__false("otherwise")
    method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge("merge")
    method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__true("fallback")
    method_14hlcms_handlegraphupdate__action_59_handlegraphupdate_await_59_4__await[["Waits for async work"]]
    method_14hlcms_handlegraphupdate__action_62_handlegraphupdate_await_62_5__await[["Waits for async work"]]
    method_14hlcms_handlegraphupdate__action_62_ui_refresh_62__linear("Trigger StateHasChanged")
    method_14hlcms_handlegraphupdate__entry(["HandleGraphUpdate entry"])
    method_14hlcms_handlegraphupdate__implicit_return(["return"])
    method_14hlcms_handlegraphupdate__action_51_guard_clause_51__condition -->|otherwise| method_14hlcms_handlegraphupdate__action_51_guard_clause_51__false
    method_14hlcms_handlegraphupdate__action_51_guard_clause_51__condition -->|return| method_14hlcms_handlegraphupdate__action_51_guard_clause_51__true
    method_14hlcms_handlegraphupdate__action_51_guard_clause_51__false -->|next| method_14hlcms_handlegraphupdate__action_51_guard_clause_51__merge
    method_14hlcms_handlegraphupdate__action_51_guard_clause_51__merge -->|next| method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__condition
    method_14hlcms_handlegraphupdate__action_51_guard_clause_51__true -->|next| method_14hlcms_handlegraphupdate__action_51_guard_clause_51__merge
    method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__condition -->|continue| method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__false
    method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__condition -->|exit| method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__true
    method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__false -->|next| method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge
    method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge -->|next| method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__condition
    method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__true -->|next| method_14hlcms_handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge
    method_14hlcms_handlegraphupdate__action_53_branch_53__condition -->|update| method_14hlcms_handlegraphupdate__action_53_branch_53__false
    method_14hlcms_handlegraphupdate__action_53_branch_53__condition -->|clear| method_14hlcms_handlegraphupdate__action_53_branch_53__true
    method_14hlcms_handlegraphupdate__action_53_branch_53__false -->|next| method_14hlcms_handlegraphupdate__action_53_branch_53__merge
    method_14hlcms_handlegraphupdate__action_53_branch_53__merge -->|read current graph DTO| method_14hlcms_handlegraphupdate__call_53_CurrentGraphData
    method_14hlcms_handlegraphupdate__action_53_branch_53__true -->|next| method_14hlcms_handlegraphupdate__action_53_branch_53__merge
    method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__condition -->|false| method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__false
    method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__condition -->|true| method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__true
    method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__false -->|next| method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge
    method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge -->|next| method_14hlcms_handlegraphupdate__action_53_branch_53__condition
    method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__true -->|next| method_14hlcms_handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge
    method_14hlcms_handlegraphupdate__action_55_handlegraphupdate_await_55_2__await -->|no args| method_14hlcms_handlegraphupdate__call_55_clear
    method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__condition -->|otherwise| method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__false
    method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__condition -->|fallback| method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__true
    method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__false -->|next| method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge
    method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge -->|next| method_14hlcms_handlegraphupdate__action_59_handlegraphupdate_await_59_4__await
    method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__true -->|next| method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge
    method_14hlcms_handlegraphupdate__action_59_handlegraphupdate_await_59_4__await -->|GraphService.CurrentGraphData| method_14hlcms_handlegraphupdate__call_59_updateData
    method_14hlcms_handlegraphupdate__action_62_handlegraphupdate_await_62_5__await -->|next| method_14hlcms_handlegraphupdate__action_62_ui_refresh_62__linear
    method_14hlcms_handlegraphupdate__action_62_ui_refresh_62__linear -->|return| method_14hlcms_handlegraphupdate__implicit_return
    method_14hlcms_handlegraphupdate__call_53_CurrentGraphData -->|next| method_14hlcms_handlegraphupdate__action_55_handlegraphupdate_await_55_2__await
    method_14hlcms_handlegraphupdate__call_55_clear -->|fallback| method_14hlcms_handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__condition
    method_14hlcms_handlegraphupdate__call_59_updateData -->|next| method_14hlcms_handlegraphupdate__action_62_handlegraphupdate_await_62_5__await
    method_14hlcms_handlegraphupdate__entry -->|next| method_14hlcms_handlegraphupdate__action_51_guard_clause_51__condition
```

### HandleActiveNodeChange() Control Flow

```mermaid
flowchart TD
    method_16kjevr_handleactivenodechange__call_68_setActiveNode[["setActiveNode"]]
    method_16kjevr_handleactivenodechange__action_67_guard_clause_67__condition{"_module == null"}
    method_16kjevr_handleactivenodechange__action_67_guard_clause_67__false("otherwise")
    method_16kjevr_handleactivenodechange__action_67_guard_clause_67__merge("merge")
    method_16kjevr_handleactivenodechange__action_67_guard_clause_67__true("return")
    method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__condition{"_module == null"}
    method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__false("continue")
    method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge("merge")
    method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__true("exit")
    method_16kjevr_handleactivenodechange__action_68_handleactivenodechange_await_68_1__await[["Waits for async work"]]
    method_16kjevr_handleactivenodechange__entry(["HandleActiveNodeChange entry"])
    method_16kjevr_handleactivenodechange__implicit_return(["return"])
    method_16kjevr_handleactivenodechange__action_67_guard_clause_67__condition -->|otherwise| method_16kjevr_handleactivenodechange__action_67_guard_clause_67__false
    method_16kjevr_handleactivenodechange__action_67_guard_clause_67__condition -->|return| method_16kjevr_handleactivenodechange__action_67_guard_clause_67__true
    method_16kjevr_handleactivenodechange__action_67_guard_clause_67__false -->|next| method_16kjevr_handleactivenodechange__action_67_guard_clause_67__merge
    method_16kjevr_handleactivenodechange__action_67_guard_clause_67__merge -->|next| method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__condition
    method_16kjevr_handleactivenodechange__action_67_guard_clause_67__true -->|next| method_16kjevr_handleactivenodechange__action_67_guard_clause_67__merge
    method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__condition -->|continue| method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__false
    method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__condition -->|exit| method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__true
    method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__false -->|next| method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge
    method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge -->|next| method_16kjevr_handleactivenodechange__action_68_handleactivenodechange_await_68_1__await
    method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__true -->|next| method_16kjevr_handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge
    method_16kjevr_handleactivenodechange__action_68_handleactivenodechange_await_68_1__await -->|nodeId| method_16kjevr_handleactivenodechange__call_68_setActiveNode
    method_16kjevr_handleactivenodechange__call_68_setActiveNode -->|return| method_16kjevr_handleactivenodechange__implicit_return
    method_16kjevr_handleactivenodechange__entry -->|next| method_16kjevr_handleactivenodechange__action_67_guard_clause_67__condition
```

### OnAfterRenderAsync() Control Flow

_Warnings: diagram method_1cayj92_onafterrenderasync__fragment_diagram exceeds preferred complexity thresholds (19 nodes, 21 edges)._

```mermaid
---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart TD
    method_1cayj92_onafterrenderasync__call_80_InitializeGraphAsync[["InitializeGraphAsync"]]
    method_1cayj92_onafterrenderasync__call_82_CurrentGraphData[["CurrentGraphData"]]
    method_1cayj92_onafterrenderasync__call_84_HandleGraphUpdate[["HandleGraphUpdate"]]
    method_1cayj92_onafterrenderasync__action_78_guard_clause_78__condition{"firstRender == true"}
    method_1cayj92_onafterrenderasync__action_78_guard_clause_78__false("skip")
    method_1cayj92_onafterrenderasync__action_78_guard_clause_78__merge("merge")
    method_1cayj92_onafterrenderasync__action_78_guard_clause_78__true("init")
    method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__condition{"firstRender"}
    method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__false("false")
    method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge("merge")
    method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__true("true")
    method_1cayj92_onafterrenderasync__action_80_onafterrenderasync_await_80_1__await[["Waits for async work"]]
    method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__condition{"GraphService.CurrentGraphData != null"}
    method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__false("false")
    method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge("merge")
    method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__true("true")
    method_1cayj92_onafterrenderasync__action_84_onafterrenderasync_await_84_3__await[["Waits for async work"]]
    method_1cayj92_onafterrenderasync__entry(["OnAfterRenderAsync entry"])
    method_1cayj92_onafterrenderasync__implicit_return(["return"])
    method_1cayj92_onafterrenderasync__action_78_guard_clause_78__condition -->|skip| method_1cayj92_onafterrenderasync__action_78_guard_clause_78__false
    method_1cayj92_onafterrenderasync__action_78_guard_clause_78__condition -->|init| method_1cayj92_onafterrenderasync__action_78_guard_clause_78__true
    method_1cayj92_onafterrenderasync__action_78_guard_clause_78__false -->|next| method_1cayj92_onafterrenderasync__action_78_guard_clause_78__merge
    method_1cayj92_onafterrenderasync__action_78_guard_clause_78__merge -->|next| method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__condition
    method_1cayj92_onafterrenderasync__action_78_guard_clause_78__true -->|next| method_1cayj92_onafterrenderasync__action_78_guard_clause_78__merge
    method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__condition -->|false| method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__false
    method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__condition -->|true| method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__true
    method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__false -->|next| method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge
    method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge -->|next| method_1cayj92_onafterrenderasync__action_80_onafterrenderasync_await_80_1__await
    method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__true -->|next| method_1cayj92_onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge
    method_1cayj92_onafterrenderasync__action_80_onafterrenderasync_await_80_1__await -->|no args| method_1cayj92_onafterrenderasync__call_80_InitializeGraphAsync
    method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__condition -->|false| method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__false
    method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__condition -->|true| method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__true
    method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__false -->|next| method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge
    method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge -->|read current graph DTO| method_1cayj92_onafterrenderasync__call_82_CurrentGraphData
    method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__true -->|next| method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge
    method_1cayj92_onafterrenderasync__action_84_onafterrenderasync_await_84_3__await -->|no args| method_1cayj92_onafterrenderasync__call_84_HandleGraphUpdate
    method_1cayj92_onafterrenderasync__call_80_InitializeGraphAsync -->|next| method_1cayj92_onafterrenderasync__action_82_onafterrenderasync_branch_82_2__condition
    method_1cayj92_onafterrenderasync__call_82_CurrentGraphData -->|next| method_1cayj92_onafterrenderasync__action_84_onafterrenderasync_await_84_3__await
    method_1cayj92_onafterrenderasync__call_84_HandleGraphUpdate -->|return| method_1cayj92_onafterrenderasync__implicit_return
    method_1cayj92_onafterrenderasync__entry -->|next| method_1cayj92_onafterrenderasync__action_78_guard_clause_78__condition
```

### InitializeGraphAsync() Control Flow

```mermaid
flowchart TD
    method_1to2smv_initializegraphasync__call_93_CurrentGraphData[["CurrentGraphData"]]
    method_1to2smv_initializegraphasync__call_93_mount[["mount"]]
    method_1to2smv_initializegraphasync__action_91_external_load_91__linear("Import JS module")
    method_1to2smv_initializegraphasync__action_91_initializegraphasync_await_91_0__await[["Waits for async work"]]
    method_1to2smv_initializegraphasync__action_92_interop_setup_92__linear("Create DotNetObjectReference")
    method_1to2smv_initializegraphasync__action_93_initializegraphasync_await_93_1__await[["Waits for async work"]]
    method_1to2smv_initializegraphasync__action_93_interop_call_93__linear("Mount graph")
    method_1to2smv_initializegraphasync__entry(["InitializeGraphAsync entry"])
    method_1to2smv_initializegraphasync__implicit_return(["return"])
    method_1to2smv_initializegraphasync__action_91_external_load_91__linear -->|next| method_1to2smv_initializegraphasync__action_92_interop_setup_92__linear
    method_1to2smv_initializegraphasync__action_91_initializegraphasync_await_91_0__await -->|next| method_1to2smv_initializegraphasync__action_91_external_load_91__linear
    method_1to2smv_initializegraphasync__action_92_interop_setup_92__linear -->|next| method_1to2smv_initializegraphasync__action_93_initializegraphasync_await_93_1__await
    method_1to2smv_initializegraphasync__action_93_initializegraphasync_await_93_1__await -->|next| method_1to2smv_initializegraphasync__action_93_interop_call_93__linear
    method_1to2smv_initializegraphasync__action_93_interop_call_93__linear -->|ContainerId, GraphService.CurrentGraphData, dotNet helper| method_1to2smv_initializegraphasync__call_93_mount
    method_1to2smv_initializegraphasync__call_93_CurrentGraphData -->|return| method_1to2smv_initializegraphasync__implicit_return
    method_1to2smv_initializegraphasync__call_93_mount -->|pass current graph DTO into mount| method_1to2smv_initializegraphasync__call_93_CurrentGraphData
    method_1to2smv_initializegraphasync__entry -->|next| method_1to2smv_initializegraphasync__action_91_initializegraphasync_await_91_0__await
```

### ZoomIn() Control Flow

```mermaid
flowchart TD
    method_1muyu85_zoomin__call_96_zoomIn[["zoomIn"]]
    method_1muyu85_zoomin__action_96_interop_call_96__linear("zoomIn")
    method_1muyu85_zoomin__action_96_zoomin_await_96_0__await[["Waits for async work"]]
    method_1muyu85_zoomin__entry(["ZoomIn entry"])
    method_1muyu85_zoomin__implicit_return(["return"])
    method_1muyu85_zoomin__action_96_interop_call_96__linear -->|next| method_1muyu85_zoomin__action_96_zoomin_await_96_0__await
    method_1muyu85_zoomin__action_96_zoomin_await_96_0__await -->|no args| method_1muyu85_zoomin__call_96_zoomIn
    method_1muyu85_zoomin__call_96_zoomIn -->|return| method_1muyu85_zoomin__implicit_return
    method_1muyu85_zoomin__entry -->|next| method_1muyu85_zoomin__action_96_interop_call_96__linear
```

### ZoomOut() Control Flow

```mermaid
flowchart TD
    method_1l8ubet_zoomout__call_97_zoomOut[["zoomOut"]]
    method_1l8ubet_zoomout__action_97_interop_call_97__linear("zoomOut")
    method_1l8ubet_zoomout__action_97_zoomout_await_97_0__await[["Waits for async work"]]
    method_1l8ubet_zoomout__entry(["ZoomOut entry"])
    method_1l8ubet_zoomout__implicit_return(["return"])
    method_1l8ubet_zoomout__action_97_interop_call_97__linear -->|next| method_1l8ubet_zoomout__action_97_zoomout_await_97_0__await
    method_1l8ubet_zoomout__action_97_zoomout_await_97_0__await -->|no args| method_1l8ubet_zoomout__call_97_zoomOut
    method_1l8ubet_zoomout__call_97_zoomOut -->|return| method_1l8ubet_zoomout__implicit_return
    method_1l8ubet_zoomout__entry -->|next| method_1l8ubet_zoomout__action_97_interop_call_97__linear
```

### ZoomReset() Control Flow

```mermaid
flowchart TD
    method_129w46l_zoomreset__call_98_zoomReset[["zoomReset"]]
    method_129w46l_zoomreset__action_98_interop_call_98__linear("zoomReset")
    method_129w46l_zoomreset__action_98_zoomreset_await_98_0__await[["Waits for async work"]]
    method_129w46l_zoomreset__entry(["ZoomReset entry"])
    method_129w46l_zoomreset__implicit_return(["return"])
    method_129w46l_zoomreset__action_98_interop_call_98__linear -->|next| method_129w46l_zoomreset__action_98_zoomreset_await_98_0__await
    method_129w46l_zoomreset__action_98_zoomreset_await_98_0__await -->|no args| method_129w46l_zoomreset__call_98_zoomReset
    method_129w46l_zoomreset__call_98_zoomReset -->|return| method_129w46l_zoomreset__implicit_return
    method_129w46l_zoomreset__entry -->|next| method_129w46l_zoomreset__action_98_interop_call_98__linear
```

### OnNodeClicked() Control Flow

```mermaid
flowchart TD
    method_66cucs_onnodeclicked__call_103_NotifyNodeSelected[["NotifyNodeSelected"]]
    method_66cucs_onnodeclicked__action_100_js_invokable_100__linear("Exposed to JS")
    method_66cucs_onnodeclicked__action_103_external_notification_103__linear("Notify InteractionService")
    method_66cucs_onnodeclicked__action_103_onnodeclicked_await_103_1__await[["Waits for async work"]]
    method_66cucs_onnodeclicked__action_105_guard_clause_105__condition{"OnNodeSelected.HasDelegate"}
    method_66cucs_onnodeclicked__action_105_guard_clause_105__false("skip")
    method_66cucs_onnodeclicked__action_105_guard_clause_105__merge("merge")
    method_66cucs_onnodeclicked__action_105_guard_clause_105__true("invoke")
    method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__condition{"OnNodeSelected.HasDelegate"}
    method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__false("false")
    method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__merge("merge")
    method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__true("true")
    method_66cucs_onnodeclicked__action_107_onnodeclicked_await_107_3__await[["Waits for async work"]]
    method_66cucs_onnodeclicked__entry(["OnNodeClicked entry"])
    method_66cucs_onnodeclicked__action_103_onnodeclicked_notification_103_0__linear[/"Sends notification"/]
    method_66cucs_onnodeclicked__implicit_return(["return"])
    method_66cucs_onnodeclicked__action_100_js_invokable_100__linear -->|next| method_66cucs_onnodeclicked__action_103_onnodeclicked_await_103_1__await
    method_66cucs_onnodeclicked__action_103_external_notification_103__linear -->|nodeId| method_66cucs_onnodeclicked__call_103_NotifyNodeSelected
    method_66cucs_onnodeclicked__action_103_onnodeclicked_await_103_1__await -->|next| method_66cucs_onnodeclicked__action_103_onnodeclicked_notification_103_0__linear
    method_66cucs_onnodeclicked__action_103_onnodeclicked_notification_103_0__linear -->|next| method_66cucs_onnodeclicked__action_103_external_notification_103__linear
    method_66cucs_onnodeclicked__action_105_guard_clause_105__condition -->|skip| method_66cucs_onnodeclicked__action_105_guard_clause_105__false
    method_66cucs_onnodeclicked__action_105_guard_clause_105__condition -->|invoke| method_66cucs_onnodeclicked__action_105_guard_clause_105__true
    method_66cucs_onnodeclicked__action_105_guard_clause_105__false -->|next| method_66cucs_onnodeclicked__action_105_guard_clause_105__merge
    method_66cucs_onnodeclicked__action_105_guard_clause_105__merge -->|next| method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__condition
    method_66cucs_onnodeclicked__action_105_guard_clause_105__true -->|next| method_66cucs_onnodeclicked__action_105_guard_clause_105__merge
    method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__condition -->|false| method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__false
    method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__condition -->|true| method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__true
    method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__false -->|next| method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__merge
    method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__merge -->|next| method_66cucs_onnodeclicked__action_107_onnodeclicked_await_107_3__await
    method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__true -->|next| method_66cucs_onnodeclicked__action_105_onnodeclicked_branch_105_2__merge
    method_66cucs_onnodeclicked__action_107_onnodeclicked_await_107_3__await -->|return| method_66cucs_onnodeclicked__implicit_return
    method_66cucs_onnodeclicked__call_103_NotifyNodeSelected -->|next| method_66cucs_onnodeclicked__action_105_guard_clause_105__condition
    method_66cucs_onnodeclicked__entry -->|next| method_66cucs_onnodeclicked__action_100_js_invokable_100__linear
```

### HandleFocusSimulation() Control Flow

_Warnings: diagram method_qjg1lv_handlefocussimulation__fragment_diagram exceeds preferred complexity thresholds (30 nodes, 34 edges)._

```mermaid
---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart TD
    method_qjg1lv_handlefocussimulation__call_117_IsFocusModeActive[["IsFocusModeActive"]]
    method_qjg1lv_handlefocussimulation__call_118_pause[["pause"]]
    method_qjg1lv_handlefocussimulation__call_120_resume[["resume"]]
    method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__condition{"_module == null"}
    method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__false("otherwise")
    method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__merge("merge")
    method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__true("return")
    method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__condition{"_module == null"}
    method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__false("continue")
    method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge("merge")
    method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__true("exit")
    method_qjg1lv_handlefocussimulation__action_115_handlefocussimulation_try_115_1__try("Begins protected execution")
    method_qjg1lv_handlefocussimulation__action_117_branch_117__condition{"FocusMode.IsFocusModeActive"}
    method_qjg1lv_handlefocussimulation__action_117_branch_117__false("resume")
    method_qjg1lv_handlefocussimulation__action_117_branch_117__merge("merge")
    method_qjg1lv_handlefocussimulation__action_117_branch_117__true("pause")
    method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__condition{"FocusMode.IsFocusModeActive"}
    method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__false("false")
    method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge("merge")
    method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__true("true")
    method_qjg1lv_handlefocussimulation__action_118_handlefocussimulation_await_118_3__await[["Waits for async work"]]
    method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__condition{"Falls back to alternate path"}
    method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__false("otherwise")
    method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge("merge")
    method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__true("fallback")
    method_qjg1lv_handlefocussimulation__action_120_handlefocussimulation_await_120_5__await[["Waits for async work"]]
    method_qjg1lv_handlefocussimulation__action_122_error_handling_122__linear("Swallow exceptions from JS interop")
    method_qjg1lv_handlefocussimulation__action_122_handlefocussimulation_catch_122_6__catch("Handles exception path")
    method_qjg1lv_handlefocussimulation__entry(["HandleFocusSimulation entry"])
    method_qjg1lv_handlefocussimulation__implicit_return(["return"])
    method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__condition -->|otherwise| method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__false
    method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__condition -->|return| method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__true
    method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__false -->|next| method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__merge
    method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__merge -->|next| method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__condition
    method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__true -->|next| method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__merge
    method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__condition -->|continue| method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__false
    method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__condition -->|exit| method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__true
    method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__false -->|next| method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge
    method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge -->|next| method_qjg1lv_handlefocussimulation__action_115_handlefocussimulation_try_115_1__try
    method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__true -->|next| method_qjg1lv_handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge
    method_qjg1lv_handlefocussimulation__action_115_handlefocussimulation_try_115_1__try -->|next| method_qjg1lv_handlefocussimulation__action_117_branch_117__condition
    method_qjg1lv_handlefocussimulation__action_117_branch_117__condition -->|resume| method_qjg1lv_handlefocussimulation__action_117_branch_117__false
    method_qjg1lv_handlefocussimulation__action_117_branch_117__condition -->|pause| method_qjg1lv_handlefocussimulation__action_117_branch_117__true
    method_qjg1lv_handlefocussimulation__action_117_branch_117__false -->|next| method_qjg1lv_handlefocussimulation__action_117_branch_117__merge
    method_qjg1lv_handlefocussimulation__action_117_branch_117__merge -->|next| method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__condition
    method_qjg1lv_handlefocussimulation__action_117_branch_117__true -->|next| method_qjg1lv_handlefocussimulation__action_117_branch_117__merge
    method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__condition -->|false| method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__false
    method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__condition -->|true| method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__true
    method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__false -->|next| method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge
    method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge -->|read boolean| method_qjg1lv_handlefocussimulation__call_117_IsFocusModeActive
    method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__true -->|next| method_qjg1lv_handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge
    method_qjg1lv_handlefocussimulation__action_118_handlefocussimulation_await_118_3__await -->|no args| method_qjg1lv_handlefocussimulation__call_118_pause
    method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__condition -->|otherwise| method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__false
    method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__condition -->|fallback| method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__true
    method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__false -->|next| method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge
    method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge -->|next| method_qjg1lv_handlefocussimulation__action_120_handlefocussimulation_await_120_5__await
    method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__true -->|next| method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge
    method_qjg1lv_handlefocussimulation__action_120_handlefocussimulation_await_120_5__await -->|no args| method_qjg1lv_handlefocussimulation__call_120_resume
    method_qjg1lv_handlefocussimulation__action_122_error_handling_122__linear -->|exception| method_qjg1lv_handlefocussimulation__action_122_handlefocussimulation_catch_122_6__catch
    method_qjg1lv_handlefocussimulation__action_122_handlefocussimulation_catch_122_6__catch -->|return| method_qjg1lv_handlefocussimulation__implicit_return
    method_qjg1lv_handlefocussimulation__call_117_IsFocusModeActive -->|next| method_qjg1lv_handlefocussimulation__action_118_handlefocussimulation_await_118_3__await
    method_qjg1lv_handlefocussimulation__call_118_pause -->|fallback| method_qjg1lv_handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__condition
    method_qjg1lv_handlefocussimulation__call_120_resume -->|next| method_qjg1lv_handlefocussimulation__action_122_error_handling_122__linear
    method_qjg1lv_handlefocussimulation__entry -->|next| method_qjg1lv_handlefocussimulation__action_114_guard_clause_114__condition
```

### DisposeAsync() Control Flow

_Warnings: diagram method_lvsss7_disposeasync__fragment_diagram exceeds preferred complexity thresholds (20 nodes, 20 edges)._

```mermaid
---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart TD
    method_lvsss7_disposeasync__call_127_OnFocusModeChanged[["OnFocusModeChanged"]]
    method_lvsss7_disposeasync__call_128_OnGraphUpdated[["OnGraphUpdated"]]
    method_lvsss7_disposeasync__call_129_OnActiveNodeChanged[["OnActiveNodeChanged"]]
    method_lvsss7_disposeasync__call_130_OnLoadingChanged[["OnLoadingChanged"]]
    method_lvsss7_disposeasync__call_136_unmount[["unmount"]]
    method_lvsss7_disposeasync__action_127_event_unsubscribe_127__linear("Unsubscribe FocusMode change")
    method_lvsss7_disposeasync__action_128_event_unsubscribe_128__linear("Unsubscribe graph events")
    method_lvsss7_disposeasync__action_132_disposeasync_try_132_0__try("Begins protected execution")
    method_lvsss7_disposeasync__action_132_error_handling_132__linear("Swallow exceptions during dispose")
    method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__condition{"_module is not null"}
    method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__false("false")
    method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__merge("merge")
    method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__true("true")
    method_lvsss7_disposeasync__action_136_disposeasync_await_136_2__await[["Waits for async work"]]
    method_lvsss7_disposeasync__action_136_interop_call_136__linear("Unmount JS module")
    method_lvsss7_disposeasync__action_137_dispose_137__linear("Dispose JS module and DotNet helper")
    method_lvsss7_disposeasync__action_137_disposeasync_await_137_3__await[["Waits for async work"]]
    method_lvsss7_disposeasync__action_140_disposeasync_catch_140_4__catch("Handles exception path")
    method_lvsss7_disposeasync__entry(["DisposeAsync entry"])
    method_lvsss7_disposeasync__implicit_return(["return"])
    method_lvsss7_disposeasync__action_127_event_unsubscribe_127__linear -->|unsubscribe HandleFocusSimulation| method_lvsss7_disposeasync__call_127_OnFocusModeChanged
    method_lvsss7_disposeasync__action_128_event_unsubscribe_128__linear -->|unsubscribe HandleGraphUpdate| method_lvsss7_disposeasync__call_128_OnGraphUpdated
    method_lvsss7_disposeasync__action_132_disposeasync_try_132_0__try -->|next| method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__condition
    method_lvsss7_disposeasync__action_132_error_handling_132__linear -->|next| method_lvsss7_disposeasync__action_132_disposeasync_try_132_0__try
    method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__condition -->|false| method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__false
    method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__condition -->|true| method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__true
    method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__false -->|next| method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__merge
    method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__merge -->|next| method_lvsss7_disposeasync__action_136_disposeasync_await_136_2__await
    method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__true -->|next| method_lvsss7_disposeasync__action_134_disposeasync_branch_134_1__merge
    method_lvsss7_disposeasync__action_136_disposeasync_await_136_2__await -->|next| method_lvsss7_disposeasync__action_136_interop_call_136__linear
    method_lvsss7_disposeasync__action_136_interop_call_136__linear -->|ContainerId| method_lvsss7_disposeasync__call_136_unmount
    method_lvsss7_disposeasync__action_137_dispose_137__linear -->|exception| method_lvsss7_disposeasync__action_140_disposeasync_catch_140_4__catch
    method_lvsss7_disposeasync__action_137_disposeasync_await_137_3__await -->|next| method_lvsss7_disposeasync__action_137_dispose_137__linear
    method_lvsss7_disposeasync__action_140_disposeasync_catch_140_4__catch -->|return| method_lvsss7_disposeasync__implicit_return
    method_lvsss7_disposeasync__call_127_OnFocusModeChanged -->|next| method_lvsss7_disposeasync__action_128_event_unsubscribe_128__linear
    method_lvsss7_disposeasync__call_128_OnGraphUpdated -->|unsubscribe HandleActiveNodeChange| method_lvsss7_disposeasync__call_129_OnActiveNodeChanged
    method_lvsss7_disposeasync__call_129_OnActiveNodeChanged -->|unsubscribe HandleLoadingChange| method_lvsss7_disposeasync__call_130_OnLoadingChanged
    method_lvsss7_disposeasync__call_130_OnLoadingChanged -->|next| method_lvsss7_disposeasync__action_132_error_handling_132__linear
    method_lvsss7_disposeasync__call_136_unmount -->|next| method_lvsss7_disposeasync__action_137_disposeasync_await_137_3__await
    method_lvsss7_disposeasync__entry -->|next| method_lvsss7_disposeasync__action_127_event_unsubscribe_127__linear
```

## Diagram Validation

- Status: warn
- Warning: Control-flow extraction left 23 unresolved jumps.
- Warning: neighborhood-view: diagram file_jo64ly_knowledgegraph_razor_neighborhood_view exceeds preferred complexity thresholds (14 nodes, 0 edges).
- Warning: execution-overview: diagram file_jo64ly_knowledgegraph_razor_execution_view exceeds preferred complexity thresholds (38 nodes, 37 edges).
- Warning: control-flow: diagram method_14hlcms_handlegraphupdate__fragment_diagram exceeds preferred complexity thresholds (29 nodes, 33 edges).
- Warning: control-flow: diagram method_1cayj92_onafterrenderasync__fragment_diagram exceeds preferred complexity thresholds (19 nodes, 21 edges).
- Warning: control-flow: diagram method_qjg1lv_handlefocussimulation__fragment_diagram exceeds preferred complexity thresholds (30 nodes, 34 edges).
- Warning: control-flow: diagram method_lvsss7_disposeasync__fragment_diagram exceeds preferred complexity thresholds (20 nodes, 20 edges).
