skill-chef 0.3.2 → 0.3.13
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/SKILL.md +42 -29
- package/dist/add/commands.js +1 -1
- package/dist/add/index.d.ts +1 -0
- package/dist/add/index.d.ts.map +1 -1
- package/dist/add/index.js +1 -0
- package/dist/add/index.js.map +1 -1
- package/dist/add/pages.d.ts +62 -0
- package/dist/add/pages.d.ts.map +1 -0
- package/dist/add/pages.js +362 -0
- package/dist/add/pages.js.map +1 -0
- package/dist/add/routes.d.ts +4 -4
- package/dist/add/routes.d.ts.map +1 -1
- package/dist/add/routes.js +12 -6
- package/dist/add/routes.js.map +1 -1
- package/dist/add/run-write.d.ts.map +1 -1
- package/dist/add/run-write.js +39 -0
- package/dist/add/run-write.js.map +1 -1
- package/dist/cli/cmd_read.js +17 -1
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/config.d.ts +0 -10
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +22 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/keys.d.ts +1 -1
- package/dist/cli/keys.d.ts.map +1 -1
- package/dist/cli/keys.js +16 -4
- package/dist/cli/keys.js.map +1 -1
- package/dist/cook/commands.js +1 -1
- package/dist/cook/index.d.ts +2 -1
- package/dist/cook/index.d.ts.map +1 -1
- package/dist/cook/index.js +1 -1
- package/dist/cook/index.js.map +1 -1
- package/dist/cook/page-art.d.ts +18 -0
- package/dist/cook/page-art.d.ts.map +1 -0
- package/dist/cook/page-art.js +30 -0
- package/dist/cook/page-art.js.map +1 -0
- package/dist/cook/page-css.d.ts +9 -0
- package/dist/cook/page-css.d.ts.map +1 -0
- package/dist/cook/page-css.js +206 -0
- package/dist/cook/page-css.js.map +1 -0
- package/dist/cook/page-text.d.ts +28 -0
- package/dist/cook/page-text.d.ts.map +1 -0
- package/dist/cook/page-text.js +65 -0
- package/dist/cook/page-text.js.map +1 -0
- package/dist/cook/routes.js +4 -4
- package/dist/cook/run.d.ts +56 -1
- package/dist/cook/run.d.ts.map +1 -1
- package/dist/cook/run.js +252 -22
- package/dist/cook/run.js.map +1 -1
- package/dist/data/commands.d.ts +6 -7
- package/dist/data/commands.d.ts.map +1 -1
- package/dist/data/commands.js +15 -8
- package/dist/data/commands.js.map +1 -1
- package/dist/data/index.d.ts +2 -0
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +2 -0
- package/dist/data/index.js.map +1 -1
- package/dist/data/pages.d.ts +50 -0
- package/dist/data/pages.d.ts.map +1 -0
- package/dist/data/pages.js +226 -0
- package/dist/data/pages.js.map +1 -0
- package/dist/data/routes.d.ts +4 -5
- package/dist/data/routes.d.ts.map +1 -1
- package/dist/data/routes.js +8 -10
- package/dist/data/routes.js.map +1 -1
- package/dist/data/run-batch.d.ts +21 -0
- package/dist/data/run-batch.d.ts.map +1 -0
- package/dist/data/run-batch.js +123 -0
- package/dist/data/run-batch.js.map +1 -0
- package/dist/data/run-query.d.ts +5 -6
- package/dist/data/run-query.d.ts.map +1 -1
- package/dist/data/run-query.js +113 -28
- package/dist/data/run-query.js.map +1 -1
- package/dist/help/lookup.d.ts.map +1 -1
- package/dist/help/lookup.js +20 -4
- package/dist/help/lookup.js.map +1 -1
- package/dist/help/sceneData.d.ts +8 -7
- package/dist/help/sceneData.d.ts.map +1 -1
- package/dist/help/sceneData.js +22 -21
- package/dist/help/sceneData.js.map +1 -1
- package/dist/history/commands.js +1 -1
- package/dist/history/page-css.d.ts +12 -0
- package/dist/history/page-css.d.ts.map +1 -0
- package/dist/history/page-css.js +208 -0
- package/dist/history/page-css.js.map +1 -0
- package/dist/history/pages.d.ts +77 -0
- package/dist/history/pages.d.ts.map +1 -0
- package/dist/history/pages.js +282 -0
- package/dist/history/pages.js.map +1 -0
- package/dist/history/routes.d.ts +4 -6
- package/dist/history/routes.d.ts.map +1 -1
- package/dist/history/routes.js +22 -16
- package/dist/history/routes.js.map +1 -1
- package/dist/history/run-query.d.ts +48 -0
- package/dist/history/run-query.d.ts.map +1 -1
- package/dist/history/run-query.js +96 -10
- package/dist/history/run-query.js.map +1 -1
- package/dist/history/run-record.d.ts +12 -2
- package/dist/history/run-record.d.ts.map +1 -1
- package/dist/history/run-record.js +28 -14
- package/dist/history/run-record.js.map +1 -1
- package/dist/history/validate.d.ts +22 -0
- package/dist/history/validate.d.ts.map +1 -0
- package/dist/history/validate.js +69 -0
- package/dist/history/validate.js.map +1 -0
- package/dist/policy/wakewords.d.ts +1 -1
- package/dist/policy/wakewords.d.ts.map +1 -1
- package/dist/policy/wakewords.js +23 -2
- package/dist/policy/wakewords.js.map +1 -1
- package/dist/relation/commands.d.ts +6 -5
- package/dist/relation/commands.d.ts.map +1 -1
- package/dist/relation/commands.js +23 -6
- package/dist/relation/commands.js.map +1 -1
- package/dist/relation/index.d.ts +3 -0
- package/dist/relation/index.d.ts.map +1 -1
- package/dist/relation/index.js +3 -0
- package/dist/relation/index.js.map +1 -1
- package/dist/relation/pages.d.ts +37 -0
- package/dist/relation/pages.d.ts.map +1 -0
- package/dist/relation/pages.js +224 -0
- package/dist/relation/pages.js.map +1 -0
- package/dist/relation/routes.d.ts +6 -5
- package/dist/relation/routes.d.ts.map +1 -1
- package/dist/relation/routes.js +17 -16
- package/dist/relation/routes.js.map +1 -1
- package/dist/relation/run-query.d.ts +10 -0
- package/dist/relation/run-query.d.ts.map +1 -0
- package/dist/relation/run-query.js +104 -0
- package/dist/relation/run-query.js.map +1 -0
- package/dist/relation/run-write.d.ts +13 -0
- package/dist/relation/run-write.d.ts.map +1 -0
- package/dist/relation/run-write.js +114 -0
- package/dist/relation/run-write.js.map +1 -0
- package/dist/relation/shapes.d.ts +8 -0
- package/dist/relation/shapes.d.ts.map +1 -0
- package/dist/relation/shapes.js +153 -0
- package/dist/relation/shapes.js.map +1 -0
- package/dist/relation/treeShapes.d.ts +23 -0
- package/dist/relation/treeShapes.d.ts.map +1 -0
- package/dist/relation/treeShapes.js +289 -0
- package/dist/relation/treeShapes.js.map +1 -0
- package/dist/render/copyArea.d.ts +67 -0
- package/dist/render/copyArea.d.ts.map +1 -0
- package/dist/render/copyArea.js +146 -0
- package/dist/render/copyArea.js.map +1 -0
- package/dist/render/envelope.d.ts.map +1 -1
- package/dist/render/envelope.js +4 -0
- package/dist/render/envelope.js.map +1 -1
- package/dist/render/index.d.ts +7 -0
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +7 -0
- package/dist/render/index.js.map +1 -1
- package/dist/render/sceneBand.d.ts +36 -0
- package/dist/render/sceneBand.d.ts.map +1 -0
- package/dist/render/sceneBand.js +166 -0
- package/dist/render/sceneBand.js.map +1 -0
- package/dist/render/sceneRhythm.d.ts +6 -0
- package/dist/render/sceneRhythm.d.ts.map +1 -0
- package/dist/render/sceneRhythm.js +149 -0
- package/dist/render/sceneRhythm.js.map +1 -0
- package/dist/render/sceneShell.d.ts +17 -0
- package/dist/render/sceneShell.d.ts.map +1 -0
- package/dist/render/sceneShell.js +46 -0
- package/dist/render/sceneShell.js.map +1 -0
- package/dist/render/skin.d.ts +13 -0
- package/dist/render/skin.d.ts.map +1 -0
- package/dist/render/skin.js +282 -0
- package/dist/render/skin.js.map +1 -0
- package/dist/search/routes.d.ts +12 -4
- package/dist/search/routes.d.ts.map +1 -1
- package/dist/search/routes.js +39 -7
- package/dist/search/routes.js.map +1 -1
- package/dist/search/run.d.ts +10 -2
- package/dist/search/run.d.ts.map +1 -1
- package/dist/search/run.js +61 -9
- package/dist/search/run.js.map +1 -1
- package/dist/setup/commands.d.ts +5 -5
- package/dist/setup/commands.d.ts.map +1 -1
- package/dist/setup/commands.js +14 -6
- package/dist/setup/commands.js.map +1 -1
- package/dist/setup/index.d.ts +3 -5
- package/dist/setup/index.d.ts.map +1 -1
- package/dist/setup/index.js +3 -5
- package/dist/setup/index.js.map +1 -1
- package/dist/setup/pages.d.ts +19 -0
- package/dist/setup/pages.d.ts.map +1 -0
- package/dist/setup/pages.js +163 -0
- package/dist/setup/pages.js.map +1 -0
- package/dist/setup/routes.d.ts +4 -5
- package/dist/setup/routes.d.ts.map +1 -1
- package/dist/setup/routes.js +7 -8
- package/dist/setup/routes.js.map +1 -1
- package/dist/setup/run-init.d.ts +11 -0
- package/dist/setup/run-init.d.ts.map +1 -0
- package/dist/setup/run-init.js +19 -0
- package/dist/setup/run-init.js.map +1 -0
- package/dist/shared/command-spec.d.ts +5 -3
- package/dist/shared/command-spec.d.ts.map +1 -1
- package/dist/shopping/commands.js +1 -1
- package/dist/shopping/commands.js.map +1 -1
- package/dist/shopping/index.d.ts +1 -0
- package/dist/shopping/index.d.ts.map +1 -1
- package/dist/shopping/index.js +1 -0
- package/dist/shopping/index.js.map +1 -1
- package/dist/shopping/pages.d.ts +22 -0
- package/dist/shopping/pages.d.ts.map +1 -0
- package/dist/shopping/pages.js +170 -0
- package/dist/shopping/pages.js.map +1 -0
- package/dist/shopping/routes.js +4 -4
- package/dist/shopping/routes.js.map +1 -1
- package/dist/shopping/run.d.ts +9 -5
- package/dist/shopping/run.d.ts.map +1 -1
- package/dist/shopping/run.js +58 -10
- package/dist/shopping/run.js.map +1 -1
- package/dist/triggers/chef-scenes.d.ts +3 -2
- package/dist/triggers/chef-scenes.d.ts.map +1 -1
- package/dist/triggers/chef-scenes.js +16 -15
- package/dist/triggers/chef-scenes.js.map +1 -1
- package/dist/update/routes.d.ts +6 -4
- package/dist/update/routes.d.ts.map +1 -1
- package/dist/update/routes.js +20 -6
- package/dist/update/routes.js.map +1 -1
- package/dist/update/run-write.d.ts.map +1 -1
- package/dist/update/run-write.js +211 -1
- package/dist/update/run-write.js.map +1 -1
- package/dist/view/commands.js +1 -1
- package/dist/view/page.d.ts +25 -0
- package/dist/view/page.d.ts.map +1 -0
- package/dist/view/page.js +306 -0
- package/dist/view/page.js.map +1 -0
- package/dist/view/pageCss.d.ts +8 -0
- package/dist/view/pageCss.d.ts.map +1 -0
- package/dist/view/pageCss.js +327 -0
- package/dist/view/pageCss.js.map +1 -0
- package/dist/view/pageSection.d.ts +21 -0
- package/dist/view/pageSection.d.ts.map +1 -0
- package/dist/view/pageSection.js +59 -0
- package/dist/view/pageSection.js.map +1 -0
- package/dist/view/routes.js +7 -7
- package/dist/view/run.d.ts +5 -1
- package/dist/view/run.d.ts.map +1 -1
- package/dist/view/run.js +66 -7
- package/dist/view/run.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** 派生能力的写处理(`chef.relation.write` 的 add/derive 两 op)+ 本域独占的取数。
|
|
2
|
+
*
|
|
3
|
+
* 老件语义来源(只读对照,一行动不动老件):
|
|
4
|
+
* · add:`scripts/relation_manager.py:47-131`(父子存在校验+关系类型枚举+改动说明必填+单 INSERT);
|
|
5
|
+
* · derive:`scripts/派生/ops.py:182-244`(母本校验+新菜创建+关系插入同一事务+母子差异 diff)。
|
|
6
|
+
* 本票不改 schema、不碰真库;缺值按 #818 甲拦下补齐,不写半条脏数据。
|
|
7
|
+
*/
|
|
8
|
+
import type { ChefDb } from '../fetch/db.js';
|
|
9
|
+
/** op 路由:add(默认)/derive(从已有派生新菜)。非法 op 入口已拦,落不到这里。 */
|
|
10
|
+
export declare function parseRelationOp(params: Record<string, unknown>): string;
|
|
11
|
+
/** 跑 `chef.relation.write`:op 由入口算好下传,本函数只做本域两路分支。 */
|
|
12
|
+
export declare function runRelationWrite(handle: ChefDb, params: Record<string, unknown>, op: string): unknown;
|
|
13
|
+
//# sourceMappingURL=run-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-write.d.ts","sourceRoot":"","sources":["../../src/relation/run-write.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAgB7C,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAIvE;AAED,sDAAsD;AACtD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CA4ErG"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/** 派生能力的写处理(`chef.relation.write` 的 add/derive 两 op)+ 本域独占的取数。
|
|
2
|
+
*
|
|
3
|
+
* 老件语义来源(只读对照,一行动不动老件):
|
|
4
|
+
* · add:`scripts/relation_manager.py:47-131`(父子存在校验+关系类型枚举+改动说明必填+单 INSERT);
|
|
5
|
+
* · derive:`scripts/派生/ops.py:182-244`(母本校验+新菜创建+关系插入同一事务+母子差异 diff)。
|
|
6
|
+
* 本票不改 schema、不碰真库;缺值按 #818 甲拦下补齐,不写半条脏数据。
|
|
7
|
+
*/
|
|
8
|
+
import { randomUUID } from 'node:crypto';
|
|
9
|
+
import { ChefFetchError, ChefPolicyError } from '../fetch/errors.js';
|
|
10
|
+
import { getRecipeDetail, mustRecipe, now, qAll, qGet, qRun } from '../fetch/db.js';
|
|
11
|
+
import { addRecipe } from '../add/index.js';
|
|
12
|
+
import { buildRecipeReceipt } from '../render/index.js';
|
|
13
|
+
/** 关系类型白名单(老件 validators 同语义:派生/变体/改良)。 */
|
|
14
|
+
const RELATION_TYPES = ['派生', '变体', '改良'];
|
|
15
|
+
function needText(params, key) {
|
|
16
|
+
const v = params[key];
|
|
17
|
+
if (typeof v !== 'string' || !v.trim()) {
|
|
18
|
+
throw new ChefPolicyError('POLICY_MISSING_SLOT', '缺槽位 ' + key);
|
|
19
|
+
}
|
|
20
|
+
return v.trim();
|
|
21
|
+
}
|
|
22
|
+
/** op 路由:add(默认)/derive(从已有派生新菜)。非法 op 入口已拦,落不到这里。 */
|
|
23
|
+
export function parseRelationOp(params) {
|
|
24
|
+
const op = params.op === undefined ? 'add' : params.op;
|
|
25
|
+
if (op === 'add' || op === 'derive')
|
|
26
|
+
return op;
|
|
27
|
+
throw new ChefPolicyError('POLICY_BAD_INPUT', 'relation.write 只接受 op=add/derive');
|
|
28
|
+
}
|
|
29
|
+
/** 跑 `chef.relation.write`:op 由入口算好下传,本函数只做本域两路分支。 */
|
|
30
|
+
export function runRelationWrite(handle, params, op) {
|
|
31
|
+
if (op === 'add') {
|
|
32
|
+
const parentName = needText(params, 'parent');
|
|
33
|
+
const childName = needText(params, 'child');
|
|
34
|
+
const relationType = needText(params, 'relation_type');
|
|
35
|
+
const changeSummary = needText(params, 'change_summary');
|
|
36
|
+
if (!RELATION_TYPES.includes(relationType)) {
|
|
37
|
+
throw new ChefPolicyError('POLICY_BAD_INPUT', '关系类型须为派生/变体/改良');
|
|
38
|
+
}
|
|
39
|
+
const parent = mustRecipe(handle, parentName);
|
|
40
|
+
const child = mustRecipe(handle, childName);
|
|
41
|
+
if (parent.id === child.id) {
|
|
42
|
+
throw new ChefPolicyError('POLICY_BAD_INPUT', '不能派生自身');
|
|
43
|
+
}
|
|
44
|
+
const id = randomUUID();
|
|
45
|
+
try {
|
|
46
|
+
qRun(handle, 'INSERT INTO recipe_relations (id, parent_id, child_id, relation_type, change_summary) VALUES (?, ?, ?, ?, ?)', [id, parent.id, child.id, relationType, changeSummary]);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
if (e instanceof ChefFetchError)
|
|
50
|
+
throw e;
|
|
51
|
+
throw new ChefFetchError('CHEF_DB_UNREADABLE', '派生关系写盘失败', { cause: e });
|
|
52
|
+
}
|
|
53
|
+
return buildRecipeReceipt('已记派生关系:' + parent.name + '到' + child.name + '(' + relationType + ')');
|
|
54
|
+
}
|
|
55
|
+
if (op === 'derive') {
|
|
56
|
+
const sourceName = needText(params, 'source');
|
|
57
|
+
const targetName = needText(params, 'target');
|
|
58
|
+
const differences = needText(params, 'differences');
|
|
59
|
+
const relationTypeRaw = typeof params.relation_type === 'string' && params.relation_type.trim() ? params.relation_type.trim() : '派生';
|
|
60
|
+
if (!RELATION_TYPES.includes(relationTypeRaw)) {
|
|
61
|
+
throw new ChefPolicyError('POLICY_BAD_INPUT', '关系类型须为派生/变体/改良');
|
|
62
|
+
}
|
|
63
|
+
const mother = getRecipeDetail(handle, sourceName);
|
|
64
|
+
if (mother.recipe.status === '已废弃') {
|
|
65
|
+
throw new ChefFetchError('CHEF_BAD_QUERY', '母本已废弃,不能派生');
|
|
66
|
+
}
|
|
67
|
+
const dup = qGet(handle, 'SELECT COUNT(*) AS c FROM recipes WHERE name = ?', [targetName]);
|
|
68
|
+
if (dup && Number(dup.c) > 0) {
|
|
69
|
+
throw new ChefFetchError('CHEF_RECIPE_CORRUPT', '新菜名已存在:“' + targetName + '”');
|
|
70
|
+
}
|
|
71
|
+
const created = addRecipe(handle, {
|
|
72
|
+
name: targetName,
|
|
73
|
+
description: mother.recipe.description ? mother.recipe.description + '(派生差异:' + differences + ')' : '由' + mother.recipe.name + '派生:' + differences,
|
|
74
|
+
difficulty: mother.recipe.difficulty,
|
|
75
|
+
servings: mother.recipe.servings,
|
|
76
|
+
total_time_minutes: mother.recipe.total_time_minutes,
|
|
77
|
+
status: '未做',
|
|
78
|
+
photo_url: '',
|
|
79
|
+
source: mother.recipe.source,
|
|
80
|
+
source_url: mother.recipe.source_url,
|
|
81
|
+
});
|
|
82
|
+
try {
|
|
83
|
+
handle.db.exec('BEGIN');
|
|
84
|
+
for (const g of [...mother.ingredients].sort((a, b) => a.sequence - b.sequence)) {
|
|
85
|
+
if (g.quantity === null) {
|
|
86
|
+
throw new ChefFetchError('CHEF_BAD_QUERY', '母本食材缺数字用量,派生前请先补齐');
|
|
87
|
+
}
|
|
88
|
+
qRun(handle, 'INSERT INTO ingredients (id, recipe_id, sequence, name, category, quantity, unit, quantity_text, is_optional, substitute) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [randomUUID(), created.id, g.sequence, g.name, g.category, g.quantity, g.unit, g.quantity_text, g.is_optional, g.substitute]);
|
|
89
|
+
}
|
|
90
|
+
for (const s of [...mother.steps].sort((a, b) => a.sequence - b.sequence)) {
|
|
91
|
+
if (s.duration_minutes === null) {
|
|
92
|
+
throw new ChefFetchError('CHEF_BAD_QUERY', '母本步骤缺数字时长,派生前请先补齐');
|
|
93
|
+
}
|
|
94
|
+
qRun(handle, 'INSERT INTO cooking_steps (id, recipe_id, sequence, action, duration_minutes, heat_level, temperature, expected_result) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', [randomUUID(), created.id, s.sequence, s.action, s.duration_minutes, s.heat_level, s.temperature, s.expected_result]);
|
|
95
|
+
}
|
|
96
|
+
qRun(handle, 'INSERT INTO recipe_relations (id, parent_id, child_id, relation_type, change_summary) VALUES (?, ?, ?, ?, ?)', [randomUUID(), mother.recipe.id, created.id, relationTypeRaw, differences]);
|
|
97
|
+
handle.db.exec('COMMIT');
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
try {
|
|
101
|
+
handle.db.exec('ROLLBACK');
|
|
102
|
+
}
|
|
103
|
+
catch { /* 已回滚 */ }
|
|
104
|
+
if (e instanceof ChefFetchError || e instanceof ChefPolicyError)
|
|
105
|
+
throw e;
|
|
106
|
+
throw new ChefFetchError('CHEF_DB_UNREADABLE', '派生写盘失败', { cause: e });
|
|
107
|
+
}
|
|
108
|
+
void now();
|
|
109
|
+
void qAll;
|
|
110
|
+
return buildRecipeReceipt('已从' + mother.recipe.name + '派生新菜:' + targetName + '(差异:' + differences + ')');
|
|
111
|
+
}
|
|
112
|
+
throw new ChefPolicyError('POLICY_BAD_INPUT', 'relation.write 只接受 op=add/derive');
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=run-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-write.js","sourceRoot":"","sources":["../../src/relation/run-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** #873 派生席 · 回执那两页的页内形状(结论条+状态徽章/关系对图/说明段/动作行),兼页内样式唯一入口。
|
|
2
|
+
*
|
|
3
|
+
* 家族树那一族住同目录的 `treeShapes.ts`:两族的变化频率不同,拆开之后两件都在本包告警线 350 行以内。
|
|
4
|
+
* 规则顺序与拆件前逐行相同(先回执族、后家族树族),因此产物一字不变。
|
|
5
|
+
*/
|
|
6
|
+
/** 本域三页的页内形状样式唯一产出者(回执两页 + 家族树)。恒返回非空 CSS 文本。 */
|
|
7
|
+
export declare function relationShapeCss(): string;
|
|
8
|
+
//# sourceMappingURL=shapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../../src/relation/shapes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,iDAAiD;AACjD,wBAAgB,gBAAgB,IAAI,MAAM,CAgJzC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/** #873 派生席 · 回执那两页的页内形状(结论条+状态徽章/关系对图/说明段/动作行),兼页内样式唯一入口。
|
|
2
|
+
*
|
|
3
|
+
* 家族树那一族住同目录的 `treeShapes.ts`:两族的变化频率不同,拆开之后两件都在本包告警线 350 行以内。
|
|
4
|
+
* 规则顺序与拆件前逐行相同(先回执族、后家族树族),因此产物一字不变。
|
|
5
|
+
*/
|
|
6
|
+
import { LF, relationTreeShapeCss, TONE, tint } from './treeShapes.js';
|
|
7
|
+
/** 本域三页的页内形状样式唯一产出者(回执两页 + 家族树)。恒返回非空 CSS 文本。 */
|
|
8
|
+
export function relationShapeCss() {
|
|
9
|
+
const root = '.ilife-page-ui ';
|
|
10
|
+
const node = root + '.ilife-relation-node';
|
|
11
|
+
return [
|
|
12
|
+
'/* #873 派生席 · 页内形状(关系对图 + 三层家族树),只命中本域三页 */',
|
|
13
|
+
/* 结论条与状态徽章配成一行:判定句与它的状态在同一格里。 */
|
|
14
|
+
root + '.ilife-relation-verdict {',
|
|
15
|
+
' display: flex;',
|
|
16
|
+
' flex-wrap: wrap;',
|
|
17
|
+
' align-items: center;',
|
|
18
|
+
' gap: 10px;',
|
|
19
|
+
' margin: 0;',
|
|
20
|
+
'}',
|
|
21
|
+
root + '.ilife-relation-verdict > .ilife-block-conclusion {',
|
|
22
|
+
' flex: 1 1 200px;',
|
|
23
|
+
' min-width: 0;',
|
|
24
|
+
' margin: 0;',
|
|
25
|
+
'}',
|
|
26
|
+
root + '.ilife-relation-verdict > .ilife-status-badge {',
|
|
27
|
+
' flex: 0 0 auto;',
|
|
28
|
+
'}',
|
|
29
|
+
/* 关系对图:两格节点 + 中间一格给关系类型与箭头。箭头自上而下由暖转主色,
|
|
30
|
+
两端节点各带一条同色的左缘,读起来是「从这一头到那一头」。 */
|
|
31
|
+
root + '.ilife-relation-pair {',
|
|
32
|
+
' display: grid;',
|
|
33
|
+
' grid-template-columns: minmax(0, 1fr) 52px minmax(0, 1fr);',
|
|
34
|
+
' align-items: center;',
|
|
35
|
+
' margin: 16px 0 0;',
|
|
36
|
+
'}',
|
|
37
|
+
node + ' {',
|
|
38
|
+
' position: relative;',
|
|
39
|
+
' display: flex;',
|
|
40
|
+
' align-items: center;',
|
|
41
|
+
' gap: 10px;',
|
|
42
|
+
' box-sizing: border-box;',
|
|
43
|
+
' min-width: 0;',
|
|
44
|
+
' padding: 12px 14px;',
|
|
45
|
+
' border: 1px solid var(--line);',
|
|
46
|
+
' border-left-width: 4px;',
|
|
47
|
+
' border-radius: 14px;',
|
|
48
|
+
' background: var(--card);',
|
|
49
|
+
'}',
|
|
50
|
+
node + '-up {',
|
|
51
|
+
' border-left-color: ' + TONE.up + ';',
|
|
52
|
+
' background: ' + tint(TONE.up, 12) + ';',
|
|
53
|
+
'}',
|
|
54
|
+
node + '-down {',
|
|
55
|
+
' border-left-color: ' + TONE.down + ';',
|
|
56
|
+
' background: ' + tint(TONE.down, 12) + ';',
|
|
57
|
+
'}',
|
|
58
|
+
root + '.ilife-relation-node-body {',
|
|
59
|
+
' min-width: 0;',
|
|
60
|
+
'}',
|
|
61
|
+
/* 图标位:一枚圆角方块底 + 一枚箭头字形。纯装饰,字一个都不进样式。 */
|
|
62
|
+
root + '.ilife-relation-icon {',
|
|
63
|
+
' display: inline-flex;',
|
|
64
|
+
' align-items: center;',
|
|
65
|
+
' justify-content: center;',
|
|
66
|
+
' flex: 0 0 auto;',
|
|
67
|
+
' width: 22px;',
|
|
68
|
+
' height: 22px;',
|
|
69
|
+
' border-radius: 8px;',
|
|
70
|
+
' color: var(--card);',
|
|
71
|
+
' background: ' + TONE.up + ';',
|
|
72
|
+
'}',
|
|
73
|
+
root + '.ilife-relation-icon svg {',
|
|
74
|
+
' display: block;',
|
|
75
|
+
'}',
|
|
76
|
+
root + '.ilife-relation-icon-here {',
|
|
77
|
+
' background: ' + TONE.here + ';',
|
|
78
|
+
'}',
|
|
79
|
+
root + '.ilife-relation-icon-down {',
|
|
80
|
+
' background: ' + TONE.down + ';',
|
|
81
|
+
'}',
|
|
82
|
+
root + '.ilife-relation-role {',
|
|
83
|
+
' display: block;',
|
|
84
|
+
' color: var(--fg2);',
|
|
85
|
+
' font-size: 12px;',
|
|
86
|
+
'}',
|
|
87
|
+
root + '.ilife-relation-name {',
|
|
88
|
+
' display: block;',
|
|
89
|
+
' margin-top: 3px;',
|
|
90
|
+
' color: var(--fg);',
|
|
91
|
+
' font-size: 17px;',
|
|
92
|
+
' font-weight: 600;',
|
|
93
|
+
' overflow-wrap: anywhere;',
|
|
94
|
+
'}',
|
|
95
|
+
root + '.ilife-relation-link {',
|
|
96
|
+
' display: flex;',
|
|
97
|
+
' flex-direction: column;',
|
|
98
|
+
' align-items: center;',
|
|
99
|
+
' gap: 6px;',
|
|
100
|
+
' min-width: 0;',
|
|
101
|
+
' padding: 0 6px;',
|
|
102
|
+
'}',
|
|
103
|
+
root + '.ilife-relation-kind {',
|
|
104
|
+
' max-width: 100%;',
|
|
105
|
+
' padding: 1px 8px;',
|
|
106
|
+
' border-radius: 999px;',
|
|
107
|
+
' background: var(--soft);',
|
|
108
|
+
' color: var(--blue2);',
|
|
109
|
+
' font-size: 12px;',
|
|
110
|
+
' line-height: 1.5;',
|
|
111
|
+
' white-space: nowrap;',
|
|
112
|
+
' overflow: hidden;',
|
|
113
|
+
' text-overflow: ellipsis;',
|
|
114
|
+
'}',
|
|
115
|
+
root + '.ilife-relation-arrow {',
|
|
116
|
+
' position: relative;',
|
|
117
|
+
' display: block;',
|
|
118
|
+
' width: 100%;',
|
|
119
|
+
' height: 3px;',
|
|
120
|
+
' border-radius: 999px;',
|
|
121
|
+
' background-image: linear-gradient(90deg, ' + TONE.up + ', ' + TONE.here + ');',
|
|
122
|
+
'}',
|
|
123
|
+
root + '.ilife-relation-arrow::after {',
|
|
124
|
+
' content: "";',
|
|
125
|
+
' position: absolute;',
|
|
126
|
+
' top: 50%;',
|
|
127
|
+
' right: 0;',
|
|
128
|
+
' width: 0;',
|
|
129
|
+
' height: 0;',
|
|
130
|
+
' border-top: 5px solid transparent;',
|
|
131
|
+
' border-bottom: 5px solid transparent;',
|
|
132
|
+
' border-left: 9px solid ' + TONE.here + ';',
|
|
133
|
+
' transform: translateY(-50%);',
|
|
134
|
+
'}',
|
|
135
|
+
/* 说明段:一条暖色引线圈住这段正文(不写标签,也就没有「标签贴着值」那种懒写法)。 */
|
|
136
|
+
root + '.ilife-relation-note {',
|
|
137
|
+
' margin: 14px 0 0;',
|
|
138
|
+
' padding: 2px 0 2px 12px;',
|
|
139
|
+
' border-left: 3px solid ' + TONE.up + ';',
|
|
140
|
+
'}',
|
|
141
|
+
root + '.ilife-relation-note > .ilife-block-prose {',
|
|
142
|
+
' margin: 0;',
|
|
143
|
+
'}',
|
|
144
|
+
/* 动作行:只有一颗按钮时让它铺满整行(两列栅格里一颗按钮只占左半格,读起来像贴边的小件)。 */
|
|
145
|
+
root + '.ilife-relation-actions > .ilife-action-bar > .ilife-action-row > :only-child {',
|
|
146
|
+
' grid-column: 1 / -1;',
|
|
147
|
+
'}',
|
|
148
|
+
/* 宽档(≥1001px)加宽的是**箭头那一格**(52px→104px):连线跟着变长,中段不再是一块空白。
|
|
149
|
+
实测记一笔:这一条给第 42 格 -2、第 44 格 -1(两张卡被推开后首屏的紧凑感松了),已撤;
|
|
150
|
+
留在这里的注释是给下一手省一次同样的试。 */
|
|
151
|
+
].join(LF) + LF + relationTreeShapeCss();
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=shapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shapes.js","sourceRoot":"","sources":["../../src/relation/shapes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** #873 派生席 · 家族树那一族的页内形状(三层树/层头/条目行/宽档两栏重排)。
|
|
2
|
+
*
|
|
3
|
+
* 为什么与回执那两页分家:这一族讲的是「上下游三层怎么摆」,回执那两页讲的是「一组关系怎么摆」,
|
|
4
|
+
* 两批改动不同批发生(改家族树时那两页一个字不用动);合成一件会顶到本包告警线以上(拆前 427 LF)。
|
|
5
|
+
*
|
|
6
|
+
* 三层色基 `TONE` 与浅底 `tint()` 住本件,因为三层左缘、层头图标位、条目行圆点读的都是这三个常量,
|
|
7
|
+
* 连回执页那两个节点的左缘也从 `shapes.ts` 取这里;色值只取冻结 token 与既有调色板 `CHART_PALETTE`
|
|
8
|
+
* (唯一定义地= base-paint 的 `spec/charts.ts`),圆角只用闭集 `{8,14,20,999}`。
|
|
9
|
+
*/
|
|
10
|
+
/** 换行(仓库口径:不写字面换行转义)。两件的产出器读同一处。 */
|
|
11
|
+
export declare const LF: string;
|
|
12
|
+
/** 三层各自的强调色(上=暖色/中=主色/下=成功色)。三层左缘、层头图标位、条目行圆点、
|
|
13
|
+
* 以及回执页那两个节点的左缘,读的都是这一处。 */
|
|
14
|
+
export declare const TONE: {
|
|
15
|
+
readonly up: "#ff9500";
|
|
16
|
+
readonly here: "var(--blue)";
|
|
17
|
+
readonly down: "var(--ok)";
|
|
18
|
+
};
|
|
19
|
+
/** 强调色的浅底:按百分比与卡片底色混出来,色基仍只来自上面那三个常量(不发明新色值)。 */
|
|
20
|
+
export declare function tint(color: string, pct: number): string;
|
|
21
|
+
/** 家族树那一族的形状样式唯一产出者。恒返回非空 CSS 文本。 */
|
|
22
|
+
export declare function relationTreeShapeCss(): string;
|
|
23
|
+
//# sourceMappingURL=treeShapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeShapes.d.ts","sourceRoot":"","sources":["../../src/relation/treeShapes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,oCAAoC;AACpC,eAAO,MAAM,EAAE,QAA0B,CAAC;AAE1C;6BAC6B;AAC7B,eAAO,MAAM,IAAI;;;;CAIP,CAAC;AAEX,iDAAiD;AACjD,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,qCAAqC;AACrC,wBAAgB,oBAAoB,IAAI,MAAM,CAuQ7C"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/** #873 派生席 · 家族树那一族的页内形状(三层树/层头/条目行/宽档两栏重排)。
|
|
2
|
+
*
|
|
3
|
+
* 为什么与回执那两页分家:这一族讲的是「上下游三层怎么摆」,回执那两页讲的是「一组关系怎么摆」,
|
|
4
|
+
* 两批改动不同批发生(改家族树时那两页一个字不用动);合成一件会顶到本包告警线以上(拆前 427 LF)。
|
|
5
|
+
*
|
|
6
|
+
* 三层色基 `TONE` 与浅底 `tint()` 住本件,因为三层左缘、层头图标位、条目行圆点读的都是这三个常量,
|
|
7
|
+
* 连回执页那两个节点的左缘也从 `shapes.ts` 取这里;色值只取冻结 token 与既有调色板 `CHART_PALETTE`
|
|
8
|
+
* (唯一定义地= base-paint 的 `spec/charts.ts`),圆角只用闭集 `{8,14,20,999}`。
|
|
9
|
+
*/
|
|
10
|
+
import { CHART_PALETTE } from 'base-paint';
|
|
11
|
+
/** 换行(仓库口径:不写字面换行转义)。两件的产出器读同一处。 */
|
|
12
|
+
export const LF = String.fromCharCode(10);
|
|
13
|
+
/** 三层各自的强调色(上=暖色/中=主色/下=成功色)。三层左缘、层头图标位、条目行圆点、
|
|
14
|
+
* 以及回执页那两个节点的左缘,读的都是这一处。 */
|
|
15
|
+
export const TONE = {
|
|
16
|
+
up: CHART_PALETTE[2],
|
|
17
|
+
here: 'var(--blue)',
|
|
18
|
+
down: 'var(--ok)',
|
|
19
|
+
};
|
|
20
|
+
/** 强调色的浅底:按百分比与卡片底色混出来,色基仍只来自上面那三个常量(不发明新色值)。 */
|
|
21
|
+
export function tint(color, pct) {
|
|
22
|
+
return 'color-mix(in srgb, ' + color + ' ' + pct + '%, var(--card))';
|
|
23
|
+
}
|
|
24
|
+
/** 家族树那一族的形状样式唯一产出者。恒返回非空 CSS 文本。 */
|
|
25
|
+
export function relationTreeShapeCss() {
|
|
26
|
+
const root = '.ilife-page-ui ';
|
|
27
|
+
return [
|
|
28
|
+
/* 三层家族树:层与层之间一条竖向连接件(线 + 箭头);三层各带一条同色左缘。 */
|
|
29
|
+
root + '.ilife-relation-tree {',
|
|
30
|
+
' margin: 16px 0 0;',
|
|
31
|
+
'}',
|
|
32
|
+
root + '.ilife-relation-tier {',
|
|
33
|
+
' box-sizing: border-box;',
|
|
34
|
+
' padding: 12px 14px;',
|
|
35
|
+
' border: 1px solid var(--line);',
|
|
36
|
+
' border-left-width: 4px;',
|
|
37
|
+
' border-radius: 14px;',
|
|
38
|
+
' background: var(--card);',
|
|
39
|
+
'}',
|
|
40
|
+
root + '.ilife-relation-tier-up {',
|
|
41
|
+
' border-left-color: ' + TONE.up + ';',
|
|
42
|
+
' background: ' + tint(TONE.up, 8) + ';',
|
|
43
|
+
'}',
|
|
44
|
+
root + '.ilife-relation-tier-here {',
|
|
45
|
+
' border-color: var(--blue);',
|
|
46
|
+
' border-left-color: ' + TONE.here + ';',
|
|
47
|
+
' background: var(--soft);',
|
|
48
|
+
'}',
|
|
49
|
+
root + '.ilife-relation-tier-down {',
|
|
50
|
+
' border-left-color: ' + TONE.down + ';',
|
|
51
|
+
' background: ' + tint(TONE.down, 5) + ';',
|
|
52
|
+
'}',
|
|
53
|
+
root + '.ilife-relation-tier-head {',
|
|
54
|
+
' display: flex;',
|
|
55
|
+
' align-items: center;',
|
|
56
|
+
' gap: 8px;',
|
|
57
|
+
' margin: 0;',
|
|
58
|
+
'}',
|
|
59
|
+
root + '.ilife-relation-tier-name {',
|
|
60
|
+
' color: var(--fg);',
|
|
61
|
+
' font-size: 13px;',
|
|
62
|
+
' font-weight: 600;',
|
|
63
|
+
'}',
|
|
64
|
+
root + '.ilife-relation-tier-kind {',
|
|
65
|
+
' padding: 1px 8px;',
|
|
66
|
+
' border-radius: 999px;',
|
|
67
|
+
' background: var(--soft);',
|
|
68
|
+
' color: var(--blue2);',
|
|
69
|
+
' font-size: 12px;',
|
|
70
|
+
' line-height: 1.6;',
|
|
71
|
+
'}',
|
|
72
|
+
root + '.ilife-relation-tier-count {',
|
|
73
|
+
' margin-left: auto;',
|
|
74
|
+
' color: var(--fg3);',
|
|
75
|
+
' font-size: 12px;',
|
|
76
|
+
'}',
|
|
77
|
+
root + '.ilife-relation-tier-body {',
|
|
78
|
+
' margin: 8px 0 0;',
|
|
79
|
+
'}',
|
|
80
|
+
/* 空层收成一条瘦条:虚线卡 + 一行占位人话,不再占一整块实心卡片(空的那层白吃掉首屏一截)。 */
|
|
81
|
+
root + '.ilife-relation-tier-empty {',
|
|
82
|
+
' padding: 10px 14px;',
|
|
83
|
+
' border-style: dashed;',
|
|
84
|
+
' background: var(--card);',
|
|
85
|
+
'}',
|
|
86
|
+
root + '.ilife-relation-tier-empty .ilife-relation-tier-body {',
|
|
87
|
+
' margin: 6px 0 0;',
|
|
88
|
+
'}',
|
|
89
|
+
root + '.ilife-relation-tier-empty .ilife-relation-ghost {',
|
|
90
|
+
' padding: 0;',
|
|
91
|
+
' border: 0;',
|
|
92
|
+
' background: transparent;',
|
|
93
|
+
'}',
|
|
94
|
+
root + '.ilife-relation-here {',
|
|
95
|
+
' display: inline-flex;',
|
|
96
|
+
' max-width: 100%;',
|
|
97
|
+
' box-sizing: border-box;',
|
|
98
|
+
' padding: 5px 14px;',
|
|
99
|
+
' border: 1px solid var(--blue);',
|
|
100
|
+
' border-radius: 999px;',
|
|
101
|
+
' background: var(--card);',
|
|
102
|
+
' color: var(--fg);',
|
|
103
|
+
' font-size: 16px;',
|
|
104
|
+
' font-weight: 600;',
|
|
105
|
+
' overflow-wrap: anywhere;',
|
|
106
|
+
'}',
|
|
107
|
+
root + '.ilife-relation-joint {',
|
|
108
|
+
' position: relative;',
|
|
109
|
+
' width: 2px;',
|
|
110
|
+
' height: 20px;',
|
|
111
|
+
' margin: 0 auto;',
|
|
112
|
+
' background: var(--line);',
|
|
113
|
+
'}',
|
|
114
|
+
root + '.ilife-relation-joint::after {',
|
|
115
|
+
' content: "";',
|
|
116
|
+
' position: absolute;',
|
|
117
|
+
' left: 50%;',
|
|
118
|
+
' bottom: 0;',
|
|
119
|
+
' width: 0;',
|
|
120
|
+
' height: 0;',
|
|
121
|
+
' border-left: 5px solid transparent;',
|
|
122
|
+
' border-right: 5px solid transparent;',
|
|
123
|
+
' border-top: 7px solid var(--blue);',
|
|
124
|
+
' transform: translateX(-50%);',
|
|
125
|
+
'}',
|
|
126
|
+
/* 一层里的条目行:左侧一条支线 + 每行一枚本层色的圆点(图形标记,不上字),代次与菜名分槽。 */
|
|
127
|
+
root + '.ilife-relation-branch {',
|
|
128
|
+
' margin: 0;',
|
|
129
|
+
' padding: 0 0 0 16px;',
|
|
130
|
+
' border-left: 2px solid var(--line);',
|
|
131
|
+
' list-style: none;',
|
|
132
|
+
'}',
|
|
133
|
+
root + '.ilife-relation-tier-down .ilife-relation-branch {',
|
|
134
|
+
' border-left-color: ' + TONE.down + ';',
|
|
135
|
+
'}',
|
|
136
|
+
root + '.ilife-relation-tier-up .ilife-relation-branch {',
|
|
137
|
+
' border-left-color: ' + TONE.up + ';',
|
|
138
|
+
'}',
|
|
139
|
+
root + '.ilife-relation-branch-row {',
|
|
140
|
+
' position: relative;',
|
|
141
|
+
' box-sizing: border-box;',
|
|
142
|
+
' padding: 10px 0;',
|
|
143
|
+
'}',
|
|
144
|
+
root + '.ilife-relation-branch-row::before {',
|
|
145
|
+
' content: "";',
|
|
146
|
+
' position: absolute;',
|
|
147
|
+
' left: -21px;',
|
|
148
|
+
' top: 14px;',
|
|
149
|
+
' box-sizing: border-box;',
|
|
150
|
+
' width: 10px;',
|
|
151
|
+
' height: 10px;',
|
|
152
|
+
' border: 2px solid var(--card);',
|
|
153
|
+
' border-radius: 999px;',
|
|
154
|
+
' background: ' + TONE.up + ';',
|
|
155
|
+
'}',
|
|
156
|
+
root + '.ilife-relation-tier-down .ilife-relation-branch-row::before {',
|
|
157
|
+
' background: ' + TONE.down + ';',
|
|
158
|
+
'}',
|
|
159
|
+
root + '.ilife-relation-tier-up .ilife-relation-branch-row::before {',
|
|
160
|
+
' background: ' + TONE.up + ';',
|
|
161
|
+
'}',
|
|
162
|
+
root + '.ilife-relation-branch-head {',
|
|
163
|
+
' display: flex;',
|
|
164
|
+
' flex-wrap: wrap;',
|
|
165
|
+
' align-items: center;',
|
|
166
|
+
' gap: 6px 8px;',
|
|
167
|
+
'}',
|
|
168
|
+
root + '.ilife-relation-level {',
|
|
169
|
+
' flex: 0 0 auto;',
|
|
170
|
+
' padding: 1px 8px;',
|
|
171
|
+
' border-radius: 999px;',
|
|
172
|
+
' background: var(--soft);',
|
|
173
|
+
' color: var(--blue2);',
|
|
174
|
+
' font-size: 12px;',
|
|
175
|
+
' font-weight: 600;',
|
|
176
|
+
'}',
|
|
177
|
+
root + '.ilife-relation-branch-name {',
|
|
178
|
+
' min-width: 0;',
|
|
179
|
+
' color: var(--fg);',
|
|
180
|
+
' font-size: 15px;',
|
|
181
|
+
' font-weight: 600;',
|
|
182
|
+
' overflow-wrap: anywhere;',
|
|
183
|
+
'}',
|
|
184
|
+
root + '.ilife-relation-branch-note {',
|
|
185
|
+
' display: flex;',
|
|
186
|
+
' flex-wrap: wrap;',
|
|
187
|
+
' align-items: baseline;',
|
|
188
|
+
' gap: 2px 8px;',
|
|
189
|
+
' margin-top: 3px;',
|
|
190
|
+
' overflow-wrap: anywhere;',
|
|
191
|
+
'}',
|
|
192
|
+
/* 改动说明前的图形标记(一支笔):给这行小字当图例,不用再写「改动」两个字。 */
|
|
193
|
+
root + '.ilife-relation-branch-note-mark {',
|
|
194
|
+
' flex: 0 0 auto;',
|
|
195
|
+
' display: inline-flex;',
|
|
196
|
+
' align-items: center;',
|
|
197
|
+
' color: var(--fg3);',
|
|
198
|
+
'}',
|
|
199
|
+
root + '.ilife-relation-branch-note-text {',
|
|
200
|
+
' min-width: 0;',
|
|
201
|
+
' color: var(--fg2);',
|
|
202
|
+
' font-size: 12px;',
|
|
203
|
+
' line-height: 1.6;',
|
|
204
|
+
'}',
|
|
205
|
+
/* 宽档(≥1001px):880 版心里三层各自竖成一条「层标 + 层体」两栏,行内左右分槽把空档填掉——
|
|
206
|
+
层标占左栏(图标、层名、关系类型、条数自上而下),层体占右栏,条目行左边的菜名与右边的改动说明
|
|
207
|
+
各靠一边,不再是一行字悬在一张长条卡里。 */
|
|
208
|
+
'@media (min-width: 1001px) {',
|
|
209
|
+
root + '.ilife-relation-tier {',
|
|
210
|
+
' display: grid;',
|
|
211
|
+
' grid-template-columns: 168px minmax(0, 1fr);',
|
|
212
|
+
' column-gap: 20px;',
|
|
213
|
+
' align-items: start;',
|
|
214
|
+
' }',
|
|
215
|
+
root + '.ilife-relation-tier-head {',
|
|
216
|
+
' flex-direction: column;',
|
|
217
|
+
' align-items: flex-start;',
|
|
218
|
+
' gap: 6px;',
|
|
219
|
+
' }',
|
|
220
|
+
root + '.ilife-relation-tier-count {',
|
|
221
|
+
' margin-left: 0;',
|
|
222
|
+
' }',
|
|
223
|
+
root + '.ilife-relation-tier-body {',
|
|
224
|
+
' margin: 0;',
|
|
225
|
+
' }',
|
|
226
|
+
root + '.ilife-relation-branch-row {',
|
|
227
|
+
' display: flex;',
|
|
228
|
+
' flex-wrap: wrap;',
|
|
229
|
+
' align-items: baseline;',
|
|
230
|
+
' column-gap: 16px;',
|
|
231
|
+
' row-gap: 4px;',
|
|
232
|
+
' }',
|
|
233
|
+
root + '.ilife-relation-branch-note {',
|
|
234
|
+
' margin-top: 0;',
|
|
235
|
+
' }',
|
|
236
|
+
root + '.ilife-relation-ghost {',
|
|
237
|
+
' align-items: center;',
|
|
238
|
+
' }',
|
|
239
|
+
root + '.ilife-relation-ornament {',
|
|
240
|
+
' display: inline-flex;',
|
|
241
|
+
' }',
|
|
242
|
+
'}',
|
|
243
|
+
/* 页头右侧那枝装饰树:窄档不出(首屏要留给三层树本体),宽档显出来填掉结论条右侧的空档。 */
|
|
244
|
+
root + '.ilife-relation-ornament {',
|
|
245
|
+
' display: none;',
|
|
246
|
+
' flex: 0 0 auto;',
|
|
247
|
+
' align-items: center;',
|
|
248
|
+
'}',
|
|
249
|
+
root + '.ilife-relation-ornament svg {',
|
|
250
|
+
' display: block;',
|
|
251
|
+
'}',
|
|
252
|
+
/* 空层的占位件:虚线框,槽位与真条目同规格(换数据不换格子)。 */
|
|
253
|
+
root + '.ilife-relation-ghost {',
|
|
254
|
+
' display: flex;',
|
|
255
|
+
' align-items: flex-start;',
|
|
256
|
+
' gap: 10px;',
|
|
257
|
+
' box-sizing: border-box;',
|
|
258
|
+
' padding: 10px 12px;',
|
|
259
|
+
' border: 1px dashed var(--line);',
|
|
260
|
+
' border-radius: 14px;',
|
|
261
|
+
' background: var(--soft);',
|
|
262
|
+
'}',
|
|
263
|
+
root + '.ilife-relation-ghost-mark {',
|
|
264
|
+
' flex: 0 0 auto;',
|
|
265
|
+
' width: 12px;',
|
|
266
|
+
' height: 12px;',
|
|
267
|
+
' margin-top: 3px;',
|
|
268
|
+
' border: 2px dashed var(--fg3);',
|
|
269
|
+
' border-radius: 999px;',
|
|
270
|
+
'}',
|
|
271
|
+
root + '.ilife-relation-ghost-body {',
|
|
272
|
+
' min-width: 0;',
|
|
273
|
+
'}',
|
|
274
|
+
root + '.ilife-relation-ghost-text {',
|
|
275
|
+
' margin: 0;',
|
|
276
|
+
' color: var(--fg2);',
|
|
277
|
+
' font-size: 14px;',
|
|
278
|
+
' font-weight: 600;',
|
|
279
|
+
'}',
|
|
280
|
+
root + '.ilife-relation-ghost-hint {',
|
|
281
|
+
' margin: 2px 0 0;',
|
|
282
|
+
' color: var(--fg3);',
|
|
283
|
+
' font-size: 12px;',
|
|
284
|
+
' line-height: 1.5;',
|
|
285
|
+
' overflow-wrap: anywhere;',
|
|
286
|
+
'}',
|
|
287
|
+
].join(LF);
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=treeShapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeShapes.js","sourceRoot":"","sources":["../../src/relation/treeShapes.ts"],"names":[],"mappings":"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"}
|