import { QueryCallbacksFor } from '@craftjs/utils'; import React from 'react'; import { QueryMethods } from '../editor/query'; export type UserComponentConfig = { displayName: string; rules: Partial; related: Partial; props: Partial; custom: Record; info: Record; isCanvas: boolean; name: string; defaultProps: Partial; }; export type UserComponent = React.ComponentType & { craft?: Partial>; }; export type NodeId = string; export type NodeEventTypes = 'selected' | 'dragged' | 'hovered'; export type Node = { id: NodeId; data: NodeData; info: Record; events: Record; dom: HTMLElement | null; related: Record; rules: NodeRules; _hydrationTimestamp: number; }; export type NodeHelpersType = QueryCallbacksFor['node']; export type NodeRules = { canDrag(node: Node, helpers: NodeHelpersType): boolean; canDrop(dropTarget: Node, self: Node, helpers: NodeHelpersType): boolean; canMoveIn(canMoveIn: Node[], self: Node, helpers: NodeHelpersType): boolean; canMoveOut(canMoveOut: Node[], self: Node, helpers: NodeHelpersType): boolean; }; export type NodeRelated = Record; export type NodeData = { props: Record; type: string | React.ElementType; name: string; displayName: string; isCanvas: boolean; parent: NodeId | null; linkedNodes: Record; nodes: NodeId[]; hidden: boolean; custom?: any; _childCanvas?: Record; }; export type FreshNode = { id?: NodeId; data: Partial & Required>; }; export type ReduceCompType = string | { resolvedName: string; }; export type ReducedComp = { type: ReduceCompType; isCanvas: boolean; props: any; }; export type SerializedNode = Omit & ReducedComp; export type SerializedNodes = Record; export type SerializedNodeData = SerializedNode; export type Nodes = Record; /** * A NodeTree is an internal data structure for CRUD operations that involve * more than a single node. * * For example, when we drop a component we use a tree because we * need to drop more than a single component. */ export interface NodeTree { rootNodeId: NodeId; nodes: Nodes; } type NodeIdSelector = NodeId | NodeId[]; type NodeObjSelector = Node | Node[]; export declare enum NodeSelectorType { Any = 0, Id = 1, Obj = 2 } export type NodeSelector = T extends NodeSelectorType.Id ? NodeIdSelector : T extends NodeSelectorType.Obj ? NodeObjSelector : NodeIdSelector | NodeObjSelector; export type NodeSelectorWrapper = { node: Node; exists: boolean; }; export {};