API v1
Documentation/清单参考

widgets

声明超级块页面、尺寸、状态订阅和实例操作。

Plugin API v1

Documentation content is currently available in Simplified Chinese.

contributes.widgets 中的每一项对应一种可放置的超级块。完整开发过程见创建超级块。

#页面与配置

page 相对插件根目录,configPage 相对主页面所在目录。配置字段使用 WidgetSettings,它与动作的 Schema分开定义。

#手势与页面交互

如果组件是一个只读显示界面,可以通过 customizableGestures 让用户配置点击、长按等动作。如果页面自己处理按钮或滑块交互,使用 instanceActions 向后台提交操作。

#Widget

清单位置:manifest.contributes.widgets[]。

#Widget.id

string · 必填

超级块类型 ID,在本插件的 widgets 中唯一。

#Widget.title

string · 必填

目录中显示的名称。

#Widget.description

string · 可选

组件用途说明,最多 240 个字符。

#Widget.category

string · 可选

超级块目录分类,最多 48 个字符。

#Widget.page

string · 必填

主页面路径,例如 pages/counter/index.html。页面放在独立资源目录中。

#Widget.configPage

string · 可选

配置页面相对主页面目录的路径,例如 settings.html,最多 128 个字符。

#Widget.defaultSize

WidgetSize · 必填

默认占用的网格大小。

#Widget.allowedSizes

WidgetSize[] · 可选

用户可选的大小,最多 16 项,并包含 defaultSize。省略时只允许默认大小。每个规格都应验证实际页面内容区的排版;网格占位不等于 iframe 宽高,详见响应式布局最佳实践。

#Widget.stateSource

string · 可选

页面订阅的状态来源 ID,该来源应允许超级块读取。

#Widget.customizableGestures

string[] · 可选

可配置的手势:click、doubleClick、swipeLeft、swipeRight、longPress。填写非空、不重复的列表。

#Widget.instanceActions

WidgetInstanceAction[] · 可选

页面提交给后台的操作,最多 16 项。

#Widget.settingsSchema

WidgetSettings · 可选

每个放置实例的配置字段,见 WidgetSettings。

#WidgetSize

清单位置:manifest.contributes.widgets[].defaultSize。

#WidgetSize.cols

integer · 必填

横向占用的网格数,1–16。

#WidgetSize.rows

integer · 必填

纵向占用的网格数,1–16。

#WidgetInstanceAction

清单位置:manifest.contributes.widgets[].instanceActions[]。

#WidgetInstanceAction.id

string · 必填

实例动作 ID,使用小写字母开头,可包含小写字母、数字和 -,最多 32 个字符。

#WidgetInstanceAction.title

string · 可选

流程选择器显示的名称,最多 64 个字符。

#WidgetInstanceAction.argsSchema

Schema · 可选

实例动作参数,根 type 为 object。省略时只接收空对象。

#WidgetInstanceAction.execution

ActionExecution · 可选

使用与普通动作相同的超时、并发和资源声明。默认与同插件普通动作共用串行队列;可显式声明 resource、hostResource 或 concurrency。

#可复用的数值控件

#Widget.valueControl

true · 可选

声明此页面是由用户绑定目标的数值控件。要求宿主能力 widgets.valueControl v1。用户在“编辑超级块 → 控制目标”中选择显式声明 Action.valueControl 的数值设置动作;参数由声明确定,范围和默认反馈自动填入,用户可调整范围、更换或清除反馈。其他必需参数在同一界面填写;目标可以属于任何已安装、兼容的平台插件,无需双向依赖。控制目标也可以是可写入的数字类型自定义状态,要求宿主能力 widgets.stateControl v1;宿主按状态 Schema 校验范围与步长,状态不可用或超出可见范围时绑定无效。

页面先通过 window.FlyonDeckWidget.getControlValue() 获取 {minimum,maximum,step,value,available,title,icon?,updatedAt?,message?};value 为 null 表示尚无可用反馈。调用 setValue(number) 提交目标单位中的实际值。用户绑定保存在宿主布局,页面不能传入目标插件、动作、反馈路径或固定参数。设备布局也不包含绑定详情。

首版支持显式开放的普通动作顶层 number/integer 参数,不支持枚举数值、流程输入、跨实例私有状态。反馈必须是全局可见、允许小组件读取的全局数值字段;没有反馈也可只写。目标停止、状态缺失或配置无效会显示不可用,不自动替换目标。

框架保留 set-value 实例动作和 control-value 数据查询名称;声明 valueControl 后不能再为同一小组件声明这些端点。宿主重新读取真实布局并走统一动作执行器;旧的排队请求在绑定改变后失效。

内置“通用控件 → 通用滑块”使用此协议,拖动只改变预览,松手或键盘提交时执行;每 1.5 秒读取反馈,宿主合并同一实例的待执行数值。它不依赖音量、天气等业务插件。

动作反馈绑定可选保存 state.availabilityPath,由动作的默认反馈声明初始化,用户可以更换或清除。该路径必须指向反馈来源中已声明的布尔字段;值为 true 才使用数值,缺失或为 false 时反馈不可用。没有声明时不检查可用性,宿主不会对 available 等业务字段名作特殊处理。

绑定策略集中在独立的 WidgetControlBindings 模块,通过布局、动作目录、状态和执行入口工作;它不依赖 Electron、HTTP、WebSocket 或具体控件插件。通信层仅识别框架端点并转交。不可用标题取自控件声明,无法取得声明时使用“数值控件”。