Conversation builder layouts

Place module.conversations parts beneath one module.conversations workspace. All parts use the same selected secured conversation and the existing native action/update/message state.

Detail parts include heading, actions, record-title, record-channel, record-status, edit-action, favorite-action, remove-action, scope, edit-form, metrics, related, participants, tags, messages-count, relations-count, activity-count, record-location, customer, assignee, reply-sla, resolution-sla, record-priority, created-at, updated-at and last-message-at. The designer catalog is the exact current list. Grouped detail omits explicitly placed children.

Use edit-form to position the existing metadata editor. If a layout has individual detail controls but neither detail nor edit-form, opening Edit supplies a fallback editor. Its original revision and recovery remain native. Use core.container disclosure-label/disclosure-state for expandable groups; controls remain mounted while collapsed.

Editor fields are independently placeable as edit-scope, edit-subject, edit-status, edit-snooze, edit-priority, edit-save, edit-refresh and edit-cancel. Each retains its native form owner across custom containers. Unplaced fields remain in edit-form or the fallback editor. With every field placed, the empty form owner is hidden. Drafts and the original revision survive uncertain-update review; Cancel closes the editor and reopening starts a fresh draft.

Navigation now exposes eyebrow, title, subtitle, direct-action, new-action, query, status-filter, awaiting-filter, search-action, previous-action, page-status and next-action. Filters and Search share one native form even across containers. Grouped header/filters/pager omit separately placed controls; unplaced controls remain in the group. Paging uses the last submitted filters, preserving any unsubmitted search draft.

To customize each list row, give the list part children containing row-open, row-title, row-channel, row-status, row-priority, row-preview, row-last-message, row-messages-count, row-unread, row-awaiting, row-customer, row-assignee, row-location, row-updated, row-snooze, row-reply-sla, row-resolution-sla and/or row-favorite. Each child layout repeats once per secured result, using that result's identity. Block properties cannot override the row record. Nested workspaces isolate their rows even while loading or empty. The native create form remains available as a list fallback when no form/detail host is placed.

Creation fields and actions are independently placeable as form-heading, form-scope, form-subject, form-channel, form-priority, save-action, create-refresh and cancel-action. One native form owner collects controls across containers. Unplaced controls stay in the grouped form; if no form, detail or list host is placed, a fallback keeps required controls available. An uncertain create keeps the draft locked until explicit read-only recovery. Visibility and location remain explicit user choices.

Message and history controls are independently placeable as thread-heading, history-status, older-messages-action, latest-messages-action, messages, message-recovery, message-form, message-type, message-to, message-cc, message-subject, message-schedule, message-body, review-email-action, post-note-action, email-review, edit-email-action and send-email-action. Unplaced controls stay in their native group. The message form owner remains available without a thread/detail host. Outbound replies still require review, and uncertain sends keep the draft locked until explicit message review and a separate decision.

To customize stored messages, give the messages part children containing message-row-sender, message-row-author, message-row-direction, message-row-delivery, message-row-time, message-row-from, message-row-to, message-row-cc, message-row-subject, message-row-content, message-row-private, message-row-sent, message-row-received, message-row-attachments and/or message-row-attachment-count. Each child layout repeats for one secured message. Attachment actions retain the native selected conversation, message and file identity; block properties cannot replace those identities. Nested workspaces clear inherited message state. Text stays escaped, and HTML-only messages retain the native fallback.

Record-level permissions still determine whether editing, sending and removal controls exist. A direct user's own conversation copy keeps its native deletion-scope semantics; presentation does not convert it into a shared record.

No routes, API permissions or SQL contracts are added by placement. Source/local fixture evidence does not establish live tenant acceptance; release remains held.

Reusable canonical example: placeable-conversations.json. It round-trips through Puck and uses the production page renderer. Import your normal professional.css, tailadmin-foundation.css and runtime styles when rendering an independent preview. The example uses independently placed navigation, repeated custom rows, details and editor fields alongside native create/message panels.
