@forgeax/view 0.2.1-beta-20260924075842

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 (585) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +742 -0
  3. package/dist/modules/backend.mjs +54 -0
  4. package/dist/modules/backend.mjs.map +7 -0
  5. package/dist/modules/browser.mjs +180 -0
  6. package/dist/modules/browser.mjs.map +7 -0
  7. package/dist/modules/carrier-contract.mjs +38 -0
  8. package/dist/modules/carrier-contract.mjs.map +7 -0
  9. package/dist/modules/carrier.mjs +13 -0
  10. package/dist/modules/carrier.mjs.map +7 -0
  11. package/dist/modules/chunks/chunk-2ASWB6IX.mjs +225 -0
  12. package/dist/modules/chunks/chunk-2ASWB6IX.mjs.map +7 -0
  13. package/dist/modules/chunks/chunk-2IJKOG2F.mjs +801 -0
  14. package/dist/modules/chunks/chunk-2IJKOG2F.mjs.map +7 -0
  15. package/dist/modules/chunks/chunk-2K3BBJ5S.mjs +9 -0
  16. package/dist/modules/chunks/chunk-2K3BBJ5S.mjs.map +7 -0
  17. package/dist/modules/chunks/chunk-32GD5LL6.mjs +482 -0
  18. package/dist/modules/chunks/chunk-32GD5LL6.mjs.map +7 -0
  19. package/dist/modules/chunks/chunk-3B4KFAEC.mjs +10 -0
  20. package/dist/modules/chunks/chunk-3B4KFAEC.mjs.map +7 -0
  21. package/dist/modules/chunks/chunk-46O5WX43.mjs +25 -0
  22. package/dist/modules/chunks/chunk-46O5WX43.mjs.map +7 -0
  23. package/dist/modules/chunks/chunk-47J5JXAB.mjs +237 -0
  24. package/dist/modules/chunks/chunk-47J5JXAB.mjs.map +7 -0
  25. package/dist/modules/chunks/chunk-4BXQOUDQ.mjs +17 -0
  26. package/dist/modules/chunks/chunk-4BXQOUDQ.mjs.map +7 -0
  27. package/dist/modules/chunks/chunk-4GQWYU2V.mjs +126 -0
  28. package/dist/modules/chunks/chunk-4GQWYU2V.mjs.map +7 -0
  29. package/dist/modules/chunks/chunk-4N5X2PRQ.mjs +48 -0
  30. package/dist/modules/chunks/chunk-4N5X2PRQ.mjs.map +7 -0
  31. package/dist/modules/chunks/chunk-4WXD2KYX.mjs +56 -0
  32. package/dist/modules/chunks/chunk-4WXD2KYX.mjs.map +7 -0
  33. package/dist/modules/chunks/chunk-6ZWWVAZK.mjs +468 -0
  34. package/dist/modules/chunks/chunk-6ZWWVAZK.mjs.map +7 -0
  35. package/dist/modules/chunks/chunk-73UZNRHN.mjs +296 -0
  36. package/dist/modules/chunks/chunk-73UZNRHN.mjs.map +7 -0
  37. package/dist/modules/chunks/chunk-7ITLCRND.mjs +10 -0
  38. package/dist/modules/chunks/chunk-7ITLCRND.mjs.map +7 -0
  39. package/dist/modules/chunks/chunk-7TGVWKH7.mjs +59 -0
  40. package/dist/modules/chunks/chunk-7TGVWKH7.mjs.map +7 -0
  41. package/dist/modules/chunks/chunk-7URFF53W.mjs +42 -0
  42. package/dist/modules/chunks/chunk-7URFF53W.mjs.map +7 -0
  43. package/dist/modules/chunks/chunk-7YSDRIFN.mjs +14 -0
  44. package/dist/modules/chunks/chunk-7YSDRIFN.mjs.map +7 -0
  45. package/dist/modules/chunks/chunk-AAFVCQPK.mjs +52 -0
  46. package/dist/modules/chunks/chunk-AAFVCQPK.mjs.map +7 -0
  47. package/dist/modules/chunks/chunk-AEK7ZESQ.mjs +18 -0
  48. package/dist/modules/chunks/chunk-AEK7ZESQ.mjs.map +7 -0
  49. package/dist/modules/chunks/chunk-AL6ZWIEU.mjs +42 -0
  50. package/dist/modules/chunks/chunk-AL6ZWIEU.mjs.map +7 -0
  51. package/dist/modules/chunks/chunk-ALT7XVMQ.mjs +73 -0
  52. package/dist/modules/chunks/chunk-ALT7XVMQ.mjs.map +7 -0
  53. package/dist/modules/chunks/chunk-ASI2HBE6.mjs +116 -0
  54. package/dist/modules/chunks/chunk-ASI2HBE6.mjs.map +7 -0
  55. package/dist/modules/chunks/chunk-ATWGCH7I.mjs +174 -0
  56. package/dist/modules/chunks/chunk-ATWGCH7I.mjs.map +7 -0
  57. package/dist/modules/chunks/chunk-C45U6IIY.mjs +692 -0
  58. package/dist/modules/chunks/chunk-C45U6IIY.mjs.map +7 -0
  59. package/dist/modules/chunks/chunk-C7R3YRA7.mjs +98 -0
  60. package/dist/modules/chunks/chunk-C7R3YRA7.mjs.map +7 -0
  61. package/dist/modules/chunks/chunk-CRMICXKN.mjs +87 -0
  62. package/dist/modules/chunks/chunk-CRMICXKN.mjs.map +7 -0
  63. package/dist/modules/chunks/chunk-CUH2G6UF.mjs +81 -0
  64. package/dist/modules/chunks/chunk-CUH2G6UF.mjs.map +7 -0
  65. package/dist/modules/chunks/chunk-D7GWRZLL.mjs +77 -0
  66. package/dist/modules/chunks/chunk-D7GWRZLL.mjs.map +7 -0
  67. package/dist/modules/chunks/chunk-DBWUIBE3.mjs +10 -0
  68. package/dist/modules/chunks/chunk-DBWUIBE3.mjs.map +7 -0
  69. package/dist/modules/chunks/chunk-DQWVWWUU.mjs +77 -0
  70. package/dist/modules/chunks/chunk-DQWVWWUU.mjs.map +7 -0
  71. package/dist/modules/chunks/chunk-DZZ2WFEU.mjs +122 -0
  72. package/dist/modules/chunks/chunk-DZZ2WFEU.mjs.map +7 -0
  73. package/dist/modules/chunks/chunk-E4UIAN26.mjs +58 -0
  74. package/dist/modules/chunks/chunk-E4UIAN26.mjs.map +7 -0
  75. package/dist/modules/chunks/chunk-EJGBVKFE.mjs +77 -0
  76. package/dist/modules/chunks/chunk-EJGBVKFE.mjs.map +7 -0
  77. package/dist/modules/chunks/chunk-EPSTTHWV.mjs +173 -0
  78. package/dist/modules/chunks/chunk-EPSTTHWV.mjs.map +7 -0
  79. package/dist/modules/chunks/chunk-ER7T6QJ3.mjs +64 -0
  80. package/dist/modules/chunks/chunk-ER7T6QJ3.mjs.map +7 -0
  81. package/dist/modules/chunks/chunk-FD4BAJ6K.mjs +389 -0
  82. package/dist/modules/chunks/chunk-FD4BAJ6K.mjs.map +7 -0
  83. package/dist/modules/chunks/chunk-FJM6WWIY.mjs +80 -0
  84. package/dist/modules/chunks/chunk-FJM6WWIY.mjs.map +7 -0
  85. package/dist/modules/chunks/chunk-FKCQYDLX.mjs +162 -0
  86. package/dist/modules/chunks/chunk-FKCQYDLX.mjs.map +7 -0
  87. package/dist/modules/chunks/chunk-FLGC65SR.mjs +10 -0
  88. package/dist/modules/chunks/chunk-FLGC65SR.mjs.map +7 -0
  89. package/dist/modules/chunks/chunk-FMCACPX5.mjs +289 -0
  90. package/dist/modules/chunks/chunk-FMCACPX5.mjs.map +7 -0
  91. package/dist/modules/chunks/chunk-FOBRLUQV.mjs +51 -0
  92. package/dist/modules/chunks/chunk-FOBRLUQV.mjs.map +7 -0
  93. package/dist/modules/chunks/chunk-FV3DSKZB.mjs +33 -0
  94. package/dist/modules/chunks/chunk-FV3DSKZB.mjs.map +7 -0
  95. package/dist/modules/chunks/chunk-G7BAFAGO.mjs +98 -0
  96. package/dist/modules/chunks/chunk-G7BAFAGO.mjs.map +7 -0
  97. package/dist/modules/chunks/chunk-GQBZMCTK.mjs +145 -0
  98. package/dist/modules/chunks/chunk-GQBZMCTK.mjs.map +7 -0
  99. package/dist/modules/chunks/chunk-GYWIY7AL.mjs +131 -0
  100. package/dist/modules/chunks/chunk-GYWIY7AL.mjs.map +7 -0
  101. package/dist/modules/chunks/chunk-H3KNBALD.mjs +256 -0
  102. package/dist/modules/chunks/chunk-H3KNBALD.mjs.map +7 -0
  103. package/dist/modules/chunks/chunk-H3M22JDL.mjs +144 -0
  104. package/dist/modules/chunks/chunk-H3M22JDL.mjs.map +7 -0
  105. package/dist/modules/chunks/chunk-HES3DNTM.mjs +40 -0
  106. package/dist/modules/chunks/chunk-HES3DNTM.mjs.map +7 -0
  107. package/dist/modules/chunks/chunk-I5BFP7SS.mjs +2392 -0
  108. package/dist/modules/chunks/chunk-I5BFP7SS.mjs.map +7 -0
  109. package/dist/modules/chunks/chunk-IGRMZYRD.mjs +15 -0
  110. package/dist/modules/chunks/chunk-IGRMZYRD.mjs.map +7 -0
  111. package/dist/modules/chunks/chunk-IKNGC766.mjs +321 -0
  112. package/dist/modules/chunks/chunk-IKNGC766.mjs.map +7 -0
  113. package/dist/modules/chunks/chunk-IVHNYKZB.mjs +35 -0
  114. package/dist/modules/chunks/chunk-IVHNYKZB.mjs.map +7 -0
  115. package/dist/modules/chunks/chunk-JHOURMYW.mjs +101 -0
  116. package/dist/modules/chunks/chunk-JHOURMYW.mjs.map +7 -0
  117. package/dist/modules/chunks/chunk-JURXMRFA.mjs +282 -0
  118. package/dist/modules/chunks/chunk-JURXMRFA.mjs.map +7 -0
  119. package/dist/modules/chunks/chunk-JWZIREC3.mjs +18 -0
  120. package/dist/modules/chunks/chunk-JWZIREC3.mjs.map +7 -0
  121. package/dist/modules/chunks/chunk-KHRTIZ56.mjs +1400 -0
  122. package/dist/modules/chunks/chunk-KHRTIZ56.mjs.map +7 -0
  123. package/dist/modules/chunks/chunk-KLJZZ23J.mjs +102 -0
  124. package/dist/modules/chunks/chunk-KLJZZ23J.mjs.map +7 -0
  125. package/dist/modules/chunks/chunk-KNBAYU5I.mjs +49 -0
  126. package/dist/modules/chunks/chunk-KNBAYU5I.mjs.map +7 -0
  127. package/dist/modules/chunks/chunk-KSZNCFU4.mjs +125 -0
  128. package/dist/modules/chunks/chunk-KSZNCFU4.mjs.map +7 -0
  129. package/dist/modules/chunks/chunk-L45W6KM6.mjs +158 -0
  130. package/dist/modules/chunks/chunk-L45W6KM6.mjs.map +7 -0
  131. package/dist/modules/chunks/chunk-LERMYZRC.mjs +239 -0
  132. package/dist/modules/chunks/chunk-LERMYZRC.mjs.map +7 -0
  133. package/dist/modules/chunks/chunk-LKJCXYSJ.mjs +91 -0
  134. package/dist/modules/chunks/chunk-LKJCXYSJ.mjs.map +7 -0
  135. package/dist/modules/chunks/chunk-MBS3EICT.mjs +25 -0
  136. package/dist/modules/chunks/chunk-MBS3EICT.mjs.map +7 -0
  137. package/dist/modules/chunks/chunk-MUOQZPVH.mjs +609 -0
  138. package/dist/modules/chunks/chunk-MUOQZPVH.mjs.map +7 -0
  139. package/dist/modules/chunks/chunk-MVEPGFSB.mjs +1 -0
  140. package/dist/modules/chunks/chunk-MVEPGFSB.mjs.map +7 -0
  141. package/dist/modules/chunks/chunk-NBJKLWJ5.mjs +42 -0
  142. package/dist/modules/chunks/chunk-NBJKLWJ5.mjs.map +7 -0
  143. package/dist/modules/chunks/chunk-NBLGKTEM.mjs +86 -0
  144. package/dist/modules/chunks/chunk-NBLGKTEM.mjs.map +7 -0
  145. package/dist/modules/chunks/chunk-NI7CS3I2.mjs +110 -0
  146. package/dist/modules/chunks/chunk-NI7CS3I2.mjs.map +7 -0
  147. package/dist/modules/chunks/chunk-NJH2OJFC.mjs +2113 -0
  148. package/dist/modules/chunks/chunk-NJH2OJFC.mjs.map +7 -0
  149. package/dist/modules/chunks/chunk-OBK4LIJB.mjs +20 -0
  150. package/dist/modules/chunks/chunk-OBK4LIJB.mjs.map +7 -0
  151. package/dist/modules/chunks/chunk-PEUT3FW7.mjs +1 -0
  152. package/dist/modules/chunks/chunk-PEUT3FW7.mjs.map +7 -0
  153. package/dist/modules/chunks/chunk-PRZOWPDN.mjs +66 -0
  154. package/dist/modules/chunks/chunk-PRZOWPDN.mjs.map +7 -0
  155. package/dist/modules/chunks/chunk-Q4RXBGQS.mjs +55 -0
  156. package/dist/modules/chunks/chunk-Q4RXBGQS.mjs.map +7 -0
  157. package/dist/modules/chunks/chunk-QBHBKOIL.mjs +55 -0
  158. package/dist/modules/chunks/chunk-QBHBKOIL.mjs.map +7 -0
  159. package/dist/modules/chunks/chunk-QD6CCRMG.mjs +20 -0
  160. package/dist/modules/chunks/chunk-QD6CCRMG.mjs.map +7 -0
  161. package/dist/modules/chunks/chunk-QF4V23GW.mjs +39 -0
  162. package/dist/modules/chunks/chunk-QF4V23GW.mjs.map +7 -0
  163. package/dist/modules/chunks/chunk-QK6W7MJO.mjs +42 -0
  164. package/dist/modules/chunks/chunk-QK6W7MJO.mjs.map +7 -0
  165. package/dist/modules/chunks/chunk-QL7V6DK7.mjs +34 -0
  166. package/dist/modules/chunks/chunk-QL7V6DK7.mjs.map +7 -0
  167. package/dist/modules/chunks/chunk-QLBQQKRI.mjs +25 -0
  168. package/dist/modules/chunks/chunk-QLBQQKRI.mjs.map +7 -0
  169. package/dist/modules/chunks/chunk-QLZQGZDC.mjs +418 -0
  170. package/dist/modules/chunks/chunk-QLZQGZDC.mjs.map +7 -0
  171. package/dist/modules/chunks/chunk-QSKQZGK7.mjs +1625 -0
  172. package/dist/modules/chunks/chunk-QSKQZGK7.mjs.map +7 -0
  173. package/dist/modules/chunks/chunk-QURKBAG4.mjs +25 -0
  174. package/dist/modules/chunks/chunk-QURKBAG4.mjs.map +7 -0
  175. package/dist/modules/chunks/chunk-R274XBEH.mjs +53 -0
  176. package/dist/modules/chunks/chunk-R274XBEH.mjs.map +7 -0
  177. package/dist/modules/chunks/chunk-R4I4JEY5.mjs +77 -0
  178. package/dist/modules/chunks/chunk-R4I4JEY5.mjs.map +7 -0
  179. package/dist/modules/chunks/chunk-RR6L6VVR.mjs +9 -0
  180. package/dist/modules/chunks/chunk-RR6L6VVR.mjs.map +7 -0
  181. package/dist/modules/chunks/chunk-RXF7SBBZ.mjs +125 -0
  182. package/dist/modules/chunks/chunk-RXF7SBBZ.mjs.map +7 -0
  183. package/dist/modules/chunks/chunk-SR66S6EJ.mjs +138 -0
  184. package/dist/modules/chunks/chunk-SR66S6EJ.mjs.map +7 -0
  185. package/dist/modules/chunks/chunk-SSQMQJ52.mjs +27 -0
  186. package/dist/modules/chunks/chunk-SSQMQJ52.mjs.map +7 -0
  187. package/dist/modules/chunks/chunk-TP26TASL.mjs +20 -0
  188. package/dist/modules/chunks/chunk-TP26TASL.mjs.map +7 -0
  189. package/dist/modules/chunks/chunk-TSAEK5P3.mjs +50 -0
  190. package/dist/modules/chunks/chunk-TSAEK5P3.mjs.map +7 -0
  191. package/dist/modules/chunks/chunk-UAY27HT3.mjs +68 -0
  192. package/dist/modules/chunks/chunk-UAY27HT3.mjs.map +7 -0
  193. package/dist/modules/chunks/chunk-UDLIWGWS.mjs +103 -0
  194. package/dist/modules/chunks/chunk-UDLIWGWS.mjs.map +7 -0
  195. package/dist/modules/chunks/chunk-UDVQHPWV.mjs +89 -0
  196. package/dist/modules/chunks/chunk-UDVQHPWV.mjs.map +7 -0
  197. package/dist/modules/chunks/chunk-UM23W3G7.mjs +237 -0
  198. package/dist/modules/chunks/chunk-UM23W3G7.mjs.map +7 -0
  199. package/dist/modules/chunks/chunk-VDZJWEAA.mjs +214 -0
  200. package/dist/modules/chunks/chunk-VDZJWEAA.mjs.map +7 -0
  201. package/dist/modules/chunks/chunk-VIGOJWSO.mjs +42 -0
  202. package/dist/modules/chunks/chunk-VIGOJWSO.mjs.map +7 -0
  203. package/dist/modules/chunks/chunk-VY3S5BWI.mjs +284 -0
  204. package/dist/modules/chunks/chunk-VY3S5BWI.mjs.map +7 -0
  205. package/dist/modules/chunks/chunk-VZXGRZYU.mjs +47 -0
  206. package/dist/modules/chunks/chunk-VZXGRZYU.mjs.map +7 -0
  207. package/dist/modules/chunks/chunk-W5DMQZB5.mjs +42 -0
  208. package/dist/modules/chunks/chunk-W5DMQZB5.mjs.map +7 -0
  209. package/dist/modules/chunks/chunk-WOMHSTVZ.mjs +918 -0
  210. package/dist/modules/chunks/chunk-WOMHSTVZ.mjs.map +7 -0
  211. package/dist/modules/chunks/chunk-XFQT7XCG.mjs +42 -0
  212. package/dist/modules/chunks/chunk-XFQT7XCG.mjs.map +7 -0
  213. package/dist/modules/chunks/chunk-XJZEVRYX.mjs +98 -0
  214. package/dist/modules/chunks/chunk-XJZEVRYX.mjs.map +7 -0
  215. package/dist/modules/chunks/chunk-XUYFV23R.mjs +317 -0
  216. package/dist/modules/chunks/chunk-XUYFV23R.mjs.map +7 -0
  217. package/dist/modules/chunks/chunk-Y5HXCPPQ.mjs +58 -0
  218. package/dist/modules/chunks/chunk-Y5HXCPPQ.mjs.map +7 -0
  219. package/dist/modules/chunks/chunk-YTHGRKGI.mjs +147 -0
  220. package/dist/modules/chunks/chunk-YTHGRKGI.mjs.map +7 -0
  221. package/dist/modules/chunks/chunk-YVQSDKAO.mjs +341 -0
  222. package/dist/modules/chunks/chunk-YVQSDKAO.mjs.map +7 -0
  223. package/dist/modules/chunks/chunk-YYXQDUVT.mjs +123 -0
  224. package/dist/modules/chunks/chunk-YYXQDUVT.mjs.map +7 -0
  225. package/dist/modules/chunks/chunk-ZFXZ2NUI.mjs +142 -0
  226. package/dist/modules/chunks/chunk-ZFXZ2NUI.mjs.map +7 -0
  227. package/dist/modules/chunks/chunk-ZLNWF4ET.mjs +9 -0
  228. package/dist/modules/chunks/chunk-ZLNWF4ET.mjs.map +7 -0
  229. package/dist/modules/chunks/chunk-ZLU5QW2O.mjs +9 -0
  230. package/dist/modules/chunks/chunk-ZLU5QW2O.mjs.map +7 -0
  231. package/dist/modules/chunks/chunk-ZNZPYE2V.mjs +28 -0
  232. package/dist/modules/chunks/chunk-ZNZPYE2V.mjs.map +7 -0
  233. package/dist/modules/chunks/core-564N45MO.mjs +7480 -0
  234. package/dist/modules/chunks/core-564N45MO.mjs.map +7 -0
  235. package/dist/modules/chunks/css-BKH4SVJG.mjs +8 -0
  236. package/dist/modules/chunks/css-BKH4SVJG.mjs.map +7 -0
  237. package/dist/modules/chunks/engine-javascript-PDVIGNGR.mjs +3241 -0
  238. package/dist/modules/chunks/engine-javascript-PDVIGNGR.mjs.map +7 -0
  239. package/dist/modules/chunks/github-dark-default-6HVTHEWF.mjs +8 -0
  240. package/dist/modules/chunks/github-dark-default-6HVTHEWF.mjs.map +7 -0
  241. package/dist/modules/chunks/github-light-default-LAXRA6XL.mjs +8 -0
  242. package/dist/modules/chunks/github-light-default-LAXRA6XL.mjs.map +7 -0
  243. package/dist/modules/chunks/glsl-UC3YWUD2.mjs +18 -0
  244. package/dist/modules/chunks/glsl-UC3YWUD2.mjs.map +7 -0
  245. package/dist/modules/chunks/html-FRVIUV63.mjs +19 -0
  246. package/dist/modules/chunks/html-FRVIUV63.mjs.map +7 -0
  247. package/dist/modules/chunks/javascript-LN3OC7S2.mjs +8 -0
  248. package/dist/modules/chunks/javascript-LN3OC7S2.mjs.map +7 -0
  249. package/dist/modules/chunks/json-5CUGWTOP.mjs +11 -0
  250. package/dist/modules/chunks/json-5CUGWTOP.mjs.map +7 -0
  251. package/dist/modules/chunks/json5-YZQI5VNO.mjs +11 -0
  252. package/dist/modules/chunks/json5-YZQI5VNO.mjs.map +7 -0
  253. package/dist/modules/chunks/jsonc-SWID6VOZ.mjs +11 -0
  254. package/dist/modules/chunks/jsonc-SWID6VOZ.mjs.map +7 -0
  255. package/dist/modules/chunks/jsx-A7RDCLJO.mjs +11 -0
  256. package/dist/modules/chunks/jsx-A7RDCLJO.mjs.map +7 -0
  257. package/dist/modules/chunks/markdown-QTCU5KP5.mjs +11 -0
  258. package/dist/modules/chunks/markdown-QTCU5KP5.mjs.map +7 -0
  259. package/dist/modules/chunks/python-LAZONBIB.mjs +11 -0
  260. package/dist/modules/chunks/python-LAZONBIB.mjs.map +7 -0
  261. package/dist/modules/chunks/rust-XWTPJFJO.mjs +11 -0
  262. package/dist/modules/chunks/rust-XWTPJFJO.mjs.map +7 -0
  263. package/dist/modules/chunks/scss-CFXRHUUW.mjs +15 -0
  264. package/dist/modules/chunks/scss-CFXRHUUW.mjs.map +7 -0
  265. package/dist/modules/chunks/shellscript-OHO3LCVU.mjs +11 -0
  266. package/dist/modules/chunks/shellscript-OHO3LCVU.mjs.map +7 -0
  267. package/dist/modules/chunks/toml-IOHFZJ5B.mjs +11 -0
  268. package/dist/modules/chunks/toml-IOHFZJ5B.mjs.map +7 -0
  269. package/dist/modules/chunks/tsx-2E6WNX2E.mjs +11 -0
  270. package/dist/modules/chunks/tsx-2E6WNX2E.mjs.map +7 -0
  271. package/dist/modules/chunks/typescript-PBKAS54P.mjs +11 -0
  272. package/dist/modules/chunks/typescript-PBKAS54P.mjs.map +7 -0
  273. package/dist/modules/chunks/wgsl-PS6QPRLZ.mjs +11 -0
  274. package/dist/modules/chunks/wgsl-PS6QPRLZ.mjs.map +7 -0
  275. package/dist/modules/chunks/xml-JECR2ACB.mjs +18 -0
  276. package/dist/modules/chunks/xml-JECR2ACB.mjs.map +7 -0
  277. package/dist/modules/chunks/yaml-P2SV4LOE.mjs +11 -0
  278. package/dist/modules/chunks/yaml-P2SV4LOE.mjs.map +7 -0
  279. package/dist/modules/cli-contributions.mjs +32 -0
  280. package/dist/modules/cli-contributions.mjs.map +7 -0
  281. package/dist/modules/cli.mjs +14 -0
  282. package/dist/modules/cli.mjs.map +7 -0
  283. package/dist/modules/command-executor.mjs +65 -0
  284. package/dist/modules/command-executor.mjs.map +7 -0
  285. package/dist/modules/commands.mjs +10 -0
  286. package/dist/modules/commands.mjs.map +7 -0
  287. package/dist/modules/embedded.mjs +18608 -0
  288. package/dist/modules/embedded.mjs.map +7 -0
  289. package/dist/modules/extension-bridge.mjs +18 -0
  290. package/dist/modules/extension-bridge.mjs.map +7 -0
  291. package/dist/modules/frontend-root.mjs +61 -0
  292. package/dist/modules/frontend-root.mjs.map +7 -0
  293. package/dist/modules/index.mjs +784 -0
  294. package/dist/modules/index.mjs.map +7 -0
  295. package/dist/modules/page.mjs +45 -0
  296. package/dist/modules/page.mjs.map +7 -0
  297. package/dist/modules/pages/scene.mjs +18 -0
  298. package/dist/modules/pages/scene.mjs.map +7 -0
  299. package/dist/modules/plugin.mjs +56 -0
  300. package/dist/modules/plugin.mjs.map +7 -0
  301. package/dist/modules/plugins/asset/frontend.mjs +23 -0
  302. package/dist/modules/plugins/asset/frontend.mjs.map +7 -0
  303. package/dist/modules/plugins/asset/i18n.mjs +15 -0
  304. package/dist/modules/plugins/asset/i18n.mjs.map +7 -0
  305. package/dist/modules/plugins/asset/identity.mjs +42 -0
  306. package/dist/modules/plugins/asset/identity.mjs.map +7 -0
  307. package/dist/modules/plugins/asset/schema.mjs +10 -0
  308. package/dist/modules/plugins/asset/schema.mjs.map +7 -0
  309. package/dist/modules/plugins/asset/ui.mjs +16 -0
  310. package/dist/modules/plugins/asset/ui.mjs.map +7 -0
  311. package/dist/modules/plugins/content-browser/frontend.mjs +17 -0
  312. package/dist/modules/plugins/content-browser/frontend.mjs.map +7 -0
  313. package/dist/modules/plugins/content-browser/i18n.mjs +15 -0
  314. package/dist/modules/plugins/content-browser/i18n.mjs.map +7 -0
  315. package/dist/modules/plugins/content-browser/identity.mjs +22 -0
  316. package/dist/modules/plugins/content-browser/identity.mjs.map +7 -0
  317. package/dist/modules/plugins/content-browser/schema.mjs +12 -0
  318. package/dist/modules/plugins/content-browser/schema.mjs.map +7 -0
  319. package/dist/modules/plugins/content-browser/ui.mjs +15 -0
  320. package/dist/modules/plugins/content-browser/ui.mjs.map +7 -0
  321. package/dist/modules/plugins/display/api.mjs +10 -0
  322. package/dist/modules/plugins/display/api.mjs.map +7 -0
  323. package/dist/modules/plugins/display/backend.mjs +16 -0
  324. package/dist/modules/plugins/display/backend.mjs.map +7 -0
  325. package/dist/modules/plugins/display/carrier-contract.mjs +38 -0
  326. package/dist/modules/plugins/display/carrier-contract.mjs.map +7 -0
  327. package/dist/modules/plugins/display/carrier.mjs +13 -0
  328. package/dist/modules/plugins/display/carrier.mjs.map +7 -0
  329. package/dist/modules/plugins/display/effects.mjs +8 -0
  330. package/dist/modules/plugins/display/effects.mjs.map +7 -0
  331. package/dist/modules/plugins/display/frontend.mjs +14 -0
  332. package/dist/modules/plugins/display/frontend.mjs.map +7 -0
  333. package/dist/modules/plugins/display/i18n.mjs +58 -0
  334. package/dist/modules/plugins/display/i18n.mjs.map +7 -0
  335. package/dist/modules/plugins/display/identity.mjs +30 -0
  336. package/dist/modules/plugins/display/identity.mjs.map +7 -0
  337. package/dist/modules/plugins/display/page-broker.mjs +12 -0
  338. package/dist/modules/plugins/display/page-broker.mjs.map +7 -0
  339. package/dist/modules/plugins/display/schema.mjs +40 -0
  340. package/dist/modules/plugins/display/schema.mjs.map +7 -0
  341. package/dist/modules/plugins/display/ui.mjs +9 -0
  342. package/dist/modules/plugins/display/ui.mjs.map +7 -0
  343. package/dist/modules/plugins/inspector/frontend.mjs +17 -0
  344. package/dist/modules/plugins/inspector/frontend.mjs.map +7 -0
  345. package/dist/modules/plugins/inspector/i18n.mjs +15 -0
  346. package/dist/modules/plugins/inspector/i18n.mjs.map +7 -0
  347. package/dist/modules/plugins/inspector/identity.mjs +22 -0
  348. package/dist/modules/plugins/inspector/identity.mjs.map +7 -0
  349. package/dist/modules/plugins/inspector/schema.mjs +12 -0
  350. package/dist/modules/plugins/inspector/schema.mjs.map +7 -0
  351. package/dist/modules/plugins/inspector/ui.mjs +16 -0
  352. package/dist/modules/plugins/inspector/ui.mjs.map +7 -0
  353. package/dist/modules/plugins/material/frontend.mjs +25 -0
  354. package/dist/modules/plugins/material/frontend.mjs.map +7 -0
  355. package/dist/modules/plugins/material/i18n.mjs +15 -0
  356. package/dist/modules/plugins/material/i18n.mjs.map +7 -0
  357. package/dist/modules/plugins/material/identity.mjs +60 -0
  358. package/dist/modules/plugins/material/identity.mjs.map +7 -0
  359. package/dist/modules/plugins/material/schema.mjs +47 -0
  360. package/dist/modules/plugins/material/schema.mjs.map +7 -0
  361. package/dist/modules/plugins/material/ui.mjs +28 -0
  362. package/dist/modules/plugins/material/ui.mjs.map +7 -0
  363. package/dist/modules/plugins/mesh/frontend.mjs +23 -0
  364. package/dist/modules/plugins/mesh/frontend.mjs.map +7 -0
  365. package/dist/modules/plugins/mesh/i18n.mjs +15 -0
  366. package/dist/modules/plugins/mesh/i18n.mjs.map +7 -0
  367. package/dist/modules/plugins/mesh/identity.mjs +54 -0
  368. package/dist/modules/plugins/mesh/identity.mjs.map +7 -0
  369. package/dist/modules/plugins/mesh/schema.mjs +10 -0
  370. package/dist/modules/plugins/mesh/schema.mjs.map +7 -0
  371. package/dist/modules/plugins/mesh/ui.mjs +26 -0
  372. package/dist/modules/plugins/mesh/ui.mjs.map +7 -0
  373. package/dist/modules/plugins/plugins/api.mjs +11 -0
  374. package/dist/modules/plugins/plugins/api.mjs.map +7 -0
  375. package/dist/modules/plugins/plugins/backend.mjs +21 -0
  376. package/dist/modules/plugins/plugins/backend.mjs.map +7 -0
  377. package/dist/modules/plugins/plugins/cli.mjs +12 -0
  378. package/dist/modules/plugins/plugins/cli.mjs.map +7 -0
  379. package/dist/modules/plugins/plugins/frontend.mjs +17 -0
  380. package/dist/modules/plugins/plugins/frontend.mjs.map +7 -0
  381. package/dist/modules/plugins/plugins/i18n.mjs +15 -0
  382. package/dist/modules/plugins/plugins/i18n.mjs.map +7 -0
  383. package/dist/modules/plugins/plugins/identity.mjs +26 -0
  384. package/dist/modules/plugins/plugins/identity.mjs.map +7 -0
  385. package/dist/modules/plugins/plugins/runtime.mjs +50 -0
  386. package/dist/modules/plugins/plugins/runtime.mjs.map +7 -0
  387. package/dist/modules/plugins/plugins/schema.mjs +12 -0
  388. package/dist/modules/plugins/plugins/schema.mjs.map +7 -0
  389. package/dist/modules/plugins/plugins/ui/panel.mjs +14 -0
  390. package/dist/modules/plugins/plugins/ui/panel.mjs.map +7 -0
  391. package/dist/modules/plugins/plugins/ui.mjs +15 -0
  392. package/dist/modules/plugins/plugins/ui.mjs.map +7 -0
  393. package/dist/modules/plugins/scene/frontend.mjs +18 -0
  394. package/dist/modules/plugins/scene/frontend.mjs.map +7 -0
  395. package/dist/modules/plugins/scene/identity.mjs +14 -0
  396. package/dist/modules/plugins/scene/identity.mjs.map +7 -0
  397. package/dist/modules/plugins/scene-tree/frontend.mjs +17 -0
  398. package/dist/modules/plugins/scene-tree/frontend.mjs.map +7 -0
  399. package/dist/modules/plugins/scene-tree/i18n.mjs +15 -0
  400. package/dist/modules/plugins/scene-tree/i18n.mjs.map +7 -0
  401. package/dist/modules/plugins/scene-tree/identity.mjs +22 -0
  402. package/dist/modules/plugins/scene-tree/identity.mjs.map +7 -0
  403. package/dist/modules/plugins/scene-tree/schema.mjs +12 -0
  404. package/dist/modules/plugins/scene-tree/schema.mjs.map +7 -0
  405. package/dist/modules/plugins/scene-tree/ui.mjs +16 -0
  406. package/dist/modules/plugins/scene-tree/ui.mjs.map +7 -0
  407. package/dist/modules/plugins/texture/frontend.mjs +23 -0
  408. package/dist/modules/plugins/texture/frontend.mjs.map +7 -0
  409. package/dist/modules/plugins/texture/i18n.mjs +15 -0
  410. package/dist/modules/plugins/texture/i18n.mjs.map +7 -0
  411. package/dist/modules/plugins/texture/identity.mjs +54 -0
  412. package/dist/modules/plugins/texture/identity.mjs.map +7 -0
  413. package/dist/modules/plugins/texture/schema.mjs +10 -0
  414. package/dist/modules/plugins/texture/schema.mjs.map +7 -0
  415. package/dist/modules/plugins/texture/ui.mjs +26 -0
  416. package/dist/modules/plugins/texture/ui.mjs.map +7 -0
  417. package/dist/modules/plugins/viewport/frontend.mjs +27 -0
  418. package/dist/modules/plugins/viewport/frontend.mjs.map +7 -0
  419. package/dist/modules/plugins/viewport/identity.mjs +28 -0
  420. package/dist/modules/plugins/viewport/identity.mjs.map +7 -0
  421. package/dist/modules/plugins/viewport/presentation-identity.mjs +10 -0
  422. package/dist/modules/plugins/viewport/presentation-identity.mjs.map +7 -0
  423. package/dist/modules/plugins/viewport/presentation.mjs +18 -0
  424. package/dist/modules/plugins/viewport/presentation.mjs.map +7 -0
  425. package/dist/modules/plugins/viewport/schema.mjs +18 -0
  426. package/dist/modules/plugins/viewport/schema.mjs.map +7 -0
  427. package/dist/modules/plugins/viewport/workspace-shell.mjs +29 -0
  428. package/dist/modules/plugins/viewport/workspace-shell.mjs.map +7 -0
  429. package/dist/modules/shell/contract.mjs +10 -0
  430. package/dist/modules/shell/contract.mjs.map +7 -0
  431. package/dist/modules/shell/frontend.mjs +14 -0
  432. package/dist/modules/shell/frontend.mjs.map +7 -0
  433. package/dist/modules/shell/layout-zones.mjs +20 -0
  434. package/dist/modules/shell/layout-zones.mjs.map +7 -0
  435. package/dist/modules/start-cli.mjs +57 -0
  436. package/dist/modules/start-cli.mjs.map +7 -0
  437. package/dist/modules/start.mjs +18 -0
  438. package/dist/modules/start.mjs.map +7 -0
  439. package/dist/modules/viewer/catalog/backend.mjs +47 -0
  440. package/dist/modules/viewer/catalog/backend.mjs.map +7 -0
  441. package/dist/modules/viewer/catalog/frontend.mjs +55 -0
  442. package/dist/modules/viewer/catalog/frontend.mjs.map +7 -0
  443. package/dist/modules/viewer/catalog/shared.mjs +43 -0
  444. package/dist/modules/viewer/catalog/shared.mjs.map +7 -0
  445. package/dist/modules/viewer/catalog.mjs +85 -0
  446. package/dist/modules/viewer/catalog.mjs.map +7 -0
  447. package/dist/modules/viewer/cli.mjs +23 -0
  448. package/dist/modules/viewer/cli.mjs.map +7 -0
  449. package/dist/modules/viewer-host/frontend.mjs +65 -0
  450. package/dist/modules/viewer-host/frontend.mjs.map +7 -0
  451. package/dist/modules/viewer-host/page-registry.mjs +27 -0
  452. package/dist/modules/viewer-host/page-registry.mjs.map +7 -0
  453. package/dist/modules/viewer-host/slot-registry.mjs +8 -0
  454. package/dist/modules/viewer-host/slot-registry.mjs.map +7 -0
  455. package/dist/modules/viewer-host.mjs +43 -0
  456. package/dist/modules/viewer-host.mjs.map +7 -0
  457. package/dist/modules/viewer.mjs +85 -0
  458. package/dist/modules/viewer.mjs.map +7 -0
  459. package/dist/modules/workspace/adopt-surface.mjs +16 -0
  460. package/dist/modules/workspace/adopt-surface.mjs.map +7 -0
  461. package/dist/modules/workspace/api.mjs +8 -0
  462. package/dist/modules/workspace/api.mjs.map +7 -0
  463. package/dist/modules/workspace/backend.mjs +23 -0
  464. package/dist/modules/workspace/backend.mjs.map +7 -0
  465. package/dist/modules/workspace/broker.mjs +16 -0
  466. package/dist/modules/workspace/broker.mjs.map +7 -0
  467. package/dist/modules/workspace/cli.mjs +9 -0
  468. package/dist/modules/workspace/cli.mjs.map +7 -0
  469. package/dist/modules/workspace/client.mjs +15 -0
  470. package/dist/modules/workspace/client.mjs.map +7 -0
  471. package/dist/modules/workspace/command-error.mjs +16 -0
  472. package/dist/modules/workspace/command-error.mjs.map +7 -0
  473. package/dist/modules/workspace/contract.mjs +71 -0
  474. package/dist/modules/workspace/contract.mjs.map +7 -0
  475. package/dist/modules/workspace/demo-client.mjs +127 -0
  476. package/dist/modules/workspace/demo-client.mjs.map +7 -0
  477. package/dist/modules/workspace/engine-adapter.mjs +16 -0
  478. package/dist/modules/workspace/engine-adapter.mjs.map +7 -0
  479. package/dist/modules/workspace/engine-presentation.mjs +10 -0
  480. package/dist/modules/workspace/engine-presentation.mjs.map +7 -0
  481. package/dist/modules/workspace/extension-bridge.mjs +18 -0
  482. package/dist/modules/workspace/extension-bridge.mjs.map +7 -0
  483. package/dist/modules/workspace/frontend-plugin.mjs +18 -0
  484. package/dist/modules/workspace/frontend-plugin.mjs.map +7 -0
  485. package/dist/modules/workspace/frontend.mjs +29 -0
  486. package/dist/modules/workspace/frontend.mjs.map +7 -0
  487. package/dist/modules/workspace/id.mjs +8 -0
  488. package/dist/modules/workspace/id.mjs.map +7 -0
  489. package/dist/modules/workspace/inspection-presentation.mjs +12 -0
  490. package/dist/modules/workspace/inspection-presentation.mjs.map +7 -0
  491. package/dist/modules/workspace/locale-bridge.mjs +14 -0
  492. package/dist/modules/workspace/locale-bridge.mjs.map +7 -0
  493. package/dist/modules/workspace/page-title.mjs +13 -0
  494. package/dist/modules/workspace/page-title.mjs.map +7 -0
  495. package/dist/modules/workspace/presentation.mjs +18 -0
  496. package/dist/modules/workspace/presentation.mjs.map +7 -0
  497. package/dist/modules/workspace/preview-surface.mjs +17 -0
  498. package/dist/modules/workspace/preview-surface.mjs.map +7 -0
  499. package/dist/modules/workspace/project-session.mjs +18 -0
  500. package/dist/modules/workspace/project-session.mjs.map +7 -0
  501. package/dist/modules/workspace/render-resize-sync.mjs +12 -0
  502. package/dist/modules/workspace/render-resize-sync.mjs.map +7 -0
  503. package/dist/modules/workspace/resident.mjs +16 -0
  504. package/dist/modules/workspace/resident.mjs.map +7 -0
  505. package/dist/modules/workspace/resource-open.mjs +34 -0
  506. package/dist/modules/workspace/resource-open.mjs.map +7 -0
  507. package/dist/modules/workspace/resource-page.mjs +27 -0
  508. package/dist/modules/workspace/resource-page.mjs.map +7 -0
  509. package/dist/modules/workspace/tool-runtime.mjs +14 -0
  510. package/dist/modules/workspace/tool-runtime.mjs.map +7 -0
  511. package/dist/modules/workspace/view-trace.mjs +60 -0
  512. package/dist/modules/workspace/view-trace.mjs.map +7 -0
  513. package/dist/modules/workspace/workspace-client-connection.mjs +22 -0
  514. package/dist/modules/workspace/workspace-client-connection.mjs.map +7 -0
  515. package/dist/modules/workspace/workspace-recovery.mjs +35 -0
  516. package/dist/modules/workspace/workspace-recovery.mjs.map +7 -0
  517. package/dist/modules/workspace/workspace-state.mjs +12 -0
  518. package/dist/modules/workspace/workspace-state.mjs.map +7 -0
  519. package/dist/modules/workspace-frontend.mjs +17 -0
  520. package/dist/modules/workspace-frontend.mjs.map +7 -0
  521. package/dist/viewer/assets/chunk-CilyBKbf.js +1 -0
  522. package/dist/viewer/assets/core-DSQma37-.js +13 -0
  523. package/dist/viewer/assets/core-DSQma37-.js.map +1 -0
  524. package/dist/viewer/assets/css-Bq1BXecw.js +2 -0
  525. package/dist/viewer/assets/css-Bq1BXecw.js.map +1 -0
  526. package/dist/viewer/assets/css-CWQWazmX.js +1 -0
  527. package/dist/viewer/assets/embedded-D4ZDx--W.js +2 -0
  528. package/dist/viewer/assets/embedded-D4ZDx--W.js.map +1 -0
  529. package/dist/viewer/assets/engine-javascript-BvokIV9O.js +142 -0
  530. package/dist/viewer/assets/engine-javascript-BvokIV9O.js.map +1 -0
  531. package/dist/viewer/assets/github-dark-default-DaDlj-WZ.js +2 -0
  532. package/dist/viewer/assets/github-dark-default-DaDlj-WZ.js.map +1 -0
  533. package/dist/viewer/assets/github-light-default-BqhWxAZd.js +2 -0
  534. package/dist/viewer/assets/github-light-default-BqhWxAZd.js.map +1 -0
  535. package/dist/viewer/assets/glsl-BJgVnv11.js +2 -0
  536. package/dist/viewer/assets/glsl-BJgVnv11.js.map +1 -0
  537. package/dist/viewer/assets/html-AaaHGGyt.js +2 -0
  538. package/dist/viewer/assets/html-AaaHGGyt.js.map +1 -0
  539. package/dist/viewer/assets/javascript-BX9W64FE.js +1 -0
  540. package/dist/viewer/assets/javascript-DQODvD07.js +2 -0
  541. package/dist/viewer/assets/javascript-DQODvD07.js.map +1 -0
  542. package/dist/viewer/assets/json-CpcIDpT7.js +2 -0
  543. package/dist/viewer/assets/json-CpcIDpT7.js.map +1 -0
  544. package/dist/viewer/assets/json5-Czq4A7dk.js +2 -0
  545. package/dist/viewer/assets/json5-Czq4A7dk.js.map +1 -0
  546. package/dist/viewer/assets/jsonc-BXDfCMmu.js +2 -0
  547. package/dist/viewer/assets/jsonc-BXDfCMmu.js.map +1 -0
  548. package/dist/viewer/assets/jsx-DAWscEnf.js +2 -0
  549. package/dist/viewer/assets/jsx-DAWscEnf.js.map +1 -0
  550. package/dist/viewer/assets/main-C-2CHTN_.js +15 -0
  551. package/dist/viewer/assets/main-C-2CHTN_.js.map +1 -0
  552. package/dist/viewer/assets/markdown-Cx1FMNw-.js +2 -0
  553. package/dist/viewer/assets/markdown-Cx1FMNw-.js.map +1 -0
  554. package/dist/viewer/assets/panels-entry-Ddhfjgf0.js +46 -0
  555. package/dist/viewer/assets/panels-entry-Ddhfjgf0.js.map +1 -0
  556. package/dist/viewer/assets/python-CYPKjWV9.js +2 -0
  557. package/dist/viewer/assets/python-CYPKjWV9.js.map +1 -0
  558. package/dist/viewer/assets/rust-0e5cNx_V.js +2 -0
  559. package/dist/viewer/assets/rust-0e5cNx_V.js.map +1 -0
  560. package/dist/viewer/assets/scss-B-aKzLbT.js +2 -0
  561. package/dist/viewer/assets/scss-B-aKzLbT.js.map +1 -0
  562. package/dist/viewer/assets/shellscript-CpXD-pSm.js +2 -0
  563. package/dist/viewer/assets/shellscript-CpXD-pSm.js.map +1 -0
  564. package/dist/viewer/assets/style-ClttNKZk.css +2 -0
  565. package/dist/viewer/assets/styles-BXozhwiU.js +11 -0
  566. package/dist/viewer/assets/styles-BXozhwiU.js.map +1 -0
  567. package/dist/viewer/assets/toml-GmchYTXa.js +2 -0
  568. package/dist/viewer/assets/toml-GmchYTXa.js.map +1 -0
  569. package/dist/viewer/assets/tsx-Crj1Bi53.js +2 -0
  570. package/dist/viewer/assets/tsx-Crj1Bi53.js.map +1 -0
  571. package/dist/viewer/assets/typescript-xi0cSHCO.js +2 -0
  572. package/dist/viewer/assets/typescript-xi0cSHCO.js.map +1 -0
  573. package/dist/viewer/assets/wgsl-BoEPRo9U.js +2 -0
  574. package/dist/viewer/assets/wgsl-BoEPRo9U.js.map +1 -0
  575. package/dist/viewer/assets/xml-B8JqQrMD.js +2 -0
  576. package/dist/viewer/assets/xml-B8JqQrMD.js.map +1 -0
  577. package/dist/viewer/assets/yaml-DsIB85X9.js +2 -0
  578. package/dist/viewer/assets/yaml-DsIB85X9.js.map +1 -0
  579. package/dist/viewer/index.html +15 -0
  580. package/dist/viewer/panels.js +1 -0
  581. package/host.pack.json +13 -0
  582. package/package.json +174 -0
  583. package/skills/forgeax-view-cli/SKILL.md +74 -0
  584. package/skills/forgeax-view-start/SKILL.md +202 -0
  585. package/skills/forgeax-view-start/scripts/start-view.mjs +202 -0
