Files
fusion/packages/dashboard/app/components/MessageComposer.css
gsxdsm 98ad663011 FN-8872: add structural mail reports from chat
Add a report-oriented mail workflow that turns completed chat responses into structured, reviewable messages.

- Render structural report items with dedicated visual treatment and tests across mail surfaces.
- Add report-mode composer fields and route Send as report handoffs from completed chat responses.
- Document the mail/chat workflow and publish a Fusion changeset.

Files changed:
 .changeset/fn-8872-structural-mail-ui.md           |   7 +
 docs/dashboard-guide.md                            |   3 +
 packages/dashboard/app/App.tsx                     |   9 +
 packages/dashboard/app/components/ChatView.tsx     |  36 ++--
 packages/dashboard/app/components/MailboxModal.tsx |  28 ++-
 .../app/components/MailboxStructuralItem.css       |  73 +++++++
 .../app/components/MailboxStructuralItem.tsx       | 100 ++++++++++
 packages/dashboard/app/components/MailboxView.tsx  |  50 ++++-
 .../dashboard/app/components/MessageComposer.css   |  18 ++
 .../dashboard/app/components/MessageComposer.tsx   |  57 +++++-
 .../__tests__/ChatMailReportRouting.test.tsx       | 144 ++++++++++++++
 .../__tests__/ChatView.send-as-report.test.tsx     |  96 +++++++++
 .../__tests__/MailboxStructuralItem.test.tsx       |  90 +++++++++
 .../MailboxStructuralMail.surfaces.test.tsx        | 217 +++++++++++++++++++++
 .../app/components/__tests__/MailboxView.test.tsx  |  28 +++
 .../__tests__/MessageComposer.report-mode.test.tsx | 106 ++++++++++
 .../components/__tests__/chatReportHandoff.test.ts |  26 +++
 .../dashboard/app/components/chatReportHandoff.ts  |  65 ++++++
 .../app/components/dashboard/MainContent.tsx       |   4 +
 .../dashboard/app/components/dashboard/types.ts    |   3 +
 20 files changed, 1135 insertions(+), 25 deletions(-)

Fusion-Task-Id: FN-8872

Fusion-Task-Lineage: 55e4bf5e-e7f3-48a5-8084-4090ab24710a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 06:07:01 -07:00

58 lines
1.5 KiB
CSS

/* FNXC:NativeStructureEmbed 2026-07-22-10:30: A matching custom drag is visible without leaving an empty drop shell when ordinary compose is idle. */
.message-composer--native-structure-drag-over {
outline: solid var(--border-strong);
outline-offset: calc(var(--space-xs) * -1);
}
.message-composer-structure-list > li {
align-items: start;
display: flex;
flex-wrap: wrap;
gap: var(--space-sm);
}
.message-composer-structure-list .native-structure-preview {
flex: 1 1 auto;
}
/*
FNXC:MessageComposerMobileWidth 2026-08-07-03:22:
Long native-structure kind and label values must not give the shared Messages picker an intrinsic width that escapes a narrow composer. The shared select remains shrinkable at every breakpoint; mobile explicitly fills its stacked field so both full-page and modal callers inherit containment.
*/
.message-composer-structure-controls .message-composer-select {
min-width: 0;
width: 100%;
max-width: 100%;
}
@media (max-width: 768px) {
.message-composer-field--structures,
.message-composer-structure-controls {
width: 100%;
max-width: 100%;
min-width: 0;
}
.message-composer-structure-list > li {
align-items: stretch;
}
}
.message-composer-mode,
.message-composer-report {
display: grid;
gap: var(--space-sm);
}
.message-composer-mode {
display: flex;
flex-wrap: wrap;
}
.message-composer-report-section {
border-block-start: var(--border) solid var(--border-subtle);
display: grid;
gap: var(--space-sm);
padding-block-start: var(--space-sm);
}