@lovett / ui
原语、令牌、布局和模式:组件库ignite-workspace的应用;
安装Lightwork和广告引擎。它的子系统包括 thread, detail, filter-core,
data-grid, data-table, meta-previews, file-upload, icons 和 lib.
规范的家:在这里,只在这里(ADR-CE-0151,接受日期2026-11-01)
这个目录位于 edwinlov3tt/lovett-packages 是 唯一的来源和唯一的出版商 的
@lovett/ui. 它是从ignite-workspace导入的 packages/ui 拥有完整的历史
点燃 main @ 2675a1440c6e5b61da21659fd00e1251594fbd65 (2026-10-16),取代过时的0.0.9
曾经住在这里的叉子。决定是ADR-CE-0151 ~/engines/docs/decisions/_active/;
Packages-pm释放它。
- 在这里改变一个原语,发布,消费者碰撞。消费者永远不会将此树与
workspace:或者file:(adr - ce - 0041)。 - release是一个标签
main(ui-v<version>)、打包、tarball安装和检查; 然后发表。从来没有从树枝上。每次发布都必须高于注册表的最高版本, 在发布时间阅读(npm view @lovett/ui versions)。
切换(ADR-CE-0151 D1, D4)
- 发布 0.6.0 从
main在这里。当npm时完成latest等于一个pnpm pack标签的。 - Ignite-workspace停止发布(它的位置discoverypro-pm): delete
.github/workflows/publish-ui.yml并且把npm信任的发布者从这个仓库中移走。在那之前ui-v*推到那里的标签会发布,NPM会指向latest在它。 - 光功(lw-pm):退休
scripts/ui-release.sh或者指向它LOVETT_UI_DIR在这里。 - 每个消费者在选择的版本上移动到一个家庭版本:从其供应商那里移动到一个家庭版本 npm的雇主构建的0.5.0,广告引擎的0.3.4的目录。
开发
pnpm install # own lockfile; not a pnpm workspace
pnpm typecheck
pnpm test # vitest, jsdom
pnpm build # tsup -> dist/ (ESM, split chunks, bundled .d.ts, CSS + fonts copied)
pnpm check:dist-esm # refuses a dist Node's ESM resolver cannot load; runs in prepublishOnly
源输出(main/exports -> ./src)是源消费者解决的问题;
publishConfig 把它们换成 ./dist 为已发布的tarball。两张地图必须同时改变。
scripts/check-dist-esm.mjs 扫描每一个 dist/*.js. 它的存在是因为深层说明符没有
文件扩展名(react-syntax-highlighter/dist/esm/styles/prism)在Vite下构建绿色并失败
在Node下导入。在发布时是0.0.7和0.0.8,在这里被固定在0.0.9,在ignite's中丢失了
Tree(已发布的0.4.2包含它),并在0.5.0中再次修复。
主题
一套,几个造型。主题是一个有作用域的样式表,它重新指向工具包自己的令牌名称;
没有组件知道它在哪个主题中。进口 tokens.css 和 styles.css 首先是主题。
| 主题 | 进口 | 选择在 |
|---|---|---|
| 套件(默认深色,浅色) | @lovett/ui/tokens.css | data-theme="light" (或 combo) <html>;没有代表黑暗 |
| v2 | @lovett/ui/theme-v2.css | data-ds="v2" 在任何元素上 |
| 洛维特(光工作) | @lovett/ui/theme-lovett.css | data-ds="lovett" 下面 <html> |
| Admium (0.5.0) | @lovett/ui/theme-admium.css | data-ds="admium" 在 <html> 或者任何元素 <html data-theme="light"> |
Admium 是带有橙色调的暖色调(#EF6820 填满, #E04F16 按下, #FFF0E5
色彩, #C2410C 橙色文字),由业主于2026-10-17在adadm的实验室批准。这是一个记号
覆盖套件的光主题,所以它只适用于 data-theme="light";在黑暗中
没有匹配。除了令牌之外,它还添加了三样东西,它们都有作用域:
- 凸起的主按钮: 1px的白色内高亮(12%到0,从上到下),1px的圆环
在它自己的橙色,a
0 1px 2px rgba(13,18,27,0.24)影子,半粗体标签,也是一样的 半径和其他按钮一样。没有上升,没有发光的盘旋。 - 控制发际线:二级和图标按钮和搜索栏休息
#E6E4E2(--border-control),而分割线则保留下来#F2F1F0. - 国家芯片 重新解析范围,因此它们的着色边界跟随温墨。
0.6.0:一棵树,从家族发布(2026-11-01)
任何组件都不会更改其对存在于这两个0.5.0中的标记的查找。 0.6.0是的并集 两个不同的0.5.0版本(ADR-CE-0151 D2):
- 这个家庭是0.5.0 (lovett-packages
feat/ui-homeB12a8d4,从未发表;Admium供应商 它):admin主题和下面的所有者UI规则。 - npm的0.5.0 (ignite-workspace
packages/ui8f3ae0d1,出版日期2026-10-18;的目录 安装它):风险办公桌的工具包缺口。那是唯一点燃承诺去触摸packages/ui在2675a144分裂后。
消费者移动时必须知道的事情:
- 从npm的0.5.0(目录): 您将获得下面的所有者UI规则(无粗体,无颜色) 过渡,芯片边界在其油墨的30%,同心半径)。这些都是业主的意图 变更;检查你的截图。你所有的出口都还在。
- 从家庭的0.5.0 (adum): 你就获得了StateChip
icon和bare,DropdownMenuRadioGroup和DropdownMenuRadioItem, SegmentedPillariaLabelledBy,ariaDescribedBy和项目title,托盘size="wide"、按钮variant="danger-text",aria-disabledon按钮和开关,readOnly在开关和复选框上,烤面包机closeButtonLabel和dismissOnEscape. 洛维特范围的油墨变化只适用于下面data-ds="lovett". - 将依赖项替换为
"@lovett/ui": "0.6.0". 对一揽子计划来说,顺风仍然是必要的 源(@source在node_modules/@lovett/ui/src);0.7.0消除了这种需要。
已解决的合并文件。Npm的提交没有冲突地应用到家族树中,所以每个文件 携带双方的变化:
| 文件 | 来自家庭(b12a8d4) | 源自npm (8f3ae0d1) |
|---|---|---|
src/badge.tsx | 重读文本读 --accent-ink | StateChip icon 和 bare |
src/checkbox.tsx | 无颜色过渡 | readOnly |
src/dropdown-button.tsx | 菜单填充6px到4px(同心圆半径) | 这个 danger-text 变量的类 |
src/dropdown-menu.tsx | 菜单填充,没有颜色过渡 | 无线电组和无线电项; 新的无线电项目 transition-colors 删除这,以匹配所有者的规则(0.6.0编辑对npm的代码所做的修改) |
src/floating-drawer.tsx | 无颜色过渡 | 托盘 size="wide" |
src/segmented-pill.tsx | 无颜色过渡 | ARIA道具,项目 title |
src/styles.css | 按钮、输入和链接上没有颜色过渡 | danger-text, aria-disabled 和 readOnly 风格 |
src/theme-lovett.css | 搜索字段仅转换其阴影 | 洛维特范围油墨,禁用初级,危险文本,640px以下16px字段 |
package.json | 0.5.0, adm主题导出 | 0.5.0 |
Npm的commit也改变了 button.tsx, switch.tsx, toast.tsx 和 index.ts和感动
9个测试文件(其中4个是新的)。仅这个家庭就涉及了73个其他文件:下面的规则,和
新 theme-admium.css.
同样在0.6.0中,这些都不可见:
- 皮棉经营。
eslint.config.js扩展@lovett/elint/migrating,react-hooks和 测试tsconfig连接。修正了传递硬规则:承诺返回处理程序是void艾德 (计算器外壳、代码块、复制字段、文件拖放区、文件夹选择器、配置文件部分),以及 上传id来自crypto.getRandomValues而不是Math.random. - 测试: 1793人通过,其中记号形状测试。
0.5.0:所有者的UI规则,在源处固定(2026-10-17)
一旦升级到0.5.0,这些将改变每个消费者的渲染方式。消费者固定版本,所以
在那之前什么都不会动。 src/__tests__/ui-rules.test.ts grep src/ 对于那些可检查的
他们不能回来了。
- 没有大胆的。
font-bold/font-extrabold/font-weight: 700成为font-semibold(600) 标题、标题、标签和图表,以及font-medium(500)关于行内强调(降价)strong(浮动状态栏的标签)。豁免:meta-previews/,它可以繁殖 Facebook / Instagram / Messenger chrome,以及700@font-face这些预览使用。 - 没有颜色过渡。
transition-colors有色人种成员transition-[...]列表是 走了,transition-all命名它动画的属性(width,opacity),以及CSS 回退的--btn-transition,--input-transition,--pager-transition和--search-transition只保留box-shadow/transform(或none). 颜色,背景, 边框颜色,填充和描边现在立即改变。故意保留:几何渐变(条) 宽度,图表路径,折叠行)和褪色滚动条的scrollbar-color. - 染色的芯片边界。 芯片的边界是它自己的30%的墨水,而不是中性的灰色
默认的
--state-*-border令牌(是--border/--border-strong),DeltaChip的 中立的语气。Badge和MetricCard的accent现在的语气是--accent-ink(同 Kit的轻主题)。 - 同心半径。 当一个圆角元素位于另一个元素的内部小于等于8px时,其外部半径为
内半径加上间隙。固定在套件和洛维特范围:
DropdownMenuContent,DropdownButton,折叠式侧边栏弹出框和Select/Combobox列表框填充4px(原来为6),约为md行;这个FilterDropdown列表为lg / 4px / md (为md / 6px / 8px);Modal的托盘是lg内xl面板(md);冒泡菜单工具栏 和链接组是lg围绕sm按钮(是sm,圆比外);数据表 过滤器和列管理器弹出窗口是xl (md);板列头按钮是lg在2xl 列;文件预览缩略图,ChipNav的轨道(12默认,10紧凑型),CopyField的 按钮(现在也在中间),SegmentedChoice,FilterChip的移除按钮,TaskCard媒体和 握力,线建议和分类药丸,TagChipInput/FolderTreePicker期权和芯片 删除按钮,StatRow内面板,业主带,FolderCard的复选框 附件掉落叠加和提示环的错误边使用calc(var(--radius-X) - gap)(或+),所以这两个主题都有。故意单独保留:控件在填充页脚或字段中 线程编写器页脚,附件芯片,芯片里面Combobox/TagChipInput字段), 其中同心圆的答案是一个正方形控制;只允许悬停的行(FieldRow,筛选菜单行); 和洛维特的搜索线索,其同心圆半径是一个正方形的键帽(光之工作的召唤)。 - 没有条件呈现的对话框。 试剂盒没有
{x && <Dialog|Modal|Sheet|Drawer>; 测试保持这种状态。
知道差距
TODO(ui-tray-exit):Tray(floating-drawer.tsx)有一个进入动画,但是返回null当open为false,因此它的关闭动画永远不会运行;Modal也卸载时关闭(它 没有动画损失)。两者都是由它们的开放道具驱动的,这就是对话规则 消费者的要求;保持Tray通过它的出口装载的是一个单独的行为改变。TODO(ui-lint-backlog): lint运行@lovett/elint自0.6.0以来的迁移预置,为零 错误。在ignite的宽松配置下编写的代码有12条严格的规则 失败;它们列在eslint.config.js然后一次又一次地燃烧。- 这个
dsxui重叠(60个名称,6个格式冲突的令牌)是允许共存的 根据ADR-CE-0034 D1。将两者融合是一个单独的决定。