Back to changelog index

9.2.0

May 26, 2026 · 2 packages · 3 unique changes · 1 release entry

libs

This release affects the contracts, sharedLibs familyies.

Run contractspec connect adoption resolve --family contracts to see how it impacts your project.

Release summaries

  • relationship-detail-rendering

    Declare relationships on a DataView detail config and render related records inside EntityDetailPanel (web + native), reusing the per-field formatting/intelligent-action machinery.

    maintainer

    contracts-spec adds an additive DataViewSectionRelationship primitive (DataViewSections gains optional kind/relationship; fields relaxed to optional). design-system adds RelationshipSection/RelationSwitcher (web+native, no ARIA tablist roles) and an optional fieldActions prop on the shared DataViewList(.native) (default off; existing consumers byte-identical). WEB LIST ROW ELEMENT: rows with interactive descendants (fieldActions='auto' or a renderActions slot) are no longer a native <button> — to avoid nesting focusable controls they render as a plain clickable region plus a primary <button data-row-select> keyboard affordance, with actions as valid siblings; rows with no interactive descendants stay a native <button> (byte-identical). EntityWorkspace(web+native) and EntityDetailPanel/DataViewDetail forward optional relationData/getRelationData/onOpenRelated/dataViewRegistry props.

    integrator

    Authors declare relationships (cardinality, displayMode table/list/compact-list, inline fields or child specKey, limit, emptyState). Related records are host-supplied — embedded dataPath, a relationData map / getRelationData resolver, the RelationDataContext provider, or the new optional EntityWorkspace/EntityDetailPanel/DataViewDetail props (relationData, getRelationData, onOpenRelated, dataViewRegistry); the declared OpRef is executed by the host. Drill-in via onOpenRelated(relationKey, record); read-only when omitted. The design-system performs no I/O. NOTE for DataViewList consumers: rows that render per-field actions or a renderActions slot are now a clickable region with a [data-row-select] keyboard affordance instead of a wrapping <button> (no-actions rows are unchanged) — update any tests/selectors that assumed the row is always a <button>.

    customer

    Detail views can show related records (e.g. a client's addresses) inline, switch between relations or view all stacked, and open a related record — on web and mobile.

Upgrade steps

  • Declare a relationship section on a detail view

    assisted

    Add a kind:'relationship' section to a DataView detail/management config to render related records.

    Packages: @lssm-tech/lib.contracts-spec, @lssm-tech/lib.design-system

    1. Add a section with `kind: 'relationship'` and a `relationship` descriptor (`key`, `cardinality`, and either inline `fields` or a child `specKey`).
    2. Set `displayMode` ('table' | 'list' | 'compact-list', default compact-list), optional `limit`, and `emptyState`.
    3. Supply records via embedded `dataPath`, the `relationData`/`getRelationData` props, or wrap the workspace in `RelationDataProvider`; the design-system never fetches.
    4. Pass `onOpenRelated(relationKey, record)` to enable drill-in; omit it for read-only.
  • Opt into per-field intelligent actions in list renderers

    assisted

    The shared DataViewList(.native) now accepts an optional fieldActions prop (default off).

    Packages: @lssm-tech/lib.contracts-spec, @lssm-tech/lib.design-system

    1. Pass `fieldActions="auto"` to `DataViewList`/`DataViewRendererList` to surface per-field intelligent actions in list/compact-list mode; omit it to keep existing output unchanged.

Unique release changes

  • - Add a kind:'relationship' section to a DataView detail/management config to render related records.

    2 packages · 2 occurrences

  • - Declare relationships on a DataView detail config and render related records inside EntityDetailPanel (web + native), reusing the per-field formatting/intelligent-action machinery.

    2 packages · 2 occurrences

  • - The shared DataViewList(.native) now accepts an optional fieldActions prop (default off).

    2 packages · 2 occurrences

Impacted packages

  • @lssm-tech/lib.contracts-spec

    Layer: libs · 3 changes

  • @lssm-tech/lib.design-system

    Layer: libs · 3 changes