文档
08_归档04_VOZEB任务卡

VOZEB-COMPONENT-INVENTORY-01 — 原始组件资产与可复用构建清单

Task ID: VOZEB-COMPONENT-INVENTORY-01
目标用户结果: 在开始页面改造前,拥有一份覆盖 VOZEB-PRO 原始组件的可复用组件地图和可视化实验室
原始基线: VOZEB-PRO v0.0.6 / upstream 4de8360
Foundation 包基线: codex/oceanway-bootstrap / d0037e9
候选提交: 本文件所在 commit(最终 SHA/tree 见交接报告)
范围: 只读盘点、共享 UI 基础层、组件 manifest、/components 展示
非目标: 页面整体迁移、后端契约/数据模型、真实生成与计费、部署发布

本候选包从完整基线 SHA d0037e99bbbec29f59e320d5ee6ba3fc8daeb6fe 以显式白名单 拆分;包含本文件的 commit 即可复现该组件候选。Foundation R1 在此基础上新增四个 反馈/设置原子(Notice、Tooltip、Switch、Checkbox);组件候选 R2 又补充了通用 range、 segmented、pagination 与四个偏好字段;R3 进一步固化 Prompt/Media 的低层 view-model 表面(PromptCard、PromptDetail、MediaBrowser)。Manifest 当前共 245 项:built 99、 candidate 41、domain 94、controller 9、legacy 2、planned 0。其中 React Bits 登记 27 项(extract 15、reference 12、direct 0);这些条目均通过 OceanWay 适配层承载固定快照,不把上游示例直接作为业务运行时依赖。

1. 结论先行

VOZEB-PRO 并没有独立的 packages/ui 或 Storybook。它的复用资产分散在 web/src/components、web/src/app/**/components、Ant Design 配置和多份全局 CSS 中。 因此本阶段采用“原代码保留 + 轻量适配层”的方式:

  1. 不复制一套新的 Button、Modal、Table 或 WebGL。复杂控件继续使用项目已有的 Ant Design, 下拉菜单继续使用原有 Radix Select。
  2. 纯表现和跨页面控件进入 web/src/components/ui;Ocean/React Bits 材质与动效进入 web/src/components/ocean。
  3. Agent、作品、提示词、后台、Canvas 和 Drama 的状态机仍留在业务域;共享层只接 serializable view props 和 callbacks。
  4. 所有原始共享组件(94 个运行时 .tsx,另有 6 个组件测试)以及页面域下的 62 个 app/**/components 组件都登记在 component-manifest.ts,组件实验室 对“已固化、可提取、业务域、控制器、遗留、规划中”逐项展示。未构建的组件不会从清单中 消失,而是以待构建卡片呈现。
  5. React Bits 只按组件级源码复用:当前使用 GlassSurface、MoltenMetal、Spotlight、 Tilt、Magnetic、AnimatedContent/Reveal、ShinyText、AnimatedList、GlareHover、 CountUp、GradientText、GradualBlur、LogoLoop、PixelSwap、RotatingText、ScrollExpand 的轻量适配;保留许可证和来源,不引入 整个站点运行时,也不为每张卡创建 WebGL。
  6. 组件库同时支持 Ocean Air 浅色与 Abyss 深色模式。两套模式共享同一语义角色,桌面端 通过现有左侧栏切换,移动端通过紧凑工具区切换;组件不得在 JSX/CSS 中写死另一套颜色。

2. 原始资产统计

来源/目录运行时组件主要职责当前处理
components/admin48后台分区、设置、渠道、用户、财务领域组件保留;Panel/Metric/Status/Field 抽取
components/agent5Markdown、媒体、消息动作、生成控件视觉可复用;编排留业务域
components/layout11壳层、侧栏、Logo、通知、账户先保留行为,提取 props 化壳层
components/works10作品卡片、预览、社区动作、瀑布流提取 Work view model
components/prompts3提示词卡片、详情、选择器提取 Prompt view model;R3 已固化低层卡片/详情
components/billing2套餐卡片与选择弹层提取 Product view model
根级生成/媒体/空态7模型、生成偏好、媒体、空态控件抽取;服务和归一化留业务
auth / profile / my-prompts / media5身份、头像、页面容器、懒加载视觉壳复用,数据策略留业务
components/ui3Select、主题切换、文字 reveal直接保留并纳入共享入口
共享组件合计94另有 6 个组件测试文件

