import type { Style } from 'leviar'; import type { CharacterKeysOf } from '../types/config'; import type { SceneContext } from '../core/SceneContext'; export interface DialogueHook { /** view builder에서 방출. 직전 command ctx를 캐싱하여 전달. */ 'dialogue:text-render': (s: { speaker: string | undefined; text: string; }, ctx: SceneContext) => { speaker: string | undefined; text: string; }; /** command handler에서 방출. ctx는 항상 존재. */ 'dialogue:text-run': (s: { speaker: string | undefined; text: string; }, ctx: SceneContext) => { speaker: string | undefined; text: string; }; } /** * 대화창 내부 간격 레이아웃 설정. * `defineInitial` 또는 커맨드의 `layout` 필드로 씬/커맨드별 지정 가능. */ export interface DialogueLayout { /** * 패널 내부 좌측 여백(px). * @default 48 */ panelPaddingLeft?: number; /** * 패널 내부 우측 여백(px). * @default 48 */ panelPaddingRight?: number; /** * 대화창 상단(패널 안쪽 위)에서 화자명 상단까지의 거리(px). * @default 24 */ panelPaddingTop?: number; /** * 대화창 하단 패딩(px). * @default 24 */ panelPaddingBottom?: number; /** * 화자명과 대사 텍스트 사이 간격(px). * @default 8 */ speakerTextGap?: number; } /** dialogueModule이 공유하는 데이터 스키마 */ export interface DialogueSchema { /** 대화창 전체 패널 스타일 (권장) */ style?: Partial