# KnowledgeCheck

- File ID: file:yno7se:knowledgecheck-razor
- Path: NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor
- Role: ui-component
- Layer: frontend

## Purpose

Blazor UI component that renders a knowledge-check quiz, manages local answer state, reacts to quiz service updates, and submits answers via MediatR with haptic feedback via a platform service.

## Key Details

Component maintains a local dictionary mapping QuizQuestionDto -> (SelectedIndex, IsCorrect), subscribes/unsubscribes to quiz updates, uses MediatR to send SubmitAnswerCommand, and uses IPlatformService for haptic feedback on interactions.

## Symbols

- OnInitialized(): Lifecycle initialization: subscribes to the QuizService update event to refresh UI when quiz state changes.
- HandleUpdate(): Requests a UI re-render on the Blazor synchronization context when the quiz service signals an update.
- Dispose(): Lifecycle cleanup: unsubscribes from the QuizService update event.
- SelectOptionAsync(): Handles user's option selection: prevents double submissions, triggers haptic feedback, submits an answer command via Mediator, updates local state, and triggers success/error vibration and UI refresh.
- AllQuestionsAnswered(): Determines whether all quiz questions have been answered by comparing local state count with current quiz question count.
- GetBlockClass(): Returns a CSS class for a question block based on local correctness state (correct/incorrect) or empty when unanswered.
- GetOptionClass(): Returns CSS class for an option depending on selection, correctness, revealed-correct when incorrect, or faded for others.

## Dependencies

- No resolved dependencies.

## Calls

- No resolved calls.

## Unresolved References

- dependency-target: NexusReader.Application.Queries.Quiz (Quiz DTOs)
- dependency-target: NexusReader.Application.Commands.Quiz (SubmitAnswerCommand)
- dependency-target: NexusReader.Application.Abstractions.Services (IPlatformService, IQuizStateService)
- dependency-target: MediatR (IMediator) - external library
- call-target: unknown
- call-target: unknown
- call-target: unknown
- call-target: NexusReader.Application.Commands.Quiz
- call-target: unknown
- call-target: unknown
- call-target: unknown
- call-target: unknown
- interaction-target: await PlatformService.VibrateAsync(40)
- interaction-target: var res = await Mediator.Send(cmd)

## Coverage

- Symbols: 7
- Executable symbols: 7
- Executable symbols with control flow: 7
- Grounded edges: 7
- Unresolved references: 14
- Control-flow fragments: 7
- Unresolved jumps: 8
- Unsupported constructs: 0
- Control-flow coverage: 100%
- Required diagrams: 2
- Generated diagrams: 8

## Control Flow Fragments

- OnInitialized: 4 nodes, 3 edges, 1 jumps, 0 unsupported constructs
- HandleUpdate: 3 nodes, 2 edges, 0 jumps, 0 unsupported constructs
- Dispose: 4 nodes, 3 edges, 1 jumps, 0 unsupported constructs
- SelectOptionAsync: 36 nodes, 40 edges, 5 jumps, 0 unsupported constructs
- AllQuestionsAnswered: 9 nodes, 9 edges, 1 jumps, 0 unsupported constructs
- GetBlockClass: 10 nodes, 11 edges, 0 jumps, 0 unsupported constructs
- GetOptionClass: 28 nodes, 33 edges, 0 jumps, 0 unsupported constructs

## Diagrams

### KnowledgeCheck Neighborhood

```mermaid
flowchart LR
    file_yno7se_knowledgecheck_razor("KnowledgeCheck")
    method_13emvrm_oninitialized[["OnInitialized()"]]
    method_1b8lqka_handleupdate[["HandleUpdate()"]]
    method_1dimc2e_getblockclass[["GetBlockClass()"]]
    method_1q9e63q_getoptionclass[["GetOptionClass()"]]
    method_9q9eda_dispose[["Dispose()"]]
    method_cgrv35_selectoptionasync[["SelectOptionAsync()"]]
    method_ty8u23_allquestionsanswered[["AllQuestionsAnswered()"]]
```

### KnowledgeCheck Execution Overview

