# 画面遷移図

Nushellは CLI/TUI アプリケーションであり、以下の画面遷移を持ちます。

## 全体概要

```mermaid
flowchart TB
    subgraph Main["メインフロー"]
        Start([起動]) --> REPL[メインREPL]
    end

    subgraph REPLFeatures["REPL機能"]
        REPL --> |Tab| CompMenu[補完メニュー]
        REPL --> |F1等| HelpMenu[ヘルプ補完メニュー]
        CompMenu --> |選択/Esc| REPL
        HelpMenu --> |選択/Esc| REPL
    end

    subgraph ExploreFlow["Exploreフロー"]
        REPL --> |"explore コマンド"| Explore{データ種別判定}
        Explore --> |バイナリ| BinaryView[バイナリビュー]
        Explore --> |テーブル/レコード| RecordView[レコードビュー]
        Explore --> |文字列/単純値| Preview[プレビュー]
        Explore --> |入力なし| HelpView[ヘルプ画面]
    end

    subgraph ExploreCommands["Explore内コマンド"]
        RecordView --> |":try"| TryView[Tryビュー]
        RecordView --> |":nu cmd"| NuView[Nuコマンドビュー]
        RecordView --> |":help"| HelpView
        RecordView --> |"Enter"| RecordView
        RecordView --> |"e"| Preview

        TryView --> |"Tab/Down"| RecordView
        TryView --> |"Esc"| RecordView

        NuView --> |入力操作| RecordView
        NuView --> |プレビュー表示| Preview

        Preview --> |Esc| RecordView

        BinaryView --> |Esc| REPL
        HelpView --> |Esc| RecordView
    end

    subgraph ExitFlow["終了フロー"]
        RecordView --> |":q / Esc"| REPL
        BinaryView --> |":q"| REPL
        Preview --> |":q"| REPL
        REPL --> |"exit / Ctrl+D"| End([終了])
    end

    subgraph IDEIntegration["IDE統合"]
        REPL -.-> |"--lsp オプション"| LSP[LSP言語サーバ]
        LSP -.-> |"エディタ連携"| Editor[外部エディタ]
    end
```

## REPL画面詳細

```mermaid
stateDiagram-v2
    [*] --> 入力待ち
    入力待ち --> コマンド実行中: Enter
    コマンド実行中 --> 結果表示: 実行完了
    結果表示 --> 入力待ち: 表示完了

    入力待ち --> 補完メニュー: Tab
    補完メニュー --> 入力待ち: 選択/Esc

    入力待ち --> ヘルプメニュー: F1
    ヘルプメニュー --> 入力待ち: 選択/Esc

    入力待ち --> [*]: exit/Ctrl+D
```

## Explore画面詳細

```mermaid
stateDiagram-v2
    [*] --> データ判定

    データ判定 --> レコードビュー: テーブル/レコード
    データ判定 --> バイナリビュー: バイナリデータ
    データ判定 --> プレビュー: 文字列/単純値
    データ判定 --> ヘルプ画面: 入力なし

    state レコードビュー {
        [*] --> VIEWモード
        VIEWモード --> CURSORモード: Enter
        CURSORモード --> VIEWモード: Esc
        CURSORモード --> ドリルダウン: Enter
        ドリルダウン --> CURSORモード: Esc
    }

    レコードビュー --> Tryビュー: :try
    Tryビュー --> レコードビュー: Esc

    レコードビュー --> Nuコマンドビュー: :nu
    Nuコマンドビュー --> レコードビュー: 操作

    レコードビュー --> ヘルプ画面: :help
    ヘルプ画面 --> レコードビュー: Esc

    レコードビュー --> プレビュー: e (expand)
    プレビュー --> レコードビュー: Esc

    レコードビュー --> [*]: :q/Esc
    バイナリビュー --> [*]: :q/Esc
    プレビュー --> [*]: :q/Esc
```

## 画面間のデータフロー

```mermaid
flowchart LR
    subgraph Input["入力"]
        Stdin[標準入力]
        File[ファイル]
        Pipe[パイプ入力]
    end

    subgraph Processing["処理"]
        REPL[メインREPL]
        Parser[パーサー]
        Engine[実行エンジン]
    end

    subgraph Output["出力"]
        Table[テーブル出力]
        Explore[Exploreビュー]
        Stdout[標準出力]
    end

    Stdin --> REPL
    File --> REPL
    Pipe --> REPL

    REPL --> Parser
    Parser --> Engine
    Engine --> Table
    Engine --> Explore
    Engine --> Stdout

    Explore --> |"終了時の値"| REPL
```
