Cluster
Headless Cluster; covers CSS flexbox, CSS gap, Reka UI Primitive.
|
|
| Package |
@vizejs/ui/cluster |
| Maturity |
stable |
| Own the source |
vize lib pull cluster |
| Requires |
— |
| Aliases |
layout cluster, wrapping row, inline group, action group |
| Covers |
CSS flexbox, CSS gap, Reka UI Primitive |
Usage
import { Cluster } from "@vizejs/ui/cluster";
Or copy the source into your project with vize lib pull cluster (see Source Distribution).
API
Cluster
Source: src/families/layout/cluster/cluster.vue
Props
| Prop |
Type |
Default |
Description |
as |
PrimitiveAs |
"div" |
Native element, custom element, or component to render. |
gap |
ClusterGap |
0 |
Native CSS gap value between direct children. Numbers resolve to px lengths. |
align |
ClusterAlign |
"stretch" |
Native CSS align-items value for the cross axis. |
justify |
ClusterJustify |
"start" |
Native CSS justify-content value for the inline axis. |
wrap |
boolean |
true |
Allow items to wrap onto additional lines. |
reversed |
boolean |
false |
Reverse inline item flow without changing DOM order. |
Slots
| Slot |
Slot props |
Description |
default |
ClusterSlotState |
Renders cluster children with the resolved inline layout state. |
Exposed
| Member |
Type |
Description |
wrap |
boolean |
Whether items can wrap onto additional lines. |
reversed |
boolean |
Whether inline item flow is reversed without changing DOM order. |
direction |
ClusterFlexDirection |
CSS flex-direction applied to the rendered host. |
wrapMode |
ClusterFlexWrap |
CSS flex-wrap applied to the rendered host. |
gap |
ClusterResolvedGap |
Resolved CSS gap value between direct children. |
align |
ClusterAlign |
Native CSS align-items value for the cross axis. |
justify |
ClusterJustify |
Native CSS justify-content value for the inline axis. |
state |
ClusterState |
Stable state token for styling and tests. |
element |
ClusterElement | null |
Rendered host element or component instance. |
Behavior
Normative state x input -> outcome table for cluster.vue (@vizejs/ui/cluster).
Every row is proven by the named mounted-DOM or SSR test. A row without a
passing test is a contract violation.
| # |
State |
Input |
Outcome |
Proven by |
| C1 |
default |
resolve |
maps default inline flow to wrapping flexbox with gap resolved to 0 and no CSS classes |
resolves a wrapping inline cluster with no authored CSS classes |
| C2 |
nowrap |
resolve |
maps reversed nowrap flow to row-reverse, nowrap, and numeric px gap values |
resolves reversed nowrap flow with native logical alignment values |
| C3 |
default |
render |
renders a non-focusable <div> cluster with part, data hooks, default gap, and slots |
renders a non-focusable cluster by default while preserving child semantics |
| C4 |
custom host |
render |
forwards host attributes and renders nowrap reversed cluster data hooks |
renders nowrap reversed flow on a custom semantic host |
| C5 |
any |
slot/expose |
exposes element, wrap, reversed, direction, wrapMode, gap, alignment, and state |
passes slot state and exposes live resolved layout state |
| C6 |
SSR |
isolated requests |
renders byte-identical flex cluster markup without request-global state |
renders byte-identical cluster markup across isolated SSR requests |
| C7 |
DOM/SSR/Vapor |
compile |
authored SFC compiles in every renderer lane without warnings or fallback |
scripts/check-renderers.ts |
| C8 |
root/subpath |
consumer bundle |
root and subpath consumers retain only Cluster, emit no CSS, and stay within gzip budget |
scripts/check-tree-shaking.mjs |
Props
| Prop |
Type |
Purpose |
Default |
as |
PrimitiveAs |
Native element, custom element, or component host. |
"div" |
gap |
string | number |
Native CSS gap value; numbers resolve to px lengths. |
0 |
align |
"stretch" | "start" | "center" | "end" | "baseline" |
Native CSS align-items value for the cross axis. |
"stretch" |
justify |
"start" | "center" | "end" | "space-between" | "space-around" | "space-evenly" |
Native CSS justify-content value for the inline axis. |
"start" |
wrap |
boolean |
Allow items to wrap onto additional lines. |
true |
reversed |
boolean |
Reverse inline item flow without changing DOM order. |
false |
Slots
| Slot |
Props |
Purpose |
Default |
default |
ClusterSlotState |
Renders direct cluster children. |
empty |
Expose
| Name |
Type |
Purpose |
Default |
element |
ClusterElement | null |
Rendered host element or component instance. |
null |
wrap |
boolean |
Whether items can wrap. |
true |
reversed |
boolean |
Whether inline flow is reversed. |
false |
direction |
ClusterFlexDirection |
Resolved CSS flex direction. |
"row" |
wrapMode |
ClusterFlexWrap |
Resolved CSS flex wrapping mode. |
"wrap" |
gap |
ClusterResolvedGap |
Resolved CSS gap value. |
"0" |
align |
ClusterAlign |
Resolved cross-axis alignment. |
"stretch" |
justify |
ClusterJustify |
Resolved inline-axis distribution. |
"start" |
state |
"clustered" |
Stable layout state token. |
"clustered" |
Data Attributes
| Attribute |
Values |
Purpose |
Default |
data-vize-ui |
"cluster" |
Stable family selector. |
always |
data-state |
"clustered" |
Cluster layout state. |
"clustered" |
data-wrap |
"true", "false" |
Wrapping styling hook. |
"true" |
data-reversed |
"true", "false" |
Reverse-flow styling hook. |
"false" |
data-align |
ClusterAlign |
Resolved alignment hook. |
"stretch" |
data-justify |
ClusterJustify |
Resolved justification hook. |
"start" |
data-vize-cluster-direction |
ClusterFlexDirection |
Resolved flex direction hook. |
"row" |
data-vize-cluster-gap |
ClusterResolvedGap |
Resolved gap hook. |
"0" |
ARIA Attributes
Cluster never sets role, aria-hidden, aria-label, aria-labelledby, or
tabindex. Consumers may pass semantic attributes to the host when the chosen
element requires them.
CSS Custom Properties
| Property |
Purpose |
Default |
--vize-ui-cluster-gap |
Value read by the host gap. |
"0" |
--vize-ui-cluster-align |
Value read by the host align-items. |
"stretch" |
--vize-ui-cluster-justify |
Value read by the host justify-content. |
"start" |
Parts
| Part |
Purpose |
Default |
root |
Single rendered host. |
always |