From a0aaf16f4553c67065165d6fafb73ef8b736dab7 Mon Sep 17 00:00:00 2001 From: hqhq1025 <1506751656@qq.com> Date: Sun, 19 Apr 2026 03:16:57 +0800 Subject: [PATCH 1/7] feat(desktop): designs hub + multi-type create wizard (Claude Design adoption PR-A) Replaces the straight-to-composer launch flow with a designs hub modeled on Claude Design's Recent / Your designs / Examples / Design systems navigation plus a typed create wizard (Prototype / Slide deck / From template / Other). - Hub view with four sibling tabs and a primary "New design" CTA - Modal create flow; CTA stays disabled until a project name is provided - Per-type forms; PR-F will fill in the wireframe vs high-fidelity cards - Examples and Design systems tabs ship as placeholders for PR-B / PR-C - Project schema lives in shared with schemaVersion=1; persisted to localStorage for now (SQLite migration arrives with PR-C) - Full en + zh-CN coverage; tokens from packages/ui (no hardcoded values) - Vitest covering the create-draft logic; existing 144-test suite untouched Compatibility: green - no IPC/main changes, no schema breaks. Upgradeability: green - schemaVersion field on every Project payload. No bloat: green - no new dependencies; reuses lucide-react + zustand. Elegance: green - single store action per intent; per-type forms < 40 LOC. Signed-off-by: hqhq1025 <1506751656@qq.com> --- apps/desktop/src/renderer/src/App.tsx | 30 ++- apps/desktop/src/renderer/src/store.test.ts | 4 +- apps/desktop/src/renderer/src/store.ts | 108 ++++++++++- .../src/renderer/src/views/HubView.tsx | 70 +++++++ .../views/create/CreateProjectModal.test.ts | 56 ++++++ .../src/views/create/CreateProjectModal.tsx | 181 ++++++++++++++++++ .../src/views/create/FromTemplateForm.tsx | 70 +++++++ .../renderer/src/views/create/OtherForm.tsx | 22 +++ .../src/views/create/PrototypeForm.tsx | 28 +++ .../src/views/create/SlideDeckForm.tsx | 43 +++++ .../src/renderer/src/views/create/fields.tsx | 41 ++++ .../src/views/hub/DesignSystemsTab.tsx | 15 ++ .../renderer/src/views/hub/ProjectGrid.tsx | 50 +++++ .../src/renderer/src/views/hub/RecentTab.tsx | 14 ++ .../renderer/src/views/hub/YourDesignsTab.tsx | 10 + packages/i18n/src/locales/en.json | 73 +++++++ packages/i18n/src/locales/zh-CN.json | 73 +++++++ packages/shared/src/index.ts | 30 +++ 18 files changed, 902 insertions(+), 16 deletions(-) create mode 100644 apps/desktop/src/renderer/src/views/HubView.tsx create mode 100644 apps/desktop/src/renderer/src/views/create/CreateProjectModal.test.ts create mode 100644 apps/desktop/src/renderer/src/views/create/CreateProjectModal.tsx create mode 100644 apps/desktop/src/renderer/src/views/create/FromTemplateForm.tsx create mode 100644 apps/desktop/src/renderer/src/views/create/OtherForm.tsx create mode 100644 apps/desktop/src/renderer/src/views/create/PrototypeForm.tsx create mode 100644 apps/desktop/src/renderer/src/views/create/SlideDeckForm.tsx create mode 100644 apps/desktop/src/renderer/src/views/create/fields.tsx create mode 100644 apps/desktop/src/renderer/src/views/hub/DesignSystemsTab.tsx create mode 100644 apps/desktop/src/renderer/src/views/hub/ProjectGrid.tsx create mode 100644 apps/desktop/src/renderer/src/views/hub/RecentTab.tsx create mode 100644 apps/desktop/src/renderer/src/views/hub/YourDesignsTab.tsx diff --git a/apps/desktop/src/renderer/src/App.tsx b/apps/desktop/src/renderer/src/App.tsx index 702034d5..6b8222a2 100644 --- a/apps/desktop/src/renderer/src/App.tsx +++ b/apps/desktop/src/renderer/src/App.tsx @@ -1,4 +1,5 @@ import { useT } from '@open-codesign/i18n'; +import { ChevronLeft } from 'lucide-react'; import { useEffect, useMemo, useState } from 'react'; import { CommandPalette } from './components/CommandPalette'; import { PreviewPane } from './components/PreviewPane'; @@ -9,6 +10,7 @@ import { TopBar } from './components/TopBar'; import { useKeyboard } from './hooks/useKeyboard'; import { Onboarding } from './onboarding'; import { useCodesignStore } from './store'; +import { HubView } from './views/HubView'; export function App() { const t = useT(); @@ -73,6 +75,10 @@ export function App() { } if (view === 'settings') { setView('workspace'); + return; + } + if (view === 'workspace') { + setView('hub'); } }, preventDefault: false, @@ -110,12 +116,26 @@ export function App() {
+ {t('create.subtitle')} +
++ {children} +
+ ); +} diff --git a/apps/desktop/src/renderer/src/views/hub/DesignSystemsTab.tsx b/apps/desktop/src/renderer/src/views/hub/DesignSystemsTab.tsx new file mode 100644 index 00000000..07445b3a --- /dev/null +++ b/apps/desktop/src/renderer/src/views/hub/DesignSystemsTab.tsx @@ -0,0 +1,15 @@ +import { useT } from '@open-codesign/i18n'; + +export function DesignSystemsTab() { + const t = useT(); + return ( ++ {t('hub.designSystems.comingSoon')} +
++ {emptyLabel} +
+ ); + } + + return ( ++
{emptyLabel}
); } return ( -