docs: Add v2 wireframes and theme specification
14 files in docs/wireframes/v2/ addressing 13 UX gaps from v1: - Theme spec with indigo brand, status tokens, terminal/diff tokens, dark mode, Geist typography, 6px radius, layered shadows - Wireframes for all pages with loading/error/empty states - Shared component specs (SaveIndicator, EmptyState, ErrorState, CommandPalette, ThemeToggle)
This commit is contained in:
358
docs/wireframes/v2/dialogs.md
Normal file
358
docs/wireframes/v2/dialogs.md
Normal file
@@ -0,0 +1,358 @@
|
||||
# Dialogs (v2)
|
||||
|
||||
All modal/dialog overlays used throughout the application. v2 adds consistent
|
||||
loading and error states to all mutation-backed dialogs.
|
||||
|
||||
### Source: `packages/web/src/components/CreateInitiativeDialog.tsx`, `packages/web/src/components/RegisterProjectDialog.tsx`, `packages/web/src/components/RefineSpawnDialog.tsx`, `packages/web/src/components/TaskDetailModal.tsx`, `packages/web/src/components/editor/DeleteSubpageDialog.tsx`
|
||||
|
||||
---
|
||||
|
||||
## v1 -> v2 Changes
|
||||
|
||||
| Aspect | v1 | v2 |
|
||||
|--------|----|----|
|
||||
| Create Initiative: Branch field | Present (optional text input) | REMOVED (auto-generated on first execution dispatch) |
|
||||
| All dialogs: submit loading | Some had it, inconsistent | All show `[spinner] <verb>ing...` on submit button |
|
||||
| All dialogs: submit error | Some had it, inconsistent | All show red error text below buttons |
|
||||
|
||||
---
|
||||
|
||||
## Create Initiative Dialog
|
||||
|
||||
**Trigger**: "New Initiative" button on `/initiatives`
|
||||
|
||||
### Default state
|
||||
|
||||
```
|
||||
+----------------------------------------------------------+
|
||||
| Create Initiative [x] |
|
||||
| |
|
||||
| Name * |
|
||||
| [Auth System Overhaul___________________________] |
|
||||
| |
|
||||
| Execution Mode |
|
||||
| [ Review v ] |
|
||||
| |
|
||||
| Projects |
|
||||
| +----------------------------------------------------+ |
|
||||
| | [x] backend github.com/org/backend-api | |
|
||||
| | [ ] frontend github.com/org/frontend-app | |
|
||||
| | [ ] shared github.com/org/shared-lib | |
|
||||
| | + Register new project | |
|
||||
| +----------------------------------------------------+ |
|
||||
| |
|
||||
| [ Cancel ] [ Create ] |
|
||||
+----------------------------------------------------------+
|
||||
```
|
||||
|
||||
Note: Branch field has been removed. Branches are now auto-generated
|
||||
(`cw/<slugified-name>`) on first execution task dispatch. See auto-branch
|
||||
system in architecture docs.
|
||||
|
||||
### Submitting state
|
||||
|
||||
```
|
||||
+----------------------------------------------------------+
|
||||
| Create Initiative [x] |
|
||||
| |
|
||||
| Name * |
|
||||
| [Auth System Overhaul___________________________] |
|
||||
| |
|
||||
| Execution Mode |
|
||||
| [ Review v ] |
|
||||
| |
|
||||
| Projects |
|
||||
| +----------------------------------------------------+ |
|
||||
| | [x] backend github.com/org/backend-api | |
|
||||
| | [ ] frontend github.com/org/frontend-app | |
|
||||
| +----------------------------------------------------+ |
|
||||
| |
|
||||
| [ Cancel ] [ [spinner] Creating... ] |
|
||||
+----------------------------------------------------------+
|
||||
```
|
||||
|
||||
- `[ Create ]` button replaced with `[ [spinner] Creating... ]`
|
||||
- Button is `disabled` during mutation
|
||||
- `[ Cancel ]` remains enabled but closing the dialog is prevented
|
||||
|
||||
### Error state
|
||||
|
||||
```
|
||||
+----------------------------------------------------------+
|
||||
| Create Initiative [x] |
|
||||
| |
|
||||
| Name * |
|
||||
| [Auth System Overhaul___________________________] |
|
||||
| |
|
||||
| Execution Mode |
|
||||
| [ Review v ] |
|
||||
| |
|
||||
| Projects |
|
||||
| +----------------------------------------------------+ |
|
||||
| | [x] backend github.com/org/backend-api | |
|
||||
| +----------------------------------------------------+ |
|
||||
| |
|
||||
| Failed to create initiative. |
|
||||
| [ Cancel ] [ Create ] |
|
||||
+----------------------------------------------------------+
|
||||
```
|
||||
|
||||
- Error text: `text-sm text-destructive`, centered above the footer buttons
|
||||
- Cleared on next submit attempt
|
||||
|
||||
**Fields**:
|
||||
- Name (required text input, `autoFocus`)
|
||||
- Execution Mode (select: Review per Phase / YOLO)
|
||||
- Projects (ProjectPicker: checkbox list + register link)
|
||||
|
||||
**Source**: `packages/web/src/components/CreateInitiativeDialog.tsx`
|
||||
|
||||
---
|
||||
|
||||
## Register Project Dialog
|
||||
|
||||
**Trigger**: "Register Project" button on `/settings/projects` or "+ Register new project" in ProjectPicker
|
||||
|
||||
### Default state
|
||||
|
||||
```
|
||||
+----------------------------------------------------------+
|
||||
| Register Project [x] |
|
||||
| |
|
||||
| Project Name * |
|
||||
| [backend-api_______________________________________] |
|
||||
| |
|
||||
| Repository URL * |
|
||||
| [https://github.com/org/backend-api________________] |
|
||||
| |
|
||||
| Default Branch |
|
||||
| [main______________________________________________] |
|
||||
| |
|
||||
| [ Cancel ] [ Register ] |
|
||||
+----------------------------------------------------------+
|
||||
```
|
||||
|
||||
### Submitting state
|
||||
|
||||
```
|
||||
| [ Cancel ] [ [spinner] Registering... ] |
|
||||
```
|
||||
|
||||
### Error state
|
||||
|
||||
```
|
||||
| Failed to register project. |
|
||||
| [ Cancel ] [ Register ] |
|
||||
```
|
||||
|
||||
**Fields**:
|
||||
- Project Name (required, unique)
|
||||
- Repository URL (required, unique, git repo URL)
|
||||
- Default Branch (text input, defaults to "main")
|
||||
|
||||
**Source**: `packages/web/src/components/RegisterProjectDialog.tsx`
|
||||
|
||||
---
|
||||
|
||||
## Refine Spawn Dialog
|
||||
|
||||
**Trigger**: "Refine with Agent" button in Content tab, or "Retry" button after agent crash
|
||||
|
||||
### Default state
|
||||
|
||||
```
|
||||
+----------------------------------------------------------+
|
||||
| Refine Content [x] |
|
||||
| |
|
||||
| Instructions (optional) |
|
||||
| +----------------------------------------------------+ |
|
||||
| | Focus on the authentication flow section. | |
|
||||
| | Add more detail about the OAuth providers we | |
|
||||
| | need to support. | |
|
||||
| | | |
|
||||
| +----------------------------------------------------+ |
|
||||
| |
|
||||
| [ Cancel ] [ Start ] |
|
||||
+----------------------------------------------------------+
|
||||
```
|
||||
|
||||
### Submitting state
|
||||
|
||||
```
|
||||
| [ Cancel ] [ [spinner] Starting... ] |
|
||||
```
|
||||
|
||||
### Error state
|
||||
|
||||
```
|
||||
| Failed to start agent. |
|
||||
| [ Cancel ] [ Start ] |
|
||||
```
|
||||
|
||||
**Fields**:
|
||||
- Instructions (optional textarea, free-form guidance for the agent, 3 rows)
|
||||
|
||||
**Source**: `packages/web/src/components/RefineSpawnDialog.tsx`
|
||||
|
||||
---
|
||||
|
||||
## Task Detail Modal
|
||||
|
||||
**Trigger**: Click any task row in Plan tab or Execution tab
|
||||
|
||||
### Default state
|
||||
|
||||
```
|
||||
+----------------------------------------------------------+
|
||||
| Implement PKCE Flow [x] |
|
||||
| |
|
||||
| +------------------------+-------------------------+ |
|
||||
| | Status [IN_PROGRESS]| Priority normal | |
|
||||
| | Phase 2. OAuth Flow| Type execute | |
|
||||
| | Agent blue-fox-7 | |
|
||||
| +------------------------+-------------------------+ |
|
||||
| |
|
||||
| Description |
|
||||
| Implement the OAuth 2.0 PKCE extension for public |
|
||||
| clients. Generate code verifier/challenge pair, |
|
||||
| include in authorization request, and validate |
|
||||
| during token exchange. |
|
||||
| |
|
||||
| Dependencies |
|
||||
| * Set up OAuth routes [DONE] |
|
||||
| |
|
||||
| Blocks |
|
||||
| * GitHub provider adapter [BLOCKED] |
|
||||
| * Microsoft provider adapter [PENDING] |
|
||||
| |
|
||||
| [ Queue Task ] [ Stop Task ] |
|
||||
+----------------------------------------------------------+
|
||||
```
|
||||
|
||||
### Queue in progress
|
||||
|
||||
```
|
||||
| [ [spinner] Queuing... ] [ Stop Task ] |
|
||||
```
|
||||
|
||||
### Stop in progress
|
||||
|
||||
```
|
||||
| [ Queue Task ] [ [spinner] Stopping... ] |
|
||||
```
|
||||
|
||||
### Error state
|
||||
|
||||
```
|
||||
| Failed to queue task. Try again. |
|
||||
| [ Queue Task ] [ Stop Task ] |
|
||||
```
|
||||
|
||||
**Fields** (read-only):
|
||||
- 2-column metadata grid: Status (with badge), Priority, Phase, Type, Agent
|
||||
- Description text
|
||||
- Dependencies list (with StatusDot per dependency)
|
||||
- Blocks list (dependents with StatusDot)
|
||||
|
||||
**Actions**:
|
||||
- `[ Queue Task ]` -- `variant="outline" size="sm"`, disabled if already running/queued or dependencies incomplete
|
||||
- `[ Stop Task ]` -- `variant="destructive" size="sm"`, disabled if not running
|
||||
|
||||
**Source**: `packages/web/src/components/TaskDetailModal.tsx`
|
||||
|
||||
---
|
||||
|
||||
## Delete Subpage Dialog
|
||||
|
||||
**Trigger**: Auto-triggered when a page link is deleted in the Tiptap editor
|
||||
|
||||
### Default state
|
||||
|
||||
```
|
||||
+----------------------------------------------------------+
|
||||
| Delete Subpage? [x] |
|
||||
| |
|
||||
| You removed a link to "Token Rotation". Do you |
|
||||
| want to delete the subpage as well? |
|
||||
| |
|
||||
| [ Keep Subpage ] [ Delete ] |
|
||||
+----------------------------------------------------------+
|
||||
```
|
||||
|
||||
### Delete in progress
|
||||
|
||||
```
|
||||
| [ Keep Subpage ] [ [spinner] Deleting... ] |
|
||||
```
|
||||
|
||||
### Error state
|
||||
|
||||
```
|
||||
| Failed to delete subpage. |
|
||||
| [ Keep Subpage ] [ Delete ] |
|
||||
```
|
||||
|
||||
**Fields**: None (confirmation dialog only)
|
||||
|
||||
**Actions**:
|
||||
- `[ Keep Subpage ]` -- `variant="outline"`, closes dialog without deleting
|
||||
- `[ Delete ]` -- `variant="destructive"`, deletes the subpage and its content
|
||||
|
||||
**Source**: `packages/web/src/components/editor/DeleteSubpageDialog.tsx`
|
||||
|
||||
---
|
||||
|
||||
## Confirmation Dialogs (window.confirm)
|
||||
|
||||
Used for destructive actions throughout the app. All support **Shift+click to bypass**.
|
||||
|
||||
| Action | Trigger Location | Message |
|
||||
|--------|-----------------|---------|
|
||||
| Delete initiative | Initiative card `[...]` menu | "Delete this initiative?" |
|
||||
| Archive initiative | Initiative card `[...]` menu | "Archive this initiative?" |
|
||||
| Delete phase | Phase detail `[...]` menu | "Delete this phase?" |
|
||||
| Delete task | Task row `[x]` button | "Delete this task?" |
|
||||
| Delete project | Project card `[trash]` button | "Delete this project?" |
|
||||
| Delete agent | Agent actions `[...]` menu | "Delete this agent?" |
|
||||
| Stop agent (from inbox) | Inbox detail `[ Stop Agent ]` button | "Stop this agent? It will not be able to resume." |
|
||||
|
||||
Note: All `window.confirm()` dialogs are synchronous browser dialogs. They do not
|
||||
receive the v2 loading/error treatment since the mutation fires only after confirmation.
|
||||
|
||||
---
|
||||
|
||||
## Shared Patterns Across All Dialogs
|
||||
|
||||
### Submit button loading state
|
||||
|
||||
```
|
||||
v1: [ Create ]
|
||||
v2: [ [spinner] Creating... ]
|
||||
```
|
||||
|
||||
- `[spinner]` is `Loader2` from Lucide with `animate-spin h-4 w-4 mr-2`
|
||||
- Button text changes to present participle: "Create" -> "Creating...", "Register" -> "Registering...", "Start" -> "Starting...", "Delete" -> "Deleting..."
|
||||
- Button is `disabled` during mutation
|
||||
|
||||
### Error text placement
|
||||
|
||||
```
|
||||
+----------------------------------------------------------+
|
||||
| ...form fields... |
|
||||
| |
|
||||
| <error message text> |
|
||||
| [ Cancel ] [ Submit ] |
|
||||
+----------------------------------------------------------+
|
||||
```
|
||||
|
||||
- Error text: `text-sm text-destructive`
|
||||
- Positioned between form content and footer buttons
|
||||
- Cleared automatically when the user initiates a new submit
|
||||
|
||||
---
|
||||
|
||||
## Source (shared)
|
||||
|
||||
- `packages/web/src/components/ProjectPicker.tsx`
|
||||
- `packages/web/src/components/ui/dialog.tsx`
|
||||
- `packages/web/src/components/ui/button.tsx`
|
||||
Reference in New Issue
Block a user