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.
Files changed (244) hide show
  1. package/SKILL.md +42 -29
  2. package/dist/add/commands.js +1 -1
  3. package/dist/add/index.d.ts +1 -0
  4. package/dist/add/index.d.ts.map +1 -1
  5. package/dist/add/index.js +1 -0
  6. package/dist/add/index.js.map +1 -1
  7. package/dist/add/pages.d.ts +62 -0
  8. package/dist/add/pages.d.ts.map +1 -0
  9. package/dist/add/pages.js +362 -0
  10. package/dist/add/pages.js.map +1 -0
  11. package/dist/add/routes.d.ts +4 -4
  12. package/dist/add/routes.d.ts.map +1 -1
  13. package/dist/add/routes.js +12 -6
  14. package/dist/add/routes.js.map +1 -1
  15. package/dist/add/run-write.d.ts.map +1 -1
  16. package/dist/add/run-write.js +39 -0
  17. package/dist/add/run-write.js.map +1 -1
  18. package/dist/cli/cmd_read.js +17 -1
  19. package/dist/cli/cmd_read.js.map +1 -1
  20. package/dist/cli/config.d.ts +0 -10
  21. package/dist/cli/config.d.ts.map +1 -1
  22. package/dist/cli/config.js +22 -1
  23. package/dist/cli/config.js.map +1 -1
  24. package/dist/cli/keys.d.ts +1 -1
  25. package/dist/cli/keys.d.ts.map +1 -1
  26. package/dist/cli/keys.js +16 -4
  27. package/dist/cli/keys.js.map +1 -1
  28. package/dist/cook/commands.js +1 -1
  29. package/dist/cook/index.d.ts +2 -1
  30. package/dist/cook/index.d.ts.map +1 -1
  31. package/dist/cook/index.js +1 -1
  32. package/dist/cook/index.js.map +1 -1
  33. package/dist/cook/page-art.d.ts +18 -0
  34. package/dist/cook/page-art.d.ts.map +1 -0
  35. package/dist/cook/page-art.js +30 -0
  36. package/dist/cook/page-art.js.map +1 -0
  37. package/dist/cook/page-css.d.ts +9 -0
  38. package/dist/cook/page-css.d.ts.map +1 -0
  39. package/dist/cook/page-css.js +206 -0
  40. package/dist/cook/page-css.js.map +1 -0
  41. package/dist/cook/page-text.d.ts +28 -0
  42. package/dist/cook/page-text.d.ts.map +1 -0
  43. package/dist/cook/page-text.js +65 -0
  44. package/dist/cook/page-text.js.map +1 -0
  45. package/dist/cook/routes.js +4 -4
  46. package/dist/cook/run.d.ts +56 -1
  47. package/dist/cook/run.d.ts.map +1 -1
  48. package/dist/cook/run.js +252 -22
  49. package/dist/cook/run.js.map +1 -1
  50. package/dist/data/commands.d.ts +6 -7
  51. package/dist/data/commands.d.ts.map +1 -1
  52. package/dist/data/commands.js +15 -8
  53. package/dist/data/commands.js.map +1 -1
  54. package/dist/data/index.d.ts +2 -0
  55. package/dist/data/index.d.ts.map +1 -1
  56. package/dist/data/index.js +2 -0
  57. package/dist/data/index.js.map +1 -1
  58. package/dist/data/pages.d.ts +50 -0
  59. package/dist/data/pages.d.ts.map +1 -0
  60. package/dist/data/pages.js +226 -0
  61. package/dist/data/pages.js.map +1 -0
  62. package/dist/data/routes.d.ts +4 -5
  63. package/dist/data/routes.d.ts.map +1 -1
  64. package/dist/data/routes.js +8 -10
  65. package/dist/data/routes.js.map +1 -1
  66. package/dist/data/run-batch.d.ts +21 -0
  67. package/dist/data/run-batch.d.ts.map +1 -0
  68. package/dist/data/run-batch.js +123 -0
  69. package/dist/data/run-batch.js.map +1 -0
  70. package/dist/data/run-query.d.ts +5 -6
  71. package/dist/data/run-query.d.ts.map +1 -1
  72. package/dist/data/run-query.js +113 -28
  73. package/dist/data/run-query.js.map +1 -1
  74. package/dist/help/lookup.d.ts.map +1 -1
  75. package/dist/help/lookup.js +20 -4
  76. package/dist/help/lookup.js.map +1 -1
  77. package/dist/help/sceneData.d.ts +8 -7
  78. package/dist/help/sceneData.d.ts.map +1 -1
  79. package/dist/help/sceneData.js +22 -21
  80. package/dist/help/sceneData.js.map +1 -1
  81. package/dist/history/commands.js +1 -1
  82. package/dist/history/page-css.d.ts +12 -0
  83. package/dist/history/page-css.d.ts.map +1 -0
  84. package/dist/history/page-css.js +208 -0
  85. package/dist/history/page-css.js.map +1 -0
  86. package/dist/history/pages.d.ts +77 -0
  87. package/dist/history/pages.d.ts.map +1 -0
  88. package/dist/history/pages.js +282 -0
  89. package/dist/history/pages.js.map +1 -0
  90. package/dist/history/routes.d.ts +4 -6
  91. package/dist/history/routes.d.ts.map +1 -1
  92. package/dist/history/routes.js +22 -16
  93. package/dist/history/routes.js.map +1 -1
  94. package/dist/history/run-query.d.ts +48 -0
  95. package/dist/history/run-query.d.ts.map +1 -1
  96. package/dist/history/run-query.js +96 -10
  97. package/dist/history/run-query.js.map +1 -1
  98. package/dist/history/run-record.d.ts +12 -2
  99. package/dist/history/run-record.d.ts.map +1 -1
  100. package/dist/history/run-record.js +28 -14
  101. package/dist/history/run-record.js.map +1 -1
  102. package/dist/history/validate.d.ts +22 -0
  103. package/dist/history/validate.d.ts.map +1 -0
  104. package/dist/history/validate.js +69 -0
  105. package/dist/history/validate.js.map +1 -0
  106. package/dist/policy/wakewords.d.ts +1 -1
  107. package/dist/policy/wakewords.d.ts.map +1 -1
  108. package/dist/policy/wakewords.js +23 -2
  109. package/dist/policy/wakewords.js.map +1 -1
  110. package/dist/relation/commands.d.ts +6 -5
  111. package/dist/relation/commands.d.ts.map +1 -1
  112. package/dist/relation/commands.js +23 -6
  113. package/dist/relation/commands.js.map +1 -1
  114. package/dist/relation/index.d.ts +3 -0
  115. package/dist/relation/index.d.ts.map +1 -1
  116. package/dist/relation/index.js +3 -0
  117. package/dist/relation/index.js.map +1 -1
  118. package/dist/relation/pages.d.ts +37 -0
  119. package/dist/relation/pages.d.ts.map +1 -0
  120. package/dist/relation/pages.js +224 -0
  121. package/dist/relation/pages.js.map +1 -0
  122. package/dist/relation/routes.d.ts +6 -5
  123. package/dist/relation/routes.d.ts.map +1 -1
  124. package/dist/relation/routes.js +17 -16
  125. package/dist/relation/routes.js.map +1 -1
  126. package/dist/relation/run-query.d.ts +10 -0
  127. package/dist/relation/run-query.d.ts.map +1 -0
  128. package/dist/relation/run-query.js +104 -0
  129. package/dist/relation/run-query.js.map +1 -0
  130. package/dist/relation/run-write.d.ts +13 -0
  131. package/dist/relation/run-write.d.ts.map +1 -0
  132. package/dist/relation/run-write.js +114 -0
  133. package/dist/relation/run-write.js.map +1 -0
  134. package/dist/relation/shapes.d.ts +8 -0
  135. package/dist/relation/shapes.d.ts.map +1 -0
  136. package/dist/relation/shapes.js +153 -0
  137. package/dist/relation/shapes.js.map +1 -0
  138. package/dist/relation/treeShapes.d.ts +23 -0
  139. package/dist/relation/treeShapes.d.ts.map +1 -0
  140. package/dist/relation/treeShapes.js +289 -0
  141. package/dist/relation/treeShapes.js.map +1 -0
  142. package/dist/render/copyArea.d.ts +67 -0
  143. package/dist/render/copyArea.d.ts.map +1 -0
  144. package/dist/render/copyArea.js +146 -0
  145. package/dist/render/copyArea.js.map +1 -0
  146. package/dist/render/envelope.d.ts.map +1 -1
  147. package/dist/render/envelope.js +4 -0
  148. package/dist/render/envelope.js.map +1 -1
  149. package/dist/render/index.d.ts +7 -0
  150. package/dist/render/index.d.ts.map +1 -1
  151. package/dist/render/index.js +7 -0
  152. package/dist/render/index.js.map +1 -1
  153. package/dist/render/sceneBand.d.ts +36 -0
  154. package/dist/render/sceneBand.d.ts.map +1 -0
  155. package/dist/render/sceneBand.js +166 -0
  156. package/dist/render/sceneBand.js.map +1 -0
  157. package/dist/render/sceneRhythm.d.ts +6 -0
  158. package/dist/render/sceneRhythm.d.ts.map +1 -0
  159. package/dist/render/sceneRhythm.js +149 -0
  160. package/dist/render/sceneRhythm.js.map +1 -0
  161. package/dist/render/sceneShell.d.ts +17 -0
  162. package/dist/render/sceneShell.d.ts.map +1 -0
  163. package/dist/render/sceneShell.js +46 -0
  164. package/dist/render/sceneShell.js.map +1 -0
  165. package/dist/render/skin.d.ts +13 -0
  166. package/dist/render/skin.d.ts.map +1 -0
  167. package/dist/render/skin.js +282 -0
  168. package/dist/render/skin.js.map +1 -0
  169. package/dist/search/routes.d.ts +12 -4
  170. package/dist/search/routes.d.ts.map +1 -1
  171. package/dist/search/routes.js +39 -7
  172. package/dist/search/routes.js.map +1 -1
  173. package/dist/search/run.d.ts +10 -2
  174. package/dist/search/run.d.ts.map +1 -1
  175. package/dist/search/run.js +61 -9
  176. package/dist/search/run.js.map +1 -1
  177. package/dist/setup/commands.d.ts +5 -5
  178. package/dist/setup/commands.d.ts.map +1 -1
  179. package/dist/setup/commands.js +14 -6
  180. package/dist/setup/commands.js.map +1 -1
  181. package/dist/setup/index.d.ts +3 -5
  182. package/dist/setup/index.d.ts.map +1 -1
  183. package/dist/setup/index.js +3 -5
  184. package/dist/setup/index.js.map +1 -1
  185. package/dist/setup/pages.d.ts +19 -0
  186. package/dist/setup/pages.d.ts.map +1 -0
  187. package/dist/setup/pages.js +163 -0
  188. package/dist/setup/pages.js.map +1 -0
  189. package/dist/setup/routes.d.ts +4 -5
  190. package/dist/setup/routes.d.ts.map +1 -1
  191. package/dist/setup/routes.js +7 -8
  192. package/dist/setup/routes.js.map +1 -1
  193. package/dist/setup/run-init.d.ts +11 -0
  194. package/dist/setup/run-init.d.ts.map +1 -0
  195. package/dist/setup/run-init.js +19 -0
  196. package/dist/setup/run-init.js.map +1 -0
  197. package/dist/shared/command-spec.d.ts +5 -3
  198. package/dist/shared/command-spec.d.ts.map +1 -1
  199. package/dist/shopping/commands.js +1 -1
  200. package/dist/shopping/commands.js.map +1 -1
  201. package/dist/shopping/index.d.ts +1 -0
  202. package/dist/shopping/index.d.ts.map +1 -1
  203. package/dist/shopping/index.js +1 -0
  204. package/dist/shopping/index.js.map +1 -1
  205. package/dist/shopping/pages.d.ts +22 -0
  206. package/dist/shopping/pages.d.ts.map +1 -0
  207. package/dist/shopping/pages.js +170 -0
  208. package/dist/shopping/pages.js.map +1 -0
  209. package/dist/shopping/routes.js +4 -4
  210. package/dist/shopping/routes.js.map +1 -1
  211. package/dist/shopping/run.d.ts +9 -5
  212. package/dist/shopping/run.d.ts.map +1 -1
  213. package/dist/shopping/run.js +58 -10
  214. package/dist/shopping/run.js.map +1 -1
  215. package/dist/triggers/chef-scenes.d.ts +3 -2
  216. package/dist/triggers/chef-scenes.d.ts.map +1 -1
  217. package/dist/triggers/chef-scenes.js +16 -15
  218. package/dist/triggers/chef-scenes.js.map +1 -1
  219. package/dist/update/routes.d.ts +6 -4
  220. package/dist/update/routes.d.ts.map +1 -1
  221. package/dist/update/routes.js +20 -6
  222. package/dist/update/routes.js.map +1 -1
  223. package/dist/update/run-write.d.ts.map +1 -1
  224. package/dist/update/run-write.js +211 -1
  225. package/dist/update/run-write.js.map +1 -1
  226. package/dist/view/commands.js +1 -1
  227. package/dist/view/page.d.ts +25 -0
  228. package/dist/view/page.d.ts.map +1 -0
  229. package/dist/view/page.js +306 -0
  230. package/dist/view/page.js.map +1 -0
  231. package/dist/view/pageCss.d.ts +8 -0
  232. package/dist/view/pageCss.d.ts.map +1 -0
  233. package/dist/view/pageCss.js +327 -0
  234. package/dist/view/pageCss.js.map +1 -0
  235. package/dist/view/pageSection.d.ts +21 -0
  236. package/dist/view/pageSection.d.ts.map +1 -0
  237. package/dist/view/pageSection.js +59 -0
  238. package/dist/view/pageSection.js.map +1 -0
  239. package/dist/view/routes.js +7 -7
  240. package/dist/view/run.d.ts +5 -1
  241. package/dist/view/run.d.ts.map +1 -1
  242. package/dist/view/run.js +66 -7
  243. package/dist/view/run.js.map +1 -1
  244. package/package.json +3 -3