```mermaid
flowchart TD
    file_yno7se_knowledgecheck_razor("KnowledgeCheck")
    method_13emvrm_oninitialized[["OnInitialized()"]]
    method_1b8lqka_handleupdate[["HandleUpdate()"]]
    method_1dimc2e_getblockclass[["GetBlockClass()"]]
    method_1q9e63q_getoptionclass[["GetOptionClass()"]]
    method_9q9eda_dispose[["Dispose()"]]
    method_cgrv35_selectoptionasync[["SelectOptionAsync()"]]
    method_ty8u23_allquestionsanswered[["AllQuestionsAnswered()"]]
    unresolved_unresolved_149jext_call_target{"Unresolved: QuizService.OnQuizUpdated (event add)"}
    unresolved_unresolved_16bacnb_interaction_target{"Unresolved: var res = await Mediator.Send(cmd)"}
    unresolved_unresolved_1ai32n7_interaction_target{"Unresolved: await PlatformService.VibrateAsync(40)"}
    unresolved_unresolved_1h17smo_call_target{"Unresolved: PlatformService.VibrateAsync"}
    unresolved_unresolved_1hll04e_call_target{"Unresolved: PlatformService.VibrateErrorAsync"}
    unresolved_unresolved_1msmcsp_call_target{"Unresolved: PlatformService.VibrateSuccessAsync"}
    unresolved_unresolved_1xwqjw3_call_target{"Unresolved: SubmitAnswerCommand..ctor"}
    unresolved_unresolved_5f31sk_call_target{"Unresolved: QuizService.OnQuizUpdated (event remove)"}
    unresolved_unresolved_a4jvef_call_target{"Unresolved: IMediator.Send"}
    unresolved_unresolved_jnv1ge_call_target{"Unresolved: QuizService.CurrentQuiz"}
    file_yno7se_knowledgecheck_razor -->|contains| method_13emvrm_oninitialized
    file_yno7se_knowledgecheck_razor -->|contains| method_1b8lqka_handleupdate
    file_yno7se_knowledgecheck_razor -->|contains| method_1dimc2e_getblockclass
    file_yno7se_knowledgecheck_razor -->|contains| method_1q9e63q_getoptionclass
    file_yno7se_knowledgecheck_razor -->|contains| method_9q9eda_dispose
    file_yno7se_knowledgecheck_razor -->|contains| method_cgrv35_selectoptionasync
    file_yno7se_knowledgecheck_razor -->|contains| method_ty8u23_allquestionsanswered
    file_yno7se_knowledgecheck_razor -->|unresolved interaction| unresolved_unresolved_16bacnb_interaction_target
    file_yno7se_knowledgecheck_razor -->|unresolved interaction| unresolved_unresolved_1ai32n7_interaction_target
    method_13emvrm_oninitialized -->|unresolved call| unresolved_unresolved_149jext_call_target
    method_9q9eda_dispose -->|unresolved call| unresolved_unresolved_5f31sk_call_target
    method_cgrv35_selectoptionasync -->|unresolved call| unresolved_unresolved_1h17smo_call_target
    method_cgrv35_selectoptionasync -->|unresolved call| unresolved_unresolved_1hll04e_call_target
    method_cgrv35_selectoptionasync -->|unresolved call| unresolved_unresolved_1msmcsp_call_target
    method_cgrv35_selectoptionasync -->|unresolved call| unresolved_unresolved_1xwqjw3_call_target
    method_cgrv35_selectoptionasync -->|unresolved call| unresolved_unresolved_a4jvef_call_target
    method_ty8u23_allquestionsanswered -->|unresolved call| unresolved_unresolved_jnv1ge_call_target
```

### OnInitialized() Control Flow

```mermaid
flowchart TD
    method_13emvrm_oninitialized__call_58_QuizService_OnQuizUpdated_event_add_[["QuizService.OnQuizUpdated (event add)"]]
    method_13emvrm_oninitialized__action_58_event_subscribe_58__linear("Subscribe to quiz updates")
    method_13emvrm_oninitialized__entry(["OnInitialized entry"])
    method_13emvrm_oninitialized__implicit_return(["return"])
    method_13emvrm_oninitialized__action_58_event_subscribe_58__linear -->|HandleUpdate delegate| method_13emvrm_oninitialized__call_58_QuizService_OnQuizUpdated_event_add_
    method_13emvrm_oninitialized__call_58_QuizService_OnQuizUpdated_event_add_ -->|return| method_13emvrm_oninitialized__implicit_return
    method_13emvrm_oninitialized__entry -->|next| method_13emvrm_oninitialized__action_58_event_subscribe_58__linear
```

