Type of source: 2-way → 3-way (NDI)V4-1827 — RPS One to support NDI as Live Input via ETH module. US-3 existing-product increment · intent 场景 2.2 · deliverable = single-file HTML hi-fi mockup.
既有页增量:来源类型从二选一改为三选一,新增 NDI;内容区随选中项切换;选择行与内容区之间加分隔线;顶部导航不新增页签。
HDMI/SDI/USB · IP Source only · no divider · no NDI anywhere / 现网基线:二选一、无分隔线、产品无 NDI
HDMI/SDI/USB
Local input active → content area shows a passive inline hint only (no control, no action) / 本机输入生效,内容区只放一条被动提示,不放任何控件
Local input active — no configuration required.
IP Source
Existing 6-card source grid kept verbatim (preview + IP + To: + Apply) + Merge All IP Source; only the divider above it is new / 既有六卡网格与合并按钮原样保留,上方分隔线是本轮新增
NDI — NEW
Single-source NDI form; no per-Tx enable toggle (selecting NDI already means “this Tx uses NDI”) / NDI 单源表单,不设 per-Tx 启用开关:选中 NDI 本身即代表启用
Type of source: 2-option → 3-option exclusive, 3rd option = NDI. One control, one signal per Tx. 同一个控件从二选一改三选一,第三项 NDI;每个 Tx 仍只有一路信号。HDMI/SDI/USB → passive hint · IP Source → existing 6-card grid · NDI → NDI form. 内容区新增第三态,随选中项切换。Merge All IP Source — reused verbatim. 六卡网格内部与合并按钮原样复用。NDI radio already carries that meaning, a separate toggle would duplicate it. 刻意不加 per-Tx 启用开关——选中 NDI 本身就是启用,再加开关是语义重复。| Element | Source | Evidence | State |
|---|---|---|---|
| Source-type radio ×3 | DS library radio (dark theme=on, status off/on) | catalog key 9f07746f…; visuals mirrored from src/components/Radio/Radio.vue | reused; 3rd option fills the already-reserved hidden group — no new element |
| Source card ×6 | product-local IP Source Item set 1012:8880, Tag=No Source / Tag=Video Source | _generated/product-pattern-index.json — 84 instances in this file | reused (product pattern beats re-deriving from DS) |
| Divider | library line (horizontal) → --line-divider-light | design contract §9 | new |
Apply ×N + Merge All IP Source | DS Button — filling, size M, radius square; green = primary confirm, gray = bulk action | mirrored from src/components/Button/Button.vue | one single variant for every Apply (consistency is a contract acceptance item) |
Source Name | input box/line size M inside Form Item (Layout=1 line, Label Width=120 px) | mirrored from src/components/Input/Input.vue + --form-item-* tokens | new |
URL: ndi:// | select box/line combobox (dual mode: dropdown = Discovery, typing = Manual) | mirrored from src/canonical/SelectBoxBase.vue | new; registered deviation — Drop down List/Select was unavailable |
| Top nav | DS Tab/Item Tag=line, activeColor=green | mirrored from src/components/Tab/TabItem.vue | unchanged, no tab added |
| Icons | Arrow/Dropdown · Arrow/Previous · Arrow/Next · Video/Camera · Video/Camera-off | paths copied verbatim from dist/icons/svg/** | library-only, zero hand-drawn SVG |
| Colour / spacing / type | src/tokens/variables.css dark block, inlined verbatim | no hex outside that block | — |
备注:库里存在 indicator/NDI 图标(2429:16375)。本稿没有用它——设计合同的内容清单里 NDI 只是一个 radio 文本项,加图标等于新增未批准元素。若 owner 想给 NDI 选项加品牌标识,这个图标已经在库里、可直接取。
1011:7877 / 7862:1729 were never opened. Control colours, borders, radii, type scale and control heights are mirrored line-for-line from DS source and are checkable; page-level geometry is a reconstruction — column widths, paddings, card size and the exact frame width (here: the --bp-xl 1280px token). M17 要求先打开宿主 canonical 帧实测再建;本轮做不到,页面级几何是重建值,不是实测值,交给 owner/dev 按真帧校正。IP Source because the contract calls this “the IP Source page”; the real label, the full tab list and its order are unverified. 页签集合与顺序未实测。Merge All IP Source position (here: content-area toolbar, right-aligned) and the Tx pager form (here: ‹ Tx1 › + 1 / 4) are not probed — only their existence and “top-right” are.Tag=No Source card interior: the variant axis is evidenced, but whether its IP / To: / Apply are greyed out is not. This mockup takes the minimal reading — only the preview differs, controls stay enabled — so the operator can still configure and Apply. Owner call if that is wrong.title are in; (b) JS truncation detection is not — a static mockup carries no script, so title is always-on rather than detection-gated. Dev must implement (b) in the real page.#2B2D42 / #33A4FD have no DS token behind them, and inlining raw hex would break the “colour hardcoding = bug” hard rule. This notes block therefore uses DS tokens (layer-2 surface + 4px brand rail) instead. 注释层配色按 code 侧硬规则用 token 表达,不搬 Figma 注释卡专用 hex。Source-empty · scanning · discovery-failed · connecting · Apply success/fail · oversized source name · 4-Tx binding overview. These are carried in the approved spec’s backlog, not silently dropped — the only feedback state in scope is the passive HDMI/SDI/USB hint, which exists solely to keep the content area from reading as a broken blank page.
这些反馈态在已批准 spec 里挂在 backlog,本轮不做;唯一在范围内的反馈是 HDMI/SDI/USB 那条被动提示,它的作用只是避免内容区看起来像坏页。