docs(03): capture phase context
Phase 03: Component System - Implementation decisions documented - Phase boundary established
This commit is contained in:
71
.planning/phases/03-component-system/03-CONTEXT.md
Normal file
71
.planning/phases/03-component-system/03-CONTEXT.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# Phase 3: Component System - Context
|
||||
|
||||
**Gathered:** 2026-02-04
|
||||
**Status:** Ready for planning
|
||||
|
||||
<domain>
|
||||
## Phase Boundary
|
||||
|
||||
Enable reusable UI components that respond to HTMX interactions. Developers define components with YAML properties, components render via templates, and HTMX handlers respond to client-side triggers. This phase delivers the component infrastructure — CMS page editing UI that uses components is Phase 9.
|
||||
|
||||
</domain>
|
||||
|
||||
<decisions>
|
||||
## Implementation Decisions
|
||||
|
||||
### Component definition
|
||||
- YAML with explicit types: `name: {type: string, default: 'Default', required: true}`
|
||||
- Full widget set for property types: string, number, boolean, dropdown, model binding, repeater, file picker, color picker, code editor
|
||||
- Validation rules in YAML for simple cases (required, min, max, pattern), complex validation delegates to Scala functions
|
||||
- Components registered per-plugin similar to WinterCMS (`registerComponents` → component bound to default alias usable in theme)
|
||||
- Support inheritance — components can extend base component and override lifecycle methods
|
||||
- Missing required properties = compile-time error (page won't render)
|
||||
- No component versioning — breaking changes are plugin version bumps
|
||||
|
||||
### Rendering & output
|
||||
- Template files, not ScalaTags DSL
|
||||
- Twig-compatible template language (similar syntax to WinterCMS for easier migration)
|
||||
- Every component requires `default.htm` — CLI scaffolding auto-generates it
|
||||
- Theme context access: template helpers (`{{ asset('img/logo.png') }}`) AND ThemeService injection for Scala code
|
||||
|
||||
### HTMX behavior
|
||||
- Handler naming convention: methods starting with `on` become handlers (`onRefresh`, `onLoadMore`)
|
||||
- Handlers return `ZIO[Env, Error, Html]` for async operations
|
||||
- CSRF protection always required on all HTMX requests
|
||||
- Error presentation: both HTML fragment swap AND toast/notification via HX-Trigger, configurable per component or globally
|
||||
- Loading states via standard HTMX indicators (`htmx-indicator` class, theme provides CSS)
|
||||
- SSE support for real-time updates — components can push updates via Server-Sent Events
|
||||
|
||||
### Inspector/preview
|
||||
- No dedicated component preview/playground
|
||||
- CLI command for documentation: `summer docs:components` generates markdown from YAML
|
||||
- Full property inspector in CMS page editor (click component to edit properties in sidebar) — UI built in Phase 9
|
||||
- Basic metadata like WinterCMS: name, description, icon in YAML
|
||||
|
||||
### Claude's Discretion
|
||||
- Dependency injection approach — pick pattern that fits ZIO idioms best, document clearly
|
||||
- HTMX response headers (retarget, trigger) — pick idiomatic ZIO approach
|
||||
- Handler routing URL structure — integrate well with ZIO HTTP
|
||||
|
||||
</decisions>
|
||||
|
||||
<specifics>
|
||||
## Specific Ideas
|
||||
|
||||
- Component registration pattern from WinterCMS: `registerComponents` method in plugin returns map of component class → default alias
|
||||
- Twig-compatible templating eases migration from WinterCMS themes
|
||||
- Similar metadata structure to OctoberCMS/WinterCMS components
|
||||
|
||||
</specifics>
|
||||
|
||||
<deferred>
|
||||
## Deferred Ideas
|
||||
|
||||
None — discussion stayed within phase scope
|
||||
|
||||
</deferred>
|
||||
|
||||
---
|
||||
|
||||
*Phase: 03-component-system*
|
||||
*Context gathered: 2026-02-04*
|
||||
Reference in New Issue
Block a user