Wall
A read-only wall of photos, short notes and the owner's sign: Montréal brick, Moroccan eight-point zellige, Grenoble ridgelines or warm plaster, over a real keyboard-reachable list.
import { Wall, Polaroid, PinnedNote, ShopSign } from "@krizaka/ui/wall";Web only — React, from @krizaka/ui/wall. Beta: its API may still change in a minor version.
- Mobile · n/a. An ornamental storefront surface belongs to web pages; native content should stay in a scrolling gallery. → Media grid
Why it is here. Akinaza's shop pages: the owner's photos, short notes and logo on a textured wall (krizaka/akinaza#236, krizaka-ui#537).
When to use
- A shop or community page whose owner's photos, words and identity should feel personally pinned up.
When not to use
- A searchable or large image collection.Use instead: Photo grid
- Rows of data to compare or sort.Use instead: Data table
Installation
Install
npm install @krizaka/ui @krizaka/tailwind @krizaka/tokens tailwindcssStyles
@import "tailwindcss";
@import "@krizaka/tailwind";
@import "@krizaka/ui/tailwind.css";Import
import { Wall, Polaroid, PinnedNote, ShopSign } from "@krizaka/ui/wall";Examples
The owner's wall
A photograph, a signed word and an enamel sign, positioned from deterministic data.
The owner's wall in French
The same deterministic layout reads its French words and alternatives from the example's local catalogue.
Montréal brick
Staggered masonry and mortar on a warm token-based surface.
Moroccan zellige
A repeating deterministic eight-point SVG star, without an image download.
Grenoble ridges
Three layered mountain silhouettes behind the owner's words.
Warm plaster
A quiet lightly textured wall when the content should speak first.
Polaroids
A photo slot, handwritten caption, deterministic tilt, and tape or pin.
Pinned notes
Short signed words on cut-corner paper, held by a pin or tape.
Shop signs
The owner's mark as enamel with screws, soft neon, or weathered painted lettering.
Props
PinnedNote
A short word on a cut-corner card, stuck into the notebook.
| Prop | Type | Default | Description |
|---|---|---|---|
textrequired | string | — | The short message; capped at 140 Unicode code points without an ellipsis. |
attachment | "pin" | "tape" | — | A tape strip or a pin; defaults to tape. |
attachmentRotation | number | — | The tape or pin's tilt in degrees; defaults to zero. |
hold | "pin" | "tape" | tape | How the note is held, through Stuck: a strip of tape or a pin. Takes over attachment. |
ink | "blue" | "margin" | "hue" | blue | The ink of the pen: blue ink, the margin's red, or the page's hue. |
lines | number | 4 | The lines of the text box, fixed so a late font never shifts the page (the text is read in full by assistive technology). |
rotation | number | 0 | Tilt in degrees, deterministic; defaults to zero. |
signature | string | — | The optional author's signature, written in the handwriting role. |
Polaroid
A photo held to the wall by tape or a pin, with a handwritten caption.
| Prop | Type | Default | Description |
|---|---|---|---|
imgrequired | ReactNode | — | The photo slot: an img or next/image, including fill inside this positioned frame. Supply its alt text. |
attachment | "pin" | "tape" | tape | A tape strip or a pin; defaults to tape. |
attachmentRotation | number | 0 | The tape or pin's tilt in degrees; defaults to zero. |
caption | ReactNode | — | A short handwritten caption, using the --kz-font-cahier role. |
develop | boolean | true | Enable the first-view develop effect; defaults to true, never runs under reduced motion. |
rotation | number | 0 | Tilt in degrees, deterministic; defaults to zero. |
ShopSign
A shop's own mark, as a plate, a neon, a painted sign, or the name alone.
| Prop | Type | Default | Description |
|---|---|---|---|
animated | boolean | true | Allow one soft neon flicker the first time the sign is seen; defaults to true, never loops, respects reduced motion. |
as | "h1" | "h2" | "h3" | "p" | h1 | The element of the name: the page's h1 by default, h2/h3 for a second sign, p for none. A sign on a Wall is a p unless told otherwise. |
children | ReactNode | — | The shop's name as live text, in the sign's lettering: the page's heading (as). Prefer it to an image of the name. |
logo | ReactNode | — | The owner's logo or wordmark, optional beside the name. Name an SVG/image accessibly, or use readable text. |
rotation | number | 0 | Deterministic tilt in degrees; defaults to zero. |
variant | "none" | "enamel" | "neon" | "painted" | enamel | Enamel plate and screws, softly glowing neon, a time-worn painted sign, or none (the name alone on paper). |
Wall
A decorative textured surface over a real keyboard-reachable list; never an editor.
| Prop | Type | Default | Description |
|---|---|---|---|
itemsrequired | readonly WallItem[] | — | The read-only objects; never mutated. Sorted by z for reading, keyboard and phone order. |
height | number | — | A fixed desktop surface height in pixels (minimum 320). Absent, the surface is a fixed 16:9 box. Phones grow with content. |
itemWidth | number | 240 | Desktop object width in pixels (minimum 120); defaults to 240 and never exceeds the surface. |
max | number | 12 | Draws at most this many items (the first in z order); defaults to 12. The rest belongs to the host's « see the whole wall ». |
texture | "brick" | "zellige" | "ridge" | "plaster" | plaster | CSS/SVG texture; no image download. Defaults to plaster. |
Accessibility
- Wall is a real ul with an explicit list role, preserving Safari semantics despite list-style:none, and focusable li objects; give it an aria-label describing the collection. Textures, tape, pins and screws are hidden from assistive technology.
- Every word and all photo/logo alternatives come from the host. Standalone objects keep their natural figure/article/div semantics; Wall supplies their focus target.
- Polaroid only develops after its first observed intersection. With reduced motion, without an observer, or before hydration the photo remains sharp; preference changes stop motion immediately.
- Neon only flickers softly once, never flashes or loops. All effects stop under prefers-reduced-motion; reading and focus order never depend on visual positions.
Keyboard
| Keys | Action |
|---|---|
| Tab / Shift+Tab | Visit each object in ascending z order, preserving input order for ties. |
Best practices
- Import @krizaka/ui/blocks.css once. All four components are exported from @krizaka/ui/wall.
- Each example includes its own words, so copied snippets are self-contained. Choose the host locale and pass its words as data; the French composition demonstrates the same surface unchanged.
- Wall draws at most
maxitems (12 by default, the first in z order) in a fixed 16:9 box on a desktop; show the rest behind a « see the whole wall » of your own. Passheightonly for a fixed pixel height. On a phone it stacks them in z order, straight. ShopSignrenders its text children as the heading (as="h1"by default): the page's one h1 is the sign. On a Wall a sign is a paragraph unless you passas.variant="none"is the name alone on paper; the neon flickers once, the first time it is seen, and never loops.PinnedNote:hold(tape or pin, through Stuck),ink(blue, margin, hue) andlines(a fixed box of N lines, default 4, read in full by assistive technology);attachmentstill works as an alias ofhold.- Provide stable ids, explicit x/y percentages, rotation in degrees and z for every item. Positions are clamped to 0–100; z sorts the real list stably, including keyboard and phone order.
- Use kind polaroid with img, kind note with text, or kind sign with logo. Items carry the same props as their standalone component; no editor or random placement is added.
- Use height and itemWidth for layout, not style: style is intentionally omitted from the public props so percentage placement and the mobile stack cannot be overwritten accidentally.
- Keep the wall sparse and tilts small. On screens narrower than 48rem it grows into an untilted single column in z order, without overlap.
- The img ReactNode accepts next/image, including fill: the square photo frame is positioned. Supply an informative alt, or an empty alt for decoration.
- Captions and signatures use the existing --kz-font-cahier handwriting role (Krizaka Cahier from @krizaka/fonts); load the font in the host.
- PinnedNote caps text at 140 Unicode code points. Keep the full message elsewhere when more detail matters.
- Set attachment and attachmentRotation for tape or a pin, rotation for the object; neon's animated=false and Polaroid's develop=false opt out of motion.
- Wall textures adapt to dark, light and brand themes. Polaroid composes TapedPhoto: its --kz-print paper stays pale in both themes, with --kz-print-ink captions and --kz-tape strips instead of a second print material.
Related components
Generated from the code of @krizaka/ui 3.63.1: its meta.ts, its examples and its types.Edit this documentation on GitHub