skill-home 0.3.0 → 0.3.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/SKILL.md +97 -53
  2. package/dist/cli/cmd_read.js +62 -777
  3. package/dist/cli/cmd_read.js.map +1 -1
  4. package/dist/cli/config.d.ts +5 -1
  5. package/dist/cli/config.d.ts.map +1 -1
  6. package/dist/cli/config.js +8 -2
  7. package/dist/cli/config.js.map +1 -1
  8. package/dist/cli/keys.d.ts +4 -0
  9. package/dist/cli/keys.d.ts.map +1 -0
  10. package/dist/cli/keys.js +51 -0
  11. package/dist/cli/keys.js.map +1 -0
  12. package/dist/cli/registry.d.ts +4 -0
  13. package/dist/cli/registry.d.ts.map +1 -0
  14. package/dist/cli/registry.js +30 -0
  15. package/dist/cli/registry.js.map +1 -0
  16. package/dist/config.d.ts +13 -4
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js +58 -8
  19. package/dist/config.js.map +1 -1
  20. package/dist/express/commands.d.ts +3 -0
  21. package/dist/express/commands.d.ts.map +1 -0
  22. package/dist/express/commands.js +6 -0
  23. package/dist/express/commands.js.map +1 -0
  24. package/dist/express/index.d.ts +3 -0
  25. package/dist/express/index.d.ts.map +1 -0
  26. package/dist/express/index.js +4 -0
  27. package/dist/express/index.js.map +1 -0
  28. package/dist/express/pages/express.d.ts +21 -0
  29. package/dist/express/pages/express.d.ts.map +1 -0
  30. package/dist/express/pages/express.js +156 -0
  31. package/dist/express/pages/express.js.map +1 -0
  32. package/dist/express/pages/list.d.ts +21 -0
  33. package/dist/express/pages/list.d.ts.map +1 -0
  34. package/dist/express/pages/list.js +161 -0
  35. package/dist/express/pages/list.js.map +1 -0
  36. package/dist/express/pages/missing.d.ts +21 -0
  37. package/dist/express/pages/missing.d.ts.map +1 -0
  38. package/dist/express/pages/missing.js +141 -0
  39. package/dist/express/pages/missing.js.map +1 -0
  40. package/dist/express/pages/stock.d.ts +21 -0
  41. package/dist/express/pages/stock.d.ts.map +1 -0
  42. package/dist/express/pages/stock.js +164 -0
  43. package/dist/express/pages/stock.js.map +1 -0
  44. package/dist/express/routes.d.ts +3 -0
  45. package/dist/express/routes.d.ts.map +1 -0
  46. package/dist/express/routes.js +8 -0
  47. package/dist/express/routes.js.map +1 -0
  48. package/dist/express/shopping.d.ts +4 -0
  49. package/dist/express/shopping.d.ts.map +1 -0
  50. package/dist/express/shopping.js +143 -0
  51. package/dist/express/shopping.js.map +1 -0
  52. package/dist/family/care.d.ts +4 -0
  53. package/dist/family/care.d.ts.map +1 -0
  54. package/dist/family/care.js +103 -0
  55. package/dist/family/care.js.map +1 -0
  56. package/dist/family/commands.d.ts +3 -0
  57. package/dist/family/commands.d.ts.map +1 -0
  58. package/dist/family/commands.js +6 -0
  59. package/dist/family/commands.js.map +1 -0
  60. package/dist/family/index.d.ts +3 -0
  61. package/dist/family/index.d.ts.map +1 -0
  62. package/dist/family/index.js +4 -0
  63. package/dist/family/index.js.map +1 -0
  64. package/dist/family/pages/family_borrow.d.ts +21 -0
  65. package/dist/family/pages/family_borrow.d.ts.map +1 -0
  66. package/dist/family/pages/family_borrow.js +267 -0
  67. package/dist/family/pages/family_borrow.js.map +1 -0
  68. package/dist/family/pages/family_members.d.ts +21 -0
  69. package/dist/family/pages/family_members.d.ts.map +1 -0
  70. package/dist/family/pages/family_members.js +171 -0
  71. package/dist/family/pages/family_members.js.map +1 -0
  72. package/dist/family/routes.d.ts +3 -0
  73. package/dist/family/routes.d.ts.map +1 -0
  74. package/dist/family/routes.js +20 -0
  75. package/dist/family/routes.js.map +1 -0
  76. package/dist/fetch/backup.d.ts +4 -6
  77. package/dist/fetch/backup.d.ts.map +1 -1
  78. package/dist/fetch/backup.js +4 -13
  79. package/dist/fetch/backup.js.map +1 -1
  80. package/dist/fetch/db.d.ts.map +1 -1
  81. package/dist/fetch/db.js +9 -1
  82. package/dist/fetch/db.js.map +1 -1
  83. package/dist/fetch/domains.d.ts +3 -0
  84. package/dist/fetch/domains.d.ts.map +1 -1
  85. package/dist/fetch/domains.js +5 -4
  86. package/dist/fetch/domains.js.map +1 -1
  87. package/dist/fetch/errors.d.ts +1 -1
  88. package/dist/fetch/errors.d.ts.map +1 -1
  89. package/dist/fetch/errors.js.map +1 -1
  90. package/dist/fetch/index.d.ts +4 -0
  91. package/dist/fetch/index.d.ts.map +1 -1
  92. package/dist/fetch/index.js +3 -0
  93. package/dist/fetch/index.js.map +1 -1
  94. package/dist/fetch/masterKey.d.ts +11 -0
  95. package/dist/fetch/masterKey.d.ts.map +1 -0
  96. package/dist/fetch/masterKey.js +46 -0
  97. package/dist/fetch/masterKey.js.map +1 -0
  98. package/dist/fetch/paths.d.ts +48 -1
  99. package/dist/fetch/paths.d.ts.map +1 -1
  100. package/dist/fetch/paths.js +82 -8
  101. package/dist/fetch/paths.js.map +1 -1
  102. package/dist/health.d.ts.map +1 -1
  103. package/dist/health.js +47 -35
  104. package/dist/health.js.map +1 -1
  105. package/dist/help/helpAssets.js +4 -4
  106. package/dist/help/helpAssets.js.map +1 -1
  107. package/dist/help/manifest.d.ts +8 -2
  108. package/dist/help/manifest.d.ts.map +1 -1
  109. package/dist/help/manifest.js +10 -4
  110. package/dist/help/manifest.js.map +1 -1
  111. package/dist/items/add.d.ts +3 -0
  112. package/dist/items/add.d.ts.map +1 -0
  113. package/dist/items/add.js +34 -0
  114. package/dist/items/add.js.map +1 -0
  115. package/dist/items/commands.d.ts +3 -0
  116. package/dist/items/commands.d.ts.map +1 -0
  117. package/dist/items/commands.js +22 -0
  118. package/dist/items/commands.js.map +1 -0
  119. package/dist/items/detail.d.ts +3 -0
  120. package/dist/items/detail.d.ts.map +1 -0
  121. package/dist/items/detail.js +31 -0
  122. package/dist/items/detail.js.map +1 -0
  123. package/dist/items/index.d.ts +3 -0
  124. package/dist/items/index.d.ts.map +1 -0
  125. package/dist/items/index.js +4 -0
  126. package/dist/items/index.js.map +1 -0
  127. package/dist/items/inventory.d.ts +4 -0
  128. package/dist/items/inventory.d.ts.map +1 -0
  129. package/dist/items/inventory.js +41 -0
  130. package/dist/items/inventory.js.map +1 -0
  131. package/dist/items/pages/add_form.d.ts +21 -0
  132. package/dist/items/pages/add_form.d.ts.map +1 -0
  133. package/dist/items/pages/add_form.js +169 -0
  134. package/dist/items/pages/add_form.js.map +1 -0
  135. package/dist/items/pages/browse.d.ts +21 -0
  136. package/dist/items/pages/browse.d.ts.map +1 -0
  137. package/dist/items/pages/browse.js +143 -0
  138. package/dist/items/pages/browse.js.map +1 -0
  139. package/dist/items/pages/category_manage.d.ts +21 -0
  140. package/dist/items/pages/category_manage.d.ts.map +1 -0
  141. package/dist/items/pages/category_manage.js +153 -0
  142. package/dist/items/pages/category_manage.js.map +1 -0
  143. package/dist/items/pages/confirm.d.ts +21 -0
  144. package/dist/items/pages/confirm.d.ts.map +1 -0
  145. package/dist/items/pages/confirm.js +147 -0
  146. package/dist/items/pages/confirm.js.map +1 -0
  147. package/dist/items/pages/detail.d.ts +21 -0
  148. package/dist/items/pages/detail.d.ts.map +1 -0
  149. package/dist/items/pages/detail.js +160 -0
  150. package/dist/items/pages/detail.js.map +1 -0
  151. package/dist/items/pages/duplicates.d.ts +21 -0
  152. package/dist/items/pages/duplicates.d.ts.map +1 -0
  153. package/dist/items/pages/duplicates.js +138 -0
  154. package/dist/items/pages/duplicates.js.map +1 -0
  155. package/dist/items/pages/history.d.ts +21 -0
  156. package/dist/items/pages/history.d.ts.map +1 -0
  157. package/dist/items/pages/history.js +213 -0
  158. package/dist/items/pages/history.js.map +1 -0
  159. package/dist/items/pages/inventory_diff.d.ts +21 -0
  160. package/dist/items/pages/inventory_diff.d.ts.map +1 -0
  161. package/dist/items/pages/inventory_diff.js +126 -0
  162. package/dist/items/pages/inventory_diff.js.map +1 -0
  163. package/dist/items/pages/inventory_records.d.ts +21 -0
  164. package/dist/items/pages/inventory_records.d.ts.map +1 -0
  165. package/dist/items/pages/inventory_records.js +142 -0
  166. package/dist/items/pages/inventory_records.js.map +1 -0
  167. package/dist/items/pages/inventory_round.d.ts +21 -0
  168. package/dist/items/pages/inventory_round.d.ts.map +1 -0
  169. package/dist/items/pages/inventory_round.js +145 -0
  170. package/dist/items/pages/inventory_round.js.map +1 -0
  171. package/dist/items/pages/locate.d.ts +21 -0
  172. package/dist/items/pages/locate.d.ts.map +1 -0
  173. package/dist/items/pages/locate.js +126 -0
  174. package/dist/items/pages/locate.js.map +1 -0
  175. package/dist/items/pages/move_checklist.d.ts +21 -0
  176. package/dist/items/pages/move_checklist.d.ts.map +1 -0
  177. package/dist/items/pages/move_checklist.js +112 -0
  178. package/dist/items/pages/move_checklist.js.map +1 -0
  179. package/dist/items/pages/photo_wall.d.ts +21 -0
  180. package/dist/items/pages/photo_wall.d.ts.map +1 -0
  181. package/dist/items/pages/photo_wall.js +145 -0
  182. package/dist/items/pages/photo_wall.js.map +1 -0
  183. package/dist/items/pages/photos.d.ts +21 -0
  184. package/dist/items/pages/photos.d.ts.map +1 -0
  185. package/dist/items/pages/photos.js +180 -0
  186. package/dist/items/pages/photos.js.map +1 -0
  187. package/dist/items/pages/receipt.d.ts +21 -0
  188. package/dist/items/pages/receipt.d.ts.map +1 -0
  189. package/dist/items/pages/receipt.js +252 -0
  190. package/dist/items/pages/receipt.js.map +1 -0
  191. package/dist/items/pages/relations.d.ts +21 -0
  192. package/dist/items/pages/relations.d.ts.map +1 -0
  193. package/dist/items/pages/relations.js +144 -0
  194. package/dist/items/pages/relations.js.map +1 -0
  195. package/dist/items/pages/search_list.d.ts +21 -0
  196. package/dist/items/pages/search_list.d.ts.map +1 -0
  197. package/dist/items/pages/search_list.js +133 -0
  198. package/dist/items/pages/search_list.js.map +1 -0
  199. package/dist/items/pages/tag_manage.d.ts +21 -0
  200. package/dist/items/pages/tag_manage.d.ts.map +1 -0
  201. package/dist/items/pages/tag_manage.js +213 -0
  202. package/dist/items/pages/tag_manage.js.map +1 -0
  203. package/dist/items/pages/undo_select.d.ts +21 -0
  204. package/dist/items/pages/undo_select.d.ts.map +1 -0
  205. package/dist/items/pages/undo_select.js +143 -0
  206. package/dist/items/pages/undo_select.js.map +1 -0
  207. package/dist/items/routes.d.ts +3 -0
  208. package/dist/items/routes.d.ts.map +1 -0
  209. package/dist/items/routes.js +62 -0
  210. package/dist/items/routes.js.map +1 -0
  211. package/dist/items/search.d.ts +3 -0
  212. package/dist/items/search.d.ts.map +1 -0
  213. package/dist/items/search.js +47 -0
  214. package/dist/items/search.js.map +1 -0
  215. package/dist/items/tag.d.ts +25 -0
  216. package/dist/items/tag.d.ts.map +1 -0
  217. package/dist/items/tag.js +133 -0
  218. package/dist/items/tag.js.map +1 -0
  219. package/dist/items/update.d.ts +20 -0
  220. package/dist/items/update.d.ts.map +1 -0
  221. package/dist/items/update.js +211 -0
  222. package/dist/items/update.js.map +1 -0
  223. package/dist/outfit/commands.d.ts +3 -0
  224. package/dist/outfit/commands.d.ts.map +1 -0
  225. package/dist/outfit/commands.js +7 -0
  226. package/dist/outfit/commands.js.map +1 -0
  227. package/dist/outfit/index.d.ts +3 -0
  228. package/dist/outfit/index.d.ts.map +1 -0
  229. package/dist/outfit/index.js +4 -0
  230. package/dist/outfit/index.js.map +1 -0
  231. package/dist/outfit/outfit.d.ts +3 -0
  232. package/dist/outfit/outfit.d.ts.map +1 -0
  233. package/dist/outfit/outfit.js +182 -0
  234. package/dist/outfit/outfit.js.map +1 -0
  235. package/dist/outfit/pages/outfit_picker.d.ts +21 -0
  236. package/dist/outfit/pages/outfit_picker.d.ts.map +1 -0
  237. package/dist/outfit/pages/outfit_picker.js +185 -0
  238. package/dist/outfit/pages/outfit_picker.js.map +1 -0
  239. package/dist/outfit/pages/travel_trip.d.ts +21 -0
  240. package/dist/outfit/pages/travel_trip.d.ts.map +1 -0
  241. package/dist/outfit/pages/travel_trip.js +185 -0
  242. package/dist/outfit/pages/travel_trip.js.map +1 -0
  243. package/dist/outfit/pages/trip_outfit_plan.d.ts +21 -0
  244. package/dist/outfit/pages/trip_outfit_plan.d.ts.map +1 -0
  245. package/dist/outfit/pages/trip_outfit_plan.js +173 -0
  246. package/dist/outfit/pages/trip_outfit_plan.js.map +1 -0
  247. package/dist/outfit/pages/wardrobe_analyze.d.ts +21 -0
  248. package/dist/outfit/pages/wardrobe_analyze.d.ts.map +1 -0
  249. package/dist/outfit/pages/wardrobe_analyze.js +171 -0
  250. package/dist/outfit/pages/wardrobe_analyze.js.map +1 -0
  251. package/dist/outfit/pages/wardrobe_season.d.ts +21 -0
  252. package/dist/outfit/pages/wardrobe_season.d.ts.map +1 -0
  253. package/dist/outfit/pages/wardrobe_season.js +167 -0
  254. package/dist/outfit/pages/wardrobe_season.js.map +1 -0
  255. package/dist/outfit/routes.d.ts +3 -0
  256. package/dist/outfit/routes.d.ts.map +1 -0
  257. package/dist/outfit/routes.js +9 -0
  258. package/dist/outfit/routes.js.map +1 -0
  259. package/dist/outfit/trip.d.ts +3 -0
  260. package/dist/outfit/trip.d.ts.map +1 -0
  261. package/dist/outfit/trip.js +59 -0
  262. package/dist/outfit/trip.js.map +1 -0
  263. package/dist/output.d.ts +13 -0
  264. package/dist/output.d.ts.map +1 -0
  265. package/dist/output.js +57 -0
  266. package/dist/output.js.map +1 -0
  267. package/dist/policy/routes.generated.d.ts +3 -0
  268. package/dist/policy/routes.generated.d.ts.map +1 -0
  269. package/dist/policy/routes.generated.js +128 -0
  270. package/dist/policy/routes.generated.js.map +1 -0
  271. package/dist/policy/wakewords.d.ts +1 -0
  272. package/dist/policy/wakewords.d.ts.map +1 -1
  273. package/dist/policy/wakewords.js +11 -93
  274. package/dist/policy/wakewords.js.map +1 -1
  275. package/dist/receipt/commands.d.ts +3 -0
  276. package/dist/receipt/commands.d.ts.map +1 -0
  277. package/dist/receipt/commands.js +6 -0
  278. package/dist/receipt/commands.js.map +1 -0
  279. package/dist/receipt/index.d.ts +3 -0
  280. package/dist/receipt/index.d.ts.map +1 -0
  281. package/dist/receipt/index.js +4 -0
  282. package/dist/receipt/index.js.map +1 -0
  283. package/dist/receipt/pages/accounts.d.ts +21 -0
  284. package/dist/receipt/pages/accounts.d.ts.map +1 -0
  285. package/dist/receipt/pages/accounts.js +217 -0
  286. package/dist/receipt/pages/accounts.js.map +1 -0
  287. package/dist/receipt/pages/certificates.d.ts +21 -0
  288. package/dist/receipt/pages/certificates.d.ts.map +1 -0
  289. package/dist/receipt/pages/certificates.js +236 -0
  290. package/dist/receipt/pages/certificates.js.map +1 -0
  291. package/dist/receipt/pages/purchase_records.d.ts +21 -0
  292. package/dist/receipt/pages/purchase_records.d.ts.map +1 -0
  293. package/dist/receipt/pages/purchase_records.js +250 -0
  294. package/dist/receipt/pages/purchase_records.js.map +1 -0
  295. package/dist/receipt/pages/warranty.d.ts +21 -0
  296. package/dist/receipt/pages/warranty.d.ts.map +1 -0
  297. package/dist/receipt/pages/warranty.js +142 -0
  298. package/dist/receipt/pages/warranty.js.map +1 -0
  299. package/dist/receipt/routes.d.ts +3 -0
  300. package/dist/receipt/routes.d.ts.map +1 -0
  301. package/dist/receipt/routes.js +21 -0
  302. package/dist/receipt/routes.js.map +1 -0
  303. package/dist/receipt/ticket.d.ts +4 -0
  304. package/dist/receipt/ticket.d.ts.map +1 -0
  305. package/dist/receipt/ticket.js +173 -0
  306. package/dist/receipt/ticket.js.map +1 -0
  307. package/dist/render/copyArea.d.ts +45 -0
  308. package/dist/render/copyArea.d.ts.map +1 -0
  309. package/dist/render/copyArea.js +74 -0
  310. package/dist/render/copyArea.js.map +1 -0
  311. package/dist/render/envelope.d.ts.map +1 -1
  312. package/dist/render/envelope.js +4 -23
  313. package/dist/render/envelope.js.map +1 -1
  314. package/dist/render/errors.d.ts +1 -1
  315. package/dist/render/errors.d.ts.map +1 -1
  316. package/dist/render/errors.js.map +1 -1
  317. package/dist/render/familyPage.d.ts +20 -0
  318. package/dist/render/familyPage.d.ts.map +1 -0
  319. package/dist/render/familyPage.js +108 -0
  320. package/dist/render/familyPage.js.map +1 -0
  321. package/dist/render/html.d.ts +7 -2
  322. package/dist/render/html.d.ts.map +1 -1
  323. package/dist/render/html.js +21 -5
  324. package/dist/render/html.js.map +1 -1
  325. package/dist/render/index.d.ts +7 -1
  326. package/dist/render/index.d.ts.map +1 -1
  327. package/dist/render/index.js +8 -1
  328. package/dist/render/index.js.map +1 -1
  329. package/dist/render/pageFamilies.d.ts +8 -0
  330. package/dist/render/pageFamilies.d.ts.map +1 -0
  331. package/dist/render/pageFamilies.js +169 -0
  332. package/dist/render/pageFamilies.js.map +1 -0
  333. package/dist/render/sceneNaming.d.ts +14 -0
  334. package/dist/render/sceneNaming.d.ts.map +1 -0
  335. package/dist/render/sceneNaming.js +171 -0
  336. package/dist/render/sceneNaming.js.map +1 -0
  337. package/dist/setup/commands.d.ts +3 -0
  338. package/dist/setup/commands.d.ts.map +1 -0
  339. package/dist/setup/commands.js +9 -0
  340. package/dist/setup/commands.js.map +1 -0
  341. package/dist/setup/index.d.ts +3 -0
  342. package/dist/setup/index.d.ts.map +1 -0
  343. package/dist/setup/index.js +4 -0
  344. package/dist/setup/index.js.map +1 -0
  345. package/dist/setup/pages/backup_receipt.d.ts +21 -0
  346. package/dist/setup/pages/backup_receipt.d.ts.map +1 -0
  347. package/dist/setup/pages/backup_receipt.js +198 -0
  348. package/dist/setup/pages/backup_receipt.js.map +1 -0
  349. package/dist/setup/pages/first_use_wizard.d.ts +21 -0
  350. package/dist/setup/pages/first_use_wizard.d.ts.map +1 -0
  351. package/dist/setup/pages/first_use_wizard.js +169 -0
  352. package/dist/setup/pages/first_use_wizard.js.map +1 -0
  353. package/dist/setup/pages/health_report.d.ts +21 -0
  354. package/dist/setup/pages/health_report.d.ts.map +1 -0
  355. package/dist/setup/pages/health_report.js +152 -0
  356. package/dist/setup/pages/health_report.js.map +1 -0
  357. package/dist/setup/pages/import_restore.d.ts +21 -0
  358. package/dist/setup/pages/import_restore.d.ts.map +1 -0
  359. package/dist/setup/pages/import_restore.js +179 -0
  360. package/dist/setup/pages/import_restore.js.map +1 -0
  361. package/dist/setup/routes.d.ts +3 -0
  362. package/dist/setup/routes.d.ts.map +1 -0
  363. package/dist/setup/routes.js +2 -0
  364. package/dist/setup/routes.js.map +1 -0
  365. package/dist/shared/commandSpec.d.ts +30 -0
  366. package/dist/shared/commandSpec.d.ts.map +1 -0
  367. package/dist/shared/commandSpec.js +8 -0
  368. package/dist/shared/commandSpec.js.map +1 -0
  369. package/dist/shared/fail.d.ts +4 -0
  370. package/dist/shared/fail.d.ts.map +1 -0
  371. package/dist/shared/fail.js +16 -0
  372. package/dist/shared/fail.js.map +1 -0
  373. package/dist/shared/params.d.ts +2 -0
  374. package/dist/shared/params.d.ts.map +1 -0
  375. package/dist/shared/params.js +12 -0
  376. package/dist/shared/params.js.map +1 -0
  377. package/dist/space/commands.d.ts +3 -0
  378. package/dist/space/commands.d.ts.map +1 -0
  379. package/dist/space/commands.js +6 -0
  380. package/dist/space/commands.js.map +1 -0
  381. package/dist/space/index.d.ts +3 -0
  382. package/dist/space/index.d.ts.map +1 -0
  383. package/dist/space/index.js +4 -0
  384. package/dist/space/index.js.map +1 -0
  385. package/dist/space/location.d.ts +82 -0
  386. package/dist/space/location.d.ts.map +1 -0
  387. package/dist/space/location.js +310 -0
  388. package/dist/space/location.js.map +1 -0
  389. package/dist/space/pages/fixed_spot.d.ts +21 -0
  390. package/dist/space/pages/fixed_spot.d.ts.map +1 -0
  391. package/dist/space/pages/fixed_spot.js +122 -0
  392. package/dist/space/pages/fixed_spot.js.map +1 -0
  393. package/dist/space/pages/location_manage.d.ts +21 -0
  394. package/dist/space/pages/location_manage.d.ts.map +1 -0
  395. package/dist/space/pages/location_manage.js +169 -0
  396. package/dist/space/pages/location_manage.js.map +1 -0
  397. package/dist/space/pages/space_view.d.ts +21 -0
  398. package/dist/space/pages/space_view.d.ts.map +1 -0
  399. package/dist/space/pages/space_view.js +185 -0
  400. package/dist/space/pages/space_view.js.map +1 -0
  401. package/dist/space/pages/suggest_storage.d.ts +21 -0
  402. package/dist/space/pages/suggest_storage.d.ts.map +1 -0
  403. package/dist/space/pages/suggest_storage.js +179 -0
  404. package/dist/space/pages/suggest_storage.js.map +1 -0
  405. package/dist/space/routes.d.ts +3 -0
  406. package/dist/space/routes.d.ts.map +1 -0
  407. package/dist/space/routes.js +24 -0
  408. package/dist/space/routes.js.map +1 -0
  409. package/dist/stats/commands.d.ts +3 -0
  410. package/dist/stats/commands.d.ts.map +1 -0
  411. package/dist/stats/commands.js +6 -0
  412. package/dist/stats/commands.js.map +1 -0
  413. package/dist/stats/index.d.ts +3 -0
  414. package/dist/stats/index.d.ts.map +1 -0
  415. package/dist/stats/index.js +4 -0
  416. package/dist/stats/index.js.map +1 -0
  417. package/dist/stats/pages/expiring.d.ts +21 -0
  418. package/dist/stats/pages/expiring.d.ts.map +1 -0
  419. package/dist/stats/pages/expiring.js +204 -0
  420. package/dist/stats/pages/expiring.js.map +1 -0
  421. package/dist/stats/pages/idle.d.ts +21 -0
  422. package/dist/stats/pages/idle.d.ts.map +1 -0
  423. package/dist/stats/pages/idle.js +163 -0
  424. package/dist/stats/pages/idle.js.map +1 -0
  425. package/dist/stats/pages/inventory_stat.d.ts +21 -0
  426. package/dist/stats/pages/inventory_stat.d.ts.map +1 -0
  427. package/dist/stats/pages/inventory_stat.js +133 -0
  428. package/dist/stats/pages/inventory_stat.js.map +1 -0
  429. package/dist/stats/pages/overview.d.ts +21 -0
  430. package/dist/stats/pages/overview.d.ts.map +1 -0
  431. package/dist/stats/pages/overview.js +179 -0
  432. package/dist/stats/pages/overview.js.map +1 -0
  433. package/dist/stats/routes.d.ts +3 -0
  434. package/dist/stats/routes.d.ts.map +1 -0
  435. package/dist/stats/routes.js +16 -0
  436. package/dist/stats/routes.js.map +1 -0
  437. package/dist/stats/stats.d.ts +4 -0
  438. package/dist/stats/stats.d.ts.map +1 -0
  439. package/dist/stats/stats.js +38 -0
  440. package/dist/stats/stats.js.map +1 -0
  441. package/package.json +8 -5
  442. package/templates/care_query.html +1 -0
  443. package/templates/care_receipt.html +1 -0
  444. package/templates/express/express.html +17 -0
  445. package/templates/express/list.html +17 -0
  446. package/templates/express/missing.html +17 -0
  447. package/templates/express/stock.html +17 -0
  448. package/templates/family/family_borrow.html +17 -0
  449. package/templates/family/family_members.html +17 -0
  450. package/templates/help.html +1 -0
  451. package/templates/inventory_records.html +1 -0
  452. package/templates/inventory_round.html +1 -0
  453. package/templates/item_detail.html +1 -0
  454. package/templates/item_receipt.html +1 -0
  455. package/templates/item_search.html +1 -0
  456. package/templates/item_update_receipt.html +1 -0
  457. package/templates/items/add_form.html +17 -0
  458. package/templates/items/browse.html +17 -0
  459. package/templates/items/category_manage.html +17 -0
  460. package/templates/items/confirm.html +17 -0
  461. package/templates/items/detail.html +17 -0
  462. package/templates/items/duplicates.html +17 -0
  463. package/templates/items/history.html +17 -0
  464. package/templates/items/inventory_diff.html +17 -0
  465. package/templates/items/inventory_records.html +17 -0
  466. package/templates/items/inventory_round.html +17 -0
  467. package/templates/items/locate.html +17 -0
  468. package/templates/items/move_checklist.html +17 -0
  469. package/templates/items/photo_wall.html +17 -0
  470. package/templates/items/photos.html +17 -0
  471. package/templates/items/receipt.html +17 -0
  472. package/templates/items/relations.html +17 -0
  473. package/templates/items/search_list.html +17 -0
  474. package/templates/items/tag_manage.html +17 -0
  475. package/templates/items/undo_select.html +17 -0
  476. package/templates/location_query.html +1 -0
  477. package/templates/location_receipt.html +1 -0
  478. package/templates/outfit/outfit_picker.html +17 -0
  479. package/templates/outfit/travel_trip.html +17 -0
  480. package/templates/outfit/trip_outfit_plan.html +17 -0
  481. package/templates/outfit/wardrobe_analyze.html +17 -0
  482. package/templates/outfit/wardrobe_season.html +17 -0
  483. package/templates/outfit_pick.html +1 -0
  484. package/templates/receipt/accounts.html +17 -0
  485. package/templates/receipt/certificates.html +17 -0
  486. package/templates/receipt/purchase_records.html +17 -0
  487. package/templates/receipt/warranty.html +17 -0
  488. package/templates/setup/backup_receipt.html +17 -0
  489. package/templates/setup/first_use_wizard.html +17 -0
  490. package/templates/setup/health_report.html +17 -0
  491. package/templates/setup/import_restore.html +17 -0
  492. package/templates/shopping_query.html +1 -0
  493. package/templates/shopping_receipt.html +1 -0
  494. package/templates/space/fixed_spot.html +63 -0
  495. package/templates/space/location_manage.html +70 -0
  496. package/templates/space/space_view.html +65 -0
  497. package/templates/space/suggest_storage.html +58 -0
  498. package/templates/stats/expiring.html +17 -0
  499. package/templates/stats/idle.html +17 -0
  500. package/templates/stats/inventory_stat.html +17 -0
  501. package/templates/stats/overview.html +17 -0
  502. package/templates/stats_alert.html +1 -0
  503. package/templates/stats_overview.html +1 -0
  504. package/templates/tag_query.html +1 -0
  505. package/templates/tag_receipt.html +1 -0
  506. package/templates/ticket_query.html +1 -0
  507. package/templates/ticket_receipt.html +1 -0
  508. package/templates/trip_receipt.html +1 -0
