Skip to content

feat(ui): render Workspace with Claude Design handoff layout#98

Merged
saagpatel merged 1 commit intomasterfrom
codex/feat/claude-design-workspace
Apr 22, 2026
Merged

feat(ui): render Workspace with Claude Design handoff layout#98
saagpatel merged 1 commit intomasterfrom
codex/feat/claude-design-workspace

Conversation

@saagpatel
Copy link
Copy Markdown
Owner

Summary

Ports the Claude Design handoff bundle's Workspace (Draft) layout into the real DraftTab. The previous PR #97 polished the shell chrome but left the tab content on its legacy panels; this PR swaps the tab body for the bundle-matching layout — so the visible Workspace now matches the mockup you approved in Claude Design.

What ships visually

  • Ticket header card — avatar, reporter, status, assignee, opened timestamp, priority + intent badges (all sourced from currentTicket + caseIntake).
  • 4-step workflow strip — Triage → Classify → Draft → Send with numbered circles, ✓ checkmarks for done stages, and accent-active styling.
  • Two-column panels — Query + Context on the left; Response + Sources + Alternatives on the right.
  • Query panel — textarea, policy/howto/access/incident intent chips wired to caseIntake.likely_category, Short/Medium/Long segment selector.
  • Context panel — audience / tone / urgency / environment selects + Generate / Cancel button with ⌘↵ hint.
  • Response panel — ML Intent banner, grounding gauge (tone-swapped for clarify/abstain modes), response meta (tok/s, sources, words, context util, supported-claim count), response body with inline [n] cite pills that drill into the source, action row (save template / regenerate / copy).
  • Sources list — ranked entries with file path + heading path + score.
  • Alternatives strip — saved alternatives rendered as preview chips with one-click swap.

Implementation

  • New src/styles/revamp/claudeDesignWorkspace.css (~700 lines) ports the bundle's workspace.css verbatim, scoped under .cdw so the bundle's generic class names (.panel, .badge, .chip, .btn) don't collide with global styles.
  • New src/features/workspace/ClaudeDesignWorkspace.tsx is a pure presenter — consumes state + handlers from the existing DraftTab hooks, no new Tauri IPC.
  • DraftTab now renders <ClaudeDesignWorkspace /> as its panels prop inside WorkspaceModeShell, dropping the legacy WorkspacePanels + WorkspaceWorkflowStrip + TicketWorkspaceRail path. Unused hook bindings (approval spinner, first-response tone UI, checklist UI, next-action handlers, similar-cases UI) are trimmed from destructures since their panels are no longer rendered.

What this intentionally drops

Some legacy surfaces were only consumable through the old panels and are not visible in the Claude Design mockup:

  • First-response tone controls
  • Checklist generator UI
  • Approval spinner UI
  • Similar-cases compare view
  • Next-best-action chip
  • Explicit 'Analyze intake' button (intake still runs through intent chips)

These can be re-surfaced in follow-up PRs when the design calls for them. The underlying hooks remain in place.

Test plan

  • pnpm ui:typecheck — clean
  • pnpm test — 67/67 files, 262/262 tests passing
  • All pre-commit guards green (branch name, lint-staged, commitlint, gitleaks)
  • Manual: launch app, confirm ticket header + workflow strip + two-column panels render with teal accents + radial-glow shell
  • Manual: paste a ticket, press Generate, confirm response body renders with inline cite pills, sources list populates, grounding gauge + intent banner appear

🤖 Generated with Claude Code

Port the Claude Design handoff bundle's Workspace (Draft) layout into
the real DraftTab. The previous PR polished the shell chrome but left
the tab content on its legacy panels; this PR swaps the tab body for
the bundle-matching layout.

What ships visually:
- Ticket header card: avatar + reporter/status/assignee/opened, plus
  priority and intent badges (sourced from currentTicket + caseIntake).
- 4-step workflow strip (Triage / Classify / Draft / Send) with
  numbered circles, completed checkmarks, and accent-active styling.
- Two-column panel layout (Query + Context on the left, Response +
  Sources + Alternatives on the right) with glassy header/body panels.
- Query panel: textarea, policy/howto/access/incident intent chips
  wired to caseIntake.likely_category, and Short/Medium/Long segment
  selector.
- Context panel: audience / tone / urgency / environment selects +
  Generate/Cancel button with cmd-enter hint.
- Response panel: ML Intent banner, grounding gauge (tone-swapped for
  clarify/abstain confidence modes), response meta (tokens/s,
  sources, words, context util, supported-claim count), response body
  with inline [n] cite pills that drill into the source, and action
  row (save template / regenerate / copy).
- Sources list: ranked entries with file path + heading path + score.
- Alternatives strip: saved alternatives rendered as chips with
  preview and one-click "use this" swap.

Implementation:
- New src/styles/revamp/claudeDesignWorkspace.css ports the bundle's
  workspace.css verbatim, scoped under a .cdw root so the bundle's
  generic class names (.panel, .badge, .chip, .btn) don't collide
  with global styles.
- New src/features/workspace/ClaudeDesignWorkspace.tsx renders the
  full layout. Pure presenter: consumes state + handlers from the
  existing DraftTab hooks, no new Tauri IPC.
- DraftTab now renders <ClaudeDesignWorkspace /> as its panels prop
  inside WorkspaceModeShell, dropping the legacy WorkspacePanels +
  WorkspaceWorkflowStrip + TicketWorkspaceRail path. Unused hook
  bindings (approval spinner, first-response tone UI, checklist UI,
  next-action handlers, similar-cases UI) are trimmed from the
  destructures since their panels are no longer rendered.

Verified: pnpm ui:typecheck clean; pnpm test passes (262/262).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@saagpatel saagpatel merged commit 6b410e4 into master Apr 22, 2026
18 of 23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants