Names the absence.
Primitive contract
EmptyState
Explains why useful content is absent and provides an appropriate next action without an implicit alert.
Guided absence and next action · @sanchika/primitivesPurpose and semantics
Explains why useful content is absent and provides an appropriate next action without an implicit alert.
Recommended semantic: Use a section or aside with a labelled heading; actions remain native Link or Button semantics.
Anatomy
Explains cause or boundary.
Clear next step.
Optional secondary or source detail.
Optional restrained visual cue.
Finite variants and important states
- Variant · kind
- empty, filtered, unavailable
- Required states
- empty, filtered, unavailable
- Class hooks
.sk-empty-state · .sk-empty-state-filtered · .sk-empty-state-unavailable · .sk-empty-state__marker · .sk-empty-state__actions · .sk-empty-state__detail
Composed synthetic exemplar
Rendered state matrix
EmptyState: 3 required states
Each specimen starts from the package-owned example and contract state inventory. Simulated pointer and focus frames are labelled; consumers still verify real interaction in context.
No matching tools
Clear the search to restore all tools.
No matching tools
Clear the search to restore all tools.
No matching tools
Clear the search to restore all tools.
Accessibility and consumer responsibility
- Actions keep native Link or Button behavior.
- Use a labelled region where helpful
- Do not add alert role by default
- Choose truthful kind
- Wire actions
- Use native action semantics
- Copy stays concise and actions wrap or stack
No override is required.
- Text, marker, and action boundaries remain visible
Compact API reference
- Package
@sanchika/primitives- CSS
@sanchika/primitives/styles.css- Contract
primitiveSpecs.find((contract) => contract.name === "EmptyState")- Primary class
.sk-empty-state