skill-home 0.3.1 → 0.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) 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/config.d.ts.map +1 -1
  5. package/dist/cli/config.js +11 -1
  6. package/dist/cli/config.js.map +1 -1
  7. package/dist/cli/keys.d.ts +4 -0
  8. package/dist/cli/keys.d.ts.map +1 -0
  9. package/dist/cli/keys.js +51 -0
  10. package/dist/cli/keys.js.map +1 -0
  11. package/dist/cli/registry.d.ts +4 -0
  12. package/dist/cli/registry.d.ts.map +1 -0
  13. package/dist/cli/registry.js +30 -0
  14. package/dist/cli/registry.js.map +1 -0
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/config.js +14 -7
  17. package/dist/config.js.map +1 -1
  18. package/dist/express/commands.d.ts +3 -0
  19. package/dist/express/commands.d.ts.map +1 -0
  20. package/dist/express/commands.js +6 -0
  21. package/dist/express/commands.js.map +1 -0
  22. package/dist/express/index.d.ts +3 -0
  23. package/dist/express/index.d.ts.map +1 -0
  24. package/dist/express/index.js +4 -0
  25. package/dist/express/index.js.map +1 -0
  26. package/dist/express/pages/express.d.ts +24 -0
  27. package/dist/express/pages/express.d.ts.map +1 -0
  28. package/dist/express/pages/express.js +160 -0
  29. package/dist/express/pages/express.js.map +1 -0
  30. package/dist/express/pages/list.d.ts +24 -0
  31. package/dist/express/pages/list.d.ts.map +1 -0
  32. package/dist/express/pages/list.js +167 -0
  33. package/dist/express/pages/list.js.map +1 -0
  34. package/dist/express/pages/missing.d.ts +24 -0
  35. package/dist/express/pages/missing.d.ts.map +1 -0
  36. package/dist/express/pages/missing.js +146 -0
  37. package/dist/express/pages/missing.js.map +1 -0
  38. package/dist/express/pages/stock.d.ts +24 -0
  39. package/dist/express/pages/stock.d.ts.map +1 -0
  40. package/dist/express/pages/stock.js +176 -0
  41. package/dist/express/pages/stock.js.map +1 -0
  42. package/dist/express/routes.d.ts +3 -0
  43. package/dist/express/routes.d.ts.map +1 -0
  44. package/dist/express/routes.js +8 -0
  45. package/dist/express/routes.js.map +1 -0
  46. package/dist/express/shopping.d.ts +4 -0
  47. package/dist/express/shopping.d.ts.map +1 -0
  48. package/dist/express/shopping.js +143 -0
  49. package/dist/express/shopping.js.map +1 -0
  50. package/dist/family/care.d.ts +4 -0
  51. package/dist/family/care.d.ts.map +1 -0
  52. package/dist/family/care.js +103 -0
  53. package/dist/family/care.js.map +1 -0
  54. package/dist/family/commands.d.ts +3 -0
  55. package/dist/family/commands.d.ts.map +1 -0
  56. package/dist/family/commands.js +6 -0
  57. package/dist/family/commands.js.map +1 -0
  58. package/dist/family/index.d.ts +3 -0
  59. package/dist/family/index.d.ts.map +1 -0
  60. package/dist/family/index.js +4 -0
  61. package/dist/family/index.js.map +1 -0
  62. package/dist/family/pages/family_borrow.d.ts +24 -0
  63. package/dist/family/pages/family_borrow.d.ts.map +1 -0
  64. package/dist/family/pages/family_borrow.js +267 -0
  65. package/dist/family/pages/family_borrow.js.map +1 -0
  66. package/dist/family/pages/family_members.d.ts +24 -0
  67. package/dist/family/pages/family_members.d.ts.map +1 -0
  68. package/dist/family/pages/family_members.js +171 -0
  69. package/dist/family/pages/family_members.js.map +1 -0
  70. package/dist/family/routes.d.ts +3 -0
  71. package/dist/family/routes.d.ts.map +1 -0
  72. package/dist/family/routes.js +20 -0
  73. package/dist/family/routes.js.map +1 -0
  74. package/dist/fetch/db.d.ts.map +1 -1
  75. package/dist/fetch/db.js +9 -1
  76. package/dist/fetch/db.js.map +1 -1
  77. package/dist/fetch/domains.d.ts +92 -0
  78. package/dist/fetch/domains.d.ts.map +1 -1
  79. package/dist/fetch/domains.js +165 -26
  80. package/dist/fetch/domains.js.map +1 -1
  81. package/dist/fetch/index.d.ts +2 -1
  82. package/dist/fetch/index.d.ts.map +1 -1
  83. package/dist/fetch/index.js +6 -1
  84. package/dist/fetch/index.js.map +1 -1
  85. package/dist/health.d.ts +9 -0
  86. package/dist/health.d.ts.map +1 -1
  87. package/dist/health.js +19 -0
  88. package/dist/health.js.map +1 -1
  89. package/dist/help/helpAssets.js +1 -1
  90. package/dist/items/add.d.ts +3 -0
  91. package/dist/items/add.d.ts.map +1 -0
  92. package/dist/items/add.js +34 -0
  93. package/dist/items/add.js.map +1 -0
  94. package/dist/items/commands.d.ts +3 -0
  95. package/dist/items/commands.d.ts.map +1 -0
  96. package/dist/items/commands.js +22 -0
  97. package/dist/items/commands.js.map +1 -0
  98. package/dist/items/detail.d.ts +3 -0
  99. package/dist/items/detail.d.ts.map +1 -0
  100. package/dist/items/detail.js +31 -0
  101. package/dist/items/detail.js.map +1 -0
  102. package/dist/items/index.d.ts +3 -0
  103. package/dist/items/index.d.ts.map +1 -0
  104. package/dist/items/index.js +4 -0
  105. package/dist/items/index.js.map +1 -0
  106. package/dist/items/inventory.d.ts +4 -0
  107. package/dist/items/inventory.d.ts.map +1 -0
  108. package/dist/items/inventory.js +41 -0
  109. package/dist/items/inventory.js.map +1 -0
  110. package/dist/items/pages/add_form.d.ts +24 -0
  111. package/dist/items/pages/add_form.d.ts.map +1 -0
  112. package/dist/items/pages/add_form.js +174 -0
  113. package/dist/items/pages/add_form.js.map +1 -0
  114. package/dist/items/pages/browse.d.ts +24 -0
  115. package/dist/items/pages/browse.d.ts.map +1 -0
  116. package/dist/items/pages/browse.js +143 -0
  117. package/dist/items/pages/browse.js.map +1 -0
  118. package/dist/items/pages/category_manage.d.ts +24 -0
  119. package/dist/items/pages/category_manage.d.ts.map +1 -0
  120. package/dist/items/pages/category_manage.js +153 -0
  121. package/dist/items/pages/category_manage.js.map +1 -0
  122. package/dist/items/pages/confirm.d.ts +24 -0
  123. package/dist/items/pages/confirm.d.ts.map +1 -0
  124. package/dist/items/pages/confirm.js +149 -0
  125. package/dist/items/pages/confirm.js.map +1 -0
  126. package/dist/items/pages/detail.d.ts +24 -0
  127. package/dist/items/pages/detail.d.ts.map +1 -0
  128. package/dist/items/pages/detail.js +160 -0
  129. package/dist/items/pages/detail.js.map +1 -0
  130. package/dist/items/pages/duplicates.d.ts +24 -0
  131. package/dist/items/pages/duplicates.d.ts.map +1 -0
  132. package/dist/items/pages/duplicates.js +138 -0
  133. package/dist/items/pages/duplicates.js.map +1 -0
  134. package/dist/items/pages/history.d.ts +24 -0
  135. package/dist/items/pages/history.d.ts.map +1 -0
  136. package/dist/items/pages/history.js +213 -0
  137. package/dist/items/pages/history.js.map +1 -0
  138. package/dist/items/pages/inventory_diff.d.ts +24 -0
  139. package/dist/items/pages/inventory_diff.d.ts.map +1 -0
  140. package/dist/items/pages/inventory_diff.js +126 -0
  141. package/dist/items/pages/inventory_diff.js.map +1 -0
  142. package/dist/items/pages/inventory_records.d.ts +24 -0
  143. package/dist/items/pages/inventory_records.d.ts.map +1 -0
  144. package/dist/items/pages/inventory_records.js +147 -0
  145. package/dist/items/pages/inventory_records.js.map +1 -0
  146. package/dist/items/pages/inventory_round.d.ts +24 -0
  147. package/dist/items/pages/inventory_round.d.ts.map +1 -0
  148. package/dist/items/pages/inventory_round.js +145 -0
  149. package/dist/items/pages/inventory_round.js.map +1 -0
  150. package/dist/items/pages/locate.d.ts +24 -0
  151. package/dist/items/pages/locate.d.ts.map +1 -0
  152. package/dist/items/pages/locate.js +129 -0
  153. package/dist/items/pages/locate.js.map +1 -0
  154. package/dist/items/pages/move_checklist.d.ts +24 -0
  155. package/dist/items/pages/move_checklist.d.ts.map +1 -0
  156. package/dist/items/pages/move_checklist.js +112 -0
  157. package/dist/items/pages/move_checklist.js.map +1 -0
  158. package/dist/items/pages/photo_wall.d.ts +24 -0
  159. package/dist/items/pages/photo_wall.d.ts.map +1 -0
  160. package/dist/items/pages/photo_wall.js +145 -0
  161. package/dist/items/pages/photo_wall.js.map +1 -0
  162. package/dist/items/pages/photos.d.ts +24 -0
  163. package/dist/items/pages/photos.d.ts.map +1 -0
  164. package/dist/items/pages/photos.js +182 -0
  165. package/dist/items/pages/photos.js.map +1 -0
  166. package/dist/items/pages/receipt.d.ts +24 -0
  167. package/dist/items/pages/receipt.d.ts.map +1 -0
  168. package/dist/items/pages/receipt.js +252 -0
  169. package/dist/items/pages/receipt.js.map +1 -0
  170. package/dist/items/pages/relations.d.ts +24 -0
  171. package/dist/items/pages/relations.d.ts.map +1 -0
  172. package/dist/items/pages/relations.js +144 -0
  173. package/dist/items/pages/relations.js.map +1 -0
  174. package/dist/items/pages/search_list.d.ts +24 -0
  175. package/dist/items/pages/search_list.d.ts.map +1 -0
  176. package/dist/items/pages/search_list.js +133 -0
  177. package/dist/items/pages/search_list.js.map +1 -0
  178. package/dist/items/pages/tag_manage.d.ts +24 -0
  179. package/dist/items/pages/tag_manage.d.ts.map +1 -0
  180. package/dist/items/pages/tag_manage.js +213 -0
  181. package/dist/items/pages/tag_manage.js.map +1 -0
  182. package/dist/items/pages/undo_select.d.ts +24 -0
  183. package/dist/items/pages/undo_select.d.ts.map +1 -0
  184. package/dist/items/pages/undo_select.js +143 -0
  185. package/dist/items/pages/undo_select.js.map +1 -0
  186. package/dist/items/routes.d.ts +3 -0
  187. package/dist/items/routes.d.ts.map +1 -0
  188. package/dist/items/routes.js +62 -0
  189. package/dist/items/routes.js.map +1 -0
  190. package/dist/items/search.d.ts +3 -0
  191. package/dist/items/search.d.ts.map +1 -0
  192. package/dist/items/search.js +47 -0
  193. package/dist/items/search.js.map +1 -0
  194. package/dist/items/tag.d.ts +25 -0
  195. package/dist/items/tag.d.ts.map +1 -0
  196. package/dist/items/tag.js +133 -0
  197. package/dist/items/tag.js.map +1 -0
  198. package/dist/items/update.d.ts +20 -0
  199. package/dist/items/update.d.ts.map +1 -0
  200. package/dist/items/update.js +211 -0
  201. package/dist/items/update.js.map +1 -0
  202. package/dist/outfit/commands.d.ts +3 -0
  203. package/dist/outfit/commands.d.ts.map +1 -0
  204. package/dist/outfit/commands.js +7 -0
  205. package/dist/outfit/commands.js.map +1 -0
  206. package/dist/outfit/index.d.ts +3 -0
  207. package/dist/outfit/index.d.ts.map +1 -0
  208. package/dist/outfit/index.js +4 -0
  209. package/dist/outfit/index.js.map +1 -0
  210. package/dist/outfit/outfit.d.ts +3 -0
  211. package/dist/outfit/outfit.d.ts.map +1 -0
  212. package/dist/outfit/outfit.js +182 -0
  213. package/dist/outfit/outfit.js.map +1 -0
  214. package/dist/outfit/pages/outfit_picker.d.ts +24 -0
  215. package/dist/outfit/pages/outfit_picker.d.ts.map +1 -0
  216. package/dist/outfit/pages/outfit_picker.js +185 -0
  217. package/dist/outfit/pages/outfit_picker.js.map +1 -0
  218. package/dist/outfit/pages/travel_trip.d.ts +24 -0
  219. package/dist/outfit/pages/travel_trip.d.ts.map +1 -0
  220. package/dist/outfit/pages/travel_trip.js +185 -0
  221. package/dist/outfit/pages/travel_trip.js.map +1 -0
  222. package/dist/outfit/pages/trip_outfit_plan.d.ts +24 -0
  223. package/dist/outfit/pages/trip_outfit_plan.d.ts.map +1 -0
  224. package/dist/outfit/pages/trip_outfit_plan.js +173 -0
  225. package/dist/outfit/pages/trip_outfit_plan.js.map +1 -0
  226. package/dist/outfit/pages/wardrobe_analyze.d.ts +24 -0
  227. package/dist/outfit/pages/wardrobe_analyze.d.ts.map +1 -0
  228. package/dist/outfit/pages/wardrobe_analyze.js +171 -0
  229. package/dist/outfit/pages/wardrobe_analyze.js.map +1 -0
  230. package/dist/outfit/pages/wardrobe_season.d.ts +24 -0
  231. package/dist/outfit/pages/wardrobe_season.d.ts.map +1 -0
  232. package/dist/outfit/pages/wardrobe_season.js +167 -0
  233. package/dist/outfit/pages/wardrobe_season.js.map +1 -0
  234. package/dist/outfit/routes.d.ts +3 -0
  235. package/dist/outfit/routes.d.ts.map +1 -0
  236. package/dist/outfit/routes.js +9 -0
  237. package/dist/outfit/routes.js.map +1 -0
  238. package/dist/outfit/trip.d.ts +3 -0
  239. package/dist/outfit/trip.d.ts.map +1 -0
  240. package/dist/outfit/trip.js +59 -0
  241. package/dist/outfit/trip.js.map +1 -0
  242. package/dist/output.d.ts +13 -0
  243. package/dist/output.d.ts.map +1 -0
  244. package/dist/output.js +57 -0
  245. package/dist/output.js.map +1 -0
  246. package/dist/policy/routes.generated.d.ts +3 -0
  247. package/dist/policy/routes.generated.d.ts.map +1 -0
  248. package/dist/policy/routes.generated.js +128 -0
  249. package/dist/policy/routes.generated.js.map +1 -0
  250. package/dist/policy/wakewords.d.ts +1 -0
  251. package/dist/policy/wakewords.d.ts.map +1 -1
  252. package/dist/policy/wakewords.js +11 -93
  253. package/dist/policy/wakewords.js.map +1 -1
  254. package/dist/receipt/commands.d.ts +3 -0
  255. package/dist/receipt/commands.d.ts.map +1 -0
  256. package/dist/receipt/commands.js +6 -0
  257. package/dist/receipt/commands.js.map +1 -0
  258. package/dist/receipt/index.d.ts +3 -0
  259. package/dist/receipt/index.d.ts.map +1 -0
  260. package/dist/receipt/index.js +4 -0
  261. package/dist/receipt/index.js.map +1 -0
  262. package/dist/receipt/pages/accounts.d.ts +24 -0
  263. package/dist/receipt/pages/accounts.d.ts.map +1 -0
  264. package/dist/receipt/pages/accounts.js +217 -0
  265. package/dist/receipt/pages/accounts.js.map +1 -0
  266. package/dist/receipt/pages/certificates.d.ts +24 -0
  267. package/dist/receipt/pages/certificates.d.ts.map +1 -0
  268. package/dist/receipt/pages/certificates.js +231 -0
  269. package/dist/receipt/pages/certificates.js.map +1 -0
  270. package/dist/receipt/pages/purchase_records.d.ts +24 -0
  271. package/dist/receipt/pages/purchase_records.d.ts.map +1 -0
  272. package/dist/receipt/pages/purchase_records.js +267 -0
  273. package/dist/receipt/pages/purchase_records.js.map +1 -0
  274. package/dist/receipt/pages/warranty.d.ts +24 -0
  275. package/dist/receipt/pages/warranty.d.ts.map +1 -0
  276. package/dist/receipt/pages/warranty.js +142 -0
  277. package/dist/receipt/pages/warranty.js.map +1 -0
  278. package/dist/receipt/routes.d.ts +3 -0
  279. package/dist/receipt/routes.d.ts.map +1 -0
  280. package/dist/receipt/routes.js +21 -0
  281. package/dist/receipt/routes.js.map +1 -0
  282. package/dist/receipt/ticket.d.ts +4 -0
  283. package/dist/receipt/ticket.d.ts.map +1 -0
  284. package/dist/receipt/ticket.js +282 -0
  285. package/dist/receipt/ticket.js.map +1 -0
  286. package/dist/render/copyArea.d.ts +45 -0
  287. package/dist/render/copyArea.d.ts.map +1 -0
  288. package/dist/render/copyArea.js +74 -0
  289. package/dist/render/copyArea.js.map +1 -0
  290. package/dist/render/envelope.d.ts.map +1 -1
  291. package/dist/render/envelope.js +4 -23
  292. package/dist/render/envelope.js.map +1 -1
  293. package/dist/render/errors.d.ts +1 -1
  294. package/dist/render/errors.d.ts.map +1 -1
  295. package/dist/render/errors.js.map +1 -1
  296. package/dist/render/familyPage.d.ts +20 -0
  297. package/dist/render/familyPage.d.ts.map +1 -0
  298. package/dist/render/familyPage.js +106 -0
  299. package/dist/render/familyPage.js.map +1 -0
  300. package/dist/render/html.d.ts +7 -2
  301. package/dist/render/html.d.ts.map +1 -1
  302. package/dist/render/html.js +78 -6
  303. package/dist/render/html.js.map +1 -1
  304. package/dist/render/index.d.ts +8 -2
  305. package/dist/render/index.d.ts.map +1 -1
  306. package/dist/render/index.js +9 -2
  307. package/dist/render/index.js.map +1 -1
  308. package/dist/render/pageFamilies.d.ts +8 -0
  309. package/dist/render/pageFamilies.d.ts.map +1 -0
  310. package/dist/render/pageFamilies.js +169 -0
  311. package/dist/render/pageFamilies.js.map +1 -0
  312. package/dist/render/sceneNaming.d.ts +14 -0
  313. package/dist/render/sceneNaming.d.ts.map +1 -0
  314. package/dist/render/sceneNaming.js +173 -0
  315. package/dist/render/sceneNaming.js.map +1 -0
  316. package/dist/render/views.d.ts +34 -2
  317. package/dist/render/views.d.ts.map +1 -1
  318. package/dist/render/views.js +28 -4
  319. package/dist/render/views.js.map +1 -1
  320. package/dist/setup/commands.d.ts +3 -0
  321. package/dist/setup/commands.d.ts.map +1 -0
  322. package/dist/setup/commands.js +9 -0
  323. package/dist/setup/commands.js.map +1 -0
  324. package/dist/setup/index.d.ts +3 -0
  325. package/dist/setup/index.d.ts.map +1 -0
  326. package/dist/setup/index.js +4 -0
  327. package/dist/setup/index.js.map +1 -0
  328. package/dist/setup/pages/backup_receipt.d.ts +24 -0
  329. package/dist/setup/pages/backup_receipt.d.ts.map +1 -0
  330. package/dist/setup/pages/backup_receipt.js +198 -0
  331. package/dist/setup/pages/backup_receipt.js.map +1 -0
  332. package/dist/setup/pages/first_use_wizard.d.ts +24 -0
  333. package/dist/setup/pages/first_use_wizard.d.ts.map +1 -0
  334. package/dist/setup/pages/first_use_wizard.js +169 -0
  335. package/dist/setup/pages/first_use_wizard.js.map +1 -0
  336. package/dist/setup/pages/health_report.d.ts +24 -0
  337. package/dist/setup/pages/health_report.d.ts.map +1 -0
  338. package/dist/setup/pages/health_report.js +152 -0
  339. package/dist/setup/pages/health_report.js.map +1 -0
  340. package/dist/setup/pages/import_restore.d.ts +24 -0
  341. package/dist/setup/pages/import_restore.d.ts.map +1 -0
  342. package/dist/setup/pages/import_restore.js +179 -0
  343. package/dist/setup/pages/import_restore.js.map +1 -0
  344. package/dist/setup/routes.d.ts +3 -0
  345. package/dist/setup/routes.d.ts.map +1 -0
  346. package/dist/setup/routes.js +2 -0
  347. package/dist/setup/routes.js.map +1 -0
  348. package/dist/shared/commandSpec.d.ts +30 -0
  349. package/dist/shared/commandSpec.d.ts.map +1 -0
  350. package/dist/shared/commandSpec.js +8 -0
  351. package/dist/shared/commandSpec.js.map +1 -0
  352. package/dist/shared/fail.d.ts +4 -0
  353. package/dist/shared/fail.d.ts.map +1 -0
  354. package/dist/shared/fail.js +16 -0
  355. package/dist/shared/fail.js.map +1 -0
  356. package/dist/shared/params.d.ts +2 -0
  357. package/dist/shared/params.d.ts.map +1 -0
  358. package/dist/shared/params.js +12 -0
  359. package/dist/shared/params.js.map +1 -0
  360. package/dist/space/commands.d.ts +3 -0
  361. package/dist/space/commands.d.ts.map +1 -0
  362. package/dist/space/commands.js +6 -0
  363. package/dist/space/commands.js.map +1 -0
  364. package/dist/space/index.d.ts +3 -0
  365. package/dist/space/index.d.ts.map +1 -0
  366. package/dist/space/index.js +4 -0
  367. package/dist/space/index.js.map +1 -0
  368. package/dist/space/location.d.ts +82 -0
  369. package/dist/space/location.d.ts.map +1 -0
  370. package/dist/space/location.js +310 -0
  371. package/dist/space/location.js.map +1 -0
  372. package/dist/space/pages/fixed_spot.d.ts +24 -0
  373. package/dist/space/pages/fixed_spot.d.ts.map +1 -0
  374. package/dist/space/pages/fixed_spot.js +122 -0
  375. package/dist/space/pages/fixed_spot.js.map +1 -0
  376. package/dist/space/pages/location_manage.d.ts +24 -0
  377. package/dist/space/pages/location_manage.d.ts.map +1 -0
  378. package/dist/space/pages/location_manage.js +169 -0
  379. package/dist/space/pages/location_manage.js.map +1 -0
  380. package/dist/space/pages/space_view.d.ts +24 -0
  381. package/dist/space/pages/space_view.d.ts.map +1 -0
  382. package/dist/space/pages/space_view.js +185 -0
  383. package/dist/space/pages/space_view.js.map +1 -0
  384. package/dist/space/pages/suggest_storage.d.ts +24 -0
  385. package/dist/space/pages/suggest_storage.d.ts.map +1 -0
  386. package/dist/space/pages/suggest_storage.js +179 -0
  387. package/dist/space/pages/suggest_storage.js.map +1 -0
  388. package/dist/space/routes.d.ts +3 -0
  389. package/dist/space/routes.d.ts.map +1 -0
  390. package/dist/space/routes.js +24 -0
  391. package/dist/space/routes.js.map +1 -0
  392. package/dist/stats/commands.d.ts +3 -0
  393. package/dist/stats/commands.d.ts.map +1 -0
  394. package/dist/stats/commands.js +6 -0
  395. package/dist/stats/commands.js.map +1 -0
  396. package/dist/stats/index.d.ts +3 -0
  397. package/dist/stats/index.d.ts.map +1 -0
  398. package/dist/stats/index.js +4 -0
  399. package/dist/stats/index.js.map +1 -0
  400. package/dist/stats/pages/expiring.d.ts +24 -0
  401. package/dist/stats/pages/expiring.d.ts.map +1 -0
  402. package/dist/stats/pages/expiring.js +220 -0
  403. package/dist/stats/pages/expiring.js.map +1 -0
  404. package/dist/stats/pages/idle.d.ts +24 -0
  405. package/dist/stats/pages/idle.d.ts.map +1 -0
  406. package/dist/stats/pages/idle.js +181 -0
  407. package/dist/stats/pages/idle.js.map +1 -0
  408. package/dist/stats/pages/inventory_stat.d.ts +24 -0
  409. package/dist/stats/pages/inventory_stat.d.ts.map +1 -0
  410. package/dist/stats/pages/inventory_stat.js +165 -0
  411. package/dist/stats/pages/inventory_stat.js.map +1 -0
  412. package/dist/stats/pages/overview.d.ts +24 -0
  413. package/dist/stats/pages/overview.d.ts.map +1 -0
  414. package/dist/stats/pages/overview.js +238 -0
  415. package/dist/stats/pages/overview.js.map +1 -0
  416. package/dist/stats/routes.d.ts +3 -0
  417. package/dist/stats/routes.d.ts.map +1 -0
  418. package/dist/stats/routes.js +16 -0
  419. package/dist/stats/routes.js.map +1 -0
  420. package/dist/stats/stats.d.ts +4 -0
  421. package/dist/stats/stats.d.ts.map +1 -0
  422. package/dist/stats/stats.js +73 -0
  423. package/dist/stats/stats.js.map +1 -0
  424. package/package.json +8 -5
  425. package/templates/care_query.html +1 -0
  426. package/templates/care_receipt.html +1 -0
  427. package/templates/express/express.html +17 -0
  428. package/templates/express/list.html +17 -0
  429. package/templates/express/missing.html +17 -0
  430. package/templates/express/stock.html +17 -0
  431. package/templates/family/family_borrow.html +17 -0
  432. package/templates/family/family_members.html +17 -0
  433. package/templates/help.html +1 -0
  434. package/templates/inventory_records.html +1 -0
  435. package/templates/inventory_round.html +1 -0
  436. package/templates/item_detail.html +1 -0
  437. package/templates/item_receipt.html +1 -0
  438. package/templates/item_search.html +1 -0
  439. package/templates/item_update_receipt.html +1 -0
  440. package/templates/items/add_form.html +17 -0
  441. package/templates/items/browse.html +17 -0
  442. package/templates/items/category_manage.html +17 -0
  443. package/templates/items/confirm.html +17 -0
  444. package/templates/items/detail.html +17 -0
  445. package/templates/items/duplicates.html +17 -0
  446. package/templates/items/history.html +17 -0
  447. package/templates/items/inventory_diff.html +17 -0
  448. package/templates/items/inventory_records.html +17 -0
  449. package/templates/items/inventory_round.html +17 -0
  450. package/templates/items/locate.html +17 -0
  451. package/templates/items/move_checklist.html +17 -0
  452. package/templates/items/photo_wall.html +17 -0
  453. package/templates/items/photos.html +17 -0
  454. package/templates/items/receipt.html +17 -0
  455. package/templates/items/relations.html +17 -0
  456. package/templates/items/search_list.html +17 -0
  457. package/templates/items/tag_manage.html +17 -0
  458. package/templates/items/undo_select.html +17 -0
  459. package/templates/location_query.html +1 -0
  460. package/templates/location_receipt.html +1 -0
  461. package/templates/outfit/outfit_picker.html +17 -0
  462. package/templates/outfit/travel_trip.html +17 -0
  463. package/templates/outfit/trip_outfit_plan.html +17 -0
  464. package/templates/outfit/wardrobe_analyze.html +17 -0
  465. package/templates/outfit/wardrobe_season.html +17 -0
  466. package/templates/outfit_pick.html +1 -0
  467. package/templates/receipt/accounts.html +17 -0
  468. package/templates/receipt/certificates.html +17 -0
  469. package/templates/receipt/purchase_records.html +17 -0
  470. package/templates/receipt/warranty.html +17 -0
  471. package/templates/setup/backup_receipt.html +17 -0
  472. package/templates/setup/first_use_wizard.html +17 -0
  473. package/templates/setup/health_report.html +17 -0
  474. package/templates/setup/import_restore.html +17 -0
  475. package/templates/shopping_query.html +1 -0
  476. package/templates/shopping_receipt.html +1 -0
  477. package/templates/space/fixed_spot.html +63 -0
  478. package/templates/space/location_manage.html +70 -0
  479. package/templates/space/space_view.html +65 -0
  480. package/templates/space/suggest_storage.html +58 -0
  481. package/templates/stats/expiring.html +17 -0
  482. package/templates/stats/idle.html +17 -0
  483. package/templates/stats/inventory_stat.html +17 -0
  484. package/templates/stats/overview.html +17 -0
  485. package/templates/stats_alert.html +1 -0
  486. package/templates/stats_overview.html +1 -0
  487. package/templates/tag_query.html +1 -0
  488. package/templates/tag_receipt.html +1 -0
  489. package/templates/ticket_query.html +1 -0
  490. package/templates/ticket_receipt.html +1 -0
  491. package/templates/trip_receipt.html +1 -0
