在做 #3434(页面双 h1)时顺手读到,不在该 PR 范围内,单独记录。
apps/console/src/preview-samples.ts 的 page 样例(metadata-designer 预览画廊的 dev-only 素材)里声明了:
page: {
name: 'crm_welcome',
label: 'CRM Welcome',
regions: [{ name: 'main', components: [
{ type: 'heading', props: { level: 1, text: 'Welcome to the CRM' } }, // ← 未注册
{ type: 'text', props: { text: '…' } },
{ type: 'separator' },
{ type: 'heading', props: { level: 3, text: 'Quick links' } }, // ← 未注册
{ type: 'text', props: { text: '…' } },
]}],
}
heading 不是这个仓库里注册过的组件类型 —— 全仓 register('heading' / registerLazy('heading' 零命中。最接近的是 element:text 的 variant: 'heading'(packages/components/src/renderers/basic/elements.tsx:84,渲染成 h2,而且不认 level 这个 prop),以及 packages/components/src/ui/typography.tsx 里的排版原语(不经注册表)。所以这两个节点会落到 ComponentRegistry 的 fallback,画廊里的 page 样例展示的不是一个真页面。
同一组里的 text / separator 是好的:ui:text(renderers/basic/text.tsx:12)与 ui:separator(renderers/basic/separator.tsx:37)都带裸名别名。注意 element:text / element:divider 是 skipFallback: true,没有裸名别名 —— 命中的是 ui: 那两个,不是 element: 的。
影响面:dev-only,文件头就写着「Not shipped in production builds (referenced only by preview-gallery.tsx)」,今天没有用户会碰到,所以按 observation-class 记录、不带 pm:queue。值得修的理由是画廊的用途本身就是「给人看一个合法页面长什么样」,而它现在示范的是两个不存在的类型;顺带这也说明预览素材没有任何东西校验其 type 是否在注册表里。
可能的修法(未实现,留给 triage):把两行换成 element:text + variant: 'heading'/'subheading',或者改用 page:header 承载页面标题(与 #3434 的「页面标题归 page:header」一致);以及考虑给预览素材加一条「每个 type 都能在注册表里解析」的断言,免得下次再漂。
在做 #3434(页面双 h1)时顺手读到,不在该 PR 范围内,单独记录。
apps/console/src/preview-samples.ts的page样例(metadata-designer 预览画廊的 dev-only 素材)里声明了:heading不是这个仓库里注册过的组件类型 —— 全仓register('heading'/registerLazy('heading'零命中。最接近的是element:text的variant: 'heading'(packages/components/src/renderers/basic/elements.tsx:84,渲染成h2,而且不认level这个 prop),以及packages/components/src/ui/typography.tsx里的排版原语(不经注册表)。所以这两个节点会落到 ComponentRegistry 的 fallback,画廊里的page样例展示的不是一个真页面。同一组里的
text/separator是好的:ui:text(renderers/basic/text.tsx:12)与ui:separator(renderers/basic/separator.tsx:37)都带裸名别名。注意element:text/element:divider是skipFallback: true,没有裸名别名 —— 命中的是ui:那两个,不是element:的。影响面:dev-only,文件头就写着「Not shipped in production builds (referenced only by preview-gallery.tsx)」,今天没有用户会碰到,所以按 observation-class 记录、不带
pm:queue。值得修的理由是画廊的用途本身就是「给人看一个合法页面长什么样」,而它现在示范的是两个不存在的类型;顺带这也说明预览素材没有任何东西校验其type是否在注册表里。可能的修法(未实现,留给 triage):把两行换成
element:text+variant: 'heading'/'subheading',或者改用page:header承载页面标题(与 #3434 的「页面标题归page:header」一致);以及考虑给预览素材加一条「每个type都能在注册表里解析」的断言,免得下次再漂。