skill-home 0.3.1 → 0.3.12

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 (477) hide show
  1. package/SKILL.md +96 -52
  2. package/dist/cli/cmd_read.js +59 -778
  3. package/dist/cli/cmd_read.js.map +1 -1
  4. package/dist/cli/keys.d.ts +4 -0
  5. package/dist/cli/keys.d.ts.map +1 -0
  6. package/dist/cli/keys.js +51 -0
  7. package/dist/cli/keys.js.map +1 -0
  8. package/dist/cli/registry.d.ts +4 -0
  9. package/dist/cli/registry.d.ts.map +1 -0
  10. package/dist/cli/registry.js +30 -0
  11. package/dist/cli/registry.js.map +1 -0
  12. package/dist/express/commands.d.ts +3 -0
  13. package/dist/express/commands.d.ts.map +1 -0
  14. package/dist/express/commands.js +6 -0
  15. package/dist/express/commands.js.map +1 -0
  16. package/dist/express/index.d.ts +3 -0
  17. package/dist/express/index.d.ts.map +1 -0
  18. package/dist/express/index.js +4 -0
  19. package/dist/express/index.js.map +1 -0
  20. package/dist/express/pages/express.d.ts +21 -0
  21. package/dist/express/pages/express.d.ts.map +1 -0
  22. package/dist/express/pages/express.js +156 -0
  23. package/dist/express/pages/express.js.map +1 -0
  24. package/dist/express/pages/list.d.ts +21 -0
  25. package/dist/express/pages/list.d.ts.map +1 -0
  26. package/dist/express/pages/list.js +161 -0
  27. package/dist/express/pages/list.js.map +1 -0
  28. package/dist/express/pages/missing.d.ts +21 -0
  29. package/dist/express/pages/missing.d.ts.map +1 -0
  30. package/dist/express/pages/missing.js +141 -0
  31. package/dist/express/pages/missing.js.map +1 -0
  32. package/dist/express/pages/stock.d.ts +21 -0
  33. package/dist/express/pages/stock.d.ts.map +1 -0
  34. package/dist/express/pages/stock.js +164 -0
  35. package/dist/express/pages/stock.js.map +1 -0
  36. package/dist/express/routes.d.ts +3 -0
  37. package/dist/express/routes.d.ts.map +1 -0
  38. package/dist/express/routes.js +8 -0
  39. package/dist/express/routes.js.map +1 -0
  40. package/dist/express/shopping.d.ts +4 -0
  41. package/dist/express/shopping.d.ts.map +1 -0
  42. package/dist/express/shopping.js +143 -0
  43. package/dist/express/shopping.js.map +1 -0
  44. package/dist/family/care.d.ts +4 -0
  45. package/dist/family/care.d.ts.map +1 -0
  46. package/dist/family/care.js +103 -0
  47. package/dist/family/care.js.map +1 -0
  48. package/dist/family/commands.d.ts +3 -0
  49. package/dist/family/commands.d.ts.map +1 -0
  50. package/dist/family/commands.js +6 -0
  51. package/dist/family/commands.js.map +1 -0
  52. package/dist/family/index.d.ts +3 -0
  53. package/dist/family/index.d.ts.map +1 -0
  54. package/dist/family/index.js +4 -0
  55. package/dist/family/index.js.map +1 -0
  56. package/dist/family/pages/family_borrow.d.ts +21 -0
  57. package/dist/family/pages/family_borrow.d.ts.map +1 -0
  58. package/dist/family/pages/family_borrow.js +267 -0
  59. package/dist/family/pages/family_borrow.js.map +1 -0
  60. package/dist/family/pages/family_members.d.ts +21 -0
  61. package/dist/family/pages/family_members.d.ts.map +1 -0
  62. package/dist/family/pages/family_members.js +171 -0
  63. package/dist/family/pages/family_members.js.map +1 -0
  64. package/dist/family/routes.d.ts +3 -0
  65. package/dist/family/routes.d.ts.map +1 -0
  66. package/dist/family/routes.js +20 -0
  67. package/dist/family/routes.js.map +1 -0
  68. package/dist/fetch/db.d.ts.map +1 -1
  69. package/dist/fetch/db.js +9 -1
  70. package/dist/fetch/db.js.map +1 -1
  71. package/dist/fetch/domains.d.ts +3 -0
  72. package/dist/fetch/domains.d.ts.map +1 -1
  73. package/dist/fetch/domains.js +5 -4
  74. package/dist/fetch/domains.js.map +1 -1
  75. package/dist/fetch/index.d.ts +1 -0
  76. package/dist/fetch/index.d.ts.map +1 -1
  77. package/dist/fetch/index.js +1 -0
  78. package/dist/fetch/index.js.map +1 -1
  79. package/dist/help/helpAssets.js +1 -1
  80. package/dist/items/add.d.ts +3 -0
  81. package/dist/items/add.d.ts.map +1 -0
  82. package/dist/items/add.js +34 -0
  83. package/dist/items/add.js.map +1 -0
  84. package/dist/items/commands.d.ts +3 -0
  85. package/dist/items/commands.d.ts.map +1 -0
  86. package/dist/items/commands.js +22 -0
  87. package/dist/items/commands.js.map +1 -0
  88. package/dist/items/detail.d.ts +3 -0
  89. package/dist/items/detail.d.ts.map +1 -0
  90. package/dist/items/detail.js +31 -0
  91. package/dist/items/detail.js.map +1 -0
  92. package/dist/items/index.d.ts +3 -0
  93. package/dist/items/index.d.ts.map +1 -0
  94. package/dist/items/index.js +4 -0
  95. package/dist/items/index.js.map +1 -0
  96. package/dist/items/inventory.d.ts +4 -0
  97. package/dist/items/inventory.d.ts.map +1 -0
  98. package/dist/items/inventory.js +41 -0
  99. package/dist/items/inventory.js.map +1 -0
  100. package/dist/items/pages/add_form.d.ts +21 -0
  101. package/dist/items/pages/add_form.d.ts.map +1 -0
  102. package/dist/items/pages/add_form.js +169 -0
  103. package/dist/items/pages/add_form.js.map +1 -0
  104. package/dist/items/pages/browse.d.ts +21 -0
  105. package/dist/items/pages/browse.d.ts.map +1 -0
  106. package/dist/items/pages/browse.js +143 -0
  107. package/dist/items/pages/browse.js.map +1 -0
  108. package/dist/items/pages/category_manage.d.ts +21 -0
  109. package/dist/items/pages/category_manage.d.ts.map +1 -0
  110. package/dist/items/pages/category_manage.js +153 -0
  111. package/dist/items/pages/category_manage.js.map +1 -0
  112. package/dist/items/pages/confirm.d.ts +21 -0
  113. package/dist/items/pages/confirm.d.ts.map +1 -0
  114. package/dist/items/pages/confirm.js +147 -0
  115. package/dist/items/pages/confirm.js.map +1 -0
  116. package/dist/items/pages/detail.d.ts +21 -0
  117. package/dist/items/pages/detail.d.ts.map +1 -0
  118. package/dist/items/pages/detail.js +160 -0
  119. package/dist/items/pages/detail.js.map +1 -0
  120. package/dist/items/pages/duplicates.d.ts +21 -0
  121. package/dist/items/pages/duplicates.d.ts.map +1 -0
  122. package/dist/items/pages/duplicates.js +138 -0
  123. package/dist/items/pages/duplicates.js.map +1 -0
  124. package/dist/items/pages/history.d.ts +21 -0
  125. package/dist/items/pages/history.d.ts.map +1 -0
  126. package/dist/items/pages/history.js +213 -0
  127. package/dist/items/pages/history.js.map +1 -0
  128. package/dist/items/pages/inventory_diff.d.ts +21 -0
  129. package/dist/items/pages/inventory_diff.d.ts.map +1 -0
  130. package/dist/items/pages/inventory_diff.js +126 -0
  131. package/dist/items/pages/inventory_diff.js.map +1 -0
  132. package/dist/items/pages/inventory_records.d.ts +21 -0
  133. package/dist/items/pages/inventory_records.d.ts.map +1 -0
  134. package/dist/items/pages/inventory_records.js +142 -0
  135. package/dist/items/pages/inventory_records.js.map +1 -0
  136. package/dist/items/pages/inventory_round.d.ts +21 -0
  137. package/dist/items/pages/inventory_round.d.ts.map +1 -0
  138. package/dist/items/pages/inventory_round.js +145 -0
  139. package/dist/items/pages/inventory_round.js.map +1 -0
  140. package/dist/items/pages/locate.d.ts +21 -0
  141. package/dist/items/pages/locate.d.ts.map +1 -0
  142. package/dist/items/pages/locate.js +126 -0
  143. package/dist/items/pages/locate.js.map +1 -0
  144. package/dist/items/pages/move_checklist.d.ts +21 -0
  145. package/dist/items/pages/move_checklist.d.ts.map +1 -0
  146. package/dist/items/pages/move_checklist.js +112 -0
  147. package/dist/items/pages/move_checklist.js.map +1 -0
  148. package/dist/items/pages/photo_wall.d.ts +21 -0
  149. package/dist/items/pages/photo_wall.d.ts.map +1 -0
  150. package/dist/items/pages/photo_wall.js +145 -0
  151. package/dist/items/pages/photo_wall.js.map +1 -0
  152. package/dist/items/pages/photos.d.ts +21 -0
  153. package/dist/items/pages/photos.d.ts.map +1 -0
  154. package/dist/items/pages/photos.js +180 -0
  155. package/dist/items/pages/photos.js.map +1 -0
  156. package/dist/items/pages/receipt.d.ts +21 -0
  157. package/dist/items/pages/receipt.d.ts.map +1 -0
  158. package/dist/items/pages/receipt.js +252 -0
  159. package/dist/items/pages/receipt.js.map +1 -0
  160. package/dist/items/pages/relations.d.ts +21 -0
  161. package/dist/items/pages/relations.d.ts.map +1 -0
  162. package/dist/items/pages/relations.js +144 -0
  163. package/dist/items/pages/relations.js.map +1 -0
  164. package/dist/items/pages/search_list.d.ts +21 -0
  165. package/dist/items/pages/search_list.d.ts.map +1 -0
  166. package/dist/items/pages/search_list.js +133 -0
  167. package/dist/items/pages/search_list.js.map +1 -0
  168. package/dist/items/pages/tag_manage.d.ts +21 -0
  169. package/dist/items/pages/tag_manage.d.ts.map +1 -0
  170. package/dist/items/pages/tag_manage.js +213 -0
  171. package/dist/items/pages/tag_manage.js.map +1 -0
  172. package/dist/items/pages/undo_select.d.ts +21 -0
  173. package/dist/items/pages/undo_select.d.ts.map +1 -0
  174. package/dist/items/pages/undo_select.js +143 -0
  175. package/dist/items/pages/undo_select.js.map +1 -0
  176. package/dist/items/routes.d.ts +3 -0
  177. package/dist/items/routes.d.ts.map +1 -0
  178. package/dist/items/routes.js +62 -0
  179. package/dist/items/routes.js.map +1 -0
  180. package/dist/items/search.d.ts +3 -0
  181. package/dist/items/search.d.ts.map +1 -0
  182. package/dist/items/search.js +47 -0
  183. package/dist/items/search.js.map +1 -0
  184. package/dist/items/tag.d.ts +25 -0
  185. package/dist/items/tag.d.ts.map +1 -0
  186. package/dist/items/tag.js +133 -0
  187. package/dist/items/tag.js.map +1 -0
  188. package/dist/items/update.d.ts +20 -0
  189. package/dist/items/update.d.ts.map +1 -0
  190. package/dist/items/update.js +211 -0
  191. package/dist/items/update.js.map +1 -0
  192. package/dist/outfit/commands.d.ts +3 -0
  193. package/dist/outfit/commands.d.ts.map +1 -0
  194. package/dist/outfit/commands.js +7 -0
  195. package/dist/outfit/commands.js.map +1 -0
  196. package/dist/outfit/index.d.ts +3 -0
  197. package/dist/outfit/index.d.ts.map +1 -0
  198. package/dist/outfit/index.js +4 -0
  199. package/dist/outfit/index.js.map +1 -0
  200. package/dist/outfit/outfit.d.ts +3 -0
  201. package/dist/outfit/outfit.d.ts.map +1 -0
  202. package/dist/outfit/outfit.js +182 -0
  203. package/dist/outfit/outfit.js.map +1 -0
  204. package/dist/outfit/pages/outfit_picker.d.ts +21 -0
  205. package/dist/outfit/pages/outfit_picker.d.ts.map +1 -0
  206. package/dist/outfit/pages/outfit_picker.js +185 -0
  207. package/dist/outfit/pages/outfit_picker.js.map +1 -0
  208. package/dist/outfit/pages/travel_trip.d.ts +21 -0
  209. package/dist/outfit/pages/travel_trip.d.ts.map +1 -0
  210. package/dist/outfit/pages/travel_trip.js +185 -0
  211. package/dist/outfit/pages/travel_trip.js.map +1 -0
  212. package/dist/outfit/pages/trip_outfit_plan.d.ts +21 -0
  213. package/dist/outfit/pages/trip_outfit_plan.d.ts.map +1 -0
  214. package/dist/outfit/pages/trip_outfit_plan.js +173 -0
  215. package/dist/outfit/pages/trip_outfit_plan.js.map +1 -0
  216. package/dist/outfit/pages/wardrobe_analyze.d.ts +21 -0
  217. package/dist/outfit/pages/wardrobe_analyze.d.ts.map +1 -0
  218. package/dist/outfit/pages/wardrobe_analyze.js +171 -0
  219. package/dist/outfit/pages/wardrobe_analyze.js.map +1 -0
  220. package/dist/outfit/pages/wardrobe_season.d.ts +21 -0
  221. package/dist/outfit/pages/wardrobe_season.d.ts.map +1 -0
  222. package/dist/outfit/pages/wardrobe_season.js +167 -0
  223. package/dist/outfit/pages/wardrobe_season.js.map +1 -0
  224. package/dist/outfit/routes.d.ts +3 -0
  225. package/dist/outfit/routes.d.ts.map +1 -0
  226. package/dist/outfit/routes.js +9 -0
  227. package/dist/outfit/routes.js.map +1 -0
  228. package/dist/outfit/trip.d.ts +3 -0
  229. package/dist/outfit/trip.d.ts.map +1 -0
  230. package/dist/outfit/trip.js +59 -0
  231. package/dist/outfit/trip.js.map +1 -0
  232. package/dist/output.d.ts +13 -0
  233. package/dist/output.d.ts.map +1 -0
  234. package/dist/output.js +57 -0
  235. package/dist/output.js.map +1 -0
  236. package/dist/policy/routes.generated.d.ts +3 -0
  237. package/dist/policy/routes.generated.d.ts.map +1 -0
  238. package/dist/policy/routes.generated.js +128 -0
  239. package/dist/policy/routes.generated.js.map +1 -0
  240. package/dist/policy/wakewords.d.ts +1 -0
  241. package/dist/policy/wakewords.d.ts.map +1 -1
  242. package/dist/policy/wakewords.js +11 -93
  243. package/dist/policy/wakewords.js.map +1 -1
  244. package/dist/receipt/commands.d.ts +3 -0
  245. package/dist/receipt/commands.d.ts.map +1 -0
  246. package/dist/receipt/commands.js +6 -0
  247. package/dist/receipt/commands.js.map +1 -0
  248. package/dist/receipt/index.d.ts +3 -0
  249. package/dist/receipt/index.d.ts.map +1 -0
  250. package/dist/receipt/index.js +4 -0
  251. package/dist/receipt/index.js.map +1 -0
  252. package/dist/receipt/pages/accounts.d.ts +21 -0
  253. package/dist/receipt/pages/accounts.d.ts.map +1 -0
  254. package/dist/receipt/pages/accounts.js +217 -0
  255. package/dist/receipt/pages/accounts.js.map +1 -0
  256. package/dist/receipt/pages/certificates.d.ts +21 -0
  257. package/dist/receipt/pages/certificates.d.ts.map +1 -0
  258. package/dist/receipt/pages/certificates.js +236 -0
  259. package/dist/receipt/pages/certificates.js.map +1 -0
  260. package/dist/receipt/pages/purchase_records.d.ts +21 -0
  261. package/dist/receipt/pages/purchase_records.d.ts.map +1 -0
  262. package/dist/receipt/pages/purchase_records.js +250 -0
  263. package/dist/receipt/pages/purchase_records.js.map +1 -0
  264. package/dist/receipt/pages/warranty.d.ts +21 -0
  265. package/dist/receipt/pages/warranty.d.ts.map +1 -0
  266. package/dist/receipt/pages/warranty.js +142 -0
  267. package/dist/receipt/pages/warranty.js.map +1 -0
  268. package/dist/receipt/routes.d.ts +3 -0
  269. package/dist/receipt/routes.d.ts.map +1 -0
  270. package/dist/receipt/routes.js +21 -0
  271. package/dist/receipt/routes.js.map +1 -0
  272. package/dist/receipt/ticket.d.ts +4 -0
  273. package/dist/receipt/ticket.d.ts.map +1 -0
  274. package/dist/receipt/ticket.js +173 -0
  275. package/dist/receipt/ticket.js.map +1 -0
  276. package/dist/render/copyArea.d.ts +45 -0
  277. package/dist/render/copyArea.d.ts.map +1 -0
  278. package/dist/render/copyArea.js +74 -0
  279. package/dist/render/copyArea.js.map +1 -0
  280. package/dist/render/envelope.d.ts.map +1 -1
  281. package/dist/render/envelope.js +4 -23
  282. package/dist/render/envelope.js.map +1 -1
  283. package/dist/render/errors.d.ts +1 -1
  284. package/dist/render/errors.d.ts.map +1 -1
  285. package/dist/render/errors.js.map +1 -1
  286. package/dist/render/familyPage.d.ts +20 -0
  287. package/dist/render/familyPage.d.ts.map +1 -0
  288. package/dist/render/familyPage.js +108 -0
  289. package/dist/render/familyPage.js.map +1 -0
  290. package/dist/render/html.d.ts +7 -2
  291. package/dist/render/html.d.ts.map +1 -1
  292. package/dist/render/html.js +21 -5
  293. package/dist/render/html.js.map +1 -1
  294. package/dist/render/index.d.ts +7 -1
  295. package/dist/render/index.d.ts.map +1 -1
  296. package/dist/render/index.js +8 -1
  297. package/dist/render/index.js.map +1 -1
  298. package/dist/render/pageFamilies.d.ts +8 -0
  299. package/dist/render/pageFamilies.d.ts.map +1 -0
  300. package/dist/render/pageFamilies.js +169 -0
  301. package/dist/render/pageFamilies.js.map +1 -0
  302. package/dist/render/sceneNaming.d.ts +14 -0
  303. package/dist/render/sceneNaming.d.ts.map +1 -0
  304. package/dist/render/sceneNaming.js +171 -0
  305. package/dist/render/sceneNaming.js.map +1 -0
  306. package/dist/setup/commands.d.ts +3 -0
  307. package/dist/setup/commands.d.ts.map +1 -0
  308. package/dist/setup/commands.js +9 -0
  309. package/dist/setup/commands.js.map +1 -0
  310. package/dist/setup/index.d.ts +3 -0
  311. package/dist/setup/index.d.ts.map +1 -0
  312. package/dist/setup/index.js +4 -0
  313. package/dist/setup/index.js.map +1 -0
  314. package/dist/setup/pages/backup_receipt.d.ts +21 -0
  315. package/dist/setup/pages/backup_receipt.d.ts.map +1 -0
  316. package/dist/setup/pages/backup_receipt.js +198 -0
  317. package/dist/setup/pages/backup_receipt.js.map +1 -0
  318. package/dist/setup/pages/first_use_wizard.d.ts +21 -0
  319. package/dist/setup/pages/first_use_wizard.d.ts.map +1 -0
  320. package/dist/setup/pages/first_use_wizard.js +169 -0
  321. package/dist/setup/pages/first_use_wizard.js.map +1 -0
  322. package/dist/setup/pages/health_report.d.ts +21 -0
  323. package/dist/setup/pages/health_report.d.ts.map +1 -0
  324. package/dist/setup/pages/health_report.js +152 -0
  325. package/dist/setup/pages/health_report.js.map +1 -0
  326. package/dist/setup/pages/import_restore.d.ts +21 -0
  327. package/dist/setup/pages/import_restore.d.ts.map +1 -0
  328. package/dist/setup/pages/import_restore.js +179 -0
  329. package/dist/setup/pages/import_restore.js.map +1 -0
  330. package/dist/setup/routes.d.ts +3 -0
  331. package/dist/setup/routes.d.ts.map +1 -0
  332. package/dist/setup/routes.js +2 -0
  333. package/dist/setup/routes.js.map +1 -0
  334. package/dist/shared/commandSpec.d.ts +30 -0
  335. package/dist/shared/commandSpec.d.ts.map +1 -0
  336. package/dist/shared/commandSpec.js +8 -0
  337. package/dist/shared/commandSpec.js.map +1 -0
  338. package/dist/shared/fail.d.ts +4 -0
  339. package/dist/shared/fail.d.ts.map +1 -0
  340. package/dist/shared/fail.js +16 -0
  341. package/dist/shared/fail.js.map +1 -0
  342. package/dist/shared/params.d.ts +2 -0
  343. package/dist/shared/params.d.ts.map +1 -0
  344. package/dist/shared/params.js +12 -0
  345. package/dist/shared/params.js.map +1 -0
  346. package/dist/space/commands.d.ts +3 -0
  347. package/dist/space/commands.d.ts.map +1 -0
  348. package/dist/space/commands.js +6 -0
  349. package/dist/space/commands.js.map +1 -0
  350. package/dist/space/index.d.ts +3 -0
  351. package/dist/space/index.d.ts.map +1 -0
  352. package/dist/space/index.js +4 -0
  353. package/dist/space/index.js.map +1 -0
  354. package/dist/space/location.d.ts +82 -0
  355. package/dist/space/location.d.ts.map +1 -0
  356. package/dist/space/location.js +310 -0
  357. package/dist/space/location.js.map +1 -0
  358. package/dist/space/pages/fixed_spot.d.ts +21 -0
  359. package/dist/space/pages/fixed_spot.d.ts.map +1 -0
  360. package/dist/space/pages/fixed_spot.js +122 -0
  361. package/dist/space/pages/fixed_spot.js.map +1 -0
  362. package/dist/space/pages/location_manage.d.ts +21 -0
  363. package/dist/space/pages/location_manage.d.ts.map +1 -0
  364. package/dist/space/pages/location_manage.js +169 -0
  365. package/dist/space/pages/location_manage.js.map +1 -0
  366. package/dist/space/pages/space_view.d.ts +21 -0
  367. package/dist/space/pages/space_view.d.ts.map +1 -0
  368. package/dist/space/pages/space_view.js +185 -0
  369. package/dist/space/pages/space_view.js.map +1 -0
  370. package/dist/space/pages/suggest_storage.d.ts +21 -0
  371. package/dist/space/pages/suggest_storage.d.ts.map +1 -0
  372. package/dist/space/pages/suggest_storage.js +179 -0
  373. package/dist/space/pages/suggest_storage.js.map +1 -0
  374. package/dist/space/routes.d.ts +3 -0
  375. package/dist/space/routes.d.ts.map +1 -0
  376. package/dist/space/routes.js +24 -0
  377. package/dist/space/routes.js.map +1 -0
  378. package/dist/stats/commands.d.ts +3 -0
  379. package/dist/stats/commands.d.ts.map +1 -0
  380. package/dist/stats/commands.js +6 -0
  381. package/dist/stats/commands.js.map +1 -0
  382. package/dist/stats/index.d.ts +3 -0
  383. package/dist/stats/index.d.ts.map +1 -0
  384. package/dist/stats/index.js +4 -0
  385. package/dist/stats/index.js.map +1 -0
  386. package/dist/stats/pages/expiring.d.ts +21 -0
  387. package/dist/stats/pages/expiring.d.ts.map +1 -0
  388. package/dist/stats/pages/expiring.js +204 -0
  389. package/dist/stats/pages/expiring.js.map +1 -0
  390. package/dist/stats/pages/idle.d.ts +21 -0
  391. package/dist/stats/pages/idle.d.ts.map +1 -0
  392. package/dist/stats/pages/idle.js +163 -0
  393. package/dist/stats/pages/idle.js.map +1 -0
  394. package/dist/stats/pages/inventory_stat.d.ts +21 -0
  395. package/dist/stats/pages/inventory_stat.d.ts.map +1 -0
  396. package/dist/stats/pages/inventory_stat.js +133 -0
  397. package/dist/stats/pages/inventory_stat.js.map +1 -0
  398. package/dist/stats/pages/overview.d.ts +21 -0
  399. package/dist/stats/pages/overview.d.ts.map +1 -0
  400. package/dist/stats/pages/overview.js +179 -0
  401. package/dist/stats/pages/overview.js.map +1 -0
  402. package/dist/stats/routes.d.ts +3 -0
  403. package/dist/stats/routes.d.ts.map +1 -0
  404. package/dist/stats/routes.js +16 -0
  405. package/dist/stats/routes.js.map +1 -0
  406. package/dist/stats/stats.d.ts +4 -0
  407. package/dist/stats/stats.d.ts.map +1 -0
  408. package/dist/stats/stats.js +38 -0
  409. package/dist/stats/stats.js.map +1 -0
  410. package/package.json +8 -5
  411. package/templates/care_query.html +1 -0
  412. package/templates/care_receipt.html +1 -0
  413. package/templates/express/express.html +17 -0
  414. package/templates/express/list.html +17 -0
  415. package/templates/express/missing.html +17 -0
  416. package/templates/express/stock.html +17 -0
  417. package/templates/family/family_borrow.html +17 -0
  418. package/templates/family/family_members.html +17 -0
  419. package/templates/help.html +1 -0
  420. package/templates/inventory_records.html +1 -0
  421. package/templates/inventory_round.html +1 -0
  422. package/templates/item_detail.html +1 -0
  423. package/templates/item_receipt.html +1 -0
  424. package/templates/item_search.html +1 -0
  425. package/templates/item_update_receipt.html +1 -0
  426. package/templates/items/add_form.html +17 -0
  427. package/templates/items/browse.html +17 -0
  428. package/templates/items/category_manage.html +17 -0
  429. package/templates/items/confirm.html +17 -0
  430. package/templates/items/detail.html +17 -0
  431. package/templates/items/duplicates.html +17 -0
  432. package/templates/items/history.html +17 -0
  433. package/templates/items/inventory_diff.html +17 -0
  434. package/templates/items/inventory_records.html +17 -0
  435. package/templates/items/inventory_round.html +17 -0
  436. package/templates/items/locate.html +17 -0
  437. package/templates/items/move_checklist.html +17 -0
  438. package/templates/items/photo_wall.html +17 -0
  439. package/templates/items/photos.html +17 -0
  440. package/templates/items/receipt.html +17 -0
  441. package/templates/items/relations.html +17 -0
  442. package/templates/items/search_list.html +17 -0
  443. package/templates/items/tag_manage.html +17 -0
  444. package/templates/items/undo_select.html +17 -0
  445. package/templates/location_query.html +1 -0
  446. package/templates/location_receipt.html +1 -0
  447. package/templates/outfit/outfit_picker.html +17 -0
  448. package/templates/outfit/travel_trip.html +17 -0
  449. package/templates/outfit/trip_outfit_plan.html +17 -0
  450. package/templates/outfit/wardrobe_analyze.html +17 -0
  451. package/templates/outfit/wardrobe_season.html +17 -0
  452. package/templates/outfit_pick.html +1 -0
  453. package/templates/receipt/accounts.html +17 -0
  454. package/templates/receipt/certificates.html +17 -0
  455. package/templates/receipt/purchase_records.html +17 -0
  456. package/templates/receipt/warranty.html +17 -0
  457. package/templates/setup/backup_receipt.html +17 -0
  458. package/templates/setup/first_use_wizard.html +17 -0
  459. package/templates/setup/health_report.html +17 -0
  460. package/templates/setup/import_restore.html +17 -0
  461. package/templates/shopping_query.html +1 -0
  462. package/templates/shopping_receipt.html +1 -0
  463. package/templates/space/fixed_spot.html +63 -0
  464. package/templates/space/location_manage.html +70 -0
  465. package/templates/space/space_view.html +65 -0
  466. package/templates/space/suggest_storage.html +58 -0
  467. package/templates/stats/expiring.html +17 -0
  468. package/templates/stats/idle.html +17 -0
  469. package/templates/stats/inventory_stat.html +17 -0
  470. package/templates/stats/overview.html +17 -0
  471. package/templates/stats_alert.html +1 -0
  472. package/templates/stats_overview.html +1 -0
  473. package/templates/tag_query.html +1 -0
  474. package/templates/tag_receipt.html +1 -0
  475. package/templates/ticket_query.html +1 -0
  476. package/templates/ticket_receipt.html +1 -0
  477. package/templates/trip_receipt.html +1 -0
