skill-calorie 0.2.0 → 0.2.1

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 (130) hide show
  1. package/SKILL.md +54 -26
  2. package/dist/analysis/anomaly/common.d.ts.map +1 -1
  3. package/dist/analysis/anomaly/common.js +2 -1
  4. package/dist/analysis/anomaly/common.js.map +1 -1
  5. package/dist/analysis/cross.d.ts.map +1 -1
  6. package/dist/analysis/cross.js +3 -2
  7. package/dist/analysis/cross.js.map +1 -1
  8. package/dist/analysis/deficit.d.ts.map +1 -1
  9. package/dist/analysis/deficit.js +4 -0
  10. package/dist/analysis/deficit.js.map +1 -1
  11. package/dist/analysis/diet.js +2 -2
  12. package/dist/analysis/diet.js.map +1 -1
  13. package/dist/analysis/exercise.js +5 -5
  14. package/dist/analysis/exercise.js.map +1 -1
  15. package/dist/analysis/review.js +2 -2
  16. package/dist/analysis/review.js.map +1 -1
  17. package/dist/analysis/series.d.ts +7 -1
  18. package/dist/analysis/series.d.ts.map +1 -1
  19. package/dist/analysis/series.js +22 -6
  20. package/dist/analysis/series.js.map +1 -1
  21. package/dist/analysis/utils.d.ts +7 -0
  22. package/dist/analysis/utils.d.ts.map +1 -1
  23. package/dist/analysis/utils.js +7 -0
  24. package/dist/analysis/utils.js.map +1 -1
  25. package/dist/analysis/weightCompare3.js +2 -2
  26. package/dist/analysis/weightCompare3.js.map +1 -1
  27. package/dist/cli/cmd_read.d.ts +21 -3
  28. package/dist/cli/cmd_read.d.ts.map +1 -1
  29. package/dist/cli/cmd_read.js +460 -54
  30. package/dist/cli/cmd_read.js.map +1 -1
  31. package/dist/cli/keys.d.ts +89 -1
  32. package/dist/cli/keys.d.ts.map +1 -1
  33. package/dist/cli/keys.js +30 -0
  34. package/dist/cli/keys.js.map +1 -1
  35. package/dist/cli/write.d.ts +12 -9
  36. package/dist/cli/write.d.ts.map +1 -1
  37. package/dist/cli/write.js +133 -48
  38. package/dist/cli/write.js.map +1 -1
  39. package/dist/output.d.ts +55 -1
  40. package/dist/output.d.ts.map +1 -1
  41. package/dist/output.js +203 -5
  42. package/dist/output.js.map +1 -1
  43. package/dist/render/dietDocs.d.ts +45 -0
  44. package/dist/render/dietDocs.d.ts.map +1 -0
  45. package/dist/render/dietDocs.js +561 -0
  46. package/dist/render/dietDocs.js.map +1 -0
  47. package/dist/render/envelope.d.ts +32 -6
  48. package/dist/render/envelope.d.ts.map +1 -1
  49. package/dist/render/envelope.js +71 -0
  50. package/dist/render/envelope.js.map +1 -1
  51. package/dist/render/exercisePort.d.ts +161 -0
  52. package/dist/render/exercisePort.d.ts.map +1 -0
  53. package/dist/render/exercisePort.js +395 -0
  54. package/dist/render/exercisePort.js.map +1 -0
  55. package/dist/render/goal.d.ts.map +1 -1
  56. package/dist/render/goal.js +13 -2
  57. package/dist/render/goal.js.map +1 -1
  58. package/dist/render/goalPlate.d.ts +1 -1
  59. package/dist/render/goalPlate.d.ts.map +1 -1
  60. package/dist/render/goalPlate.js +5 -1
  61. package/dist/render/goalPlate.js.map +1 -1
  62. package/dist/render/helpCenter.d.ts +104 -0
  63. package/dist/render/helpCenter.d.ts.map +1 -0
  64. package/dist/render/helpCenter.js +386 -0
  65. package/dist/render/helpCenter.js.map +1 -0
  66. package/dist/render/html.d.ts.map +1 -1
  67. package/dist/render/html.js +2 -1
  68. package/dist/render/html.js.map +1 -1
  69. package/dist/render/index.d.ts +3 -0
  70. package/dist/render/index.d.ts.map +1 -1
  71. package/dist/render/index.js +2 -0
  72. package/dist/render/index.js.map +1 -1
  73. package/dist/render/nutritionPort.d.ts +89 -0
  74. package/dist/render/nutritionPort.d.ts.map +1 -0
  75. package/dist/render/nutritionPort.js +183 -0
  76. package/dist/render/nutritionPort.js.map +1 -0
  77. package/dist/render/nutritionPortDocs.d.ts +6 -0
  78. package/dist/render/nutritionPortDocs.d.ts.map +1 -0
  79. package/dist/render/nutritionPortDocs.js +317 -0
  80. package/dist/render/nutritionPortDocs.js.map +1 -0
  81. package/dist/render/photo.d.ts.map +1 -1
  82. package/dist/render/photo.js +5 -1
  83. package/dist/render/photo.js.map +1 -1
  84. package/dist/render/planPlate.d.ts +2 -1
  85. package/dist/render/planPlate.d.ts.map +1 -1
  86. package/dist/render/planPlate.js +6 -1
  87. package/dist/render/planPlate.js.map +1 -1
  88. package/dist/render/receipt.d.ts +47 -1
  89. package/dist/render/receipt.d.ts.map +1 -1
  90. package/dist/render/receipt.js +67 -3
  91. package/dist/render/receipt.js.map +1 -1
  92. package/dist/render/sportDocs.d.ts +14 -0
  93. package/dist/render/sportDocs.d.ts.map +1 -0
  94. package/dist/render/sportDocs.js +540 -0
  95. package/dist/render/sportDocs.js.map +1 -0
  96. package/dist/render/sportPortDocs.d.ts +8 -0
  97. package/dist/render/sportPortDocs.d.ts.map +1 -0
  98. package/dist/render/sportPortDocs.js +468 -0
  99. package/dist/render/sportPortDocs.js.map +1 -0
  100. package/dist/render/trendDocs.d.ts +11 -0
  101. package/dist/render/trendDocs.d.ts.map +1 -0
  102. package/dist/render/trendDocs.js +445 -0
  103. package/dist/render/trendDocs.js.map +1 -0
  104. package/dist/render/trendMiscPort.d.ts +127 -0
  105. package/dist/render/trendMiscPort.d.ts.map +1 -0
  106. package/dist/render/trendMiscPort.js +277 -0
  107. package/dist/render/trendMiscPort.js.map +1 -0
  108. package/dist/render/trendMiscPortDocs.d.ts +10 -0
  109. package/dist/render/trendMiscPortDocs.d.ts.map +1 -0
  110. package/dist/render/trendMiscPortDocs.js +397 -0
  111. package/dist/render/trendMiscPortDocs.js.map +1 -0
  112. package/dist/render/wizardPort.d.ts +125 -0
  113. package/dist/render/wizardPort.d.ts.map +1 -0
  114. package/dist/render/wizardPort.js +393 -0
  115. package/dist/render/wizardPort.js.map +1 -0
  116. package/dist/render/wizardPortDocs.d.ts +6 -0
  117. package/dist/render/wizardPortDocs.d.ts.map +1 -0
  118. package/dist/render/wizardPortDocs.js +274 -0
  119. package/dist/render/wizardPortDocs.js.map +1 -0
  120. package/dist/triggers/routing.d.ts +21 -21
  121. package/dist/triggers/routing.d.ts.map +1 -1
  122. package/dist/triggers/routing.js +60 -30
  123. package/dist/triggers/routing.js.map +1 -1
  124. package/package.json +1 -1
  125. package/templates/diet.html +2 -2
  126. package/templates/exercise.html +2 -2
  127. package/templates/goal.html +2 -2
  128. package/templates/help.html +2 -2
  129. package/templates/home.html +2 -2
  130. package/templates/photo-gallery.html +2 -2
