@xiaobuyu/nodesign 0.0.1

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 (372) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +140 -0
  3. package/bin/nodesign.js +176 -0
  4. package/package.json +104 -0
  5. package/server/api/README.md +45 -0
  6. package/server/api/_guard.js +75 -0
  7. package/server/api/admin.js +187 -0
  8. package/server/api/assets/docx-page.js +103 -0
  9. package/server/api/assets/helpers.js +22 -0
  10. package/server/api/assets/notes.js +144 -0
  11. package/server/api/assets.js +896 -0
  12. package/server/api/board.js +57 -0
  13. package/server/api/browse.js +138 -0
  14. package/server/api/canvas.js +444 -0
  15. package/server/api/chatai.js +324 -0
  16. package/server/api/exports/build-standalone.js +980 -0
  17. package/server/api/exports/cards.js +118 -0
  18. package/server/api/exports/docx-pdf.js +46 -0
  19. package/server/api/exports/export-page.js +142 -0
  20. package/server/api/exports/handoff.js +147 -0
  21. package/server/api/exports.js +690 -0
  22. package/server/api/instruction.js +75 -0
  23. package/server/api/local.js +115 -0
  24. package/server/api/me.js +116 -0
  25. package/server/api/memory.js +185 -0
  26. package/server/api/pending-changes.js +366 -0
  27. package/server/api/plugins.js +164 -0
  28. package/server/api/projects.js +220 -0
  29. package/server/api/publish.js +64 -0
  30. package/server/api/recent.js +73 -0
  31. package/server/api/sessions.js +589 -0
  32. package/server/api/skills.js +77 -0
  33. package/server/api/standalone-fit.js +168 -0
  34. package/server/api/turn-compose.js +180 -0
  35. package/server/api/turn-inflight.js +44 -0
  36. package/server/api/turn.js +669 -0
  37. package/server/auth/README.md +17 -0
  38. package/server/auth/middleware.js +138 -0
  39. package/server/auth/origin-guard.js +71 -0
  40. package/server/auth/session.js +108 -0
  41. package/server/auth/tier.js +113 -0
  42. package/server/auth/users-store.js +348 -0
  43. package/server/edit/README.md +29 -0
  44. package/server/engine/README.md +113 -0
  45. package/server/engine/agent/agent-shared.js +550 -0
  46. package/server/engine/agent/auto-mode-default-hard-deny.txt +4 -0
  47. package/server/engine/agent/auto-mode-rules.js +78 -0
  48. package/server/engine/agent/context.js +418 -0
  49. package/server/engine/agent/events.js +464 -0
  50. package/server/engine/agent/hooks/canvas-validate.js +199 -0
  51. package/server/engine/agent/hooks/failure.js +120 -0
  52. package/server/engine/agent/hooks/file-events.js +75 -0
  53. package/server/engine/agent/hooks/lifecycle.js +233 -0
  54. package/server/engine/agent/hooks/post-canvas-focus.js +80 -0
  55. package/server/engine/agent/hooks/post-guidance.js +206 -0
  56. package/server/engine/agent/hooks/post-subagent-report.js +104 -0
  57. package/server/engine/agent/hooks/post-trim.js +58 -0
  58. package/server/engine/agent/hooks/pre-board-neighborhood.js +34 -0
  59. package/server/engine/agent/hooks/pre-defaults.js +84 -0
  60. package/server/engine/agent/hooks/pre-injectors.js +277 -0
  61. package/server/engine/agent/hooks/pre-performance-log-guard.js +78 -0
  62. package/server/engine/agent/hooks/pre-starter-files.js +61 -0
  63. package/server/engine/agent/hooks/pre-workspace-scope-guard.js +78 -0
  64. package/server/engine/agent/hooks/site-validate.js +94 -0
  65. package/server/engine/agent/hooks/tool-prompts.js +31 -0
  66. package/server/engine/agent/hooks/turn-state-memory.js +56 -0
  67. package/server/engine/agent/hooks/user-prompt-submit.js +215 -0
  68. package/server/engine/agent/hooks.js +354 -0
  69. package/server/engine/agent/init-contract.js +69 -0
  70. package/server/engine/agent/isolation.js +159 -0
  71. package/server/engine/agent/model-context.js +359 -0
  72. package/server/engine/agent/model-table.js +292 -0
  73. package/server/engine/agent/plugin-loader.js +266 -0
  74. package/server/engine/agent/prompts/nodesign-prelude.md +336 -0
  75. package/server/engine/agent/prompts/tools/ask-user-question-protocol.md +71 -0
  76. package/server/engine/agent/prompts/tools/direct-edit-protocol.md +98 -0
  77. package/server/engine/agent/prompts/tools/generate-image-cookbook.gemini-gateway.md +583 -0
  78. package/server/engine/agent/prompts/tools/generate-image-cookbook.md +483 -0
  79. package/server/engine/agent/prompts/tools/hybrid-reference.md +100 -0
  80. package/server/engine/agent/prompts/tools/paint-still-cookbook.md +270 -0
  81. package/server/engine/agent/prompts/tools/roll-film-cookbook.md +70 -0
  82. package/server/engine/agent/prompts/tools/site-reference.md +106 -0
  83. package/server/engine/agent/prompts/tools/tweaks-syntax.md +125 -0
  84. package/server/engine/agent/prompts/tools/vision-checker-dispatch.md +48 -0
  85. package/server/engine/agent/session-loop.js +1024 -0
  86. package/server/engine/agent/session-model.js +164 -0
  87. package/server/engine/agent/skill.js +204 -0
  88. package/server/engine/agent/system-prompts.js +86 -0
  89. package/server/engine/agent/task-events.js +78 -0
  90. package/server/engine/agents/ds-extractor.md +132 -0
  91. package/server/engine/agents/explorer.md +190 -0
  92. package/server/engine/agents/index.js +230 -0
  93. package/server/engine/agents/schemas/design-system.json +156 -0
  94. package/server/engine/agents/schemas/tweak-schema.json +113 -0
  95. package/server/engine/agents/tweak-proposer.md +127 -0
  96. package/server/engine/agents/vision-checker.md +254 -0
  97. package/server/engine/browse/capture.js +422 -0
  98. package/server/engine/browse/card.js +137 -0
  99. package/server/engine/browse/handover.js +59 -0
  100. package/server/engine/browse/page-digest.js +119 -0
  101. package/server/engine/browse/refs.js +196 -0
  102. package/server/engine/browse/registry.js +307 -0
  103. package/server/engine/browse/screencast.js +170 -0
  104. package/server/engine/browse/state.js +121 -0
  105. package/server/engine/chatai/chat-log.js +79 -0
  106. package/server/engine/chatai/index.js +193 -0
  107. package/server/engine/chatai/openai-compat.js +152 -0
  108. package/server/engine/chatai/orchestrate.js +309 -0
  109. package/server/engine/chatai/perform.js +40 -0
  110. package/server/engine/chatai/summarize.js +79 -0
  111. package/server/engine/mcp/capability-gate.js +52 -0
  112. package/server/engine/mcp/index.js +339 -0
  113. package/server/engine/mcp/param-sanitizer.js +142 -0
  114. package/server/engine/mcp/tools/arrange-on-board.js +124 -0
  115. package/server/engine/mcp/tools/artifact-session.js +278 -0
  116. package/server/engine/mcp/tools/browse-computer.js +421 -0
  117. package/server/engine/mcp/tools/browse-find-batch.js +183 -0
  118. package/server/engine/mcp/tools/browse-screenshot.js +157 -0
  119. package/server/engine/mcp/tools/browse.js +480 -0
  120. package/server/engine/mcp/tools/build-docx.js +101 -0
  121. package/server/engine/mcp/tools/clear-pending-changes.js +99 -0
  122. package/server/engine/mcp/tools/create-on-board.js +155 -0
  123. package/server/engine/mcp/tools/crystallize-skill.js +168 -0
  124. package/server/engine/mcp/tools/deliver-files.js +0 -0
  125. package/server/engine/mcp/tools/explain-style.js +237 -0
  126. package/server/engine/mcp/tools/export-handoff.js +133 -0
  127. package/server/engine/mcp/tools/expose-tweaks.js +149 -0
  128. package/server/engine/mcp/tools/generate-image.js +842 -0
  129. package/server/engine/mcp/tools/get-computed-styles.js +164 -0
  130. package/server/engine/mcp/tools/get-pending-changes.js +205 -0
  131. package/server/engine/mcp/tools/h3box-ssh.js +84 -0
  132. package/server/engine/mcp/tools/helpers/acquire-page.js +82 -0
  133. package/server/engine/mcp/tools/helpers/motion-lab.js +554 -0
  134. package/server/engine/mcp/tools/helpers/motion-scroll.js +112 -0
  135. package/server/engine/mcp/tools/helpers/perception-page.js +215 -0
  136. package/server/engine/mcp/tools/helpers/reference-download.js +103 -0
  137. package/server/engine/mcp/tools/helpers/rembg-bridge.py +80 -0
  138. package/server/engine/mcp/tools/helpers/rembg.js +273 -0
  139. package/server/engine/mcp/tools/helpers/shot-pipeline.js +280 -0
  140. package/server/engine/mcp/tools/highlight.js +68 -0
  141. package/server/engine/mcp/tools/list-pages.js +222 -0
  142. package/server/engine/mcp/tools/lookup-tags.js +59 -0
  143. package/server/engine/mcp/tools/navigate-to-page.js +60 -0
  144. package/server/engine/mcp/tools/organize-board.js +64 -0
  145. package/server/engine/mcp/tools/paint-still.js +434 -0
  146. package/server/engine/mcp/tools/pin-to-board.js +130 -0
  147. package/server/engine/mcp/tools/preview-deck.js +130 -0
  148. package/server/engine/mcp/tools/profile-scroll.js +305 -0
  149. package/server/engine/mcp/tools/publish-site.js +102 -0
  150. package/server/engine/mcp/tools/query-elements.js +195 -0
  151. package/server/engine/mcp/tools/read-board.js +103 -0
  152. package/server/engine/mcp/tools/read-document.js +93 -0
  153. package/server/engine/mcp/tools/read-page.js +264 -0
  154. package/server/engine/mcp/tools/read-tavern-json.js +143 -0
  155. package/server/engine/mcp/tools/record-decision.js +140 -0
  156. package/server/engine/mcp/tools/relate-on-board.js +110 -0
  157. package/server/engine/mcp/tools/remove-background.js +391 -0
  158. package/server/engine/mcp/tools/report-issue.js +115 -0
  159. package/server/engine/mcp/tools/roll-film.js +266 -0
  160. package/server/engine/mcp/tools/screenshot-docx.js +138 -0
  161. package/server/engine/mcp/tools/screenshot-url.js +195 -0
  162. package/server/engine/mcp/tools/screenshot.js +583 -0
  163. package/server/engine/mcp/tools/tier-gate.js +96 -0
  164. package/server/engine/mcp/tools/trace-motion.js +215 -0
  165. package/server/engine/mcp/tools/web-search.js +548 -0
  166. package/server/engine/motion/inventory.js +349 -0
  167. package/server/engine/perception/session.js +235 -0
  168. package/server/engine/plugins/nodesign/.claude-plugin/plugin.json +5 -0
  169. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/SKILL.md +192 -0
  170. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/canvas.template.html +667 -0
  171. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/hybrid-grid.md +22 -0
  172. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/image-led-cover.md +25 -0
  173. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/portrait.md +23 -0
  174. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/quote-backdrop.md +21 -0
  175. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/section-divider.md +23 -0
  176. package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/text-led.md +21 -0
  177. package/server/engine/plugins/nodesign/skills/docx-craft/SKILL.md +162 -0
  178. package/server/engine/plugins/nodesign/skills/docx-craft/references/token-schema.md +407 -0
  179. package/server/engine/plugins/nodesign/skills/docx-craft//346/226/207/346/241/243.template.json +80 -0
  180. package/server/engine/plugins/nodesign/skills/rp-craft/SKILL.md +228 -0
  181. 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 +78 -0
  182. package/server/engine/plugins/nodesign/skills/rp-craft//346/274/224/345/207/272.template.js +268 -0
  183. package/server/engine/plugins/nodesign/skills/site-craft/SKILL.md +323 -0
  184. package/server/engine/plugins/nodesign/skills/site-craft/patterns/build-lane.md +134 -0
  185. package/server/engine/plugins/nodesign/skills/site-craft/patterns/cutout-collage.md +61 -0
  186. package/server/engine/plugins/nodesign/skills/site-craft/patterns/mock-app.md +163 -0
  187. package/server/engine/plugins/nodesign/skills/site-craft/patterns/page-transitions.md +86 -0
  188. package/server/engine/runs/active-runs.js +698 -0
  189. package/server/engine/runs/live-turn.js +252 -0
  190. package/server/engine/runs/store.js +364 -0
  191. package/server/engine/runs/turn-relay.js +217 -0
  192. package/server/engine/runtime/workspace.js +164 -0
  193. package/server/index.js +235 -0
  194. package/server/lib/artifact-file-path.js +80 -0
  195. package/server/lib/artifact-target.js +284 -0
  196. package/server/lib/asset-refs.js +239 -0
  197. package/server/lib/async-queue.js +104 -0
  198. package/server/lib/auto-relations.js +130 -0
  199. package/server/lib/binding-types.js +60 -0
  200. package/server/lib/board-kind-sizes.js +62 -0
  201. package/server/lib/board-relations.js +133 -0
  202. package/server/lib/browse-proxy.js +180 -0
  203. package/server/lib/canvas-id.js +36 -0
  204. package/server/lib/cover.js +227 -0
  205. package/server/lib/danbooru-tags.js +291 -0
  206. package/server/lib/doc-extract.js +156 -0
  207. package/server/lib/docx/build-from-source.js +260 -0
  208. package/server/lib/docx/build.js +490 -0
  209. package/server/lib/docx/dump-styles.js +287 -0
  210. package/server/lib/docx/fonts/nodesign-cjk.conf +164 -0
  211. package/server/lib/docx/merge-runs.js +129 -0
  212. package/server/lib/docx/numbering.js +218 -0
  213. package/server/lib/docx/order.js +152 -0
  214. package/server/lib/docx/rawzip.js +172 -0
  215. package/server/lib/docx/render.js +92 -0
  216. package/server/lib/docx/text-lint.js +225 -0
  217. package/server/lib/docx/tokens.js +335 -0
  218. package/server/lib/docx/units.js +29 -0
  219. package/server/lib/docx/xml.js +291 -0
  220. package/server/lib/docx-pages.js +187 -0
  221. package/server/lib/export-collect.js +289 -0
  222. package/server/lib/export-package.js +210 -0
  223. package/server/lib/html-srcset.js +145 -0
  224. package/server/lib/image-variant.js +460 -0
  225. package/server/lib/ingress/forward-openai-chat.js +305 -0
  226. package/server/lib/ingress/openai-chat.js +491 -0
  227. package/server/lib/ingress/session-notice.js +66 -0
  228. package/server/lib/ingress/session-routes.js +68 -0
  229. package/server/lib/ingress/slot-probe.js +130 -0
  230. package/server/lib/ingress/upstream-billing.js +52 -0
  231. package/server/lib/ingress/upstream-fail-streak.js +72 -0
  232. package/server/lib/ingress/upstream-truncation.js +48 -0
  233. package/server/lib/issues-store.js +182 -0
  234. package/server/lib/kinds/deck.js +72 -0
  235. package/server/lib/kinds/docx.js +283 -0
  236. package/server/lib/kinds/file-kinds.js +113 -0
  237. package/server/lib/kinds/index.js +202 -0
  238. package/server/lib/kinds/site.js +161 -0
  239. package/server/lib/model-ingress.js +543 -0
  240. package/server/lib/moderation.js +255 -0
  241. package/server/lib/notice-store.js +103 -0
  242. package/server/lib/plugin-install.js +104 -0
  243. package/server/lib/plugin-validator.js +721 -0
  244. package/server/lib/publish-store.js +115 -0
  245. package/server/lib/quick-summary.js +52 -0
  246. package/server/lib/quota.js +270 -0
  247. package/server/lib/rate-window.js +29 -0
  248. package/server/lib/reference-assets.js +92 -0
  249. package/server/lib/region-shot.js +135 -0
  250. package/server/lib/safe-path.js +73 -0
  251. package/server/lib/sdk-session.js +33 -0
  252. package/server/lib/showcase-store.js +92 -0
  253. package/server/lib/site-publish.js +465 -0
  254. package/server/lib/ssrf-guard.js +432 -0
  255. package/server/lib/task-scan.js +158 -0
  256. package/server/lib/tavern-json.js +154 -0
  257. package/server/lib/video-variant.js +237 -0
  258. package/server/lib/workspace-path.js +33 -0
  259. package/server/ops/fix-sdk-musl.mjs +40 -0
  260. package/server/ops/install-macos-fonts.sh +114 -0
  261. package/server/ops/macos-fonts.conf +336 -0
  262. package/server/ops/sandbox-shim/bwrap +57 -0
  263. package/server/projects/assets-summary.js +119 -0
  264. package/server/projects/auto-name.js +53 -0
  265. package/server/projects/board-store.js +640 -0
  266. package/server/projects/move-entry.js +103 -0
  267. package/server/projects/store.js +270 -0
  268. package/server/projects/ui-config.js +54 -0
  269. package/server/projects/workspace-templates.js +53 -0
  270. package/server/projects/workspace.js +1025 -0
  271. package/server/runtime/capabilities.js +153 -0
  272. package/server/runtime/local-config.js +177 -0
  273. package/server/runtime/local-env.js +88 -0
  274. package/server/runtime/platform.js +342 -0
  275. package/server/runtime/profile.js +72 -0
  276. package/server/services/rembg-launcher.js +313 -0
  277. package/server/services/rembg-service.py +334 -0
  278. package/server/shared/README.md +25 -0
  279. package/server/shared/deck.js +54 -0
  280. package/server/shared/time.js +49 -0
  281. package/server/style-pipeline/README.md +53 -0
  282. package/server/ws/broker.js +36 -0
  283. package/server/ws/browse-channel.js +177 -0
  284. package/server/ws/index.js +386 -0
  285. package/web/README.md +89 -0
  286. package/web/dist/assets/BrowserWindow-Dc7J7CYc.js +11 -0
  287. package/web/dist/assets/DeckWindow-4G0xX7P3.js +16 -0
  288. package/web/dist/assets/DocxWindow-BXQsoPkh.js +16 -0
  289. package/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  290. package/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  291. package/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  292. package/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  293. package/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  294. package/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  295. package/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  296. package/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  297. package/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  298. package/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  299. package/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  300. package/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  301. package/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  302. package/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  303. package/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  304. package/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  305. package/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  306. package/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  307. package/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  308. package/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  309. package/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  310. package/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  311. package/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  312. package/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  313. package/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  314. package/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  315. package/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  316. package/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  317. package/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  318. package/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  319. package/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  320. package/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  321. package/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  322. package/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  323. package/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  324. package/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  325. package/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  326. package/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  327. package/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  328. package/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  329. package/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  330. package/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  331. package/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  332. package/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  333. package/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  334. package/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  335. package/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  336. package/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  337. package/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  338. package/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  339. package/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  340. package/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  341. package/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  342. package/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  343. package/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  344. package/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  345. package/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  346. package/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  347. package/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  348. package/web/dist/assets/SiteWindow-D6eS-2gM.js +18 -0
  349. package/web/dist/assets/again-D8tfgKKO.webp +0 -0
  350. package/web/dist/assets/caveat-nd-CP6HlsNg.woff2 +0 -0
  351. package/web/dist/assets/clock-xJhvfYpS.webp +0 -0
  352. package/web/dist/assets/film-cut-BBKMwH7q.webp +0 -0
  353. package/web/dist/assets/film-still-BZ_DL9Tt.webp +0 -0
  354. package/web/dist/assets/index-C0KUf6Wd.css +1 -0
  355. package/web/dist/assets/index-Cbl3ATvp.js +2125 -0
  356. package/web/dist/assets/ink-desk-BRbxeDsR.webp +0 -0
  357. package/web/dist/assets/ink-night-Bz4BT3XH.webp +0 -0
  358. package/web/dist/assets/ink-portrait-C0DM4V8Q.webp +0 -0
  359. package/web/dist/assets/longcang-regular-C0uvTuKa.woff2 +0 -0
  360. package/web/dist/assets/lxgw-nd-bold-DbRfiTgo.woff2 +0 -0
  361. package/web/dist/assets/lxgw-nd-regular-CpMw9Ehg.woff2 +0 -0
  362. package/web/dist/assets/pending-edit-apply-DTjo2geW.js +31 -0
  363. package/web/dist/assets/question-8H4HSqxh.webp +0 -0
  364. package/web/dist/assets/reject-BaPJqElj.webp +0 -0
  365. package/web/dist/assets/rotate-cw-LMT3x1Zj.js +11 -0
  366. package/web/dist/assets/rp-portrait-CbrGpew2.webp +0 -0
  367. package/web/dist/assets/rp-street-C4jVKjxx.webp +0 -0
  368. package/web/dist/assets/square-dashed-mouse-pointer-CBoAkfhi.js +11 -0
  369. package/web/dist/assets/tangle-DIxHVNuT.webp +0 -0
  370. package/web/dist/assets/thisone-BylZKglV.webp +0 -0
  371. package/web/dist/assets/thumb-DO1wfK1I.webp +0 -0
  372. package/web/dist/index.html +18 -0
