DocsExtending PuckComposition

Composition

Puck uses compositional patterns enable completely custom editor interfaces. See an example.

Using composition

Composition can be achieved by providing children to the <Puck> component:

import { Puck } from "@measured/puck";
 
export function Editor() {
  return (
    <Puck>
      <div
        style={{ display: "grid", gridTemplateColumns: "1fr 2fr", gridGap: 16 }}
      >
        <div>
          {/* Render the drag-and-drop preview */}
          <Puck.Preview />
        </div>
        <div>
          {/* Render the component list */}
          <Puck.Components />
        </div>
      </div>
    </Puck>
  );
}
Interactive Demo
HeadingBlock
HeadingBlock

Compositional components

Puck exposes its core components, allowing you to compose them together to create new layouts:

The internal UI for these components can also be changed by implementing UI overrides or theming.

Helper components

Puck also exposes helper components for even deeper customization:

  • <Drawer> - A reference list of items that can be dragged into a droppable area, normally <Puck.Preview>.
  • <Drawer.Item> - An item that can be dragged from a <Drawer>.
  • <FieldLabel> - A styled label for creating inputs.

Further reading