@ray-js/robot-map-sdk 0.0.12 → 0.0.13

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 (69) hide show
  1. package/bin/docs-server.js +8 -1
  2. package/dist-docs/404.html +3 -3
  3. package/dist-docs/assets/{app.Bg6Ypeoa.js → app.CoDGIQ53.js} +1 -1
  4. package/dist-docs/assets/chunks/@localSearchIndexroot.DELY0TLT.js +1 -0
  5. package/dist-docs/assets/chunks/{BitmapFont.CXuoJus7.js → BitmapFont.DDRqV796.js} +1 -1
  6. package/dist-docs/assets/chunks/{BufferResource.BGUfVWrF.js → BufferResource.aFEHKM_N.js} +1 -1
  7. package/dist-docs/assets/chunks/{CanvasRenderer.DT-IZ40Y.js → CanvasRenderer.BefGXFZ-.js} +1 -1
  8. package/dist-docs/assets/chunks/{RenderTargetSystem.xcN9N8yZ.js → RenderTargetSystem.CsgIm493.js} +1 -1
  9. package/dist-docs/assets/chunks/{VPLocalSearchBox.q-ZF5NyL.js → VPLocalSearchBox.CVEAMjKj.js} +1 -1
  10. package/dist-docs/assets/chunks/{WebGLRenderer.yqwosgOK.js → WebGLRenderer.p4DxJ1iF.js} +1 -1
  11. package/dist-docs/assets/chunks/{WebGPURenderer.CQtWddUJ.js → WebGPURenderer.BhOx1ll0.js} +1 -1
  12. package/dist-docs/assets/chunks/{browserAll.De-cmVZB.js → browserAll.CXRAifqY.js} +1 -1
  13. package/dist-docs/assets/chunks/{index.BXtdqYEZ.js → index.Dmmvsq5C.js} +4 -4
  14. package/dist-docs/assets/chunks/theme.Cii0G4Y-.js +4 -0
  15. package/dist-docs/assets/chunks/{webworkerAll.CrpT5gSi.js → webworkerAll.CY0RXZhY.js} +1 -1
  16. package/dist-docs/assets/{guide_getting-started.md.D2j6CRj3.js → guide_getting-started.md.9hcfOAq4.js} +1 -1
  17. package/dist-docs/assets/plans_2026-03-11-simulator-logger-dump-implementation-plan.md.Ck5BGdoX.js +1 -0
  18. package/dist-docs/assets/plans_2026-03-11-simulator-logger-dump-implementation-plan.md.Ck5BGdoX.lean.js +1 -0
  19. package/dist-docs/assets/records_bugs_2026-03-11-render-result-runtime-sync-bugfix.md.DRNUuaFT.js +1 -0
  20. package/dist-docs/assets/records_bugs_2026-03-11-render-result-runtime-sync-bugfix.md.DRNUuaFT.lean.js +1 -0
  21. package/dist-docs/assets/records_plans_2026-03-11-simulator-logger-dump-plan.md.CkjDCM2N.js +1 -0
  22. package/dist-docs/assets/records_plans_2026-03-11-simulator-logger-dump-plan.md.CkjDCM2N.lean.js +1 -0
  23. package/dist-docs/assets/records_plans_2026-03-11-simulator-style-tokenization-plan.md.D4BgkNlO.js +1 -0
  24. package/dist-docs/assets/records_plans_2026-03-11-simulator-style-tokenization-plan.md.D4BgkNlO.lean.js +1 -0
  25. package/dist-docs/assets/{style.DrlDtCux.css → style.hiWmcVfN.css} +1 -1
  26. package/dist-docs/guide/advanced-usage.html +4 -4
  27. package/dist-docs/guide/concepts.html +4 -4
  28. package/dist-docs/guide/getting-started.html +6 -6
  29. package/dist-docs/guide/mcp.html +4 -4
  30. package/dist-docs/hashmap.json +1 -1
  31. package/dist-docs/index.html +4 -4
  32. package/dist-docs/plans/2026-03-04-detected-objects-visibility-design.html +4 -4
  33. package/dist-docs/plans/2026-03-04-show-detected-objects-implementation-plan.html +4 -4
  34. package/dist-docs/plans/2026-03-10-simulator-debug-design.html +4 -4
  35. package/dist-docs/plans/2026-03-10-simulator-events-console-design.html +4 -4
  36. package/dist-docs/plans/2026-03-10-simulator-events-console-implementation-plan.html +4 -4
  37. package/dist-docs/plans/2026-03-10-simulator-runtime-controls-design.html +4 -4
  38. package/dist-docs/plans/2026-03-10-simulator-runtime-controls-implementation-plan.html +4 -4
  39. package/dist-docs/plans/2026-03-11-simulator-logger-dump-implementation-plan.html +25 -0
  40. package/dist-docs/records/bugs/2026-02-28-fix-pixi-bindgroup-webgpu-snapshot-whitescreen-bugfix.html +4 -4
  41. package/dist-docs/records/bugs/2026-03-10-events-drawer-toolbar-scroll-bugfix.html +4 -4
  42. package/dist-docs/records/bugs/2026-03-10-simulator-initial-render-layout-bugfix.html +4 -4
  43. package/dist-docs/records/bugs/2026-03-10-simulator-wheel-scroll-leak-bugfix.html +4 -4
  44. package/dist-docs/records/bugs/2026-03-11-docs-server-bin-clean-bugfix.html +4 -4
  45. package/dist-docs/records/bugs/2026-03-11-render-result-runtime-sync-bugfix.html +25 -0
  46. package/dist-docs/records/plans/2026-03-02-furniture-feature-plan.html +4 -4
  47. package/dist-docs/records/plans/2026-03-10-simulator-events-console-plan.html +4 -4
  48. package/dist-docs/records/plans/2026-03-10-simulator-last-successful-combo-cache-plan.html +4 -4
  49. package/dist-docs/records/plans/2026-03-10-simulator-map-parsed-view-plan.html +4 -4
  50. package/dist-docs/records/plans/2026-03-10-simulator-map-playground-refactor-plan.html +4 -4
  51. package/dist-docs/records/plans/2026-03-10-simulator-playground-plan.html +4 -4
  52. package/dist-docs/records/plans/2026-03-10-simulator-runtime-controls-plan.html +4 -4
  53. package/dist-docs/records/plans/2026-03-11-docs-cli-ui-polish-plan.html +4 -4
  54. package/dist-docs/records/plans/2026-03-11-simulator-logger-dump-plan.html +25 -0
  55. package/dist-docs/records/plans/2026-03-11-simulator-src-migration-implementation.html +4 -4
  56. package/dist-docs/records/plans/2026-03-11-simulator-src-migration-plan.html +4 -4
  57. package/dist-docs/records/plans/2026-03-11-simulator-style-tokenization-plan.html +25 -0
  58. package/dist-docs/reference/callbacks.html +4 -4
  59. package/dist-docs/reference/config.html +4 -4
  60. package/dist-docs/reference/data.html +4 -4
  61. package/dist-docs/reference/methods.html +4 -4
  62. package/dist-docs/reference/runtime.html +4 -4
  63. package/dist-docs/reference/types.html +4 -4
  64. package/dist-docs/reference/utils.html +4 -4
  65. package/dist-docs/simulator/index.html +4 -4
  66. package/package.json +1 -1
  67. package/dist-docs/assets/chunks/@localSearchIndexroot.Eymr9Nu7.js +0 -1
  68. package/dist-docs/assets/chunks/theme.CKxbjNbw.js +0 -4
  69. /package/dist-docs/assets/{guide_getting-started.md.D2j6CRj3.lean.js → guide_getting-started.md.9hcfOAq4.lean.js} +0 -0