@@ -0,0 +1,327 @@
1
+ /** #873 查看域页内样式(在公共层皮肤之上追加的一段,只对本域 8 页生效)。
2
+ *
3
+ * 为什么另立一件:装配件(`page.ts`)已经装不下——本包 `AGENTS.md` 钉的告警线是 350 LF,
4
+ * 装配逻辑与一段页内样式混在一处会让那一件长期贴着线走。样式与装配分开之后,两件各自只讲
5
+ * 一件事:本件讲「查看页独有的形状长什么样」,`page.ts` 讲「这一页摆什么」。
6
+ *
7
+ * 三条口径(与前缀口径同源,违反即抛):
8
+ * ① **每一条选择器都挂在根类 `.ilife-page-ui` 之下**:`renderDocShell` → `buildStyleSheet` 的
9
+ * `assertExtraCss` 会抛 `extra-css-root`/`extra-css-forbidden-token`/`extra-css-dark-scheme`;
10
+ * 前缀口径与 `chefSceneCss()` 同(缺省 `ilife-`),两处必须同源,否则规则一条都命中不到。
11
+ * ② **色值只从冻结 token 与既有调色板取**:暖色走 `CHART_PALETTE` 的下标,中性色走
12
+ * `var(--fg)`/`var(--fg2)`/`var(--fg3)`/`var(--line)`/`var(--soft)`/`var(--card)`,
13
+ * 本件不写第二个十六进制色值。
14
+ * ③ **圆角只用闭集 `{8, 14, 999}`、断点只用仓内既有集合**(`1001`=公共层桌面档那条断点)。
15
+ *
16
+ * 这一段的五组规则(每一组对应 `page.ts` 里的一个装配件):
17
+ * ① 分区标题行 `.chef-view-sec`:图标位 + 标题 + 右端读数;正文槽承载锚点 id。
18
+ * ② 分组标签 `.chef-view-tags`:维度名(左轨)+ 值徽章(右),替掉一行 13 枚无名色块。
19
+ * ③ 新手要点 `.chef-view-keys`:一条一枚序号牌,序号由形状承担。
20
+ * ④ 营养瓦片 `.chef-view-nutri`:窄档两列、宽档三列。
21
+ * ⑤ 背景小节 `.chef-view-prose-block`:小标题 + 段落。
22
+ *
23
+ * 只加形状与间距,不改任何区块的标记结构;`content` 一律空串(词不许只活在样式里)。
24
+ */
25
+ import { CHART_PALETTE } from 'base-paint';
26
+ /** 换行(仓库口径:不写字面换行转义,与 `blocks.ts`/`skin.ts` 同)。 */
27
+ const LF = String.fromCharCode(10);
28
+ /** 圆角闭集(与公共层、皮肤同一条闭集,不新造档位)。 */
29
+ const RADIUS = { sm: 8, md: 14, pill: 999 };
30
+ /** 暖色图标位取调色板里的橙(与皮肤的分区图标位同色基)。 */
31
+ const WARM = CHART_PALETTE[2];
32
+ /** 八枚图标位各自的色基(一律取 `CHART_PALETTE` 上相邻的两色,不新造色值):
33
+ * 食材料理=橙、步骤=红、营养=绿、背景=紫、下厨记录=蓝、标签=青、替换=洋红、要点=黄。 */
34
+ const TONE_HUES = [
35
+ ['ingredients', CHART_PALETTE[6], CHART_PALETTE[2]],
36
+ ['steps', CHART_PALETTE[3], CHART_PALETTE[8]],
37
+ ['nutrition', CHART_PALETTE[1], CHART_PALETTE[9]],
38
+ ['background', CHART_PALETTE[4], CHART_PALETTE[5]],
39
+ ['history', CHART_PALETTE[0], CHART_PALETTE[5]],
40
+ ['tags', CHART_PALETTE[9], CHART_PALETTE[1]],
41
+ ['swap', CHART_PALETTE[8], CHART_PALETTE[4]],
42
+ ['keys', CHART_PALETTE[6], CHART_PALETTE[2]],
43
+ ];
44
+ /** 两色之间的斜向渐变(图标位底盘唯一写法)。 */
45
+ function warmPair(a, b) {
46
+ return 'linear-gradient(135deg, ' + a + ', ' + b + ');';
47
+ }
48
+ /** 查看域页内样式的唯一产出者。恒返回非空 CSS 文本。 */
49
+ export function viewPageCss(input) {
50
+ const p = input !== undefined && input !== null
51
+ && typeof input.prefix === 'string' && input.prefix !== '' ? input.prefix : 'ilife-';
52
+ const root = '.' + p + 'page-ui';
53
+ const pv = root + ' .chef-view-';
54
+ return [
55
+ '/* #873 查看域页内版式 · 每一条规则都挂在根类 ' + root + ' 之下 */',
56
+ /* ① 分区:标题行一条 hairline 收口,正文槽与标题分开——「一段接一段的无题正文」由这条销账。 */
57
+ pv + 'sec {',
58
+ ' margin: 20px 0 0;',
59
+ '}',
60
+ pv + 'sec-head {',
61
+ ' display: flex;',
62
+ ' align-items: center;',
63
+ ' gap: 10px;',
64
+ ' padding: 0 0 8px;',
65
+ ' border-bottom: 1px solid var(--line);',
66
+ '}',
67
+ pv + 'sec-icon {',
68
+ ' flex: 0 0 auto;',
69
+ ' display: flex;',
70
+ ' width: 26px;',
71
+ ' height: 26px;',
72
+ ' align-items: center;',
73
+ ' justify-content: center;',
74
+ ' border-radius: ' + RADIUS.sm + 'px;',
75
+ ' background-image: ' + warmPair(CHART_PALETTE[6], WARM),
76
+ ' color: var(--card);',
77
+ '}',
78
+ /* 一种分区一种色基(八枚图标位各取调色板上的相邻两色):一页从上到下因此有色彩节奏,
79
+ 而不是「一色到底」。色值只从 `CHART_PALETTE` 取,本件不写第二个十六进制色值。 */
80
+ ...TONE_HUES.map(([tone, a, b]) => pv + 'icon-' + tone + ' {\n background-image: ' + warmPair(a, b) + '\n}'),
81
+ pv + 'sec-icon svg {',
82
+ ' display: block;',
83
+ ' width: 16px;',
84
+ ' height: 16px;',
85
+ '}',
86
+ pv + 'sec-title {',
87
+ ' margin: 0;',
88
+ ' color: var(--fg);',
89
+ ' font-size: 15px;',
90
+ ' font-weight: 700;',
91
+ ' line-height: 1.4;',
92
+ '}',
93
+ pv + 'sec-note {',
94
+ ' margin-left: auto;',
95
+ ' color: var(--fg3);',
96
+ ' font-size: 12px;',
97
+ '}',
98
+ pv + 'sec-body {',
99
+ ' margin: 10px 0 0;',
100
+ '}',
101
+ /* ② 分组标签:维度名占 3em 左轨,值徽章在右;徽章自身仍走公共层的 `block-chip` 一条不改。 */
102
+ pv + 'tags {',
103
+ ' display: grid;',
104
+ ' gap: 8px;',
105
+ '}',
106
+ pv + 'tags-row {',
107
+ ' display: flex;',
108
+ ' flex-wrap: wrap;',
109
+ ' align-items: center;',
110
+ ' gap: 4px 6px;',
111
+ '}',
112
+ pv + 'tags-key {',
113
+ ' flex: 0 0 auto;',
114
+ ' min-width: 3em;',
115
+ ' margin-right: 4px;',
116
+ ' color: var(--fg3);',
117
+ ' font-size: 12px;',
118
+ '}',
119
+ /* ②b 标签块与下厨记录的行容器:窄档一列往下排;宽档两栏借位(见 ⑪ 桌面档那一段)。 */
120
+ pv + 'side {',
121
+ ' display: grid;',
122
+ ' gap: 20px;',
123
+ '}',
124
+ /* ③ 新手要点:序号牌(形状件)+ 一句话;卡与卡之间靠间距分组,不靠分隔符字符。 */
125
+ pv + 'keys {',
126
+ ' display: grid;',
127
+ ' gap: 8px;',
128
+ ' margin: 0;',
129
+ ' padding: 0;',
130
+ ' list-style: none;',
131
+ '}',
132
+ pv + 'key {',
133
+ ' display: flex;',
134
+ ' align-items: center;',
135
+ ' gap: 10px;',
136
+ ' box-sizing: border-box;',
137
+ ' padding: 10px 12px;',
138
+ ' border: 1px solid var(--line);',
139
+ ' border-radius: ' + RADIUS.md + 'px;',
140
+ ' background: var(--card);',
141
+ '}',
142
+ pv + 'key-no {',
143
+ ' flex: 0 0 auto;',
144
+ ' padding: 3px 10px;',
145
+ ' border-radius: ' + RADIUS.pill + 'px;',
146
+ ' background: var(--soft);',
147
+ ' color: var(--blue2);',
148
+ ' font-size: 12px;',
149
+ ' font-weight: 700;',
150
+ ' white-space: nowrap;',
151
+ '}',
152
+ pv + 'key-text {',
153
+ ' min-width: 0;',
154
+ ' color: var(--fg);',
155
+ ' font-size: 15px;',
156
+ ' line-height: 1.6;',
157
+ '}',
158
+ /* ④ 营养瓦片:事实条在页内换成栅格——窄档两列、宽档三列(断点取公共层桌面档那一条)。 */
159
+ pv + 'nutri {',
160
+ ' display: grid;',
161
+ ' grid-template-columns: repeat(2, minmax(0, 1fr));',
162
+ ' gap: 8px;',
163
+ '}',
164
+ pv + 'nutri .' + p + 'block-fact-strip-value {',
165
+ ' font-size: 17px;',
166
+ '}',
167
+ '@media (min-width: 1001px) {',
168
+ ' ' + pv + 'nutri {',
169
+ ' grid-template-columns: repeat(3, minmax(0, 1fr));',
170
+ ' }',
171
+ '}',
172
+ /* ⑤ 背景小节:小标题一档灰,正文段落间距交给 `block-prose` 自己的 8px,不叠两层外边距。 */
173
+ root + ' .chef-view-prose-block + .chef-view-prose-block {',
174
+ ' margin-top: 14px;',
175
+ '}',
176
+ pv + 'prose-title {',
177
+ ' margin: 0;',
178
+ ' color: var(--fg2);',
179
+ ' font-size: 13px;',
180
+ ' font-weight: 700;',
181
+ '}',
182
+ /* ⑥ 窄档食材行:公共层把每格排成「列名 + 值」三行(食材/用量/说明),同一批列名因此逐行
183
+ 复读——一节 11 味就有 33 枚列名。这里把一行收成两行:**名字与用量同行**(名字左、用量右),
184
+ 说明另起一行;重复的列名由分区标题承担,不再逐格复读。桌面档不在本段内,一字不动。
185
+ 选择器为什么带 `.ilife-block-data-table` 与 `:has(td[data-label])`:公共层的表格卡片化那一组
186
+ 挂在 `.ilife-page-ui .ilife-block-data-table:has(td[data-label]) td`(权重 3 类 2 型)上,
187
+ 只写 `.chef-view-sec-body td`(2 类 1 型)会被它按权重压住、一条都不生效(实测:改前那版
188
+ `display`/`content` 全被顶掉,只有 `outline` 这类它没碰的属性看得见)。 */
189
+ '@media (max-width: 640px) {',
190
+ ' ' + root + ' .chef-view-sec-body .' + p + 'block-data-table:has(td[data-label]) tr {',
191
+ ' display: grid;',
192
+ ' grid-template-columns: minmax(0, 1fr) minmax(0, auto);',
193
+ ' column-gap: 10px;',
194
+ ' padding: 9px 12px;',
195
+ ' }',
196
+ ' ' + root + ' .chef-view-sec-body .' + p + 'block-data-table:has(td[data-label]) td {',
197
+ ' display: block;',
198
+ ' padding: 0;',
199
+ /* 斑马纹改挂行、不挂格:格在栅格里各占一段,底色会跟着断成参差的两截。 */
200
+ ' background-color: transparent;',
201
+ ' }',
202
+ ' ' + root + ' .chef-view-sec-body .' + p + 'block-data-table:has(td[data-label]) tr:nth-child(even) {',
203
+ ' background-color: var(--soft);',
204
+ ' }',
205
+ ' ' + root + ' .chef-view-sec-body .' + p + 'block-data-table:has(td[data-label]) td::before {',
206
+ ' content: none;',
207
+ ' }',
208
+ ' ' + root + ' .chef-view-sec-body .' + p + 'block-data-table:has(td[data-label]) td:first-child {',
209
+ ' grid-column: 1;',
210
+ ' color: var(--fg);',
211
+ ' font-weight: 600;',
212
+ ' }',
213
+ ' ' + root + ' .chef-view-sec-body .' + p + 'block-data-table:has(td[data-label]) td:nth-child(2) {',
214
+ ' grid-column: 2;',
215
+ ' min-width: 0;',
216
+ ' color: var(--fg2);',
217
+ ' font-family: inherit;',
218
+ ' text-align: right;',
219
+ ' }',
220
+ ' ' + root + ' .chef-view-sec-body .' + p + 'block-data-table:has(td[data-label]) td:nth-child(3) {',
221
+ ' grid-column: 1 / -1;',
222
+ ' margin-top: 2px;',
223
+ ' color: var(--fg3);',
224
+ ' font-size: 12px;',
225
+ ' }',
226
+ '}',
227
+ /* ⑦ 页内不再挂装饰带(第三轮撤):族级带由页壳 `renderSceneShell` 插在版面根首节点,
228
+ 页内再挂一条就是两带并存=重复装饰。页内只留**载内容的形状**(分区题头、营养瓦片、参数带、行卡),
229
+ 色基与族级带共用同一族暖色(`CHART_PALETTE` 上相邻两色)。 */
230
+ /* ⑧ 步骤三件套:图标位 + 标签 + 值。火候/时长/锅温此前是一行事实条(三格白瓦片),
231
+ 与页里其它瓦片同形;换成带图标位的参数带之后,每张步骤卡上有一处色彩锚点。
232
+ **窄档一行一件**(图标+标签+值同一行,吃满整宽):三件并排时每格约 100px,
233
+ 图标/标签/值挤在一格里被判官读成「字段硬塞、横向拥挤」。 */
234
+ pv + 'params {',
235
+ ' display: grid;',
236
+ ' gap: 8px;',
237
+ ' margin: 12px 0 0;',
238
+ ' padding: 0;',
239
+ ' list-style: none;',
240
+ '}',
241
+ pv + 'param {',
242
+ ' display: flex;',
243
+ ' align-items: center;',
244
+ ' gap: 8px;',
245
+ ' box-sizing: border-box;',
246
+ ' min-width: 0;',
247
+ ' padding: 8px 10px;',
248
+ ' border: 1px solid var(--line);',
249
+ ' border-radius: ' + RADIUS.md + 'px;',
250
+ ' background: var(--soft);',
251
+ '}',
252
+ pv + 'param-icon {',
253
+ ' flex: 0 0 auto;',
254
+ ' display: flex;',
255
+ ' width: 24px;',
256
+ ' height: 24px;',
257
+ ' align-items: center;',
258
+ ' justify-content: center;',
259
+ ' border-radius: ' + RADIUS.sm + 'px;',
260
+ ' background-image: ' + warmPair(CHART_PALETTE[6], WARM),
261
+ ' color: var(--card);',
262
+ '}',
263
+ pv + 'param-icon svg {',
264
+ ' display: block;',
265
+ ' width: 15px;',
266
+ ' height: 15px;',
267
+ '}',
268
+ pv + 'param-label {',
269
+ ' flex: 0 0 auto;',
270
+ ' color: var(--fg3);',
271
+ ' font-size: 12px;',
272
+ '}',
273
+ pv + 'param-value {',
274
+ ' flex: 1 1 auto;',
275
+ ' min-width: 0;',
276
+ ' margin-left: auto;',
277
+ ' color: var(--fg);',
278
+ ' font-size: 13px;',
279
+ ' font-weight: 700;',
280
+ ' text-align: right;',
281
+ '}',
282
+ /* ⑨ 步骤卡的圆底图标位换暖色实底:每张卡一枚色彩锚点(原先与页里别的小圆底同色)。 */
283
+ root + ' .chef-view-sec-body .' + p + 'block-disclosure-summary::before {',
284
+ ' background-image: ' + warmPair(CHART_PALETTE[6], WARM),
285
+ ' color: var(--card);',
286
+ '}',
287
+ /* ⑩ 分区标题行允许读数换行:窄档上「营养成分」+「每 250g」挤不进一行时,读数整枚落到第二行,
288
+ 不把标题压窄、不贴右墙(判官点过「每 250g 字样在小屏偏密」)。 */
289
+ pv + 'sec-head {',
290
+ ' flex-wrap: wrap;',
291
+ '}',
292
+ /* ⑪ 宽档把栅格用满(≥1001,与公共层桌面档同一条断点):本席八页的判读里,
293
+ 桌面端反复被点「左右大片留白、短块只占左半、表格横向拉伸」。四处收口:
294
+ 事实条四格等宽铺满、页内导航四枚等宽、标签块与要点列表各走两栏、食材表按列语义定宽。 */
295
+ '@media (min-width: 1001px) {',
296
+ ' ' + root + ' .chef-view-params {',
297
+ ' grid-template-columns: repeat(3, minmax(0, 1fr));',
298
+ ' }',
299
+ ' ' + root + ' .' + p + 'block-toc {',
300
+ ' display: grid;',
301
+ ' grid-template-columns: repeat(4, minmax(0, 1fr));',
302
+ ' gap: 8px;',
303
+ ' }',
304
+ ' ' + root + ' .' + p + 'block-toc a {',
305
+ ' justify-content: center;',
306
+ ' }',
307
+ ' ' + root + ' .chef-view-tags,',
308
+ ' ' + root + ' .chef-view-keys {',
309
+ ' grid-template-columns: repeat(2, minmax(0, 1fr));',
310
+ ' }',
311
+ /* 宽档借位:标签块与下厨记录并成一行两栏(判官点「桌面版仍堆叠一列未借位」)。
312
+ 两栏各自 `stretch`(不收窄、不写 `margin: auto`——栅格项上的 auto 外边距会关掉 `justify-self: stretch`)。 */
313
+ ' ' + root + ' .chef-view-side {',
314
+ ' grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);',
315
+ ' column-gap: 24px;',
316
+ ' align-items: start;',
317
+ ' }',
318
+ ' ' + root + ' .chef-view-sec-body .' + p + 'block-data-table:has(td[data-label]) th:nth-child(1) {',
319
+ ' width: 34%;',
320
+ ' }',
321
+ ' ' + root + ' .chef-view-sec-body .' + p + 'block-data-table:has(td[data-label]) th:nth-child(2) {',
322
+ ' width: 18%;',
323
+ ' }',
324
+ '}',
325
+ ].join(LF);
326
+ }
327
+ //# sourceMappingURL=pageCss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageCss.js","sourceRoot":"","sources":["../../src/view/pageCss.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /** 分区的形制(内容不同、外壳相同):一段说明 + 一条 hairline + 一块正文槽。 */
2
+ export interface SecHead {
3
+ /** 分区标题(人话,如「食材(11 味)」)。 */
4
+ readonly title: string;
5
+ /** 右端读数(可省;空串即不印那一位)。 */
6
+ readonly note: string;
7
+ }
8
+ /** 图标位字形的种类(同时是配色分组的键:一种分区一种色基)。 */
9
+ export type IconTone = 'ingredients' | 'steps' | 'nutrition' | 'background' | 'history' | 'tags' | 'swap' | 'keys';
10
+ /** 一枚分区:标题行(图标位+标题+右端读数)+正文槽。
11
+ * 锚点 id 落在**正文槽**上(指向内容本体),只看 X 卡与全量页共用同一段字符串。 */
12
+ export declare function sectionOf(anchor: string, tone: IconTone, head: SecHead, inner: string): string;
13
+ /** 步骤三件套的三种图标位(火候/时长/锅温)。 */
14
+ export type ParamTone = 'heat' | 'clock' | 'temp';
15
+ /** 一行「图标位 + 标签 + 值」的参数带(步骤卡的火候/时长/锅温走这一条形状)。 */
16
+ export declare function paramBandOf(items: readonly {
17
+ readonly tone: ParamTone;
18
+ readonly label: string;
19
+ readonly value: string;
20
+ }[]): string;
21
+ //# sourceMappingURL=pageSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageSection.d.ts","sourceRoot":"","sources":["../../src/view/pageSection.ts"],"names":[],"mappings":"AAeA,mDAAmD;AACnD,MAAM,WAAW,OAAO;IACtB,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,oCAAoC;AACpC,MAAM,MAAM,QAAQ,GAChB,aAAa,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAsBhG;mDACmD;AACnD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAS9F;AAED,6BAA6B;AAC7B,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AASlD,gDAAgD;AAChD,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7F,MAAM,CAOR"}
@@ -0,0 +1,59 @@
1
+ /** #873 查看域的分区件:**一枚分区的外壳**(图标位 + 标题 + 右端读数 + 正文槽)、**页族装饰带**、
2
+ * **带图标位的参数带**,以及这些形状用的图标位字形。
3
+ *
4
+ * 为什么另立一件:`page.ts` 已经贴着本包 `AGENTS.md` 钉的 350 LF 告警线走(装配逻辑本身就在那份文件里);
5
+ * 「一页长什么样」的形状件与「这一页摆什么」的装配逻辑分开之后,两件各自只讲一件事。
6
+ *
7
+ * 图标位一律是**内联 SVG 的纯装饰**:`aria-hidden`,一个字都不进 CSS,也不进可见文本
8
+ * (词不许只活在样式里)。**不用 `<img>`、不引外部图**——验收墙的造册判据拒收带惰性加载属性的产物,
9
+ * 而仓内的图片件(`renderMediaFigure`)产出器会写那个属性。
10
+ */
11
+ import { escapeHtml } from 'base-paint';
12
+ /** 五字符归一(与区块层同源 `escapeHtml`,不自写第二份字符表)。 */
13
+ const esc = escapeHtml;
14
+ /** 字形一律 16×16、线条取 `currentColor`(16 这个尺寸只写一处,下面十四个字形共用)。 */
15
+ const SVG_OPEN = '<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor"'
16
+ + ' stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">';
17
+ /** 八个分区图标位。 */
18
+ const ICON = {
19
+ ingredients: SVG_OPEN + '<path d="M3.5 11h17a8.5 8.5 0 0 1-17 0Z"/><path d="M2 11h20"/>'
20
+ + '<path d="M9.5 8.2c0-1.5 1.7-2.1 1.7-3.7"/><path d="M14 8.2c0-1.5 1.7-2.1 1.7-3.7"/></svg>',
21
+ steps: SVG_OPEN + '<path d="M12 3.4c3.7 4.3 5.5 6.5 5.5 9.4a5.5 5.5 0 0 1-11 0c0-2.9 1.8-5.1 5.5-9.4Z"/>'
22
+ + '<path d="M12 18.6a2.6 2.6 0 0 0 2.6-2.6c0-1.3-.9-2.3-2.6-4-1.7 1.7-2.6 2.7-2.6 4a2.6 2.6 0 0 0 2.6 2.6Z"/></svg>',
23
+ nutrition: SVG_OPEN + '<path d="M12 20.6S3.4 15.2 3.4 9.7A4.7 4.7 0 0 1 12 7.1a4.7 4.7 0 0 1 8.6 2.6c0 5.5-8.6 10.9-8.6 10.9Z"/></svg>',
24
+ background: SVG_OPEN + '<path d="M12 6.6C10 5 7.6 4.6 4.4 4.8v12.9c3.2-.2 5.6.2 7.6 1.8 2-1.6 4.4-2 7.6-1.8V4.8C16.4 4.6 14 5 12 6.6Z"/>'
25
+ + '<path d="M12 6.6v12.9"/></svg>',
26
+ history: SVG_OPEN + '<circle cx="12" cy="12" r="8.4"/><path d="M12 7.2V12l3.2 1.9"/></svg>',
27
+ tags: SVG_OPEN + '<path d="M4.4 4.4h7l8.2 8.2-7 7-8.2-8.2Z"/><circle cx="8.6" cy="8.6" r="1.3"/></svg>',
28
+ swap: SVG_OPEN + '<path d="M4 8h13"/><path d="M14 5l3 3-3 3"/><path d="M20 16H7"/><path d="M10 13l-3 3 3 3"/></svg>',
29
+ keys: SVG_OPEN + '<path d="M12 3.6a5.6 5.6 0 0 1 3.4 10.1c-.5.4-.8 1-.8 1.6h-5.2c0-.6-.3-1.2-.8-1.6A5.6 5.6 0 0 1 12 3.6Z"/>'
30
+ + '<path d="M9.6 18h4.8"/><path d="M10.4 20.6h3.2"/></svg>',
31
+ };
32
+ /** 一枚分区:标题行(图标位+标题+右端读数)+正文槽。
33
+ * 锚点 id 落在**正文槽**上(指向内容本体),只看 X 卡与全量页共用同一段字符串。 */
34
+ export function sectionOf(anchor, tone, head, inner) {
35
+ return '<section class="chef-view-sec">'
36
+ + '<div class="chef-view-sec-head">'
37
+ + '<span class="chef-view-sec-icon chef-view-icon-' + tone + '" aria-hidden="true">' + ICON[tone] + '</span>'
38
+ + '<h2 class="chef-view-sec-title">' + esc(head.title) + '</h2>'
39
+ + (head.note === '' ? '' : '<span class="chef-view-sec-note">' + esc(head.note) + '</span>')
40
+ + '</div>'
41
+ + '<div class="chef-view-sec-body"' + (anchor === '' ? '' : ' id="' + esc(anchor) + '"') + '>'
42
+ + inner + '</div></section>';
43
+ }
44
+ const PARAM_ICON = {
45
+ heat: ICON.steps,
46
+ clock: SVG_OPEN + '<circle cx="12" cy="12" r="8.4"/><path d="M12 7.2V12l3.2 1.9"/></svg>',
47
+ temp: SVG_OPEN + '<path d="M10.4 13.2V5.6a1.6 1.6 0 0 1 3.2 0v7.6a3.6 3.6 0 1 1-3.2 0Z"/>'
48
+ + '<path d="M12 10v6.4"/></svg>',
49
+ };
50
+ /** 一行「图标位 + 标签 + 值」的参数带(步骤卡的火候/时长/锅温走这一条形状)。 */
51
+ export function paramBandOf(items) {
52
+ if (items.length === 0)
53
+ return '';
54
+ return '<ul class="chef-view-params">' + items.map((it) => '<li class="chef-view-param">'
55
+ + '<span class="chef-view-param-icon" aria-hidden="true">' + PARAM_ICON[it.tone] + '</span>'
56
+ + '<span class="chef-view-param-label">' + esc(it.label) + '</span>'
57
+ + '<span class="chef-view-param-value">' + esc(it.value) + '</span></li>').join('') + '</ul>';
58
+ }
59
+ //# sourceMappingURL=pageSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageSection.js","sourceRoot":"","sources":["../../src/view/pageSection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,4CAA4C;AAC5C,MAAM,GAAG,GAAG,UAAU,CAAC;AAcvB,4DAA4D;AAC5D,MAAM,QAAQ,GAAG,mFAAmF;MAChG,wFAAwF,CAAC;AAE7F,eAAe;AACf,MAAM,IAAI,GAAuC;IAC/C,WAAW,EAAE,QAAQ,GAAG,gEAAgE;UACpF,2FAA2F;IAC/F,KAAK,EAAE,QAAQ,GAAG,uFAAuF;UACrG,kHAAkH;IACtH,SAAS,EAAE,QAAQ,GAAG,iHAAiH;IACvI,UAAU,EAAE,QAAQ,GAAG,kHAAkH;UACrI,gCAAgC;IACpC,OAAO,EAAE,QAAQ,GAAG,uEAAuE;IAC3F,IAAI,EAAE,QAAQ,GAAG,sFAAsF;IACvG,IAAI,EAAE,QAAQ,GAAG,mGAAmG;IACpH,IAAI,EAAE,QAAQ,GAAG,4GAA4G;UACzH,yDAAyD;CAC9D,CAAC;AAEF;mDACmD;AACnD,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,IAAc,EAAE,IAAa,EAAE,KAAa;IACpF,OAAO,iCAAiC;UACpC,kCAAkC;UAClC,iDAAiD,GAAG,IAAI,GAAG,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS;UAC3G,kCAAkC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO;UAC9D,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAmC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;UAC1F,QAAQ;UACR,iCAAiC,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;UAC5F,KAAK,GAAG,kBAAkB,CAAC;AACjC,CAAC;AAKD,MAAM,UAAU,GAAwC;IACtD,IAAI,EAAE,IAAI,CAAC,KAAK;IAChB,KAAK,EAAE,QAAQ,GAAG,uEAAuE;IACzF,IAAI,EAAE,QAAQ,GAAG,yEAAyE;UACtF,8BAA8B;CACnC,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,WAAW,CACzB,KAA8F;IAE9F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,+BAA+B,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CACxD,8BAA8B;UAC5B,wDAAwD,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,SAAS;UAC1F,sCAAsC,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS;UAClE,sCAAsC,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;AAClG,CAAC"}
@@ -11,43 +11,43 @@ export const VIEW_ROUTES = [
11
11
  order: 5,
12
12
  wakeWord: '查看食谱',
13
13
  key: 'chef.recipe.view',
14
- cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
14
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"辣椒炒肉"}\'',
15
15
  },
