@q1travel/design-system 0.1.0 → 0.3.0

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.
Files changed (32) hide show
  1. package/.agents/skills/product-design/AGENTS.md +9 -0
  2. package/.agents/skills/product-design/SKILL.md +63 -0
  3. package/.agents/skills/product-design/exemplars/README.md +12 -0
  4. package/.agents/skills/product-design/references/copy.md +7 -0
  5. package/.agents/skills/product-design/references/coverage-gaps.md +9 -0
  6. package/.agents/skills/product-design/references/glossary.md +5 -0
  7. package/.agents/skills/product-design/references/interface-quality.md +7 -0
  8. package/.agents/skills/product-design/references/patterns.md +13 -0
  9. package/.agents/skills/product-design/references/product-judgment.md +7 -0
  10. package/.agents/skills/product-design/references/resilience.md +13 -0
  11. package/.agents/skills/product-design/references/review-geist.md +94 -0
  12. package/.agents/skills/product-design/references/rules.md +17 -0
  13. package/.agents/skills/product-design/references/surfaces-forms.md +14 -0
  14. package/.agents/skills/product-design/references/surfaces-overlays.md +12 -0
  15. package/.agents/skills/product-design/references/surfaces.md +14 -0
  16. package/bin/q1-design.mjs +464 -0
  17. package/contracts/design-engineering-principles.md +39 -0
  18. package/contracts/design.dark.md +333 -0
  19. package/contracts/design.md +333 -0
  20. package/contracts/icon-system.md +77 -0
  21. package/contracts/implementation-map.md +29 -0
  22. package/contracts/interface-guidelines.md +122 -0
  23. package/contracts/token-naming.md +82 -0
  24. package/{dist → dist-pkg}/design-system.d.ts +36 -26
  25. package/{dist → dist-pkg}/design-system.js +222 -216
  26. package/{dist → dist-pkg}/style.css +2 -2
  27. package/package.json +19 -9
  28. package/tooling/README.md +9 -0
  29. package/tooling/scripts/evals/fixtures.json +7 -0
  30. package/tooling/scripts/evals/rules-checklist.json +23 -0
  31. package/tooling/scripts/evals/transition-all/after/example.css +4 -0
  32. package/tooling/scripts/evals/transition-all/before/example.css +4 -0
@@ -2230,7 +2230,7 @@ a.breadcrumb__link:hover {
2230
2230
  padding-right: 48px;
2231
2231
  }
2232
2232
 