@@ -0,0 +1,169 @@
1
+ // setup能力·first_use_wizard页装配(#816 域票填内容:6步向导真页)。
2
+ //
3
+ // 信息结构对齐老 `开始使用/first_use_wizard.html`:6步步骤条/环境信息/建库结果/下一步。
4
+ // 数据只用真 envelope(home.care.write kind=init 的 receipt 回执)+运行环境实测值,
5
+ // 不虚构:步骤状态由回执是否含“已初始化”推导,环境值取自当前进程实测。
6
+ // 必需块原文=契约附录(事实源),逐条落在 data-need 属性里;三方对账照旧。
7
+ import { readFileSync } from 'node:fs';
8
+ import { platform, arch } from 'node:os';
9
+ import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
10
+ export const FAMILY = 'first_use_wizard';
11
+ export const PAGE_META = {
12
+ domain: 'setup',
13
+ family: FAMILY,
14
+ key: 'home.care.write',
15
+ shape: 'receipt',
16
+ preset: { "kind": "init" },
17
+ scenarios: ["SM8-1"],
18
+ };
19
+ export const REQUIRED_BLOCKS = {
20
+ "empty": [
21
+ "异常:数据解析失败/数据校验失败/初始化失败",
22
+ "幂等提示:已初始化"
23
+ ],
24
+ "fields": [
25
+ "6步步骤条",
26
+ "环境信息",
27
+ "建库结果",
28
+ "下一步"
29
+ ],
30
+ "operations": [
31
+ "开始初始化",
32
+ "一键重试",
33
+ "先配置环境变量",
34
+ "开始录入第一批",
35
+ "知道了",
36
+ "复制数据",
37
+ "复制日志"
38
+ ],
39
+ "status": [
40
+ "done",
41
+ "current",
42
+ "fail",
43
+ "pending"
44
+ ]
45
+ };
46
+ const STEPS = ['环境检测', '路径确认', '建库', '建分类', '引导录入', '完成回执'];
47
+ function msgOf(env) {
48
+ const d = env.data;
49
+ return typeof d.message === 'string' ? d.message : '';
50
+ }
51
+ function countOf(msg) {
52
+ const m = msg.match(/((\d+) 件)/);
53
+ return m ? m[1] : '—';
54
+ }
55
+ // 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
56
+ // fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
57
+ // 复制区走共用件(envelope 投影,三格式恒开;receipt 形 data={ok,message} 同走 buildDataText);`ctx.command` 由交付链供给,直调缺省按本族主 key。
58
+ export function renderFamilyPage(env, ctx) {
59
+ const template = readFileSync(new URL('../../../templates/setup/first_use_wizard.html', import.meta.url), 'utf8');
60
+ const msg = msgOf(env);
61
+ const done = msg.includes('已初始化');
62
+ const count = countOf(msg);
63
+ const steps = STEPS.map((t, i) => {
64
+ const st = done ? 'done' : i === 0 ? 'current' : 'pending';
65
+ const label = done ? '已完成' : i === 0 ? '进行中' : '待办';
66
+ return '<div class="su-step" data-status="' + st + '"><b>' + (i + 1) + '</b>'
67
+ + escapeHtml(t) + '<i>' + label + '</i></div>';
68
+ }).join('');
69
+ // #817 ④:实心只留「开始录入第一批」(页内「下一步」指向它),「开始初始化」降 ghost(只在完成后那支渲染)。
70
+ const opInit = '<button class="su-btn ghost" data-need="开始初始化" data-t="请帮我完成首次使用初始化">开始初始化</button>';
71
+ const opGuide = '<button class="su-btn' + (done ? '' : ' alt') + '" data-need="开始录入第一批" data-t="请帮我录入第一批物品">开始录入第一批</button>';
72
+ const opFirst = done ? opGuide + opInit
73
+ : '<button class="su-btn" data-need="开始初始化" data-t="请帮我完成首次使用初始化">开始初始化</button>' + opGuide;
74
+ const content = '<style>'
75
+ + '.su-wrap{max-width:960px;margin:0 auto;padding:0 0 24px}'
76
+ + '.su-hero{background:linear-gradient(180deg,#fff,#f8fbff);border:1px solid #e3e3e8;border-radius:20px;padding:24px;margin:0 0 16px}'
77
+ + '.su-eyebrow{color:#007aff;font-size:12px;font-weight:800;letter-spacing:.1em;margin-bottom:8px}'
78
+ + '.su-lead{color:#6e6e73;font-size:15px;margin:8px 0 0}'
79
+ + '.su-sec{background:#fff;border:1px solid #e3e3e8;border-radius:16px;padding:18px;margin:16px 0}'
80
+ + '.su-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:4px 0}'
81
+ + '.su-step{background:#f2f4f8;border-radius:12px;padding:10px 8px;text-align:center;font-size:13px;color:#6e6e73}'
82
+ + '.su-step b{display:block;font-size:16px;margin-bottom:2px}'
83
+ + '.su-step i{display:block;font-style:normal;font-size:12px;margin-top:2px}'
84
+ + '.su-step[data-status="done"]{background:#e9f8ef;color:#1d7a3f}'
85
+ + '.su-step[data-status="current"]{background:#f5f8ff;border:1.5px solid #007aff;color:#007aff}'
86
+ + '.su-step[data-status="fail"]{background:#ffecec;color:#c22e2e}'
87
+ + '.su-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:12px}'
88
+ + '.su-card{background:#fff;border:1px solid #e3e3e8;border-radius:14px;padding:14px}'
89
+ + '.su-card b{display:block;font-size:13px;color:#6e6e73;margin-bottom:4px}'
90
+ + '.su-card span{font-size:17px;font-weight:700}'
91
+ + '.su-tablewrap{overflow-x:auto;max-width:100%}'
92
+ + '.su-table{width:100%;border-collapse:collapse;font-size:14px}'
93
+ + '.su-table th,.su-table td{text-align:left;padding:10px 12px;border-bottom:1px solid #eee;vertical-align:top}'
94
+ + '.su-table th{color:#6e6e73;font-weight:600;white-space:nowrap}'
95
+ + '.su-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}'
96
+ + '.su-btn{min-height:44px;border:none;border-radius:999px;padding:12px 20px;font-size:15px;font-weight:700;cursor:pointer;background:#007aff;color:#fff}'
97
+ + '.su-btn.alt{background:#1d1d1f}.su-btn.ghost{background:#fff;color:#007aff;border:1.5px solid #007aff}'
98
+ + '.su-note{background:#fff8e8;border:1px solid #f0dfae;border-radius:14px;padding:12px 16px;margin:12px 0;font-size:14px;color:#7a5d12}'
99
+ + '.su-ok{color:#1d7a3f;font-weight:700}.su-warn{color:#b07000;font-weight:700}'
100
+ + '.su-toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);opacity:0;background:rgba(28,28,30,.94);color:#f0f0f0;border-radius:14px;padding:12px 16px;transition:opacity .2s;z-index:9999;max-width:min(480px,90vw)}'
101
+ + '.su-toast.show{opacity:1}'
102
+ + 'details.su-raw{margin:16px 0;font-size:13px;color:#6e6e73}'
103
+ + 'details.su-raw summary{min-height:44px;display:flex;align-items:center;cursor:pointer}'
104
+ + 'details.su-raw pre{white-space:pre-wrap;word-break:break-word;background:#1d1d1f;color:#f5f5f7;border-radius:12px;padding:12px;font-size:12px}'
105
+ // 390 档(≤820):步骤卡两列一档 —— 三等分太挤、单列太长(#817 seq 67 的 ③)。
106
+ + '@media(max-width:820px){.su-steps{grid-template-columns:repeat(2,minmax(0,1fr))}.su-btn{width:100%}}'
107
+ + '</style>'
108
+ + '<div class="su-wrap">'
109
+ + '<div class="su-hero"><div class="su-eyebrow">开始使用</div>'
110
+ + '<p class="su-lead">跟着六个步骤完成初始化,随时可以重进本页确认状态。</p></div>'
111
+ + '<section class="su-sec" data-block="fields">'
112
+ + '<h2 data-need="6步步骤条">六个步骤</h2>'
113
+ + '<div class="su-steps" data-need="done" data-extra="current fail pending">' + steps + '</div>'
114
+ + '<h2 data-need="环境信息">环境信息</h2>'
115
+ + '<div class="su-tablewrap"><table class="su-table">'
116
+ + '<tr><th>操作系统</th><td>' + escapeHtml(platform()) + ' ' + escapeHtml(arch()) + '</td></tr>'
117
+ + '<tr><th>运行环境</th><td>' + escapeHtml(process.version) + '</td></tr>'
118
+ + '<tr><th>库状态</th><td>' + escapeHtml(done ? '已初始化' : msg === '' ? '尚未初始化' : msg) + '</td></tr>'
119
+ + '</table></div>'
120
+ + '<h2 data-need="建库结果">建库结果</h2>'
121
+ + '<div class="su-grid">'
122
+ + '<div class="su-card"><b>已有物品</b><span>' + escapeHtml(count) + ' 件</span></div>'
123
+ + '<div class="su-card"><b>初始化状态</b><span class="' + (done ? 'su-ok' : 'su-warn') + '">' + (done ? '已完成' : '待初始化') + '</span></div>'
124
+ + '</div>'
125
+ + (done
126
+ ? '<p class="su-note" data-need="幂等提示:已初始化">已经初始化过了,直接使用即可,重复进入不会重复建库。</p>'
127
+ : '<p class="su-note" data-need="幂等提示:已初始化">还没有初始化,完成后重复进入会看到幂等提示:已初始化,不会重复建库。</p>')
128
+ + '<h2 data-need="下一步">下一步</h2>'
129
+ + '<p>初始化完成后,建议先去查一次异常,确认数据健康,再开始录入第一批物品。</p>'
130
+ + '</section>'
131
+ + '<section class="su-sec" data-block="operations">'
132
+ + '<h2>可以做的操作</h2>'
133
+ + '<div class="su-actions">'
134
+ + opFirst
135
+ + '<button class="su-btn ghost" data-need="先配置环境变量" data-t="请帮我配置数据存储环境">先配置环境变量</button>'
136
+ + '<button class="su-btn ghost" data-need="一键重试" data-t="初始化失败请重试">一键重试</button>'
137
+ + '<button class="su-btn ghost" data-need="知道了" id="suKnow">知道了</button>'
138
+ + '</div>'
139
+ + '<span data-need="复制数据" hidden></span>'
140
+ + '<span data-need="复制日志" hidden></span>'
141
+ + homeCopyArea({
142
+ data: { envelope: env },
143
+ log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
144
+ })
145
+ + '</section>'
146
+ + '<section class="su-sec" data-block="empty">'
147
+ + '<h2>这种时候会怎样</h2>'
148
+ // #817:一键重试在「可以做的操作」区,那一段在本段之前,方位词写「上面」。
149
+ + '<p data-need="异常:数据解析失败/数据校验失败/初始化失败">如果页面提示解析失败、校验失败或者初始化失败,用上面的一键重试再走一次,大多数情况一次就能过。</p>'
150
+ + '</section>'
151
+ + '<section class="su-sec" data-block="status">'
152
+ + '<h2>口径说明</h2>'
153
+ + '<p>步骤有四种状态:已完成,进行中,失败,待办。当前状态也标在每个步骤卡片上。</p>'
154
+ + '</section>'
155
+ + '<details hidden class="su-raw"><summary>原始回执</summary><pre>'
156
+ + escapeHtml(JSON.stringify(env.data)) + '</pre></details>'
157
+ + '</div>'
158
+ + '<div class="su-toast" id="suToast" role="status"></div>'
159
+ + '<script>'
160
+ + 'function suToast(t){var el=document.getElementById("suToast");if(!el)return;el.textContent=t;el.classList.add("show");setTimeout(function(){el.classList.remove("show")},3000)}'
161
+ + 'function suCopy(text,ok){function fb(){try{var ta=document.createElement("textarea");ta.value=text;document.body.appendChild(ta);ta.select();var ok=false;try{ok=document.execCommand("copy")}catch(e){}document.body.removeChild(ta);return ok}catch(e){return false}}'
162
+ + 'if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(text).then(function(){suToast(ok)}).catch(function(){suToast(fb()?ok:"复制失败,请长按手动复制")})}else{suToast(fb()?ok:"复制失败,请长按手动复制")}}'
163
+ + 'document.querySelectorAll("[data-t]").forEach(function(b){b.addEventListener("click",function(){suCopy(b.getAttribute("data-t"),"指令已复制,发给助手即可执行")})});'
164
+ + 'var kd=document.getElementById("suKnow");if(kd)kd.addEventListener("click",function(){suToast("收到")});'
165
+ + '</script>'
166
+ + '';
167
+ return fillTemplate(template, content);
168
+ }
169
+ //# sourceMappingURL=first_use_wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first_use_wizard.js","sourceRoot":"","sources":["../../../src/setup/pages/first_use_wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "health_report";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "setup";
5
+ readonly family: "health_report";
6
+ readonly key: "home.care.query";
7
+ readonly shape: "list";
8
+ readonly preset: Record<string, unknown>;
9
+ readonly scenarios: readonly string[];
10
+ };
11
+ export declare const REQUIRED_BLOCKS: {
12
+ readonly fields: readonly string[];
13
+ readonly operations: readonly string[];
14
+ readonly empty: readonly string[];
15
+ readonly status: readonly string[];
16
+ };
17
+ export declare function renderFamilyPage(env: Envelope, ctx?: {
18
+ readonly command?: string;
19
+ readonly actionAt?: string;
20
+ }): string;
21
+ //# sourceMappingURL=health_report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health_report.d.ts","sourceRoot":"","sources":["../../../src/setup/pages/health_report.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,eAAwB,CAAC;AAE/C,eAAO,MAAM,SAAS;;;;;qBAKO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;wBAC1B,SAAS,MAAM,EAAE;CACjC,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;AAkBF,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,CAmGvH"}
@@ -0,0 +1,152 @@
1
+ // setup能力·health_report页装配(#816 域票填内容:检查项列表+勾选复制修复引导页,#817 收口补逐项动作)。
2
+ // 本期真链只给三项检查(无标签/无照片/单级位置),有几项画几项,不虚构老页的八项与阈值(偏差记入域对账)。
3
+ // 必需块原文=契约附录(事实源),逐条落在 data-need 属性里;三方对账照旧。
4
+ import { readFileSync } from 'node:fs';
5
+ import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
6
+ export const FAMILY = 'health_report';
7
+ export const PAGE_META = {
8
+ domain: 'setup',
9
+ family: FAMILY,
10
+ key: 'home.care.query',
11
+ shape: 'list',
12
+ preset: { "kind": "lint" },
13
+ scenarios: ["SM8-2"],
14
+ };
15
+ export const REQUIRED_BLOCKS = {
16
+ "empty": [
17
+ "空态:数据健康良好+未发现数据问题",
18
+ "拦截态:请先勾选至少1个问题",
19
+ "异常:数据解析失败/数据校验失败"
20
+ ],
21
+ "fields": [
22
+ "环境信息",
23
+ "检查项列表",
24
+ "问题总数",
25
+ "健康标记",
26
+ "动作列"
27
+ ],
28
+ "operations": [
29
+ "勾选",
30
+ "复制选中修复引导",
31
+ "知道了",
32
+ "复制数据",
33
+ "复制日志"
34
+ ],
35
+ "status": [
36
+ "良好",
37
+ "待处理"
38
+ ]
39
+ };
40
+ /** 逐项动作:动作列说的是这一项该做什么(新链没有逐项动作的项写「—」,不三行同一句)。 */
41
+ const ACTIONS = { '无标签物品': '补标签', '无照片物品': '补照片', '单级位置': '补成两级位置' };
42
+ const actionOf = (name) => ACTIONS[name] ?? '—';
43
+ function issuesOf(env) {
44
+ const d = env.data;
45
+ const items = Array.isArray(d.items) ? d.items : [];
46
+ return items
47
+ .filter((x) => typeof x.name === 'string')
48
+ .map((x) => ({ name: String(x.name).replace(/ ?\d+ ?[件条]$/, ''), count: Number(x.count ?? 0) })); // 项名去掉结尾的「N 件/N 条」:数量列已有一格
49
+ }
50
+ // 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页;fail-closed:模板缺失/标记异常即抛,不返空页。
51
+ // 复制区走共用件(envelope 投影,三格式恒开);`ctx.command` 由交付链供给,直调缺省按本族主 key。
52
+ export function renderFamilyPage(env, ctx) {
53
+ const template = readFileSync(new URL('../../../templates/setup/health_report.html', import.meta.url), 'utf8');
54
+ const issues = issuesOf(env);
55
+ const real = issues.filter((x) => !x.name.startsWith('健康'));
56
+ const total = real.reduce((a, x) => a + (Number.isFinite(x.count) ? x.count : 0), 0);
57
+ const healthy = real.length === 0;
58
+ const rows = real.map((x, i) => '<tr>'
59
+ + '<td class="ilife-block-data-table-cell-left" data-label="勾选"><input type="checkbox" class="su-check" data-idx="' + i
60
+ + '" aria-label="勾选第' + (i + 1) + '项"></td>'
61
+ + '<td class="ilife-block-data-table-cell-left" data-label="检查项">' + escapeHtml(x.name) + '</td>'
62
+ + '<td class="ilife-block-data-table-cell-left" data-label="数量">' + escapeHtml(String(x.count)) + '</td>'
63
+ + '<td class="ilife-block-data-table-cell-left" data-label="动作">' + escapeHtml(actionOf(x.name)) + '</td></tr>').join('');
64
+ const content = '<style>'
65
+ + '.su-wrap{max-width:960px;margin:0 auto;padding:0 0 24px}'
66
+ + '.su-hero{background:linear-gradient(180deg,#fff,#f8fbff);border:1px solid #e3e3e8;border-radius:20px;padding:24px;margin:0 0 16px}'
67
+ + '.su-eyebrow{color:#007aff;font-size:12px;font-weight:800;letter-spacing:.1em;margin-bottom:8px}'
68
+ + '.su-lead{color:#6e6e73;font-size:15px;margin:8px 0 0}'
69
+ + '.su-sec{background:#fff;border:1px solid #e3e3e8;border-radius:16px;padding:18px;margin:16px 0}'
70
+ + '.su-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr));gap:12px}'
71
+ + '.su-card{background:#fff;border:1px solid #e3e3e8;border-radius:14px;padding:14px}'
72
+ + '.su-card b{display:block;font-size:13px;color:#6e6e73;margin-bottom:4px}'
73
+ + '.su-card span{font-size:22px;font-weight:750}'
74
+ + '.su-ok{color:#1d7a3f}.su-bad{color:#c22e2e}.su-warn{color:#b07000}'
75
+ // #817 seq 68(③双端不塌):这张表原先用自家 .su-table —— 390 档四列被压成窄列、单元格词中折行。
76
+ // 改用公共层表格块(`.ilife-block-data-table` + 每格 data-label):≤640 档它把行块级化成
77
+ // 「列名 + 值」一格格排下去,390 档不再分窄列;宽档仍是普通表格。表头折叠后仍留「勾选/检查项/
78
+ // 数量/动作」四处 data-label,行与列的对应关系不丢。
79
+ + '.su-check{width:44px;height:44px;accent-color:#007aff}'
80
+ + '.su-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}'
81
+ + '.su-btn{min-height:44px;border:none;border-radius:999px;padding:12px 20px;font-size:15px;font-weight:700;cursor:pointer;background:#007aff;color:#fff}'
82
+ + '.su-btn.alt{background:#1d1d1f}.su-btn.ghost{background:#fff;color:#007aff;border:1.5px solid #007aff}'
83
+ + '.su-note{background:#fff8e8;border:1px solid #f0dfae;border-radius:14px;padding:12px 16px;margin:12px 0;font-size:14px;color:#7a5d12}'
84
+ + '.su-toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);opacity:0;background:rgba(28,28,30,.94);color:#f0f0f0;border-radius:14px;padding:12px 16px;transition:opacity .2s;z-index:9999;max-width:min(480px,90vw)}'
85
+ + '.su-toast.show{opacity:1}'
86
+ + 'details.su-raw{margin:16px 0;font-size:13px;color:#6e6e73}'
87
+ + 'details.su-raw summary{min-height:44px;display:flex;align-items:center;cursor:pointer}'
88
+ + 'details.su-raw pre{white-space:pre-wrap;word-break:break-word;background:#1d1d1f;color:#f5f5f7;border-radius:12px;padding:12px;font-size:12px}'
89
+ + '@media(max-width:820px){.su-btn{width:100%}}'
90
+ + '</style>'
91
+ + '<div class="su-wrap">'
92
+ + '<div class="su-hero"><div class="su-eyebrow">开始使用</div>'
93
+ // #817:壳里的 h1 已是「查异常」,这里再挂同义的 h2「数据健康检查」=同一事实两遍,删掉。
94
+ + '<p class="su-lead">' + (healthy ? '目前没有发现数据问题,继续保持。' : '发现 ' + total + ' 个待处理项,勾选后复制修复引导发给助手。') + '</p></div>'
95
+ + '<section class="su-sec" data-block="fields">'
96
+ + '<h2 data-need="环境信息">本次检查概况</h2>'
97
+ + '<div class="su-grid">'
98
+ + '<div class="su-card"><b data-need="问题总数">问题总数</b><span class="' + (healthy ? 'su-ok' : 'su-bad') + '">' + total + '</span></div>'
99
+ + '<div class="su-card"><b>检查项数</b><span>' + real.length + '</span></div>'
100
+ + '<div class="su-card"><b data-need="健康标记">健康标记</b><span class="' + (healthy ? 'su-ok' : 'su-warn') + '" data-need="良好" data-extra="待处理">' + (healthy ? '良好' : '待处理') + '</span></div>'
101
+ + '</div>'
102
+ + '<h2 data-need="检查项列表">检查项</h2>'
103
+ + (healthy
104
+ ? '<p class="su-note">当前没有待处理项,继续保持即可。</p><p hidden><span data-need="勾选"></span><span data-need="动作列"></span></p>'
105
+ : '<div class="ilife-block-data-table"><table class="ilife-block-data-table-table">'
106
+ + '<thead><tr><th scope="col" class="ilife-block-data-table-cell-left" data-need="勾选">勾选</th>'
107
+ + '<th scope="col" class="ilife-block-data-table-cell-left">检查项</th>'
108
+ + '<th scope="col" class="ilife-block-data-table-cell-left">数量</th>'
109
+ + '<th scope="col" class="ilife-block-data-table-cell-left" data-need="动作列">动作</th></tr></thead>'
110
+ + '<tbody>' + rows + '</tbody></table></div>')
111
+ + '</section>'
112
+ + '<section class="su-sec" data-block="operations">'
113
+ + '<h2>可以做的操作</h2>'
114
+ + '<div class="su-actions">'
115
+ + '<button class="su-btn" data-need="复制选中修复引导" id="suCopyFix">复制选中修复引导</button>'
116
+ + '<button class="su-btn ghost" data-need="知道了" id="suKnow">知道了</button>'
117
+ + '</div>'
118
+ + '<span data-need="复制数据" hidden></span>'
119
+ + '<span data-need="复制日志" hidden></span>'
120
+ + homeCopyArea({
121
+ data: { envelope: env },
122
+ log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
123
+ })
124
+ + '</section>'
125
+ + '<section class="su-sec" data-block="empty">'
126
+ + '<h2>这种时候会怎样</h2>'
127
+ + (healthy
128
+ ? '<p data-need="空态:数据健康良好+未发现数据问题">数据健康良好,没有发现数据问题。</p>'
129
+ : '<p>待处理项一条条列在上面,处理完再查一次,数字就会跟着降。</p><p hidden data-need="空态:数据健康良好+未发现数据问题">数据健康良好,没有发现数据问题。</p>')
130
+ + '<p data-need="拦截态:请先勾选至少1个问题">点复制之前请先勾选至少一项,没有勾选就点复制会没有内容可复制。</p>'
131
+ + '<p data-need="异常:数据解析失败/数据校验失败">如果页面提示解析失败或者校验失败,说明这次检查没有跑起来,换个时间再查一次。</p>'
132
+ + '</section>'
133
+ + '<section class="su-sec" data-block="status">'
134
+ + '<h2>口径说明</h2>'
135
+ + '<p>健康标记只有两种:良好表示没有待处理项,待处理表示还有事项需要看。</p>'
136
+ + '</section>'
137
+ + '<details hidden class="su-raw"><summary>原始回执</summary><pre>'
138
+ + escapeHtml(JSON.stringify(env.data)) + '</pre></details>'
139
+ + '</div>'
140
+ + '<div class="su-toast" id="suToast" role="status"></div>'
141
+ + '<script>'
142
+ + 'var ISSUES=' + JSON.stringify(real.map((x) => x.name)) + ';'
143
+ + 'function suToast(t){var el=document.getElementById("suToast");if(!el)return;el.textContent=t;el.classList.add("show");setTimeout(function(){el.classList.remove("show")},3500)}'
144
+ + 'function suCopy(text,ok){function fb(){try{var ta=document.createElement("textarea");ta.value=text;document.body.appendChild(ta);ta.select();var ok=false;try{ok=document.execCommand("copy")}catch(e){}document.body.removeChild(ta);return ok}catch(e){return false}}'
145
+ + 'if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(text).then(function(){suToast(ok)}).catch(function(){suToast(fb()?ok:"复制失败,请长按手动复制")})}else{suToast(fb()?ok:"复制失败,请长按手动复制")}}'
146
+ + 'var fix=document.getElementById("suCopyFix");if(fix)fix.addEventListener("click",function(){var picked=[];document.querySelectorAll(".su-check").forEach(function(c,i){if(c.checked&&ISSUES[i])picked.push("修复项:"+ISSUES[i])});'
147
+ + 'if(!picked.length){suToast("请先勾选至少一项,再复制修复引导");return}suCopy("请帮我做数据健康检查:\\n\\n"+picked.join("\\n"),"修复引导已复制")});'
148
+ + 'var kd=document.getElementById("suKnow");if(kd)kd.addEventListener("click",function(){suToast("收到")});'
149
+ + '</script>';
150
+ return fillTemplate(template, content);
151
+ }
152
+ //# sourceMappingURL=health_report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health_report.js","sourceRoot":"","sources":["../../../src/setup/pages/health_report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Envelope } from 'base-link-core';
2
+ export declare const FAMILY: "import_restore";
3
+ export declare const PAGE_META: {
4
+ readonly domain: "setup";
5
+ readonly family: "import_restore";
6
+ readonly key: "home.care.write";
7
+ readonly shape: "receipt";
8
+ readonly preset: Record<string, unknown>;
9
+ readonly scenarios: readonly string[];
10
+ };
11
+ export declare const REQUIRED_BLOCKS: {
12
+ readonly fields: readonly string[];
13
+ readonly operations: readonly string[];
14
+ readonly empty: readonly string[];
15
+ readonly status: readonly string[];
16
+ };
17
+ export declare function renderFamilyPage(env: Envelope, ctx?: {
18
+ readonly command?: string;
19
+ readonly actionAt?: string;
20
+ }): string;
21
+ //# sourceMappingURL=import_restore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import_restore.d.ts","sourceRoot":"","sources":["../../../src/setup/pages/import_restore.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,gBAAyB,CAAC;AAEhD,eAAO,MAAM,SAAS;;;;;qBAKS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;wBAC5B,SAAS,MAAM,EAAE;CACjC,CAAC;AAEX,eAAO,MAAM,eAAe,EA2BvB;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;AAyBF,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,CAiHvH"}
@@ -0,0 +1,179 @@
1
+ // setup能力·import_restore页装配(#816 域票填内容:导入四步冲突处理页,#817 收口补模式值位与承诺语)。
2
+ // 诚实口径:新实现是整库覆盖(恢复前自动自备份),没有逐条同名比对——冲突区如实说明、不虚构名单,偏差记入域对账。
3
+ // 页面承诺语只说一遍(页首不复述);必需块原文=契约附录(事实源),逐条落在 data-need 属性里,三方对账照旧。
4
+ import { readFileSync } from 'node:fs';
5
+ import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
6
+ export const FAMILY = 'import_restore';
7
+ export const PAGE_META = {
8
+ domain: 'setup',
9
+ family: FAMILY,
10
+ key: 'home.care.write',
11
+ shape: 'receipt',
12
+ preset: { "kind": "import" },
13
+ scenarios: ["SM8-4"],
14
+ };
15
+ export const REQUIRED_BLOCKS = {
16
+ "empty": [
17
+ "冲突超10条折叠",
18
+ "异常:数据解析失败/数据校验失败/导入失败",
19
+ "承诺语:导入前自动备份+失败回滚"
20
+ ],
21
+ "fields": [
22
+ "四步(选择文件/校验结果/冲突预览/确认导入)",
23
+ "校验项",
24
+ "冲突名单",
25
+ "导入结果"
26
+ ],
27
+ "operations": [
28
+ "选择文件",
29
+ "冲突处理下拉",
30
+ "确认导入",
31
+ "撤销导入",
32
+ "知道了",
33
+ "复制数据",
34
+ "复制日志"
35
+ ],
36
+ "status": [
37
+ "跳过同名",
38
+ "覆盖同名",
39
+ "done",
40
+ "current"
41
+ ]
42
+ };
43
+ function msgOf(env) {
44
+ const d = env.data;
45
+ return typeof d.message === 'string' ? d.message : '';
46
+ }
47
+ function numsOf(msg) {
48
+ const m1 = msg.match(/含 (\d+) 件/);
49
+ const m2 = msg.match(/当前库 (\d+) 件/);
50
+ const m3 = msg.match(/(\d+) → (\d+) 件/);
51
+ return {
52
+ backup: m1 ? m1[1] : '—',
53
+ current: m2 ? m2[1] : (m3 ? m3[1] : '—'),
54
+ after: m3 ? m3[2] : '—',
55
+ };
56
+ }
57
+ function safetyOf(msg) {
58
+ const m = msg.match(/恢复前自备份 (\S+?)[)】]/);
59
+ return m ? m[1] : '';
60
+ }
61
+ // 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页;fail-closed:模板缺失/标记异常即抛,不返空页。
62
+ // 复制区走共用件(envelope 投影,三格式恒开;receipt 形 data={ok,message} 同走 buildDataText);`ctx.command` 由交付链供给,直调缺省按本族主 key。
63
+ export function renderFamilyPage(env, ctx) {
64
+ const template = readFileSync(new URL('../../../templates/setup/import_restore.html', import.meta.url), 'utf8');
65
+ const msg = msgOf(env);
66
+ const isPreview = msg.includes('预告通过');
67
+ const isDone = msg.includes('已从备份恢复');
68
+ const nums = numsOf(msg);
69
+ const safety = safetyOf(msg);
70
+ const stepState = (i) => {
71
+ if (isDone)
72
+ return 'done';
73
+ if (isPreview)
74
+ return i < 2 ? 'done' : i === 2 ? 'current' : 'pending';
75
+ return i === 0 ? 'current' : 'pending';
76
+ };
77
+ const stepLabel = (i) => {
78
+ const s = stepState(i);
79
+ return s === 'done' ? '已完成' : s === 'current' ? '进行中' : '待办';
80
+ };
81
+ const titles = ['选择文件', '校验结果', '冲突处理', '确认导入'];
82
+ const steps = titles.map((t, i) => '<div class="su-step" data-status="'
83
+ + stepState(i) + '"><b>' + (i + 1) + '</b>' + escapeHtml(t)
84
+ + '<i>' + stepLabel(i) + '</i></div>').join('');
85
+ const content = '<style>'
86
+ + '.su-wrap{max-width:960px;margin:0 auto;padding:0 0 24px}'
87
+ + '.su-hero{background:linear-gradient(180deg,#fff,#f8fbff);border:1px solid #e3e3e8;border-radius:20px;padding:24px;margin:0 0 16px}'
88
+ + '.su-eyebrow{color:#007aff;font-size:12px;font-weight:800;letter-spacing:.1em;margin-bottom:8px}'
89
+ + '.su-lead{color:#6e6e73;font-size:15px;margin:8px 0 0}'
90
+ + '.su-sec{background:#fff;border:1px solid #e3e3e8;border-radius:16px;padding:18px;margin:16px 0}'
91
+ + '.su-steps{display:flex;gap:8px;flex-wrap:wrap;margin:4px 0}'
92
+ + '.su-step{flex:1;min-width:110px;background:#f2f4f8;border-radius:12px;padding:10px 8px;text-align:center;font-size:13px;color:#6e6e73}'
93
+ + '.su-step b{display:block;font-size:16px;margin-bottom:2px}'
94
+ + '.su-step i{display:block;font-style:normal;font-size:12px;margin-top:2px}'
95
+ + '.su-step[data-status="done"]{background:#e9f8ef;color:#1d7a3f}'
96
+ + '.su-step[data-status="current"]{background:#f5f8ff;border:1.5px solid #007aff;color:#007aff}'
97
+ + '.su-tablewrap{overflow-x:auto;max-width:100%}'
98
+ + '.su-table{width:100%;border-collapse:collapse;font-size:14px}'
99
+ + '.su-table th,.su-table td{text-align:left;padding:10px 12px;border-bottom:1px solid #eee;vertical-align:top;word-break:break-all}'
100
+ + '.su-table th{color:#6e6e73;font-weight:600;white-space:nowrap}'
101
+ + '.su-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}'
102
+ + '.su-btn{min-height:44px;border:none;border-radius:999px;padding:12px 20px;font-size:15px;font-weight:700;cursor:pointer;background:#007aff;color:#fff}'
103
+ + '.su-btn.alt{background:#1d1d1f}.su-btn.ghost{background:#fff;color:#007aff;border:1.5px solid #007aff}'
104
+ + '.su-note{background:#fff8e8;border:1px solid #f0dfae;border-radius:14px;padding:12px 16px;margin:12px 0;font-size:14px;color:#7a5d12}'
105
+ + '.su-toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);opacity:0;background:rgba(28,28,30,.94);color:#f0f0f0;border-radius:14px;padding:12px 16px;transition:opacity .2s;z-index:9999;max-width:min(480px,90vw)}'
106
+ + '.su-toast.show{opacity:1}'
107
+ + 'details.su-raw{margin:16px 0;font-size:13px;color:#6e6e73}'
108
+ + 'details.su-raw summary{min-height:44px;display:flex;align-items:center;cursor:pointer}'
109
+ + 'details.su-raw pre{white-space:pre-wrap;word-break:break-word;background:#1d1d1f;color:#f5f5f7;border-radius:12px;padding:12px;font-size:12px}'
110
+ + '@media(max-width:820px){.su-step{min-width:100%}.su-btn{width:100%}}'
111
+ + '</style>'
112
+ + '<div class="su-wrap">'
113
+ + '<div class="su-hero"><div class="su-eyebrow">开始使用</div>'
114
+ + '<p class="su-lead">先选文件看预告,确认后再真正导入。</p></div>'
115
+ + '<section class="su-sec" data-block="fields">'
116
+ + '<h2 data-need="四步(选择文件/校验结果/冲突预览/确认导入)">四个步骤</h2>'
117
+ + '<div class="su-steps" data-need="done" data-extra="current">' + steps + '</div>'
118
+ + '<h2 data-need="校验项">校验结果</h2>'
119
+ + '<div class="su-tablewrap"><table class="su-table">'
120
+ + '<tr><th>备份中物品</th><td>' + (nums.backup === '—' ? '—' : escapeHtml(nums.backup) + ' 件') + '</td></tr>'
121
+ + '<tr><th>当前库物品</th><td>' + (nums.current === '—' ? '—' : escapeHtml(nums.current) + ' 件') + '</td></tr>'
122
+ + (isDone ? '<tr><th>导入后物品</th><td>' + (nums.after === '—' ? '—' : escapeHtml(nums.after) + ' 件') + '</td></tr>' : '')
123
+ + (safety !== '' ? '<tr><th>恢复前备份</th><td>' + escapeHtml(safety) + '</td></tr>' : '')
124
+ + '</table></div>'
125
+ + '<h2 data-need="冲突名单">冲突处理</h2>'
126
+ + '<div class="su-tablewrap" data-need="冲突处理下拉"><table class="su-table">'
127
+ + '<tr><th>处理模式</th><th>这一档怎么处理</th></tr>'
128
+ + '<tr><td data-need="跳过同名">跳过同名</td><td>整库覆盖</td></tr>'
129
+ + '<tr><td data-need="覆盖同名">覆盖同名</td><td>整库覆盖</td></tr>'
130
+ + '</table></div>'
131
+ + '<p class="su-note">恢复不逐条比对同名;兜底是恢复前自动留的那份备份。</p>'
132
+ + '<p class="su-note" hidden data-need="冲突超10条折叠">只看前十条,其余只报总数。</p>'
133
+ + '<h2 data-need="导入结果">导入结果</h2>'
134
+ + (isDone
135
+ ? '<p>导入完成,当前库已经是备份里的样子。想反悔就用恢复前那份自动备份恢复回去。</p>'
136
+ : isPreview
137
+ ? '<p>预告通过,数字对得上就可以确认导入,确认前库里的数据原样不动。</p>'
138
+ : '<p>还没有选择文件,先走预告看看这份备份里有多少东西,再决定导不导入。</p>')
139
+ + '</section>'
140
+ + '<section class="su-sec" data-block="operations">'
141
+ + '<h2>可以做的操作</h2>'
142
+ + '<div class="su-actions">'
143
+ + '<button class="su-btn" data-need="选择文件" data-t="我马上发一份备份文件,请进入等待状态">选择文件</button>'
144
+ // #817(④触控够大·主次可辨):「确认导入」是整库覆盖的破坏性一步,不再与主操作「选择文件」同为实心蓝,
145
+ // 降 ghost;「撤销导入」「知道了」原本就是 ghost,不动。载荷 data-t 与块登记的 data-need 一字不动。
146
+ + '<button class="su-btn ghost" data-need="确认导入" data-t="请确认导入,恢复前请先自动备份">确认导入</button>'
147
+ + '<button class="su-btn ghost" data-need="撤销导入" data-t="请用恢复前备份恢复,撤销上次导入">撤销导入</button>'
148
+ + '<button class="su-btn ghost" data-need="知道了" id="suKnow">知道了</button>'
149
+ + '</div>'
150
+ + '<span data-need="复制数据" hidden></span>'
151
+ + '<span data-need="复制日志" hidden></span>'
152
+ + homeCopyArea({
153
+ data: { envelope: env },
154
+ log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
155
+ })
156
+ + '</section>'
157
+ + '<section class="su-sec" data-block="empty">'
158
+ + '<h2>这种时候会怎样</h2>'
159
+ + '<p data-need="承诺语:导入前自动备份+失败回滚">导入前会自动备份现有数据,万一失败会自动回滚,现有数据不会丢。</p>'
160
+ + '<p data-need="异常:数据解析失败/数据校验失败/导入失败">如果提示解析失败、校验失败或者导入失败,先确认发过去的是备份文件,再走一次预告。</p>'
161
+ + '</section>'
162
+ + '<section class="su-sec" data-block="status">'
163
+ + '<h2>状态说明</h2>'
164
+ + '<p>步骤状态分三种:已完成,进行中,待办。当前走到哪一步,卡片上看得出来。</p>'
165
+ + '</section>'
166
+ + '<details hidden class="su-raw"><summary>原始回执</summary><pre>'
167
+ + escapeHtml(JSON.stringify(env.data)) + '</pre></details>'
168
+ + '</div>'
169
+ + '<div class="su-toast" id="suToast" role="status"></div>'
170
+ + '<script>'
171
+ + 'function suToast(t){var el=document.getElementById("suToast");if(!el)return;el.textContent=t;el.classList.add("show");setTimeout(function(){el.classList.remove("show")},3500)}'
172
+ + 'function suCopy(text,ok){function fb(){try{var ta=document.createElement("textarea");ta.value=text;document.body.appendChild(ta);ta.select();var ok=false;try{ok=document.execCommand("copy")}catch(e){}document.body.removeChild(ta);return ok}catch(e){return false}}'
173
+ + 'if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(text).then(function(){suToast(ok)}).catch(function(){suToast(fb()?ok:"复制失败,请长按手动复制")})}else{suToast(fb()?ok:"复制失败,请长按手动复制")}}'
174
+ + 'document.querySelectorAll("[data-t]").forEach(function(b){b.addEventListener("click",function(){suCopy(b.getAttribute("data-t"),"指令已复制,发给助手即可执行")})});'
175
+ + 'var kd=document.getElementById("suKnow");if(kd)kd.addEventListener("click",function(){suToast("收到")});'
176
+ + '</script>';
177
+ return fillTemplate(template, content);
178
+ }
179
+ //# sourceMappingURL=import_restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import_restore.js","sourceRoot":"","sources":["../../../src/setup/pages/import_restore.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,2DAA2D;AAC3D,8DAA8D;AAC9D,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,gBAAyB,CAAC;AAEhD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,iBAAiB;IACtB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,EAAC,MAAM,EAAC,QAAQ,EAA4B;IACpD,SAAS,EAAE,CAAC,OAAO,CAAsB;CACjC,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE;QACP,UAAU;QACV,uBAAuB;QACvB,kBAAkB;KACnB;IACD,QAAQ,EAAE;QACR,yBAAyB;QACzB,KAAK;QACL,MAAM;QACN,MAAM;KACP;IACD,YAAY,EAAE;QACZ,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,MAAM;KACP;IACD,QAAQ,EAAE;QACR,MAAM;QACN,MAAM;QACN,MAAM;QACN,SAAS;KACV;CAMF,CAAC;AAEF,SAAS,KAAK,CAAC,GAAa;IAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,IAA+B,CAAC;IAC9C,OAAO,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IACzB,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACxC,OAAO;QACL,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,GAAG;QAClC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5D,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,GAAG;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;AACjC,CAAC;AAED,oEAAoE;AACpE,6GAA6G;AAC7G,MAAM,UAAU,gBAAgB,CAAC,GAAa,EAAE,GAA+D;IAC7G,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,8CAA8C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAChH,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE;QACtC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,IAAI,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE;QACtC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,oCAAoC;UACnE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;UACzD,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,SAAS;UACrB,0DAA0D;UAC1D,oIAAoI;UACpI,iGAAiG;UACjG,uDAAuD;UACvD,iGAAiG;UACjG,6DAA6D;UAC7D,wIAAwI;UACxI,4DAA4D;UAC5D,2EAA2E;UAC3E,gEAAgE;UAChE,8FAA8F;UAC9F,+CAA+C;UAC/C,+DAA+D;UAC/D,mIAAmI;UACnI,gEAAgE;UAChE,mEAAmE;UACnE,wJAAwJ;UACxJ,wGAAwG;UACxG,uIAAuI;UACvI,oOAAoO;UACpO,2BAA2B;UAC3B,4DAA4D;UAC5D,wFAAwF;UACxF,gJAAgJ;UAChJ,sEAAsE;UACtE,UAAU;UACV,uBAAuB;UACvB,yDAAyD;UACzD,gDAAgD;UAChD,8CAA8C;UAC9C,mDAAmD;UACnD,8DAA8D,GAAG,KAAK,GAAG,QAAQ;UACjF,+BAA+B;UAC/B,oDAAoD;UACpD,wBAAwB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,YAAY;UACtG,wBAAwB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,YAAY;UACxG,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;UACpH,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,wBAAwB,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;UACnF,gBAAgB;UAChB,gCAAgC;UAChC,uEAAuE;UACvE,wCAAwC;UACxC,sDAAsD;UACtD,sDAAsD;UACtD,gBAAgB;UAChB,kDAAkD;UAClD,kEAAkE;UAClE,gCAAgC;UAChC,CAAC,MAAM;YACP,CAAC,CAAC,8CAA8C;YAChD,CAAC,CAAC,SAAS;gBACT,CAAC,CAAC,wCAAwC;gBAC1C,CAAC,CAAC,0CAA0C,CAAC;UAC/C,YAAY;UACZ,kDAAkD;UAClD,iBAAiB;UACjB,0BAA0B;UAC1B,mFAAmF;QACrF,wDAAwD;QACxD,mEAAmE;UACjE,sFAAsF;UACtF,uFAAuF;UACvF,uEAAuE;UACvE,QAAQ;UACR,uCAAuC;UACvC,uCAAuC;UACvC,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;UACZ,6CAA6C;UAC7C,kBAAkB;UAClB,qEAAqE;UACrE,mFAAmF;UACnF,YAAY;UACZ,8CAA8C;UAC9C,eAAe;UACf,4CAA4C;UAC5C,YAAY;UACZ,6DAA6D;UAC7D,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,kBAAkB;UACzD,QAAQ;UACR,yDAAyD;UACzD,UAAU;UACV,iLAAiL;UACjL,yQAAyQ;UACzQ,oNAAoN;UACpN,wJAAwJ;UACxJ,wGAAwG;UACxG,WAAW,CAAC;IAChB,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { HomeRouteSpec } from '../shared/commandSpec.js';
2
+ export declare const SETUP_ROUTES: readonly HomeRouteSpec[];
3
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/setup/routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,eAAO,MAAM,YAAY,EAAE,SAAS,aAAa,EAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const SETUP_ROUTES = [];
2
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/setup/routes.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,YAAY,GAA6B,EAAE,CAAC"}