import { Component, Scene } from '@hatiolab/things-scene'; import { InspectorIndex, SearchTerm } from './inspector-model.js'; export declare class InspectorController { private _scene?; private _extendedMap; /** 타입 그룹 뷰의 펼침 상태 — 그룹 키(type)는 안정적이라 Set 으로 관리. 기본 전부 접힘. */ private _expandedGroups; /** * 모델링 포커스 dim 처리된 그룹(타입) 집합. * scene 에 보존(scene._inspectorDimmedTypes)하여 인스펙터 탭을 벗어났다 돌아와도 유지된다. * (보드를 다시 열면 새 scene 이라 자연 초기화 — transient.) bind 에서 scene 것으로 재취득. */ private _dimmedTypes; /** shift+click 범위(볼륨) 선택의 기준점 — 마지막 단일/토글 클릭. */ private _anchor?; private _index?; private _onChange?; /** scene 에 바인딩 — 이전 바인딩은 해제한다. onChange 는 재렌더 요청 콜백. */ bind(scene: Scene | undefined, onChange: () => void): void; unbind(): void; get scene(): Scene | undefined; get selected(): Component[]; /** 캐시된 모델 인덱스 — 없으면 build. execute/undo/redo 시 무효화. */ get index(): InspectorIndex | undefined; private _invalidateAndRefresh; /** 선택된 컴포넌트의 조상을 펼치고 재렌더 요청. */ private _refresh; isExtended(component: Component): boolean; toggleExtended(component: Component): void; /** 트리 노드 핸들(펼침/접힘/공백) 클래스. */ nodeHandleClass(component: Component): string; isGroupExpanded(type: string): boolean; toggleGroup(type: string): void; /** 모든 그룹 접기 — "그룹 레벨까지만 펼침"(헤더만 표시). */ collapseAllGroups(): void; /** 모든 그룹 펼치기. */ expandAllGroups(types: string[]): void; isTypeDimmed(type: string): boolean; /** 그룹(타입) dim-out 토글 → scene.focusFilter 재설정(편집 모드에서 캔버스 dim + pick 제외). */ toggleTypeDim(type: string): void; private _applyFocusFilter; /** 그룹 전원이 hidden 이면 true(집계). 멤버/트리 eye 규약과 동일한 아이콘 판정에 사용. */ isTypeHidden(type: string): boolean; /** 그룹(타입) hidden 토글 → 하나라도 보이면 전원 숨김, 전원 숨김이면 전원 표시. */ toggleTypeHidden(type: string): void; /** 개별 컴포넌트 hidden(영구 모델 속성) 토글 — 기존 eye 동작. */ toggleHidden(component: Component): void; /** 개별 컴포넌트 locked(영구 모델 속성) 토글. */ toggleLocked(component: Component): void; /** 캔버스를 해당 컴포넌트로 센터 이동. */ centerTo(component: Component): void; /** 선택 — append(ctrl/cmd) 시 토글식 다중 선택. anchor 를 갱신한다. */ select(component: Component, append?: boolean): void; /** * shift+click 범위(볼륨) 선택 — anchor↔target 사이의 **보이는 트리 행**을 블록 선택한다. * target 이 이미 선택돼 있으면 그 범위를 블록 **해제**(additive/subtractive). anchor 는 유지. */ selectRange(target: Component, terms: SearchTerm[]): void; /** 선택 강조. */ private _decorate; /** * 현재 트리 뷰에 보이는 컴포넌트를 렌더 순서대로 반환 — 범위 선택의 기준. * renderNode 와 동일 규칙(shouldBeShown = 자신/자손 매치, isExtended 자식만 전개). */ private _visibleOrder; }