16
16
  {
17
17
  order: 6,
18
18
  wakeWord: '查看食材',
19
19
  key: 'chef.recipe.view',
20
- cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
20
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"辣椒炒肉"}\'',
21
21
  },
22
22
  {
23
23
  order: 7,
24
24
  wakeWord: '查看步骤',
25
25
  key: 'chef.recipe.view',
26
- cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
26
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"辣椒炒肉"}\'',
27
27
  },
28
28
  {
29
29
  order: 8,
30
30
  wakeWord: '查看营养',
31
31
  key: 'chef.recipe.view',
32
- cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
32
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"辣椒炒肉"}\'',
33
33
  },
34
34
  {
35
35
  order: 9,
36
36
  wakeWord: '查看背景',
37
37
  key: 'chef.recipe.view',
38
- cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
38
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"辣椒炒肉"}\'',
39
39
  },
40
40
  {
41
41
  order: 10,
42
42
  wakeWord: '看菜谱',
43
43
  key: 'chef.recipe.view',
44
- cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
44
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"辣椒炒肉"}\'',
45
45
  },
46
46
  {
47
47
  order: 11,
48
48
  wakeWord: '看菜',
49
49
  key: 'chef.recipe.view',
50
- cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
50
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"辣椒炒肉"}\'',
51
51
  },
