@xiaobuyu/nodesign 0.0.7 → 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 (353) 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 +8 -0
  7. package/server/api/assets.js +21 -33
  8. package/server/api/board.js +29 -1
  9. package/server/api/browse.js +3 -2
  10. package/server/api/chatai.js +9 -8
  11. package/server/api/exports/cards.js +7 -6
  12. package/server/api/exports/docx-pdf.js +4 -1
  13. package/server/api/local.js +10 -8
  14. package/server/api/projects.js +19 -3
  15. package/server/api/publish.js +3 -2
  16. package/server/api/sessions-rewind.js +220 -0
  17. package/server/api/sessions.js +58 -194
  18. package/server/api/stage.js +35 -0
  19. package/server/api/turn-model-switch.js +109 -0
  20. package/server/api/turn.js +52 -88
  21. package/server/auth/middleware.js +29 -6
  22. package/server/auth/tier.js +27 -7
  23. package/server/auth/users-store.js +14 -1
  24. package/server/engine/agent/actor-trail.js +110 -0
  25. package/server/engine/agent/agent-shared.js +22 -52
  26. package/server/engine/agent/beat-state.js +61 -0
  27. package/server/engine/agent/cast.js +322 -0
  28. package/server/engine/agent/events.js +9 -2
  29. package/server/engine/agent/hooks/beat-gate.js +73 -0
  30. package/server/engine/agent/hooks/lifecycle.js +6 -2
  31. package/server/engine/agent/hooks/post-trim.js +1 -0
  32. package/server/engine/agent/hooks/pre-board-dirty.js +29 -0
  33. package/server/engine/agent/hooks/pre-defaults.js +206 -2
  34. package/server/engine/agent/hooks/pre-injectors.js +19 -2
  35. package/server/engine/agent/hooks/pre-peer-guard.js +88 -0
  36. package/server/engine/agent/hooks/pre-unknown-params.js +82 -0
  37. package/server/engine/agent/hooks/pre-workspace-scope-guard.js +33 -0
  38. package/server/engine/agent/hooks/resident-role-lifecycle.js +100 -0
  39. package/server/engine/agent/hooks/slot-alias.js +30 -0
  40. package/server/engine/agent/hooks/user-prompt-submit.js +197 -7
  41. package/server/engine/agent/hooks.js +76 -6
  42. package/server/engine/agent/isolation.js +25 -2
  43. package/server/engine/agent/memory-config.js +27 -1
  44. package/server/engine/agent/model-context.js +102 -18
  45. package/server/engine/agent/model-table.js +361 -58
  46. package/server/engine/agent/prompts/nodesign-prelude.md +566 -59
  47. package/server/engine/agent/prompts/tools/direct-edit-protocol.md +1 -1
  48. package/server/engine/agent/prompts/tools/generate-image-cookbook.md +2 -2
  49. package/server/engine/agent/prompts/tools/paint-still-cookbook.md +1 -1
  50. package/server/engine/agent/prompts/tools/site-reference.md +2 -1
  51. package/server/engine/agent/role-card.js +175 -0
  52. package/server/engine/agent/rp-mode.js +17 -0
  53. package/server/engine/agent/session-loop.js +26 -14
  54. package/server/engine/agent/stage-status.js +73 -0
  55. package/server/engine/agent/subagent-flight.js +73 -0
  56. package/server/engine/agent/system-prompts.js +41 -0
  57. package/server/engine/agent/tool-input-stream.js +165 -0
  58. package/server/engine/mcp/actor.js +59 -0
  59. package/server/engine/mcp/capability-gate.js +21 -2
  60. package/server/engine/mcp/index.js +116 -24
  61. package/server/engine/mcp/mode-profile.js +139 -0
  62. package/server/engine/mcp/server-name.js +19 -0
  63. package/server/engine/mcp/tools/artifact-session.js +2 -1
  64. package/server/engine/mcp/tools/browse-find-batch.js +76 -14
  65. package/server/engine/mcp/tools/browse.js +1 -1
  66. package/server/engine/mcp/tools/cast-role.js +167 -0
  67. package/server/engine/mcp/tools/draw-trend.js +104 -0
  68. package/server/engine/mcp/tools/edit-board-schema.js +56 -0
  69. package/server/engine/mcp/tools/edit-board.js +569 -0
  70. package/server/engine/mcp/tools/look-at-board.js +4 -3
  71. package/server/engine/mcp/tools/open-sheet.js +242 -0
  72. package/server/engine/mcp/tools/organize-board.js +19 -5
  73. package/server/engine/mcp/tools/paint-still.js +1 -1
  74. package/server/engine/mcp/tools/pin-to-board.js +78 -3
  75. package/server/engine/mcp/tools/read-board.js +109 -16
  76. package/server/engine/mcp/tools/read-tavern-json.js +87 -19
  77. package/server/engine/mcp/tools/report-issue.js +1 -0
  78. package/server/engine/mcp/tools/role-memory.js +83 -0
  79. package/server/engine/mcp/tools/roll-dice.js +82 -0
  80. package/server/engine/mcp/tools/roll-film.js +1 -1
  81. package/server/engine/mcp/tools/screenshot.js +2 -2
  82. package/server/engine/mcp/tools/set-vars.js +150 -0
  83. package/server/engine/mcp/tools/sheet-replan.js +46 -0
  84. package/server/engine/mcp/tools/web-search.js +1 -1
  85. package/server/engine/mcp/tools/write-on-board-flow.js +108 -0
  86. package/server/engine/mcp/tools/write-on-board-place.js +211 -0
  87. package/server/engine/mcp/tools/write-on-board-role-anchor.js +48 -0
  88. package/server/engine/mcp/tools/write-on-board-schema.js +125 -0
  89. package/server/engine/mcp/tools/write-on-board.js +567 -107
  90. package/server/engine/plugins/nodesign/skills/blackboard-rp/SKILL.md +215 -0
  91. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/SKILL.md +11 -3
  92. package/server/engine/plugins/nodesign/skills/docx-craft/SKILL.md +34 -4
  93. package/server/engine/plugins/nodesign/skills/site-craft/SKILL.md +20 -4
  94. package/server/engine/plugins/nodesign/skills/story-craft/SKILL.md +94 -0
  95. package/server/engine/plugins/nodesign/skills/story-import/SKILL.md +112 -0
  96. package/server/engine/plugins/nodesign/skills/story-intimacy/SKILL.md +72 -0
  97. package/server/engine/plugins/nodesign/skills/story-voice/SKILL.md +66 -0
  98. package/server/engine/plugins/nodesign/skills/story-voice/voices//345/206/267/347/241/254.md +33 -0
  99. package/server/engine/plugins/nodesign/skills/story-voice/voices//346/203/205/346/204/237/347/233/264/347/273/231.md +42 -0
  100. package/server/engine/plugins/nodesign/skills/story-voice/voices//346/204/217/350/257/206/346/265/201.md +42 -0
  101. package/server/engine/plugins/nodesign/skills/story-voice/voices//346/255/246/344/276/240/347/231/275/350/257/235.md +34 -0
  102. package/server/engine/plugins/nodesign/skills/story-voice/voices//347/224/237/346/264/273/346/265/201.md +35 -0
  103. package/server/engine/plugins/nodesign/skills/story-voice/voices//347/231/275/346/217/217.md +37 -0
  104. package/server/engine/plugins/nodesign/skills/story-voice/voices//350/210/236/345/217/260/345/211/247.md +32 -0
  105. package/server/engine/plugins/nodesign/skills/story-voice/voices//351/230/266/346/256/265/345/210/207/346/215/242.md +42 -0
  106. package/server/engine/runs/board-seater.js +272 -0
  107. package/server/engine/runs/board-tasklist.js +90 -48
  108. package/server/engine/runs/turn-relay.js +24 -2
  109. package/server/engine/runs/user-chalk-echo.js +44 -0
  110. package/server/index.js +2 -0
  111. package/server/lib/board-anchor.js +49 -0
  112. package/server/lib/board-dirty.js +93 -0
  113. package/server/lib/board-excerpt.js +80 -0
  114. package/server/lib/board-follow.js +111 -0
  115. package/server/lib/board-groups.js +1 -5
  116. package/server/lib/board-hero.js +3 -1
  117. package/server/lib/board-kind-sizes.js +36 -0
  118. package/server/lib/board-lanes.js +58 -0
  119. package/server/lib/board-obstacles.js +80 -0
  120. package/server/lib/board-relations.js +5 -1
  121. package/server/lib/board-sheets.js +467 -0
  122. package/server/lib/board-shelf.js +86 -0
  123. package/server/lib/board-transform.js +62 -0
  124. package/server/lib/canvas-id.js +18 -1
  125. package/server/lib/chalk-flow.js +88 -0
  126. package/server/lib/chalk-rewrite.js +63 -0
  127. package/server/lib/chalk-size-pref.js +48 -0
  128. package/server/lib/chalk.js +42 -3
  129. package/server/lib/ingress/forward-openai-chat.js +16 -4
  130. package/server/lib/ingress/openai-chat.js +23 -12
  131. package/server/lib/ingress/session-routes.js +3 -3
  132. package/server/lib/ingress/stream-watchdog.js +53 -0
  133. package/server/lib/ingress/upstream-billing.js +15 -0
  134. package/server/lib/ingress/upstream-error-hints.js +36 -0
  135. package/server/lib/json-preview.js +58 -0
  136. package/server/lib/model-ingress.js +26 -1
  137. package/server/lib/moderation.js +10 -5
  138. package/server/lib/quota.js +26 -6
  139. package/server/lib/rect.js +50 -0
  140. package/server/lib/screen.js +36 -0
  141. package/server/lib/sheet-state.js +19 -0
  142. package/server/lib/sketch-array.js +118 -0
  143. package/server/lib/sketch-hatch.js +99 -0
  144. package/server/lib/sketch-layout.js +269 -69
  145. package/server/lib/sketch-shapes.js +152 -0
  146. package/server/lib/sketch-stencils.js +170 -0
  147. package/server/lib/state-table.js +237 -0
  148. package/server/lib/state-trend.js +94 -0
  149. package/server/lib/state-triggers.js +199 -0
  150. package/server/lib/tavern-json.js +48 -0
  151. package/server/lib/user-uploads.js +88 -0
  152. package/server/projects/board-limits.js +5 -3
  153. package/server/projects/board-sanitize.js +220 -10
  154. package/server/projects/board-store.js +95 -6
  155. package/server/projects/session-jsonl.js +110 -0
  156. package/server/projects/store.js +56 -3
  157. package/server/projects/viewpoint-store.js +35 -3
  158. package/server/projects/workspace-slots.js +30 -0
  159. package/server/projects/workspace-templates.js +29 -0
  160. package/server/projects/workspace.js +16 -17
  161. package/server/runtime/capabilities.js +6 -2
  162. package/server/shared/locales.js +70 -0
  163. package/server/shared/messages-en.js +69 -0
  164. package/server/shared/messages.js +65 -0
  165. package/server/ws/broker.js +3 -0
  166. package/server/ws/index.js +43 -3
  167. package/web/README.md +1 -1
  168. package/web/dist/assets/{BrowserWindow-BoOBaIyz.js → BrowserWindow-CcaGRWz5.js} +1 -1
  169. package/web/dist/assets/DeckWindow-BIr2KGFT.js +6 -0
  170. package/web/dist/assets/{DocxWindow-B_u6aX9o.js → DocxWindow-B9KZmU5z.js} +2 -2
  171. package/web/dist/assets/{MermaidBlock-BO-46Du5.js → MermaidBlock-DrfRnz8E.js} +43 -43
  172. package/web/dist/assets/{SiteWindow-ConPmzdM.js → SiteWindow-CJOjCF7d.js} +6 -6
  173. package/web/dist/assets/{abnfDiagram-VCTEODGH-FCO9yf-n.js → abnfDiagram-VCTEODGH-CUZbQGIg.js} +1 -1
  174. package/web/dist/assets/{arc-BLcEOSRX.js → arc-C1-HSUny.js} +1 -1
  175. package/web/dist/assets/{architectureDiagram-5GKGNRK7-kxiX4TeN.js → architectureDiagram-5GKGNRK7-B5nwvu60.js} +2 -2
  176. package/web/dist/assets/{blockDiagram-NRAW4CY4-CptFksix.js → blockDiagram-NRAW4CY4-uPPuFLwR.js} +1 -1
  177. package/web/dist/assets/{c4Diagram-UCG6FXSJ-Dxmxj34F.js → c4Diagram-UCG6FXSJ-C0mKBFlz.js} +1 -1
  178. package/web/dist/assets/channel-BxpWNOGU.js +1 -0
  179. package/web/dist/assets/{chunk-2Q5K7J3B-D9inx5oo.js → chunk-2Q5K7J3B-Cs0rlZ4q.js} +1 -1
  180. package/web/dist/assets/{chunk-5VM5RSS4-DydfHlEc.js → chunk-5VM5RSS4-DtR63oYb.js} +1 -1
  181. package/web/dist/assets/{chunk-F27PBJKO-BO7GxhSv.js → chunk-F27PBJKO-B3MRdezJ.js} +1 -1
  182. package/web/dist/assets/{chunk-G27WJ6UU-BzP6YiQ_.js → chunk-G27WJ6UU-BtwntwpS.js} +1 -1
  183. package/web/dist/assets/{chunk-JWPE2WC7-CHcgcd0s.js → chunk-JWPE2WC7-BHsTe5PD.js} +1 -1
  184. package/web/dist/assets/{chunk-LCL6LL3I-D2Wg5JtX.js → chunk-LCL6LL3I-knY15Qdm.js} +1 -1
  185. package/web/dist/assets/{chunk-POPQ4Y6H-B2fCRfpM.js → chunk-POPQ4Y6H-C51tgK_I.js} +1 -1
  186. package/web/dist/assets/{chunk-SVP7TREG-JSLcsRlZ.js → chunk-SVP7TREG-CnwRZmF_.js} +1 -1
  187. package/web/dist/assets/{chunk-XXDRQBXY-BCjvaeHm.js → chunk-XXDRQBXY-BtXzVF-_.js} +1 -1
  188. package/web/dist/assets/classDiagram-DTDB5LWJ-DUEKmDfo.js +1 -0
  189. package/web/dist/assets/classDiagram-v2-JRS7N3AN-DUEKmDfo.js +1 -0
  190. package/web/dist/assets/{cose-bilkent-JH36ORCC-0uKv6oJ7.js → cose-bilkent-JH36ORCC-CzWlGP6i.js} +1 -1
  191. package/web/dist/assets/{cynefin-OW5HDTMX-Bvt-gEmA.js → cynefin-OW5HDTMX-vK64EGSv.js} +1 -1
  192. package/web/dist/assets/{cynefinDiagram-5FMLGOSQ-C9Ht02qC.js → cynefinDiagram-5FMLGOSQ-Bs3g1Gvh.js} +1 -1
  193. package/web/dist/assets/{dagre-3AP2YEHR-BfxZny4s.js → dagre-3AP2YEHR-BhgkYe8V.js} +1 -1
  194. package/web/dist/assets/{diagram-S7CK7UJ4-CrE0ZETE.js → diagram-S7CK7UJ4-C_6mvD2V.js} +1 -1
  195. package/web/dist/assets/{diagram-UQ7AKVKN-BO8VQ4Fx.js → diagram-UQ7AKVKN-qW7tssUW.js} +1 -1
  196. package/web/dist/assets/{diagram-VSXAHHWV-CHUZnR9F.js → diagram-VSXAHHWV-txJPHpvG.js} +1 -1
  197. package/web/dist/assets/{diagram-VX7I27RA-DYQAz1Vu.js → diagram-VX7I27RA-CQTMsCnL.js} +1 -1
  198. package/web/dist/assets/{diagram-Z3DM3KII-BDjivgLr.js → diagram-Z3DM3KII--cb1hoE6.js} +1 -1
  199. package/web/dist/assets/{ebnfDiagram-PWID7BFC-Bpe_QVbH.js → ebnfDiagram-PWID7BFC-Da6lDU77.js} +1 -1
  200. package/web/dist/assets/{erDiagram-SSCWMZ5O-BxhwuAu1.js → erDiagram-SSCWMZ5O-DGCMrsQn.js} +1 -1
  201. package/web/dist/assets/{flowDiagram-A5DVABFB-CCw2H08-.js → flowDiagram-A5DVABFB-GdOL_qno.js} +1 -1
  202. package/web/dist/assets/{ganttDiagram-EL5Y4UJY-DtTc7MyI.js → ganttDiagram-EL5Y4UJY-Cx1F_jBK.js} +4 -4
  203. package/web/dist/assets/{gitGraphDiagram-WWUBYQGX-BvORxMd2.js → gitGraphDiagram-WWUBYQGX-B5_6JhR3.js} +1 -1
  204. package/web/dist/assets/hand-CuvZZQGW.webp +0 -0
  205. package/web/dist/assets/index-BYKfMnmv.js +2759 -0
  206. package/web/dist/assets/index-CW7VsrVg.css +1 -0
  207. package/web/dist/assets/{infoDiagram-RXCK75RN-DMcrkypD.js → infoDiagram-RXCK75RN-CjvKpSPA.js} +1 -1
  208. package/web/dist/assets/{ishikawaDiagram-5VMMS53U-CZkTIbe-.js → ishikawaDiagram-5VMMS53U-CxLoAPhx.js} +1 -1
  209. package/web/dist/assets/{journeyDiagram-EYS64GPL-DR0XazdE.js → journeyDiagram-EYS64GPL-BfvS1upJ.js} +1 -1
  210. package/web/dist/assets/{kanban-definition-3QL26DDD-DN8VbwVu.js → kanban-definition-3QL26DDD-DKPPu0w4.js} +1 -1
  211. package/web/dist/assets/{layout-9_paCbyt.js → layout-Dhgck-Zo.js} +1 -1
  212. package/web/dist/assets/{linear-g6Ct012e.js → linear-DMSQ-aUw.js} +1 -1
  213. package/web/dist/assets/lxgw-nd-app-bold-D1pKA1bR.woff2 +0 -0
  214. package/web/dist/assets/lxgw-nd-app-regular-BDe3d26v.woff2 +0 -0
  215. package/web/dist/assets/lxgw-nd-bold-Bufvlg03.woff2 +0 -0
  216. package/web/dist/assets/lxgw-nd-regular-DQwoI4OP.woff2 +0 -0
  217. package/web/dist/assets/lxgwwenkaiscreen-subset-100-DLPe7tEt.woff2 +0 -0
  218. package/web/dist/assets/lxgwwenkaiscreen-subset-101-d3VsZKWT.woff2 +0 -0
  219. package/web/dist/assets/lxgwwenkaiscreen-subset-102-ClzJuLq6.woff2 +0 -0
  220. package/web/dist/assets/lxgwwenkaiscreen-subset-103-DuDnQ6K-.woff2 +0 -0
  221. package/web/dist/assets/lxgwwenkaiscreen-subset-104-kPGW3Eem.woff2 +0 -0
  222. package/web/dist/assets/lxgwwenkaiscreen-subset-105-BzD54h-0.woff2 +0 -0
  223. package/web/dist/assets/lxgwwenkaiscreen-subset-106-BQ7fIzlx.woff2 +0 -0
  224. package/web/dist/assets/lxgwwenkaiscreen-subset-107-D8tDfFHI.woff2 +0 -0
  225. package/web/dist/assets/lxgwwenkaiscreen-subset-108-tGhkpwep.woff2 +0 -0
  226. package/web/dist/assets/lxgwwenkaiscreen-subset-109-7SMVSrly.woff2 +0 -0
  227. package/web/dist/assets/lxgwwenkaiscreen-subset-110-_uDKrFed.woff2 +0 -0
  228. package/web/dist/assets/lxgwwenkaiscreen-subset-111-Bio825RE.woff2 +0 -0
  229. package/web/dist/assets/lxgwwenkaiscreen-subset-112-D2ee0i-C.woff2 +0 -0
  230. package/web/dist/assets/lxgwwenkaiscreen-subset-113-JPFVDrga.woff2 +0 -0
  231. package/web/dist/assets/lxgwwenkaiscreen-subset-114-BcfxYA4w.woff2 +0 -0
  232. package/web/dist/assets/lxgwwenkaiscreen-subset-115-B1HeeOsd.woff2 +0 -0
  233. package/web/dist/assets/lxgwwenkaiscreen-subset-116-hY12tXpq.woff2 +0 -0
  234. package/web/dist/assets/lxgwwenkaiscreen-subset-117-BvuZwmre.woff2 +0 -0
  235. package/web/dist/assets/lxgwwenkaiscreen-subset-118-tzvs_H7j.woff2 +0 -0
  236. package/web/dist/assets/lxgwwenkaiscreen-subset-119-J2DWuYDN.woff2 +0 -0
  237. package/web/dist/assets/lxgwwenkaiscreen-subset-21-pDubCJV5.woff2 +0 -0
  238. package/web/dist/assets/lxgwwenkaiscreen-subset-22-ChAPMpqp.woff2 +0 -0
  239. package/web/dist/assets/lxgwwenkaiscreen-subset-23-BBx3oNpT.woff2 +0 -0
  240. package/web/dist/assets/lxgwwenkaiscreen-subset-24-CYt-Oagk.woff2 +0 -0
  241. package/web/dist/assets/lxgwwenkaiscreen-subset-25-Cx3j-ZUv.woff2 +0 -0
  242. package/web/dist/assets/lxgwwenkaiscreen-subset-26-B9AfZ3LL.woff2 +0 -0
  243. package/web/dist/assets/lxgwwenkaiscreen-subset-27-Bh2s9MNE.woff2 +0 -0
  244. package/web/dist/assets/lxgwwenkaiscreen-subset-28-C02JPoKP.woff2 +0 -0
  245. package/web/dist/assets/lxgwwenkaiscreen-subset-29-T_tbUGhk.woff2 +0 -0
  246. package/web/dist/assets/lxgwwenkaiscreen-subset-30-DMfyNzhz.woff2 +0 -0
  247. package/web/dist/assets/lxgwwenkaiscreen-subset-31-DFfdzbkg.woff2 +0 -0
  248. package/web/dist/assets/lxgwwenkaiscreen-subset-32-Bs1fz2iW.woff2 +0 -0
  249. package/web/dist/assets/lxgwwenkaiscreen-subset-33-cpB96OkZ.woff2 +0 -0
  250. package/web/dist/assets/lxgwwenkaiscreen-subset-34-BhinPYWX.woff2 +0 -0
  251. package/web/dist/assets/lxgwwenkaiscreen-subset-35-D_njRQqA.woff2 +0 -0
  252. package/web/dist/assets/lxgwwenkaiscreen-subset-36-DqXlLE3t.woff2 +0 -0
  253. package/web/dist/assets/lxgwwenkaiscreen-subset-37-j5LbvMph.woff2 +0 -0
  254. package/web/dist/assets/lxgwwenkaiscreen-subset-38-oO4jWdKm.woff2 +0 -0
  255. package/web/dist/assets/lxgwwenkaiscreen-subset-39-CabsX4rw.woff2 +0 -0
  256. package/web/dist/assets/lxgwwenkaiscreen-subset-4-PatS3YHh.woff2 +0 -0
  257. package/web/dist/assets/lxgwwenkaiscreen-subset-40-yrLg3C3e.woff2 +0 -0
  258. package/web/dist/assets/lxgwwenkaiscreen-subset-41-DBXmCQhc.woff2 +0 -0
  259. package/web/dist/assets/lxgwwenkaiscreen-subset-42-Bqij_UiQ.woff2 +0 -0
  260. package/web/dist/assets/lxgwwenkaiscreen-subset-43-D3kp0Ntc.woff2 +0 -0
  261. package/web/dist/assets/lxgwwenkaiscreen-subset-44-B_BNGvK4.woff2 +0 -0
  262. package/web/dist/assets/lxgwwenkaiscreen-subset-45-CZc0cQWs.woff2 +0 -0
  263. package/web/dist/assets/lxgwwenkaiscreen-subset-46-CHQX5Kd9.woff2 +0 -0
  264. package/web/dist/assets/lxgwwenkaiscreen-subset-47-Ci8gLrHA.woff2 +0 -0
  265. package/web/dist/assets/lxgwwenkaiscreen-subset-48-run3ugD3.woff2 +0 -0
  266. package/web/dist/assets/lxgwwenkaiscreen-subset-49-DgfiUb6u.woff2 +0 -0
  267. package/web/dist/assets/lxgwwenkaiscreen-subset-5-B0CtGbX_.woff2 +0 -0
  268. package/web/dist/assets/lxgwwenkaiscreen-subset-50-CdCG-POr.woff2 +0 -0
  269. package/web/dist/assets/lxgwwenkaiscreen-subset-51-L2okeQZ2.woff2 +0 -0
  270. package/web/dist/assets/lxgwwenkaiscreen-subset-52-BZAqyGJW.woff2 +0 -0
  271. package/web/dist/assets/lxgwwenkaiscreen-subset-53-B0xWqLeU.woff2 +0 -0
  272. package/web/dist/assets/lxgwwenkaiscreen-subset-54-BZVQX-EA.woff2 +0 -0
  273. package/web/dist/assets/lxgwwenkaiscreen-subset-55-093mkIUJ.woff2 +0 -0
  274. package/web/dist/assets/lxgwwenkaiscreen-subset-56-CbhWG8G-.woff2 +0 -0
  275. package/web/dist/assets/lxgwwenkaiscreen-subset-57-pLQuvo6c.woff2 +0 -0
  276. package/web/dist/assets/lxgwwenkaiscreen-subset-58-BHhoY50x.woff2 +0 -0
  277. package/web/dist/assets/lxgwwenkaiscreen-subset-59-D1_6DuIQ.woff2 +0 -0
  278. package/web/dist/assets/lxgwwenkaiscreen-subset-6-BnAelmYU.woff2 +0 -0
  279. package/web/dist/assets/lxgwwenkaiscreen-subset-60-HDBIuLTZ.woff2 +0 -0
  280. package/web/dist/assets/lxgwwenkaiscreen-subset-61-C-c13SeU.woff2 +0 -0
  281. package/web/dist/assets/lxgwwenkaiscreen-subset-62-kHRVOhZ2.woff2 +0 -0
  282. package/web/dist/assets/lxgwwenkaiscreen-subset-63-C0MCsvFv.woff2 +0 -0
  283. package/web/dist/assets/lxgwwenkaiscreen-subset-64-DZekguCj.woff2 +0 -0
  284. package/web/dist/assets/lxgwwenkaiscreen-subset-65-CtP6c3IU.woff2 +0 -0
  285. package/web/dist/assets/lxgwwenkaiscreen-subset-66-DLVWoMSf.woff2 +0 -0
  286. package/web/dist/assets/lxgwwenkaiscreen-subset-67-BVuOnayH.woff2 +0 -0
  287. package/web/dist/assets/lxgwwenkaiscreen-subset-68-DpxQ6Mnx.woff2 +0 -0
  288. package/web/dist/assets/lxgwwenkaiscreen-subset-69-qesBxLmC.woff2 +0 -0
  289. package/web/dist/assets/lxgwwenkaiscreen-subset-70-BBt1xN7h.woff2 +0 -0
  290. package/web/dist/assets/lxgwwenkaiscreen-subset-71-BWqZacwB.woff2 +0 -0
  291. package/web/dist/assets/lxgwwenkaiscreen-subset-72-B1wP_Yst.woff2 +0 -0
  292. package/web/dist/assets/lxgwwenkaiscreen-subset-73-C99T7jNZ.woff2 +0 -0
  293. package/web/dist/assets/lxgwwenkaiscreen-subset-74-DrUTsWBe.woff2 +0 -0
  294. package/web/dist/assets/lxgwwenkaiscreen-subset-75-C4M5XXQe.woff2 +0 -0
  295. package/web/dist/assets/lxgwwenkaiscreen-subset-76-Bq8spVWF.woff2 +0 -0
  296. package/web/dist/assets/lxgwwenkaiscreen-subset-77-D9vNupE2.woff2 +0 -0
  297. package/web/dist/assets/lxgwwenkaiscreen-subset-78-D6th7Gnu.woff2 +0 -0
  298. package/web/dist/assets/lxgwwenkaiscreen-subset-79-bezM85cS.woff2 +0 -0
  299. package/web/dist/assets/lxgwwenkaiscreen-subset-80-DD8pnhG2.woff2 +0 -0
  300. package/web/dist/assets/lxgwwenkaiscreen-subset-81-N6jtSyBs.woff2 +0 -0
  301. package/web/dist/assets/lxgwwenkaiscreen-subset-82-D6c180bZ.woff2 +0 -0
  302. package/web/dist/assets/lxgwwenkaiscreen-subset-83-em17AadM.woff2 +0 -0
  303. package/web/dist/assets/lxgwwenkaiscreen-subset-84-CJ8gdrMK.woff2 +0 -0
  304. package/web/dist/assets/lxgwwenkaiscreen-subset-85-9PPGO1eB.woff2 +0 -0
  305. package/web/dist/assets/lxgwwenkaiscreen-subset-86-CjWPf-u5.woff2 +0 -0
  306. package/web/dist/assets/lxgwwenkaiscreen-subset-87-8D_X_yOC.woff2 +0 -0
  307. package/web/dist/assets/lxgwwenkaiscreen-subset-88-9vtKFPBx.woff2 +0 -0
  308. package/web/dist/assets/lxgwwenkaiscreen-subset-89-BhE5jAKX.woff2 +0 -0
  309. package/web/dist/assets/lxgwwenkaiscreen-subset-90-D2Npfm5E.woff2 +0 -0
  310. package/web/dist/assets/lxgwwenkaiscreen-subset-91-C6Ft1-Eu.woff2 +0 -0
  311. package/web/dist/assets/lxgwwenkaiscreen-subset-97-CaExyQP9.woff2 +0 -0
  312. package/web/dist/assets/lxgwwenkaiscreen-subset-98-CPoVbsUd.woff2 +0 -0
  313. package/web/dist/assets/lxgwwenkaiscreen-subset-99-ZUQZGVgH.woff2 +0 -0
  314. package/web/dist/assets/{mindmap-definition-FBJOCRG2-BGt4omYC.js → mindmap-definition-FBJOCRG2-CalfL_Kn.js} +1 -1
  315. package/web/dist/assets/{pegDiagram-XKGWAZYB-uSfS-PBE.js → pegDiagram-XKGWAZYB-D9mVWz7l.js} +1 -1
  316. package/web/dist/assets/pending-edit-apply-kwMFWsUe.js +31 -0
  317. package/web/dist/assets/{pieDiagram-E7YTZNPT-DpeI935H.js → pieDiagram-E7YTZNPT-DELzbZNS.js} +1 -1
  318. package/web/dist/assets/{quadrantDiagram-AXDQQJYC-B7IuNvWa.js → quadrantDiagram-AXDQQJYC-TZqp4mfA.js} +1 -1
  319. package/web/dist/assets/{railroadDiagram-O6MQD6OU-ARzYpPQI.js → railroadDiagram-O6MQD6OU-DxX59f0i.js} +1 -1
  320. package/web/dist/assets/{requirementDiagram-EFPCY7ZU-Cj4upkAo.js → requirementDiagram-EFPCY7ZU-DFdsJLIe.js} +1 -1
  321. package/web/dist/assets/{rotate-cw-CXJcyHWk.js → rotate-cw-62liz7LX.js} +1 -1
  322. package/web/dist/assets/{sankeyDiagram-P5KCCOFB-OaVwSnLP.js → sankeyDiagram-P5KCCOFB-ByYcd3fG.js} +1 -1
  323. package/web/dist/assets/{sequenceDiagram-WJ2MYXX4-1yrUbq4t.js → sequenceDiagram-WJ2MYXX4-Bj-ml1jS.js} +1 -1
  324. package/web/dist/assets/{sizeCapture-X5ZJPWSS-nYH5p9D6.js → sizeCapture-X5ZJPWSS-KhsXThyD.js} +1 -1
  325. package/web/dist/assets/{square-dashed-mouse-pointer-CTtTVKoH.js → square-dashed-mouse-pointer-D_VrqVpy.js} +1 -1
  326. package/web/dist/assets/{stateDiagram-HBIQ2CUA-Dj5HvyNq.js → stateDiagram-HBIQ2CUA-BJlpHfWU.js} +1 -1
  327. package/web/dist/assets/stateDiagram-v2-4QOOHH4V-CR2kYAH2.js +1 -0
  328. package/web/dist/assets/{swimlanes-XN3QIQJK-umeT0HpB.js → swimlanes-XN3QIQJK-DUB9OJVs.js} +1 -1
  329. package/web/dist/assets/swimlanesDiagram-VK2B7HYN-BitOxnG2.js +8 -0
  330. package/web/dist/assets/{timeline-definition-24CTP7MA-MqnQfHKB.js → timeline-definition-24CTP7MA-C03NX82A.js} +1 -1
  331. package/web/dist/assets/{vennDiagram-4TSXK5OY-b2liyZra.js → vennDiagram-4TSXK5OY-B9pjzngp.js} +1 -1
  332. package/web/dist/assets/{wardleyDiagram-VM6X3IG4-QMK-zNh1.js → wardleyDiagram-VM6X3IG4-UqWq_mcT.js} +1 -1
  333. package/web/dist/assets/{xychartDiagram-S5SC5T6Z-D5Mc6tfA.js → xychartDiagram-S5SC5T6Z-D2pDKtOv.js} +1 -1
  334. package/web/dist/index.html +2 -2
  335. package/server/engine/mcp/tools/arrange-on-board.js +0 -126
  336. package/server/engine/mcp/tools/create-on-board.js +0 -152
  337. package/server/engine/mcp/tools/edit-sketch.js +0 -167
  338. package/server/engine/mcp/tools/relate-on-board.js +0 -150
  339. package/server/engine/mcp/tools/sketch-on-board.js +0 -345
  340. package/server/engine/plugins/nodesign/skills/rp-craft/SKILL.md +0 -235
  341. 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
  342. package/server/engine/plugins/nodesign/skills/rp-craft//346/274/224/345/207/272.template.js +0 -268
  343. package/web/dist/assets/DeckWindow-Bg3rgkvi.js +0 -11
  344. package/web/dist/assets/channel-DFyiuGL0.js +0 -1
  345. package/web/dist/assets/classDiagram-DTDB5LWJ-Aw1f8z-b.js +0 -1
  346. package/web/dist/assets/classDiagram-v2-JRS7N3AN-Aw1f8z-b.js +0 -1
  347. package/web/dist/assets/index-C0KUf6Wd.css +0 -1
  348. package/web/dist/assets/index-DGG5wIZs.js +0 -2118
  349. package/web/dist/assets/lxgw-nd-bold-DbRfiTgo.woff2 +0 -0
  350. package/web/dist/assets/lxgw-nd-regular-CpMw9Ehg.woff2 +0 -0
  351. package/web/dist/assets/pending-edit-apply-uP4uvrOD.js +0 -31
  352. package/web/dist/assets/stateDiagram-v2-4QOOHH4V-kJ1m_zJT.js +0 -1
  353. package/web/dist/assets/swimlanesDiagram-VK2B7HYN-DPSkMbbl.js +0 -8
