paseo-req-kit 1.12.1 → 1.13.0-beta.2

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 (237) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +8 -3
  3. package/bin/bootstrap.d.mts +13 -0
  4. package/bin/bootstrap.mjs +444 -0
  5. package/bin/req-docs.d.mts +5 -0
  6. package/bin/req-docs.mjs +169 -0
  7. package/bin/req.mjs +21 -1
  8. package/contracts/cli-json.md +2 -0
  9. package/docs/adr/0032-npm-only-install.md +27 -0
  10. package/docs/adr/0033-prototype-review-and-ui-check.md +28 -0
  11. package/docs/adr/README.md +2 -0
  12. package/docs/guide//344/275/277/347/224/250/350/200/205/346/214/207/345/215/227.md +8 -0
  13. package/docs/guide//345/256/211/350/243/205/344/270/216/345/215/207/347/272/247.md +22 -2
  14. package/docs/guide//347/273/264/346/212/244/350/200/205/346/214/207/345/215/227.md +1 -1
  15. package/docs/guide//351/241/271/347/233/256/345/256/232/345/210/266/344/270/216/350/277/220/350/241/214/350/247/204/345/210/231.md +7 -1
  16. package/engine/prompts/03-design.md +5 -1
  17. package/engine/prompts/04b-design-revise.md +1 -1
  18. package/engine/prompts/browser-verify.md +2 -2
  19. package/engine/prompts/ui-check.md +15 -0
  20. package/engine/src/api.ts +17 -2
  21. package/engine/src/config-view.ts +1 -1
  22. package/engine/src/pipeline.ts +15 -7
  23. package/engine/src/review-assets/app.css +420 -0
  24. package/engine/src/review-assets/app.html +95 -0
  25. package/engine/src/review-assets/app.js +954 -0
  26. package/engine/src/review.ts +570 -0
  27. package/engine/src/ui-check-page.js +208 -0
  28. package/engine/src/ui-check.ts +366 -0
  29. package/package.json +3 -1
  30. package/paseo-plugin/client/data.ts +12 -1
  31. package/paseo-plugin/client/detail.tsx +3 -0
  32. package/paseo-plugin/client/inbox.tsx +2 -0
  33. package/paseo-plugin/client/review-link.tsx +29 -0
  34. package/paseo-plugin/index.server.ts +2 -1
  35. package/paseo-plugin/package.json +1 -1
  36. package/paseo-plugin/server/handlers.ts +7 -1
  37. package/paseo-plugin/shared/contracts.ts +9 -0
  38. package/site-dist/404.html +27 -0
  39. package/site-dist/assets/app.DWPPPhFm.js +1 -0
  40. package/site-dist/assets/changelog.md.CoelFFCL.js +1 -0
  41. package/site-dist/assets/changelog.md.CoelFFCL.lean.js +1 -0
  42. package/site-dist/assets/chunks/@localSearchIndexroot.Hdq0-4L3.js +1 -0
  43. package/site-dist/assets/chunks/VPLocalSearchBox.D3_9dRGY.js +9 -0
  44. package/site-dist/assets/chunks/framework.B9qR_F1m.js +20 -0
  45. package/site-dist/assets/chunks/theme.Bm8aLiLN.js +2 -0
  46. package/site-dist/assets/guide_getting-started.md.B4GJeoPz.js +6 -0
  47. package/site-dist/assets/guide_getting-started.md.B4GJeoPz.lean.js +1 -0
  48. package/site-dist/assets/guide_how-it-works.md.D-kQsF1t.js +25 -0
  49. package/site-dist/assets/guide_how-it-works.md.D-kQsF1t.lean.js +1 -0
  50. package/site-dist/assets/guide_index.md.CLnGCmGW.js +1 -0
  51. package/site-dist/assets/guide_index.md.CLnGCmGW.lean.js +1 -0
  52. package/site-dist/assets/guide_install.md.DkCyZsOU.js +42 -0
  53. package/site-dist/assets/guide_install.md.DkCyZsOU.lean.js +42 -0
  54. package/site-dist/assets/guide_maintainer.md.RZIzyCTV.js +1 -0
  55. package/site-dist/assets/guide_maintainer.md.RZIzyCTV.lean.js +1 -0
  56. package/site-dist/assets/guide_phases.md.BpGAb1re.js +1 -0
  57. package/site-dist/assets/guide_phases.md.BpGAb1re.lean.js +1 -0
  58. package/site-dist/assets/guide_project.md.nGlTCo4D.js +77 -0
  59. package/site-dist/assets/guide_project.md.nGlTCo4D.lean.js +77 -0
  60. package/site-dist/assets/guide_user.md.tiHFxIsQ.js +1 -0
  61. package/site-dist/assets/guide_user.md.tiHFxIsQ.lean.js +1 -0
  62. package/site-dist/assets/index.md.Cf_sSf_f.js +1 -0
  63. package/site-dist/assets/index.md.Cf_sSf_f.lean.js +1 -0
  64. package/site-dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  65. package/site-dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  66. package/site-dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  67. package/site-dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  68. package/site-dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  69. package/site-dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  70. package/site-dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  71. package/site-dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  72. package/site-dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  73. package/site-dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  74. package/site-dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  75. package/site-dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  76. package/site-dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  77. package/site-dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  78. package/site-dist/assets/reference_adr_0001-step-agents-under-origin-chat.md.RtRTq7oi.js +1 -0
  79. package/site-dist/assets/reference_adr_0001-step-agents-under-origin-chat.md.RtRTq7oi.lean.js +1 -0
  80. package/site-dist/assets/reference_adr_0002-no-directory-switch-in-chat.md.BxtN-Aa2.js +1 -0
  81. package/site-dist/assets/reference_adr_0002-no-directory-switch-in-chat.md.BxtN-Aa2.lean.js +1 -0
  82. package/site-dist/assets/reference_adr_0003-script-engine-not-hub.md.66EgZtqx.js +1 -0
  83. package/site-dist/assets/reference_adr_0003-script-engine-not-hub.md.66EgZtqx.lean.js +1 -0
  84. package/site-dist/assets/reference_adr_0004-result-files.md.DbqcCozI.js +1 -0
  85. package/site-dist/assets/reference_adr_0004-result-files.md.DbqcCozI.lean.js +1 -0
  86. package/site-dist/assets/reference_adr_0005-no-default-branch-local-commits-only.md.CkImA4s6.js +1 -0
  87. package/site-dist/assets/reference_adr_0005-no-default-branch-local-commits-only.md.CkImA4s6.lean.js +1 -0
  88. package/site-dist/assets/reference_adr_0006-skill-install-targets.md.CwY8YepV.js +1 -0
  89. package/site-dist/assets/reference_adr_0006-skill-install-targets.md.CwY8YepV.lean.js +1 -0
  90. package/site-dist/assets/reference_adr_0007-own-interview-skill.md.CryhxRyG.js +1 -0
  91. package/site-dist/assets/reference_adr_0007-own-interview-skill.md.CryhxRyG.lean.js +1 -0
  92. package/site-dist/assets/reference_adr_0008-entries-do-not-call-entries.md.DsRWAgeA.js +1 -0
  93. package/site-dist/assets/reference_adr_0008-entries-do-not-call-entries.md.DsRWAgeA.lean.js +1 -0
  94. package/site-dist/assets/reference_adr_0009-versioned-install-layout.md.CSg1VqlW.js +1 -0
  95. package/site-dist/assets/reference_adr_0009-versioned-install-layout.md.CSg1VqlW.lean.js +1 -0
  96. package/site-dist/assets/reference_adr_0010-generated-feature-overview.md.D8F3MK-h.js +1 -0
  97. package/site-dist/assets/reference_adr_0010-generated-feature-overview.md.D8F3MK-h.lean.js +1 -0
  98. package/site-dist/assets/reference_adr_0011-resume-after-completion.md.BCrZrKjf.js +1 -0
  99. package/site-dist/assets/reference_adr_0011-resume-after-completion.md.BCrZrKjf.lean.js +1 -0
  100. package/site-dist/assets/reference_adr_0012-review-panel.md.k9rrHFFc.js +1 -0
  101. package/site-dist/assets/reference_adr_0012-review-panel.md.k9rrHFFc.lean.js +1 -0
  102. package/site-dist/assets/reference_adr_0013-no-release-tooling.md.BQeJ8dEI.js +1 -0
  103. package/site-dist/assets/reference_adr_0013-no-release-tooling.md.BQeJ8dEI.lean.js +1 -0
  104. package/site-dist/assets/reference_adr_0014-notifier-slot.md.C23QR1xO.js +1 -0
  105. package/site-dist/assets/reference_adr_0014-notifier-slot.md.C23QR1xO.lean.js +1 -0
  106. package/site-dist/assets/reference_adr_0015-incremental-continue.md.Buy7wwO8.js +1 -0
  107. package/site-dist/assets/reference_adr_0015-incremental-continue.md.Buy7wwO8.lean.js +1 -0
  108. package/site-dist/assets/reference_adr_0016-upgrade-from-tags.md.qfIW-tqJ.js +1 -0
  109. package/site-dist/assets/reference_adr_0016-upgrade-from-tags.md.qfIW-tqJ.lean.js +1 -0
  110. package/site-dist/assets/reference_adr_0017-use-paseo-capabilities.md.CjcGli87.js +1 -0
  111. package/site-dist/assets/reference_adr_0017-use-paseo-capabilities.md.CjcGli87.lean.js +1 -0
  112. package/site-dist/assets/reference_adr_0018-own-worktree-option.md.fVDpgGSE.js +1 -0
  113. package/site-dist/assets/reference_adr_0018-own-worktree-option.md.fVDpgGSE.lean.js +1 -0
  114. package/site-dist/assets/reference_adr_0019-parallel-orchestration.md.DrfrV0To.js +1 -0
  115. package/site-dist/assets/reference_adr_0019-parallel-orchestration.md.DrfrV0To.lean.js +1 -0
  116. package/site-dist/assets/reference_adr_0020-scheduling-through-the-chat.md.BqSemGFG.js +1 -0
  117. package/site-dist/assets/reference_adr_0020-scheduling-through-the-chat.md.BqSemGFG.lean.js +1 -0
  118. package/site-dist/assets/reference_adr_0021-npm-version-manager.md.CU3PG6y5.js +1 -0
  119. package/site-dist/assets/reference_adr_0021-npm-version-manager.md.CU3PG6y5.lean.js +1 -0
  120. package/site-dist/assets/reference_adr_0022-develop-and-verify-phases.md.C6fQDLq4.js +1 -0
  121. package/site-dist/assets/reference_adr_0022-develop-and-verify-phases.md.C6fQDLq4.lean.js +1 -0
  122. package/site-dist/assets/reference_adr_0023-types-gate-slices.md.D2E6yyYQ.js +1 -0
  123. package/site-dist/assets/reference_adr_0023-types-gate-slices.md.D2E6yyYQ.lean.js +1 -0
  124. package/site-dist/assets/reference_adr_0024-confirm-early-review-axes.md.FmK_ke0x.js +1 -0
  125. package/site-dist/assets/reference_adr_0024-confirm-early-review-axes.md.FmK_ke0x.lean.js +1 -0
  126. package/site-dist/assets/reference_adr_0025-joint-requirements.md.ChoKvMUx.js +1 -0
  127. package/site-dist/assets/reference_adr_0025-joint-requirements.md.ChoKvMUx.lean.js +1 -0
  128. package/site-dist/assets/reference_adr_0026-machine-records-and-api.md.veybjBPq.js +1 -0
  129. package/site-dist/assets/reference_adr_0026-machine-records-and-api.md.veybjBPq.lean.js +1 -0
  130. package/site-dist/assets/reference_adr_0027-paseo-plugin.md.BMX33ZNU.js +1 -0
  131. package/site-dist/assets/reference_adr_0027-paseo-plugin.md.BMX33ZNU.lean.js +1 -0
  132. package/site-dist/assets/reference_adr_0028-external-integrations.md.DtdMe8RK.js +1 -0
  133. package/site-dist/assets/reference_adr_0028-external-integrations.md.DtdMe8RK.lean.js +1 -0
  134. package/site-dist/assets/reference_adr_0029-requirements-from-cards.md.BHd1SQPe.js +1 -0
  135. package/site-dist/assets/reference_adr_0029-requirements-from-cards.md.BHd1SQPe.lean.js +1 -0
  136. package/site-dist/assets/reference_adr_0030-card-intake-process.md.kLc-DG9_.js +1 -0
  137. package/site-dist/assets/reference_adr_0030-card-intake-process.md.kLc-DG9_.lean.js +1 -0
  138. package/site-dist/assets/reference_adr_0031-fewer-interventions.md.BDnQcz8g.js +1 -0
  139. package/site-dist/assets/reference_adr_0031-fewer-interventions.md.BDnQcz8g.lean.js +1 -0
  140. package/site-dist/assets/reference_adr_0032-npm-only-install.md.C-3L1FkX.js +1 -0
  141. package/site-dist/assets/reference_adr_0032-npm-only-install.md.C-3L1FkX.lean.js +1 -0
  142. package/site-dist/assets/reference_adr_0033-prototype-review-and-ui-check.md.hFcQzmaa.js +1 -0
  143. package/site-dist/assets/reference_adr_0033-prototype-review-and-ui-check.md.hFcQzmaa.lean.js +1 -0
  144. package/site-dist/assets/reference_adr_index.md.BYF-Ofor.js +1 -0
  145. package/site-dist/assets/reference_adr_index.md.BYF-Ofor.lean.js +1 -0
  146. package/site-dist/assets/reference_commands.md.ClKbS-t8.js +1 -0
  147. package/site-dist/assets/reference_commands.md.ClKbS-t8.lean.js +1 -0
  148. package/site-dist/assets/reference_config.md.CRe27LaA.js +6 -0
  149. package/site-dist/assets/reference_config.md.CRe27LaA.lean.js +1 -0
  150. package/site-dist/assets/reference_contracts_cli-json.md.N-v2HNUd.js +1 -0
  151. package/site-dist/assets/reference_contracts_cli-json.md.N-v2HNUd.lean.js +1 -0
  152. package/site-dist/assets/reference_contracts_feature-files.md.DSiA8OEH.js +26 -0
  153. package/site-dist/assets/reference_contracts_feature-files.md.DSiA8OEH.lean.js +26 -0
  154. package/site-dist/assets/reference_contracts_index.md.Bkznz4px.js +1 -0
  155. package/site-dist/assets/reference_contracts_index.md.Bkznz4px.lean.js +1 -0
  156. package/site-dist/assets/reference_contracts_notifier-event.md.CCfrkm_A.js +24 -0
  157. package/site-dist/assets/reference_contracts_notifier-event.md.CCfrkm_A.lean.js +24 -0
  158. package/site-dist/assets/reference_contracts_result-file.md.DmR4fjB-.js +1 -0
  159. package/site-dist/assets/reference_contracts_result-file.md.DmR4fjB-.lean.js +1 -0
  160. package/site-dist/assets/reference_contracts_spec.md.BwwS0L_j.js +8 -0
  161. package/site-dist/assets/reference_contracts_spec.md.BwwS0L_j.lean.js +8 -0
  162. package/site-dist/assets/reference_contracts_state.md.5bNTC3ow.js +1 -0
  163. package/site-dist/assets/reference_contracts_state.md.5bNTC3ow.lean.js +1 -0
  164. package/site-dist/assets/reference_contracts_usage-record.md._C0OXWeq.js +10 -0
  165. package/site-dist/assets/reference_contracts_usage-record.md._C0OXWeq.lean.js +10 -0
  166. package/site-dist/assets/reference_contracts_verify.md.CbA88u6S.js +29 -0
  167. package/site-dist/assets/reference_contracts_verify.md.CbA88u6S.lean.js +29 -0
  168. package/site-dist/assets/reference_scope.md.Kzqw8U_f.js +1 -0
  169. package/site-dist/assets/reference_scope.md.Kzqw8U_f.lean.js +1 -0
  170. package/site-dist/assets/style.Dwsa4SMe.css +1 -0
  171. package/site-dist/changelog.html +30 -0
  172. package/site-dist/guide/getting-started.html +35 -0
  173. package/site-dist/guide/how-it-works.html +54 -0
  174. package/site-dist/guide/index.html +30 -0
  175. package/site-dist/guide/install.html +71 -0
  176. package/site-dist/guide/maintainer.html +30 -0
  177. package/site-dist/guide/phases.html +30 -0
  178. package/site-dist/guide/project.html +106 -0
  179. package/site-dist/guide/user.html +30 -0
  180. package/site-dist/hashmap.json +1 -0
  181. package/site-dist/icons/agents.svg +1 -0
  182. package/site-dist/icons/chat.svg +1 -0
  183. package/site-dist/icons/paseo.svg +1 -0
  184. package/site-dist/icons/phases.svg +1 -0
  185. package/site-dist/icons/review.svg +1 -0
  186. package/site-dist/icons/safe.svg +1 -0
  187. package/site-dist/index.html +30 -0
  188. package/site-dist/install.ps1 +118 -0
  189. package/site-dist/install.sh +198 -0
  190. package/site-dist/logo.svg +11 -0
  191. package/site-dist/reference/adr/0001-step-agents-under-origin-chat.html +30 -0
  192. package/site-dist/reference/adr/0002-no-directory-switch-in-chat.html +30 -0
  193. package/site-dist/reference/adr/0003-script-engine-not-hub.html +30 -0
  194. package/site-dist/reference/adr/0004-result-files.html +30 -0
  195. package/site-dist/reference/adr/0005-no-default-branch-local-commits-only.html +30 -0
  196. package/site-dist/reference/adr/0006-skill-install-targets.html +30 -0
  197. package/site-dist/reference/adr/0007-own-interview-skill.html +30 -0
  198. package/site-dist/reference/adr/0008-entries-do-not-call-entries.html +30 -0
  199. package/site-dist/reference/adr/0009-versioned-install-layout.html +30 -0
  200. package/site-dist/reference/adr/0010-generated-feature-overview.html +30 -0
  201. package/site-dist/reference/adr/0011-resume-after-completion.html +30 -0
  202. package/site-dist/reference/adr/0012-review-panel.html +30 -0
  203. package/site-dist/reference/adr/0013-no-release-tooling.html +30 -0
  204. package/site-dist/reference/adr/0014-notifier-slot.html +30 -0
  205. package/site-dist/reference/adr/0015-incremental-continue.html +30 -0
  206. package/site-dist/reference/adr/0016-upgrade-from-tags.html +30 -0
  207. package/site-dist/reference/adr/0017-use-paseo-capabilities.html +30 -0
  208. package/site-dist/reference/adr/0018-own-worktree-option.html +30 -0
  209. package/site-dist/reference/adr/0019-parallel-orchestration.html +30 -0
  210. package/site-dist/reference/adr/0020-scheduling-through-the-chat.html +30 -0
  211. package/site-dist/reference/adr/0021-npm-version-manager.html +30 -0
  212. package/site-dist/reference/adr/0022-develop-and-verify-phases.html +30 -0
  213. package/site-dist/reference/adr/0023-types-gate-slices.html +30 -0
  214. package/site-dist/reference/adr/0024-confirm-early-review-axes.html +30 -0
  215. package/site-dist/reference/adr/0025-joint-requirements.html +30 -0
  216. package/site-dist/reference/adr/0026-machine-records-and-api.html +30 -0
  217. package/site-dist/reference/adr/0027-paseo-plugin.html +30 -0
  218. package/site-dist/reference/adr/0028-external-integrations.html +30 -0
  219. package/site-dist/reference/adr/0029-requirements-from-cards.html +30 -0
  220. package/site-dist/reference/adr/0030-card-intake-process.html +30 -0
  221. package/site-dist/reference/adr/0031-fewer-interventions.html +30 -0
  222. package/site-dist/reference/adr/0032-npm-only-install.html +30 -0
  223. package/site-dist/reference/adr/0033-prototype-review-and-ui-check.html +30 -0
  224. package/site-dist/reference/adr/index.html +30 -0
  225. package/site-dist/reference/commands.html +30 -0
  226. package/site-dist/reference/config.html +35 -0
  227. package/site-dist/reference/contracts/cli-json.html +30 -0
  228. package/site-dist/reference/contracts/feature-files.html +55 -0
  229. package/site-dist/reference/contracts/index.html +30 -0
  230. package/site-dist/reference/contracts/notifier-event.html +53 -0
  231. package/site-dist/reference/contracts/result-file.html +30 -0
  232. package/site-dist/reference/contracts/spec.html +37 -0
  233. package/site-dist/reference/contracts/state.html +30 -0
  234. package/site-dist/reference/contracts/usage-record.html +39 -0
  235. package/site-dist/reference/contracts/verify.html +58 -0
  236. package/site-dist/reference/scope.html +30 -0
  237. package/site-dist/vp-icons.css +1 -0
