ConstProps for Paper — the React-friendly surface over
dia.Paper.Options, plus joint-react extras such as custom cell rendering, a
controlled viewport transform, and portal targeting.
Paper events are exposed directly as props
(onBlankContextMenu, onElementPointerClick, onLinkMouseEnter, …).
Each handler receives a single params
object, e.g. onBlankContextMenu={({ paper, event, x, y }) => …}.
Handlers are always-latest: the paper subscribes once and each event
reads the current handler, so inline arrows
(onBlankContextMenu={() => …}) are fine, no useCallback needed and no
re-subscription on render. For raw native event names or events without an
on* form (render:done, cell:highlight, …), use the useOnPaperEvents
hook.
Optional ReadonlyanchorNamespace?: anyNamespace used to resolve element anchor names.
Optional Readonlybackground?: BackgroundOptionsPaper background color, image, or pattern. Pass an object such as
{ color: 'lightblue', image: '/bg.png', repeat: 'flip-xy' }.
Optional ReadonlycellViewNamespace?: anyNamespace of cell-view constructors used to resolve a cell's view by type.
Optional ReadonlycellVisibility?: CellVisibilityPredicate deciding whether a cell should be rendered. Receives
{ model, isMounted, paper, graph }; return false to hide the cell.
Native positional form is reachable via the options escape hatch.
Optional ReadonlyclassName?: stringCSS classes applied to the paper host element. Combine with width / height rules to size the paper.
Optional ReadonlyclickThreshold?: numberMaximum pointer travel (in px) still treated as a click rather than a drag.
Moving farther than this between press and release suppresses the
pointerclick event.
Optional ReadonlyconnectionPointNamespace?: anyNamespace used to resolve connection point names.
Optional ReadonlyconnectionStrategy?: ConnectionStrategyOptions | ConnectionStrategyDecides how the end JSON is stored when the user drops a link end.
{ end, model, magnet, dropPoint, endType, link, paper, graph }
and returns the modified EndJSON.pin preset and/or customize callback.Optional ReadonlyconnectorNamespace?: anyNamespace used to resolve connector names referenced by links.
Optional ReadonlydefaultLink?: DefaultLinkDefines the link created when the user starts dragging from a port or element.
Can be a factory function receiving connection context, a static LinkRecord,
or a dia.Link instance.
Optional ReadonlydrawGrid?: boolean | GridOptions | GridOptions[]Draws a grid pattern on the paper background. Pass true for the default
grid or an object to style it (e.g. { color: 'red', thickness: 2 }).
Optional ReadonlydrawGridSize?: number | nullSpacing of the rendered grid lines in px. Falls back to gridSize when not
set.
Optional ReadonlyembeddingMode?: booleanEnables embedding: dropping an element onto another re-parents it (the
child then moves with its parent). Pair with the validateEmbedding prop to
control which parents are allowed.
Optional ReadonlyfrontParentOnly?: booleanWhen embedding, only the frontmost element under the pointer is considered a parent; otherwise candidates are tested front-to-back.
Optional ReadonlygridSize?: numberGrid step in px that element positions snap to while dragging.
Optional ReadonlyhighlighterNamespace?: anyNamespace used to resolve highlighter names referenced by highlighting.
Optional Readonlyhighlighting?: boolean | Record<string, boolean | HighlighterJSON>Highlighter definitions keyed by highlight type (connecting, embedding, magnet/element availability). Override to restyle these visual cues.
Optional Readonlyid?: stringUnique identifier used by joint-react to track the paper instance.
Optional Readonlyinteractive?: CellInteractivityWhich pointer interactions are enabled on cells. Accepts a boolean to toggle
everything, an InteractivityOptions object for granular control per
interaction kind, or a CellInteractivity callback returning either
form per cell. The native (cellView, event) callback is reachable via the
options escape hatch.
Optional ReadonlylabelsLayer?: string | booleanRenders link labels into a dedicated top layer (so they are not occluded by
later cells). Pass true, or a layer name to target a specific layer.
Optional ReadonlylayerViewNamespace?: anyNamespace of layer-view constructors used to resolve custom paper layers.
Optional ReadonlylinkAnchorNamespace?: anyNamespace used to resolve link anchor names.
Optional ReadonlylinkPinning?: booleanAllows dropping a link end on blank paper, pinning it to a fixed point instead of requiring an element/port.
Optional ReadonlylinkRouting?: LinkRoutingBundle of link routing defaults (router, connector, anchor, connection point). Use a preset (linkRoutingStraight, linkRoutingOrthogonal, linkRoutingSmooth) or pass a custom object of the same shape.
defaultLinkAnchor is reachable via the options escape hatch.
Values inside options override matching keys here.
Optional ReadonlymagnetThreshold?: string | numberPointer travel (in px) before a link is created from a magnet, or
'onleave' to create it once the pointer leaves the magnet.
Optional ReadonlymarkAvailable?: booleanHighlights valid drop targets (magnets and elements) while a link is being dragged.
Optional ReadonlymoveThreshold?: numberPointer travel (in px) required before pointermove events start firing.
Optional ReadonlyonBlankContextMenu?: (params: PointerBlankEventParams) => voidOptional ReadonlyonBlankMouseEnter?: (params: HoverBlankEventParams) => voidOptional ReadonlyonBlankMouseLeave?: (params: HoverBlankEventParams) => voidOptional ReadonlyonBlankMouseOut?: (params: HoverBlankEventParams) => voidOptional ReadonlyonBlankMouseOver?: (params: HoverBlankEventParams) => voidOptional ReadonlyonBlankMouseWheel?: (params: WheelBlankEventParams) => voidOptional ReadonlyonBlankPointerClick?: (params: PointerBlankEventParams) => voidOptional ReadonlyonBlankPointerDblClick?: (params: PointerBlankEventParams) => voidOptional ReadonlyonBlankPointerDown?: (params: PointerBlankEventParams) => voidOptional ReadonlyonBlankPointerMove?: (params: PointerBlankEventParams) => voidOptional ReadonlyonBlankPointerUp?: (params: PointerBlankEventParams) => voidOptional ReadonlyonCellContextMenu?: (params: PointerCellEventParams) => voidOptional ReadonlyonCellMouseEnter?: (params: HoverCellEventParams) => voidOptional ReadonlyonCellMouseLeave?: (params: HoverCellEventParams) => voidOptional ReadonlyonCellMouseOut?: (params: HoverCellEventParams) => voidOptional ReadonlyonCellMouseOver?: (params: HoverCellEventParams) => voidOptional ReadonlyonCellMouseWheel?: (params: WheelCellEventParams) => voidOptional ReadonlyonCellPointerClick?: (params: PointerCellEventParams) => voidOptional ReadonlyonCellPointerDblClick?: (params: PointerCellEventParams) => voidOptional ReadonlyonCellPointerDown?: (params: PointerCellEventParams) => voidOptional ReadonlyonCellPointerMove?: (params: PointerCellEventParams) => voidOptional ReadonlyonCellPointerUp?: (params: PointerCellEventParams) => voidOptional ReadonlyonElementContextMenu?: (params: PointerElementEventParams) => voidOptional ReadonlyonElementMagnetContextMenu?: (params: MagnetEventParams) => voidOptional ReadonlyonElementMagnetPointerClick?: (params: MagnetEventParams) => voidOptional ReadonlyonElementMagnetPointerDblClick?: (params: MagnetEventParams) => voidOptional ReadonlyonElementMouseEnter?: (params: HoverElementEventParams) => voidOptional ReadonlyonElementMouseLeave?: (params: HoverElementEventParams) => voidOptional ReadonlyonElementMouseOut?: (params: HoverElementEventParams) => voidOptional ReadonlyonElementMouseOver?: (params: HoverElementEventParams) => voidOptional ReadonlyonElementMouseWheel?: (params: WheelElementEventParams) => voidOptional ReadonlyonElementPointerClick?: (params: PointerElementEventParams) => voidOptional ReadonlyonElementPointerDblClick?: (params: PointerElementEventParams) => voidOptional ReadonlyonElementPointerDown?: (params: PointerElementEventParams) => voidOptional ReadonlyonElementPointerMove?: (params: PointerElementEventParams) => voidOptional ReadonlyonElementPointerUp?: (params: PointerElementEventParams) => voidOptional ReadonlyonLinkConnect?: (params: LinkConnectEventParams) => voidOptional ReadonlyonLinkContextMenu?: (params: PointerLinkEventParams) => voidOptional ReadonlyonLinkDisconnect?: (params: LinkConnectEventParams) => voidOptional ReadonlyonLinkMouseEnter?: (params: HoverLinkEventParams) => voidOptional ReadonlyonLinkMouseLeave?: (params: HoverLinkEventParams) => voidOptional ReadonlyonLinkMouseOut?: (params: HoverLinkEventParams) => voidOptional ReadonlyonLinkMouseOver?: (params: HoverLinkEventParams) => voidOptional ReadonlyonLinkMouseWheel?: (params: WheelLinkEventParams) => voidOptional ReadonlyonLinkPointerClick?: (params: PointerLinkEventParams) => voidOptional ReadonlyonLinkPointerDblClick?: (params: PointerLinkEventParams) => voidOptional ReadonlyonLinkPointerDown?: (params: PointerLinkEventParams) => voidOptional ReadonlyonLinkPointerMove?: (params: PointerLinkEventParams) => voidOptional ReadonlyonLinkPointerUp?: (params: PointerLinkEventParams) => voidOptional ReadonlyonLinkSnapConnect?: (params: LinkConnectEventParams) => voidOptional ReadonlyonLinkSnapDisconnect?: (params: LinkConnectEventParams) => voidOptional ReadonlyonPaperMouseEnter?: (params: PaperHoverEventParams) => voidOptional ReadonlyonPaperMouseLeave?: (params: PaperHoverEventParams) => voidOptional ReadonlyonPaperPan?: (params: PaperPanEventParams) => voidOptional ReadonlyonPaperPinch?: (params: PaperPinchEventParams) => voidOptional ReadonlyonResize?: (params: ResizeEventParams) => voidOptional ReadonlyonScale?: (params: ScaleEventParams) => voidOptional ReadonlyonTransform?: (params: TransformEventParams) => voidOptional ReadonlyonTranslate?: (params: TranslateEventParams) => voidOptional Readonlyoptions?: PaperOptionsRaw dia.Paper.Options passthrough for anything joint-react doesn't
expose as a dedicated prop (e.g. allowLink, validateMagnet,
restrictTranslate, onViewPostponed).
Values set here override top-level props of the same name, treat this
as the authoritative form for users who need direct access to the raw
JointJS API. Avoid overriding joint-react-controlled options
(async, sorting, viewManagement, frozen, autoFreeze), the
portal rendering depends on their set values.
Optional Readonlyoverflow?: booleanLets cell content spill outside the paper viewport instead of being clipped.
Optional Readonlypaper?: PaperViewPre-created paper instance to adopt. When provided, the Paper component wraps this paper instead of creating a new one. The paper's DOM is assumed to be managed externally (e.g. by a stencil).
PaperView is an internally-managed instance, not a public, importable type;
you normally receive it from another joint-react construct (such as a stencil)
rather than constructing it yourself.
Optional ReadonlyportalSelector?: PortalSelectorPaper-level override for the React portal target selector.
By default, each cell uses its own portalSelector field.
ElementModel renders into its '__portal__' group, LinkModel into its
root <g>. Built-in JointJS shapes have no portalSelector field and
are skipped. Set this prop to force a single selector or a dynamic one
across all cells.
A function receives { model, paper, graph } and may return:
Element, use that DOM node directly,null, skip rendering for this cell,undefined (or no return), fall back to the cell's own portalSelector.Optional ReadonlypreventContextMenu?: booleanSuppresses the browser context menu over the paper so contextmenu events
can drive your own UI.
Optional ReadonlypreventDefaultBlankAction?: booleanPrevents the browser default action on blank-area pointer events.
Optional ReadonlypreventDefaultViewAction?: booleanPrevents the browser default action on cell pointer events.
Optional ReadonlyrenderElement?: RenderElement<any>Renders each element from its data slice.
Note: JointJS works with SVG by default, so renderElement is appended inside an SVG node.
To render HTML elements, use the experimental useHTMLOverlay prop or an SVG foreignObject.
Receives the element's data slice only. Derive its type from your cells
with InferElement<typeof cells>['data'].
Optional Readonly ExperimentalrenderLink?: RenderLink<any>Renders each link's content from its data slice. Re-runs when the link's
data changes.
Note: JointJS works with SVG by default, so renderLink content is appended inside an SVG node.
To render HTML elements, use an SVG foreignObject.
Receives the link's data slice only. Derive its type from your cells with
InferLink<typeof cells>['data']. When you need the source, target, or id,
read them with useCell() from inside the renderer.
type LinkData = InferLink<typeof initialCells>['data']
function RenderLink(data: LinkData) {
return <text>{data.label}</text>;
}
Optional ReadonlyrouterNamespace?: anyNamespace used to resolve router names referenced by links.
Optional ReadonlysnapLabels?: booleanSnaps a dragged link label to the closest point on the link path.
Optional ReadonlysnapLinks?: boolean | SnapLinksOptionsSnaps a dragged link end to nearby ports/elements. Pass { radius } to set
the snapping distance in px.
Optional ReadonlysnapLinksSelf?: boolean | { distance: number }Allows a link end to snap to its own source/target element.
Optional Readonlystyle?: CSSPropertiesInline styles applied to the paper host element. Use style.width and
style.height (or CSS via className) to size the paper, Paper does
not expose dedicated width/height props.
Optional Readonlytransform?: PaperTransformSets the paper's viewport transform via paper.matrix(...). Accepts
either a CSS transform string (e.g. 'scale(0.5)',
'translate(10px, 20px) rotate(15deg)') or a DOMMatrix. Useful for
zoom, minimap, and arbitrary viewport transforms.
Optional Readonly ExperimentaluseHTMLOverlay?: booleanRenders elements as real HTML in an overlay instead of inside an SVG node.
By default renderElement output is mounted in SVG, so plain HTML needs a
foreignObject (or an HTMLBox); enable this to skip that wrapping.
Known issues with HTML element rendering — use at your own risk.
Optional ReadonlyvalidateConnection?: CanConnectOptions | ValidateConnectionValidates whether a connection between two elements/ports is allowed.
{ source, target, endType, paper, graph }.validate callback.When omitted, defaults to canConnect() (no self-loops, no link-to-link, no multi-links).
Optional ReadonlyvalidateEmbedding?: ValidateEmbeddingValidates whether an element can be embedded into another element.
Receives { child, parent, paper, graph }.
Optional ReadonlyvalidateUnembedding?: ValidateUnembeddingValidates whether an element can be unembedded from its parent.
Receives { child, paper, graph }.
Optionalref?: Ref<Paper | null>import { GraphProvider, Paper, HTMLBox, type CellRecord } from '@joint/react';
interface NodeData {
label: string;
}
const initialCells: ReadonlyArray<CellRecord<NodeData>> = [
{ id: '1', type: 'element', position: { x: 40, y: 40 }, data: { label: 'Hello' } },
{ id: '2', type: 'element', position: { x: 280, y: 180 }, data: { label: 'World' } },
{ id: 'edge', type: 'link', source: { id: '1' }, target: { id: '2' } },
];
function Diagram() {
return (
<GraphProvider initialCells={initialCells}>
<Paper
style={{ width: '100%', height: 600 }}
renderElement={(data: NodeData) => <HTMLBox>{data.label}</HTMLBox>}
/>
</GraphProvider>
);
}
PaperProps for the full prop surface.
The interactive diagram canvas.
Renders the graph's elements and links, hosts user interactions (selection, drag, link creation, zoom/pan), and lets you customize each cell with your own React components. Mount inside a
<GraphProvider>and size it with CSS. The canvas fills its parent.