@wycm9527/morganite 0.0.0-stage → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +165 -0
- package/LICENSE +33 -0
- package/README.md +58 -2
- package/bridge/base.css +138 -0
- package/bridge/echarts.d.ts +44 -0
- package/bridge/echarts.js +217 -0
- package/bridge/element-plus.css +785 -0
- package/bridge/fonts.css +124 -0
- package/bridge/icon-merge.d.ts +5 -0
- package/bridge/icon-merge.js +103 -0
- package/bridge/iconpark.config.ts +75 -0
- package/bridge/iconpark.css +29 -0
- package/bridge/react/ConfirmBar.tsx +43 -0
- package/bridge/react/EChart.tsx +45 -0
- package/bridge/react/PageHeader.tsx +24 -0
- package/bridge/react/SectionHeader.tsx +17 -0
- package/bridge/react/StatCard.tsx +33 -0
- package/bridge/react/TableSkeleton.tsx +11 -0
- package/bridge/react/TrendChart.tsx +8 -0
- package/bridge/recipes.css +444 -0
- package/bridge/shadcn-globals.css +6 -0
- package/bridge/shadcn.css +238 -0
- package/bridge/vue/ConfirmBar.vue +23 -0
- package/bridge/vue/EChart.vue +43 -0
- package/bridge/vue/KitchenSink.vue +507 -0
- package/bridge/vue/PageHeader.vue +23 -0
- package/bridge/vue/SectionHeader.vue +15 -0
- package/bridge/vue/StatCard.vue +33 -0
- package/bridge/vue/TableSkeleton.vue +14 -0
- package/bridge/vue/TrendChart.vue +11 -0
- package/bridge/vue/confirm.js +18 -0
- package/bridge/vue/inlineConfirm.js +21 -0
- package/design-system/AUDIT.md +277 -0
- package/design-system/DESIGN.md +176 -0
- package/design-system/contrast.md +71 -0
- package/design-system/preview/drawer.html +38 -0
- package/design-system/preview/form.html +40 -0
- package/design-system/preview/index.html +21 -0
- package/design-system/preview/preview.css +190 -0
- package/design-system/preview/preview.local.css +17 -0
- package/design-system/preview/shell.html +50 -0
- package/design-system/scope-map.json +4 -0
- package/design-system/style-dictionary.config.mjs +172 -0
- package/design-system/theme-map.json +16 -0
- package/design-system/themes/dark/THEME.md +29 -0
- package/design-system/themes/dark/tokens/semantic.tokens.json +354 -0
- package/design-system/token-board.html +137 -0
- package/design-system/tokens/primitives.tokens.json +1898 -0
- package/design-system/tokens/semantic.tokens.json +1080 -0
- package/design-system.json +217 -0
- package/migration/roles.json +743 -0
- package/package.json +82 -4
- package/templates/AGENTS.md +13 -0
- package/templates/KitchenSink.tsx +179 -0
- package/templates/accept.config.mjs +28 -0
- package/templates/entry-css.css +6 -0
- package/templates/entry-element-plus.css +9 -0
- package/templates/entry-shadcn.css +7 -0
- package/templates/notes-css.md +4 -0
- package/templates/notes-element-plus.md +7 -0
- package/templates/notes-shadcn.md +7 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
版本策略:patch 只改描述与文档;minor 新增或修改 token(视觉会变、名字不变,条目里写清肉眼可见的影响);major 才改名或删除 token。
|
|
4
|
+
|
|
5
|
+
## 0.3.3 — 2026-10-27
|
|
6
|
+
|
|
7
|
+
- 发布到 npm(用户决定:设计系统要交给同事用,装法和 Citrine 一样,少一步拷文件夹):包名 `@wycm9527/morganite`,`npm i @wycm9527/morganite` 后照常 `ds.mjs init --system morganite`。文件夹渠道与 Releases 直链照旧可用,已经用文件夹接入的项目不用换。
|
|
8
|
+
- 许可:MIT,`bridge/fonts.css` 内嵌的 D-DIN 字体仍按 SIL OFL 1.1;`package.json` 写 `(MIT AND OFL-1.1)`,新增 `LICENSE`。此前是 `UNLICENSED`。
|
|
9
|
+
- 包里补上 `migration/`:身份文件登记的 `migration/roles.json`(旧项目换规范时用)此前不在 `files` 里,Releases 里的 `wycm9527-morganite-*.tgz` 同样缺;文件夹渠道整目录拷贝,不受影响。
|
|
10
|
+
- `package.json` 补 `repository`(CI 带 provenance 发布时要核对)、`homepage`、`bugs`、`keywords`、`publishConfig`;`description` 改成一句定位(原来是五个来源网址的拼接)。
|
|
11
|
+
- token、桥接与配方不变,页面不变。
|
|
12
|
+
- README、仓库的零基础教程与 GUIDE 改为 npm 装法。
|
|
13
|
+
|
|
14
|
+
## 0.3.2 — 2026-10-26
|
|
15
|
+
|
|
16
|
+
- 数字字体随设计系统分发(用户决定:设计系统要交给同事用,没装 D-DIN-PRO 的电脑也要显示同一款数字字体):
|
|
17
|
+
- 新增 `bridge/fonts.css`:内嵌 Datto 原版 D-DIN(Regular 400 / Bold 700,SIL OFL 1.1,文件里附版权声明与许可全文)。`base.css`、`element-plus.css`、`shadcn.css` 开头引入它,身份文件 `export.core` 加上它,npm 包、文件夹快照、纯 CSS 导出(`ds.mjs export`)与范围包(`ds.mjs scope`)都带着;项目的样式入口不用改。
|
|
18
|
+
- 肉眼可见:没装 D-DIN-PRO 的电脑上,数据大字(统计卡、KPI、`el-statistic`、状态条数字)从系统字体(Mac 上是 SF,Windows 上是 Bahnschrift)变成 D-DIN。D-DIN 只有 400 / 700 两档,`text.display.weight`(600)显示 Bold,比装了 D-DIN-PRO 的 SemiBold 略粗。装了 D-DIN-PRO 的电脑不变;token 值不变。
|
|
19
|
+
- 体积:fonts.css 77 KB(gzip 57 KB),进项目的 CSS 包。项目设了 CSP 时要允许 `font-src data:`。
|
|
20
|
+
- D-DIN-PRO 不随系统分发:它是第三方在 D-DIN 上的扩展,名字含 Datto 的保留名,授权链说不清。
|
|
21
|
+
- token 说明、DESIGN「字体」、AUDIT 的用户决定与风险同步;`shadcn.css` 头注释里的包名示例由 Citrine 改为 Morganite。
|
|
22
|
+
- 效果预览有了在线网址(GitHub Pages):<https://wycm9527.github.io/Design-System/morganite/previews/rose-gold-admin/>,DESIGN 的评判标准写上它。
|
|
23
|
+
- 上手说明:README 补齐按技术栈接入与可以直接粘给 AI 的提示词;仓库的零基础教程与 GUIDE 写明 Morganite 怎么装(不在 npm 上,从文件夹接入)。
|
|
24
|
+
- adopter 0.3.4 的 `ds.mjs scope`:前面带注释的 `@import` / `@font-face` 原先会被包进 `@scope`(引入失效),现在照样提升到顶层;Citrine 现有的范围包重新生成逐字节相同。
|
|
25
|
+
|
|
26
|
+
## 0.3.1 — 2026-10-19
|
|
27
|
+
|
|
28
|
+
- 优惠券券面加进品牌面的位置(用户决定:品牌金审计在拾光商城查出券面面额块用了品牌面,选择改规范,所有项目都能用):
|
|
29
|
+
- DESIGN「视觉语言」的品牌面位置、「组件配方」、「验收基线」的金色位置与金底白字例外都加上优惠券券面。
|
|
30
|
+
- 新增配方 `.coupon`:左侧面额块是品牌面 `color.bg.brand` 加 `color.text.on-brand`(面额用展示字,门槛小号字),右侧放名称、状态与操作;已结束 / 过期 / 草稿加 `.is-off`,面额块变灰。不新增 token。
|
|
31
|
+
- 身份文件品牌金允许清单加 `.coupon-value`。拾光商城改用配方,删掉页面里的券面样式与 `BRAND_ALLOW` 登记,券面外观不变。
|
|
32
|
+
- DESIGN「金色位置」注明:欢迎横幅也可以用品牌面,但没有配方,项目用到时把它的选择器写进 `BRAND_ALLOW`。
|
|
33
|
+
- citrine-tools 1.3.0 已随 Citrine 2.12.2 发到 npm,装 npm 版工具的项目现在也查得到金色用错位置;AUDIT 与 README 去掉「随 Citrine 下次发版」的说法。
|
|
34
|
+
|
|
35
|
+
## 0.3.0 — 2026-10-19
|
|
36
|
+
|
|
37
|
+
- 侧栏菜单项加高、拉开、加粗一级(用户指定:菜单项高度 40px、每项间距 8px、侧栏文字字重加粗一级):
|
|
38
|
+
- 新增 token:`layout.sidebar.item-height`(→ `size.control.lg`,40px)、`layout.sidebar.item-gap`(→ `spacing.2`,8px)、`text.weight.nav`(→ `font.weight.medium`,500);DESIGN「字重」一条改为导航菜单单独一档。
|
|
39
|
+
- 肉眼可见:侧栏菜单项从 32px 高变成 40px(原借按钮 / 输入框的 `control.height.md`,按钮与输入框不变);同一分组里相邻两项的间距从 2px 变成 8px,分组标题的上下留白不变;折叠后分组标题隐藏,组与组之间也隔 8px(原来 Element 侧栏两组的项贴在一起、`.nav` 隔 2px);菜单项文字从 400 变成 500,当前项同字重(仍不额外加粗),分组标题与页脚不变。Element `el-menu`(含折叠态与子菜单标题;横向菜单只跟着改字重)与 React / 静态页的 `.nav` 同改,效果预览随配方变化。Windows 的微软雅黑没有 500,字重在 Windows 上看起来不变。
|
|
40
|
+
- 侧栏变高:12 项三组的侧栏从 627px 涨到 777px,比不少笔记本的浏览器窗口高。Element 侧栏的菜单区(`.sidebar .el-menu`)改为窗口不够高时自己滚动,品牌区与页脚不动;`.nav` 本来就能滚。
|
|
41
|
+
- `.nav` 的项间距改由同组相邻项的外边距给(原为整列 `gap: 2px`,分组标题与第一项之间也算一份),与 `el-menu` 一致:分组标题到第一项少 2px。
|
|
42
|
+
- 品牌金审计:身份文件 `design-system.json` 的 `accept` 新增 `brand`,登记判色范围(色相 30–45°、饱和度 0.35–0.8、明度 0.25–0.75)与静息态允许出现金色的位置(Element Plus 46 条、配方 21 条、shadcn 12 条),依据 DESIGN「验收基线」新加的「金色位置」。焦点环与聚焦边线、静息为正文色的链接悬停显出的链接金不算泄漏。
|
|
43
|
+
- 要 citrine-tools ≥ 1.3.0:仓库内已生效,npm 上的 1.3.0 随 Citrine 下次发版。低于 1.3.0 时和原来一样只查 Citrine 的黄,对金色不起作用。
|
|
44
|
+
- 清单模板 `templates/accept.config.mjs` 的 `YELLOW_ALLOW` 改名 `BRAND_ALLOW`。工具照认旧名,已接入的项目不必改。
|
|
45
|
+
- 首轮审计查出三处金色泄漏,桥接改回中性(肉眼可见):
|
|
46
|
+
- Element 遮罩加载(`v-loading`)的转圈与图标从主色金改为 `color.icon.default` 灰,文字不变。DESIGN 本来就要求加载用骨架屏。
|
|
47
|
+
- Element 上传:拖拽框悬停从金边线改为 `color.border.strong` 加悬停底,拖入文件时才换焦点色边线与选中底,同配方 `.upload-zone`;照片墙「+」框悬停从金边线改为 `color.border.strong`,图标变深。
|
|
48
|
+
- shadcn:描边 / 幽灵按钮的悬停接管不再限于 `data-slot="button"`。确认弹窗的「取消」、用 `asChild` 包按钮的浮层 / 提示 / 弹窗触发器原来悬停变金底(shadcn 的 `--accent` 契约),现在和普通按钮一样是中性悬停。
|
|
49
|
+
|
|
50
|
+
## 0.2.0 — 2026-10-15
|
|
51
|
+
|
|
52
|
+
- 数据填充渐变换成用户指定的两色(`linear-gradient(90deg, #B1863D 0%, hsl(37.3228deg 59.5252% 61.7469%) 100%)`):
|
|
53
|
+
- 新增 token:原语 `color.brand.250`(`#D8AC63`,用户给的 hsl 按 8 位 sRGB 取整);语义 `color.chart.gradient.start`(→ `color.brand.550`,`#B1863D`,与主按钮悬停同色)与 `color.chart.gradient.end`(→ `color.brand.250`),亮暗一致。
|
|
54
|
+
- 肉眼可见:品牌金进度条(Element `el-progress` 默认色、配方 `.goals`)从灰调的深金(左 `#8A7B66` → 右 `#8A6530`)换成更亮的金,并翻成左深右浅(左 `#B1863D` → 右 `#D8AC63`);品牌金柱子(ECharts `barGradient`、`rankBars` 前三名、效果预览工作台柱状图)底端 `#B1863D`、顶端 `#D8AC63`,原来是底 `#B98D44`、顶端发灰的 `#B9A78A`。
|
|
55
|
+
- 方向统一为起点深、末端浅(用户最初说的是「起始点到终止点的深浅渐变」,原记录的进度条左浅右深是误记):成功 / 异常 / 警示 / 已结束(`is-muted`)进度条与目标进度的中性序列也翻成左深右浅,仍是同色饱和度渐变;柱子仍是下深上浅,横柱仍是左深右浅。
|
|
56
|
+
- 进度条在条内显示百分比(`text-inside`)时改实色 `color.action.primary-active`:百分比贴在填充末端,白字对浅端 `#D8AC63` 只有约 2.1:1,实色上 5.27:1。
|
|
57
|
+
- `chart.gradient.saturation` 只管品牌金以外的颜色;`echarts.js` 的 `chartTokens()` 多返回 `gradientStart` / `gradientEnd`,`barGradient` 按传入的颜色认出品牌金(`chart.1` 或顺序色封顶)。
|
|
58
|
+
- 图表提示气泡改为白底浮层 + 大投影(用户:hover 浮窗用白色底 + 大投影):
|
|
59
|
+
- `color.chart.tooltip` 由深金 `color.brand.600` 改为 `color.white`,暗色新增覆写为浮层色 `color.neutral.900`(同 `color.bg.elevated`);新增第四层阴影 `elevation.tooltip.*`(原语 `shadow.y.3` 12px、`shadow.blur.3` 32px、`color.neutral.shadow-a12`),比下拉 / 弹窗的 `elevation.popover.*` 大一档。
|
|
60
|
+
- 肉眼可见:所有 ECharts 图表(`echarts.js` 主题)的悬停提示从深金底白字变成白底正文色字,加 `color.border.default` 细边、圆角 `radius.md` 与 0 12px 32px 的 12% 黑投影,内边距 8 × 12px(原 6 × 10px);效果预览工作台折线的提示同样改。Element 的文字 Tooltip(图标、禁用按钮上的深底白字小气泡)不变。
|
|
61
|
+
- `chartTokens()` 多返回 `tooltipShadowY` / `tooltipShadowBlur` / `tooltipShadowColor` / `tooltipRadius` / `tooltipPadding`;`tooltipBg` 读不到时回退 `--color-bg-elevated`(原 `--color-bg-inverse`)。
|
|
62
|
+
- 主题的提示框挂到 body(`tooltip.appendTo: 'body'`,同 Element 浮层):`el-card` 是 `overflow: hidden`,靠卡片边的气泡和投影原先会被裁掉(环形图实测裁掉 27px)。页面若自己给图表设了 `tooltip.appendTo` 会覆盖这条。
|
|
63
|
+
- 曲线图的底线改为 0.6px 虚线(用户:曲线图的底线用 0.6px 虚线):
|
|
64
|
+
- 新增 `chart.baseline.dash`(4px,借 `spacing.1`):线段与间隔各 4px,线宽 `border.width.default`、颜色 `color.border.default`,同网格线。
|
|
65
|
+
- 肉眼可见:曲线图(`trendLine`、`TrendChart`)最底下那条线从两条叠画的 1px 实线(比其他网格线深)变成一条发丝细的虚线;效果预览工作台折线图同改,底线画在基准面积之后。柱状图的基线仍是实线。
|
|
66
|
+
- ECharts 主题的轴线、网格线和提示气泡的细边从 1px 改为 `border.width.default`(0.6px),按 DESIGN「宽度统一是发丝细线」,与效果预览一致:所有 ECharts 图表的网格线、柱状图基线和气泡边都会变细、变浅一点。
|
|
67
|
+
- `chartTokens()` 多返回 `lineWidth` / `baselineDash`;`trendLine` 可传 `el`(读 token 的元素)。
|
|
68
|
+
- 图表悬停改为浅金竖条(用户:悬停的竖向指示线用浅色柱状图,浅金与浅灰实测对比后选浅金):
|
|
69
|
+
- 肉眼可见:曲线图悬停时不再画竖虚线(商城原为 ECharts 默认的 1px 灰色虚线,效果预览是 0.6px 金色虚线),改为 `color.chart.area`(品牌金 16%,暗色 24%)的竖条盖住悬停的那一格,和柱状图一致。效果预览折线图同改。
|
|
70
|
+
- ECharts 主题的 `tooltip.axisPointer.type` 默认改为 `'shadow'`:所有 `trigger: 'axis'` 的类目轴图表悬停都是这根竖条;时间轴 / 数值轴上竖条会缩成 1px,这类图自己设 `type: 'line'`。
|
|
71
|
+
- `color.chart.area` 的说明补上「也是图表悬停竖条」,值不变。
|
|
72
|
+
- 图标描边改为屏幕上的 1.4px,每只图标合并后一次上色(用户:icon 描边粗细改为 1.4px 并合并栅格化,否则有透明度时会有显示 bug):
|
|
73
|
+
- `icon.stroke.width` 由数值 3(IconPark 48 网格)改为尺寸 1.4px,新增原语 `stroke-width.1-4`;`stroke-width.3` 不再被引用,按版本策略留到下个大版本再删。
|
|
74
|
+
- 新增运行时 `bridge/icon-merge.js`(包导出 `@wycm9527/morganite/icon-merge`):入口里调一次 `mergeIcons()`,把每只单色 IconPark / lucide 图标的各段描边复制进一个蒙版、用 currentColor 一次画出,之后新渲染或更新的图标自动处理;双色 / 多色图标不处理。不调时描边粗细照样改,但交叠处仍会叠深。Element / shadcn 说明补上这一步。
|
|
75
|
+
- `iconpark.css` 与 `shadcn.css`(lucide)让描边按屏幕粗细画(`vector-effect: non-scaling-stroke`),shadcn 单选的实心圆点保持原样;`iconpark.config.ts` 的 `strokeWidth` 改为 4.8,只在没加载样式时兜底;`@icon-park/svg` 的静态用法改为套一层 `.i-icon`(原先把 `strokeWidth` 传成 `var(--icon-stroke-width)`,token 改成 1.4px 后会被视框缩小);React 版 `StatCard` 的提示图标补上 lucide 类名。
|
|
76
|
+
- 肉眼可见:IconPark / lucide 图标的线条变粗——14px 图标约 0.9px → 1.4px、16px 约 1px → 1.4px(lucide 16px 约 1.3px → 1.4px),各档尺寸一样粗;灰色图标在线条交叠处(如「首页」图标的底边、搜索图标把手与圆的接缝)不再出现更深的一块。效果预览的图标由 24 网格里的 1.6(16px 上约 1.07px)改为 1.4px,并在源码里合并成一条路径。
|
|
77
|
+
- 柱子改为起点直角、末端圆角(用户:柱状图和类似样式应该直角起底、顶部圆角,以及多柱状图叠加问题;多序列三种画法实测对比后选堆叠贴合):
|
|
78
|
+
- 肉眼可见:所有 ECharts 柱子的底端(横柱的左端)从圆角变成直角,末端仍是 `radius.xs`(4px)圆角;堆叠柱的接缝处不再两边各缺一个圆角,段与段直接相接,只有最外一段是圆的;负值柱圆朝外的一端。效果预览的柱子本来如此,不变;进度条保持胶囊形。
|
|
79
|
+
- `echarts.js` 新增 `withBarEnds(option)` 与 `barEnds(series)`:按每根柱子算端头,跟随 ECharts 的堆叠规则(声明顺序与 `stackOrder`、正负值分开堆、0 值段不算、图例关掉的序列不算)。种子的 EChart 容器(`vue/EChart.vue`、`react/EChart.tsx`)每次 setOption 都套用,图例开关后重算;`rankBars` 改用它。直接 `echarts.init` 的项目自己调 `withBarEnds`,否则只有主题默认的竖柱正值端头。
|
|
80
|
+
- 负值柱的渐变跟着倒过来,仍是基线一端深、末端浅(原先 `barGradient` 不知道正负,负值柱是基线一端浅、末端深):`barEnds` 对负值项把相对柱子自身的线性渐变翻转(series 级与数据项级的颜色都算,全局坐标的渐变不动;同一份 option 套两次也只翻一次)。拾光商城目前没有负值柱,页面没有变化。
|
|
81
|
+
- 卡片标题改为 14px #212121(用户:卡片标题改为 14px #212121;去掉大写字距、暗色取正文色两项实测对比后确认):
|
|
82
|
+
- 新增 token:原语 `color.neutral.875`(`#212121`);语义 `color.text.card-title`(亮 → `color.neutral.875`,暗 → `color.neutral.white-a85`,同暗色正文)。
|
|
83
|
+
- 肉眼可见:配方 `.card-head h2`(工作台、报表、详情、表单等页的卡片标题)从 12px 次要色(65% 黑 / 65% 白)加 0.06em 字距、西文大写,变成 14px 半粗 `#212121`(暗色 85% 白),不加字距、不转大写。带说明的卡片头高度不变;只有标题的卡片头高约 2.7px,与带说明的几乎一样高(效果预览的新建交易、交易详情页因此长 5–8px)。效果预览的卡片标题随配方改。
|
|
84
|
+
- Element 的 `el-card` 标题栏由常规字重的正文色改为同款半粗 `#212121`;shadcn 的 `CardTitle` 由半粗正文色、字号跟外层改为 14px `#212121`;token 预览页的卡片标题同步。看板上方的分区标签 `.section-label` 不变。
|
|
85
|
+
- 板块间距收紧(用户:板块间距是否过大,稍微紧凑一些;三种收法实测对比后选定):
|
|
86
|
+
- `space.stack` 由 24px 改为 16px(`spacing.4`),`space.gutter` 由 40px 改为 24px(`spacing.6`,与卡片内边距 `space.card` 同宽);没有新增或删除 token。
|
|
87
|
+
- 肉眼可见:所有页面的内容区四周留白(含顶栏左右)由 40px 改为 24px,板块之间(页头与卡片、统计卡、看板、两栏、卡片栅格、走查页卡片)由 24px 改为 16px,登录页的品牌面板与表单区同样收紧;拾光商城工作台在 1620 × 976 下整页短 64px。手机端(≤ 768px)的内容区与顶栏留白(16px)、顶层块间距(12px)不变(配方改为引用 `space.stack`);叠成单栏的看板卡、统计卡之间同样由 24px 改为 16px,登录页表单区的留白由 40px 改为 24px。
|
|
88
|
+
- 页面导航与标题布局统一(用户:统一后台所有页面的面包屑、标题、操作区与内容布局;三轮评审 12 问拍板,见 AUDIT「页面导航与标题」)。没有新增或删除 token。
|
|
89
|
+
- 新增:配方组件 `PageHeader`(`vue/PageHeader.vue`、`react/PageHeader.tsx`:`title` / `subtitle`,`#status` 放标题旁的状态胶囊,`#actions` 放页面级操作,`#leading` 放标题左侧的头像)与 `SectionHeader`(`vue/SectionHeader.vue`、`react/SectionHeader.tsx`:H2 板块标题 + 右侧 `#actions`),输出配方类 `.page-head` 与新增的 `.section-head`(H2 `text.title-sm.size` × `text.weight.strong` × `color.text.primary`);组件走查页加「页头与板块标题」一组。DESIGN 补「页面结构四层」(顶栏 → 页头 → 可选标签 / 筛选 → 业务内容)与「建设中页面按结果页处理」。
|
|
90
|
+
- 调整:面包屑分隔符由「/」改为细箭头(配方 `.crumbs .sep` 与 Element `.el-breadcrumb__separator` 用遮罩画,`icon.size.sm` 见方、`color.text.muted`,描边 1.4 同 `icon.stroke.width`;标记仍写「/」,页面代码不用改:分隔符元素本身 `visibility: hidden`、箭头画在 `::before` 上,「/」不进视觉与无障碍树);页头副标题与标题的间距由 4px(`spacing.1`)改为 6px(`spacing.1-5`),所有带副标题的页头高 2px;贴在卡片顶部的 Element 标签栏当卡片标题头用:标签上下由 12px 改为 16px(`spacing.4`,与带标题的卡片头同高,标签栏高约 43 → 51px),底线从左右各缩进 24px 改为贯穿卡片(效果预览的 `.panel > .tabs` 底线本来就贯穿,上下同改 16px);内容区直属的 Element 标签栏(报表页这类 pane 为空、只切换下方内容的)下边距归零,与下方内容相距一个 `space.stack`(原为 16 + 16 = 32px)。顶栏左侧统一是面包屑,工作台不再放问候语(问候语进页头副标题),DESIGN「顶栏」与「组件配方」表同步。
|
|
91
|
+
- 移除:配方 `.greet` / `.greet__hi` / `.greet__name`(顶栏问候语)与 `.page-bar` / `.page-bar .right`(看板顶部那一行),接入项目改用 `PageHeader` + `SectionHeader`;`.section-label` 保留,只给不值一个标题的次要分组。Element 说明「卡片顶部的 el-tabs 自动缩进」与配方清单同步。
|
|
92
|
+
- 图标库登记改为实际在用的 IconPark(用户:图标库登记改成实际在用的 IconPark,shadcn 用 lucide):
|
|
93
|
+
- 新增原语 `icon.set.iconpark`(`IconPark`),`icon.library` 由 `icon.set.antd`(`@ant-design/icons`)改指它;`icon.set.antd` 不再被引用,按版本策略留到下个大版本再删。
|
|
94
|
+
- 页面没有变化:Element 桥接、说明与两个栈的脚手架本来就用 IconPark / lucide-react,只是登记跟上实际(antd 图标是填充路径,用不上 1.4px 描边与 `mergeIcons()`);CSS 变量 `--icon-library` 的值由 `@ant-design/icons` 变为 `IconPark`。DESIGN「图标」写明 shadcn 栈用 lucide-react。
|
|
95
|
+
- 原语 `radius.xs`(4px)与 `spacing.3-5`(14px)的说明由 `[推断]` 改为 `[确认]`(用户 2026-10-14),值不变;种子里不再有 `[推断]`。
|
|
96
|
+
- 身份文件 `owned` 加入 `design-system/preview/preview.local.css`(配方在 token 预览页里的对应):原先接入时拷进项目后就不再随 upgrade 更新,本版卡片标题等改动在项目的预览页上看不到;现在走三方合并,项目没改过就直接更新,改过会报冲突。0.1.x 各版这个文件没变过,从 0.1.x 升级时都是直接更新。
|
|
97
|
+
- 验收要 citrine-tools ≥ 1.2.0(与本版同时发布,随 Citrine 2.12.1):1.1.x 不认模板里的 `APPROVED_CONTRAST`。1.2.0 起 Citrine 的内置例外按 `design-system/.adopter.json` 的 `system` 只对 Citrine 项目生效,Morganite 项目的文字不再被 Citrine 的状态色放行;模板 `accept.config.mjs` 的说明同步。
|
|
98
|
+
|
|
99
|
+
## 0.1.4 — 2026-10-11
|
|
100
|
+
|
|
101
|
+
- 用完整测试项目 `morganite/testbed/mall-ops`(拾光商城 · 运营后台:Vue 3 + Element Plus,14 页 × 4 角色 × 50 个页面状态)对照效果预览逐角色比对,修正:
|
|
102
|
+
- Element 桥接按 DESIGN 明文与效果预览校正:标签页默认 `color.text.secondary`、选中 `color.text.selected` 且不加粗,尺寸同预览,贴在卡片顶部时缩进 `space.card`;步骤条已完成步改为 `color.border.current` + 深金勾(原为绿色),并纯 CSS 重排成预览的横排(圆点在左、标题后面接细线,手机竖排);时间线节点空心;提示条、弹窗、抽屉、消息框圆角 `radius.lg`;文字按钮正文色;分页按钮 `control.height.md` + `radius.md`、总数次要色;选择器 `color.bg.input` 填充;单选改外圈 + 圆点;分段 / 单选 / 多选按钮组与 `el-segmented` 改灰轨道 `color.bg.hover`、不描边、选中不加粗;表格正文小号字,贴边表格首尾列让出 `space.card`;面包屑、表单标签、顶栏搜索小号字;侧栏菜单项高 `control.height.md`、图标 `icon.size.lg`;勾选框 / 单选 16、开关 44 × 22 无边线;描述列表标签在上、两列均分;文本域最小 3 倍控件高;表单里的级联 / 日期 / 数字输入撑满;并排按钮不再与容器 gap 叠加;补齐 `base.css` 的标题字号 / 行高 / 字重与按钮继承字体(Element 入口不引 `base.css`,卡片标题原比预览高 3px);勾选列不再把表头撑高约 6px;侧栏分组标题行高同预览;勾选框与单选按钮组的焦点环立即出现,同预览(Element 把 outline 放进了过渡,环会从 0 长出来);新增通栏按钮 `.el-button.is-block`。
|
|
103
|
+
- 配方收进效果预览独有的页面形态(用户决定「全部照预览原样」):`.greet`、`button.user` / `.user-caret`、`.section-label` + `.page-bar`、`.board` + `.panel`、`.two-col`(1 : 1 改为 1.6 : 1)、`.stack`、`.page-head .title-row`、`.legend` + `.c1–.c6`、`.alloc-list`、`.goals`、`.setting`、`.hform` + `.avatar-row`、`.file-row`、`.secondary`、登录页 `.login*`;看板 / 两栏按内容区 880px 的容器查询收成单栏。另收项目里长出来的 `.w-search` / `.w-select` / `.w-date`、`.card-grid`、`.act-group`。效果预览删掉自己的副本、改用配方(前后截图逐像素比对,只有下面三处有意变化)。
|
|
104
|
+
- 头像(配方 `.avatar` 与 `el-avatar`)改为不透明的奶金浅底 `color.bg.selected-subtle` + `color.text.selected`(用户决定),删掉悬停时换底的补丁。
|
|
105
|
+
- 主色不当文字色:登录品牌面上的 logo 块改为 `color.bg.surface` 底 + `color.text.selected`(原为白底主色字 3.0:1);结果页错误码改为 `color.text.selected`。
|
|
106
|
+
- 骨架屏贴边放在卡片里时首尾列让出 `space.card`;错误条 `.error-box` 圆角 `radius.lg`;上传区的字号与文字色固定为正文、`color.text.secondary`(原随所在容器变化;效果预览里它是表单字段下的 label,被预览自己的标签规则压成 12px,现已排除);`.content > .stat-strip` 不再与内容区 gap 叠加。
|
|
107
|
+
- DESIGN:新增「页面状态与权限」(加载 / 空 / 出错 / 无权限 / 只读,用户决定写进规范);「布局与响应式」补页面形态配方;配方表补头像、登录页,步骤条写明横排,标签页与分段选择器写明字重。
|
|
108
|
+
- 其他修正:开关选中时滑块里的加载图标改为 `color.action.primary-active`(原 `color.text.on-primary` 是白字,压在白滑块上看不见);shadcn 进度条轨道改为 DESIGN 写的 `color.bg.selected`(原为 `color.border.default`);IconPark 描边 4 改为 3,与 `icon.stroke.width` 一致;桥接、配方、模板里 Citrine 时期的注释清理。
|
|
109
|
+
- 模板:AGENTS 去掉重复的验收条目与已失效的「推断值先确认」;Element 说明补页面形态、Element 用法约定与页面状态;走查页 `KitchenSink.vue` 的 `el-rate` 改传数字、截断演示改为多行省略。adopter 的 `ds.mjs agents` 加 `--name`(标题默认读 package.json 的 name,不再用目录名);`ds.mjs upgrade` 只合并工作副本 `design-system/`,快照里的桥接 / 模板随快照整体替换(原先本种子 `owned` 含 `bridge/**` 等,升级时会误报几十条「本地删除」冲突)。
|
|
110
|
+
- 肉眼可见:Element 项目的表格、面包屑、表单标签小一号,侧栏项变矮、图标变大,标签页 / 步骤条 / 时间线 / 分段选择器换成效果预览的样子,弹窗与提示条圆角变小,头像变成奶金底,两栏详情页左宽右窄;效果预览本身只有头像、登录 logo 与新建交易页的上传区(标题回到正文字号)变化。
|
|
111
|
+
|
|
112
|
+
## 0.1.3 — 2026-10-10
|
|
113
|
+
|
|
114
|
+
- 对照效果预览全面检查 shadcn 实测项目(用户发现单据页与预览的交易记录页差很多:表格边距、表单输入框、面包屑、标签等),逐角色比对计算样式后修正:
|
|
115
|
+
- shadcn 桥接:字号映射 `text-sm` 由小号正文改回正文 14px(按钮、输入框、菜单原来都小一号),表格单独保持小号正文,补行高;按钮改为常规字重、图标间距 `spacing.1-5`,带图标时不收窄;输入框 / 文本域 / 下拉改为填充式(原为透明底 + 透明边线,看不出框);勾选框 / 单选未选时描 `color.border.strong`、开关关闭轨道 `color.border.strong`(原来都是透明,看不见),它们的焦点改为外环。
|
|
116
|
+
- 配方新增分页 `.pagination` / `.page`、中性类别标签 `.tag`、顶栏搜索 `<label class="search">`(原来只在效果预览里,项目只能各写各的;预览改为直接用配方)。
|
|
117
|
+
- 键盘焦点:三处全局外环规则误伤带 tabindex 的输入框(Element 输入框键盘聚焦时出现 2px 粗环,违背「只加深边线」的决定),改为排除 input / textarea / select。
|
|
118
|
+
- 验收清单模板 `FOCUS.inputBorder: true`:输入类控件按边线变成 `color.border.focus`(出错时保持 `color.status.error`)认焦点。
|
|
119
|
+
- 肉眼可见:shadcn 项目的按钮与输入框字号变大一号、输入框成为灰色填充块、勾选框与开关看得见;Element 输入框键盘聚焦时不再出现粗环。
|
|
120
|
+
|
|
121
|
+
## 0.1.2 — 2026-10-09
|
|
122
|
+
|
|
123
|
+
- shadcn/ui 走查页模板:新增 `templates/KitchenSink.tsx`(从 Citrine 移植,引用 `@wycm9527/morganite/react/*`),身份文件 shadcn 栈登记 `kitchen`;说明与验收清单模板不再写「KITCHEN 先写 null」。
|
|
124
|
+
- shadcn 桥接修正(`morganite/testbed/shadcn-lab` 实测发现):弹窗 / 抽屉面板改为 `color.bg.elevated`(原为页面底,发灰);描边 / 幽灵按钮按 DESIGN 白底 + `color.border.strong` 描边、悬停只换底、文字保持正文色(原为悬停变深金字),暗色描边不再透明;错误提示条标题用 `color.text.danger`(暗色原为 3.3:1);Tailwind 的 border / border-* 线宽接到 `border.width.default`(全站 0.6px,原为 1px)。肉眼可见:shadcn 项目的弹窗变白、描边按钮变白底、边线变细。
|
|
125
|
+
- 配方:顶栏用户区悬停时头像底换成表面色(两层半透明底叠加时深金字只有 4.4:1)。
|
|
126
|
+
- 实测项目 `morganite/testbed/shadcn-lab`:citrine-accept 页面、组件走查、三端、焦点全部通过。
|
|
127
|
+
- 表格操作列的描边胶囊 `.act` 用户决定保持(不改成 antd 的纯文字链接)。
|
|
128
|
+
|
|
129
|
+
## 0.1.1 — 2026-10-09
|
|
130
|
+
|
|
131
|
+
- 接入验收工具(用户决定沿用 Citrine 的 citrine-accept):身份文件加 `accept`,新增 `templates/accept.config.mjs`(三端按 992 / 390,已批准的对比度例外写在 `APPROVED_CONTRAST`);AGENTS 模板与 Element / shadcn 说明写明验收命令。需要 citrine-tools ≥ 1.2.0(仓库内已生效,npm 随 Citrine 下次发版)。
|
|
132
|
+
- 桥接修正(验收发现):Element 输入框前后缀(¥、元、搜索图标)改用 `color.text.muted`(原为占位符色,填充底上 3.3:1);进度条渐变下垫同色实底,视觉不变、条内白字的底色可被正确读取。肉眼可见:输入框前后缀文字略深。
|
|
133
|
+
- 表格里的 Element 文字按钮悬停只变色、不叠底(用户 2026-10-09;原先行悬停与按钮悬停叠加,亮色约 4.2–4.4:1,暗色选中行再悬停只有 3.41:1)。肉眼可见:表格操作按钮悬停时不再出现浅灰底。
|
|
134
|
+
- 对比度例外登记(用户 2026-10-09 决定保持暗色链接色):暗色链接 / 文字按钮压在悬停行与气泡上约 4.3:1。
|
|
135
|
+
- 实测项目 `morganite/testbed/element-lab` 跑通 citrine-accept:页面、组件走查、三端、焦点全部通过。
|
|
136
|
+
|
|
137
|
+
## 0.1.0 — 2026-10-09
|
|
138
|
+
|
|
139
|
+
- 初版。以 Ant Design Pro v6 为视觉底座(2026-09-28 底座调研后由用户选定),由 web-to-design-system 从 Pro 演示站的工作台、查询表格、基础表单实测提炼,另手动补测暗黑(Pro「暗色风格(实验功能)」)、表格选中行、新建弹窗与详情抽屉;缺口用 antd 官方 `design.md`、ProLayout 源码默认 token 与 Pro 源码补齐。
|
|
140
|
+
- 用户决定:品牌主色初定 `#AE8A50`(金底放深字,后改白字;链接 / 选中 / 焦点取深一档;后提亮,见下)、中性色沿用 antd 纯灰、亮 / 暗两套、状态色沿用 antd 功能色并压深到可读(警示改橙色系避开品牌金)、输入框填充式、卡片边线加深到过对比度底线(表格行线随之变深;2026-10-09 改为 6% 黑,见下)。
|
|
141
|
+
- 按预期预览图调整(2026-09-29;图为 AI 概念图,按像素取样逐项对照):保留宽侧栏,当前项改为奶油金底 + 深金字(暗色为金色暗底 + 亮金字;亮色 2026-10-09 改为主色底块白字,见下),去掉 Citrine 桥接里的指示条与加粗;统计卡去掉左侧金色描边;全站描边 0.6px;绿涨红跌;圆角 8 / 12 / 16;卡片标题改为字距小标题;KPI 数字半粗;图表配色只用金 + 灰 + 绿,补顺序色与深金提示气泡;表头底深一档;卡片阴影更大更柔(2026-10-09 去掉);顶栏搜索改胶囊;成功色统一为与涨同一种祖母绿(2026-10-09 确认);玻璃模式不做。
|
|
142
|
+
- 主色提亮(2026-10-09,原主色发脏):`#AE8A50` → `#B98D44`,HSB 饱和度 54% → 63%、明度 68% → 73%,明度停在主色对白底 3:1 以内(3.02:1,不登记例外);整条品牌色阶按新主色重推,浅底与深阶明度不变,链接、侧栏深金字、提示气泡的对比度不变。肉眼可见:主按钮、图表首色、浅金、悬停 / 按下态更干净更亮。
|
|
143
|
+
- 卡片去投影、描边改浅(2026-10-09,用户指定):`elevation.card.color` 取透明(亮 / 暗),借用卡片阴影的分段器选中块、shadcn 小阴影、吸底表单栏一起变平;卡片边、分隔线、表格行线 `color.border.default` 改为 `#000` 的 6% 阶梯(`color.neutral.black-a6`),对页面底 1.13:1,登记为例外;控件描边 `color.border.strong` 保持 `#d8d8d8`,暗色边线不变。肉眼可见:卡片变平,卡片边与表格行线明显变浅。
|
|
144
|
+
- 侧栏收窄(2026-10-09,用户指定):`size.sidebar` 256px → 208px(Ant Design Pro 早期默认 siderWidth,放得下现有最宽的侧栏内容),`layout.sidebar.width` 与手机抽屉同宽随之变化;内容区多出 48px,两栏布局在更窄的窗口也能保持。
|
|
145
|
+
- 侧栏当前项(2026-10-09,用户指定):亮色改为主色底块 + 白字白图标(`color.bg.sidebar-selected` → `color.brand.500`、`color.text.sidebar-selected` → `color.white`),白字对主色 3.02:1,低于 14px 文字的 4.5,登记为例外;暗色保持金色暗底 + 亮金字。肉眼可见:亮色侧栏当前项变成金色实底。
|
|
146
|
+
- 金底改放白字(2026-10-09,用户指定:深字显脏):`color.text.on-primary` / `color.text.on-brand` → 白,主按钮、分页当前页、步骤当前步、勾选标记、logo 底块一起变;白字对主色 3.02:1,低于 4.5,亮 / 暗都登记为例外。主按钮悬停改为加深一点(`color.brand.550`),按下再深一档(`color.brand.600`),因为白字在变浅的金上只有 2.35:1。肉眼可见:主按钮变成金底白字,悬停变深而不是变浅。
|
|
147
|
+
- 侧栏底色(2026-10-09,用户指定):亮色 `color.bg.sidebar` 由透出页面底的 `#f5f5f5` 改为纯白,与顶栏、卡片同色;暗色保持纯黑(取值不变)。肉眼可见:亮色侧栏变白,和浅灰内容区分开。
|
|
148
|
+
- 输入框焦点(2026-10-09,用户指定):输入类控件聚焦只把边线换成 `color.border.focus`,线宽不变、去掉 `focus.ring` 外环(`base.css`、Element、shadcn 桥接与效果页搜索框一起改);按钮、链接、菜单项的键盘焦点环不变。肉眼可见:搜索框、输入框聚焦时不再出现一圈粗环。
|
|
149
|
+
- 配方修正(2026-10-09,效果预览扩成 8 页后逐页走查发现):`.badge.brand` 亮色下看不见 → 奶金浅底 + 深金字;`.batch` 文字改为 `color.text.primary`(与 DESIGN 一致);纯 CSS 表格补选中行;补 `.two-col` 桌面定义;「窄屏」媒体查询 1366px → 992px(与 `layout.breakpoint.narrow` 一致,992–1366px 之间统计卡保持四列)。DESIGN 配方表补「步骤条」「时间线」。
|
|
150
|
+
- 数据填充渐变(2026-10-09,用户指定):柱状图、进度条改为同色的饱和度渐变(HSB 明度不变),柱子上浅下深、横柱右浅左深、进度条左浅右深;新增 `chart.gradient.saturation`(浅端饱和度 × 0.4)。Element 进度条(含状态色)改渐变;ECharts 桥接新增 `barGradient(color)`,`rankBars` 改用渐变。中性灰没有饱和度,保持实色。
|
|
151
|
+
- 表格选中行(2026-10-09,用户指定):选中行底色改为与悬停同色 `color.bg.hover`(纯 CSS 表格、shadcn、Element 的勾选行与当前行一起),选中行再悬停改为中性深一档(亮 6% 黑 / 暗 12% 白);奶油金 `color.bg.selected-subtle` 只留给强调徽标与 Element 主色浅底。肉眼可见:勾选行从奶金变成浅灰。
|
|
152
|
+
- 数字字体(2026-10-09,用户指定):数字数据改用 D-DIN-PRO。新增 `font.family.numeric`(D-DIN-PRO → D-DIN → Bahnschrift → 正文无衬线)与 `text.numeric.family`;`text.display.family` 改指它。配方 `.num`、`.num-col`、`.stat-card__delta`,Element 表格合计行,ECharts 数值轴与排行榜标签一起换;单号仍用等宽字体。种子不分发字体文件;D-DIN-PRO 没有等宽数字,`tabular-nums` 对它不生效。肉眼可见:KPI 与表格数字变成窄体 DIN。
|
|
153
|
+
- 筹码底色(2026-10-09,用户指定):已选条件筹码的底从 4% 黑改为品牌金深一档 #8A6530 的 10%(新增 `color.bg.chip` 与原语 `color.brand.600-a10`),即筹码字色的同色浅底,叠在卡片上约 #F3F0EA、字对底 4.63:1;暗色按同一规则取亮金 #D1AB62 的 10%(用户确认,原语 `color.brand.300-a10`,约 #27231C、7.23:1)。配方 `.chip` 改用它;批量条、图标按钮选中、进度条轨道等其余小面积选中仍是中性浅灰。
|
|
154
|
+
- 待定项拍板(2026-10-09,用户决定):
|
|
155
|
+
- 分页当前页统一成金底白字:效果预览、shadcn 分页、Element 不带底色的分页改为 `color.action.primary` 实底白字(Element 带底色分页原本如此),DESIGN 不再写白底金边。
|
|
156
|
+
- 中性标签 / 中性状态胶囊的底 `color.status.neutral-bg` 由 #fafafa 改为 6% 黑(半透明,悬停行上仍可见);Element 默认标签与深色信息标签的边线改透明。
|
|
157
|
+
- Element 选中块按 antd 改主色系:日期选中日(原为白底白字,看不见)、主色徽标、深色 / 勾选标签、引导点改金底白字,评分星改金色,树当前节点与拖放目标改奶金浅底,表头筛选选中项同下拉选中项;`color.action.selected` 白块只留给分段类(`el-segmented`、单选 / 多选按钮组、shadcn Tabs)。
|
|
158
|
+
- 小号数字退回正文字体:`text.numeric.family` 改指 `font.family.body`(表格金额与日期、百分比、涨跌、图表数值、页码),配等宽数字;只有数据大字 `text.display.family` 用 D-DIN-PRO。
|
|
159
|
+
- 开关关闭态保持 #D8D8D8 轨道;暗色筹码底亮金 10% 由推断改为确认。
|
|
160
|
+
- Element Plus 实测(2026-10-09,`morganite/testbed/element-lab`):日期范围中间段改为奶金浅底(原为 Element 默认的边线灰);模板去掉 Citrine 残留——`notes-element-plus.md` 的选中规则与表格数字列用法、`notes-shadcn.md` 与 `shadcn.css` 注释的控件高度 24 / 32 / 40、三个样式入口模板注释里的占位符、`KitchenSink.vue` 挂法的包名、AGENTS 模板不再写不存在的 `npm run accept`;`package.json` 打包清单排除 `design-system/preview/shots` 与 `static`(npm 包 1.5 MB → 143 kB)。
|
|
161
|
+
- 推断值确认(2026-10-09,用户按组确认):亮色 56 个语义角色、暗色 33 个值(连同被引用的 41 个原语)由 `[推断]` 改为 `[确认]`,值不变;警示橙、成功祖母绿、弱化文字 58% 黑、占位符 45% 黑、最小字号 12px、勾选框边线 0.6px 单独确认保持(勾选框边线的说明由「1px」更正)。publish-check 不再需要 `--allow-inferred`。
|
|
162
|
+
- 种子预览页(`design-system/preview/`)跟上同日决定:`preview.local.css` 覆盖生成器默认的选中写法——表格选中行与悬停同色、分页当前页金底白字(生成器默认的 `color.action.selected` 白块在本系统是白底白卡);12 张预览截图重拍(截图不入库)。
|
|
163
|
+
- 规模:primitives 164 个;语义角色 178 个(观察 70 / 确认 108 / 推断 0),中后台必须处理的缺口 0;Theme `dark` delta 64 条。
|
|
164
|
+
- 桥接:从 citrine 2.12.0 拷入 Element Plus / shadcn / 页面配方 / ECharts 桥接当起点,引用的缺失变量全部补 token(共 28 个:Citrine 桥接引用的 22 个,加 ECharts 顺序色 5 个与图表提示气泡 1 个;其中 17 个语义名在词表外);组件走查未做。
|
|
165
|
+
- 对比度:50 组 45 组通过;填充式输入框的静息边线(亮 / 暗)、亮色卡片边线与主按钮白字(亮 / 暗)登记为例外,亮色侧栏当前项白字(不在配对里,人工核对)也登记为例外,见 DESIGN「验收基线」。侧栏分组标题 `color.text.sidebar-muted` 沿用 ProLayout 的 45% 不达 4.5(不在 50 组配对里,效果预览页实测发现),改为与弱化文字同值(2026-10-09 确认)。风险见 design-system/AUDIT.md。
|
package/LICENSE
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 WYCM9527
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
--------------------------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
D-DIN font data
|
|
26
|
+
|
|
27
|
+
The D-DIN Regular and D-DIN Bold fonts embedded (base64 WOFF, unmodified) in
|
|
28
|
+
bridge/fonts.css are not covered by the MIT License above.
|
|
29
|
+
|
|
30
|
+
D-DIN 1.0 · Copyright (C) 2017 Datto Inc. · https://www.datto.com/fonts/d-din
|
|
31
|
+
Reserved Font Names "D-DIN", "D-DIN Condensed", "D-DIN Expanded".
|
|
32
|
+
Licensed under the SIL Open Font License, Version 1.1; the full license text
|
|
33
|
+
is included at the end of bridge/fonts.css.
|
package/README.md
CHANGED
|
@@ -1,3 +1,59 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Morganite 玫瑰金 种子
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
版本 0.3.3 · 以 Ant Design Pro v6 为视觉底座,由 [web-to-design-system](https://github.com/WYCM9527/skills/tree/main/web-to-design-system) 从 Pro 演示站的工作台、查询表格、基础表单、新建弹窗与详情抽屉实测提炼(2026-09-28),品牌色按用户决定换成玫瑰金 `#B98D44`(初定 `#AE8A50`,2026-10-09 提高饱和度与明度) · 纯数据包:本目录即分发单元(npm 包 `@wycm9527/morganite`,也可以整个文件夹拷进项目;许可 MIT,内嵌的 D-DIN 字体按 SIL OFL 1.1,见 [LICENSE](LICENSE)),身份文件 `design-system.json`,接入 / 更新由 [design-system-adopter](https://github.com/WYCM9527/Design-System/tree/main/design-system-adopter) skill 驱动 · 变更见 [CHANGELOG.md](CHANGELOG.md)
|
|
4
|
+
|
|
5
|
+
适用类型:**中后台**——侧栏 + 表格 + 图表 + 弹窗尺寸的工作台。
|
|
6
|
+
|
|
7
|
+
> **0.x 起点。** `tokens/semantic.tokens.json` 里 `$description` 以 `[观察]` 开头的是实测值,`[确认]` 是用户拍板的决定——原先按 antd 规格或规则补的 56 个 `[推断]` 默认值已于 2026-10-09 全部确认(来源清单留在 `design-system/AUDIT.md`)。组件库桥接从 Citrine 拷来、按本系统改过:Element Plus 与 shadcn/ui 桥接都已用真实组件走查(`morganite/testbed/element-lab`、`morganite/testbed/shadcn-lab`),Element Plus 桥接与配方另用完整业务项目 `morganite/testbed/mall-ops`(14 页 × 4 角色 × 50 个页面状态)对照效果预览逐角色校正过。发布前跑 `publish-check.mjs --seed <本目录>`。
|
|
8
|
+
|
|
9
|
+
## 里面有什么
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
design-system/
|
|
13
|
+
├── DESIGN.md # 设计意图与规则(不含数值)
|
|
14
|
+
├── AUDIT.md # 证据、推断、缺口、对比度基线、桥接缺口、风险
|
|
15
|
+
├── tokens/primitives.tokens.json # 值:color.<族>.<明度档>、spacing.<px/4>、radius / font / size / border / shadow / duration / easing / z / opacity
|
|
16
|
+
├── tokens/semantic.tokens.json # 用途:color.action / text / bg / border / status …、text.* 阶梯、control.height.*、layout.*、elevation.*、motion.*、layer.*
|
|
17
|
+
├── themes/dark/ # 相对 Core 的 delta + THEME.md
|
|
18
|
+
├── theme-map.json # 激活方式 / 默认模式 / 登记
|
|
19
|
+
├── scope-map.json # 空;局部规范在目标项目里按证据登记
|
|
20
|
+
├── style-dictionary.config.mjs # 与 design-system-steward 脚手架相同
|
|
21
|
+
└── dist/ # 构建产物,随种子提交:纯 CSS 渠道 ds.mjs export 直接读它;接入项目里 steward 会按工作副本重建
|
|
22
|
+
bridge/ # base.css(纯 CSS 栈)+ fonts.css(数字字体 D-DIN,三个桥接入口都会引入)+ 从 citrine 拷入的 element-plus / shadcn 桥接、recipes、配方组件(起点,见 AUDIT「桥接缺口」)
|
|
23
|
+
templates/ # 接线模板:entry-*.css(样式入口)、notes-*.md(接线要点)、AGENTS.md(项目规则模板)
|
|
24
|
+
migration/roles.json # 旧规范 → 新 token 的角色对照(adopter「更换现有规范」的 settle 阶段用),hints 已含 antd v5/v6 CSS 变量、v4 Less 变量与默认色值
|
|
25
|
+
design-system.json # 身份文件:id / 版本 / upstream / 栈 / owned 清单——adopter skill 靠它识别与更新
|
|
26
|
+
package.json # 包定义:exports 暴露 bridge/* 与 design-system/*;files 决定 npm 包与 Releases 里的 tgz 带哪些文件
|
|
27
|
+
LICENSE # MIT;bridge/fonts.css 内嵌的 D-DIN 字体按 SIL OFL 1.1(许可全文在该文件末尾)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 用法
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# 装好 design-system-adopter 之后先装种子,二选一:
|
|
34
|
+
npm i @wycm9527/morganite # npm(验收工具另装 npm i -D @wycm9527/citrine-tools style-dictionary@5.5.2)
|
|
35
|
+
# 或把本目录放进项目任意位置(如 vendor/morganite):init 落成快照后按它打印的步骤 npm i file:./design-systems/morganite
|
|
36
|
+
# 然后按技术栈选一个:
|
|
37
|
+
node .cursor/skills/design-system-adopter/scripts/ds.mjs init --system morganite --stack element-plus # Vue 3 + Element Plus
|
|
38
|
+
node .cursor/skills/design-system-adopter/scripts/ds.mjs init --system morganite --stack shadcn # React + Tailwind v4 + shadcn/ui
|
|
39
|
+
node .cursor/skills/design-system-adopter/scripts/ds.mjs init --system morganite --stack css # 其他(纯 CSS)
|
|
40
|
+
# init 做的事:落成只读快照 design-systems/morganite/ → 生成工作副本 design-system/ → 写 .adopter.json → 打印样式入口与接线步骤
|
|
41
|
+
# 然后 steward:validate-system → build-tokens(需要 style-dictionary@5.5.2)→ guard 应为 current
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
可用的栈:`css`(纯 CSS(任意栈))、`element-plus`(Vue 3 + Element Plus)、`shadcn`(React + Tailwind v4 + shadcn/ui)。样式入口见 `templates/entry-*.css`;项目自己的样式只引用 `var(--color-*)` / `var(--spacing-*)` 等变量。数字字体 D-DIN 由桥接自带(`bridge/fonts.css`,SIL OFL 1.1),项目不用另装字体;设了 CSP 的项目要允许 `font-src data:`。
|
|
45
|
+
|
|
46
|
+
## 从旧规范迁移
|
|
47
|
+
|
|
48
|
+
按角色对照,不按色值找近似:`migration/roles.json` 把「正文色 / 边线 / 页面底 / 主色按钮 / 状态色 / 链接 / 边线宽 / 圆角 / 字号 / 间距 / 控件高 / 阴影」映射到本系统的 token 名。流程:项目先提交一次 → adopter `init`(旧 `design-system/` 改名当证据)并 `build-tokens` → steward `audit` → 有旧变量才 `migrate --phase adopt` → `replace` → `settle`(adopter 用这份对照起草决策文件,确认后 `--apply`)→ 豁免登记 → `guard` / `status` 两绿。旧系统独有、新系统没有对应物的东西写进 `noEquivalent`。
|
|
49
|
+
|
|
50
|
+
## 这套 token 怎么来的
|
|
51
|
+
|
|
52
|
+
1. `extract-evidence.mjs` 用 agent-browser 打开来源页面,在运行时里统计颜色(按用途 / 面积 / 文字量 / 所落底色)、字号 / 字重 / 行高、间距、圆角、线宽、阴影、时长 / 缓动、z-index、控件高度、断点、根变量,并做暗色探测与悬停 / 焦点探针。
|
|
53
|
+
2. `draft-tokens.mjs` 把颜色按 OKLCH 分族分档命名,其余按阶梯归档,再按与 Citrine 对齐的语义角色词表起别名;每个别名的 `$description` 写明是 `[观察]` 还是 `[推断]`。
|
|
54
|
+
3. 脚本够不到的状态手动补测(Pro 暗黑、表格选中行、新建弹窗、详情抽屉),缺口用 antd 官方 `design.md`、ProLayout 源码默认 token 与 Pro 源码补齐。
|
|
55
|
+
4. 按用户决定把品牌族换成玫瑰金 `#AE8A50`(色阶由 `@ant-design/colors` 生成后按对比度校正;2026-10-09 主色提亮为 `#B98D44`,色阶按原色阶在 OKLCH 里的位置重推),逐角色核对,补齐 `DESIGN.md`,跑 steward 三绿。
|
|
56
|
+
|
|
57
|
+
## 版本策略
|
|
58
|
+
|
|
59
|
+
描述 / 文档修正是 patch,新增或修改 token 是 minor(页面像素会变),重命名 / 删除是 major。仓库只打 `morganite-vX.Y.Z` 一种 tag;adopter 的 `status / upgrade` 靠这个 tag 前缀找新版本。
|
package/bridge/base.css
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/* Morganite 玫瑰金 · 基础桥接(纯 CSS 栈)。只引用 design-system/dist 里的变量,不写任何色值与像素;
|
|
2
|
+
与组件库无关。项目样式放在它之后,同样只引用变量。有 Element Plus / shadcn 等组件库时,桥接要按组件逐条接管——那是系统层工作,向设计系统维护者提提案。 */
|
|
3
|
+
|
|
4
|
+
@import "./fonts.css";
|
|
5
|
+
|
|
6
|
+
html {
|
|
7
|
+
color-scheme: light dark;
|
|
8
|
+
-webkit-text-size-adjust: 100%;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
body {
|
|
12
|
+
margin: 0;
|
|
13
|
+
background: var(--color-bg-page);
|
|
14
|
+
color: var(--color-text-primary);
|
|
15
|
+
font-family: var(--font-family-body);
|
|
16
|
+
font-size: var(--text-body-size);
|
|
17
|
+
line-height: var(--text-body-line-height);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Mac 上 antialiased 会把中文削细一档;保持 auto。 */
|
|
21
|
+
body,
|
|
22
|
+
button,
|
|
23
|
+
input,
|
|
24
|
+
select,
|
|
25
|
+
textarea {
|
|
26
|
+
-webkit-font-smoothing: auto;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* 浏览器默认给表单控件 Arial,按钮里的数字会和正文不一样。 */
|
|
30
|
+
button,
|
|
31
|
+
input,
|
|
32
|
+
select,
|
|
33
|
+
textarea {
|
|
34
|
+
font-family: inherit;
|
|
35
|
+
font-size: inherit;
|
|
36
|
+
color: inherit;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
h1,
|
|
40
|
+
h2,
|
|
41
|
+
h3,
|
|
42
|
+
h4,
|
|
43
|
+
p,
|
|
44
|
+
ul,
|
|
45
|
+
ol,
|
|
46
|
+
figure,
|
|
47
|
+
blockquote {
|
|
48
|
+
margin: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
h1 {
|
|
52
|
+
font-size: var(--text-display-size, var(--text-heading-size));
|
|
53
|
+
font-weight: var(--text-display-weight, var(--text-weight-strong));
|
|
54
|
+
line-height: var(--text-heading-line-height);
|
|
55
|
+
letter-spacing: var(--text-display-tracking, normal);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
h2 {
|
|
59
|
+
font-size: var(--text-heading-size);
|
|
60
|
+
font-weight: var(--text-weight-strong);
|
|
61
|
+
line-height: var(--text-heading-line-height);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
h3 {
|
|
65
|
+
font-size: var(--text-title-size);
|
|
66
|
+
font-weight: var(--text-weight-strong);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
h4 {
|
|
70
|
+
font-size: var(--text-title-sm-size);
|
|
71
|
+
font-weight: var(--text-weight-label);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
small,
|
|
75
|
+
.help {
|
|
76
|
+
font-size: var(--text-small-size);
|
|
77
|
+
color: var(--color-text-muted);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
a {
|
|
81
|
+
color: var(--color-text-link);
|
|
82
|
+
text-decoration: var(--text-link-decoration, underline);
|
|
83
|
+
transition: color var(--motion-duration-fast) var(--motion-easing-standard);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
a:hover {
|
|
87
|
+
color: var(--color-text-link-hover);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
code,
|
|
91
|
+
pre,
|
|
92
|
+
kbd {
|
|
93
|
+
font-family: var(--font-family-code, monospace);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
hr {
|
|
97
|
+
border: 0;
|
|
98
|
+
border-top: var(--border-width-default) solid var(--color-border-default);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
::placeholder {
|
|
102
|
+
color: var(--color-text-placeholder);
|
|
103
|
+
opacity: 1;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
:disabled,
|
|
107
|
+
[aria-disabled="true"] {
|
|
108
|
+
opacity: var(--opacity-disabled);
|
|
109
|
+
cursor: not-allowed;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* 焦点必须可见:按钮、链接这类用外环;输入类控件只把边线换深、线宽不变(光标本身就提示焦点)。颜色与粗细都来自 token。 */
|
|
113
|
+
:focus-visible {
|
|
114
|
+
outline: var(--focus-ring-width) solid var(--color-focus-ring);
|
|
115
|
+
outline-offset: 2px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
input:focus-visible,
|
|
119
|
+
select:focus-visible,
|
|
120
|
+
textarea:focus-visible {
|
|
121
|
+
outline: none;
|
|
122
|
+
border-color: var(--color-border-focus);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
::selection {
|
|
126
|
+
background: var(--color-bg-selected, var(--color-action-primary));
|
|
127
|
+
color: var(--color-text-selected, var(--color-text-on-primary));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
@media (prefers-reduced-motion: reduce) {
|
|
131
|
+
*,
|
|
132
|
+
*::before,
|
|
133
|
+
*::after {
|
|
134
|
+
transition-duration: 0s !important;
|
|
135
|
+
animation-duration: 0s !important;
|
|
136
|
+
scroll-behavior: auto !important;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// bridge/echarts.js 的类型声明(给 TypeScript / React 项目)。实现见 echarts.js。
|
|
2
|
+
export interface ChartTokens {
|
|
3
|
+
palette: string[]
|
|
4
|
+
sequential: string[]
|
|
5
|
+
area: string
|
|
6
|
+
text: string
|
|
7
|
+
muted: string
|
|
8
|
+
primary: string
|
|
9
|
+
line: string
|
|
10
|
+
strong: string
|
|
11
|
+
lineWidth: number
|
|
12
|
+
baselineDash: number
|
|
13
|
+
surface: string
|
|
14
|
+
inverseBg: string
|
|
15
|
+
inverseText: string
|
|
16
|
+
tooltipBg: string
|
|
17
|
+
tooltipShadowY: number
|
|
18
|
+
tooltipShadowBlur: number
|
|
19
|
+
tooltipShadowColor: string
|
|
20
|
+
tooltipRadius: number
|
|
21
|
+
tooltipPadding: [number, number]
|
|
22
|
+
fontFamily: string
|
|
23
|
+
font: number
|
|
24
|
+
numericFamily: string
|
|
25
|
+
radius: number
|
|
26
|
+
gradientSaturation: number
|
|
27
|
+
gradientStart: string
|
|
28
|
+
gradientEnd: string
|
|
29
|
+
}
|
|
30
|
+
export interface BarGradientOptions { horizontal?: boolean; el?: Element }
|
|
31
|
+
export interface BarEndsOptions { horizontal?: boolean; selected?: Record<string, boolean>; el?: Element }
|
|
32
|
+
export interface TrendSeries { name: string; data: (number | null)[] }
|
|
33
|
+
export interface TrendLineOptions { days: string[]; series: TrendSeries[]; area?: Record<string, unknown>; count?: boolean; el?: Element }
|
|
34
|
+
export interface RankBarsOptions { categories: string[]; values: number[]; top?: number; formatter?: (value: number) => string; el?: Element }
|
|
35
|
+
|
|
36
|
+
export function chartTokens(el?: Element): ChartTokens
|
|
37
|
+
export function theme(el?: Element): Record<string, unknown>
|
|
38
|
+
export function registerTheme(echarts: { registerTheme(name: string, theme: Record<string, unknown>): void }, name?: string, el?: Element): string
|
|
39
|
+
export function areaGradient(echarts: unknown, el?: Element): Record<string, unknown>
|
|
40
|
+
export function trendLine(options: TrendLineOptions): Record<string, unknown>
|
|
41
|
+
export function rankBars(options: RankBarsOptions): Record<string, unknown>
|
|
42
|
+
export function barGradient(color: string, options?: BarGradientOptions): Record<string, unknown>
|
|
43
|
+
export function barEnds<T extends Record<string, unknown>>(series: T[], options?: BarEndsOptions): T[]
|
|
44
|
+
export function withBarEnds<T extends Record<string, unknown>>(option: T, options?: Omit<BarEndsOptions, 'horizontal'>): T
|