@@ -0,0 +1,397 @@
1
+ /** #113 · 趋势 2+其他 6 移植 8 键 HTML 填充器(t71 需移植八模板的展示面)。
2
+ *
3
+ * 包裹约定(沿 #111/#112,不新增):
4
+ * sharedCss = buildStyleSheet().css + blocksCss(),不走 extraCss;
5
+ * 图表页另加 CHARTS-HELPERS+buildChartsHelpersJs,图表 CSS 由其运行时注入)。
6
+ * 复制文本一律 buildDataText(#77 契约):stat 投影 metrics 只收确定数字。
7
+ * 本层不做取数(数据由 render/trendMiscPort.ts 备齐),不返空(缺失由数据层抛 missing-data)。
8
+ */
9
+ import { blocksCss, renderChartBlock, renderCopyBlock, renderDataTable, renderDisclosure, renderKpiGrid, renderListRows, renderPageShell, renderParamForm, } from 'base-paint/blocks';
10
+ import { buildChartsHelpersJs, buildDataText, buildSharedHelpersJs, buildStyleSheet, fillTemplate } from 'base-paint';
11
+ /** envelope 头(值冻结对齐 cli/keys.ts ENVELOPE_VERSION/CALORIE_SKILL;测试钉死一致)。 */
12
+ const DOC_VERSION = '0.1.0';
13
+ const DOC_SKILL = 'calorie';
14
+ /** 内容页壳(裸标记+CONTENT 槽;包裹约定:资产裸文本+填充器包裹,标记不得预包裹)。
15
+ * wrap 带 ilife-page 兼容既有 --html 断言。 */
16
+ const DOC_SHELL = '<!doctype html>\n<html lang="zh-CN">\n<head>\n<meta charset="utf-8">\n' +
17
+ '<meta name="viewport" content="width=device-width,initial-scale=1">\n' +
18
+ '<title>卡路里·趋势其他移植</title>\n<!--SHARED-CSS-->\n</head>\n<body>\n' +
19
+ '<div class="wrap ilife-page">\n<!--CONTENT-->\n</div>\n<!--SHARED-HELPERS-->\n</body>\n</html>';
20
+ /** 图表页壳(多一个 CHARTS-HELPERS 标记,图表 CSS 由 charts helpers 运行时注入)。 */
21
+ const DOC_SHELL_CHARTS = '<!doctype html>\n<html lang="zh-CN">\n<head>\n<meta charset="utf-8">\n' +
22
+ '<meta name="viewport" content="width=device-width,initial-scale=1">\n' +
23
+ '<title>卡路里·趋势其他移植</title>\n<!--SHARED-CSS-->\n</head>\n<body>\n' +
24
+ '<div class="wrap ilife-page">\n<!--CONTENT-->\n</div>\n<!--SHARED-HELPERS-->\n<!--CHARTS-HELPERS-->\n</body>\n</html>';
25
+ function assemble(title, eyebrow, subtitle, content, charts) {
26
+ const assets = {
27
+ sharedCssText: buildStyleSheet().css + '\n' + blocksCss(),
28
+ sharedHelpersJs: buildSharedHelpersJs(),
29
+ };
30
+ if (charts)
31
+ assets.chartsHelpersJs = buildChartsHelpersJs();
32
+ const body = renderPageShell({
33
+ title,
34
+ ...(eyebrow ? { eyebrow } : {}),
35
+ ...(subtitle ? { subtitle } : {}),
36
+ content,
37
+ });
38
+ return fillTemplate({ template: charts ? DOC_SHELL_CHARTS : DOC_SHELL, assets, content: body }).html;
39
+ }
40
+ function copyBlock(title, input) {
41
+ return renderCopyBlock({ title, dataText: buildDataText(input) });
42
+ }
43
+ function fmt(n) {
44
+ if (n === null || n === undefined)
45
+ return '—';
46
+ return String(n);
47
+ }
48
+ /** 复制投影 stat-metrics 只收确定数字(冻结口径:null/undefined 不进投影)。 */
49
+ function metricsOf(obj) {
50
+ const out = {};
51
+ for (const [k, v] of Object.entries(obj)) {
52
+ if (v !== null && v !== undefined)
53
+ out[k] = v;
54
+ }
55
+ return out;
56
+ }
57
+ function windowForm(start, end, extra) {
58
+ return renderParamForm({
59
+ fields: [
60
+ { name: 'start', label: '开始', value: start },
61
+ { name: 'end', label: '结束', value: end },
62
+ ],
63
+ description: extra,
64
+ });
65
+ }
66
+ /* ── 热量趋势(calorie_trend:T7 口径日序列+达标统计) ── */
67
+ export function buildCalorieTrendDoc(v) {
68
+ const s = v.data.summary;
69
+ const trendLabel = s.trend === 'down' ? '↓ 下降' : (s.trend === 'up' ? '↑ 上升' : '→ 平稳');
70
+ const parts = [
71
+ windowForm(v.start, v.end, 'T5 buildSeries 唯一源(水已排除);达标=单日≤目标×1.05'),
72
+ renderKpiGrid([
73
+ { label: '日均', value: String(s.avg), unit: '卡', detail: '目标 ' + s.target + '卡' },
74
+ { label: '趋势', value: trendLabel, detail: '窗首 ' + s.startAvg + ' → 窗尾 ' + s.endAvg + '(差 ' + s.trendValue + ')' },
75
+ { label: '达标天数', value: String(s.compliantDays), unit: '天', detail: '达标率 ' + Math.round(s.complianceRate * 100) + '%' },
76
+ { label: '周末−工作日', value: String(s.weekendDiff), unit: '卡', detail: '工作日 ' + s.weekdayAvg + '/周末 ' + s.weekendAvg },
77
+ ]),
78
+ renderChartBlock({
79
+ kind: 'line',
80
+ title: '每日热量',
81
+ input: { items: v.data.series.map((d) => ({ label: d.date.slice(5), value: d.calorie })) },
82
+ }),
83
+ copyBlock('复制数据', {
84
+ envelope: {
85
+ version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.calorie-trend',
86
+ data: {
87
+ metrics: metricsOf({
88
+ avg: s.avg, target: s.target, trendValue: s.trendValue,
89
+ startAvg: s.startAvg, endAvg: s.endAvg, weekdayAvg: s.weekdayAvg,
90
+ weekendAvg: s.weekendAvg, weekendDiff: s.weekendDiff,
91
+ compliantDays: s.compliantDays, complianceRate: s.complianceRate,
92
+ }),
93
+ },
94
+ },
95
+ }),
96
+ ];
97
+ return assemble('热量趋势 ' + v.start + ' ~ ' + v.end, 'calorie.view.calorie-trend · 趋势其他移植域', '日序列+趋势方向+达标统计(空窗阻断,不编数)', parts.join(''), true);
98
+ }
99
+ /* ── 整体趋势(long_trend:体重+热量双序列) ── */
100
+ export function buildLongTrendDoc(v) {
101
+ const parts = [
102
+ renderKpiGrid([
103
+ { label: '日均热量', value: String(v.avgCalorie), unit: '卡', detail: v.start + ' ~ ' + v.end },
104
+ {
105
+ label: '体重变化', value: fmt(v.weightChange), unit: v.weightChange === null ? '' : 'kg',
106
+ detail: v.weightChange === null ? '窗内称重不足 2 次' : '窗首→窗尾',
107
+ status: v.weightChange === null ? undefined : (v.weightChange < 0 ? 'ok' : (v.weightChange > 0 ? 'warn' : undefined)),
108
+ },
109
+ { label: '窗口', value: String(v.windowDays), unit: '天', detail: '分组 ' + v.group },
110
+ ]),
111
+ renderChartBlock({
112
+ kind: 'line',
113
+ title: '每日热量(' + v.windowDays + ' 天)',
114
+ input: { items: v.days.map((d) => ({ label: d.date.slice(5), value: d.calorie })) },
115
+ }),
116
+ ];
117
+ let charts = true;
118
+ const weighed = v.days.filter((d) => d.weightKg !== null);
119
+ if (weighed.length > 0) {
120
+ parts.push(renderChartBlock({
121
+ kind: 'line',
122
+ title: '体重轨迹(共 ' + weighed.length + ' 次称重)',
123
+ input: { items: weighed.map((d) => ({ label: d.date.slice(5), value: d.weightKg })) },
124
+ }));
125
+ }
126
+ parts.push(renderDataTable({
127
+ columns: [
128
+ { key: 'date', label: '日期' },
129
+ { key: 'calorie', label: '热量卡', align: 'right' },
130
+ { key: 'weight', label: '体重kg', align: 'right' },
131
+ ],
132
+ rows: v.days.map((d) => ({ date: d.date, calorie: d.calorie, weight: fmt(d.weightKg) })),
133
+ caption: '逐日明细(' + v.start + ' ~ ' + v.end + ')',
134
+ emptyText: '本窗无明细',
135
+ }));
136
+ parts.push(copyBlock('复制数据', {
137
+ envelope: {
138
+ version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.long-trend',
139
+ data: {
140
+ metrics: metricsOf({ windowDays: v.windowDays, avgCalorie: v.avgCalorie, weightChange: v.weightChange }),
141
+ },
142
+ },
143
+ }));
144
+ return assemble('整体趋势(' + v.windowDays + ' 天)', 'calorie.view.long-trend · 趋势其他移植域', '体重+热量双序列(称重不足 2 次则体重变化明示缺失)', parts.join(''), charts);
145
+ }
146
+ /* ── 营养分析(nutrition_analysis:宏量占比+微量 vs 推荐+规则建议) ── */
147
+ export function buildNutritionAnalysisDoc(v) {
148
+ const parts = [
149
+ windowForm(v.start, v.end, '宏量占比=蛋白/碳水×4、脂肪×9 除以总热量;微量=日均 vs 每日推荐'),
150
+ renderKpiGrid([
151
+ { label: '蛋白', value: String(v.proteinG), unit: 'g', detail: v.proteinPct + '%(建议 10~20%)' },
152
+ { label: '碳水', value: String(v.carbG), unit: 'g', detail: v.carbPct + '%(建议 45~65%)' },
153
+ { label: '脂肪', value: String(v.fatG), unit: 'g', detail: v.fatPct + '%(建议 20~35%)' },
154
+ { label: '总摄入', value: String(v.totalCalorie), unit: '卡', detail: v.days + ' 天' },
155
+ ]),
156
+ renderDataTable({
157
+ columns: [
158
+ { key: 'label', label: '微量' },
159
+ { key: 'avg', label: '日均', align: 'right' },
160
+ { key: 'good', label: '推荐' },
161
+ { key: 'status', label: '状态' },
162
+ ],
163
+ rows: [
164
+ {
165
+ label: '膳食纤维', avg: v.fiberAvg + 'g', good: '≥25g/天',
166
+ status: v.fiberAvg >= 25 ? '✓' : '↓ 不足',
167
+ },
168
+ {
169
+ label: '钠', avg: v.sodiumAvg + 'mg', good: '≤2000mg/天',
170
+ status: v.sodiumAvg <= 2000 ? '✓' : '↑ 超标',
171
+ },
172
+ {
173
+ label: '糖', avg: v.sugarAvg + 'g', good: '≤50g/天',
174
+ status: v.sugarAvg <= 50 ? '✓' : '↑ 超标',
175
+ },
176
+ ],
177
+ caption: '微量营养素 vs 推荐',
178
+ emptyText: '本窗无微量数据',
179
+ }),
180
+ ];
181
+ let charts = false;
182
+ if (v.totalCalorie > 0) {
183
+ parts.push(renderChartBlock({
184
+ kind: 'donut',
185
+ title: '热量来源占比',
186
+ input: {
187
+ items: [
188
+ { label: '蛋白', value: v.proteinG * 4 },
189
+ { label: '碳水', value: v.carbG * 4 },
190
+ { label: '脂肪', value: v.fatG * 9 },
191
+ ],
192
+ options: { showPercent: true },
193
+ },
194
+ }));
195
+ charts = true;
196
+ }
197
+ parts.push(renderDisclosure({
198
+ title: '分析建议(共 ' + v.advice.length + ' 条,由窗内数据规则派生)',
199
+ contentHtml: renderListRows({
200
+ items: v.advice.map((a, i) => ({ left: String(i + 1), main: a, right: '' })),
201
+ }),
202
+ }));
203
+ parts.push(copyBlock('复制数据', {
204
+ envelope: {
205
+ version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.nutrition-analysis',
206
+ data: {
207
+ metrics: metricsOf({
208
+ days: v.days, totalCalorie: v.totalCalorie,
209
+ proteinG: v.proteinG, proteinPct: v.proteinPct,
210
+ carbG: v.carbG, carbPct: v.carbPct, fatG: v.fatG, fatPct: v.fatPct,
211
+ fiberAvg: v.fiberAvg, sodiumAvg: v.sodiumAvg, sugarAvg: v.sugarAvg,
212
+ adviceCount: v.advice.length,
213
+ }),
214
+ },
215
+ },
216
+ }));
217
+ return assemble('营养分析 ' + v.start + ' ~ ' + v.end, 'calorie.view.nutrition-analysis · 趋势其他移植域', '配比+微量+规则建议(建议阈值见数据层注释,不编造结论)', parts.join(''), charts);
218
+ }
219
+ /* ── 每日六因素(six_factors) ── */
220
+ export function buildSixFactorsDoc(v) {
221
+ const parts = [
222
+ renderKpiGrid(v.factors.map((f) => ({
223
+ label: f.label, value: f.ok ? '✓' : '✗', detail: f.detail,
224
+ status: f.ok ? 'ok' : 'warn',
225
+ }))),
226
+ renderDataTable({
227
+ columns: [
228
+ { key: 'label', label: '因素' },
229
+ { key: 'ok', label: '达标' },
230
+ { key: 'detail', label: '依据' },
231
+ ],
232
+ rows: v.factors.map((f) => ({ label: f.label, ok: f.ok ? '✓' : '✗', detail: f.detail })),
233
+ caption: '六因素明细(' + v.date + ',得分 ' + v.score + '/6)',
234
+ emptyText: '当日无因素数据',
235
+ }),
236
+ copyBlock('复制数据', {
237
+ envelope: {
238
+ version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.six-factors',
239
+ data: {
240
+ metrics: metricsOf({
241
+ score: v.score,
242
+ calorie: v.factors[0]?.ok ? 1 : 0,
243
+ protein: v.factors[1]?.ok ? 1 : 0,
244
+ water: v.factors[2]?.ok ? 1 : 0,
245
+ exercise: v.factors[3]?.ok ? 1 : 0,
246
+ weigh: v.factors[4]?.ok ? 1 : 0,
247
+ meals: v.factors[5]?.ok ? 1 : 0,
248
+ }),
249
+ },
250
+ },
251
+ }),
252
+ ];
253
+ return assemble('每日六因素 ' + v.date, 'calorie.view.six-factors · 趋势其他移植域', '热量/蛋白/饮水/运动/称重/三餐(无目标项明示,不编数)', parts.join(''), false);
254
+ }
255
+ /* ── 数据健康检查(lint_health) ── */
256
+ export function buildLintHealthDoc(v) {
257
+ const parts = [
258
+ renderKpiGrid([
259
+ {
260
+ label: '问题总数', value: String(v.issueCount), unit: '项',
261
+ detail: v.issueCount === 0 ? '数据健康' : '见下表明细',
262
+ status: v.issueCount === 0 ? 'ok' : 'warn',
263
+ },
264
+ ]),
265
+ renderDataTable({
266
+ columns: [
267
+ { key: 'label', label: '检查项' },
268
+ { key: 'count', label: '数量', align: 'right' },
269
+ { key: 'detail', label: '明细' },
270
+ ],
271
+ rows: v.checks.map((c) => ({ label: c.label, count: c.count, detail: c.detail })),
272
+ caption: '健康检查明细(只读体检,不写库)',
273
+ emptyText: '无检查项',
274
+ }),
275
+ copyBlock('复制数据', {
276
+ envelope: {
277
+ version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.lint-health',
278
+ data: {
279
+ metrics: metricsOf({
280
+ issueCount: v.issueCount,
281
+ unmatched: v.checks[0]?.count,
282
+ badCalorie: v.checks[1]?.count,
283
+ future: v.checks[2]?.count,
284
+ duplicate: v.checks[3]?.count,
285
+ }),
286
+ },
287
+ },
288
+ }),
289
+ ];
290
+ return assemble('数据健康检查', 'calorie.view.lint-health · 趋势其他移植域', '未匹配库/零负热量/未来日期/疑似重复(只读,不写库)', parts.join(''), false);
291
+ }
292
+ /* ── 批量导入预览(batch_import_preview) ── */
293
+ export function buildBatchImportPreviewDoc(v) {
294
+ const parts = [
295
+ renderKpiGrid([
296
+ { label: '待导入', value: String(v.total), unit: '条' },
297
+ { label: '已匹配库', value: String(v.matched), unit: '条', detail: '精确名匹配' },
298
+ {
299
+ label: '未匹配', value: String(v.missing), unit: '种',
300
+ detail: v.missing === 0 ? '全部可入库' : '导入后建议补录',
301
+ status: v.missing === 0 ? 'ok' : 'warn',
302
+ },
303
+ { label: '合计热量', value: String(v.totalCalorie), unit: '卡' },
304
+ ]),
305
+ renderDataTable({
306
+ columns: [
307
+ { key: 'foodName', label: '食物' },
308
+ { key: 'calories', label: '热量卡', align: 'right' },
309
+ { key: 'lib', label: '库热量', align: 'right' },
310
+ { key: 'status', label: '匹配' },
311
+ ],
312
+ rows: v.items.map((it) => ({
313
+ foodName: it.foodName, calories: it.calories,
314
+ lib: fmt(it.libCalories), status: it.matched ? '✓' : '✗ 缺库',
315
+ })),
316
+ caption: '逐条预览(仅预览,不写库)',
317
+ emptyText: '无待导入条目',
318
+ }),
319
+ ];
320
+ if (v.missingNames.length > 0) {
321
+ parts.push(renderDisclosure({
322
+ title: '缺库食物(共 ' + v.missingNames.length + ' 种)',
323
+ contentHtml: renderListRows({
324
+ items: v.missingNames.map((name) => ({ left: name, main: '未在食品库找到', right: '建议用「存食品」补录' })),
325
+ }),
326
+ }));
327
+ }
328
+ parts.push(copyBlock('复制数据', {
329
+ envelope: {
330
+ version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.batch-import-preview',
331
+ data: {
332
+ metrics: metricsOf({
333
+ total: v.total, matched: v.matched, missing: v.missing, totalCalorie: v.totalCalorie,
334
+ }),
335
+ },
336
+ },
337
+ }));
338
+ return assemble('批量导入预览', 'calorie.view.batch-import-preview · 趋势其他移植域', '库匹配+合计试算(仅预览,不写库;确认后走 diet.batch 写入)', parts.join(''), false);
339
+ }
340
+ /* ── 落地训练进度(process_progress) ── */
341
+ export function buildProcessProgressDoc(v) {
342
+ const parts = [
343
+ renderKpiGrid([
344
+ { label: '训练计划', value: v.hasPlan ? '有' : '无', detail: v.title ?? '未配置计划' },
345
+ { label: '计划训练日', value: String(v.plannedDays), unit: '天', detail: v.totalWeeks === null ? '' : '共 ' + v.totalWeeks + ' 周' },
346
+ { label: '近7天运动', value: String(v.sessions7d), unit: '次', detail: v.start + ' ~ ' + v.end },
347
+ { label: '近7天时长', value: String(v.minutes7d), unit: '分钟' },
348
+ ]),
349
+ copyBlock('复制数据', {
350
+ envelope: {
351
+ version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.process-progress',
352
+ data: {
353
+ metrics: metricsOf({
354
+ hasPlan: v.hasPlan ? 1 : 0, plannedDays: v.plannedDays,
355
+ sessions7d: v.sessions7d, minutes7d: v.minutes7d,
356
+ }),
357
+ },
358
+ },
359
+ }),
360
+ ];
361
+ return assemble('落地训练进度', 'calorie.view.process-progress · 趋势其他移植域', '计划配置+近 7 天执行(无计划且无执行即阻断)', parts.join(''), false);
362
+ }
363
+ /* ── 复盘报告(review_template) ── */
364
+ export function buildReviewTemplateDoc(v) {
365
+ const parts = [
366
+ windowForm(v.start, v.end, '饮食/运动/体重三面小结;记餐偏疏时结论明示仅供参考'),
367
+ renderKpiGrid([
368
+ { label: '记餐', value: String(v.meals), unit: '餐', detail: v.days + ' 天' },
369
+ { label: '日均热量', value: String(v.avgCalorie), unit: '卡', detail: v.goalCalorie === null ? '无目标' : '目标 ' + v.goalCalorie + '卡' },
370
+ { label: '运动', value: String(v.sessions), unit: '次', detail: v.minutes + ' 分钟' },
371
+ {
372
+ label: '体重变化', value: fmt(v.weightChange), unit: v.weightChange === null ? '' : 'kg',
373
+ detail: v.weightChange === null ? '称重不足 2 次' : '窗首→窗尾',
374
+ },
375
+ ]),
376
+ renderDisclosure({
377
+ title: '复盘要点(共 ' + v.points.length + ' 条,由窗内数据派生)',
378
+ contentHtml: renderListRows({
379
+ items: v.points.map((p, i) => ({ left: String(i + 1), main: p, right: '' })),
380
+ }),
381
+ }),
382
+ copyBlock('复制数据', {
383
+ envelope: {
384
+ version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.review-template',
385
+ data: {
386
+ metrics: metricsOf({
387
+ days: v.days, meals: v.meals, avgCalorie: v.avgCalorie,
388
+ sessions: v.sessions, minutes: v.minutes, weightChange: v.weightChange,
389
+ points: v.points.length,
390
+ }),
391
+ },
392
+ },
393
+ }),
394
+ ];
395
+ return assemble('复盘报告 ' + v.start + ' ~ ' + v.end, 'calorie.view.review-template · 趋势其他移植域', '三面小结+派生要点(要点为规则输出,非 AI 建议)', parts.join(''), false);
396
+ }
397
+ //# sourceMappingURL=trendMiscPortDocs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trendMiscPortDocs.js","sourceRoot":"","sources":["../../src/render/trendMiscPortDocs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /** #86 · wizard 4 页复刻(D1 verify 体验)render 数据+ prompt 复刻。
2
+ *
3
+ * 点名(t71 §2 #4/#6/#11/#9;#52 明确不做、#54 新版已有不碰):
4
+ * 3 个配置型 wizard(记围度/记体脂/记身材照)+ 1 个 GIF 框选器。
5
+ * 形态=静态 HTML + copyText(B7 边界:B-09 表单零 JS,行为归宿主;
6
+ * formPrompt/selectList/smartSelect 一律不用,复制走 Base P0 双通道)。
7
+ *
8
+ * 数据源全复用既有取数层(fetch/body.ts、fetch/photos.ts),不自算:
9
+ * 围度 recent=listMeasurements(limit 1);体脂 recent=listCompositions(limit 1);
10
+ * 身材照 wizard 纯配置(老家 render_body_photo_log_wizard.py 无数据源)不读库;
11
+ * GIF 框选=listPhotos(tag/365 天窗)+ toCard 文件名引用+存在位(T10 二进制铁则,
12
+ * 永不 base64 内嵌;cropper.js 不引入,沿老家 v2.3.5 手动 4 数字坐标)。
13
+ * 空库一律不抛(场景 1 空 wizard 照开;recent 记 null)。
14
+ *
15
+ * prompt 复刻口径(旧模板 buildPrompt/generatePrompt 逐字结构,新 CLI 形态):
16
+ * 围度/体脂=参数式(老家即无命令段,复制给 AI 后由 AI 调写键);
17
+ * 身材照/GIF=参数+命令段(老家 python 命令译为 calorie-cmd-read 同形;
18
+ * photo.gif 无 photoIds/crops 形参,框选与裁剪落参数段由 AI 承接)。
19
+ * 预填 params 键名与写键同形(MEASURE_CAMEL/CALIPER_FIELDS/photo.add 口径),
20
+ * 未知字段 fail(2)(与 cli/write.ts 同字面「不支持字段: 」,防拼写漂移)。
21
+ */
22
+ import type { DatabaseSync } from 'node:sqlite';
23
+ /** 写键 camel 口径镜像(cli/write.ts MEASURE_CAMEL;测试钉死键集一致)。 */
24
+ export declare const WIZARD_MEASURE_CAMEL: Record<string, string>;
25
+ export declare const WIZARD_MEASURE_LABELS: Record<string, string>;
26
+ export declare const WIZARD_CALIPER_LABELS: Record<string, string>;
27
+ export interface MeasureWizardView {
28
+ date: string;
29
+ note: string | null;
30
+ filled: {
31
+ camel: string;
32
+ snake: string;
33
+ label: string;
34
+ value: number;
35
+ }[];
36
+ filledCount: number;
37
+ recent: {
38
+ date: string;
39
+ values: Record<string, number | null>;
40
+ } | null;
41
+ prompt: string;
42
+ }
43
+ export declare function buildMeasureWizardPrompt(date: string, filled: MeasureWizardView['filled'], note: string | null): string;
44
+ export declare function buildMeasureWizardView(db: DatabaseSync, raw: Record<string, unknown>): MeasureWizardView;
45
+ export interface CompositionWizardView {
46
+ date: string;
47
+ source: string | null;
48
+ sourceLabel: string | null;
49
+ bodyFatPct: number | null;
50
+ age: number | null;
51
+ sex: string | null;
52
+ note: string | null;
53
+ calipers: {
54
+ field: string;
55
+ label: string;
56
+ value: number;
57
+ }[];
58
+ sum7: number | null;
59
+ recent: {
60
+ date: string;
61
+ bodyFatPct: number | null;
62
+ source: string | null;
63
+ } | null;
64
+ prompt: string;
65
+ }
66
+ export declare function buildCompositionWizardPrompt(v: {
67
+ date: string;
68
+ source: string | null;
69
+ bodyFatPct: number | null;
70
+ age: number | null;
71
+ sex: string | null;
72
+ note: string | null;
73
+ calipers: {
74
+ field: string;
75
+ label: string;
76
+ value: number;
77
+ }[];
78
+ }): string;
79
+ export declare function buildCompositionWizardView(db: DatabaseSync, raw: Record<string, unknown>): CompositionWizardView;
80
+ export declare const PHOTO_LOG_TAGS: string[];
81
+ export interface PhotoLogWizardView {
82
+ srcPaths: string[];
83
+ tag: string | null;
84
+ note: string | null;
85
+ prompt: string;
86
+ }
87
+ export declare function buildPhotoLogWizardPrompt(srcPaths: string[], tag: string | null, note: string | null): string;
88
+ export declare function buildPhotoLogWizardView(raw: Record<string, unknown>): PhotoLogWizardView;
89
+ export interface GifPlannerPhoto {
90
+ id: number;
91
+ date: string;
92
+ tagList: string[];
93
+ photoPath: string;
94
+ fileExists: boolean | null;
95
+ selected: boolean;
96
+ crop: [number, number, number, number] | null;
97
+ }
98
+ export interface GifPlannerView {
99
+ tag: string | null;
100
+ photos: GifPlannerPhoto[];
101
+ selectedIds: number[];
102
+ missingIds: number[];
103
+ duration: number;
104
+ loop: number;
105
+ width: number;
106
+ height: number;
107
+ watermark: string | null;
108
+ transition: string;
109
+ output: string | null;
110
+ prompt: string;
111
+ }
112
+ export declare function buildGifPlannerPrompt(v: {
113
+ selectedIds: number[];
114
+ crops: Record<string, [number, number, number, number]>;
115
+ duration: number;
116
+ loop: number;
117
+ width: number;
118
+ height: number;
119
+ watermark: string | null;
120
+ transition: string;
121
+ output: string | null;
122
+ tag: string | null;
123
+ }): string;
124
+ export declare function buildGifPlannerView(db: DatabaseSync, raw: Record<string, unknown>, photosDir?: string | null): GifPlannerView;
125
+ //# sourceMappingURL=wizardPort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizardPort.d.ts","sourceRoot":"","sources":["../../src/render/wizardPort.ts"],"names":[],"mappings":"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"}