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,24 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "accounts";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "receipt";
5
+ readonly family: "accounts";
6
+ readonly key: "home.ticket.query";
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=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/receipt/pages/accounts.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,UAAmB,CAAC;AAE1C,eAAO,MAAM,SAAS;;;;;qBAKU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;mBAC2N,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE;CACrV,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;AAgKF,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,CAgBvH"}
@@ -0,0 +1,217 @@
1
+ // receipt能力·accounts页装配(#805 脚手架生成,#814 域票填内容)。
2
+ //
3
+ // 一族一个装配件:模板 `templates/receipt/accounts.html` 的装配入口。
4
+ // 必需块原文=契约附录(事实源),登记表 `scripts/lib/page-blocks.mjs` 由同一附录派生;
5
+ // 三方(本件/登记表/附录)由 `test/scaffold.test.mjs` 逐族对账,走散即红。
6
+ // 可见文案中文-only:机审 `audit-separators` 判载荷区外英文裸词行进红,
7
+ // 而平台名与用户名含拉丁字符,故清单行一律走表格单元格
8
+ // (判据把单元格文本排除在英文裸词之外),可见标题只用中文。
9
+ // 空态与异常态位:`renderFamilyPage` 按 REQUIRED_BLOCKS.empty 原样输出槽位,域票把真空态填进来。
10
+ // 数据形状声明:PAGE_META(主命令/形状/场景预设示例/服务场景清单)。
11
+ //
12
+ // 密码红线:明文永不进页(含可见文本、复制载荷、预埋摘要);
13
+ // 本页只显脱敏符号与操作入口,查看与复制均经对话二次确认。
14
+ //
15
+ // 保守处置(#886):数据位不走 envelope 投影——清单信封虽已脱敏(`listAccounts`
16
+ // 只取平台/用户名/类型三字段),但看密码回执的 message 含明文(`ticket.ts` 看密码
17
+ // 分支),`buildDataText` 会把 message 原样打出;故数据位保留原占位按钮,
18
+ // 日志位走共用件(日志首段只派生 skill.key(shape),不含 message,安全)。
19
+ import { readFileSync } from 'node:fs';
20
+ import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
21
+ export const FAMILY = 'accounts';
22
+ export const PAGE_META = {
23
+ domain: 'receipt',
24
+ family: FAMILY,
25
+ key: 'home.ticket.query',
26
+ shape: 'list',
27
+ preset: { "kind": "account" },
28
+ rows: [{ "key": "home.ticket.query", "preset": { "kind": "account" } }, { "key": "home.ticket.write", "preset": { "kind": "account", "op": "add" } }, { "key": "home.ticket.write", "preset": { "kind": "account", "op": "update" } }, { "key": "home.ticket.write", "preset": { "kind": "account", "op": "show" } }],
29
+ };
30
+ export const REQUIRED_BLOCKS = {
31
+ "empty": [
32
+ "空态:暂无账号",
33
+ "异常:数据解析失败/数据校验失败",
34
+ "敏感横幅:本页不含任何明文密码",
35
+ "复制密码前二次确认"
36
+ ],
37
+ "fields": [
38
+ "账号分组(平台/用户名/类型)",
39
+ "总数",
40
+ "空态提示"
41
+ ],
42
+ "operations": [
43
+ "新增账号",
44
+ "查看密码",
45
+ "复制密码",
46
+ "复制数据",
47
+ "复制日志"
48
+ ],
49
+ "status": [
50
+ "购物",
51
+ "银行",
52
+ "社交",
53
+ "其他"
54
+ ]
55
+ };
56
+ function sectionOf(group, title) {
57
+ const items = REQUIRED_BLOCKS[group].map((b) => '<li data-need="' + escapeHtml(b) + '">' + escapeHtml(b) + '</li>').join('');
58
+ return '<section hidden data-block="' + group + '"><h2>' + title + '</h2><ul>' + items + '</ul></section>';
59
+ }
60
+ function parseThinName(name) {
61
+ const open = name.indexOf('(');
62
+ const close = name.indexOf(')');
63
+ if (open >= 0 && close > open) {
64
+ return { platform: name.slice(0, open), username: name.slice(open + 1, close), typeText: '待补' };
65
+ }
66
+ return { platform: name, username: '待补', typeText: '待补' };
67
+ }
68
+ function isRich(item) {
69
+ return item.platform !== undefined
70
+ || item.username !== undefined
71
+ || item.type !== undefined;
72
+ }
73
+ function rowOf(item) {
74
+ if (!isRich(item))
75
+ return parseThinName(String(item.name ?? ''));
76
+ return {
77
+ platform: String(item.platform ?? '待补'),
78
+ username: String(item.username ?? '待补'),
79
+ typeText: String(item.type ?? '待补'),
80
+ };
81
+ }
82
+ function groupTitle(t) {
83
+ if (t === '购物' || t === '银行' || t === '社交' || t === '其他')
84
+ return t;
85
+ return '其他';
86
+ }
87
+ /** 一组账号的清单表:表头四列,格子挂 `data-label`(390 档改纵排卡片时由 CSS 伪元素挂字段名,
88
+ * 主字段「密码」不再被横滑区推到屏外,见 PAGE_CSS 的 560 断点)。 */
89
+ function rowsTable(list) {
90
+ return '<div class="rc-scroll"><table><thead><tr><th>平台</th><th>用户名</th><th>类型</th><th>密码</th></tr></thead><tbody>'
91
+ + list.map((r) => '<tr><td data-label="平台">' + escapeHtml(r.platform) + '</td>'
92
+ + '<td data-label="用户名">' + escapeHtml(r.username) + '</td>'
93
+ + '<td data-label="类型">' + escapeHtml(groupTitle(r.typeText)) + '</td>'
94
+ + '<td data-label="密码">******</td></tr>').join('')
95
+ + '</tbody></table></div>';
96
+ }
97
+ function listGroups(env) {
98
+ const data = env.data;
99
+ const items = Array.isArray(data.items)
100
+ ? data.items
101
+ : [];
102
+ if (!items.length) {
103
+ return '<div><p class="rc-note">暂无账号,可新增一个账号后回来按类型复核</p></div>';
104
+ }
105
+ const rows = items.map(rowOf);
106
+ const groups = new Map();
107
+ for (const r of rows) {
108
+ const g = groupTitle(r.typeText);
109
+ const hit = groups.get(g);
110
+ if (hit)
111
+ hit.push(r);
112
+ else
113
+ groups.set(g, [r]);
114
+ }
115
+ const order = ['购物', '银行', '社交', '其他'];
116
+ const parts = ['<div>'];
117
+ for (const g of order) {
118
+ const list = groups.get(g);
119
+ if (!list || !list.length)
120
+ continue;
121
+ parts.push('<h2 class="rc-group">' + escapeHtml(g) + '(共' + list.length + '个)</h2>');
122
+ parts.push(rowsTable(list));
123
+ }
124
+ const rest = [...groups.keys()].filter((k) => !order.includes(k));
125
+ for (const g of rest) {
126
+ const list = groups.get(g);
127
+ parts.push('<h2 class="rc-group">' + escapeHtml(g) + '(共' + list.length + '个)</h2>');
128
+ parts.push(rowsTable(list));
129
+ }
130
+ parts.push('</div>');
131
+ return parts.join('');
132
+ }
133
+ function receiptNote(env) {
134
+ const data = env.data;
135
+ const msg = String(data.message ?? '已落盘');
136
+ // 明文只走对话 JSON 回显;「页上不展示明文」这条由页首敏感横幅说一次,回执里不再说。
137
+ const safe = /密码/.test(msg) ? '密码已回显' : msg;
138
+ // 存账号(新增)补一句密码怎么存;改账号(更新)说清只填要改的——消息文本带动作词,据此分流。
139
+ const byOp = /(新增|新建|已存)/.test(msg)
140
+ ? '<p class="rc-note">密码加密落库,只在对话里回显</p>'
141
+ : /(更新|已改|修改)/.test(msg) ? '<p class="rc-note">只填要改的字段,其余留空即保持原值</p>' : '';
142
+ // 真实回执放绿卡(回执是本页主内容,字号/字重抬到说明句之上,见 PAGE_CSS 的层级阶梯)。
143
+ return '<div>' + byOp + '<p class="receipt rc-receipt">' + escapeHtml(safe) + '</p></div>';
144
+ }
145
+ function opsBlock(env, ctx) {
146
+ // 主次:四颗动作按钮里「新增账号」是本页主命令(写类入口),走实心蓝;其余三颗保持白底(#817 seq 61–64 的 ④)。
147
+ return '<div>'
148
+ + '<button type="button" class="rc-primary" data-t="请新增账号">新增账号</button>'
149
+ + '<button type="button" data-t="请查看密码,经对话回显">查看密码</button>'
150
+ + '<button type="button" data-t="请复制密码,复制前二次确认">复制密码</button>'
151
+ + '<button type="button" data-t="复制账号脱敏数据">复制数据</button>'
152
+ + homeCopyArea({
153
+ log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
154
+ })
155
+ + '</div>';
156
+ }
157
+ function envelopeBrief(env) {
158
+ const data = env.data;
159
+ const total = data.total;
160
+ const ok = data.ok;
161
+ return JSON.stringify({ key: String(env.key ?? ''), shape: String(env.shape ?? ''), total: typeof total === 'number' ? total : undefined, ok: typeof ok === 'boolean' ? ok : undefined });
162
+ }
163
+ function sensitiveBanner() {
164
+ return '<div><p class="rc-note">说明页不展示明文,查看与复制均需二次确认</p></div>';
165
+ }
166
+ /** 按钮绑定(#817 收口补):操作区这 5 颗是 `data-t` 复制按钮,只渲染不绑点击=点了没反应
167
+ * (本票已发现过两处同类:一页畸形标签让复选框链路恒空、一页少一个分号让整段脚本不解析)。
168
+ * 照仓内既有写法(`setup/pages/first_use_wizard.ts` 同款)给所有 `[data-t]` 挂 addEventListener;
169
+ * 载荷只有按钮自带的 data-t 文本,明文密码不在这条链上(密码红线不受影响)。 */
170
+ const PAGE_SCRIPT = '<script>function copyText(t){if(navigator.clipboard){navigator.clipboard.writeText(t);}}'
171
+ + 'document.querySelectorAll("[data-t]").forEach(function(b){b.addEventListener("click",function(){copyText(b.getAttribute("data-t")||"");});});</script>';
172
+ /** 页内样式(#817 收口补):裸 <button> 升到 44px 命中区;<pre> 折行,免得长 JSON 把 390 档撑出横向滚动;
173
+ * 清单表套横滑容器(长邮箱等会把表撑宽,容器内滑、不撑破文档);
174
+ * 操作区主按钮(`rc-primary`=新增账号)实心蓝,与其余三颗白底按钮分出主次(#817 seq 61–64 的 ④)。
175
+ *
176
+ * 第二波(#817 seq 61–64 的 ②/③):
177
+ * ② 层级阶梯——组头(`.rc-group`)从浏览器缺省 h2(22.5px/700,比区块标头还大=倒挂)降到 15px/700
178
+ * 并加下边线;说明句/空态句(`.rc-note`)降到 12.5px 灰字;回执(`.rc-receipt`)抬到 15.5px/600。
179
+ * ③ 390 档不裁列——560 断点把清单表改纵排卡片,每格用 `data-label` 伪元素挂字段名,
180
+ * 主字段「密码」不再被 `min-width:520px` 推到横滑区外。 */
181
+ const PAGE_CSS = '<style>button{min-height:44px;min-width:44px;padding:0 14px;border:1px solid #d2d2d7;border-radius:10px;background:#fff;font-size:13px;font-weight:700;color:#1d1d1f;cursor:pointer;margin:4px 6px 4px 0}'
182
+ + 'button.rc-primary{background:#007aff;border-color:#007aff;color:#fff}'
183
+ + 'pre{white-space:pre-wrap;overflow-wrap:anywhere}'
184
+ + '.rc-scroll{overflow-x:auto}'
185
+ + '.rc-scroll table{min-width:520px;border-collapse:collapse}'
186
+ + 'th,td{border:1px solid #e3e6ea;padding:6px 8px;font-size:12px;text-align:left;white-space:nowrap}'
187
+ + '.rc-group{font-size:15px;font-weight:700;color:#1d1d1f;margin:18px 0 8px;padding-bottom:6px;border-bottom:1px solid #ececf1}'
188
+ + '.rc-note{font-size:12.5px;line-height:1.6;color:#6e6e73;margin:8px 0}'
189
+ + '.rc-receipt{font-size:15.5px;font-weight:600}'
190
+ + '@media(max-width:560px){'
191
+ + '.rc-scroll table{min-width:0}'
192
+ + '.rc-scroll thead{display:none}'
193
+ + '.rc-scroll tr{display:block;border:1px solid #e3e6ea;border-radius:12px;padding:8px 10px;margin:0 0 8px}'
194
+ + '.rc-scroll td{display:block;border:none;padding:3px 0;white-space:normal;overflow-wrap:anywhere}'
195
+ + '.rc-scroll td::before{content:attr(data-label);display:inline-block;min-width:3.6em;color:#6e6e73}'
196
+ + '}</style>';
197
+ // 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
198
+ // fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
199
+ // 日志位走共用件(卡路里同款六段日志);`ctx.command` 由交付链供给(含 params),直调缺省按本族主 key。
200
+ export function renderFamilyPage(env, ctx) {
201
+ const template = readFileSync(new URL('../../../templates/receipt/accounts.html', import.meta.url), 'utf8');
202
+ const head = '<div class="fam-head" data-family="' + FAMILY + '" data-key="' + escapeHtml(String(env.key ?? PAGE_META.key)) + '">'
203
+ + '<span>账号密码</span></div>';
204
+ const main = env.shape === 'receipt' ? receiptNote(env) : listGroups(env);
205
+ const content = PAGE_CSS
206
+ + head
207
+ + sensitiveBanner()
208
+ + main
209
+ + opsBlock(env, ctx)
210
+ + PAGE_SCRIPT
211
+ + sectionOf('fields', '字段')
212
+ + sectionOf('operations', '操作')
213
+ + sectionOf('empty', '空态与异常')
214
+ + sectionOf('status', '状态词');
215
+ return fillTemplate(template, content);
216
+ }
217
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/receipt/pages/accounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "certificates";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "receipt";
5
+ readonly family: "certificates";
6
+ readonly key: "home.ticket.query";
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=certificates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certificates.d.ts","sourceRoot":"","sources":["../../../src/receipt/pages/certificates.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,eAAO,MAAM,MAAM,EAAG,cAAuB,CAAC;AAE9C,eAAO,MAAM,SAAS;;;;;qBAKO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;mBACqN,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE;CAC5U,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;AAmLF,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,CAiBvH"}
@@ -0,0 +1,231 @@
1
+ // receipt能力·certificates页装配(#805 脚手架生成,#814 域票填内容)。
2
+ //
3
+ // 一族一个装配件:模板 `templates/receipt/certificates.html` 的装配入口。
4
+ // 必需块原文=契约附录(事实源),登记表 `scripts/lib/page-blocks.mjs` 由同一附录派生;
5
+ // 三方(本件/登记表/附录)由 `test/scaffold.test.mjs` 逐族对账,走散即红。
6
+ // 可见文案中文-only:机审 `audit-separators` 判载荷区外英文裸词行进红,
7
+ // 而契约原文含编号与占位等拉丁字符,故可见层用中文转述、原文完整保留在
8
+ // `data-need` 属性里(结构判据 `audit-page-blocks` 查原文包含,属性即命中)。
9
+ // 空态与异常态位:`renderFamilyPage` 按 REQUIRED_BLOCKS.empty 原样输出槽位,域票把真空态填进来。
10
+ // 数据形状声明:PAGE_META(主命令/形状/场景预设示例/服务场景清单)。
11
+ //
12
+ // 脱敏红线:证件号只显后四位(其余星号),复制文本不含完整号码;
13
+ // 本页只认脱敏字段,信封里即便带有原文号码也只算掩码、不输出原文。
14
+ import { readFileSync } from 'node:fs';
15
+ import { fillTemplate, renderEnvelopeHtml, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
16
+ // #890:证件号码脱敏的唯一一处规则住取数层(旧信封回退也读它,不再在页里自留一份)。
17
+ import { maskCertNumber } from '../../fetch/index.js';
18
+ export const FAMILY = 'certificates';
19
+ export const PAGE_META = {
20
+ domain: 'receipt',
21
+ family: FAMILY,
22
+ key: 'home.ticket.query',
23
+ shape: 'list',
24
+ preset: { "kind": "cert" },
25
+ rows: [{ "key": "home.ticket.query", "preset": { "kind": "cert" } }, { "key": "home.ticket.write", "preset": { "kind": "cert", "op": "add" } }, { "key": "home.ticket.write", "preset": { "kind": "cert", "op": "archive" } }, { "key": "home.ticket.write", "preset": { "kind": "cert", "op": "update" } }],
26
+ };
27
+ export const REQUIRED_BLOCKS = {
28
+ "empty": [
29
+ "空态:暂无登记",
30
+ "异常:数据解析失败/数据校验失败",
31
+ "敏感口径:号码脱敏·复制数据不含证件号"
32
+ ],
33
+ "fields": [
34
+ "证件清单(类型/持有人/ID/到期日/剩余天数/证件状态/脱敏号码/备注)",
35
+ "空态提示"
36
+ ],
37
+ "operations": [
38
+ "更新",
39
+ "补照片",
40
+ "新增证件",
41
+ "复制数据",
42
+ "复制日志"
43
+ ],
44
+ "status": [
45
+ "有效",
46
+ "即将到期",
47
+ "已过期",
48
+ "已过期N天",
49
+ "今天到期",
50
+ "N天后到期"
51
+ ]
52
+ };
53
+ // 可见层中文转述(无拉丁字母、无版式位分隔符;原文在 data-need 属性里)。
54
+ function visibleOf(block) {
55
+ const table = {
56
+ '证件清单(类型/持有人/ID/到期日/剩余天数/证件状态/脱敏号码/备注)': '证件清单包含类型持有人编号到期日剩余天数证件状态脱敏号码备注',
57
+ '已过期N天': '已过期若干天',
58
+ 'N天后到期': '若干天后到期',
59
+ };
60
+ return table[block] ?? block;
61
+ }
62
+ function sectionOf(group, title) {
63
+ const items = REQUIRED_BLOCKS[group].map((b) => '<li data-need="' + escapeHtml(b) + '">' + escapeHtml(visibleOf(b)) + '</li>').join('');
64
+ return '<section hidden data-block="' + group + '"><h2>' + title + '</h2><ul>' + items + '</ul></section>';
65
+ }
66
+ // #890:脱敏规则搬到取数层(`fetch/domains.ts` 的 `maskCertNumber`,命令层出 `number_masked` 用的就是它)
67
+ // ——同一件事只有一个定义地(铁律二)。本页这处只留给旧信封(无 `number_masked` 才走到),故直接转调。
68
+ const maskDisplay = maskCertNumber;
69
+ function daysLeftOf(expires) {
70
+ const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(expires);
71
+ if (!m)
72
+ return null;
73
+ const e = new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]));
74
+ const t = new Date();
75
+ t.setHours(0, 0, 0, 0);
76
+ if (Number.isNaN(e.getTime()))
77
+ return null;
78
+ return Math.round((e.getTime() - t.getTime()) / 86400000);
79
+ }
80
+ function statusOf(days) {
81
+ if (days === null)
82
+ return '有效';
83
+ if (days < 0)
84
+ return '已过期';
85
+ if (days <= 30)
86
+ return '即将到期';
87
+ return '有效';
88
+ }
89
+ function parseThinName(name) {
90
+ const i = name.indexOf('到期');
91
+ if (i < 0)
92
+ return { certType: name, expires: '' };
93
+ return { certType: name.slice(0, i), expires: name.slice(i + 2) };
94
+ }
95
+ function rowFromThin(item) {
96
+ const name = String(item.name ?? '');
97
+ const parsed = parseThinName(name);
98
+ const days = parsed.expires !== '' ? daysLeftOf(parsed.expires) : null;
99
+ return {
100
+ certType: parsed.certType === '' ? '待补' : parsed.certType,
101
+ holder: '待补',
102
+ idText: '待补',
103
+ expires: parsed.expires === '' ? '待补' : parsed.expires,
104
+ days,
105
+ status: statusOf(days),
106
+ masked: '未登记',
107
+ note: '待补',
108
+ };
109
+ }
110
+ function rowFromRich(item) {
111
+ const certType = String(item.cert_type ?? item.type ?? '待补');
112
+ const holder = String(item.holder ?? '待补');
113
+ const idText = item.id !== undefined ? String(item.id) : '待补';
114
+ const expires = String(item.expires_at ?? item.expires ?? '待补');
115
+ const days = /^(\d{4})-(\d{2})-(\d{2})$/.test(expires) ? daysLeftOf(expires) : null;
116
+ const status = typeof item.cert_status === 'string'
117
+ ? String(item.cert_status)
118
+ : statusOf(days);
119
+ const masked = typeof item.number_masked === 'string'
120
+ ? String(item.number_masked)
121
+ : maskDisplay(item.number);
122
+ const note = String(item.note ?? '待补');
123
+ return { certType, holder, idText, expires, days, status, masked, note };
124
+ }
125
+ function isRich(item) {
126
+ return item.cert_type !== undefined
127
+ || item.number_masked !== undefined
128
+ || item.number !== undefined
129
+ || item.expires_at !== undefined;
130
+ }
131
+ function listTable(env) {
132
+ const data = env.data;
133
+ const items = Array.isArray(data.items)
134
+ ? data.items
135
+ : [];
136
+ if (!items.length) {
137
+ return '<div><p>暂无登记,可新增一张证件后回来按到期复核</p></div>';
138
+ }
139
+ const rows = items.map((it) => (isRich(it) ? rowFromRich(it) : rowFromThin(it)));
140
+ rows.sort((a, b) => {
141
+ if (a.days === null)
142
+ return 1;
143
+ if (b.days === null)
144
+ return -1;
145
+ return a.days - b.days;
146
+ });
147
+ // #817(⑤文案不冗余):删「到期文案」列——剩余天数、证件状态、到期文案说的是同一件事,一页说三遍;
148
+ // 该列也不在必需块的证件清单字段里(类型/持有人/ID/到期日/剩余天数/证件状态/脱敏号码/备注)。
149
+ // #817(③双端不塌):每个值位带 `data-th`(列名);≤760 档由页内样式把每一行排成卡片、标签印在值左边,
150
+ // 8 列在 390 档一次看全——此前 `min-width:560px`+`nowrap` 只露得出前 6 列,右侧三列看不见也没提示。
151
+ const body = rows.map((r) => '<tr>'
152
+ + '<td data-th="类型">' + escapeHtml(r.certType) + '</td>'
153
+ + '<td data-th="持有人">' + escapeHtml(r.holder) + '</td>'
154
+ + '<td data-th="编号">' + escapeHtml(r.idText) + '</td>'
155
+ + '<td data-th="到期日">' + escapeHtml(r.expires) + '</td>'
156
+ + '<td data-th="剩余天数">' + (r.days === null ? '待补' : String(r.days)) + '</td>'
157
+ + '<td data-th="证件状态">' + escapeHtml(r.status) + '</td>'
158
+ + '<td data-th="脱敏号码">' + escapeHtml(r.masked) + '</td>'
159
+ + '<td data-th="备注">' + escapeHtml(r.note) + '</td>'
160
+ + '</tr>').join('');
161
+ return '<div><p>共' + rows.length + '本证件,按到期先后排列</p>'
162
+ + '<div class="rc-scroll"><table><thead><tr><th>类型</th><th>持有人</th><th>编号</th><th>到期日</th>'
163
+ + '<th>剩余天数</th><th>证件状态</th><th>脱敏号码</th><th>备注</th></tr></thead>'
164
+ + '<tbody>' + body + '</tbody></table></div>'
165
+ + '<p>号码只显后四位,复制文本不含完整号码</p></div>';
166
+ }
167
+ function receiptNote(env) {
168
+ // 每条写操作说清它自己那件事:消息文本带动作词,页面据此补一句本操作独有的语义。
169
+ const msg = String(env.data.message ?? '');
170
+ const byOp = /归档/.test(msg) ? '<p>照片已关联到这张证件</p>'
171
+ : /更新/.test(msg) ? '<p>只填要改的字段,其余留空即保持原值</p>' : '';
172
+ return '<div>' + byOp
173
+ + '<p>写操作已受理,可在查证件到期中按到期复核</p>'
174
+ + '<p>号码脱敏存储,复制文本不含完整号码</p></div>';
175
+ }
176
+ function opsBlock(env, ctx) {
177
+ // 全量 envelope 投影(取数层已脱敏:`listCerts` 只取编号/类型/到期日/持有人四字段,
178
+ // 信封里没有完整号码,故复制文本天然不含证件号,敏感口径依然成立)。
179
+ return '<div>'
180
+ + '<button type="button" data-t="请更新证件,只填要改的">更新</button>'
181
+ + '<button type="button" data-t="请补证件照片">补照片</button>'
182
+ + '<button type="button" data-t="请新增证件">新增证件</button>'
183
+ + homeCopyArea({
184
+ data: { envelope: env },
185
+ log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
186
+ })
187
+ + '</div>';
188
+ }
189
+ /** 按钮绑定(#817 收口补):操作区这 5 颗是 `data-t` 复制按钮,只渲染不绑点击=点了没反应
190
+ * (本票已发现过两处同类:一页畸形标签让复选框链路恒空、一页少一个分号让整段脚本不解析)。
191
+ * 照仓内既有写法(`setup/pages/first_use_wizard.ts` 同款)给所有 `[data-t]` 挂 addEventListener;
192
+ * 载荷只有按钮自带的 data-t 文本,不含证件号(脱敏红线不受影响)。 */
193
+ const PAGE_SCRIPT = '<script>function copyText(t){if(navigator.clipboard){navigator.clipboard.writeText(t);}}'
194
+ + 'document.querySelectorAll("[data-t]").forEach(function(b){b.addEventListener("click",function(){copyText(b.getAttribute("data-t")||"");});});</script>';
195
+ /** 页内样式(#817 收口补):裸 <button> 升到 44px 命中区;<pre> 折行,免得长 JSON 把 390 档撑出横向滚动。
196
+ * #817(③双端不塌)第二波:宽档(>760)走 8 列表,窄档(390)同一份 DOM 排成卡片——
197
+ * 行内每个值位用 `data-th` 的列名当标签印在值左边,8 列一次看全,既不横滑、也不留看不见的列。 */
198
+ const PAGE_CSS = '<style>button{min-height:44px;min-width:44px;padding:0 14px;border:1px solid #d2d2d7;border-radius:10px;background:#fff;font-size:13px;font-weight:700;color:#1d1d1f;cursor:pointer;margin:4px 6px 4px 0}'
199
+ + 'pre{white-space:pre-wrap;overflow-wrap:anywhere}'
200
+ + '.rc-scroll{overflow-x:auto}'
201
+ + '.rc-scroll table{min-width:560px;border-collapse:collapse}'
202
+ + 'th,td{border:1px solid #e3e6ea;padding:6px 8px;font-size:12px;text-align:left;white-space:nowrap}'
203
+ + '@media(max-width:760px){.rc-scroll table{display:block;min-width:0}'
204
+ + '.rc-scroll thead{display:none}'
205
+ + '.rc-scroll tbody,.rc-scroll tr,.rc-scroll td{display:block}'
206
+ + '.rc-scroll tr{border:1px solid #e3e6ea;border-radius:10px;margin:0 0 8px;padding:6px 10px}'
207
+ + '.rc-scroll td{display:flex;gap:8px;border:0;padding:2px 0;white-space:normal;overflow-wrap:anywhere}'
208
+ + '.rc-scroll td::before{content:attr(data-th);flex:0 0 60px;color:#86868b}'
209
+ + '}</style>';
210
+ // 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
211
+ // fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
212
+ // 复制区走共用件(卡路里同款三格式+六段日志);`ctx.command` 由交付链供给(含 params),直调缺省按本族主 key。
213
+ export function renderFamilyPage(env, ctx) {
214
+ const template = readFileSync(new URL('../../../templates/receipt/certificates.html', import.meta.url), 'utf8');
215
+ const head = '<div class="fam-head" data-family="' + FAMILY + '" data-key="' + escapeHtml(String(env.key ?? PAGE_META.key)) + '">'
216
+ + '<span>证件管理</span></div>';
217
+ // 清单页已由本族的九列表承载;这里只嵌回执卡,别再嵌一份平铺清单(那是重复数据)。
218
+ const main = env.shape === 'receipt'
219
+ ? receiptNote(env) + '<div class="fam-content">' + renderEnvelopeHtml(env) + '</div>'
220
+ : listTable(env);
221
+ const content = PAGE_CSS + head
222
+ + main
223
+ + opsBlock(env, ctx)
224
+ + PAGE_SCRIPT
225
+ + sectionOf('fields', '字段')
226
+ + sectionOf('operations', '操作')
227
+ + sectionOf('empty', '空态与异常')
228
+ + sectionOf('status', '状态词');
229
+ return fillTemplate(template, content);
230
+ }
231
+ //# sourceMappingURL=certificates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certificates.js","sourceRoot":"","sources":["../../../src/receipt/pages/certificates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "purchase_records";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "receipt";
5
+ readonly family: "purchase_records";
6
+ readonly key: "home.ticket.query";
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=purchase_records.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purchase_records.d.ts","sourceRoot":"","sources":["../../../src/receipt/pages/purchase_records.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,kBAA2B,CAAC;AAElD,eAAO,MAAM,SAAS;;;;;qBAKW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;mBACkT,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE;CAC7a,CAAC;AAEX,eAAO,MAAM,eAAe,EAuBvB;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;AA8MF,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,CA4BvH"}