Adds a Live/Tickets/Sprints tab navigation to WebWorkspace after a project is opened — a mobile-first adaptation, not a port of the desktop docks/ floating windows, per carnet #86. The web-server transport (17 ticket_*/ sprint_* commands) and the HttpTicketGateway were already wired (lot 1 + pre-existing gateway code); this lot is UI only. - Tickets tab: search/filters, list grouped by sprint, create screen, detail view with stacked accordion sections (Résumé/Statut et priorité/ Carnet open by default; Agents assignés/Liens/Zone dangereuse collapsed), delete confirmation, optimistic-concurrency conflict banner. - Sprints tab: create/rename/reorder (Monter/Descendre)/delete with confirmation, add tickets via a mobile full-screen ticket picker (never a small desktop modal), "Voir tickets" filters the Tickets tab to one sprint. - Reuses the transport-neutral hooks as-is (useTickets, useTicketDetail, useTicketSearch) — only presentation and copy are web-specific, in French per decision #78 (new local label module, not a reuse of the English desktop ticketMeta labels). - Workaround: `list_agents` isn't in the web-server allowlist, so agent names/assignment options are derived from `get_project_work_state` (already used by the Live tab) instead of the desktop's useProjectAgents. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
/** Tickets feature (F1–F5, F7): project ticket board, detail/edit, carnet,
|
||
* links & assignments, and clickable `#ref` navigation. */
|
||
|
||
export { TicketsView } from "./TicketsView";
|
||
export type { TicketsViewProps } from "./TicketsView";
|
||
export { TicketsPanel } from "./TicketsPanel";
|
||
export type { TicketsPanelProps } from "./TicketsPanel";
|
||
export { TicketDetail } from "./TicketDetail";
|
||
export type { TicketDetailProps } from "./TicketDetail";
|
||
export { SprintManager } from "./SprintManager";
|
||
export type { SprintManagerProps } from "./SprintManager";
|
||
export { TicketPicker } from "./TicketPicker";
|
||
export type {
|
||
TicketPickerProps,
|
||
TicketPickerResult,
|
||
TicketPickerSelectionMode,
|
||
} from "./TicketPicker";
|
||
export { SprintPicker } from "./SprintPicker";
|
||
export type { SprintPickerProps } from "./SprintPicker";
|
||
export { TicketFacetsBar } from "./TicketFacetsBar";
|
||
export type { TicketFacetsBarProps } from "./TicketFacetsBar";
|
||
export { useTicketSearch } from "./useTicketSearch";
|
||
export type {
|
||
TicketSearchViewModel,
|
||
UseTicketSearchOptions,
|
||
} from "./useTicketSearch";
|
||
export { useTickets } from "./useTickets";
|
||
export type { TicketsViewModel } from "./useTickets";
|
||
export { useTicketDetail } from "./useTicketDetail";
|
||
export type { TicketDetailViewModel } from "./useTicketDetail";
|
||
export {
|
||
TicketRef,
|
||
StatusBadge,
|
||
PriorityBadge,
|
||
linkifyTicketRefs,
|
||
statusLabel,
|
||
priorityLabel,
|
||
linkKindLabel,
|
||
TICKET_STATUSES,
|
||
TICKET_PRIORITIES,
|
||
TICKET_LINK_KINDS,
|
||
} from "./ticketMeta";
|