@rainbow-robotics/preview-host 0.1.2-dev.5 → 0.1.2-dev.50

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 (91) hide show
  1. package/README.md +236 -26
  2. package/build.mjs +2 -1
  3. package/dist/assets/AmrCapabilityControl.V6oiR3_5.js +1 -0
  4. package/dist/assets/MapInfo.rg67lYW5.js +1 -0
  5. package/dist/assets/RBQrBarCodeGuideModal.CegVepfq.js +4939 -0
  6. package/dist/assets/{__federation_expose_App.B-7yegU_.js → __federation_expose_App.rWoLmFNr.js} +282 -249
  7. package/dist/assets/__federation_fn_import.DdkEuT6t.js +23 -0
  8. package/dist/assets/__federation_shared_@emotion/{styled.wOy85H_m.js → styled.ETfwMsQo.js} +1 -1
  9. package/dist/assets/__federation_shared_@tanstack/{react-query.BqXJhb-5.js → react-query.fVz8BOIk.js} +1 -1
  10. package/dist/assets/__federation_shared_react-dom.CHMAxKsQ.js +1 -0
  11. package/dist/assets/{__federation_shared_react-simple-keyboard.BDWRGEbM.js → __federation_shared_react-simple-keyboard.CycbmZUL.js} +3 -3
  12. package/dist/assets/__federation_shared_react.DhiB56zQ.js +1 -0
  13. package/dist/assets/{cssMode.BVhnq_6y.js → cssMode.CiNmHTFv.js} +1 -1
  14. package/dist/assets/{emotion-styled-base.browser.esm.JngGwqgu.js → emotion-styled-base.browser.esm.BIcjgOzg.js} +1 -1
  15. package/dist/assets/{freemarker2.DtoqwD_L.js → freemarker2.B7r_V28s.js} +1 -1
  16. package/dist/assets/goalIconAtlas.B2lkzTN6.svg +39 -0
  17. package/dist/assets/goalIconAtlasReal.BcQvnHD9.svg +34 -0
  18. package/dist/assets/{handlebars.UmYoTOId.js → handlebars.3_K0j9Im.js} +1 -1
  19. package/dist/assets/{html.DC0Vlx9N.js → html.DKWAB1mf.js} +1 -1
  20. package/dist/assets/{htmlMode.cZn_7xZQ.js → htmlMode.CZ2KmtuG.js} +1 -1
  21. package/dist/assets/{index.CHuCXVak.js → index.B3zY1kf7.js} +1 -1
  22. package/dist/assets/index.Cn3FZx5U.js +1 -0
  23. package/dist/assets/index.CvtWB-ew.js +1 -0
  24. package/dist/assets/index.DhDDHapK.js +1 -0
  25. package/dist/assets/index.P6snMalu.js +9 -0
  26. package/dist/assets/{javascript.CxVqa5p8.js → javascript.DE-dWGjy.js} +1 -1
  27. package/dist/assets/{jsonMode.BQsXaCAy.js → jsonMode.BoVz1jWE.js} +1 -1
  28. package/dist/assets/jsx-runtime.CBqCNPYB.js +9 -0
  29. package/dist/assets/keymapTileIndex.worker-Bmd4Ukaf.js +1 -0
  30. package/dist/assets/{liquid.ctNTffmu.js → liquid.UXJC-JKJ.js} +1 -1
  31. package/dist/assets/{lspLanguageFeatures.CIBenPTg.js → lspLanguageFeatures.BbVTGB6M.js} +1 -1
  32. package/dist/assets/{mdx.CEwN4-mU.js → mdx.B7jHdcUF.js} +1 -1
  33. package/dist/assets/{python.DFiX7UCg.js → python.DqZWylvN.js} +1 -1
  34. package/dist/assets/{razor.6V_1uJ45.js → razor.Dwj_e3ac.js} +1 -1
  35. package/dist/assets/remoteEntry.js +1 -1
  36. package/dist/assets/{tsMode.CtIlnNw7.js → tsMode.DLDaOd78.js} +1 -1
  37. package/dist/assets/{typescript.D1htxZ_X.js → typescript.B4V2Badx.js} +1 -1
  38. package/dist/assets/{xml.D6hYgOkJ.js → xml.BpqV0vd6.js} +1 -1
  39. package/dist/assets/{yaml.BPMLV51E.js → yaml.BlIeL5XV.js} +1 -1
  40. package/dist/imgs/nexus/forms/gripper/g7_grip_dir_0.png +0 -0
  41. package/dist/imgs/nexus/forms/gripper/g7_grip_dir_1.png +0 -0
  42. package/dist/imgs/nexus/forms/gripper/g7_offset.png +0 -0
  43. package/dist/imgs/nexus/forms/gripper/g7_orientation_0.png +0 -0
  44. package/dist/imgs/nexus/forms/gripper/g7_orientation_1.png +0 -0
  45. package/dist/imgs/nexus/forms/gripper/g7_tip_width.png +0 -0
  46. package/dist/imgs/nexus/forms/gripper/gripper_10.png +0 -0
  47. package/dist/imgs/nexus/forms/gripper/gripper_7.png +0 -0
  48. package/dist/imgs/nexus/forms/gripper/gripper_8.png +0 -0
  49. package/dist/imgs/nexus/forms/gripper/gripper_9.png +0 -0
  50. package/dist/index.html +11 -10
  51. package/dist/plugin-shared/plugin-ui_host-ui.js +3 -0
  52. package/dist/plugin-shared/plugin-ui_react.js +3 -0
  53. package/dist/plugin-shared/plugin-ui_sdk.js +3 -0
  54. package/dist/plugin-shared/plugin-ui_ws.js +3 -0
  55. package/dist/plugin-shared/react-dom.js +4 -0
  56. package/dist/plugin-shared/react-dom_client.js +3 -0
  57. package/dist/plugin-shared/react.js +4 -0
  58. package/dist/plugin-shared/react_jsx-dev-runtime.js +3 -0
  59. package/dist/plugin-shared/react_jsx-runtime.js +3 -0
  60. package/package.json +4 -4
  61. package/serve.mjs +95 -48
  62. package/dist/assets/AmrCapabilityControl.BppT8lfW.js +0 -1
  63. package/dist/assets/ConveyorBelt.DYgETvU-.png +0 -0
  64. package/dist/assets/FactoryMap.CBpf9N92.js +0 -4881
  65. package/dist/assets/MapInfo.Bit_2DfJ.js +0 -1
  66. package/dist/assets/__federation_fn_import.Drmbxo5T.js +0 -23
  67. package/dist/assets/__federation_shared_react-dom.znG_qyPl.js +0 -1
  68. package/dist/assets/__federation_shared_react.Wsh8dz5j.js +0 -1
  69. package/dist/assets/_commonjsHelpers.Cpj98o6Y.js +0 -1
  70. package/dist/assets/index.C3X9hmTL.js +0 -1
  71. package/dist/assets/index.ChsGqxH_.js +0 -9
  72. package/dist/assets/index.FxRLAiU5.js +0 -1
  73. package/dist/assets/index.ayADrA9_.js +0 -1
  74. package/dist/assets/jsx-runtime.CKZTQYsb.js +0 -9
  75. package/dist/assets/keymapTileIndex.worker-C2HCGd-D.js +0 -1
  76. package/dist/plugin-demo/assets/icon.svg +0 -3
  77. package/dist/plugin-demo/content.js +0 -9149
  78. package/dist/plugin-demo/manifest.json +0 -25
  79. package/dist/plugin-demo/sandbox.html +0 -10
  80. package/dist/plugin-runtime/@rainbow-robotics/plugin-ui/chunks/chunk-AMCIKVG7.js +0 -1
  81. package/dist/plugin-runtime/@rainbow-robotics/plugin-ui/chunks/chunk-GJWPOWHG.js +0 -1
  82. package/dist/plugin-runtime/@rainbow-robotics/plugin-ui/chunks/chunk-JRCDA3EG.js +0 -1
  83. package/dist/plugin-runtime/@rainbow-robotics/plugin-ui/connect.js +0 -1
  84. package/dist/plugin-runtime/@rainbow-robotics/plugin-ui/elements.js +0 -1
  85. package/dist/plugin-runtime/@rainbow-robotics/plugin-ui/react.js +0 -1
  86. package/dist/plugin-runtime/@rainbow-robotics/plugin-ui/sdk.js +0 -1
  87. package/dist/plugin-runtime/vendor/react-dom-client.js +0 -1
  88. package/dist/plugin-runtime/vendor/react-jsx-dev-runtime.js +0 -1
  89. package/dist/plugin-runtime/vendor/react-jsx-runtime.js +0 -1
  90. package/dist/plugin-runtime/vendor/react-runtime.js +0 -65
  91. package/dist/plugin-runtime/vendor/react.js +0 -1