### Dispose() Control Flow

```mermaid
flowchart TD
    method_9q9eda_dispose__call_65_QuizService_OnQuizUpdated_event_remove_[["QuizService.OnQuizUpdated (event remove)"]]
    method_9q9eda_dispose__action_65_event_unsubscribe_65__linear("Unsubscribe from quiz updates")
    method_9q9eda_dispose__entry(["Dispose entry"])
    method_9q9eda_dispose__implicit_return(["return"])
    method_9q9eda_dispose__action_65_event_unsubscribe_65__linear -->|HandleUpdate delegate| method_9q9eda_dispose__call_65_QuizService_OnQuizUpdated_event_remove_
    method_9q9eda_dispose__call_65_QuizService_OnQuizUpdated_event_remove_ -->|return| method_9q9eda_dispose__implicit_return
    method_9q9eda_dispose__entry -->|next| method_9q9eda_dispose__action_65_event_unsubscribe_65__linear
```

### SelectOptionAsync() Control Flow

_Warnings: diagram method_cgrv35_selectoptionasync__fragment_diagram exceeds preferred complexity thresholds (36 nodes, 40 edges)._

```mermaid
---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart TD
    method_cgrv35_selectoptionasync__call_73_PlatformService_VibrateAsync[["PlatformService.VibrateAsync"]]
    method_cgrv35_selectoptionasync__call_75_SubmitAnswerCommand_ctor[["SubmitAnswerCommand..ctor"]]
    method_cgrv35_selectoptionasync__call_76_IMediator_Send[["IMediator.Send"]]
    method_cgrv35_selectoptionasync__call_81_PlatformService_VibrateSuccessAsync[["PlatformService.VibrateSuccessAsync"]]
    method_cgrv35_selectoptionasync__call_83_PlatformService_VibrateErrorAsync[["PlatformService.VibrateErrorAsync"]]
    method_cgrv35_selectoptionasync__action_70_guard_clause_70__condition{"_states.ContainsKey(question)"}
    method_cgrv35_selectoptionasync__action_70_guard_clause_70__false("continue")
    method_cgrv35_selectoptionasync__action_70_guard_clause_70__merge("merge")
    method_cgrv35_selectoptionasync__action_70_guard_clause_70__true("return (ignored)")
    method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__condition{"_states.ContainsKey(question)"}
    method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__false("continue")
    method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge("merge")
    method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__true("exit")
    method_cgrv35_selectoptionasync__action_73_selectoptionasync_await_73_1__await[["Waits for async work"]]
    method_cgrv35_selectoptionasync__action_75_create_command_75__linear("Build submit command")
    method_cgrv35_selectoptionasync__action_76_selectoptionasync_await_76_2__await[["Waits for async work"]]
    method_cgrv35_selectoptionasync__action_78_state_write_78__linear("Record selected index and correctness")
    method_cgrv35_selectoptionasync__action_80_branch_80__condition{"res.IsSuccess"}
    method_cgrv35_selectoptionasync__action_80_branch_80__false("failure -> VibrateErrorAsync")
    method_cgrv35_selectoptionasync__action_80_branch_80__merge("merge")
    method_cgrv35_selectoptionasync__action_80_branch_80__true("success -> VibrateSuccessAsync")
    method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__condition{"res.IsSuccess"}
    method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__false("false")
    method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__merge("merge")
    method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__true("true")
    method_cgrv35_selectoptionasync__action_81_selectoptionasync_await_81_4__await[["Waits for async work"]]
    method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__condition{"Falls back to alternate path"}
    method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__false("otherwise")
    method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge("merge")
    method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__true("fallback")
    method_cgrv35_selectoptionasync__action_83_selectoptionasync_await_83_6__await[["Waits for async work"]]
    method_cgrv35_selectoptionasync__action_85_ui_update_85__linear("Trigger UI refresh")
    method_cgrv35_selectoptionasync__entry(["SelectOptionAsync entry"])
    method_cgrv35_selectoptionasync__action_73_external_call_73__linear("Haptic feedback before submit")
    method_cgrv35_selectoptionasync__action_76_external_call_76__linear("Send command to mediator")
    method_cgrv35_selectoptionasync__implicit_return(["return"])
    method_cgrv35_selectoptionasync__action_70_guard_clause_70__condition -->|continue| method_cgrv35_selectoptionasync__action_70_guard_clause_70__false
    method_cgrv35_selectoptionasync__action_70_guard_clause_70__condition -->|return ignored| method_cgrv35_selectoptionasync__action_70_guard_clause_70__true
    method_cgrv35_selectoptionasync__action_70_guard_clause_70__false -->|next| method_cgrv35_selectoptionasync__action_70_guard_clause_70__merge
    method_cgrv35_selectoptionasync__action_70_guard_clause_70__merge -->|next| method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__condition
    method_cgrv35_selectoptionasync__action_70_guard_clause_70__true -->|next| method_cgrv35_selectoptionasync__action_70_guard_clause_70__merge
    method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__condition -->|continue| method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__false
    method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__condition -->|exit| method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__true
    method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__false -->|next| method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge
    method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge -->|next| method_cgrv35_selectoptionasync__action_73_selectoptionasync_await_73_1__await
    method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__true -->|next| method_cgrv35_selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge
    method_cgrv35_selectoptionasync__action_73_external_call_73__linear -->|40 ms vibration duration| method_cgrv35_selectoptionasync__call_73_PlatformService_VibrateAsync
    method_cgrv35_selectoptionasync__action_73_selectoptionasync_await_73_1__await -->|next| method_cgrv35_selectoptionasync__action_73_external_call_73__linear
    method_cgrv35_selectoptionasync__action_75_create_command_75__linear -->|index, question.CorrectIndex| method_cgrv35_selectoptionasync__call_75_SubmitAnswerCommand_ctor
    method_cgrv35_selectoptionasync__action_76_external_call_76__linear -->|SubmitAnswerCommand| method_cgrv35_selectoptionasync__call_76_IMediator_Send
    method_cgrv35_selectoptionasync__action_76_selectoptionasync_await_76_2__await -->|next| method_cgrv35_selectoptionasync__action_76_external_call_76__linear
    method_cgrv35_selectoptionasync__action_78_state_write_78__linear -->|next| method_cgrv35_selectoptionasync__action_80_branch_80__condition
    method_cgrv35_selectoptionasync__action_80_branch_80__condition -->|failure -> VibrateErrorAsync| method_cgrv35_selectoptionasync__action_80_branch_80__false
    method_cgrv35_selectoptionasync__action_80_branch_80__condition -->|success -> VibrateSuccessAsync| method_cgrv35_selectoptionasync__action_80_branch_80__true
    method_cgrv35_selectoptionasync__action_80_branch_80__false -->|next| method_cgrv35_selectoptionasync__action_80_branch_80__merge
    method_cgrv35_selectoptionasync__action_80_branch_80__merge -->|next| method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__condition
    method_cgrv35_selectoptionasync__action_80_branch_80__true -->|next| method_cgrv35_selectoptionasync__action_80_branch_80__merge
    method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__condition -->|false| method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__false
    method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__condition -->|true| method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__true
    method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__false -->|next| method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__merge
    method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__merge -->|next| method_cgrv35_selectoptionasync__action_81_selectoptionasync_await_81_4__await
    method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__true -->|next| method_cgrv35_selectoptionasync__action_80_selectoptionasync_branch_80_3__merge
    method_cgrv35_selectoptionasync__action_81_selectoptionasync_await_81_4__await -->|no args| method_cgrv35_selectoptionasync__call_81_PlatformService_VibrateSuccessAsync
    method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__condition -->|otherwise| method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__false
    method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__condition -->|fallback| method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__true
    method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__false -->|next| method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge
    method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge -->|next| method_cgrv35_selectoptionasync__action_83_selectoptionasync_await_83_6__await
    method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__true -->|next| method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge
    method_cgrv35_selectoptionasync__action_83_selectoptionasync_await_83_6__await -->|no args| method_cgrv35_selectoptionasync__call_83_PlatformService_VibrateErrorAsync
    method_cgrv35_selectoptionasync__action_85_ui_update_85__linear -->|return| method_cgrv35_selectoptionasync__implicit_return
    method_cgrv35_selectoptionasync__call_73_PlatformService_VibrateAsync -->|next| method_cgrv35_selectoptionasync__action_75_create_command_75__linear
    method_cgrv35_selectoptionasync__call_75_SubmitAnswerCommand_ctor -->|next| method_cgrv35_selectoptionasync__action_76_selectoptionasync_await_76_2__await
    method_cgrv35_selectoptionasync__call_76_IMediator_Send -->|next| method_cgrv35_selectoptionasync__action_78_state_write_78__linear
    method_cgrv35_selectoptionasync__call_81_PlatformService_VibrateSuccessAsync -->|fallback| method_cgrv35_selectoptionasync__action_82_selectoptionasync_fallback_82_5__condition
    method_cgrv35_selectoptionasync__call_83_PlatformService_VibrateErrorAsync -->|next| method_cgrv35_selectoptionasync__action_85_ui_update_85__linear
    method_cgrv35_selectoptionasync__entry -->|next| method_cgrv35_selectoptionasync__action_70_guard_clause_70__condition
```