@@ -0,0 +1,21 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "category_manage";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "items";
5
+ readonly family: "category_manage";
6
+ readonly key: "home.tag.write";
7
+ readonly shape: "receipt";
8
+ readonly preset: Record<string, unknown>;
9
+ readonly scenarios: readonly string[];
10
+ };
11
+ export declare const REQUIRED_BLOCKS: {
12
+ readonly fields: readonly string[];
13
+ readonly operations: readonly string[];
14
+ readonly empty: readonly string[];
15
+ readonly status: readonly string[];
16
+ };
17
+ export declare function renderFamilyPage(env: Envelope, ctx?: {
18
+ readonly command?: string;
19
+ readonly actionAt?: string;
20
+ }): string;
21
+ //# sourceMappingURL=category_manage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category_manage.d.ts","sourceRoot":"","sources":["../../../src/items/pages/category_manage.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,iBAA0B,CAAC;AAEjD,eAAO,MAAM,SAAS;;;;;qBAKS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;wBAC9B,SAAS,MAAM,EAAE;CAC/B,CAAC;AAEX,eAAO,MAAM,eAAe,EAqBvB;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AA4DF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAgEvH"}
@@ -0,0 +1,153 @@
1
+ // items能力·category_manage页装配(#807 域票填内容,骨架由 #805 生成)。
2
+ //
3
+ // 只服务 4-2 管分类:信息结构对齐老 `物品/category_manage.html`(分类树/操作提示/
4
+ // 删除拦截说明)。#864 起回执带分类树数组(层级+每类计数),有则写真,无则回退破折号。
5
+ // 必需块原文进 `data-need` 追溯属性,可见文案为打磨中文。
6
+ import { readFileSync } from 'node:fs';
7
+ import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
8
+ export const FAMILY = 'category_manage';
9
+ export const PAGE_META = {
10
+ domain: 'items',
11
+ family: FAMILY,
12
+ key: 'home.tag.write',
13
+ shape: 'receipt',
14
+ preset: { "op": "category" },
15
+ scenarios: ["4-2"],
16
+ };
17
+ export const REQUIRED_BLOCKS = {
18
+ "empty": [
19
+ "空态:树为空即只有「新建顶级分类」",
20
+ "异常:数据解析失败",
21
+ "拦截态:有物品的分类不可删"
22
+ ],
23
+ "fields": [
24
+ "分类树(层级+每类计数)",
25
+ "操作提示",
26
+ "删除拦截说明"
27
+ ],
28
+ "operations": [
29
+ "改名",
30
+ "合并",
31
+ "新建顶级分类",
32
+ "复制数据",
33
+ "复制日志"
34
+ ],
35
+ "status": [
36
+ "种子8类(只可改不可删)"
37
+ ]
38
+ };
39
+ const esc = (v) => escapeHtml(String(v ?? ''));
40
+ function msgOf(env) {
41
+ const d = env.data;
42
+ return String(d.message ?? '');
43
+ }
44
+ // #864 加厚:detail.tree 分类树数组(无则回退破折号,旧信封兼容)。
45
+ function detailOf(env) {
46
+ const d = env.data;
47
+ const det = d.detail;
48
+ if (det && typeof det === 'object' && !Array.isArray(det))
49
+ return det;
50
+ return {};
51
+ }
52
+ // 回执原文里的命令写法转成中文再上屏(原文完整保留在复制载荷里)。
53
+ function visibleMsg(msg) {
54
+ return msg
55
+ .replace(/home\.tag\.query kind=categories/g, '查标签(分类表)')
56
+ .replace(/home\.tag\.query/g, '查标签')
57
+ .replace(/home\.tag\.write/g, '管标签');
58
+ }
59
+ function needs() {
60
+ const groups = ['fields', 'operations', 'empty', 'status'];
61
+ return groups.map((g) => '<div data-block="' + g + '" hidden aria-hidden="true"><ul>'
62
+ + REQUIRED_BLOCKS[g].map((b) => '<li data-need="' + esc(b) + '"></li>').join('')
63
+ + '</ul></div>').join('');
64
+ }
65
+ const PAGE_CSS = '<style>'
66
+ + '.fp-page{max-width:720px;margin:0 auto;padding:4px 2px 20px}'
67
+ + '.fp-hero{background:linear-gradient(180deg,#fff,#f8fbff);border-radius:20px;padding:22px;box-shadow:0 1px 3px rgba(0,0,0,.06);margin:12px 0}'
68
+ + '.fp-eyebrow{color:#007aff;font-size:12px;font-weight:800;letter-spacing:.12em;margin-bottom:6px}'
69
+ + '.fp-title{font-size:24px;font-weight:800;margin:0 0 8px}'
70
+ + '.fp-lead{color:#6e6e73;font-size:15px;margin:0}'
71
+ + '.fp-stage{display:inline-block;background:#f5f8ff;color:#007aff;border-radius:999px;padding:4px 12px;font-size:13px;font-weight:700;margin-top:10px}'
72
+ + '.fp-sec{background:#fff;border-radius:16px;padding:18px;box-shadow:0 1px 3px rgba(0,0,0,.05);margin:12px 0}'
73
+ + '.fp-sec-t{font-size:17px;font-weight:750;margin:0 0 10px}'
74
+ + '.fp-group{font-size:13px;font-weight:800;color:#007aff;margin:14px 0 4px}'
75
+ + '.fp-row{display:grid;grid-template-columns:110px 1fr;gap:10px;padding:8px 0;border-bottom:1px solid #ececf1}'
76
+ + '.fp-row:last-child{border-bottom:none}'
77
+ + '.fp-k{color:#6e6e73;font-size:14px}'
78
+ + '.fp-v{font-weight:600;font-size:14px;word-break:break-word}'
79
+ + '.fp-warnbox{border-left:3px solid #ff9500;background:#fff8e8;padding:10px 14px;border-radius:8px;margin:8px 0;font-size:14px}'
80
+ + '.fp-note{color:#6e6e73;font-size:13.5px;margin:8px 0 0}'
81
+ + '.fp-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}'
82
+ + '.fp-btn{border:none;background:#e5e5ea;color:#1d1d1f;border-radius:999px;padding:10px 12px;font-weight:700;font-size:13.5px;min-height:44px;cursor:pointer}'
83
+ + '.fp-btn-primary{background:#007aff;color:#fff}'
84
+ + '.fp-btn-ghost{background:#fff;color:#007aff;border:1.5px solid #007aff}'
85
+ + '@media(max-width:820px){.fp-row{grid-template-columns:1fr;gap:2px}.fp-title{font-size:21px}}'
86
+ + '</style>';
87
+ // 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
88
+ // fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
89
+ export function renderFamilyPage(env, ctx) {
90
+ const template = readFileSync(new URL('../../../templates/items/category_manage.html', import.meta.url), 'utf8');
91
+ const msg = msgOf(env);
92
+ const key = String(env.key ?? PAGE_META.key);
93
+ // #864 加厚:树节点写真层级与计数;#817(⑤文案不冗余):层级词从逐行重复升成两个分组标题,
94
+ // 没有物品的分类不再逐行写「共 0 个物品,共 0 件」,折成一行名单;无 detail 回退破折号。
95
+ const det = detailOf(env);
96
+ const nodes = Array.isArray(det.tree)
97
+ ? det.tree.filter((r) => !!r && typeof r === 'object' && !Array.isArray(r)).map((r) => ({
98
+ id: String(r.id ?? ''), parent: String(r.parent_id ?? ''), name: String(r.name ?? ''),
99
+ items: String(r.items ?? ''), quantity: String(r.quantity ?? ''),
100
+ }))
101
+ : [];
102
+ const hasTree = Array.isArray(det.tree);
103
+ const isChild = (n) => n.parent !== '' && n.parent !== 'null';
104
+ const isBlank = (n) => !(Number(n.items) > 0) && !(Number(n.quantity) > 0);
105
+ const named = (n) => esc(n.name === '' ? '—' : n.name);
106
+ /** 一档(顶级/子)一组:组名与档内个数只在标题里出现一次;没物品的那批折成一行名单,名字仍可见。 */
107
+ const groupOf = (title, list) => {
108
+ const blank = list.filter(isBlank);
109
+ return list.length === 0 ? '' : '<h3 class="fp-group">' + title + '(' + list.length + ')</h3>'
110
+ + list.filter((n) => !isBlank(n)).map((n) => '<p class="fp-v">' + named(n)
111
+ + ',共 ' + esc(n.items) + ' 个物品,共 ' + esc(n.quantity) + ' 件</p>').join('')
112
+ + (blank.length === 0 ? '' : '<p class="fp-note">还没有物品:' + blank.map(named).join('、') + '</p>');
113
+ };
114
+ const treeBlock = !hasTree
115
+ ? '<div class="fp-row"><div class="fp-k">层级</div><div class="fp-v">—</div></div>'
116
+ + '<div class="fp-row"><div class="fp-k">每类计数</div><div class="fp-v">—</div></div>'
117
+ : (nodes.length
118
+ ? groupOf('顶级分类', nodes.filter((n) => !isChild(n))) + groupOf('子分类', nodes.filter(isChild))
119
+ : '<div class="fp-row"><div class="fp-k">层级</div><div class="fp-v">树是空的,先新建顶级分类</div></div>');
120
+ // #817(⑤文案不冗余):头卡不再复述 h1 的「管分类」,也不挂「查看页」这种页型名徽章;
121
+ // 导语改说本页总数(没有 detail 才回退回执原文),「详情走 查标签(分类表)」那类内部词随之退场。
122
+ const total = typeof det.total === 'number' ? det.total : nodes.length;
123
+ const lead = hasTree ? '共 ' + total + ' 个分类' : visibleMsg(msg);
124
+ const content = PAGE_CSS
125
+ + '<div class="fp-page" data-family="' + FAMILY + '" data-key="' + esc(key) + '">'
126
+ + '<div class="fp-hero"><div class="fp-eyebrow">物品管理 · 分类</div>'
127
+ + '<p class="fp-lead">' + esc(lead) + '</p></div>'
128
+ + '<section class="fp-sec"><h2 class="fp-sec-t">分类树</h2>'
129
+ + treeBlock + '</section>'
130
+ + '<section class="fp-sec"><h2 class="fp-sec-t">操作提示</h2>'
131
+ + '<p class="fp-note">改名、合并或移动分类在对话里说一句就行,本页只给总数与入口</p></section>'
132
+ + '<section class="fp-sec"><h2 class="fp-sec-t">删除拦截说明</h2>'
133
+ + '<div class="fp-warnbox">名下还有物品的分类不能删除,先把物品挪走或者并入其他分类</div>'
134
+ + '<p class="fp-note">树是空的时候,本页只会留一个新建顶级分类入口</p></section>'
135
+ + '<section class="fp-sec"><h2 class="fp-sec-t">种子分类</h2>'
136
+ + '<p class="fp-note">初始自带的八个顶级分类只可以改名,不可以删除</p></section>'
137
+ + '<div class="fp-actions">'
138
+ + '<button type="button" class="fp-btn fp-btn-ghost" onclick="copyItem(\'fp-cat-rename\')">改名</button>'
139
+ + '<button type="button" class="fp-btn fp-btn-ghost" onclick="copyItem(\'fp-cat-merge\')">合并</button>'
140
+ + '<button type="button" class="fp-btn fp-btn-primary" onclick="copyItem(\'fp-cat-new\')">新建顶级分类</button>'
141
+ + '</div>'
142
+ + homeCopyArea({
143
+ data: { envelope: env },
144
+ log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
145
+ })
146
+ + '<pre id="fp-cat-rename" hidden>' + esc('请加载「居家管家」技能,帮我管理分类(唤醒词:管分类):\n\n 操作:重命名\n 分类:___\n 新名称:___') + '</pre>'
147
+ + '<pre id="fp-cat-merge" hidden>' + esc('请加载「居家管家」技能,帮我管理分类(唤醒词:管分类):\n\n 操作:合并\n 分类:___\n 并入:___') + '</pre>'
148
+ + '<pre id="fp-cat-new" hidden>' + esc('请加载「居家管家」技能,帮我管理分类(唤醒词:管分类):\n\n 操作:新建顶级分类\n 名称:___') + '</pre>'
149
+ + needs()
150
+ + '</div>';
151
+ return fillTemplate(template, content);
152
+ }
153
+ //# sourceMappingURL=category_manage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category_manage.js","sourceRoot":"","sources":["../../../src/items/pages/category_manage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "confirm";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "items";
5
+ readonly family: "confirm";
6
+ readonly key: "home.item.update";
7
+ readonly shape: "receipt";
8
+ readonly preset: Record<string, unknown>;
9
+ readonly scenarios: readonly string[];
10
+ };
11
+ export declare const REQUIRED_BLOCKS: {
12
+ readonly fields: readonly string[];
13
+ readonly operations: readonly string[];
14
+ readonly empty: readonly string[];
15
+ readonly status: readonly string[];
16
+ };
17
+ export declare function renderFamilyPage(env: Envelope, ctx?: {
18
+ readonly command?: string;
19
+ readonly actionAt?: string;
20
+ }): string;
21
+ //# sourceMappingURL=confirm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../../src/items/pages/confirm.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,SAAkB,CAAC;AAEzC,eAAO,MAAM,SAAS;;;;;qBAKM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;wBAC3B,SAAS,MAAM,EAAE;CAC/B,CAAC;AAEX,eAAO,MAAM,eAAe,EAmBvB;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAoDF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CA+DvH"}
@@ -0,0 +1,147 @@
1
+ // items能力·confirm页装配(#807 域票填内容,骨架由 #805 生成)。
2
+ //
3
+ // 只服务 3-5 合并物品:破坏性操作页,老 `物品/confirm.html` 有独立的影响范围预览
4
+ // 与确认结构,不得压成通用回执,故单列一族。信息结构对齐老页(标题/引导语/
5
+ // 变更前/变更后/逐条 entries/影响说明),确认按钮做成留档式(新链合并一步执行,
6
+ // 本页是执行后果执,不是执行前预览——缺口见域对账 `scene-items-2.md` 与跟进票)。
7
+ // 必需块原文进 `data-need` 追溯属性,可见文案为打磨中文。
8
+ import { readFileSync } from 'node:fs';
9
+ import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
10
+ export const FAMILY = 'confirm';
11
+ export const PAGE_META = {
12
+ domain: 'items',
13
+ family: FAMILY,
14
+ key: 'home.item.update',
15
+ shape: 'receipt',
16
+ preset: { "op": "merge" },
17
+ scenarios: ["3-5"],
18
+ };
19
+ export const REQUIRED_BLOCKS = {
20
+ "empty": [
21
+ "空态:无(确认页)",
22
+ "异常:数据解析失败"
23
+ ],
24
+ "fields": [
25
+ "标题",
26
+ "引导语",
27
+ "变更前",
28
+ "变更后",
29
+ "逐条entries(含子标签)",
30
+ "影响说明"
31
+ ],
32
+ "operations": [
33
+ "确认",
34
+ "复制数据",
35
+ "复制日志"
36
+ ],
37
+ "status": []
38
+ };
39
+ const esc = (v) => escapeHtml(String(v ?? ''));
40
+ function msgOf(env) {
41
+ const d = env.data;
42
+ return String(d.message ?? '');
43
+ }
44
+ // #864 加厚:detail.sources 来源条目清单(无则回退破折号,旧信封兼容)。
45
+ function detailOf(env) {
46
+ const d = env.data;
47
+ const det = d.detail;
48
+ if (det && typeof det === 'object' && !Array.isArray(det))
49
+ return det;
50
+ return {};
51
+ }
52
+ function needs() {
53
+ const groups = ['fields', 'operations', 'empty', 'status'];
54
+ return groups.map((g) => '<div data-block="' + g + '" hidden aria-hidden="true"><ul>'
55
+ + REQUIRED_BLOCKS[g].map((b) => '<li data-need="' + esc(b) + '"></li>').join('')
56
+ + '</ul></div>').join('');
57
+ }
58
+ const PAGE_CSS = '<style>'
59
+ + '.fp-page{max-width:720px;margin:0 auto;padding:4px 2px 20px}'
60
+ + '.fp-hero{background:linear-gradient(180deg,#fff,#f8fbff);border-radius:20px;padding:22px;box-shadow:0 1px 3px rgba(0,0,0,.06);margin:12px 0}'
61
+ + '.fp-title{font-size:24px;font-weight:800;margin:0 0 8px}'
62
+ + '.fp-lead{color:#6e6e73;font-size:15px;margin:0}'
63
+ + '.fp-stage{display:inline-block;background:#f5f8ff;color:#007aff;border-radius:999px;padding:4px 12px;font-size:13px;font-weight:700;margin-top:10px}'
64
+ + '.fp-sec{background:#fff;border-radius:16px;padding:18px;box-shadow:0 1px 3px rgba(0,0,0,.05);margin:12px 0}'
65
+ + '.fp-sec-t{font-size:17px;font-weight:750;margin:0 0 10px}'
66
+ + '.fp-grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}'
67
+ + '.fp-compare{background:#f8f9fb;border-radius:14px;padding:14px}'
68
+ + '.fp-compare-before{border:1.5px solid #ffd6d3}'
69
+ + '.fp-compare-after{border:1.5px solid #cdeecd}'
70
+ + '.fp-row{display:grid;grid-template-columns:110px 1fr;gap:10px;padding:8px 0;border-bottom:1px solid #ececf1}'
71
+ + '.fp-row:last-child{border-bottom:none}'
72
+ + '.fp-k{color:#6e6e73;font-size:14px}'
73
+ + '.fp-v{font-weight:600;font-size:14px;word-break:break-word}'
74
+ + '.fp-pill{display:inline-block;border:1px solid #d2d2d7;background:#fbfbfd;border-radius:999px;padding:3px 10px;margin:2px;font-size:13px}'
75
+ + '.fp-tag{background:#eef5ff;color:#0a63ce;border-radius:999px;padding:4px 10px;margin:2px;font-size:13px;display:inline-block}'
76
+ + '.fp-impact{background:#f2f8ff;border-radius:12px;padding:10px 14px;margin:10px 0;font-size:14px}'
77
+ + '.fp-impact ul{margin:0;padding-left:20px}.fp-impact li{margin:4px 0}'
78
+ + '.fp-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}'
79
+ + '.fp-btn{border:none;background:#e5e5ea;color:#1d1d1f;border-radius:999px;padding:10px 12px;font-weight:700;font-size:13.5px;min-height:44px;cursor:pointer}'
80
+ + '.fp-btn-primary{background:#007aff;color:#fff}'
81
+ + '@media(max-width:820px){.fp-grid2{grid-template-columns:1fr}.fp-row{grid-template-columns:1fr;gap:2px}.fp-title{font-size:21px}}'
82
+ + '</style>';
83
+ // 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
84
+ // fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
85
+ export function renderFamilyPage(env, ctx) {
86
+ const template = readFileSync(new URL('../../../templates/items/confirm.html', import.meta.url), 'utf8');
87
+ const msg = msgOf(env);
88
+ const key = String(env.key ?? PAGE_META.key);
89
+ const m = msg.match(/^已合并到 (.+):\+(.+) 件$/);
90
+ const target = (m?.[1] ?? '').trim();
91
+ const moved = (m?.[2] ?? '').trim();
92
+ const archivePrompt = '请加载「居家管家」技能,帮我确认合并归档(唤醒词:合并物品):\n\n 结果:' + msg;
93
+ // #864 加厚:来源清单有 detail 写真条目(编号+名称+件数),无则回退破折号。
94
+ const det = detailOf(env);
95
+ const rawSources = det.sources;
96
+ const sources = Array.isArray(rawSources)
97
+ ? rawSources.filter((r) => !!r && typeof r === 'object' && !Array.isArray(r)).map((r) => ({
98
+ id: String(r.id ?? ''), name: String(r.name ?? ''), quantity: String(r.quantity ?? ''),
99
+ }))
100
+ : [];
101
+ const hasSources = Array.isArray(rawSources);
102
+ const sourceRows = !hasSources
103
+ ? '<div class="fp-row"><div class="fp-k">来源条目</div><div class="fp-v">—</div></div>'
104
+ : (sources.length
105
+ ? sources.map((s) => '<div class="fp-row"><div class="fp-k">编号 ' + esc(s.id) + '</div><div class="fp-v">' + esc(s.name === '' ? '—' : s.name) + ',共 ' + esc(s.quantity === '' ? '—' : s.quantity) + ' 件</div></div>').join('')
106
+ : '<div class="fp-row"><div class="fp-k">来源条目</div><div class="fp-v">无</div></div>');
107
+ const content = PAGE_CSS
108
+ + '<div class="fp-page" data-family="' + FAMILY + '" data-key="' + esc(key) + '">'
109
+ // 头卡只写结果值:页型名徽章删了(#817 seq 15 的 ②:徽章是页型名,不是内容)。
110
+ + '<div class="fp-hero">'
111
+ + '<div class="fp-title">' + (target === '' ? '合并物品已执行' : '已合并到 ' + esc(target)) + '</div>'
112
+ + '<p class="fp-lead">重复的那几条已经并入留下的这件,请核对范围后归档</p></div>'
113
+ + '<section class="fp-sec"><div class="fp-grid2">'
114
+ // 保留的这条编号只在「变更前」写这一处;「变更后」写这次真变了的量,逐条明细不再重复编号。
115
+ + '<div class="fp-compare fp-compare-before"><h2 class="fp-sec-t">变更前</h2>'
116
+ + sourceRows
117
+ + '<div class="fp-row"><div class="fp-k">留下的这件</div><div class="fp-v">编号 ' + esc(target || '—') + '</div></div>'
118
+ + '</div>'
119
+ + '<div class="fp-compare fp-compare-after"><h2 class="fp-sec-t">变更后</h2>'
120
+ + '<div class="fp-row"><div class="fp-k">并入数量</div><div class="fp-v">' + (moved === '' ? '—' : '共 ' + esc(moved) + ' 件') + '</div></div>'
121
+ + '</div>'
122
+ + '</div></section>'
123
+ + '<section class="fp-sec"><h2 class="fp-sec-t">逐条明细</h2>'
124
+ + '<div class="fp-row"><div class="fp-k">保留条目</div><div class="fp-v">留下的这件</div></div>'
125
+ + (hasSources ? sources.map((s) => '<div class="fp-row"><div class="fp-k">并入</div><div class="fp-v">编号 ' + esc(s.id) + ' ' + esc(s.name === '' ? '—' : s.name) + '</div></div>').join('') : '')
126
+ + '<div class="fp-row"><div class="fp-k">合并记录</div><div class="fp-v">' + esc(msg) + '</div></div>'
127
+ + '</section>'
128
+ // 影响说明拆三条:原先是一句六十多字、用分号硬挤的串(#817 seq 15 的 ⑥)。
129
+ + '<section class="fp-sec"><h2 class="fp-sec-t">影响说明</h2>'
130
+ + '<div class="fp-impact"><ul>'
131
+ + '<li>来源条目的位置与标签记录已经删除,只保留留下的这件</li>'
132
+ + '<li>并入的件数已经加到留下的这件上</li>'
133
+ + '<li>这次合并不能自动撤销,错了要手动把这些条目再拆开</li>'
134
+ + '</ul></div></section>'
135
+ + '<div class="fp-actions">'
136
+ + '<button type="button" class="fp-btn fp-btn-primary" onclick="copyItem(\'fp-confirm-archive\')">确认</button>'
137
+ + '</div>'
138
+ + homeCopyArea({
139
+ data: { envelope: env },
140
+ log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
141
+ })
142
+ + '<pre id="fp-confirm-archive" hidden>' + esc(archivePrompt) + '</pre>'
143
+ + needs()
144
+ + '</div>';
145
+ return fillTemplate(template, content);
146
+ }
147
+ //# sourceMappingURL=confirm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../../src/items/pages/confirm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "detail";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "items";
5
+ readonly family: "detail";
6
+ readonly key: "home.item.detail";
7
+ readonly shape: "detail";
8
+ readonly preset: Record<string, unknown>;
9
+ readonly scenarios: readonly string[];
10
+ };
11
+ export declare const REQUIRED_BLOCKS: {
12
+ readonly fields: readonly string[];
13
+ readonly operations: readonly string[];
14
+ readonly empty: readonly string[];
15
+ readonly status: readonly string[];
16
+ };
17
+ export declare function renderFamilyPage(env: Envelope, ctx?: {
18
+ readonly command?: string;
19
+ readonly actionAt?: string;
20
+ }): string;
21
+ //# sourceMappingURL=detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detail.d.ts","sourceRoot":"","sources":["../../../src/items/pages/detail.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,QAAiB,CAAC;AAExC,eAAO,MAAM,SAAS;;;;;qBAKN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;wBACf,SAAS,MAAM,EAAE;CAC/B,CAAC;AAEX,eAAO,MAAM,eAAe,EAsCvB;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAuDF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAoDvH"}
@@ -0,0 +1,160 @@
1
+ // items能力·detail页装配(#806 域票填内容,骨架 #805)。
2
+ //
3
+ // 一族一个装配件:模板 `templates/items/detail.html` 的装配入口。
4
+ // 必需块原文=契约附录(事实源),登记表 `scripts/lib/page-blocks.mjs` 由同一附录派生;
5
+ // 三方(本件/登记表/附录)由 `test/scaffold.test.mjs` 逐族对账,走散即红。
6
+ // 本页只改 `renderFamilyPage` 内部:`FAMILY`/`PAGE_META`/`REQUIRED_BLOCKS` 三个导出
7
+ // 与附录逐字一致,一字不动。模板字节不动(三标记照旧填充)。
8
+ // 必需块原文落在各节 `data-need` 属性里(机审可读);可见文案只写中文,编号与名称
9
+ // 走表格单元格(英文裸词门);按钮一律带复制载荷(载荷位不进英文门)。
10
+ // 页内小助手就地定义:共用位归票 3,本票不新建共用文件(写集边界)。
11
+ import { readFileSync } from 'node:fs';
12
+ import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
13
+ export const FAMILY = 'detail';
14
+ export const PAGE_META = {
15
+ domain: 'items',
16
+ family: FAMILY,
17
+ key: 'home.item.detail',
18
+ shape: 'detail',
19
+ preset: {},
20
+ scenarios: ["2-2"],
21
+ };
22
+ export const REQUIRED_BLOCKS = {
23
+ "empty": [
24
+ "空态:未找到该物品",
25
+ "关联空态",
26
+ "操作历史空态「暂无记录」",
27
+ "异常:数据解析失败"
28
+ ],
29
+ "fields": [
30
+ "ID",
31
+ "分类",
32
+ "位置",
33
+ "标签",
34
+ "价格",
35
+ "备注",
36
+ "最后使用",
37
+ "录入时间",
38
+ "关联物品",
39
+ "同位置邻居",
40
+ "相似物品",
41
+ "快捷操作",
42
+ "操作历史"
43
+ ],
44
+ "operations": [
45
+ "改",
46
+ "移",
47
+ "补",
48
+ "减",
49
+ "标",
50
+ "废",
51
+ "标记使用",
52
+ "查看完整历史",
53
+ "查看照片",
54
+ "复制数据",
55
+ "复制日志"
56
+ ],
57
+ "status": [
58
+ "物品状态"
59
+ ]
60
+ };
61
+ const PAGE_CSS = '<style>'
62
+ + '.sec{background:#fff;border:1px solid #e4e4e8;border-radius:14px;padding:14px;margin:12px 0}'
63
+ + '.sec h2{font-size:17px;margin:0 0 10px}'
64
+ + '.kv{width:100%;border-collapse:collapse;font-size:14px}'
65
+ + '.kv th,.kv td{border:1px solid #e8e8ee;padding:8px 10px;text-align:left;vertical-align:top;overflow-wrap:anywhere}'
66
+ + '.kv th{background:#f6f7f9;width:7em;color:#555;font-weight:600}'
67
+ + '.wrap-x{overflow-x:auto}'
68
+ + '.op{min-height:44px;min-width:44px;padding:10px 16px;border-radius:12px;border:1.5px solid #0a63ce;background:#0a63ce;color:#fff;font-size:15px;margin:4px 6px 4px 0}'
69
+ + '.op.alt{background:#fff;color:#0a63ce}'
70
+ + '.note{color:#666;font-size:13px}'
71
+ + '.greet{font-size:15px;color:#333}'
72
+ + '@media(max-width:480px){.kv th{width:6em}}'
73
+ + '</style>';
74
+ function needs(group) {
75
+ return REQUIRED_BLOCKS[group].map((b) => escapeHtml(b)).join(';');
76
+ }
77
+ function row(head, value) {
78
+ return '<tr><th>' + head + '</th><td>' + value + '</td></tr>';
79
+ }
80
+ function op(label, load, alt) {
81
+ return '<button class="op' + (alt ? ' alt' : '') + '" data-t="' + escapeHtml(load) + '"'
82
+ + ' onclick="if(navigator.clipboard){navigator.clipboard.writeText(this.getAttribute(\'data-t\'))}">'
83
+ + label + '</button>';
84
+ }
85
+ function itemOf(env) {
86
+ const d = env.data;
87
+ const item = d.item;
88
+ if (item !== null && typeof item === 'object' && !Array.isArray(item)) {
89
+ return item;
90
+ }
91
+ return {};
92
+ }
93
+ function cell(v) {
94
+ const s = String(v ?? '').trim();
95
+ return s === '' ? '—' : escapeHtml(s);
96
+ }
97
+ /** 位置位只留位置本身(#817 第二波 ⑥):回执里的位置串把「路径 × 数量 [状态]」挤成一段,
98
+ * 而数量与状态在本页是相邻的独立行(字段 `quantity`/`status`),位置行不再复述这两个事实。 */
99
+ function locPath(v) {
100
+ return String(v ?? '').trim()
101
+ .replace(/\s*×\s*\d+\s*(?:\[[^\]]*\])?\s*$/, '')
102
+ .replace(/\s*\[[^\]]*\]\s*$/, '')
103
+ .trim();
104
+ }
105
+ // 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
106
+ // fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
107
+ export function renderFamilyPage(env, ctx) {
108
+ const template = readFileSync(new URL('../../../templates/items/detail.html', import.meta.url), 'utf8');
109
+ const item = itemOf(env);
110
+ const found = Object.keys(item).length > 0;
111
+ const history = String(item.history ?? '').trim();
112
+ const main = found
113
+ ? '<div class="wrap-x"><table class="kv">'
114
+ + row('编号', cell(item.id))
115
+ + row('名称', cell(item.name))
116
+ + row('分类', cell(item.category))
117
+ + row('位置', cell(locPath(item.location)))
118
+ + row('数量', cell(item.quantity))
119
+ + row('状态', cell(item.status))
120
+ + row('标签', cell(item.tags))
121
+ + row('价格', cell(item.price))
122
+ + row('备注', cell(item.note))
123
+ + row('最后使用', cell(item.last_used))
124
+ + row('录入时间', cell(item.created_at))
125
+ + row('照片', cell(item.photo))
126
+ + '</table></div>'
127
+ : '<div class="hm-empty">没有找到这件物品,核对编号再试一次吧。</div>';
128
+ const content = PAGE_CSS
129
+ // #817 第二波(② 层级清):导语原是版面说明书(「快捷操作都在表后面,历史在最下面」);
130
+ // 改说这一件上屏的是哪些事实,层级仍由下面四个小节标题承担。
131
+ + '<p class="greet">这一件的分类、位置、数量、价格与来去时间,都摊在这一页上。</p>'
132
+ + '<section class="sec" data-block="fields" data-need="' + needs('fields') + '"><h2>底细</h2>' + main + '</section>'
133
+ + '<section class="sec" data-block="empty" data-need="' + needs('empty') + '"><h2>关联与邻居</h2>'
134
+ + '<div class="wrap-x"><table class="kv">'
135
+ + row('关联物品', '—')
136
+ + row('同位置邻居', '—')
137
+ + row('相似物品', '—')
138
+ + '</table></div></section>'
139
+ + '<section class="sec" data-block="operations" data-need="' + needs('operations') + '"><h2>快捷操作</h2><div>'
140
+ + op('修改', '请加载居家管家技能,帮我改这件物品', false)
141
+ + op('移动', '请加载居家管家技能,帮我移这件物品', true)
142
+ + op('补录', '请加载居家管家技能,帮我补这件物品的数量', true)
143
+ + op('减量', '请加载居家管家技能,帮我减这件物品的数量', true)
144
+ + op('打标', '请加载居家管家技能,帮我标这件物品', true)
145
+ + op('废弃', '请加载居家管家技能,帮我废弃这件物品', true)
146
+ + op('标记使用', '请加载居家管家技能,帮我标记使用这件物品', true)
147
+ + op('查看完整历史', '请加载居家管家技能,帮我查看这件物品的完整历史', true)
148
+ + op('查看照片', '请加载居家管家技能,帮我查看这件物品的照片', true)
149
+ + '</div>'
150
+ + homeCopyArea({
151
+ data: { envelope: env },
152
+ log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
153
+ })
154
+ + '</section>'
155
+ + '<section class="sec" data-block="status" data-need="' + needs('status') + '"><h2>状态与历史</h2>'
156
+ + (history === '' ? '<p>暂无记录</p>' : '<p>' + escapeHtml(history) + '</p>')
157
+ + '</section>';
158
+ return fillTemplate(template, content);
159
+ }
160
+ //# sourceMappingURL=detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detail.js","sourceRoot":"","sources":["../../../src/items/pages/detail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "duplicates";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "items";
5
+ readonly family: "duplicates";
6
+ readonly key: "home.item.search";
7
+ readonly shape: "list";
8
+ readonly preset: Record<string, unknown>;
9
+ readonly scenarios: readonly string[];
10
+ };
11
+ export declare const REQUIRED_BLOCKS: {
12
+ readonly fields: readonly string[];
13
+ readonly operations: readonly string[];
14
+ readonly empty: readonly string[];
15
+ readonly status: readonly string[];
16
+ };
17
+ export declare function renderFamilyPage(env: Envelope, ctx?: {
18
+ readonly command?: string;
19
+ readonly actionAt?: string;
20
+ }): string;
21
+ //# sourceMappingURL=duplicates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duplicates.d.ts","sourceRoot":"","sources":["../../../src/items/pages/duplicates.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,YAAqB,CAAC;AAE5C,eAAO,MAAM,SAAS;;;;;qBAKM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;wBAC3B,SAAS,MAAM,EAAE;CAC/B,CAAC;AAEX,eAAO,MAAM,eAAe,EAqBvB;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAuDF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAkDvH"}