package/README.md CHANGED
@@ -1,44 +1,254 @@
1
- # @repo/preview-host
1
+ # `@rainbow-robotics/preview-host`
2
2
 
3
- Standalone **mini-Muscat** (nexus) shell for previewing Muscat plugins with **no
4
- robot and no back end**. Built from `apps/web/nexus` in `plugin-preview` mode.
3
+ `@rainbow-robotics/preview-host` is a standalone **mini-Muscat (nexus) shell** for previewing Muscat plugins without a robot or backend.
5
4
 
6
- The shell renders the real Header / LNB / panels and the real `rb-components`,
7
- loads the developer's plugin via its manifest, and mocks every robot/back-end
8
- dependency (API-failure toasts suppressed, query retries off, rb static assets
9
- served locally).
5
+ It's built by building `apps/web/nexus` in `plugin-preview` mode.
10
6
 
11
- This package is consumed by `muscat-plugin-kit` (`muscat-pk dev:ui`) so external
12
- plugin developers get a faithful preview without the web-rainbow-ui source.
7
+ This preview shell provides a UI as close as possible to the real Muscat environment.
8
+
9
+ * Real Header
10
+ * Real LNB
11
+ * Real panel structure
12
+ * Real `rb-components`
13
+ * Plugin manifest-based loading
14
+
15
+ Robot- and backend-related dependencies, on the other hand, are all mocked.
16
+
17
+ * No robot connection required
18
+ * No backend server required
19
+ * API-failure toasts hidden
20
+ * Query retry disabled
21
+ * RB static resources served locally
22
+
23
+ This package is used by `muscat-plugin-kit`'s:
24
+
25
+ ```bash
26
+ muscat-pk dev:ui
27
+ ```
28
+
29
+ This lets external plugin developers preview their plugin in a Muscat-like environment without the `web-rainbow-ui` monorepo source.
13
30
 
14
31
  ## Build
15
32
 
16
33
  ```bash
17
- node build.mjs # builds nexus (plugin-preview) and assembles ./dist
18
- node build.mjs --skip-build # only re-assemble (nexus already built)
34
+ node build.mjs
35
+ ```
36
+
37
+ Builds `nexus` in `plugin-preview` mode, then assembles the files needed to run into the `./dist` directory.
38
+
39
+ If `nexus` has already been built, you can use:
40
+
41
+ ```bash
42
+ node build.mjs --skip-build
19
43
  ```
20
44
 
21
- `dist/` (git-ignored) is self-contained: the nexus bundle + rb assets
22
- (`/imgs`, `/fonts`, …) served at their runtime paths.
45
+ This skips rebuilding `nexus` and only reassembles `./dist` from the existing build output.
46
+
47
+ The generated `dist/` directory is excluded from Git.
48
+
49
+ `dist/` is structured to be runnable standalone.
50
+
51
+ Main contents:
52
+
53
+ * nexus bundle
54
+ * RB static resources
55
+ * images
56
+ * fonts
57
+ * other runtime resources
58
+
59
+ Static resources are served at the same paths used at real runtime.
23
60
 
24
- ## Serve
61
+ ```text
62
+ /imgs
63
+ /fonts
64
+ ...
65
+ ```
66
+
67
+ ## Run
25
68
 
26
69
  ```bash
27
70
  rb-preview-host --plugin <built-plugin-dir> [--port 4180] [--dist <dir>]
28
71
  ```
29
72
 
30
- The plugin dir is the output of `muscat-pk build` and must contain
31
- `manifest.json`, `sandbox.html`, `content.js` and any `assets/`. It is mounted at
32
- `/plugin-dev/`; the shell reads it via these globals (injected by `serve.mjs`):
73
+ ### Options
74
+
75
+ `--plugin` points to a plugin build directory produced by `muscat-pk build`.
76
+
77
+ ```bash
78
+ rb-preview-host --plugin ./dist/plugin
79
+ ```
80
+
81
+ `--port` sets the port preview-host runs on.
82
+
83
+ Defaults to `4180`.
84
+
85
+ ```bash
86
+ rb-preview-host \
87
+ --plugin ./dist/plugin \
88
+ --port 4180
89
+ ```
90
+
91
+ `--dist` overrides the preview-host static bundle directory.
92
+
93
+ ```bash
94
+ rb-preview-host \
95
+ --plugin ./dist/plugin \
96
+ --dist ./preview-host-dist
97
+ ```
98
+
99
+ The following options are also supported (all optional — `muscat-pk dev` fills them in internally).
100
+
101
+ * `--socket-url`: the Socket.IO URL the plugin connects to (`window.__RB_PLUGIN_PREVIEW_SOCKET_URL__`)
102
+ * `--robot-host`: robot host override (`window.__RB_ROBOT_HOST__`)
103
+ * `--dev-server-url`: the plugin's own Vite dev server URL (`window.__RB_PLUGIN_DEV_SERVER_URL__`) — used when mounting a `dev` UI entry directly
104
+
105
+ ## Plugin build directory requirements
106
+
107
+ The directory passed to `--plugin` must be an output directory from `muscat-pk build`.
108
+
109
+ It must contain:
110
+
111
+ ```text
112
+ manifest.json
113
+ <ui-entry>.js (e.g. content.js — one is generated per manifest contributes[].ui entry)
114
+ assets/
115
+ ```
116
+
117
+ The host mounts `<ui-entry>.js` by importing it directly as a plain ESM module — no `sandbox.html`/iframe is involved.
118
+
119
+ `assets/` is only present if the plugin uses its own static resources.
120
+
121
+ The plugin directory you specify is mounted in preview host at:
122
+
123
+ ```text
124
+ /plugin-dev/
125
+ ```
126
+
127
+ The preview shell resolves the plugin and static-resource locations through the global variables `serve.mjs` injects.
128
+
129
+ ## Global variables
33
130
 
