|
5 | 5 | > **Spec Version:** @objectstack/spec v3.0.9 |
6 | 6 | > **Client Version:** @objectstack/client v3.0.9 |
7 | 7 | > **Target UX Benchmark:** 🎯 Airtable parity |
8 | | -> **Current Priority:** AppShell Navigation · Designer Interaction · View Config Live Preview Sync · Dashboard Config Panel · Airtable UX Polish |
| 8 | +> **Current Priority:** AppShell Navigation · Designer Interaction · View Config Live Preview Sync · Dashboard Config Panel · Airtable UX Polish · **Flow Designer ✅** |
9 | 9 |
|
10 | 10 | --- |
11 | 11 |
|
12 | 12 | ## 📋 Executive Summary |
13 | 13 |
|
14 | 14 | ObjectUI is a universal Server-Driven UI (SDUI) engine built on React + Tailwind + Shadcn. It renders JSON metadata from the @objectstack/spec protocol into pixel-perfect, accessible, and interactive enterprise interfaces. |
15 | 15 |
|
16 | | -**Where We Are:** Foundation is **solid and shipping** — 35 packages, 91+ components, 5,110+ tests, 78 Storybook stories, 42/42 builds passing, ~85% protocol alignment. SpecBridge, Expression Engine, Action Engine, data binding, all view plugins (Grid/Kanban/Calendar/Gantt/Timeline/Map/Gallery), Record components, Report engine, Dashboard BI features, mobile UX, i18n (11 locales), WCAG AA accessibility, Designer Phase 1 (ViewDesigner drag-to-reorder ✅), Console through Phase 20 (L3), and **AppShell Navigation Renderer** (P0.1) — all ✅ complete. |
| 16 | +**Where We Are:** Foundation is **solid and shipping** — 35 packages, 91+ components, 5,110+ tests, 78 Storybook stories, 42/42 builds passing, ~85% protocol alignment. SpecBridge, Expression Engine, Action Engine, data binding, all view plugins (Grid/Kanban/Calendar/Gantt/Timeline/Map/Gallery), Record components, Report engine, Dashboard BI features, mobile UX, i18n (11 locales), WCAG AA accessibility, Designer Phase 1 (ViewDesigner drag-to-reorder ✅), Console through Phase 20 (L3), **AppShell Navigation Renderer** (P0.1), and **Flow Designer** (P2.4) — all ✅ complete. |
17 | 17 |
|
18 | 18 | **What Remains:** The gap to **Airtable-level UX** is primarily in: |
19 | 19 | 1. ~~**AppShell** — No dynamic navigation renderer from spec JSON (last P0 blocker)~~ ✅ Complete |
@@ -307,15 +307,56 @@ ObjectUI is a universal Server-Driven UI (SDUI) engine built on React + Tailwind |
307 | 307 |
|
308 | 308 | ## 🧩 P2 — Polish & Advanced Features |
309 | 309 |
|
| 310 | +### P2.0 Flow Designer ✅ |
| 311 | + |
| 312 | +> **Status:** Complete — `FlowDesigner` component shipped in `@object-ui/plugin-workflow`. |
| 313 | +
|
| 314 | +The `FlowDesigner` is a canvas-based flow editor that bridges the gap between the approval-focused `WorkflowDesigner` and the BPMN-heavyweight `ProcessDesigner`. It targets automation/integration flows with spec v3.0.9 types. |
| 315 | + |
| 316 | +**Core Canvas:** |
| 317 | +- [x] Drag-to-reposition nodes on SVG canvas |
| 318 | +- [x] Undo/redo with keyboard shortcuts (`Ctrl+Z` / `Ctrl+Y`) |
| 319 | +- [x] Ctrl+S save shortcut with `onSave` callback |
| 320 | +- [x] Zoom in/out/reset controls |
| 321 | +- [x] Edge creation by clicking source → target connection ports |
| 322 | +- [x] Node deletion via delete button or `Delete` key |
| 323 | + |
| 324 | +**Node Types (spec v3.0.9):** |
| 325 | +- [x] Standard nodes: `start`, `end`, `task`, `user_task`, `service_task`, `script_task`, `approval`, `condition` |
| 326 | +- [x] Gateway nodes: `parallel_gateway`, `join_gateway` |
| 327 | +- [x] Event nodes: `boundary_event`, `delay`, `notification`, `webhook` |
| 328 | + |
| 329 | +**Edges (spec v3.0.9):** |
| 330 | +- [x] Edge types: `default`, `conditional`, `timeout` |
| 331 | +- [x] Conditional edges with `condition` expression field |
| 332 | +- [x] `isDefault` flag for default/fallthrough edge marking |
| 333 | +- [x] Visual differentiation: dashed lines for conditional, dotted for default |
| 334 | + |
| 335 | +**Property Panel:** |
| 336 | +- [x] Node property editor: label, type, description |
| 337 | +- [x] Node executor configuration: `FlowNodeExecutorDescriptor` (type, `inputSchema`, `outputSchema`, `timeoutMs`, retry policy) |
| 338 | +- [x] Wait event config for delay nodes: `FlowWaitEventType` (condition/manual/webhook/timer/signal) |
| 339 | +- [x] Boundary event config: `FlowBoundaryConfig` (`attachedToNodeId`, `eventType`, `cancelActivity`, `timer`, `errorCode`) |
| 340 | +- [x] Edge property editor: label, type, condition expression, `isDefault` toggle |
| 341 | + |
| 342 | +**Spec v3.0.9 Protocol Features:** |
| 343 | +- [x] `FlowVersionEntry[]` version history panel with current/previous entries |
| 344 | +- [x] `FlowConcurrencyPolicy` badge display (allow/forbid/replace/queue) |
| 345 | +- [x] `FlowExecutionStep[]` execution monitoring overlay with per-node status icons |
| 346 | +- [x] `FlowBpmnInteropResult` BPMN XML export with warning/error reporting |
| 347 | + |
| 348 | +**ComponentRegistry:** |
| 349 | +- [x] Registered as `'flow-designer'` with all inputs documented |
| 350 | + |
310 | 351 | ### P2.1 Designer — Remaining Interaction (Post-v1.0) |
311 | 352 |
|
312 | 353 | - [ ] PageDesigner: Component drag-to-reorder and drag-to-position |
313 | 354 | - [ ] ProcessDesigner: Node drag-to-move |
314 | | -- [ ] ProcessDesigner: Support v3.0.9 node types (`parallel_gateway`, `join_gateway`, `boundary_event`) |
315 | | -- [ ] ProcessDesigner: Support v3.0.9 conditional edges and default edge marking |
| 355 | +- [x] ProcessDesigner/FlowDesigner: Support v3.0.9 node types (`parallel_gateway`, `join_gateway`, `boundary_event`) — implemented in FlowDesigner |
| 356 | +- [x] ProcessDesigner/FlowDesigner: Support v3.0.9 conditional edges and default edge marking — implemented in FlowDesigner |
316 | 357 | - [ ] ReportDesigner: Element drag-to-reposition within sections |
317 | | -- [ ] Edge creation UI in ProcessDesigner (click source → click target) |
318 | | -- [ ] Property editing for node labels/types in ProcessDesigner |
| 358 | +- [x] FlowDesigner: Edge creation UI (click source port → click target port) |
| 359 | +- [x] FlowDesigner: Property editing for node labels/types + executor config + boundary config |
319 | 360 | - [ ] Confirmation dialogs for ProcessDesigner destructive actions |
320 | 361 |
|
321 | 362 | ### P2.2 Designer — Advanced Features |
@@ -346,11 +387,17 @@ ObjectUI is a universal Server-Driven UI (SDUI) engine built on React + Tailwind |
346 | 387 | - [ ] `@object-ui/components`: ErrorBoundary wrapper per component |
347 | 388 | - [ ] `@object-ui/fields`: Inline validation message rendering |
348 | 389 | - [ ] `@object-ui/plugin-charts`: Drill-down click handler for chart segments |
349 | | -- [ ] `@object-ui/plugin-workflow`: React Flow integration for production canvas |
350 | | -- [ ] `@object-ui/plugin-workflow`: Support v3.0.9 BPMN interop types (`BpmnElementMapping`, `BpmnDiagnostic`, `BpmnVersion`) |
351 | | -- [ ] `@object-ui/plugin-workflow`: Support v3.0.9 node executor descriptors (`NodeExecutorDescriptor`, `WAIT_EXECUTOR_DESCRIPTOR`) |
352 | | -- [ ] `@object-ui/plugin-workflow`: Support v3.0.9 `inputSchema`/`outputSchema` on flow nodes |
353 | | -- [ ] `@object-ui/plugin-workflow`: Support v3.0.9 `boundaryConfig` for boundary event nodes |
| 390 | +- [x] `@object-ui/plugin-workflow`: **FlowDesigner** — canvas-based flow editor (`flow-designer` component) with drag-to-reposition nodes, edge creation UI, undo/redo, Ctrl+S save, property panel, and BPMN export |
| 391 | +- [x] `@object-ui/plugin-workflow`: Support v3.0.9 BPMN interop types — `FlowBpmnInteropResult` with `bpmnXml` export, `nodeCount`, `edgeCount`, `warnings` |
| 392 | +- [x] `@object-ui/plugin-workflow`: Support v3.0.9 node executor descriptors — `FlowNodeExecutorDescriptor` with `inputSchema`, `outputSchema`, wait event config, retry policy |
| 393 | +- [x] `@object-ui/plugin-workflow`: Support v3.0.9 `inputSchema`/`outputSchema` on flow nodes via `FlowNodeExecutorDescriptor` |
| 394 | +- [x] `@object-ui/plugin-workflow`: Support v3.0.9 `boundaryConfig` for boundary event nodes — `FlowBoundaryConfig` with `attachedToNodeId`, `eventType`, `cancelActivity`, `timer`, `errorCode` |
| 395 | +- [x] `@object-ui/plugin-workflow`: Support v3.0.9 node types — `parallel_gateway`, `join_gateway`, `boundary_event` in `FlowNodeType` |
| 396 | +- [x] `@object-ui/plugin-workflow`: Support v3.0.9 conditional edges — `FlowEdge.type = 'conditional'` + `isDefault` flag |
| 397 | +- [x] `@object-ui/plugin-workflow`: Support v3.0.9 `FlowVersionHistory` — `FlowVersionEntry[]` with version number, author, changeNote, isCurrent |
| 398 | +- [x] `@object-ui/plugin-workflow`: Support v3.0.9 `ConcurrencyPolicy` — `FlowConcurrencyPolicy` (allow/forbid/replace/queue) |
| 399 | +- [x] `@object-ui/plugin-workflow`: Support v3.0.9 `WaitEventType` — `FlowWaitEventType` (condition/manual/webhook/timer/signal) |
| 400 | +- [x] `@object-ui/plugin-workflow`: Support v3.0.9 execution tracking — `FlowExecutionStep` with status overlay on nodes |
354 | 401 | - [ ] `@object-ui/plugin-ai`: Configurable AI endpoint adapter (OpenAI, Anthropic) |
355 | 402 | - [ ] Navigation `width` property: apply to drawer/modal overlays across all plugins |
356 | 403 | - [ ] Navigation `view` property: specify target form/view on record click across all plugins |
|
0 commit comments