@@ -0,0 +1,609 @@
1
+ import {
2
+ getLocale,
3
+ subscribeLocale,
4
+ t
5
+ } from "./chunk-XJZEVRYX.mjs";
6
+ import {
7
+ INSPECTOR_ACTIONS
8
+ } from "./chunk-QBHBKOIL.mjs";
9
+ import {
10
+ CollapsibleSection,
11
+ EmptyState,
12
+ FloatingMenu,
13
+ IconButton,
14
+ InspectorFieldControl,
15
+ Menu,
16
+ OverlayRootProvider,
17
+ PanelHeader,
18
+ PropertyRow,
19
+ SearchField,
20
+ Spinner,
21
+ Text,
22
+ Toolbar,
23
+ formatInspectorFieldLabel,
24
+ normalizeInspectorFieldValue,
25
+ resolveInspectorFieldKind,
26
+ useOverlayRoot,
27
+ useWorkspaceClientConnected
28
+ } from "./chunk-NJH2OJFC.mjs";
29
+ import {
30
+ createWorkspaceObservation,
31
+ createWorkspaceStateReader
32
+ } from "./chunk-FJM6WWIY.mjs";
33
+ import {
34
+ jsonUnchanged
35
+ } from "./chunk-32GD5LL6.mjs";
36
+
37
+ // packages/view-plugin-inspector/src/ui/mount.tsx
38
+ import { createRoot } from "react-dom/client";
39
+
40
+ // packages/view-plugin-inspector/src/ui/InspectorPanel.tsx
41
+ import {
42
+ Box,
43
+ Camera,
44
+ Check,
45
+ CircleUserRound,
46
+ Copy,
47
+ Crosshair,
48
+ Focus,
49
+ Hexagon,
50
+ Layers,
51
+ Lightbulb,
52
+ Maximize2,
53
+ Minimize2,
54
+ MoreHorizontal,
55
+ MousePointer2,
56
+ Move3d,
57
+ SlidersHorizontal
58
+ } from "lucide-react";
59
+ import {
60
+ useEffect,
61
+ useMemo,
62
+ useRef,
63
+ useState,
64
+ useSyncExternalStore as useSyncExternalStore2
65
+ } from "react";
66
+ import { createPortal } from "react-dom";
67
+
68
+ // packages/view-plugin-inspector/src/i18n/useTranslation.ts
69
+ import { useCallback, useSyncExternalStore } from "react";
70
+ function useTranslation() {
71
+ const locale = useSyncExternalStore(subscribeLocale, getLocale, getLocale);
72
+ const t2 = useCallback(
73
+ (key, vars) => t(key, vars),
74
+ [locale]
75
+ );
76
+ return { t: t2, locale };
77
+ }
78
+
79
+ // packages/view-plugin-inspector/src/ui/mockInspector.ts
80
+ var MOCK_INSPECTOR_BY_ID = {
81
+ ground: {
82
+ id: "ground",
83
+ name: "Ground",
84
+ badge: "Mesh",
85
+ components: [
86
+ {
87
+ name: "Transform",
88
+ icon: "move3d",
89
+ category: "all",
90
+ fields: [
91
+ { key: "position", label: "Position", kind: "vector3", value: { x: 0, y: 0, z: 0 } },
92
+ { key: "rotation", label: "Rotation", kind: "vector3", value: { x: 0, y: 0, z: 0 } },
93
+ { key: "scale", label: "Scale", kind: "vector3", value: { x: 10, y: 0.2, z: 8 } }
94
+ ]
95
+ },
96
+ {
97
+ name: "MeshFilter",
98
+ icon: "box",
99
+ category: "type",
100
+ fields: [{ key: "mesh", label: "Mesh", kind: "asset", value: "Plane" }]
101
+ },
102
+ {
103
+ name: "MeshRenderer",
104
+ icon: "layers",
105
+ category: "capability",
106
+ fields: [
107
+ { key: "material", label: "Material 0", kind: "asset", value: "Ground Material" },
108
+ { key: "castShadows", label: "Cast Shadows", kind: "bool", value: true },
109
+ { key: "receiveShadows", label: "Receive Shadows", kind: "bool", value: true }
110
+ ]
111
+ },
112
+ {
113
+ name: "Collider",
114
+ icon: "hexagon",
115
+ category: "capability",
116
+ fields: [
117
+ { key: "shape", label: "Shape", kind: "enum", value: "Box", options: ["Box", "Sphere", "Capsule", "Mesh"] },
118
+ { key: "center", label: "Center", kind: "vector3", value: { x: 0, y: 0, z: 0 } },
119
+ { key: "isTrigger", label: "Is Trigger", kind: "bool", value: false }
120
+ ]
121
+ }
122
+ ]
123
+ },
124
+ "red-box": {
125
+ id: "red-box",
126
+ name: "RedBox",
127
+ badge: "Mesh",
128
+ components: [
129
+ {
130
+ name: "Transform",
131
+ icon: "move3d",
132
+ category: "all",
133
+ fields: [
134
+ {
135
+ key: "position",
136
+ label: "Position",
137
+ kind: "vector3",
138
+ value: { x: 0, y: 0.5, z: 2.4 }
139
+ },
140
+ {
141
+ key: "rotation",
142
+ label: "Rotation",
143
+ kind: "vector3",
144
+ value: { x: 0, y: 45, z: 0 }
145
+ },
146
+ {
147
+ key: "scale",
148
+ label: "Scale",
149
+ kind: "vector3",
150
+ value: { x: 1, y: 1, z: 1 }
151
+ }
152
+ ]
153
+ },
154
+ {
155
+ name: "MeshFilter",
156
+ icon: "box",
157
+ category: "type",
158
+ fields: [{ key: "mesh", label: "Mesh", kind: "asset", value: "Cube" }]
159
+ },
160
+ {
161
+ name: "MeshRenderer",
162
+ icon: "layers",
163
+ category: "capability",
164
+ fields: [
165
+ { key: "material", label: "Material 0", kind: "asset", value: "Red Material" },
166
+ { key: "castShadows", label: "Cast Shadows", kind: "bool", value: true }
167
+ ]
168
+ }
169
+ ]
170
+ },
171
+ player: {
172
+ id: "player",
173
+ name: "Player",
174
+ badge: "Character",
175
+ components: [
176
+ {
177
+ name: "Transform",
178
+ icon: "move3d",
179
+ category: "all",
180
+ fields: [
181
+ {
182
+ key: "position",
183
+ label: "Position",
184
+ kind: "vector3",
185
+ value: { x: -1.2, y: 0, z: 0 }
186
+ },
187
+ {
188
+ key: "rotation",
189
+ label: "Rotation",
190
+ kind: "vector3",
191
+ value: { x: 0, y: 0, z: 0 }
192
+ },
193
+ {
194
+ key: "scale",
195
+ label: "Scale",
196
+ kind: "vector3",
197
+ value: { x: 1, y: 1, z: 1 }
198
+ }
199
+ ]
200
+ },
201
+ {
202
+ name: "CharacterController",
203
+ icon: "user",
204
+ category: "capability",
205
+ fields: [
206
+ { key: "speed", label: "Move Speed", kind: "number", value: 6 },
207
+ { key: "jumpHeight", label: "Jump Height", kind: "number", value: 1.4 },
208
+ { key: "enabled", label: "Enabled", kind: "bool", value: true }
209
+ ]
210
+ }
211
+ ]
212
+ },
213
+ sun: {
214
+ id: "sun",
215
+ name: "Sun",
216
+ badge: "Light",
217
+ components: [
218
+ {
219
+ name: "Transform",
220
+ icon: "move3d",
221
+ category: "all",
222
+ fields: [
223
+ { key: "rotation", label: "Rotation", kind: "vector3", value: { x: 50, y: -30, z: 0 } }
224
+ ]
225
+ },
226
+ {
227
+ name: "Light",
228
+ icon: "sun",
229
+ category: "type",
230
+ fields: [
231
+ { key: "type", label: "Type", kind: "enum", value: "Directional", options: ["Directional", "Point", "Spot"] },
232
+ { key: "color", label: "Color", kind: "color", value: "#fff4d6" },
233
+ { key: "intensity", label: "Intensity", kind: "number", value: 3.2 },
234
+ { key: "castShadows", label: "Cast Shadows", kind: "bool", value: true }
235
+ ]
236
+ }
237
+ ]
238
+ }
239
+ };
240
+
241
+ // packages/view-plugin-inspector/src/inspection.mjs
242
+ function resolveObjectInspectorEntity(primary, { demo = false, mockById = null } = {}) {
243
+ if (!primary?.entityId) return null;
244
+ if (demo && mockById?.[primary.entityId]) return mockById[primary.entityId];
245
+ return null;
246
+ }
247
+ function inspectorEntityFromInspection(inspection) {
248
+ if (!inspection?.entityId || !Array.isArray(inspection.components)) return null;
249
+ return {
250
+ id: inspection.entityId,
251
+ name: inspection.name ?? (inspection.entity === void 0 ? inspection.entityId : `Entity ${inspection.entity}`),
252
+ badge: "Entity",
253
+ components: inspection.components.map((component) => ({
254
+ name: component.name,
255
+ icon: "box",
256
+ category: "all",
257
+ fields: Object.entries(component.fields ?? {}).map(([key, schema]) => {
258
+ const rawValue = component.values?.[key];
259
+ const kind = resolveInspectorFieldKind(schema, rawValue);
260
+ return {
261
+ key,
262
+ label: formatInspectorFieldLabel(key),
263
+ kind,
264
+ value: normalizeInspectorFieldValue(rawValue, kind)
265
+ };
266
+ })
267
+ }))
268
+ };
269
+ }
270
+
271
+ // packages/view-plugin-inspector/src/ui/InspectorPanel.tsx
272
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
273
+ function inspectionMatchesSelection(inspection, primary, target) {
274
+ if (!inspection || !primary?.entityId || !target?.targetId) return false;
275
+ return inspection.entityId === primary.entityId && inspection.targetId === target.targetId && inspection.generation === target.generation;
276
+ }
277
+ function componentIcon(component, size = 13) {
278
+ const props = { size, strokeWidth: 1.7 };
279
+ if (component.name === "Transform") return /* @__PURE__ */ jsx(Move3d, { ...props });
280
+ if (component.name === "Light") return /* @__PURE__ */ jsx(Lightbulb, { ...props });
281
+ if (component.name === "Camera") return /* @__PURE__ */ jsx(Camera, { ...props });
282
+ if (component.name.includes("Renderer")) return /* @__PURE__ */ jsx(Layers, { ...props });
283
+ if (component.name.includes("Body") || component.name.includes("Collider")) return /* @__PURE__ */ jsx(Hexagon, { ...props });
284
+ if (component.name.includes("Character")) return /* @__PURE__ */ jsx(CircleUserRound, { ...props });
285
+ return /* @__PURE__ */ jsx(Box, { ...props });
286
+ }
287
+ function InspectorContextMenu({ state, close }) {
288
+ const overlayRoot = useOverlayRoot();
289
+ const { t: t2 } = useTranslation();
290
+ useEffect(() => {
291
+ const dismiss = () => close();
292
+ const escape = (event) => event.key === "Escape" && close();
293
+ window.addEventListener("pointerdown", dismiss);
294
+ window.addEventListener("keydown", escape);
295
+ return () => {
296
+ window.removeEventListener("pointerdown", dismiss);
297
+ window.removeEventListener("keydown", escape);
298
+ };
299
+ }, [close]);
300
+ return createPortal(
301
+ /* @__PURE__ */ jsx(
302
+ "div",
303
+ {
304
+ className: "insp-context-menu fx-ui",
305
+ "data-action": INSPECTOR_ACTIONS.showContextMenu,
306
+ style: {
307
+ left: Math.max(8, Math.min(state.x, window.innerWidth - 238)),
308
+ top: Math.max(8, Math.min(state.y, window.innerHeight - 300))
309
+ },
310
+ onPointerDown: (event) => event.stopPropagation(),
311
+ onContextMenu: (event) => event.preventDefault(),
312
+ children: /* @__PURE__ */ jsx(
313
+ Menu,
314
+ {
315
+ label: t2("inspector.contextMenu"),
316
+ items: state.items.map((item) => {
317
+ if (item.kind === "separator") return { type: "separator" };
318
+ if (item.kind === "title") return { type: "title", label: item.label };
319
+ return {
320
+ id: item.id,
321
+ label: item.label,
322
+ icon: item.forge ? /* @__PURE__ */ jsx("span", { className: "insp-menu-forge", children: item.icon }) : item.icon,
323
+ disabled: item.disabled,
324
+ danger: item.danger,
325
+ onSelect: () => {
326
+ item.action();
327
+ close();
328
+ }
329
+ };
330
+ })
331
+ }
332
+ )
333
+ }
334
+ ),
335
+ overlayRoot ?? document.body
336
+ );
337
+ }
338
+ function InspectorBody({ source, focus }) {
339
+ const { t: t2 } = useTranslation();
340
+ const name = source.name;
341
+ const components = useMemo(() => structuredClone(source.components), [source]);
342
+ const [collapsed, setCollapsed] = useState(/* @__PURE__ */ new Set());
343
+ const [query, setQuery] = useState("");
344
+ const [settingsOpen, setSettingsOpen] = useState(false);
345
+ const [settingsMenuAnchor, setSettingsMenuAnchor] = useState(null);
346
+ const settingsButtonRef = useRef(null);
347
+ const [copied, setCopied] = useState(false);
348
+ const [contextMenu, setContextMenu] = useState(null);
349
+ const sectionRefs = useRef({});
350
+ useEffect(() => {
351
+ if (!settingsOpen) setSettingsMenuAnchor(null);
352
+ }, [settingsOpen]);
353
+ const toggleSettingsMenu = () => {
354
+ if (settingsOpen) {
355
+ setSettingsOpen(false);
356
+ return;
357
+ }
358
+ const rect = settingsButtonRef.current?.getBoundingClientRect();
359
+ if (rect) setSettingsMenuAnchor(rect);
360
+ setSettingsOpen(true);
361
+ };
362
+ const showContext = (event, items) => {
363
+ event.preventDefault();
364
+ event.stopPropagation();
365
+ setSettingsOpen(false);
366
+ setContextMenu({ x: event.clientX, y: event.clientY, items });
367
+ };
368
+ const componentMenu = (component) => [
369
+ { kind: "title", label: component.name },
370
+ { kind: "item", id: "copy", label: t2("inspector.menu.copyComponentJson"), icon: /* @__PURE__ */ jsx(Copy, { size: 14 }), action: () => void navigator.clipboard?.writeText(JSON.stringify({ [component.name]: component.fields }, null, 2)) }
371
+ ];
372
+ const fieldMenu = (component, field) => [
373
+ { kind: "title", label: `${component.name}.${field.label}` },
374
+ { kind: "item", id: "copy-value", label: t2("inspector.menu.copyValue"), icon: /* @__PURE__ */ jsx(Copy, { size: 14 }), action: () => void navigator.clipboard?.writeText(JSON.stringify(field.value)) }
375
+ ];
376
+ const shownComponents = useMemo(() => {
377
+ const text = query.trim().toLowerCase();
378
+ return components.map((component) => ({
379
+ ...component,
380
+ fields: component.fields.filter((field) => !text || component.name.toLowerCase().includes(text) || field.label.toLowerCase().includes(text) || field.key.toLowerCase().includes(text))
381
+ })).filter((component) => !text || component.name.toLowerCase().includes(text) || component.fields.length > 0);
382
+ }, [components, query]);
383
+ const headerIcon = source.badge === "Light" ? /* @__PURE__ */ jsx(Lightbulb, { size: 15 }) : source.badge === "Character" ? /* @__PURE__ */ jsx(CircleUserRound, { size: 15 }) : /* @__PURE__ */ jsx(Box, { size: 15 });
384
+ return /* @__PURE__ */ jsxs("div", { className: "fx-inspector__body", children: [
385
+ /* @__PURE__ */ jsx(
386
+ PanelHeader,
387
+ {
388
+ className: "insp-header",
389
+ onContextMenu: (event) => showContext(event, [
390
+ { kind: "title", label: name },
391
+ { kind: "item", id: "focus", label: t2("inspector.menu.focusViewport"), icon: /* @__PURE__ */ jsx(Focus, { size: 14 }), action: () => focus?.(), disabled: !focus },
392
+ { kind: "item", id: "copy", label: t2("inspector.menu.copyObjectJson"), icon: /* @__PURE__ */ jsx(Copy, { size: 14 }), action: () => void navigator.clipboard?.writeText(JSON.stringify({ name, components }, null, 2)) }
393
+ ]),
394
+ start: /* @__PURE__ */ jsxs("span", { className: "insp-header-identity", children: [
395
+ /* @__PURE__ */ jsx("span", { className: "tico", children: headerIcon }),
396
+ /* @__PURE__ */ jsx("span", { className: "insp-header-copy", children: /* @__PURE__ */ jsx(Text, { as: "span", variant: "label", className: "insp-header-name", title: name, children: name }) })
397
+ ] }),
398
+ end: /* @__PURE__ */ jsxs("span", { className: "insp-header-end", children: [
399
+ source.badge ? /* @__PURE__ */ jsx("span", { className: "badge", title: source.badge, children: source.badge }) : null,
400
+ /* @__PURE__ */ jsx(IconButton, { "data-action": INSPECTOR_ACTIONS.focus, onClick: focus, disabled: !focus, label: t2("inspector.focusObject"), icon: /* @__PURE__ */ jsx(Crosshair, { size: 15 }), variant: "quiet", size: "compact" }),
401
+ /* @__PURE__ */ jsx(IconButton, { "data-action": INSPECTOR_ACTIONS.copyEntity, label: t2("inspector.copyJson"), icon: copied ? /* @__PURE__ */ jsx(Check, { size: 15 }) : /* @__PURE__ */ jsx(Copy, { size: 15 }), variant: "quiet", size: "compact", onClick: () => {
402
+ void navigator.clipboard?.writeText(JSON.stringify({ name, components }, null, 2));
403
+ setCopied(true);
404
+ window.setTimeout(() => setCopied(false), 1e3);
405
+ } })
406
+ ] })
407
+ }
408
+ ),
409
+ /* @__PURE__ */ jsxs(Toolbar, { className: "insp-toolbar", children: [
410
+ /* @__PURE__ */ jsx(SearchField, { "data-testid": "insp-search", "data-action": INSPECTOR_ACTIONS.search, value: query, onChange: (event) => setQuery(event.target.value), onClear: () => setQuery(""), placeholder: t2("inspector.searchPlaceholder"), label: t2("inspector.searchLabel") }),
411
+ /* @__PURE__ */ jsx(IconButton, { ref: settingsButtonRef, className: settingsOpen ? "is-active" : void 0, "data-testid": "insp-settings", label: t2("inspector.displaySettings"), icon: /* @__PURE__ */ jsx(SlidersHorizontal, { size: 15 }), variant: "secondary", size: "compact", onClick: toggleSettingsMenu })
412
+ ] }),
413
+ /* @__PURE__ */ jsxs("div", { className: "insp-scroll", "data-testid": "insp-scroll", children: [
414
+ /* @__PURE__ */ jsxs("div", { className: "dp-comp", children: [
415
+ /* @__PURE__ */ jsx("div", { className: "ch", children: /* @__PURE__ */ jsx(Text, { as: "span", variant: "caption", tone: "muted", children: t2("inspector.components") }) }),
416
+ components.map((component) => /* @__PURE__ */ jsxs("div", { role: "button", tabIndex: 0, className: "comp-row", "data-testid": `insp-comprow-${component.name}`, onClick: () => {
417
+ setCollapsed((current) => {
418
+ const next = new Set(current);
419
+ next.delete(component.name);
420
+ return next;
421
+ });
422
+ sectionRefs.current[component.name]?.scrollIntoView({ behavior: "smooth", block: "start" });
423
+ }, onContextMenu: (event) => showContext(event, componentMenu(component)), children: [
424
+ /* @__PURE__ */ jsx("span", { className: "ci", children: componentIcon(component) }),
425
+ /* @__PURE__ */ jsx("span", { className: "comp-name", children: component.name })
426
+ ] }, component.name))
427
+ ] }),
428
+ /* @__PURE__ */ jsx("div", { className: "dp-body", children: shownComponents.length === 0 ? /* @__PURE__ */ jsx(EmptyState, { className: "no-match", title: t2("inspector.noMatchTitle"), description: t2("inspector.noMatchDescription") }) : shownComponents.map((component) => {
429
+ const isCollapsed = collapsed.has(component.name) && !query;
430
+ const category = component.category === "all" ? "dim-all" : component.category === "capability" ? "dim-cap" : "dim-type";
431
+ return /* @__PURE__ */ jsx("div", { className: `cat ${category}`, ref: (element) => {
432
+ sectionRefs.current[component.name] = element;
433
+ }, onContextMenu: (event) => showContext(event, componentMenu(component)), children: /* @__PURE__ */ jsx(
434
+ CollapsibleSection,
435
+ {
436
+ open: !isCollapsed,
437
+ onOpenChange: (open) => setCollapsed((current) => {
438
+ const next = new Set(current);
439
+ if (open) next.delete(component.name);
440
+ else next.add(component.name);
441
+ return next;
442
+ }),
443
+ triggerProps: { "data-action": INSPECTOR_ACTIONS.toggleComponent },
444
+ title: /* @__PURE__ */ jsxs("span", { className: "cat-title", children: [
445
+ /* @__PURE__ */ jsx("span", { className: "cat-icon", children: componentIcon(component) }),
446
+ /* @__PURE__ */ jsx("span", { children: component.name })
447
+ ] }),
448
+ trailing: /* @__PURE__ */ jsxs("span", { className: "cacts", children: [
449
+ /* @__PURE__ */ jsx(IconButton, { className: "cact", "data-action": INSPECTOR_ACTIONS.copyComponent, label: t2("inspector.menu.copyComponentJson"), icon: /* @__PURE__ */ jsx(Copy, { size: 13 }), variant: "quiet", size: "compact", onClick: (event) => {
450
+ event.stopPropagation();
451
+ void navigator.clipboard?.writeText(JSON.stringify(component, null, 2));
452
+ } }),
453
+ /* @__PURE__ */ jsx(IconButton, { className: "cact more", label: t2("inspector.more"), icon: /* @__PURE__ */ jsx(MoreHorizontal, { size: 14 }), variant: "quiet", size: "compact", onClick: (event) => showContext(event, componentMenu(component)) })
454
+ ] }),
455
+ children: /* @__PURE__ */ jsx("div", { className: "cat-fields", children: component.fields.length === 0 ? /* @__PURE__ */ jsx(EmptyState, { className: "no-match", title: t2("inspector.noMatchTitle"), description: t2("inspector.noMatchComponent") }) : component.fields.map((field) => /* @__PURE__ */ jsx("div", { className: "f-row-wrap", "data-testid": `insp-field-${component.name}-${field.key}`, onContextMenu: (event) => {
456
+ event.stopPropagation();
457
+ showContext(event, fieldMenu(component, field));
458
+ }, children: /* @__PURE__ */ jsx(PropertyRow, { className: "f-row", label: /* @__PURE__ */ jsx("span", { title: field.key, children: field.label }), children: /* @__PURE__ */ jsx(InspectorFieldControl, { field }) }) }, field.key)) })
459
+ }
460
+ ) }, component.name);
461
+ }) })
462
+ ] }),
463
+ /* @__PURE__ */ jsx(
464
+ FloatingMenu,
465
+ {
466
+ open: Boolean(settingsMenuAnchor && settingsOpen),
467
+ anchorRect: settingsMenuAnchor,
468
+ onClose: () => setSettingsOpen(false),
469
+ ignorePointerWithin: [settingsButtonRef],
470
+ containerProps: { onPointerDown: (event) => event.stopPropagation() },
471
+ children: /* @__PURE__ */ jsx("div", { className: "fx-insp-menu", children: /* @__PURE__ */ jsx(Menu, { label: t2("inspector.displaySettings"), items: [
472
+ { type: "title", label: t2("inspector.displaySettings") },
473
+ { id: "expand", label: t2("inspector.expandAll"), buttonProps: { "data-action": INSPECTOR_ACTIONS.expandAll }, icon: /* @__PURE__ */ jsx(Maximize2, { size: 14 }), onSelect: () => {
474
+ setCollapsed(/* @__PURE__ */ new Set());
475
+ setSettingsOpen(false);
476
+ } },
477
+ { id: "collapse", label: t2("inspector.collapseAll"), buttonProps: { "data-action": INSPECTOR_ACTIONS.collapseAll }, icon: /* @__PURE__ */ jsx(Minimize2, { size: 14 }), onSelect: () => {
478
+ setCollapsed(new Set(components.map((component) => component.name)));
479
+ setSettingsOpen(false);
480
+ } }
481
+ ] }) })
482
+ }
483
+ ),
484
+ contextMenu ? /* @__PURE__ */ jsx(InspectorContextMenu, { state: contextMenu, close: () => setContextMenu(null) }) : null
485
+ ] });
486
+ }
487
+ function InspectorPanel(props) {
488
+ const { t: t2 } = useTranslation();
489
+ const reader = useMemo(() => createWorkspaceStateReader(props.client), [props.client]);
490
+ const workspace = useSyncExternalStore2(
491
+ reader.subscribe,
492
+ () => reader.getSnapshot(),
493
+ () => reader.getSnapshot()
494
+ );
495
+ const primary = workspace?.sceneSelection?.primary ?? null;
496
+ const target = workspace?.preview?.target;
497
+ const connected = useWorkspaceClientConnected(props.demo ? void 0 : props.client);
498
+ const [inspection, setInspection] = useState(null);
499
+ const [loading, setLoading] = useState(false);
500
+ const [failure, setFailure] = useState(null);
501
+ const lastDisplaySourceRef = useRef(null);
502
+ const selectionKey = primary?.entityId && target?.targetId ? `${primary.entityId}:${target.targetId}:${target.generation ?? ""}` : null;
503
+ useEffect(() => {
504
+ if (!primary?.entityId) lastDisplaySourceRef.current = null;
505
+ }, [primary?.entityId]);
506
+ useEffect(() => {
507
+ if (props.demo || !props.client || !connected || !primary?.entityId || !target?.targetId) {
508
+ setLoading(false);
509
+ return;
510
+ }
511
+ const observation = createWorkspaceObservation(reader, (current) => current?.sceneSelection?.primary?.entityId === primary.entityId && current?.preview?.target?.targetId === target.targetId && current?.preview?.target?.generation === target.generation);
512
+ const { signal } = observation;
513
+ let timer;
514
+ setLoading(true);
515
+ setFailure(null);
516
+ const refresh = async () => {
517
+ if (signal.aborted) return;
518
+ try {
519
+ const result = await props.client.call("entity.inspect", { entityId: primary.entityId, targetId: target.targetId, targetGeneration: target.generation }, { signal });
520
+ if (signal.aborted) return;
521
+ const source = inspectorEntityFromInspection(result);
522
+ setInspection((current) => {
523
+ const next = { entityId: primary.entityId, targetId: target.targetId, generation: target.generation, source };
524
+ if (current && current.entityId === next.entityId && current.targetId === next.targetId && current.generation === next.generation && jsonUnchanged(current.source, next.source)) return current;
525
+ return next;
526
+ });
527
+ setFailure(null);
528
+ setLoading(false);
529
+ } catch (error) {
530
+ if (signal.aborted) return;
531
+ setInspection((current) => {
532
+ if (current == null) return current;
533
+ return null;
534
+ });
535
+ setFailure(String(error));
536
+ setLoading(false);
537
+ }
538
+ if (!signal.aborted) timer = setTimeout(refresh, 500);
539
+ };
540
+ void refresh();
541
+ return () => {
542
+ observation.dispose();
543
+ clearTimeout(timer);
544
+ };
545
+ }, [props.client, props.demo, connected, selectionKey, reader, workspace]);
546
+ const inSync = inspectionMatchesSelection(inspection, primary, target);
547
+ const syncedSource = inSync ? inspection?.source ?? null : null;
548
+ useEffect(() => {
549
+ if (syncedSource) lastDisplaySourceRef.current = syncedSource;
550
+ }, [syncedSource]);
551
+ const demoSource = resolveObjectInspectorEntity(primary, { demo: true, mockById: MOCK_INSPECTOR_BY_ID });
552
+ const hasSelection = Boolean(primary?.entityId);
553
+ const displaySource = props.demo ? demoSource : syncedSource ?? (hasSelection ? lastDisplaySourceRef.current : null);
554
+ const focus = props.client && target && primary?.entityId ? () => {
555
+ void props.client.call("entity.focus", { entityId: primary.entityId, targetId: target.targetId, targetGeneration: target.generation }).catch((error) => setFailure(String(error)));
556
+ } : void 0;
557
+ const showEmpty = props.demo ? !demoSource : !hasSelection || !displaySource && !loading;
558
+ const showLoadingPane = !props.demo && hasSelection && !displaySource && loading;
559
+ const showStaleOverlay = !props.demo && hasSelection && !inSync && loading && Boolean(displaySource);
560
+ const entityIdAttr = inSync ? syncedSource?.id : primary?.entityId ?? displaySource?.id;
561
+ return /* @__PURE__ */ jsx(
562
+ "div",
563
+ {
564
+ className: "fx-inspector fx-ui",
565
+ "data-testid": "panel-inspector",
566
+ "data-view-readonly": "true",
567
+ "data-entity-id": entityIdAttr,
568
+ "data-inspector-loading": showStaleOverlay || showLoadingPane ? "true" : void 0,
569
+ children: showEmpty ? /* @__PURE__ */ jsx(
570
+ EmptyState,
571
+ {
572
+ className: "dp-empty",
573
+ "data-testid": "insp-empty",
574
+ title: t2("inspector.emptyTitle"),
575
+ description: failure ?? t2("inspector.emptyDescription"),
576
+ icon: /* @__PURE__ */ jsx(MousePointer2, {})
577
+ }
578
+ ) : showLoadingPane ? /* @__PURE__ */ jsx("div", { className: "fx-inspector__loading-pane", "data-testid": "insp-loading", children: /* @__PURE__ */ jsx(Spinner, { label: t2("inspector.loading") }) }) : displaySource ? /* @__PURE__ */ jsxs(Fragment, { children: [
579
+ /* @__PURE__ */ jsx(InspectorBody, { source: displaySource, focus }, displaySource.id),
580
+ showStaleOverlay ? /* @__PURE__ */ jsx("div", { className: "fx-inspector__loading-veil", "aria-hidden": true, children: /* @__PURE__ */ jsx(Spinner, { label: t2("inspector.loading") }) }) : null
581
+ ] }) : null
582
+ }
583
+ );
584
+ }
585
+
586
+ // packages/view-plugin-inspector/src/ui/inspector.css
587
+ var css = "/* packages/view-plugin-inspector/src/ui/inspector.css */\n.fx-inspector {\n --insp-bg: var(--fx-color-surface-canvas);\n --insp-raised: var(--fx-color-surface-raised);\n --insp-line: var(--fx-color-border-subtle);\n --insp-muted: var(--fx-color-text-muted);\n --insp-text: var(--fx-color-text-primary);\n --insp-accent: var(--fx-color-brand-accent);\n --d-type: var(--insp-accent);\n --d-all: var(--fx-color-status-success-fg);\n --d-cap: var(--fx-color-status-warning-fg);\n display: flex;\n position: relative;\n flex: 1 1 0%;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n background: var(--insp-bg);\n color: var(--insp-text);\n font: var(--fx-type-compact-font-weight) var(--fx-type-compact-font-size)/var(--fx-type-compact-line-height) var(--fx-type-compact-font-family);\n}\n.fx-inspector * {\n box-sizing: border-box;\n}\n.fx-inspector button,\n.fx-inspector input {\n font: inherit;\n}\n.fx-inspector .dp-name {\n display: flex;\n align-items: center;\n gap: var(--fx-space-control);\n min-height: var(--fx-component-panel-header-height);\n padding: 0 var(--fx-ref-space-12);\n border-bottom: var(--fx-border-width) solid var(--insp-line);\n}\n.fx-inspector .tico {\n display: grid;\n place-items: center;\n width: var(--fx-component-control-height-compact);\n height: var(--fx-component-control-height-compact);\n flex: 0 0 auto;\n border: var(--fx-border-width) solid var(--fx-color-border-default);\n border-radius: var(--fx-radius-control);\n background: var(--insp-raised);\n color: var(--fx-color-text-secondary);\n}\n.fx-inspector .ninput {\n flex: 1;\n min-width: 0;\n height: var(--fx-component-control-height-compact);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n border: var(--fx-border-width) solid var(--insp-line);\n border-radius: var(--fx-radius-control);\n outline: 0;\n background: var(--fx-color-surface-inset);\n color: var(--insp-text);\n font: var(--fx-type-compact-font-weight) var(--fx-type-compact-font-size) / var(--fx-type-compact-line-height) var(--fx-type-compact-font-family);\n font-weight: var(--fx-ref-font-weight-600);\n}\n.fx-inspector .badge,\n.fx-inspector .idbadge {\n flex: 0 0 auto;\n color: var(--insp-muted);\n}\n.fx-inspector .badge {\n padding: var(--fx-ref-space-2) var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--fx-color-border-default);\n border-radius: var(--fx-radius-pill);\n}\n.fx-inspector .tico2 {\n display: grid;\n place-items: center;\n padding: var(--fx-ref-space-4);\n border: 0;\n background: transparent;\n color: var(--insp-muted);\n cursor: pointer;\n}\n.fx-inspector .tico2:hover {\n color: var(--insp-text);\n}\n.fx-inspector .dp-toolbar {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-6);\n padding: var(--fx-ref-space-8) var(--fx-ref-space-12);\n border-bottom: var(--fx-border-width) solid var(--insp-line);\n}\n.fx-inspector .dp-search {\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n height: var(--fx-component-control-height-compact);\n padding: 0 var(--fx-ref-space-12);\n gap: var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--insp-line);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n color: var(--insp-muted);\n}\n.fx-inspector .dp-search:focus-within {\n border-color: var(--fx-color-border-focus);\n}\n.fx-inspector .dp-search input {\n flex: 1;\n min-width: 0;\n border: 0;\n outline: 0;\n background: transparent;\n color: var(--insp-text);\n}\n.fx-inspector .t-btn {\n display: grid;\n place-items: center;\n width: var(--fx-component-control-height-compact);\n height: var(--fx-component-control-height-compact);\n padding: 0;\n border: var(--fx-border-width) solid var(--insp-line);\n border-radius: var(--fx-radius-control);\n background: var(--insp-raised);\n color: var(--insp-muted);\n cursor: pointer;\n}\n.fx-inspector .dp-comp {\n position: relative;\n flex: 0 0 auto;\n padding: var(--fx-ref-space-8) var(--fx-ref-space-12);\n border-bottom: var(--fx-border-width) solid var(--insp-line);\n}\n.fx-inspector .dp-comp .ch {\n display: flex;\n align-items: center;\n margin-bottom: var(--fx-ref-space-6);\n}\n.fx-inspector .dp-comp .lbl {\n color: var(--insp-muted);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n letter-spacing: var(--fx-type-caption-letter-spacing);\n text-transform: uppercase;\n}\n.fx-inspector .dp-comp .add {\n display: inline-flex;\n align-items: center;\n margin-left: auto;\n gap: var(--fx-ref-space-2);\n padding: var(--fx-ref-space-2) var(--fx-ref-space-8);\n border: var(--fx-border-width) solid var(--fx-color-brand-accent);\n border-radius: var(--fx-ref-radius-4);\n background: var(--fx-color-brand-soft);\n color: var(--insp-accent);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-caption-font-family);\n cursor: pointer;\n}\n.fx-inspector .comp-row {\n display: flex;\n align-items: center;\n width: 100%;\n min-height: var(--fx-component-editor-row-height);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n gap: var(--fx-ref-space-6);\n border: 0;\n border-radius: var(--fx-ref-radius-4);\n background: transparent;\n color: var(--fx-color-text-secondary);\n}\n.fx-inspector .comp-row:hover {\n background: var(--fx-color-surface-hover);\n}\n.fx-inspector .comp-row .ci {\n display: grid;\n color: var(--insp-muted);\n}\n.fx-inspector .comp-name {\n flex: 1;\n min-width: 0;\n}\n.fx-inspector .comp-del {\n padding: var(--fx-border-width);\n border: 0;\n background: transparent;\n color: var(--insp-muted);\n opacity: 0;\n}\n.fx-inspector .comp-row:hover .comp-del {\n opacity: 1;\n}\n.fx-inspector .insp-scroll {\n display: flex;\n flex: 1 1 0%;\n flex-direction: column;\n min-height: 0;\n min-width: 0;\n overflow: auto;\n}\n.fx-inspector .dp-body {\n flex: 1 1 auto;\n min-height: 0;\n}\n.fx-inspector .cat {\n border-bottom: var(--fx-border-width) solid var(--insp-line);\n}\n.fx-inspector .cat-head {\n display: flex;\n align-items: center;\n min-height: var(--fx-component-field-height-default);\n padding: var(--fx-ref-space-8) var(--fx-ref-space-12);\n gap: var(--fx-ref-space-8);\n border-left: calc(var(--fx-border-width) * 3) solid transparent;\n background: var(--fx-color-surface-sidebar);\n cursor: pointer;\n}\n.fx-inspector .cat.dim-type .cat-head {\n border-left-color: var(--d-type);\n}\n.fx-inspector .cat.dim-all .cat-head {\n border-left-color: var(--d-all);\n}\n.fx-inspector .cat.dim-cap .cat-head {\n border-left-color: var(--d-cap);\n}\n.fx-inspector .cat-head:hover {\n background: var(--fx-color-surface-hover);\n}\n.fx-inspector .cat-head .car {\n display: grid;\n color: var(--insp-muted);\n}\n.fx-inspector .cat-head .cat-icon {\n display: grid;\n place-items: center;\n color: var(--insp-muted);\n}\n.fx-inspector .cat-head .ct {\n color: var(--fx-color-text-primary);\n font-size: var(--fx-type-compact-font-size);\n font-weight: var(--fx-ref-font-weight-600);\n}\n.fx-inspector .cat-head .advb {\n margin-left: var(--fx-ref-space-2);\n padding: 0 var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--fx-color-border-default);\n border-radius: var(--fx-radius-pill);\n color: var(--insp-muted);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n}\n.fx-inspector .cat-head .cacts {\n display: inline-flex;\n align-items: center;\n gap: var(--fx-ref-space-4);\n margin-left: auto;\n}\n.fx-inspector .cat-head .cact {\n display: grid;\n place-items: center;\n padding: var(--fx-ref-space-2);\n border: 0;\n border-radius: var(--fx-ref-radius-4);\n background: transparent;\n color: var(--insp-muted);\n opacity: 0;\n cursor: pointer;\n}\n.fx-inspector .cat-head:hover .cact {\n opacity: .7;\n}\n.fx-inspector .cat-head .cact:hover {\n opacity: 1;\n color: var(--insp-text);\n background: var(--fx-color-surface-hover);\n}\n.fx-inspector .cat.collapsed .cat-fields {\n display: none;\n}\n.fx-inspector .cat-fields {\n padding: var(--fx-ref-space-4) 0 var(--fx-ref-space-6);\n}\n.fx-inspector .f-row {\n display: flex;\n align-items: center;\n min-height: var(--fx-component-editor-row-height);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-12) var(--fx-ref-space-4) var(--fx-ref-space-8);\n gap: var(--fx-ref-space-8);\n}\n.fx-inspector .f-row:hover {\n background: var(--fx-color-surface-hover);\n}\n.fx-inspector .f-name {\n flex: 0 1 38%;\n min-width: 0;\n overflow: hidden;\n color: var(--fx-color-text-secondary);\n font-size: var(--fx-type-caption-font-size);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fx-inspector .f-val {\n display: flex;\n flex: 1;\n min-width: 0;\n}\n.fx-inspector .box-i {\n min-width: 0;\n height: var(--fx-component-control-icon-hit-area-min);\n padding: var(--fx-ref-space-2) var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--insp-line);\n border-radius: var(--fx-radius-control);\n outline: 0;\n background: var(--fx-color-surface-inset);\n color: var(--fx-color-text-secondary);\n font: var(--fx-type-code-font-weight) var(--fx-type-code-font-size) / var(--fx-type-code-line-height) var(--fx-type-code-font-family);\n}\n.fx-inspector .box-i:focus {\n border-color: var(--fx-color-border-focus);\n}\n.fx-inspector .box-i.txt {\n flex: 1;\n}\n.fx-inspector .vec {\n display: flex;\n flex: 1;\n min-width: 0;\n gap: var(--fx-ref-space-4);\n}\n.fx-inspector .vec4 {\n gap: var(--fx-ref-space-2);\n}\n.fx-inspector .vec4 .vcell {\n min-width: 0;\n}\n.fx-inspector .vcell {\n position: relative;\n display: flex;\n flex: 1;\n min-width: 0;\n}\n.fx-inspector .axis-label {\n position: absolute;\n z-index: var(--fx-layer-sticky);\n top: var(--fx-ref-space-6);\n left: var(--fx-ref-space-6);\n color: var(--insp-muted);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n pointer-events: none;\n}\n.fx-inspector .vcell .numfield {\n flex: 1;\n min-width: 0;\n}\n.fx-inspector .vcell .box-i {\n width: 100%;\n padding-left: var(--fx-component-choice-size);\n text-align: center;\n}\n.fx-inspector .vcell.x .box-i {\n border-bottom: var(--fx-border-focus-width) solid var(--fx-color-status-error-fg);\n}\n.fx-inspector .vcell.y .box-i {\n border-bottom: var(--fx-border-focus-width) solid var(--fx-color-status-success-fg);\n}\n.fx-inspector .vcell.z .box-i {\n border-bottom: var(--fx-border-focus-width) solid var(--fx-color-status-info-fg);\n}\n.fx-inspector .numfield {\n position: relative;\n display: flex;\n flex: 1;\n min-width: 0;\n}\n.fx-inspector .numfield.num {\n flex: 0 0 calc(var(--fx-ref-space-48) + var(--fx-ref-space-32) + var(--fx-ref-space-8));\n}\n.fx-inspector .scrubbable:not(:focus) {\n cursor: ew-resize;\n}\n.fx-inspector .nspin {\n position: absolute;\n top: var(--fx-border-width);\n right: var(--fx-border-width);\n bottom: var(--fx-border-width);\n display: none;\n width: var(--fx-ref-space-12);\n flex-direction: column;\n background: var(--fx-color-surface-inset);\n border-radius: 0 var(--fx-ref-radius-4) var(--fx-ref-radius-4) 0;\n}\n.fx-inspector .numfield:hover .nspin,\n.fx-inspector .numfield:focus-within .nspin {\n display: flex;\n}\n.fx-inspector .nspin button {\n display: grid;\n place-items: center;\n flex: 1;\n min-height: 0;\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--insp-muted);\n}\n.fx-inspector .nspin button:hover {\n color: var(--insp-text);\n}\n.fx-inspector .insp-checkbox,\n.fx-inspector .menu-checkbox {\n display: grid;\n place-items: center;\n width: var(--fx-component-choice-size);\n height: var(--fx-component-choice-size);\n flex: 0 0 var(--fx-component-choice-size);\n padding: 0;\n border: var(--fx-border-width) solid var(--fx-color-border-essential);\n border-radius: var(--fx-ref-radius-4);\n background: transparent;\n color: var(--fx-color-brand-on-accent);\n}\n.fx-inspector .insp-checkbox[aria-checked=true],\n.fx-inspector button[data-active=true] .menu-checkbox {\n border-color: var(--insp-accent);\n background: var(--insp-accent);\n}\n.fx-inspector .ddc {\n display: flex;\n flex: 1;\n min-width: 0;\n}\n.fx-inspector .fx-insp-select {\n flex: 1;\n width: 100%;\n height: var(--fx-component-control-icon-hit-area-min);\n padding: var(--fx-ref-space-2) var(--fx-ref-space-6);\n}\n.fx-inspector .color-control {\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n gap: var(--fx-ref-space-6);\n}\n.fx-inspector .swatch {\n width: var(--fx-component-control-height-compact);\n height: calc(var(--fx-ref-space-16) + var(--fx-ref-space-4));\n flex: 0 0 var(--fx-component-control-height-compact);\n padding: 0;\n border: var(--fx-border-width) solid var(--fx-color-border-default);\n border-radius: var(--fx-ref-radius-4);\n background: transparent;\n}\n.fx-inspector .hex-input {\n flex: 1;\n min-width: calc(var(--fx-ref-space-48) + var(--fx-ref-space-32));\n}\n.fx-inspector .asset-ref {\n display: flex;\n align-items: stretch;\n flex: 1;\n min-width: 0;\n gap: var(--fx-ref-space-4);\n padding: var(--fx-ref-space-2) var(--fx-ref-space-4);\n border: var(--fx-border-width) solid var(--insp-line);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n}\n.fx-inspector .asset-ref-thumb {\n display: grid;\n place-items: center;\n width: var(--fx-component-control-height-compact);\n height: var(--fx-component-control-height-compact);\n flex: 0 0 var(--fx-component-control-height-compact);\n border: var(--fx-border-width) solid var(--fx-color-border-default);\n border-radius: var(--fx-ref-radius-4);\n background: var(--insp-raised);\n color: var(--insp-muted);\n}\n.fx-inspector .asset-ref-thumb.empty {\n border-style: dashed;\n}\n.fx-inspector .asset-ref-body {\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n}\n.fx-inspector .asset-ref-combo {\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n height: var(--fx-component-control-height-compact);\n gap: var(--fx-ref-space-4);\n padding: 0 var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--insp-line);\n border-radius: var(--fx-ref-radius-4);\n background: var(--insp-bg);\n color: var(--insp-text);\n}\n.fx-inspector .asset-ref-combo-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-caption-font-family);\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fx-inspector .asset-ref-combo-label.empty {\n color: var(--insp-muted);\n}\n.fx-inspector .asset-ref-actions {\n display: flex;\n align-items: center;\n}\n.fx-inspector .asset-ref-act {\n display: grid;\n place-items: center;\n width: var(--fx-component-control-height-compact);\n height: var(--fx-component-control-height-compact);\n padding: 0;\n border: 0;\n border-radius: var(--fx-ref-radius-4);\n background: transparent;\n color: var(--insp-muted);\n}\n.fx-inspector .asset-ref-act:hover:not(:disabled) {\n background: var(--fx-color-surface-hover);\n color: var(--insp-text);\n}\n.fx-inspector .asset-ref-act:disabled {\n opacity: .3;\n}\n.fx-inspector .dp-empty {\n flex: 1 1 0%;\n min-height: 0;\n padding: var(--fx-ref-space-24) var(--fx-ref-space-16);\n color: var(--insp-muted);\n text-align: center;\n}\n.fx-inspector__loading-pane {\n display: flex;\n flex: 1 1 0%;\n align-items: center;\n justify-content: center;\n min-height: 0;\n}\n.fx-inspector__body {\n display: flex;\n flex: 1 1 0%;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n.fx-inspector[data-inspector-loading=true] .fx-inspector__body {\n pointer-events: none;\n opacity: 0.55;\n}\n.fx-inspector__loading-veil {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--insp-bg) 35%, transparent);\n pointer-events: none;\n}\n.fx-inspector .fx-insp-menu {\n display: flex;\n flex-direction: column;\n min-width: var(--fx-component-menu-min-width);\n padding: var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--fx-color-border-essential);\n border-radius: var(--fx-radius-popover);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-secondary);\n box-shadow: var(--fx-shadow-floating);\n}\n.fx-inspector .fx-insp-menu strong {\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8) var(--fx-ref-space-6);\n color: var(--fx-color-text-muted);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n text-transform: uppercase;\n}\n.fx-inspector .fx-insp-menu button {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n min-height: var(--fx-component-control-height-compact);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border: 0;\n border-radius: var(--fx-radius-control);\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n}\n.fx-inspector .fx-insp-menu button:hover:not(:disabled) {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.fx-inspector .fx-insp-menu button:disabled {\n opacity: .4;\n}\n.fx-inspector .fx-insp-menu button span {\n width: var(--fx-component-control-icon-size);\n display: grid;\n place-items: center;\n}\n.fx-inspector .fx-insp-menu i {\n height: var(--fx-border-width);\n margin: var(--fx-ref-space-4) var(--fx-ref-space-6);\n background: var(--fx-color-border-subtle);\n}\n.fx-inspector .search-clear {\n display: grid;\n place-items: center;\n width: var(--fx-component-control-icon-size);\n height: var(--fx-component-control-icon-size);\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--insp-muted);\n}\n.fx-inspector .insp-add-menu {\n position: absolute;\n z-index: var(--fx-layer-popover);\n top: var(--fx-component-control-height-compact);\n right: var(--fx-ref-space-12);\n display: flex;\n flex-direction: column;\n min-width: var(--fx-component-menu-min-width);\n padding: var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--fx-color-border-essential);\n border-radius: var(--fx-radius-popover);\n background: var(--fx-color-surface-raised);\n box-shadow: var(--fx-shadow-floating);\n}\n.fx-inspector .insp-add-menu strong {\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8) var(--fx-ref-space-6);\n color: var(--fx-color-text-muted);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n text-transform: uppercase;\n}\n.fx-inspector .insp-add-menu button {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n min-height: var(--fx-component-control-height-compact);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border: 0;\n border-radius: var(--fx-radius-control);\n background: transparent;\n color: var(--fx-color-text-secondary);\n text-align: left;\n}\n.fx-inspector .insp-add-menu button:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.fx-inspector .insp-add-menu button span {\n display: grid;\n place-items: center;\n width: var(--fx-component-control-icon-size);\n color: var(--fx-color-text-muted);\n}\n.fx-inspector .no-match {\n padding: var(--fx-ref-space-16);\n color: var(--insp-muted);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-caption-font-family);\n text-align: center;\n}\n.insp-context-menu {\n position: fixed;\n z-index: var(--fx-layer-tooltip);\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n min-width: var(--fx-component-menu-min-width);\n padding: var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--fx-color-border-essential);\n border-radius: var(--fx-radius-popover);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-secondary);\n box-shadow: var(--fx-shadow-floating);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-ui-font-family);\n}\n.insp-context-menu > strong {\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8) var(--fx-ref-space-6);\n color: var(--fx-color-text-muted);\n font-family: var(--fx-type-code-font-family);\n}\n.insp-context-menu > i {\n height: var(--fx-border-width);\n margin: var(--fx-ref-space-4) var(--fx-ref-space-6);\n background: var(--fx-color-border-subtle);\n}\n.insp-context-menu > button {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n min-height: var(--fx-component-control-height-compact);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border: 0;\n border-radius: var(--fx-radius-control);\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n}\n.insp-context-menu > button:hover:not(:disabled) {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.insp-context-menu > button:disabled {\n opacity: .38;\n}\n.insp-context-menu > button[data-danger=true] {\n color: var(--fx-color-status-error-fg);\n}\n.insp-context-menu > button[data-forge=true] > span:first-child {\n color: var(--fx-color-brand-accent);\n}\n.insp-context-menu > button > span:first-child {\n display: grid;\n place-items: center;\n width: var(--fx-component-control-icon-size);\n color: var(--fx-color-text-muted);\n}\n.fx-inspector .insp-header {\n flex: 0 0 auto;\n gap: var(--fx-ref-space-8);\n}\n.fx-inspector .insp-header .fx-panel-header__slot:first-child {\n flex: 1;\n min-width: 0;\n}\n.fx-inspector .insp-header .fx-panel-header__slot:nth-child(2):empty {\n display: none;\n}\n.fx-inspector .insp-header .fx-panel-header__slot:last-child {\n flex: 0 0 auto;\n}\n.fx-inspector .insp-header-identity {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n min-width: 0;\n flex: 1;\n}\n.fx-inspector .insp-header-copy {\n min-width: 0;\n flex: 1;\n}\n.fx-inspector .insp-header-name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n padding: var(--fx-ref-space-2) var(--fx-ref-space-8);\n border: var(--fx-border-width) solid var(--insp-line);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n color: var(--insp-text);\n font-weight: var(--fx-ref-font-weight-600);\n}\n.fx-inspector .insp-header-end {\n display: inline-flex;\n align-items: center;\n gap: var(--fx-ref-space-4);\n flex-shrink: 0;\n}\n.fx-inspector .insp-header-end .badge {\n max-width: 5rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fx-inspector .insp-toolbar {\n position: relative;\n flex: 0 0 auto;\n padding: var(--fx-ref-space-8) var(--fx-ref-space-12);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n}\n.fx-inspector .insp-toolbar .fx-search {\n flex: 1;\n}\n.fx-inspector .insp-toolbar .fx-search .fx-input {\n height: var(--fx-component-control-height-compact);\n}\n.fx-inspector .insp-toolbar .is-active {\n border-color: var(--fx-color-border-essential);\n background: var(--fx-color-surface-selected);\n}\n.fx-inspector .fx-insp-menu,\n.fx-inspector .insp-add-menu {\n padding: 0;\n border: 0;\n border-radius: var(--fx-radius-popover);\n background: transparent;\n box-shadow: none;\n}\n.fx-inspector .fx-insp-menu .fx-menu,\n.fx-inspector .insp-add-menu .fx-menu {\n min-width: var(--fx-component-menu-min-width);\n}\n.fx-inspector .dp-comp {\n padding: var(--fx-ref-space-8) var(--fx-ref-space-12);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n}\n.fx-inspector .dp-comp .ch {\n gap: var(--fx-ref-space-8);\n margin-bottom: var(--fx-ref-space-6);\n}\n.fx-inspector .dp-comp .add {\n min-height: var(--fx-component-control-height-compact);\n margin-left: auto;\n padding: var(--fx-ref-space-2) var(--fx-ref-space-8);\n}\n.fx-inspector .comp-row {\n min-height: var(--fx-component-editor-row-height);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n gap: var(--fx-ref-space-8);\n border-radius: var(--fx-radius-control);\n color: var(--fx-color-text-secondary);\n cursor: pointer;\n}\n.fx-inspector .comp-row:hover {\n background: var(--fx-color-surface-hover);\n}\n.fx-inspector .comp-del {\n width: var(--fx-component-control-height-compact);\n min-height: var(--fx-component-control-height-compact);\n}\n.fx-inspector .cat {\n border-bottom: 0;\n}\n.fx-inspector .cat .fx-collapsible__trigger {\n padding-left: var(--fx-ref-space-8);\n background: var(--fx-color-surface-sidebar);\n border-left: calc(var(--fx-border-width) * 3) solid transparent;\n}\n.fx-inspector .cat.dim-type .fx-collapsible__trigger {\n border-left-color: var(--d-type);\n}\n.fx-inspector .cat.dim-all .fx-collapsible__trigger {\n border-left-color: var(--d-all);\n}\n.fx-inspector .cat.dim-cap .fx-collapsible__trigger {\n border-left-color: var(--d-cap);\n}\n.fx-inspector .cat .fx-collapsible__content {\n padding: var(--fx-ref-space-4) 0 var(--fx-ref-space-8);\n}\n.fx-inspector .cat-title {\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n gap: var(--fx-ref-space-8);\n}\n.fx-inspector .cat-icon {\n display: grid;\n color: var(--fx-color-text-muted);\n}\n.fx-inspector .advb {\n margin-left: var(--fx-ref-space-2);\n padding: 0 var(--fx-ref-space-6);\n font-family: var(--fx-type-code-font-family);\n font-size: var(--fx-type-caption-font-size);\n line-height: var(--fx-type-caption-line-height);\n}\n.fx-inspector .cacts {\n display: inline-flex;\n align-items: center;\n gap: var(--fx-ref-space-2);\n margin-left: auto;\n}\n.fx-inspector .cact {\n width: var(--fx-component-control-height-compact);\n min-height: var(--fx-component-control-height-compact);\n opacity: 0;\n}\n.fx-inspector .fx-collapsible__heading:hover .cact,\n.fx-inspector .cact:focus-visible {\n opacity: 1;\n}\n.fx-inspector .f-row-wrap {\n display: flex;\n align-items: center;\n min-height: var(--fx-component-editor-row-height);\n padding: 0 var(--fx-ref-space-8);\n gap: var(--fx-ref-space-4);\n}\n.fx-inspector .f-row-wrap:hover {\n background: var(--fx-color-surface-hover);\n}\n.fx-inspector .f-row {\n flex: 1;\n min-width: 0;\n padding: var(--fx-ref-space-2) 0;\n gap: var(--fx-ref-space-8);\n}\n.fx-inspector .f-row:hover {\n background: transparent;\n}\n.fx-inspector .f-row .fx-property-row__label {\n flex-basis: 38%;\n overflow: hidden;\n color: var(--fx-color-text-secondary);\n font-size: var(--fx-type-caption-font-size);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fx-inspector .f-row .fx-property-row__control {\n display: flex;\n min-width: 0;\n overflow: hidden;\n}\n.fx-inspector .f-row .fx-property-row__control > * {\n flex: 1;\n min-width: 0;\n max-width: 100%;\n}\n.fx-inspector .insp-input {\n height: var(--fx-component-control-height-compact);\n min-width: 0;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: var(--fx-ref-space-2) var(--fx-ref-space-6);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n font-family: var(--fx-type-code-font-family);\n font-size: var(--fx-type-caption-font-size);\n}\n.fx-inspector .insp-input.txt {\n flex: 1;\n}\n.fx-inspector .vcell .insp-input {\n width: 100%;\n padding-left: var(--fx-ref-space-16);\n text-align: center;\n}\n.fx-inspector .vcell.x .insp-input {\n border-bottom-color: var(--fx-color-status-error-fg);\n}\n.fx-inspector .vcell.y .insp-input {\n border-bottom-color: var(--fx-color-status-success-fg);\n}\n.fx-inspector .vcell.z .insp-input {\n border-bottom-color: var(--fx-color-status-info-fg);\n}\n.fx-inspector .insp-checkbox {\n display: inline-flex;\n width: auto;\n height: auto;\n flex: 0 0 auto;\n min-height: var(--fx-component-control-height-compact);\n border: 0;\n border-radius: 0;\n background: transparent;\n color: inherit;\n}\n.fx-inspector .insp-checkbox input {\n border-radius: var(--fx-ref-radius-4);\n}\n.fx-inspector .swatch,\n.fx-inspector .asset-ref,\n.fx-inspector .asset-ref-thumb,\n.fx-inspector .asset-ref-combo {\n border-color: var(--fx-color-border-control);\n border-radius: var(--fx-radius-control);\n}\n.fx-inspector .asset-ref {\n background: var(--fx-color-surface-inset);\n}\n.fx-inspector .asset-ref-act {\n width: var(--fx-component-control-height-compact);\n height: var(--fx-component-control-height-compact);\n}\n.fx-inspector .no-match {\n min-height: calc(var(--fx-ref-space-64) + var(--fx-ref-space-48));\n padding: var(--fx-ref-space-16);\n}\n.insp-context-menu {\n padding: 0;\n border: 0;\n border-radius: var(--fx-radius-popover);\n background: transparent;\n box-shadow: none;\n}\n.insp-context-menu .fx-menu {\n min-width: var(--fx-component-menu-min-width);\n}\n.insp-menu-forge {\n display: grid;\n color: var(--fx-color-brand-text);\n}\n.visually-hidden {\n position: absolute;\n width: var(--fx-border-width);\n height: var(--fx-border-width);\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n";
588
+ if (typeof document !== "undefined" && !document.querySelector('style[data-forgeax-css="L2RhdGEvaG9tZS9nYWhvdWxpYW8vYWN0aW9ucy1ydW5uZXIvX3dvcmsvZm9yZ2VheC12aWV3L2ZvcmdlYXgtdmlldy9wYWNrYWdlcy92aWV3LXBsdWdpbi1pbnNwZWN0b3Ivc3JjL3VpL2luc3BlY3Rvci5jc3M"]')) {
589
+ const style = document.createElement("style");
590
+ style.dataset.forgeaxCss = "L2RhdGEvaG9tZS9nYWhvdWxpYW8vYWN0aW9ucy1ydW5uZXIvX3dvcmsvZm9yZ2VheC12aWV3L2ZvcmdlYXgtdmlldy9wYWNrYWdlcy92aWV3LXBsdWdpbi1pbnNwZWN0b3Ivc3JjL3VpL2luc3BlY3Rvci5jc3M";
591
+ style.textContent = css;
592
+ document.head.append(style);
593
+ }
594
+
595
+ // packages/view-plugin-inspector/src/ui/mount.tsx
596
+ import { jsx as jsx2 } from "react/jsx-runtime";
597
+ async function mountInspectorPanel(props) {
598
+ if (!props.mountElement) throw new TypeError("mountInspectorPanel requires mountElement");
599
+ const root = createRoot(props.mountElement);
600
+ root.render(
601
+ /* @__PURE__ */ jsx2(OverlayRootProvider, { root: props.overlayRoot ?? props.mountElement, children: /* @__PURE__ */ jsx2(InspectorPanel, { client: props.client, demo: props.demo }) })
602
+ );
603
+ return async () => root.unmount();
604
+ }
605
+
606
+ export {
607
+ mountInspectorPanel
608
+ };
609
+ //# sourceMappingURL=chunk-MUOQZPVH.mjs.map