skill-calorie 0.2.2 → 0.2.4

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 (1300) hide show
  1. package/SKILL.md +477 -123
  2. package/dist/.gen-inputs.json +170 -0
  3. package/dist/analysis/commands.d.ts +62 -0
  4. package/dist/analysis/commands.d.ts.map +1 -0
  5. package/dist/analysis/commands.js +386 -0
  6. package/dist/analysis/commands.js.map +1 -0
  7. package/dist/analysis/contraindications.d.ts.map +1 -1
  8. package/dist/analysis/contraindications.js +16 -12
  9. package/dist/analysis/contraindications.js.map +1 -1
  10. package/dist/analysis/cross.d.ts +3 -0
  11. package/dist/analysis/cross.d.ts.map +1 -1
  12. package/dist/analysis/cross.js +57 -29
  13. package/dist/analysis/cross.js.map +1 -1
  14. package/dist/analysis/dashboard.d.ts.map +1 -1
  15. package/dist/analysis/dashboard.js +3 -2
  16. package/dist/analysis/dashboard.js.map +1 -1
  17. package/dist/analysis/exerciseReview.js +1 -1
  18. package/dist/analysis/exerciseReview.js.map +1 -1
  19. package/dist/analysis/healthPlate.d.ts +21 -0
  20. package/dist/analysis/healthPlate.d.ts.map +1 -0
  21. package/dist/analysis/healthPlate.js +41 -0
  22. package/dist/analysis/healthPlate.js.map +1 -0
  23. package/dist/analysis/historyStore.d.ts +30 -0
  24. package/dist/analysis/historyStore.d.ts.map +1 -0
  25. package/dist/analysis/historyStore.js +32 -0
  26. package/dist/analysis/historyStore.js.map +1 -0
  27. package/dist/analysis/index.d.ts +23 -0
  28. package/dist/analysis/index.d.ts.map +1 -0
  29. package/dist/analysis/index.js +23 -0
  30. package/dist/analysis/index.js.map +1 -0
  31. package/dist/analysis/multiTrend.d.ts +67 -0
  32. package/dist/analysis/multiTrend.d.ts.map +1 -0
  33. package/dist/analysis/multiTrend.js +106 -0
  34. package/dist/analysis/multiTrend.js.map +1 -0
  35. package/dist/analysis/multiTrendPage.d.ts +4 -0
  36. package/dist/analysis/multiTrendPage.d.ts.map +1 -0
  37. package/dist/analysis/multiTrendPage.js +502 -0
  38. package/dist/analysis/multiTrendPage.js.map +1 -0
  39. package/dist/analysis/reportDoc.d.ts +12 -0
  40. package/dist/analysis/reportDoc.d.ts.map +1 -0
  41. package/dist/analysis/reportDoc.js +244 -0
  42. package/dist/analysis/reportDoc.js.map +1 -0
  43. package/dist/analysis/reportDocBmi.d.ts +4 -0
  44. package/dist/analysis/reportDocBmi.d.ts.map +1 -0
  45. package/dist/analysis/reportDocBmi.js +104 -0
  46. package/dist/analysis/reportDocBmi.js.map +1 -0
  47. package/dist/analysis/reportDocParts.d.ts +77 -0
  48. package/dist/analysis/reportDocParts.d.ts.map +1 -0
  49. package/dist/analysis/reportDocParts.js +249 -0
  50. package/dist/analysis/reportDocParts.js.map +1 -0
  51. package/dist/analysis/reportDocScore.d.ts +8 -0
  52. package/dist/analysis/reportDocScore.d.ts.map +1 -0
  53. package/dist/analysis/reportDocScore.js +223 -0
  54. package/dist/analysis/reportDocScore.js.map +1 -0
  55. package/dist/analysis/reportDocScoreSeries.d.ts +3 -0
  56. package/dist/analysis/reportDocScoreSeries.d.ts.map +1 -0
  57. package/dist/analysis/reportDocScoreSeries.js +27 -0
  58. package/dist/analysis/reportDocScoreSeries.js.map +1 -0
  59. package/dist/analysis/reportDocTracked.d.ts +10 -0
  60. package/dist/analysis/reportDocTracked.d.ts.map +1 -0
  61. package/dist/analysis/reportDocTracked.js +195 -0
  62. package/dist/analysis/reportDocTracked.js.map +1 -0
  63. package/dist/analysis/reportPlate.d.ts +163 -0
  64. package/dist/analysis/reportPlate.d.ts.map +1 -0
  65. package/dist/analysis/reportPlate.js +251 -0
  66. package/dist/analysis/reportPlate.js.map +1 -0
  67. package/dist/analysis/routes.d.ts +18 -0
  68. package/dist/analysis/routes.d.ts.map +1 -0
  69. package/dist/analysis/routes.js +178 -0
  70. package/dist/analysis/routes.js.map +1 -0
  71. package/dist/analysis/series.d.ts +31 -6
  72. package/dist/analysis/series.d.ts.map +1 -1
  73. package/dist/analysis/series.js +124 -27
  74. package/dist/analysis/series.js.map +1 -1
  75. package/dist/analysis/simulate.d.ts.map +1 -1
  76. package/dist/analysis/simulate.js +17 -6
  77. package/dist/analysis/simulate.js.map +1 -1
  78. package/dist/analysis/simulate2.d.ts.map +1 -1
  79. package/dist/analysis/simulate2.js +43 -11
  80. package/dist/analysis/simulate2.js.map +1 -1
  81. package/dist/analysis/trend.d.ts +9 -1
  82. package/dist/analysis/trend.d.ts.map +1 -1
  83. package/dist/analysis/trend.js +24 -8
  84. package/dist/analysis/trend.js.map +1 -1
  85. package/dist/analysis/utils.d.ts +50 -1
  86. package/dist/analysis/utils.d.ts.map +1 -1
  87. package/dist/analysis/utils.js +73 -1
  88. package/dist/analysis/utils.js.map +1 -1
  89. package/dist/body/bodyDocs.d.ts +4 -0
  90. package/dist/body/bodyDocs.d.ts.map +1 -0
  91. package/dist/body/bodyDocs.js +284 -0
  92. package/dist/body/bodyDocs.js.map +1 -0
  93. package/dist/body/bodyPlate.d.ts +145 -0
  94. package/dist/body/bodyPlate.d.ts.map +1 -0
  95. package/dist/body/bodyPlate.js +243 -0
  96. package/dist/body/bodyPlate.js.map +1 -0
  97. package/dist/body/bodyReadUi.d.ts +47 -0
  98. package/dist/body/bodyReadUi.d.ts.map +1 -0
  99. package/dist/body/bodyReadUi.js +164 -0
  100. package/dist/body/bodyReadUi.js.map +1 -0
  101. package/dist/body/commands.d.ts +29 -0
  102. package/dist/body/commands.d.ts.map +1 -0
  103. package/dist/body/commands.js +18 -0
  104. package/dist/body/commands.js.map +1 -0
  105. package/dist/body/compare.d.ts +62 -0
  106. package/dist/body/compare.d.ts.map +1 -0
  107. package/dist/body/compare.js +162 -0
  108. package/dist/body/compare.js.map +1 -0
  109. package/dist/body/compareCompositionDoc.d.ts +3 -0
  110. package/dist/body/compareCompositionDoc.d.ts.map +1 -0
  111. package/dist/body/compareCompositionDoc.js +99 -0
  112. package/dist/body/compareCompositionDoc.js.map +1 -0
  113. package/dist/body/compareMeasureDoc.d.ts +3 -0
  114. package/dist/body/compareMeasureDoc.d.ts.map +1 -0
  115. package/dist/body/compareMeasureDoc.js +91 -0
  116. package/dist/body/compareMeasureDoc.js.map +1 -0
  117. package/dist/body/compareUi.d.ts +12 -0
  118. package/dist/body/compareUi.d.ts.map +1 -0
  119. package/dist/body/compareUi.js +27 -0
  120. package/dist/body/compareUi.js.map +1 -0
  121. package/dist/body/index.d.ts +21 -0
  122. package/dist/body/index.d.ts.map +1 -0
  123. package/dist/body/index.js +22 -0
  124. package/dist/body/index.js.map +1 -0
  125. package/dist/body/log.d.ts +29 -0
  126. package/dist/body/log.d.ts.map +1 -0
  127. package/dist/body/log.js +196 -0
  128. package/dist/body/log.js.map +1 -0
  129. package/dist/body/receipt.d.ts +52 -0
  130. package/dist/body/receipt.d.ts.map +1 -0
  131. package/dist/body/receipt.js +248 -0
  132. package/dist/body/receipt.js.map +1 -0
  133. package/dist/body/receiptData.d.ts +46 -0
  134. package/dist/body/receiptData.d.ts.map +1 -0
  135. package/dist/body/receiptData.js +107 -0
  136. package/dist/body/receiptData.js.map +1 -0
  137. package/dist/body/receiptUi.d.ts +9 -0
  138. package/dist/body/receiptUi.d.ts.map +1 -0
  139. package/dist/body/receiptUi.js +75 -0
  140. package/dist/body/receiptUi.js.map +1 -0
  141. package/dist/body/remove.d.ts +21 -0
  142. package/dist/body/remove.d.ts.map +1 -0
  143. package/dist/body/remove.js +78 -0
  144. package/dist/body/remove.js.map +1 -0
  145. package/dist/body/routes.d.ts +10 -0
  146. package/dist/body/routes.d.ts.map +1 -0
  147. package/dist/body/routes.js +20 -0
  148. package/dist/body/routes.js.map +1 -0
  149. package/dist/body/view.d.ts +21 -0
  150. package/dist/body/view.d.ts.map +1 -0
  151. package/dist/body/view.js +50 -0
  152. package/dist/body/view.js.map +1 -0
  153. package/dist/body/wizard.d.ts +14 -0
  154. package/dist/body/wizard.d.ts.map +1 -0
  155. package/dist/body/wizard.js +21 -0
  156. package/dist/body/wizard.js.map +1 -0
  157. package/dist/body/wizardDocs.d.ts +4 -0
  158. package/dist/body/wizardDocs.d.ts.map +1 -0
  159. package/dist/body/wizardDocs.js +260 -0
  160. package/dist/body/wizardDocs.js.map +1 -0
  161. package/dist/body/wizardPlate.d.ts +146 -0
  162. package/dist/body/wizardPlate.d.ts.map +1 -0
  163. package/dist/body/wizardPlate.js +260 -0
  164. package/dist/body/wizardPlate.js.map +1 -0
  165. package/dist/body/wizardPrompt.d.ts +52 -0
  166. package/dist/body/wizardPrompt.d.ts.map +1 -0
  167. package/dist/body/wizardPrompt.js +146 -0
  168. package/dist/body/wizardPrompt.js.map +1 -0
  169. package/dist/body/wizardUi.d.ts +11 -0
  170. package/dist/body/wizardUi.d.ts.map +1 -0
  171. package/dist/body/wizardUi.js +35 -0
  172. package/dist/body/wizardUi.js.map +1 -0
  173. package/dist/cli/cmd_read.d.ts +7 -21
  174. package/dist/cli/cmd_read.d.ts.map +1 -1
  175. package/dist/cli/cmd_read.js +45 -1044
  176. package/dist/cli/cmd_read.js.map +1 -1
  177. package/dist/cli/delivery.d.ts +34 -0
  178. package/dist/cli/delivery.d.ts.map +1 -0
  179. package/dist/cli/delivery.js +223 -0
  180. package/dist/cli/delivery.js.map +1 -0
  181. package/dist/cli/keys.d.ts +305 -163
  182. package/dist/cli/keys.d.ts.map +1 -1
  183. package/dist/cli/keys.js +101 -74
  184. package/dist/cli/keys.js.map +1 -1
  185. package/dist/cli/legacy/index.d.ts +25 -0
  186. package/dist/cli/legacy/index.d.ts.map +1 -0
  187. package/dist/cli/legacy/index.js +37 -0
  188. package/dist/cli/legacy/index.js.map +1 -0
  189. package/dist/cli/legacy/routes/index.d.ts +8 -0
  190. package/dist/cli/legacy/routes/index.d.ts.map +1 -0
  191. package/dist/cli/legacy/routes/index.js +23 -0
  192. package/dist/cli/legacy/routes/index.js.map +1 -0
  193. package/dist/cli/legacy/routes/scene-01.d.ts +12 -0
  194. package/dist/cli/legacy/routes/scene-01.d.ts.map +1 -0
  195. package/dist/cli/legacy/routes/scene-01.js +2 -0
  196. package/dist/cli/legacy/routes/scene-01.js.map +1 -0
  197. package/dist/cli/legacy/routes/scene-02.d.ts +18 -0
  198. package/dist/cli/legacy/routes/scene-02.d.ts.map +1 -0
  199. package/dist/cli/legacy/routes/scene-02.js +2 -0
  200. package/dist/cli/legacy/routes/scene-02.js.map +1 -0
  201. package/dist/cli/legacy/routes/scene-03.d.ts +13 -0
  202. package/dist/cli/legacy/routes/scene-03.d.ts.map +1 -0
  203. package/dist/cli/legacy/routes/scene-03.js +2 -0
  204. package/dist/cli/legacy/routes/scene-03.js.map +1 -0
  205. package/dist/cli/legacy/routes/scene-04.d.ts +10 -0
  206. package/dist/cli/legacy/routes/scene-04.d.ts.map +1 -0
  207. package/dist/cli/legacy/routes/scene-04.js +2 -0
  208. package/dist/cli/legacy/routes/scene-04.js.map +1 -0
  209. package/dist/cli/legacy/routes/scene-05.d.ts +10 -0
  210. package/dist/cli/legacy/routes/scene-05.d.ts.map +1 -0
  211. package/dist/cli/legacy/routes/scene-05.js +2 -0
  212. package/dist/cli/legacy/routes/scene-05.js.map +1 -0
  213. package/dist/cli/legacy/routes/scene-06.d.ts +10 -0
  214. package/dist/cli/legacy/routes/scene-06.d.ts.map +1 -0
  215. package/dist/cli/legacy/routes/scene-06.js +2 -0
  216. package/dist/cli/legacy/routes/scene-06.js.map +1 -0
  217. package/dist/cli/legacy/routes/scene-07.d.ts +10 -0
  218. package/dist/cli/legacy/routes/scene-07.d.ts.map +1 -0
  219. package/dist/cli/legacy/routes/scene-07.js +2 -0
  220. package/dist/cli/legacy/routes/scene-07.js.map +1 -0
  221. package/dist/cli/legacy/routes/scene-08.d.ts +12 -0
  222. package/dist/cli/legacy/routes/scene-08.d.ts.map +1 -0
  223. package/dist/cli/legacy/routes/scene-08.js +2 -0
  224. package/dist/cli/legacy/routes/scene-08.js.map +1 -0
  225. package/dist/cli/legacy/routes/scene-09.d.ts +12 -0
  226. package/dist/cli/legacy/routes/scene-09.d.ts.map +1 -0
  227. package/dist/cli/legacy/routes/scene-09.js +2 -0
  228. package/dist/cli/legacy/routes/scene-09.js.map +1 -0
  229. package/dist/cli/legacy/routes/scene-10.d.ts +10 -0
  230. package/dist/cli/legacy/routes/scene-10.d.ts.map +1 -0
  231. package/dist/cli/legacy/routes/scene-10.js +2 -0
  232. package/dist/cli/legacy/routes/scene-10.js.map +1 -0
  233. package/dist/cli/legacy/scene-01.d.ts +13 -0
  234. package/dist/cli/legacy/scene-01.d.ts.map +1 -0
  235. package/dist/cli/legacy/scene-01.js +2 -0
  236. package/dist/cli/legacy/scene-01.js.map +1 -0
  237. package/dist/cli/legacy/scene-02.d.ts +12 -0
  238. package/dist/cli/legacy/scene-02.d.ts.map +1 -0
  239. package/dist/cli/legacy/scene-02.js +2 -0
  240. package/dist/cli/legacy/scene-02.js.map +1 -0
  241. package/dist/cli/legacy/scene-03.d.ts +14 -0
  242. package/dist/cli/legacy/scene-03.d.ts.map +1 -0
  243. package/dist/cli/legacy/scene-03.js +2 -0
  244. package/dist/cli/legacy/scene-03.js.map +1 -0
  245. package/dist/cli/legacy/scene-04.d.ts +12 -0
  246. package/dist/cli/legacy/scene-04.d.ts.map +1 -0
  247. package/dist/cli/legacy/scene-04.js +2 -0
  248. package/dist/cli/legacy/scene-04.js.map +1 -0
  249. package/dist/cli/legacy/scene-05.d.ts +14 -0
  250. package/dist/cli/legacy/scene-05.d.ts.map +1 -0
  251. package/dist/cli/legacy/scene-05.js +2 -0
  252. package/dist/cli/legacy/scene-05.js.map +1 -0
  253. package/dist/cli/legacy/scene-06.d.ts +15 -0
  254. package/dist/cli/legacy/scene-06.d.ts.map +1 -0
  255. package/dist/cli/legacy/scene-06.js +2 -0
  256. package/dist/cli/legacy/scene-06.js.map +1 -0
  257. package/dist/cli/legacy/scene-07.d.ts +15 -0
  258. package/dist/cli/legacy/scene-07.d.ts.map +1 -0
  259. package/dist/cli/legacy/scene-07.js +2 -0
  260. package/dist/cli/legacy/scene-07.js.map +1 -0
  261. package/dist/cli/legacy/scene-08.d.ts +13 -0
  262. package/dist/cli/legacy/scene-08.d.ts.map +1 -0
  263. package/dist/cli/legacy/scene-08.js +2 -0
  264. package/dist/cli/legacy/scene-08.js.map +1 -0
  265. package/dist/cli/legacy/scene-09.d.ts +13 -0
  266. package/dist/cli/legacy/scene-09.d.ts.map +1 -0
  267. package/dist/cli/legacy/scene-09.js +2 -0
  268. package/dist/cli/legacy/scene-09.js.map +1 -0
  269. package/dist/cli/legacy/scene-10.d.ts +13 -0
  270. package/dist/cli/legacy/scene-10.d.ts.map +1 -0
  271. package/dist/cli/legacy/scene-10.js +2 -0
  272. package/dist/cli/legacy/scene-10.js.map +1 -0
  273. package/dist/cli/legacy/types.d.ts +16 -0
  274. package/dist/cli/legacy/types.d.ts.map +1 -0
  275. package/dist/cli/legacy/types.js +2 -0
  276. package/dist/cli/legacy/types.js.map +1 -0
  277. package/dist/cli/readArgs.d.ts +21 -0
  278. package/dist/cli/readArgs.d.ts.map +1 -0
  279. package/dist/cli/readArgs.js +72 -0
  280. package/dist/cli/readArgs.js.map +1 -0
  281. package/dist/cli/registry.d.ts +12 -0
  282. package/dist/cli/registry.d.ts.map +1 -0
  283. package/dist/cli/registry.js +38 -0
  284. package/dist/cli/registry.js.map +1 -0
  285. package/dist/cli/write.d.ts +17 -15
  286. package/dist/cli/write.d.ts.map +1 -1
  287. package/dist/cli/write.js +38 -902
  288. package/dist/cli/write.js.map +1 -1
  289. package/dist/diet/commands.d.ts +37 -0
  290. package/dist/diet/commands.d.ts.map +1 -0
  291. package/dist/diet/commands.js +44 -0
  292. package/dist/diet/commands.js.map +1 -0
  293. package/dist/diet/dietEngine.d.ts +79 -0
  294. package/dist/diet/dietEngine.d.ts.map +1 -0
  295. package/dist/diet/dietEngine.js +171 -0
  296. package/dist/diet/dietEngine.js.map +1 -0
  297. package/dist/diet/dietUi.d.ts +9 -0
  298. package/dist/diet/dietUi.d.ts.map +1 -0
  299. package/dist/diet/dietUi.js +45 -0
  300. package/dist/diet/dietUi.js.map +1 -0
  301. package/dist/diet/edit.d.ts +22 -0
  302. package/dist/diet/edit.d.ts.map +1 -0
  303. package/dist/diet/edit.js +96 -0
  304. package/dist/diet/edit.js.map +1 -0
  305. package/dist/diet/fieldLabels.d.ts +5 -0
  306. package/dist/diet/fieldLabels.d.ts.map +1 -0
  307. package/dist/diet/fieldLabels.js +44 -0
  308. package/dist/diet/fieldLabels.js.map +1 -0
  309. package/dist/diet/index.d.ts +26 -0
  310. package/dist/diet/index.d.ts.map +1 -0
  311. package/dist/diet/index.js +22 -0
  312. package/dist/diet/index.js.map +1 -0
  313. package/dist/diet/library.d.ts +20 -0
  314. package/dist/diet/library.d.ts.map +1 -0
  315. package/dist/diet/library.js +52 -0
  316. package/dist/diet/library.js.map +1 -0
  317. package/dist/diet/libraryDocs.d.ts +7 -0
  318. package/dist/diet/libraryDocs.d.ts.map +1 -0
  319. package/dist/diet/libraryDocs.js +361 -0
  320. package/dist/diet/libraryDocs.js.map +1 -0
  321. package/dist/diet/libraryPlate.d.ts +41 -0
  322. package/dist/diet/libraryPlate.d.ts.map +1 -0
  323. package/dist/diet/libraryPlate.js +57 -0
  324. package/dist/diet/libraryPlate.js.map +1 -0
  325. package/dist/diet/log.d.ts +18 -0
  326. package/dist/diet/log.d.ts.map +1 -0
  327. package/dist/diet/log.js +152 -0
  328. package/dist/diet/log.js.map +1 -0
  329. package/dist/diet/nutrition.d.ts +37 -0
  330. package/dist/diet/nutrition.d.ts.map +1 -0
  331. package/dist/diet/nutrition.js +135 -0
  332. package/dist/diet/nutrition.js.map +1 -0
  333. package/dist/diet/nutritionPort.d.ts +129 -0
  334. package/dist/diet/nutritionPort.d.ts.map +1 -0
  335. package/dist/diet/nutritionPort.js +246 -0
  336. package/dist/diet/nutritionPort.js.map +1 -0
  337. package/dist/diet/nutritionPortDocs.d.ts +106 -0
  338. package/dist/diet/nutritionPortDocs.d.ts.map +1 -0
  339. package/dist/diet/nutritionPortDocs.js +651 -0
  340. package/dist/diet/nutritionPortDocs.js.map +1 -0
  341. package/dist/diet/precheck.d.ts +7 -0
  342. package/dist/diet/precheck.d.ts.map +1 -0
  343. package/dist/diet/precheck.js +194 -0
  344. package/dist/diet/precheck.js.map +1 -0
  345. package/dist/diet/precheckLabel.d.ts +4 -0
  346. package/dist/diet/precheckLabel.d.ts.map +1 -0
  347. package/dist/diet/precheckLabel.js +191 -0
  348. package/dist/diet/precheckLabel.js.map +1 -0
  349. package/dist/diet/precheckParts.d.ts +49 -0
  350. package/dist/diet/precheckParts.d.ts.map +1 -0
  351. package/dist/diet/precheckParts.js +69 -0
  352. package/dist/diet/precheckParts.js.map +1 -0
  353. package/dist/diet/precheckPort.d.ts +82 -0
  354. package/dist/diet/precheckPort.d.ts.map +1 -0
  355. package/dist/diet/precheckPort.js +176 -0
  356. package/dist/diet/precheckPort.js.map +1 -0
  357. package/dist/diet/productImport.d.ts +28 -0
  358. package/dist/diet/productImport.d.ts.map +1 -0
  359. package/dist/diet/productImport.js +152 -0
  360. package/dist/diet/productImport.js.map +1 -0
  361. package/dist/diet/productStore.d.ts +62 -0
  362. package/dist/diet/productStore.d.ts.map +1 -0
  363. package/dist/diet/productStore.js +73 -0
  364. package/dist/diet/productStore.js.map +1 -0
  365. package/dist/diet/products.d.ts +15 -0
  366. package/dist/diet/products.d.ts.map +1 -0
  367. package/dist/diet/products.js +87 -0
  368. package/dist/diet/products.js.map +1 -0
  369. package/dist/diet/ranking.d.ts +18 -0
  370. package/dist/diet/ranking.d.ts.map +1 -0
  371. package/dist/diet/ranking.js +23 -0
  372. package/dist/diet/ranking.js.map +1 -0
  373. package/dist/diet/rankingDocs.d.ts +13 -0
  374. package/dist/diet/rankingDocs.d.ts.map +1 -0
  375. package/dist/diet/rankingDocs.js +341 -0
  376. package/dist/diet/rankingDocs.js.map +1 -0
  377. package/dist/diet/rankingPlate.d.ts +42 -0
  378. package/dist/diet/rankingPlate.d.ts.map +1 -0
  379. package/dist/diet/rankingPlate.js +96 -0
  380. package/dist/diet/rankingPlate.js.map +1 -0
  381. package/dist/diet/receipt.d.ts +34 -0
  382. package/dist/diet/receipt.d.ts.map +1 -0
  383. package/dist/diet/receipt.js +371 -0
  384. package/dist/diet/receipt.js.map +1 -0
  385. package/dist/diet/review.d.ts +36 -0
  386. package/dist/diet/review.d.ts.map +1 -0
  387. package/dist/diet/review.js +152 -0
  388. package/dist/diet/review.js.map +1 -0
  389. package/dist/diet/reviewDocs.d.ts +72 -0
  390. package/dist/diet/reviewDocs.d.ts.map +1 -0
  391. package/dist/diet/reviewDocs.js +312 -0
  392. package/dist/diet/reviewDocs.js.map +1 -0
  393. package/dist/diet/routes.d.ts +12 -0
  394. package/dist/diet/routes.d.ts.map +1 -0
  395. package/dist/diet/routes.js +108 -0
  396. package/dist/diet/routes.js.map +1 -0
  397. package/dist/diet/sourceStatsDocs.d.ts +3 -0
  398. package/dist/diet/sourceStatsDocs.d.ts.map +1 -0
  399. package/dist/diet/sourceStatsDocs.js +115 -0
  400. package/dist/diet/sourceStatsDocs.js.map +1 -0
  401. package/dist/diet/today.d.ts +14 -0
  402. package/dist/diet/today.d.ts.map +1 -0
  403. package/dist/diet/today.js +87 -0
  404. package/dist/diet/today.js.map +1 -0
  405. package/dist/diet/todayDocs.d.ts +53 -0
  406. package/dist/diet/todayDocs.d.ts.map +1 -0
  407. package/dist/diet/todayDocs.js +238 -0
  408. package/dist/diet/todayDocs.js.map +1 -0
  409. package/dist/exercise/cardio.d.ts +11 -0
  410. package/dist/exercise/cardio.d.ts.map +1 -0
  411. package/dist/exercise/cardio.js +14 -0
  412. package/dist/exercise/cardio.js.map +1 -0
  413. package/dist/exercise/categoryColors.d.ts +23 -0
  414. package/dist/exercise/categoryColors.d.ts.map +1 -0
  415. package/dist/exercise/categoryColors.js +28 -0
  416. package/dist/exercise/categoryColors.js.map +1 -0
  417. package/dist/exercise/commands.d.ts +20 -0
  418. package/dist/exercise/commands.d.ts.map +1 -0
  419. package/dist/exercise/commands.js +22 -0
  420. package/dist/exercise/commands.js.map +1 -0
  421. package/dist/exercise/distribution.d.ts +11 -0
  422. package/dist/exercise/distribution.d.ts.map +1 -0
  423. package/dist/exercise/distribution.js +14 -0
  424. package/dist/exercise/distribution.js.map +1 -0
  425. package/dist/exercise/edit.d.ts +22 -0
  426. package/dist/exercise/edit.d.ts.map +1 -0
  427. package/dist/exercise/edit.js +148 -0
  428. package/dist/exercise/edit.js.map +1 -0
  429. package/dist/exercise/exerciseStore.d.ts +87 -0
  430. package/dist/exercise/exerciseStore.d.ts.map +1 -0
  431. package/dist/exercise/exerciseStore.js +287 -0
  432. package/dist/exercise/exerciseStore.js.map +1 -0
  433. package/dist/exercise/fieldLabels.d.ts +5 -0
  434. package/dist/exercise/fieldLabels.d.ts.map +1 -0
  435. package/dist/exercise/fieldLabels.js +34 -0
  436. package/dist/exercise/fieldLabels.js.map +1 -0
  437. package/dist/exercise/goal.d.ts +16 -0
  438. package/dist/exercise/goal.d.ts.map +1 -0
  439. package/dist/exercise/goal.js +46 -0
  440. package/dist/exercise/goal.js.map +1 -0
  441. package/dist/exercise/index.d.ts +22 -0
  442. package/dist/exercise/index.d.ts.map +1 -0
  443. package/dist/exercise/index.js +22 -0
  444. package/dist/exercise/index.js.map +1 -0
  445. package/dist/exercise/log.d.ts +19 -0
  446. package/dist/exercise/log.d.ts.map +1 -0
  447. package/dist/exercise/log.js +102 -0
  448. package/dist/exercise/log.js.map +1 -0
  449. package/dist/exercise/precheck.d.ts +19 -0
  450. package/dist/exercise/precheck.d.ts.map +1 -0
  451. package/dist/exercise/precheck.js +127 -0
  452. package/dist/exercise/precheck.js.map +1 -0
  453. package/dist/exercise/recap.d.ts +11 -0
  454. package/dist/exercise/recap.d.ts.map +1 -0
  455. package/dist/exercise/recap.js +14 -0
  456. package/dist/exercise/recap.js.map +1 -0
  457. package/dist/exercise/receipt.d.ts +43 -0
  458. package/dist/exercise/receipt.d.ts.map +1 -0
  459. package/dist/exercise/receipt.js +401 -0
  460. package/dist/exercise/receipt.js.map +1 -0
  461. package/dist/exercise/records.d.ts +60 -0
  462. package/dist/exercise/records.d.ts.map +1 -0
  463. package/dist/exercise/records.js +317 -0
  464. package/dist/exercise/records.js.map +1 -0
  465. package/dist/exercise/routes.d.ts +21 -0
  466. package/dist/exercise/routes.d.ts.map +1 -0
  467. package/dist/exercise/routes.js +38 -0
  468. package/dist/exercise/routes.js.map +1 -0
  469. package/dist/exercise/sportUi.d.ts +77 -0
  470. package/dist/exercise/sportUi.d.ts.map +1 -0
  471. package/dist/exercise/sportUi.js +268 -0
  472. package/dist/exercise/sportUi.js.map +1 -0
  473. package/dist/exercise/strength.d.ts +11 -0
  474. package/dist/exercise/strength.d.ts.map +1 -0
  475. package/dist/exercise/strength.js +14 -0
  476. package/dist/exercise/strength.js.map +1 -0
  477. package/dist/exercise/trend.d.ts +11 -0
  478. package/dist/exercise/trend.d.ts.map +1 -0
  479. package/dist/exercise/trend.js +14 -0
  480. package/dist/exercise/trend.js.map +1 -0
  481. package/dist/fetch/audit.d.ts +2 -0
  482. package/dist/fetch/audit.d.ts.map +1 -1
  483. package/dist/fetch/audit.js +11 -10
  484. package/dist/fetch/audit.js.map +1 -1
  485. package/dist/fetch/batch.js +1 -1
  486. package/dist/fetch/batch.js.map +1 -1
  487. package/dist/fetch/body.d.ts +104 -1
  488. package/dist/fetch/body.d.ts.map +1 -1
  489. package/dist/fetch/body.js +200 -31
  490. package/dist/fetch/body.js.map +1 -1
  491. package/dist/fetch/cli.js +11 -5
  492. package/dist/fetch/cli.js.map +1 -1
  493. package/dist/fetch/exercise.d.ts.map +1 -1
  494. package/dist/fetch/exercise.js +7 -3
  495. package/dist/fetch/exercise.js.map +1 -1
  496. package/dist/fetch/index.d.ts +5 -7
  497. package/dist/fetch/index.d.ts.map +1 -1
  498. package/dist/fetch/index.js +7 -6
  499. package/dist/fetch/index.js.map +1 -1
  500. package/dist/fetch/nutritionGoal.d.ts.map +1 -1
  501. package/dist/fetch/nutritionGoal.js +15 -4
  502. package/dist/fetch/nutritionGoal.js.map +1 -1
  503. package/dist/fetch/profile.d.ts +24 -3
  504. package/dist/fetch/profile.d.ts.map +1 -1
  505. package/dist/fetch/profile.js +43 -14
  506. package/dist/fetch/profile.js.map +1 -1
  507. package/dist/fetch/xunji-catalog.d.ts +5 -0
  508. package/dist/fetch/xunji-catalog.d.ts.map +1 -1
  509. package/dist/fetch/xunji-catalog.js +22 -1
  510. package/dist/fetch/xunji-catalog.js.map +1 -1
  511. package/dist/goal/commands.d.ts +31 -0
  512. package/dist/goal/commands.d.ts.map +1 -0
  513. package/dist/goal/commands.js +20 -0
  514. package/dist/goal/commands.js.map +1 -0
  515. package/dist/goal/goalExtraPlate.d.ts +45 -0
  516. package/dist/goal/goalExtraPlate.d.ts.map +1 -0
  517. package/dist/goal/goalExtraPlate.js +95 -0
  518. package/dist/goal/goalExtraPlate.js.map +1 -0
  519. package/dist/goal/goalHistory.d.ts +24 -0
  520. package/dist/goal/goalHistory.d.ts.map +1 -0
  521. package/dist/goal/goalHistory.js +51 -0
  522. package/dist/goal/goalHistory.js.map +1 -0
  523. package/dist/goal/goalPlate.d.ts +24 -0
  524. package/dist/goal/goalPlate.d.ts.map +1 -0
  525. package/dist/goal/goalPlate.js +34 -0
  526. package/dist/goal/goalPlate.js.map +1 -0
  527. package/dist/goal/goalPlates.d.ts +66 -0
  528. package/dist/goal/goalPlates.d.ts.map +1 -0
  529. package/dist/goal/goalPlates.js +114 -0
  530. package/dist/goal/goalPlates.js.map +1 -0
  531. package/dist/goal/goalRecommendDoc.d.ts +6 -0
  532. package/dist/goal/goalRecommendDoc.d.ts.map +1 -0
  533. package/dist/goal/goalRecommendDoc.js +107 -0
  534. package/dist/goal/goalRecommendDoc.js.map +1 -0
  535. package/dist/goal/goalStore.d.ts +56 -0
  536. package/dist/goal/goalStore.d.ts.map +1 -0
  537. package/dist/goal/goalStore.js +111 -0
  538. package/dist/goal/goalStore.js.map +1 -0
  539. package/dist/goal/goalWeightDoc.d.ts +7 -0
  540. package/dist/goal/goalWeightDoc.d.ts.map +1 -0
  541. package/dist/goal/goalWeightDoc.js +107 -0
  542. package/dist/goal/goalWeightDoc.js.map +1 -0
  543. package/dist/goal/index.d.ts +17 -0
  544. package/dist/goal/index.d.ts.map +1 -0
  545. package/dist/goal/index.js +21 -0
  546. package/dist/goal/index.js.map +1 -0
  547. package/dist/goal/nutritionGoal.d.ts +115 -0
  548. package/dist/goal/nutritionGoal.d.ts.map +1 -0
  549. package/dist/goal/nutritionGoal.js +165 -0
  550. package/dist/goal/nutritionGoal.js.map +1 -0
  551. package/dist/goal/precheck.d.ts +14 -0
  552. package/dist/goal/precheck.d.ts.map +1 -0
  553. package/dist/goal/precheck.js +213 -0
  554. package/dist/goal/precheck.js.map +1 -0
  555. package/dist/goal/read.d.ts +53 -0
  556. package/dist/goal/read.d.ts.map +1 -0
  557. package/dist/goal/read.js +154 -0
  558. package/dist/goal/read.js.map +1 -0
  559. package/dist/goal/receipt.d.ts +38 -0
  560. package/dist/goal/receipt.d.ts.map +1 -0
  561. package/dist/goal/receipt.js +290 -0
  562. package/dist/goal/receipt.js.map +1 -0
  563. package/dist/goal/resultDocs.d.ts +23 -0
  564. package/dist/goal/resultDocs.d.ts.map +1 -0
  565. package/dist/goal/resultDocs.js +279 -0
  566. package/dist/goal/resultDocs.js.map +1 -0
  567. package/dist/goal/routes.d.ts +12 -0
  568. package/dist/goal/routes.d.ts.map +1 -0
  569. package/dist/goal/routes.js +29 -0
  570. package/dist/goal/routes.js.map +1 -0
  571. package/dist/goal/set.d.ts +97 -0
  572. package/dist/goal/set.d.ts.map +1 -0
  573. package/dist/goal/set.js +103 -0
  574. package/dist/goal/set.js.map +1 -0
  575. package/dist/goal/write.d.ts +30 -0
  576. package/dist/goal/write.d.ts.map +1 -0
  577. package/dist/goal/write.js +102 -0
  578. package/dist/goal/write.js.map +1 -0
  579. package/dist/help-missing.json +35 -0
  580. package/dist/home/commands.d.ts +11 -0
  581. package/dist/home/commands.d.ts.map +1 -0
  582. package/dist/home/commands.js +8 -0
  583. package/dist/home/commands.js.map +1 -0
  584. package/dist/home/exercise.d.ts +27 -0
  585. package/dist/home/exercise.d.ts.map +1 -0
  586. package/dist/home/exercise.js +60 -0
  587. package/dist/home/exercise.js.map +1 -0
  588. package/dist/home/goalProgressDocs.d.ts +27 -0
  589. package/dist/home/goalProgressDocs.d.ts.map +1 -0
  590. package/dist/home/goalProgressDocs.js +363 -0
  591. package/dist/home/goalProgressDocs.js.map +1 -0
  592. package/dist/home/home.d.ts +38 -0
  593. package/dist/home/home.d.ts.map +1 -0
  594. package/dist/home/home.js +78 -0
  595. package/dist/home/home.js.map +1 -0
  596. package/dist/home/homeDocs.d.ts +8 -0
  597. package/dist/home/homeDocs.d.ts.map +1 -0
  598. package/dist/home/homeDocs.js +307 -0
  599. package/dist/home/homeDocs.js.map +1 -0
  600. package/dist/home/homeViewParts.d.ts +42 -0
  601. package/dist/home/homeViewParts.d.ts.map +1 -0
  602. package/dist/home/homeViewParts.js +316 -0
  603. package/dist/home/homeViewParts.js.map +1 -0
  604. package/dist/home/index.d.ts +14 -0
  605. package/dist/home/index.d.ts.map +1 -0
  606. package/dist/home/index.js +13 -0
  607. package/dist/home/index.js.map +1 -0
  608. package/dist/home/routes.d.ts +10 -0
  609. package/dist/home/routes.d.ts.map +1 -0
  610. package/dist/home/routes.js +47 -0
  611. package/dist/home/routes.js.map +1 -0
  612. package/dist/home/today.d.ts +50 -0
  613. package/dist/home/today.d.ts.map +1 -0
  614. package/dist/home/today.js +255 -0
  615. package/dist/home/today.js.map +1 -0
  616. package/dist/index.d.ts +2 -0
  617. package/dist/index.d.ts.map +1 -1
  618. package/dist/index.js +3 -0
  619. package/dist/index.js.map +1 -1
  620. package/dist/migrate/migrate.js +1 -1
  621. package/dist/output.d.ts +31 -16
  622. package/dist/output.d.ts.map +1 -1
  623. package/dist/output.js +118 -143
  624. package/dist/output.js.map +1 -1
  625. package/dist/photo/commands.d.ts +55 -0
  626. package/dist/photo/commands.d.ts.map +1 -0
  627. package/dist/photo/commands.js +25 -0
  628. package/dist/photo/commands.js.map +1 -0
  629. package/dist/photo/compare.d.ts +24 -0
  630. package/dist/photo/compare.d.ts.map +1 -0
  631. package/dist/photo/compare.js +48 -0
  632. package/dist/photo/compare.js.map +1 -0
  633. package/dist/photo/compareDoc.d.ts +5 -0
  634. package/dist/photo/compareDoc.d.ts.map +1 -0
  635. package/dist/photo/compareDoc.js +221 -0
  636. package/dist/photo/compareDoc.js.map +1 -0
  637. package/dist/photo/dir.d.ts +5 -0
  638. package/dist/photo/dir.d.ts.map +1 -0
  639. package/dist/photo/dir.js +22 -0
  640. package/dist/photo/dir.js.map +1 -0
  641. package/dist/photo/gallery.d.ts +16 -0
  642. package/dist/photo/gallery.d.ts.map +1 -0
  643. package/dist/photo/gallery.js +45 -0
  644. package/dist/photo/gallery.js.map +1 -0
  645. package/dist/photo/galleryDoc.d.ts +12 -0
  646. package/dist/photo/galleryDoc.d.ts.map +1 -0
  647. package/dist/photo/galleryDoc.js +291 -0
  648. package/dist/photo/galleryDoc.js.map +1 -0
  649. package/dist/photo/gif.d.ts +28 -0
  650. package/dist/photo/gif.d.ts.map +1 -0
  651. package/dist/photo/gif.js +281 -0
  652. package/dist/photo/gif.js.map +1 -0
  653. package/dist/photo/gifDoc.d.ts +52 -0
  654. package/dist/photo/gifDoc.d.ts.map +1 -0
  655. package/dist/photo/gifDoc.js +311 -0
  656. package/dist/photo/gifDoc.js.map +1 -0
  657. package/dist/photo/help.d.ts +4 -0
  658. package/dist/photo/help.d.ts.map +1 -0
  659. package/dist/photo/help.js +87 -0
  660. package/dist/photo/help.js.map +1 -0
  661. package/dist/photo/helpCenter.d.ts +137 -0
  662. package/dist/photo/helpCenter.d.ts.map +1 -0
  663. package/dist/photo/helpCenter.js +475 -0
  664. package/dist/photo/helpCenter.js.map +1 -0
  665. package/dist/photo/helpDoc.d.ts +5 -0
  666. package/dist/photo/helpDoc.d.ts.map +1 -0
  667. package/dist/photo/helpDoc.js +205 -0
  668. package/dist/photo/helpDoc.js.map +1 -0
  669. package/dist/photo/helpDocContent.d.ts +77 -0
  670. package/dist/photo/helpDocContent.d.ts.map +1 -0
  671. package/dist/photo/helpDocContent.js +120 -0
  672. package/dist/photo/helpDocContent.js.map +1 -0
  673. package/dist/photo/helpDocCss.d.ts +5 -0
  674. package/dist/photo/helpDocCss.d.ts.map +1 -0
  675. package/dist/photo/helpDocCss.js +119 -0
  676. package/dist/photo/helpDocCss.js.map +1 -0
  677. package/dist/photo/helpFile.d.ts +26 -0
  678. package/dist/photo/helpFile.d.ts.map +1 -0
  679. package/dist/photo/helpFile.js +90 -0
  680. package/dist/photo/helpFile.js.map +1 -0
  681. package/dist/photo/helpLookup.d.ts +18 -0
  682. package/dist/photo/helpLookup.d.ts.map +1 -0
  683. package/dist/photo/helpLookup.js +58 -0
  684. package/dist/photo/helpLookup.js.map +1 -0
  685. package/dist/photo/helpPaths.d.ts +22 -0
  686. package/dist/photo/helpPaths.d.ts.map +1 -0
  687. package/dist/photo/helpPaths.js +22 -0
  688. package/dist/photo/helpPaths.js.map +1 -0
  689. package/dist/photo/index.d.ts +17 -0
  690. package/dist/photo/index.d.ts.map +1 -0
  691. package/dist/photo/index.js +21 -0
  692. package/dist/photo/index.js.map +1 -0
  693. package/dist/photo/manage.d.ts +13 -0
  694. package/dist/photo/manage.d.ts.map +1 -0
  695. package/dist/photo/manage.js +64 -0
  696. package/dist/photo/manage.js.map +1 -0
  697. package/dist/photo/photo.d.ts +118 -0
  698. package/dist/photo/photo.d.ts.map +1 -0
  699. package/dist/photo/photo.js +279 -0
  700. package/dist/photo/photo.js.map +1 -0
  701. package/dist/photo/photoThumb.d.ts +38 -0
  702. package/dist/photo/photoThumb.d.ts.map +1 -0
  703. package/dist/photo/photoThumb.js +83 -0
  704. package/dist/photo/photoThumb.js.map +1 -0
  705. package/dist/photo/photoUi.d.ts +39 -0
  706. package/dist/photo/photoUi.d.ts.map +1 -0
  707. package/dist/photo/photoUi.js +233 -0
  708. package/dist/photo/photoUi.js.map +1 -0
  709. package/dist/photo/photos.d.ts +76 -0
  710. package/dist/photo/photos.d.ts.map +1 -0
  711. package/dist/photo/photos.js +193 -0
  712. package/dist/photo/photos.js.map +1 -0
  713. package/dist/photo/picker.d.ts +41 -0
  714. package/dist/photo/picker.d.ts.map +1 -0
  715. package/dist/photo/picker.js +132 -0
  716. package/dist/photo/picker.js.map +1 -0
  717. package/dist/photo/pickerDoc.d.ts +12 -0
  718. package/dist/photo/pickerDoc.d.ts.map +1 -0
  719. package/dist/photo/pickerDoc.js +231 -0
  720. package/dist/photo/pickerDoc.js.map +1 -0
  721. package/dist/photo/receipt.d.ts +23 -0
  722. package/dist/photo/receipt.d.ts.map +1 -0
  723. package/dist/photo/receipt.js +331 -0
  724. package/dist/photo/receipt.js.map +1 -0
  725. package/dist/photo/receiptUi.d.ts +42 -0
  726. package/dist/photo/receiptUi.d.ts.map +1 -0
  727. package/dist/photo/receiptUi.js +147 -0
  728. package/dist/photo/receiptUi.js.map +1 -0
  729. package/dist/photo/routes.d.ts +10 -0
  730. package/dist/photo/routes.d.ts.map +1 -0
  731. package/dist/photo/routes.js +29 -0
  732. package/dist/photo/routes.js.map +1 -0
  733. package/dist/photo/store.d.ts +10 -0
  734. package/dist/photo/store.d.ts.map +1 -0
  735. package/dist/photo/store.js +44 -0
  736. package/dist/photo/store.js.map +1 -0
  737. package/dist/photo/viewerDoc.d.ts +5 -0
  738. package/dist/photo/viewerDoc.d.ts.map +1 -0
  739. package/dist/photo/viewerDoc.js +255 -0
  740. package/dist/photo/viewerDoc.js.map +1 -0
  741. package/dist/photo/wizard.d.ts +15 -0
  742. package/dist/photo/wizard.d.ts.map +1 -0
  743. package/dist/photo/wizard.js +25 -0
  744. package/dist/photo/wizard.js.map +1 -0
  745. package/dist/photo/wizardUi.d.ts +24 -0
  746. package/dist/photo/wizardUi.d.ts.map +1 -0
  747. package/dist/photo/wizardUi.js +101 -0
  748. package/dist/photo/wizardUi.js.map +1 -0
  749. package/dist/profile/commands.d.ts +28 -0
  750. package/dist/profile/commands.d.ts.map +1 -0
  751. package/dist/profile/commands.js +10 -0
  752. package/dist/profile/commands.js.map +1 -0
  753. package/dist/profile/index.d.ts +23 -0
  754. package/dist/profile/index.d.ts.map +1 -0
  755. package/dist/profile/index.js +22 -0
  756. package/dist/profile/index.js.map +1 -0
  757. package/dist/profile/labels.d.ts +10 -0
  758. package/dist/profile/labels.d.ts.map +1 -0
  759. package/dist/profile/labels.js +52 -0
  760. package/dist/profile/labels.js.map +1 -0
  761. package/dist/profile/read.d.ts +13 -0
  762. package/dist/profile/read.d.ts.map +1 -0
  763. package/dist/profile/read.js +24 -0
  764. package/dist/profile/read.js.map +1 -0
  765. package/dist/profile/receipt.d.ts +10 -0
  766. package/dist/profile/receipt.d.ts.map +1 -0
  767. package/dist/profile/receipt.js +19 -0
  768. package/dist/profile/receipt.js.map +1 -0
  769. package/dist/profile/routes.d.ts +8 -0
  770. package/dist/profile/routes.d.ts.map +1 -0
  771. package/dist/profile/routes.js +9 -0
  772. package/dist/profile/routes.js.map +1 -0
  773. package/dist/profile/setup.d.ts +67 -0
  774. package/dist/profile/setup.d.ts.map +1 -0
  775. package/dist/profile/setup.js +396 -0
  776. package/dist/profile/setup.js.map +1 -0
  777. package/dist/profile/update.d.ts +5 -0
  778. package/dist/profile/update.d.ts.map +1 -0
  779. package/dist/profile/update.js +85 -0
  780. package/dist/profile/update.js.map +1 -0
  781. package/dist/profile/view.d.ts +64 -0
  782. package/dist/profile/view.d.ts.map +1 -0
  783. package/dist/profile/view.js +204 -0
  784. package/dist/profile/view.js.map +1 -0
  785. package/dist/profile/write.d.ts +16 -0
  786. package/dist/profile/write.d.ts.map +1 -0
  787. package/dist/profile/write.js +75 -0
  788. package/dist/profile/write.js.map +1 -0
  789. package/dist/render/analysisPlate.d.ts +1 -1
  790. package/dist/render/analysisPlate.d.ts.map +1 -1
  791. package/dist/render/analysisPlate.js +1 -1
  792. package/dist/render/analysisPlate.js.map +1 -1
  793. package/dist/render/dietDocs.d.ts +19 -19
  794. package/dist/render/dietDocs.d.ts.map +1 -1
  795. package/dist/render/dietDocs.js +173 -435
  796. package/dist/render/dietDocs.js.map +1 -1
  797. package/dist/render/exercisePort.d.ts +3 -1
  798. package/dist/render/exercisePort.d.ts.map +1 -1
  799. package/dist/render/exercisePort.js +4 -3
  800. package/dist/render/exercisePort.js.map +1 -1
  801. package/dist/render/goalExtra.d.ts.map +1 -1
  802. package/dist/render/goalExtra.js +2 -1
  803. package/dist/render/goalExtra.js.map +1 -1
  804. package/dist/render/goalPlate.d.ts +2 -2
  805. package/dist/render/goalPlate.d.ts.map +1 -1
  806. package/dist/render/goalPlate.js +3 -3
  807. package/dist/render/goalPlate.js.map +1 -1
  808. package/dist/render/helpCenter.d.ts.map +1 -1
  809. package/dist/render/helpCenter.js +4 -2
  810. package/dist/render/helpCenter.js.map +1 -1
  811. package/dist/render/helpFile.d.ts +26 -0
  812. package/dist/render/helpFile.d.ts.map +1 -0
  813. package/dist/render/helpFile.js +60 -0
  814. package/dist/render/helpFile.js.map +1 -0
  815. package/dist/render/helpPaths.d.ts +22 -0
  816. package/dist/render/helpPaths.d.ts.map +1 -0
  817. package/dist/render/helpPaths.js +22 -0
  818. package/dist/render/helpPaths.js.map +1 -0
  819. package/dist/render/helpShell.d.ts +16 -0
  820. package/dist/render/helpShell.d.ts.map +1 -0
  821. package/dist/render/helpShell.js +27 -0
  822. package/dist/render/helpShell.js.map +1 -0
  823. package/dist/render/html.d.ts +37 -21
  824. package/dist/render/html.d.ts.map +1 -1
  825. package/dist/render/html.js +37 -45
  826. package/dist/render/html.js.map +1 -1
  827. package/dist/render/index.d.ts +37 -33
  828. package/dist/render/index.d.ts.map +1 -1
  829. package/dist/render/index.js +32 -18
  830. package/dist/render/index.js.map +1 -1
  831. package/dist/render/insightPlate.d.ts +17 -0
  832. package/dist/render/insightPlate.d.ts.map +1 -1
  833. package/dist/render/insightPlate.js +109 -1
  834. package/dist/render/insightPlate.js.map +1 -1
  835. package/dist/render/nutritionPortDocs.d.ts.map +1 -1
  836. package/dist/render/nutritionPortDocs.js +41 -48
  837. package/dist/render/nutritionPortDocs.js.map +1 -1
  838. package/dist/render/pageChromeCss.d.ts +24 -0
  839. package/dist/render/pageChromeCss.d.ts.map +1 -0
  840. package/dist/render/pageChromeCss.js +45 -0
  841. package/dist/render/pageChromeCss.js.map +1 -0
  842. package/dist/render/planCopyBlock.d.ts +32 -0
  843. package/dist/render/planCopyBlock.d.ts.map +1 -0
  844. package/dist/render/planCopyBlock.js +34 -0
  845. package/dist/render/planCopyBlock.js.map +1 -0
  846. package/dist/render/planEditor.d.ts +94 -0
  847. package/dist/render/planEditor.d.ts.map +1 -0
  848. package/dist/render/planEditor.js +38 -0
  849. package/dist/render/planEditor.js.map +1 -0
  850. package/dist/render/planEditorCss.d.ts +13 -0
  851. package/dist/render/planEditorCss.d.ts.map +1 -0
  852. package/dist/render/planEditorCss.js +140 -0
  853. package/dist/render/planEditorCss.js.map +1 -0
  854. package/dist/render/planEditorDocs.d.ts +7 -0
  855. package/dist/render/planEditorDocs.d.ts.map +1 -0
  856. package/dist/render/planEditorDocs.js +56 -0
  857. package/dist/render/planEditorDocs.js.map +1 -0
  858. package/dist/render/planEditorPort.d.ts +45 -0
  859. package/dist/render/planEditorPort.d.ts.map +1 -0
  860. package/dist/render/planEditorPort.js +217 -0
  861. package/dist/render/planEditorPort.js.map +1 -0
  862. package/dist/render/planEditorRuntime.d.ts +15 -0
  863. package/dist/render/planEditorRuntime.d.ts.map +1 -0
  864. package/dist/render/planEditorRuntime.js +427 -0
  865. package/dist/render/planEditorRuntime.js.map +1 -0
  866. package/dist/render/planPlate.d.ts +84 -4
  867. package/dist/render/planPlate.d.ts.map +1 -1
  868. package/dist/render/planPlate.js +155 -7
  869. package/dist/render/planPlate.js.map +1 -1
  870. package/dist/render/planWizardCss.d.ts +21 -0
  871. package/dist/render/planWizardCss.d.ts.map +1 -0
  872. package/dist/render/planWizardCss.js +121 -0
  873. package/dist/render/planWizardCss.js.map +1 -0
  874. package/dist/render/planWizardDocs.d.ts +8 -0
  875. package/dist/render/planWizardDocs.d.ts.map +1 -0
  876. package/dist/render/planWizardDocs.js +151 -0
  877. package/dist/render/planWizardDocs.js.map +1 -0
  878. package/dist/render/receipt.d.ts +4 -0
  879. package/dist/render/receipt.d.ts.map +1 -1
  880. package/dist/render/receipt.js +4 -1
  881. package/dist/render/receipt.js.map +1 -1
  882. package/dist/render/reviewDocs.d.ts +3 -0
  883. package/dist/render/reviewDocs.d.ts.map +1 -0
  884. package/dist/render/reviewDocs.js +222 -0
  885. package/dist/render/reviewDocs.js.map +1 -0
  886. package/dist/render/reviewDocsCss.d.ts +5 -0
  887. package/dist/render/reviewDocsCss.d.ts.map +1 -0
  888. package/dist/render/reviewDocsCss.js +128 -0
  889. package/dist/render/reviewDocsCss.js.map +1 -0
  890. package/dist/render/sportDocs.d.ts +17 -12
  891. package/dist/render/sportDocs.d.ts.map +1 -1
  892. package/dist/render/sportDocs.js +370 -497
  893. package/dist/render/sportDocs.js.map +1 -1
  894. package/dist/render/sportPortDocs.d.ts +3 -2
  895. package/dist/render/sportPortDocs.d.ts.map +1 -1
  896. package/dist/render/sportPortDocs.js +825 -397
  897. package/dist/render/sportPortDocs.js.map +1 -1
  898. package/dist/render/trendDocs.d.ts +16 -6
  899. package/dist/render/trendDocs.d.ts.map +1 -1
  900. package/dist/render/trendDocs.js +310 -262
  901. package/dist/render/trendDocs.js.map +1 -1
  902. package/dist/render/trendMiscPort.d.ts +9 -24
  903. package/dist/render/trendMiscPort.d.ts.map +1 -1
  904. package/dist/render/trendMiscPort.js +7 -30
  905. package/dist/render/trendMiscPort.js.map +1 -1
  906. package/dist/render/trendMiscPortDocs.d.ts +1 -2
  907. package/dist/render/trendMiscPortDocs.d.ts.map +1 -1
  908. package/dist/render/trendMiscPortDocs.js +303 -133
  909. package/dist/render/trendMiscPortDocs.js.map +1 -1
  910. package/dist/render/trendPredictDocs.d.ts +16 -0
  911. package/dist/render/trendPredictDocs.d.ts.map +1 -0
  912. package/dist/render/trendPredictDocs.js +1131 -0
  913. package/dist/render/trendPredictDocs.js.map +1 -0
  914. package/dist/render/wizardPort.d.ts +9 -62
  915. package/dist/render/wizardPort.d.ts.map +1 -1
  916. package/dist/render/wizardPort.js +20 -180
  917. package/dist/render/wizardPort.js.map +1 -1
  918. package/dist/render/wizardPortDocs.d.ts +5 -5
  919. package/dist/render/wizardPortDocs.d.ts.map +1 -1
  920. package/dist/render/wizardPortDocs.js +282 -234
  921. package/dist/render/wizardPortDocs.js.map +1 -1
  922. package/dist/render/workoutMovementTable.d.ts +10 -0
  923. package/dist/render/workoutMovementTable.d.ts.map +1 -0
  924. package/dist/render/workoutMovementTable.js +153 -0
  925. package/dist/render/workoutMovementTable.js.map +1 -0
  926. package/dist/render/workoutPlanCss.d.ts +15 -0
  927. package/dist/render/workoutPlanCss.d.ts.map +1 -0
  928. package/dist/render/workoutPlanCss.js +217 -0
  929. package/dist/render/workoutPlanCss.js.map +1 -0
  930. package/dist/render/workoutPlanDocs.d.ts +23 -0
  931. package/dist/render/workoutPlanDocs.d.ts.map +1 -0
  932. package/dist/render/workoutPlanDocs.js +244 -0
  933. package/dist/render/workoutPlanDocs.js.map +1 -0
  934. package/dist/render/workoutPlanLook.d.ts +16 -0
  935. package/dist/render/workoutPlanLook.d.ts.map +1 -0
  936. package/dist/render/workoutPlanLook.js +135 -0
  937. package/dist/render/workoutPlanLook.js.map +1 -0
  938. package/dist/schema.d.ts.map +1 -1
  939. package/dist/schema.js +11 -0
  940. package/dist/schema.js.map +1 -1
  941. package/dist/shared/commandSpec.d.ts +73 -0
  942. package/dist/shared/commandSpec.d.ts.map +1 -0
  943. package/dist/shared/commandSpec.js +2 -0
  944. package/dist/shared/commandSpec.js.map +1 -0
  945. package/dist/shared/conclusionLine.d.ts +3 -0
  946. package/dist/shared/conclusionLine.d.ts.map +1 -0
  947. package/dist/shared/conclusionLine.js +21 -0
  948. package/dist/shared/conclusionLine.js.map +1 -0
  949. package/dist/shared/contentSuffix.d.ts +17 -0
  950. package/dist/shared/contentSuffix.d.ts.map +1 -0
  951. package/dist/shared/contentSuffix.js +125 -0
  952. package/dist/shared/contentSuffix.js.map +1 -0
  953. package/dist/shared/copyArea.d.ts +73 -0
  954. package/dist/shared/copyArea.d.ts.map +1 -0
  955. package/dist/shared/copyArea.js +144 -0
  956. package/dist/shared/copyArea.js.map +1 -0
  957. package/dist/shared/docPage.d.ts +42 -0
  958. package/dist/shared/docPage.d.ts.map +1 -0
  959. package/dist/shared/docPage.js +129 -0
  960. package/dist/shared/docPage.js.map +1 -0
  961. package/dist/shared/emptyGuide.d.ts +9 -0
  962. package/dist/shared/emptyGuide.d.ts.map +1 -0
  963. package/dist/shared/emptyGuide.js +31 -0
  964. package/dist/shared/emptyGuide.js.map +1 -0
  965. package/dist/shared/fieldLabel.d.ts +5 -0
  966. package/dist/shared/fieldLabel.d.ts.map +1 -0
  967. package/dist/shared/fieldLabel.js +42 -0
  968. package/dist/shared/fieldLabel.js.map +1 -0
  969. package/dist/shared/operationHead.d.ts +21 -0
  970. package/dist/shared/operationHead.d.ts.map +1 -0
  971. package/dist/shared/operationHead.js +73 -0
  972. package/dist/shared/operationHead.js.map +1 -0
  973. package/dist/shared/pageKit.d.ts +25 -0
  974. package/dist/shared/pageKit.d.ts.map +1 -0
  975. package/dist/shared/pageKit.js +56 -0
  976. package/dist/shared/pageKit.js.map +1 -0
  977. package/dist/shared/params.d.ts +54 -0
  978. package/dist/shared/params.d.ts.map +1 -0
  979. package/dist/shared/params.js +176 -0
  980. package/dist/shared/params.js.map +1 -0
  981. package/dist/shared/receiptParts.d.ts +9 -0
  982. package/dist/shared/receiptParts.d.ts.map +1 -0
  983. package/dist/shared/receiptParts.js +40 -0
  984. package/dist/shared/receiptParts.js.map +1 -0
  985. package/dist/shared/sceneEnvelope.d.ts +32 -0
  986. package/dist/shared/sceneEnvelope.d.ts.map +1 -0
  987. package/dist/shared/sceneEnvelope.js +12 -0
  988. package/dist/shared/sceneEnvelope.js.map +1 -0
  989. package/dist/shared/sourceLine.d.ts +10 -0
  990. package/dist/shared/sourceLine.d.ts.map +1 -0
  991. package/dist/shared/sourceLine.js +37 -0
  992. package/dist/shared/sourceLine.js.map +1 -0
  993. package/dist/shared/writeParts.d.ts +61 -0
  994. package/dist/shared/writeParts.d.ts.map +1 -0
  995. package/dist/shared/writeParts.js +79 -0
  996. package/dist/shared/writeParts.js.map +1 -0
  997. package/dist/triggers/help-lookup.d.ts +41 -5
  998. package/dist/triggers/help-lookup.d.ts.map +1 -1
  999. package/dist/triggers/help-lookup.js +100 -51
  1000. package/dist/triggers/help-lookup.js.map +1 -1
  1001. package/dist/triggers/index.js +1 -1
  1002. package/dist/triggers/routeSpec.d.ts +66 -0
  1003. package/dist/triggers/routeSpec.d.ts.map +1 -0
  1004. package/dist/triggers/routeSpec.js +21 -0
  1005. package/dist/triggers/routeSpec.js.map +1 -0
  1006. package/dist/triggers/routes.generated.d.ts +17 -0
  1007. package/dist/triggers/routes.generated.d.ts.map +1 -0
  1008. package/dist/triggers/routes.generated.js +519 -0
  1009. package/dist/triggers/routes.generated.js.map +1 -0
  1010. package/dist/triggers/routing.d.ts +17 -38
  1011. package/dist/triggers/routing.d.ts.map +1 -1
  1012. package/dist/triggers/routing.js +13 -527
  1013. package/dist/triggers/routing.js.map +1 -1
  1014. package/dist/triggers/scene-01-home.js +9 -9
  1015. package/dist/triggers/scene-01-home.js.map +1 -1
  1016. package/dist/triggers/scene-02-diet.js +62 -62
  1017. package/dist/triggers/scene-02-diet.js.map +1 -1
  1018. package/dist/triggers/scene-03-weight.js +54 -54
  1019. package/dist/triggers/scene-03-weight.js.map +1 -1
  1020. package/dist/triggers/scene-04-exercise.js +33 -33
  1021. package/dist/triggers/scene-04-exercise.js.map +1 -1
  1022. package/dist/triggers/scene-05-workout.js +32 -32
  1023. package/dist/triggers/scene-05-workout.js.map +1 -1
  1024. package/dist/triggers/scene-06-goal.d.ts +1 -1
  1025. package/dist/triggers/scene-06-goal.d.ts.map +1 -1
  1026. package/dist/triggers/scene-06-goal.js +25 -24
  1027. package/dist/triggers/scene-06-goal.js.map +1 -1
  1028. package/dist/triggers/scene-07-profile.js +4 -4
  1029. package/dist/triggers/scene-07-profile.js.map +1 -1
  1030. package/dist/triggers/scene-08-body.js +10 -10
  1031. package/dist/triggers/scene-08-body.js.map +1 -1
  1032. package/dist/triggers/scene-09-photo.js +10 -10
  1033. package/dist/triggers/scene-09-photo.js.map +1 -1
  1034. package/dist/triggers/scene-10-analysis.js +176 -176
  1035. package/dist/triggers/scene-10-analysis.js.map +1 -1
  1036. package/dist/triggers/wake-assets.d.ts +47 -0
  1037. package/dist/triggers/wake-assets.d.ts.map +1 -0
  1038. package/dist/triggers/wake-assets.js +4725 -0
  1039. package/dist/triggers/wake-assets.js.map +1 -0
  1040. package/dist/weight/commands.d.ts +21 -0
  1041. package/dist/weight/commands.d.ts.map +1 -0
  1042. package/dist/weight/commands.js +18 -0
  1043. package/dist/weight/commands.js.map +1 -0
  1044. package/dist/weight/compare.d.ts +60 -0
  1045. package/dist/weight/compare.d.ts.map +1 -0
  1046. package/dist/weight/compare.js +570 -0
  1047. package/dist/weight/compare.js.map +1 -0
  1048. package/dist/weight/edit.d.ts +13 -0
  1049. package/dist/weight/edit.d.ts.map +1 -0
  1050. package/dist/weight/edit.js +87 -0
  1051. package/dist/weight/edit.js.map +1 -0
  1052. package/dist/weight/fieldLabels.d.ts +5 -0
  1053. package/dist/weight/fieldLabels.d.ts.map +1 -0
  1054. package/dist/weight/fieldLabels.js +23 -0
  1055. package/dist/weight/fieldLabels.js.map +1 -0
  1056. package/dist/weight/figures.d.ts +87 -0
  1057. package/dist/weight/figures.d.ts.map +1 -0
  1058. package/dist/weight/figures.js +219 -0
  1059. package/dist/weight/figures.js.map +1 -0
  1060. package/dist/weight/history.d.ts +85 -0
  1061. package/dist/weight/history.d.ts.map +1 -0
  1062. package/dist/weight/history.js +771 -0
  1063. package/dist/weight/history.js.map +1 -0
  1064. package/dist/weight/index.d.ts +27 -0
  1065. package/dist/weight/index.d.ts.map +1 -0
  1066. package/dist/weight/index.js +23 -0
  1067. package/dist/weight/index.js.map +1 -0
  1068. package/dist/weight/log.d.ts +40 -0
  1069. package/dist/weight/log.d.ts.map +1 -0
  1070. package/dist/weight/log.js +355 -0
  1071. package/dist/weight/log.js.map +1 -0
  1072. package/dist/weight/logReceipt.d.ts +28 -0
  1073. package/dist/weight/logReceipt.d.ts.map +1 -0
  1074. package/dist/weight/logReceipt.js +259 -0
  1075. package/dist/weight/logReceipt.js.map +1 -0
  1076. package/dist/weight/plate.d.ts +77 -0
  1077. package/dist/weight/plate.d.ts.map +1 -0
  1078. package/dist/weight/plate.js +60 -0
  1079. package/dist/weight/plate.js.map +1 -0
  1080. package/dist/weight/plateDocs.d.ts +83 -0
  1081. package/dist/weight/plateDocs.d.ts.map +1 -0
  1082. package/dist/weight/plateDocs.js +179 -0
  1083. package/dist/weight/plateDocs.js.map +1 -0
  1084. package/dist/weight/receipt.d.ts +23 -0
  1085. package/dist/weight/receipt.d.ts.map +1 -0
  1086. package/dist/weight/receipt.js +178 -0
  1087. package/dist/weight/receipt.js.map +1 -0
  1088. package/dist/weight/records.d.ts +109 -0
  1089. package/dist/weight/records.d.ts.map +1 -0
  1090. package/dist/weight/records.js +210 -0
  1091. package/dist/weight/records.js.map +1 -0
  1092. package/dist/weight/review.d.ts +114 -0
  1093. package/dist/weight/review.d.ts.map +1 -0
  1094. package/dist/weight/review.js +651 -0
  1095. package/dist/weight/review.js.map +1 -0
  1096. package/dist/weight/routes.d.ts +7 -0
  1097. package/dist/weight/routes.d.ts.map +1 -0
  1098. package/dist/weight/routes.js +68 -0
  1099. package/dist/weight/routes.js.map +1 -0
  1100. package/dist/weight/volatility.d.ts +78 -0
  1101. package/dist/weight/volatility.d.ts.map +1 -0
  1102. package/dist/weight/volatility.js +203 -0
  1103. package/dist/weight/volatility.js.map +1 -0
  1104. package/dist/weight/volatilityDoc.d.ts +10 -0
  1105. package/dist/weight/volatilityDoc.d.ts.map +1 -0
  1106. package/dist/weight/volatilityDoc.js +395 -0
  1107. package/dist/weight/volatilityDoc.js.map +1 -0
  1108. package/dist/weight/weightCompare.d.ts +70 -0
  1109. package/dist/weight/weightCompare.d.ts.map +1 -0
  1110. package/dist/weight/weightCompare.js +221 -0
  1111. package/dist/weight/weightCompare.js.map +1 -0
  1112. package/dist/weight/weightCompare2.d.ts +66 -0
  1113. package/dist/weight/weightCompare2.d.ts.map +1 -0
  1114. package/dist/weight/weightCompare2.js +218 -0
  1115. package/dist/weight/weightCompare2.js.map +1 -0
  1116. package/dist/weight/weightCompare3.d.ts +18 -0
  1117. package/dist/weight/weightCompare3.d.ts.map +1 -0
  1118. package/dist/weight/weightCompare3.js +222 -0
  1119. package/dist/weight/weightCompare3.js.map +1 -0
  1120. package/dist/weight/weightUi.d.ts +114 -0
  1121. package/dist/weight/weightUi.d.ts.map +1 -0
  1122. package/dist/weight/weightUi.js +256 -0
  1123. package/dist/weight/weightUi.js.map +1 -0
  1124. package/dist/workout/commands.d.ts +29 -0
  1125. package/dist/workout/commands.d.ts.map +1 -0
  1126. package/dist/workout/commands.js +35 -0
  1127. package/dist/workout/commands.js.map +1 -0
  1128. package/dist/workout/contraindication.d.ts +11 -0
  1129. package/dist/workout/contraindication.d.ts.map +1 -0
  1130. package/dist/workout/contraindication.js +11 -0
  1131. package/dist/workout/contraindication.js.map +1 -0
  1132. package/dist/workout/dayPhrase.d.ts +13 -0
  1133. package/dist/workout/dayPhrase.d.ts.map +1 -0
  1134. package/dist/workout/dayPhrase.js +15 -0
  1135. package/dist/workout/dayPhrase.js.map +1 -0
  1136. package/dist/workout/fieldLabels.d.ts +5 -0
  1137. package/dist/workout/fieldLabels.d.ts.map +1 -0
  1138. package/dist/workout/fieldLabels.js +45 -0
  1139. package/dist/workout/fieldLabels.js.map +1 -0
  1140. package/dist/workout/index.d.ts +30 -0
  1141. package/dist/workout/index.d.ts.map +1 -0
  1142. package/dist/workout/index.js +34 -0
  1143. package/dist/workout/index.js.map +1 -0
  1144. package/dist/workout/land.d.ts +45 -0
  1145. package/dist/workout/land.d.ts.map +1 -0
  1146. package/dist/workout/land.js +280 -0
  1147. package/dist/workout/land.js.map +1 -0
  1148. package/dist/workout/landBatch.d.ts +60 -0
  1149. package/dist/workout/landBatch.d.ts.map +1 -0
  1150. package/dist/workout/landBatch.js +225 -0
  1151. package/dist/workout/landBatch.js.map +1 -0
  1152. package/dist/workout/landBatchPages.d.ts +31 -0
  1153. package/dist/workout/landBatchPages.d.ts.map +1 -0
  1154. package/dist/workout/landBatchPages.js +132 -0
  1155. package/dist/workout/landBatchPages.js.map +1 -0
  1156. package/dist/workout/landPages.d.ts +41 -0
  1157. package/dist/workout/landPages.d.ts.map +1 -0
  1158. package/dist/workout/landPages.js +153 -0
  1159. package/dist/workout/landPages.js.map +1 -0
  1160. package/dist/workout/landRunner.d.ts +42 -0
  1161. package/dist/workout/landRunner.d.ts.map +1 -0
  1162. package/dist/workout/landRunner.js +155 -0
  1163. package/dist/workout/landRunner.js.map +1 -0
  1164. package/dist/workout/movementType.d.ts +14 -0
  1165. package/dist/workout/movementType.d.ts.map +1 -0
  1166. package/dist/workout/movementType.js +16 -0
  1167. package/dist/workout/movementType.js.map +1 -0
  1168. package/dist/workout/plan.d.ts +21 -0
  1169. package/dist/workout/plan.d.ts.map +1 -0
  1170. package/dist/workout/plan.js +44 -0
  1171. package/dist/workout/plan.js.map +1 -0
  1172. package/dist/workout/planStore.d.ts +157 -0
  1173. package/dist/workout/planStore.d.ts.map +1 -0
  1174. package/dist/workout/planStore.js +282 -0
  1175. package/dist/workout/planStore.js.map +1 -0
  1176. package/dist/workout/precheckPrompt.d.ts +7 -0
  1177. package/dist/workout/precheckPrompt.d.ts.map +1 -0
  1178. package/dist/workout/precheckPrompt.js +35 -0
  1179. package/dist/workout/precheckPrompt.js.map +1 -0
  1180. package/dist/workout/progress.d.ts +12 -0
  1181. package/dist/workout/progress.d.ts.map +1 -0
  1182. package/dist/workout/progress.js +16 -0
  1183. package/dist/workout/progress.js.map +1 -0
  1184. package/dist/workout/receipt.d.ts +15 -0
  1185. package/dist/workout/receipt.d.ts.map +1 -0
  1186. package/dist/workout/receipt.js +128 -0
  1187. package/dist/workout/receipt.js.map +1 -0
  1188. package/dist/workout/review.d.ts +12 -0
  1189. package/dist/workout/review.d.ts.map +1 -0
  1190. package/dist/workout/review.js +15 -0
  1191. package/dist/workout/review.js.map +1 -0
  1192. package/dist/workout/routes.d.ts +13 -0
  1193. package/dist/workout/routes.d.ts.map +1 -0
  1194. package/dist/workout/routes.js +49 -0
  1195. package/dist/workout/routes.js.map +1 -0
  1196. package/dist/workout/wizard.d.ts +14 -0
  1197. package/dist/workout/wizard.d.ts.map +1 -0
  1198. package/dist/workout/wizard.js +20 -0
  1199. package/dist/workout/wizard.js.map +1 -0
  1200. package/dist/workout/write.d.ts +78 -0
  1201. package/dist/workout/write.d.ts.map +1 -0
  1202. package/dist/workout/write.js +607 -0
  1203. package/dist/workout/write.js.map +1 -0
  1204. package/dist/workout/xunjiBackfill.d.ts +36 -0
  1205. package/dist/workout/xunjiBackfill.d.ts.map +1 -0
  1206. package/dist/workout/xunjiBackfill.js +198 -0
  1207. package/dist/workout/xunjiBackfill.js.map +1 -0
  1208. package/dist/workout/xunjiPush.d.ts +33 -0
  1209. package/dist/workout/xunjiPush.d.ts.map +1 -0
  1210. package/dist/workout/xunjiPush.js +236 -0
  1211. package/dist/workout/xunjiPush.js.map +1 -0
  1212. package/dist/workout/xunjiRunner.d.ts +29 -0
  1213. package/dist/workout/xunjiRunner.d.ts.map +1 -0
  1214. package/dist/workout/xunjiRunner.js +110 -0
  1215. package/dist/workout/xunjiRunner.js.map +1 -0
  1216. package/dist/xunji/backfill.d.ts +63 -0
  1217. package/dist/xunji/backfill.d.ts.map +1 -0
  1218. package/dist/xunji/backfill.js +150 -0
  1219. package/dist/xunji/backfill.js.map +1 -0
  1220. package/dist/xunji/catalog.d.ts +53 -0
  1221. package/dist/xunji/catalog.d.ts.map +1 -0
  1222. package/dist/xunji/catalog.js +126 -0
  1223. package/dist/xunji/catalog.js.map +1 -0
  1224. package/dist/xunji/cli.d.ts +3 -0
  1225. package/dist/xunji/cli.d.ts.map +1 -0
  1226. package/dist/xunji/cli.js +15 -0
  1227. package/dist/xunji/cli.js.map +1 -0
  1228. package/dist/xunji/exitMap.d.ts +37 -0
  1229. package/dist/xunji/exitMap.d.ts.map +1 -0
  1230. package/dist/xunji/exitMap.js +42 -0
  1231. package/dist/xunji/exitMap.js.map +1 -0
  1232. package/dist/xunji/fetch.d.ts +77 -0
  1233. package/dist/xunji/fetch.d.ts.map +1 -0
  1234. package/dist/xunji/fetch.js +160 -0
  1235. package/dist/xunji/fetch.js.map +1 -0
  1236. package/dist/xunji/index.d.ts +21 -0
  1237. package/dist/xunji/index.d.ts.map +1 -0
  1238. package/dist/xunji/index.js +18 -0
  1239. package/dist/xunji/index.js.map +1 -0
  1240. package/dist/xunji/key.d.ts +77 -0
  1241. package/dist/xunji/key.d.ts.map +1 -0
  1242. package/dist/xunji/key.js +160 -0
  1243. package/dist/xunji/key.js.map +1 -0
  1244. package/dist/xunji/overlay-plan.d.ts +79 -0
  1245. package/dist/xunji/overlay-plan.d.ts.map +1 -0
  1246. package/dist/xunji/overlay-plan.js +145 -0
  1247. package/dist/xunji/overlay-plan.js.map +1 -0
  1248. package/dist/xunji/planSource.d.ts +40 -0
  1249. package/dist/xunji/planSource.d.ts.map +1 -0
  1250. package/dist/xunji/planSource.js +78 -0
  1251. package/dist/xunji/planSource.js.map +1 -0
  1252. package/dist/xunji/push.d.ts +55 -0
  1253. package/dist/xunji/push.d.ts.map +1 -0
  1254. package/dist/xunji/push.js +69 -0
  1255. package/dist/xunji/push.js.map +1 -0
  1256. package/dist/xunji/rateLimit.d.ts +44 -0
  1257. package/dist/xunji/rateLimit.d.ts.map +1 -0
  1258. package/dist/xunji/rateLimit.js +99 -0
  1259. package/dist/xunji/rateLimit.js.map +1 -0
  1260. package/dist/xunji/request.d.ts +48 -0
  1261. package/dist/xunji/request.d.ts.map +1 -0
  1262. package/dist/xunji/request.js +60 -0
  1263. package/dist/xunji/request.js.map +1 -0
  1264. package/dist/xunji/retry.d.ts +50 -0
  1265. package/dist/xunji/retry.d.ts.map +1 -0
  1266. package/dist/xunji/retry.js +106 -0
  1267. package/dist/xunji/retry.js.map +1 -0
  1268. package/dist/xunji/rows.d.ts +32 -0
  1269. package/dist/xunji/rows.d.ts.map +1 -0
  1270. package/dist/xunji/rows.js +74 -0
  1271. package/dist/xunji/rows.js.map +1 -0
  1272. package/dist/xunji/run-sync.d.ts +106 -0
  1273. package/dist/xunji/run-sync.d.ts.map +1 -0
  1274. package/dist/xunji/run-sync.js +223 -0
  1275. package/dist/xunji/run-sync.js.map +1 -0
  1276. package/dist/xunji/run.d.ts +56 -0
  1277. package/dist/xunji/run.d.ts.map +1 -0
  1278. package/dist/xunji/run.js +300 -0
  1279. package/dist/xunji/run.js.map +1 -0
  1280. package/dist/xunji/store.d.ts +31 -0
  1281. package/dist/xunji/store.d.ts.map +1 -0
  1282. package/dist/xunji/store.js +60 -0
  1283. package/dist/xunji/store.js.map +1 -0
  1284. package/dist/xunji/subcommands.d.ts +64 -0
  1285. package/dist/xunji/subcommands.d.ts.map +1 -0
  1286. package/dist/xunji/subcommands.js +203 -0
  1287. package/dist/xunji/subcommands.js.map +1 -0
  1288. package/dist/xunji/upsert.d.ts +61 -0
  1289. package/dist/xunji/upsert.d.ts.map +1 -0
  1290. package/dist/xunji/upsert.js +100 -0
  1291. package/dist/xunji/upsert.js.map +1 -0
  1292. package/package.json +7 -3
  1293. package/src/xunji/data//350/256/255/350/256/260/345/256/230/346/226/271/345/212/250/344/275/234.json +1099 -0
  1294. package/templates/help.html +1 -1
  1295. package/workflows/08-/350/272/253/344/275/223/347/273/206/350/212/202.md +60 -0
  1296. package/workflows/09-/350/272/253/346/235/220/347/205/247/347/211/207.md +98 -0
  1297. package/dist/render/profilePlate.d.ts +0 -17
  1298. package/dist/render/profilePlate.d.ts.map +0 -1
  1299. package/dist/render/profilePlate.js +0 -18
  1300. package/dist/render/profilePlate.js.map +0 -1
