@unieai/uad-client-ui-settings-general
v0.1.21
Published
Settings ownerless-copy and product onboarding plugin: the General section, shell trigger/header chrome content, settings dictionaries, and the versioned welcome notice
Downloads
166
Readme
@unieai/uad-client-ui-settings-general
English | 中文
设置外壳、无特定功能归属文案与持久化产品引导 namespace。它以触发控件和模态设置面板占用 sidebar.settings,以打开该面板的「外挂程式」导航行填充 sidebar.nav.action,把 settings.section 账本投影成导航、把 settings.onboarding 账本投影成每次只挂载一个步骤的引导流程,并在设置页面上注册所有不属于单一功能的内容:触发器、标题栏与关闭控件内容、本地配置文件操作,「通用」分区及其 settings.general.item slot,以及 settings 字典。它渲染进的那些 slot 类型归 ui-settings——设置领域底座——所有;只有外壳自身的契约类型放在这里,因为它们引用 ui-sidebar 的 slot 类型,而底座不得依赖任何 ui-* 包。归具体功能所有的行(「权限」、「语言」、「外观」)、分区(「模型」)和条件式首次使用引导步骤仍由各自的功能包提供。
外壳不自带引导文案:所有文本都来自注册方。导航 label 可以是跟随语言的 thunk,因此导航投影经 resolveSlotLabel 解析,并在分区账本更新或 locale revision 变化时重新渲染(ctx.get('locale') 可选读取,无硬 locale 依赖)。首次使用引导记录按升序投影,每次只挂载一个步骤;可见步骤自行持有弹窗框架和应用根节点 inert 生命周期。已挂载但仍在判定私有事实的步骤渲染 null,因此判定期间不绘制也不阻塞任何内容。当前注册方会收到该条目的 id、complete() 和 openSection(id) 回调;完成或跳过当前步骤后,所有权转交给下一项。持久化完成状态、能力就绪状态、文案、变更操作以及可见包装均由注册方持有,因此独立注册的流程无法堆叠,外壳也不会成为第二个配置事实来源。
回环浏览器通过 settings.describe 加载提供方的 hasDocument 能力,且只有在 Host 确认可准备好一份由提供方持有的本地文档时才渲染打开配置文件。该操作发送无路径参数且仅限回环访问的 settings.openDocument 请求;Host 会再次解析提供方路径、在文档缺失时将其创建出来,并交给原生文本编辑器(macOS 上使用 open -t,绕过浏览器文件关联;Linux 和 Windows 上使用桌面文件关联;WSL 上经 wslpath -w 转换后使用 Windows 文件关联)。打开失败时该操作仍可使用,并渲染本地化错误。临时读取失败或 Host 拓扑变化后,重新打开对话框或重新连接会刷新可用性。远程浏览器从不注册该操作,也从不发起这项特权设置读取。
宿主端在用户设置 seam 中注册 ui-onboarding。ui-settings-models 提供的欢迎步骤通过既有公开 settings 边界读写其中的 welcomeNoticeVersion;外壳本身仍不持有产品策略。
侧边栏 seat
展开时,触发器就是参考栏自身那枚 15px 装饰齿轮,位于侧边栏页脚身份行的右端,取三级墨色——没有行盒,也没有标签,因为那一行归侧边栏 seat 所有,并与 ui-unieai-account 的账户占位者共用。标签仍留在 DOM 中充当按钮的可访问名称,只是被移出画面;15px 的图标太小不便点击,因此指针目标与悬停填充由一个向外扩出的伪元素承担,图标本身不发生位移。56px 轨道则恢复与其他轨道控件相同的 36px 圆形。
「外挂程式」导航行位于 New chat 之下,打开本包自身的面板并停在 plugins 分区。面板的打开状态、所请求的分区,以及分区内的锚点,都放在 apply 层的 SettingsPanelController 中,而不是外壳的组件局部状态,因为有三处界面会打开这个面板:面板自身的触发器、那一行导航行,以及经由本包提供的 settingsPanel 服务的侧边栏账户菜单。由 slot 声明的 store 服务不了第三者:那类 store 由渲染机制创建,apply 无法写入,而 cordis 服务恰恰活在 apply 里。只要没有注册 plugins 分区,该行就自行隐藏,因此未组合 ui-settings-plugins 的部署不会画出背后空无一物的控件。
settingsPanel 即 open(sectionId?, anchorId?)。锚点经 settings.section 的 owner share 原样转交给被点名的分区,且只交给它——回退选中的分区绝不会继承别人的锚点。锚点意味着什么由分区自己决定;ui-unieai-account 发布了三个并滚动到它们。
面板即 UnieAI Copilot 的设置对话框。自 768px 断点起,它宽 70vw、高 90vh(上限 900)、圆角 8;自 640px 起宽 92vw;再往下则铺满全屏且不带圆角。一条页眉横带贯通整个宽度,承载标题、一行摘要与注册方持有的操作;关闭按钮钉在面板一角,位于横带之外。横带之下由一个滚动区域同时容纳两栏,并按 1024px 的版心居中:176px 的导航吸附在滚动区顶端下方 16px 处,间距 32px,分区在其右侧。横带内容另按 896px 的版心收束。低于 768px 时两栏改为上下堆叠,导航变成一条横向滚动的行带,且隐去分组标题。
面板导航按 UnieAI 网页版设置页的方式对行分组:小号大写标题之上统领若干 36px 行,内边距 8px 12px、圆角 6,被选中的行在填充之上取 500 字重的全强度标签,未选中的行取 400 字重的次级墨色。这一中性填充是参考实现自身的决定,其理由在此同样成立:选中是一种状态,而非本屏唯一想要的动作,因此它不该读作彩色药丸。分组归属由外壳自身持有的「分区 id → 分组」映射决定,因为账本本身不携带分组;若把分组加进 settings.section,就等于要求每个注册方复述一份关于其他注册方的排列。映射未列出的分区仍会列出,排在各分组之后且不带标题。分组标题与横带上的摘要行,是本外壳自行持有、而非接收而来的文案;摘要只描述面板,不逐一列举分区,因为存在哪些分区是组合方式的事实。
模型体验
无。该插件渲染浏览器设置 UI;这里没有任何内容进入模型请求。
KV Cache 影响
无;该包既不组装也不发送提供方请求。
已知限制与暂缓事项
- 「通用」分区没有内置行;每一行仅在其所属功能插件挂载时出现。
- 导航单元格的圆角写成字面量 6px:参考设置页把导航装饰的圆角设在
--dsw-radius-control之下一级,而--dsw-*并未声明该级别的 token。此事已上报给主题持有方,而不是在这里新增;ui-sidebar 的身份底板存在同样的缺口。 - 导航分组归属是外壳自持的 id 映射:本包未列出的分区排在各分组之后且不带标题,因此新的功能分区只有在扩充该映射后才会加入某个分组。若改为给
settings.section增加分组选项,就等于要求每个注册方复述一份关于同侪的排列,这正是该映射放在此处的原因。
