---
ui_doc_type: component
component_id: edge-selector
status: 구현됨
source_evidence:
  - type: code
    path: apps/client/lib/widgets/nodes_panel.dart
    notes: NodesPanel renders an Active Edge dropdown and refresh action.
  - type: code
    path: apps/client/lib/widgets/runtime_panel.dart
    notes: RuntimePanel renders an Active Edge dropdown and refresh action.
  - type: code
    path: apps/client/lib/widgets/execution_logs_panel.dart
    notes: ExecutionLogsPanel renders a Filter Edge dropdown and refresh action.
  - type: user
    path: null
    notes: Initial scaffold requested by user.
---

# Edge Selector

Component ID: `edge-selector`

Status: `구현됨`

## Source Evidence

| Type | Path | Notes |
|------|------|-------|
| code | `apps/client/lib/widgets/nodes_panel.dart` | active Edge dropdown과 refresh icon을 포함한다. |
| code | `apps/client/lib/widgets/runtime_panel.dart` | responsive header 안에서 active Edge dropdown과 refresh icon을 포함한다. |
| code | `apps/client/lib/widgets/execution_logs_panel.dart` | filter Edge dropdown과 refresh icon을 포함한다. |
| user | 없음 | 초기 agent-ui 생성을 요청했다. |

## Purpose

Edge-scoped view에서 대상 Edge를 선택하고 현재 view 데이터를 갱신한다.

## Used By

- `nodes`: `nodes.edge-selector`
- `runtime`: `runtime.edge-selector`
- `execution-logs`: `execution-logs.edge-selector`

## Anatomy

- label
- dropdown
- refresh icon button

## Variants

- active-edge: Nodes/Runtime에서 사용
- filter-edge: Execution Logs에서 사용

## States

- default
- loading: view별 refresh 상태로 표시
- empty: Edge 목록이 없으면 selector를 숨기거나 안내 메시지를 표시
- error: view별 error 영역에서 처리
- disabled: 없음

## Rules

- dropdown item label은 edge name이 있으면 name, 없으면 edge id를 사용한다.
- 선택 값이 목록에 없으면 첫 Edge로 fallback한다.

## Decision History

- 2026-06-25: 세 개 panel에 반복되는 Edge dropdown pattern을 component로 정의했다.
