Database

Property List

The editable property table under a database page’s title (side peek and full page), plus the per-property cell and value renderers.

Status
Priority
Team
Due

Usage

  • Use PropertyList to show and edit one row’s properties, typically at the top of a page or in a peek.
  • Use PropertyValueView for read-only values (cards, lists) and PropertyTypeIcon wherever a property type is named.
  • Let empty values show “Empty” so people can click to fill them; don’t hide empty properties by default.
  • Don’t use it for a general key/value form; use Field with form inputs instead.

Installation

Install the package (React 19):

terminal
npm install @krackedui/motion

Import the styles once, in your app entry or root layout:

/src/main.tsx
import '@krackedui/motion/styles.css';

Use it anywhere inside your app's <Theme> (see Installation):

/src/PropertyListExample.tsx
import { PropertyList, useDatabase, createTasksSample, SAMPLE_TODAY } from '@krackedui/motion';

export function PropertyListDemo() {
  const db = useDatabase(createTasksSample);
  const row = db.data.rows[1];
  return (
    <PropertyList
      properties={db.data.collection.properties}
      row={row}
      today={SAMPLE_TODAY}
      onChange={(pid, v) => db.updateRow(row.id, pid, v)}
      onCreateOption={(pid, name) => db.addOption(pid, name)}
    />
  );
}

Examples

Single row

Due

Value renderers and type icons

TitleCommand palette
StatusIn progress
SelectMedium
Multi-selectFrontend
DateOctober 12, 2026

Composition

anatomy
<PropertyList properties row>    // title property omitted
  PropertyRow × n
    label cell (160)  → PropertyTypeIcon + name
    PropertyCell      → PropertyValueView (display) → SelectPicker / DateCellPicker / inline input
  "Add a property"

<PropertyValueView>  read-only renderer per type (tags, status pill, date, checkbox, person…)
<PropertyTypeIcon>   property-type icon (16px)

API Reference

PropertyList

Based on <div> (except onChange). Adds:

PropTypeDefault
properties
Property[]
row
Row
onChange
(propertyId: string, value: PropertyValue) => void
onCreateOption
(propertyId: string, name: string) => SelectOption | undefined
onAddProperty
() => void
today
string

PropertyRow

PropTypeDefault
property
Property
value
PropertyValue | undefined
onChange
(value: PropertyValue) => void
onCreateOption
(name: string) => SelectOption | undefined
today
string

PropertyCell

An editable value: the click target of a table cell or a property row.

PropTypeDefault
property
Property
value
PropertyValue | undefined
onChange
(value: PropertyValue) => void
onCreateOption
(name: string) => SelectOption | undefined
children
ReactNode
PropertyValueView
className
string
inputClassName
string
empty
ReactNode
today
string
size
"md""sm"
"md"

PropertyValueView

PropTypeDefault
property
Property
value
PropertyValue | undefined
size
"md""sm"
"md"
wrap
boolean
false
onToggle
(checked: boolean) => void
className
string
empty
ReactNode
null

PropertyTypeIcon

Based on <svg> props (except type / name).

PropTypeDefault
type
PropertyType
size
number
16

Accessibility

  • Value cells are buttons: Enter/click edits. Select and status values open the SelectPicker, dates the DateCellPicker (both close on Escape); checkboxes toggle with Space; text-like types edit inline (Enter commits).
  • Empty values read "Empty" in text-tertiary.
© 2026 Motion. Internal documentation.