52
52
  ];
53
53
  //# sourceMappingURL=routes.js.map
@@ -2,10 +2,14 @@
2
2
  *
3
3
  * 老分派层(`src/cli/cmd_read.ts`)分支逐字节下沉:只改 import 出处,判定与装配一字不动。
4
4
  * 缺定位走取数错(`resolveNameOrId` 任务口径,入口映射为 exit 4)。
5
+ *
6
+ * #770 取数面(配方 `t768-页面族配方.md` §4 回写本票领 4 条):营养/背景/六张关联表徽标/
7
+ * 替换食材。替换食材已在行上(`ingredients.substitute`);历史统计走共享原语。
8
+ * 营养无行时显式标未估算,不编数字冒充(票面「不许动的东西」)。
5
9
  */
6
10
  import type { ChefDb } from '../fetch/db.js';
7
11
  import type { RecipeDetail } from '../render/views.js';
8
- export declare function recipeDetail(detail: RecipeDetail): {
12
+ export declare function recipeDetail(detail: RecipeDetail, handle?: ChefDb): {
9
13
  item: Record<string, unknown>;
10
14
  };
11
15
  /** 跑 `chef.recipe.view`:按名或 id 取单菜全貌(detail 形)。 */
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/view/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAkBpF;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAEtF"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/view/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAgDvD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAgCrG;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAGtF"}
package/dist/view/run.js CHANGED
@@ -2,15 +2,71 @@
2
2
  *