admin/admin-retail-migration-section.tsx 是 OceanWay 在引导迁移阶段新增的扩展,不计入 VOZEB-PRO 原始 94 个;layout/ocean-particle-background.tsx 是兼容导出。两者都在 manifest 中显式登记,但分别标记为 OceanWay domain extension 和 legacy compatibility。

另外,原始 web/src/app/**/components 还有 62 个页面域组件:Canvas 36、Create 13、 Admin 11、Drama 1、Works 1。它们也进入 manifest 和实验室,但统一标记为 domain,因为它们携带画布几何、生成编排、短剧状态机或后台权限语义,不能直接搬到无业务 的 ui 层。

原始组件的测试文件不作为运行时组件搬运,但继续作为行为 Oracle: admin-section-nav.test.tsx、admin-user-identity.test.tsx、agent-markdown.test.tsx、 agent-message-controls.test.tsx、billing-plan-grid.test.tsx、site-logo.test.tsx。

3. 复用分层

L0 — Token、材质和运行时边界

  • global-ocean-air-theme.css、global-liquid-glass.css:颜色角色、透明度、hairline、 focus、阴影和减少透明度回退的单一来源。
  • OceanGlassSurface:React Bits GlassSurface 的适配器;一层材质只产生一条边界。
  • OceanGlassCard:静态卡片/面板,不创建 WebGL。
  • OceanAmbientBackground:首页唯一动态背景;MoltenMetal 仅在组件实验室中展示复杂 React Bits 背景。页面级 WebGL context loss 会切换到 CSS fallback,并在同一挂载周期内 禁止重复创建 renderer。

L1 — 共享原子组件(本阶段已构建)

入口为 web/src/components/ui/index.ts:

Button、IconButton、Input、Textarea、Field、Badge、StatusDot、 StatusBadge、OceanNotice、OceanTooltip、OceanSwitch、OceanCheckbox、 OceanRangeField、OceanSegmentedControl、OceanPagination、OceanVideoQualityField、 OceanSuggestedPositiveIntegerField、OceanPositiveNumberField、OceanSwitchPreference、Tabs、 Progress、Skeleton、LoadingState、EmptyState、 MediaFrame、Avatar、Section、SectionHeader、Surface/GlassSurface,以及原有 Select、DiaTextReveal、AnimatedThemeToggler。

这些组件只负责 DOM 语义、状态、焦点和布局槽位,不请求 API、不读取 store、不决定模型或 积分。CompactEmptyState 作为兼容名称委托给共享 EmptyState,现有页面无需一次性改名。

L2 — 可提取的产品复合组件(清单已登记,页面改造前逐个固化)

