npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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 增加分组选项,就等于要求每个注册方复述一份关于同侪的排列,这正是该映射放在此处的原因。