Files
fusion/packages/dashboard/app/components/TaskPlannerChatTab.css
gsxdsm 45509708e5 FN-7311: add planner chat starter prompts
Add guided prompts to the empty task-detail Chat tab so operators can start useful planner conversations quickly.

- Render a task-aware Chat empty state with four accessible starter prompt buttons.
- Send starter selections through the normal planner-chat stream while guarding stale session loads and stream callbacks.
- Style responsive prompt cards and document the Chat/Activity separation.
- Cover empty-state, loading, history, sending, and task-switch behavior with dashboard tests.

Files changed:
 .changeset/fn-7311-chat-starter-prompts.md         |   7 +
 docs/dashboard-guide.md                            |   2 +
 .../app/components/TaskPlannerChatTab.css          |  55 ++++-
 .../app/components/TaskPlannerChatTab.tsx          | 185 ++++++++++++---
 ...etailModal.responsive-and-dependencies.test.tsx |   3 +
 .../__tests__/TaskPlannerChatTab.test.tsx          | 252 ++++++++++++++++++++-
 6 files changed, 460 insertions(+), 44 deletions(-)

Fusion-Task-Id: FN-7311

Fusion-Task-Lineage: 5a58bc4f-1139-4c68-9ade-b79a52558bef

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-30 18:20:16 -07:00

195 lines
3.8 KiB
CSS

.task-planner-chat {
display: flex;
flex-direction: column;
gap: var(--space-md);
min-height: min(60vh, 42rem);
}
.task-planner-chat-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: var(--space-md);
}
.task-planner-chat-header h4 {
margin: 0;
color: var(--text);
}
.task-planner-chat-header p {
margin: var(--space-xs) 0 0;
color: var(--text-muted);
}
.task-planner-chat-model {
flex: 0 0 auto;
border: var(--btn-border-width) solid var(--border);
border-radius: var(--radius-pill);
padding: var(--space-xs) var(--space-sm);
color: var(--text-muted);
background: var(--surface-subtle);
font-size: var(--font-size-xs);
}
.task-planner-chat-error {
border: var(--btn-border-width) solid var(--color-error);
border-radius: var(--radius-md);
padding: var(--space-sm) var(--space-md);
color: var(--color-error);
background: var(--surface-subtle);
}
.task-planner-chat-transcript {
flex: 1 1 auto;
min-height: 16rem;
overflow: auto;
display: flex;
flex-direction: column;
gap: var(--space-md);
border: var(--btn-border-width) solid var(--border);
border-radius: var(--radius-lg);
padding: var(--space-md);
background: var(--surface);
}
.task-planner-chat-state,
.task-planner-chat-empty {
margin: auto;
display: flex;
align-items: center;
gap: var(--space-sm);
color: var(--text-muted);
text-align: center;
}
.task-planner-chat-empty {
flex-direction: column;
width: 100%;
max-width: 42rem;
gap: var(--space-lg);
}
.task-planner-chat-empty-copy {
display: flex;
flex-direction: column;
gap: var(--space-xs);
}
.task-planner-chat-empty-copy h5,
.task-planner-chat-empty-copy p {
margin: 0;
}
.task-planner-chat-empty-copy h5 {
color: var(--text);
font-size: var(--font-size-lg);
}
.task-planner-chat-starters {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--space-sm);
width: 100%;
}
.task-planner-chat-starter {
align-items: flex-start;
justify-content: flex-start;
min-width: 0;
height: auto;
white-space: normal;
text-align: left;
}
.task-planner-chat-starter-label,
.task-planner-chat-starter-description {
display: block;
}
.task-planner-chat-starter-label {
color: var(--text);
font-weight: 600;
}
.task-planner-chat-starter-description {
margin-top: var(--space-xs);
color: var(--text-muted);
font-size: var(--font-size-xs);
line-height: var(--line-height-tight);
}
.task-planner-chat-message {
max-width: min(42rem, 92%);
border: var(--btn-border-width) solid var(--border);
border-radius: var(--radius-lg);
padding: var(--space-sm) var(--space-md);
background: var(--surface-subtle);
}
.task-planner-chat-message--user {
align-self: flex-end;
background: var(--surface-hover);
}
.task-planner-chat-message--assistant,
.task-planner-chat-message--system {
align-self: flex-start;
}
.task-planner-chat-message-role {
margin-bottom: var(--space-xs);
color: var(--text-muted);
font-size: var(--font-size-xs);
font-weight: 600;
}
.task-planner-chat-message-content > :first-child {
margin-top: 0;
}
.task-planner-chat-message-content > :last-child {
margin-bottom: 0;
}
.task-planner-chat-composer {
display: flex;
align-items: flex-end;
gap: var(--space-sm);
}
.task-planner-chat-input {
flex: 1 1 auto;
min-height: 5rem;
resize: vertical;
}
.task-planner-chat-send {
flex: 0 0 auto;
}
@media (max-width: 768px) {
.task-planner-chat {
min-height: 70vh;
}
.task-planner-chat-header,
.task-planner-chat-composer {
flex-direction: column;
align-items: stretch;
}
.task-planner-chat-starters {
grid-template-columns: 1fr;
}
.task-planner-chat-send {
justify-content: center;
width: 100%;
}
.task-planner-chat-message {
max-width: 100%;
}
}