@@ -1,18 +1,18 @@
1
- import{c as De,j as i,W as Et,o as we,u as Rt,r,p as $e,I as Ie,t as Tt,L as Ot,i as I,q as Je,G as T,R as se,a as $t,E as et,s as Dt,w as At,h as le,x as tt,y as Pt,O as jt,z as be,D as Nt,J as Xe,K as Qe,N as Ft,Q as Mt,U as zt,V as Ye,n as Lt,A as Wt,Y as Bt,d as B,F as ye,e as ve,P as Ut}from"./index-DGG5wIZs.js";import{a as Ht,b as _t,c as Gt,d as Kt,E as Vt,C as qt,I as It,G as Jt,p as Xt,D as Qt,P as Yt,R as Zt,e as er}from"./pending-edit-apply-uP4uvrOD.js";import{E as tr,S as rr}from"./square-dashed-mouse-pointer-CTtTVKoH.js";import{A as nr,R as sr}from"./rotate-cw-CXJcyHWk.js";/**
1
+ import{c as De,j as i,W as Et,o as we,u as Rt,r,p as $e,I as Ie,t as Tt,L as Ot,i as I,q as Je,G as T,R as se,a as $t,E as et,s as Dt,w as At,h as le,x as tt,y as Pt,O as jt,z as be,D as Nt,J as Xe,K as Ze,N as Ft,Q as Mt,U as zt,V as Qe,n as Lt,A as Wt,Y as Bt,d as B,Z as Ut,F as ye,e as ve,P as Ht}from"./index-BYKfMnmv.js";import{a as _t,b as Gt,c as Kt,d as Vt,E as qt,C as It,I as Jt,G as Xt,p as Zt,D as Qt,P as Yt,R as er,e as tr}from"./pending-edit-apply-kwMFWsUe.js";import{E as rr,S as nr}from"./square-dashed-mouse-pointer-D_VrqVpy.js";import{A as sr,R as lr}from"./rotate-cw-62liz7LX.js";/**
2
2
  * @license lucide-react v0.468.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const lr=De("CloudOff",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193",key:"yfwify"}],["path",{d:"M21.532 16.5A4.5 4.5 0 0 0 17.5 10h-1.79A7.008 7.008 0 0 0 10 5.07",key:"jlfiyv"}]]);/**
6
+ */const cr=De("CloudOff",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193",key:"yfwify"}],["path",{d:"M21.532 16.5A4.5 4.5 0 0 0 17.5 10h-1.79A7.008 7.008 0 0 0 10 5.07",key:"jlfiyv"}]]);/**
7
7
  * @license lucide-react v0.468.0 - ISC
8
8
  *
9
9
  * This source code is licensed under the ISC license.
10
10
  * See the LICENSE file in the root directory of this source tree.
11
- */const cr=De("Smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);/**
11
+ */const ir=De("Smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);/**
12
12
  * @license lucide-react v0.468.0 - ISC
13
13
  *
14
14
  * This source code is licensed under the ISC license.
15
15
  * See the LICENSE file in the root directory of this source tree.
16
- */const ir=De("Tablet",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2",key:"76otgf"}],["line",{x1:"12",x2:"12.01",y1:"18",y2:"18",key:"1dp563"}]]);function ar({tab:a,collageWarn:l,built:f}){return a!=="edit"&&a!=="drag"?null:i.jsxs(Et,{children:[a==="edit"?i.jsx("span",{children:"双击文字直接改(Enter 保存 / Esc 还原),单击元素弹评论卡 —— 改动和评论都会带给 agent"}):i.jsxs("span",{children:["拖动元素调整布局,摆好后",i.jsx("b",{children:"点「保存」写进文件"}),"(保存前可撤销)· 按 P 切自由摆放 · Alt 拖 = 复制 · 自由模式方向键微调",l&&i.jsxs("span",{style:{color:"#a4600f"},children:[" ","· 这页是拼贴式版面(大量绝对定位):绝对定位碎片拖动自动改坐标;其余元素拖动改的是结构,画面可能不变 —— 精修位置更推荐直接吩咐 agent 改 CSS"]})]}),f&&i.jsx("span",{style:{color:"#a4600f"},children:"· 构建型站点:这里改的是构建产物,agent 会把改动同步回源再重新构建"})]})}function or(a,l){if(typeof a!="string"||!a.trim()||!Array.isArray(l)||l.length===0)return null;let f;try{f=new DOMParser().parseFromString(a,"text/html")}catch{return null}if(!(f!=null&&f.body))return null;for(const h of l)if(!ur(f,h))return null;const d=a.match(/^\s*<!doctype[^>]*>/i);return`${d?d[0].trim():"<!doctype html>"}
17
- ${f.documentElement.outerHTML}`}function ur(a,l){if(!l||!l.anchor)return!1;const f=we(l.anchor,a.body);if(!f)return!1;if(l.type==="text")return typeof l.newText!="string"?!1:(f.textContent=l.newText,!0);if(l.type==="style"){if(!l.styles||typeof l.styles!="object")return!1;l.parentNeedsRelative&&f.parentElement&&(f.parentElement.style.position="relative");for(const[d,h]of Object.entries(l.styles))try{f.style[d]=h}catch{}return!0}if(l.type==="move"||l.type==="duplicate"){const d=l.container?we(l.container,a.body):null;if(!d||d===f||f.contains(d))return!1;let h=null;if(l.before&&(h=we(l.before,a.body),!h||h.parentNode!==d))return!1;const g=l.type==="duplicate"?f.cloneNode(!0):f;if(l.type==="duplicate")try{g.removeAttribute("data-anchor")}catch{}return h?d.insertBefore(g,h):d.appendChild(g),!0}return!1}function fr({projectId:a,task:l,root:f=null}){const d=Rt(p=>p.showToast),[h,g]=r.useState(null),[D,U]=r.useState(!1),[w,H]=r.useState(!1),[ce,E]=r.useState(null),S=r.useRef(null);r.useEffect(()=>{let p=!0;return $e.get(a,l).then(_=>{p&&(g(_.site),U(!0))}).catch(()=>{p&&U(!0)}),()=>{p=!1}},[a,l]),r.useEffect(()=>()=>clearTimeout(S.current),[]);const A=p=>{E(p),clearTimeout(S.current),S.current=setTimeout(()=>E(null),3500)},O=async()=>{E(null),H(!0);try{const{site:p,warning:_}=await $e.publish(a,l,f);g(p),d(`已上线:${p.url}(新站点子域名生效可能要等一两分钟)${_?` · ${_}`:""}`,"success")}catch(p){d(p.message||"发布失败","error")}H(!1)},ie=async()=>{E(null),H(!0);try{await $e.unpublish(a,l),g(null),d("已下线,公网地址即刻失效","success")}catch(p){d(p.message||"下线失败","error")}H(!1)},ae=()=>{var p;(p=navigator.clipboard)==null||p.writeText(h.url).then(()=>d("地址已复制","success")).catch(()=>d(h.url,"info"))};return D?w?i.jsxs("span",{style:{...Ze,color:Ie.textDim},children:[i.jsx(Ot,{size:11,style:{animation:"spin 1s linear infinite"}}),i.jsx("style",{children:"@keyframes spin{to{transform:rotate(360deg)}}"}),h?"更新中…":"上线中…"]}):h?i.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:T.xxs},children:[i.jsxs("a",{href:h.url,target:"_blank",rel:"noreferrer",title:h.url,style:{...Ze,textDecoration:"none",color:Ie.text,background:"rgba(120,190,120,0.16)",maxWidth:190},children:[i.jsx("span",{style:{width:6,height:6,borderRadius:se.round,background:"#6FBF6F",flexShrink:0}}),i.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:$t},children:h.url.replace(/^https:\/\//,"")}),i.jsx(et,{size:10,style:{flexShrink:0}})]}),i.jsx(I,{title:"复制地址",icon:Dt,onClick:ae}),i.jsx(I,{title:"把当前版本重新发布(地址不变)",icon:At,onClick:O}),ce==="unpublish"?i.jsx(I,{label:"确认下线?",danger:!0,onClick:ie}):i.jsx(I,{title:"下线(公网地址失效)",icon:lr,danger:!0,onClick:()=>A("unpublish")})]}):ce==="publish"?i.jsx(I,{icon:Je,label:"确认发到公网?",active:!0,onClick:O}):i.jsx(I,{icon:Je,label:"上线",title:"发布到 Cloudflare Pages,任何人可访问",onClick:()=>A("publish")}):null}const Ze=Tt;function dr(a,l){const[f,d]=r.useState(!1),[h,g]=r.useState(!1);return r.useEffect(()=>{let D=!0;return fetch(le.artifactFileUrl(a,tt(l||"","编排.yaml")),{method:"HEAD"}).then(U=>{D&&d(U.ok)}).catch(()=>{D&&d(!1)}),()=>{D=!1}},[a,l]),{hasOrch:f,item:f&&{id:"orchestrate",icon:Pt,title:"编排设置 —— 这场演出的上下文怎么拼",onClick:()=>g(!0)},overlay:h?i.jsx(jt,{projectId:a,dir:l||"",onClose:()=>g(!1)}):null}}function xr({projectId:a,task:l,base:f,entry:d="index.html",title:h,pages:g=[],fileVersions:D=null,built:U=!1,onAddComment:w=null,onResolveComment:H=null,onDeleteComment:ce=null,onDomEdit:E=null,onRegionComment:S=null,onIframeReady:A=null,isStreaming:O=!1,comments:ie=[],artifactExports:ae=null,onExport:p=null,onToolbarGroups:_=null,onClose:J}){var qe;const[Se,rt]=r.useState(be[0].id),[o,oe]=r.useState("preview"),[P,G]=r.useState(null),[x,ke]=r.useState(d),[X,Ce]=r.useState([]),[nt,Ae]=r.useState(""),[Pe,st]=r.useState(0),[Q,lt]=r.useState({width:0,height:0}),[je,ct]=r.useState(null),[$,it]=r.useState(0),[at,ot]=r.useState(!1),[ut,Ee]=r.useState(!1),[j,ft]=r.useState(!1),[ue,dt]=r.useState(null),[ht,Re]=r.useState(!1),Ne=r.useRef(null),k=r.useRef(null),Te=be.find(e=>e.id===Se)||be[0],Fe=f||l||"",C=tt(Fe,x),Me=Nt(D,Fe,x),ze=`${le.artifactFileUrl(a,C)}?v=${Me}-${Pe}`,Le=!!E,We=!!E,N=r.useRef(C);N.current=C;const fe=r.useRef(o);fe.current=o,r.useEffect(()=>{ke(d),Ce([])},[l,d]);const Be=r.useMemo(()=>ie.filter(e=>e.path===C),[ie,C]),K=r.useRef(null),V=r.useRef(null),de=r.useRef(Promise.resolve()),F=r.useRef(E);F.current=E;const he=r.useCallback(async e=>{var c;let t=null,n=!1;try{const u=await fetch(le.artifactFileUrl(a,e.path));u.ok&&(t=or(await u.text(),e.ops))}catch{}if(!t){n=!0;try{if(e.doc){const u=e.doc.body,m=(u==null?void 0:u.style.userSelect)||"";u&&(u.style.userSelect=""),t=`<!doctype html>
18
- `+e.doc.documentElement.outerHTML,u&&(u.style.userSelect=m),t=t.replace(/ style=""/g,"")}}catch{t=null}}if(!t)return;const s=n?e.records.map(u=>({...u,serializedFrom:"runtime-dom"})):e.records;await((c=F.current)==null?void 0:c.call(F,{path:e.path,html:t,summary:e.summary,records:s,persist:!0}))},[a]),pe=r.useCallback(()=>{V.current&&(clearTimeout(V.current),V.current=null);const e=K.current;e&&(K.current=null,de.current=de.current.then(()=>he(e)).catch(()=>{}))},[he]),ge=e=>(e==null?void 0:e.dataId)||(e==null?void 0:e.path)||"",v=r.useRef([]),[Ue,me]=r.useState(0),Y=r.useCallback(e=>{const t=v.current,n=t[t.length-1];n&&n.op.type==="style"&&e.op.type==="style"&&ge(n.op.anchor)===ge(e.op.anchor)?(n.op=e.op,n.record=e.record):t.push(e),me(t.length)},[]),Z=r.useCallback(()=>{var s;const e=v.current;if(e.length===0)return;v.current=[],me(0);let t=null;try{t=(s=k.current)==null?void 0:s.contentDocument}catch{t=null}const n={path:N.current,doc:t,ops:e.map(c=>c.op),records:e.map(c=>c.record),summary:`${e.length} 处布局调整`};de.current=de.current.then(()=>he(n)).catch(()=>{})},[he]),pt=r.useCallback(()=>{var t;const e=v.current.pop();if(e)try{(t=e.revert)==null||t.call(e)}catch{}me(v.current.length)},[]),gt=r.useCallback(()=>{var t,n;const e=v.current;v.current=[];for(let s=e.length-1;s>=0;s--)try{(n=(t=e[s]).revert)==null||n.call(t)}catch{}me(0)},[]),He=r.useCallback((e,t,n)=>{var m;let s=null;try{s=(m=k.current)==null?void 0:m.contentDocument}catch{s=null}if(!s)return;const c=K.current&&K.current.path===N.current?K.current:{path:N.current,ops:[],records:[]};c.doc=s,c.summary=e;const u=c.ops[c.ops.length-1];u&&u.type==="style"&&t.type==="style"&&ge(u.anchor)===ge(t.anchor)?(c.ops[c.ops.length-1]=t,c.records[c.records.length-1]=n):(c.ops.push(t),c.records.push(n)),K.current=c,V.current&&clearTimeout(V.current),V.current=setTimeout(pe,600)},[pe]),b=r.useCallback(()=>{Z(),pe()},[Z,pe]);r.useEffect(()=>()=>b(),[b]),r.useEffect(()=>{b()},[ze,b]),r.useEffect(()=>{o!=="drag"&&Z()},[o,Z]);const ee=r.useCallback((e,t)=>{var n;(n=F.current)==null||n.call(F,{path:N.current,html:null,summary:e,records:[{...t,reactMount:!0}],persist:!1})},[]),M=e=>{if(!(e!=null&&e.tagName))return"元素";const t=e.tagName.toLowerCase(),n=typeof e.className=="string"&&e.className.trim()?`.${e.className.trim().split(/\s+/)[0]}`:"";return`<${t}${n}>`},mt=r.useCallback((e,t)=>{var c,u,m,L,q,re,W;if(!e)return;if(e.reactMount){ee("移动元素(React 区)",{kind:t.duplicate?"pending-duplicate":"pending-move",anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext});return}if(t.duplicate){const ne=(c=t.sourceEl)==null?void 0:c.cloneNode(!0);if(!ne||!t.targetContainer)return;try{ne.removeAttribute("data-anchor")}catch{}t.beforeEl&&t.beforeEl.parentNode===t.targetContainer?t.targetContainer.insertBefore(ne,t.beforeEl):t.targetContainer.appendChild(ne),Y({op:{type:"duplicate",anchor:e.sourceAnchor,container:(u=e.move)==null?void 0:u.container,before:(m=e.move)==null?void 0:m.before},record:{kind:"applied-duplicate",applied:!0,anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext},revert:()=>{try{ne.remove()}catch{}},label:`复制 ${M(t.sourceEl)} 到 ${M(t.targetContainer)}`});return}let n;try{n=(L=k.current)==null?void 0:L.contentDocument}catch{n=null}const s=Ht({iframeDoc:n,sourceEl:t.sourceEl,targetContainer:t.targetContainer,beforeEl:t.beforeEl});s.applied==="dom"?Y({op:{type:"move",anchor:e.sourceAnchor,container:(q=e.move)==null?void 0:q.container,before:(re=e.move)==null?void 0:re.before},record:{kind:"applied-move",applied:!0,anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext},revert:s.revert,label:((W=e.move)==null?void 0:W.intent)==="child-of"?`${M(t.sourceEl)} 移入 ${M(t.targetContainer)} 内部`:`${M(t.sourceEl)} 移到 ${M(t.targetContainer)} 里的新位置`}):ee("移动元素(React 区)",{kind:"pending-move",anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext})},[Y,ee]),xt=r.useCallback((e,t)=>{var c,u;if(!e)return;const n=_t({sourceEl:t.sourceEl,parentEl:t.parentEl,styleDelta:e.styleDelta,runtimeLocks:e.runtimeLocks,parentNeedsRelative:e.parentNeedsRelative}),s={anchor:e.sourceAnchor,styleDelta:e.styleDelta,aiContext:{...e.aiContext,parentAnchor:e.parentAnchor,parentNeedsRelative:e.parentNeedsRelative}};n.applied==="dom"?Y({op:{type:"style",anchor:e.sourceAnchor,styles:{...e.styleDelta,...e.runtimeLocks||{}},parentNeedsRelative:e.parentNeedsRelative},record:{kind:"applied-style",applied:!0,...s},revert:n.revert,label:`${M(t.sourceEl)} 改坐标 (${((c=e.styleDelta)==null?void 0:c.left)??"?"}, ${((u=e.styleDelta)==null?void 0:u.top)??"?"})`}):ee("调整位置(React 区)",{kind:"pending-style",...s})},[Y,ee]),R=dr(a,f),bt=r.useCallback(e=>{var c;if(!e||typeof e.newText!="string")return;let t;try{t=(c=k.current)==null?void 0:c.contentDocument}catch{t=null}const n=t!=null&&t.body?we(e.anchor,t.body):null,s=R.hasOrch;He(`改字「${e.newText.trim().slice(0,12)}」`,{type:"text",anchor:e.anchor,newText:e.newText},{kind:"edit",anchor:s?Qe(e.anchor):e.anchor,diff:{oldText:s?`〔文${(e.oldText||"").length}字〕`:e.oldText,newText:e.newText},aiContext:n?Xe(n,{redactText:s}):null})},[He,R.hasOrch]),yt=r.useCallback(async(e,t)=>{const n=t&&t.trim();if(!n)return;const s=ue;await(w==null?void 0:w({anchor:R.hasOrch?Qe(e):e,aiContext:s&&s.isConnected?Xe(s,{redactText:R.hasOrch}):null,path:N.current,text:n}))},[ue,w,R.hasOrch]);r.useEffect(()=>{O&&o==="drag"&&(b(),oe("preview"))},[O,o,b]),r.useEffect(()=>{var e;if(o==="drag")try{const t=(e=k.current)==null?void 0:e.contentDocument,n=t==null?void 0:t.defaultView;if(!(t!=null&&t.body)||!n){Ee(!1);return}let s=0;const c=t.body.querySelectorAll("*"),u=Math.min(c.length,800);for(let m=0;m<u;m++){const L=n.getComputedStyle(c[m]).position;(L==="absolute"||L==="fixed")&&s++}Ee(s>=6)}catch{Ee(!1)}},[o,$]),r.useEffect(()=>{if(o!=="edit"&&o!=="drag")return;const e=k.current;let t;try{t=e==null?void 0:e.contentDocument}catch{t=null}if(!(t!=null&&t.body))return;const n=s=>{var c,u;(u=(c=s.target)==null?void 0:c.closest)!=null&&u.call(c,"a[href]")&&s.preventDefault()};return t.addEventListener("click",n,!0),()=>{try{t.removeEventListener("click",n,!0)}catch{}}},[o,$]),r.useEffect(()=>{if(o!=="edit")return;const e=k.current;if(e)return Gt(e,{onTextEdit:t=>bt(t),onSelect:({anchor:t})=>G(t?{anchor:t}:null)}),()=>{try{Kt(e)}catch{}G(null)}},[o,$]);const vt=r.useCallback(e=>{w==null||w({...e,path:N.current})},[w]);r.useEffect(()=>{const e=Ne.current;if(!e)return;const t=()=>{const s=e.getBoundingClientRect();lt(c=>c.width===s.width&&c.height===s.height?c:{width:s.width,height:s.height})};t();let n=null;try{n=new ResizeObserver(t),n.observe(e)}catch{}return window.addEventListener("resize",t),()=>{n==null||n.disconnect(),window.removeEventListener("resize",t)}},[o]);const y=Q.width>0?Math.min(1,(Q.width-32)/Te.w):1;r.useEffect(()=>{if(o!=="code")return;let e=!1;return fetch(le.artifactFileUrl(a,C)).then(t=>t.text()).then(t=>{e||Ae(t)}).catch(()=>{e||Ae("<!-- 读不到源码 -->")}),()=>{e=!0}},[o,a,C,Pe,Me]);const xe=r.useCallback(e=>{b(),Ce(t=>[...t,x]),ke(e)},[x,b]),te=r.useCallback(()=>{b(),Ce(e=>e.length===0?e:(ke(e[e.length-1]),e.slice(0,-1)))},[b]),_e=r.useRef(X),Ge=r.useRef(te),Ke=r.useRef(P),Ve=r.useRef(j);r.useEffect(()=>{_e.current=X,Ge.current=te,Ke.current=P,Ve.current=j},[X,te,P,j]),r.useEffect(()=>{const e=t=>{if(t.key!=="Escape")return;const n=t.target;if(!(n&&(n.tagName==="INPUT"||n.tagName==="TEXTAREA"||n.isContentEditable))&&!Ve.current){if(t.stopPropagation(),Ke.current){G(null);return}_e.current.length>0?Ge.current():J==null||J()}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[J]);const wt=r.useCallback(()=>{const e=k.current;let t;try{t=e==null?void 0:e.contentDocument}catch{return}if(!t)return;A==null||A(e),ct(t),it(s=>s+1);const n=x.includes("/")?x.slice(0,x.lastIndexOf("/")+1):"";for(const s of t.querySelectorAll("a[href]")){const c=s.getAttribute("href")||"";/^(?:[a-z][a-z0-9+\-.]*:|\/\/|#)/i.test(c)||s.addEventListener("click",u=>{if(fe.current==="edit"||fe.current==="drag")return;const m=c.split("#")[0].split("?")[0];if(!m)return;const L=(n+m).split("/"),q=[];for(const W of L)W==="."||W===""||(W===".."?q.pop():q.push(W));const re=q.join("/");/\.html?$/i.test(re)&&(u.preventDefault(),xe(re))})}},[x,xe,A]),Oe=r.useMemo(()=>g.length?g:[d],[g,d]),St={monitor:Ye,tablet:ir,smartphone:cr},kt=e=>{G(null),Re(!1),oe(e)},Ct=r.useMemo(()=>[{id:"mode",type:"mode",value:o,onChange:kt,items:[{id:"preview",icon:tr,label:"预览",title:"照常浏览,站内链接可点"},Le&&{id:"edit",icon:Ft,label:"编辑",title:"双击文字直接改 · 单击元素弹评论卡"},We&&{id:"drag",icon:Mt,label:"拖拽",disabled:O,title:O?"agent 正在工作,拖拽暂不可用":"拖动元素调布局"},S&&{id:"region",icon:rr,label:"圈选",title:"框一块地方说事 —— 框住谁、当时长什么样、你想说什么,一起交给 agent"},{id:"code",icon:zt,label:"源码",title:"看这一页的 HTML"}].filter(Boolean)},Oe.length>1&&{id:"pages",type:"mode",value:x,onChange:e=>{e!==x&&xe(e)},items:Oe.map(e=>({id:e,label:e.replace(/\.html?$/i,""),title:e}))},o!=="code"&&{id:"viewport",type:"mode",value:Se,onChange:rt,items:be.map(e=>({id:e.id,icon:St[e.icon]||Ye,title:`${e.label} · 按 ${e.w}px 真实宽度渲染`}))},Lt({kind:"site",exports:ae,onExport:p}),{id:"publish",node:i.jsx(fr,{projectId:a,task:l,root:f||"."})},{id:"actions",items:[R.item,X.length>0&&{id:"back",icon:nr,title:"站内后退",onClick:te},{id:"reload",icon:sr,title:"刷新",onClick:()=>{b(),st(e=>e+1)}},{id:"open",icon:et,title:"在新标签页打开这一页",onClick:()=>window.open(le.artifactFileUrl(a,C),"_blank","noopener")}].filter(Boolean)}].filter(Boolean),[o,Le,We,O,Oe,x,Se,X.length,te,xe,b,a,C,S,l,ae,p,R.item]),z=k;return i.jsx(Wt,{kind:"site",title:h||l,subtitle:x,onClose:J,escToClose:!1,groups:Ct,onToolbarGroups:_,banner:i.jsx(ar,{tab:o,collageWarn:ut,built:U}),children:i.jsxs("div",{"data-site-window":l,style:{flex:1,minHeight:0,display:"flex",flexDirection:"column",position:"relative"},children:[R.overlay,o!=="code"?i.jsxs("div",{ref:Ne,style:{flex:1,minHeight:0,overflow:"auto",position:"relative",display:"flex",justifyContent:"center",background:"#f4f2ee",padding:T.md},children:[i.jsx("div",{style:{width:Te.w*y,height:Math.max(0,Q.height-T.md*2),flexShrink:0},children:i.jsx(Bt,{src:ze,title:`site-${l}-${x}`,frameRef:k,onActive:wt,style:{width:Te.w,height:y>0?Math.max(0,(Q.height-T.md*2)/y):"100%",border:0,background:B.bgWhite,boxShadow:o==="edit"?`0 0 0 2px ${B.btn}, 0 2px 18px rgba(0,0,0,0.08)`:o==="drag"?"0 0 0 2px #3a7afe, 0 2px 18px rgba(0,0,0,0.08)":"0 2px 18px rgba(0,0,0,0.08)",display:"block",transform:y<1?`scale(${y})`:"none",transformOrigin:"top left"}})}),o==="edit"&&P&&i.jsx(Vt,{selectedAnchor:P.anchor,iframeRef:z,zoom:y},`ring-${$}`),i.jsx(qt,{comments:Be,iframeRef:z,zoom:y,onSelectAnchor:e=>{fe.current!=="edit"&&oe("edit"),G({anchor:e})}},`markers-${$}`),o==="edit"&&P&&je&&i.jsx(It,{selectedAnchor:P.anchor,redactText:R.hasOrch,iframeDoc:je,iframeRef:z,iframeRect:Q,zoom:y,comments:Be,onClose:()=>G(null),onAddComment:vt,onResolveComment:H,onDeleteComment:ce}),i.jsx(Jt,{active:o==="drag"&&!j,iframeRef:z,zoom:y,pickDragSource:Xt,isDragging:j},`grab-${$}`),i.jsx(Qt,{active:o==="drag",iframeRef:z,zoom:y,freeMode:at,onFreeModeChange:ot,onDraggingChange:ft,onSelectionChange:e=>{dt(e),e&&Re(!0)},onCommitMove:mt,onCommitFreePosition:xt},`drag-${$}`),i.jsx(Yt,{active:o==="drag"&&ht&&!j&&!!ue,iframeRef:z,zoom:y,sourceEl:ue,hasPendingEditId:!0,onSubmit:yt,onDismiss:()=>Re(!1)}),i.jsx(Zt,{active:o==="region"&&!!S,iframeRef:z,zoom:y,onSubmit:e=>S==null?void 0:S({...e,path:C}),onExit:()=>oe("preview")},`region-${$}`),o==="drag"&&Ue>0&&!j&&i.jsxs("div",{style:{position:"absolute",bottom:16,left:"50%",transform:"translateX(-50%)",display:"flex",alignItems:"center",gap:T.sm,padding:`7px ${T.md}px`,borderRadius:se.pill,background:B.text,color:B.bgWhite,fontFamily:ve,fontSize:ye.sm,boxShadow:"0 8px 24px rgba(0,0,0,0.3)",zIndex:60},children:[i.jsxs("span",{style:{opacity:.85},children:[Ue," 处调整未保存",(qe=v.current[v.current.length-1])!=null&&qe.label?` · ${v.current[v.current.length-1].label}`:""]}),i.jsx("button",{onClick:Z,style:{padding:`3px ${T.lg}px`,borderRadius:se.pill,border:"none",cursor:"pointer",background:B.bgWhite,color:B.text,fontSize:ye.xs,boxShadow:Ut.far,fontFamily:ve,fontWeight:600},children:"保存"}),i.jsx("button",{onClick:pt,style:{padding:`3px ${T.base}px`,borderRadius:se.pill,cursor:"pointer",border:"1px solid rgba(255,255,255,0.4)",background:"transparent",color:B.bgWhite,fontSize:ye.xs,fontFamily:ve},children:"撤销一步"}),i.jsx("button",{onClick:gt,style:{padding:`3px ${T.base}px`,borderRadius:se.pill,cursor:"pointer",border:"none",background:"transparent",color:"rgba(255,255,255,0.65)",fontSize:ye.xs,fontFamily:ve},children:"全部放弃"})]})]}):i.jsx("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:i.jsx(er,{value:nt,readOnly:!0,onChange:()=>{}})})]})})}export{xr as default};
16
+ */const ar=De("Tablet",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2",key:"76otgf"}],["line",{x1:"12",x2:"12.01",y1:"18",y2:"18",key:"1dp563"}]]);function or({tab:a,collageWarn:l,built:f}){return a!=="edit"&&a!=="drag"?null:i.jsxs(Et,{children:[a==="edit"?i.jsx("span",{children:"双击文字直接改(Enter 保存 / Esc 还原),单击元素弹评论卡 —— 改动和评论都会带给 agent"}):i.jsxs("span",{children:["拖动元素调整布局,摆好后",i.jsx("b",{children:"点「保存」写进文件"}),"(保存前可撤销)· 按 P 切自由摆放 · Alt 拖 = 复制 · 自由模式方向键微调",l&&i.jsxs("span",{style:{color:"#a4600f"},children:[" ","· 这页是拼贴式版面(大量绝对定位):绝对定位碎片拖动自动改坐标;其余元素拖动改的是结构,画面可能不变 —— 精修位置更推荐直接吩咐 agent 改 CSS"]})]}),f&&i.jsx("span",{style:{color:"#a4600f"},children:"· 构建型站点:这里改的是构建产物,agent 会把改动同步回源再重新构建"})]})}function ur(a,l){if(typeof a!="string"||!a.trim()||!Array.isArray(l)||l.length===0)return null;let f;try{f=new DOMParser().parseFromString(a,"text/html")}catch{return null}if(!(f!=null&&f.body))return null;for(const h of l)if(!fr(f,h))return null;const d=a.match(/^\s*<!doctype[^>]*>/i);return`${d?d[0].trim():"<!doctype html>"}
17
+ ${f.documentElement.outerHTML}`}function fr(a,l){if(!l||!l.anchor)return!1;const f=we(l.anchor,a.body);if(!f)return!1;if(l.type==="text")return typeof l.newText!="string"?!1:(f.textContent=l.newText,!0);if(l.type==="style"){if(!l.styles||typeof l.styles!="object")return!1;l.parentNeedsRelative&&f.parentElement&&(f.parentElement.style.position="relative");for(const[d,h]of Object.entries(l.styles))try{f.style[d]=h}catch{}return!0}if(l.type==="move"||l.type==="duplicate"){const d=l.container?we(l.container,a.body):null;if(!d||d===f||f.contains(d))return!1;let h=null;if(l.before&&(h=we(l.before,a.body),!h||h.parentNode!==d))return!1;const g=l.type==="duplicate"?f.cloneNode(!0):f;if(l.type==="duplicate")try{g.removeAttribute("data-anchor")}catch{}return h?d.insertBefore(g,h):d.appendChild(g),!0}return!1}function dr({projectId:a,task:l,root:f=null}){const d=Rt(p=>p.showToast),[h,g]=r.useState(null),[D,U]=r.useState(!1),[w,H]=r.useState(!1),[ce,E]=r.useState(null),S=r.useRef(null);r.useEffect(()=>{let p=!0;return $e.get(a,l).then(_=>{p&&(g(_.site),U(!0))}).catch(()=>{p&&U(!0)}),()=>{p=!1}},[a,l]),r.useEffect(()=>()=>clearTimeout(S.current),[]);const A=p=>{E(p),clearTimeout(S.current),S.current=setTimeout(()=>E(null),3500)},O=async()=>{E(null),H(!0);try{const{site:p,warning:_}=await $e.publish(a,l,f);g(p),d(`已上线:${p.url}(新站点子域名生效可能要等一两分钟)${_?` · ${_}`:""}`,"success")}catch(p){d(p.message||"发布失败","error")}H(!1)},ie=async()=>{E(null),H(!0);try{await $e.unpublish(a,l),g(null),d("已下线,公网地址即刻失效","success")}catch(p){d(p.message||"下线失败","error")}H(!1)},ae=()=>{var p;(p=navigator.clipboard)==null||p.writeText(h.url).then(()=>d("地址已复制","success")).catch(()=>d(h.url,"info"))};return D?w?i.jsxs("span",{style:{...Ye,color:Ie.textDim},children:[i.jsx(Ot,{size:11,style:{animation:"spin 1s linear infinite"}}),i.jsx("style",{children:"@keyframes spin{to{transform:rotate(360deg)}}"}),h?"更新中…":"上线中…"]}):h?i.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:T.xxs},children:[i.jsxs("a",{href:h.url,target:"_blank",rel:"noreferrer",title:h.url,style:{...Ye,textDecoration:"none",color:Ie.text,background:"rgba(120,190,120,0.16)",maxWidth:190},children:[i.jsx("span",{style:{width:6,height:6,borderRadius:se.round,background:"#6FBF6F",flexShrink:0}}),i.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:$t},children:h.url.replace(/^https:\/\//,"")}),i.jsx(et,{size:10,style:{flexShrink:0}})]}),i.jsx(I,{title:"复制地址",icon:Dt,onClick:ae}),i.jsx(I,{title:"把当前版本重新发布(地址不变)",icon:At,onClick:O}),ce==="unpublish"?i.jsx(I,{label:"确认下线?",danger:!0,onClick:ie}):i.jsx(I,{title:"下线(公网地址失效)",icon:cr,danger:!0,onClick:()=>A("unpublish")})]}):ce==="publish"?i.jsx(I,{icon:Je,label:"确认发到公网?",active:!0,onClick:O}):i.jsx(I,{icon:Je,label:"上线",title:"发布到 Cloudflare Pages,任何人可访问",onClick:()=>A("publish")}):null}const Ye=Tt;function hr(a,l){const[f,d]=r.useState(!1),[h,g]=r.useState(!1);return r.useEffect(()=>{let D=!0;return fetch(le.artifactFileUrl(a,tt(l||"","编排.yaml")),{method:"HEAD"}).then(U=>{D&&d(U.ok)}).catch(()=>{D&&d(!1)}),()=>{D=!1}},[a,l]),{hasOrch:f,item:f&&{id:"orchestrate",icon:Pt,title:"编排设置 —— 这场演出的上下文怎么拼",onClick:()=>g(!0)},overlay:h?i.jsx(jt,{projectId:a,dir:l||"",onClose:()=>g(!1)}):null}}function br({projectId:a,task:l,base:f,entry:d="index.html",title:h,pages:g=[],fileVersions:D=null,built:U=!1,onAddComment:w=null,onResolveComment:H=null,onDeleteComment:ce=null,onDomEdit:E=null,onRegionComment:S=null,onIframeReady:A=null,isStreaming:O=!1,comments:ie=[],artifactExports:ae=null,onExport:p=null,onToolbarGroups:_=null,onClose:J}){var qe;const[Se,rt]=r.useState(be[0].id),[o,oe]=r.useState("preview"),[P,G]=r.useState(null),[x,ke]=r.useState(d),[X,Ce]=r.useState([]),[nt,Ae]=r.useState(""),[Pe,st]=r.useState(0),[Z,lt]=r.useState({width:0,height:0}),[je,ct]=r.useState(null),[$,it]=r.useState(0),[at,ot]=r.useState(!1),[ut,Ee]=r.useState(!1),[j,ft]=r.useState(!1),[ue,dt]=r.useState(null),[ht,Re]=r.useState(!1),Ne=r.useRef(null),k=r.useRef(null),Te=be.find(e=>e.id===Se)||be[0],Fe=f||l||"",C=tt(Fe,x),Me=Nt(D,Fe,x),ze=`${le.artifactFileUrl(a,C)}?v=${Me}-${Pe}`,Le=!!E,We=!!E,N=r.useRef(C);N.current=C;const fe=r.useRef(o);fe.current=o,r.useEffect(()=>{ke(d),Ce([])},[l,d]);const Be=r.useMemo(()=>ie.filter(e=>e.path===C),[ie,C]),K=r.useRef(null),V=r.useRef(null),de=r.useRef(Promise.resolve()),F=r.useRef(E);F.current=E;const he=r.useCallback(async e=>{var c;let t=null,n=!1;try{const u=await fetch(le.artifactFileUrl(a,e.path));u.ok&&(t=ur(await u.text(),e.ops))}catch{}if(!t){n=!0;try{if(e.doc){const u=e.doc.body,m=(u==null?void 0:u.style.userSelect)||"";u&&(u.style.userSelect=""),t=`<!doctype html>
18
+ `+e.doc.documentElement.outerHTML,u&&(u.style.userSelect=m),t=t.replace(/ style=""/g,"")}}catch{t=null}}if(!t)return;const s=n?e.records.map(u=>({...u,serializedFrom:"runtime-dom"})):e.records;await((c=F.current)==null?void 0:c.call(F,{path:e.path,html:t,summary:e.summary,records:s,persist:!0}))},[a]),pe=r.useCallback(()=>{V.current&&(clearTimeout(V.current),V.current=null);const e=K.current;e&&(K.current=null,de.current=de.current.then(()=>he(e)).catch(()=>{}))},[he]),ge=e=>(e==null?void 0:e.dataId)||(e==null?void 0:e.path)||"",v=r.useRef([]),[Ue,me]=r.useState(0),Q=r.useCallback(e=>{const t=v.current,n=t[t.length-1];n&&n.op.type==="style"&&e.op.type==="style"&&ge(n.op.anchor)===ge(e.op.anchor)?(n.op=e.op,n.record=e.record):t.push(e),me(t.length)},[]),Y=r.useCallback(()=>{var s;const e=v.current;if(e.length===0)return;v.current=[],me(0);let t=null;try{t=(s=k.current)==null?void 0:s.contentDocument}catch{t=null}const n={path:N.current,doc:t,ops:e.map(c=>c.op),records:e.map(c=>c.record),summary:`${e.length} 处布局调整`};de.current=de.current.then(()=>he(n)).catch(()=>{})},[he]),pt=r.useCallback(()=>{var t;const e=v.current.pop();if(e)try{(t=e.revert)==null||t.call(e)}catch{}me(v.current.length)},[]),gt=r.useCallback(()=>{var t,n;const e=v.current;v.current=[];for(let s=e.length-1;s>=0;s--)try{(n=(t=e[s]).revert)==null||n.call(t)}catch{}me(0)},[]),He=r.useCallback((e,t,n)=>{var m;let s=null;try{s=(m=k.current)==null?void 0:m.contentDocument}catch{s=null}if(!s)return;const c=K.current&&K.current.path===N.current?K.current:{path:N.current,ops:[],records:[]};c.doc=s,c.summary=e;const u=c.ops[c.ops.length-1];u&&u.type==="style"&&t.type==="style"&&ge(u.anchor)===ge(t.anchor)?(c.ops[c.ops.length-1]=t,c.records[c.records.length-1]=n):(c.ops.push(t),c.records.push(n)),K.current=c,V.current&&clearTimeout(V.current),V.current=setTimeout(pe,600)},[pe]),b=r.useCallback(()=>{Y(),pe()},[Y,pe]);r.useEffect(()=>()=>b(),[b]),r.useEffect(()=>{b()},[ze,b]),r.useEffect(()=>{o!=="drag"&&Y()},[o,Y]);const ee=r.useCallback((e,t)=>{var n;(n=F.current)==null||n.call(F,{path:N.current,html:null,summary:e,records:[{...t,reactMount:!0}],persist:!1})},[]),M=e=>{if(!(e!=null&&e.tagName))return"元素";const t=e.tagName.toLowerCase(),n=typeof e.className=="string"&&e.className.trim()?`.${e.className.trim().split(/\s+/)[0]}`:"";return`<${t}${n}>`},mt=r.useCallback((e,t)=>{var c,u,m,L,q,re,W;if(!e)return;if(e.reactMount){ee("移动元素(React 区)",{kind:t.duplicate?"pending-duplicate":"pending-move",anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext});return}if(t.duplicate){const ne=(c=t.sourceEl)==null?void 0:c.cloneNode(!0);if(!ne||!t.targetContainer)return;try{ne.removeAttribute("data-anchor")}catch{}t.beforeEl&&t.beforeEl.parentNode===t.targetContainer?t.targetContainer.insertBefore(ne,t.beforeEl):t.targetContainer.appendChild(ne),Q({op:{type:"duplicate",anchor:e.sourceAnchor,container:(u=e.move)==null?void 0:u.container,before:(m=e.move)==null?void 0:m.before},record:{kind:"applied-duplicate",applied:!0,anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext},revert:()=>{try{ne.remove()}catch{}},label:`复制 ${M(t.sourceEl)} 到 ${M(t.targetContainer)}`});return}let n;try{n=(L=k.current)==null?void 0:L.contentDocument}catch{n=null}const s=_t({iframeDoc:n,sourceEl:t.sourceEl,targetContainer:t.targetContainer,beforeEl:t.beforeEl});s.applied==="dom"?Q({op:{type:"move",anchor:e.sourceAnchor,container:(q=e.move)==null?void 0:q.container,before:(re=e.move)==null?void 0:re.before},record:{kind:"applied-move",applied:!0,anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext},revert:s.revert,label:((W=e.move)==null?void 0:W.intent)==="child-of"?`${M(t.sourceEl)} 移入 ${M(t.targetContainer)} 内部`:`${M(t.sourceEl)} 移到 ${M(t.targetContainer)} 里的新位置`}):ee("移动元素(React 区)",{kind:"pending-move",anchor:e.sourceAnchor,move:e.move,aiContext:e.aiContext})},[Q,ee]),xt=r.useCallback((e,t)=>{var c,u;if(!e)return;const n=Gt({sourceEl:t.sourceEl,parentEl:t.parentEl,styleDelta:e.styleDelta,runtimeLocks:e.runtimeLocks,parentNeedsRelative:e.parentNeedsRelative}),s={anchor:e.sourceAnchor,styleDelta:e.styleDelta,aiContext:{...e.aiContext,parentAnchor:e.parentAnchor,parentNeedsRelative:e.parentNeedsRelative}};n.applied==="dom"?Q({op:{type:"style",anchor:e.sourceAnchor,styles:{...e.styleDelta,...e.runtimeLocks||{}},parentNeedsRelative:e.parentNeedsRelative},record:{kind:"applied-style",applied:!0,...s},revert:n.revert,label:`${M(t.sourceEl)} 改坐标 (${((c=e.styleDelta)==null?void 0:c.left)??"?"}, ${((u=e.styleDelta)==null?void 0:u.top)??"?"})`}):ee("调整位置(React 区)",{kind:"pending-style",...s})},[Q,ee]),R=hr(a,f),bt=r.useCallback(e=>{var c;if(!e||typeof e.newText!="string")return;let t;try{t=(c=k.current)==null?void 0:c.contentDocument}catch{t=null}const n=t!=null&&t.body?we(e.anchor,t.body):null,s=R.hasOrch;He(`改字「${e.newText.trim().slice(0,12)}」`,{type:"text",anchor:e.anchor,newText:e.newText},{kind:"edit",anchor:s?Ze(e.anchor):e.anchor,diff:{oldText:s?`〔文${(e.oldText||"").length}字〕`:e.oldText,newText:e.newText},aiContext:n?Xe(n,{redactText:s}):null})},[He,R.hasOrch]),yt=r.useCallback(async(e,t)=>{const n=t&&t.trim();if(!n)return;const s=ue;await(w==null?void 0:w({anchor:R.hasOrch?Ze(e):e,aiContext:s&&s.isConnected?Xe(s,{redactText:R.hasOrch}):null,path:N.current,text:n}))},[ue,w,R.hasOrch]);r.useEffect(()=>{O&&o==="drag"&&(b(),oe("preview"))},[O,o,b]),r.useEffect(()=>{var e;if(o==="drag")try{const t=(e=k.current)==null?void 0:e.contentDocument,n=t==null?void 0:t.defaultView;if(!(t!=null&&t.body)||!n){Ee(!1);return}let s=0;const c=t.body.querySelectorAll("*"),u=Math.min(c.length,800);for(let m=0;m<u;m++){const L=n.getComputedStyle(c[m]).position;(L==="absolute"||L==="fixed")&&s++}Ee(s>=6)}catch{Ee(!1)}},[o,$]),r.useEffect(()=>{if(o!=="edit"&&o!=="drag")return;const e=k.current;let t;try{t=e==null?void 0:e.contentDocument}catch{t=null}if(!(t!=null&&t.body))return;const n=s=>{var c,u;(u=(c=s.target)==null?void 0:c.closest)!=null&&u.call(c,"a[href]")&&s.preventDefault()};return t.addEventListener("click",n,!0),()=>{try{t.removeEventListener("click",n,!0)}catch{}}},[o,$]),r.useEffect(()=>{if(o!=="edit")return;const e=k.current;if(e)return Kt(e,{onTextEdit:t=>bt(t),onSelect:({anchor:t})=>G(t?{anchor:t}:null)}),()=>{try{Vt(e)}catch{}G(null)}},[o,$]);const vt=r.useCallback(e=>{w==null||w({...e,path:N.current})},[w]);r.useEffect(()=>{const e=Ne.current;if(!e)return;const t=()=>{const s=e.getBoundingClientRect();lt(c=>c.width===s.width&&c.height===s.height?c:{width:s.width,height:s.height})};t();let n=null;try{n=new ResizeObserver(t),n.observe(e)}catch{}return window.addEventListener("resize",t),()=>{n==null||n.disconnect(),window.removeEventListener("resize",t)}},[o]);const y=Z.width>0?Math.min(1,(Z.width-32)/Te.w):1;r.useEffect(()=>{if(o!=="code")return;let e=!1;return fetch(le.artifactFileUrl(a,C)).then(t=>t.text()).then(t=>{e||Ae(t)}).catch(()=>{e||Ae("<!-- 读不到源码 -->")}),()=>{e=!0}},[o,a,C,Pe,Me]);const xe=r.useCallback(e=>{b(),Ce(t=>[...t,x]),ke(e)},[x,b]),te=r.useCallback(()=>{b(),Ce(e=>e.length===0?e:(ke(e[e.length-1]),e.slice(0,-1)))},[b]),_e=r.useRef(X),Ge=r.useRef(te),Ke=r.useRef(P),Ve=r.useRef(j);r.useEffect(()=>{_e.current=X,Ge.current=te,Ke.current=P,Ve.current=j},[X,te,P,j]),r.useEffect(()=>{const e=t=>{if(t.key!=="Escape")return;const n=t.target;if(!(n&&(n.tagName==="INPUT"||n.tagName==="TEXTAREA"||n.isContentEditable))&&!Ve.current){if(t.stopPropagation(),Ke.current){G(null);return}_e.current.length>0?Ge.current():J==null||J()}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[J]);const wt=r.useCallback(()=>{const e=k.current;let t;try{t=e==null?void 0:e.contentDocument}catch{return}if(!t)return;A==null||A(e),ct(t),it(s=>s+1);const n=x.includes("/")?x.slice(0,x.lastIndexOf("/")+1):"";for(const s of t.querySelectorAll("a[href]")){const c=s.getAttribute("href")||"";/^(?:[a-z][a-z0-9+\-.]*:|\/\/|#)/i.test(c)||s.addEventListener("click",u=>{if(fe.current==="edit"||fe.current==="drag")return;const m=c.split("#")[0].split("?")[0];if(!m)return;const L=(n+m).split("/"),q=[];for(const W of L)W==="."||W===""||(W===".."?q.pop():q.push(W));const re=q.join("/");/\.html?$/i.test(re)&&(u.preventDefault(),xe(re))})}},[x,xe,A]),Oe=r.useMemo(()=>g.length?g:[d],[g,d]),St={monitor:Qe,tablet:ar,smartphone:ir},kt=e=>{G(null),Re(!1),oe(e)},Ct=r.useMemo(()=>[{id:"mode",type:"mode",value:o,onChange:kt,items:[{id:"preview",icon:rr,label:"预览",title:"照常浏览,站内链接可点"},Le&&{id:"edit",icon:Ft,label:"编辑",title:"双击文字直接改 · 单击元素弹评论卡"},We&&{id:"drag",icon:Mt,label:"拖拽",disabled:O,title:O?"agent 正在工作,拖拽暂不可用":"拖动元素调布局"},S&&{id:"region",icon:nr,label:"圈选",title:"框一块地方说事 —— 框住谁、当时长什么样、你想说什么,一起交给 agent"},{id:"code",icon:zt,label:"源码",title:"看这一页的 HTML"}].filter(Boolean)},Oe.length>1&&{id:"pages",type:"mode",value:x,onChange:e=>{e!==x&&xe(e)},items:Oe.map(e=>({id:e,label:e.replace(/\.html?$/i,""),title:e}))},o!=="code"&&{id:"viewport",type:"mode",value:Se,onChange:rt,items:be.map(e=>({id:e.id,icon:St[e.icon]||Qe,title:`${e.label} · 按 ${e.w}px 真实宽度渲染`}))},Lt({kind:"site",exports:ae,onExport:p}),{id:"publish",node:i.jsx(dr,{projectId:a,task:l,root:f||"."})},{id:"actions",items:[R.item,X.length>0&&{id:"back",icon:sr,title:"站内后退",onClick:te},{id:"reload",icon:lr,title:"刷新",onClick:()=>{b(),st(e=>e+1)}},{id:"open",icon:et,title:"在新标签页打开这一页",onClick:()=>window.open(le.artifactFileUrl(a,C),"_blank","noopener")}].filter(Boolean)}].filter(Boolean),[o,Le,We,O,Oe,x,Se,X.length,te,xe,b,a,C,S,l,ae,p,R.item]),z=k;return i.jsx(Wt,{kind:"site",title:h||l,subtitle:x,onClose:J,escToClose:!1,groups:Ct,onToolbarGroups:_,banner:i.jsx(or,{tab:o,collageWarn:ut,built:U}),children:i.jsxs("div",{"data-site-window":l,style:{flex:1,minHeight:0,display:"flex",flexDirection:"column",position:"relative"},children:[R.overlay,o!=="code"?i.jsxs("div",{ref:Ne,style:{flex:1,minHeight:0,overflow:"auto",position:"relative",display:"flex",justifyContent:"center",background:"#f4f2ee",padding:T.md},children:[i.jsx("div",{style:{width:Te.w*y,height:Math.max(0,Z.height-T.md*2),flexShrink:0},children:i.jsx(Bt,{src:ze,title:`site-${l}-${x}`,frameRef:k,onActive:wt,style:{width:Te.w,height:y>0?Math.max(0,(Z.height-T.md*2)/y):"100%",border:0,background:B.bgWhite,boxShadow:o==="edit"?`0 0 0 2px ${B.btn}, 0 2px 18px rgba(43,33,23,0.08)`:o==="drag"?`0 0 0 2px ${Ut.blue}, 0 2px 18px rgba(43,33,23,0.08)`:"0 2px 18px rgba(43,33,23,0.08)",display:"block",transform:y<1?`scale(${y})`:"none",transformOrigin:"top left"}})}),o==="edit"&&P&&i.jsx(qt,{selectedAnchor:P.anchor,iframeRef:z,zoom:y},`ring-${$}`),i.jsx(It,{comments:Be,iframeRef:z,zoom:y,onSelectAnchor:e=>{fe.current!=="edit"&&oe("edit"),G({anchor:e})}},`markers-${$}`),o==="edit"&&P&&je&&i.jsx(Jt,{selectedAnchor:P.anchor,redactText:R.hasOrch,iframeDoc:je,iframeRef:z,iframeRect:Z,zoom:y,comments:Be,onClose:()=>G(null),onAddComment:vt,onResolveComment:H,onDeleteComment:ce}),i.jsx(Xt,{active:o==="drag"&&!j,iframeRef:z,zoom:y,pickDragSource:Zt,isDragging:j},`grab-${$}`),i.jsx(Qt,{active:o==="drag",iframeRef:z,zoom:y,freeMode:at,onFreeModeChange:ot,onDraggingChange:ft,onSelectionChange:e=>{dt(e),e&&Re(!0)},onCommitMove:mt,onCommitFreePosition:xt},`drag-${$}`),i.jsx(Yt,{active:o==="drag"&&ht&&!j&&!!ue,iframeRef:z,zoom:y,sourceEl:ue,hasPendingEditId:!0,onSubmit:yt,onDismiss:()=>Re(!1)}),i.jsx(er,{active:o==="region"&&!!S,iframeRef:z,zoom:y,onSubmit:e=>S==null?void 0:S({...e,path:C}),onExit:()=>oe("preview")},`region-${$}`),o==="drag"&&Ue>0&&!j&&i.jsxs("div",{style:{position:"absolute",bottom:16,left:"50%",transform:"translateX(-50%)",display:"flex",alignItems:"center",gap:T.sm,padding:`7px ${T.md}px`,borderRadius:se.pill,background:B.text,color:B.bgWhite,fontFamily:ve,fontSize:ye.sm,boxShadow:"0 8px 24px rgba(93,74,44,0.33)",zIndex:60},children:[i.jsxs("span",{style:{opacity:.85},children:[Ue," 处调整未保存",(qe=v.current[v.current.length-1])!=null&&qe.label?` · ${v.current[v.current.length-1].label}`:""]}),i.jsx("button",{onClick:Y,style:{padding:`3px ${T.lg}px`,borderRadius:se.pill,border:"none",cursor:"pointer",background:B.bgWhite,color:B.text,fontSize:ye.xs,boxShadow:Ht.far,fontFamily:ve,fontWeight:600},children:"保存"}),i.jsx("button",{onClick:pt,style:{padding:`3px ${T.base}px`,borderRadius:se.pill,cursor:"pointer",border:"1px solid rgba(255,254,246,0.4)",background:"transparent",color:B.bgWhite,fontSize:ye.xs,fontFamily:ve},children:"撤销一步"}),i.jsx("button",{onClick:gt,style:{padding:`3px ${T.base}px`,borderRadius:se.pill,cursor:"pointer",border:"none",background:"transparent",color:"rgba(255,254,246,0.65)",fontSize:ye.xs,fontFamily:ve},children:"全部放弃"})]})]}):i.jsx("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:i.jsx(tr,{value:nt,readOnly:!0,onChange:()=>{}})})]})})}export{br as default};
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-SVP7TREG-JSLcsRlZ.js";import{p as f}from"./chunk-JWPE2WC7-CHcgcd0s.js";import{_ as n,l as o}from"./MermaidBlock-BO-46Du5.js";import{M as c,b as d}from"./cynefin-OW5HDTMX-Bvt-gEmA.js";import"./index-DGG5wIZs.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
1
+ import{g as p,r as u,d as a}from"./chunk-SVP7TREG-CnwRZmF_.js";import{p as f}from"./chunk-JWPE2WC7-BHsTe5PD.js";import{_ as n,l as o}from"./MermaidBlock-DrfRnz8E.js";import{M as c,b as d}from"./cynefin-OW5HDTMX-vK64EGSv.js";import"./index-BYKfMnmv.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
@@ -1 +1 @@
1
- import{a0 as ln,a1 as an,a2 as H,a3 as q,a4 as B,a5 as un,a6 as y,a7 as tn,a8 as L,a9 as _,aa as rn,ab as o,ac as on,ad as sn,ae as fn}from"./MermaidBlock-BO-46Du5.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(on(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,F=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<an)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(fn((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{a0 as ln,a1 as an,a2 as H,a3 as q,a4 as B,a5 as un,a6 as y,a7 as tn,a8 as L,a9 as _,aa as rn,ab as o,ac as on,ad as sn,ae as fn}from"./MermaidBlock-DrfRnz8E.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(on(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,F=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<an)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(fn((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};