@@ -0,0 +1,31 @@
1
+ import{c as Ne,r as d,j as f,R as N,C as m,F as G,b as rt,G as b,k as ee,e as wt,a2 as Qe,A as We,X as ne,aj as Jt,ak as re,v as oe,al as Tt,am as tn,ad as en,ae as nn,an as rn,w as on,f as sn,l as ln,E as gt,t as Qt,ao as It,ap as jt}from"./index-Cbl3ATvp.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 an=Ne("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);/**
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 cn=Ne("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);function Ct(t){if(!t)return null;const e=t.offsetParent;if(!e)return null;const n=t.getBoundingClientRect(),r=e.getBoundingClientRect();return{x:n.left-r.left+(e.scrollLeft||0),y:n.top-r.top+(e.scrollTop||0),iframeRect:n,containerRect:r}}function Be(t,e,n,r=1){return{left:t.x+e*r,top:t.y+n*r}}function Re(t,e,n,r){var I,j;const i=r.offset??12,{cardWidth:s,cardHeight:a}=r,o=((I=t.iframeRect)==null?void 0:I.width)??0,l=((j=t.iframeRect)==null?void 0:j.height)??0,u=t.x+e.left*n,p=t.y+e.top*n,c=e.width*n,W=t.x+i,k=t.x+o-i,O=t.y+i,L=t.y+l-i;let A=u+c+i;A+s>k&&(A=u-s-i),A<W&&(A=W);let T=p;return T+a>L&&(T=Math.max(O,L-a)),T<O&&(T=O),{left:A,top:T}}const un=3,dn=12;function fn(t,e){const n=Math.max(0,Math.min(t.x+t.w,e.x+e.w)-Math.max(t.x,e.x)),r=Math.max(0,Math.min(t.y+t.h,e.y+e.h)-Math.max(t.y,e.y));return n*r}const _t=t=>Math.max(0,t.w)*Math.max(0,t.h);function pn(t,e,n={}){const r=n.max??dn,i=n.contains||((l,u)=>{var p;return l!==u&&((p=l==null?void 0:l.contains)==null?void 0:p.call(l,u))}),s=_t(e);if(!s)return[];const a=[];for(const l of t){if(!(l!=null&&l.rect))continue;const u=fn(l.rect,e);if(u<=0)continue;const p=_t(l.rect);a.push({...l,overlap:u,coverage:p>0?u/p:0,own:p})}if(!a.length)return[];let o=a.filter(l=>l.own<=s*un);return o.length>1&&(o=o.filter(l=>!o.some(u=>i(l.el,u.el)))),o.length||(o=[a.reduce((u,p)=>p.own<u.own?p:u,a[0])]),o.sort((l,u)=>u.coverage-l.coverage||l.own-u.own),o.slice(0,r).map(({el:l,rect:u,coverage:p,overlap:c})=>({el:l,rect:u,coverage:p,overlap:c}))}function xe(t,e){return{x:Math.min(t.x,e.x),y:Math.min(t.y,e.y),w:Math.abs(e.x-t.x),h:Math.abs(e.y-t.y)}}const hn=400;function gn(t){return!!t&&t.w>4&&t.h>4&&t.w*t.h>=hn}function bn(t,e){const n=i=>i.x<=e.x&&i.y<=e.y&&i.x+i.w>=e.x+e.w&&i.y+i.h>=e.y+e.h;let r=null;for(const i of t)!(i!=null&&i.rect)||!n(i.rect)||(!r||_t(i.rect)<_t(r.rect))&&(r=i);return r}const xn=new Set(["SCRIPT","STYLE","LINK","META","TITLE","HEAD","BR","HTML","BODY"]),ye=300;function ve(t,e,n){const r=t.getBoundingClientRect();return{anchor:Jt(t),tag:t.tagName.toLowerCase(),...t.id?{id:t.id}:{},...typeof t.className=="string"&&t.className?{class:t.className.slice(0,80)}:{},text:(t.textContent||"").trim().replace(/\s+/g," ").slice(0,80),rect:{x:Math.round(r.left+e),y:Math.round(r.top+n),w:Math.round(r.width),h:Math.round(r.height)}}}function Jr({active:t,iframeRef:e,zoom:n=1,onSubmit:r,onExit:i}){const[s,a]=d.useState(null),[o,l]=d.useState(null),[u,p]=d.useState(""),[c,W]=d.useState(!1),[,k]=d.useState(0),O=d.useRef(null);d.useEffect(()=>{if(!t)return;const g=()=>k(h=>h+1);return window.addEventListener("resize",g),()=>window.removeEventListener("resize",g)},[t]),d.useEffect(()=>{t||(a(null),l(null),p(""))},[t]);const L=d.useCallback(()=>{a(null),l(null),p("")},[]);d.useEffect(()=>{if(!t)return;const g=h=>{h.key==="Escape"&&(h.stopPropagation(),o||s?L():i==null||i())};return window.addEventListener("keydown",g,!0),()=>window.removeEventListener("keydown",g,!0)},[t,o,s,L,i]);const A=e==null?void 0:e.current,T=t&&A?Ct(A):null;if(!t||!T)return null;const I=A.contentDocument;if(!I)return null;const j=T.iframeRect.width,C=T.iframeRect.height,x=g=>{const h=O.current.getBoundingClientRect();return{x:Math.min(Math.max(0,g.clientX-h.left),j),y:Math.min(Math.max(0,g.clientY-h.top),C)}},y=g=>{var D,U;if(g.button!==0||o)return;g.preventDefault(),g.stopPropagation(),(U=(D=g.currentTarget).setPointerCapture)==null||U.call(D,g.pointerId);const h=x(g);a({from:h,to:h})},S=g=>{s&&(g.stopPropagation(),a(h=>h&&{...h,to:x(g)}))},J=g=>{if(!s)return;g.stopPropagation();const h=xe(s.from,s.to);if(a(null),!gn(h))return;const D={x:h.x/n,y:h.y/n,w:h.w/n,h:h.h/n},U=[];for(const Q of I.body.querySelectorAll("*")){if(xn.has(Q.tagName))continue;const Z=Q.getBoundingClientRect();Z.width<=0||Z.height<=0||U.push({el:Q,rect:{x:Z.left,y:Z.top,w:Z.width,h:Z.height}})}const Y=pn(U,D),ot=bn(U,D),$=I.scrollingElement||I.documentElement,v=($==null?void 0:$.scrollLeft)||0,M=($==null?void 0:$.scrollTop)||0,F=A.contentWindow;l({box:h,region:{x:Math.round(D.x+v),y:Math.round(D.y+M),w:Math.round(D.w),h:Math.round(D.h)},viewport:{width:Math.round((F==null?void 0:F.innerWidth)||j/n),height:Math.round((F==null?void 0:F.innerHeight)||C/n)},container:ot?ve(ot.el,v,M):null,elements:Y.map(({el:Q,coverage:Z})=>({...ve(Q,v,M),coverage:Math.round(Z*100)/100}))})},K=async()=>{if(!(!o||c)){W(!0);try{await(r==null?void 0:r({region:o.region,viewport:o.viewport,container:o.container,elements:o.elements,text:u.trim()})),L(),i==null||i()}finally{W(!1)}}},z=s?xe(s.from,s.to):null,R=(o==null?void 0:o.box)||z;let q=0,X=0;if(o){const g=o.box;q=g.y+g.h+10,q+190>C&&(q=Math.max(8,g.y-190-10)),X=Math.min(Math.max(8,g.x),Math.max(8,j-ye-8))}return f.jsxs("div",{ref:O,"data-no-pan":!0,onPointerDown:y,onPointerMove:S,onPointerUp:J,onPointerCancel:()=>a(null),style:{position:"absolute",left:T.x,top:T.y,width:j,height:C,zIndex:40,cursor:o?"default":"crosshair",background:o?"transparent":"rgba(32,26,14,0.10)",touchAction:"none"},children:[R&&f.jsxs(f.Fragment,{children:[f.jsx("div",{style:{position:"absolute",left:R.x,top:R.y,width:R.w,height:R.h,border:`2px solid ${m.btn}`,borderRadius:N.sm,background:"rgba(255,255,255,0.06)",boxShadow:"0 0 0 9999px rgba(32,26,14,0.18)",pointerEvents:"none"}}),o&&f.jsxs("div",{style:{position:"absolute",left:R.x,top:Math.max(0,R.y-20),padding:"1px 7px",borderRadius:N.sm,background:m.text,color:m.bgWhite,fontFamily:rt,fontSize:G.xxs,whiteSpace:"nowrap",pointerEvents:"none"},children:["框住 ",o.elements.length," 个元素"]})]}),o&&f.jsxs("div",{onPointerDown:g=>g.stopPropagation(),style:{position:"absolute",left:X,top:q,width:ye,background:m.bgWhite,borderRadius:N.lg,boxShadow:ee.far,padding:b.md,display:"flex",flexDirection:"column",gap:b.sm},children:[f.jsxs("div",{style:{fontFamily:wt,fontSize:G.xs,color:m.sub,lineHeight:1.5},children:[o.elements.slice(0,3).map(g=>`<${g.tag}>${g.text?` ${g.text.slice(0,14)}`:""}`).join("、"),o.elements.length>3?` 等 ${o.elements.length} 个`:""]}),f.jsx("textarea",{value:u,autoFocus:!0,onChange:g=>p(g.target.value),onKeyDown:g=>{g.key==="Enter"&&(g.metaKey||g.ctrlKey)&&(g.preventDefault(),K())},placeholder:"这一块想说什么…(可以不写,框本身就是话)",style:{width:"100%",boxSizing:"border-box",minHeight:64,resize:"vertical",fontFamily:wt,fontSize:G.sm,color:m.text,lineHeight:1.6,border:`1px solid ${m.borderLt}`,borderRadius:N.md,padding:b.sm,outline:"none",background:m.bg}}),f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:b.sm},children:[f.jsxs("button",{onClick:K,disabled:c,style:{display:"inline-flex",alignItems:"center",gap:b.xs,padding:`5px ${b.lg}px`,borderRadius:N.pill,border:"none",background:m.btn,color:m.btnText,fontFamily:wt,fontSize:G.sm,fontWeight:600,cursor:c?"default":"pointer",opacity:c?.7:1},children:[c?f.jsxs(f.Fragment,{children:[f.jsx(Qe,{size:12,style:{animation:"spin 1s linear infinite"}})," 截图中…"]}):f.jsxs(f.Fragment,{children:[f.jsx(We,{size:12})," 发给 agent"]}),f.jsx("style",{children:"@keyframes spin{to{transform:rotate(360deg)}}"})]}),f.jsxs("button",{onClick:L,style:{display:"inline-flex",alignItems:"center",gap:b.xs,padding:`5px ${b.md}px`,borderRadius:N.pill,border:`1px solid ${m.borderLt}`,background:"transparent",color:m.sub,fontFamily:wt,fontSize:G.xs,cursor:"pointer"},children:[f.jsx(ne,{size:11})," 重画"]}),f.jsx("span",{style:{marginLeft:"auto",fontFamily:rt,fontSize:G.xxs,color:m.dim},children:"⌘↵"})]})]})]})}const me="__nodesignBridgeState";function Ke(t){return t[me]||(t[me]={})}function Qr(t,{onTextEdit:e,onSelect:n}={}){const r=Ge(t);if(!r)return;yn(t);const i=Ke(t),s=o=>{const l=o.target;if(!l||l.nodeType!==1||!vn(l)||pt(l))return;o.preventDefault(),o.stopPropagation(),l.setAttribute("contenteditable","true"),l.style.outline="2px solid #2d2418",l.style.outlineOffset="4px",l.focus();const u=r.createRange();u.selectNodeContents(l);const p=r.getSelection();p==null||p.removeAllRanges(),p==null||p.addRange(u);const c=l.textContent,W=()=>{l.removeEventListener("blur",k),l.removeEventListener("keydown",O),l.removeAttribute("contenteditable"),l.style.outline="",l.style.outlineOffset=""},k=()=>{const L=l.textContent;W(),L!==c&&(e==null||e({anchor:Jt(l),oldText:c,newText:L}))},O=L=>{if(L.key==="Escape")l.textContent=c,l.blur();else if(L.key==="Enter"&&!L.shiftKey){if(re(L))return;L.preventDefault(),l.blur()}};l.addEventListener("blur",k),l.addEventListener("keydown",O)},a=o=>{var u,p;if(((p=(u=o.target).getAttribute)==null?void 0:p.call(u,"contenteditable"))==="true")return;const l=o.target;if(!(!l||l.nodeType!==1)){if(l===r.body||l===r.documentElement){n==null||n({anchor:null});return}n==null||n({anchor:Jt(l)})}};r.addEventListener("dblclick",s,!0),r.addEventListener("click",a,!0),i.handleDblClick=s,i.handleClick=a,i.mode="edit"}function yn(t){const e=Ge(t);if(!e)return;const n=Ke(t);n.handleDblClick&&e.removeEventListener("dblclick",n.handleDblClick,!0),n.handleClick&&e.removeEventListener("click",n.handleClick,!0),e.querySelectorAll('[contenteditable="true"]').forEach(i=>{i.removeAttribute("contenteditable"),i.style.outline="",i.style.outlineOffset=""}),n.handleDblClick=null,n.handleClick=null,n.mode=null}function Ge(t){var e;try{return(t==null?void 0:t.contentDocument)||((e=t==null?void 0:t.contentWindow)==null?void 0:e.document)||null}catch{return null}}function vn(t){return!t||t.nodeType!==1||t.querySelector(":scope > div, :scope > section, :scope > article, :scope > main, :scope > header, :scope > footer, :scope > nav, :scope > ul, :scope > ol")?!1:["H1","H2","H3","H4","H5","H6","P","SPAN","LI","DIV","A","STRONG","EM","SMALL","LABEL","BUTTON"].includes(t.tagName)}function pt(t){let e=t;for(;e&&e.nodeType===1;){if(e.hasAttribute&&e.hasAttribute("data-react-mount"))return!0;if(e.tagName==="SECTION"&&e.hasAttribute("data-page")||e.tagName==="BODY"||e.tagName==="HTML")return!1;e=e.parentNode}return!1}function to({selectedAnchor:t,iframeRef:e,zoom:n=1}){const[,r]=d.useState(0);if(d.useEffect(()=>{if(!t)return;const T=e==null?void 0:e.current;if(!T)return;const I=T.contentWindow;if(!I)return;let j=null;const C=()=>{j||(j=requestAnimationFrame(()=>{j=null,r(x=>x+1)}))};try{I.addEventListener("scroll",C,{passive:!0,capture:!0}),I.addEventListener("resize",C),window.addEventListener("resize",C)}catch{}return()=>{try{I.removeEventListener("scroll",C,{capture:!0}),I.removeEventListener("resize",C),window.removeEventListener("resize",C)}catch{}j&&cancelAnimationFrame(j)}},[t,e]),!t||!(e!=null&&e.current))return null;const i=e.current,s=i.contentDocument;if(!s)return null;const a=oe(t,s.body);if(!a)return null;const o=a.getBoundingClientRect(),l=i.getBoundingClientRect(),u=i.contentWindow,p=(u==null?void 0:u.innerWidth)??l.width/n,c=(u==null?void 0:u.innerHeight)??l.height/n;if(o.bottom<=0||o.top>=c||o.right<=0||o.left>=p)return null;const W=Ct(i);if(!W)return null;const{top:k,left:O}=Be(W,o.left,o.top,n),L=o.width*n,A=o.height*n;return f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:k-4,left:O-4,width:L+8,height:A+8,border:`2px solid ${m.btn}`,borderRadius:N.sm,boxShadow:"0 0 0 4px rgba(45, 36, 24, 0.08)",zIndex:10}})}function we(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function mn(t){if(Array.isArray(t))return t}function wn(t,e,n){return(e=kn(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Sn(t,e){var n=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(n!=null){var r,i,s,a,o=[],l=!0,u=!1;try{if(s=(n=n.call(t)).next,e!==0)for(;!(l=(r=s.call(n)).done)&&(o.push(r.value),o.length!==e);l=!0);}catch(p){u=!0,i=p}finally{try{if(!l&&n.return!=null&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw i}}return o}}function Mn(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
12
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Se(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function Me(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Se(Object(n),!0).forEach(function(r){wn(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Se(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function En(t,e){if(t==null)return{};var n,r,i=Ln(t,e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(r=0;r<s.length;r++)n=s[r],e.indexOf(n)===-1&&{}.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function Ln(t,e){if(t==null)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(e.indexOf(r)!==-1)continue;n[r]=t[r]}return n}function jn(t,e){return mn(t)||Sn(t,e)||On(t,e)||Mn()}function Cn(t,e){if(typeof t!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e);if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function kn(t){var e=Cn(t,"string");return typeof e=="symbol"?e:e+""}function On(t,e){if(t){if(typeof t=="string")return we(t,e);var n={}.toString.call(t).slice(8,-1);return n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set"?Array.from(t):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?we(t,e):void 0}}function Tn(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Ee(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function Le(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Ee(Object(n),!0).forEach(function(r){Tn(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ee(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function In(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return function(r){return e.reduceRight(function(i,s){return s(i)},r)}}function Pt(t){return function e(){for(var n=this,r=arguments.length,i=new Array(r),s=0;s<r;s++)i[s]=arguments[s];return i.length>=t.length?t.apply(this,i):function(){for(var a=arguments.length,o=new Array(a),l=0;l<a;l++)o[l]=arguments[l];return e.apply(n,[].concat(i,o))}}}function Vt(t){return{}.toString.call(t).includes("Object")}function An(t){return!Object.keys(t).length}function Ht(t){return typeof t=="function"}function zn(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function $n(t,e){return Vt(e)||St("changeType"),Object.keys(e).some(function(n){return!zn(t,n)})&&St("changeField"),e}function Dn(t){Ht(t)||St("selectorType")}function Pn(t){Ht(t)||Vt(t)||St("handlerType"),Vt(t)&&Object.values(t).some(function(e){return!Ht(e)})&&St("handlersType")}function Fn(t){t||St("initialIsRequired"),Vt(t)||St("initialType"),An(t)&&St("initialContent")}function Hn(t,e){throw new Error(t[e]||t.default)}var Nn={initialIsRequired:"initial state is required",initialType:"initial state should be an object",initialContent:"initial state shouldn't be an empty object",handlerType:"handler should be an object or a function",handlersType:"all handlers should be a functions",selectorType:"selector should be a function",changeType:"provided value of changes should be an object",changeField:'it seams you want to change a field in the state which is not specified in the "initial" state',default:"an unknown error accured in `state-local` package"},St=Pt(Hn)(Nn),Kt={changes:$n,selector:Dn,handler:Pn,initial:Fn};function Wn(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};Kt.initial(t),Kt.handler(e);var n={current:t},r=Pt(Kn)(n,e),i=Pt(Rn)(n),s=Pt(Kt.changes)(t),a=Pt(Bn)(n);function o(){var u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(p){return p};return Kt.selector(u),u(n.current)}function l(u){In(r,i,s,a)(u)}return[o,l]}function Bn(t,e){return Ht(e)?e(t.current):e}function Rn(t,e){return t.current=Le(Le({},t.current),e),e}function Kn(t,e,n){return Ht(e)?e(t.current):Object.keys(n).forEach(function(r){var i;return(i=e[r])===null||i===void 0?void 0:i.call(e,t.current[r])}),n}var Gn={create:Wn},_n={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}};function Vn(t){return function e(){for(var n=this,r=arguments.length,i=new Array(r),s=0;s<r;s++)i[s]=arguments[s];return i.length>=t.length?t.apply(this,i):function(){for(var a=arguments.length,o=new Array(a),l=0;l<a;l++)o[l]=arguments[l];return e.apply(n,[].concat(i,o))}}}function Xn(t){return{}.toString.call(t).includes("Object")}function Yn(t){return t||je("configIsRequired"),Xn(t)||je("configType"),t.urls?(qn(),{paths:{vs:t.urls.monacoBase}}):t}function qn(){console.warn(_e.deprecation)}function Un(t,e){throw new Error(t[e]||t.default)}var _e={configIsRequired:"the configuration object is required",configType:"the configuration object should be an object",default:"an unknown error accured in `@monaco-editor/loader` package",deprecation:`Deprecation warning!
13
+ You are using deprecated way of configuration.
14
+
15
+ Instead of using
16
+ monaco.config({ urls: { monacoBase: '...' } })
17
+ use
18
+ monaco.config({ paths: { vs: '...' } })
19
+
20
+ For more please check the link https://github.com/suren-atoyan/monaco-loader#config
21
+ `},je=Vn(Un)(_e),Zn={config:Yn},Jn=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return function(i){return n.reduceRight(function(s,a){return a(s)},i)}};function Ve(t,e){return Object.keys(e).forEach(function(n){e[n]instanceof Object&&t[n]&&Object.assign(e[n],Ve(t[n],e[n]))}),Me(Me({},t),e)}var Qn={type:"cancelation",msg:"operation is manually canceled"};function Yt(t){var e=!1,n=new Promise(function(r,i){t.then(function(s){return e?i(Qn):r(s)}),t.catch(i)});return n.cancel=function(){return e=!0},n}var tr=["monaco"],er=Gn.create({config:_n,isInitialized:!1,resolve:null,reject:null,monaco:null}),Xe=jn(er,2),Nt=Xe[0],Xt=Xe[1];function nr(t){var e=Zn.config(t),n=e.monaco,r=En(e,tr);Xt(function(i){return{config:Ve(i.config,r),monaco:n}})}function rr(){var t=Nt(function(e){var n=e.monaco,r=e.isInitialized,i=e.resolve;return{monaco:n,isInitialized:r,resolve:i}});if(!t.isInitialized){if(Xt({isInitialized:!0}),t.monaco)return t.resolve(t.monaco),Yt(qt);if(window.monaco&&window.monaco.editor)return Ye(window.monaco),t.resolve(window.monaco),Yt(qt);Jn(or,sr)(lr)}return Yt(qt)}function or(t){return document.body.appendChild(t)}function ir(t){var e=document.createElement("script");return t&&(e.src=t),e}function sr(t){var e=Nt(function(r){var i=r.config,s=r.reject;return{config:i,reject:s}}),n=ir("".concat(e.config.paths.vs,"/loader.js"));return n.onload=function(){return t()},n.onerror=e.reject,n}function lr(){var t=Nt(function(n){var r=n.config,i=n.resolve,s=n.reject;return{config:r,resolve:i,reject:s}}),e=window.require;e.config(t.config),e(["vs/editor/editor.main"],function(n){var r=n.m||n;Ye(r),t.resolve(r)},function(n){t.reject(n)})}function Ye(t){Nt().monaco||Xt({monaco:t})}function ar(){return Nt(function(t){var e=t.monaco;return e})}var qt=new Promise(function(t,e){return Xt({resolve:t,reject:e})}),qe={config:nr,init:rr,__getMonacoInstance:ar},cr={wrapper:{display:"flex",position:"relative",textAlign:"initial"},fullWidth:{width:"100%"},hide:{display:"none"}},Ut=cr,ur={container:{display:"flex",height:"100%",width:"100%",justifyContent:"center",alignItems:"center"}},dr=ur;function fr({children:t}){return Tt.createElement("div",{style:dr.container},t)}var pr=fr,hr=pr;function gr({width:t,height:e,isEditorReady:n,loading:r,_ref:i,className:s,wrapperProps:a}){return Tt.createElement("section",{style:{...Ut.wrapper,width:t,height:e},...a},!n&&Tt.createElement(hr,null,r),Tt.createElement("div",{ref:i,style:{...Ut.fullWidth,...!n&&Ut.hide},className:s}))}var br=gr,Ue=d.memo(br);function xr(t){d.useEffect(t,[])}var Ze=xr;function yr(t,e,n=!0){let r=d.useRef(!0);d.useEffect(r.current||!n?()=>{r.current=!1}:t,e)}var ct=yr;function Ft(){}function Ot(t,e,n,r){return vr(t,r)||mr(t,e,n,r)}function vr(t,e){return t.editor.getModel(Je(t,e))}function mr(t,e,n,r){return t.editor.createModel(e,n,r?Je(t,r):void 0)}function Je(t,e){return t.Uri.parse(e)}function wr({original:t,modified:e,language:n,originalLanguage:r,modifiedLanguage:i,originalModelPath:s,modifiedModelPath:a,keepCurrentOriginalModel:o=!1,keepCurrentModifiedModel:l=!1,theme:u="light",loading:p="Loading...",options:c={},height:W="100%",width:k="100%",className:O,wrapperProps:L={},beforeMount:A=Ft,onMount:T=Ft}){let[I,j]=d.useState(!1),[C,x]=d.useState(!0),y=d.useRef(null),S=d.useRef(null),J=d.useRef(null),K=d.useRef(T),z=d.useRef(A),R=d.useRef(!1);Ze(()=>{let h=qe.init();return h.then(D=>(S.current=D)&&x(!1)).catch(D=>(D==null?void 0:D.type)!=="cancelation"&&console.error("Monaco initialization: error:",D)),()=>y.current?g():h.cancel()}),ct(()=>{if(y.current&&S.current){let h=y.current.getOriginalEditor(),D=Ot(S.current,t||"",r||n||"text",s||"");D!==h.getModel()&&h.setModel(D)}},[s],I),ct(()=>{if(y.current&&S.current){let h=y.current.getModifiedEditor(),D=Ot(S.current,e||"",i||n||"text",a||"");D!==h.getModel()&&h.setModel(D)}},[a],I),ct(()=>{let h=y.current.getModifiedEditor();h.getOption(S.current.editor.EditorOption.readOnly)?h.setValue(e||""):e!==h.getValue()&&(h.executeEdits("",[{range:h.getModel().getFullModelRange(),text:e||"",forceMoveMarkers:!0}]),h.pushUndoStop())},[e],I),ct(()=>{var h,D;(D=(h=y.current)==null?void 0:h.getModel())==null||D.original.setValue(t||"")},[t],I),ct(()=>{let{original:h,modified:D}=y.current.getModel();S.current.editor.setModelLanguage(h,r||n||"text"),S.current.editor.setModelLanguage(D,i||n||"text")},[n,r,i],I),ct(()=>{var h;(h=S.current)==null||h.editor.setTheme(u)},[u],I),ct(()=>{var h;(h=y.current)==null||h.updateOptions(c)},[c],I);let q=d.useCallback(()=>{var U;if(!S.current)return;z.current(S.current);let h=Ot(S.current,t||"",r||n||"text",s||""),D=Ot(S.current,e||"",i||n||"text",a||"");(U=y.current)==null||U.setModel({original:h,modified:D})},[n,e,i,t,r,s,a]),X=d.useCallback(()=>{var h;!R.current&&J.current&&(y.current=S.current.editor.createDiffEditor(J.current,{automaticLayout:!0,...c}),q(),(h=S.current)==null||h.editor.setTheme(u),j(!0),R.current=!0)},[c,u,q]);d.useEffect(()=>{I&&K.current(y.current,S.current)},[I]),d.useEffect(()=>{!C&&!I&&X()},[C,I,X]);function g(){var D,U,Y,ot;let h=(D=y.current)==null?void 0:D.getModel();o||((U=h==null?void 0:h.original)==null||U.dispose()),l||((Y=h==null?void 0:h.modified)==null||Y.dispose()),(ot=y.current)==null||ot.dispose()}return Tt.createElement(Ue,{width:k,height:W,isEditorReady:I,loading:p,_ref:J,className:O,wrapperProps:L})}var Sr=wr;d.memo(Sr);function Mr(t){let e=d.useRef();return d.useEffect(()=>{e.current=t},[t]),e.current}var Er=Mr,Gt=new Map;function Lr({defaultValue:t,defaultLanguage:e,defaultPath:n,value:r,language:i,path:s,theme:a="light",line:o,loading:l="Loading...",options:u={},overrideServices:p={},saveViewState:c=!0,keepCurrentModel:W=!1,width:k="100%",height:O="100%",className:L,wrapperProps:A={},beforeMount:T=Ft,onMount:I=Ft,onChange:j,onValidate:C=Ft}){let[x,y]=d.useState(!1),[S,J]=d.useState(!0),K=d.useRef(null),z=d.useRef(null),R=d.useRef(null),q=d.useRef(I),X=d.useRef(T),g=d.useRef(),h=d.useRef(r),D=Er(s),U=d.useRef(!1),Y=d.useRef(!1);Ze(()=>{let v=qe.init();return v.then(M=>(K.current=M)&&J(!1)).catch(M=>(M==null?void 0:M.type)!=="cancelation"&&console.error("Monaco initialization: error:",M)),()=>z.current?$():v.cancel()}),ct(()=>{var M,F,Q,Z;let v=Ot(K.current,t||r||"",e||i||"",s||n||"");v!==((M=z.current)==null?void 0:M.getModel())&&(c&&Gt.set(D,(F=z.current)==null?void 0:F.saveViewState()),(Q=z.current)==null||Q.setModel(v),c&&((Z=z.current)==null||Z.restoreViewState(Gt.get(s))))},[s],x),ct(()=>{var v;(v=z.current)==null||v.updateOptions(u)},[u],x),ct(()=>{!z.current||r===void 0||(z.current.getOption(K.current.editor.EditorOption.readOnly)?z.current.setValue(r):r!==z.current.getValue()&&(Y.current=!0,z.current.executeEdits("",[{range:z.current.getModel().getFullModelRange(),text:r,forceMoveMarkers:!0}]),z.current.pushUndoStop(),Y.current=!1))},[r],x),ct(()=>{var M,F;let v=(M=z.current)==null?void 0:M.getModel();v&&i&&((F=K.current)==null||F.editor.setModelLanguage(v,i))},[i],x),ct(()=>{var v;o!==void 0&&((v=z.current)==null||v.revealLine(o))},[o],x),ct(()=>{var v;(v=K.current)==null||v.editor.setTheme(a)},[a],x);let ot=d.useCallback(()=>{var v;if(!(!R.current||!K.current)&&!U.current){X.current(K.current);let M=s||n,F=Ot(K.current,r||t||"",e||i||"",M||"");z.current=(v=K.current)==null?void 0:v.editor.create(R.current,{model:F,automaticLayout:!0,...u},p),c&&z.current.restoreViewState(Gt.get(M)),K.current.editor.setTheme(a),o!==void 0&&z.current.revealLine(o),y(!0),U.current=!0}},[t,e,n,r,i,s,u,p,c,a,o]);d.useEffect(()=>{x&&q.current(z.current,K.current)},[x]),d.useEffect(()=>{!S&&!x&&ot()},[S,x,ot]),h.current=r,d.useEffect(()=>{var v,M;x&&j&&((v=g.current)==null||v.dispose(),g.current=(M=z.current)==null?void 0:M.onDidChangeModelContent(F=>{Y.current||j(z.current.getValue(),F)}))},[x,j]),d.useEffect(()=>{if(x){let v=K.current.editor.onDidChangeMarkers(M=>{var Q;let F=(Q=z.current.getModel())==null?void 0:Q.uri;if(F&&M.find(Z=>Z.path===F.path)){let Z=K.current.editor.getModelMarkers({resource:F});C==null||C(Z)}});return()=>{v==null||v.dispose()}}return()=>{}},[x,C]);function $(){var v,M;(v=g.current)==null||v.dispose(),W?c&&Gt.set(s,z.current.saveViewState()):(M=z.current.getModel())==null||M.dispose(),z.current.dispose()}return Tt.createElement(Ue,{width:k,height:O,isEditorReady:x,loading:l,_ref:R,className:L,wrapperProps:A})}var jr=Lr,Cr=d.memo(jr),kr=Cr;function eo({value:t="",onChange:e,readOnly:n=!1}){const[r,i]=d.useState(t),s=r!==t;d.useEffect(()=>{s||i(t)},[t]),d.useEffect(()=>{if(!s)return;const o=setTimeout(()=>e==null?void 0:e(r),800);return()=>clearTimeout(o)},[r,s,e]);const a=()=>{s&&(e==null||e(r))};return f.jsxs("div",{style:{flex:1,minHeight:0,position:"relative",background:m.bgCard,display:"flex",flexDirection:"column"},children:[f.jsxs("div",{style:{flexShrink:0,padding:`${b.sm}px ${b.lg}px`,background:"rgba(0,0,0,0.04)",borderBottom:`1px solid ${m.borderLt}`,fontFamily:rt,fontSize:G.xs,color:m.sub,display:"flex",justifyContent:"space-between",alignItems:"center"},children:[f.jsxs("span",{children:["deck.html",s&&f.jsx("span",{style:{color:m.warn,marginLeft:b.sm},children:"· 已修改"})]}),f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:b.sm},children:[s&&f.jsxs("button",{onClick:a,style:{display:"inline-flex",alignItems:"center",gap:b.xs,padding:`${b.xxs}px ${b.md}px`,fontFamily:wt,fontSize:G.sm,fontWeight:500,color:m.btnText,background:m.btn,border:"none",borderRadius:N.sm,cursor:"pointer"},children:[f.jsx(tn,{size:10})," 应用"]}),f.jsx("span",{style:{fontSize:G.xs},children:n?"只读":"改完会同步到 Edit / Preview"})]})]}),f.jsx("div",{style:{flex:1,minHeight:0},children:f.jsx(kr,{defaultLanguage:"html",value:r,onChange:o=>i(o??""),theme:"light",options:{readOnly:n,minimap:{enabled:!1},fontSize:12,fontFamily:"'SF Mono', 'Cascadia Code', 'Menlo', monospace",lineNumbers:"on",renderLineHighlight:"none",scrollBeyondLastLine:!1,wordWrap:"on",tabSize:2},loading:f.jsx("div",{style:{padding:b.xl,fontFamily:rt,fontSize:G.sm,color:m.sub},children:"Monaco 加载中…"})})})]})}const Ce=340,Or=8,ke=520;function no({selectedAnchor:t,redactText:e=void 0,iframeDoc:n,iframeRef:r,iframeRect:i,zoom:s=1,comments:a=[],onClose:o,onAddComment:l,onResolveComment:u,onDeleteComment:p}){var D,U,Y,ot;const c=d.useRef(null),[,W]=d.useState(0),[k,O]=d.useState(""),[L,A]=d.useState(0);d.useEffect(()=>{if(!t||!(r!=null&&r.current))return;const v=r.current.contentWindow;if(!v)return;let M=null;const F=()=>{M||(M=requestAnimationFrame(()=>{M=null,W(Q=>Q+1)}))};try{v.addEventListener("scroll",F,{passive:!0,capture:!0}),v.addEventListener("resize",F),window.addEventListener("resize",F)}catch{}return()=>{try{v.removeEventListener("scroll",F,{capture:!0}),v.removeEventListener("resize",F),window.removeEventListener("resize",F)}catch{}M&&cancelAnimationFrame(M)}},[t,r]),d.useEffect(()=>{if(!c.current)return;const $=new ResizeObserver(()=>{var M;const v=((M=c.current)==null?void 0:M.offsetHeight)||0;A(F=>F!==v?v:F)});return $.observe(c.current),()=>$.disconnect()},[t]);const T=d.useMemo(()=>t&&n?oe(t,n.body):null,[t,n]),I=d.useMemo(()=>t?a.filter($=>{var v,M;return t.dataId&&((v=$.anchor)!=null&&v.dataId)?$.anchor.dataId===t.dataId:((M=$.anchor)==null?void 0:M.path)===t.path}):[],[a,t]),j=d.useCallback(()=>{const $=k.trim();if(!$||!T)return;const v=en(T,{redactText:e});l==null||l({anchor:e?nn(t):t,scope:"this",aiContext:v,text:$}),O("")},[k,T,t,l,e]),C=$=>{if($.key==="Enter"&&!$.shiftKey){if(re($))return;$.preventDefault(),j()}},x=d.useCallback(()=>{if(T)try{T.scrollIntoView({behavior:"smooth",block:"center"})}catch{}},[T]);if(!t||!T||!i||i.width===0)return null;const y=T.getBoundingClientRect(),S=((U=(D=r==null?void 0:r.current)==null?void 0:D.contentWindow)==null?void 0:U.innerWidth)??i.width/s,J=((ot=(Y=r==null?void 0:r.current)==null?void 0:Y.contentWindow)==null?void 0:ot.innerHeight)??i.height/s,K=y.bottom<=0||y.top>=J||y.right<=0||y.left>=S,z=Ct(r==null?void 0:r.current)||{x:0,y:0,iframeRect:i},{left:R,top:q}=Re(z,y,s,{cardWidth:Ce,cardHeight:L||ke,offset:Or}),X=rn(T),g=on(T),h=T.tagName.toLowerCase();return f.jsxs("div",{ref:c,style:{position:"absolute",left:R,top:q,width:Ce,maxHeight:ke,background:m.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:50,display:"flex",flexDirection:"column",overflow:"hidden"},onMouseDown:$=>$.stopPropagation(),children:[f.jsxs("div",{style:{padding:`${b.md}px ${b.lg}px`,display:"flex",alignItems:"center",gap:b.sm,borderBottom:`1px solid ${m.borderLt}`,flexShrink:0,background:"rgba(255,255,255,0.95)"},children:[f.jsxs("span",{style:{fontFamily:rt,fontSize:G.xs,color:m.text4,background:"rgba(0,0,0,0.05)",padding:`1px ${b.sm}px`,borderRadius:N.xs},children:["<",h,">"]}),f.jsxs("span",{style:{fontFamily:wt,fontSize:G.sm,fontWeight:500,color:m.text,flex:1,minWidth:0,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:[(g==null?void 0:g.index)!==void 0&&g.index!==null&&`第 ${g.index} 页 · `,X]}),K&&f.jsx("button",{onClick:x,title:"滚动到该元素",style:{padding:b.xs,color:m.text4,borderRadius:N.xs,background:"rgba(0,0,0,0.04)"},children:f.jsx(an,{size:11})}),f.jsx("button",{onClick:o,title:"关闭(ESC)",style:{padding:b.xs,color:m.text5,borderRadius:N.xs},children:f.jsx(ne,{size:12})})]}),f.jsx("div",{style:{flex:1,minHeight:0,overflowY:"auto"},children:f.jsxs("div",{style:{padding:`${b.md}px ${b.lg}px`,borderBottom:`1px solid ${m.borderLt}`,background:"rgba(0,0,0,0.015)"},children:[f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:b.xs,fontFamily:rt,fontSize:G.xs,color:m.sub,textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:b.sm},children:[f.jsx(cn,{size:10}),"评论 ",I.length>0&&`(${I.length})`]}),I.length>0&&f.jsx("div",{style:{display:"flex",flexDirection:"column",gap:b.xs,marginBottom:b.sm},children:I.map($=>f.jsx(Tr,{comment:$,onResolve:()=>u==null?void 0:u($.id),onDelete:()=>p==null?void 0:p($.id)},$.id))}),f.jsx("textarea",{value:k,onChange:$=>O($.target.value),onKeyDown:C,placeholder:"评论这个元素,让 AI 看看…(Enter 提交,Shift+Enter 换行)",rows:2,style:{width:"100%",padding:`${b.sm}px ${b.md}px`,fontFamily:wt,fontSize:G.sm,color:m.text2,background:m.bgWhite,boxShadow:ee.far,borderRadius:N.sm,resize:"vertical",boxSizing:"border-box",outline:"none"},onFocus:$=>{$.currentTarget.style.borderColor=m.btn},onBlur:$=>{$.currentTarget.style.borderColor=m.borderLt}})]})})]})}function Tr({comment:t,onResolve:e,onDelete:n}){const r=t.status==="resolved";return f.jsxs("div",{style:{padding:`${b.xs}px ${b.sm}px`,background:m.bgWhite,boxShadow:ee.far,borderRadius:N.sm,display:"flex",flexDirection:"column",gap:b.xs,opacity:r?.5:1},children:[f.jsx("div",{style:{fontFamily:wt,fontSize:G.xs,color:m.text2,lineHeight:1.5,textDecoration:r?"line-through":"none",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:t.text}),f.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"flex-end",gap:b.xs},children:[f.jsx("button",{onClick:e,title:r?"取消解决":"标记解决",style:{padding:b.xxs,color:m.sub,borderRadius:N.xs},children:f.jsx(sn,{size:10})}),f.jsx("button",{onClick:n,title:"删除",style:{padding:b.xxs,color:m.sub,borderRadius:N.xs},children:f.jsx(ln,{size:10})})]})]})}function ro({comments:t=[],iframeRef:e,zoom:n=1,onSelectAnchor:r}){const[,i]=d.useState(0);d.useEffect(()=>{if(t.length===0)return;const k=e==null?void 0:e.current;if(!k)return;const O=k.contentWindow;if(!O)return;let L=null;const A=()=>{L||(L=requestAnimationFrame(()=>{L=null,i(T=>T+1)}))};try{O.addEventListener("scroll",A,{passive:!0,capture:!0}),O.addEventListener("resize",A),window.addEventListener("resize",A)}catch{}return()=>{try{O.removeEventListener("scroll",A,{capture:!0}),O.removeEventListener("resize",A),window.removeEventListener("resize",A)}catch{}L&&cancelAnimationFrame(L)}},[t.length,e]);const s=d.useMemo(()=>{const k=new Map;for(const O of t){if(O.status==="resolved"||!O.anchor)continue;const L=O.anchor.dataId||O.anchor.path;L&&(k.has(L)||k.set(L,{anchor:O.anchor,items:[]}),k.get(L).items.push(O))}return[...k.values()]},[t]);if(s.length===0||!(e!=null&&e.current))return null;const a=e.current,o=a.contentDocument;if(!o)return null;const l=a.getBoundingClientRect(),u=Ct(a);if(!u)return null;const p=a.contentWindow,c=(p==null?void 0:p.innerWidth)??l.width/n,W=(p==null?void 0:p.innerHeight)??l.height/n;return f.jsx(f.Fragment,{children:s.map((k,O)=>{var J;const L=oe(k.anchor,o.body);if(!L)return null;const A=L.getBoundingClientRect();if(A.bottom<=0||A.top>=W||A.right<=0||A.left>=c)return null;const{top:T,left:I}=Be(u,A.left,A.top,n),j=A.width*n,C=A.height*n,x=k.items.length,y=((J=k.items[0])==null?void 0:J.text)||"",S=y.length>28?y.slice(0,28)+"…":y;return f.jsxs("div",{style:{position:"absolute",top:0,left:0,pointerEvents:"none"},children:[f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:T-3,left:I-3,width:j+6,height:C+6,border:`2px solid ${Oe}`,borderRadius:N.sm,boxShadow:`0 0 0 3px ${Ir}`,zIndex:9}}),f.jsx("button",{onClick:()=>r==null?void 0:r(k.anchor),title:x>1?`${x} 条评论 — 点击查看`:`已评论:${y}`,style:{position:"absolute",pointerEvents:"auto",top:T-12,left:I+j-8,transform:"translateX(-100%)",padding:`${b.xxs}px ${b.sm}px`,fontFamily:rt,fontSize:G.xs,lineHeight:"14px",fontWeight:500,color:m.bgWhite,background:Oe,border:"none",borderRadius:N.xs,whiteSpace:"nowrap",cursor:"pointer",boxShadow:Qt.crisp,zIndex:11,maxWidth:Math.max(60,j),overflow:"hidden",textOverflow:"ellipsis"},children:x>1?`已评论 ${x}`:S||"已评论"})]},O)})})}const Oe=gt.orange,Ir="rgba(230, 126, 34, 0.18)";function Ar(t,e,n){var a;if(!t||!n)return null;const r=n.ownerDocument.defaultView;let i=t,s=0;for(;i&&i.nodeType===1&&i!==n&&i!==n.ownerDocument.documentElement;){if(e&&(i===e||e.contains(i))){i=i.parentElement,s++;continue}if(i.children&&i.children.length>=1){const o=(a=r==null?void 0:r.getComputedStyle)==null?void 0:a.call(r,i),l=(o==null?void 0:o.display)||"block",u=l==="block"||l==="flex"||l==="grid"||l==="inline-block"||l==="inline-flex"||l==="inline-grid"||l==="list-item"||l==="table"||l==="table-cell",p=!["A","BUTTON","LABEL","SPAN","CODE","STRONG","EM","I"].includes(i.tagName);if(u&&p)return{container:i,depth:s}}i=i.parentElement,s++}return n.children&&n.children.length>0?{container:n,depth:s}:null}function zr(t){if(!t||t.nodeType!==1||["A","BUTTON","LABEL","SPAN","CODE","STRONG","EM","I","IMG","SVG"].includes(t.tagName))return!1;const e=t.ownerDocument.defaultView;if(!e)return!1;const r=e.getComputedStyle(t).display;return r==="block"||r==="flex"||r==="grid"||r==="inline-block"||r==="inline-flex"||r==="inline-grid"||r==="list-item"||r==="table"||r==="table-cell"}function $r(t,e,n){if(!e||!t)return null;let r=e;for(;r&&r!==t;){if(n&&(r===n||n.contains(r)))return null;if(r.parentElement===t)return r;r=r.parentElement}return null}function Dr(t,e){const n=Array.from(t.children).filter(u=>u!==e&&u.nodeType===1);if(n.length<2){const u=t.ownerDocument.defaultView,p=u?u.getComputedStyle(t):null;return p&&(p.display==="flex"||p.display==="inline-flex")?(p.flexDirection||"row").startsWith("row"):!1}const r=n[0].getBoundingClientRect(),i=n[1].getBoundingClientRect(),s=!(r.right<=i.left||i.right<=r.left),a=!(r.bottom<=i.top||i.bottom<=r.top);if(!s&&a)return!0;if(s&&!a)return!1;const o=t.ownerDocument.defaultView,l=o?o.getComputedStyle(t):null;return l&&(l.display==="flex"||l.display==="inline-flex")?(l.flexDirection||"row").startsWith("row"):!1}function Pr(t,e,n,r){if(!t)return null;const i=Dr(t,n),s=$r(t,e,n);if(s&&s!==n){const o=s.getBoundingClientRect();let l,u;i?(l=(r.x-o.left)/o.width,u=o.width):(l=(r.y-o.top)/o.height,u=o.height),l=Math.max(0,Math.min(1,l));const p=u>=60&&zr(s),c=p?.25:.5,W=p?.75:.5;return l<c?{intent:"sibling-before",targetContainer:t,beforeEl:s,hitChild:s,caretRect:i?{x:o.left-1,y:o.top,w:2,h:o.height,vertical:!0}:{x:o.left,y:o.top-1,w:o.width,h:2,vertical:!1},zoneRect:null,horizontal:i}:l>=W?{intent:"sibling-after",targetContainer:t,beforeEl:s.nextElementSibling||null,hitChild:s,caretRect:i?{x:o.right-1,y:o.top,w:2,h:o.height,vertical:!0}:{x:o.left,y:o.bottom-1,w:o.width,h:2,vertical:!1},zoneRect:null,horizontal:i}:{intent:"child-of",targetContainer:s,beforeEl:null,hitChild:s,caretRect:null,zoneRect:{x:o.left,y:o.top,w:o.width,h:o.height},horizontal:i}}const a=Fr(t,n,r);return a?{intent:a.before?"sibling-before":"sibling-after",targetContainer:t,beforeEl:a.before,hitChild:null,caretRect:a.caretRect,zoneRect:null,horizontal:i}:null}function Fr(t,e,n){if(!t)return null;const r=Array.from(t.children).filter(a=>a!==e&&a.nodeType===1);if(r.length===0){const a=t.getBoundingClientRect();return{before:null,caretRect:{x:a.left+4,y:a.top+4,w:Math.max(2,a.width-8),h:2,vertical:!1}}}let i=!1;if(r.length>=2){const a=r[0].getBoundingClientRect(),o=r[1].getBoundingClientRect(),l=!(a.right<=o.left||o.right<=a.left),u=!(a.bottom<=o.top||o.bottom<=a.top);if(!l&&u)i=!0;else if(l&&!u)i=!1;else{const p=t.ownerDocument.defaultView.getComputedStyle(t),c=p.flexDirection||"row";i=(p.display==="flex"||p.display==="inline-flex")&&(c==="row"||c==="row-reverse")}}else{const a=r[0].getBoundingClientRect(),o=Math.abs(n.x-(a.left+a.width/2)),l=Math.abs(n.y-(a.top+a.height/2));i=o>l}for(let a=0;a<r.length;a++){const o=r[a].getBoundingClientRect();if(i){const l=o.left+o.width/2;if(n.x<l)return{before:r[a],caretRect:{x:o.left-1,y:o.top,w:2,h:o.height,vertical:!0}}}else{const l=o.top+o.height/2;if(n.y<l)return{before:r[a],caretRect:{x:o.left,y:o.top-1,w:o.width,h:2,vertical:!1}}}}const s=r[r.length-1].getBoundingClientRect();return i?{before:null,caretRect:{x:s.right-1,y:s.top,w:2,h:s.height,vertical:!0}}:{before:null,caretRect:{x:s.left,y:s.bottom-1,w:s.width,h:2,vertical:!1}}}const kt=5;function Te(t,e){const n=[];if(!t||!Array.isArray(e))return n;const r=t.left+t.width/2,i=t.top+t.height/2;for(const a of e){if(!a||!a.rect)continue;const o=a.rect,l=o.left+o.width/2,u=o.top+o.height/2;Math.abs(t.left-o.left)<=kt?n.push({axis:"x",value:o.left,hint:"edge-left",neighbor:a.el}):Math.abs(r-l)<=kt?n.push({axis:"x",value:l,hint:"center-x",neighbor:a.el}):Math.abs(t.right-o.right)<=kt&&n.push({axis:"x",value:o.right,hint:"edge-right",neighbor:a.el}),Math.abs(t.top-o.top)<=kt?n.push({axis:"y",value:o.top,hint:"edge-top",neighbor:a.el}):Math.abs(i-u)<=kt?n.push({axis:"y",value:u,hint:"center-y",neighbor:a.el}):Math.abs(t.bottom-o.bottom)<=kt&&n.push({axis:"y",value:o.bottom,hint:"edge-bottom",neighbor:a.el})}const s=new Set;return n.filter(a=>{const o=`${a.axis}:${Math.round(a.value)}`;return s.has(o)?!1:(s.add(o),!0)})}function Hr(t,e,n,r){return!t||!e?t:Math.abs(n)>=Math.abs(r)?{...t,top:e.top,bottom:e.top+t.height}:{...t,left:e.left,right:e.left+t.width}}function Nr(t,e,n=3){if(!t||!Array.isArray(e)||e.length===0)return t;let r=t.left,i=t.top;const s=t.left+t.width/2,a=t.top+t.height/2;for(const o of e)o.axis==="x"?o.hint==="edge-left"&&Math.abs(t.left-o.value)<=n?r=o.value:o.hint==="edge-right"&&Math.abs(t.right-o.value)<=n?r=o.value-t.width:o.hint==="center-x"&&Math.abs(s-o.value)<=n&&(r=o.value-t.width/2):o.axis==="y"&&(o.hint==="edge-top"&&Math.abs(t.top-o.value)<=n?i=o.value:o.hint==="edge-bottom"&&Math.abs(t.bottom-o.value)<=n?i=o.value-t.height:o.hint==="center-y"&&Math.abs(a-o.value)<=n&&(i=o.value-t.height/2));return{...t,left:r,top:i,right:r+t.width,bottom:i+t.height}}const Ie=4;function Wr(t,e){if(!t||!Array.isArray(e)||e.length<2)return[];const n=[],r=e.filter(s=>s.rect&&!(s.rect.bottom<t.top||s.rect.top>t.bottom));for(const s of r)for(const a of r){if(s===a||!s.rect||!a.rect||s.rect.right>=t.left||a.rect.left<=t.right)continue;const o=t.left-s.rect.right,l=a.rect.left-t.right;if(Math.abs(o-l)<=Ie){const u=(o+l)/2;n.push({side:"horizontal",gap:Math.round(u),snapTo:{left:s.rect.right+u},neighbors:[s.el,a.el]})}}const i=e.filter(s=>s.rect&&!(s.rect.right<t.left||s.rect.left>t.right));for(const s of i)for(const a of i){if(s===a||!s.rect||!a.rect||s.rect.bottom>=t.top||a.rect.top<=t.bottom)continue;const o=t.top-s.rect.bottom,l=a.rect.top-t.bottom;if(Math.abs(o-l)<=Ie){const u=(o+l)/2;n.push({side:"vertical",gap:Math.round(u),snapTo:{top:s.rect.bottom+u},neighbors:[s.el,a.el]})}}return n}function Ae(t,e){if(!t||!Array.isArray(e))return[];const n=[],r={top:{best:1/0,label:null},bottom:{best:1/0,label:null},left:{best:1/0,label:null},right:{best:1/0,label:null}};for(const i of e){if(!i||!i.rect)continue;const s=i.rect;if(!(s.right<t.left||s.left>t.right)){if(s.bottom<=t.top){const l=t.top-s.bottom;l<r.top.best&&(r.top.best=l,r.top.label={side:"top",gap:l,labelRect:{x:t.left+t.width/2-14,y:s.bottom+l/2-8,w:28,h:16}})}else if(s.top>=t.bottom){const l=s.top-t.bottom;l<r.bottom.best&&(r.bottom.best=l,r.bottom.label={side:"bottom",gap:l,labelRect:{x:t.left+t.width/2-14,y:t.bottom+l/2-8,w:28,h:16}})}}if(!(s.bottom<t.top||s.top>t.bottom)){if(s.right<=t.left){const l=t.left-s.right;l<r.left.best&&(r.left.best=l,r.left.label={side:"left",gap:l,labelRect:{x:s.right+l/2-14,y:t.top+t.height/2-8,w:28,h:16}})}else if(s.left>=t.right){const l=s.left-t.right;l<r.right.best&&(r.right.best=l,r.right.label={side:"right",gap:l,labelRect:{x:t.right+l/2-14,y:t.top+t.height/2-8,w:28,h:16}})}}}for(const i of Object.values(r))i.label&&i.label.gap>=0&&i.label.gap<200&&n.push(i.label);return n}function Zt(t,e,n="siblings"){if(!t)return[];const r=[],i=(a,o)=>{if(!(!a||o>2))for(const l of a.children)!l||l.nodeType!==1||e&&(l===e||e.contains(l))||(r.push({el:l,rect:l.getBoundingClientRect()}),n==="deep"&&o<2&&i(l,o+1))};i(t,0);const s=t.parentElement;if(s&&s!==t.ownerDocument.body)for(const a of s.children)a===t||a.nodeType!==1||e&&(a===e||e.contains(a))||r.push({el:a,rect:a.getBoundingClientRect()});return r}function ze({sourceEl:t,parentEl:e,left:n,top:r}){if(!t||!e)return null;It(t),It(e);const i=pt(t)||pt(e),s=e.ownerDocument.defaultView,a=s?s.getComputedStyle(e):null,o=a&&a.position==="static",l=t.getBoundingClientRect(),u=t.ownerDocument.defaultView,p=u?u.getComputedStyle(t):null,c={position:"absolute",left:`${n}px`,top:`${r}px`},W={width:`${Math.round(l.width)}px`,height:`${Math.round(l.height)}px`,margin:"0px",transform:"none"};return{sourceAnchor:jt(t),styleDelta:c,runtimeLocks:W,parentAnchor:jt(e),parentNeedsRelative:o,reactMount:i,aiContext:{sourceTag:t.tagName.toLowerCase(),sourceTextHint:(t.textContent||"").trim().slice(0,40),parentTag:e.tagName.toLowerCase(),parentNeedsRelative:o,preDragGeometry:{w:Math.round(l.width),h:Math.round(l.height)},neighbors:te(e,t),preDragLayout:p?{display:p.display,position:p.position,flex:p.flex,flexGrow:p.flexGrow,flexBasis:p.flexBasis,gridArea:p.gridArea,gridColumn:p.gridColumn,gridRow:p.gridRow,width:p.width,height:p.height,margin:p.margin,transform:p.transform}:null,hint:"free-position (absolute). User intent = position/left/top ONLY. preDragLayout shows source's pre-drag computed styles for your decision on whether additional width/height locks are needed to preserve geometry."}}}function te(t,e){if(!t)return[];const n=[];for(const r of t.children){if(!r||r.nodeType!==1||r===e)continue;It(r);const i=r.getBoundingClientRect();n.push({anchor:jt(r),tag:r.tagName.toLowerCase(),rect:{w:Math.round(i.width),h:Math.round(i.height)}})}return n}function Br({sourceEl:t,targetContainer:e,beforeEl:n,intent:r="sibling-before",alignmentHints:i=[]}){if(!t||!e)return null;It(t),It(e),n&&It(n);const s=pt(t)||pt(e),a=t.parentElement,o=te(a,t),l=e===a?o:te(e,t);return{sourceAnchor:jt(t),move:{container:jt(e),before:n?jt(n):null,intent:r},reactMount:s,aiContext:{sourceTag:t.tagName.toLowerCase(),sourceTextHint:(t.textContent||"").trim().slice(0,40),targetContainerTag:e.tagName.toLowerCase(),targetTextHint:(e.textContent||"").trim().slice(0,60),intent:r,alignmentHints:i,neighbors:{sourceParent:o,targetContainer:l}}}}const Rr="rgba(45, 36, 24, 0.85)",mt=gt.blue,$e=gt.magenta,Kr=gt.blue,Gr=3;function oo({active:t,iframeRef:e,zoom:n=1,freeMode:r=!1,onFreeModeChange:i,onCommitMove:s,onCommitFreePosition:a,onCancel:o,apiRef:l,onDraggingChange:u,onSelectionChange:p}){var se,le,ae,ce,ue,Wt,de,fe;const[c,W]=d.useState(null),[k,O]=d.useState(null),[,L]=d.useState(0);d.useEffect(()=>{if(!t)return;const w=e==null?void 0:e.current;if(!w)return;const E=w.contentWindow;if(!E)return;let B=null;const tt=()=>{B||(B=requestAnimationFrame(()=>{B=null,L(P=>P+1)}))};try{E.addEventListener("scroll",tt,{passive:!0,capture:!0}),E.addEventListener("resize",tt),window.addEventListener("resize",tt)}catch{}return()=>{try{E.removeEventListener("scroll",tt,{capture:!0}),E.removeEventListener("resize",tt),window.removeEventListener("resize",tt)}catch{}B&&cancelAnimationFrame(B)}},[t,e]),d.useEffect(()=>{if(!t)return;const w=e==null?void 0:e.current;if(!w)return;const E=_r(w);if(!E)return;const B=E.body;if(!B)return;const tt=B.style.userSelect;B.style.userSelect="none";let P={source:null,startX:0,startY:0,started:!1,altKey:!1,autoFree:!1};const dt=H=>{var nt;if(H.button!==0)return;const et=H.target;if(!et||et.nodeType!==1||et===B||et===E.documentElement)return;const V=Fe(et,B);if(!V)return;H.preventDefault(),H.stopPropagation();let lt=!1;try{const it=E.defaultView.getComputedStyle(V).position;lt=it==="absolute"||it==="fixed"}catch{}P={source:V,startX:H.clientX,startY:H.clientY,started:!1,altKey:H.altKey,autoFree:lt},(nt=X.current)==null||nt.call(X,!0)},At=(H,et,V)=>{var nt;if(!H)return;const lt=Pe(w,et,V,n);P={source:H,startX:lt.x,startY:lt.y,started:!1,altKey:!1,autoFree:!1},(nt=X.current)==null||nt.call(X,!0)};l&&(l.current={startDrag:At,pickDragSource:Fe});const zt=H=>{if(!P.source)return;let et,V;if(H.view===w.contentWindow)et=H.clientX,V=H.clientY;else{const st=Pe(w,H.clientX,H.clientY,n);et=st.x,V=st.y}const lt=et-P.startX,nt=V-P.startY;if(!P.started){if(Math.hypot(lt,nt)<Gr)return;P.started=!0}H.preventDefault();const it=P.source.getBoundingClientRect();let _={left:it.left+lt,top:it.top+nt,right:it.right+lt,bottom:it.bottom+nt,width:it.width,height:it.height};H.shiftKey&&(_=Hr(_,it,lt,nt));const bt=_.left+_.width/2,Mt=_.top+_.height/2,Et=C.current||P.autoFree;let ht=null,at=null,ut=[],xt=[];if(J.current=H,Et){const st=P.source.parentElement;if(st){const ft=Zt(st,P.source);ut=Te(_,ft),xt=Ae(_,ft)}}else{const st=P.source.style.pointerEvents;P.source.style.pointerEvents="none";const ft=E.elementFromPoint(bt,Mt);if(P.source.style.pointerEvents=st,ht=ft?Ar(ft,P.source,B):null,ht){at=Pr(ht.container,ft,P.source,{x:bt,y:Mt});const $t=Zt(ht.container,P.source);if(ut=Te(_,$t),xt=Ae(_,$t),at&&at.intent==="child-of"){const Lt=at.hitChild,Dt=Date.now();y.current===Lt||(x.current.hitChild===Lt?Dt-x.current.ts>=150?y.current=Lt:at=De(at):(x.current={hitChild:Lt,ts:Dt},y.current=null,at=De(at),S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{S.current=null,P.source&&J.current&&zt(J.current)},160)))}else x.current={hitChild:null,ts:0},y.current=null,S.current&&(clearTimeout(S.current),S.current=null)}}ut.length>0&&(_=Nr(_,ut,3));let yt=[];if(Et){const st=P.source.parentElement;if(st){const ft=Zt(st,P.source);yt=Wr(_,ft)}}W({source:P.source,sourceRect:it,ghostRect:_,dropTarget:ht,dropIntent:at,alignGuides:ut,distanceLabels:xt,smartSpacing:yt,reactMount:pt(P.source),freeMode:Et,autoFree:P.autoFree,duplicate:P.altKey})},Bt=H=>{var xt,yt,st,ft,$t,Lt,Dt;if(!P.source)return;const et=P.started,V=P.source,lt=et?A.current:null,nt=et?T.current:null,it=et?I.current:[],_=et?j.current:null,bt=C.current||P.autoFree,Mt=P.altKey;if(P={source:null,startX:0,startY:0,started:!1,altKey:!1,autoFree:!1},W(null),(xt=X.current)==null||xt.call(X,!1),!et)return;if(bt&&_){const vt=V.parentElement;if(!vt){(yt=q.current)==null||yt.call(q);return}const pe=vt.getBoundingClientRect(),he=Math.round(_.left-pe.left),ge=Math.round(_.top-pe.top),be=ze({sourceEl:V,parentEl:vt,left:he,top:ge});be&&((st=R.current)==null||st.call(R,be,{sourceEl:V,parentEl:vt,left:he,top:ge}),K.current=V,(ft=g.current)==null||ft.call(g,V),requestAnimationFrame(()=>{try{O({rect:V.getBoundingClientRect(),ts:Date.now()}),setTimeout(()=>O(null),350)}catch{}}));return}if(!lt||!nt){($t=q.current)==null||$t.call(q);return}const Et=it.map(vt=>Vr(vt)),ht=nt.targetContainer,at=nt.beforeEl,ut=Br({sourceEl:V,targetContainer:ht,beforeEl:at,intent:nt.intent,alignmentHints:Et});ut&&(Mt&&(ut.duplicate=!0),(Lt=z.current)==null||Lt.call(z,ut,{sourceEl:V,targetContainer:ht,beforeEl:at,duplicate:Mt}),K.current=V,(Dt=g.current)==null||Dt.call(g,V),requestAnimationFrame(()=>{try{const vt=V.getBoundingClientRect();O({rect:vt,ts:Date.now()}),setTimeout(()=>O(null),350)}catch{}}))},Rt=H=>{var V,lt,nt,it;if(H.key==="Escape"&&P.source){H.preventDefault(),P={source:null,startX:0,startY:0,started:!1,altKey:!1,autoFree:!1},W(null),(V=X.current)==null||V.call(X,!1),(lt=q.current)==null||lt.call(q);return}if((H.key==="p"||H.key==="P")&&!H.metaKey&&!H.ctrlKey&&!H.altKey){H.preventDefault(),(nt=h.current)==null||nt.call(h,!C.current);return}if(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"].includes(H.key)&&K.current&&C.current){const _=K.current;if(!_.isConnected){K.current=null;return}H.preventDefault();const bt=H.shiftKey?10:1,Mt=H.key==="ArrowLeft"?-bt:H.key==="ArrowRight"?bt:0,Et=H.key==="ArrowUp"?-bt:H.key==="ArrowDown"?bt:0,ht=parseFloat(_.style.left)||0,at=parseFloat(_.style.top)||0,ut=Math.round(ht+Mt),xt=Math.round(at+Et),yt=_.parentElement,st=ze({sourceEl:_,parentEl:yt,left:ut,top:xt});st&&((it=R.current)==null||it.call(R,st,{sourceEl:_,parentEl:yt,left:ut,top:xt}))}};return E.addEventListener("mousedown",dt,!0),window.addEventListener("mousemove",zt,!0),window.addEventListener("mouseup",Bt,!0),window.addEventListener("keydown",Rt),E.addEventListener("mousemove",zt,!0),E.addEventListener("mouseup",Bt,!0),E.addEventListener("keydown",Rt,!0),()=>{try{E.removeEventListener("mousedown",dt,!0),window.removeEventListener("mousemove",zt,!0),window.removeEventListener("mouseup",Bt,!0),window.removeEventListener("keydown",Rt),E.removeEventListener("mousemove",zt,!0),E.removeEventListener("mouseup",Bt,!0),E.removeEventListener("keydown",Rt,!0)}catch{}B.style.userSelect=tt,l&&(l.current=null),S.current&&(clearTimeout(S.current),S.current=null),x.current={hitChild:null,ts:0},y.current=null}},[t,n]);const A=d.useRef(null),T=d.useRef(null),I=d.useRef([]),j=d.useRef(null),C=d.useRef(!1),x=d.useRef({hitChild:null,ts:0}),y=d.useRef(null),S=d.useRef(null),J=d.useRef(null),K=d.useRef(null),z=d.useRef(s),R=d.useRef(a),q=d.useRef(o),X=d.useRef(u),g=d.useRef(p),h=d.useRef(i);if(z.current=s,R.current=a,q.current=o,X.current=u,g.current=p,h.current=i,d.useEffect(()=>{A.current=(c==null?void 0:c.dropTarget)||null,T.current=(c==null?void 0:c.dropIntent)||null,I.current=(c==null?void 0:c.alignGuides)||[],j.current=(c==null?void 0:c.ghostRect)||null},[c]),d.useEffect(()=>{C.current=r},[r]),!t||!(e!=null&&e.current))return null;const D=e.current;D.getBoundingClientRect();const U=Ct(D);if(!U)return null;const Y=(w,E,B,tt)=>({top:U.y+E*n,left:U.x+w*n,width:B*n,height:tt*n});if(!c){const w=k?(()=>{const E=Y(k.rect.left,k.rect.top,k.rect.width,k.rect.height);return f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:E.top-4,left:E.left-4,width:E.width+8,height:E.height+8,border:`3px solid ${mt}`,borderRadius:N.sm,background:"rgba(58, 122, 254, 0.12)",boxShadow:"0 0 16px rgba(58, 122, 254, 0.5)",zIndex:25,animation:"nd-drag-landing-flash 350ms ease-out forwards"}})})():null;return f.jsxs(f.Fragment,{children:[w,w&&f.jsx("style",{children:`
22
+ @keyframes nd-drag-landing-flash {
23
+ 0% { opacity: 1; transform: scale(1.02); }
24
+ 100% { opacity: 0; transform: scale(1); }
25
+ }
26
+ `})]})}const ot=Y(c.ghostRect.left,c.ghostRect.top,c.ghostRect.width,c.ghostRect.height),$=Y(c.sourceRect.left,c.sourceRect.top,c.sourceRect.width,c.sourceRect.height),v=(se=c.dropIntent)==null?void 0:se.intent,M=v==="child-of",F=c.dropTarget&&c.source&&((le=c.dropIntent)==null?void 0:le.targetContainer)===c.source.parentElement;let Q=null;if(!M&&((ae=c.dropIntent)!=null&&ae.caretRect)){const w=c.dropIntent.caretRect,E=c.sourceRect.width,B=c.sourceRect.height;let tt,P,dt,At;w.vertical?(tt=w.x-E/2,P=w.y,dt=E,At=w.h):(tt=w.x,P=w.y-B/2,dt=w.w,At=B),Q=Y(tt,P,dt,At)}let Z=null,ie=null;if(M&&((ce=c.dropIntent)!=null&&ce.zoneRect)){const w=c.dropIntent.zoneRect;Z=Y(w.x,w.y,w.w,w.h),ie=((de=(Wt=(ue=c.dropIntent.hitChild)==null?void 0:ue.tagName)==null?void 0:Wt.toLowerCase)==null?void 0:de.call(Wt))||"container"}return f.jsxs(f.Fragment,{children:[f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:$.top,left:$.left,width:$.width,height:$.height,border:`2px dashed rgba(45, 36, 24, ${F?.18:.3})`,borderRadius:N.sm,zIndex:20,opacity:F?.5:1}}),f.jsxs("div",{style:{position:"absolute",pointerEvents:"none",top:ot.top,left:ot.left,width:ot.width,height:ot.height,background:c.freeMode?"rgba(20, 184, 166, 0.10)":"rgba(58, 122, 254, 0.08)",border:`2px solid ${c.freeMode?gt.teal:Rr}`,borderRadius:N.sm,boxShadow:c.freeMode?"0 8px 24px rgba(20, 184, 166, 0.30)":"0 8px 24px rgba(0,0,0,0.18)",zIndex:30,opacity:.92},children:[c.freeMode&&f.jsx("div",{style:{position:"absolute",top:-22,left:0,padding:`${b.xxs}px ${b.md}px`,fontSize:G.xs,lineHeight:"14px",fontWeight:600,fontFamily:rt,color:m.bgWhite,background:gt.teal,borderRadius:N.xs,whiteSpace:"nowrap",boxShadow:Qt.crisp},children:c.autoFree?"📌 绝对定位元素 · 拖动改坐标,不动 DOM 结构":"📌 自由模式 · 落到像素位置(再按 P 切回)"}),!c.freeMode&&c.reactMount&&f.jsx("div",{style:{position:"absolute",top:-22,left:0,padding:`${b.xxs}px ${b.sm}px`,fontSize:G.xs,lineHeight:"14px",fontFamily:rt,color:m.bgWhite,background:m.warn,borderRadius:N.xs,whiteSpace:"nowrap"},children:"React 区 · 落地改 JSX"}),c.duplicate&&f.jsx("div",{style:{position:"absolute",top:-22,right:0,padding:`${b.xxs}px ${b.md}px`,fontSize:G.xs,lineHeight:"14px",fontWeight:600,fontFamily:rt,color:m.bgWhite,background:gt.violet,borderRadius:N.xs,whiteSpace:"nowrap",boxShadow:"0 1px 3px rgba(139,92,246,0.4)"},children:"⊕ 复制 (Alt-drag)"}),!c.freeMode&&f.jsx("div",{style:{position:"absolute",bottom:-20,right:0,padding:`1px ${b.sm}px`,fontSize:G.xxs,lineHeight:"14px",fontFamily:rt,color:"rgba(255,255,255,0.75)",background:"rgba(45,36,24,0.7)",borderRadius:N.xs,whiteSpace:"nowrap"},children:c.duplicate?"松开 Alt 取消复制":"按 P 切自由 · Alt 复制"})]}),!c.freeMode&&c.dropTarget&&(()=>{const w=c.dropTarget.container.getBoundingClientRect(),E=Y(w.left,w.top,w.width,w.height),B=M;return f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:E.top-2,left:E.left-2,width:E.width+4,height:E.height+4,border:F?`1px dashed ${mt}`:`${B?3:2}px solid ${mt}`,borderRadius:N.sm,background:F?"transparent":`rgba(58, 122, 254, ${B?.1:.04})`,zIndex:18,opacity:F?.45:1}})})(),!c.freeMode&&M&&Z&&f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:Z.top-3,left:Z.left-3,width:Z.width+6,height:Z.height+6,border:`3px solid ${mt}`,background:"rgba(58, 122, 254, 0.14)",borderRadius:5,zIndex:33},children:f.jsxs("div",{style:{position:"absolute",top:-24,left:"50%",transform:"translateX(-50%)",padding:`3px ${b.base}px`,fontSize:G.sm,lineHeight:"14px",fontWeight:600,fontFamily:rt,color:m.bgWhite,background:mt,borderRadius:N.sm,whiteSpace:"nowrap",boxShadow:"0 2px 6px rgba(58, 122, 254, 0.4)"},children:["进入 <",ie,"> 内"]})}),!c.freeMode&&!M&&Q&&f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:Q.top,left:Q.left,width:Q.width,height:Q.height,border:`2px dashed ${mt}`,background:"rgba(58, 122, 254, 0.10)",borderRadius:N.xs,zIndex:32},children:F&&f.jsx("div",{style:{position:"absolute",top:-22,left:"50%",transform:"translateX(-50%)",padding:`${b.xxs}px ${b.md}px`,fontSize:G.xs,lineHeight:"14px",fontWeight:600,fontFamily:rt,color:m.bgWhite,background:mt,borderRadius:N.xs,whiteSpace:"nowrap",boxShadow:Qt.crisp},children:v==="sibling-before"?"插到此 sibling 之前":"插到此 sibling 之后"})}),!c.freeMode&&!M&&((fe=c.dropIntent)==null?void 0:fe.caretRect)&&(()=>{const w=c.dropIntent.caretRect,E=Y(w.x,w.y,w.w,w.h);return f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:E.top,left:E.left,width:Math.max(E.width,2),height:Math.max(E.height,2),background:mt,boxShadow:"0 0 0 2px rgba(58, 122, 254, 0.25)",borderRadius:1,zIndex:35}})})(),c.alignGuides&&c.alignGuides.map((w,E)=>{if(w.axis==="x"){const tt=Y(w.value,0,0,9999);return f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:0,left:tt.left,width:1,height:"100%",borderLeft:`1px dashed ${$e}`,zIndex:28}},E)}const B=Y(0,w.value,9999,0);return f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:B.top,left:0,width:"100%",height:1,borderTop:`1px dashed ${$e}`,zIndex:28}},E)}),c.smartSpacing&&c.smartSpacing.map((w,E)=>{const B=w.side==="horizontal",tt=B?c.ghostRect.left-30:c.ghostRect.left+c.ghostRect.width/2-30,P=B?c.ghostRect.top+c.ghostRect.height/2-8:c.ghostRect.top-22,dt=Y(tt,P,60,16);return f.jsxs("div",{style:{position:"absolute",pointerEvents:"none",top:dt.top,left:dt.left,width:dt.width,height:dt.height,background:gt.green,color:m.bgWhite,borderRadius:N.xs,fontFamily:rt,fontSize:G.xs,lineHeight:"16px",textAlign:"center",fontWeight:600,boxShadow:"0 1px 3px rgba(22,163,74,0.3)",zIndex:37},children:["等距 ",w.gap]},`spc-${E}`)}),c.distanceLabels&&c.distanceLabels.map((w,E)=>{const B=Y(w.labelRect.x,w.labelRect.y,w.labelRect.w,w.labelRect.h);return f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:B.top,left:B.left,width:B.width,height:B.height,background:Kr,color:m.bgWhite,borderRadius:2,fontFamily:rt,fontSize:G.xs,lineHeight:"16px",textAlign:"center",fontWeight:500,zIndex:36},children:Math.round(w.gap)},E)})]})}function De(t){if(!t||!t.hitChild)return t;const e=t.hitChild.getBoundingClientRect(),n=t.horizontal;return{intent:"sibling-after",targetContainer:t.hitChild.parentElement,beforeEl:t.hitChild.nextElementSibling||null,hitChild:t.hitChild,caretRect:n?{x:e.right-1,y:e.top,w:2,h:e.height,vertical:!0}:{x:e.left,y:e.bottom-1,w:e.width,h:2,vertical:!1},zoneRect:null,horizontal:n}}function _r(t){var e;try{return(t==null?void 0:t.contentDocument)||((e=t==null?void 0:t.contentWindow)==null?void 0:e.document)||null}catch{return null}}function Pe(t,e,n,r){if(!t)return{x:e,y:n};const i=t.getBoundingClientRect(),s=r||1,a=t.contentWindow,o=(a==null?void 0:a.scrollX)||0,l=(a==null?void 0:a.scrollY)||0;return{x:(e-i.left)/s+o,y:(n-i.top)/s+l}}function Fe(t,e){let n=t;for(;n&&n.nodeType===1&&n!==e;){if(n===e.ownerDocument.documentElement)return null;const r=n.ownerDocument.defaultView;if(!r)return null;const s=r.getComputedStyle(n).display,a=n.getBoundingClientRect(),o=s&&(s==="block"||s==="flex"||s==="grid"||s==="inline-block"||s==="inline-flex"||s==="inline-grid"||s==="list-item"||s==="table"||s==="table-cell"),l=a.width>=20&&a.height>=20;if(n.tagName==="SECTION"&&n.hasAttribute("data-page"))return null;if(o&&l)return n;n=n.parentElement}return null}function Vr(t){var r,i,s;const e={"edge-left":"左对齐","edge-right":"右对齐","center-x":"水平居中","edge-top":"顶部对齐","edge-bottom":"底部对齐","center-y":"垂直居中"},n=((s=(i=(r=t.neighbor)==null?void 0:r.tagName)==null?void 0:i.toLowerCase)==null?void 0:s.call(i))||"邻居";return`${e[t.hint]||t.hint}(与 ${n})`}const Xr=gt.blue,Yr=m.warn;function io({active:t,iframeRef:e,zoom:n=1,pickDragSource:r,isDragging:i}){var j;const[s,a]=d.useState(null);d.useRef(null);const o=d.useRef(null),[,l]=d.useState(0),u=()=>{o.current&&(clearTimeout(o.current),o.current=null)},p=()=>{u(),o.current=setTimeout(()=>a(null),200)};if(d.useEffect(()=>{if(!t)return;const C=e==null?void 0:e.current;if(!C)return;const x=C.contentWindow;if(!x)return;let y=null;const S=()=>{y||(y=requestAnimationFrame(()=>{y=null,l(J=>J+1)}))};try{x.addEventListener("scroll",S,{passive:!0,capture:!0}),x.addEventListener("resize",S),window.addEventListener("resize",S)}catch{}return()=>{try{x.removeEventListener("scroll",S,{capture:!0}),x.removeEventListener("resize",S),window.removeEventListener("resize",S)}catch{}y&&cancelAnimationFrame(y)}},[t,e]),d.useEffect(()=>{if(!t||i){a(null);return}const C=e==null?void 0:e.current;if(!C)return;const x=C.contentDocument;if(!x)return;const y=x.body;if(!y)return;const S=K=>{const z=K.target;if(!z||z.nodeType!==1||z===y||z===x.documentElement){p();return}const R=r(z,y);if(!R){p();return}u(),a({source:R,rect:R.getBoundingClientRect(),reactMount:pt(R)})},J=()=>p();return x.addEventListener("mousemove",S,!0),x.addEventListener("mouseleave",J),()=>{try{x.removeEventListener("mousemove",S,!0),x.removeEventListener("mouseleave",J)}catch{}u()}},[t,e,r,i]),!t||!s||i||!(e!=null&&e.current))return null;const c=e.current,W=Ct(c);if(!W)return null;const k=s.rect,O=s.reactMount?Yr:Xr,L=W.y+k.top*n-2,A=W.x+k.left*n-2,T=k.width*n+4,I=k.height*n+4;return f.jsxs(f.Fragment,{children:[f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:L,left:A,width:T,height:I,border:`2px dashed ${O}`,borderRadius:N.sm,background:s.reactMount?"rgba(184,92,26,0.04)":"rgba(58,122,254,0.04)",boxShadow:`0 0 0 1px ${s.reactMount?"rgba(184,92,26,0.15)":"rgba(58,122,254,0.15)"}`,zIndex:8}}),f.jsx("div",{style:{position:"absolute",pointerEvents:"none",top:L-18,left:A,padding:`1px ${b.sm}px`,fontFamily:rt,fontSize:G.xxs,lineHeight:"14px",fontWeight:500,color:m.bgWhite,background:O,borderRadius:N.xs,whiteSpace:"nowrap",boxShadow:`0 1px 3px ${s.reactMount?"rgba(184,92,26,0.3)":"rgba(58,122,254,0.3)"}`,zIndex:9},children:s.reactMount?"⊕ 拖动(React 区·改 JSX)":"⊕ 拖动 "+(((j=s.source.tagName)==null?void 0:j.toLowerCase())||"")})]})}const He=260,qr=180;function so({active:t,iframeRef:e,zoom:n=1,sourceEl:r,hasPendingEditId:i,onSubmit:s,onDismiss:a}){const[o,l]=d.useState(""),[u,p]=d.useState(!1),c=d.useRef(null),[,W]=d.useState(0);if(d.useEffect(()=>{l("")},[r]),d.useEffect(()=>{if(!t||!(e!=null&&e.current))return;const C=e.current.contentWindow;if(!C)return;let x=null;const y=()=>{x||(x=requestAnimationFrame(()=>{x=null,W(S=>S+1)}))};try{C.addEventListener("scroll",y,{passive:!0,capture:!0}),C.addEventListener("resize",y),window.addEventListener("resize",y)}catch{}return()=>{try{C.removeEventListener("scroll",y,{capture:!0}),C.removeEventListener("resize",y),window.removeEventListener("resize",y)}catch{}x&&cancelAnimationFrame(x)}},[t,e]),d.useEffect(()=>{if(!t)return;const j=C=>{C.key==="Escape"&&(C.preventDefault(),a==null||a())};return window.addEventListener("keydown",j),()=>window.removeEventListener("keydown",j)},[t,a]),!t||!r||!r.isConnected||!(e!=null&&e.current))return null;const k=Ct(e.current);if(!k)return null;const O=r.getBoundingClientRect(),{left:L,top:A}=Re(k,O,n,{cardWidth:He,cardHeight:qr,offset:10}),T=async()=>{if(!(!o.trim()||u)){p(!0);try{const j=jt(r);await(s==null?void 0:s(j,o)),l(""),a==null||a()}finally{p(!1)}}},I=j=>{if(j.key==="Enter"&&(j.metaKey||j.ctrlKey)){if(re(j))return;j.preventDefault(),T()}};return f.jsxs("div",{style:{position:"absolute",top:A,left:L,width:He,background:"rgba(255,255,255,0.99)",border:`1px solid ${m.borderHv}`,borderRadius:N.lg,boxShadow:"0 8px 24px rgba(0,0,0,0.15)",padding:b.md,zIndex:45,fontFamily:rt,pointerEvents:"auto"},children:[f.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:b.sm},children:[f.jsx("span",{style:{fontSize:G.xxs,color:"rgba(45,36,24,0.6)",textTransform:"uppercase",letterSpacing:.5},children:"可选备注 · 默认最小改动"}),f.jsx("button",{onClick:()=>a==null?void 0:a(),title:"关闭(Esc)",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:16,height:16,padding:0,background:"transparent",border:"none",color:"rgba(45,36,24,0.4)",cursor:"pointer",borderRadius:N.xs},children:f.jsx(ne,{size:11})})]}),f.jsx("textarea",{ref:c,value:o,onChange:j=>l(j.target.value),onKeyDown:I,autoFocus:!1,placeholder:`agent 落地时默认:
27
+ · 把你拖到的位置实现到位
28
+ · 拿邻居信息自己判断,让邻居尽量不动
29
+ · 保留元素原本的响应式 / 尺寸 / 边距
30
+
31
+ 如有特殊指令请填……(Cmd+Enter 提交)`,rows:3,style:{width:"100%",padding:b.sm,fontFamily:"inherit",fontSize:G.sm,lineHeight:"15px",color:"rgba(45,36,24,0.9)",background:"rgba(0,0,0,0.02)",border:`1px solid ${m.borderMd}`,borderRadius:N.sm,resize:"vertical",outline:"none",boxSizing:"border-box"}}),f.jsx("div",{style:{display:"flex",justifyContent:"flex-end",marginTop:b.sm,gap:b.xs},children:f.jsxs("button",{onClick:T,disabled:!o.trim()||u||!i,title:i?o.trim()?"关联到本次调整 (Cmd+Enter)":"请填写备注内容":"没有关联的 pending edit(请先拖一次元素)",style:{display:"inline-flex",alignItems:"center",gap:3,padding:`${b.xs}px ${b.base}px`,fontFamily:"inherit",fontSize:G.xs,fontWeight:600,color:m.bgWhite,background:gt.blue,border:"none",borderRadius:N.sm,cursor:!o.trim()||u||!i?"not-allowed":"pointer",opacity:!o.trim()||u||!i?.4:1,boxShadow:"0 1px 3px rgba(58,122,254,0.25)"},children:[f.jsx(We,{size:10})," ",u?"提交中…":"关联备注"]})})]})}function lo({iframeDoc:t,sourceEl:e,targetContainer:n,beforeEl:r}){if(!t||!e||!n)return{applied:"marker-only",markerInfo:{reason:"invalid"},revert:()=>{}};if(pt(e)||pt(n))return{applied:"marker-only",markerInfo:{reason:"react-mount",sourceRect:e.getBoundingClientRect(),targetRect:n.getBoundingClientRect()},revert:()=>{}};const i=e.parentElement,s=e.nextElementSibling;try{return r&&r.parentNode===n?n.insertBefore(e,r):n.appendChild(e),{applied:"dom",revert:()=>Ur({sourceEl:e,originalParent:i,originalNextSibling:s})}}catch(a){return{applied:"marker-only",markerInfo:{reason:"dom-error",message:a.message},revert:()=>{}}}}function ao({sourceEl:t,parentEl:e,styleDelta:n,runtimeLocks:r,parentNeedsRelative:i}){if(!t||!n)return{applied:"marker-only",reason:"invalid",revert:()=>{}};if(pt(t)||e&&pt(e))return{applied:"marker-only",reason:"react-mount",revert:()=>{}};const s={...n,...r||{}},a={};for(const l of Object.keys(s))a[l]=t.style[l]||"";const o=i&&e?e.style.position||"":null;try{i&&e&&(e.style.position="relative");for(const[l,u]of Object.entries(s))t.style[l]=u;return{applied:"dom",revert:()=>{try{for(const[l,u]of Object.entries(a))t.style[l]=u;o!==null&&e&&(e.style.position=o)}catch{}}}}catch(l){return{applied:"marker-only",reason:"dom-error",message:l.message,revert:()=>{}}}}function Ur({sourceEl:t,originalParent:e,originalNextSibling:n}){if(!(!t||!e))try{n&&n.parentNode===e?e.insertBefore(t,n):e.appendChild(t)}catch{}}export{ro as C,oo as D,to as E,io as G,no as I,an as M,so as P,Jr as R,Qr as a,ao as b,lo as c,yn as d,eo as e,Ct as o,Fe as p,Be as t};
@@ -0,0 +1,11 @@
1
+ import{c as t}from"./index-Cbl3ATvp.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 a=t("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/**
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 o=t("RotateCw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]);export{a as A,o as R};
@@ -0,0 +1,11 @@
1
+ import{c as e}from"./index-Cbl3ATvp.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 t=e("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/**
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 y=e("SquareDashedMousePointer",[["path",{d:"M12.034 12.681a.498.498 0 0 1 .647-.647l9 3.5a.5.5 0 0 1-.033.943l-3.444 1.068a1 1 0 0 0-.66.66l-1.067 3.443a.5.5 0 0 1-.943.033z",key:"xwnzip"}],["path",{d:"M5 3a2 2 0 0 0-2 2",key:"y57alp"}],["path",{d:"M19 3a2 2 0 0 1 2 2",key:"18rm91"}],["path",{d:"M5 21a2 2 0 0 1-2-2",key:"sbafld"}],["path",{d:"M9 3h1",key:"1yesri"}],["path",{d:"M9 21h2",key:"1qve2z"}],["path",{d:"M14 3h1",key:"1ec4yj"}],["path",{d:"M3 9v1",key:"1r0deq"}],["path",{d:"M21 9v2",key:"p14lih"}],["path",{d:"M3 14v1",key:"vnatye"}]]);export{t as E,y as S};
@@ -0,0 +1,18 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" translate="no">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <!-- 拦浏览器翻译插件:翻译层替换文本节点会让 React insertBefore 崩(NotFoundError) -->
6
+ <meta name="google" content="notranslate" />
7
+ <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Crect width='100' height='100' rx='20' fill='%232d2418'/%3E%3Ctext x='50' y='62' font-family='Menlo, monospace' font-size='44' fill='%23f5f0e8' text-anchor='middle' font-weight='600'%3EN%3C/text%3E%3C/svg%3E" />
8
+ <!-- 手机上关掉整页缩放:版面是竖着读的,捏合放大之后还得左右滑(2026-08-21 用户报的)。
9
+ ⚠️ Safari 从 iOS 10 起无视这两个参数,那条路在 lib/lock-zoom.js 里补 -->
10
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
11
+ <title>Nodesign · 创作者的 agent 工作台</title>
12
+ <script type="module" crossorigin src="/assets/index-Cbl3ATvp.js"></script>
13
+ <link rel="stylesheet" crossorigin href="/assets/index-C0KUf6Wd.css">
14
+ </head>
15
+ <body>
16
+ <div id="root"></div>
17
+ </body>
18
+ </html>