/** * The five product destinations, mounted by this host (plan dsh-panel-unification * Task 8). * * Each one is a THIN adapter: the shared screen renders, the host only * (1) resolves the screen's own copy object from the shared dictionary, (2) maps * the engine `ReadEnvelope` through the shared view-model builder, and (3) passes * the one interactive seat the screen owns (`Issues`' filter query). No product * markup, no local state beyond what the screen's props need. * * The per-view read happens in the seat (`panel-shell.tsx`): one * `mstar/dashboardView` per ACTIVE destination, so mounting a destination costs * one request and nothing polls. */ import * as React from 'react'; import { type IssueQuery, type Locale } from '@mstar-harness/ui'; import type { MstarDashboardViewState } from './use-mstar-dashboard-view.ts'; /** One destination's props: its read state, the locale and its interactive seat. */ export type DestinationProps = { readonly state: MstarDashboardViewState; readonly locale: Locale; readonly query?: IssueQuery; readonly onQueryChange?: (query: IssueQuery) => void; /** Open one record from the list (the shell owns the open record). */ readonly onOpen?: (id: string) => void; }; export declare function OverviewDestination({ state, locale }: DestinationProps): React.ReactElement; export declare function IssuesDestination({ state, locale, query, onQueryChange, onOpen }: DestinationProps): React.ReactElement; export declare function WorkflowsDestination({ state, locale, onOpen }: DestinationProps): React.ReactElement; export declare function IterationsDestination({ state, locale, onOpen }: DestinationProps): React.ReactElement; export declare function ProjectsDestination({ state, locale, onOpen }: DestinationProps): React.ReactElement; import { type ProjectFeature } from '@mstar-harness/ui'; /** The four detail views a destination can open. */ export type DetailView = 'issue-detail' | 'workflow-detail' | 'iteration-detail' | 'project-detail'; export type DetailProps = { readonly view: DetailView; readonly id: string; readonly state: MstarDashboardViewState; readonly locale: Locale; readonly onBack: () => void; readonly onOpenWorkflow?: (id: string) => void; /** A project detail's scoped Iterations read (`project` enforced on the request). */ readonly projectIterations?: MstarDashboardViewState; /** A project detail's scoped Issues read (`project` enforced on the request). */ readonly projectIssues?: MstarDashboardViewState; }; /** * One detail route. A record read's `null` is ABSENT (the record declares * nothing here); a projection with no generation is UNAVAILABLE (the read could * not be made) — the shared resolvers own that split, this adapter only passes * the envelope through. */ export declare function DetailBody({ view, id, state, locale, onBack, onOpenWorkflow, projectIterations, projectIssues }: DetailProps): React.ReactElement; /** * The project's identity, from wherever the envelope actually carries a catalog * row. An `absent` roadmap authority is NOT permission to invent identity: the * project exists (its catalog row is in the same envelope) even when it declares * no roadmap, so the title/path/lifecycle come from that row. Only a genuinely * missing catalog row falls back — and the fallback claims less, not more. */ export declare function projectIdentityOf(id: string, data: unknown): { projectId: string; title: string; description: string | null; lifecycle: string; lifecycleTone: 'neutral'; path: string; revision: string; registeredAt: string | null; updatedAt: string | null; }; /** * `project-detail` — the only place the product expresses its hierarchy. * * The adapter owns the FEATURE state: the fixed three tabs, with `Roadmap` * permanently the default (a constant, never "first non-empty"). Each tab's body * comes from its own project-scoped read: `roadmap` (the project's authority), * `issues?project=` and `iterations?project=`. */ export declare function ProjectDetailDestination(props: { id: string; state: MstarDashboardViewState; locale: Locale; onBack: () => void; iterations?: MstarDashboardViewState; issues?: MstarDashboardViewState; /** Test seam: the tab the page opens on. Production always starts at Roadmap. */ initialFeature?: ProjectFeature; }): React.ReactElement;