SuperAPI AI 工具集

advanced-visualization

设计与创作

查看项目

更新于 10-31 21:00

技能介绍

这是一份面向交互式回答实现的技能规范,适用于在决定采用自定义 UI 之后构建响应式、可访问的计算器、对比、图表和模拟。它遵循既定的渲染与可视化决策:基础表格由 A2UI 处理,该 sandbox 负责图表、示意图和自定义交互。要点是不要把所有回答都做成仪表盘,必要时使用多个分区,并在界面内包含标题、假设、单位、来源和操作说明。

流式与执行方面,generateSandboxedUi 需要按 initialHeight、placeholderMessages、css、html、jsFunctions、jsExpressions 的固定顺序发出内容;占位内容在 css 完成前保留,所有样式放在 css 参数中,html 在脚本运行前应可读。jsFunctions 保存具名声明,jsExpressions 保存小型同步调用,没有向先前调用追加表达式的 API。禁止使用 localStorage、sessionStorage、cookies、IndexedDB、同源 fetch、父级 DOM 或虚构的服务端点。预注入的 importmap 支持 three、gsap、d3 和 chart.js 的裸导入;jsFunctions/jsExpressions 是经典脚本,顶层 await 无效,需在异步函数内导入并处理失败。其他 CDN 脚本仅限 cdnjs.cloudflare.com、esm.sh、cdn.jsdelivr.net 和 unpkg.com。

数据与计算方面,应使用用户输入或真实工具数据,示意性数字须在界面中标注为示例数据;query_data 是打包的 CSV 而非当前指标,图表或天气卡片不会获取证据,不得编造实时数据或来源链接。需检查空输入、有限数字、范围限制和分母;HTML 的 min/max 本身不校验用户输入,应以 valueAsNumber 校验并在失败时阻止计算,提供可见标签和 role=status 的结果区,保持内部精度并用 Intl.NumberFormat 格式化输出,说明公式、单位和限制,不用 eval 执行用户输入的公式,重置默认值与结果需同步。

控件与布局方面,使用真实按钮、关联标签、键盘焦点和状态反馈;允许表单但提交须阻止导航,非提交按钮需 type="button"。标签页需实现键盘/ARIA 行为或改用带 aria-pressed 的简单按钮;排序使用表头按钮并基于同一源数据派生过滤和排序。用户或检索字符串须用 textContent 渲染。主题变量用于文本、表面和边框,画布颜色通过 getComputedStyle 解析。响应式网格应折叠而不溢出,图表容器有界并使用 resize observer,避免每次输入都重建图表,为 canvas 和 SVG 提供文本摘要或数据表,除颜色外使用标签和图案,并尊重减少动效偏好。三维场景使用 Three.js 的几何体、相机控件、光照、抗锯齿和响应式画布,可见地处理初始化失败,保持单一动画循环并按需暂停和释放资源;模拟重置应更新状态而非启动第二个循环。

代理跟进方面,过滤、排序、滑块和计算保持本地;用户点击的动作可通过 await Websandbox.connection.remote.sendPrompt({ text }) 发送包含已验证当前选择的简洁请求,等待期间禁用按钮,将错误显示为可重试状态并在 finally 中恢复,不得在加载或输入变化时触发消息。外部链接使用 Websandbox.connection.remote.openLink({ url }) 并传入 HTTPS URL,不得用 MCP 渲染器的全局对象替代这些桥接方法。

实时地理地图方面,地点、地理探索或明确要求实时地图时使用真实 Leaflet 地图,配置的提供方为 USGS The National Map(美国地形覆盖),不得声称全球详细覆盖,使用 maxNativeZoom:16 和 maxZoom:18,对不支持的位置说明覆盖限制。sandbox 仅允许来自指定 USGS 瓦片地址的瓦片图像,以及 upload.wikimedia.org 或 thumb.wikimedia.org 的来源照片,其他远程图像被阻止。不得用示意图替代实时地图,也不得编造实时交通、路线、营业时间或地理编码;地标坐标可能近似且须标注。Leaflet 1.9.4 通过脚本元素加载并等待 load 事件,CSS 通过 fetch 检查 response.ok 后插入 style 元素,使用 L.circleMarker 或内联 L.divIcon 标记避免远程标记图像,地图容器固定响应式高度,设置 scrollWheelZoom:false,保留缩放控件和拖动,并在 attribution 中包含指向美国国家地图的可见链接。仅请求当前可见瓦片,不做预取、批量下载或离线缓存,公共瓦片服务为尽力而为,须以 role=status 明确区分加载、已加载和失败状态。

行程与顺序落点方面,多站行程构建紧凑的编辑式行程卡:短标题和副标题、天数与站点数徽章、真实 300px 高的 Leaflet 地图,然后是水平可滚动的目的地卡片行。使用带编号的 L.divIcon 图钉、细连接线,动效是图钉逐个落到地图上,而非移动圆点或缓慢描绘的驾车路线。每张卡片含 110px 照片裁切、站点编号、地点名、天数和简短描述;照片通过 get_trip_stop_images 获取,仅使用返回的 image_url,显示艺术家和许可证并链接到 credit_url,无照片时用文本卡而非无关照片。真实底图不代表有效驾车路线,未实际检索路线数据时须标注连接线为“示意性行程连接——非已验证驾车路线”,不给出精确里程和驾车时长,实时封路和可用性未知,建议行程须明确标注为提议而非已预订或已验证。

宿主在最终 sandbox 中安装 window.createTripAnimator,应使用该共享控制器而非自建定时器。选项为 {stopCount, durationMs:6000, pinElements, onFrame, onState},会立即调用 onFrame,播放时传入 {progress, pinIndex, pinProgress, activeStop}。图钉在各自时段的前 55% 从上方 18px 下落并带克制弹性,其余时间为短暂停顿。pinElements 传入每个 L.divIcon 内部的编号圆点元素,不要传 Leaflet 外层标记元素。先创建所有标记,内部圆点初始 opacity:0 且编号文本可见;尊重减少动效时立即显示全部图钉。返回值暴露 play()、pause()、replay()、seek(stopIndex)(暂停)和 dispose(),onState 接收 playing、paused 或 complete。地图适配全部站点一次,播放期间相机保持稳定,不飞往各站也不自动滚动聊天;activateStop 仅在索引变化时更新类或 aria-current;到达时仅在站点变化时调整水平卡片条的 scrollLeft,不在每帧执行,自动播放期间不使用 scrollIntoView。手动点击图钉或卡片调用 controller.seek(index)。提供可见的暂停/继续和重放按钮,仅在活动站点变化时更新礼貌文本状态,完成时禁用暂停,重放从第一站开始。在至少一次底图瓦片成功加载并接入所有控件后启动一次,不随每个瓦片事件启动;页面隐藏时暂停,pagehide 时清理,屏幕外内容不得自行滚入视图。默认序列约六秒,不无限循环,错误在常规可见状态中处理。