Files
IdeA/frontend/src/features/tickets/index.ts
Blomios e69361feb7 feat(frontend): tickets/sprints surface for the web workspace (#86 lot 2)
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>
2026-07-21 07:35:20 +02:00

43 lines
1.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** Tickets feature (F1F5, 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";