@@ -85,6 +85,7 @@ const parseArgs = (argv) => {
85
85
  quiet = true
86
86
  continue
87
87
  }
88
+
88
89
  }
89
90
 
90
91
  return { host, port, shouldOpen, quiet }
@@ -152,7 +153,13 @@ const formatDurationMs = (durationMs) => `${Math.max(0, durationMs)}ms`
152
153
  const formatBorder = (title) =>
153
154
  withColor(`+-------------------- ${title} --------------------+`, color.accent)
154
155
 
155
- const renderBanner = ({ version, host, port, startupMs, openMode }) => {
156
+ const renderBanner = ({
157
+ version,
158
+ host,
159
+ port,
160
+ startupMs,
161
+ openMode,
162
+ }) => {
156
163
  const endpoint = `http://${host}:${String(port)}`
157
164
  const lines = [
158
165
  formatBorder('Robot Map Docs'),
@@ -6,17 +6,17 @@
6
6
  <title>404 | Tuya Robot Map</title>
7
7
  <meta name="description" content="Not Found">
8
8
  <meta name="generator" content="VitePress v1.6.4">
9
- <link rel="preload stylesheet" href="/assets/style.DrlDtCux.css" as="style">
9
+ <link rel="preload stylesheet" href="/assets/style.hiWmcVfN.css" as="style">
10
10
  <link rel="preload stylesheet" href="/vp-icons.css" as="style">
11
11
 
12
- <script type="module" src="/assets/app.Bg6Ypeoa.js"></script>
12
+ <script type="module" src="/assets/app.CoDGIQ53.js"></script>
13
13
  <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
14
  <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>
15
15
  <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
16
16
  </head>
17
17
  <body>
18
18
  <div id="app"></div>
19
- <script>window.__VP_HASH_MAP__=JSON.parse("{\"guide_advanced-usage.md\":\"COVLyRkA\",\"guide_concepts.md\":\"CJ87tk-r\",\"guide_getting-started.md\":\"D2j6CRj3\",\"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-docs-cli-ui-polish-plan.md\":\"B8oZt_5R\",\"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>
19
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"guide_advanced-usage.md\":\"COVLyRkA\",\"guide_concepts.md\":\"CJ87tk-r\",\"guide_getting-started.md\":\"9hcfOAq4\",\"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\",\"plans_2026-03-11-simulator-logger-dump-implementation-plan.md\":\"Ck5BGdoX\",\"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_bugs_2026-03-11-render-result-runtime-sync-bugfix.md\":\"DRNUuaFT\",\"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-docs-cli-ui-polish-plan.md\":\"B8oZt_5R\",\"records_plans_2026-03-11-simulator-logger-dump-plan.md\":\"CkjDCM2N\",\"records_plans_2026-03-11-simulator-src-migration-implementation.md\":\"FnB5Cx6R\",\"records_plans_2026-03-11-simulator-src-migration-plan.md\":\"BBfaeRrq\",\"records_plans_2026-03-11-simulator-style-tokenization-plan.md\":\"D4BgkNlO\",\"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>
20
20
 
21
21
  </body>
22
22
  </html>
@@ -1 +1 @@
1
- import{R as p}from"./chunks/theme.CKxbjNbw.js";import{R as s,ad as i,ae as u,af as c,ag as l,ah as f,ai as d,aj as m,ak as h,al as g,am as A,d as v,u as R,v as w,s as y,an as C,ao as P,ap as b,a7 as E}from"./chunks/framework.CBLqO2Q1.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),P(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=j();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return A(S)}function D(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
1
+ import{R as p}from"./chunks/theme.Cii0G4Y-.js";import{R as s,ad as i,ae as u,af as c,ag as l,ah as f,ai as d,aj as m,ak as h,al as g,am as A,d as v,u as R,v as w,s as y,an as C,ao as P,ap as b,a7 as E}from"./chunks/framework.CBLqO2Q1.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),P(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=j();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return A(S)}function D(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};