diff options
| author | soryu <soryu@soryu.co> | 2026-01-24 15:50:43 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2026-01-24 16:17:59 +0000 |
| commit | 595548db950eca303a7d73ca09f31895d291534f (patch) | |
| tree | ad6317979526e6a683fa6987bc9979ec3ac055f3 /frontend/src/components/VNInterface.tsx | |
| parent | abc5fbed331ea527ccaac0cd4120c4a0650f8bc0 (diff) | |
| download | soryu-595548db950eca303a7d73ca09f31895d291534f.tar.gz soryu-595548db950eca303a7d73ca09f31895d291534f.zip | |
feat(frontend): Add Templates page for managing contract templates
- Add NavStrip component for top navigation between pages
- Create Templates page with template card grid layout
- Create TemplateEditor component for editing phase deliverables
- Add navigation state management in stores
- Implement three built-in templates:
- Simple: Plan phase (Plan deliverable), Execute phase (PR deliverable)
- Specification: Research, Specify, Plan, Execute, Review phases with deliverables
- Execute: Single execute phase with no deliverables
- Support for creating custom templates with configurable phases/deliverables
- Templates are persisted to localStorage
- Add comprehensive CSS styling matching existing design patterns
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
[WIP] Heartbeat checkpoint - 2026-01-24 16:13:00 UTC
[WIP] Heartbeat checkpoint - 2026-01-24 16:14:29 UTC
Diffstat (limited to 'frontend/src/components/VNInterface.tsx')
| -rw-r--r-- | frontend/src/components/VNInterface.tsx | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/frontend/src/components/VNInterface.tsx b/frontend/src/components/VNInterface.tsx index be71d27..bdc7db0 100644 --- a/frontend/src/components/VNInterface.tsx +++ b/frontend/src/components/VNInterface.tsx @@ -8,15 +8,24 @@ import { showSettingsModalStore, isVisibleStore, yenBalanceStore, + currentPageStore, toggleStandby, toggleShowChoices, - updateTime + updateTime, + navigateTo } from '../stores' +import { NavStrip } from './NavStrip' +import { TemplatesPage } from '../pages/templates' interface VNInterfaceProps { onLogout: () => void } +const NAV_ITEMS = [ + { id: 'main', label: 'Main', icon: '>' }, + { id: 'templates', label: 'Templates', icon: '>' } +] + export function VNInterface({ onLogout }: VNInterfaceProps) { const isStandby = useStore(isStandbyStore) const currentTime = useStore(currentTimeStore) @@ -25,6 +34,7 @@ export function VNInterface({ onLogout }: VNInterfaceProps) { const showSettingsModal = useStore(showSettingsModalStore) const isVisible = useStore(isVisibleStore) const yenBalance = useStore(yenBalanceStore) + const currentPage = useStore(currentPageStore) // Fade in effect on mount useEffect(() => { @@ -45,12 +55,36 @@ export function VNInterface({ onLogout }: VNInterfaceProps) { return () => clearInterval(timer) }, []) + // Show Templates page if on templates route + if (currentPage === 'templates') { + return ( + <div className={`vn-interface ${isVisible ? 'fade-in' : 'fade-out'}`}> + <div className="vn-background"> + <div className="background-overlay"></div> + </div> + <NavStrip + items={NAV_ITEMS} + activeId={currentPage} + onSelect={(id) => navigateTo(id as 'main' | 'templates')} + /> + <TemplatesPage onClose={() => navigateTo('main')} /> + </div> + ) + } + return ( <div className={`vn-interface ${isVisible ? 'fade-in' : 'fade-out'}`}> + {/* Navigation Strip */} + <NavStrip + items={NAV_ITEMS} + activeId={currentPage} + onSelect={(id) => navigateTo(id as 'main' | 'templates')} + /> + {/* Background */} <div className="vn-background"> - <img - src="/__gaogao__56242cbde8f18ac64522e410bad04e68_waifu2x_art_noise2.png" + <img + src="/__gaogao__56242cbde8f18ac64522e410bad04e68_waifu2x_art_noise2.png" alt="Background image" className="background-image" /> |
