Vize

BlockUI

Headless region primitive for consumer-owned blocked, busy, and stale states.

Package @vizejs/ui/block-ui
Maturity stable
Own the source vize lib pull block-ui
Requires —
Aliases blocking overlay, busy region, pending region, stale content, offline gate
Covers HTML inert attribute, WAI-ARIA aria-busy, WAI-ARIA status role

Usage

import { BlockUI } from "@vizejs/ui/block-ui";

Or copy the source into your project with vize lib pull block-ui (see Source Distribution).

API

BlockUI

Source: src/families/feedback/block-ui/block-ui.vue

Props

Prop Type Default Description
as PrimitiveAs "section" Native element, custom element, or component to render.
blocked boolean false Whether the region is currently blocked by in-progress or unavailable work.
reason BlockUIReason "loading" Consumer styling and status reason mirrored to data-reason.
interaction BlockUIInteraction "none" Optional interaction policy. inert applies the native inert attribute only while blocked.
announce BlockUIAnnouncement "off" Optional live-region announcement policy used only when label is non-empty.
label string undefined Accessible announcement label used when announce is not off.
aria-busy string | boolean undefined Consumed so BlockUI state owns aria-busy instead of fallthrough attrs.
inert boolean | "" undefined Consumed so BlockUI state owns the native inert policy instead of fallthrough attrs.

Slots

Slot Slot props Description
default BlockUISlotState Renders blocked-region content with the current blocking and announcement state.

Exposed

Member Type Description
blocked boolean Whether the region currently represents blocked work.
state BlockUIState Stable state token mirrored to data-state.
reason BlockUIReason Blocking reason mirrored to data-reason.
interaction BlockUIInteraction Interaction policy mirrored to data-interaction.
announcement BlockUIAnnouncement Announcement policy mirrored to data-announcement.
element BlockUIElement | null Rendered host element or component instance.

Behavior

Normative state x input -> outcome table for block-ui.vue (@vizejs/ui/block-ui). Every row is proven by the named mounted-DOM, SSR, type, renderer, size, and tree-shaking gates.

ID State Input / action Required outcome Evidence
U1 default idle render / Tab renders <section data-vize-ui="block-ui">, part="root", idle/loading/none/off hooks, and no busy, inert, or ARIA policy renders an idle section by default without styling or accessibility policy
U2 blocked + inert + polite render renders requested host with aria-busy="true", native inert, role="status", polite live region, and label marks blocked inert regions busy and announces politely when labelled
U3 attrs + blocked interaction render / prop diff passes unrelated attrs while component state owns aria-busy and native inert owns busy and inert while leaving unrelated fallthrough attrs consumer owned
U4 assertive / empty label prop diff uses role="alert" only with a non-empty label, then omits announcement attrs when the label is empty uses assertive announcement attrs only while announce and label are present
U5 any slot/expose passes blocked, state, reason, interaction, and announcement to the slot and exposes them live with the rendered element passes slot state and exposes live block-ui state
U6 SSR blocked isolated requests renders byte-identical blocked markup without request-global state renders byte-identical blocked markup across isolated SSR requests
U7 SSR idle isolated request renders idle markup without intrinsic busy, inert, or announcement attrs while preserving consumer attrs renders idle server markup without intrinsic busy, inert, or announcement attrs

Props

Prop Type Behavior Default
as PrimitiveAs Native element, custom element, or component to render. "section"
blocked boolean Controls data-state and intrinsic busy/inert policy. false
reason "loading" | "saving" | "syncing" | "stale" | "offline" Consumer styling/status token mirrored to data-reason. "loading"
interaction "none" | "inert" Native inert policy applied only when blocked is true. "none"
announce "off" | "polite" | "assertive" Live-region policy applied only when label is non-empty. "off"
label string Accessible announcement label used when announce is not off. undefined

Slots

Slot Props Behavior Default
default { blocked: boolean; state: BlockUIState; reason: BlockUIReason; interaction: BlockUIInteraction; announcement: BlockUIAnnouncement } Render blocked UI content. none

Expose

Name Type Behavior Default
element BlockUIElement | null Rendered host element or component instance. null
blocked boolean Whether the region currently blocks work. false
state BlockUIState Stable blocking token. "idle"
reason BlockUIReason Current reason token. "loading"
interaction BlockUIInteraction Current interaction policy. "none"
announcement BlockUIAnnouncement Current announcement policy. "off"

Attributes

Attribute Value Behavior Default
part "root" Stable styling part. always
data-vize-ui "block-ui" Stable family selector. always
data-state "blocked", "idle" Blocking state styling hook. "idle"
data-reason BlockUIReason Reason styling/status hook. "loading"
data-interaction BlockUIInteraction Interaction policy hook. "none"
data-announcement BlockUIAnnouncement Announcement policy hook. "off"
aria-busy "true" Present only while blocked. undefined
inert native boolean attribute Present only while blocked and interaction is "inert". undefined
role "status", "alert" Bound only when announce and a non-empty label request it; ordinary fallthrough attrs may override it. undefined
aria-live "polite", "assertive" Mirrors active announcement politeness; ordinary fallthrough attrs may override it. undefined
aria-label string Uses the active announcement label; ordinary fallthrough attrs may override it. undefined

BlockUI emits no visual CSS, generates no ids, owns no focus trap, and stores no request-global state.