Skip to main content

Layers

A Photoshop-like layers panel for your page editor.

Usage#

yarn add @craftjs/layers
import React from "react";import {Editor} from "@craftjs/core"import {Layers} from "@craftjs/layers"
export default function App() {  return (    <div style={{margin: "0 auto", width: "800px"}}>      <Typography variant="h5" align="center">A super simple page editor</Typography>      <Editor resolver={...}>        <Layers />      </Editor>    </div>  );} 

Types#

Layer#

Properties#

  • idNodeId
    A randomly generated unique id
  • depthnumber
    A depth of the current Layer
  • expandedboolean
    Returns true if the Layer is expanded
  • eventsObject
    • selectedboolean
      Is true if the layer is clicked
    • hoveredboolean
      Is true if the layer is being hovered
  • domHTMLElement
    The DOM of the current layer including its header and children. This is defined by the `connectLayer` connector
  • headingDomHTMLElement
    The DOM of the current Layer's heading. This is defined by the `connectLayerHeader` connector

Reference#

<Layers />#

Props#

  • expandRootOnLoad?boolean
    Optional. If enabled, the Root Node will be expanded by default
  • renderLayer?React.ReactElement
    Optional. Specify the component to render each layer

useLayer#

Parameters#

  • collector(layer: Layer) => Collected
    A function that collects relevant state information from the corresponding `Layer`. The component will re-render when the values returned by this function changes.

Returns#

  • Object
    • connectorsObject
      • drag(dom: HTMLElement, nodeId: String) => HTMLElement
        Specifies the DOM that should be draggable
      • layer(dom: HTMLElement, nodeId: String) => HTMLElement
        Specifies the DOM that represents the entire Layer
      • layerHeading(dom: HTMLElement, nodeId: String) => HTMLElement
        Specifies the DOM that represents the layer's heading
    • actionsObject
      • toggleLayer() => void
        Toggle the corresponding Layer's expanded state

Default components#

The following components are available for you to extend if you wish to design your own component to render the layers (which can be specified in the renderLayer prop).

  • <DefaultLayer />
    • <DefaultLayerHeader />
      • <EditableLayerName> This component enables the end user to edit the layer names. The values are saved into the respective Node's custom.displayName prop.

const Layer = () => {  return (    <div>      <DefaultLayerHeader />    </div>  )}
const App = () => {  return (    <Editor>      <Frame>        ...      </Frame>      <Layers         renderLayer={Layer}      />    </Editor>  )}