2233
- .tabs-specimen {
2233
+ .tabs-root {
2234
2234
  border: 1px solid var(--q1-color-border);
2235
2235
  border-radius: var(--q1-radius-3);
2236
2236
  background: var(--q1-color-bg-panel);
@@ -2308,7 +2308,7 @@ a.breadcrumb__link:hover {
2308
2308
  align-items: center;
2309
2309
  }
2310
2310
 
2311
- .tabs-specimen {
2311
+ .tabs-root {
2312
2312
  display: grid;
2313
2313
  gap: var(--q1-space-4);
2314
2314
  }
package/package.json CHANGED
@@ -1,20 +1,29 @@
1
1
  {
2
2
  "name": "@q1travel/design-system",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "type": "module",
6
- "main": "./dist/design-system.js",
7
- "module": "./dist/design-system.js",
8
- "types": "./dist/design-system.d.ts",
6
+ "main": "./dist-pkg/design-system.js",
7
+ "module": "./dist-pkg/design-system.js",
8
+ "types": "./dist-pkg/design-system.d.ts",
9
+ "bin": {
10
+ "q1-design": "./bin/q1-design.mjs"
11
+ },
9
12
  "exports": {
10
13
  ".": {
11
- "types": "./dist/design-system.d.ts",
12
- "import": "./dist/design-system.js"
14
+ "types": "./dist-pkg/design-system.d.ts",
15
+ "import": "./dist-pkg/design-system.js"
13
16
  },
14
- "./style.css": "./dist/style.css"
17
+ "./style.css": "./dist-pkg/style.css",
18
+ "./contracts/*": "./contracts/*",
19
+ "./package.json": "./package.json"
15
20
  },
16
21
  "files": [
17
- "dist"
22
+ "dist-pkg",
23
+ "contracts",
24
+ ".agents",
25
+ "tooling",
26
+ "bin"
18
27
  ],
19
28
  "sideEffects": [
20
29
  "*.css"
@@ -29,7 +38,8 @@
29
38
  "check": "npm run build && npm run check:shell && npm run check:browser",
30
39
  "build:lib": "vite build --config vite.lib.config.ts",
31
40
  "build:style": "node scripts/build-style.mjs",
32
- "build:pkg": "npm run build:lib && npm run build:style"
41
+ "build:pkg": "npm run build:lib && npm run build:style",
42
+ "prepack": "npm run build:pkg"
33
43
  },
34
44
  "dependencies": {
35
45
  "lucide-react": "^0.468.0"
@@ -0,0 +1,9 @@
1
+ # tooling/scripts/evals
2
+
3
+ 产品设计框架的确定性工具层(规则 + eval)。
4
+
5
+ - `evals/rules-checklist.json` —— 稳定 ID 规则清单(`Q1-DS-*`);`kind=deterministic` 可静态强制,`kind=judgment` 留给 product-design skill / Review。
6
+ - `evals/fixtures.json` —— eval fixture 索引。
7
+ - `evals/<fixture>/{before,after}/` —— 每条规则的前后态样例,用来测 skill / linter 是否产出预期改动。
8
+
9
+ **现状**:`q1-design lint` 已实现 `Q1-DS-001`(`--ds-*`)/`Q1-DS-401`(`transition: all`)/`Q1-DS-501`(裸颜色字面量)三条纯机械规则;`q1-design eval` 已实现,对每个 fixture 校验 before 命中且 after 零命中。其余 `kind=deterministic` 规则(含判断成分)与全部 `kind=judgment` 规则待后续批次。见 `../.agents/skills/product-design/references/coverage-gaps.md`。
@@ -0,0 +1,7 @@
1
+ {
2
+ "note": "eval 种子:每个 fixture 引一条规则,给 before/after 两态,用来测 skill/linter 是否产出预期改动。runner 即 `q1-design eval`(bin/q1-design.mjs,已实现);expectedHits 为 before 的精确命中数,after 恒 0。",
3
+ "version": 0,
4
+ "fixtures": [
5
+ { "id": "transition-all", "rule": "Q1-DS-401", "dir": "transition-all", "summary": "transition: all → 只过渡具体属性", "expectedHits": 1 }
6
+ ]
7
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "note": "q1travel 产品设计确定性规则清单。每条带稳定 ID + canonical 出处。kind=deterministic 的可由 linter 静态强制;kind=judgment 的留给 product-design skill / Review。linter CLI 与 eval runner 已实现:`q1-design lint`(Q1-DS-001/401/501)与 `q1-design eval`(bin/q1-design.mjs);覆盖缺口见 ../../../.agents/skills/product-design/references/coverage-gaps.md。",
3
+ "version": 0,
4
+ "idScheme": {
5
+ "0xx": "token 与事实源",
6
+ "1xx": "交互与命中区",
7
+ "2xx": "表单",
8
+ "3xx": "内容与可访问性",
9
+ "4xx": "动效",
10
+ "5xx": "主题"
11
+ },
12
+ "rules": [
13
+ { "id": "Q1-DS-001", "title": "新代码用 --q1-*,不用 --ds-*", "source": "contracts/token-naming.md", "severity": "error", "kind": "deterministic", "detect": "新增/改动代码里出现 --ds-* 声明或作为新决策源名", "fix": "改用 --q1-* canonical token" },
14
+ { "id": "Q1-DS-101", "title": "导航用原生 link、动作用原生 button", "source": "contracts/interface-guidelines.md#interactions", "severity": "error", "kind": "judgment", "detect": "用 div/span + onClick 承载导航或动作", "fix": "导航用 <a href>,动作用 <button>" },
15
+ { "id": "Q1-DS-102", "title": "命中区 ≥24px(触摸 44px)", "source": "contracts/interface-guidelines.md#interactions", "severity": "warn", "kind": "judgment", "detect": "可点击元素视觉/命中区小于 24px 且未扩大命中区", "fix": "min-width/height + 负 margin 扩大命中区,不撑高容器" },
16
+ { "id": "Q1-DS-301", "title": "icon-only 控件必须有可访问名", "source": "contracts/interface-guidelines.md#content-and-accessibility", "severity": "error", "kind": "judgment", "detect": "只含图标的 button/link 无 aria-label / 可访问名", "fix": "补 aria-label 或视觉隐藏文本" },
17
+ { "id": "Q1-DS-401", "title": "禁用 transition: all", "source": "contracts/interface-guidelines.md#animation", "severity": "error", "kind": "deterministic", "detect": "CSS 出现 `transition: all` 或 `transition-property: all`", "fix": "只列需要过渡的具体属性(opacity / transform)" },
18
+ { "id": "Q1-DS-402", "title": "必须 honor prefers-reduced-motion", "source": "contracts/interface-guidelines.md#animation", "severity": "warn", "kind": "judgment", "detect": "有非平凡动效但无 prefers-reduced-motion 兜底", "fix": "加 @media (prefers-reduced-motion: reduce) 降级" },
19
+ { "id": "Q1-DS-403", "title": "只动 opacity / transform", "source": "contracts/interface-guidelines.md#animation", "severity": "warn", "kind": "deterministic", "detect": "transition/animation 作用于非 opacity/transform 属性且无书面理由", "fix": "改用 opacity/transform,或记书面理由" },
20
+ { "id": "Q1-DS-501", "title": "主题用 token,不用页面局部颜色常量", "source": "contracts/interface-guidelines.md#theming", "severity": "error", "kind": "deterministic", "detect": "组件 CSS 出现裸 hex / rgba() 颜色字面量", "fix": "改用 --q1-color-* / 语义 token;需要混色用 color-mix" },
21
+ { "id": "Q1-DS-502", "title": "native select 显式设前景/背景", "source": "contracts/interface-guidelines.md#theming", "severity": "warn", "kind": "judgment", "detect": "样式化的 <select> 未显式设 color / background", "fix": "显式设 select 的 fg/bg 以匹配当前主题" }
22
+ ]
23
+ }
@@ -0,0 +1,4 @@
1
+ /* after —— 只过渡具体属性(opacity / transform) */
2
+ .q1-card {
3
+ transition: opacity 200ms ease, transform 200ms ease;
4
+ }
@@ -0,0 +1,4 @@
1
+ /* before —— 违反 Q1-DS-401(注释不得含规则字面量,否则自身会被 lint 命中) */
2
+ .q1-card {
3
+ transition: all 200ms ease;
4
+ }