@@ -1,540 +1,413 @@
1
- /** #109 · 运动/身体域全文档装配(数据→区块→填充器)。
1
+ /** #109 · 运动域全文档装配(数据→区块→填充器);#452 换融合版式;**#523 去分隔符形状化 + 文案去冗余**。
2
2
  *
3
- * 范围(47 页同质之运动/身体域,t71 口径「新版已有」):`calorie.view.exercise`
4
- * (exercise_summary 汇总+趋势+分布+力量/有氧筛选子集)/`calorie.view.exercise-goal`
5
- * (exercise_goal_view)/`calorie.view.weight`(weight_dashboard)/
6
- * `calorie.view.weight-history`(weight_history 子集)/`calorie.view.weight-compare`
7
- * (weight_compare 子集)/`calorie.view.weight-review`(weight_review)/
8
- * `calorie.view.volatility`(weight_volatility_v2)/`calorie.view.body-composition`
9
- * (body_composition_view)/`calorie.view.body-measure`(body_measurements_view)。
10
- * 不碰:exercise_cardio/distribution/recap/review/strength/trend 6 项需移植(→ #111),
11
- * 训练计划/向导(→ #86),体脂/围度对比 helpers(无 CLI 键,随组合分析消费),
12
- * 缺口/组合/异常/禁忌(→ #110),饮食域(#108 已关)。
3
+ * 范围(#353 后:身体两页已迁 `src/body/bodyDocs.ts`,本件只留运动两页):`calorie.view.exercise`
4
+ * (汇总:KPI 四格/每日消耗折线/类型消耗分布/逐日与按类型明细)/`calorie.view.exercise-goal`
5
+ * (对照目标:环卡/判决胶囊/差距文案)。不碰:运动 6 项需移植(→ #111)、训练计划与向导(→ #86)、
6
+ * 缺口/组合/异常/禁忌(→ #110)、饮食域(#108 已关)。体重五页在 `src/weight/plateDocs.ts`(#294)。
13
7
  *
14
- * 做法(#104 §4 用法):内容 = base-paint/blocks 12 区块(B-01 壳/B-02 KPI/B-03 表/
15
- * B-04 图/B-05 列表/B-08 折叠/B-09 参数表单/B-11 复制区),文档 = fillTemplate 包裹
16
- * (资产裸文本+填充器包裹;sharedCss = buildStyleSheet().css + blocksCss(),不走 extraCss;
17
- * 图表页另加 CHARTS-HELPERS+buildChartsHelpersJs,图表 CSS 由其运行时注入)。
18
- * 复制文本一律 buildDataText(#77 契约,技能侧不自产第二套序列化):指标页走 stat 投影,
19
- * 行级页(体成分/围度记录)走 list 投影。本层不做取数(数据由调用方 dispatch 备齐),
20
- * 不返空(缺失由数据层抛 missing-data)。
8
+ * #452 融合(地图 #156 3 票,形状照已验样板 #423):① 页头写人话(无命令键/票号/工序词);
9
+ * 汇总页四块逐块判空,长窗口**截断明示**;③ 目标页环取 `min(pct,100)`+判决胶囊两态,目标缺席
10
+ * 走专门空态不画空环;④ 口径行走 #420 `renderCaliberLine`;⑤ 来源脚注走 #422;⑥ 可打印走
11
+ * `assembleDocPage` `printable` 透传位(#448)。
12
+ *
13
+ * ── #523 三样债(分隔符/机器词/重复事实)+ 手机端同档,本件落法 ──
14
+ * **分隔符**:可见文本零硬串分隔符(探针口径见 #508)。落点四处——
15
+ * · 页头眉标 `运动 · 汇总` → `运动汇总`(类别+页族两个字都在,只是不用 `·` 串);
16
+ * · `<title>` 的品牌 `·` → 空格(照 #401 样板先例);
17
+ * · KPI 卡 `detail` 槽的 `·` 串 → 一条事实只写一处(另一条撤给同页别的卡,不是删);
18
+ * · 页脚来源行**不再走 `src/shared/sourceLine.ts`**(那件的 `·` 串是跨场景共用位,
19
+ * 本族改用 `sportUi.factStrip()` 的键值行承接;共用层口径统一归 **#470**,本票吸收其一角);
20
+ * · 口径行里 `;` 串 → 每条事实一个 `renderCaliberLine`(公共层既有件,不重造形状)。
21
+ * ② **机器词上屏**:来源名从库表名改成读者看得懂的话;`月/日` 这类数值列走显示层取整。
22
+ * ③ **重复事实**:窗口与天数只在窗口条/H1 各出现一次;截断三数拆成一句一事
23
+ * (表标题只报本窗天数,可见行数与被截天数只住截断明示一句);类型分布由柱状图改分布条
24
+ * (长分类名在 x 轴上重叠越界);目标页「已达成」只住判决胶囊一处,环下键值行已撤
25
+ * (目标/实际/差额只在数值四格一处)。#523 返修落点。
26
+ * **返修 R5(终审席 P2-7/P2-8,I1/I2)**:① 逐日表的表题不再复读窗口天数——表题收成
27
+ * 「按日消耗」,天数只留页头窗口条一处(被截窗把本窗天数并进截断明示那一句);
28
+ * ② 两张表的三个数值列都带上单位(「2 次」「800 卡」「90 分钟」),与同页分布条/折叠体同一种写法。
29
+ * ④ **手机端同档**:页内形状件的 820 段+触摸面在 `src/exercise/sportUi.ts`(本件正文首项放它的样式)。
30
+ *
31
+ * 取数仍由调用方备齐(`home/exercise.ts`/`render/planPlate.ts`);本层不查库、不返空。
21
32
  */