3
3
  * 老分派层(`src/cli/cmd_read.ts`)分支逐字节下沉:只改 import 出处,判定与装配一字不动。
4
4
  * 缺定位走取数错(`resolveNameOrId` 任务口径,入口映射为 exit 4)。
5
+ *
6
+ * #770 取数面(配方 `t768-页面族配方.md` §4 回写本票领 4 条):营养/背景/六张关联表徽标/
7
+ * 替换食材。替换食材已在行上(`ingredients.substitute`);历史统计走共享原语。
8
+ * 营养无行时显式标未估算,不编数字冒充(票面「不许动的东西」)。
5
9
  */
6
- import { getRecipeDetail } from '../fetch/db.js';
10
+ import { getRecipeDetail, historyStats, qAll, qGet, queryHistory } from '../fetch/db.js';
7
11
  import { toRecipeItem } from '../render/views.js';
8
12
  import { resolveNameOrId } from '../shared/slots.js';
9
- // 单菜全貌 detail:基本 + 食材 + 步骤 + 历史统计 + 营养占位(一期只占位,不编数字)。
13
+ // 营养行(`nutrition_info`,一菜一行):有行即真数据,无行即显式未估算。
14
+ function queryNutrition(recipeId, h) {
15
+ const row = qGet(h, 'SELECT * FROM nutrition_info WHERE recipe_id = ?', [recipeId]);
16
+ if (!row)
17
+ return { estimated: false, note: '营养估算一期占位(以实际食材称量为准)' };
18
+ return {
19
+ estimated: true,
20
+ serving_size: row.serving_size, serving_unit: row.serving_unit,
21
+ calories: row.calories, protein: row.protein, fat: row.fat,
22
+ carbs: row.carbs, fiber: row.fiber, sodium: row.sodium,
23
+ };
24
+ }
25
+ // 背景行(`background_knowledge`,一菜一行):无行即 null(页面不留空块)。
26
+ function queryBackground(recipeId, h) {
27
+ const row = qGet(h, 'SELECT * FROM background_knowledge WHERE recipe_id = ?', [recipeId]);
28
+ if (!row)
29
+ return null;
30
+ return {
31
+ origin_story: row.origin_story,
32
+ historical_background: row.historical_background,
33
+ cultural_significance: row.cultural_significance,
34
+ };
35
+ }
36
+ // 页头徽标行(六张关联表,各 1–N 行):只收文本列,无行即空数组(徽章行空即不印)。
37
+ function queryBadges(recipeId, h) {
38
+ const col = (table, field) => qAll(h, 'SELECT ' + field + ' FROM ' + table + ' WHERE recipe_id = ?', [recipeId])
39
+ .map((r) => String(r[field] ?? ''))
40
+ .filter((s) => s !== '');
41
+ const region = qAll(h, 'SELECT region, country FROM recipe_categories WHERE recipe_id = ?', [recipeId]);
42
+ return {
43
+ cuisine: col('recipe_categories', 'cuisine_type'),
44
+ region: region.map((r) => String(r.region ?? '')).filter((s) => s !== ''),
45
+ country: region.map((r) => String(r.country ?? '')).filter((s) => s !== ''),
46
+ flavors: col('recipe_flavors', 'flavor'),
47
+ seasons: col('recipe_seasons', 'season'),
48
+ meal_types: col('recipe_meal_types', 'meal_type'),
49
+ diet_tags: col('recipe_diet_tags', 'tag'),
50
+ cooking_methods: col('recipe_cooking_methods', 'method'),
51
+ };
52
+ }
53
+ // 单菜全貌 detail:基本 + 食材 + 步骤 + 历史统计 + 营养(真行或显式占位)+ 背景 + 徽标。
10
54
  // 原 `src/render/views.ts`,本域独占(旧址由 `src/render/index.ts` 转出)。
