import { BorderPosition } from '../../PageZone/types'; import { DragType } from '../../constant/dragTypes'; import { DSLQuery } from '@lingxiteam/dsl'; import CanvasDragMode from './CanvasDragMode'; import FreeLayoutDragUtils from './FreeLayoutDragUtils'; import MultiSelectUtils from './MultiSelectUtils'; import type { CompCreatorType } from '@lingxiteam/editor-types'; import { RootNode, DSLNode } from '@lingxiteam/dsl/lib/core/PropType'; declare type ClickType = 'eventEdit' | 'pageJump' | 'refreshPage' | 'refreshBOFramer'; declare type eventStatus = 'startDragging' | 'onHover' | 'onDrop' | 'afterDrop' | 'stopDragging'; declare type HoverType = 'canvas' | 'sideTree'; declare type ActionType = 'drag' | 'drop'; export interface EventListenerParams { inst: LocalDragUtils; status: eventStatus; target?: HTMLElement; hoverType?: HoverType; } export declare type RelateTargetType = 'dragCanvas' | 'dropCanvas' | 'dragCompTree' | 'dropCompTree'; interface DragTargetData { node: any; type: DragType; layerTitle?: string; layerId?: string; canDrag?: boolean; } declare class LocalDragUtils { private canDragTargets; private targetDataMap; private canDropTargets; private dropTargetDataMap; private targetRelateMap; private stop; _multiSelectMode: { current: boolean; }; freeOperateMode: boolean; freeLayoutInst: FreeLayoutDragUtils; eventListenList: ((params: EventListenerParams) => void)[]; isDragging: boolean; clickInfo: { clickTypes: ClickType[]; eventNum?: number; hiddenEventEditName?: boolean; }; pageZoneContainerId: string; pageZoneType: 'Editor' | 'SceneSimulator'; _pageZoneHoverContainerId: string; DSLCore: DSLQuery; isMobile: boolean; multiSelectInst: MultiSelectUtils; currentMousePosition: { x: number; y: number; }; currentDragTarget: HTMLElement | null; mouseInnerOffset: { x: number; y: number; }; currentDropTarget: { target: HTMLElement; position: BorderPosition; } | null; currentHoverTarget: HTMLElement | null; layerViewInst: { target: HTMLElement | null; title: string; }; containerTarget: { canvas: HTMLElement | undefined; sideTree: HTMLElement | undefined; }; canvasHoverTarget?: HTMLElement; dropCompTreeEffectList: (() => void)[]; canvasDragMode: CanvasDragMode; getI18nValue: (v?: string) => string; mouseMoveFn: any; constructor(props: { pageZoneContainerId: string; DSLCore: DSLQuery; canvasDragMode: CanvasDragMode; _pageZoneHoverContainerId?: string; isMobile: boolean; pageZoneType: 'Editor' | 'SceneSimulator'; multiSelectMode: { current: boolean; }; compCreators(): CompCreatorType; getI18nValue: (v?: string) => string; }); umount(): void; /** * 当前拖拽对象 */ get currentDragNode(): DSLNode | undefined; /** * dom是否在控件树上 * @param nodeId 节点id * @param target DOM * @returns */ private targetIsCompTree; /** * 当前拖拽对象是否在hover对象内部 * @param hoverTarget hover对象 * @returns */ private currentDragIsInner; getPageZoneContainer(): HTMLElement | null; addDragTarget(target: HTMLElement, data: any): void; removeDragTarget(target: HTMLElement): void; addDropTarget(target: HTMLElement, data: any): void; getTargetData(target: HTMLElement, type: ActionType): DragTargetData | { node: any; type: ("OBJ_BOX" | "SIDER_BOX" | "PAGE_BOX" | "PAGE_CONTAINER_BOX" | "ROW" | "BLOCK_BOX" | "BUSI_OBJ" | "BUSI_OBJ_ATTR" | "BUSI_OBJ_GROUP" | "EVENT_LIST")[]; } | { node: {}; }; getDragTargetData(target: HTMLElement): DragTargetData; getDropTargetData(target: HTMLElement): { node: any; type: ("OBJ_BOX" | "SIDER_BOX" | "PAGE_BOX" | "PAGE_CONTAINER_BOX" | "ROW" | "BLOCK_BOX" | "BUSI_OBJ" | "BUSI_OBJ_ATTR" | "BUSI_OBJ_GROUP" | "EVENT_LIST")[]; } | { node: {}; }; addRelateTarget(compId: string, type: RelateTargetType, target: HTMLElement): void; removeRelateTarget(compId: string, type: RelateTargetType, target: HTMLElement): void; findRecentTarget(target: any, type: ActionType, isDrag?: boolean): HTMLElement | null; findChildrenTargets(target: HTMLElement | null, type: ActionType): HTMLElement[]; canvasComputed(): void; isCanvasType(type: RelateTargetType): boolean; getRelateType(type: RelateTargetType): RelateTargetType; dropTargetCover(target: HTMLElement, position: BorderPosition, type: RelateTargetType): void; /** * 获取联动元素目标 */ getRelateTarget(target: HTMLElement, type: RelateTargetType): HTMLElement | null | undefined; /** * 画布hover效果 传入position则展示判定方位 * @param target 目标 * @param position 位置 */ hoverCanvasTarget(target: HTMLElement, position?: BorderPosition): void; hoverRelate(target: HTMLElement, type: RelateTargetType): void; clearDropEffect(): void; addDropEffect(cb: () => void): void; dropCompTreeTarget(target: HTMLElement, position: BorderPosition): void; getSimpleInfo(target: HTMLElement, type: ActionType): { isContainer: any; nodeId: any; isBOFramer: boolean; }; /** * 组件树hover效果 * @param target 目标 * @param position 位置 */ hoverCompTreeTarget(target: HTMLElement, position?: BorderPosition): void; removeHoverTarget(): void; clearHoverCompTreeCls(): void; clearCompTreeCls(): void; updateLayerTitle(str: string): void; /** * 空白占位容器 * @param target * @returns */ isEmptyBox(target?: HTMLElement): boolean | undefined; isDraggingTarget(target: HTMLElement): boolean; /** * 是否为画布上的元素 * @param target * @returns */ isCanvasTarget(target?: HTMLElement): boolean; hideLayerView(): void; afterDrop(): void; removeHoverEffect(): void; runEvents(status: eventStatus, target?: HTMLElement, type?: HoverType): void; disabledDragTarget(type: 'add' | 'remove'): void; addEventListener(cb: (data: EventListenerParams) => void): void; /** * 获取画布拖拽对象 * @param nodeId 节点id * @returns */ getDragTargetByNodeId(nodeId: string): HTMLElement | null; /** * 获取组件树对象 * @param nodeId 节点id * @returns */ getCompTreeTargetByNodeId(nodeId: string): HTMLElement | null; /** * 获取当前拖拽对象数据 * @returns data */ getCurrentDragData: () => DragTargetData | null; get multiSelectMode(): boolean; /** * 根据节点获取子元素拖拽对象 * @param node * @returns */ getChildTargetsByNode: (node: DSLNode | RootNode) => HTMLElement[]; /** * 将节点滚动到可视区域 * @param nodeId 节点id */ scrollIntoView(nodeId: string): void; } export default LocalDragUtils;