@ray-js/robot-map-sdk 0.0.9 → 0.0.11

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 (139) hide show
  1. package/bin/docs-server.js +195 -0
  2. package/dist/index.d.ts +355 -3818
  3. package/dist-docs/404.html +3 -3
  4. package/dist-docs/assets/{app.BJnAJzet.js → app.3-ianRvb.js} +1 -1
  5. package/dist-docs/assets/chunks/@localSearchIndexroot.l5uunL9n.js +1 -0
  6. package/dist-docs/assets/chunks/BitmapFont.C8awBCd1.js +4 -0
  7. package/dist-docs/assets/chunks/BufferResource.C5TLxka4.js +155 -0
  8. package/dist-docs/assets/chunks/CanvasRenderer.DyglCOE2.js +1 -0
  9. package/dist-docs/assets/chunks/RenderTargetSystem._cMCUdmu.js +172 -0
  10. package/dist-docs/assets/chunks/{VPLocalSearchBox.D9iYIKMO.js → VPLocalSearchBox.DYzATQt_.js} +2 -2
  11. package/dist-docs/assets/chunks/WebGLRenderer.C_pauwH4.js +156 -0
  12. package/dist-docs/assets/chunks/WebGPURenderer.DuRPdsh5.js +41 -0
  13. package/dist-docs/assets/chunks/browserAll.BebatlLr.js +14 -0
  14. package/dist-docs/assets/chunks/framework.CBLqO2Q1.js +18 -0
  15. package/dist-docs/assets/chunks/index.DR0yN-kU.js +744 -0
  16. package/dist-docs/assets/chunks/json-editor-vue.CBQvp8j1.js +3882 -0
  17. package/dist-docs/assets/chunks/mapValues.D2X8cRgC.js +1 -0
  18. package/dist-docs/assets/chunks/theme.Dn4kNa0x.js +4 -0
  19. package/dist-docs/assets/chunks/vanilla-picker.B6E6ObS_.js +8 -0
  20. package/dist-docs/assets/chunks/webworkerAll.BAL0vGum.js +56 -0
  21. package/dist-docs/assets/doubleBed.CzextF6m.png +0 -0
  22. package/dist-docs/assets/{guide_advanced-usage.md.BPrKHNKt.js → guide_advanced-usage.md.COVLyRkA.js} +96 -3
  23. package/dist-docs/assets/guide_advanced-usage.md.COVLyRkA.lean.js +1 -0
  24. package/dist-docs/assets/{guide_concepts.md.DBFk-g-l.js → guide_concepts.md.CJ87tk-r.js} +1 -1
  25. package/dist-docs/assets/{guide_concepts.md.DBFk-g-l.lean.js → guide_concepts.md.CJ87tk-r.lean.js} +1 -1
  26. package/dist-docs/assets/{guide_getting-started.md.Zvm4buzY.js → guide_getting-started.md.DzTPTYGC.js} +2 -2
  27. package/dist-docs/assets/guide_getting-started.md.DzTPTYGC.lean.js +1 -0
  28. package/dist-docs/assets/{guide_mcp.md.1UIpY4E0.js → guide_mcp.md.CabCiX8Z.js} +1 -1
  29. package/dist-docs/assets/{guide_mcp.md.1UIpY4E0.lean.js → guide_mcp.md.CabCiX8Z.lean.js} +1 -1
  30. package/dist-docs/assets/{index.md.Sm6vD2Gl.js → index.md.wTsFvv0N.js} +1 -1
  31. package/dist-docs/assets/{index.md.Sm6vD2Gl.lean.js → index.md.wTsFvv0N.lean.js} +1 -1
  32. package/dist-docs/assets/{plans_2026-03-04-detected-objects-visibility-design.md.530AI9zE.js → plans_2026-03-04-detected-objects-visibility-design.md.Dqboot5W.js} +1 -1
  33. package/dist-docs/assets/{plans_2026-03-04-detected-objects-visibility-design.md.530AI9zE.lean.js → plans_2026-03-04-detected-objects-visibility-design.md.Dqboot5W.lean.js} +1 -1
  34. package/dist-docs/assets/{plans_2026-03-04-show-detected-objects-implementation-plan.md.foeG7qiK.js → plans_2026-03-04-show-detected-objects-implementation-plan.md.CDWwQtWj.js} +1 -1
  35. package/dist-docs/assets/{plans_2026-03-04-show-detected-objects-implementation-plan.md.foeG7qiK.lean.js → plans_2026-03-04-show-detected-objects-implementation-plan.md.CDWwQtWj.lean.js} +1 -1
  36. package/dist-docs/assets/plans_2026-03-10-simulator-debug-design.md.BZibn7uw.js +1 -0
  37. package/dist-docs/assets/plans_2026-03-10-simulator-debug-design.md.BZibn7uw.lean.js +1 -0
  38. package/dist-docs/assets/plans_2026-03-10-simulator-events-console-design.md.BVmEzCbR.js +8 -0
  39. package/dist-docs/assets/plans_2026-03-10-simulator-events-console-design.md.BVmEzCbR.lean.js +1 -0
  40. package/dist-docs/assets/plans_2026-03-10-simulator-events-console-implementation-plan.md.S2f1zs9-.js +1 -0
  41. package/dist-docs/assets/plans_2026-03-10-simulator-events-console-implementation-plan.md.S2f1zs9-.lean.js +1 -0
  42. package/dist-docs/assets/plans_2026-03-10-simulator-runtime-controls-design.md.mqeNaYgg.js +1 -0
  43. package/dist-docs/assets/plans_2026-03-10-simulator-runtime-controls-design.md.mqeNaYgg.lean.js +1 -0
  44. package/dist-docs/assets/plans_2026-03-10-simulator-runtime-controls-implementation-plan.md.BXG1UWFt.js +1 -0
  45. package/dist-docs/assets/plans_2026-03-10-simulator-runtime-controls-implementation-plan.md.BXG1UWFt.lean.js +1 -0
  46. package/dist-docs/assets/{records_bugs_2026-02-28-fix-pixi-bindgroup-webgpu-snapshot-whitescreen-bugfix.md.BT3816jW.js → records_bugs_2026-02-28-fix-pixi-bindgroup-webgpu-snapshot-whitescreen-bugfix.md.BbQpA41Y.js} +1 -1
  47. package/dist-docs/assets/{records_bugs_2026-02-28-fix-pixi-bindgroup-webgpu-snapshot-whitescreen-bugfix.md.BT3816jW.lean.js → records_bugs_2026-02-28-fix-pixi-bindgroup-webgpu-snapshot-whitescreen-bugfix.md.BbQpA41Y.lean.js} +1 -1
  48. package/dist-docs/assets/records_bugs_2026-03-10-events-drawer-toolbar-scroll-bugfix.md.DbHxPv4D.js +1 -0
  49. package/dist-docs/assets/records_bugs_2026-03-10-events-drawer-toolbar-scroll-bugfix.md.DbHxPv4D.lean.js +1 -0
  50. package/dist-docs/assets/records_bugs_2026-03-10-simulator-initial-render-layout-bugfix.md.w7--2hvH.js +1 -0
  51. package/dist-docs/assets/records_bugs_2026-03-10-simulator-initial-render-layout-bugfix.md.w7--2hvH.lean.js +1 -0
  52. package/dist-docs/assets/records_bugs_2026-03-10-simulator-wheel-scroll-leak-bugfix.md.B6gIem2P.js +1 -0
  53. package/dist-docs/assets/records_bugs_2026-03-10-simulator-wheel-scroll-leak-bugfix.md.B6gIem2P.lean.js +1 -0
  54. package/dist-docs/assets/records_bugs_2026-03-11-docs-server-bin-clean-bugfix.md.GGWCjkok.js +1 -0
  55. package/dist-docs/assets/records_bugs_2026-03-11-docs-server-bin-clean-bugfix.md.GGWCjkok.lean.js +1 -0
  56. package/dist-docs/assets/{records_plans_2026-03-02-furniture-feature-plan.md.DkXKivuL.js → records_plans_2026-03-02-furniture-feature-plan.md.CqSsyNDo.js} +1 -1
  57. package/dist-docs/assets/{records_plans_2026-03-02-furniture-feature-plan.md.DkXKivuL.lean.js → records_plans_2026-03-02-furniture-feature-plan.md.CqSsyNDo.lean.js} +1 -1
  58. package/dist-docs/assets/records_plans_2026-03-10-simulator-events-console-plan.md.CfHLEHcc.js +1 -0
  59. package/dist-docs/assets/records_plans_2026-03-10-simulator-events-console-plan.md.CfHLEHcc.lean.js +1 -0
  60. package/dist-docs/assets/records_plans_2026-03-10-simulator-last-successful-combo-cache-plan.md.Z2RoK239.js +1 -0
  61. package/dist-docs/assets/records_plans_2026-03-10-simulator-last-successful-combo-cache-plan.md.Z2RoK239.lean.js +1 -0
  62. package/dist-docs/assets/records_plans_2026-03-10-simulator-map-parsed-view-plan.md.S9jPz75o.js +1 -0
  63. package/dist-docs/assets/records_plans_2026-03-10-simulator-map-parsed-view-plan.md.S9jPz75o.lean.js +1 -0
  64. package/dist-docs/assets/records_plans_2026-03-10-simulator-map-playground-refactor-plan.md.BuILlmcV.js +1 -0
  65. package/dist-docs/assets/records_plans_2026-03-10-simulator-map-playground-refactor-plan.md.BuILlmcV.lean.js +1 -0
  66. package/dist-docs/assets/records_plans_2026-03-10-simulator-playground-plan.md.CQAR-T7p.js +1 -0
  67. package/dist-docs/assets/records_plans_2026-03-10-simulator-playground-plan.md.CQAR-T7p.lean.js +1 -0
  68. package/dist-docs/assets/records_plans_2026-03-10-simulator-runtime-controls-plan.md.DSVD-qCa.js +1 -0
  69. package/dist-docs/assets/records_plans_2026-03-10-simulator-runtime-controls-plan.md.DSVD-qCa.lean.js +1 -0
  70. package/dist-docs/assets/records_plans_2026-03-11-simulator-src-migration-implementation.md.FnB5Cx6R.js +1 -0
  71. package/dist-docs/assets/records_plans_2026-03-11-simulator-src-migration-implementation.md.FnB5Cx6R.lean.js +1 -0
  72. package/dist-docs/assets/records_plans_2026-03-11-simulator-src-migration-plan.md.BBfaeRrq.js +1 -0
  73. package/dist-docs/assets/records_plans_2026-03-11-simulator-src-migration-plan.md.BBfaeRrq.lean.js +1 -0
  74. package/dist-docs/assets/{reference_callbacks.md.CwvDSJWk.js → reference_callbacks.md.BIwuGR3s.js} +16 -2
  75. package/dist-docs/assets/reference_callbacks.md.BIwuGR3s.lean.js +1 -0
  76. package/dist-docs/assets/{reference_config.md.CK4ueBig.js → reference_config.md.DHynhVxG.js} +1 -1
  77. package/dist-docs/assets/{reference_config.md.CK4ueBig.lean.js → reference_config.md.DHynhVxG.lean.js} +1 -1
  78. package/dist-docs/assets/{reference_data.md.DciSLVC8.js → reference_data.md.B_XpUFrn.js} +38 -2
  79. package/dist-docs/assets/reference_data.md.B_XpUFrn.lean.js +1 -0
  80. package/dist-docs/assets/{reference_methods.md.CL2sjTJ7.js → reference_methods.md.eH-UCMbE.js} +23 -3
  81. package/dist-docs/assets/reference_methods.md.eH-UCMbE.lean.js +1 -0
  82. package/dist-docs/assets/{reference_runtime.md.aDpGKfHs.js → reference_runtime.md.BEy8BhSZ.js} +2 -2
  83. package/dist-docs/assets/reference_runtime.md.BEy8BhSZ.lean.js +1 -0
  84. package/dist-docs/assets/{reference_types.md.D2IglsHQ.js → reference_types.md.hikiO8Cq.js} +20 -3
  85. package/dist-docs/assets/reference_types.md.hikiO8Cq.lean.js +1 -0
  86. package/dist-docs/assets/{reference_utils.md.CSshxnp0.js → reference_utils.md.Dy6XKVWh.js} +1 -1
  87. package/dist-docs/assets/{reference_utils.md.CSshxnp0.lean.js → reference_utils.md.Dy6XKVWh.lean.js} +1 -1
  88. package/dist-docs/assets/robot.CSiuukeH.png +0 -0
  89. package/dist-docs/assets/simulator_index.md.CF95Y_c9.js +1 -0
  90. package/dist-docs/assets/simulator_index.md.CF95Y_c9.lean.js +1 -0
  91. package/dist-docs/assets/sleep.CRKZ3XeQ.png +0 -0
  92. package/dist-docs/assets/sleep.C_YKDk6M.json +879 -0
  93. package/dist-docs/assets/{style.CN_tJoU2.css → style.DrlDtCux.css} +1 -1
  94. package/dist-docs/guide/advanced-usage.html +102 -9
  95. package/dist-docs/guide/concepts.html +7 -7
  96. package/dist-docs/guide/getting-started.html +7 -7
  97. package/dist-docs/guide/mcp.html +7 -7
  98. package/dist-docs/hashmap.json +1 -1
  99. package/dist-docs/index.html +7 -7
  100. package/dist-docs/plans/2026-03-04-detected-objects-visibility-design.html +7 -7
  101. package/dist-docs/plans/2026-03-04-show-detected-objects-implementation-plan.html +7 -7
  102. package/dist-docs/plans/2026-03-10-simulator-debug-design.html +25 -0
  103. package/dist-docs/plans/2026-03-10-simulator-events-console-design.html +32 -0
  104. package/dist-docs/plans/2026-03-10-simulator-events-console-implementation-plan.html +25 -0
  105. package/dist-docs/plans/2026-03-10-simulator-runtime-controls-design.html +25 -0
  106. package/dist-docs/plans/2026-03-10-simulator-runtime-controls-implementation-plan.html +25 -0
  107. package/dist-docs/records/bugs/2026-02-28-fix-pixi-bindgroup-webgpu-snapshot-whitescreen-bugfix.html +7 -7
  108. package/dist-docs/records/bugs/2026-03-10-events-drawer-toolbar-scroll-bugfix.html +25 -0
  109. package/dist-docs/records/bugs/2026-03-10-simulator-initial-render-layout-bugfix.html +25 -0
  110. package/dist-docs/records/bugs/2026-03-10-simulator-wheel-scroll-leak-bugfix.html +25 -0
  111. package/dist-docs/records/bugs/2026-03-11-docs-server-bin-clean-bugfix.html +25 -0
  112. package/dist-docs/records/plans/2026-03-02-furniture-feature-plan.html +7 -7
  113. package/dist-docs/records/plans/2026-03-10-simulator-events-console-plan.html +25 -0
  114. package/dist-docs/records/plans/2026-03-10-simulator-last-successful-combo-cache-plan.html +25 -0
  115. package/dist-docs/records/plans/2026-03-10-simulator-map-parsed-view-plan.html +25 -0
  116. package/dist-docs/records/plans/2026-03-10-simulator-map-playground-refactor-plan.html +25 -0
  117. package/dist-docs/records/plans/2026-03-10-simulator-playground-plan.html +25 -0
  118. package/dist-docs/records/plans/2026-03-10-simulator-runtime-controls-plan.html +25 -0
  119. package/dist-docs/records/plans/2026-03-11-simulator-src-migration-implementation.html +25 -0
  120. package/dist-docs/records/plans/2026-03-11-simulator-src-migration-plan.html +25 -0
  121. package/dist-docs/reference/callbacks.html +22 -8
  122. package/dist-docs/reference/config.html +7 -7
  123. package/dist-docs/reference/data.html +44 -8
  124. package/dist-docs/reference/methods.html +29 -9
  125. package/dist-docs/reference/runtime.html +8 -8
  126. package/dist-docs/reference/types.html +26 -9
  127. package/dist-docs/reference/utils.html +7 -7
  128. package/dist-docs/simulator/index.html +25 -0
  129. package/package.json +8 -4
  130. package/dist-docs/assets/chunks/@localSearchIndexroot.HZmZuAtg.js +0 -1
  131. package/dist-docs/assets/chunks/framework.DRADY2L-.js +0 -18
  132. package/dist-docs/assets/chunks/theme.D78lSkQK.js +0 -2
  133. package/dist-docs/assets/guide_advanced-usage.md.BPrKHNKt.lean.js +0 -1
  134. package/dist-docs/assets/guide_getting-started.md.Zvm4buzY.lean.js +0 -1
  135. package/dist-docs/assets/reference_callbacks.md.CwvDSJWk.lean.js +0 -1
  136. package/dist-docs/assets/reference_data.md.DciSLVC8.lean.js +0 -1
  137. package/dist-docs/assets/reference_methods.md.CL2sjTJ7.lean.js +0 -1
  138. package/dist-docs/assets/reference_runtime.md.aDpGKfHs.lean.js +0 -1
  139. package/dist-docs/assets/reference_types.md.D2IglsHQ.lean.js +0 -1
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US" dir="ltr">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>2026-03-11 simulator src migration implementation record | Tuya Robot Map</title>
7
+ <meta name="description" content="涂鸦扫地机地图组件">
8
+ <meta name="generator" content="VitePress v1.6.4">
9
+ <link rel="preload stylesheet" href="/assets/style.DrlDtCux.css" as="style">
10
+ <link rel="preload stylesheet" href="/vp-icons.css" as="style">
11
+
12
+ <script type="module" src="/assets/app.3-ianRvb.js"></script>
13
+ <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
+ <link rel="modulepreload" href="/assets/chunks/theme.Dn4kNa0x.js">
15
+ <link rel="modulepreload" href="/assets/chunks/framework.CBLqO2Q1.js">
16
+ <link rel="modulepreload" href="/assets/records_plans_2026-03-11-simulator-src-migration-implementation.md.FnB5Cx6R.lean.js">
17
+ <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
18
+ <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
19
+ </head>
20
+ <body>
21
+ <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!----><span data-v-1168a8e4>Tuya Robot Map</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>首页</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/guide/concepts.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>指南</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/reference/data.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>参考</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/simulator/" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>模拟调试</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><!----><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav empty fixed" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><!----><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-8a42e2b4><button data-v-8a42e2b4>Return to top</button><!----></div></div></div><!----><div class="VPContent" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>页面导航</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _records_plans_2026-03-11-simulator-src-migration-implementation" data-v-39a288b8><div><h1 id="_2026-03-11-simulator-src-migration-implementation-record" tabindex="-1">2026-03-11 simulator src migration implementation record <a class="header-anchor" href="#_2026-03-11-simulator-src-migration-implementation-record" aria-label="Permalink to &quot;2026-03-11 simulator src migration implementation record&quot;">​</a></h1><p>This record captures the implementation of the simulator source migration from <code>docs/.vitepress/theme/components/simulator</code> to <code>src/simulator</code>, while keeping simulator code out of all SDK runtime build artifacts.</p><h2 id="change-summary" tabindex="-1">Change summary <a class="header-anchor" href="#change-summary" aria-label="Permalink to &quot;Change summary&quot;">​</a></h2><ul><li>Moved simulator implementation into <code>src/simulator</code> with a structured layout: <code>components/</code>, <code>core/</code>, <code>adapters/</code>, and <code>types/index.ts</code>.</li><li>Replaced docs <code>MapPlayground</code> with a thin host component that only mounts the simulator implementation from <code>src/simulator</code>.</li><li>Removed docs-side simulator implementation files and docs-side simulator type shims.</li><li>Unified simulator type sourcing to <code>@core/@types</code> and <code>@core/@types/callbacks</code> through <code>src/simulator/adapters/sdkTypes.ts</code>.</li><li>Added import guardrails to forbid <code>@simulator</code> imports from runtime modules: <code>src/core/**</code>, <code>src/rjs-entry/**</code>, and <code>src/app/**</code>.</li><li>Added <code>@simulator</code> alias wiring for root Vite/TypeScript and VitePress docs.</li></ul><h2 id="key-files" tabindex="-1">Key files <a class="header-anchor" href="#key-files" aria-label="Permalink to &quot;Key files&quot;">​</a></h2><ul><li><code>src/simulator/components/SimulatorMapPlayground.vue</code></li><li><code>src/simulator/core/useMapPlayground.ts</code></li><li><code>src/simulator/adapters/external.ts</code></li><li><code>src/simulator/adapters/sdkTypes.ts</code></li><li><code>src/simulator/types/index.ts</code></li><li><code>src/simulator/index.ts</code></li><li><code>docs/.vitepress/theme/components/MapPlayground.vue</code></li><li><code>docs/.vitepress/config.ts</code></li><li><code>docs/.vitepress/tsconfig.json</code></li><li><code>vite.config.js</code></li><li><code>tsconfig.json</code></li><li><code>eslint.config.js</code></li><li><code>package.json</code></li></ul><h2 id="risk-points-and-handling" tabindex="-1">Risk points and handling <a class="header-anchor" href="#risk-points-and-handling" aria-label="Permalink to &quot;Risk points and handling&quot;">​</a></h2><ul><li>Risk: simulator code accidentally enters SDK/runtime bundles. <ul><li>Handling: added ESLint <code>no-restricted-imports</code> guardrail for runtime folders and verified built outputs by keyword scanning.</li></ul></li><li>Risk: docs typecheck pulls in full core runtime implementation and fails for unrelated reasons. <ul><li>Handling: constrained docs typecheck path mapping to simulator-relevant targets and type-only modules.</li></ul></li><li>Risk: behavior regression during file relocation. <ul><li>Handling: migrated files with no feature changes and preserved existing simulator render/runtime/event/cache logic paths.</li></ul></li></ul><h2 id="verification-results" tabindex="-1">Verification results <a class="header-anchor" href="#verification-results" aria-label="Permalink to &quot;Verification results&quot;">​</a></h2><ul><li><code>npm run lint</code>: pass</li><li><code>npx tsc --noEmit</code>: pass</li><li><code>npm run typecheck:docs</code>: pass</li><li><code>npm run build:core</code>: pass</li><li><code>npm run build:rjs</code>: pass</li><li><code>npm run build:app</code>: pass</li></ul><h2 id="artifact-exclusion-evidence" tabindex="-1">Artifact exclusion evidence <a class="header-anchor" href="#artifact-exclusion-evidence" aria-label="Permalink to &quot;Artifact exclusion evidence&quot;">​</a></h2><p>After each build target, outputs were scanned with: <code>rg -n &quot;simulator|SimulatorMapPlayground|@simulator|useMapPlayground|src/simulator&quot;</code>.</p><ul><li><code>build:core</code> output (<code>dist/**</code>): no simulator markers found.</li><li><code>build:rjs</code> output (<code>dist/index.rjs.js</code>): no simulator markers found.</li><li><code>build:app</code> output (<code>dist-app/**</code>): no simulator markers found.</li></ul></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><!----><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>最后更新于: <time datetime="2026-03-11T06:59:01.000Z" data-v-e98dd255></time></p></div></div><!----></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
22
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"guide_advanced-usage.md\":\"COVLyRkA\",\"guide_concepts.md\":\"CJ87tk-r\",\"guide_getting-started.md\":\"DzTPTYGC\",\"guide_mcp.md\":\"CabCiX8Z\",\"index.md\":\"wTsFvv0N\",\"plans_2026-03-04-detected-objects-visibility-design.md\":\"Dqboot5W\",\"plans_2026-03-04-show-detected-objects-implementation-plan.md\":\"CDWwQtWj\",\"plans_2026-03-10-simulator-debug-design.md\":\"BZibn7uw\",\"plans_2026-03-10-simulator-events-console-design.md\":\"BVmEzCbR\",\"plans_2026-03-10-simulator-events-console-implementation-plan.md\":\"S2f1zs9-\",\"plans_2026-03-10-simulator-runtime-controls-design.md\":\"mqeNaYgg\",\"plans_2026-03-10-simulator-runtime-controls-implementation-plan.md\":\"BXG1UWFt\",\"records_bugs_2026-02-28-fix-pixi-bindgroup-webgpu-snapshot-whitescreen-bugfix.md\":\"BbQpA41Y\",\"records_bugs_2026-03-10-events-drawer-toolbar-scroll-bugfix.md\":\"DbHxPv4D\",\"records_bugs_2026-03-10-simulator-initial-render-layout-bugfix.md\":\"w7--2hvH\",\"records_bugs_2026-03-10-simulator-wheel-scroll-leak-bugfix.md\":\"B6gIem2P\",\"records_bugs_2026-03-11-docs-server-bin-clean-bugfix.md\":\"GGWCjkok\",\"records_plans_2026-03-02-furniture-feature-plan.md\":\"CqSsyNDo\",\"records_plans_2026-03-10-simulator-events-console-plan.md\":\"CfHLEHcc\",\"records_plans_2026-03-10-simulator-last-successful-combo-cache-plan.md\":\"Z2RoK239\",\"records_plans_2026-03-10-simulator-map-parsed-view-plan.md\":\"S9jPz75o\",\"records_plans_2026-03-10-simulator-map-playground-refactor-plan.md\":\"BuILlmcV\",\"records_plans_2026-03-10-simulator-playground-plan.md\":\"CQAR-T7p\",\"records_plans_2026-03-10-simulator-runtime-controls-plan.md\":\"DSVD-qCa\",\"records_plans_2026-03-11-simulator-src-migration-implementation.md\":\"FnB5Cx6R\",\"records_plans_2026-03-11-simulator-src-migration-plan.md\":\"BBfaeRrq\",\"reference_callbacks.md\":\"BIwuGR3s\",\"reference_config.md\":\"DHynhVxG\",\"reference_data.md\":\"B_XpUFrn\",\"reference_methods.md\":\"eH-UCMbE\",\"reference_runtime.md\":\"BEy8BhSZ\",\"reference_types.md\":\"hikiO8Cq\",\"reference_utils.md\":\"Dy6XKVWh\",\"simulator_index.md\":\"CF95Y_c9\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Tuya Robot Map\",\"description\":\"涂鸦扫地机地图组件\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"siteTitle\":\"Tuya Robot Map\",\"outline\":{\"level\":[2,6],\"label\":\"页面导航\"},\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"指南\",\"link\":\"/guide/concepts\",\"activeMatch\":\"^/guide/\"},{\"text\":\"参考\",\"link\":\"/reference/data\",\"activeMatch\":\"^/reference/\"},{\"text\":\"模拟调试\",\"link\":\"/simulator/\",\"activeMatch\":\"^/simulator/\"}],\"sidebar\":{\"/guide/\":[{\"text\":\"指南\",\"items\":[{\"text\":\"基本概念\",\"link\":\"/guide/concepts\"},{\"text\":\"快速开始\",\"link\":\"/guide/getting-started\"},{\"text\":\"进阶使用\",\"link\":\"/guide/advanced-usage\"}]}],\"/reference/\":[{\"text\":\"组件Props\",\"items\":[{\"text\":\"数据\",\"link\":\"/reference/data\"},{\"text\":\"配置\",\"link\":\"/reference/config\"},{\"text\":\"运行时\",\"link\":\"/reference/runtime\"},{\"text\":\"地图事件回调\",\"link\":\"/reference/callbacks\"}]},{\"text\":\"方法\",\"items\":[{\"text\":\"地图方法\",\"link\":\"/reference/methods\"},{\"text\":\"工具方法\",\"link\":\"/reference/utils\"}]},{\"text\":\"类型定义\",\"items\":[{\"text\":\"类型定义\",\"link\":\"/reference/types\"}]}],\"/simulator/\":[{\"text\":\"模拟调试\",\"items\":[{\"text\":\"实时模拟调试\",\"link\":\"/simulator/\"}]}]},\"search\":{\"provider\":\"local\"},\"lastUpdated\":{\"text\":\"最后更新于\",\"formatOptions\":{\"dateStyle\":\"short\",\"timeStyle\":\"short\"}}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
23
+
24
+ </body>
25
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US" dir="ltr">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Tuya Robot Map</title>
7
+ <meta name="description" content="涂鸦扫地机地图组件">
8
+ <meta name="generator" content="VitePress v1.6.4">
9
+ <link rel="preload stylesheet" href="/assets/style.DrlDtCux.css" as="style">
10
+ <link rel="preload stylesheet" href="/vp-icons.css" as="style">
11
+
12
+ <script type="module" src="/assets/app.3-ianRvb.js"></script>
13
+ <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
+ <link rel="modulepreload" href="/assets/chunks/theme.Dn4kNa0x.js">
15
+ <link rel="modulepreload" href="/assets/chunks/framework.CBLqO2Q1.js">
16
+ <link rel="modulepreload" href="/assets/records_plans_2026-03-11-simulator-src-migration-plan.md.BBfaeRrq.lean.js">
17
+ <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
18
+ <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
19
+ </head>
20
+ <body>
21
+ <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!----><span data-v-1168a8e4>Tuya Robot Map</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>首页</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/guide/concepts.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>指南</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/reference/data.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>参考</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/simulator/" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>模拟调试</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><!----><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav empty fixed" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><!----><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-8a42e2b4><button data-v-8a42e2b4>Return to top</button><!----></div></div></div><!----><div class="VPContent" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>页面导航</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _records_plans_2026-03-11-simulator-src-migration-plan" data-v-39a288b8><div><h2 id="background" tabindex="-1">Background <a class="header-anchor" href="#background" aria-label="Permalink to &quot;Background&quot;">​</a></h2><p>The simulator currently lives under <code>docs/.vitepress/theme/components/simulator</code>. This has created repeated type drift risk and extra maintenance overhead, because simulator code and SDK source are separated by docs-specific wrappers and shims.</p><p>The target is to move simulator implementation into <code>src/simulator</code> so it can share source-level types and be easier to test, while ensuring simulator code is never bundled into SDK runtime outputs (<code>dist</code>, <code>dist-app</code>, <code>dist-docs</code> behavior must stay intentional and predictable).</p><h2 id="goal-and-scope" tabindex="-1">Goal and scope <a class="header-anchor" href="#goal-and-scope" aria-label="Permalink to &quot;Goal and scope&quot;">​</a></h2><p>This plan covers architecture and migration for simulator source location only.</p><p>In scope:</p><ul><li>Move simulator implementation from docs theme folder to <code>src/simulator</code>.</li><li>Keep docs page as a thin shell that imports simulator from <code>src/simulator</code>.</li><li>Remove duplicated docs-only type shims where possible.</li><li>Add guardrails to prevent simulator from being imported by SDK runtime entry modules.</li><li>Prepare testability hooks and folder boundaries for future tests.</li></ul><p>Out of scope:</p><ul><li>New simulator features.</li><li>SDK public API changes for business consumers.</li><li>Large UI redesign.</li></ul><h2 id="brainstorming-summary" tabindex="-1">Brainstorming summary <a class="header-anchor" href="#brainstorming-summary" aria-label="Permalink to &quot;Brainstorming summary&quot;">​</a></h2><h3 id="option-a-keep-simulator-in-docs-and-keep-improving-shims" tabindex="-1">Option A: keep simulator in docs and keep improving shims <a class="header-anchor" href="#option-a-keep-simulator-in-docs-and-keep-improving-shims" aria-label="Permalink to &quot;Option A: keep simulator in docs and keep improving shims&quot;">​</a></h3><p>Pros:</p><ul><li>Lowest migration cost.</li><li>No import path changes in docs.</li></ul><p>Cons:</p><ul><li>Type source remains split and can drift again.</li><li>Harder to add shared tests.</li><li>Architectural boundary stays weak.</li></ul><h3 id="option-b-recommended-move-simulator-to-src-simulator-and-keep-docs-as-host" tabindex="-1">Option B (recommended): move simulator to <code>src/simulator</code> and keep docs as host <a class="header-anchor" href="#option-b-recommended-move-simulator-to-src-simulator-and-keep-docs-as-host" aria-label="Permalink to &quot;Option B (recommended): move simulator to `src/simulator` and keep docs as host&quot;">​</a></h3><p>Pros:</p><ul><li>One source-of-truth for simulator logic.</li><li>Easier unit/integration tests and future reuse.</li><li>Cleaner type usage with direct source aliases.</li></ul><p>Cons:</p><ul><li>Medium migration effort.</li><li>Requires clear packaging and import guardrails.</li></ul><h3 id="option-c-extract-simulator-into-an-internal-workspace-package" tabindex="-1">Option C: extract simulator into an internal workspace package <a class="header-anchor" href="#option-c-extract-simulator-into-an-internal-workspace-package" aria-label="Permalink to &quot;Option C: extract simulator into an internal workspace package&quot;">​</a></h3><p>Pros:</p><ul><li>Strong isolation and independent lifecycle.</li><li>Clear ownership boundaries.</li></ul><p>Cons:</p><ul><li>Highest complexity and tooling overhead.</li><li>Not justified for current team size and iteration speed.</li></ul><p>Recommendation: adopt Option B now; revisit Option C only if simulator grows into an independent product surface.</p><h2 id="chosen-approach" tabindex="-1">Chosen approach <a class="header-anchor" href="#chosen-approach" aria-label="Permalink to &quot;Chosen approach&quot;">​</a></h2><p>Use <code>src/simulator</code> as the implementation root and keep docs as the presentation host.</p><h3 id="target-structure" tabindex="-1">Target structure <a class="header-anchor" href="#target-structure" aria-label="Permalink to &quot;Target structure&quot;">​</a></h3><ul><li><code>src/simulator/core/*</code>: render and runtime orchestration hooks.</li><li><code>src/simulator/components/*</code>: UI components used by the simulator page.</li><li><code>src/simulator/types/*</code>: simulator-specific domain types.</li><li><code>src/simulator/adapters/*</code>: integration with SDK runtime (<code>MapApplication</code>, parsers, callbacks).</li><li><code>src/simulator/index.ts</code>: stable entry for docs consumption.</li></ul><p>Docs side keeps only:</p><ul><li>page routing and markdown.</li><li>a thin Vue wrapper that imports from <code>src/simulator</code>.</li></ul><h2 id="packaging-and-build-constraints" tabindex="-1">Packaging and build constraints <a class="header-anchor" href="#packaging-and-build-constraints" aria-label="Permalink to &quot;Packaging and build constraints&quot;">​</a></h2><p>Simulator must not be included in SDK distributed runtime outputs.</p><p>Control points:</p><ul><li><code>build:core</code> entry remains <code>src/core/index.ts</code>.</li><li><code>build:rjs</code> entry remains <code>src/rjs-entry/index.ts</code>.</li><li><code>build:app</code> entry remains <code>src/app/index.html</code>.</li><li>No runtime entry may import <code>@simulator/*</code>.</li></ul><p>Guardrails to add during implementation:</p><ul><li>Add alias <code>@simulator/* -&gt; src/simulator/*</code> for docs/dev usage.</li><li>Add lint/CI rule to forbid <code>@simulator/*</code> imports from: <ul><li><code>src/core/**</code></li><li><code>src/rjs-entry/**</code></li><li><code>src/app/**</code></li></ul></li><li>Keep npm <code>files</code> config unchanged so <code>src/**</code> is not published as source payload.</li></ul><h2 id="type-strategy" tabindex="-1">Type strategy <a class="header-anchor" href="#type-strategy" aria-label="Permalink to &quot;Type strategy&quot;">​</a></h2><ul><li>Prefer direct imports from <code>@core/@types</code> and <code>@core/@types/callbacks</code>.</li><li>Remove docs-only duplicated type declarations for simulator.</li><li>If a bridge declaration is still required for docs toolchain, keep it minimal and reference core types instead of redefining contracts.</li></ul><h2 id="migration-phases" tabindex="-1">Migration phases <a class="header-anchor" href="#migration-phases" aria-label="Permalink to &quot;Migration phases&quot;">​</a></h2><ol><li>Create <code>src/simulator</code> skeleton and move pure TS composables first.</li><li>Move simulator Vue components and update local imports.</li><li>Replace docs theme imports with <code>src/simulator</code> entry imports.</li><li>Remove obsolete docs simulator files and stale shims.</li><li>Add guardrails and run full verification.</li></ol><h2 id="impacted-files-and-modules" tabindex="-1">Impacted files and modules <a class="header-anchor" href="#impacted-files-and-modules" aria-label="Permalink to &quot;Impacted files and modules&quot;">​</a></h2><p>Expected primary changes:</p><ul><li><code>src/simulator/**</code> (new)</li><li><code>docs/.vitepress/theme/components/MapPlayground.vue</code> (thin host update)</li><li><code>docs/.vitepress/theme/components/simulator/**</code> (deletion or wrappers)</li><li><code>docs/.vitepress/tsconfig.json</code> (path cleanup)</li><li><code>vite.config.js</code> and/or docs VitePress alias config (simulator alias)</li><li>lint config and CI scripts (import guardrail)</li></ul><h2 id="verification-checklist" tabindex="-1">Verification checklist <a class="header-anchor" href="#verification-checklist" aria-label="Permalink to &quot;Verification checklist&quot;">​</a></h2><ul><li><code>npm run lint</code> passes.</li><li><code>npx tsc --noEmit</code> passes.</li><li><code>npm run typecheck:docs</code> passes.</li><li><code>npm run docs:dev</code> starts and simulator page works.</li><li><code>npm run build:core</code> output contains no simulator modules.</li><li><code>npm run build:rjs</code> output contains no simulator modules.</li><li><code>npm run build:app</code> output contains no simulator modules.</li><li>Simulator interactions still work: map/path/room input, runtime controls, events filter, local cache restore.</li></ul><h2 id="risks-and-mitigations" tabindex="-1">Risks and mitigations <a class="header-anchor" href="#risks-and-mitigations" aria-label="Permalink to &quot;Risks and mitigations&quot;">​</a></h2><ul><li><p>Risk: accidental import from runtime entries brings simulator into SDK bundle. Mitigation: lint/CI import restriction and explicit bundle grep checks.</p></li><li><p>Risk: alias mismatch between docs and root config. Mitigation: define simulator alias once and reference consistently.</p></li><li><p>Risk: migration breaks docs-only UX integration. Mitigation: keep docs wrapper thin and preserve existing props/events contract.</p></li></ul><h2 id="decision" tabindex="-1">Decision <a class="header-anchor" href="#decision" aria-label="Permalink to &quot;Decision&quot;">​</a></h2><p>Proceed with Option B (<code>src/simulator</code> migration) in a dedicated implementation session, with packaging guardrails as mandatory acceptance criteria.</p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><!----><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>最后更新于: <time datetime="2026-03-11T06:29:36.000Z" data-v-e98dd255></time></p></div></div><!----></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
22
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"guide_advanced-usage.md\":\"COVLyRkA\",\"guide_concepts.md\":\"CJ87tk-r\",\"guide_getting-started.md\":\"DzTPTYGC\",\"guide_mcp.md\":\"CabCiX8Z\",\"index.md\":\"wTsFvv0N\",\"plans_2026-03-04-detected-objects-visibility-design.md\":\"Dqboot5W\",\"plans_2026-03-04-show-detected-objects-implementation-plan.md\":\"CDWwQtWj\",\"plans_2026-03-10-simulator-debug-design.md\":\"BZibn7uw\",\"plans_2026-03-10-simulator-events-console-design.md\":\"BVmEzCbR\",\"plans_2026-03-10-simulator-events-console-implementation-plan.md\":\"S2f1zs9-\",\"plans_2026-03-10-simulator-runtime-controls-design.md\":\"mqeNaYgg\",\"plans_2026-03-10-simulator-runtime-controls-implementation-plan.md\":\"BXG1UWFt\",\"records_bugs_2026-02-28-fix-pixi-bindgroup-webgpu-snapshot-whitescreen-bugfix.md\":\"BbQpA41Y\",\"records_bugs_2026-03-10-events-drawer-toolbar-scroll-bugfix.md\":\"DbHxPv4D\",\"records_bugs_2026-03-10-simulator-initial-render-layout-bugfix.md\":\"w7--2hvH\",\"records_bugs_2026-03-10-simulator-wheel-scroll-leak-bugfix.md\":\"B6gIem2P\",\"records_bugs_2026-03-11-docs-server-bin-clean-bugfix.md\":\"GGWCjkok\",\"records_plans_2026-03-02-furniture-feature-plan.md\":\"CqSsyNDo\",\"records_plans_2026-03-10-simulator-events-console-plan.md\":\"CfHLEHcc\",\"records_plans_2026-03-10-simulator-last-successful-combo-cache-plan.md\":\"Z2RoK239\",\"records_plans_2026-03-10-simulator-map-parsed-view-plan.md\":\"S9jPz75o\",\"records_plans_2026-03-10-simulator-map-playground-refactor-plan.md\":\"BuILlmcV\",\"records_plans_2026-03-10-simulator-playground-plan.md\":\"CQAR-T7p\",\"records_plans_2026-03-10-simulator-runtime-controls-plan.md\":\"DSVD-qCa\",\"records_plans_2026-03-11-simulator-src-migration-implementation.md\":\"FnB5Cx6R\",\"records_plans_2026-03-11-simulator-src-migration-plan.md\":\"BBfaeRrq\",\"reference_callbacks.md\":\"BIwuGR3s\",\"reference_config.md\":\"DHynhVxG\",\"reference_data.md\":\"B_XpUFrn\",\"reference_methods.md\":\"eH-UCMbE\",\"reference_runtime.md\":\"BEy8BhSZ\",\"reference_types.md\":\"hikiO8Cq\",\"reference_utils.md\":\"Dy6XKVWh\",\"simulator_index.md\":\"CF95Y_c9\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Tuya Robot Map\",\"description\":\"涂鸦扫地机地图组件\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"siteTitle\":\"Tuya Robot Map\",\"outline\":{\"level\":[2,6],\"label\":\"页面导航\"},\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"指南\",\"link\":\"/guide/concepts\",\"activeMatch\":\"^/guide/\"},{\"text\":\"参考\",\"link\":\"/reference/data\",\"activeMatch\":\"^/reference/\"},{\"text\":\"模拟调试\",\"link\":\"/simulator/\",\"activeMatch\":\"^/simulator/\"}],\"sidebar\":{\"/guide/\":[{\"text\":\"指南\",\"items\":[{\"text\":\"基本概念\",\"link\":\"/guide/concepts\"},{\"text\":\"快速开始\",\"link\":\"/guide/getting-started\"},{\"text\":\"进阶使用\",\"link\":\"/guide/advanced-usage\"}]}],\"/reference/\":[{\"text\":\"组件Props\",\"items\":[{\"text\":\"数据\",\"link\":\"/reference/data\"},{\"text\":\"配置\",\"link\":\"/reference/config\"},{\"text\":\"运行时\",\"link\":\"/reference/runtime\"},{\"text\":\"地图事件回调\",\"link\":\"/reference/callbacks\"}]},{\"text\":\"方法\",\"items\":[{\"text\":\"地图方法\",\"link\":\"/reference/methods\"},{\"text\":\"工具方法\",\"link\":\"/reference/utils\"}]},{\"text\":\"类型定义\",\"items\":[{\"text\":\"类型定义\",\"link\":\"/reference/types\"}]}],\"/simulator/\":[{\"text\":\"模拟调试\",\"items\":[{\"text\":\"实时模拟调试\",\"link\":\"/simulator/\"}]}]},\"search\":{\"provider\":\"local\"},\"lastUpdated\":{\"text\":\"最后更新于\",\"formatOptions\":{\"dateStyle\":\"short\",\"timeStyle\":\"short\"}}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
23
+
24
+ </body>
25
+ </html>