#nullable enable using System; using System.Collections.Generic; using DTNavigation.Model; using UnityEngine.UIElements; namespace DTNavigation.View { /// /// 사이드바 UI DOM 빌더. /// UXML 쿼리, 네비게이션 항목 생성, 상태 클래스 전환을 담당합니다. /// public sealed class SidebarView : IDisposable { // ── 상태별 CSS 클래스 ────────────────────────────────────── private static readonly string[] StateClasses = { "sidebar--one-depth", "sidebar--two-depth", "sidebar--icon-only" }; // ── UXML 요소 참조 ───────────────────────────────────────── private readonly VisualElement _sidebarRoot; private readonly VisualElement _navList; private readonly Button _toggleBtn; // ── 토글 버튼 콜백 (RegisterCallback 대칭 해제용) ────────── private EventCallback? _toggleBtnCallback; // ── 외부 이벤트 ──────────────────────────────────────────── public event Action? OnToggle; /// 1뎁스 그룹 헤더 클릭 시 발행 (그룹 모델 전달) public event Action? OnNavGroupClicked; /// 2뎁스 자식 항목 클릭 시 발행 (itemId 전달) public event Action? OnNavItemSelected; // ────────────────────────────────────────────────────────── public SidebarView(VisualElement documentRoot) { _sidebarRoot = documentRoot.Q("sidebar-root") ?? throw new InvalidOperationException("'sidebar-root' 요소를 찾을 수 없습니다."); _navList = documentRoot.Q("nav-list") ?? throw new InvalidOperationException("'nav-list' 요소를 찾을 수 없습니다."); _toggleBtn = documentRoot.Q