Files
fusion/packages/dashboard/app/context/ChatMessageLayoutContext.tsx
Fusion Agent 3ae22c23d1 FN-011: add project chat message width preference
Add a project-scoped conversation layout preference and apply full-width rendering consistently across dashboard chat surfaces.

- Add bubbles/full-width project settings with localized Appearance controls.
- Apply the preference to Chat, Activity, Planner Chat, Quick Chat, and docked hosts with responsive safeguards.
- Add regression coverage, documentation, and the published-package changeset.

Files changed:
 .changeset/fn-011-chat-message-layout.md           |  7 ++++
 docs/dashboard-guide.md                            |  4 ++
 .../core/src/__tests__/settings-defaults.test.ts   | 14 ++++++-
 .../core/src/__tests__/settings-parity.test.ts     |  4 ++
 packages/core/src/config/settings-schema.ts        |  5 +++
 packages/core/src/types/settings/settings-scope.ts |  5 +++
 packages/dashboard/app/App.tsx                     |  7 +++-
 packages/dashboard/app/components/AppModals.tsx    |  5 +++
 packages/dashboard/app/components/ChatView.css     | 23 +++++++++++
 packages/dashboard/app/components/ChatView.tsx     |  4 +-
 .../dashboard/app/components/SettingsModal.tsx     | 14 +++++++
 packages/dashboard/app/components/TaskChatTab.css  | 42 +++++++++++++++++++++
 packages/dashboard/app/components/TaskChatTab.tsx  |  4 +-
 .../app/components/TaskPlannerChatTab.css          | 22 +++++++++++
 .../app/components/TaskPlannerChatTab.tsx          |  4 +-
 .../components/__tests__/ChatView.core.test.tsx    | 34 +++++++++++++++++
 .../__tests__/SettingsModal.general.test.tsx       | 42 +++++++++++++++++++++
 .../app/components/__tests__/TaskChatTab.test.tsx  | 31 +++++++++++++++
 .../__tests__/TaskPlannerChatTab.test.tsx          | 32 ++++++++++++++++
 .../settings/sections/AppearanceSection.tsx        | 24 +++++++++++-
 .../sections/__tests__/AppearanceSection.test.tsx  | 22 ++++++++++-
 .../app/context/ChatMessageLayoutContext.tsx       | 16 ++++++++
 .../app/hooks/__tests__/useAppSettings.test.ts     | 44 ++++++++++++++++++++++
 packages/dashboard/app/hooks/useAppSettings.ts     | 29 ++++++++++++++
 .../app/task-modal-touch-resize-e2e-fixture.tsx    |  2 +-
 packages/i18n/locales/en/app.json                  |  6 ++-
 packages/i18n/locales/es/app.json                  |  6 ++-
 packages/i18n/locales/fr/app.json                  |  6 ++-
 packages/i18n/locales/ko/app.json                  |  6 ++-
 packages/i18n/locales/pt-BR/app.json               |  6 ++-
 packages/i18n/locales/zh-CN/app.json               |  6 ++-
 packages/i18n/locales/zh-TW/app.json               |  6 ++-
 packages/i18n/src/resources.d.ts                   |  4 ++
 33 files changed, 471 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-011
Fusion-Task-Lineage: d858d00f-e05b-4dc2-8ddb-cfc5b9973871
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-20 03:55:38 +00:00

17 lines
795 B
TypeScript

import { createContext, useContext, type ReactNode } from "react";
import type { ChatMessageLayout } from "../hooks/useAppSettings";
/**
* FNXC:ChatMessageLayout 2026-08-18-20:27:
* One App-level context keeps the project-scoped choice consistent across normal Chat, Quick Chat, dock hosts, task Activity, and Planner Chat without duplicating layout props through each host.
*/
const ChatMessageLayoutContext = createContext<ChatMessageLayout>("bubbles");
export function ChatMessageLayoutProvider({ value, children }: { value: ChatMessageLayout; children: ReactNode }) {
return <ChatMessageLayoutContext.Provider value={value}>{children}</ChatMessageLayoutContext.Provider>;
}
export function useChatMessageLayout(): ChatMessageLayout {
return useContext(ChatMessageLayoutContext);
}