import { PartDefinitionGroup, PartManager, PartPropertyEditor, PartPropertyGroupEditor, PartPropertyType } from './part-manager'; import { ElementParam, IPart, Model } from './model'; import { MenuItem } from '@g1cloud/bluesea'; import { Component, Ref } from 'vue'; export type PageBuilderEditMode = 'template' | 'global' | 'local' | 'free'; export declare const providePageBuilder: (pageBuilder: PageBuilder) => void; export declare const usePageBuilder: () => PageBuilder; export interface PageBuilder { instanceId?: string; partManager: PartManager; model: Model; context: PageBuilderContext; commandRegistry: CommandRegistry; contextMenuRegistry: ContextMenuRegistry; keyHandlers: KeyHandlers; toolButtonRegistry: ToolButtonRegistry; imageProvider?: ImageProvider; title?: string; editMode: PageBuilderEditMode; scale: Ref; registerPlugin(plugin: PageBuilderPlugin): void; initData(content?: any): void; setRootSection(page: ElementParam, clearUndoStack: boolean): void; undo(): void; redo(): void; zoom(scale: number): void; } export type PageBuilderPlugin = { partDefinitionGroups?: PartDefinitionGroup[]; partPropertyGroupEditors?: Record; partPropertyEditors?: Record; commands?: Command[]; contextMenus?: ContextMenu[]; keyHandlers?: KeyHandler[]; toolButtonGroups?: ToolButtonGroup[]; }; export interface PageBuilderContext { setSelection(parts: IPart[]): void; addSelection(parts: IPart[]): void; removeSelection(parts: IPart[] | string[]): void; isSelected(part: IPart): boolean; getSelectedParts(): IPart[]; getSelectionCount(): number; hasSelection(): boolean; getSelectedPage(): IPart | undefined; isPageSelected(): boolean; clearSelection(): void; getSingleSelectedWidget(): IPart | undefined; getSingleSelectedBlock(): IPart | undefined; getSingleSelectedSection(): IPart | undefined; } export interface Command { commandId: string; caption?: string; icon?: string; execute(pageBuilder: PageBuilder, args?: any): void | Promise; } export interface CommandRegistry { registerCommands(commandList: Command[]): void; registerCommand(command: Command): void; getCommand(commandId: string): Command | undefined; executeCommand(commandId: string, args?: any): boolean; } export type ContextMenu = { commandId: string; groupId?: string; precedence?: number; getMenuItem?: (pageBuilder: PageBuilder) => MenuItem | undefined; }; export type ContextMenuGroup = { groupId: string; menus: ContextMenu[]; }; export interface ContextMenuRegistry { registerContextMenus(menus: ContextMenu[]): void; registerContextMenu(menu: ContextMenu): void; composeContextMenuItems(pageBuilder: PageBuilder): MenuItem[]; } export type KeyHandler = { handleKeyEvent: (event: KeyboardEvent, modeler: PageBuilder) => boolean | undefined; }; export interface KeyHandlers { appendKeyHandlers(handlers: KeyHandler[]): void; appendKeyHandler(handler: KeyHandler): void; removeKeyHandler(handler: KeyHandler): void; handleKeyDownEvent(event: KeyboardEvent): void; addDocumentKeyEventListener(document: Document): void; removeDocumentKeyEventListener(document: Document): void; } export type ToolButton = { buttonId: string; caption?: string; component?: () => Component; icon?: string; iconFontSize?: string; handler?: (pageBuilder: PageBuilder) => void; }; export type ToolButtonGroup = { groupId: string; buttons: ToolButton[]; }; export interface ToolButtonRegistry { registerToolButtonGroups(groups: ToolButtonGroup[]): void; registerToolButtons(groupId: string, buttons: ToolButton[]): void; getToolButtonGroups(): ToolButtonGroup[]; } export type ImageProvider = (partId: string, callback: (data: { partId: string; url: string; }) => void) => void; export declare const createPageBuilder: () => PageBuilder; export declare class PageBuilderImpl implements PageBuilder { instanceId?: string; partManager: PartManager; model: Model; context: PageBiulderContextImpl; commandRegistry: CommandRegistryImpl; contextMenuRegistry: ContextMenuRegistryImpl; keyHandlers: KeyHandlers; toolButtonRegistry: ToolButtonRegistry; imageProvider?: ImageProvider; title?: string; editMode: PageBuilderEditMode; scale: Ref; constructor(); registerPlugin(plugin: PageBuilderPlugin): void; initData(content?: any): void; setRootSection(page: ElementParam, clearUndoStack?: boolean): void; undo(): void; redo(): void; zoom(scale: number): void; private getEmptyPageContent; private initPlugins; } export declare class PageBiulderContextImpl implements PageBuilderContext { private selection; private model; constructor(pageBuilder: PageBuilder); setSelection(parts: IPart[]): void; addSelection(parts: IPart[]): void; removeSelection(parts: IPart[] | string[]): void; isSelected(part: IPart): boolean; getSelectedParts(): IPart[]; getSelectionCount(): number; hasSelection(): boolean; getSelectedPage(): IPart | undefined; isPageSelected(): boolean; clearSelection(): void; getSingleSelectedWidget(): { type: string; partId: string; properties?: Record | undefined; children?: any[] | undefined; parent?: any | undefined; getName: () => string | undefined; getProperty: (propertyName: string) => string | undefined; syncPart: (element: import('yjs').XmlElement<{ [key: string]: string; }>) => void; isRoot: () => boolean; isPage: () => boolean; isSection: () => boolean; isBlock: () => boolean; isWidget: () => boolean; isNestedWidget: () => boolean; } | undefined; getSingleSelectedBlock(): { type: string; partId: string; properties?: Record | undefined; children?: any[] | undefined; parent?: any | undefined; getName: () => string | undefined; getProperty: (propertyName: string) => string | undefined; syncPart: (element: import('yjs').XmlElement<{ [key: string]: string; }>) => void; isRoot: () => boolean; isPage: () => boolean; isSection: () => boolean; isBlock: () => boolean; isWidget: () => boolean; isNestedWidget: () => boolean; } | undefined; getSingleSelectedSection(): { type: string; partId: string; properties?: Record | undefined; children?: any[] | undefined; parent?: any | undefined; getName: () => string | undefined; getProperty: (propertyName: string) => string | undefined; syncPart: (element: import('yjs').XmlElement<{ [key: string]: string; }>) => void; isRoot: () => boolean; isPage: () => boolean; isSection: () => boolean; isBlock: () => boolean; isWidget: () => boolean; isNestedWidget: () => boolean; } | undefined; } export declare class CommandRegistryImpl implements CommandRegistry { private pageBuilder; private commandMap; constructor(pageBuilder: PageBuilder); registerCommands(commandList: Command[]): void; registerCommand(command: Command): void; getCommand(commandId: string): Command | undefined; executeCommand(commandId: string, args?: any): boolean; } export declare class ContextMenuRegistryImpl implements ContextMenuRegistry { readonly groups: ContextMenuGroup[]; constructor(); registerContextMenus(menus: ContextMenu[]): void; registerContextMenu(menu: ContextMenu): void; composeContextMenuItems(pageBuilder: PageBuilder): MenuItem[]; private ensureGetGroup; } export declare class KeyHandlersImpl implements KeyHandlers { private pageBuilder; private handlers; constructor(pageBuilder: PageBuilder); appendKeyHandlers(handlers: KeyHandler[]): void; appendKeyHandler(handler: KeyHandler): void; removeKeyHandler(handler: KeyHandler): void; handleKeyDownEvent(event: KeyboardEvent): void; addDocumentKeyEventListener(document: Document): void; removeDocumentKeyEventListener(document: Document): void; }