11
- export function recipeDetail(detail) {
55
+ export function recipeDetail(detail, handle) {
12
56
  const ingredients = [...detail.ingredients].sort((a, b) => a.sequence - b.sequence).map((g) => ({ ...g }));
13
57
  const steps = [...detail.steps].sort((a, b) => a.sequence - b.sequence).map((s) => ({ ...s }));
58
+ const recipeId = detail.recipe.id;
59
+ const history = detail.history ?? (handle ? historyStats(handle, recipeId) : { count: 0, avgRating: null });
60
+ const timeline = handle
61
+ ? queryHistory(handle, recipeId).map((r) => ({
62
+ cook_date: r.cook_date, cook_sequence: r.cook_sequence, rating: r.rating, feedback: r.feedback,
63
+ }))
64
+ : [];
65
+ const nutrition = handle ? queryNutrition(recipeId, handle) : { estimated: false, note: '营养估算一期占位(以实际食材称量为准)' };
66
+ const background = handle ? queryBackground(recipeId, handle) : null;
67
+ const badges = handle ? queryBadges(recipeId, handle) : {
68
+ cuisine: [], region: [], country: [], flavors: [], seasons: [], meal_types: [], diet_tags: [], cooking_methods: [],
69
+ };
14
70
  return {
15
71
  item: {
16
72
  ...toRecipeItem(detail.recipe),
@@ -21,14 +77,17 @@ export function recipeDetail(detail) {
21
77
  updated_at: detail.recipe.updated_at,
22
78
  ingredients,
23
79
  steps,
24
- history: detail.history ?? { count: 0, avgRating: null },
25
- // 营养占位:一期不估算,显式标记未估算,不编数字冒充。
26
- nutrition: { estimated: false, note: '营养估算一期占位(以实际食材称量为准)' },
80
+ history,
81
+ history_timeline: timeline,
82
+ nutrition,
83
+ background,
84
+ badges,
27
85
  },
28
86
  };
29
87
  }
30
88
  /** 跑 `chef.recipe.view`:按名或 id 取单菜全貌(detail 形)。 */
31
89
  export function runRecipeView(handle, params) {
32
- return recipeDetail(getRecipeDetail(handle, resolveNameOrId(params)));
90
+ const detail = getRecipeDetail(handle, resolveNameOrId(params));
91
+ return recipeDetail(detail, handle);
33
92
  }
34
93
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/view/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,sDAAsD;AACtD,8DAA8D;AAC9D,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3G,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/F,OAAO;QACL,IAAI,EAAE;YACJ,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;YAClC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;YAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,WAAW;YACX,KAAK;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;YACxD,6BAA6B;YAC7B,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE;SAC7D;KACF,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAA+B;IAC3E,OAAO,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/view/run.ts"],"names":[],"mappings":"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"}