Skip to content

Commit 707e96a

Browse files
committed
feat(Roadmap): add comprehensive roadmap and gap analysis for ObjectUI alignment with @objectstack/spec
1 parent 4d8b402 commit 707e96a

File tree

1 file changed

+352
-0
lines changed

1 file changed

+352
-0
lines changed

ROADMAP.md

Lines changed: 352 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,352 @@
1+
# ObjectUI Roadmap
2+
3+
> Aligning ObjectUI with `@objectstack/spec` UI Protocol
4+
5+
## Current Status
6+
7+
**Version:** v0.5.x
8+
**Spec Version:** @objectstack/spec v1.0.11
9+
**Overall Spec Coverage:** ~75%
10+
11+
## Package Maturity Matrix
12+
13+
| Package | Status | Spec Coverage | Notes |
14+
|---------|--------|--------------|-------|
15+
| @object-ui/types | ✅ Complete | 100% | Full spec re-export + local types |
16+
| @object-ui/core | ✅ Complete | 95% | Registry, Plugin, Expression, Action, Validation |
17+
| @object-ui/components | ✅ Complete | 100% | 80+ renderers, 50 Shadcn primitives |
18+
| @object-ui/fields | ✅ Complete | 95% | 36 widgets, 20+ cell renderers |
19+
| @object-ui/layout | 🟡 Partial | 60% | Basic layouts, missing responsive grid |
20+
| @object-ui/react | ✅ Complete | 100% | SchemaRenderer, hooks, providers |
21+
| @object-ui/plugin-form | 🟡 Partial | 30% | Only `simple` form, missing 5 variants |
22+
| @object-ui/plugin-grid | ✅ Complete | 95% | Full ListView support |
23+
| @object-ui/plugin-aggrid | ✅ Complete | 100% | AG Grid integration |
24+
| @object-ui/plugin-kanban | ✅ Complete | 100% | Kanban board |
25+
| @object-ui/plugin-calendar | ✅ Complete | 100% | Calendar view |
26+
| @object-ui/plugin-gantt | ✅ Complete | 100% | Gantt chart |
27+
| @object-ui/plugin-charts | ✅ Complete | 100% | 7 chart types |
28+
| @object-ui/plugin-dashboard | ✅ Complete | 100% | Dashboard layout |
29+
| @object-ui/plugin-detail | ✅ Complete | 100% | Record detail view |
30+
| @object-ui/plugin-list | ✅ Complete | 100% | List with view switching |
31+
| @object-ui/plugin-view | 🟡 Partial | 50% | Basic container only |
32+
| @object-ui/plugin-object | ⚪ Prebuilt | N/A | No source, has dist |
33+
| @object-ui/plugin-report | 🟡 Partial | 60% | Basic report rendering |
34+
| @object-ui/plugin-timeline | ✅ Complete | 100% | 3 timeline variants |
35+
| @object-ui/plugin-map | ✅ Complete | 100% | Map view |
36+
| @object-ui/plugin-editor | ✅ Complete | 100% | Monaco editor |
37+
| @object-ui/plugin-markdown | ✅ Complete | 100% | Markdown rendering |
38+
| @object-ui/plugin-chatbot | ✅ Complete | 100% | Chat interface |
39+
| @object-ui/data-objectql | ⚪ Prebuilt | N/A | No source, has dist |
40+
| @object-ui/data-objectstack | ✅ Complete | 100% | Full DataSource adapter |
41+
| @object-ui/runner | ✅ Complete | 100% | App runner |
42+
| @object-ui/cli | ✅ Complete | 100% | 15 commands |
43+
44+
---
45+
46+
## Gap Analysis
47+
48+
### 🔴 Critical Gaps (High Priority)
49+
50+
#### 1. Form Variants (plugin-form)
51+
52+
**Spec Requirement:**
53+
```typescript
54+
FormView.type: 'simple' | 'tabbed' | 'wizard' | 'split' | 'drawer' | 'modal'
55+
```
56+
57+
**Current State:** Only `simple` form implemented.
58+
59+
**Missing Features:**
60+
- [ ] Tabbed Form - Fields organized in tab groups
61+
- [ ] Wizard Form - Multi-step form with navigation
62+
- [ ] Split Form - Side-by-side panels
63+
- [ ] Drawer Form - Slide-out form panel
64+
- [ ] Modal Form - Dialog-based form
65+
- [ ] Section/Group support (collapsible, columns per section)
66+
- [ ] FormField.colSpan support
67+
- [ ] FormField.dependsOn (field dependencies)
68+
- [ ] FormField.widget (custom widget override)
69+
70+
---
71+
72+
#### 2. Action System Runtime
73+
74+
**Spec Requirement:**
75+
```typescript
76+
Action.type: 'script' | 'url' | 'modal' | 'flow' | 'api'
77+
Action.locations: ('list_toolbar' | 'list_item' | 'record_header' | 'record_more' | 'record_related' | 'global_nav')[]
78+
Action.component: 'action:button' | 'action:icon' | 'action:menu' | 'action:group'
79+
Action.params: ActionParam[]
80+
```
81+
82+
**Current State:** ActionRunner only handles `api` (partially) and `navigation`.
83+
84+
**Missing Features:**
85+
- [ ] `script` action type - Execute client-side code
86+
- [ ] `modal` action type - Open modal dialog
87+
- [ ] `flow` action type - Trigger automation workflow
88+
- [ ] `api` action type - Full HttpRequest support (headers, body, method)
89+
- [ ] Action location-based rendering (toolbar, item, header, etc.)
90+
- [ ] Action component variants (button, icon, menu, group)
91+
- [ ] ActionParam UI collection (before execution)
92+
- [ ] successMessage display
93+
- [ ] refreshAfter behavior
94+
95+
---
96+
97+
#### 3. NavigationConfig
98+
99+
**Spec Requirement:**
100+
```typescript
101+
NavigationConfig: {
102+
mode: 'page' | 'drawer' | 'modal' | 'split' | 'popover' | 'new_window' | 'none'
103+
view?: string
104+
preventNavigation?: boolean
105+
openNewTab?: boolean
106+
}
107+
```
108+
109+
**Current State:** Not implemented. No TypeScript interface in @object-ui/types.
110+
111+
**Missing Features:**
112+
- [ ] Add NavigationConfig to @object-ui/types
113+
- [ ] Implement in plugin-grid (row click behavior)
114+
- [ ] Implement in plugin-list (item click behavior)
115+
- [ ] Implement in plugin-detail (related list navigation)
116+
- [ ] Drawer navigation mode
117+
- [ ] Modal navigation mode
118+
- [ ] Split view navigation mode
119+
- [ ] Popover preview mode
120+
121+
---
122+
123+
### 🟡 Medium Priority Gaps
124+
125+
#### 4. ListColumn Extensions
126+
127+
**Spec Requirement:**
128+
```typescript
129+
ListColumn.link: boolean // Primary navigation column
130+
ListColumn.action: string // Associated action ID
131+
```
132+
133+
**Current State:** Not in types, not rendered.
134+
135+
**Tasks:**
136+
- [ ] Add `link` and `action` to ListColumnSchema
137+
- [ ] Render link columns with navigation behavior
138+
- [ ] Render action columns with ActionRunner integration
139+
140+
---
141+
142+
#### 5. Page System
143+
144+
**Spec Requirement:**
145+
```typescript
146+
Page: {
147+
type: 'record' | 'home' | 'app' | 'utility'
148+
variables: PageVariable[]
149+
template: string
150+
object?: string
151+
regions: PageRegion[]
152+
}
153+
```
154+
155+
**Current State:** Basic PageSchema exists but missing type differentiation.
156+
157+
**Tasks:**
158+
- [ ] Add Page.type to PageSchema
159+
- [ ] Add Page.variables support (page-level state)
160+
- [ ] Add Page.template support (layout templates)
161+
- [ ] Add Page.object binding
162+
- [ ] PageRenderer type-aware rendering (record vs home vs app vs utility)
163+
- [ ] PageVariable initialization and context injection
164+
165+
---
166+
167+
#### 6. Widget System (WidgetManifest)
168+
169+
**Spec Requirement:**
170+
```typescript
171+
WidgetManifest: {
172+
lifecycle: { onMount, onUpdate, onUnmount, ... }
173+
events: WidgetEvent[]
174+
properties: WidgetProperty[]
175+
implementation: 'npm' | 'remote' | 'inline'
176+
}
177+
```
178+
179+
**Current State:** Not implemented. Static ComponentRegistry only.
180+
181+
**Tasks:**
182+
- [ ] Add WidgetManifest types to @object-ui/types
183+
- [ ] Implement dynamic widget loading (npm, remote, inline)
184+
- [ ] Widget lifecycle hooks
185+
- [ ] Widget property validation
186+
- [ ] Widget event system
187+
188+
---
189+
190+
#### 7. Theme System Alignment
191+
192+
**Spec Requirement:** Full theme schema with ColorPalette, Typography, Spacing, BorderRadius, Shadow, Breakpoints, Animation, ZIndex.
193+
194+
**Current State:** Simplified ThemeDefinition, missing half the spec.
195+
196+
**Tasks:**
197+
- [ ] Add Shadow, Breakpoints, Animation, ZIndex to ThemeDefinition
198+
- [ ] Align ColorPalette with spec (surface, textSecondary, primaryLight/Dark)
199+
- [ ] Add ThemeProvider to @object-ui/react or @object-ui/layout
200+
- [ ] Theme inheritance (extends)
201+
- [ ] Branding (logo, darkLogo, favicon)
202+
203+
---
204+
205+
#### 8. ViewData API Provider
206+
207+
**Spec Requirement:**
208+
```typescript
209+
{ provider: 'api', read?: HttpRequest, write?: HttpRequest }
210+
```
211+
212+
**Current State:** Type defined but not fully implemented in plugin-form.
213+
214+
**Tasks:**
215+
- [ ] Full HttpRequest support (method, url, headers, body)
216+
- [ ] API read integration in plugin-form
217+
- [ ] API write integration in plugin-form
218+
- [ ] Error handling and loading states
219+
220+
---
221+
222+
### 🟢 Low Priority / Future
223+
224+
#### 9. Expression System Enhancements
225+
226+
- [ ] Formula functions (SUM, AVG, TODAY, NOW, IF, etc.)
227+
- [ ] Standardized context protocol (data, record, user, form)
228+
229+
#### 10. Report System
230+
231+
- [ ] Report export (PDF, Excel)
232+
- [ ] Report scheduling
233+
- [ ] Aggregation formula engine
234+
235+
#### 11. Layout System
236+
237+
- [ ] Responsive grid layout
238+
- [ ] Multi-column layout components
239+
- [ ] Layout templates
240+
241+
---
242+
243+
## Implementation Phases
244+
245+
### Phase 1: Form Variants (v0.6.0)
246+
247+
**Timeline:** 2-3 weeks
248+
249+
**Scope:**
250+
1. Refactor ObjectForm to support FormView.type
251+
2. Implement TabbedForm component
252+
3. Implement WizardForm component
253+
4. Add section/group support
254+
5. Add FormField.colSpan, dependsOn, widget
255+
256+
**Deliverables:**
257+
- [ ] packages/plugin-form/src/TabbedForm.tsx
258+
- [ ] packages/plugin-form/src/WizardForm.tsx
259+
- [ ] packages/plugin-form/src/FormSection.tsx
260+
- [ ] Updated ObjectForm with type routing
261+
262+
---
263+
264+
### Phase 2: Action System (v0.7.0)
265+
266+
**Timeline:** 2-3 weeks
267+
268+
**Scope:**
269+
1. Extend ActionRunner for all action types
270+
2. Implement action location-based rendering
271+
3. Add ActionButton, ActionMenu, ActionGroup components
272+
4. ActionParam collection UI
273+
274+
**Deliverables:**
275+
- [ ] packages/core/src/action/handlers/ (script, modal, flow, api)
276+
- [ ] packages/components/src/custom/action-button.tsx
277+
- [ ] packages/components/src/custom/action-menu.tsx
278+
- [ ] ActionLocationRenderer utility
279+
280+
---
281+
282+
### Phase 3: Navigation System (v0.8.0)
283+
284+
**Timeline:** 1-2 weeks
285+
286+
**Scope:**
287+
1. Add NavigationConfig to types
288+
2. Implement all navigation modes in grid/list/detail plugins
289+
3. Create NavigationProvider for centralized control
290+
291+
**Deliverables:**
292+
- [ ] packages/types/src/navigation.ts
293+
- [ ] packages/react/src/NavigationProvider.tsx
294+
- [ ] Updated plugin-grid, plugin-list, plugin-detail
295+
296+
---
297+
298+
### Phase 4: Page & Theme (v0.9.0)
299+
300+
**Timeline:** 2 weeks
301+
302+
**Scope:**
303+
1. Full Page system implementation
304+
2. Theme system alignment with spec
305+
3. ThemeProvider for runtime theming
306+
307+
**Deliverables:**
308+
- [ ] packages/types/src/page.ts (enhanced)
309+
- [ ] packages/types/src/theme.ts (aligned)
310+
- [ ] packages/layout/src/PageRenderer.tsx
311+
- [ ] packages/react/src/ThemeProvider.tsx
312+
313+
---
314+
315+
### Phase 5: Widget System & Polish (v1.0.0)
316+
317+
**Timeline:** 2-3 weeks
318+
319+
**Scope:**
320+
1. WidgetManifest implementation
321+
2. Dynamic widget loading
322+
3. Documentation completion
323+
4. Full spec compliance audit
324+
325+
**Deliverables:**
326+
- [ ] packages/core/src/widget/ (loader, lifecycle, registry)
327+
- [ ] Full documentation update
328+
- [ ] Spec compliance test suite
329+
330+
---
331+
332+
## Success Metrics
333+
334+
- [ ] All `@objectstack/spec/ui` types have corresponding runtime implementations
335+
- [ ] All 6 form variants working with examples
336+
- [ ] All 5 action types executable
337+
- [ ] All 7 navigation modes functional
338+
- [ ] 100% spec coverage in automated tests
339+
- [ ] Complete Storybook examples for all components
340+
341+
---
342+
343+
## Contributing
344+
345+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for development guidelines.
346+
347+
When implementing spec features:
348+
1. Reference the Zod schema in `@objectstack/spec/ui`
349+
2. Update types in `@object-ui/types` first
350+
3. Implement in appropriate package
351+
4. Add Storybook story
352+
5. Update documentation in `content/docs/`

0 commit comments

Comments
 (0)