### AllQuestionsAnswered() Control Flow

```mermaid
flowchart TD
    method_ty8u23_allquestionsanswered__call_90_QuizService_CurrentQuiz[["QuizService.CurrentQuiz"]]
    method_ty8u23_allquestionsanswered__action_90_comparison_90__linear("Compare answered count to question count")
    method_ty8u23_allquestionsanswered__action_90_guard_clause_90__condition{"QuizService.CurrentQuiz != null"}
    method_ty8u23_allquestionsanswered__action_90_guard_clause_90__false("continue")
    method_ty8u23_allquestionsanswered__action_90_guard_clause_90__merge("merge")
    method_ty8u23_allquestionsanswered__action_90_guard_clause_90__true("false if null")
    method_ty8u23_allquestionsanswered__entry(["AllQuestionsAnswered entry"])
    method_ty8u23_allquestionsanswered__action_90_allquestionsanswered_return_90_0__return(["Returns result"])
    method_ty8u23_allquestionsanswered__implicit_return(["return"])
    method_ty8u23_allquestionsanswered__action_90_allquestionsanswered_return_90_0__return -->|next| method_ty8u23_allquestionsanswered__action_90_guard_clause_90__condition
    method_ty8u23_allquestionsanswered__action_90_comparison_90__linear -->|read property to check null and access Questions.Count| method_ty8u23_allquestionsanswered__call_90_QuizService_CurrentQuiz
    method_ty8u23_allquestionsanswered__action_90_guard_clause_90__condition -->|continue| method_ty8u23_allquestionsanswered__action_90_guard_clause_90__false
    method_ty8u23_allquestionsanswered__action_90_guard_clause_90__condition -->|false if null| method_ty8u23_allquestionsanswered__action_90_guard_clause_90__true
    method_ty8u23_allquestionsanswered__action_90_guard_clause_90__false -->|next| method_ty8u23_allquestionsanswered__action_90_guard_clause_90__merge
    method_ty8u23_allquestionsanswered__action_90_guard_clause_90__merge -->|next| method_ty8u23_allquestionsanswered__action_90_comparison_90__linear
    method_ty8u23_allquestionsanswered__action_90_guard_clause_90__true -->|next| method_ty8u23_allquestionsanswered__action_90_guard_clause_90__merge
    method_ty8u23_allquestionsanswered__call_90_QuizService_CurrentQuiz -->|return| method_ty8u23_allquestionsanswered__implicit_return
    method_ty8u23_allquestionsanswered__entry -->|return| method_ty8u23_allquestionsanswered__action_90_allquestionsanswered_return_90_0__return
```

