@xiaobuyu/nodesign 0.0.6 → 0.0.8

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 (383) hide show
  1. package/README.md +266 -79
  2. package/README.zh-CN.md +254 -67
  3. package/package.json +2 -2
  4. package/server/api/admin.js +7 -0
  5. package/server/api/assets/docx-page.js +5 -4
  6. package/server/api/assets/helpers.js +26 -0
  7. package/server/api/assets/notes.js +50 -0
  8. package/server/api/assets.js +31 -38
  9. package/server/api/board.js +29 -1
  10. package/server/api/browse.js +3 -2
  11. package/server/api/chatai.js +9 -8
  12. package/server/api/exports/cards.js +7 -6
  13. package/server/api/exports/docx-pdf.js +4 -1
  14. package/server/api/instruction.js +3 -3
  15. package/server/api/local.js +10 -8
  16. package/server/api/projects.js +19 -3
  17. package/server/api/publish.js +3 -2
  18. package/server/api/sessions-rewind.js +220 -0
  19. package/server/api/sessions.js +58 -194
  20. package/server/api/stage.js +35 -0
  21. package/server/api/turn-model-switch.js +109 -0
  22. package/server/api/turn.js +52 -88
  23. package/server/auth/middleware.js +29 -6
  24. package/server/auth/tier.js +27 -7
  25. package/server/auth/users-store.js +14 -1
  26. package/server/engine/agent/actor-trail.js +110 -0
  27. package/server/engine/agent/agent-shared.js +22 -52
  28. package/server/engine/agent/beat-state.js +61 -0
  29. package/server/engine/agent/cast.js +322 -0
  30. package/server/engine/agent/events.js +18 -1
  31. package/server/engine/agent/hooks/beat-gate.js +73 -0
  32. package/server/engine/agent/hooks/failure.js +11 -1
  33. package/server/engine/agent/hooks/lifecycle.js +16 -41
  34. package/server/engine/agent/hooks/post-guidance.js +4 -38
  35. package/server/engine/agent/hooks/post-trim.js +1 -0
  36. package/server/engine/agent/hooks/pre-board-dirty.js +29 -0
  37. package/server/engine/agent/hooks/pre-defaults.js +206 -2
  38. package/server/engine/agent/hooks/pre-injectors.js +19 -2
  39. package/server/engine/agent/hooks/pre-peer-guard.js +88 -0
  40. package/server/engine/agent/hooks/pre-unknown-params.js +82 -0
  41. package/server/engine/agent/hooks/pre-workspace-scope-guard.js +33 -0
  42. package/server/engine/agent/hooks/resident-role-lifecycle.js +100 -0
  43. package/server/engine/agent/hooks/slot-alias.js +30 -0
  44. package/server/engine/agent/hooks/user-prompt-submit.js +208 -47
  45. package/server/engine/agent/hooks.js +80 -14
  46. package/server/engine/agent/isolation.js +25 -2
  47. package/server/engine/agent/memory-config.js +87 -0
  48. package/server/engine/agent/model-context.js +102 -18
  49. package/server/engine/agent/model-table.js +361 -58
  50. package/server/engine/agent/prompts/nodesign-prelude.md +579 -70
  51. package/server/engine/agent/prompts/tools/direct-edit-protocol.md +1 -1
  52. package/server/engine/agent/prompts/tools/generate-image-cookbook.md +26 -9
  53. package/server/engine/agent/prompts/tools/paint-still-cookbook.md +1 -1
  54. package/server/engine/agent/prompts/tools/site-reference.md +15 -4
  55. package/server/engine/agent/role-card.js +175 -0
  56. package/server/engine/agent/rp-mode.js +17 -0
  57. package/server/engine/agent/session-loop.js +55 -32
  58. package/server/engine/agent/stage-status.js +73 -0
  59. package/server/engine/agent/subagent-flight.js +73 -0
  60. package/server/engine/agent/system-prompts.js +41 -0
  61. package/server/engine/agent/tool-input-stream.js +165 -0
  62. package/server/engine/agents/explorer.md +1 -1
  63. package/server/engine/agents/index.js +1 -1
  64. package/server/engine/mcp/actor.js +59 -0
  65. package/server/engine/mcp/capability-gate.js +21 -2
  66. package/server/engine/mcp/index.js +118 -33
  67. package/server/engine/mcp/mode-profile.js +139 -0
  68. package/server/engine/mcp/server-name.js +19 -0
  69. package/server/engine/mcp/tools/artifact-session.js +2 -1
  70. package/server/engine/mcp/tools/browse-computer.js +2 -1
  71. package/server/engine/mcp/tools/browse-find-batch.js +95 -16
  72. package/server/engine/mcp/tools/browse.js +25 -3
  73. package/server/engine/mcp/tools/cast-role.js +167 -0
  74. package/server/engine/mcp/tools/crystallize-skill.js +1 -1
  75. package/server/engine/mcp/tools/draw-trend.js +104 -0
  76. package/server/engine/mcp/tools/edit-board-schema.js +56 -0
  77. package/server/engine/mcp/tools/edit-board.js +569 -0
  78. package/server/engine/mcp/tools/generate-image.js +50 -70
  79. package/server/engine/mcp/tools/helpers/codex-imagegen.js +139 -0
  80. package/server/engine/mcp/tools/helpers/rembg.js +7 -2
  81. package/server/engine/mcp/tools/helpers/shot-pipeline.js +109 -0
  82. package/server/engine/mcp/tools/list-pages.js +11 -5
  83. package/server/engine/mcp/tools/look-at-board.js +4 -3
  84. package/server/engine/mcp/tools/open-sheet.js +242 -0
  85. package/server/engine/mcp/tools/organize-board.js +45 -6
  86. package/server/engine/mcp/tools/paint-still.js +1 -1
  87. package/server/engine/mcp/tools/pin-to-board.js +103 -19
  88. package/server/engine/mcp/tools/read-board.js +123 -16
  89. package/server/engine/mcp/tools/read-tavern-json.js +87 -19
  90. package/server/engine/mcp/tools/report-issue.js +15 -7
  91. package/server/engine/mcp/tools/role-memory.js +83 -0
  92. package/server/engine/mcp/tools/roll-dice.js +82 -0
  93. package/server/engine/mcp/tools/roll-film.js +1 -1
  94. package/server/engine/mcp/tools/screenshot.js +19 -9
  95. package/server/engine/mcp/tools/set-vars.js +150 -0
  96. package/server/engine/mcp/tools/sheet-replan.js +46 -0
  97. package/server/engine/mcp/tools/web-search.js +12 -16
  98. package/server/engine/mcp/tools/write-on-board-flow.js +108 -0
  99. package/server/engine/mcp/tools/write-on-board-place.js +211 -0
  100. package/server/engine/mcp/tools/write-on-board-role-anchor.js +48 -0
  101. package/server/engine/mcp/tools/write-on-board-schema.js +125 -0
  102. package/server/engine/mcp/tools/write-on-board.js +568 -99
  103. package/server/engine/plugins/nodesign/skills/blackboard-rp/SKILL.md +215 -0
  104. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/SKILL.md +14 -7
  105. package/server/engine/plugins/nodesign/skills/docx-craft/SKILL.md +44 -5
  106. package/server/engine/plugins/nodesign/skills/docx-craft/references/token-schema.md +16 -0
  107. package/server/engine/plugins/nodesign/skills/site-craft/SKILL.md +24 -8
  108. package/server/engine/plugins/nodesign/skills/story-craft/SKILL.md +94 -0
  109. package/server/engine/plugins/nodesign/skills/story-import/SKILL.md +112 -0
  110. package/server/engine/plugins/nodesign/skills/story-intimacy/SKILL.md +72 -0
  111. package/server/engine/plugins/nodesign/skills/story-voice/SKILL.md +66 -0
  112. package/server/engine/plugins/nodesign/skills/story-voice/voices//345/206/267/347/241/254.md +33 -0
  113. package/server/engine/plugins/nodesign/skills/story-voice/voices//346/203/205/346/204/237/347/233/264/347/273/231.md +42 -0
  114. package/server/engine/plugins/nodesign/skills/story-voice/voices//346/204/217/350/257/206/346/265/201.md +42 -0
  115. package/server/engine/plugins/nodesign/skills/story-voice/voices//346/255/246/344/276/240/347/231/275/350/257/235.md +34 -0
  116. package/server/engine/plugins/nodesign/skills/story-voice/voices//347/224/237/346/264/273/346/265/201.md +35 -0
  117. package/server/engine/plugins/nodesign/skills/story-voice/voices//347/231/275/346/217/217.md +37 -0
  118. package/server/engine/plugins/nodesign/skills/story-voice/voices//350/210/236/345/217/260/345/211/247.md +32 -0
  119. package/server/engine/plugins/nodesign/skills/story-voice/voices//351/230/266/346/256/265/345/210/207/346/215/242.md +42 -0
  120. package/server/engine/runs/board-seater.js +272 -0
  121. package/server/engine/runs/board-tasklist.js +90 -48
  122. package/server/engine/runs/turn-relay.js +24 -2
  123. package/server/engine/runs/user-chalk-echo.js +44 -0
  124. package/server/index.js +2 -2
  125. package/server/lib/artifact-target.js +31 -14
  126. package/server/lib/board-anchor.js +49 -0
  127. package/server/lib/board-dirty.js +93 -0
  128. package/server/lib/board-excerpt.js +80 -0
  129. package/server/lib/board-follow.js +111 -0
  130. package/server/lib/board-groups.js +1 -5
  131. package/server/lib/board-hero.js +3 -1
  132. package/server/lib/board-kind-sizes.js +38 -3
  133. package/server/lib/board-lanes.js +58 -0
  134. package/server/lib/board-obstacles.js +80 -0
  135. package/server/lib/board-relations.js +5 -1
  136. package/server/lib/board-sheets.js +467 -0
  137. package/server/lib/board-shelf.js +86 -0
  138. package/server/lib/board-transform.js +62 -0
  139. package/server/lib/canvas-id.js +46 -4
  140. package/server/lib/chalk-flow.js +88 -0
  141. package/server/lib/chalk-rewrite.js +63 -0
  142. package/server/lib/chalk-size-pref.js +48 -0
  143. package/server/lib/chalk.js +42 -3
  144. package/server/lib/export-collect.js +3 -1
  145. package/server/lib/ingress/forward-openai-chat.js +16 -4
  146. package/server/lib/ingress/openai-chat.js +23 -12
  147. package/server/lib/ingress/session-routes.js +3 -3
  148. package/server/lib/ingress/stream-watchdog.js +53 -0
  149. package/server/lib/ingress/upstream-billing.js +15 -0
  150. package/server/lib/ingress/upstream-error-hints.js +36 -0
  151. package/server/lib/issues-store.js +3 -1
  152. package/server/lib/json-preview.js +58 -0
  153. package/server/lib/kinds/docx.js +11 -4
  154. package/server/lib/kinds/index.js +6 -16
  155. package/server/lib/kinds/site.js +40 -7
  156. package/server/lib/model-ingress.js +26 -1
  157. package/server/lib/moderation.js +10 -5
  158. package/server/lib/quota.js +26 -6
  159. package/server/lib/rect.js +50 -0
  160. package/server/lib/rewrite-refs.js +110 -0
  161. package/server/lib/screen.js +36 -0
  162. package/server/lib/sheet-state.js +19 -0
  163. package/server/lib/sketch-array.js +118 -0
  164. package/server/lib/sketch-hatch.js +99 -0
  165. package/server/lib/sketch-layout.js +269 -69
  166. package/server/lib/sketch-shapes.js +152 -0
  167. package/server/lib/sketch-stencils.js +170 -0
  168. package/server/lib/ssrf-guard.js +9 -0
  169. package/server/lib/state-table.js +237 -0
  170. package/server/lib/state-trend.js +94 -0
  171. package/server/lib/state-triggers.js +199 -0
  172. package/server/lib/task-scan.js +18 -0
  173. package/server/lib/tavern-json.js +48 -0
  174. package/server/lib/user-uploads.js +88 -0
  175. package/server/projects/board-limits.js +5 -3
  176. package/server/projects/board-sanitize.js +220 -10
  177. package/server/projects/board-store.js +137 -7
  178. package/server/projects/memory-migration.js +85 -0
  179. package/server/projects/move-entry.js +11 -1
  180. package/server/projects/session-jsonl.js +110 -0
  181. package/server/projects/store.js +56 -3
  182. package/server/projects/ui-config.js +2 -1
  183. package/server/projects/viewpoint-store.js +35 -3
  184. package/server/projects/workspace-slots.js +30 -0
  185. package/server/projects/workspace-templates.js +42 -10
  186. package/server/projects/workspace.js +25 -26
  187. package/server/runtime/capabilities.js +6 -2
  188. package/server/services/rembg-launcher.js +5 -2
  189. package/server/shared/locales.js +70 -0
  190. package/server/shared/messages-en.js +69 -0
  191. package/server/shared/messages.js +65 -0
  192. package/server/ws/broker.js +3 -0
  193. package/server/ws/index.js +43 -3
  194. package/web/README.md +1 -1
  195. package/web/dist/assets/{BrowserWindow-P_vIdh-G.js → BrowserWindow-CcaGRWz5.js} +1 -1
  196. package/web/dist/assets/DeckWindow-BIr2KGFT.js +6 -0
  197. package/web/dist/assets/{DocxWindow-DSAU1-tD.js → DocxWindow-B9KZmU5z.js} +2 -2
  198. package/web/dist/assets/{MermaidBlock-DR1GikCv.js → MermaidBlock-DrfRnz8E.js} +43 -43
  199. package/web/dist/assets/{SiteWindow-92uBuRRR.js → SiteWindow-CJOjCF7d.js} +6 -6
  200. package/web/dist/assets/{abnfDiagram-VCTEODGH-uA8Esix4.js → abnfDiagram-VCTEODGH-CUZbQGIg.js} +1 -1
  201. package/web/dist/assets/{arc-D_khH_xN.js → arc-C1-HSUny.js} +1 -1
  202. package/web/dist/assets/{architectureDiagram-5GKGNRK7-DydJHqOt.js → architectureDiagram-5GKGNRK7-B5nwvu60.js} +2 -2
  203. package/web/dist/assets/{blockDiagram-NRAW4CY4-B7wBbKiW.js → blockDiagram-NRAW4CY4-uPPuFLwR.js} +1 -1
  204. package/web/dist/assets/{c4Diagram-UCG6FXSJ-6mrH0x7Y.js → c4Diagram-UCG6FXSJ-C0mKBFlz.js} +1 -1
  205. package/web/dist/assets/channel-BxpWNOGU.js +1 -0
  206. package/web/dist/assets/{chunk-2Q5K7J3B-Cuikho5Q.js → chunk-2Q5K7J3B-Cs0rlZ4q.js} +1 -1
  207. package/web/dist/assets/{chunk-5VM5RSS4-3-KZ5AUz.js → chunk-5VM5RSS4-DtR63oYb.js} +1 -1
  208. package/web/dist/assets/{chunk-F27PBJKO-Bkwq2gGU.js → chunk-F27PBJKO-B3MRdezJ.js} +1 -1
  209. package/web/dist/assets/{chunk-G27WJ6UU-BLyQzdGE.js → chunk-G27WJ6UU-BtwntwpS.js} +1 -1
  210. package/web/dist/assets/{chunk-JWPE2WC7-B7HxxQds.js → chunk-JWPE2WC7-BHsTe5PD.js} +1 -1
  211. package/web/dist/assets/{chunk-LCL6LL3I-CtXrnUwF.js → chunk-LCL6LL3I-knY15Qdm.js} +1 -1
  212. package/web/dist/assets/{chunk-POPQ4Y6H-dxddZlXt.js → chunk-POPQ4Y6H-C51tgK_I.js} +1 -1
  213. package/web/dist/assets/{chunk-SVP7TREG-DpkmrgHn.js → chunk-SVP7TREG-CnwRZmF_.js} +1 -1
  214. package/web/dist/assets/{chunk-XXDRQBXY-BwZ7RbpQ.js → chunk-XXDRQBXY-BtXzVF-_.js} +1 -1
  215. package/web/dist/assets/classDiagram-DTDB5LWJ-DUEKmDfo.js +1 -0
  216. package/web/dist/assets/classDiagram-v2-JRS7N3AN-DUEKmDfo.js +1 -0
  217. package/web/dist/assets/{cose-bilkent-JH36ORCC-DGFOsMUt.js → cose-bilkent-JH36ORCC-CzWlGP6i.js} +1 -1
  218. package/web/dist/assets/{cynefin-OW5HDTMX-DUwn3ehS.js → cynefin-OW5HDTMX-vK64EGSv.js} +1 -1
  219. package/web/dist/assets/{cynefinDiagram-5FMLGOSQ-DlLAOZ9x.js → cynefinDiagram-5FMLGOSQ-Bs3g1Gvh.js} +1 -1
  220. package/web/dist/assets/{dagre-3AP2YEHR-CyourLfz.js → dagre-3AP2YEHR-BhgkYe8V.js} +1 -1
  221. package/web/dist/assets/{diagram-S7CK7UJ4-BTMbx2np.js → diagram-S7CK7UJ4-C_6mvD2V.js} +1 -1
  222. package/web/dist/assets/{diagram-UQ7AKVKN-UK94_1-P.js → diagram-UQ7AKVKN-qW7tssUW.js} +1 -1
  223. package/web/dist/assets/{diagram-VSXAHHWV-C7zS-v9v.js → diagram-VSXAHHWV-txJPHpvG.js} +1 -1
  224. package/web/dist/assets/{diagram-VX7I27RA-DKJRa6CK.js → diagram-VX7I27RA-CQTMsCnL.js} +1 -1
  225. package/web/dist/assets/{diagram-Z3DM3KII-kUbAfGAp.js → diagram-Z3DM3KII--cb1hoE6.js} +1 -1
  226. package/web/dist/assets/{ebnfDiagram-PWID7BFC-CVW16_vb.js → ebnfDiagram-PWID7BFC-Da6lDU77.js} +1 -1
  227. package/web/dist/assets/{erDiagram-SSCWMZ5O-BRQMFQ5y.js → erDiagram-SSCWMZ5O-DGCMrsQn.js} +1 -1
  228. package/web/dist/assets/{flowDiagram-A5DVABFB-S34LpLtK.js → flowDiagram-A5DVABFB-GdOL_qno.js} +1 -1
  229. package/web/dist/assets/{ganttDiagram-EL5Y4UJY-BFiqk1-G.js → ganttDiagram-EL5Y4UJY-Cx1F_jBK.js} +4 -4
  230. package/web/dist/assets/{gitGraphDiagram-WWUBYQGX-LZsrdyyv.js → gitGraphDiagram-WWUBYQGX-B5_6JhR3.js} +1 -1
  231. package/web/dist/assets/hand-CuvZZQGW.webp +0 -0
  232. package/web/dist/assets/index-BYKfMnmv.js +2759 -0
  233. package/web/dist/assets/index-CW7VsrVg.css +1 -0
  234. package/web/dist/assets/{infoDiagram-RXCK75RN-0DvN6KIp.js → infoDiagram-RXCK75RN-CjvKpSPA.js} +1 -1
  235. package/web/dist/assets/{ishikawaDiagram-5VMMS53U-CaY3A-Bx.js → ishikawaDiagram-5VMMS53U-CxLoAPhx.js} +1 -1
  236. package/web/dist/assets/{journeyDiagram-EYS64GPL-BBeiaCrj.js → journeyDiagram-EYS64GPL-BfvS1upJ.js} +1 -1
  237. package/web/dist/assets/{kanban-definition-3QL26DDD-ux42DRXQ.js → kanban-definition-3QL26DDD-DKPPu0w4.js} +1 -1
  238. package/web/dist/assets/{layout-CnXiF_NB.js → layout-Dhgck-Zo.js} +1 -1
  239. package/web/dist/assets/{linear-BMW0u6G6.js → linear-DMSQ-aUw.js} +1 -1
  240. package/web/dist/assets/lxgw-nd-app-bold-D1pKA1bR.woff2 +0 -0
  241. package/web/dist/assets/lxgw-nd-app-regular-BDe3d26v.woff2 +0 -0
  242. package/web/dist/assets/lxgw-nd-bold-Bufvlg03.woff2 +0 -0
  243. package/web/dist/assets/lxgw-nd-regular-DQwoI4OP.woff2 +0 -0
  244. package/web/dist/assets/lxgwwenkaiscreen-subset-100-DLPe7tEt.woff2 +0 -0
  245. package/web/dist/assets/lxgwwenkaiscreen-subset-101-d3VsZKWT.woff2 +0 -0
  246. package/web/dist/assets/lxgwwenkaiscreen-subset-102-ClzJuLq6.woff2 +0 -0
  247. package/web/dist/assets/lxgwwenkaiscreen-subset-103-DuDnQ6K-.woff2 +0 -0
  248. package/web/dist/assets/lxgwwenkaiscreen-subset-104-kPGW3Eem.woff2 +0 -0
  249. package/web/dist/assets/lxgwwenkaiscreen-subset-105-BzD54h-0.woff2 +0 -0
  250. package/web/dist/assets/lxgwwenkaiscreen-subset-106-BQ7fIzlx.woff2 +0 -0
  251. package/web/dist/assets/lxgwwenkaiscreen-subset-107-D8tDfFHI.woff2 +0 -0
  252. package/web/dist/assets/lxgwwenkaiscreen-subset-108-tGhkpwep.woff2 +0 -0
  253. package/web/dist/assets/lxgwwenkaiscreen-subset-109-7SMVSrly.woff2 +0 -0
  254. package/web/dist/assets/lxgwwenkaiscreen-subset-110-_uDKrFed.woff2 +0 -0
  255. package/web/dist/assets/lxgwwenkaiscreen-subset-111-Bio825RE.woff2 +0 -0
  256. package/web/dist/assets/lxgwwenkaiscreen-subset-112-D2ee0i-C.woff2 +0 -0
  257. package/web/dist/assets/lxgwwenkaiscreen-subset-113-JPFVDrga.woff2 +0 -0
  258. package/web/dist/assets/lxgwwenkaiscreen-subset-114-BcfxYA4w.woff2 +0 -0
  259. package/web/dist/assets/lxgwwenkaiscreen-subset-115-B1HeeOsd.woff2 +0 -0
  260. package/web/dist/assets/lxgwwenkaiscreen-subset-116-hY12tXpq.woff2 +0 -0
  261. package/web/dist/assets/lxgwwenkaiscreen-subset-117-BvuZwmre.woff2 +0 -0
  262. package/web/dist/assets/lxgwwenkaiscreen-subset-118-tzvs_H7j.woff2 +0 -0
  263. package/web/dist/assets/lxgwwenkaiscreen-subset-119-J2DWuYDN.woff2 +0 -0
  264. package/web/dist/assets/lxgwwenkaiscreen-subset-21-pDubCJV5.woff2 +0 -0
  265. package/web/dist/assets/lxgwwenkaiscreen-subset-22-ChAPMpqp.woff2 +0 -0
  266. package/web/dist/assets/lxgwwenkaiscreen-subset-23-BBx3oNpT.woff2 +0 -0
  267. package/web/dist/assets/lxgwwenkaiscreen-subset-24-CYt-Oagk.woff2 +0 -0
  268. package/web/dist/assets/lxgwwenkaiscreen-subset-25-Cx3j-ZUv.woff2 +0 -0
  269. package/web/dist/assets/lxgwwenkaiscreen-subset-26-B9AfZ3LL.woff2 +0 -0
  270. package/web/dist/assets/lxgwwenkaiscreen-subset-27-Bh2s9MNE.woff2 +0 -0
  271. package/web/dist/assets/lxgwwenkaiscreen-subset-28-C02JPoKP.woff2 +0 -0
  272. package/web/dist/assets/lxgwwenkaiscreen-subset-29-T_tbUGhk.woff2 +0 -0
  273. package/web/dist/assets/lxgwwenkaiscreen-subset-30-DMfyNzhz.woff2 +0 -0
  274. package/web/dist/assets/lxgwwenkaiscreen-subset-31-DFfdzbkg.woff2 +0 -0
  275. package/web/dist/assets/lxgwwenkaiscreen-subset-32-Bs1fz2iW.woff2 +0 -0
  276. package/web/dist/assets/lxgwwenkaiscreen-subset-33-cpB96OkZ.woff2 +0 -0
  277. package/web/dist/assets/lxgwwenkaiscreen-subset-34-BhinPYWX.woff2 +0 -0
  278. package/web/dist/assets/lxgwwenkaiscreen-subset-35-D_njRQqA.woff2 +0 -0
  279. package/web/dist/assets/lxgwwenkaiscreen-subset-36-DqXlLE3t.woff2 +0 -0
  280. package/web/dist/assets/lxgwwenkaiscreen-subset-37-j5LbvMph.woff2 +0 -0
  281. package/web/dist/assets/lxgwwenkaiscreen-subset-38-oO4jWdKm.woff2 +0 -0
  282. package/web/dist/assets/lxgwwenkaiscreen-subset-39-CabsX4rw.woff2 +0 -0
  283. package/web/dist/assets/lxgwwenkaiscreen-subset-4-PatS3YHh.woff2 +0 -0
  284. package/web/dist/assets/lxgwwenkaiscreen-subset-40-yrLg3C3e.woff2 +0 -0
  285. package/web/dist/assets/lxgwwenkaiscreen-subset-41-DBXmCQhc.woff2 +0 -0
  286. package/web/dist/assets/lxgwwenkaiscreen-subset-42-Bqij_UiQ.woff2 +0 -0
  287. package/web/dist/assets/lxgwwenkaiscreen-subset-43-D3kp0Ntc.woff2 +0 -0
  288. package/web/dist/assets/lxgwwenkaiscreen-subset-44-B_BNGvK4.woff2 +0 -0
  289. package/web/dist/assets/lxgwwenkaiscreen-subset-45-CZc0cQWs.woff2 +0 -0
  290. package/web/dist/assets/lxgwwenkaiscreen-subset-46-CHQX5Kd9.woff2 +0 -0
  291. package/web/dist/assets/lxgwwenkaiscreen-subset-47-Ci8gLrHA.woff2 +0 -0
  292. package/web/dist/assets/lxgwwenkaiscreen-subset-48-run3ugD3.woff2 +0 -0
  293. package/web/dist/assets/lxgwwenkaiscreen-subset-49-DgfiUb6u.woff2 +0 -0
  294. package/web/dist/assets/lxgwwenkaiscreen-subset-5-B0CtGbX_.woff2 +0 -0
  295. package/web/dist/assets/lxgwwenkaiscreen-subset-50-CdCG-POr.woff2 +0 -0
  296. package/web/dist/assets/lxgwwenkaiscreen-subset-51-L2okeQZ2.woff2 +0 -0
  297. package/web/dist/assets/lxgwwenkaiscreen-subset-52-BZAqyGJW.woff2 +0 -0
  298. package/web/dist/assets/lxgwwenkaiscreen-subset-53-B0xWqLeU.woff2 +0 -0
  299. package/web/dist/assets/lxgwwenkaiscreen-subset-54-BZVQX-EA.woff2 +0 -0
  300. package/web/dist/assets/lxgwwenkaiscreen-subset-55-093mkIUJ.woff2 +0 -0
  301. package/web/dist/assets/lxgwwenkaiscreen-subset-56-CbhWG8G-.woff2 +0 -0
  302. package/web/dist/assets/lxgwwenkaiscreen-subset-57-pLQuvo6c.woff2 +0 -0
  303. package/web/dist/assets/lxgwwenkaiscreen-subset-58-BHhoY50x.woff2 +0 -0
  304. package/web/dist/assets/lxgwwenkaiscreen-subset-59-D1_6DuIQ.woff2 +0 -0
  305. package/web/dist/assets/lxgwwenkaiscreen-subset-6-BnAelmYU.woff2 +0 -0
  306. package/web/dist/assets/lxgwwenkaiscreen-subset-60-HDBIuLTZ.woff2 +0 -0
  307. package/web/dist/assets/lxgwwenkaiscreen-subset-61-C-c13SeU.woff2 +0 -0
  308. package/web/dist/assets/lxgwwenkaiscreen-subset-62-kHRVOhZ2.woff2 +0 -0
  309. package/web/dist/assets/lxgwwenkaiscreen-subset-63-C0MCsvFv.woff2 +0 -0
  310. package/web/dist/assets/lxgwwenkaiscreen-subset-64-DZekguCj.woff2 +0 -0
  311. package/web/dist/assets/lxgwwenkaiscreen-subset-65-CtP6c3IU.woff2 +0 -0
  312. package/web/dist/assets/lxgwwenkaiscreen-subset-66-DLVWoMSf.woff2 +0 -0
  313. package/web/dist/assets/lxgwwenkaiscreen-subset-67-BVuOnayH.woff2 +0 -0
  314. package/web/dist/assets/lxgwwenkaiscreen-subset-68-DpxQ6Mnx.woff2 +0 -0
  315. package/web/dist/assets/lxgwwenkaiscreen-subset-69-qesBxLmC.woff2 +0 -0
  316. package/web/dist/assets/lxgwwenkaiscreen-subset-70-BBt1xN7h.woff2 +0 -0
  317. package/web/dist/assets/lxgwwenkaiscreen-subset-71-BWqZacwB.woff2 +0 -0
  318. package/web/dist/assets/lxgwwenkaiscreen-subset-72-B1wP_Yst.woff2 +0 -0
  319. package/web/dist/assets/lxgwwenkaiscreen-subset-73-C99T7jNZ.woff2 +0 -0
  320. package/web/dist/assets/lxgwwenkaiscreen-subset-74-DrUTsWBe.woff2 +0 -0
  321. package/web/dist/assets/lxgwwenkaiscreen-subset-75-C4M5XXQe.woff2 +0 -0
  322. package/web/dist/assets/lxgwwenkaiscreen-subset-76-Bq8spVWF.woff2 +0 -0
  323. package/web/dist/assets/lxgwwenkaiscreen-subset-77-D9vNupE2.woff2 +0 -0
  324. package/web/dist/assets/lxgwwenkaiscreen-subset-78-D6th7Gnu.woff2 +0 -0
  325. package/web/dist/assets/lxgwwenkaiscreen-subset-79-bezM85cS.woff2 +0 -0
  326. package/web/dist/assets/lxgwwenkaiscreen-subset-80-DD8pnhG2.woff2 +0 -0
  327. package/web/dist/assets/lxgwwenkaiscreen-subset-81-N6jtSyBs.woff2 +0 -0
  328. package/web/dist/assets/lxgwwenkaiscreen-subset-82-D6c180bZ.woff2 +0 -0
  329. package/web/dist/assets/lxgwwenkaiscreen-subset-83-em17AadM.woff2 +0 -0
  330. package/web/dist/assets/lxgwwenkaiscreen-subset-84-CJ8gdrMK.woff2 +0 -0
  331. package/web/dist/assets/lxgwwenkaiscreen-subset-85-9PPGO1eB.woff2 +0 -0
  332. package/web/dist/assets/lxgwwenkaiscreen-subset-86-CjWPf-u5.woff2 +0 -0
  333. package/web/dist/assets/lxgwwenkaiscreen-subset-87-8D_X_yOC.woff2 +0 -0
  334. package/web/dist/assets/lxgwwenkaiscreen-subset-88-9vtKFPBx.woff2 +0 -0
  335. package/web/dist/assets/lxgwwenkaiscreen-subset-89-BhE5jAKX.woff2 +0 -0
  336. package/web/dist/assets/lxgwwenkaiscreen-subset-90-D2Npfm5E.woff2 +0 -0
  337. package/web/dist/assets/lxgwwenkaiscreen-subset-91-C6Ft1-Eu.woff2 +0 -0
  338. package/web/dist/assets/lxgwwenkaiscreen-subset-97-CaExyQP9.woff2 +0 -0
  339. package/web/dist/assets/lxgwwenkaiscreen-subset-98-CPoVbsUd.woff2 +0 -0
  340. package/web/dist/assets/lxgwwenkaiscreen-subset-99-ZUQZGVgH.woff2 +0 -0
  341. package/web/dist/assets/{mindmap-definition-FBJOCRG2-hUxSpdKn.js → mindmap-definition-FBJOCRG2-CalfL_Kn.js} +1 -1
  342. package/web/dist/assets/{pegDiagram-XKGWAZYB-aCaQPH0w.js → pegDiagram-XKGWAZYB-D9mVWz7l.js} +1 -1
  343. package/web/dist/assets/pending-edit-apply-kwMFWsUe.js +31 -0
  344. package/web/dist/assets/{pieDiagram-E7YTZNPT-CmOEZ8zg.js → pieDiagram-E7YTZNPT-DELzbZNS.js} +1 -1
  345. package/web/dist/assets/{quadrantDiagram-AXDQQJYC-VW6fAhsV.js → quadrantDiagram-AXDQQJYC-TZqp4mfA.js} +1 -1
  346. package/web/dist/assets/{railroadDiagram-O6MQD6OU-CKJ7Ba5K.js → railroadDiagram-O6MQD6OU-DxX59f0i.js} +1 -1
  347. package/web/dist/assets/{requirementDiagram-EFPCY7ZU-pNGkq9Vw.js → requirementDiagram-EFPCY7ZU-DFdsJLIe.js} +1 -1
  348. package/web/dist/assets/{rotate-cw-KAfChbGV.js → rotate-cw-62liz7LX.js} +1 -1
  349. package/web/dist/assets/{sankeyDiagram-P5KCCOFB-BIMmDTfZ.js → sankeyDiagram-P5KCCOFB-ByYcd3fG.js} +1 -1
  350. package/web/dist/assets/{sequenceDiagram-WJ2MYXX4-BBW7wzKY.js → sequenceDiagram-WJ2MYXX4-Bj-ml1jS.js} +1 -1
  351. package/web/dist/assets/{sizeCapture-X5ZJPWSS-DdkXmLYR.js → sizeCapture-X5ZJPWSS-KhsXThyD.js} +1 -1
  352. package/web/dist/assets/{square-dashed-mouse-pointer-CDUlhUP7.js → square-dashed-mouse-pointer-D_VrqVpy.js} +1 -1
  353. package/web/dist/assets/{stateDiagram-HBIQ2CUA-W313Uz16.js → stateDiagram-HBIQ2CUA-BJlpHfWU.js} +1 -1
  354. package/web/dist/assets/stateDiagram-v2-4QOOHH4V-CR2kYAH2.js +1 -0
  355. package/web/dist/assets/{swimlanes-XN3QIQJK-C29TL26K.js → swimlanes-XN3QIQJK-DUB9OJVs.js} +1 -1
  356. package/web/dist/assets/swimlanesDiagram-VK2B7HYN-BitOxnG2.js +8 -0
  357. package/web/dist/assets/{timeline-definition-24CTP7MA-CF0JMObX.js → timeline-definition-24CTP7MA-C03NX82A.js} +1 -1
  358. package/web/dist/assets/{vennDiagram-4TSXK5OY-DrDFsaH3.js → vennDiagram-4TSXK5OY-B9pjzngp.js} +1 -1
  359. package/web/dist/assets/{wardleyDiagram-VM6X3IG4-CVrnRIS_.js → wardleyDiagram-VM6X3IG4-UqWq_mcT.js} +1 -1
  360. package/web/dist/assets/{xychartDiagram-S5SC5T6Z-BvkN1zsT.js → xychartDiagram-S5SC5T6Z-D2pDKtOv.js} +1 -1
  361. package/web/dist/index.html +2 -2
  362. package/server/api/memory.js +0 -185
  363. package/server/engine/agent/prompts/tools/generate-image-cookbook.gemini-gateway.md +0 -583
  364. package/server/engine/mcp/tools/arrange-on-board.js +0 -124
  365. package/server/engine/mcp/tools/create-on-board.js +0 -152
  366. package/server/engine/mcp/tools/edit-sketch.js +0 -167
  367. package/server/engine/mcp/tools/record-decision.js +0 -140
  368. package/server/engine/mcp/tools/relate-on-board.js +0 -112
  369. package/server/engine/mcp/tools/sketch-on-board.js +0 -337
  370. package/server/engine/plugins/nodesign/skills/rp-craft/SKILL.md +0 -235
  371. package/server/engine/plugins/nodesign/skills/rp-craft/patterns//346/274/224/345/207/272/351/241/265-/346/234/200/345/260/217/345/256/236/347/216/260.html +0 -78
  372. package/server/engine/plugins/nodesign/skills/rp-craft//346/274/224/345/207/272.template.js +0 -268
  373. package/web/dist/assets/DeckWindow-BpLv5082.js +0 -16
  374. package/web/dist/assets/channel-DGkccMO1.js +0 -1
  375. package/web/dist/assets/classDiagram-DTDB5LWJ-BGscw3OD.js +0 -1
  376. package/web/dist/assets/classDiagram-v2-JRS7N3AN-BGscw3OD.js +0 -1
  377. package/web/dist/assets/index-C0KUf6Wd.css +0 -1
  378. package/web/dist/assets/index-GAamh1p4.js +0 -2152
  379. package/web/dist/assets/lxgw-nd-bold-DbRfiTgo.woff2 +0 -0
  380. package/web/dist/assets/lxgw-nd-regular-CpMw9Ehg.woff2 +0 -0
  381. package/web/dist/assets/pending-edit-apply-AcdOQ9Ij.js +0 -31
  382. package/web/dist/assets/stateDiagram-v2-4QOOHH4V-DDhJBZzf.js +0 -1
  383. package/web/dist/assets/swimlanesDiagram-VK2B7HYN-BfN-Xdmu.js +0 -8
