Skip to content

Guide ​

This guide explains how to use ListDisplay in real applications.

It focuses on concepts and wiring, not API exhaustiveness. For detailed type definitions, see the API Reference.


Mental model ​

Think of ListDisplay as three layers:

  1. Data
  2. Features
  3. UI

Each layer is independent.

You decide:

  • which data source to use
  • which features to enable
  • which UI components to render

Minimal usage ​

At its simplest, ListDisplay needs:

  • a data source
  • a field schema
  • a table UI slot

Everything else is optional.

Features such as filtering, sorting, or pagination do nothing unless registered.


Enabling features ​

Features are registered explicitly via the feature registry.

Each feature may contribute:

  • state
  • handlers
  • context helpers
  • UI contracts

If a feature exposes UI, you must also provide the corresponding slot component.

There is no hidden wiring.


UI slots ​

ListDisplay renders nothing by default.

Instead, it exposes slots:

  • Table
  • Toolbar
  • FiltersPanel
  • Pagination
  • ModalOutlet
  • Status states

Each slot:

  • receives the same ListContext
  • can be fully replaced
  • can ignore features it doesn’t care about

You can mix default slots with custom ones.


Re-renders and performance ​

All state updates occur inside the ListDisplay runtime.

  • Parent components do not re-render
  • Slot components re-render only when the runtime updates
  • Feature state updates are isolated

This makes ListDisplay safe to use in complex, high-frequency update scenarios.


Modals and actions ​

Row actions and general actions may optionally trigger modal flows.

Modal handling is implemented as a feature and exposed through the ModalOutlet slot.

This allows:

  • custom confirmation dialogs
  • custom modal rendering
  • async flows without leaking state upward

Styling ​

ListDisplay does not ship with CSS.

Default UI components expose className hooks and structure only.

You are expected to:

  • style via your own CSS
  • or replace default components entirely

This is intentional.


Next steps ​

  • Explore individual features in the Features section
  • Review slot contracts in the UI section
  • Dive into internals via the Core API if needed