import type { CharDefs, BgDefs, NovelConfig, FallbackRuleOf, EffectDef } from '../types/config'; import type { NovelModule } from '../define/defineCmdUI'; import type { EffectType } from '../types/dialogue'; /** * 엔진이 자동으로 포함하는 내장 모듈 목록. * `defineNovelConfig`의 `modules`에 명시하지 않아도 자동으로 등록됩니다. */ export declare const BUILTIN_MODULES: { readonly dialogue: NovelModule, import("..").DialogueSchema, import("..").DialogueHook>; readonly choice: NovelModule, import("..").ChoiceSchema, import("..").ChoiceHook>; readonly background: NovelModule, import("..").BackgroundSchema, import("..").DefaultHook>; readonly character: NovelModule<{ action: "show"; name: string; position?: import("..").CharacterPositionPreset; image?: `${string}:${string}` | undefined; focus?: string | boolean | (string & {}) | undefined; duration?: number; ease?: import("leviar").EasingType; } | { action: "remove"; name: string; duration?: number; ease?: import("leviar").EasingType; }, import("..").CharacterSchema, import("..").DefaultHook>; readonly 'character-focus': NovelModule<{ name: string; point?: string | (string & {}) | undefined; zoom?: import("..").ZoomPreset; duration?: number; ease?: import("leviar").EasingType; }, import("..").CharacterFocusSchema, import("..").DefaultHook>; readonly 'character-highlight': NovelModule<{ name: string; action: "on" | "off"; duration?: number; ease?: import("leviar").EasingType; }, import("..").CharacterHighlightSchema, import("..").DefaultHook>; readonly 'character-effect': NovelModule, import("..").CharacterEffectSchema, import("..").DefaultHook>; readonly mood: NovelModule; readonly effect: NovelModule, import("..").EffectSchema, import("..").DefaultHook>; readonly 'overlay-text': NovelModule; readonly 'overlay-image': NovelModule, import("..").OverlaySchema, import("..").DefaultHook>; readonly 'overlay-effect': NovelModule; readonly 'screen-fade': NovelModule; readonly 'screen-flash': NovelModule; readonly 'screen-wipe': NovelModule; readonly 'camera-zoom': NovelModule; readonly 'camera-pan': NovelModule; readonly 'camera-effect': NovelModule; readonly ui: NovelModule, Record, import("..").DefaultHook>; readonly control: NovelModule; readonly audio: NovelModule, import("..").AudioSchema, import("..").AudioHook>; readonly dialogBox: NovelModule, import("..").DialogBoxSchema, import("..").DialogBoxHook>; readonly input: NovelModule, import("..").InputSchema, import("..").InputHook>; readonly element: NovelModule, import("..").ElementSchema, import("..").DefaultHook>; }; /** 내장 모듈 타입 */ export type BuiltinModules = typeof BUILTIN_MODULES; /** * Novel config를 정의합니다. 제네릭으로 리터럴 타입을 보존하여 * defineScene에서 타입 힌트를 자동으로 제공합니다. * * 내장 모듈(dialogue, choice, background 등)은 `modules`에 명시하지 않아도 * 자동으로 등록됩니다. 커스텀 모듈만 `modules`에 추가하면 됩니다. * * @example * export default defineNovelConfig({ * width: ..., // default: canvas width * height: ..., // default: canvas height * variables: { likeability: 0, metCharacterA: false }, * scenes: ['scene-a', 'scene-b'], * assets: { ... }, * characters: { ... }, * backgrounds: { ... }, * // 커스텀 모듈만 추가 * modules: { * 'test-cmd': testModule, * }, * }) */ export declare function defineNovelConfig, const TScenes extends readonly string[], TCharacters extends CharDefs, TBackgrounds extends BgDefs, TAssets extends Record = Record, TAudios extends Record = Record, TModules extends Record> = Record, TEnvs extends Record<`$${string}`, any> = Record>(config: { width?: number; height?: number; variables: TVars & { [K in keyof TVars]: K extends `$${string}` | `_${string}` ? never : TVars[K]; }; scenes: TScenes; characters: TCharacters; backgrounds: TBackgrounds; effects?: Partial>; assets?: TAssets; audios?: TAudios; fallback?: FallbackRuleOf[]; modules?: TModules; environments?: TEnvs & { [K in keyof TEnvs]: K extends `$${string}` ? TEnvs[K] : never; }; }): NovelConfig;