@@ -1,16 +0,0 @@
1
- import{c as et,r as o,j as e,d as r,G as t,_ as Ht,R as $,F as p,a as E,$ as tt,u as q,X as ue,w as nt,e as z,a0 as st,a1 as _t,a2 as Dt,a3 as ke,a4 as It,a5 as rt,P as ze,a6 as qt,a7 as it,a8 as Nt,a9 as Ut,aa as Gt,ab as lt,ac as Xt,ad as Kt,ae as Vt,m as ot,af as at,o as dt,ag as Yt,k as Zt,ah as ct,ai as Ct,S as Qt,aj as ut,ak as Jt,al as en,am as Xe,an as tn,Q as nn,ao as sn,ap as rn,aq as ln,M as on,ar as an,as as dn,n as cn,A as un}from"./index-GAamh1p4.js";import{d as Ke,c as Ve,M as xn,o as pn,t as gn,E as fn,C as hn,G as mn,p as yn,D as bn,b as wn,a as vn,P as kn,I as jn,R as Sn,e as zn}from"./pending-edit-apply-AcdOQ9Ij.js";import{E as $n,S as En}from"./square-dashed-mouse-pointer-CDUlhUP7.js";/**
2
- * @license lucide-react v0.468.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const xt=et("MessageSquare",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]]);/**
7
- * @license lucide-react v0.468.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const Fn=et("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),Ln=1920,An=1080;function Tn({src:n,srcDoc:s,mode:i="edit",onSelect:l,onTextEdit:d,onIframeReady:f,zoom:m=1,deckW:c=Ln,deckH:y=An}){const u=o.useRef(null),a=o.useRef(!1),w=o.useRef(0),[x,v]=o.useState(!1);o.useEffect(()=>{v(!0)},[n,s]),o.useEffect(()=>{const b=u.current;if(!(!b||!a.current))return Ke(b),i==="edit"&&Ve(b,{onSelect:l,onTextEdit:d}),()=>Ke(b)},[i,l,d]),o.useEffect(()=>()=>{var b;try{const L=(b=u.current)==null?void 0:b.contentWindow;L&&typeof L.scrollY=="number"&&(w.current=L.scrollY)}catch{}},[n,s]);const k=()=>{a.current=!0;const b=u.current;if(b){if(f==null||f(b),i==="edit"&&Ve(b,{onSelect:l,onTextEdit:d}),w.current>0)try{requestAnimationFrame(()=>{var L;try{(L=b.contentWindow)==null||L.scrollTo(0,w.current)}catch{}})}catch{}requestAnimationFrame(()=>{requestAnimationFrame(()=>v(!1))})}};return e.jsx("div",{style:{flex:1,minHeight:0,overflow:"hidden",background:r.bgWhite,position:"relative",display:"flex",alignItems:"center",justifyContent:"center"},children:e.jsx("iframe",{ref:u,src:n,srcDoc:s,onLoad:k,sandbox:"allow-scripts allow-same-origin",style:{width:`${c}px`,height:`${y}px`,flexShrink:0,border:0,background:r.bgWhite,transform:m===1?"none":`scale(${m})`,transformOrigin:"center center",opacity:x?.5:1,transition:"opacity 180ms ease-out"}})})}function Pn({candidates:n,activeId:s,onSelect:i,onAdd:l,onRemove:d,onRename:f}){if(!n||n.length===0)return null;const m=n.length===1;return e.jsxs("div",{style:{flexShrink:0,height:36,borderBottom:`1px solid ${r.border}`,background:r.bgWhite,padding:`0 ${t.lg}px`,display:"flex",alignItems:"center",gap:t.xs,overflowX:"auto",overflowY:"hidden"},children:[e.jsx(Ht,{size:11,color:r.sub,style:{flexShrink:0,marginRight:t.xs}}),n.map(c=>{const y=c.id===s;return e.jsx(Wn,{candidate:c,active:y,onSelect:()=>i==null?void 0:i(c.id),onRemove:m?null:()=>d==null?void 0:d(c.id),onRename:f},c.id)}),e.jsxs("button",{onClick:l,title:"新建候选(mock 复制当前)",style:{flexShrink:0,padding:`${t.xs}px ${t.md}px`,display:"inline-flex",alignItems:"center",gap:t.xs,fontFamily:E,fontSize:p.xs,color:r.sub,background:"transparent",border:`1px dashed ${r.borderMd}`,borderRadius:$.sm,cursor:"pointer"},onMouseEnter:c=>{c.currentTarget.style.color=r.text2,c.currentTarget.style.background="rgba(0,0,0,0.03)"},onMouseLeave:c=>{c.currentTarget.style.color=r.sub,c.currentTarget.style.background="transparent"},children:[e.jsx(tt,{size:11})," 新候选"]}),e.jsx("div",{style:{flex:1}}),e.jsxs("span",{style:{fontFamily:E,fontSize:p.xs,color:r.sub,opacity:m?0:.7,flexShrink:0},children:[n.length," 个候选"]})]})}function Wn({candidate:n,active:s,onSelect:i,onRemove:l,onRename:d}){const[f,m]=o.useState(!1),c=q(w=>w.prompt),y=q(w=>w.confirm),u=async w=>{if(w.stopPropagation(),!d)return;const x=await c({title:"重命名候选",initialValue:n.label,placeholder:"候选名"});x&&x.trim()&&x!==n.label&&d(n.id,x.trim())},a=async w=>{w.stopPropagation(),await y({title:"删除候选",message:`删除候选「${n.label}」?`,confirmLabel:"删除",danger:!0})&&l()};return e.jsxs("div",{onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),style:{flexShrink:0,position:"relative",display:"inline-flex",alignItems:"center",background:s?"rgba(45,36,24,0.06)":"transparent",borderRadius:$.sm,transition:"background 0.15s"},children:[e.jsx("button",{onClick:i,onDoubleClick:u,title:"双击重命名",style:{padding:`${t.xs}px ${l&&f?t.lg:t.md}px ${t.xs}px ${t.md}px`,fontFamily:E,fontSize:p.xs,fontWeight:s?500:400,color:s?r.text:r.text4,background:"transparent",borderRadius:$.sm,cursor:"pointer",transition:"all 0.15s"},children:n.label}),l&&f&&e.jsx("button",{onClick:a,style:{position:"absolute",right:2,top:"50%",transform:"translateY(-50%)",width:14,height:14,borderRadius:$.xs,background:"rgba(0,0,0,0.06)",color:r.sub,display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer"},onMouseEnter:w=>{w.currentTarget.style.background="rgba(184,58,42,0.15)",w.currentTarget.style.color=r.error},onMouseLeave:w=>{w.currentTarget.style.background="rgba(0,0,0,0.06)",w.currentTarget.style.color=r.sub},title:"删除候选",children:e.jsx(ue,{size:9})})]})}const de=12,Bn=8;function $e(n,s){const[i,l]=o.useState(null);return o.useLayoutEffect(()=>{const d=n==null?void 0:n.current;if(!d){l(null);return}const f=()=>{const m=d.getBoundingClientRect();if(!m.width&&!m.height){l(null);return}const c=window.innerWidth,y=window.innerHeight,u=Math.max(de,Math.min(m.left,c-s-de)),a=Math.min(m.bottom+Bn,y-de-120);l({position:"fixed",left:u,top:a,maxHeight:y-a-de})};return f(),window.addEventListener("resize",f),()=>window.removeEventListener("resize",f)},[n,s]),i||{position:"absolute",top:78,right:16}}function Mn({anchorRef:n,onClose:s,iframeDoc:i}){const l=o.useRef(null),d=$e(n,320),[f,m]=o.useState(!1),[c,y]=o.useState(null);o.useEffect(()=>{i&&u()},[i]),o.useEffect(()=>{const a=w=>{var x;l.current&&!l.current.contains(w.target)&&!((x=n==null?void 0:n.current)!=null&&x.contains(w.target))&&(s==null||s())};return window.addEventListener("mousedown",a),()=>window.removeEventListener("mousedown",a)},[s,n]);const u=()=>{i&&(m(!0),setTimeout(()=>{y(On(i)),m(!1)},400))};return e.jsxs("div",{ref:l,style:{...d,width:320,background:r.bgWhite,borderRadius:2,boxShadow:"0 2px 4px rgba(0,0,0,0.04), 0 8px 20px rgba(0,0,0,0.08), 0 24px 48px rgba(0,0,0,0.10), inset 0 1px 0 rgba(255,255,255,0.8)",zIndex:60,overflow:"hidden"},children:[e.jsxs("div",{style:{padding:`${t.md}px ${t.lg}px`,display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:`1px solid ${r.borderLt}`},children:[e.jsx("span",{style:{fontFamily:E,fontSize:p.sm,fontWeight:500,color:r.text},children:"Accessibility Review"}),e.jsx("button",{onClick:u,disabled:f,style:{padding:t.xs,color:r.sub,borderRadius:$.xs,opacity:f?.5:1},title:"重新扫描",children:e.jsx(nt,{size:11,className:f?"spin":""})})]}),e.jsxs("div",{style:{padding:t.lg,maxHeight:360,overflowY:"auto"},children:[f&&e.jsx("div",{style:{fontFamily:z,fontSize:p.sm,color:r.sub,textAlign:"center",padding:t.lg},children:"扫描中…"}),!f&&c&&e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:t.sm},children:c.map((a,w)=>e.jsx(Rn,{...a},w))})]}),e.jsx("div",{style:{padding:`${t.sm}px ${t.lg}px`,background:r.bgCard,borderTop:`1px solid ${r.borderLt}`,fontFamily:z,fontSize:p.xs,color:r.sub,lineHeight:1.5},children:"P5 接 LLM 真做 contrast / hierarchy / usability 审查;当前是启发式扫描。"})]})}function Rn({kind:n,label:s,hint:i,count:l}){const d=n==="ok",f=n==="warn",m=d?st:f?_t:ue,c=d?r.success:f?r.warn:r.error;return e.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:t.sm,padding:`${t.xs}px ${t.sm}px`,background:d?"transparent":"rgba(0,0,0,0.02)",borderRadius:$.sm},children:[e.jsx(m,{size:12,color:c,style:{marginTop:t.xxs,flexShrink:0}}),e.jsxs("div",{style:{flex:1},children:[e.jsxs("div",{style:{fontFamily:z,fontSize:p.sm,color:r.text2,lineHeight:1.4},children:[s," ",l!=null&&e.jsxs("span",{style:{color:r.sub,fontSize:p.xs},children:["(",l,")"]})]}),i&&e.jsx("div",{style:{fontFamily:z,fontSize:p.xs,color:r.sub,marginTop:1,lineHeight:1.4},children:i})]})]})}function On(n){const s=[],i=Array.from(n.querySelectorAll("img")),l=i.filter(u=>!u.hasAttribute("alt"));i.length===0?s.push({kind:"ok",label:"无图片元素需要 alt",hint:"没有 <img> 标签"}):l.length===0?s.push({kind:"ok",label:"图片 alt 完整",count:i.length}):s.push({kind:"warn",label:"部分图片缺 alt",count:l.length,hint:"加 alt 才能让屏幕阅读器识别"});const d=n.querySelectorAll("h1").length,f=n.querySelectorAll("h2").length;d===0&&f===0?s.push({kind:"warn",label:"没有 h1/h2 标题",hint:"层级缺失,screen reader 难导航"}):d>5?s.push({kind:"warn",label:"h1 过多",count:d,hint:"一般每页只 1 个 h1(每 section 1 个也可)"}):s.push({kind:"ok",label:"标题层级合理",hint:`h1 × ${d}, h2 × ${f}`});const m=Array.from(n.querySelectorAll("button")),c=m.filter(u=>!(u.textContent||"").trim()&&!u.getAttribute("aria-label"));m.length===0?s.push({kind:"ok",label:"无 button 需要文本",hint:"页面没有 <button>"}):c.length===0?s.push({kind:"ok",label:"按钮文本完整",count:m.length}):s.push({kind:"warn",label:"部分按钮缺文本/aria-label",count:c.length});const y=n.documentElement;return y.hasAttribute("lang")?s.push({kind:"ok",label:`<html> 标记了 lang="${y.getAttribute("lang")}"`}):s.push({kind:"warn",label:"<html> 缺 lang 属性",hint:"影响 screen reader 发音"}),s.push({kind:"ok",label:"色彩对比度(抽样)",hint:"主色块 WCAG AA pass(mock)"}),s.push({kind:"ok",label:"焦点顺序(mock)",hint:"Tab 键 traversal — P5 真模拟"}),s}function Hn({project:n,deckSpec:s,projectId:i}){var j,T,H;const l=Dt(h=>{var P;return((P=h.contextByProject[i])==null?void 0:P.systemInfo)||null}),d=q(h=>h.showToast),f=q(h=>h.confirm),[m,c]=o.useState([]),[y,u]=o.useState(!1),[a,w]=o.useState(!1),x=o.useRef(null),v=o.useCallback(async()=>{if(i){u(!0);try{const{plugins:h}=await ke.listProject(i);c(h||[])}catch(h){console.error("[SystemTab] listProject plugins failed:",h)}finally{u(!1)}}},[i]);o.useEffect(()=>{v()},[v]);const k=o.useCallback(async(h,P=!1)=>{var _,D,ee,X,K;if(!(!h||!i)){w(!0);try{const F=await ke.installProject(i,h,{force:P}),N=(_=F==null?void 0:F.installed)==null?void 0:_.name;d(`已装 plugin \`${N}\`(新会话生效)`,"success"),(D=F==null?void 0:F.warnings)!=null&&D.length&&d(`警告:${F.warnings.join(";")}`,"warn"),await v()}catch(F){if(F.status===409&&((ee=F.body)!=null&&ee.existing)){await f({title:"覆盖已装 plugin?",message:`已装 \`${F.body.existing.name}@${F.body.existing.version}\`,将覆盖为 \`${F.body.incoming.name}@${F.body.incoming.version}\`。`,confirmLabel:"覆盖",cancelLabel:"取消",danger:!0})&&await k(h,!0);return}const N=(K=(X=F.body)==null?void 0:X.errors)!=null&&K.length?`:${F.body.errors.join(";")}`:"";d(`安装失败${N||`:${F.message}`}`,"error")}finally{w(!1),x.current&&(x.current.value="")}}},[i,v,d,f]),b=o.useCallback(async h=>{if(await f({title:"卸载 plugin?",message:`从 project 移除 \`${h}\`(新会话生效)。文件会被删除。`,confirmLabel:"卸载",cancelLabel:"取消",danger:!0}))try{await ke.removeProject(i,h),d(`已卸载 \`${h}\``,"success"),await v()}catch(_){d(`卸载失败:${_.message}`,"error")}},[i,v,d,f]),L=Array.isArray(l==null?void 0:l.skills)?l.skills.map(h=>typeof h=="string"?h:h.name||h.id).filter(Boolean):[],W=Array.isArray(l==null?void 0:l.plugins)?l.plugins.map(h=>typeof h=="string"?h:h.name||h.id).filter(Boolean):[];return e.jsxs("div",{style:{padding:t.lg,display:"flex",flexDirection:"column",gap:t.xl},children:[e.jsx(J,{label:"本会话的 Skills",children:L.length===0?e.jsx("span",{style:{fontFamily:z,fontSize:p.sm,color:r.sub},children:"(等会话起动后从 SDK system_init 拉取)"}):e.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:t.xs},children:L.map(h=>e.jsx(Ye,{icon:It,label:h},h))})}),e.jsx(J,{label:"本会话的 Plugins",children:W.length===0?e.jsx("span",{style:{fontFamily:z,fontSize:p.sm,color:r.sub},children:"—"}):e.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:t.xs},children:W.map(h=>e.jsx(Ye,{icon:rt,label:h},h))})}),e.jsxs(J,{label:"Project 级 Plugins",children:[e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:t.xs,marginBottom:t.sm},children:y&&m.length===0?e.jsx("span",{style:{fontFamily:z,fontSize:p.sm,color:r.sub},children:"加载中…"}):m.length===0?e.jsx("span",{style:{fontFamily:z,fontSize:p.sm,color:r.sub},children:"暂无(上传 zip 安装到本 project)"}):m.map(h=>e.jsx(_n,{plugin:h,onUninstall:()=>b(h.name)},h.name))}),e.jsx("input",{ref:x,type:"file",accept:".md,.zip,application/zip,text/markdown,text/plain",style:{display:"none"},onChange:h=>{var _;const P=(_=h.target.files)==null?void 0:_[0];P&&k(P)}}),e.jsxs("button",{onClick:()=>{var h;return(h=x.current)==null?void 0:h.click()},disabled:a,style:{display:"inline-flex",alignItems:"center",gap:t.xs,padding:`${t.xs+1}px ${t.md}px`,fontFamily:z,fontSize:p.xs,color:r.text2,background:r.bgWhite,boxShadow:ze.far,borderRadius:$.md,cursor:a?"not-allowed":"pointer",opacity:a?.6:1},children:[e.jsx(qt,{size:11})," ",a?"安装中…":"上传 skill / plugin"]}),e.jsx("div",{style:{marginTop:t.xs,fontFamily:z,fontSize:p.xs,color:r.sub,lineHeight:1.5},children:"支持单 .md / skill zip / 完整 plugin zip。仅装到本 project;全局可见的走右上角 Skill 页面。新会话生效。"})]}),e.jsxs(J,{label:"模型",children:[e.jsx(ce,{k:"LLM",v:(l==null?void 0:l.model)||"—"}),(l==null?void 0:l.cwd)&&e.jsx(ce,{k:"cwd",v:l.cwd})]}),s&&e.jsxs(J,{label:"设计意图(spec)",children:[e.jsx(ce,{k:"metaphor",v:((j=s.meta)==null?void 0:j.metaphor)||"—"}),e.jsx(ce,{k:"audience",v:((T=s.meta)==null?void 0:T.audience)||"—"}),((H=s.meta)==null?void 0:H.intent)&&e.jsx("div",{style:{marginTop:t.sm,padding:t.md,background:r.bgCard,border:`1px solid ${r.borderLt}`,borderRadius:$.md,fontFamily:z,fontSize:p.xs,color:r.text2,lineHeight:1.6},children:s.meta.intent}),s.outline&&s.outline.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{marginTop:t.lg,fontFamily:E,fontSize:p.xs,color:r.sub,textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:t.sm},children:["页面 outline (",s.outline.length,")"]}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:t.xs},children:s.outline.map(h=>e.jsxs("div",{style:{padding:`${t.xs+1}px ${t.md}px`,fontFamily:z,fontSize:p.xs,background:"rgba(43,33,23,0.025)",borderRadius:$.sm,display:"flex",gap:t.sm,alignItems:"baseline"},children:[e.jsx("span",{style:{fontFamily:E,color:r.sub,minWidth:24},children:String(h.index).padStart(2,"0")}),e.jsx("span",{style:{color:r.text3,minWidth:64,fontFamily:E,fontSize:p.xs,textTransform:"uppercase"},children:h.layout}),e.jsx("span",{style:{color:r.text2,flex:1,lineHeight:1.4},children:h.intent})]},h.id))})]})]})]})}function _n({plugin:n,onUninstall:s}){var i;return e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:t.sm,padding:`${t.xs+1}px ${t.sm}px`,background:"rgba(43,33,23,0.025)",borderRadius:$.sm},children:[e.jsx(rt,{size:11,color:r.text4}),e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:t.xs},children:[e.jsx("span",{style:{fontFamily:E,fontSize:p.sm,color:r.text2},children:n.name}),e.jsx("span",{style:{fontFamily:E,fontSize:p.xs,color:r.sub},children:n.version}),e.jsxs("span",{style:{fontFamily:z,fontSize:p.xs,color:r.sub},children:["· ",((i=n.skills)==null?void 0:i.length)||0," skill"]})]}),n.description&&e.jsx("div",{style:{fontFamily:z,fontSize:p.xs,color:r.sub,lineHeight:1.4,marginTop:t.xxs,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:n.description,children:n.description})]}),e.jsx("button",{onClick:s,title:"卸载",style:{background:"transparent",border:"none",color:r.sub,cursor:"pointer",padding:t.xxs},children:e.jsx(it,{size:11})})]})}function Ye({icon:n,label:s}){return e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:t.xs,padding:`${t.xxs}px ${t.sm}px`,fontFamily:E,fontSize:p.xs,color:r.text2,background:"rgba(43,33,23,0.04)",borderRadius:$.pill},children:[e.jsx(n,{size:10,color:r.text4}),s]})}function J({label:n,children:s}){return e.jsxs("div",{children:[e.jsx("div",{style:{fontFamily:E,fontSize:p.xs,color:r.sub,textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:t.sm},children:n}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:t.xs},children:s})]})}function ce({k:n,v:s}){return e.jsxs("div",{style:{display:"flex",gap:t.md,fontFamily:z,fontSize:p.sm},children:[e.jsx("span",{style:{color:r.sub,minWidth:70},children:n}),e.jsx("span",{style:{color:r.text2,flex:1,wordBreak:"break-word"},children:s})]})}function Dn({projectId:n,sessionId:s,reloadKey:i=0}){const[l,d]=o.useState(null),[f,m]=o.useState(!1),[c,y]=o.useState(null),u=o.useCallback(async()=>{if(!n||!s){d({});return}m(!0),y(null);try{const x=await Nt.read(n);d((x==null?void 0:x.spec)||{})}catch(x){y(x)}finally{m(!1)}},[n,s]);o.useEffect(()=>{u()},[u,i]);const a=Array.isArray(l==null?void 0:l.decisions)?l.decisions:[],w=Array.isArray(l==null?void 0:l.history)?l.history:[];return e.jsxs("div",{style:{padding:t.lg},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:t.md},children:[e.jsxs("div",{style:{fontFamily:E,fontSize:p.sm,fontWeight:500,color:r.text},children:["DECISIONS",e.jsxs("span",{style:{color:r.sub,fontWeight:400,marginLeft:t.sm},children:["(",a.length,")"]})]}),e.jsxs("button",{onClick:u,disabled:f,title:"刷新(agent 调用 record_decision 后会自动刷新;手动按这个也行)",style:{display:"inline-flex",alignItems:"center",gap:t.xs,padding:`${t.xs}px ${t.sm}px`,background:"rgba(43,33,23,0.04)",border:"none",borderRadius:$.sm,cursor:f?"wait":"pointer",fontFamily:z,fontSize:p.sm,color:r.sub},children:[e.jsx(nt,{size:11,style:{animation:f?"rcw-spin 1s linear infinite":"none"}}),f?"...":"刷新"]})]}),c&&e.jsxs("div",{style:{padding:t.md,background:"rgba(220, 53, 69, 0.06)",border:`1px solid ${r.error}33`,borderRadius:$.md,fontFamily:z,fontSize:p.xs,color:r.error,marginBottom:t.md},children:["读取失败:",c.message]}),a.length===0&&!f&&e.jsxs("div",{style:{padding:t.lg,textAlign:"center",fontFamily:z,fontSize:p.sm,color:r.sub,lineHeight:1.6},children:["设计决策现在记在画布的任务便利贴上",e.jsx("br",{}),"(",e.jsx("code",{style:{background:"rgba(43,33,23,0.06)",padding:`1px ${t.xs}px`,borderRadius:$.xs},children:"notes/决策.md"}),", 任务区里那张黄贴纸)。",e.jsx("br",{}),"这里只显示旧会话的存量决策和压缩历史。"]}),a.map((x,v)=>e.jsx(In,{decision:x,index:a.length-v},v)).reverse(),w.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{marginTop:t.xl,marginBottom:t.sm,fontFamily:E,fontSize:p.xs,fontWeight:500,color:r.sub,display:"flex",alignItems:"center",gap:t.xs,letterSpacing:"0.04em"},children:[e.jsx(Ut,{size:11})," COMPACT HISTORY (",w.length,")"]}),w.map((x,v)=>e.jsx(qn,{entry:x},v)).reverse()]}),e.jsx("style",{children:`
12
- @keyframes rcw-spin {
13
- from { transform: rotate(0deg); }
14
- to { transform: rotate(360deg); }
15
- }
16
- `})]})}function In({decision:n}){return e.jsxs("div",{style:{padding:t.md,marginBottom:t.sm,borderRadius:2,background:r.bgWhite,boxShadow:ze.far},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:t.xs,marginBottom:t.xs},children:[e.jsx(Gt,{size:11,color:r.text4}),e.jsx("div",{style:{flex:1,fontFamily:z,fontSize:p.sm,fontWeight:500,color:r.text,lineHeight:1.4},children:n.title||"(no title)"})]}),e.jsx("div",{style:{fontFamily:z,fontSize:p.xs,color:r.text4,lineHeight:1.5,marginBottom:t.xs,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:n.rationale}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:t.sm,fontFamily:E,fontSize:p.xs,color:r.sub},children:[n.scope&&e.jsxs("span",{children:["scope: ",n.scope]}),e.jsx("span",{children:pt(n.ts)})]}),Array.isArray(n.alternatives)&&n.alternatives.length>0&&e.jsxs("details",{style:{marginTop:t.xs},children:[e.jsxs("summary",{style:{fontFamily:E,fontSize:p.xs,color:r.sub,cursor:"pointer"},children:["考虑过的替代 (",n.alternatives.length,")"]}),e.jsx("ul",{style:{margin:`${t.xs}px 0 0 0`,paddingLeft:t.xl,fontFamily:z,fontSize:p.xs,color:r.text4,lineHeight:1.5},children:n.alternatives.map((s,i)=>e.jsx("li",{children:s},i))})]})]})}function qn({entry:n}){var s;return e.jsxs("div",{style:{padding:t.md,marginBottom:t.sm,borderLeft:`2px solid ${r.borderMd}`,paddingLeft:t.md},children:[e.jsxs("div",{style:{fontFamily:E,fontSize:p.xs,color:r.sub,marginBottom:t.xs,letterSpacing:"0.04em"},children:[((s=n.source)==null?void 0:s.toUpperCase())||"COMPACT"," · ",pt(n.ts),n.trigger&&n.trigger!=="auto"&&` · ${n.trigger}`]}),e.jsx("div",{style:{fontFamily:z,fontSize:p.xs,color:r.text4,lineHeight:1.5,whiteSpace:"pre-wrap"},children:n.summary})]})}function pt(n){if(!n)return"";try{return new Date(n).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return n}}function Nn({anchorRef:n,onClose:s,project:i,deckSpec:l,projectId:d,sessionId:f,decisionsReloadKey:m=0,onA11yClick:c,tweaksEnabled:y=null,onTweaksEnabledChange:u=null}){const a=q(j=>j.canvasFont),w=q(j=>j.followAgent),x=q(j=>j.setFollowAgent),v=q(j=>j.setCanvasFont),k=o.useRef(null),[b,L]=o.useState(!1),W=$e(n,360);return o.useEffect(()=>{const j=T=>{var H;k.current&&!k.current.contains(T.target)&&!((H=n==null?void 0:n.current)!=null&&H.contains(T.target))&&(s==null||s())};return window.addEventListener("mousedown",j),()=>window.removeEventListener("mousedown",j)},[s,n]),o.useEffect(()=>{const j=T=>{T.key==="Escape"&&(s==null||s())};return window.addEventListener("keydown",j),()=>window.removeEventListener("keydown",j)},[s]),e.jsxs("div",{ref:k,style:{...W,width:360,background:r.bgWhite,borderRadius:2,boxShadow:"0 2px 4px rgba(0,0,0,0.04), 0 8px 20px rgba(0,0,0,0.08), 0 24px 48px rgba(0,0,0,0.10), inset 0 1px 0 rgba(255,255,255,0.8)",zIndex:60,display:"flex",flexDirection:"column",overflow:"hidden"},children:[e.jsxs("div",{style:{padding:`${t.md}px ${t.lg}px`,display:"flex",alignItems:"center",gap:t.sm,borderBottom:`1px solid ${r.borderLt}`,flexShrink:0},children:[e.jsx(lt,{size:12,color:r.text4}),e.jsx("span",{style:{fontFamily:E,fontSize:p.sm,fontWeight:500,color:r.text},children:"System"})]}),e.jsxs("div",{style:{flex:1,minHeight:0,overflowY:"auto"},children:[c&&e.jsxs("div",{style:{padding:`${t.md}px ${t.lg}px`,borderBottom:`1px solid ${r.borderLt}`,display:"flex",flexDirection:"column",gap:t.sm},children:[e.jsx("div",{style:{fontFamily:E,fontSize:p.xs,color:r.sub,textTransform:"uppercase",letterSpacing:"0.05em"},children:"Canvas 工具"}),e.jsx("div",{style:{display:"flex",gap:t.sm},children:e.jsxs("button",{onClick:()=>{c(),s==null||s()},style:Un,title:"无障碍审查(mock)",children:[e.jsx(Fn,{size:11})," A11y"]})})]}),u&&e.jsxs("div",{style:{padding:`${t.md}px ${t.lg}px`,borderBottom:`1px solid ${r.borderLt}`,display:"flex",alignItems:"center",gap:t.sm},children:[e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsx("div",{style:{fontFamily:z,fontSize:p.sm,color:r.text},children:"Tweaks 模式"}),e.jsx("div",{style:{fontFamily:z,fontSize:p.xs,color:r.sub,marginTop:2,lineHeight:1.5},children:y?"开:agent 会主动把核心参数做成控件让你拖":"关:不暴露控件,改样式走对话"})]}),e.jsx(Ze,{checked:!!y,onChange:u})]}),e.jsxs("div",{style:{padding:`${t.md}px ${t.lg}px`,borderBottom:`1px solid ${r.borderLt}`,display:"flex",alignItems:"center",gap:t.sm},children:[e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsx("div",{style:{fontFamily:z,fontSize:p.sm,color:r.text},children:"镜头跟随 agent"}),e.jsx("div",{style:{fontFamily:z,fontSize:p.xs,color:r.sub,marginTop:2,lineHeight:1.5},children:w?"开:agent 换到哪个产物,镜头就飞过去(你操作后 8 秒内不抢)":"关:镜头只听你的;agent 在动什么看光圈"})]}),e.jsx(Ze,{checked:w,onChange:x})]}),e.jsxs("div",{style:{padding:`${t.md}px ${t.lg}px`,borderBottom:`1px solid ${r.borderLt}`},children:[e.jsx("div",{style:{fontFamily:z,fontSize:p.sm,color:r.text},children:"画布手写字体"}),e.jsx("div",{style:{fontFamily:z,fontSize:p.xs,color:r.sub,marginTop:2,marginBottom:t.sm},children:"用「文字」工具(T)在画布上写字时用这个"}),e.jsx("div",{style:{display:"flex",gap:t.xs,flexWrap:"wrap"},children:Object.entries(Xt).map(([j,T])=>e.jsx("button",{onClick:()=>v({...a,font:j}),style:{padding:`${t.xs}px ${t.sm}px`,borderRadius:$.md,cursor:"pointer",fontFamily:Kt[j],fontSize:p.sm,border:`1px solid ${a.font===j?r.text:r.borderLt}`,background:a.font===j?r.text:"transparent",color:a.font===j?r.bg:r.text2},children:T},j))}),e.jsx("div",{style:{display:"flex",gap:t.xs,marginTop:t.sm},children:Object.entries(Vt).map(([j,T])=>e.jsx("button",{onClick:()=>v({...a,size:j}),style:{padding:`${t.xs}px ${t.sm}px`,borderRadius:$.md,cursor:"pointer",fontFamily:z,fontSize:p.xs,border:`1px solid ${a.size===j?r.text:r.borderLt}`,background:a.size===j?r.text:"transparent",color:a.size===j?r.bg:r.text2},children:T},j))})]}),e.jsx(Hn,{project:i,deckSpec:l,projectId:d}),e.jsxs("div",{style:{borderTop:`1px solid ${r.borderLt}`,padding:`${t.md}px ${t.lg}px 0`},children:[e.jsxs("button",{onClick:()=>L(j=>!j),style:{display:"flex",alignItems:"center",gap:t.xs,width:"100%",padding:`${t.xs}px 0`,background:"transparent",border:"none",fontFamily:E,fontSize:p.xs,color:r.sub,textTransform:"uppercase",letterSpacing:"0.05em",cursor:"pointer"},children:[e.jsx(ot,{size:11,style:{transform:b?"rotate(90deg)":"rotate(0deg)",transition:"transform 0.12s ease"}}),"项目档案 — Decisions / History"]}),!b&&e.jsx("div",{style:{fontFamily:z,fontSize:p.xs,color:r.sub,padding:`${t.xs}px 0 ${t.md}px ${t.lg}px`,lineHeight:1.5},children:"展开看 agent 记录的设计决策 + compact 摘要历史。"})]}),b&&e.jsx("div",{style:{background:"rgba(0,0,0,0.015)",margin:`0 ${t.lg}px ${t.md}px`,border:`1px solid ${r.borderLt}`,borderRadius:$.md},children:e.jsx(Dn,{projectId:d,sessionId:f,reloadKey:m})})]}),e.jsx("div",{style:{padding:`${t.sm}px ${t.lg}px`,background:r.bgCard,borderTop:`1px solid ${r.borderLt}`,fontFamily:z,fontSize:p.xs,color:r.sub,lineHeight:1.5,flexShrink:0},children:"spec 不可在此编辑 — 改 spec 跟 agent 说,触发新 run。"})]})}function Ze({checked:n,onChange:s,title:i}){return e.jsx("button",{onClick:()=>s==null?void 0:s(!n),title:i,style:{width:28,height:16,padding:0,border:"none",borderRadius:$.lg,background:n?r.text:"rgba(0,0,0,0.18)",position:"relative",cursor:"pointer",transition:"background 0.15s",flexShrink:0},children:e.jsx("span",{style:{position:"absolute",top:2,left:n?14:2,width:12,height:12,borderRadius:$.round,background:r.bgWhite,boxShadow:at.crispSm,transition:"left 0.15s"}})})}const Un={padding:`${t.xs+1}px ${t.md}px`,fontFamily:E,fontSize:p.xs,color:r.text4,background:"rgba(0,0,0,0.04)",border:"none",borderRadius:$.sm,display:"inline-flex",alignItems:"center",gap:t.xs,cursor:"pointer"};function Gn({comments:n=[],iframeDoc:s,iframeRef:i,anchorRef:l,onClose:d,onResolveComment:f,onDeleteComment:m,onSelectAnchor:c}){const y=o.useRef(null),u=$e(l,380);o.useEffect(()=>{const x=v=>{var k;y.current&&!y.current.contains(v.target)&&!((k=l==null?void 0:l.current)!=null&&k.contains(v.target))&&(d==null||d())};return window.addEventListener("mousedown",x),()=>window.removeEventListener("mousedown",x)},[d,l]),o.useEffect(()=>{const x=v=>{v.key==="Escape"&&(d==null||d())};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[d]);const a=o.useMemo(()=>{const x=new Map;for(const k of n){const b=s&&k.anchor?dt(k.anchor,s.body):null,L=b?Yt(b):null,W=(L==null?void 0:L.index)??null;x.has(W)||x.set(W,[]),x.get(W).push({comment:k,el:b})}return[...x.entries()].sort((k,b)=>k[0]===null?1:b[0]===null?-1:k[0]-b[0])},[n,s]),w=x=>{if(x.el)try{x.el.scrollIntoView({behavior:"smooth",block:"center"})}catch{}c&&c(x.comment.anchor)};return e.jsxs("div",{ref:y,style:{...u,width:380,background:r.bgWhite,borderRadius:2,boxShadow:"0 2px 4px rgba(0,0,0,0.04), 0 8px 20px rgba(0,0,0,0.08), 0 24px 48px rgba(0,0,0,0.10), inset 0 1px 0 rgba(255,255,255,0.8)",zIndex:60,display:"flex",flexDirection:"column",overflow:"hidden"},children:[e.jsxs("div",{style:{padding:`${t.md}px ${t.lg}px`,display:"flex",alignItems:"center",gap:t.sm,borderBottom:`1px solid ${r.borderLt}`,flexShrink:0},children:[e.jsx(xt,{size:12,color:r.text4}),e.jsxs("span",{style:{fontFamily:E,fontSize:p.sm,fontWeight:500,color:r.text,flex:1},children:["全部评论 ",n.length>0&&`(${n.length})`]}),e.jsx("button",{onClick:d,title:"关闭",style:{padding:t.xs,color:r.text5,borderRadius:$.xs,background:"transparent",border:"none",cursor:"pointer"},children:e.jsx(ue,{size:12})})]}),e.jsx("div",{style:{flex:1,minHeight:0,overflowY:"auto"},children:n.length===0?e.jsxs("div",{style:{padding:`${t.lg+t.md}px ${t.lg}px`,fontFamily:z,fontSize:p.sm,color:r.sub,textAlign:"center",lineHeight:1.6},children:["还没有评论。",e.jsx("br",{}),"点击画布上任意元素 → 在弹出的浮卡里写评论。"]}):a.map(([x,v])=>e.jsxs("div",{style:{padding:`${t.md}px ${t.lg}px`,borderBottom:`1px solid ${r.borderLt}`},children:[e.jsxs("div",{style:{fontFamily:E,fontSize:p.xs,color:r.sub,textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:t.sm},children:[x===null?"未定位":`第 ${x+1} 页`," · ",v.length," 条"]}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:t.xs},children:v.map(({comment:k,el:b})=>e.jsx(Xn,{comment:k,available:!!b,onClick:()=>w({comment:k,el:b}),onResolve:()=>f==null?void 0:f(k.id),onDelete:()=>m==null?void 0:m(k.id)},k.id))})]},x??"orphan"))}),e.jsx("div",{style:{padding:`${t.sm}px ${t.lg}px`,background:r.bgCard,borderTop:`1px solid ${r.borderLt}`,fontFamily:z,fontSize:p.xs,color:r.sub,lineHeight:1.5,flexShrink:0},children:"点击评论 → 跳到对应元素;evaluator 切到 edit 模式后可在浮卡续写。"})]})}function Xn({comment:n,available:s,onClick:i,onResolve:l,onDelete:d}){var m,c,y;const f=n.status==="resolved";return e.jsxs("div",{style:{padding:`${t.sm}px ${t.md}px`,background:r.bgWhite,boxShadow:ze.far,borderRadius:$.md,display:"flex",flexDirection:"column",gap:t.xs,opacity:f?.5:1,cursor:s?"pointer":"default",transition:"background 0.1s"},onClick:s?i:void 0,onMouseEnter:u=>{s&&(u.currentTarget.style.background="rgba(0,0,0,0.02)")},onMouseLeave:u=>{u.currentTarget.style.background=r.bgWhite},children:[e.jsx("div",{style:{fontFamily:z,fontSize:p.sm,color:r.text2,lineHeight:1.5,textDecoration:f?"line-through":"none",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:n.text}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:t.xs,fontFamily:E,fontSize:p.xs,color:r.sub},children:[s?e.jsxs(e.Fragment,{children:[e.jsx(xn,{size:9}),e.jsx("span",{children:((m=n.anchor)==null?void 0:m.dataId)||((y=(c=n.anchor)==null?void 0:c.path)==null?void 0:y.split(">").pop())||"元素"})]}):e.jsx("span",{style:{fontStyle:"italic"},children:"元素已不在"}),e.jsx("span",{style:{flex:1}}),e.jsx("button",{onClick:u=>{u.stopPropagation(),l()},title:f?"取消解决":"标记解决",style:{padding:t.xxs,color:r.sub,borderRadius:$.xs,background:"transparent",border:"none",cursor:"pointer"},children:e.jsx(st,{size:11})}),e.jsx("button",{onClick:u=>{u.stopPropagation(),d()},title:"删除",style:{padding:t.xxs,color:r.sub,borderRadius:$.xs,background:"transparent",border:"none",cursor:"pointer"},children:e.jsx(it,{size:11})})]})]})}function Kn({iframeDoc:n,active:s}){const[i,l]=o.useState([]),[d,f]=o.useState(0);o.useEffect(()=>{if(!s||!n){l([]);return}let c=null;const y=()=>{const a=Array.from(n.querySelectorAll("section[data-page]"));if(l(a),c&&c.disconnect(),!!a.length)try{c=new(n.defaultView||window).IntersectionObserver(w=>{const x=w.filter(k=>k.isIntersecting).sort((k,b)=>b.intersectionRatio-k.intersectionRatio)[0];if(!x)return;const v=a.indexOf(x.target);v>=0&&f(v)},{threshold:[.35,.6]}),a.forEach(w=>c.observe(w))}catch{}};y();let u=null;try{u=new(n.defaultView||window).MutationObserver(()=>y()),n.body&&u.observe(n.body,{childList:!0,subtree:!0})}catch{}return()=>{c==null||c.disconnect(),u==null||u.disconnect()}},[n,s]);const m=o.useCallback(c=>{f(y=>{const u=Math.max(0,Math.min(i.length-1,y+c)),a=i[u];if(a)try{a.scrollIntoView({behavior:"smooth",block:"start"})}catch{}return u})},[i]);return o.useEffect(()=>{if(!s||i.length<2)return;const c=u=>{if(u.key!=="ArrowLeft"&&u.key!=="ArrowRight")return;const a=u.target;a&&(a.tagName==="INPUT"||a.tagName==="TEXTAREA"||a.isContentEditable)||(u.preventDefault(),m(u.key==="ArrowRight"?1:-1))};window.addEventListener("keydown",c);let y=null;try{y=n,y==null||y.addEventListener("keydown",c)}catch{}return()=>{window.removeEventListener("keydown",c);try{y==null||y.removeEventListener("keydown",c)}catch{}}},[s,i.length,m,n]),!s||i.length<2?null:e.jsxs("div",{style:{position:"absolute",bottom:16,left:"50%",transform:"translateX(-50%)",display:"flex",alignItems:"center",gap:t.xxs,background:"rgba(28,24,18,0.86)",borderRadius:$.pill,padding:t.xs,boxShadow:"0 6px 22px rgba(0,0,0,0.22)",zIndex:30,backdropFilter:"blur(6px)"},children:[e.jsx(Ce,{onClick:()=>m(-1),disabled:d===0,icon:Zt,title:"上一页(←)"}),e.jsxs("span",{style:{fontFamily:E,fontSize:p.sm,color:ct.ink,padding:`0 ${t.md}px`,minWidth:52,textAlign:"center",userSelect:"none"},children:[d+1," / ",i.length]}),e.jsx(Ce,{onClick:()=>m(1),disabled:d===i.length-1,icon:ot,title:"下一页(→)"})]})}function Ce({onClick:n,disabled:s,icon:i,title:l}){return e.jsx("button",{onClick:n,disabled:s,title:l,style:{display:"flex",alignItems:"center",justifyContent:"center",width:26,height:26,borderRadius:$.round,border:"none",background:"transparent",color:s?"rgba(232,226,210,0.3)":ct.ink,cursor:s?"default":"pointer",transition:"background 0.15s"},onMouseEnter:d=>{s||(d.currentTarget.style.background="rgba(255,255,255,0.12)")},onMouseLeave:d=>{d.currentTarget.style.background="transparent"},children:e.jsx(i,{size:15})})}function Vn({edits:n=[],onApply:s,onUndo:i,onClearAll:l,canUndo:d=!1,isRunning:f=!1}){const m=n.length;if(m===0)return null;const c=Yn(n);return e.jsxs("div",{style:{position:"absolute",bottom:16,left:"50%",transform:"translateX(-50%)",background:"rgba(45, 36, 24, 0.94)",color:r.btnText,borderRadius:$.lg,padding:`${t.sm}px ${t.lg}px`,display:"flex",alignItems:"center",gap:t.md,fontFamily:E,fontSize:p.xs,boxShadow:"0 8px 32px rgba(0,0,0,0.25), 0 2px 8px rgba(0,0,0,0.18)",zIndex:50,backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)"},children:[e.jsx("span",{style:{padding:`${t.xxs}px ${t.md}px`,background:"rgba(245, 240, 232, 0.15)",borderRadius:$.xl,fontWeight:600,minWidth:22,textAlign:"center"},children:m}),e.jsxs("span",{style:{color:"#dfd6c6"},children:[c," 待应用"]}),e.jsx("div",{style:{width:1,height:18,background:"rgba(245,240,232,0.2)"}}),e.jsxs("button",{onClick:i,disabled:!d,title:d?"撤销最近一次 (Cmd+Z)":"无可撤销操作",style:{...Qe,opacity:d?1:.4,cursor:d?"pointer":"not-allowed"},children:[e.jsx(Ct,{size:11})," 撤销"]}),e.jsxs("button",{onClick:l,title:"全部撤销 — 把所有 pending 编辑清掉",style:Qe,children:[e.jsx(ue,{size:11})," 全部撤销"]}),e.jsxs("button",{onClick:s,disabled:f,title:f?"agent 正在跑,等当前 run 结束":"让 agent 把这些调整落到源代码",style:{...Zn,opacity:f?.6:1,cursor:f?"wait":"pointer"},children:[e.jsx(Qt,{size:11})," 应用"]})]})}function Yn(n){const s={move:0,style:0,dup:0,del:0};for(const l of n)l.kind==="pending-move"?s.move++:l.kind==="pending-style"?s.style++:l.kind==="pending-duplicate"?s.dup++:l.kind==="pending-delete"&&s.del++;const i=[];return s.move&&i.push(`${s.move} 拖动`),s.dup&&i.push(`${s.dup} 复制`),s.style&&i.push(`${s.style} 样式`),s.del&&i.push(`${s.del} 删除`),i.join(" · ")||"调整"}const Qe={display:"inline-flex",alignItems:"center",gap:t.xs,padding:`${t.xs}px ${t.base}px`,fontFamily:"inherit",fontSize:p.xs,color:r.btnText,background:"transparent",border:"1px solid rgba(245,240,232,0.25)",borderRadius:$.sm},Zn={display:"inline-flex",alignItems:"center",gap:t.xs,padding:"5px 14px",fontFamily:"inherit",fontSize:p.xs,fontWeight:600,color:r.btn,background:r.btnText,border:"none",borderRadius:$.sm,boxShadow:"0 1px 2px rgba(0,0,0,0.15)"},Je=ut.purple,Cn=Jt(ut.purple,.18);function Qn({edits:n=[],iframeRef:s,zoom:i=1}){const[,l]=o.useState(0);o.useEffect(()=>{if(n.length===0)return;const x=s==null?void 0:s.current;if(!x)return;const v=x.contentWindow;if(!v)return;let k=null;const b=()=>{k||(k=requestAnimationFrame(()=>{k=null,l(L=>L+1)}))};try{v.addEventListener("scroll",b,{passive:!0,capture:!0}),v.addEventListener("resize",b),window.addEventListener("resize",b)}catch{}return()=>{try{v.removeEventListener("scroll",b,{capture:!0}),v.removeEventListener("resize",b),window.removeEventListener("resize",b)}catch{}k&&cancelAnimationFrame(k)}},[n.length,s]);const d=o.useMemo(()=>n.filter(x=>(x.kind==="pending-move"||x.kind==="pending-duplicate")&&x.reactMount===!0),[n]);if(d.length===0||!(s!=null&&s.current))return null;const f=s.current,m=f.contentDocument;if(!m)return null;const c=f.getBoundingClientRect(),y=pn(f);if(!y)return null;const u=f.contentWindow,a=(u==null?void 0:u.innerWidth)??c.width/i,w=(u==null?void 0:u.innerHeight)??c.height/i;return e.jsx(e.Fragment,{children:d.map((x,v)=>{var h;const k=dt(x.anchor,m.body);if(!k)return null;const b=k.getBoundingClientRect();if(b.bottom<=0||b.top>=w||b.right<=0||b.left>=a)return null;const{top:L,left:W}=gn(y,b.left,b.top,i),j=b.width*i,T=b.height*i,H=(h=x.aiContext)!=null&&h.targetContainerTag?`${x.aiContext.targetContainerTag}`:"目标容器";return e.jsxs("div",{style:{position:"absolute",top:0,left:0,pointerEvents:"none"},children:[e.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:L-3,left:W-3,width:j+6,height:T+6,border:`2px dashed ${Je}`,borderRadius:$.sm,boxShadow:`0 0 0 3px ${Cn}`,zIndex:9}}),e.jsxs("div",{style:{position:"absolute",pointerEvents:"none",top:L-12,left:W+j-8,transform:"translateX(-100%)",padding:`${t.xxs}px ${t.sm}px`,fontFamily:E,fontSize:p.xs,lineHeight:"14px",fontWeight:500,color:r.bgWhite,background:Je,borderRadius:$.xs,whiteSpace:"nowrap",boxShadow:at.crisp,zIndex:11,maxWidth:Math.max(120,j),overflow:"hidden",textOverflow:"ellipsis"},children:[x.kind==="pending-duplicate"?"复制到":"移到"," <",H,">"]})]},v)})})}const je={"16:9":{w:1920,h:1080},"16:10":{w:1920,h:1200},"9:16":{w:1080,h:1920},"4:3":{w:1440,h:1080}},Se="16:9";function Jn(n){if(!n||typeof n!="string")return Se;const s=n.match(/<div\b[^>]*class\s*=\s*['"][^'"]*__nd-deck-wrap[^'"]*['"][^>]*data-deck-aspect\s*=\s*['"]([^'"]+)['"]/i)||n.match(/<div\b[^>]*data-deck-aspect\s*=\s*['"]([^'"]+)['"][^>]*class\s*=\s*['"][^'"]*__nd-deck-wrap[^'"]*['"]/i);return s&&je[s[1]]?s[1]:Se}function ss({tab:n,onTabChange:s,onClose:i,artifactExports:l=null,onExport:d=null,onToolbarGroups:f=null,title:m="幻灯",htmlSrc:c,htmlContent:y,selectedAnchor:u,onSelectChange:a,onTextEdit:w,onIframeReady:x,candidates:v,activeCandidateId:k,onSelectCandidate:b,onAddCandidate:L,onRemoveCandidate:W,onRenameCandidate:j,project:T,deckSpec:H,projectId:h,sessionId:P,decisionsReloadKey:_,comments:D=[],onAddComment:ee,onResolveComment:X,onDeleteComment:K,onRegionComment:F=null,tweaksAvailable:N=!1,pendingEdits:xe=[],onCommitMove:U,onCommitFreePosition:pe,onSubmitDragNote:gt,lastPendingEditId:ft=null,onApplyPendingEdits:ht,onUndoPending:mt,onClearAllPending:yt,canUndoPending:bt=!1,isStreaming:G=!1}){var Me,Re,Oe,He,_e,De,Ie,qe,Ne,Ue;const{panels:ge,setPanelVisible:wt}=en(),fe=!!((Me=ge==null?void 0:ge.tweaks)!=null&&Me.visible),vt=()=>wt("tweaks",!fe),[V,Ee]=o.useState(!1);o.useEffect(()=>{G&&n==="drag"&&(s==null||s("edit"))},[G,n,s]);const kt=o.useRef(null),[he,jt]=o.useState(!1),[Fe,St]=o.useState(null),[zt,Le]=o.useState(!1),[Y,te]=o.useState("fit"),[Z,$t]=o.useState({width:0,height:0}),[Ae,Et]=o.useState(0),[me,ne]=o.useState(""),[ye,se]=o.useState(!1),[I,Te]=o.useState(null),[be,re]=o.useState(!1),[C,ie]=o.useState(!1),[Q,le]=o.useState(!1),[oe,Pe]=o.useState(!0),O=o.useRef(null),we=o.useRef(null),We=o.useRef(null);o.useEffect(()=>{if(!h||!P)return;let g=!1;return Xe.read(h).then(({config:S})=>{g||S&&typeof S.tweaks_mode_enabled=="boolean"&&Pe(S.tweaks_mode_enabled)}).catch(()=>{}),()=>{g=!0}},[h,P]);const Ft=o.useCallback(g=>{Pe(g),!(!h||!P)&&Xe.patch(h,{tweaks_mode_enabled:g}).catch(()=>{})},[h,P]);o.useEffect(()=>{const g=O.current;if(!g)return;const S=()=>{const M=g.getBoundingClientRect();$t(R=>R.width===M.width&&R.height===M.height?R:{width:M.width,height:M.height})};S();let A=null;try{A=new ResizeObserver(S),A.observe(g)}catch{}return window.addEventListener("resize",S),()=>{A&&A.disconnect(),window.removeEventListener("resize",S)}},[n]);const Be=Jn(me),ae=je[Be]||je[Se],B=Y==="fit"?Z.width>0&&Z.height>0?Math.min(Z.width/ae.w,Z.height/ae.h):1:Y,Lt=v&&v.length>=1;o.useEffect(()=>{se(!1),Te(null)},[k]),o.useEffect(()=>{const g=A=>{var R;if(A.key!=="Escape")return;const M=A.target;((R=M==null?void 0:M.getAttribute)==null?void 0:R.call(M,"contenteditable"))!=="true"&&(C||be||Q||(u?a==null||a(null):i==null||i()))};window.addEventListener("keydown",g);let S=null;try{S=I,S==null||S.addEventListener("keydown",g)}catch{}return()=>{window.removeEventListener("keydown",g);try{S==null||S.removeEventListener("keydown",g)}catch{}}},[u,I,a,i,C,be,Q]),o.useEffect(()=>{const g=S=>{const A=S==null?void 0:S.data;if(!(!A||typeof A!="object")&&A.type==="canvas-page-change"&&Number.isFinite(A.page))try{window.dispatchEvent(new CustomEvent("nd-canvas-page-change",{detail:{page:A.page}}))}catch{}};return window.addEventListener("message",g),()=>window.removeEventListener("message",g)},[]),o.useEffect(()=>{if(!c){ne(y||""),se(!1);return}fetch(c).then(g=>g.text()).then(g=>{ne(g),se(!1)}).catch(()=>ne("<!-- 无法加载源码 -->"))},[c,y,Ae]);const At=g=>{a==null||a((g==null?void 0:g.anchor)||null)},Tt=g=>{w==null||w(g),console.log("[direct edit]",g)},Pt=o.useCallback(g=>{ne(g),se(!0)},[]),Wt=o.useCallback(g=>{try{Te(g.contentDocument)}catch{}x==null||x(g)},[x]),Bt=()=>{Et(g=>g+1),a==null||a(null)},Mt=()=>{re(!1),ie(!1),le(g=>!g)},Rt=()=>{re(!1),le(!1),ie(g=>!g)},ve=Array.isArray(D)?D.filter(g=>g.status!=="resolved").length:0,Ot=o.useMemo(()=>[cn({kind:"deck",exports:l,onExport:d}),{id:"mode",type:"mode",value:n,onChange:g=>{s==null||s(g),a==null||a(null)},items:[{id:"preview",icon:$n,label:"预览",title:"看成品(左右键翻页)"},{id:"edit",icon:tn,label:"编辑",title:"双击文字直接改 · 单击元素弹评论卡"},{id:"drag",icon:nn,label:"拖拽",disabled:G,title:G?"agent 正在跑,拖拽暂停以免和它抢同一份源码":"拖动元素调布局"},{id:"region",icon:En,label:"圈选",disabled:!F,title:F?"框一块地方说事 —— 框住谁、当时长什么样、你想说什么,一起交给 agent":"要先开一个会话才能把圈选交给 agent"},{id:"code",icon:sn,label:"源码",title:"看/改这一份 HTML"}]},n==="drag"&&{id:"dragmode",items:[{id:"free",icon:rn,label:V?"自由":"嵌入",active:V,title:V?"自由摆放 · 松手落到像素位置(P 切回嵌入)":"嵌入 · 松手按 DOM 树插进容器(P 切自由摆放)",onClick:()=>Ee(g=>!g)}]},n!=="code"&&{id:"zoom",items:[{id:"zoomOut",icon:ln,title:"缩小",onClick:()=>te(Math.max(.25,B-.1))},{id:"zoomLevel",label:`${Math.round(B*100)}%`,active:Y==="fit",title:Y==="fit"?"当前自适应窗口":"点一下自适应窗口",onClick:()=>te("fit")},{id:"zoomIn",icon:tt,title:"放大",onClick:()=>te(Math.min(3,B+.1))},{id:"fit",icon:on,title:"自适应窗口",onClick:()=>te("fit")}]},{id:"actions",items:[{id:"tweaks",icon:an,active:fe,disabled:!oe,title:oe?N?"Tweaks:拖控件实时改样式":"Tweaks(agent 还没暴露参数 — 跟它说一句让它 expose_tweaks)":"Tweaks 模式已关(在 System 里开)",onClick:vt},{id:"comment",icon:xt,label:ve>0?String(ve):void 0,active:Q,btnRef:We,title:"这一份上已有的评论",onClick:Mt},{id:"reload",icon:dn,title:"重载(agent 改完没刷新时用)",onClick:Bt},{id:"system",icon:lt,active:C,btnRef:we,title:"System:项目档案 / Tweaks 模式 / A11y",onClick:Rt}]}].filter(Boolean),[n,G,V,Y,B,fe,oe,N,Q,C,ve,F,l,d]);return e.jsxs(un,{kind:"deck",title:m,subtitle:Be,onClose:i,escToClose:!1,groups:Ot,onToolbarGroups:f,headerExtra:Lt?e.jsx(Pn,{candidates:v,activeId:k,onSelect:b,onAdd:L,onRemove:W,onRename:j}):null,children:[(n==="edit"||n==="preview"||n==="drag"||n==="region")&&e.jsxs("div",{ref:O,style:{flex:1,minHeight:0,position:"relative",display:"flex",flexDirection:"column"},children:[e.jsx(Tn,{src:ye?void 0:c,srcDoc:ye?me:c?void 0:y,mode:n==="drag"||n==="region"?"preview":n,onSelect:At,onTextEdit:Tt,onIframeReady:Wt,zoom:B,deckW:ae.w,deckH:ae.h},`${k||"default"}-${Ae}-${ye?"doc":"src"}`),n==="edit"&&u&&e.jsx(fn,{selectedAnchor:u,iframeRef:{current:(Re=O.current)==null?void 0:Re.querySelector("iframe")},zoom:B}),e.jsx(hn,{comments:D,iframeRef:{current:(Oe=O.current)==null?void 0:Oe.querySelector("iframe")},zoom:B,onSelectAnchor:g=>{n!=="edit"&&(s==null||s("edit")),a==null||a(g)}}),e.jsx(Qn,{edits:xe,iframeRef:{current:(He=O.current)==null?void 0:He.querySelector("iframe")},zoom:B}),e.jsx(Kn,{iframeDoc:I,active:n==="preview"}),e.jsx(mn,{active:n==="drag"&&!he,iframeRef:{current:(_e=O.current)==null?void 0:_e.querySelector("iframe")},zoom:B,pickDragSource:yn,isDragging:he}),e.jsx(bn,{active:n==="drag",iframeRef:{current:(De=O.current)==null?void 0:De.querySelector("iframe")},zoom:B,freeMode:V,onFreeModeChange:Ee,apiRef:kt,onDraggingChange:jt,onSelectionChange:g=>{St(g),g&&Le(!0)},onCommitMove:(g,S)=>{var M;if(S.duplicate){const R=(M=S.sourceEl)==null?void 0:M.cloneNode(!0);let Ge=()=>{};if(R&&S.targetContainer){try{R.removeAttribute("data-anchor")}catch{}S.beforeEl&&S.beforeEl.parentNode===S.targetContainer?S.targetContainer.insertBefore(R,S.beforeEl):S.targetContainer.appendChild(R),Ge=()=>{try{R.remove()}catch{}}}U==null||U(g,Ge);return}const A=vn({iframeDoc:I,sourceEl:S.sourceEl,targetContainer:S.targetContainer,beforeEl:S.beforeEl});U==null||U(g,A==null?void 0:A.revert)},onCommitFreePosition:(g,S)=>{const A=wn({sourceEl:S.sourceEl,parentEl:S.parentEl,styleDelta:g.styleDelta,runtimeLocks:g.runtimeLocks,parentNeedsRelative:g.parentNeedsRelative});pe==null||pe(g,A==null?void 0:A.revert)}}),e.jsx(kn,{active:n==="drag"&&zt&&!he&&!!Fe,iframeRef:{current:(Ie=O.current)==null?void 0:Ie.querySelector("iframe")},zoom:B,sourceEl:Fe,hasPendingEditId:!!ft,onSubmit:gt,onDismiss:()=>Le(!1)}),n==="edit"&&u&&I&&e.jsx(jn,{selectedAnchor:u,iframeDoc:I,iframeRef:{current:(qe=O.current)==null?void 0:qe.querySelector("iframe")},iframeRect:Z,zoom:B,comments:D,onClose:()=>a==null?void 0:a(null),onAddComment:ee,onResolveComment:X,onDeleteComment:K}),e.jsx(Sn,{active:n==="region"&&!!F,iframeRef:{current:(Ne=O.current)==null?void 0:Ne.querySelector("iframe")},zoom:B,onSubmit:g=>F==null?void 0:F(g),onExit:()=>s==null?void 0:s("preview")}),e.jsx(Vn,{edits:xe,onApply:ht,onUndo:mt,onClearAll:yt,canUndo:bt,isRunning:G})]}),n==="code"&&e.jsx(zn,{value:me,onChange:Pt,readOnly:!1}),be&&e.jsx(Mn,{anchorRef:we,onClose:()=>re(!1),iframeDoc:I}),C&&e.jsx(Nn,{anchorRef:we,onClose:()=>ie(!1),project:T,deckSpec:H,projectId:h,sessionId:P,decisionsReloadKey:_,onA11yClick:()=>{ie(!1),re(!0)},tweaksEnabled:oe,onTweaksEnabledChange:Ft}),Q&&e.jsx(Gn,{comments:D,iframeDoc:I,iframeRef:{current:(Ue=O.current)==null?void 0:Ue.querySelector("iframe")},anchorRef:We,onClose:()=>le(!1),onResolveComment:X,onDeleteComment:K,onSelectAnchor:g=>{le(!1),n!=="edit"&&(s==null||s("edit")),a==null||a(g)}})]})}export{ss as default};
@@ -1 +0,0 @@
1
- import{ai as o,aj as n}from"./MermaidBlock-DR1GikCv.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-LCL6LL3I-CtXrnUwF.js";import{_ as i}from"./MermaidBlock-DR1GikCv.js";import"./chunk-5VM5RSS4-3-KZ5AUz.js";import"./chunk-XXDRQBXY-BwZ7RbpQ.js";import"./chunk-POPQ4Y6H-dxddZlXt.js";import"./chunk-F27PBJKO-Bkwq2gGU.js";import"./index-GAamh1p4.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-LCL6LL3I-CtXrnUwF.js";import{_ as i}from"./MermaidBlock-DR1GikCv.js";import"./chunk-5VM5RSS4-3-KZ5AUz.js";import"./chunk-XXDRQBXY-BwZ7RbpQ.js";import"./chunk-POPQ4Y6H-dxddZlXt.js";import"./chunk-F27PBJKO-Bkwq2gGU.js";import"./index-GAamh1p4.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- @font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2) format("woff2"),url(/assets/KaTeX_AMS-Regular-DMm9YOAa.woff) format("woff"),url(/assets/KaTeX_AMS-Regular-DRggAlZN.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff) format("woff"),url(/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff) format("woff"),url(/assets/KaTeX_Fraktur-Regular-CB_wures.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Main-Bold-Cx986IdX.woff2) format("woff2"),url(/assets/KaTeX_Main-Bold-Jm3AIy58.woff) format("woff"),url(/assets/KaTeX_Main-Bold-waoOVXN0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2) format("woff2"),url(/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff) format("woff"),url(/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2) format("woff2"),url(/assets/KaTeX_Main-Italic-BMLOBm91.woff) format("woff"),url(/assets/KaTeX_Main-Italic-3WenGoN9.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Main-Regular-B22Nviop.woff2) format("woff2"),url(/assets/KaTeX_Main-Regular-Dr94JaBh.woff) format("woff"),url(/assets/KaTeX_Main-Regular-ypZvNtVU.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2) format("woff2"),url(/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff) format("woff"),url(/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Math-Italic-t53AETM-.woff2) format("woff2"),url(/assets/KaTeX_Math-Italic-DA0__PXp.woff) format("woff"),url(/assets/KaTeX_Math-Italic-flOr_0UB.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff) format("woff"),url(/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff) format("woff"),url(/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff) format("woff"),url(/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Script-Regular-D3wIWfF6.woff2) format("woff2"),url(/assets/KaTeX_Script-Regular-D5yQViql.woff) format("woff"),url(/assets/KaTeX_Script-Regular-C5JkGWo-.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2) format("woff2"),url(/assets/KaTeX_Size1-Regular-C195tn64.woff) format("woff"),url(/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2) format("woff2"),url(/assets/KaTeX_Size2-Regular-oD1tc_U0.woff) format("woff"),url(/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/KaTeX_Size3-Regular-CTq5MqoE.woff) format("woff"),url(/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2) format("woff2"),url(/assets/KaTeX_Size4-Regular-BF-4gkZK.woff) format("woff"),url(/assets/KaTeX_Size4-Regular-DWFBv043.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2) format("woff2"),url(/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff) format("woff"),url(/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf) format("truetype")}.katex{font: 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.47"}.katex .katex-mathml{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}@font-face{font-family:LXGW WenKai ND;src:url(/assets/lxgw-nd-regular-CpMw9Ehg.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:LXGW WenKai ND;src:url(/assets/lxgw-nd-bold-DbRfiTgo.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Long Cang ND;src:url(/assets/longcang-regular-C0uvTuKa.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Caveat ND;src:url(/assets/caveat-nd-CP6HlsNg.woff2) format("woff2");font-weight:400 700;font-style:normal;font-display:swap}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;background:#f9f8f6;color:#3a2a18;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,input,textarea,select{font-family:inherit;font-size:inherit;color:inherit}button{cursor:pointer;border:none;background:transparent;padding:0}a{color:inherit;text-decoration:none}.nd-composer textarea{caret-color:#a8362b}.nd-composer:focus-within{box-shadow:-2px 3px 4px #5d4a2c2e,-6px 13px 26px #5d4a2c38!important}::selection{background:#a8362b33}iframe{border:0}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#0000001f;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#0003}.nd-shimmer{background:linear-gradient(90deg,#4a4540,#4a4540 40%,#d97706,#4a4540 60%,#4a4540);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;animation:nd-shimmer-sweep 2.4s linear infinite}@keyframes nd-shimmer-sweep{0%{background-position:200% 0}to{background-position:-200% 0}}.katex-display{margin:8px 0;overflow-x:auto;overflow-y:hidden;padding:2px 0}.katex-error{color:#b0554f;font-family:SF Mono,Cascadia Code,Menlo,monospace;font-size:11px}[data-board-pane]{user-select:none;-webkit-user-select:none}[data-board-pane] input,[data-board-pane] textarea,[data-board-pane] [contenteditable=true]{user-select:text;-webkit-user-select:text}