组件 kit原始来源解耦规则
Workspace Kitlayout/app-workspace-shell、app-sidebar、mobile-nav-drawer、site-logo、user-status-actions、通知/版本弹层注入导航项、账户摘要、健康状态和动作;不把 session/API 放进 UI
Agent Kitagent/*、creative-agent-controls、compact-agent-generation-settings、model-picker统一 AgentComposerCore;能力、模型、附件、run 状态用 view model 注入
Generation Kitcreative-generation-preferences、*-settings-panel、creative-generation-preference-fieldscapability schema 驱动;normalize 和真实任务调用留页面
Media Kitlazy-media-image、agent-media-preview、作品媒体浏览器OceanMediaBrowser 只接显式 kind、source/poster/thumbnail 和 active 回调;归属/签名 URL 留 adapter
Prompt Kitprompt-card、prompt-detail-dialog、prompt-select-dialog、my-promptsOceanPromptCard/Detail 只接 Prompt view model;Modal、剪贴板、保存和 onSelect 留 adapter
Work Kitpublic-work-*、responsive-masonry-grid只接 Work/Creator view model;like/report/follow 为回调
Admin Kitadmin-panel、settings controls、identity、status、media tabs数据表、Drawer、Form 继续用 Ant Design;Panel/Metric/状态壳统一
Auth / Install Kitauth-form、install wizard、database config builder字段、注册门禁、验证码/MFA、步骤、状态和动作槽位进入 Ocean;Session、数据库检查和安装写入留 adapter

Ocean MediaFrame 已将 MediaSource 的类型契约具体化为显式 image、video、audio 和 document 分支;Asset、Work、Drama、Canvas 候选直接复用该渲染边界,不根据 URL 猜测 类型。跨页 AssetPicker 通过 selectedItems 补齐离开当前页的已选对象,ID 列表仍由页面 adapter 作为选择事实维护。

L3 — 业务域组件(不下沉)

Create 的 Agent 编排、Canvas 节点/相机/工具栏、Drama 场景和镜头编辑器、Admin 分区控制器、 身份 hydration、stores 和 API hooks 都保留在所属页面。它们可以消费 L1/L2,但不能反向让 共享 UI 依赖 use-* store、计费、权限或上游 DTO。

R3 — Prompt / Media 低层候选(本轮已固化)

本轮只把三个可在多个页面复用、且不拥有业务副作用的表面登记为 built 候选:

  • OceanPromptCard:OceanPromptCardItem 只包含 id、标题、正文、封面、分类、标签和已格式化时间; body 使用键盘可操作的 role="button",预览、打开和插入等动作通过独立回调注入,避免嵌套 interactive control。
  • OceanPromptDetail:OceanPromptDetailItem 在卡片 view model 上增加来源和创建时间;它是 可嵌入的 detail surface,不拥有 Modal 生命周期、剪贴板、收藏/保存或持久化。
  • OceanMediaBrowser:媒体条目显式声明 image、video、audio 或 document,支持受控或 非受控 active selection、键盘 roving focus、poster/thumbnail 与 loading/empty/error 状态; 不依据 URL 猜类型,不启动视频缩略图,也不负责签名 URL、下载或归属检查。

三个组件共用 Ocean semantic tokens、单边界玻璃约束和 React Bits 的局部 GlareHover / Reveal / AnimatedList 适配;prefers-reduced-motion、 prefers-reduced-transparency 和 forced-colors 下均保留可读静态内容。组件实验室用合成 view model 展示卡片、详情和多模态轨道,并以 no-op callbacks 验证不会触发真实请求。

4. VOZEB-PRO 运行时组件逐项地图

下面的清单与 manifest 一一对应。状态含义:

  • built:当前已有可直接复用的实现或本阶段已固化的共享入口;在本 Foundation v1 候选中表示“视觉实现已存在”,不等于目标页面已迁移或 Gate 1 已通过;
  • candidate:保留原实现的视觉/交互细节,需先做 props/view-model 解耦;
  • domain:应在业务域复用,不能直接放进共享 UI;
  • controller:控制器、hydrator 或副作用,不是视觉组件;
  • legacy:无现行消费者,仅作原型对照;
  • planned:由多个原始组件合并出的后继 kit,尚未形成视觉候选;当前 manifest 已无 planned 项,后续新增 kit 仍须先经过该状态。

Admin(48 个原始 + 1 个 OceanWay 扩展)

admin-account-deletion-section、admin-billing-sections、admin-cdk-section、 admin-channel-protocol-setup、admin-commerce-conversion-panel、 admin-configuration-sections、admin-content-sections、admin-dashboard-elements、 admin-dashboard、admin-data-backup、admin-data-lifecycle-settings、 admin-external-storage、admin-generation-log、admin-generation-operations-section、 admin-generation-settings、admin-help-section、admin-local-media-storage、 admin-logical-model-manager、admin-logs-section、admin-marketing-sections、 admin-media-type-tabs、admin-overview、admin-panel、admin-points-section、 admin-quota-rules、admin-retail-migration-section、admin-return-button、admin-section-nav、 admin-settings-controls、admin-site-preview、admin-system-channel-editor、 admin-system-sections、admin-update-center、admin-upstream-sections、 admin-user-editor-modal、admin-user-identity、admin-users-section、 admin-wallet-section、agent-skill-create-modal、admin-channel-detail-drawer、 admin-channel-onboarding-drawer、admin-channel-status-badge、admin-channel-workspace、 以及 6 个 use-admin-dashboard-* 控制器。

可直接复用的是 Panel、PanelHeader、Metric、设置控件、身份单元、媒体类型 tabs 和 状态 badge;用户、渠道、账务、备份、权限和保存逻辑留 Admin 域。

Agent / Generation(10)

agent-markdown、agent-media-preview、agent-message-actions、 compact-agent-generation-settings、creative-agent-controls、 audio-settings-panel、creative-generation-preference-fields、 creative-generation-preferences、image-settings-panel、video-settings-panel。

Markdown、媒体预览、消息动作和字段控件可作为共享视觉;模型目录、能力限制、seedance/ 音频归一化、运行与扣费保持页面适配器。video-settings-panel 当前无消费者,标记为 legacy/candidate,不在改造前直接接入。

Layout / Auth(13)

announcement-notification-center、app-providers、app-sidebar、app-workspace-shell、 client-root-init、github-link、mobile-nav-drawer、site-announcement-popup、 site-logo、user-status-actions、version-release-modal、auth-form、 auth-user-hydrator。

Logo、侧栏视觉、通知行、版本弹层和表单字段可提取;providers、hydrator、登录策略和 会话状态是基础设施,不进入组件库。

Works / Prompts / Billing(16)

Works:public-creator-modal、public-creator-profile、public-work-card-title、 public-work-community-actions、public-work-gallery-card、public-work-like-button、 public-work-media-browser、public-work-preview-modal、public-work-report-button、 responsive-masonry-grid。

Prompts:prompt-card、prompt-detail-dialog、prompt-select-dialog、 my-prompts-page。Billing:billing-plan-grid、billing-plans-modal。

这些组件的布局和展示细节可复用,但 API、社区权限、支付状态、查询和分页不能下沉。

Media / Root UI(12,包括媒体、根级与 3 个原始 UI 组件)

lazy-media-image、compact-empty-state、model-picker、profile-avatar-uploader、 audio-settings-panel、creative-generation-preference-fields、creative-generation-preferences、 image-settings-panel、video-settings-panel,以及原始 ui/select、ui/dia-text-reveal、 ui/animated-theme-toggler。

懒加载、空态、选择器和主题动效已经进入共享层或有兼容入口;模型选项、上传签名和用户 资料仍由业务 adapter 提供。

R3 的 OceanPromptCard、OceanPromptDetail 与 OceanMediaBrowser 位于 Ocean patterns 入口,不替换上述原始页面组件;它们是后续页面迁移可以选择的低层候选,原始 prompt-detail-dialog、prompt-select-dialog 和 public-work-media-browser 仍保留在 inventory 中,直到各自的业务 adapter 与页面验收任务明确。

5. React Bits 复用边界

React Bits 能力OceanWay 入口用法
GlassSurfaceOceanGlassSurface主 Agent/少量焦点表面;SVG filter 不可用时 CSS fallback
MoltenMetalMoltenMetal/components 背景实验;单实例、动态 import OGL
SoftAurora/背景模式OceanAmbientBackground首页唯一背景,页面隐藏或 reduced motion 时暂停
SpotlightCardOceanSpotlight小范围 pointer CSS 变量,不给每张列表卡挂渲染器
TiltedCard / MagnetOceanTilt / OceanMagnetic媒体卡和小型动作,低幅度、可关闭
AnimatedContentOceanReveal视口进入动效;减少动效时直接显示内容
ShinyTextOceanShinyText仅短标签/实验室标题,正文保持中性色
AnimatedList / GlareHoverOceanAnimatedList / OceanGlareHover局部短列表与媒体 sheen;不创建 renderer
CountUp / RotatingTextOceanCountUp / OceanRotatingText非账务摘要与短副文案;始终保留静态可读值
GradientText / GradualBlurOceanGradientText / OceanGradualBlurtoken 绑定 eyebrow 与滚动边缘 veil
LogoLoop / PixelSwap / ScrollExpandOceanLogoLoop / OceanPixelSwap / OceanScrollExpand品牌条、非交互媒体和详情图;CSS 优先

来源、版本和 MIT + Commons Clause 条款见 web/THIRD_PARTY_NOTICES.md。 不把 React Bits 当作业务状态库,也不把其示例页复制成产品页面。

6. 组件实验室覆盖规则

/components 是本阶段唯一的组件审查入口:

  1. Foundation 区展示 Button、IconButton、Input、Textarea、Field、Badge、Status、Notice、 Tooltip、Switch、Checkbox、Range、Segmented、Pagination 与生成偏好字段、Tabs、 Progress、Skeleton、Loading、Empty、MediaFrame、Avatar、Surface 的 default/disabled/ loading/error 等状态。
  2. Ocean 区展示材质四参数、React Bits MoltenMetal 动态背景、GlassSurface、Agent Composer,以及 Spotlight、Tilt、Magnetic、Reveal、ShinyText、BlurText、DiaTextReveal、ClickSpark、 GlareHover、AnimatedList、CountUp、GradientText、GradualBlur、LogoLoop、PixelSwap、 RotatingText、ScrollExpand 等轻量动效适配。组件实验室提供重播入口,便于检查 mount-time 动效;OceanAmbientBackground 是页面级唯一 背景源,不在此处与 MoltenMetal 并挂;SlicedWaves 仅保留研究候选 metadata。
  3. VOZEB inventory 区展示原始 94 个共享运行时组件、1 个 OceanWay 迁移扩展、1 个兼容遗留项、62 个页面域组件及 12 个后继 kit。每张卡标出来源路径、 readiness 和复用策略;candidate/domain/controller/legacy/planned 均视为“未构建或待 适配”,不得隐藏。AssetPicker、PromptBrowser、WorkGallery、AdminTable/DetailDrawer、CanvasKit 和 DramaKit、AuthKit、InstallWizardKit 已有真实的 view-model-only 预览(含 loading/refreshing/empty/error/forbidden、提交/锁定/步骤阻断、选择/预览、移动端和局部动效);PromptCard、PromptDetail、MediaBrowser 在 Prompt / Media 面板中提供真实的 view-model-only 预览;其余条目仍提供按 layer/readiness 生成的 非业务契约预览骨架,只表达 slots、状态线和副作用边界,不伪造业务实例。
  4. 展示页只使用合成数据和 no-op callbacks,不触发真实模型调用、上传、扣费或持久化。
  5. 动效统一遵守 prefers-reduced-motion、prefers-reduced-transparency、页面隐藏暂停和 无 WebGL 回退;列表本身不挂独立 WebGL。

7. 开始页面改造前的完成定义

  • 原始基线、许可证、依赖和 94 个运行时组件已登记;OceanWay 迁移扩展与 OceanParticleBackground 兼容导出单独标注。
  • 共享 L1 原子组件有统一入口和状态属性。
  • React Bits/Ocean 动效有单一入口和性能边界。
  • 未构建组件在 /components 有可见清单卡片。
  • Agent Conversation、Generation Settings、Asset/Prompt/Work Browser、Admin Kit 完成 props/view-model 固化并有实际预览;上传、查询、权限和写操作仍由页面 adapter 接管。
  • Canvas/Drama domain kit 完成视觉状态矩阵和合成数据预览;几何、任务、审阅、生成和 持久化状态仍留在对应业务域。
  • Auth/Install kit 完成字段、注册门禁、邮箱验证码/MFA、步骤和安全状态的 view-model-only 预览;InstallWizardKit 的令牌输入只保存在组件客户端内存并通过回调上交;Session、数据库 检查、管理员创建和安装写入仍留在页面 adapter。
  • Foundation smoke E2E 已覆盖首页、组件实验室、桌面主题切换、390/430 移动端导航和 Reduced Motion/WebGL fallback(本地系统 Chrome:12 total,10 passed / 2 skipped,含 setup);这只是候选 运行证据,不替代用户视觉确认或正式 Testing。
  • 以上 kit 在目标路由逐页替换,且通过页面、响应式和键盘回归。

本清单完成后,下一项工作应是按页面切片建立迁移任务;不在本阶段把候选组件误标为“全项目 已改造”。

On this page