22
- import { blocksCss, renderChartBlock, renderCopyBlock, renderDataTable, renderDisclosure, renderKpiGrid, renderListRows, renderPageShell, renderParamForm, } from 'base-paint/blocks';
23
- import { buildChartsHelpersJs, buildDataText, buildSharedHelpersJs, buildStyleSheet, fillTemplate } from 'base-paint';
24
- import { inferCategory } from '../fetch/exercise.js';
33
+ import { renderCaliberLine, renderChartBlock, renderDataTable, renderDisclosure, renderDistributionRows, renderKpiGrid, renderListRows, renderTocBlock, } from 'base-paint/blocks';
34
+ import { escapeHtml } from 'base-paint';
35
+ import { assembleDocPage, metricsOf } from '../shared/docPage.js';
36
+ import { copyArea, copyLog } from '../shared/copyArea.js';
37
+ import { emptyGuide } from '../shared/emptyGuide.js';
38
+ import { commandLine } from '../shared/writeParts.js';
39
+ import { nowStamp } from './receipt.js';
40
+ import { inferCategory } from '../exercise/exerciseStore.js';
41
+ import { exerciseUiCss, factStrip, fmtNum, windowStrip } from '../exercise/sportUi.js';
25
42
  /** envelope 头(值冻结对齐 cli/keys.ts ENVELOPE_VERSION/CALORIE_SKILL;测试钉死一致)。 */
