/** * 고르기 중인 선택 도구 찾기(337 마) — 쉴 때 맨 위 선택 도구 · 명령 안 고르기 단계 = 그 명령이 부른 자식 선택 도구. * 누를 때 첫 점(끌기 상자) · 스침 강조 · 고르기 키워드가 이 한 곳으로 같은 선택 도구를 찾는다. */ import type { AnyActorRef } from 'xstate'; import { getActiveToolActor } from '../state.ts'; import { Tool } from '../tools.ts'; import { SelectState } from '../tools/select-tool.ts'; import { setKeywordNotice } from '../tools/select-tool.helpers.ts'; import { notice } from './prompt-input.ts'; // 고르기 키워드(ALL · L · P) 「n개를 찾음」 → 알림 줄 setKeywordNotice(notice); const isSelect = (actor: AnyActorRef | undefined): boolean => actor?.getSnapshot()?.context?.type === Tool.SELECT; /** 지금 고르기를 받는 선택 도구 — 없으면 null(점 · 숫자 물음) */ export function selectingActor(): AnyActorRef | null { const top = getActiveToolActor() as AnyActorRef | null; if (!top) return null; if (isSelect(top)) return top; const children = Object.values(top.getSnapshot()?.children ?? {}) as AnyActorRef[]; return ( children.find((child) => isSelect(child) && child.getSnapshot()?.status === 'active') ?? null ); } /** 선택 상자의 맞은 모서리를 기다리는 중 */ export const isWaitingForSecondSelectPoint = (): boolean => selectingActor()?.getSnapshot()?.value === SelectState.WAITING_FOR_SECOND_SELECT_POINT;