@qijenchen/design-system 0.1.0-beta.118 → 0.1.0-beta.119

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.
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { cva } from "class-variance-authority";
4
- import { cn, lineClampClass } from "../../lib/utils.js";
4
+ import { lineClampClass, cn } from "../../lib/utils.js";
5
5
  import { Avatar } from "../../components/Avatar/avatar.js";
6
6
  import { Tooltip, TooltipTrigger, TooltipContent } from "../../components/Tooltip/tooltip.js";
7
7
  import { useTruncated } from "../../hooks/use-truncated.js";
@@ -3,8 +3,8 @@
3
3
  "schemaVersion": 1,
4
4
  "role": "template-consumer",
5
5
  "release": {
6
- "designSystem": "0.1.0-beta.118",
7
- "storybookConfig": "0.1.0-beta.118"
6
+ "designSystem": "0.1.0-beta.119",
7
+ "storybookConfig": "0.1.0-beta.119"
8
8
  },
9
9
  "upgradeTrust": {
10
10
  "schemaVersion": 1,
@@ -42,10 +42,10 @@
42
42
  "implementationSha256": "98b74118fb5b410b77ad2994aa9105fa7609c7353822f8c5213cce54d94f0af4"
43
43
  },
44
44
  "payload": {
45
- "forkCorpusLockSha256": "b2b0f964c5dd2a82ee44e0b8eaf5445395f89d75514afa812265ea4dd747c8dd",
45
+ "forkCorpusLockSha256": "b6d683290975478a8934c2ca47af813defcded09de5cf4c168ba31a47d5b90e8",
46
46
  "discoveryPolicySha256": "fba289aeeb5a3f11139b9589f7ab08b5e8c8799c7bdf8f0ea57ebfeb8e7c9da6",
47
47
  "providerMaterializersSha256": "732e85b01a12e7dd19469e26e4427f0e0cfe5117a78fc9f69c2f0f89702f463a",
48
- "providerLifecycleSha256": "55d1ace4e57691daba1cb9299e045f003225531707390ce4c5ec20dd143bc604",
48
+ "providerLifecycleSha256": "d7b8cb9a66df18be111df4034b89b38a0f49664abe80528e4dd1996d03dd0cc7",
49
49
  "providerInventorySha256": "00adf1c4f6b3367055a9cc3fdfe658660771b4c9931f696e12761a95076ad92c",
50
50
  "executionRuntimeSha256": "d9377cc45308731f287d7b1711b7c38fc4e02ff8f84729bcbbf01bb52d136904",
51
51
  "commonInstructionSha256": "a72c51a412d6cdb3961d691744013c8362e826626a330cecf4a296a6f4d93a5c",
@@ -107,7 +107,7 @@
107
107
  "scripts/lib/a11y-static-server.mjs": "3ae8ca74a66ca5f155d1a1d0c97280d41f07556274c8c077705a489ebe6a7018",
108
108
  "scripts/lib/canonical-path-containment.mjs": "0244e31dc3be5015bed3efd65a5a77086a2e4676e9ac79cd0801c8cde6a74fcd",
109
109
  "scripts/lib/closed-tool-execution.mjs": "eacd0cd92c5bff03e40ff4e82c02fae9bf2e6f543f157eef3d41c3ed8b7d3cb6",
110
- "scripts/lib/consumer-control-plane-policy.mjs": "ea8b11ddc5c964ea742ccba5e6a3bc2f215db5d165afe2cca96192812287750c",
110
+ "scripts/lib/consumer-control-plane-policy.mjs": "51aba211bb2f755eff7fa48bb060f9835356a62d2643ab5049147a9896c7bb72",
111
111
  "scripts/lib/exact-workspace-dependencies.mjs": "b4921ad903a3ed3d901187d406a87270190945c5ca1874b089e80df898d47a97",
112
112
  "scripts/lib/governance-dependency-bootstrap.mjs": "8b37cf68731810ad665e02b7ac4a2a5a4ad55b01c6d9e0cbb37f33f3b00118f3",
113
113
  "scripts/lib/provider-lifecycle.mjs": "9aabb2c98efc454b8555308a34830e6590b034b10a63f76f788fbd4cf37ce7e7",
@@ -17,8 +17,14 @@ export const PROTECTED_CONTROL_PLANE_PATH_PREFIXES = Object.freeze([
17
17
  export const REVIEWED_CONTROL_PLANE_UPDATE_COMMAND =
18
18
  'node infra/governance/bin/consumerctl.mjs plan-control-plane-update'
19
19
 
20
+ // 兩條路都要講,只講前者會把 legacy-profile 的 consumer 導進死路:recurring lane 要求 profile 在
21
+ // consumer-upgrade-protocol.json 的 reviewedControlPlaneUpdate.entryProfiles 內,legacy profile 不在,
22
+ // 而要進去得先完成 promotion —— promotion 又要求一個「非作者」的獨立簽署,單人 fleet 無法滿足。
23
+ // legacy profile 自己的 entry mode(one-time reviewed full-snapshot PR)一直是通的,由第二條指令固化。
20
24
  export const REVIEWED_CONTROL_PLANE_UPDATE_ROUTE =
21
25
  `use the recurring reviewed control-plane update protocol in the DS authority checkout; start with \`${REVIEWED_CONTROL_PLANE_UPDATE_COMMAND}\``
26
+ + '. If the consumer is still on a legacy bootstrap profile (not in reviewedControlPlaneUpdate.entryProfiles),'
27
+ + ' use its own one-time reviewed full-snapshot route instead: `node scripts/consumer-fullsnapshot-upgrade.mjs`'
22
28
 
23
29
  export function requiresReviewedControlPlaneUpdate(path) {
24
30
  invariant(typeof path === 'string' && path.length > 0, 'protected control-plane path must be a non-empty string')
@@ -303,7 +303,7 @@
303
303
  {
304
304
  "schemaVersion": 1,
305
305
  "file": "consumer/managed-files/145aab4b4fc470fc9ba7679b4a1d87d4f6a6d604940bd40f8d675c8af696498f.blob",
306
- "sha256": "ea8b11ddc5c964ea742ccba5e6a3bc2f215db5d165afe2cca96192812287750c",
306
+ "sha256": "51aba211bb2f755eff7fa48bb060f9835356a62d2643ab5049147a9896c7bb72",
307
307
  "source": "scripts/lib/consumer-control-plane-policy.mjs",
308
308
  "classification": null,
309
309
  "destination": "scripts/lib/consumer-control-plane-policy.mjs"
@@ -663,7 +663,7 @@
663
663
  {
664
664
  "schemaVersion": 1,
665
665
  "file": "hooks/check_consumer_app_invariants.sh",
666
- "sha256": "b9205c06d6f3ab5ab1ce46a62bfbaedda02c62cd474bcb5f9931bbb54acae985",
666
+ "sha256": "0cfd6f321e4de7e778be5869129aa82c846da3564d6913c75b7f66dd014f3191",
667
667
  "source": "check_consumer_app_invariants.sh",
668
668
  "classification": "SHIP_AS_IS",
669
669
  "destination": null
@@ -727,7 +727,7 @@
727
727
  {
728
728
  "schemaVersion": 1,
729
729
  "file": "hooks/check_layout_space_magic_numbers.sh",
730
- "sha256": "9cc344cce5898c98f00e61861cd483559c28fbb92e3784127ddd7cc2979bc746",
730
+ "sha256": "7a3d47170344945f6b07e331413b13d868f0655c82375f15bc6f1fde0b9a5a1e",
731
731
  "source": "check_layout_space_magic_numbers.sh",
732
732
  "classification": "SHIP_AS_IS",
733
733
  "destination": null
@@ -919,7 +919,7 @@
919
919
  {
920
920
  "schemaVersion": 1,
921
921
  "file": "manifest.json",
922
- "sha256": "b0a4b5c84abb95f45fcd3e4811a65c43ddee3fbcdd4b745b6ce09f741bf1ccd8",
922
+ "sha256": "2490f73687425558ad7728eaae2c685a7b963687a0bc3d4e26ec6a44c3c83fde",
923
923
  "source": null,
924
924
  "classification": null,
925
925
  "destination": null
@@ -524,12 +524,13 @@ if grep -qE '>[^<]*\{[a-zA-Z0-9_.]+\} *\(\{[a-zA-Z0-9_.]*(count|Count|length|tot
524
524
  ! grep -q '@count-in-label-ok:' <<<"$CONTENT"; then
525
525
  VIOLATIONS="${VIOLATIONS} - 計數括號串接 {label} ({count}) → row header 用「標題左、純數字右 space-between + tabular-nums」(item-anatomy.spec.md:176);互動元素(tab/chip/button)用 badge slot。aria/純文字匯出層 → @count-in-label-ok: <rationale>\n"
526
526
  fi
527
- # C17 分隔線幾何:vertical Separator 無 mx- = 黏按鈕(action-bar.spec.md「分隔線幾何」h-6 mx-1;
528
- # ButtonGroup 內用 <ButtonDivider/>(mx built-in))。
527
+ # C17 分隔線幾何:vertical Separator 無 mx- = 黏按鈕。2026-08-07 起 action region 群組線的
528
+ # 唯一實作是 <ButtonDivider/>(長度由「該列最高元件 − inset」自動算,mx 內建);Separator 只剩
529
+ # 版面切分用途,那類仍需自帶左右間距(action-bar.spec.md「分隔線幾何」)。
529
530
  SEP_TAGS=$(echo "$CONTENT" | grep -oE '<(DS\.)?Separator[^>]*orientation=["'"'"']vertical["'"'"'][^>]*' || true)
530
531
  if [ -n "$SEP_TAGS" ] && grep -qv 'mx-' <<<"$SEP_TAGS" && \
531
532
  ! grep -q '@separator-geometry-ok:' <<<"$CONTENT"; then
532
- VIOLATIONS="${VIOLATIONS} - vertical <Separator> 無 mx- = 分隔線黏按鈕 → toolbar className=\"h-6 mx-1\"(dense h-5 mx-1);ButtonGroup 內用 <ButtonDivider/>(action-bar.spec.md「分隔線幾何」)。版面切分 divider → @separator-geometry-ok: <rationale>\n"
533
+ VIOLATIONS="${VIOLATIONS} - vertical <Separator> 無 mx- = 分隔線黏按鈕 → action region 群組線改用 <ButtonDivider/>(長度自動、間距內建);純版面切分才用 Separator 並自帶 mx-(action-bar.spec.md「分隔線幾何」)。版面切分 divider → @separator-geometry-ok: <rationale>\n"
533
534
  fi
534
535
  # C20 連結字手刻 underline:color.spec.md「Action — Primary」= hover 換色不用底線;
535
536
  # dropzone 連結走 FileUpload children slot。no-underline / hover:underline 皆不中此 regex 形。
@@ -85,8 +85,9 @@ EOF_PH
85
85
  exit 2
86
86
  fi
87
87
 
88
- # 2026-07-10 批次 A:divider 幾何 canonical(h-6 mx-1 / h-5 mx-1,action-bar.spec.md「分隔線幾何」)
89
- # 是**正解**,不該被 magic-number 攔(原本懲罰 canonical 修法、放行違規 = 治理自我打架)。
88
+ # 2026-07-10 批次 A:divider 幾何是**正解**,不該被 magic-number 攔(原本懲罰 canonical 修法、
89
+ # 放行違規 = 治理自我打架)。2026-08-07 更新:action region 群組線的長度已由 ButtonDivider
90
+ # --action-divider-* token 自動算,不再出現硬值;此處放行的只剩版面切分 Separator 的間距寫法。
90
91
  governance_hook_grep_capture MAGIC_LINES_FILTERED 'layout-space canonical-divider filter failed' \
91
92
  "$MAGIC_LINES" -vE '(Separator|ButtonDivider)'
92
93
  MAGIC_LINES="$MAGIC_LINES_FILTERED"
@@ -104,20 +104,20 @@
104
104
  },
105
105
  "providerLifecycle": {
106
106
  "schemaVersion": 4,
107
- "releaseVersion": "0.1.0-beta.118",
107
+ "releaseVersion": "0.1.0-beta.119",
108
108
  "immutableHead": {
109
109
  "providerInventorySha256": "86e9d0668cb54ad1bf05c36e78b4aa80417d5f468c929dd3ddcf69c1afbf32e4",
110
- "releaseVersion": "0.1.0-beta.117",
111
- "snapshotSha256": "e03b95342944512f9c084c0ac5fe5fba4b688924758ce725f16504eaec8af5a4"
110
+ "releaseVersion": "0.1.0-beta.118",
111
+ "snapshotSha256": "1967a89f9de7202ac0596965af2d8fa5af9cacf7f3e19c1be5f48be047d805fc"
112
112
  },
113
- "ledgerSha256": "74d0e29cc9ed73f52ca788ce6fd52aa44f7066ba9acd560b11e9104947f98073",
114
- "previousSnapshotSha256": "e03b95342944512f9c084c0ac5fe5fba4b688924758ce725f16504eaec8af5a4",
115
- "currentSnapshotSha256": "1967a89f9de7202ac0596965af2d8fa5af9cacf7f3e19c1be5f48be047d805fc",
113
+ "ledgerSha256": "d183167f2c64fe6f4d00ac13f0d35976b79dc15c2d3d0ad3573b82476a70fe1c",
114
+ "previousSnapshotSha256": "1967a89f9de7202ac0596965af2d8fa5af9cacf7f3e19c1be5f48be047d805fc",
115
+ "currentSnapshotSha256": "89a97b3c47da235aee5ef83fab8836d26952facc015a9d98b17b2194a07d31ec",
116
116
  "currentProviderInventorySha256": "86e9d0668cb54ad1bf05c36e78b4aa80417d5f468c929dd3ddcf69c1afbf32e4",
117
117
  "retiredProviders": [],
118
118
  "currentSnapshot": {
119
- "releaseVersion": "0.1.0-beta.118",
120
- "previousSnapshotSha256": "e03b95342944512f9c084c0ac5fe5fba4b688924758ce725f16504eaec8af5a4",
119
+ "releaseVersion": "0.1.0-beta.119",
120
+ "previousSnapshotSha256": "1967a89f9de7202ac0596965af2d8fa5af9cacf7f3e19c1be5f48be047d805fc",
121
121
  "providers": [
122
122
  {
123
123
  "id": "claude",
@@ -193,8 +193,8 @@
193
193
  "retiredProviders": []
194
194
  },
195
195
  "immutableHeadSnapshot": {
196
- "releaseVersion": "0.1.0-beta.117",
197
- "previousSnapshotSha256": "f022897462d32b7e633c5f9d8e58ee9efe41e641ae42ab52668c4e3f360e2f9d",
196
+ "releaseVersion": "0.1.0-beta.118",
197
+ "previousSnapshotSha256": "e03b95342944512f9c084c0ac5fe5fba4b688924758ce725f16504eaec8af5a4",
198
198
  "providers": [
199
199
  {
200
200
  "id": "claude",
@@ -524,12 +524,13 @@ if grep -qE '>[^<]*\{[a-zA-Z0-9_.]+\} *\(\{[a-zA-Z0-9_.]*(count|Count|length|tot
524
524
  ! grep -q '@count-in-label-ok:' <<<"$CONTENT"; then
525
525
  VIOLATIONS="${VIOLATIONS} - 計數括號串接 {label} ({count}) → row header 用「標題左、純數字右 space-between + tabular-nums」(item-anatomy.spec.md:176);互動元素(tab/chip/button)用 badge slot。aria/純文字匯出層 → @count-in-label-ok: <rationale>\n"
526
526
  fi
527
- # C17 分隔線幾何:vertical Separator 無 mx- = 黏按鈕(action-bar.spec.md「分隔線幾何」h-6 mx-1;
528
- # ButtonGroup 內用 <ButtonDivider/>(mx built-in))。
527
+ # C17 分隔線幾何:vertical Separator 無 mx- = 黏按鈕。2026-08-07 起 action region 群組線的
528
+ # 唯一實作是 <ButtonDivider/>(長度由「該列最高元件 − inset」自動算,mx 內建);Separator 只剩
529
+ # 版面切分用途,那類仍需自帶左右間距(action-bar.spec.md「分隔線幾何」)。
529
530
  SEP_TAGS=$(echo "$CONTENT" | grep -oE '<(DS\.)?Separator[^>]*orientation=["'"'"']vertical["'"'"'][^>]*' || true)
530
531
  if [ -n "$SEP_TAGS" ] && grep -qv 'mx-' <<<"$SEP_TAGS" && \
531
532
  ! grep -q '@separator-geometry-ok:' <<<"$CONTENT"; then
532
- VIOLATIONS="${VIOLATIONS} - vertical <Separator> 無 mx- = 分隔線黏按鈕 → toolbar className=\"h-6 mx-1\"(dense h-5 mx-1);ButtonGroup 內用 <ButtonDivider/>(action-bar.spec.md「分隔線幾何」)。版面切分 divider → @separator-geometry-ok: <rationale>\n"
533
+ VIOLATIONS="${VIOLATIONS} - vertical <Separator> 無 mx- = 分隔線黏按鈕 → action region 群組線改用 <ButtonDivider/>(長度自動、間距內建);純版面切分才用 Separator 並自帶 mx-(action-bar.spec.md「分隔線幾何」)。版面切分 divider → @separator-geometry-ok: <rationale>\n"
533
534
  fi
534
535
  # C20 連結字手刻 underline:color.spec.md「Action — Primary」= hover 換色不用底線;
535
536
  # dropzone 連結走 FileUpload children slot。no-underline / hover:underline 皆不中此 regex 形。
@@ -85,8 +85,9 @@ EOF_PH
85
85
  exit 2
86
86
  fi
87
87
 
88
- # 2026-07-10 批次 A:divider 幾何 canonical(h-6 mx-1 / h-5 mx-1,action-bar.spec.md「分隔線幾何」)
89
- # 是**正解**,不該被 magic-number 攔(原本懲罰 canonical 修法、放行違規 = 治理自我打架)。
88
+ # 2026-07-10 批次 A:divider 幾何是**正解**,不該被 magic-number 攔(原本懲罰 canonical 修法、
89
+ # 放行違規 = 治理自我打架)。2026-08-07 更新:action region 群組線的長度已由 ButtonDivider
90
+ # --action-divider-* token 自動算,不再出現硬值;此處放行的只剩版面切分 Separator 的間距寫法。
90
91
  governance_hook_grep_capture MAGIC_LINES_FILTERED 'layout-space canonical-divider filter failed' \
91
92
  "$MAGIC_LINES" -vE '(Separator|ButtonDivider)'
92
93
  MAGIC_LINES="$MAGIC_LINES_FILTERED"
@@ -253,7 +253,7 @@ expect_silent "34. C18 aria-label 括號形 → silent"
253
253
  run_hook "$PROD_TSX" 'export const B = () => <><Button>A</Button><Separator orientation="vertical" className="h-6" /><Button>B</Button></>'
254
254
  expect_block "35. C17 vertical Separator 無 mx → BLOCK"
255
255
 
256
- # 36. C17 NEGATIVE:h-6 mx-1 canonical → silent
256
+ # 36. C17 NEGATIVE:版面切分 Separator 自帶 mx- → silent(action region 群組線改用 ButtonDivider)
257
257
  run_hook "$PROD_TSX" 'export const B = () => <><Button>A</Button><Separator orientation="vertical" className="h-6 mx-1" /><Button>B</Button></>'
258
258
  expect_silent "36. C17 h-6 mx-1 canonical → silent"
259
259
 
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/ajenchen/design-system.git"
6
6
  },
7
- "version": "0.1.0-beta.118",
7
+ "version": "0.1.0-beta.119",
8
8
  "private": false,
9
9
  "description": "World-class design system — components, patterns, tokens, hooks (single source of truth for team distribution).",
10
10
  "type": "module",