26
43
  const DOC_VERSION = '0.1.0';
27
44
  const DOC_SKILL = 'calorie';
28
- /** 内容页壳(裸标记+CONTENT 槽;包裹约定:资产裸文本+填充器包裹,标记不得预包裹)。
29
- * wrap ilife-page 兼容既有 --html 断言。 */
30
- const DOC_SHELL = '<!doctype html>\n<html lang="zh-CN">\n<head>\n<meta charset="utf-8">\n' +
31
- '<meta name="viewport" content="width=device-width,initial-scale=1">\n' +
32
- '<title>卡路里·运动身体</title>\n<!--SHARED-CSS-->\n</head>\n<body>\n' +
33
- '<div class="wrap ilife-page">\n<!--CONTENT-->\n</div>\n<!--SHARED-HELPERS-->\n</body>\n</html>';
34
- /** 图表页壳(多一个 CHARTS-HELPERS 标记,图表 CSS charts helpers 运行时注入)。 */
35
- const DOC_SHELL_CHARTS = '<!doctype html>\n<html lang="zh-CN">\n<head>\n<meta charset="utf-8">\n' +
36
- '<meta name="viewport" content="width=device-width,initial-scale=1">\n' +
37
- '<title>卡路里·运动身体</title>\n<!--SHARED-CSS-->\n</head>\n<body>\n' +
38
- '<div class="wrap ilife-page">\n<!--CONTENT-->\n</div>\n<!--SHARED-HELPERS-->\n<!--CHARTS-HELPERS-->\n</body>\n</html>';
39
- function assemble(title, eyebrow, subtitle, content, charts) {
40
- const assets = {
41
- sharedCssText: buildStyleSheet().css + '\n' + blocksCss(),
42
- sharedHelpersJs: buildSharedHelpersJs(),
43
- };
44
- if (charts)
45
- assets.chartsHelpersJs = buildChartsHelpersJs();
46
- const body = renderPageShell({
47
- title,
48
- ...(eyebrow ? { eyebrow } : {}),
49
- ...(subtitle ? { subtitle } : {}),
50
- content,
45
+ /** 本文件各页共用的 head 标题(整页模板住 `src/shared/docPage.ts`,标题走参数)。
46
+ * #523:品牌名里的 `·` 去掉——`·` 是分隔符债,`<title>` 也是可见文本(探针按 `#401` 样板加了这条锁)。 */
47
+ const DOC_TITLE = '卡路里 运动';
48
+ /** 逐日明细表最多摆几行(超上限**逐条明示**:表标题只报本窗天数,可见行数只报这一截)。
49
+ * 口径取全仓既有上限写法(`copyArea` 的 100 条 caption 同数),不静默截数。 */
50
+ const DAILY_CAP = 100;
51
+ /** 分布条最多列几类(#523 返修):类型名的柱状图 x 轴在 9 个长分类名下互相重叠、右端越出画布
52
+ * (`把手式蝴蝶机飞鸟` 8 个字以 `x≈288` 居中,横跨约 248~328,画布宽只有 320),故柱状图不再画,
53
+ * 改走公共层 `renderDistributionRows`(名称 | 条 | 数值,HTML 横排,全称照印、窄屏自然换行)。
54
+ * 其余逐条仍归下方「按类型明细」表(条给一眼,表给逐条)。 */
55
+ const DIST_TOP = 8;
56
+ /** 人话眉标(页头不许出现命令键;两页各一句)。
57
+ * #523:`运动 · 汇总` 的 `·` 去掉——类别(运动)与页族(汇总)两个字都在,只是不拿符号串。
58
+ * #523 返修 R3:眉标原来与 H1(`运动汇总`)**逐字全同**——#552 把 H1 的日期摘掉之后两者撞成同一个串,
59
+ * 视觉复评 R2 在汇总族两页各记 −5「眉标与 H1 逐字同名」。现眉标退回**类别词**「运动」、页族「汇总」
60
+ * 由 H1 承载:两件事实都还在页头,眉标不再复读页名(与明细族「眉标=运动记录/H1=运动记录明细」同构)。 */
61
+ const SUMMARY_EYEBROW = '运动';
62
+ const GOAL_EYEBROW = '运动对照目标';
63
+ /** 来源脚注上给**读者看**的来源名:可见文本零 snake_case(库表名只留在复制日志的「来源」段里,
64
+ * 那是给复核的人照抄用的技术原件,不上页面)。
65
+ * #552 去文:SOURCE_LOGGED 已删(运动汇总来源块整块消失后本件只剩目标页用 SOURCE_GOAL;
66
+ * 用户裁决“口径/来源块消失”——见票面判据)。 */
67
+ const SOURCE_GOAL = '每日目标 + 运动记录';
68
+ /** 数值的展示写形一律走 `sportUi.fmtNum()`(显示层取整,见 #523);本件不再另立一个 `fmt`。 */
69
+ /** 窗内天数(闭区间;只做天数差,不当取数口径)。 */
70
+ function daysIn(start, end) {
71
+ return Math.round((Date.parse(end) - Date.parse(start)) / 86400000) + 1;
72
+ }
73
+ /** 日期链的展示写形:`起 ~ 止`(`~` 是日期区间的既有写法,见 #508 的豁免清单,不算并列分隔符)。 */
74
+ const rangeText = (start, end) => start + ' ~ ' + end;
75
+ function shell(c) { return '<section id="' + c.id + '">' + c.html + '</section>'; }
76
+ /** 页面级小件的类名(融合件:#421/#452 的页内构件都落这一族;样式随 `pageShell` 区落盘)。 */
77
+ function part(name) { return 'ilife-block-' + name; }
78
+ /** 页内导航:锚点清单由卡片表派生(不手抄第二份 id)。 */
79
+ function tocOf(cards) {
80
+ return renderTocBlock({ items: cards.map((c) => ({ id: c.id, text: c.label })) });
81
+ }
82
+ /** 页内一张卡(锚点 id + 区块 HTML)——页内导航与正文都吃它。 */
83
+ function card(id, label, html) { return { id, label, html }; }
84
+ /** 来源脚注(#523 形状化 + #460 诚实口径):键值行「数据来源/窗口/窗口天数」,
85
+ * `·` 串已去(口径归 #470);取数面无条数字段,天数不再冒充条数,第三格如实报天。 */
86
+ function footFacts(source, start, end, days) {
87
+ return factStrip([
88
+ { k: '数据来源', v: source },
89
+ { k: '窗口', v: start + ' → ' + end },
90
+ { k: '窗口天数', v: '共 ' + fmtNum(days, 0) + ' 天' },
91
+ ]);
92
+ }
93
+ /** 复制区(两页共用):三格式数据 + 复制日志(命令/来源/时刻/版本)。 */
94
+ function docCopy(env, command, source) {
95
+ return copyArea({
96
+ data: { envelope: env },
97
+ log: { envelope: env, copyLog: copyLog({ command, source, actionAt: nowStamp(), version: DOC_VERSION }) },
51
98
  });
52
- return fillTemplate({ template: charts ? DOC_SHELL_CHARTS : DOC_SHELL, assets, content: body }).html;
53
99
  }
54
- function copyBlock(title, input) {
55
- return renderCopyBlock({ title, dataText: buildDataText(input) });
100
+ /** 壳内正文顺序(两页共用):页内样式 锚点导航 → 卡片 → 口径行 → 来源脚注 → 复制区。
101
+ * 页内样式恒为第一项(`assembleDocPage` 没有页内 CSS 入口,做法同 `src/weight/weightUi.ts`)。 */
102
+ function pageBody(cards, caliber, source, copy) {
103
+ return [
104
+ exerciseUiCss(),
105
+ tocOf(cards),
106
+ cards.map(shell).join(''),
107
+ caliber.map((t) => renderCaliberLine(t)).join(''),
108
+ source,
109
+ copy,
110
+ ].join('');
56
111
  }
57
- function fmt(n) {
58
- if (n === null || n === undefined)
59
- return '—';
60
- return String(n);
112
+ /* ══════════ 一、运动汇总(exercise_summary.html 的 mode=summary 一支:KPI+折线+分布+明细) ══════════ */
113
+ /** KPI 四格(#523 去重复事实:四条各报一件事,同一个数不在两张卡上各写一遍)。
114
+ * 窗口三处(H1/窗口条/页脚)已各有一份,卡里不再复读。 */
115
+ function summaryKpi(v) {
116
+ const r = v.review;
117
+ return [
118
+ { label: '总消耗', value: fmtNum(r.totalBurned, 0), unit: '卡' },
119
+ { label: '总时长', value: fmtNum(r.totalMinutes, 0), unit: '分钟',
120
+ detail: '每次平均 ' + fmtNum(r.totalMinutes / Math.max(1, r.sessions), 0) + ' 分钟' },
121
+ { label: '次数', value: String(r.sessions), unit: '次', detail: '活跃 ' + r.activeDays + ' 天' },
122
+ { label: '日均', value: fmtNum(v.avgBurnedPerLoggedDay, 0), unit: '卡', detail: '按有记录的天数算' },
123
+ ];
61
124
  }
62
- /** 复制投影 stat-metrics 只收确定数字(冻结口径:null/undefined 不进投影;随 #108 诸盘纯数字 metrics 同理)。 */
63
- function metricsOf(obj) {
64
- const out = {};
65
- for (const [k, v] of Object.entries(obj)) {
66
- if (v !== null && v !== undefined)
67
- out[k] = v;
125
+ /** #389 · 汇总页目标对照位(目标/对比目标在汇总页的落点)。
126
+ * 口径复用目标页同一套(每日目标+完成度+差额经 `home/exercise.ts` 的目标公开接口来,不在本件重算)。
127
+ * 形状守 #452/#552:只加一张卡(`sec-goal`),不加口径行、不加来源脚注,故汇总页口径行仍 0、来源仍无。
128
+ * 存量直构造(未带目标字段)回 null=不加卡,旧快照逐字节不变;显式 null=未设目标,走未设指引。 */
129
+ function goalCard(v) {
130
+ if (!('dailyGoal' in v))
131
+ return null;
132
+ const daily = v.dailyGoal ?? null;
133
+ const total = v.goalTotal ?? null;
134
+ const pct = v.goalPct ?? null;
135
+ const gap = v.goalGap ?? null;
136
+ const achieved = v.goalAchieved ?? null;
137
+ if (daily === null || total === null || pct === null || gap === null || achieved === null) {
138
+ return card('sec-goal', '目标对照', '<h2 style="margin:0;font-size:15px;font-weight:700">目标对照</h2>' + emptyGuide({
139
+ icon: '🎯', text: '还没设每日运动消耗目标',
140
+ hint: '先说一句「定运动目标」把每日运动消耗目标定下来,再看对照。',
141
+ }));
68
142
  }
69
- return out;
143
+ const verdict = '<span class="' + part('verdict') + ' ' + (achieved ? 'ok' : 'no') + '">'
144
+ + (achieved ? '✓ 已达成目标' : '✕ 还差 ' + fmtNum(Math.abs(gap), 0) + ' 卡') + '</span>';
145
+ return card('sec-goal', '目标对照', '<h2 style="margin:0;font-size:15px;font-weight:700">目标对照</h2>'
146
+ + renderKpiGrid([
147
+ { label: '目标', value: fmtNum(total, 0), unit: '卡' },
148
+ { label: '实际', value: fmtNum(v.review.totalBurned, 0), unit: '卡' },
149
+ { label: '完成度', value: fmtNum(pct) + '%' },
150
+ { label: '差额', value: fmtNum(Math.abs(gap), 0), unit: '卡', detail: gap >= 0 ? '超出目标' : '还差这么多' },
151
+ ]) + verdict);
152
+ }
153
+ /** 逐日表的截断口径(一处算):**表题只报这张表是什么**,天数与截断三数全住截断明示那一句。
154
+ * #523 返修:原来 caption 与 `sui-note` 把「表被截断、看折线」各说一遍,现拆成一句一事。
155
+ * **R5 打回项 I2(终审席 P2-8)**:表题原来写「按日消耗(本窗共 N 天)」,那个 N 天与**页头窗口条
156
+ * 右端那颗「N 天」胶囊是同一条事实**(同一页说两遍)。现表题收成「按日消耗」,天数只留页头窗口条
157
+ * 一处;被截窗里本窗天数并进截断明示那一句(「本窗共 N 天 + 显示最近 100 天 + 其余 M 天」三数同句),
158
+ * 读者在一个句子里就能对齐「窗共几天/表列几天/少了几」。
159
+ * 返回的 `note` 只在超上限时出,且**必带「截断」二字**(#452 的回归判据读它)。 */
160
+ function truncation(days) {
161
+ if (days <= DAILY_CAP)
162
+ return { visible: false, note: '' };
163
+ return {
164
+ visible: true,
165
+ note: '逐日表已截断:本窗共 ' + days + ' 天,显示最近 ' + DAILY_CAP + ' 天,其余 ' + (days - DAILY_CAP) + ' 天见上方折线',
166
+ };
70
167
  }
71
- /* ── 运动总览(exercise_summary.html 对照:汇总+每日趋势+类型分布+力量/有氧筛选子集) ── */
72
- export function buildExerciseDoc(v) {
168
+ /** 逐日消耗表:窗内**每天都有一行**(无记录日留空,不断 0);超上限时只摆最近一截并明示。
169
+ * 表标题不再复读窗口(窗口住页头窗口条与 H1),也不复读写法说明(住页底口径行)。
170
+ * 单元格走 `fmtNum`——库里的 `153.60000000000002` 那样的原值不上屏。
171
+ * **R5 打回项 I1(终审席 P2-7)**:消耗列原来是裸数(`1250`),而同页分布条写「1250 卡」——
172
+ * 一页两套单位写法、读者还要自己猜这一列是卡还是分钟。现单元格直接带单位「1250 卡」,
173
+ * 与该页分布条/折叠体同一种写法(同族记录级明细页的四列本来就带单位,两族由此一致)。 */
174
+ function seriesCard(v) {
175
+ if (v.series.length === 0)
176
+ return null;
177
+ const rows = v.series.map((d) => ({
178
+ date: d.date, burn: d.exerciseKcal === null ? '—' : fmtNum(d.exerciseKcal, 0) + ' 卡',
179
+ }));
180
+ const cut = truncation(rows.length);
181
+ const table = renderDataTable({
182
+ columns: [{ key: 'date', label: '日期' }, { key: 'burn', label: '消耗', align: 'right' }],
183
+ rows: cut.visible ? rows.slice(rows.length - DAILY_CAP) : rows,
184
+ caption: '按日消耗',
185
+ emptyText: '本窗无按日消耗',
186
+ });
187
+ return {
188
+ id: 'sec-series', label: '按日消耗',
189
+ html: (cut.note === '' ? '' : '<p class="sui-note">' + escapeHtml(cut.note) + '</p>') + table,
190
+ };
191
+ }
192
+ /** 按类型明细表(力量/有氧筛选子集:同窗不同类直出,无类切换页)。
193
+ * #523:表标题只留类数,删掉「力量/有氧筛选子集同窗直出」那句读者用不上的工序话;
194
+ * 数值一律走显示层取整(库里 `1680.8000000000004` 那样的原值不上屏)。
195
+ * **R5 打回项 I1**:三列数值原来都是裸数(次数 `2`、消耗 `800`、时长 `90`)且表头不带单位,
196
+ * 读者要自己猜这两列是卡还是分钟;现与逐日表、分布条、折叠体统一成「值 + 单位」
197
+ * (折叠体本来就写「2 次」「2200 卡」,三处同一写法)。 */
198
+ function typeCard(v) {
199
+ const byType = v.review.byType;
200
+ if (byType.length === 0)
201
+ return null;
202
+ return {
203
+ id: 'sec-type',
204
+ label: '按类型明细',
205
+ html: renderDataTable({
206
+ columns: [
207
+ { key: 'type', label: '类型' }, { key: 'cat', label: '分类' }, { key: 'sessions', label: '次数', align: 'right' },
208
+ { key: 'burned', label: '消耗', align: 'right' }, { key: 'minutes', label: '时长', align: 'right' },
209
+ ],
210
+ rows: byType.map((t) => ({
211
+ type: t.type, cat: inferCategory(t.type), sessions: t.sessions + ' 次',
212
+ burned: fmtNum(t.burned, 0) + ' 卡', minutes: fmtNum(t.minutes, 0) + ' 分钟',
213
+ })),
214
+ caption: '按类型明细(共 ' + byType.length + ' 类)',
215
+ emptyText: '本窗无类型明细',
216
+ }),
217
+ };
218
+ }
219
+ /** 汇总页的卡片清单(页内导航与正文走**同一份清单**,锚点不会指到不存在的 id):
220
+ * 四格 KPI / 目标对照 / 每日消耗折线 / 类型消耗分布 / 逐日明细 / 按类型明细 / 按分类汇总,逐块判空。 */
221
+ function summaryCards(v) {
73
222
  const r = v.review;
74
- const parts = [renderKpiGrid([
75
- { label: '总消耗', value: String(r.totalBurned), unit: '卡', detail: v.start + ' ~ ' + v.end },
76
- { label: '总时长', value: String(r.totalMinutes), unit: '分钟' },
77
- { label: '次数', value: String(r.sessions), unit: '次', detail: '活跃 ' + r.activeDays + ' 天' },
78
- {
79
- label: '日均', value: fmt(v.avgBurnedPerLoggedDay), unit: '卡',
80
- detail: '数列合计 ' + v.totalBurnedSeries + ' 卡 · 有数 ' + v.activeDays + '',
81
- },
82
- ])];
83
- let charts = false;
84
- const loggedDays = v.series.filter((d) => d.exerciseKcal !== null);
85
- if (loggedDays.length > 0) {
86
- parts.push(renderChartBlock({
223
+ const cards = [{ id: 'sec-kpi', label: '核心数字', html: '<h2 style="margin:0;font-size:15px;font-weight:700">核心数字</h2>' + renderKpiGrid(summaryKpi(v)) }];
224
+ const goal = goalCard(v);
225
+ if (goal !== null)
226
+ cards.push(goal);
227
+ const logged = v.series.filter((d) => d.exerciseKcal !== null);
228
+ if (logged.length > 0) {
229
+ cards.push(card('sec-trend', '每日消耗', renderChartBlock({
87
230
  kind: 'line',
88
231
  title: '每日消耗',
89
232
  input: {
90
- items: v.series.map((d) => ({ label: d.date.slice(5), value: d.exerciseKcal })),
91
- options: { markLine: { value: v.avgBurnedPerLoggedDay ?? undefined, label: '日均' } },
233
+ items: v.series.map((d) => ({ label: (v.start.slice(0, 4) !== v.end.slice(0, 4) ? d.date : d.date.slice(5)), value: d.exerciseKcal })),
234
+ options: { markLine: { value: v.avgBurnedPerLoggedDay ?? undefined, label: '日均' }, showDots: true },
92
235
  },
93
- }));
94
- charts = true;
236
+ })));
95
237
  }
96
238
  if (r.byType.length > 0) {
97
- parts.push(renderChartBlock({
98
- kind: 'bar',
99
- title: '类型消耗分布',
100
- input: { items: r.byType.map((t) => ({ label: t.type + ' ' + t.sessions + '次', value: t.burned })) },
101
- }));
102
- charts = true;
239
+ // #523 返修:类型消耗分布不再画柱状图(长分类名在 x 轴上重叠越界),改走分布条——
240
+ // 全称照印、窄屏自然换行;只列消耗最高的这几类,超上限时用一句注明去向(该句只出现一次)。
241
+ const top = [...r.byType].sort((a, b) => b.burned - a.burned).slice(0, DIST_TOP);
242
+ const max = top.length === 0 || !Number.isFinite(top[0].burned) || top[0].burned <= 0 ? 0 : top[0].burned;
243
+ const distNote = r.byType.length > DIST_TOP
244
+ ? '<p class="sui-note">' + escapeHtml('只列消耗最高的 ' + DIST_TOP + ' 类,逐类消耗见下方按类型明细表') + '</p>'
245
+ : '';
246
+ cards.push(card('sec-dist', '类型消耗分布', '<h2 style="margin:0;font-size:15px;font-weight:700">类型消耗分布</h2>' + renderDistributionRows({
247
+ rows: top.map((t) => ({
248
+ label: t.type,
249
+ value: fmtNum(t.burned, 0) + ' 卡',
250
+ pct: max === 0 ? 0 : Math.max(0, Math.min(100, (t.burned / max) * 100)),
251
+ })),
252
+ }) + distNote));
103
253
  }
104
- parts.push(renderDataTable({
105
- columns: [
106
- { key: 'date', label: '日期' },
107
- { key: 'burn', label: '消耗', align: 'right' },
108
- ],
109
- rows: v.series.map((d) => ({ date: d.date, burn: d.exerciseKcal })),
110
- caption: '按日消耗(' + v.start + ' ~ ' + v.end + ',无记录日留空,不断 0)',
111
- emptyText: '本窗无按日消耗',
112
- }));
113
- parts.push(renderDataTable({
114
- columns: [
115
- { key: 'type', label: '类型' },
116
- { key: 'cat', label: '分类' },
117
- { key: 'sessions', label: '次数', align: 'right' },
118
- { key: 'burned', label: '消耗', align: 'right' },
119
- { key: 'minutes', label: '时长', align: 'right' },
120
- ],
121
- rows: r.byType.map((t) => ({
122
- type: t.type, cat: inferCategory(t.type), sessions: t.sessions, burned: t.burned, minutes: t.minutes,
123
- })),
124
- caption: '按类型明细(力量/有氧筛选子集:同窗不同类直出,无类切换页)',
125
- emptyText: '本窗无类型明细',
126
- }));
254
+ const series = seriesCard(v);
255
+ if (series !== null)
256
+ cards.push(series);
257
+ const type = typeCard(v);
258
+ if (type !== null)
259
+ cards.push(type);
127
260
  const cats = Object.entries(r.byCategory);
128
261
  if (cats.length > 0) {
129
- parts.push(renderDisclosure({
262
+ cards.push(card('sec-cat', '按分类汇总', renderDisclosure({
130
263
  title: '按分类汇总(共 ' + cats.length + ' 类)',
131
264
  contentHtml: renderListRows({
132
- items: cats.map(([cat, s]) => ({ left: cat, main: s.sessions + ' 次', right: s.burned + ' 卡' })),
265
+ items: cats.map(([cat, s]) => ({ left: cat, main: s.sessions + ' 次', right: fmtNum(s.burned, 0) + ' 卡' })),
133
266
  }),
134
- }));
267
+ })));
135
268
  }
136
- parts.push(copyBlock('复制数据', {
137
- envelope: {
138
- version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.exercise',
139
- data: {
140
- metrics: metricsOf({
141
- totalBurned: r.totalBurned, totalMinutes: r.totalMinutes, sessions: r.sessions,
142
- activeDays: r.activeDays, totalBurnedSeries: v.totalBurnedSeries,
143
- avgBurnedPerLoggedDay: v.avgBurnedPerLoggedDay, seriesActiveDays: v.activeDays,
144
- }),
145
- },
146
- },
147
- }));
148
- return assemble('运动总览 ' + v.start + ' ~ ' + v.end, 'calorie.view.exercise · 运动身体域', '类型分布/力量有氧明细同窗直出(交互筛选归宿主)', parts.join(''), charts);
269
+ return cards;
149
270
  }
150
- /* ── 运动目标(exercise_goal_view.html 对照:目标 vs 实际+完成度+达成判定) ── */
151
- export function buildExerciseGoalDoc(v) {
152
- const parts = [renderKpiGrid([
153
- { label: '区间', value: v.start + ' ~ ' + v.end, detail: v.days + ' 天 · 日均目标 ' + v.dailyGoal + ' 卡' },
154
- { label: '目标', value: String(v.goalTotal), unit: '' },
155
- { label: '实际', value: String(v.actual), unit: '卡', detail: v.achieved ? '已达成' : '未达成' },
156
- {
157
- label: '完成度', value: v.pct === null ? '—' : String(v.pct) + '%',
158
- detail: '差 ' + v.gap + ' 卡', status: v.achieved ? 'ok' : 'warn',
159
- },
160
- ])];
161
- parts.push(renderChartBlock({
162
- kind: 'bar',
163
- title: '目标 vs 实际',
164
- input: { items: [{ label: '目标', value: v.goalTotal }, { label: '实际', value: v.actual }] },
165
- }));
166
- parts.push(copyBlock('复制数据', {
167
- envelope: {
168
- version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.exercise-goal',
169
- data: {
170
- metrics: metricsOf({
171
- dailyGoal: v.dailyGoal, goalTotal: v.goalTotal, actual: v.actual,
172
- pct: v.pct, gap: v.gap, achieved: v.achieved ? 1 : 0, days: v.days,
173
- }),
174
- },
271
+ /* #552 去文:summaryCalibers 整函数删(仅此处用;用户裁决“口径/来源块消失”——见票面判据)。 */
272
+ function summaryEnvelope(v) {
273
+ const r = v.review;
274
+ return {
275
+ version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: '运动汇总',
276
+ data: {
277
+ metrics: metricsOf({
278
+ totalBurned: r.totalBurned, totalMinutes: r.totalMinutes, sessions: r.sessions,
279
+ activeDays: r.activeDays, totalBurnedSeries: v.totalBurnedSeries,
280
+ avgBurnedPerLoggedDay: v.avgBurnedPerLoggedDay, seriesActiveDays: v.activeDays,
281
+ dailyGoal: v.dailyGoal ?? undefined, goalTotal: v.goalTotal ?? undefined,
282
+ goalPct: v.goalPct ?? undefined, goalGap: v.goalGap ?? undefined,
283
+ }),
175
284
  },
176
- }));
177
- return assemble('运动目标 ' + v.start + ' ~ ' + v.end, 'calorie.view.exercise-goal · 运动身体域', v.achieved ? '已达成(实际 ≥ 目标)' : '未达成(还差 ' + Math.abs(v.gap) + ' 卡)', parts.join(''), true);
285
+ };
178
286
  }
179
- /* ── 体重盘(weight_dashboard.html 对照:首末+均值+变化趋势+目标差距) ── */
180
- export function buildWeightDoc(w) {
181
- const t = w.trend;
182
- const parts = [renderKpiGrid([
183
- { label: '体重盘', value: t.firstWeight + ' → ' + t.lastWeight + ' kg', detail: t.firstDate + ' ~ ' + t.lastDate },
184
- { label: '均值', value: String(t.avgWeight), unit: 'kg', detail: '共 ' + t.recordCount + ' 条 · 极值 ' + t.minWeight + '~' + t.maxWeight },
185
- {
186
- label: '变化', value: (t.changeKg >= 0 ? '+' : '') + t.changeKg + ' kg',
187
- detail: '趋势' + t.trendCn + ' · 日均 ' + t.dailyChangeG + ' g',
188
- },
189
- {
190
- label: '距目标', value: w.gapKg === null ? '—' : (w.gapKg >= 0 ? '+' : '') + w.gapKg + ' kg',
191
- detail: w.weightGoal === null ? '未设体重目标' : '目标 ' + w.weightGoal + ' kg' + (w.deadline ? ' · 截止 ' + w.deadline : ''),
192
- },
193
- ])];
194
- let charts = false;
195
- if (t.logs.length > 0) {
196
- parts.push(renderChartBlock({
197
- kind: 'line',
198
- title: '体重曲线',
199
- input: { items: t.logs.map((l) => ({ label: l.date.slice(5), value: l.weightKg })) },
200
- }));
201
- charts = true;
287
+ /** 运动汇总整页(只读页:数据由调用方 `buildExerciseView` 备齐;零记录走空态指引)。
288
+ * #552 去文(用户裁决“标题无日期;副题元素消失;口径/来源块消失”——见票面判据):
289
+ * 标题只留“运动汇总”(窗口由 windowStrip 承载);副题整行删(传 subtitle:null);
290
+ * 口径/来源整块消失(pageBody [] 与空串)。 */
291
+ export function buildExerciseDoc(v, cmd) {
292
+ const env = summaryEnvelope(v);
293
+ const copy = docCopy(env, cmd ?? commandLine('calorie.view.exercise', { start: v.start, end: v.end }), 'exercise_log(只读汇总)');
294
+ const title = '运动汇总';
295
+ if (v.series.length === 0) {
296
+ // 零窗(装配层构造)=一整页空态指引:不留空 KPI 卡、不出空折线。
297
+ return assembleDocPage({
298
+ docTitle: DOC_TITLE, title, eyebrow: SUMMARY_EYEBROW, subtitle: '本段时间没有运动记录',
299
+ content: exerciseUiCss() + '<section id="sec-empty">' + emptyGuide({
300
+ icon: '🏃', text: '本段时间没有运动记录',
301
+ hint: '先说一句「记运动」把这一次补上,或把窗口换成最近 7 天再看。',
302
+ }) + '</section>',
303
+ printable: true,
304
+ }) + copy;
202
305
  }
203
- parts.push(renderDataTable({
204
- columns: [
205
- { key: 'date', label: '日期' },
206
- { key: 'kg', label: '体重', align: 'right' },
207
- { key: 'note', label: '备注' },
208
- ],
209
- rows: t.logs.map((l) => ({ date: l.date, kg: l.weightKg, note: l.note })),
210
- caption: '体重记录(' + t.firstDate + ' ~ ' + t.lastDate + ',共 ' + t.recordCount + ' 条)',
211
- emptyText: '本窗无体重记录',
212
- }));
213
- parts.push(copyBlock('复制数据', {
214
- envelope: {
215
- version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.weight',
216
- data: {
217
- metrics: metricsOf({
218
- recordCount: t.recordCount, avgWeight: t.avgWeight,
219
- maxWeight: t.maxWeight, minWeight: t.minWeight,
220
- firstWeight: t.firstWeight, lastWeight: t.lastWeight,
221
- changeKg: t.changeKg, dailyChangeG: t.dailyChangeG,
222
- weightGoal: w.weightGoal, gapKg: w.gapKg,
223
- }),
224
- },
225
- },
226
- }));
227
- return assemble('体重盘 ' + w.start + ' ~ ' + w.end, 'calorie.view.weight · 运动身体域', '趋势' + t.trendCn, parts.join(''), charts);
306
+ const cards = summaryCards(v);
307
+ return assembleDocPage({
308
+ docTitle: DOC_TITLE, title, eyebrow: SUMMARY_EYEBROW,
309
+ subtitle: null,
310
+ // 窗口条(#523):起止两枚日期块 天数胶囊,替掉原来挤在副标题/表标题里的 `·` 串。
311
+ // #552 去文:窗口只由 windowStrip 承载(用户裁决“窗口由 windowStrip 承载”——见票面判据)。
312
+ content: windowStrip(v.start, v.end, daysIn(v.start, v.end) + ' 天')
313
+ + pageBody(cards, [], '', copy),
314
+ charts: true, printable: true,
315
+ });
228
316
  }
229
- /* ── 体重历史(weight_history.html 对照:曲线+全量记录表;18 词多窗口子集直出) ── */
230
- export function buildWeightHistoryDoc(h) {
231
- const asc = [...h.rows].reverse();
232
- const parts = [renderKpiGrid([
233
- { label: '体重历史', value: h.range, detail: '共 ' + h.rows.length + ' 条' },
234
- {
235
- label: '变化',
236
- value: h.change ? (h.change.delta >= 0 ? '+' : '') + h.change.delta + ' kg' : '—',
237
- detail: h.change ? h.change.spanDays + ' · 日均 ' + h.change.dailyAvg + ' kg' : '单点无变化',
238
- },
239
- ])];
240
- let charts = false;
241
- if (asc.length > 0) {
242
- parts.push(renderChartBlock({
243
- kind: 'line',
244
- title: '体重曲线',
245
- input: { items: asc.map((r) => ({ label: r.date.slice(5), value: r.weight_kg })) },
246
- }));
247
- charts = true;
248
- }
249
- parts.push(renderDataTable({
250
- columns: [
251
- { key: 'date', label: '日期' },
252
- { key: 'time', label: '时间' },
253
- { key: 'kg', label: '体重', align: 'right' },
254
- { key: 'bmi', label: 'BMI', align: 'right' },
255
- { key: 'note', label: '备注' },
256
- ],
257
- rows: h.rows.map((r) => ({
258
- date: r.date, time: r.time ?? '', kg: r.weight_kg, bmi: r.bmi ?? '', note: r.note ?? '',
259
- })),
260
- caption: '体重历史 ' + h.range + '(共 ' + h.rows.length + ' 条)',
261
- emptyText: '本窗无体重记录',
262
- }));
263
- parts.push(copyBlock('复制数据', {
264
- envelope: {
265
- version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.weight-history',
266
- data: {
267
- metrics: metricsOf({
268
- rows: h.rows.length,
269
- spanDays: h.change?.spanDays, first: h.change?.first, last: h.change?.last,
270
- delta: h.change?.delta, dailyAvg: h.change?.dailyAvg,
271
- }),
272
- },
273
- },
274
- }));
275
- return assemble('体重历史 ' + h.range, 'calorie.view.weight-history · 运动身体域', null, parts.join(''), charts);
317
+ /** 环卡:`min(pct,100)` 给环,实际百分比由文字承载(超额不把环画爆)。
318
+ * #523 返修:环下那行「目标/实际/差距」键值行已撤——这三个数在下方「数值对照」四格各有一处,
319
+ * 环旁只留判决胶囊(同一事实一页一处;「差距/差额」两名一数也随之收成「差额」一名)。
320
+ * 环心只留百分比读数,判语(已达成/还需再练)只住胶囊一处。 */
321
+ function ringCard(v, pct) {
322
+ const deg = Math.max(0, Math.min(100, Math.min(pct, 100)));
323
+ return '<div class="' + part('ring-card') + '">'
324
+ + '<div class="' + part('ring-wrap') + '" role="img" aria-label="运动目标完成度 ' + fmtNum(v.pct) + '%">'
325
+ + '<div style="position:absolute;inset:0;border-radius:50%;background:conic-gradient(var(--blue) 0 ' + deg + '%, var(--line) ' + deg + '% 100%)"></div>'
326
+ + '<div class="' + part('ring-center') + '">'
327
+ + '<div class="' + part('ring-pct') + '">' + fmtNum(v.pct) + '%</div>'
328
+ + '</div></div>'
329
+ + '<div class="' + part('ring-side') + '">'
330
+ + verdictPill(v)
331
+ + '</div></div>';
276
332
  }
277
- /* ── 体重对比(weight_compare.html 对照:两期均值差+节奏+分期明细;18 场景子集直出) ── */
278
- const COMPARE_COLUMNS = [
279
- { key: 'period', label: '期别' },
280
- { key: 'range', label: '区间' },
281
- { key: 'avg', label: '均值', align: 'right' },
282
- { key: 'first', label: '期首', align: 'right' },
283
- { key: 'last', label: '期末', align: 'right' },
284
- { key: 'change', label: '变化', align: 'right' },
285
- ];
286
- export function buildWeightCompareDoc(v) {
287
- const c = v.compare;
288
- const parts = [renderKpiGrid([
289
- {
290
- label: '体重对比', value: (c.avgDiff >= 0 ? '+' : '') + c.avgDiff + ' kg',
291
- detail: c.direction === 'down' ? '下降' : '上升',
292
- },
293
- { label: '本期', value: String(c.currentPeriod.avgWeight), unit: 'kg', detail: v.start + ' ~ ' + v.end },
294
- { label: '对比期', value: String(c.comparePeriod.avgWeight), unit: 'kg', detail: v.compareStart + ' ~ ' + v.compareEnd },
295
- { label: '节奏', value: c.speedLabel },
296
- ])];
297
- const rowOf = (name, s, range) => ({
298
- period: name, range, avg: s.avgWeight, first: s.firstWeight, last: s.lastWeight, change: s.changeKg,
299
- });
300
- parts.push(renderDataTable({
301
- columns: [...COMPARE_COLUMNS],
302
- rows: [
303
- rowOf('本期', c.currentPeriod, v.start + ' ~ ' + v.end),
304
- rowOf('对比期', c.comparePeriod, v.compareStart + ' ~ ' + v.compareEnd),
305
- ],
306
- caption: '两期对比(均值差 ' + (c.avgDiff >= 0 ? '+' : '') + c.avgDiff + ' kg)',
307
- emptyText: '对比期无数据',
308
- }));
309
- parts.push(copyBlock('复制数据', {
310
- envelope: {
311
- version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.weight-compare',
312
- data: {
313
- metrics: {
314
- avgDiff: c.avgDiff,
315
- currentAvg: c.currentPeriod.avgWeight, compareAvg: c.comparePeriod.avgWeight,
316
- currentChange: c.currentPeriod.changeKg, compareChange: c.comparePeriod.changeKg,
317
- },
318
- },
319
- },
320
- }));
321
- return assemble('体重对比', 'calorie.view.weight-compare · 运动身体域', '本期 ' + v.start + ' ~ ' + v.end + ' vs 对比期 ' + v.compareStart + ' ~ ' + v.compareEnd, parts.join(''), false);
333
+ /** 判决胶囊:达成 `ok`/未达成 `no`(两态同一个类的两个档)。 */
334
+ function verdictPill(v) {
335
+ const text = v.achieved ? '✓ 已达成目标' : '✕ 还差 ' + fmtNum(Math.abs(v.gap), 0) + ' 卡';
336
+ return '<span class="' + part('verdict') + ' ' + (v.achieved ? 'ok' : 'no') + '">' + text + '</span>';
322
337
  }
323
- /* ── 体重复核(weight_review.html 对照:当前+目标+差距+预计达成+调整建议) ── */
324
- export function buildWeightReviewDoc(v) {
325
- const m = v.milestone;
326
- const parts = [renderKpiGrid([
327
- { label: '体重复核', value: String(m.currentWeight), unit: 'kg', detail: m.currentDate },
328
- {
329
- label: '目标体重', value: String(m.weightGoal), unit: 'kg',
330
- detail: m.deadline ? '截止 ' + m.deadline : '无截止',
331
- },
332
- { label: '差距', value: (m.gapKg >= 0 ? '+' : '') + m.gapKg + ' kg' },
333
- {
334
- label: '预计达成', value: m.estDate ?? '—',
335
- detail: m.estDays === null || m.estDays === undefined ? m.status : m.estDays + ' 天 · ' + m.status,
336
- },
337
- ])];
338
- parts.push(renderListRows({
339
- items: [
340
- { left: '状态', main: m.status },
341
- {
342
- left: '日均变化', main: m.actualDailyChangeKg === null ? '—(记录不足)' : String(m.actualDailyChangeKg) + ' kg/天',
343
- },
344
- {
345
- left: '热量调整', main: m.calorieAdjustment === null ? '—' : String(m.calorieAdjustment) + ' 卡',
346
- },
347
- ],
348
- }));
349
- parts.push(copyBlock('复制数据', {
350
- envelope: {
351
- version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.weight-review',
352
- data: {
353
- metrics: metricsOf({
354
- currentWeight: m.currentWeight, weightGoal: m.weightGoal,
355
- gapKg: m.gapKg, actualDailyChangeKg: m.actualDailyChangeKg,
356
- estDays: m.estDays, calorieAdjustment: m.calorieAdjustment,
357
- }),
358
- },
359
- },
360
- }));
361
- return assemble('体重复核 ' + v.today, 'calorie.view.weight-review · 运动身体域', m.status, parts.join(''), false);
338
+ /** 目标页数值四格(本页「目标/实际/完成度/差额」唯一的落点:环只给一眼的完成度,逐项对照全在这里)。
339
+ * #523 返修:判决只住胶囊一处(窗口条后的状态徽标与环心判语两处已撤,不再一页三遍);**#602 补题**:本块原只有裸 KPI 卡格、块内无可见标题(终审 #268 §2.6 N1 的页枚举漏了 23/24 两页),现照同件 `sec-kpi`/`sec-dist` 同形,把题作为 `<section>` 首个子节点补上——题词与页内导航同源(都取 `card()` 的 label「数值对照」,两处不会走散),风格同档(15px/700)。 */
340
+ function goalFigures(v, goalTotal) {
341
+ return renderKpiGrid([
342
+ { label: '目标', value: fmtNum(goalTotal, 0), unit: '' },
343
+ { label: '实际', value: fmtNum(v.actual, 0), unit: '卡' },
344
+ { label: '完成度', value: fmtNum(v.pct) + '%', detail: '环最高画到 100%' },
345
+ { label: '差额', value: fmtNum(Math.abs(v.gap), 0), unit: '卡', detail: v.gap >= 0 ? '超出目标' : '还差这么多' },
346
+ ]);
362
347
  }
363
- /* ── 波动分析(weight_volatility_v2.html 对照:基线+阈值+预警+异常点) ── */
364
- export function buildVolatilityDoc(v) {
365
- const o = v.volatility;
366
- const parts = [renderKpiGrid([
367
- { label: '波动分析', value: '基线 ' + o.baselineValue + ' kg', detail: o.baselineToggleLabel },
368
- {
369
- label: '阈值', value: '黄±' + o.thresholds.yellow + ' 红±' + o.thresholds.red + ' kg',
370
- detail: 'σ=' + o.baselineSigma + 'kg · ' + v.baselineMode + '基线',
371
- },
372
- { label: '预警', value: o.earlyWarning.level, detail: o.earlyWarning.message },
373
- {
374
- label: '近期异常', value: String(o.recentAnomalies.length), unit: '个',
375
- detail: '共 ' + o.points.length + ' 点',
376
- },
377
- ])];
378
- let charts = false;
379
- if (o.points.length > 0) {
380
- parts.push(renderChartBlock({
381
- kind: 'line',
382
- title: '偏离基线',
383
- input: { items: o.points.map((p) => ({ label: p.date.slice(5), value: p.deviationKg })) },
384
- }));
385
- charts = true;
386
- }
387
- parts.push(renderDataTable({
388
- columns: [
389
- { key: 'date', label: '日期' },
390
- { key: 'kg', label: '体重', align: 'right' },
391
- { key: 'dev', label: '偏离', align: 'right' },
392
- { key: 'level', label: '级别' },
393
- ],
394
- rows: o.recentAnomalies.map((p) => ({ date: p.date, kg: p.kg, dev: p.deviationKg, level: p.level })),
395
- caption: '近期异常点(共 ' + o.recentAnomalies.length + ' 个,黄/红阈上)',
396
- emptyText: '近期无异常点(基线 ' + o.baselineValue + ' kg,黄±' + o.thresholds.yellow + ' 红±' + o.thresholds.red + ')',
397
- }));
398
- parts.push(copyBlock('复制数据', {
399
- envelope: {
400
- version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: 'calorie.view.volatility',
401
- data: {
402
- metrics: {
403
- baselineValue: o.baselineValue, baselineSigma: o.baselineSigma,
404
- yellow: o.thresholds.yellow, red: o.thresholds.red,
405
- points: o.points.length, anomalies: o.recentAnomalies.length,
406
- deviationKg: o.earlyWarning.deviationKg,
407
- },
408
- },
409
- },
410
- }));
411
- return assemble('波动分析 ' + v.start + ' ~ ' + v.end, 'calorie.view.volatility · 运动身体域', o.earlyWarning.message, parts.join(''), charts);
348
+ /** 周口径那句:**全仓只在本件算一处(days === 7 时才对周口径负责)、写一处**。
349
+ * 返回 `null` = 本窗不是整周,不出这句(免得把日口径页也印成周口径)。 */
350
+ function weekCaliberLine(v, goalTotal) {
351
+ if (v.days !== 7)
352
+ return null;
353
+ return '周目标口径=每日目标 × 7:每日目标 ' + fmtNum(v.dailyGoal, 0) + ' 卡 × 7 = ' + fmtNum(goalTotal, 0) + ' 卡';
412
354
  }
413
- /* ── 体成分(body_composition_view.html 对照:来源筛选+趋势+记录表+复制) ── */
414
- export function buildBodyCompositionDoc(v) {
355
+ /** 目标页口径行(#523 一条事实一行;周口径那句只走这里一处)。 */
356
+ function goalCalibers(v, goalTotal) {
415
357
  const parts = [
416
- renderParamForm({
417
- fields: [{ name: 'source', label: '来源', value: v.source ?? '' }],
418
- description: '按来源筛选体成分(空=全部;趋势默认最近来源;对比两期归组合分析)',
419
- }),
420
- renderKpiGrid([
421
- { label: '体成分看', value: v.source ?? '全部来源', detail: '共 ' + v.total + ' 条' },
422
- { label: '最新体脂', value: v.latestPct === null ? '—' : String(v.latestPct) + '%' },
423
- { label: '趋势点', value: String(v.trend.length), unit: '天' },
424
- ]),
358
+ '完成度=实际 ÷ 目标',
359
+ '差额=实际 目标',
360
+ '每日目标 ' + fmtNum(v.dailyGoal, 0) + ' 卡',
425
361
  ];
426
- let charts = false;
427
- if (v.trend.length > 0) {
428
- parts.push(renderChartBlock({
429
- kind: 'line',
430
- title: '体脂趋势',
431
- input: { items: v.trend.map((t) => ({ label: t.date.slice(5), value: t.avgPct })) },
432
- }));
433
- charts = true;
362
+ if (goalTotal !== null) {
363
+ const week = weekCaliberLine(v, goalTotal);
364
+ if (week !== null)
365
+ parts.push(week);
434
366
  }
435
- const rows = v.items.map((r) => {
436
- const d = r;
437
- return {
438
- date: typeof d.date === 'string' ? d.date : '',
439
- pct: typeof d.body_fat_pct === 'number' ? d.body_fat_pct : '',
440
- source: typeof d.source === 'string' ? d.source : '',
441
- note: typeof d.note === 'string' ? d.note : '',
442
- };
443
- });
444
- parts.push(renderDataTable({
445
- columns: [
446
- { key: 'date', label: '日期' },
447
- { key: 'pct', label: '体脂', align: 'right' },
448
- { key: 'source', label: '来源' },
449
- { key: 'note', label: '备注' },
450
- ],
451
- rows,
452
- caption: '体成分记录(共 ' + v.total + ' 条)',
453
- emptyText: '无体成分记录',
454
- }));
455
- parts.push(copyBlock('复制数据', {
456
- envelope: {
457
- version: DOC_VERSION, skill: DOC_SKILL, shape: 'list', key: 'calorie.view.body-composition',
458
- data: { items: rows, total: v.total },
459
- },
460
- }));
461
- return assemble('体成分看', 'calorie.view.body-composition · 运动身体域', null, parts.join(''), charts);
367
+ return parts;
462
368
  }
463
- /* ── 围度(body_measurements_view.html 对照:项目筛选+趋势+记录表+复制,13 项) ── */
464
- const MEASURE_ZH = {
465
- chest_cm: '胸围', waist_cm: '腰围', abdomen_cm: '腹围', hip_cm: '臀围',
466
- left_thigh_cm: '左大腿', right_thigh_cm: '右大腿', left_calf_cm: '左小腿', right_calf_cm: '右小腿',
467
- left_arm_cm: '左上臂', right_arm_cm: '右上臂', left_forearm_cm: '左前臂', right_forearm_cm: '右前臂',
468
- shoulder_cm: '肩宽',
469
- };
470
- export function buildBodyMeasureDoc(v) {
471
- const parts = [
472
- renderParamForm({
473
- fields: [{ name: 'metric', label: '围度项', value: v.metric ?? '' }],
474
- description: '13 围度项按名筛选(空=全部;趋势需指定单项;两期对比归组合分析)',
475
- }),
476
- renderKpiGrid([
477
- { label: '围度看', value: v.metric ? (MEASURE_ZH[v.metric] ?? v.metric) : '全部围度', detail: '共 ' + v.total + ' 条' },
478
- { label: '最新', value: v.latestVal === null ? '—' : String(v.latestVal) + 'cm', detail: v.metric ? (MEASURE_ZH[v.metric] ?? v.metric) : '' },
479
- { label: '趋势点', value: String(v.trend.length), unit: '天' },
480
- ]),
481
- ];
482
- let charts = false;
483
- if (v.metric && v.trend.length > 0) {
484
- parts.push(renderChartBlock({
485
- kind: 'line',
486
- title: (MEASURE_ZH[v.metric] ?? v.metric) + '趋势',
487
- input: { items: v.trend.map((t) => ({ label: t.date.slice(5), value: t.avgVal })) },
488
- }));
489
- charts = true;
490
- }
491
- if (v.metric) {
492
- const mkey = v.metric;
493
- parts.push(renderDataTable({
494
- columns: [
495
- { key: 'date', label: '日期' },
496
- { key: 'val', label: (MEASURE_ZH[mkey] ?? mkey) + '(cm)', align: 'right' },
497
- { key: 'note', label: '备注' },
498
- ],
499
- rows: v.items.map((r) => {
500
- const val = r[mkey];
501
- return {
502
- date: typeof r['date'] === 'string' ? r['date'] : '',
503
- val: typeof val === 'number' ? val : '',
504
- note: typeof r['note'] === 'string' ? r['note'] : '',
505
- };
369
+ function goalEnvelope(v) {
370
+ return {
371
+ version: DOC_VERSION, skill: DOC_SKILL, shape: 'stat', key: '运动目标',
372
+ data: {
373
+ metrics: metricsOf({
374
+ dailyGoal: v.dailyGoal, goalTotal: v.goalTotal, actual: v.actual,
375
+ pct: v.pct, gap: v.gap, achieved: v.achieved ? 1 : 0, days: v.days,
506
376
  }),
507
- caption: (MEASURE_ZH[mkey] ?? mkey) + '记录(共 ' + v.total + ' 条)',
508
- emptyText: '该项目无记录',
509
- }));
510
- }
511
- else {
512
- const numOrEmpty = (x) => (typeof x === 'number' ? x : '');
513
- const strOrEmpty = (x) => (typeof x === 'string' ? x : '');
514
- parts.push(renderDataTable({
515
- columns: [
516
- { key: 'date', label: '日期' },
517
- { key: 'chest', label: '胸', align: 'right' },
518
- { key: 'waist', label: '腰', align: 'right' },
519
- { key: 'abdomen', label: '腹', align: 'right' },
520
- { key: 'hip', label: '臀', align: 'right' },
521
- { key: 'note', label: '备注' },
522
- ],
523
- rows: v.items.map((r) => ({
524
- date: strOrEmpty(r['date']), chest: numOrEmpty(r['chest_cm']), waist: numOrEmpty(r['waist_cm']),
525
- abdomen: numOrEmpty(r['abdomen_cm']), hip: numOrEmpty(r['hip_cm']), note: strOrEmpty(r['note']),
526
- })),
527
- caption: '围度记录(共 ' + v.total + ' 条;全量 13 项见复制数据)',
528
- emptyText: '无围度记录',
529
- }));
530
- }
531
- const rows = v.items.map((r) => ({ ...r }));
532
- parts.push(copyBlock('复制数据', {
533
- envelope: {
534
- version: DOC_VERSION, skill: DOC_SKILL, shape: 'list', key: 'calorie.view.body-measure',
535
- data: { items: rows, total: v.total },
536
377
  },
537
- }));
538
- return assemble('围度看', 'calorie.view.body-measure · 运动身体域', null, parts.join(''), charts);
378
+ };
379
+ }
380
+ /** 运动目标整页:目标缺席(`goalTotal`/`pct` 为 `null`)=专门空态、**不画空环**;
381
+ * 有目标=环卡(`min(pct,100)`)+判决胶囊两态+差距文案。 */
382
+ export function buildExerciseGoalDoc(v, cmd) {
383
+ const env = goalEnvelope(v);
384
+ const copy = docCopy(env, cmd ?? commandLine('calorie.view.exercise-goal', { start: v.start, end: v.end }), v.source ?? 'daily_goal + exercise_log(只读对照)');
385
+ // #523 返修 R3:单日窗原来印成「运动目标 2026-09-15 ~ 2026-09-15」——同一天在 H1 里写两遍
386
+ // (窗口条与来源脚注再各一份,视觉复评 R2 记 −3)。起止同日只印一次,与窗口条的退化分支同口径。
387
+ const title = '运动目标 ' + (v.start === v.end ? v.start : rangeText(v.start, v.end));
388
+ if (v.goalTotal === null || v.pct === null) {
389
+ return assembleDocPage({
390
+ docTitle: DOC_TITLE, title, eyebrow: GOAL_EYEBROW, subtitle: '还没设每日运动消耗目标',
391
+ content: exerciseUiCss() + '<section id="sec-empty">' + emptyGuide({
392
+ icon: '🎯', text: '还没设每日运动消耗目标',
393
+ hint: '先说一句「定营养目标」把每日运动消耗目标定下来,再看这张对照页。',
394
+ }) + '</section>',
395
+ printable: true,
396
+ }) + copy;
397
+ }
398
+ const goalTotal = v.goalTotal;
399
+ const cards = [
400
+ card('sec-ring', '目标环', ringCard(v, v.pct)),
401
+ card('sec-figures', '数值对照', '<h2 style="margin:0;font-size:15px;font-weight:700">数值对照</h2>' + goalFigures(v, goalTotal)),
402
+ ];
403
+ const source = footFacts(SOURCE_GOAL, v.start, v.end, v.days);
404
+ return assembleDocPage({
405
+ docTitle: DOC_TITLE, title, eyebrow: GOAL_EYEBROW,
406
+ subtitle: '这段时间的运动消耗与每日目标的对照',
407
+ content: windowStrip(v.start, v.end, v.days + ' 天')
408
+ + pageBody(cards, goalCalibers(v, goalTotal), source, copy),
409
+ printable: true,
410
+ });
539
411
  }
412
+ /* ── 身体两页已迁出(#353):体成分/围度整页文档原样迁入 `src/body/bodyDocs.ts`,本件只留运动页。 ── */
540
413
  //# sourceMappingURL=sportDocs.js.map