951a522
/**
* The chat column's view state, as the page passes it down.
*
* It is deliberately a plain shape: the page derives it from the URL (see
* `pages/workspace/model/chat-location`) and hands back a patcher, so the
* feature never imports react-router and never learns what a query string is.
* That is also what keeps every panel, thread and jump deep-linkable.
*/
export type ChatPanelKind = 'thread' | 'pins' | 'threads' | 'members' | null
export interface ChatViewState {
/** Which right-hand column is open; `null` leaves just the transcript. */
panel: ChatPanelKind
/** Set with `panel: 'thread'`; the thread's own id. */
threadId?: string
/** One-shot targets: the view consumes them and clears the URL entry. */
replyToId?: string
editId?: string
jumpId?: string
}
/** Defaults are omitted from the URL, so a plain room reads `/app/x/chat/<id>`. */
export const CHAT_VIEW_DEFAULTS: ChatViewState = { panel: null }