Flow Wall
An independently moving image wall with perspective, six shape modes and configurable framing, spacing and motion.
Install the component, then paste your configured usage. Your settings are included in the code below.
Pro source comes with Arclen UI Pro. See plans
| Property | Type | Default |
|---|---|---|
imageUrlsImage URLs Empty uses the twelve included portraits. Accepts HTTPS or safe relative URLs; custom media is requested only when supplied. Minimum 0 itemsMaximum 24 itemsUp to 2048 characters per item | string-list | [] |
imageLabelsImage descriptions One accessible description per image, in image order. Minimum 0 itemsMaximum 24 itemsUp to 160 characters per item | string-list | [] |
shapeImage shape Choose the image silhouette. Rounded is the default. Options: mixed, rounded, arch, pill, circle, square | select | "rounded" |
tileSizeTile size 110–240Step 1 | number | 160 |
densityTile density 6–14Step 1 | number | 10 |
gapTile gap 8–48Step 1 | number | 14 |
perspectivePerspective distance 800–2600Step 10 | number | 1200 |
tiltField tilt -24–-3Step 1 | number | -14 |
depthPerspective depth 0–35Step 1 | number | 30 |
sizingStage sizing Fill uses the receiving container height. Fixed uses Stage height. Options: fill, fixed | select | "fill" |
heightStage height Applied when Stage sizing is fixed. 360–1200Step 10 | number | 720 |
speedMotion speed Base upward speed in CSS pixels per second. Column lanes use individual relative speeds. 6–60Step 1 | number | 40 |
fadeEdge fade 0–30Step 1 | number | 14 |
controlsShow pause control | boolean | true |
motionContinuous motion | boolean | true |
backgroundSurface | color | "#ffffff" |
foregroundControls | color | "#171717" |
imageFitImage fit Options: cover, contain | select | "cover" |
imagePositionXImage focus X 0–100Step 1 | number | 50 |
imagePositionYImage focus Y 0–100Step 1 | number | 50 |
imageOpacityImage opacity 0.1–1Step 0.05 | number | 1 |
tileRadiusRounded tile radius 0–60Step 1 | number | 18 |
controlOffsetPause control inset 8–100Step 1 | number | 24 |
controlsBackgroundControls surface | color | "#ffffff" |
pauseOnHoverPause on hover | boolean | false |
collectionLabelCollection label Up to 160 characters | text | "Flow Wall image collection" |
Flow Wall
Flow Wall arranges an image collection into independently moving columns on a receding plane. Six shape modes share the same field. Twelve editorial portraits ship with the package. Motion uses native CSS animation.
React
import { FlowWall } from './flow-wall/src/react';
export function Gallery() {
return (
<div style={{ height: 720 }}>
<FlowWall shape="rounded" tileSize={160} speed={40} />
</div>
);
}Use imageUrls and matching imageLabels for your own collection. Empty URLs use the included artwork. Custom URLs accept HTTPS or safe relative paths; no remote images are requested by default. Image fit, focal position and opacity are configurable. Images are creative artwork.
Shape and layout
tileSize sets the base width; density scales it relative to ten. Columns combine varied image heights and independent upward loops. gap sets separation, perspective the projection distance, depth the plane tilt and tilt the diagonal angle. tileRadius affects rounded tiles. Mixed combines rounded, arch, pill and circle tiles. Circle tiles have equal width and height before projection. Other modes retain varied heights.
sizing="fill" fills a parent with a defined height. Use sizing="fixed" and height for a self-contained stage. The semantic collection name, surfaces, control colours, control offset, image crop and animation speed are adjustable.
Vanilla and HTML
import { mount } from './flow-wall/src/core';
import './flow-wall/src/styles.css';
const host = document.querySelector<HTMLElement>('#gallery');
if (host) {
const wall = mount(host, {
sizing: 'fixed',
height: 640,
imageUrls: ['images/ceramic.webp', 'images/flower.webp'],
imageLabels: ['Cream ceramic sculpture', 'A single calla lily'],
imagePositionY: 45,
pauseOnHover: true,
});
wall.update({ shape: 'circle' });
wall.pause();
wall.resume();
// Call when removing the component:
wall.destroy();
}Setting updates rebuild the field and retain focus on the Pause/Play button when it was focused. Choose the silhouette through the shape setting in props or the tweaks panel. Pause/resume preserves animation phase. resolveSettings rejects unknown keys, unsafe image URLs and values outside the manifest bounds. The generated settings table is the complete API.
Accessibility and motion
Choose Image shape in the tweaks panel, or pass the shape prop in your application. Rounded is the default; all six shapes remain available. The stage has a keyboard- and touch-accessible Pause/Play button. The named Pause/Play button stops movement; pauseOnHover adds an optional pointer pause. Set motion={false} for a static field. With controls={false}, use the React paused prop or the lifecycle handle to control decorative motion.
Reduced motion disables continuous animation. Hidden and offscreen states pause it. Missing IntersectionObserver uses scroll/resize geometry checks; missing ResizeObserver uses resize events. Without JavaScript the static images and semantic image list remain, and inactive controls stay hidden. Repeated decorative tiles are hidden from assistive technology; custom descriptions are announced once.
The core exports defaults, resolveSettings, render and mount. React exports FlowWall and Component, with className, style and paused alongside settings. Each instance owns its listeners and observers; destroy removes its DOM and owned resources. No animation-frame loop or timer runs in this component.
The preview runs the component’s own JavaScript. It respects reduced motion and pauses when off screen. The HTML bundle includes a poster fallback.
Every setting in this panel comes from the component manifest. Preview size, pause and replay stay in the inspector.