import React from "react"; import type { ComponentData } from "./parsers/index"; import type { ComponentEditors } from "./component-editors/property-editors/object-editor"; import type { ComponentInfo, ComponentTypes, ModuleTypes } from "./type"; export declare const EditorPanelContext: React.Context<{ componentData: ComponentData; currentComponentData?: ComponentData; } | undefined>; export type DesignerContextValue = { componentData: ComponentData; componentTypes: ComponentTypes; componentEditors: ComponentEditors; moduleTypes: ModuleTypes; /** 选中组件(设计区点击选中),与属性面板选中状态双向同步 */ selectComponent?: (componentId: string) => void; /** 取消选择(清除选中组件的 selected 标记),与 selectComponent 对称,传入同一 componentId */ deselectComponent?: (componentId: string) => void; /** 上移/下移组件(在其父容器的同级数组中交换位置) */ moveComponent?: (componentId: string, direction: "up" | "down") => void; /** 删除组件 */ removeComponent?: (componentId: string) => void; /** * 添加组件(组件库面板拖放/点击):按 componentInfo 新建组件节点, * 插入根组件的顶层 children 中 targetComponentId 之前/之后,缺省追加到末尾 */ addComponent?: (componentInfo: ComponentInfo, targetComponentId?: string, position?: "before" | "after") => void; /** * 按 id 取回挂载后的组件实例(真实 React 实例)。 * 复用 runtime-parser 的 RefTransform 机制:组件配置 ref(propType:"ref")后, * 其实例被暴露到 globalThis[refName],约定 refName 等于组件 id 即可按 id 取回 * (ref.current 即组件实例,如 DataList 实例,可调用 reload / dataItems 等方法)。 * 仅 class 组件 / forwardRef 包裹的组件可取(普通函数组件无法挂 ref,返回 null); * 组件未挂载、未配置 ref 或 refName 不等于 id 时返回 null。 */ getComponent?: (componentId: string) => React.ReactInstance | null; }; export declare const DesignerContext: React.Context; export type ComponentDataContextValue = { componentData?: ComponentData; }; export declare const ComponentDataContext: React.Context; /** 单块面板的只读快照,供导航栏 / 外部消费 */ export type PanelInfo = { id: string; title: string; }; /** * 面板栈上下文:允许任意子组件编辑器在当前面板之上新开面板(showNext), * 或跳转到指定层级的面板(navigateToPanel,会清除其上方的子面板)。 * 由 EditorPanel 注入,编辑器的渲染结果即面板内容。 */ export type EditorPanelStackContextValue = { /** 在当前面板之上新开一块面板,把传入的子组件编辑器渲染到该面板 */ showNext: (componentEditor: React.ReactNode, title?: string) => void; /** 切换到指定下标的面板(清除其上方的子面板),index 为面板栈下标 */ navigateToPanel: (index: number) => void; /** 当前面板栈快照(只读) */ panels: PanelInfo[]; }; export declare const EditorPanelStackContext: React.Context;