34
- | global | meaning |
35
- |---|---|
36
- | `window.__RB_PLUGIN_PREVIEW_HOST__` | enable preview-host mode (mock back end) |
37
- | `window.__RB_PLUGIN_PREVIEW_BASE__` | base URL of the plugin (default `/plugin-dev`) |
38
- | `window.__RB_ASSETS_BASE_URL__` | origin for rb static assets |
131
+ ### `window.__RB_PLUGIN_PREVIEW_HOST__`
132
+
133
+ Activates preview-host mode.
134
+
135
+ ```ts
136
+ window.__RB_PLUGIN_PREVIEW_HOST__ = true;
137
+ ```
138
+
139
+ When set, nexus runs against a mock environment instead of the real backend.
140
+
141
+ Typical effects:
142
+
143
+ * Mocked robot connection
144
+ * Mocked backend API
145
+ * Suppressed API-failure toasts
146
+ * Disabled query retry
147
+
148
+ ### `window.__RB_PLUGIN_PREVIEW_BASE__`
149
+
150
+ The base URL the plugin is served from.
151
+
152
+ Defaults to:
153
+
154
+ ```text
155
+ /plugin-dev
156
+ ```
157
+
158
+ Example:
159
+
160
+ ```ts
161
+ window.__RB_PLUGIN_PREVIEW_BASE__ = "/plugin-dev";
162
+ ```
163
+
164
+ The preview shell reads the following files relative to this path:
165
+
166
+ ```text
167
+ /plugin-dev/manifest.json
168
+ /plugin-dev/<ui-entry>.js
169
+ /plugin-dev/assets/*
170
+ ```
171
+
172
+ ### `window.__RB_ASSETS_BASE_URL__`
173
+
174
+ The origin RB static resources are served from.
175
+
176
+ Example:
177
+
178
+ ```ts
179
+ window.__RB_ASSETS_BASE_URL__ = "http://localhost:4180";
180
+ ```
181
+
182
+ This lets preview host load the static resources used by nexus and `rb-components`.
183
+
184
+ Typical resource paths:
185
+
186
+ ```text
187
+ /imgs
188
+ /fonts
189
+ ```
190
+
191
+ ## Global variable summary
192
+
193
+ | Global variable | Meaning |
194
+ | ----------------------------------- | --------------------------------------- |
195
+ | `window.__RB_PLUGIN_PREVIEW_HOST__` | Activates preview-host mode and mocks backend dependencies |
196
+ | `window.__RB_PLUGIN_PREVIEW_BASE__` | Base URL the plugin is mounted at. Defaults to `/plugin-dev` |
197
+ | `window.__RB_ASSETS_BASE_URL__` | Origin serving RB images, fonts, and other static resources |
198
+
199
+ ## Relationship to dev mode
200
+
201
+ `muscat-pk dev:ui` runs nexus's Vite dev server directly.
202
+
203
+ ```bash
204
+ vite --mode plugin-preview
205
+ ```
206
+
207
+ This is a dev-mode preview-host runtime with HMR enabled.
208
+
209
+ In other words, `muscat-pk dev:ui` and `@rainbow-robotics/preview-host` aren't separate implementations — they're the same preview-host runtime used in two different forms.
210
+
211
+ ### `muscat-pk dev:ui`
212
+
213
+ Runs the Vite dev server directly against the monorepo source.
214
+
215
+ Characteristics:
216
+
217
+ * Vite-based dev server
218
+ * HMR support
219
+ * Source changes reflected immediately
220
+ * Suited for development
221
+
222
+ ### `@rainbow-robotics/preview-host`
223
+
224
+ The same runtime packaged as a static bundle for distribution.
225
+
226
+ Characteristics:
227
+
228
+ * No monorepo source required
229
+ * Uses a prebuilt nexus bundle
230
+ * Runs standalone
231
+ * Distributable to external plugin developers
232
+
233
+ The overall relationship:
234
+
235
+ ```text
236
+ apps/web/nexus
237
+ └─ plugin-preview mode
238
+ ├─ muscat-pk dev:ui
239
+ │ └─ runs the Vite dev server directly
240
+ │ └─ HMR support
241
+ │
242
+ └─ @rainbow-robotics/preview-host
243
+ └─ packaged as a static bundle
244
+ └─ runs without the monorepo source
245
+ ```
39
246
 
40
- ## How it relates to dev mode
247
+ As a result, external developers get a Muscat-like preview environment — without holding a copy of the `web-rainbow-ui` source — that includes:
41
248
 
42
- `muscat-pk dev:ui` runs nexus's `vite --mode plugin-preview` directly (HMR), which
43
- is the same preview-host runtime. This packaged static bundle is the
44
- distributable form for developers who don't have the monorepo source.
249
+ * Real nexus layout
250
+ * Real Header and LNB
251
+ * Real panels
252
+ * Real `rb-components`
253
+ * Real manifest-based plugin loading
254
+ * Mocked robot and backend environment
package/build.mjs CHANGED
@@ -22,10 +22,11 @@ const outDir = resolve(here, "dist");
22
22
  const skipBuild = process.argv.includes("--skip-build");
23
23
 
24
24
  if (!skipBuild) {
25
- console.log("[preview-host] building nexus (plugin-preview)…");
25
+ console.log("[preview-host] building mini-muscat (plugin-preview)…");
26
26
  execSync("yarn workspace @app/nexus build:preview", {
27
27
  cwd: repoRoot,
28
28
  stdio: "inherit",
29
+ env: { ...process.env, VITE_PLUGIN_PREVIEW: "true" },
29
30
  });
30
31
  }
31
32
 