@@ -0,0 +1,420 @@
1
+ :root {
2
+ --bg: #f6f7f9;
3
+ --surface: #ffffff;
4
+ --surface-2: #f1f3f6;
5
+ --text: #1c2430;
6
+ --muted: #5d6b7c;
7
+ --border: #dfe3e9;
8
+ --accent: #2457d6;
9
+ --accent-text: #ffffff;
10
+ --accent-soft: #e8eefc;
11
+ --region: #d97706;
12
+ --pin: #e11d48;
13
+ --ok: #15803d;
14
+ --danger: #b91c1c;
15
+ --shadow: 0 8px 28px rgba(20, 30, 50, 0.16);
16
+ color-scheme: light;
17
+ }
18
+ @media (prefers-color-scheme: dark) {
19
+ :root {
20
+ --bg: #12161c;
21
+ --surface: #1a2029;
22
+ --surface-2: #222a35;
23
+ --text: #e6eaf0;
24
+ --muted: #9aa7b8;
25
+ --border: #2e3846;
26
+ --accent: #6f9bff;
27
+ --accent-text: #0d1420;
28
+ --accent-soft: #1f2c47;
29
+ --region: #f59e0b;
30
+ --pin: #fb7185;
31
+ --ok: #4ade80;
32
+ --danger: #f87171;
33
+ --shadow: 0 8px 28px rgba(0, 0, 0, 0.5);
34
+ color-scheme: dark;
35
+ }
36
+ }
37
+ * {
38
+ box-sizing: border-box;
39
+ }
40
+ [hidden] {
41
+ display: none !important;
42
+ }
43
+ html,
44
+ body {
45
+ margin: 0;
46
+ background: var(--bg);
47
+ color: var(--text);
48
+ font: 14px/1.55 system-ui, -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
49
+ }
50
+ button,
51
+ input,
52
+ textarea {
53
+ font: inherit;
54
+ color: inherit;
55
+ }
56
+ .top {
57
+ position: sticky;
58
+ top: 0;
59
+ z-index: 10;
60
+ background: var(--surface);
61
+ border-bottom: 1px solid var(--border);
62
+ padding: 12px 20px;
63
+ display: flex;
64
+ flex-wrap: wrap;
65
+ gap: 10px 24px;
66
+ align-items: center;
67
+ justify-content: space-between;
68
+ }
69
+ .heading {
70
+ display: flex;
71
+ align-items: baseline;
72
+ gap: 10px;
73
+ min-width: 0;
74
+ }
75
+ .eyebrow {
76
+ font-size: 12px;
77
+ font-weight: 600;
78
+ color: var(--accent);
79
+ white-space: nowrap;
80
+ }
81
+ h1 {
82
+ font-size: 17px;
83
+ margin: 0;
84
+ overflow: hidden;
85
+ text-overflow: ellipsis;
86
+ white-space: nowrap;
87
+ }
88
+ .pill {
89
+ font-size: 12px;
90
+ padding: 2px 10px;
91
+ border-radius: 999px;
92
+ background: var(--surface-2);
93
+ color: var(--muted);
94
+ white-space: nowrap;
95
+ }
96
+ .pill.wait {
97
+ background: var(--accent-soft);
98
+ color: var(--accent);
99
+ font-weight: 600;
100
+ }
101
+ .controls {
102
+ display: flex;
103
+ flex-wrap: wrap;
104
+ gap: 8px 16px;
105
+ align-items: center;
106
+ }
107
+ .group {
108
+ display: flex;
109
+ align-items: center;
110
+ gap: 6px;
111
+ }
112
+ .label {
113
+ color: var(--muted);
114
+ font-size: 12px;
115
+ }
116
+ .seg {
117
+ display: inline-flex;
118
+ border: 1px solid var(--border);
119
+ border-radius: 8px;
120
+ overflow: hidden;
121
+ flex-wrap: wrap;
122
+ }
123
+ .seg button {
124
+ border: 0;
125
+ background: transparent;
126
+ padding: 5px 11px;
127
+ cursor: pointer;
128
+ font-size: 13px;
129
+ }
130
+ .seg button + button {
131
+ border-left: 1px solid var(--border);
132
+ }
133
+ .seg button[aria-pressed="true"] {
134
+ background: var(--accent);
135
+ color: var(--accent-text);
136
+ }
137
+ .seg button:focus-visible,
138
+ .chips button:focus-visible,
139
+ .list button:focus-visible,
140
+ .actions button:focus-visible,
141
+ .pop button:focus-visible {
142
+ outline: 2px solid var(--accent);
143
+ outline-offset: 2px;
144
+ }
145
+ .check {
146
+ display: inline-flex;
147
+ gap: 6px;
148
+ align-items: center;
149
+ font-size: 13px;
150
+ cursor: pointer;
151
+ }
152
+ .layout {
153
+ display: grid;
154
+ grid-template-columns: minmax(0, 1fr) 360px;
155
+ gap: 16px;
156
+ padding: 16px 20px 32px;
157
+ align-items: start;
158
+ }
159
+ @media (max-width: 1000px) {
160
+ .layout {
161
+ grid-template-columns: 1fr;
162
+ }
163
+ }
164
+ .stage {
165
+ min-width: 0;
166
+ }
167
+ .hint {
168
+ margin: 0 0 8px;
169
+ color: var(--muted);
170
+ font-size: 13px;
171
+ }
172
+ .frame-wrap {
173
+ overflow: auto;
174
+ background: repeating-conic-gradient(var(--surface-2) 0% 25%, transparent 0% 50%) 50% / 16px 16px;
175
+ border: 1px solid var(--border);
176
+ border-radius: 10px;
177
+ padding: 12px;
178
+ max-height: calc(100vh - 150px);
179
+ }
180
+ .sizer {
181
+ position: relative;
182
+ margin: 0 auto;
183
+ overflow: hidden;
184
+ box-shadow: var(--shadow);
185
+ border-radius: 4px;
186
+ background: #fff;
187
+ }
188
+ iframe {
189
+ position: absolute;
190
+ left: 0;
191
+ top: 0;
192
+ display: block;
193
+ border: 0;
194
+ background: #fff;
195
+ transform-origin: 0 0;
196
+ }
197
+ .empty {
198
+ padding: 40px;
199
+ text-align: center;
200
+ color: var(--muted);
201
+ background: var(--surface);
202
+ border: 1px dashed var(--border);
203
+ border-radius: 10px;
204
+ }
205
+ .side {
206
+ display: flex;
207
+ flex-direction: column;
208
+ gap: 12px;
209
+ position: sticky;
210
+ top: 80px;
211
+ max-height: calc(100vh - 96px);
212
+ overflow: auto;
213
+ }
214
+ .card {
215
+ background: var(--surface);
216
+ border: 1px solid var(--border);
217
+ border-radius: 10px;
218
+ padding: 12px 14px;
219
+ }
220
+ .card h2,
221
+ .card summary {
222
+ font-size: 14px;
223
+ font-weight: 600;
224
+ margin: 0 0 8px;
225
+ }
226
+ .card summary {
227
+ cursor: pointer;
228
+ margin: 0;
229
+ }
230
+ details[open] summary {
231
+ margin-bottom: 6px;
232
+ }
233
+ .card ol {
234
+ margin: 0;
235
+ padding-left: 18px;
236
+ color: var(--muted);
237
+ }
238
+ .card ol li + li {
239
+ margin-top: 4px;
240
+ }
241
+ .count {
242
+ color: var(--muted);
243
+ font-weight: 400;
244
+ }
245
+ .list {
246
+ list-style: none;
247
+ margin: 0;
248
+ padding: 0;
249
+ display: flex;
250
+ flex-direction: column;
251
+ gap: 6px;
252
+ }
253
+ .list li {
254
+ border: 1px solid var(--border);
255
+ border-radius: 8px;
256
+ padding: 8px 10px;
257
+ background: var(--surface);
258
+ }
259
+ .list li.flash {
260
+ border-color: var(--accent);
261
+ background: var(--accent-soft);
262
+ }
263
+ .list .row {
264
+ display: flex;
265
+ gap: 8px;
266
+ align-items: flex-start;
267
+ }
268
+ .badge {
269
+ flex: none;
270
+ min-width: 22px;
271
+ height: 22px;
272
+ border-radius: 999px;
273
+ display: inline-flex;
274
+ align-items: center;
275
+ justify-content: center;
276
+ font-size: 12px;
277
+ font-weight: 700;
278
+ padding: 0 6px;
279
+ }
280
+ .badge.region {
281
+ background: var(--region);
282
+ color: #111;
283
+ }
284
+ .badge.pin {
285
+ background: var(--pin);
286
+ color: #fff;
287
+ }
288
+ .grow {
289
+ flex: 1;
290
+ min-width: 0;
291
+ }
292
+ .strong {
293
+ font-weight: 600;
294
+ }
295
+ .muted {
296
+ color: var(--muted);
297
+ }
298
+ .small {
299
+ font-size: 12px;
300
+ }
301
+ .linkish {
302
+ border: 0;
303
+ background: none;
304
+ color: var(--accent);
305
+ cursor: pointer;
306
+ padding: 0 2px;
307
+ font-size: 12px;
308
+ }
309
+ .linkish.danger {
310
+ color: var(--danger);
311
+ }
312
+ .field {
313
+ display: flex;
314
+ flex-direction: column;
315
+ gap: 4px;
316
+ margin-top: 8px;
317
+ }
318
+ .field span {
319
+ font-size: 12px;
320
+ color: var(--muted);
321
+ }
322
+ .field input,
323
+ .field textarea {
324
+ width: 100%;
325
+ border: 1px solid var(--border);
326
+ border-radius: 8px;
327
+ padding: 7px 9px;
328
+ background: var(--surface);
329
+ resize: vertical;
330
+ }
331
+ .field input:focus,
332
+ .field textarea:focus {
333
+ outline: 2px solid var(--accent);
334
+ outline-offset: 0;
335
+ border-color: transparent;
336
+ }
337
+ .actions {
338
+ display: flex;
339
+ flex-direction: column;
340
+ gap: 8px;
341
+ }
342
+ .actions p {
343
+ margin: 0;
344
+ }
345
+ button.primary,
346
+ button.secondary {
347
+ border-radius: 8px;
348
+ padding: 9px 14px;
349
+ cursor: pointer;
350
+ font-weight: 600;
351
+ }
352
+ button.primary {
353
+ background: var(--accent);
354
+ color: var(--accent-text);
355
+ border: 1px solid var(--accent);
356
+ }
357
+ button.secondary {
358
+ background: var(--surface);
359
+ border: 1px solid var(--border);
360
+ }
361
+ button:disabled {
362
+ opacity: 0.45;
363
+ cursor: not-allowed;
364
+ }
365
+ .result.ok {
366
+ color: var(--ok);
367
+ }
368
+ .result.err {
369
+ color: var(--danger);
370
+ }
371
+ .pop {
372
+ position: fixed;
373
+ z-index: 50;
374
+ width: 340px;
375
+ max-width: calc(100vw - 24px);
376
+ background: var(--surface);
377
+ border: 1px solid var(--border);
378
+ border-radius: 12px;
379
+ box-shadow: var(--shadow);
380
+ padding: 12px 14px;
381
+ }
382
+ .pop-title {
383
+ margin: 0;
384
+ font-weight: 600;
385
+ }
386
+ .pop-sub {
387
+ margin: 2px 0 8px;
388
+ font-size: 12px;
389
+ color: var(--muted);
390
+ }
391
+ .chips {
392
+ display: flex;
393
+ flex-wrap: wrap;
394
+ gap: 6px;
395
+ }
396
+ .chips button {
397
+ border: 1px solid var(--border);
398
+ background: var(--surface);
399
+ border-radius: 999px;
400
+ padding: 4px 11px;
401
+ cursor: pointer;
402
+ font-size: 13px;
403
+ }
404
+ .chips button[aria-checked="true"] {
405
+ background: var(--accent);
406
+ border-color: var(--accent);
407
+ color: var(--accent-text);
408
+ }
409
+ .pop-actions {
410
+ display: flex;
411
+ justify-content: flex-end;
412
+ gap: 8px;
413
+ margin-top: 10px;
414
+ }
415
+ .diff-list {
416
+ margin: 6px 0 0;
417
+ padding-left: 18px;
418
+ color: var(--muted);
419
+ font-size: 13px;
420
+ }
@@ -0,0 +1,95 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>原型审查 · req-kit</title>
7
+ <link rel="stylesheet" href="app.css" />
8
+ </head>
9
+ <body>
10
+ <header class="top">
11
+ <div class="heading">
12
+ <span class="eyebrow">原型审查</span>
13
+ <h1 id="title">正在打开…</h1>
14
+ <span id="status" class="pill" hidden></span>
15
+ </div>
16
+ <div class="controls">
17
+ <div class="group" id="filesGroup" hidden><span class="label">页面</span><div class="seg" id="files"></div></div>
18
+ <div class="group" id="statesGroup" hidden><span class="label">状态</span><div class="seg" id="states"></div></div>
19
+ <div class="group"><span class="label">宽度</span><div class="seg" id="widths"></div></div>
20
+ <div class="group"><span class="label">操作</span><div class="seg" id="modes"></div></div>
21
+ <label class="check"><input type="checkbox" id="showRegions" checked /> 标出要看的地方</label>
22
+ <label class="check" id="diffWrap" hidden><input type="checkbox" id="showDiff" /> 标出这一版改了哪里</label>
23
+ </div>
24
+ </header>
25
+
26
+ <main class="layout">
27
+ <section class="stage" aria-label="原型">
28
+ <p class="hint" id="hint"></p>
29
+ <div class="frame-wrap" id="frameWrap">
30
+ <div class="sizer" id="sizer"><iframe id="frame" title="界面原型"></iframe></div>
31
+ </div>
32
+ <p class="empty" id="empty" hidden></p>
33
+ </section>
34
+
35
+ <aside class="side">
36
+ <details class="card" id="guide" open>
37
+ <summary>怎么用</summary>
38
+ <ol>
39
+ <li>先看标出来的地方(①②③),它们是这次要改的,右边有对应的验收标准。</li>
40
+ <li>想改哪里,就<strong>点哪里</strong>:选一种改法,再用自己的话补一句,不用专业词汇。</li>
41
+ <li>想换文字,<strong>双击文字</strong>直接改成你想要的字。</li>
42
+ <li>都看完了,在最下面提交修改意见;没有要改的,就同意开始写代码。</li>
43
+ </ol>
44
+ </details>
45
+
46
+ <section class="card">
47
+ <h2>要看的地方</h2>
48
+ <ul class="list" id="regions"></ul>
49
+ </section>
50
+
51
+ <section class="card" id="changesCard" hidden>
52
+ <h2>这一版的变化</h2>
53
+ <div id="changes"></div>
54
+ </section>
55
+
56
+ <section class="card">
57
+ <h2>我的意见 <span class="count" id="count"></span></h2>
58
+ <ul class="list" id="comments"></ul>
59
+ <label class="field">
60
+ <span>总体意见(可以不写)</span>
61
+ <textarea id="general" rows="3" placeholder="例如:整体颜色太暗了,参考现在的订单列表页"></textarea>
62
+ </label>
63
+ <p class="muted small" id="saved"></p>
64
+ </section>
65
+
66
+ <section class="card actions" id="actions">
67
+ <p class="muted" id="actionNote"></p>
68
+ <button type="button" class="primary" id="submitChanges">提交修改意见</button>
69
+ <button type="button" class="secondary" id="approve">没有要改的,同意开始写代码</button>
70
+ <p id="result" class="result" role="status" aria-live="polite"></p>
71
+ </section>
72
+ </aside>
73
+ </main>
74
+
75
+ <div class="pop" id="pop" role="dialog" aria-modal="false" aria-labelledby="popTitle" hidden>
76
+ <p class="pop-title" id="popTitle"></p>
77
+ <p class="pop-sub" id="popSub"></p>
78
+ <div class="chips" id="kinds" role="radiogroup" aria-label="怎么改"></div>
79
+ <label class="field" id="newTextField" hidden>
80
+ <span id="newTextLabel">改成</span>
81
+ <input type="text" id="newText" />
82
+ </label>
83
+ <label class="field">
84
+ <span id="noteLabel">用你自己的话说说(可以不写)</span>
85
+ <textarea id="note" rows="2"></textarea>
86
+ </label>
87
+ <div class="pop-actions">
88
+ <button type="button" class="secondary" id="popCancel">取消</button>
89
+ <button type="button" class="primary" id="popOk">添加</button>
90
+ </div>
91
+ </div>
92
+
93
+ <script src="app.js"></script>
94
+ </body>
95
+ </html>