### GetBlockClass() Control Flow

```mermaid
flowchart TD
    method_1dimc2e_getblockclass__action_96_branch_96__condition{"_states.TryGetValue(question, out state)"}
    method_1dimc2e_getblockclass__action_96_branch_96__false("return state-based class")
    method_1dimc2e_getblockclass__action_96_branch_96__merge("merge")
    method_1dimc2e_getblockclass__action_96_branch_96__true("return empty string")
    method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__condition{"!_states.TryGetValue(question, out var state)"}
    method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__false("continue")
    method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__merge("merge")
    method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__true("exit")
    method_1dimc2e_getblockclass__entry(["GetBlockClass entry"])
    method_1dimc2e_getblockclass__action_97_getblockclass_return_97_1__return(["Returns result"])
    method_1dimc2e_getblockclass__action_96_branch_96__condition -->|return state-based class| method_1dimc2e_getblockclass__action_96_branch_96__false
    method_1dimc2e_getblockclass__action_96_branch_96__condition -->|return empty string| method_1dimc2e_getblockclass__action_96_branch_96__true
    method_1dimc2e_getblockclass__action_96_branch_96__false -->|next| method_1dimc2e_getblockclass__action_96_branch_96__merge
    method_1dimc2e_getblockclass__action_96_branch_96__merge -->|next| method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__condition
    method_1dimc2e_getblockclass__action_96_branch_96__true -->|next| method_1dimc2e_getblockclass__action_96_branch_96__merge
    method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__condition -->|continue| method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__false
    method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__condition -->|exit| method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__true
    method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__false -->|next| method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__merge
    method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__merge -->|return| method_1dimc2e_getblockclass__action_97_getblockclass_return_97_1__return
    method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__true -->|next| method_1dimc2e_getblockclass__action_96_getblockclass_guard_clause_96_0__merge
    method_1dimc2e_getblockclass__entry -->|next| method_1dimc2e_getblockclass__action_96_branch_96__condition
```