@@ -0,0 +1 @@
1
+ import{importShared as f}from"./__federation_fn_import.DdkEuT6t.js";import{dr as g,aE as s,_ as t,aM as v,dl as p,a0 as b,dk as c,cv as O,bL as E,aC as F,aL as B,cg as P,cs as w,aO as D,f1 as _,fJ as L}from"./RBQrBarCodeGuideModal.CegVepfq.js";import{f as T}from"./index.DhDDHapK.js";const{useQuery:M}=await f("@tanstack/react-query"),C=[{key:"dock",endpoint:"/{robot_model}/capability/dock",labelKey:"move.amr.rightPanel.capability.dock"},{key:"io",endpoint:"/{robot_model}/capability/Io",labelKey:"move.amr.rightPanel.capability.io"},{key:"camera",endpoint:"/{robot_model}/capability/camera",labelKey:"move.amr.rightPanel.capability.camera"},{key:"lidar2d",endpoint:"/{robot_model}/capability/lidar2d",labelKey:"move.amr.rightPanel.capability.lidar2d"},{key:"lidar3d",endpoint:"/{robot_model}/capability/lidar3d",labelKey:"move.amr.rightPanel.capability.lidar3d"},{key:"imu",endpoint:"/{robot_model}/capability/imu",labelKey:"move.amr.rightPanel.capability.imu"},{key:"safetyBumper",endpoint:"/{robot_model}/capability/safetyBumper",labelKey:"move.amr.rightPanel.capability.safetyBumper"},{key:"safetyInterlock",endpoint:"/{robot_model}/capability/safetyInterlock",labelKey:"move.amr.rightPanel.capability.safetyInterlock"},{key:"safetyObstacle",endpoint:"/{robot_model}/capability/safetyObstacle",labelKey:"move.amr.rightPanel.capability.safetyObstacle"},{key:"safetyOperationStop",endpoint:"/{robot_model}/capability/safetyOperationStop",labelKey:"move.amr.rightPanel.capability.safetyOperationStop"},{key:"safetySpeedControl",endpoint:"/{robot_model}/capability/safetySpeedControl",labelKey:"move.amr.rightPanel.capability.safetySpeedControl"},{key:"tabos",endpoint:"/{robot_model}/capability/tabos",labelKey:"move.amr.rightPanel.capability.tabos"}],R=e=>typeof e=="object"&&e!==null&&"enabled"in e&&e.enabled===!1,K=e=>{if(e instanceof Error)return e.message;if(typeof e=="object"&&e!==null&&"message"in e){const a=e.message;if(typeof a=="string")return a}},q=async({robot_model:e})=>{const a=await Promise.allSettled(C.map(l=>{const n=l.endpoint.replace("{robot_model}",e);return T.get(n)}));return C.map((l,n)=>{const r=a[n];return r.status==="fulfilled"?{...l,supported:!R(r.value),data:r.value}:{...l,supported:!1,data:null,errorMessage:K(r.reason)}})},$=({robot_model:e,enabled:a=!0})=>M({queryKey:["amrCapabilities",e],queryFn:()=>q({robot_model:e}),enabled:!!e&&a,staleTime:5*1e3,gcTime:60*1e3}),{useMutation:U}=await f("@tanstack/react-query"),V=()=>U({mutationFn:({robot_model:e,target:a,frequency:l})=>T.post(`/${e}/control/streamFrequency`,{target:a,frequency:Math.min(10,Math.max(0,l))})}),{useState:k}=await f("react"),j=4294967295,x=e=>{if(!(e==null||e===j))return`${e} ms`},z={0:"NONE",1:"CHARGING",2:"COMPLETE",3:"FAIL",4:"CANCEL"},G={0:"DEFAULT",1:"TABOS"},Y={0:"CABLE",1:"CONTACT",2:"INDUCTIVE"},H={0:"RPLIDAR",1:"SICK",2:"LAKI",3:"LIVOX",4:"HOKUYO"},Q={0:"ORBBEC"},i=({label:e,children:a})=>s(p,{className:"items-center justify-between gap-3",children:[t("span",{className:"typo-compact-xs-normal text-fg-subtle shrink-0",children:e}),t("span",{className:b("typo-compact-xs-normal text-right",a!=null?"text-fg-default":"text-fg-subtler"),children:a??"—"})]}),X={default:"gray",success:"green",warning:"orange",danger:"red"},y=({label:e,variant:a="default"})=>t(D,{type:"soft",color:X[a],children:e}),h=({label:e,value:a})=>t(i,{label:e,children:t(y,{label:a?"ON":"OFF",variant:a?"success":"default"})}),u=({label:e,bits:a})=>s(c,{className:"gap-1",children:[t("span",{className:"typo-compact-xs-normal text-fg-subtle",children:e}),a?.length?t(p,{className:"gap-1",children:a.map((l,n)=>t("div",{className:b("size-4 rounded-sm border text-center leading-4",l?"border-fg-success bg-fill-success-subtlest":"border-border-subtler bg-fill-disabled"),children:t("span",{className:b("typo-compact-2xs-normal",l?"text-fg-success":"text-fg-subtler"),children:n})},n))}):t("span",{className:"typo-compact-xs-normal text-fg-subtler",children:"—"})]}),N=({label:e,connection:a,rows:l,children:n})=>{const{t:r}=g();return s(c,{className:"bg-fill-disabled gap-1.5 rounded-md p-2.5",children:[s(p,{className:"items-center justify-between gap-3",children:[t("span",{className:"typo-compact-xs-semibold text-fg-default min-w-0 break-words",children:e}),t("span",{className:b("typo-compact-2xs-medium shrink-0",a?"text-fg-success":"text-fg-subtler"),children:r(a?"settings.amr.frs.status.connected":"settings.amr.frs.status.disconnected")})]}),l.map(({key:o,value:d})=>t(i,{label:o,children:d},o)),n]})},J=({label:e,value:a})=>t(D,{type:"soft",color:a?"green":"gray",children:s(p,{className:"items-center gap-1",children:[a?t(_,{className:"size-3"}):t(L,{className:"size-3"}),t("span",{children:e}),t("span",{className:"font-semibold",children:a?"On":"Off"})]})}),I=({flags:e})=>t(p,{className:"flex-wrap gap-1.5",children:e.map(({label:a,value:l})=>t(J,{label:a,value:l},a))}),W=({streams:e})=>e.length?s(c,{className:"border-subtle mt-0.5 gap-1 border-t pt-1.5",children:[t("span",{className:"typo-compact-xs-normal text-fg-subtle",children:"Streams"}),t(p,{className:"flex-wrap gap-1",children:e.map(a=>s(p,{className:"border-subtle bg-alt-1 items-center gap-1 rounded px-1.5 py-1",children:[t("span",{className:"typo-compact-2xs-semibold text-fg-default",children:a.quality}),s("span",{className:"typo-compact-2xs-normal text-fg-subtle",children:[a.width,"x",a.height]}),s("span",{className:"typo-compact-2xs-normal text-fg-subtler",children:[a.fps,"fps"]})]},`${a.camId}-${a.quality}`))})]}):null,Z=({data:e})=>{const a=z[e.chargeState??-1]??String(e.chargeState),l=e.chargeState===1?"success":e.chargeState===3?"danger":e.chargeState===4?"warning":"default";return s(c,{className:"gap-2",children:[s(c,{className:"bg-fill-disabled gap-2 rounded-md p-2.5",children:[t(h,{label:"Dock State",value:e.dockState}),t(i,{label:"Charge State",children:t(y,{label:a,variant:l})}),s(i,{label:"Battery",children:[e.batteryPercent?.toFixed(1)," %"]}),s(i,{label:"Charge Current",children:[e.chargeCurrent?.toFixed(2)," A"]}),s(i,{label:"Contact Voltage",children:[e.contactVoltage?.toFixed(2)," V"]}),t(i,{label:"Battery Type",children:t(y,{label:G[e.batteryType??0]??"—"})})]}),s(p,{className:"items-center gap-1.5 px-0.5",children:[t("span",{className:"typo-compact-xs-normal text-fg-subtle shrink-0",children:"Charge Type"}),e.chargeType?.length?t(p,{className:"flex-wrap gap-1.5",children:e.chargeType.map(n=>t(y,{label:Y[n]??String(n),variant:"default"},n))}):t("span",{className:"typo-compact-xs-normal text-fg-subtler",children:"—"})]})]})},ee=({data:e})=>s(c,{className:"gap-3 p-0.5",children:[t(u,{label:"MCU0 DIO",bits:e.mcu0Dio}),t(u,{label:"MCU1 DIO",bits:e.mcu1Dio}),t(u,{label:"MCU0 DIN",bits:e.mcu0Din}),t(u,{label:"MCU1 DIN",bits:e.mcu1Din})]}),ae=({data:e})=>s(c,{className:"gap-2",children:[t(I,{flags:[{label:"Obstacle",value:e.enabledObs},{label:"Depth",value:e.enabledDepth},{label:"Filter",value:e.enabledFilter}]}),e.info?.length?e.info.map((a,l)=>{const n=typeof a.type=="number"?Q[a.type]??String(a.type):a.type??"—",r=a.camId??a.index??l,o=e.rtspInfo?.filter(d=>d.camId===r)??[];return t(N,{label:`Camera ${r}${a.serial?` · ${a.serial}`:""}`,connection:a.connection,rows:[{key:"Type",value:n},{key:"TF",value:a.tf?.length?a.tf.map(d=>d.toFixed(2)).join(", "):void 0},{key:"Data Age",value:x(a.dataAgeMs)}],children:t(W,{streams:o})},l)}):t("span",{className:"typo-compact-xs-normal text-fg-subtler px-0.5",children:"—"})]}),A=({data:e,is3d:a=!1})=>s(c,{className:"gap-2",children:[t(I,{flags:[{label:"Obstacle",value:e.enabledObs}]}),e.info?.length?e.info.map((l,n)=>t(N,{label:`Lidar ${l.index??n}${l.serial?` · ${l.serial}`:""}`,connection:l.connection,rows:[{key:"Type",value:H[l.type]??String(l.type??"—")},...a?[]:[{key:"IP",value:l.ip}],{key:"Safety",value:l.safety!==void 0?l.safety?"Safety":"Normal":void 0},{key:"TF",value:l.tf?.length?l.tf.map(r=>r.toFixed(2)).join(", "):void 0},{key:"Data Age",value:x(l.dataAgeMs)}]},n)):t("span",{className:"typo-compact-xs-normal text-fg-subtler px-0.5",children:"—"})]}),te=({data:e})=>t(c,{className:"gap-2",children:e.info?.length?e.info.map((a,l)=>t(N,{label:`IMU ${a.index??l}${a.serial?` · ${a.serial}`:""}`,connection:a.connection,rows:[{key:"Type",value:a.type===1?"IMU":"DEFAULT"},{key:"Data Age",value:x(a.dataAgeMs)}]},l)):t("span",{className:"typo-compact-xs-normal text-fg-subtler px-0.5",children:"—"})}),le=({data:e})=>{const a=[{label:"Bumper State",value:e.bumperState},{label:"Interlock State",value:e.interlockState},{label:"Obstacle Detect",value:e.obsDetect},{label:"Operation Stop",value:e.operationStopState},{label:"Speed Control",value:e.speedControlState}].filter(l=>l.value!==void 0);return s(c,{className:"bg-fill-disabled gap-2 rounded-md p-2.5",children:[t(h,{label:"Enabled",value:e.enabled}),a.map(l=>t(h,{label:l.label,value:l.value},l.label))]})},se=({data:e})=>s(c,{className:"bg-fill-disabled gap-2 rounded-md p-2.5",children:[s(i,{label:"Voltage",children:[e.tabosVoltage?.toFixed(2)," V"]}),s(i,{label:"Current",children:[e.tabosCurrent?.toFixed(2)," A"]}),s(i,{label:"SOC",children:[e.tabosSoc?.toFixed(1)," %"]}),s(i,{label:"SOH",children:[e.tabosSoh?.toFixed(1)," %"]}),s(i,{label:"Temp",children:[e.tabosTemp?.toFixed(1)," °C"]})]}),ne=({capKey:e,data:a})=>{switch(e){case"dock":return t(Z,{data:a});case"io":return t(ee,{data:a});case"camera":return t(ae,{data:a});case"lidar2d":return t(A,{data:a});case"lidar3d":return t(A,{data:a,is3d:!0});case"imu":return t(te,{data:a});case"tabos":return t(se,{data:a});default:return t(le,{data:a})}},re=[{label:"LiDAR 2D",value:"lidar2d"},{label:"LiDAR 3D",value:"lidar3d"},{label:"OBS Map",value:"obsMap"}],ce=({robotModel:e})=>{const[a,l]=k("lidar2d"),[n,r]=k("1"),{mutate:o,isPending:d}=V();return s(c,{className:"gap-2 pb-1",children:[s(p,{className:"items-center justify-between gap-2",children:[t("span",{className:"typo-compact-xs-normal text-fg-subtle",children:"Target"}),t(F,{size:"2xs",variant:"brand",disabled:d,onClick:()=>{const m=Math.min(10,Math.max(0,Number(n)));o({robot_model:e,target:a,frequency:m})},children:"Set"})]}),t(P,{size:"sm",value:a,handleChange:m=>l(m),children:re.map(({label:m,value:S})=>t(B,{value:S,children:m},S))}),t(p,{className:"items-center gap-2",children:t(w,{className:"flex-1",size:"sm",value:n,step:1,digit:0,fixedDigit:0,min:"0",max:"10",handleChange:m=>r(m)})})]})},oe=({item:e})=>{const{t:a}=g();return e.supported?e.data?t("div",{className:"pb-1",children:t(ne,{capKey:e.key,data:e.data})}):null:t("p",{className:"typo-compact-xs-normal text-fg-disabled px-1 py-2",children:a("move.amr.rightPanel.capability.status.notSupported")})},ie=()=>{const{t:e}=g();return t(E,{className:"flex-1 [&_[data-slot='empty-view-section']]:h-full",type:"icon",icon:t(O,{size:20}),message:e("move.amr.rightPanel.capability.status.loading")})},ue=({className:e,robotModel:a})=>{const{t:l}=g(),{data:n,isLoading:r}=$({robot_model:a});return s(c,{className:b("AmrCapabilityControl h-full min-h-0",e),children:[r&&t(ie,{}),(n??[]).map(o=>t("div",{className:"border-subtler border-b px-1 py-1",children:t(v,{disabled:!o.supported,title:t(p,{className:"w-full items-center justify-between gap-2",children:t("span",{className:b("typo-compact-sm2-semibold min-w-0 truncate",o.supported?"text-fg-default":"text-fg-disabled"),children:l(o.labelKey)})}),children:t(oe,{item:o})})},o.key)),t("div",{className:"border-subtler border-b px-1 py-1",children:t(v,{title:t("span",{className:"typo-compact-sm2-semibold text-fg-default",children:l("move.amr.rightPanel.capability.streamFrequency")}),children:t(ce,{robotModel:a})})})]})};export{ue as default};
@@ -0,0 +1 @@
1
+ import{fv as g,fw as C,fx as $,fy as M,du as z,dr as P,aE as s,dk as d,_ as e,fz as H,fA as X,dl as r,fB as Y,fC as A,aC as L,fD as D,fE as O,fF as _,fG as E,fH as I,fI as K}from"./RBQrBarCodeGuideModal.CegVepfq.js";class J extends g{centerToLegX=.19725;centerToLegY=.09;centerToHipX=.11493;hipToThigh=.10285;thighToKnee=.3;kneeToFoot=.294;rearRightLeg;rearLeftLeg;frontRightLeg;frontLeftLeg;constructor(){super(),this.name="RBQ10_Robot",this.userData.keep=!0,this.init()}loadObj(o){return new Promise((n,c)=>{new C().load(o,p=>n(p),void 0,p=>c(p))})}init(){const n=["fuselage","leg3","hip1","hip3","thigh_right","thigh_left","calf","foot"].map(c=>{const a=$(`/rbq10/${c}.obj`);return this.loadObj(a).then(p=>({name:c,obj:p}))});Promise.all(n).then(c=>{const a={};c.forEach(i=>{a[i.name]=i.obj}),this.name="rbq10";const p=a.fuselage.clone();p.name="fuselage",this.add(p),this.rotateX(M.degToRad(90)),this.rearRightLeg=this.createRearRightLeg(a),this.rearRightLeg.position.set(-this.centerToLegX,0,this.centerToLegY),this.add(this.rearRightLeg),this.rearLeftLeg=this.createRearLeftLeg(a),this.rearLeftLeg.position.set(-this.centerToLegX,0,-this.centerToLegY),this.add(this.rearLeftLeg),this.frontRightLeg=this.createFrontRightLeg(a),this.frontRightLeg.position.set(this.centerToLegX,0,this.centerToLegY),this.add(this.frontRightLeg),this.frontLeftLeg=this.createFrontLeftLeg(a),this.frontLeftLeg.position.set(this.centerToLegX,0,-this.centerToLegY),this.add(this.frontLeftLeg)}).catch(c=>{console.error("Error loading robot parts:",c)})}createRearRightLeg(o){const n=new g;n.name="rearRightLegGroup";const c=o.leg3.clone();c.name="rearRightLegReducer",n.add(c);const a=new g;a.name="rearRightHipGroup",a.position.set(-this.centerToHipX,0,0);const p=o.hip3.clone();p.name="rearRightHipMesh",p.rotateY(M.degToRad(180)),a.add(p),n.add(a);const i=new g;i.name="rearRightThighGroup",i.position.set(0,0,this.hipToThigh);const l=o.thigh_right.clone();l.name="rearRightThighMesh",i.add(l),a.add(i);const m=new g;m.name="rearRightCalfGroup",m.position.set(0,-this.thighToKnee,0);const u=o.calf.clone();u.name="rearRightCalfMesh",m.add(u),i.add(m);const t=new g;t.name="rearRightFootGroup",t.position.set(0,-this.kneeToFoot,0);const f=o.foot.clone();return f.name="rearRightFootMesh",t.add(f),m.add(t),n}createRearLeftLeg(o){const n=new g;n.name="rearLeftLegGroup";const c=o.leg3.clone();c.name="rearLeftLegReducer",n.add(c);const a=new g;a.name="rearLeftHipGroup",a.position.set(-this.centerToHipX,0,0);const p=o.hip1.clone();p.name="rearLeftHipMesh",a.add(p),n.add(a);const i=new g;i.name="rearLeftThighGroup",i.position.set(0,0,-this.hipToThigh);const l=o.thigh_left.clone();l.name="rearLeftThighMesh",i.add(l),a.add(i);const m=new g;m.name="rearLeftCalfGroup",m.position.set(0,-this.thighToKnee,0);const u=o.calf.clone();u.name="rearLeftCalfMesh",m.add(u),i.add(m);const t=new g;t.name="rearLeftFootGroup",t.position.set(0,-this.kneeToFoot,0);const f=o.foot.clone();return f.name="rearLeftFootMesh",t.add(f),m.add(t),n}createFrontRightLeg(o){const n=new g;n.name="frontRightLegGroup";const c=o.leg3.clone();c.name="frontRightLegReducer",n.add(c);const a=new g;a.name="frontRightHipGroup",a.position.set(this.centerToHipX,0,0);const p=o.hip1.clone();p.name="frontRightHipMesh",p.rotateY(M.degToRad(180)),a.add(p),n.add(a);const i=new g;i.name="frontRightThighGroup",i.position.set(0,0,this.hipToThigh);const l=o.thigh_right.clone();l.name="frontRightThighMesh",i.add(l),a.add(i);const m=new g;m.name="frontRightCalfGroup",m.position.set(0,-this.thighToKnee,0);const u=o.calf.clone();u.name="frontRightCalfMesh",m.add(u),i.add(m);const t=new g;t.name="frontRightFootGroup",t.position.set(0,-this.kneeToFoot,0);const f=o.foot.clone();return f.name="frontRightFootMesh",t.add(f),m.add(t),n}createFrontLeftLeg(o){const n=new g;n.name="frontLeftLegGroup";const c=o.leg3.clone();c.name="frontLeftLegReducer",n.add(c);const a=new g;a.name="frontLeftHipGroup",a.position.set(this.centerToHipX,0,0);const p=o.hip3.clone();p.name="frontLeftHipMesh",a.add(p),n.add(a);const i=new g;i.name="frontLeftThighGroup",i.position.set(0,0,-this.hipToThigh);const l=o.thigh_left.clone();l.name="frontLeftThighMesh",i.add(l),a.add(i);const m=new g;m.name="frontLeftCalfGroup",m.position.set(0,-this.thighToKnee,0);const u=o.calf.clone();u.name="frontLeftCalfMesh",m.add(u),i.add(m);const t=new g;t.name="frontLeftFootGroup",t.position.set(0,-this.kneeToFoot,0);const f=o.foot.clone();return f.name="frontLeftFootMesh",t.add(f),m.add(t),n}update(){}}const w=h=>{const o=Math.floor(h/3600).toString().padStart(2,"0"),n=Math.floor(h%3600/60).toString().padStart(2,"0"),c=Math.floor(h%60).toString().padStart(2,"0");return`${o}:${n}:${c}`},V=({mappingStatus:h="idle",elapsedSeconds:o=0,completedKeyframeCount:n=0,totalKeyframePoints:c=0,onStartMapping:a,onStopMapping:p,onSaveMapping:i,onDiscard:l,mapList:m})=>{const{modal:u}=z(),{t}=P(),f=h==="recording",b=h==="stopped"||h==="saving"||h==="discarding",y=h==="saving"||h==="discarding",x=n>0,T=t(x?"move.amr.rightPanel.map.mapping.readyToSave":"move.amr.rightPanel.map.mapping.cannotSaveYet"),v=x?null:t("move.amr.rightPanel.map.mapping.noKeyframeReceived"),G=async()=>{try{await a?.()}catch(N){console.error(N)}},S=async()=>{try{await p?.()}catch(N){console.error(N)}},j=async()=>{await l?.()},k=async N=>i?.(N)??{ok:!1,reason:"save-failed"},F=()=>{u({component:D,props:{onSaveMapping:k,completedKeyframeCount:n,totalKeyframePoints:c,durationSeconds:o,existingMapNames:m}})};return s(d,{className:"h-full overflow-y-auto p-3",children:[!f&&!b&&s(d,{className:"flex-1 items-center gap-1 pt-[4rem]",children:[e(H,{className:"text-fg-brand size-8"}),e("p",{className:"typo-compact-xs-semibold text-fg-brand",children:t("move.amr.rightPanel.map.mapping.readyToMap")}),s("p",{className:"typo-title-02-bold text-fg-default text-center",children:[t("move.amr.rightPanel.map.mapping.clickStartMapping"),e("br",{}),t("move.amr.rightPanel.map.mapping.toBegin")]})]}),f&&s(d,{className:"flex-1 pt-[4rem]",children:[s(d,{className:"items-center gap-1",children:[e(X,{className:"text-fg-danger size-8"}),e("p",{className:"typo-compact-xs-semibold text-fg-danger",children:t("move.amr.rightPanel.map.mapping.recordingActive")}),e("p",{className:"typo-title-02-bold text-fg-default text-center",children:t("move.amr.rightPanel.map.mapping.buildingKeyframes")})]}),s(d,{className:"gap-2 p-3",children:[e("p",{className:"typo-compact-xs2-semibold text-fg-default",children:t("move.amr.rightPanel.map.mapping.captureStatus")}),s(d,{className:"bg-bg-alt-1 gap-1 rounded-md p-2.5",children:[s(r,{className:"items-center justify-between gap-3",children:[e("p",{className:"typo-compact-xs-normal text-fg-subtler",children:t("move.amr.rightPanel.map.mapping.saveStatus")}),e("p",{className:`typo-compact-xs-semibold text-right ${x?"text-fg-success":"text-fg-danger"}`,children:T})]}),v&&e("p",{className:"typo-compact-2xs-normal text-fg-subtler text-right",children:v}),s(r,{className:"items-center justify-between gap-3",children:[e("p",{className:"typo-compact-xs-normal text-fg-subtler",children:t("move.amr.rightPanel.map.mapping.keyframesReceived")}),e("p",{className:"typo-compact-xs-semibold text-fg-default text-right",children:n.toLocaleString()})]}),s(r,{className:"items-center justify-between gap-3",children:[e("p",{className:"typo-compact-xs-normal text-fg-subtler",children:t("move.amr.rightPanel.map.mapping.keyframePoints")}),e("p",{className:"typo-compact-xs-semibold text-fg-default text-right",children:t("move.amr.rightPanel.map.mapping.points",{count:c.toLocaleString()})})]}),s(r,{className:"items-center justify-between gap-3",children:[e("p",{className:"typo-compact-xs-normal text-fg-subtler",children:t("move.amr.rightPanel.task.duration")}),e("p",{className:"typo-compact-xs-semibold text-fg-default text-right",children:w(o)})]})]})]})]}),b&&s(d,{className:"flex-1 pt-[4rem]",children:[s(d,{className:"items-center gap-1",children:[e(Y,{className:`${x?"text-fg-success":"text-fg-danger"} size-8`}),e("p",{className:`typo-compact-xs-semibold ${x?"text-fg-success":"text-fg-danger"}`,children:t(x?"move.amr.rightPanel.map.mapping.readyToSaveTitle":"move.amr.rightPanel.map.mapping.noKeyframeCaptured")}),e("p",{className:"typo-title-02-bold text-fg-default text-center",children:t(x?"move.amr.rightPanel.map.mapping.mapReadyToSave":"move.amr.rightPanel.map.mapping.cannotSaveRecording")}),e("p",{className:"typo-compact-xs-normal text-fg-subtler text-center",children:t(x?"move.amr.rightPanel.map.mapping.canSaveAsNewMap":"move.amr.rightPanel.map.mapping.keyframeRequired")})]}),s(d,{className:"gap-2 p-3",children:[e("p",{className:"typo-compact-xs2-semibold text-fg-default",children:t("move.amr.rightPanel.map.mapping.result")}),s(d,{className:"bg-bg-alt-1 gap-1 rounded-md p-2.5",children:[s(r,{className:"items-center justify-between gap-3",children:[e("p",{className:"typo-compact-xs-normal text-fg-subtler",children:t("move.amr.rightPanel.map.mapping.saveStatus")}),e("p",{className:`typo-compact-xs-semibold text-right ${x?"text-fg-success":"text-fg-danger"}`,children:T})]}),v&&e("p",{className:"typo-compact-2xs-normal text-fg-subtler text-right",children:v}),s(r,{className:"items-center justify-between gap-3",children:[e("p",{className:"typo-compact-xs-normal text-fg-subtler",children:t("move.amr.rightPanel.map.mapping.keyframesReceived")}),e("p",{className:"typo-compact-xs-semibold text-fg-default text-right",children:n.toLocaleString()})]}),s(r,{className:"items-center justify-between gap-3",children:[e("p",{className:"typo-compact-xs-normal text-fg-subtler",children:t("move.amr.rightPanel.map.mapping.keyframePoints")}),e("p",{className:"typo-compact-xs-semibold text-fg-default text-right",children:t("move.amr.rightPanel.map.mapping.points",{count:c.toLocaleString()})})]}),s(r,{className:"items-center justify-between gap-3",children:[e("p",{className:"typo-compact-xs-normal text-fg-subtler",children:t("move.amr.rightPanel.task.duration")}),e("p",{className:"typo-compact-xs-semibold text-fg-default text-right",children:w(o)})]})]})]})]}),!b&&s(r,{className:"shrink-0 justify-between gap-2",children:[e(L,{onClick:S,disabled:!f||y,className:"gap-1 px-3.5",leadingIcon:e(A,{}),variant:"danger",children:t("move.amr.rightPanel.common.stop")}),e(L,{onClick:G,disabled:f||y,className:"flex-1 gap-1 px-3.5",variant:"brand",children:t("move.amr.rightPanel.map.mapping.startMapping")})]}),b&&s(d,{className:"shrink-0 gap-2",children:[!x&&e(d,{className:"items-center",children:e("p",{className:"typo-compact-2xs-normal text-fg-danger",children:t("move.amr.rightPanel.map.mapping.keyframeRequired")})}),s(r,{className:"justify-between gap-2",children:[e(L,{onClick:j,disabled:y,className:"gap-1 px-3.5",children:t(h==="discarding"?"move.amr.rightPanel.map.mapping.discarding":"move.amr.rightPanel.common.discard")}),e(L,{onClick:F,disabled:!x||y,className:"flex-1 gap-1 px-3.5",variant:"brand",children:t(h==="saving"?"move.amr.rightPanel.common.saving":"move.amr.rightPanel.common.save")})]})]})]})},q=()=>({GOAL:0,ROUTE:0,ALIGN:0}),U=h=>h>=1e6?`${(h/1e6).toFixed(1)}M`:h>=1e3?`${(h/1e3).toFixed(1)}K`:`${h}`,R=h=>`${h<0?"-":"+"}${Math.abs(h).toFixed(1)}m`,B=({currentMapName:h,createdAt:o,lastModified:n,mapCloudCount:c,mapBounds:a,topologyCount:p,nodeTypeCounts:i})=>{const{t:l}=P(),m=a?`${R(a.minX)} ~ ${R(a.maxX)}`:"--",u=a?`${R(a.minY)} ~ ${R(a.maxY)}`:"--",t=a?Math.abs(a.maxX-a.minX)*Math.abs(a.maxY-a.minY):null,f=t===null?"--":`${t.toFixed(1)} m²`,b=i??q();return s(d,{className:"items-start overflow-y-auto",children:[s(d,{className:"border-border-subtler w-full gap-1.5 border-b-[1px] p-3",children:[s(d,{className:"gap-0.5 self-stretch",children:[e("p",{className:"typo-compact-xs2-normal text-fg-subtle",children:l("move.amr.rightPanel.map.info.mapName")}),e("p",{className:"typo-compact-md-semibold text-fg-default",children:h})]}),s(d,{className:"items-start gap-1 self-stretch",children:[s(r,{className:"items-center justify-between self-stretch",children:[e("p",{className:"typo-compact-xs-normal text-fg-subtler",children:l("move.amr.rightPanel.common.created")}),e("p",{className:"typo-compact-xs-normal text-fg-subtle",children:o??"--"})]}),s(r,{className:"items-center justify-between self-stretch",children:[e("p",{className:"typo-compact-xs-normal text-fg-subtler",children:l("move.amr.rightPanel.map.info.lastModified")}),e("p",{className:"typo-compact-xs-normal text-fg-subtle",children:n??"--"})]})]})]}),s(d,{className:"border-border-subtler w-full gap-2 border-b-[1px] p-3",children:[e("p",{className:"typo-compact-md-semibold text-fg-default",children:l("move.amr.rightPanel.map.info.statistics")}),s(r,{className:"items-center justify-between self-stretch",children:[s(r,{className:"items-center gap-[6px]",children:[e("div",{className:"bg-fill-subtler flex size-6 items-center justify-center rounded-full",children:e(O,{className:"text-fg-subtle size-4"})}),e("p",{className:"typo-compact-xs2-normal text-fg-subtle",children:l("move.amr.rightPanel.map.info.nodes")})]}),e("p",{className:"typo-compact-xs2-normal text-fg-default",children:p})]}),s(r,{className:"items-center justify-between self-stretch",children:[e(r,{children:s(r,{className:"items-center gap-[6px]",children:[e("div",{className:"bg-fill-subtler flex size-6 items-center justify-center rounded-full",children:e(_,{className:"text-fg-subtle size-4"})}),e("p",{className:"typo-compact-xs2-normal text-fg-subtle",children:l("move.amr.rightPanel.map.info.pointCloud")})]})}),s("p",{className:"typo-compact-xs2-normal text-fg-default",children:[U(c)," pts"]})]})]}),s(d,{className:"border-border-subtler w-full gap-2 border-b-[1px] p-3",children:[e("p",{className:"typo-compact-md-semibold text-fg-default",children:l("move.amr.rightPanel.map.info.mapBoundaries")}),s(r,{className:"items-center justify-between self-stretch",children:[e(r,{className:"items-center gap-[6px]",children:e("p",{className:"typo-compact-xs2-normal text-fg-subtle",children:l("move.amr.rightPanel.map.info.xRange")})}),e("p",{className:"typo-compact-xs2-normal text-fg-default",children:m})]}),s(r,{className:"items-center justify-between self-stretch",children:[e(r,{children:e(r,{className:"items-center gap-[6px]",children:e("p",{className:"typo-compact-xs2-normal text-fg-subtle",children:l("move.amr.rightPanel.map.info.yRange")})})}),e("p",{className:"typo-compact-xs2-normal text-fg-default",children:u})]}),s(r,{className:"items-center justify-between self-stretch",children:[e(r,{className:"items-center gap-[6px]",children:e("p",{className:"typo-compact-xs2-normal text-fg-subtle",children:l("move.amr.rightPanel.map.info.totalArea")})}),e("p",{className:"typo-compact-xs2-normal text-fg-default",children:f})]})]}),s(d,{className:"border-border-subtler w-full gap-2 border-b-[1px] p-3",children:[e("p",{className:"typo-compact-md-semibold text-fg-default",children:l("move.amr.rightPanel.menu.topology")}),s(r,{className:"items-center justify-between self-stretch",children:[s(r,{className:"items-center gap-[6px]",children:[e("div",{className:"bg-fill-warning-subtler flex size-6 items-center justify-center rounded-full",children:e(E,{className:"text-fg-warning size-4"})}),e("p",{className:"typo-compact-xs2-normal text-fg-subtle",children:l("move.amr.rightPanel.topology.nodeType.goal")})]}),e("p",{className:"typo-compact-xs2-normal text-fg-default",children:b.GOAL})]}),s(r,{className:"items-center justify-between self-stretch",children:[e(r,{children:s(r,{className:"items-center gap-[6px]",children:[e("div",{className:"bg-fill-brand-subtler flex size-6 items-center justify-center rounded-full",children:e(I,{className:"text-fg-brand size-4"})}),e("p",{className:"typo-compact-xs2-normal text-fg-subtle",children:l("move.amr.rightPanel.topology.nodeType.route")})]})}),e("p",{className:"typo-compact-xs2-normal text-fg-default",children:b.ROUTE})]}),s(r,{className:"items-center justify-between self-stretch",children:[s(r,{className:"items-center gap-[6px]",children:[e("div",{className:"bg-fill-success-subtler flex size-6 items-center justify-center rounded-full",children:e(K,{className:"text-fg-success size-4"})}),e("p",{className:"typo-compact-xs2-normal text-fg-subtle",children:l("move.amr.rightPanel.topology.nodeType.align")})]}),e("p",{className:"typo-compact-xs2-normal text-fg-default",children:b.ALIGN})]})]})]})};export{B as M,J as R,V as a};