Node
Type
Reference
Properties
idNodeIdA randomly generated unique iddataObjectpropsRecord<String, any>The current props for the user elementtypeReact.ElementTypeThe type of User ElementnameStringName of the User ElementdisplayNameStringBy default, it will be set to the same value as 'name'. But User Components have the ability to opt for a more user-friendly name by setting the craft.name propertyisCanvasbooleanTrue if the current Node is a Canvas NodeparentNodeIdThe parent Node's idnodesNodeId[]The id of the child NodeshiddenbooleancustomRecord<String, any>Custom properties stored in the NodelinkedNodesRecord<String, NodeId>A map of Nodes defined inside the User Component. Only applicable if the current Node's User Element is a Component which contains <Element /> inside its render
eventsObjectselectedbooleanIs true if the user element is clickedhoveredbooleanIs true if the user element is being hovereddraggedbooleanIs true if the user element is being dragged
domHTMLElement | nullThe DOM of the current Node's User Element. For User Components, this is defined by the `connect` connectorrelatedRecord<String, React.ElementType>A map of React Components that shares the current Node contextrulesObjectcanDrag(currentNode: Node) => booleanSpecifies if the current Node can be dragged. Applicable only if the current Node is a direct child of a Canvas NodecanDrop(targetNode: Node, currentNode: Node) => booleanSpecifies if the current Node that is being dragged can be dropped in its target. Applicable only if the current Node is a direct child of a Canvas NodecanMoveIn(incomingNodes: Node[], currentNode: Node, helpers: NodeHelpers) => booleanSpecifies if an array of incoming Nodes can be dropped into the current component. Applicable only to components whose corresponding Node is a CanvascanMoveOut(outgoingNodes: Node[], currentNode: Node, helpers: NodeHelpers) => booleanSpecifies if an array of child Nodes can be dragged out of the current component. Applicable only to components whose corresponding Node is a Canvas
Examples
Basics
Simple elements
// Example
<div style={{background: "#eee"}}>Hello</h2>
"node-a": {
id: "node-a",
data: {
type: "div",
props: {
style: {{
background: "#eee",
}}
children: "Hello"
},
name: "div",
displayName: "div",
isCanvas: false
}
}
User Component
// Definition
const Container = () => {}
Container.craft = {
name: "SimpleContainer"
};
// Example
<Container bg="#fff" />
"node-b": {
id: "node-b",
data: {
type: Container,
props: {
bg: "#fff"
},
name: "Container",
displayName: "SimpleContainer",
isCanvas: false
}
}
Child Nodes
Nodes that are referenced in the parent Node's data.nodes property. These nodes are rendered in the parent User Component's children prop
// Example
<Container bg="#fff">
<h2>Hello</h2>
</Container>
"node-a": {
id: "node-a",
data: {
...
type: Container,
props: {...},
nodes: ["node-b"]
}
}
"node-b": {
id: "node-b",
data: {
type: "h2,
props: {...},
parent: "node-a"
}
}
Linked nodes
Nodes that are linked to a parent Node via an arbitary id
// Definition
const TextEditable = () => {};
const Container = () => {
return (
<div>
<Element id="header" is={TextEditable} text="Header" />
</div>
)
}
// Example
<Container bg="#fff" />
"node-a": {
id: "node-a",
data: {
type: Container,
props: {...},
linkedNodes: {
"header": "node-b"
}
}
}
"node-b": {
id: "node-b",
data: {
type: TextEditable,
props: {...},
parent: "node-a"
}
}
Nodes with Custom properties
// Definition
const Container = () => {...}
Container.craft = {
custom: { // default custom values
toSaveInDatabase: false
}
};
// Example
<Element is={Container} bg="#fff" custom={{ toSaveInDatabase: true}} />
"node-b": {
id: "node-b",
data: {
...
custom: {
toSaveInDatabase: true,
style: {{
display: "flex"
}}
}
}
}