@wonderlandlabs-pixi-ux/root-container
Repository: https://github.com/wonderlandlabs-pixi-ux/wonderlandlabs-pixi-ux/tree/main/packages/root-container
root-container gives you a stable scene foundation with centered coordinates and camera-like movement.
It is the baseline for Pixi experiences that need zooming, panning, and predictable world-space math.
Root/zoom-pan container utilities for PixiJS.
Installation
yarn add @wonderlandlabs-pixi-ux/root-container
Basic Usage
import { Application } from 'pixi.js';
import {
createRootContainer,
createZoomPan,
makeStageDraggable,
makeStageZoomable,
} from '@wonderlandlabs-pixi-ux/root-container';
const app = new Application();
await app.init({ width: 1200, height: 800 });
const { root, destroy: destroyRoot } = createRootContainer(app);
app.stage.addChild(root); // manual mount
const { zoomPan, destroy: destroyZoomPan } = createZoomPan(app, root);
root.addChild(zoomPan); // manual mount
const drag = makeStageDraggable(app, zoomPan);
const zoom = makeStageZoomable(app, zoomPan, {
minZoom: 0.25,
maxZoom: 6,
zoomSpeed: 0.1,
});
zoom.setZoom(1.5);
console.log('zoom:', zoom.getZoom());
// Later:
drag.destroy();
zoom.destroy();
destroyZoomPan();
destroyRoot();
Exported APIs
createRootContainer(app)
Returns:
stage: app stageroot: centered root container (origin at screen center)destroy(): removes listeners and destroys root
Note: createRootContainer does not auto-mount. Add root to stage manually.
createZoomPan(app, root?)
Returns:
zoomPan: container for world/contentdestroy(): removes and destroys zoomPan
Note: createZoomPan does not auto-mount. Add zoomPan to a parent manually.
makeStageDraggable(app, container)
Returns:
destroy()
Emits stage-drag events on app.stage:
{ type: 'drag-start' | 'drag-move' | 'drag-end', position: { x, y } }
makeStageZoomable(app, container, options?)
Options:
{ minZoom?: number, maxZoom?: number, zoomSpeed?: number }
Returns:
setZoom(zoom)getZoom()destroy()
Emits stage-zoom events on app.stage:
{ type: 'zoom', zoom: number, mousePosition: { x, y } }