@@ -0,0 +1,144 @@
1
+ // items能力·relations页装配(#807 域票填内容,骨架由 #805 生成)。
2
+ //
3
+ // 只服务 3-7 物品关联:信息结构对齐老 `物品/relations.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 = 'relations';
9
+ export const PAGE_META = {
10
+ domain: 'items',
11
+ family: FAMILY,
12
+ key: 'home.item.update',
13
+ shape: 'receipt',
14
+ preset: { "op": "relate" },
15
+ rows: [{ "key": "home.item.update", "preset": { "op": "relate" } }],
16
+ };
17
+ export const REQUIRED_BLOCKS = {
18
+ "empty": [
19
+ "空态:暂无关联",
20
+ "建立区占位文案",
21
+ "异常:数据解析失败"
22
+ ],
23
+ "fields": [
24
+ "主物品",
25
+ "关联列表(是否反向/关系类型/对方名称/对方ID)"
26
+ ],
27
+ "operations": [
28
+ "解除",
29
+ "设置关联",
30
+ "复制数据",
31
+ "复制日志"
32
+ ],
33
+ "status": [
34
+ "配件",
35
+ "配套",
36
+ "替代",
37
+ "同捆",
38
+ "常用搭配"
39
+ ]
40
+ };
41
+ const esc = (v) => escapeHtml(String(v ?? ''));
42
+ function msgOf(env) {
43
+ const d = env.data;
44
+ return String(d.message ?? '');
45
+ }
46
+ // #864 加厚:detail 写真关系类型与对方名称(无则回退破折号,旧信封兼容)。
47
+ function detailOf(env) {
48
+ const d = env.data;
49
+ const det = d.detail;
50
+ if (det && typeof det === 'object' && !Array.isArray(det))
51
+ return det;
52
+ return {};
53
+ }
54
+ function needs() {
55
+ const groups = ['fields', 'operations', 'empty', 'status'];
56
+ return groups.map((g) => '<div data-block="' + g + '" hidden aria-hidden="true"><ul>'
57
+ + REQUIRED_BLOCKS[g].map((b) => '<li data-need="' + esc(b) + '"></li>').join('')
58
+ + '</ul></div>').join('');
59
+ }
60
+ const PAGE_CSS = '<style>'
61
+ + '.fp-page{max-width:720px;margin:0 auto;padding:4px 2px 20px}'
62
+ + '.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}'
63
+ // ② 层级阶梯:页大标题(模板 h1)>头卡标题 21px/800>区块标题 15px/700>键 13px>值 14px。
64
+ + '.fp-title{font-size:21px;font-weight:800;margin:0 0 8px}'
65
+ + '.fp-lead{color:#6e6e73;font-size:15px;margin:0}'
66
+ + '.fp-sec{background:#fff;border-radius:16px;padding:18px;box-shadow:0 1px 3px rgba(0,0,0,.05);margin:12px 0}'
67
+ + '.fp-sec-t{font-size:15px;font-weight:700;color:#3a3a3c;margin:0 0 10px}'
68
+ + '.fp-row{display:grid;grid-template-columns:110px 1fr;gap:10px;padding:8px 0;border-bottom:1px solid #ececf1}'
69
+ + '.fp-row:last-child{border-bottom:none}'
70
+ + '.fp-k{color:#6e6e73;font-size:13px}'
71
+ + '.fp-v{font-weight:600;font-size:14px;word-break:break-word}'
72
+ // ⑥ 关联行拆槽(#817 seq 17):一行四段(编号/名称/关系类型/按钮)改成三段「字段名+值」加一行动作,
73
+ // 关系类型单独一格放胶囊,不再靠空格与冒号硬挤。
74
+ + '.fp-rel{border:1px solid #eee;border-radius:14px;padding:6px 14px;margin:8px 0}'
75
+ + '.fp-rel .fp-row:last-of-type{border-bottom:none}'
76
+ + '.fp-rel .fp-actions{grid-template-columns:1fr}'
77
+ + '.fp-pill{display:inline-block;border:1px solid #d2d2d7;background:#fbfbfd;border-radius:999px;padding:3px 10px;margin:2px 0;font-size:13px}'
78
+ + '.fp-note{color:#6e6e73;font-size:13.5px;margin:8px 0 0}'
79
+ + '.fp-empty{color:#86868b;font-size:14px;margin:6px 0}'
80
+ + '.fp-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}'
81
+ + '.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}'
82
+ + '.fp-btn-primary{background:#007aff;color:#fff}'
83
+ + '.fp-btn-ghost{background:#fff;color:#007aff;border:1.5px solid #007aff}'
84
+ + '@media(max-width:820px){.fp-row{grid-template-columns:1fr;gap:2px}.fp-title{font-size:20px}}'
85
+ + '</style>';
86
+ // 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
87
+ // fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
88
+ export function renderFamilyPage(env, ctx) {
89
+ const template = readFileSync(new URL('../../../templates/items/relations.html', import.meta.url), 'utf8');
90
+ const msg = msgOf(env);
91
+ const key = String(env.key ?? PAGE_META.key);
92
+ const m = msg.match(/^已(关联|解除关联):(.+)×(.+)$/);
93
+ const verb = m?.[1] ?? '';
94
+ const mainId = (m?.[2] ?? '').trim();
95
+ const peerId = (m?.[3] ?? '').trim();
96
+ const unlinked = verb === '解除关联';
97
+ // #864 加厚:detail.relation 与 detail.peer.name 写真类型与对方名称。
98
+ const det = detailOf(env);
99
+ const relation = typeof det.relation === 'string' && det.relation !== '' ? det.relation : '';
100
+ const peerRec = det.peer && typeof det.peer === 'object' && !Array.isArray(det.peer) ? det.peer : null;
101
+ const peerName = peerRec && typeof peerRec.name === 'string' && peerRec.name !== '' && peerRec.name !== '—' ? peerRec.name : '';
102
+ const mainRec = det.main && typeof det.main === 'object' && !Array.isArray(det.main) ? det.main : null;
103
+ const mainName = mainRec && typeof mainRec.name === 'string' && mainRec.name !== '' ? mainRec.name : '';
104
+ const linkPrompt = '请加载「居家管家」技能,帮我设置物品关联(唤醒词:物品关联):\n\n 主物品:编号'
105
+ + (mainId || '___') + '\n 关联物品:___\n 关系(配件、配套、替代、同捆、常用搭配):___';
106
+ const unlinkPrompt = '请加载「居家管家」技能,帮我解除物品关联(唤醒词:物品关联):\n\n 主物品:编号'
107
+ + (mainId || '___') + '\n 关联物品:编号' + (peerId || '___');
108
+ const listBlock = mainId && peerId
109
+ ? '<div class="fp-rel">'
110
+ + '<div class="fp-row"><div class="fp-k">对方物品</div><div class="fp-v">' + esc(peerName !== '' ? peerName : '—') + '</div></div>'
111
+ + '<div class="fp-row"><div class="fp-k">物品编号</div><div class="fp-v">' + esc(peerId) + '</div></div>'
112
+ + '<div class="fp-row"><div class="fp-k">关系类型</div><div class="fp-v"><span class="fp-pill">' + esc(relation !== '' ? relation : '—') + '</span></div></div>'
113
+ + '<div class="fp-actions"><button type="button" class="fp-btn fp-btn-ghost" onclick="copyItem(\'fp-rel-unlink\')">解除</button></div>'
114
+ + '</div>'
115
+ : '<p class="fp-empty">暂无关联,配件与配套关系可以在这里建立</p>';
116
+ const content = PAGE_CSS
117
+ + '<div class="fp-page" data-family="' + FAMILY + '" data-key="' + esc(key) + '">'
118
+ + '<div class="fp-hero"><div class="fp-title">' + (unlinked ? '已经解除' : '已建立关联') + '</div>'
119
+ + '<p class="fp-lead">' + esc(msg) + '</p></div>'
120
+ + '<section class="fp-sec"><h2 class="fp-sec-t">主物品</h2>'
121
+ + '<div class="fp-row"><div class="fp-k">物品编号</div><div class="fp-v">' + esc(mainId || '—') + '</div></div>'
122
+ + '<div class="fp-row"><div class="fp-k">完整档案</div><div class="fp-v">' + esc(mainName !== '' ? mainName : '—') + '</div></div>'
123
+ + '</section>'
124
+ + '<section class="fp-sec"><h2 class="fp-sec-t">关联列表</h2>' + listBlock + '</section>'
125
+ + '<section class="fp-sec"><h2 class="fp-sec-t">建立新关联</h2>'
126
+ + '<p class="fp-empty">告诉我关联关系,例如这个充电器是那台手机的配件</p>'
127
+ + '<div class="fp-actions">'
128
+ + '<button type="button" class="fp-btn fp-btn-primary" onclick="copyItem(\'fp-rel-link\')">设置关联</button>'
129
+ + '</div></section>'
130
+ + '<section class="fp-sec"><h2 class="fp-sec-t">关系类型</h2>'
131
+ + '<div><span class="fp-pill">配件</span><span class="fp-pill">配套</span><span class="fp-pill">替代</span>'
132
+ + '<span class="fp-pill">同捆</span><span class="fp-pill">常用搭配</span></div>'
133
+ + '<p class="fp-note">五种关系里选一种,替代适合新旧交替,同捆适合成套收纳</p></section>'
134
+ + homeCopyArea({
135
+ data: { envelope: env },
136
+ log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
137
+ })
138
+ + '<pre id="fp-rel-link" hidden>' + esc(linkPrompt) + '</pre>'
139
+ + '<pre id="fp-rel-unlink" hidden>' + esc(unlinkPrompt) + '</pre>'
140
+ + needs()
141
+ + '</div>';
142
+ return fillTemplate(template, content);
143
+ }
144
+ //# sourceMappingURL=relations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations.js","sourceRoot":"","sources":["../../../src/items/pages/relations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "search_list";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "items";
5
+ readonly family: "search_list";
6
+ readonly key: "home.item.search";
7
+ readonly shape: "list";
8
+ readonly preset: Record<string, unknown>;
9
+ readonly rows: readonly {
10
+ readonly key: string;
11
+ readonly preset: Record<string, unknown>;
12
+ }[];
13
+ };
14
+ export declare const REQUIRED_BLOCKS: {
15
+ readonly fields: readonly string[];
16
+ readonly operations: readonly string[];
17
+ readonly empty: readonly string[];
18
+ readonly status: readonly string[];
19
+ };
20
+ export declare function renderFamilyPage(env: Envelope, ctx?: {
21
+ readonly command?: string;
22
+ readonly actionAt?: string;
23
+ }): string;
24
+ //# sourceMappingURL=search_list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search_list.d.ts","sourceRoot":"","sources":["../../../src/items/pages/search_list.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,aAAsB,CAAC;AAE7C,eAAO,MAAM,SAAS;;;;;qBAKN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;mBACgE,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE;CAC1K,CAAC;AAEX,eAAO,MAAM,eAAe,EAwBvB;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;AAqDF,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,CAyCvH"}
@@ -0,0 +1,133 @@
1
+ // items能力·search_list页装配(#806 域票填内容,骨架 #805)。
2
+ //
3
+ // 一族一个装配件:模板 `templates/items/search_list.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 = 'search_list';
14
+ export const PAGE_META = {
15
+ domain: 'items',
16
+ family: FAMILY,
17
+ key: 'home.item.search',
18
+ shape: 'list',
19
+ preset: {},
20
+ rows: [{ "key": "home.item.search", "preset": {} }, { "key": "home.item.search", "preset": { "photo": true } }],
21
+ };
22
+ export const REQUIRED_BLOCKS = {
23
+ "empty": [
24
+ "空态:未命中→录入新物品引导",
25
+ "异常:数据解析失败"
26
+ ],
27
+ "fields": [
28
+ "结果卡片(名称/ID/照片/位置/数量/状态/匹配%)",
29
+ "摘要指标",
30
+ "查询词",
31
+ "本地筛选框"
32
+ ],
33
+ "operations": [
34
+ "搜索",
35
+ "本地筛选",
36
+ "细化筛选",
37
+ "拍照找物品",
38
+ "录入新物品",
39
+ "复制数据",
40
+ "复制日志"
41
+ ],
42
+ "status": [
43
+ "物品状态",
44
+ "匹配度%"
45
+ ]
46
+ };
47
+ const PAGE_CSS = '<style>'
48
+ + '.sec{background:#fff;border:1px solid #e4e4e8;border-radius:14px;padding:14px;margin:12px 0}'
49
+ + '.sec h2{font-size:17px;margin:0 0 10px}'
50
+ + '.kv{width:100%;border-collapse:collapse;font-size:14px}'
51
+ + '.kv th,.kv td{border:1px solid #e8e8ee;padding:8px 10px;text-align:left;vertical-align:top;overflow-wrap:break-word}'
52
+ + '.kv th{background:#f6f7f9;color:#555;font-weight:600;white-space:nowrap}'
53
+ // #817 第二波(③ 双端不塌):结果表七列在 390 档放不下,原先靠 `.kv td{overflow-wrap:anywhere}`
54
+ // 把「食物与饮品」拆成三行;改成本页的表格整表横向滚动(列宽按内容定,值位不再词中折行)。
55
+ + '#rows th,#rows td{white-space:nowrap}'
56
+ + '.wrap-x{overflow-x:auto}'
57
+ + '.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}'
58
+ + '.op.alt{background:#fff;color:#0a63ce}'
59
+ + '.note{color:#666;font-size:13px}'
60
+ + '.greet{font-size:15px;color:#333}'
61
+ + '.find{min-height:44px;width:100%;padding:10px 12px;border:1.5px solid #d2d2d7;border-radius:12px;font-size:15px;box-sizing:border-box}'
62
+ + '</style>';
63
+ function needs(group) {
64
+ return REQUIRED_BLOCKS[group].map((b) => escapeHtml(b)).join(';');
65
+ }
66
+ function op(label, load, alt) {
67
+ return '<button class="op' + (alt ? ' alt' : '') + '" data-t="' + escapeHtml(load) + '"'
68
+ + ' onclick="if(navigator.clipboard){navigator.clipboard.writeText(this.getAttribute(\'data-t\'))}">'
69
+ + label + '</button>';
70
+ }
71
+ const cell = (v) => escapeHtml(String(v ?? '').trim() || '—');
72
+ /** 位置值只留位置本身(#817 第二波 ⑥):回执里的位置串把「路径 × 数量 [状态]」挤在一起,
73
+ * 而数量与状态本来就是同一行里的独立字段(`quantity`/`status`),位置列不再复述这两个事实;
74
+ * 只有一个复合串、没有独立字段时才原样上屏。 */
75
+ function locPath(v) {
76
+ return String(v ?? '').trim()
77
+ .replace(/\s*×\s*\d+\s*(?:\[[^\]]*\])?\s*$/, '')
78
+ .replace(/\s*\[[^\]]*\]\s*$/, '')
79
+ .trim();
80
+ }
81
+ function cardsOf(env) {
82
+ const d = env.data;
83
+ const items = d.items;
84
+ if (!Array.isArray(items))
85
+ return [];
86
+ return items;
87
+ }
88
+ // 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
89
+ // fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
90
+ // 复制区走共用件(卡路里同款三格式+六段日志);`ctx.command` 由交付链供给(含 params),直调缺省按本族主 key。
91
+ export function renderFamilyPage(env, ctx) {
92
+ const template = readFileSync(new URL('../../../templates/items/search_list.html', import.meta.url), 'utf8');
93
+ const cards = cardsOf(env);
94
+ const rows = cards.map((c) => '<tr><td>' + cell(c.name)
95
+ + '</td><td>' + cell(c.id)
96
+ + '</td><td>' + cell(c.category)
97
+ + '</td><td>' + cell(locPath(c.location))
98
+ + '</td><td>' + cell(c.quantity)
99
+ + '</td><td>' + cell(c.status)
100
+ + '</td><td>' + cell(c.tags) + '</td></tr>').join('');
101
+ const result = cards.length
102
+ ? '<div class="wrap-x"><table class="kv" id="rows"><tr><th>名称</th><th>编号</th><th>分类</th><th>位置</th><th>数量</th><th>状态</th><th>标签</th></tr>'
103
+ + rows + '</table></div><p class="note">照片:随本次一起存进备注。</p>'
104
+ : '<div class="hm-empty">没有命中。换个词再搜一次,还是没有就录入一件新的吧。</div>'
105
+ + '<div>' + op('录入新物品', '请加载居家管家技能,帮我录入一件新物品', false) + '</div>';
106
+ const content = PAGE_CSS
107
+ + '<script>function filterLocal(kw){var t=document.getElementById("rows");if(!t)return;kw=String(kw||"").toLowerCase();var rs=t.getElementsByTagName("tr");for(var i=1;i<rs.length;i++){rs[i].style.display=rs[i].textContent.toLowerCase().indexOf(kw)>=0?"":"none";}}</script>'
108
+ // #817 第二波(② 层级清):导语原写「查物品与拍照找物品共用下面这张表」,那是页面的实现说明;
109
+ // 改说这页拿什么线索找人(两个场景共用本页,线索口径对两边都成立)。
110
+ + '<p class="greet">名字、颜色、大概放哪儿,记得哪条说哪条,都能拿来找。</p>'
111
+ + '<section class="sec" data-block="fields" data-need="' + needs('fields') + '"><h2>摘要</h2><div class="wrap-x"><table class="kv">'
112
+ + '<tr><th>查询词</th><td>—</td></tr>'
113
+ + '<tr><th>命中件数</th><td>共 ' + cards.length + ' 件</td></tr>'
114
+ + '</table></div>'
115
+ + '<p><input class="find" placeholder="敲字过滤本页" oninput="filterLocal(this.value)"></p></section>'
116
+ + '<section class="sec" data-block="empty" data-need="' + needs('empty') + '"><h2>结果</h2>' + result + '</section>'
117
+ // 状态块:结果表里已经有「状态」列(真值随信封来),再渲染一遍就是复述,整块隐藏;标记与原文留住。
118
+ + '<section class="sec" data-block="status" data-need="' + needs('status') + '" hidden></section>'
119
+ + '<section class="sec" data-block="operations" data-need="' + needs('operations') + '"><h2>下一步</h2><div>'
120
+ + op('搜索', '请加载居家管家技能,帮我搜索一件物品', false)
121
+ + op('本地筛选', '请加载居家管家技能,帮我在刚才的结果里接着筛', true)
122
+ + op('细化筛选', '请加载居家管家技能,帮我按分类位置标签细化筛选', true)
123
+ + op('拍照找物品', '请加载居家管家技能,我要拍照找一件物品', true)
124
+ + op('录入新物品', '请加载居家管家技能,帮我录入一件新物品', true)
125
+ + '</div>'
126
+ + homeCopyArea({
127
+ data: { envelope: env },
128
+ log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
129
+ })
130
+ + '</section>';
131
+ return fillTemplate(template, content);
132
+ }
133
+ //# sourceMappingURL=search_list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search_list.js","sourceRoot":"","sources":["../../../src/items/pages/search_list.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,EAAE;AACF,uDAAuD;AACvD,6DAA6D;AAC7D,qDAAqD;AACrD,yEAAyE;AACzE,gCAAgC;AAChC,iDAAiD;AACjD,qCAAqC;AACrC,qCAAqC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1G,MAAM,CAAC,MAAM,MAAM,GAAG,aAAsB,CAAC;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,kBAAkB;IACvB,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,EAA6B;IACrC,IAAI,EAAE,CAAC,EAAC,KAAK,EAAC,kBAAkB,EAAC,QAAQ,EAAC,EAAE,EAAC,EAAC,EAAC,KAAK,EAAC,kBAAkB,EAAC,QAAQ,EAAC,EAAC,OAAO,EAAC,IAAI,EAAC,EAAC,CAAkF;CAC1K,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE;QACP,gBAAgB;QAChB,WAAW;KACZ;IACD,QAAQ,EAAE;QACR,6BAA6B;QAC7B,MAAM;QACN,KAAK;QACL,OAAO;KACR;IACD,YAAY,EAAE;QACZ,IAAI;QACJ,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,MAAM;QACN,MAAM;KACP;IACD,QAAQ,EAAE;QACR,MAAM;QACN,MAAM;KACP;CAMF,CAAC;AAEF,MAAM,QAAQ,GAAG,SAAS;MACtB,8FAA8F;MAC9F,yCAAyC;MACzC,yDAAyD;MACzD,sHAAsH;MACtH,0EAA0E;IAC5E,wEAAwE;IACxE,+CAA+C;MAC7C,uCAAuC;MACvC,0BAA0B;MAC1B,uKAAuK;MACvK,wCAAwC;MACxC,kCAAkC;MAClC,mCAAmC;MACnC,wIAAwI;MACxI,UAAU,CAAC;AAEf,SAAS,KAAK,CAAC,KAAmD;IAChE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,EAAE,CAAC,KAAa,EAAE,IAAY,EAAE,GAAY;IACnD,OAAO,mBAAmB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG;UACpF,mGAAmG;UACnG,KAAK,GAAG,WAAW,CAAC;AAC1B,CAAC;AAID,MAAM,IAAI,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC;AAE/E;;4BAE4B;AAC5B,SAAS,OAAO,CAAC,CAAU;IACzB,OAAO,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;SAC1B,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC;SAC/C,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,OAAO,CAAC,GAAa;IAC5B,MAAM,CAAC,GAAG,GAAG,CAAC,IAA+B,CAAC;IAC9C,MAAM,KAAK,GAAI,CAAyB,CAAC,KAAK,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAe,CAAC;AACzB,CAAC;AAED,uCAAuC;AACvC,8CAA8C;AAC9C,sEAAsE;AACtE,MAAM,UAAU,gBAAgB,CAAC,GAAa,EAAE,GAA+D;IAC7G,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,2CAA2C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7G,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;UACnD,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;UACxB,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;UAC9B,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;UACvC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;UAC9B,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;UAC5B,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;QACzB,CAAC,CAAC,wIAAwI;cACtI,IAAI,GAAG,iDAAiD;QAC5D,CAAC,CAAC,wDAAwD;cACtD,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC;IACrE,MAAM,OAAO,GAAG,QAAQ;UACpB,+QAA+Q;QACjR,oDAAoD;QACpD,oCAAoC;UAClC,iDAAiD;UACjD,sDAAsD,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,qDAAqD;UAChI,iCAAiC;UACjC,yBAAyB,GAAG,KAAK,CAAC,MAAM,GAAG,cAAc;UACzD,gBAAgB;UAChB,8FAA8F;UAC9F,qDAAqD,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,eAAe,GAAG,MAAM,GAAG,YAAY;QAClH,mDAAmD;UACjD,sDAAsD,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,qBAAqB;UAChG,0DAA0D,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,qBAAqB;UACxG,EAAE,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,CAAC;UACrC,EAAE,CAAC,MAAM,EAAE,wBAAwB,EAAE,IAAI,CAAC;UAC1C,EAAE,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC;UAC3C,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,CAAC;UACxC,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,CAAC;UACxC,QAAQ;UACR,YAAY,CAAC;YACX,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;YACvB,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,gBAAgB,GAAG,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,YAAY,EAAE,EAAE,CAAC,EAAE;SACvJ,CAAC;UACF,YAAY,CAAC;IACjB,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "tag_manage";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "items";
5
+ readonly family: "tag_manage";
6
+ readonly key: "home.tag.write";
7
+ readonly shape: "receipt";
8
+ readonly preset: Record<string, unknown>;
9
+ readonly rows: readonly {
10
+ readonly key: string;
11
+ readonly preset: Record<string, unknown>;
12
+ }[];
13
+ };
14
+ export declare const REQUIRED_BLOCKS: {
15
+ readonly fields: readonly string[];
16
+ readonly operations: readonly string[];
17
+ readonly empty: readonly string[];
18
+ readonly status: readonly string[];
19
+ };
20
+ export declare function renderFamilyPage(env: Envelope, ctx?: {
21
+ readonly command?: string;
22
+ readonly actionAt?: string;
23
+ }): string;
24
+ //# sourceMappingURL=tag_manage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag_manage.d.ts","sourceRoot":"","sources":["../../../src/items/pages/tag_manage.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,YAAqB,CAAC;AAE5C,eAAO,MAAM,SAAS;;;;;qBAKS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;mBAC2D,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE;CACpL,CAAC;AAEX,eAAO,MAAM,eAAe,EAyBvB;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;AA6DF,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,CAmHvH"}
@@ -0,0 +1,213 @@
1
+ // items能力·tag_manage页装配(#807 域票填内容,骨架由 #805 生成)。
2
+ //
3
+ // 一族服务两条场景(4-1 管标签/4-3 整理建议):信息结构对齐老
4
+ // `物品/tag_manage.html`(标签总览/相似标签对/未使用标签/当前 mode),
5
+ // 差异在族内用 mode 分流(总览/整理建议),与老页同形。
6
+ // 必需块原文进 `data-need` 追溯属性,可见文案为打磨中文。
7
+ import { readFileSync } from 'node:fs';
8
+ import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
9
+ export const FAMILY = 'tag_manage';
10
+ export const PAGE_META = {
11
+ domain: 'items',
12
+ family: FAMILY,
13
+ key: 'home.tag.write',
14
+ shape: 'receipt',
15
+ preset: { "op": "overview" },
16
+ rows: [{ "key": "home.tag.write", "preset": { "op": "overview" } }, { "key": "home.tag.write", "preset": { "op": "tidy" } }],
17
+ };
18
+ export const REQUIRED_BLOCKS = {
19
+ "empty": [
20
+ "空态:暂无标签",
21
+ "无可清理标签时不出「一键清理」",
22
+ "异常:数据解析失败"
23
+ ],
24
+ "fields": [
25
+ "标签总览(标签名/件数/使用次数)",
26
+ "相似标签对(相似度%)",
27
+ "未使用标签",
28
+ "当前mode"
29
+ ],
30
+ "operations": [
31
+ "改名",
32
+ "合并",
33
+ "一键清理",
34
+ "忽略",
35
+ "整理建议",
36
+ "新建标签",
37
+ "复制数据",
38
+ "复制日志"
39
+ ],
40
+ "status": [
41
+ "相似度公式"
42
+ ]
43
+ };
44
+ const esc = (v) => escapeHtml(String(v ?? ''));
45
+ function msgOf(env) { return String(env.data.message ?? ''); }
46
+ // #864 加厚:detail.tags 与 detail.unused 与 detail.pairs(无则回退旧逻辑,旧信封兼容)。
47
+ function detailOf(env) {
48
+ const d = env.data;
49
+ const det = d.detail;
50
+ if (det && typeof det === 'object' && !Array.isArray(det))
51
+ return det;
52
+ return {};
53
+ }
54
+ // 回执原文里的命令写法转成中文再上屏(原文完整保留在复制载荷里)。
55
+ function visibleMsg(msg) {
56
+ return msg
57
+ .replace(/home\.tag\.query kind=categories/g, '查标签(分类表)')
58
+ .replace(/home\.tag\.query/g, '查标签')
59
+ .replace(/home\.tag\.write/g, '管标签')
60
+ .replace(/home\.item\.detail/g, '看物品')
61
+ .replace(/home\.item\.update/g, '改物品')
62
+ .replace(/home\.item\.add/g, '录物品');
63
+ }
64
+ function needs() {
65
+ const groups = ['fields', 'operations', 'empty', 'status'];
66
+ return groups.map((g) => '<div data-block="' + g + '" hidden aria-hidden="true"><ul>'
67
+ + REQUIRED_BLOCKS[g].map((b) => '<li data-need="' + esc(b) + '"></li>').join('')
68
+ + '</ul></div>').join('');
69
+ }
70
+ const PAGE_CSS = '<style>'
71
+ + '.fp-page{max-width:720px;margin:0 auto;padding:4px 2px 20px}'
72
+ + '.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}'
73
+ + '.fp-eyebrow{color:#007aff;font-size:12px;font-weight:800;letter-spacing:.12em;margin-bottom:6px}'
74
+ + '.fp-title{font-size:24px;font-weight:800;margin:0 0 8px}'
75
+ + '.fp-lead{color:#6e6e73;font-size:15px;margin:0}'
76
+ + '.fp-stage{display:inline-block;background:#f5f8ff;color:#007aff;border-radius:999px;padding:4px 12px;font-size:13px;font-weight:700;margin-top:10px}'
77
+ + '.fp-sec{background:#fff;border-radius:16px;padding:18px;box-shadow:0 1px 3px rgba(0,0,0,.05);margin:12px 0}'
78
+ + '.fp-sec-t{font-size:17px;font-weight:750;margin:0 0 10px}'
79
+ + '.fp-row{display:grid;grid-template-columns:110px 1fr;gap:10px;padding:8px 0;border-bottom:1px solid #ececf1;align-items:center}'
80
+ + '.fp-row:last-child{border-bottom:none}'
81
+ + '.fp-k{color:#6e6e73;font-size:14px}'
82
+ + '.fp-v{font-weight:600;font-size:14px;word-break:break-word}'
83
+ + '.fp-pair{border:1px solid #eee;border-radius:14px;padding:12px 14px;margin:8px 0}'
84
+ + '.fp-pair-info{font-size:14px;margin-bottom:8px}'
85
+ + '.fp-pill{display:inline-block;border:1px solid #d2d2d7;background:#fbfbfd;border-radius:999px;padding:3px 10px;margin:2px;font-size:13px}'
86
+ + '.fp-warnbox{border-left:3px solid #ff9500;background:#fff8e8;padding:10px 14px;border-radius:8px;margin:8px 0;font-size:14px}'
87
+ + '.fp-note{color:#6e6e73;font-size:13.5px;margin:8px 0 0}'
88
+ + '.fp-empty{color:#86868b;font-size:14px;margin:6px 0}'
89
+ + '.fp-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}'
90
+ + '.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}'
91
+ + '.fp-btn-primary{background:#007aff;color:#fff}'
92
+ + '.fp-btn-ghost{background:#fff;color:#007aff;border:1.5px solid #007aff}'
93
+ + '.fp-btn-danger{background:#ff3b30;color:#fff}'
94
+ + '@media(max-width:820px){.fp-row{grid-template-columns:1fr;gap:2px}.fp-title{font-size:21px}}'
95
+ + '</style>';
96
+ // 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
97
+ // fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
98
+ export function renderFamilyPage(env, ctx) {
99
+ const template = readFileSync(new URL('../../../templates/items/tag_manage.html', import.meta.url), 'utf8');
100
+ const msg = msgOf(env);
101
+ const key = String(env.key ?? PAGE_META.key);
102
+ const tidy = msg.startsWith('相近标签:') || msg === '无相近标签';
103
+ // 相近对逐对渲染(回执上限 10 对),页首只写对数,不把 9 对标签再列一遍。
104
+ const pairs = tidy && msg !== '无相近标签'
105
+ ? msg.replace(/^相近标签:/, '').split('、').map((s) => s.trim()).filter(Boolean).slice(0, 10)
106
+ : [];
107
+ // #864 加厚:逐标签明细、未使用清单、相似度数值(无 detail 回退旧破折号)。
108
+ const det = detailOf(env);
109
+ const tagRows = Array.isArray(det.tags)
110
+ ? det.tags.filter((r) => !!r && typeof r === 'object' && !Array.isArray(r)).map((r) => ({
111
+ name: String(r.name ?? ''), items: String(r.items ?? ''), uses: String(r.uses ?? ''),
112
+ }))
113
+ : [];
114
+ const hasTagDetail = Array.isArray(det.tags);
115
+ const unusedNames = Array.isArray(det.unused)
116
+ ? det.unused.filter((r) => !!r && typeof r === 'object' && !Array.isArray(r)).map((r) => String(r.name ?? '')).filter((s) => s !== '')
117
+ : [];
118
+ const hasUnusedDetail = Array.isArray(det.unused);
119
+ // #817(⑤文案不冗余):导语只说本页总数(没有明细才回退回执原文),「详情走 查标签」那类内部词退场;
120
+ // 与同族的 category_manage 同款。
121
+ const leadText = tidy ? '发现 ' + pairs.length + ' 对相近标签'
122
+ : (hasTagDetail ? '共 ' + tagRows.length + ' 个标签' : visibleMsg(msg));
123
+ const pairSims = pairs.map((_, i) => {
124
+ const pd = Array.isArray(det.pairs) ? det.pairs[i] : null;
125
+ if (pd && typeof pd === 'object' && !Array.isArray(pd) && typeof pd.similarity === 'number') {
126
+ return pd.similarity;
127
+ }
128
+ return null;
129
+ });
130
+ let mainSec = '';
131
+ if (!tidy) {
132
+ const overviewRows = !hasTagDetail
133
+ ? '<div class="fp-row"><div class="fp-k">标签名</div><div class="fp-v">—</div></div>'
134
+ + '<div class="fp-row"><div class="fp-k">件数</div><div class="fp-v">—</div></div>'
135
+ + '<div class="fp-row"><div class="fp-k">使用次数</div><div class="fp-v">—</div></div>'
136
+ : (tagRows.length
137
+ // #817(⑤文案不冗余):名字与计数并成一行(名字不再在左列重复一遍),与 category_manage 同款。
138
+ ? tagRows.map((t) => '<p class="fp-v">' + esc(t.name === '' ? '—' : t.name) + ',共 ' + esc(t.items) + ' 件,用过 ' + esc(t.uses) + ' 次</p>').join('')
139
+ : '<p class="fp-empty">暂无标签,先去录物品时贴上第一个标签</p>');
140
+ const unusedBlock = !hasUnusedDetail
141
+ ? '<p class="fp-empty">暂时没有统计到未使用的标签,有的话这里会列出来并给出一键清理</p>'
142
+ : (unusedNames.length
143
+ // #817(⑤文案不冗余):闲置标签折成一行名单,不再逐行重复「闲置」这个左列词。
144
+ ? '<p class="fp-v">闲置:' + unusedNames.map((n) => esc(n)).join('、') + '</p>'
145
+ : '<p class="fp-empty">暂时没有统计到未使用的标签,有的话这里会列出来并给出一键清理</p>');
146
+ mainSec = '<section class="fp-sec"><h2 class="fp-sec-t">标签总览</h2>'
147
+ + overviewRows + '</section>'
148
+ + '<section class="fp-sec"><h2 class="fp-sec-t">未使用标签</h2>'
149
+ + unusedBlock + '</section>';
150
+ }
151
+ else if (msg === '无相近标签') {
152
+ mainSec = '<section class="fp-sec"><h2 class="fp-sec-t">相似标签对(相似度%)</h2>'
153
+ + '<p class="fp-empty">没有发现相近标签,标签体系很干净</p></section>';
154
+ }
155
+ else {
156
+ // #864 加厚:相似度有 detail 写真数值,无则回退破折号。
157
+ // 判据件口径(票 #866「值位不算文案冗余」的对偶):标签名与单位只出现一次——放段落标题(与
158
+ // 必需块登记的「相似标签对(相似度%)」逐字一致),每对的胶囊只写值(90%/—),不逐行重复「相似度」。
159
+ mainSec = '<section class="fp-sec"><h2 class="fp-sec-t">相似标签对(相似度%)</h2>'
160
+ + pairs.map((p, i) => {
161
+ const ab = p.split('~');
162
+ const a = (ab[0] ?? '').trim();
163
+ const b = (ab[1] ?? '').trim();
164
+ const sim = pairSims[i];
165
+ return '<div class="fp-pair"><div class="fp-pair-info">第 ' + (i + 1) + ' 对:<b>' + esc(a) + '</b> 与 <b>' + esc(b)
166
+ + '</b> <span class="fp-pill">' + (sim === null ? '—' : esc(String(sim)) + '%') + '</span></div>'
167
+ + '<div class="fp-actions">'
168
+ + '<button type="button" class="fp-btn fp-btn-ghost" onclick="copyItem(\'fp-tag-merge-' + i + '\')">合并</button>'
169
+ + '<button type="button" class="fp-btn" onclick="copyItem(\'fp-tag-ignore-' + i + '\')">忽略</button>'
170
+ + '</div>'
171
+ + '<pre id="fp-tag-merge-' + i + '" hidden>' + esc('请加载「居家管家」技能,帮我管理标签(唤醒词:管标签):\n\n 操作:合并\n 源标签:' + a + '\n 目标标签:' + b) + '</pre>'
172
+ + '<pre id="fp-tag-ignore-' + i + '" hidden>' + esc('忽略本条整理建议:' + a + ' 与 ' + b) + '</pre>'
173
+ + '</div>';
174
+ }).join('')
175
+ + '<p class="fp-note">合并会动到贴着源标签的物品,源标签随后消失,请逐对确认</p></section>';
176
+ }
177
+ const content = PAGE_CSS
178
+ + '<div class="fp-page" data-family="' + FAMILY + '" data-key="' + esc(key) + '" data-mode="' + esc(tidy ? 'tidy' : 'overview') + '">'
179
+ + '<div class="fp-hero"><div class="fp-eyebrow">物品管理 · 标签</div>'
180
+ + '<div class="fp-title">' + esc(tidy ? '逐对合并或忽略' : '改名、合并与新建标签') + '</div>'
181
+ + '<p class="fp-lead">' + esc(leadText) + '</p>'
182
+ // #817(⑤文案不冗余):整理态不挂徽章——徽章若写「整理建议」就与 h1(交付链回填的场景名)同词;
183
+ // 总览态照旧标模式(4-1 的 check 要「模式」在位)。
184
+ + (tidy ? '' : '<span class="fp-stage">当前:总览</span>') + '</div>'
185
+ + mainSec
186
+ + '<div class="fp-actions">'
187
+ + '<button type="button" class="fp-btn fp-btn-ghost" onclick="copyItem(\'fp-tag-rename\')">改名</button>'
188
+ // #817(⑤文案不冗余):整理态逐对已有「合并」,底部这颗又是另一档作用,故按本页模式改名(总览态照旧「合并」)。
189
+ + '<button type="button" class="fp-btn fp-btn-ghost" onclick="copyItem(\'fp-tag-mergeone\')">' + (tidy ? '全部合并' : '合并') + '</button>'
190
+ // #817 第二波(②层级清,核口径后补入口):口径是 empty 块那句「无可清理标签时不出「一键清理」」
191
+ // ——反面即「有未使用标签就出」。总览这回执带 7 条闲置标签(本页「未使用标签」一段就是它们),
192
+ // 旧注释「总览回执不带未使用标签」与当刻回执不符,故按闲置标签在不在场决定这颗按钮在不在位:
193
+ // 管理标签(4-1)的 check 要「七个操作按钮齐」,可见按钮=改名/合并/一键清理/整理建议/新建标签 + 复制数据/复制日志。
194
+ // 「忽略」只对相似标签对成立,本模式没有对可忽略,故只留在整理建议(4-3)的逐对行里。
195
+ + (tidy || unusedNames.length > 0 ? '<button type="button" class="fp-btn fp-btn-danger" onclick="copyItem(\'fp-tag-clean\')">一键清理</button>' : '')
196
+ + (tidy ? '' : '<button type="button" class="fp-btn fp-btn-primary" onclick="copyItem(\'fp-tag-tidy\')">整理建议</button>') // 本页即整理建议结果页:指向本页自身只是重发同条命令,本页不出
197
+ + '<button type="button" class="fp-btn" onclick="copyItem(\'fp-tag-new\')">新建标签</button>'
198
+ + '</div>'
199
+ + homeCopyArea({
200
+ data: { envelope: env },
201
+ log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
202
+ })
203
+ + '<pre id="fp-tag-rename" hidden>' + esc('请加载「居家管家」技能,帮我管理标签(唤醒词:管标签):\n\n 操作:重命名\n 标签:___\n 新名称:___') + '</pre>'
204
+ + '<pre id="fp-tag-mergeone" hidden>' + esc('请加载「居家管家」技能,帮我管理标签(唤醒词:管标签):\n\n 操作:合并\n'
205
+ + (tidy ? ' 范围:全部相近标签对' : ' 源标签:___\n 目标标签:___')) + '</pre>'
206
+ + (tidy || unusedNames.length > 0 ? '<pre id="fp-tag-clean" hidden>' + esc('请加载「居家管家」技能,帮我管理标签(唤醒词:管标签):\n\n 操作:清理未使用标签') + '</pre>' : '')
207
+ + (tidy ? '' : '<pre id="fp-tag-tidy" hidden>' + esc('请加载「居家管家」技能,帮我整理标签(唤醒词:整理建议):\n\n 检测:相近标签和分类') + '</pre>')
208
+ + '<pre id="fp-tag-new" hidden>' + esc('请加载「居家管家」技能,帮我管理标签(唤醒词:管标签):\n\n 操作:新建标签\n 标签:___') + '</pre>'
209
+ + needs()
210
+ + '</div>';
211
+ return fillTemplate(template, content);
212
+ }
213
+ //# sourceMappingURL=tag_manage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag_manage.js","sourceRoot":"","sources":["../../../src/items/pages/tag_manage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "undo_select";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "items";
5
+ readonly family: "undo_select";
6
+ readonly key: "home.item.update";
7
+ readonly shape: "receipt";
8
+ readonly preset: Record<string, unknown>;
9
+ readonly rows: readonly {
10
+ readonly key: string;
11
+ readonly preset: Record<string, unknown>;
12
+ }[];
13
+ };
14
+ export declare const REQUIRED_BLOCKS: {
15
+ readonly fields: readonly string[];
16
+ readonly operations: readonly string[];
17
+ readonly empty: readonly string[];
18
+ readonly status: readonly string[];
19
+ };
20
+ export declare function renderFamilyPage(env: Envelope, ctx?: {
21
+ readonly command?: string;
22
+ readonly actionAt?: string;
23
+ }): string;
24
+ //# sourceMappingURL=undo_select.d.ts.map