# Ghostty 画面遷移図

## 概要

Ghosttyはマルチプラットフォーム対応のターミナルエミュレータです。macOS（Swift/AppKit）とLinux（GTK/Zig）で動作し、それぞれのプラットフォームに最適化されたUIを提供しています。

## メイン画面遷移図

```mermaid
flowchart TB
    subgraph "アプリケーション起動"
        Start([アプリ起動]) --> LoadConfig{設定読み込み}
        LoadConfig -->|成功| MainTerminal[メインターミナルウィンドウ]
        LoadConfig -->|エラー| ConfigError[設定エラーダイアログ]
        ConfigError -->|リロード| LoadConfig
        ConfigError -->|無視| MainTerminal
        LoadConfig -->|致命的エラー| ErrorView[エラービュー]
    end

    subgraph "ターミナル操作"
        MainTerminal --> Split[スプリットビュー]
        Split --> MainTerminal
        MainTerminal --> NewTab[新規タブ]
        NewTab --> MainTerminal
        MainTerminal --> NewWindow[新規ウィンドウ]
        NewWindow --> MainTerminal
    end

    subgraph "クイックアクセス"
        HotKey([ホットキー]) --> QuickTerminal[クイックターミナル]
        QuickTerminal -->|トグル| HotKey
        QuickTerminal --> MainTerminal
    end

    subgraph "コマンド・検索"
        MainTerminal -->|Cmd+Shift+P| CommandPalette[コマンドパレット]
        CommandPalette -->|コマンド実行| MainTerminal
        CommandPalette -->|ESC| MainTerminal
        MainTerminal -->|Cmd+F| SearchOverlay[検索オーバーレイ]
        SearchOverlay --> MainTerminal
    end

    subgraph "ダイアログ"
        MainTerminal -->|ペースト| ClipboardConfirm{危険なペースト?}
        ClipboardConfirm -->|はい| ClipboardDialog[クリップボード確認ダイアログ]
        ClipboardConfirm -->|いいえ| MainTerminal
        ClipboardDialog -->|許可| MainTerminal
        ClipboardDialog -->|拒否| MainTerminal

        MainTerminal -->|閉じる| CloseConfirm{プロセス実行中?}
        CloseConfirm -->|はい| CloseDialog[閉じる確認ダイアログ]
        CloseConfirm -->|いいえ| Closed([終了])
        CloseDialog -->|閉じる| Closed
        CloseDialog -->|キャンセル| MainTerminal

        MainTerminal -->|タイトル変更| TitleDialog[タイトル変更ダイアログ]
        TitleDialog --> MainTerminal
    end

    subgraph "設定・情報"
        MainTerminal -->|設定メニュー| Settings[設定画面]
        Settings --> MainTerminal
        MainTerminal -->|Aboutメニュー| About[About画面]
        About --> MainTerminal
    end

    subgraph "アップデート"
        MainTerminal --> UpdateCheck{アップデート確認}
        UpdateCheck -->|利用可能| UpdatePopover[アップデートポップオーバー]
        UpdatePopover -->|インストール| Restart([再起動])
        UpdatePopover -->|後で| MainTerminal
        UpdatePopover -->|スキップ| MainTerminal
    end

    subgraph "デバッグ"
        MainTerminal -->|デバッグモード| Inspector[インスペクターウィンドウ]
        Inspector --> MainTerminal
    end

    subgraph "セキュリティ"
        MainTerminal -->|パスワード入力| SecureInput[セキュア入力オーバーレイ]
        SecureInput --> MainTerminal
    end
```

## プラットフォーム別の画面対応

```mermaid
flowchart LR
    subgraph "共通画面"
        Terminal[メインターミナル]
        Split[スプリットビュー]
        CommandPalette[コマンドパレット]
        ClipboardDialog[クリップボード確認]
        ConfigError[設定エラー]
    end

    subgraph "macOS専用"
        QuickTerminal[クイックターミナル]
        About[About画面]
        Settings[設定画面]
        UpdatePopover[アップデートポップオーバー]
        SecureInput[セキュア入力オーバーレイ]
    end

    subgraph "GTK専用"
        SearchOverlay[検索オーバーレイ]
        TitleDialog[タイトル変更ダイアログ]
        CloseConfirmDialog[閉じる確認ダイアログ]
        InspectorWindow[インスペクターウィンドウ]
    end

    Terminal --> |macOS| QuickTerminal
    Terminal --> |macOS| About
    Terminal --> |GTK| SearchOverlay
    Terminal --> |GTK| InspectorWindow
```

## 画面状態遷移（メインターミナル）

```mermaid
stateDiagram-v2
    [*] --> Loading: アプリ起動
    Loading --> Ready: 初期化完了
    Loading --> Error: 致命的エラー

    Ready --> Focused: フォーカス取得
    Ready --> Unfocused: フォーカス喪失

    Focused --> Unfocused: フォーカス喪失
    Unfocused --> Focused: フォーカス取得

    Focused --> CommandPaletteOpen: コマンドパレット表示
    CommandPaletteOpen --> Focused: 閉じる

    Focused --> Searching: 検索開始
    Searching --> Focused: 検索終了

    Focused --> SecureInputActive: セキュア入力有効
    SecureInputActive --> Focused: セキュア入力解除

    Focused --> Fullscreen: フルスクリーン化
    Fullscreen --> Focused: フルスクリーン解除

    Ready --> [*]: 終了
    Error --> [*]: 終了
```

## 補足事項

### macOS固有の動作
- **クイックターミナル**: グローバルホットキーで画面上下左右からスライドイン/アウト
- **セキュア入力**: パスワードプロンプト検出時に自動的に有効化
- **アップデート**: Sparkleフレームワークによる自動更新機能

### GTK固有の動作
- **インスペクター**: デバッグビルド時にターミナルの内部状態を調査可能
- **タイトルダイアログ**: ターミナル/タブのタイトルを変更するネイティブダイアログ
- **検索オーバーレイ**: ターミナル内テキストの検索UI

### 共通の動作
- **コマンドパレット**: VSCode風のコマンド検索・実行機能
- **スプリットビュー**: 水平/垂直方向にターミナルを分割
- **クリップボード確認**: 危険なペースト操作やOSC52アクセス時に確認を表示
