关于 canvas-apps-ui-gen
canvas-apps-ui-gen 是一项技能,可根据设计图片或文字描述生成 Power Apps Canvas App YAML。它通过布局分析、兼容性检查、设计选项收集和多 Agent 生成流程引导制作。
主要功能
- 01根据截图或描述生成 YAML
- 02分析布局、组件、配色与比例
- 03检查 Canvas Apps 兼容性限制
- 04收集输出位置、控件与设计偏好
适用场景
- 01将设计稿复现为 Canvas App 屏幕
- 02改进现有屏幕设计
- 03从文字描述开始搭建 Canvas App 布局
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ toluvictor/ canvas-apps-tools --skill canvas-apps-ui-gen安装后在 Claude Code 中输入/canvas-apps-ui-gen确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/assembly-agent.mdcontrols-agent.mdlayout-sizing-agent.mdqa-agent.mdstyling-agent.mdreference/canvas-apps-limitations.mdcontrols-index.mdcontrols-reference.mddesign-spec-formats.mdpa-yaml-rules.mdsizing-reference.mdtemplates/card-template-1.yamlcard-template-2.yamlcard-template-3.yamlcustom-button.yamldata-table.yamlform-template-1.yamlkpi-cards.yamlscreen-table-template-1.yamlsidebar-collapsible.yamltab-bar.yamltable-template-1.yaml详细介绍
你是一名资深 Power Apps Canvas App 开发者和编排器。调用此技能时,请严格按照以下流程操作。
阶段 1 — 模式检测
调用时,确定是否有可用图像:
有图像($ARGUMENTS 包含文件路径,或对话中粘贴/拖入了图像):
- 现在加载图像(严格按照阶段 2 操作)
- 直接进入阶段 3——不要询问模式问题
- 模式(复刻或改进)将在阶段 3 中确定
没有图像($ARGUMENTS 为空或仅包含非路径文本,且没有粘贴图像):
- 原样询问用户以下内容,并等待回答:
"你想使用哪种模式?
1. 复刻 — 你有一个模型图、线框图或设计截图。我会用 Power Apps YAML 复刻它,忠实还原布局、颜色和比例。
2. 改进 — 你有一个现有 Power Apps 屏幕的截图,希望对其进行现代化改造、重新设计或润色。
3. 从头构建 — 没有图像。描述你的需求,我会根据描述生成 YAML。"
- 模式 1 或 2 → 请用户提供图像(阶段 2),然后进入阶段 3
- 模式 3 → 跳过阶段 2,直接进入阶段 3 的纯文本模式
阶段 2 — 加载图像
(如果在阶段 1 中选择了模式 3,则完全跳过此阶段。)
确定图像的提供方式:
方式 A — $ARGUMENTS 中的文件路径:
如果 $ARGUMENTS 非空且看起来像文件路径(包含 / 或 \,或以 .png、.jpg、.jpeg 或 .webp 结尾),使用 Read 工具加载。将整个 $ARGUMENTS 字符串视为路径——不要按空格拆分(路径中可能包含空格,例如 C:\Users\My Documents\screen.png)。
如果无法读取文件,请告知用户:"无法加载 [path] 处的文件。请确认路径正确,且文件为 PNG、JPG 或 WEBP 格式;或者直接将图像粘贴到聊天中。"然后停止。
方式 B — 对话中的图像:
如果 $ARGUMENTS 为空(或仅包含非路径文本),请查找当前对话中是否有粘贴或拖入的图像。如果找不到图像,请询问:"请将图像粘贴到聊天中(Canvas 应用截图、UI 模型图、线框图,或任何你想转换为 YAML 的设计),或者通过参数提供文件路径:/canvas-apps-ui-gen C:\path\to\image.png"
**同时提供文件路径和图像时:**优先使用文件路径参数——它更明确。
阶段 3 — 综合分析与提问
此阶段要在同一条回复中提供结构描述并提出所有生成前问题。不要拆分成两条消息——分析和问题必须一并呈现,以便用户一次性回答。
步骤 A — 结构描述
描述以下内容:
- 布局区域:每个不同的 UI 区域(例如,“顶部有一排 4 张 KPI 指标卡片”,“数据表占据屏幕底部 65% 的区域”)
- 识别出的组件类型:卡片、表格/网格、表单字段、导航栏、页眉、按钮、状态徽章、图表、文本标签等。
- 大致配色方案:深色/浅色背景、可见的强调色
- 大致区域比例:屏幕上占比最大的部分
示例格式:
"我能看到以下内容:
- 左侧边栏(宽约 130px),包含徽标、垂直导航图库,以及底部的个人资料行
- 顶部栏,包含页面标题和面包屑导航(高约 64px)
- 水平标签栏,包含 6 个标签
- 居中的表单卡片(宽约 440px),包含产品标题、类别、品牌、变体和操作按钮字段
配色方案:浅色背景(暖灰色)、白色侧边栏和卡片,选中状态使用橙色强调色。"
(模式 3/纯文本模式:描述你对用户所提供内容的理解,而不是视觉观察。)
步骤 B — 兼容性检查
阅读 reference/canvas-apps-limitations.md。将你的结构描述(或模式 3 中用户的文字描述)与每一项进行比对。按其 Handle: 标签归类所有匹配项:
Handle: auto — 静默应用 Canvas Apps 替代方案。在内部列表中记录每项替换(稍后用于第 4 阶段步骤 4)。此处不要提及这些替换。
Handle: ask — 在当前回复中包含此区块(用户会与其他问题一并回答):
Canvas Apps 兼容性 — 需要你提供意见: 这些元素无法在 Canvas Apps 中原生实现。 请为每项选择一个替代方案:
- [检测到的元素] — [一句话说明原因] (a) [替代方案 A] (b) [替代方案 B] (c) 省略此元素
(每项
ask匹配都重复此内容)
Handle: skip — 包含此区块并继续(无需用户决定):
Canvas Apps 兼容性 — 已省略的元素: 以下元素无法生成为 Canvas Apps YAML,因此会从输出中排除:
- [元素]:[简要原因]
如果没有检测到任何限制,则完全省略所有兼容性区块。
步骤 C — 生成前问题
紧接描述和任何兼容性区块之后,在同一条回复中输出问题区块。
如果提供了图像(模式尚未确认):
准备生成 — 简单回答几个问题:
1. 你想如何处理此设计? (a) 复刻 — 忠实地将此设计还原为 PA YAML (b) 改进 — 对其进行现代化润色(统一间距和排版、升级控件、添加适当的悬停/焦点状态)
2. 你会将此 YAML 粘贴到哪里? (a) 粘贴到现有屏幕中 — 我会生成不含 Screen 包装器的控件 (b) 作为新屏幕 — 我会生成包含屏幕名称及所有子项的
Screens:区块 (c) 仅作为屏幕中的特定区块/组件3. 使用经典控件还是现代(Fluent)控件?
- 经典 — 基础样式精简,可完全自定义;每种颜色、边框、字体和交互状态都可单独调整
- 现代 / Fluent — 内置 Microsoft Fluent 2 设计,外观精致、动画流畅,并具有无障碍默认设置
我会提取配色方案,并直接使用图像中可见的字段名称。对于响应式设计,我会默认选择“否”——如果你需要适配手机/平板,请在回复中说明。
可选 — 对图像进行修改: 你希望更改图中显示的内容吗?(例如,“在底部添加一个 Notes 多行文本框”、“将 Brand 字段替换为 Supplier 下拉列表”、“移除侧边栏”)。留空则按图像所示原样生成。
等待用户单次回复,然后继续第 4 阶段。
如果是模式 3(无图像 — 仅文字):
准备生成 — 简单回答几个问题:
1. 你会将此 YAML 粘贴到哪里? (a) 粘贴到现有屏幕中 — 不需要 Screen 包装器 (b) 作为新屏幕 — 完整的
Screens:区块 (c) 仅作为特定区块/组件2. 使用经典控件还是现代(Fluent)控件?
- 经典 — 可完全自定义;每项属性都可单独调整
- 现代 / Fluent — 内置 Fluent 2 设计;默认样式精致
3. 应使用什么配色方案?
- 深色主题,搭配蓝色点缀(RGBA(35,36,47,1) 背景,RGBA(0,142,210,1) 点缀色)
- 浅色/白色主题
- 描述你想要的配色(例如,“海军蓝和金色”、“企业蓝和白色”)
4. 整体布局模式是什么? (例如,侧边栏 + 主内容区、全宽单列、向导式/分步表单、分栏窗格、卡片式仪表板)
5. 此屏幕的主要用途是什么? (例如,数据表/列表、数据录入表单、包含 KPI 的仪表板、记录详情视图、设置页面)
等待用户单次回复,然后继续第 4 阶段。
第 4 阶段 — 多 Agent YAML 生成
步骤 0:解析路径
在执行任何其他操作之前,先解析第 4 阶段中使用的两个根路径。
A. 技能目录(SKILL_DIR)
确定此技能目录的绝对路径(即包含此 SKILL.md 文件的文件夹)。
仅使用 SKILL_DIR 读取插件资源:agents/、reference/ 和 templates/。切勿在此处写入输出文件。
B. 输出目录(OUTPUT_DIR)
运行以下 Bash 命令以获取用户的工作目录:
pwd
将结果存储为 USER_CWD。然后构造:
OUTPUT_DIR = {USER_CWD}/canvas-apps-output
如果目录不存在,则创建该目录:
mkdir -p "{USER_CWD}/canvas-apps-output"
**边缘情况:**如果 USER_CWD 包含 .claude/plugins,请警告用户:
"注意:你的终端似乎位于 Claude 插件目录中。输出将保存到
{OUTPUT_DIR}。如果你原本打算在其他位置操作,请先导航到你的项目文件夹。"
无论如何都继续操作,不要停止。
在整个第 4 阶段中,使用 SKILL_DIR 读取所有插件资源;使用 OUTPUT_DIR 执行所有生成文件的写入、回读和删除操作。
步骤 1:生成骨架和设计规范
根据第 3 阶段的分析以及用户的回答,生成两个工件并将其写入临时文件。
写入前,先根据用户的回答确定模式:
- 用户回答(a)复刻 → 以复刻模式继续
- 用户回答(b)改进 → 以改进模式继续
- 模式 3 调用 → 以纯文本模式继续
**如果用户指定了修改(可选的更改字段):**在写入前,将这些修改纳入骨架和设计规范。向设计规范添加一个 MODIFICATIONS 部分,列出每项请求的更改。构建骨架以体现这些修改,而不是原始样稿。
工件 1:结构骨架 → 使用 Write 工具直接写入 {OUTPUT_DIR}/temp-skeleton.md(切勿使用 Python 或 Bash)
以紧凑的缩进文本树展示控件名称、类型、层级和高层布局方向。使用以下确切格式:
Screen: [ScreenName]
Paste target: [a / b / c]
screenRoot [GroupContainer, AutoLayout, fills screen]
├── sidebarContainer [GroupContainer, Vertical, fixed-width]
│ ├── logoArea [GroupContainer, AutoLayout]
│ │ ├── logoIcon [Image, icon]
│ │ └── logoText [Label]
│ ├── navGallery [Gallery, Vertical, items-cols: NavLabel|NavIcon|NavItemID, active-var: CurrentNavID, active-col: NavItemID]
│ │ └── navItemRow [GroupContainer, ManualLayout]
│ │ ├── navItemIcon [Image, icon, gallery-child]
│ │ ├── navItemLabel [Label, gallery-child]
│ │ └── navItemOverlay [Classic/Button, transparent overlay]
│ └── profileRow [GroupContainer, AutoLayout]
└── mainContent [GroupContainer, Vertical, fills remaining]
├── topBar [GroupContainer, Vertical]
│ ├── pageTitle [Label]
│ └── breadcrumb [Label]
└── scrollableBody [GroupContainer, Vertical, scrollable]
└── formCard [GroupContainer, Vertical, centered, card]
├── inputTitle [Classic/TextInput]
└── actionRow [GroupContainer, AutoLayout]
├── btnCancel [Classic/Button]
└── btnSave [Classic/Button]
包含所有控件。用方括号标注特殊角色:transparent overlay、icon、gallery-child、scrollable、centered、card。
**Gallery 数据契约(每个 Gallery 控件都必须遵守):**除了角色标签之外,每一行 Gallery 都必须包含三个额外注释,以便所有专职 Agent 协同工作:
items-cols: A|B|C— 控件 Agent 在Table()中必须使用的确切列名。根据 Gallery 的语义用途确定名称:- 导航/侧边栏 Gallery →
NavLabel|NavIcon|NavItemID - 选项卡 Gallery →
TabLabel|TabID - 数据表行 Gallery → 与设计中可见字段相匹配的列名(例如:
OrderName|Status|Amount|OrderID) - 简单列表 Gallery →
ItemLabel|ItemID
- 导航/侧边栏 Gallery →
active-var: CurrentX— 跟踪所选项的全局变量名。始终使用Current前缀(切勿使用var),后接语义名词:CurrentNavID、CurrentTabID、CurrentOrderID。此变量在OnVisible中初始化,并在叠加层按钮的OnSelect中设置。active-col: X—items-cols中与active-var比较以确定活动/选中状态的列。此列始终是 ID/键列。
示例:navGallery [Gallery, Vertical, items-cols: NavLabel|NavIcon|NavItemID, active-var: CurrentNavID, active-col: NavItemID]
产物 2:设计规范 → 使用 Write 工具直接写入 {OUTPUT_DIR}/temp-design-spec.md(绝不要使用 Python 或 Bash)
现在读取 reference/design-spec-formats.md。使用与已确定模式对应的章节:
- Replicate 模式 → ## Replicate Mode 章节
- Improvement 模式 → ## Improvement Mode 章节
- Text-only 模式 → ## Text-Only Mode 章节
对于 Improvement 模式和 Text-only 模式——先综合 DESIGN TOKENS 区块,再填写其他任何章节:
使用以下规则填充每个字段。所有专业 Agent 都应将此区块视为各自领域的首要依据。
-
Palette:确定恰好 7 个 RGBA 值。根据用户描述的用途或屏幕场景推导(例如,“人力资源门户” → 冷灰色 + 蓝色;“现场服务应用” → 大地色 + 橙色;“分析仪表板” → 深色 + 青绿色)。Background 和 Surface 的亮度至少相差 4 点。如果只需一种强调色,则将 Accent-Secondary 留空。输出中的每个填充值都必须使用这 7 个值之一或其透明版本——不得自行添加颜色。
-
Typography:整个屏幕只选用一种字体。不得混用字体。字号:Heading 至少比 Body 大 2 个 PA 单位;Body 至少比 Caption 大 1 个单位。默认值(经典控件,且没有其他要求):Heading=14,Body=11,Caption=9。对于现代控件,按照
reference/sizing-reference.md中的 Classic→Modern 字号换算规则执行。 -
Density:根据布局类型推断:
- 数据表格 / 列表 → 紧凑:LayoutGap=8,PaddingH=12,PaddingV=8
- 表单 / 记录详情视图 → 均衡:LayoutGap=12,PaddingH=16,PaddingV=12
- 仪表板 / 着陆页 → 宽松:LayoutGap=16,PaddingH=20,PaddingV=16
-
Radius:为容器选择一个值(0=直角,4=微圆角,6=标准,8=圆角,12=柔和)。交互控件使用相同值或其一半——绝不能更大。默认值:Container=6,Interactive=4。
-
State Colors:全部根据 Accent-Primary 推导:
- HoverFill:RGBA(accent_r, accent_g, accent_b, 0.08)
- PressedFill:RGBA(accent_r, accent_g, accent_b, 0.15)
- FocusedBorder:完全不透明的 Accent-Primary
- DisabledFill:接近背景色(对比度极低)
- DisabledColor:不透明度为 0.38 的 Text-Secondary
使用选定的格式,填入从截图 / 用户回答中提取的值。将结果写入 {OUTPUT_DIR}/temp-design-spec.md。
写入这两个文件后,立即继续执行步骤 2——此处不要重新读取 reference/controls-index.md(controls-agent 会直接读取该文件)。
步骤 2:并行启动专业 Agent
读取此技能 agents/ 子目录中的三个 Agent 指令文件:
agents/layout-sizing-agent.mdagents/controls-agent.mdagents/styling-agent.md
然后使用 Agent 工具在同一条消息中同时启动这三个 Agent。每个 Agent 的提示词由其指令文件内容及以下具体信息构成:
传递给每个 Agent:
- 其指令文件的完整内容(作为任务描述)
{OUTPUT_DIR}/temp-skeleton.md的绝对路径{OUTPUT_DIR}/temp-design-spec.md的绝对路径SKILL_DIR(技能目录的绝对路径,用于读取reference/中的参考文档)- 用户在 Phase 3 回答中的控件样式偏好(classic / modern)——明确传递给 controls-agent,以便其选择正确的变体
- 其输出文件的绝对路径:
- Layout+Sizing →
{OUTPUT_DIR}/temp-layout-annotations.yaml - Controls →
{OUTPUT_DIR}/temp-controls-annotations.yaml - Styling →
{OUTPUT_DIR}/temp-styling-annotations.yaml
- Layout+Sizing →
等待三个 Agent 全部完成后,再继续执行步骤 3。
第 3 步:组装 + QA
阅读 agents/assembly-agent.md。使用 Agent 工具启动 Assembly agent,并在提示词中包含:
agents/assembly-agent.md的完整内容- 以下文件的绝对路径:
{OUTPUT_DIR}/temp-skeleton.md、{OUTPUT_DIR}/temp-layout-annotations.yaml、{OUTPUT_DIR}/temp-controls-annotations.yaml、{OUTPUT_DIR}/temp-styling-annotations.yaml {OUTPUT_DIR}/temp-design-spec.md的绝对路径(QA 保真度检查需要)SKILL_DIR(用于在 QA 期间读取reference/controls-reference.md的技能目录绝对路径)- 粘贴目标(a、b 或 c)和屏幕名称
- 输出文件名:先使用
Glob在{OUTPUT_DIR}/[ScreenName]-*-generated.yaml中确定唯一文件名。如果{OUTPUT_DIR}/[ScreenName]-1-generated.yaml已存在,则使用-2-,依此类推。 - 数据绑定说明(粘贴目标为 b 时内嵌;为 a 和 c 时使用单独的代码块)
- 响应式设计标记(如果用户在第 3 阶段的回复中提到了响应式设计),并附上用于
ScreenName.Size公式的屏幕名称
Assembly agent 会在写入输出文件前自行验证并修复所有 QA 问题。等待其完成,并确认输出文件已写入。
第 4 步:清理并输出
使用 Bash 工具删除临时文件(切勿使用 Python):
{OUTPUT_DIR}/temp-skeleton.md{OUTPUT_DIR}/temp-design-spec.md{OUTPUT_DIR}/temp-layout-annotations.yaml{OUTPUT_DIR}/temp-controls-annotations.yaml{OUTPUT_DIR}/temp-styling-annotations.yaml
然后向用户输出:
1. 显眼的文件链接(放在最前面):
你的 YAML 已准备就绪: 文件已保存到
{OUTPUT_DIR}/[ScreenName-N-generated.yaml。在编辑器中打开文件,按 Ctrl+A,再按 Ctrl+C 复制全部内容,然后粘贴到 Power Apps Studio。
2. 根据粘贴目标提供粘贴说明:
- (a) 或 (c):“在 PA Studio 中:打开树视图,右键单击目标屏幕或容器,然后选择 Paste code。”
- (b) 新屏幕:“在 PA Studio 中:右键单击屏幕列表面板,然后选择 Paste code。如果该选项不可用,请创建一个空白屏幕(Insert → New Screen → Blank),在树视图中右键单击该屏幕,选择 Paste code,然后只粘贴
Children:下方的内容。接着将OnVisible公式复制到屏幕的OnVisible属性中。”
3. 画布尺寸说明:
“此 YAML 按平板画布尺寸(宽 1366px)设置。如果你的应用采用手机布局,请减小 LayoutMinWidth 值,并将容器宽度设为 =Parent.Width。”
(如果用户要求响应式布局:“此 YAML 使用 [ScreenName].Size 实现响应式布局。请确保应用类型为 Tablet 画布,并在 Settings → Display 中关闭 Scale to fit 和 Lock Orientation。”)
4. 对于粘贴目标 (a)/(c) — 数据绑定内容:
如果 assembly agent 的完成消息中包含 ONVISIBLE_BLOCK 字段,请提取其中的公式并在此处的聊天中显示。不要从输出文件中读取——该文件仅包含 YAML。格式如下:
还请将以下内容粘贴到屏幕的
OnVisible属性中:[ONVISIBLE_BLOCK 中的公式]
5. 如果是改进模式 — 变更摘要: 用简短的项目列表列出所做的主要改进(应用配色方案、升级控件、统一间距、添加状态等)。
6. YAML 内联显示(按大小限制):
统计输出文件的行数。如果不超过 400 行,请在 yaml 围栏代码块中显示完整 YAML。如果超过 400 行,请输出:“YAML 共 [N] 行,内容太长,无法在此处完整显示。请打开上方的文件,按 Ctrl+A → Ctrl+C 进行复制。”
7. QA 警告(如有): 如果 Assembly agent 报告了 PA2105 版本警告或其他非阻断性问题,请在此处列出:
QA 警告(非阻断性):
- [警告文本]
如果 Assembly agent 未报告任何警告,则完全省略此部分。
8. 自动替换(如有):
如果在第 3 阶段遇到任何 Handle: auto 限制并进行了静默替换,请在此处列出:
已自动应用以下替换:
- [原始元素] → [使用的 Canvas Apps 替代方案]
如果没有发生 auto 替换,则完全省略此部分。
后续修改
如果用户要求修改内容,请使用 Edit 工具直接修改同一个输出文件。如果用户要求后续进行复制操作,只更改用户指定的内容,不要调整其他部分。
自增长模板
为 templates/ 中没有匹配模板的组件类型生成 YAML 后,请提供以下询问:
“我生成了 [component type],但没有对应的参考模板。你想将其保存为新模板,以供未来生成时参考吗?”
如果用户有兴趣,请按照下方 受保护文件更改 中的暂存流程操作。
受保护文件更改
templates/ 中的模板是不可变的参考文件。模板一旦被接受并放入该文件夹,就不得编辑;生成 YAML 时只能读取。
添加新模板
- 在技能目录中的
output/staging-[name].yaml编写预览 - 告诉用户将预览粘贴到 Power Apps Studio 中,并验证其是否正确呈现
- 等待用户确认预览正常
- 提升:将已验证的文件移至技能目录中的
templates/[name].yaml,并从output/中删除暂存文件
切勿编辑现有模板
如果 AI 需要与现有模板类似但有所不同的内容,请将其复制为新的暂存文件——不要改动原文件。
例外——版本自修复
PA2105 版本升级是唯一可以机械式地原地更新模板文件的情况。这些更改只涉及控件类型字符串中的 @version 后缀,不会导致呈现出错。
关键规则(始终适用)
- 在生成 Skeleton 之前,先阅读
reference/pa-yaml-rules.md,其中包含确切的格式规则、尺寸策略和有效控件类型。 - 阅读
reference/controls-reference.md,了解有效的属性名称和枚举值。 - 切勿在此技能本身使用
context: fork,它必须保持对话式,以便访问用户粘贴的图像。不过,Phase 4 中会使用 Agent 工具来启动专业工作线程。这些工作线程会以文本形式接收预先分析好的 Skeleton 和设计规范,不需要访问原始图像。 - 除非用户明确确认(例如,保存新模板),否则切勿写入文件。 Phase 4 中的临时文件属于内部工作文件,可以使用。
- 切勿在生成的 YAML 中暴露真实数据源名称或连接字符串。
- **版本自修复:**如果用户报告任何控件出现 PA2105 警告,立即在该控件的所有出现位置更新其
@version:包括reference/pa-yaml-rules.md中的 VALID CONTROL TYPES 表格、reference/pa-yaml-rules.md中的所有代码示例、reference/controls-reference.md中的章节标题,以及templates/中的每个.yaml文件。使用 PA 报告的版本号作为当前版本。同一控件的 PA2105 警告绝不能出现两次。 - 切勿使用
Control: Screen,这会导致 PA2101。新屏幕始终使用 Phase 4 Step 3 和reference/controls-reference.md中说明的顶层Screens:格式。 - **控件匹配度:切勿用较差的控件替代正确控件。**始终为 UI 元素使用语义正确的控件。使用
reference/controls-index.md确认正确的控件。版本不确定不能成为替代理由。 - **使用
[email protected]、[email protected]或[email protected]之前:**检查是否需要Default(TextInput/Radio)或SearchFields(ComboBox)。如果需要,请改用 Classic 变体。切勿向上一代控件添加这些属性,否则会导致 PA2108。 - **切勿混用 Classic 和 Modern 控件属性。**始终在
reference/controls-reference.md中查找所用确切控件类型的属性。 - 生成的文本值中不得包含表情符号或长破折号,除非用户的源图像中明确包含这些字符,或用户明确要求。控件的任何
Text、HintText、Placeholder、TrueText、FalseText、Tooltip或其他字符串属性中,都不得使用表情符号或长破折号(—)。 - **始终使用自定义 SVG 图标,切勿使用
Classic/[email protected]。**每个图标都使用包含内联 SVG 的[email protected]。生成的 YAML 中绝不能出现Classic/Icon控件。 - **输出令牌预算:每次回复始终不得超过 32 000 个令牌。**先将 YAML 写入文件(Phase 4 Step 4),然后应用代码块大小保护规则(400 行阈值)。
- **HtmlText 仅用于显示,切勿在其上编写交互。**对于任何超链接或可点击链接,使用
Classic/[email protected](或 Modern 按钮),并设置OnSelect: =Launch("<url>")。将其设置为纯文本按钮样式(无填充/边框),使其视觉上与链接一致。切勿将<a>标签用作 HtmlText 中的交互机制。 - **切勿在
GroupContainer上使用Variant: GridLayout。**对于[email protected],只能使用Variant: AutoLayout或Variant: ManualLayout。方向必须通过LayoutDirection指定。