### GetOptionClass() Control Flow

_Warnings: diagram method_1q9e63q_getoptionclass__fragment_diagram exceeds preferred complexity thresholds (28 nodes, 33 edges)._

```mermaid
---
config:
  flowchart:
    defaultRenderer: "elk"
---
flowchart TD
    method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__condition{"!_states.TryGetValue(question, out var state)"}
    method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__false("continue")
    method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge("merge")
    method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__true("exit")
    method_1q9e63q_getoptionclass__action_102_guard_clause_102__condition{"!_states.TryGetValue(question, out state)"}
    method_1q9e63q_getoptionclass__action_102_guard_clause_102__false("continue")
    method_1q9e63q_getoptionclass__action_102_guard_clause_102__merge("merge")
    method_1q9e63q_getoptionclass__action_102_guard_clause_102__true("return empty")
    method_1q9e63q_getoptionclass__action_104_branch_104__condition{"state.SelectedIndex == index"}
    method_1q9e63q_getoptionclass__action_104_branch_104__false("check revealed correct")
    method_1q9e63q_getoptionclass__action_104_branch_104__merge("merge")
    method_1q9e63q_getoptionclass__action_104_branch_104__true("option-correct / option-incorrect")
    method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__condition{"state.SelectedIndex == index"}
    method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__false("false")
    method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__merge("merge")
    method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__true("true")
    method_1q9e63q_getoptionclass__action_107_branch_107__condition{"state.IsCorrect == false && question.CorrectIndex == index"}
    method_1q9e63q_getoptionclass__action_107_branch_107__false("option-faded")
    method_1q9e63q_getoptionclass__action_107_branch_107__merge("merge")
    method_1q9e63q_getoptionclass__action_107_branch_107__true("option-revealed-correct")
    method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__condition{"state.IsCorrect == false && question.CorrectIndex == index"}
    method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__false("false")
    method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__merge("merge")
    method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__true("true")
    method_1q9e63q_getoptionclass__entry(["GetOptionClass entry"])
    method_1q9e63q_getoptionclass__action_105_getoptionclass_return_105_2__return(["Returns result"])
    method_1q9e63q_getoptionclass__action_108_getoptionclass_return_108_4__return(["Returns result"])
    method_1q9e63q_getoptionclass__action_110_getoptionclass_return_110_5__return(["Returns result"])
    method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__condition -->|continue| method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__false
    method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__condition -->|exit| method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__true
    method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__false -->|next| method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge
    method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge -->|next| method_1q9e63q_getoptionclass__action_104_branch_104__condition
    method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__true -->|next| method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge
    method_1q9e63q_getoptionclass__action_102_guard_clause_102__condition -->|continue| method_1q9e63q_getoptionclass__action_102_guard_clause_102__false
    method_1q9e63q_getoptionclass__action_102_guard_clause_102__condition -->|return empty| method_1q9e63q_getoptionclass__action_102_guard_clause_102__true
    method_1q9e63q_getoptionclass__action_102_guard_clause_102__false -->|next| method_1q9e63q_getoptionclass__action_102_guard_clause_102__merge
    method_1q9e63q_getoptionclass__action_102_guard_clause_102__merge -->|next| method_1q9e63q_getoptionclass__action_102_getoptionclass_guard_clause_102_0__condition
    method_1q9e63q_getoptionclass__action_102_guard_clause_102__true -->|next| method_1q9e63q_getoptionclass__action_102_guard_clause_102__merge
    method_1q9e63q_getoptionclass__action_104_branch_104__condition -->|check revealed correct| method_1q9e63q_getoptionclass__action_104_branch_104__false
    method_1q9e63q_getoptionclass__action_104_branch_104__condition -->|option-correct / option-incorrect| method_1q9e63q_getoptionclass__action_104_branch_104__true
    method_1q9e63q_getoptionclass__action_104_branch_104__false -->|next| method_1q9e63q_getoptionclass__action_104_branch_104__merge
    method_1q9e63q_getoptionclass__action_104_branch_104__merge -->|next| method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__condition
    method_1q9e63q_getoptionclass__action_104_branch_104__true -->|next| method_1q9e63q_getoptionclass__action_104_branch_104__merge
    method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__condition -->|false| method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__false
    method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__condition -->|true| method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__true
    method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__false -->|next| method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__merge
    method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__merge -->|return| method_1q9e63q_getoptionclass__action_105_getoptionclass_return_105_2__return
    method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__true -->|next| method_1q9e63q_getoptionclass__action_104_getoptionclass_branch_104_1__merge
    method_1q9e63q_getoptionclass__action_105_getoptionclass_return_105_2__return -->|next| method_1q9e63q_getoptionclass__action_107_branch_107__condition
    method_1q9e63q_getoptionclass__action_107_branch_107__condition -->|option-faded| method_1q9e63q_getoptionclass__action_107_branch_107__false
    method_1q9e63q_getoptionclass__action_107_branch_107__condition -->|option-revealed-correct| method_1q9e63q_getoptionclass__action_107_branch_107__true
    method_1q9e63q_getoptionclass__action_107_branch_107__false -->|next| method_1q9e63q_getoptionclass__action_107_branch_107__merge
    method_1q9e63q_getoptionclass__action_107_branch_107__merge -->|next| method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__condition
    method_1q9e63q_getoptionclass__action_107_branch_107__true -->|next| method_1q9e63q_getoptionclass__action_107_branch_107__merge
    method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__condition -->|false| method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__false
    method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__condition -->|true| method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__true
    method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__false -->|next| method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__merge
    method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__merge -->|return| method_1q9e63q_getoptionclass__action_108_getoptionclass_return_108_4__return
    method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__true -->|next| method_1q9e63q_getoptionclass__action_107_getoptionclass_branch_107_3__merge
    method_1q9e63q_getoptionclass__action_108_getoptionclass_return_108_4__return -->|return| method_1q9e63q_getoptionclass__action_110_getoptionclass_return_110_5__return
    method_1q9e63q_getoptionclass__entry -->|next| method_1q9e63q_getoptionclass__action_102_guard_clause_102__condition
```

## Diagram Validation

- Status: warn
- Warning: Control-flow extraction left 8 unresolved jumps.
- Warning: control-flow: diagram method_cgrv35_selectoptionasync__fragment_diagram exceeds preferred complexity thresholds (36 nodes, 40 edges).
- Warning: control-flow: diagram method_1q9e63q_getoptionclass__fragment_diagram exceeds preferred complexity thresholds (28 nodes, 33 edges).
