Elements

Components / Application

Owner

Registered proprietor identity primitives for Instant Strata. An owner is a person or entity on the strata roll who holds one or more lots, receives levy notices, and may access the owner portal. Use these elements for owner directories, correspondence, portal admin, and committee views.

Design rationale

OwnerAvatar renders a roundavatar to distinguish proprietors from square system-user avatars (managers, staff). Joint names like "James & Sarah Chen" initialise as JC, never J&.

Lots and owners are related but distinct views. LotCard is lot-centric (entitlement, proxy, unit address). OwnerRollRow is owner-centric (contact details, portal status, multiple lot holdings). Use the view that matches the task: roll reconciliation by lot, or correspondence by owner.

Owned lots are always shown via OwnerLotChips, which composes LotBadge for consistent lot references across the system.

Primitives

Owner badges compose the shared Badge primitive. OwnerRollHeader summary counts use Badge for portal and invite totals. See the Badge docs for every owner badge state.

Badges, chips, OwnerAvatar, and OwnerIdentity
JCJC · joint
MOMO · individual
NSNS · company
IndividualCompanyJoint
Portal activeInvitedNot registered
EmailCommitteeOverdue
Lot 7Lot 8
JC

James & Sarah Chen

Lot 12

accounts@northshoreinv.com.au · 02 9123 4567

OwnerRollRow (list)

Default owner directory row. Shows avatar, name, contact, owned lots, and optional levy status.

tsx
import { OwnerList, OwnerRollHeader, OwnerRollRow } from "@/components/ui/owner"

<OwnerList
  header={
    <OwnerRollHeader
      totalOwners={owners.length}
      portalActiveCount={portalActive}
      invitedCount={invited}
      committeeCount={committee}
    />
  }
>
  {owners.map((owner) => (
    <OwnerRollRow
      key={owner.id}
      owner={owner}
      showLevyStatus
      showChevron
      href={`/schemes/${schemeId}/owners/${owner.id}`}
    />
  ))}
</OwnerList>

OwnerRollRow (wide)

Tabular owner directory with contact, levy, and portal columns. Used for portal admin and correspondence audits.

tsx
import { OwnerList, OwnerRollRow } from "@/components/ui/owner"

<OwnerList showWideHeader>
  {owners.map((owner) => (
    <OwnerRollRow
      key={owner.id}
      owner={owner}
      layout="wide"
      showLevyStatus
      showPortalStatus
      showCorrespondence
      showChevron
      href="#"
    />
  ))}
</OwnerList>

OwnerCard

Profile tiles for owner admin and portal onboarding. Compact layout suits search pickers.

Lot view vs owner view

Lot roll: use Lot when the primary key is the lot number (levy calculation, proxy validation, maintenance by unit).

Owner directory: use Owner when the primary key is the proprietor (sending notices, portal invites, committee communication). Multi-lot owners appear once with OwnerLotChips.

Badges: portal, type, correspondence, and committee badges are catalogued on the Badge page.

Install

tsx
npx shadcn add https://raw.githubusercontent.com/levi-putna/elements/main/registry/owner/registry.json

Requires the avatar, lot, and badge components.

Reference

OwnerSummary

PropTypeDefaultDescription
idstring-Stable identifier for routing and API calls.
namestring-Display name of the registered proprietor.
typeOwnerType-individual | company | joint.
emailstring-Primary email for notices and portal.
phonestring-Contact phone number.
lotsOwnerLotRef[]-Lots owned by this proprietor.
levyStatusLotLevyStatus-Worst-case or primary lot levy status.
portalStatusOwnerPortalStatus-active | invited | not_registered.
correspondenceOwnerCorrespondenceMethod-email | post | portal.
isCommitteeMemberboolean-Whether the owner serves on committee.
schemePlanstring-Parent scheme plan for cross-scheme directories.

OwnerRollRow

PropTypeDefaultDescription
ownerOwnerSummary-Owner data object.
layout"list" | "wide""list"list = directory row. wide = table row with contact and portal columns.
hrefstring-When set, renders the row as a link.
showChevronbooleanfalseTrailing chevron for navigable rows.
showLevyStatusbooleanfalseShows the levy status badge.
showPortalStatusbooleanfalseShows portal registration badge (wide layout).
showCorrespondencebooleanfalseShows correspondence preference (wide layout).
showSchemebooleanfalseShows parent scheme plan in list layout.
selectedbooleanfalseHighlights the row with lime-soft background.
actionsReactNode-Custom trailing actions.

OwnerCard

PropTypeDefaultDescription
ownerOwnerSummary-Owner data object.
layout"card" | "compact""card"card = profile tile. compact = picker row.
showPortalStatusbooleanfalseShows portal badge on card layout.
showCorrespondencebooleanfalseShows correspondence badge on card layout.