@realsee/dnalogel 3.81.13-alpha.1 → 4.0.0-webgpu.3

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 (3499) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +20 -26
  3. package/dist/components.d.ts +2 -0
  4. package/dist/components.js +1 -0
  5. package/dist/floorplan.d.ts +2 -0
  6. package/dist/floorplan.js +1 -0
  7. package/dist/index.d.ts +2 -34
  8. package/dist/index.js +35 -67468
  9. package/dist/internal/BasePlugin-CT5K8m36.js +33 -0
  10. package/dist/internal/BasePlugin-CT5K8m36.js.map +1 -0
  11. package/dist/internal/BasePluginWithData-9z4tpAT4.js +7 -0
  12. package/dist/internal/BasePluginWithData-9z4tpAT4.js.map +1 -0
  13. package/dist/internal/BetterTween-BX0aTvP1.js +23 -0
  14. package/dist/internal/BetterTween-BX0aTvP1.js.map +1 -0
  15. package/dist/internal/CSS3DObject-C9ck81UX.js +312 -0
  16. package/dist/internal/CSS3DObject-C9ck81UX.js.map +1 -0
  17. package/dist/internal/CSS3DRender-BKWjq-Mo.js +297 -0
  18. package/dist/internal/CSS3DRender-BKWjq-Mo.js.map +1 -0
  19. package/dist/internal/CSS3DRenderPlugin-ccSpcvwd.js +77 -0
  20. package/dist/internal/CSS3DRenderPlugin-ccSpcvwd.js.map +1 -0
  21. package/dist/internal/Controller-Csut_kcH.js +2498 -0
  22. package/dist/internal/Controller-Csut_kcH.js.map +1 -0
  23. package/dist/internal/Cursor-3AwKvViZ.js +61 -0
  24. package/dist/internal/Cursor-3AwKvViZ.js.map +1 -0
  25. package/dist/internal/FBXLoader-Chl2iTDE.js +23 -0
  26. package/dist/internal/FBXLoader-Chl2iTDE.js.map +1 -0
  27. package/dist/internal/FiveDomEvents-3H9NvDOz.js +267 -0
  28. package/dist/internal/FiveDomEvents-3H9NvDOz.js.map +1 -0
  29. package/dist/internal/FiveLine-0OtX3RDV.js +28 -0
  30. package/dist/internal/FiveLine-0OtX3RDV.js.map +1 -0
  31. package/dist/internal/FiveUtil-DyTBRHpM.js +74 -0
  32. package/dist/internal/FiveUtil-DyTBRHpM.js.map +1 -0
  33. package/dist/internal/GLTFLoader-DCsDrP-N.js +16 -0
  34. package/dist/internal/GLTFLoader-DCsDrP-N.js.map +1 -0
  35. package/dist/internal/Icon-8d4DFYTH.js +6 -0
  36. package/dist/internal/Icon-8d4DFYTH.js.map +1 -0
  37. package/dist/internal/LabelItem-Cnys51gZ.js +137 -0
  38. package/dist/internal/LabelItem-Cnys51gZ.js.map +1 -0
  39. package/dist/internal/Line2-CDxLMjGj.js +63 -0
  40. package/dist/internal/Line2-CDxLMjGj.js.map +1 -0
  41. package/dist/internal/PointHelper-D565h9b_.js +937 -0
  42. package/dist/internal/PointHelper-D565h9b_.js.map +1 -0
  43. package/dist/internal/Polygon-CBGvYUfJ.js +324 -0
  44. package/dist/internal/Polygon-CBGvYUfJ.js.map +1 -0
  45. package/dist/internal/Prism-Dm5ESkgg.js +484 -0
  46. package/dist/internal/Prism-Dm5ESkgg.js.map +1 -0
  47. package/dist/internal/Rectangle-D-zkDycu.js +1232 -0
  48. package/dist/internal/Rectangle-D-zkDycu.js.map +1 -0
  49. package/dist/internal/StandaloneRenderer-Jo60ASPd.js +91 -0
  50. package/dist/internal/StandaloneRenderer-Jo60ASPd.js.map +1 -0
  51. package/dist/internal/Subscribe-DLlAl88n.js +58 -0
  52. package/dist/internal/Subscribe-DLlAl88n.js.map +1 -0
  53. package/dist/internal/Work-DF8j5GnL.js +1637 -0
  54. package/dist/internal/Work-DF8j5GnL.js.map +1 -0
  55. package/dist/internal/animation-D9rPUNWJ.js +1043 -0
  56. package/dist/internal/animation-D9rPUNWJ.js.map +1 -0
  57. package/dist/internal/animation-script-adapter-DVXnC6Pt.js +1602 -0
  58. package/dist/internal/animation-script-adapter-DVXnC6Pt.js.map +1 -0
  59. package/dist/internal/animationFrame-XGKHIeQK.js +18 -0
  60. package/dist/internal/animationFrame-XGKHIeQK.js.map +1 -0
  61. package/dist/internal/area-maker-Bd9l2pIp.js +446 -0
  62. package/dist/internal/area-maker-Bd9l2pIp.js.map +1 -0
  63. package/dist/internal/blink-DD_0mH-m.js +113 -0
  64. package/dist/internal/blink-DD_0mH-m.js.map +1 -0
  65. package/dist/internal/boundingBox-DvCor5Hd.js +83 -0
  66. package/dist/internal/boundingBox-DvCor5Hd.js.map +1 -0
  67. package/dist/internal/camera-movement-CwI7UqUk.js +112 -0
  68. package/dist/internal/camera-movement-CwI7UqUk.js.map +1 -0
  69. package/dist/internal/changeMode-BVGYCoqu.js +73 -0
  70. package/dist/internal/changeMode-BVGYCoqu.js.map +1 -0
  71. package/dist/internal/classnames-DUxZNrrI.js +33 -0
  72. package/dist/internal/classnames-DUxZNrrI.js.map +1 -0
  73. package/dist/internal/component.svelte-D5LYqt50.js +2750 -0
  74. package/dist/internal/component.svelte-D5LYqt50.js.map +1 -0
  75. package/dist/internal/components-Ed73WMB0.js +434 -0
  76. package/dist/internal/components-Ed73WMB0.js.map +1 -0
  77. package/dist/internal/constants-A7EqoECw.js +6 -0
  78. package/dist/internal/constants-A7EqoECw.js.map +1 -0
  79. package/dist/internal/controller-BWkZT0l1.js +7481 -0
  80. package/dist/internal/controller-BWkZT0l1.js.map +1 -0
  81. package/dist/internal/cruise-C3F0eNQ-.js +7 -0
  82. package/dist/internal/cruise-C3F0eNQ-.js.map +1 -0
  83. package/dist/internal/current-pano-image-DKUWluR-.js +219 -0
  84. package/dist/internal/current-pano-image-DKUWluR-.js.map +1 -0
  85. package/dist/internal/debounce-Dsju-hoR.js +13 -0
  86. package/dist/internal/debounce-Dsju-hoR.js.map +1 -0
  87. package/dist/internal/defaultUrls-CjKkS9k9.js +6 -0
  88. package/dist/internal/defaultUrls-CjKkS9k9.js.map +1 -0
  89. package/dist/internal/digital-performance-B4DdvGbx.js +589 -0
  90. package/dist/internal/digital-performance-B4DdvGbx.js.map +1 -0
  91. package/dist/internal/digital-performance-v2-Cspjjn51.js +1030 -0
  92. package/dist/internal/digital-performance-v2-Cspjjn51.js.map +1 -0
  93. package/dist/internal/disposeOwnedObject-DsYpFpqh.js +16 -0
  94. package/dist/internal/disposeOwnedObject-DsYpFpqh.js.map +1 -0
  95. package/dist/internal/easing-D6YjRdGJ.js +15 -0
  96. package/dist/internal/easing-D6YjRdGJ.js.map +1 -0
  97. package/dist/internal/equal-BiDAilPV.js +50 -0
  98. package/dist/internal/equal-BiDAilPV.js.map +1 -0
  99. package/dist/internal/filter-Br6vP-OZ.js +15 -0
  100. package/dist/internal/filter-Br6vP-OZ.js.map +1 -0
  101. package/dist/internal/fire-scene-CczaBz2_.js +1162 -0
  102. package/dist/internal/fire-scene-CczaBz2_.js.map +1 -0
  103. package/dist/internal/fiveModelLoad-mg-TnpnM.js +23 -0
  104. package/dist/internal/fiveModelLoad-mg-TnpnM.js.map +1 -0
  105. package/dist/internal/floorplan-KWlIsTvO.js +6059 -0
  106. package/dist/internal/floorplan-KWlIsTvO.js.map +1 -0
  107. package/dist/internal/fontSize-DMhRSrtx.js +104 -0
  108. package/dist/internal/fontSize-DMhRSrtx.js.map +1 -0
  109. package/dist/internal/formatRad-kChZaf0k.js +9 -0
  110. package/dist/internal/formatRad-kChZaf0k.js.map +1 -0
  111. package/dist/internal/generatePolygonGeometry-B_5JFq8y.js +1008 -0
  112. package/dist/internal/generatePolygonGeometry-B_5JFq8y.js.map +1 -0
  113. package/dist/internal/getFiveModel-CZVrrU1D.js +8 -0
  114. package/dist/internal/getFiveModel-CZVrrU1D.js.map +1 -0
  115. package/dist/internal/getNormal-BatLuzsS.js +45 -0
  116. package/dist/internal/getNormal-BatLuzsS.js.map +1 -0
  117. package/dist/internal/hammer-Cq7WcpTp.js +835 -0
  118. package/dist/internal/hammer-Cq7WcpTp.js.map +1 -0
  119. package/dist/internal/index-client-W3QT304M.js +1 -0
  120. package/dist/internal/isNil-CQNA0Sbe.js +11 -0
  121. package/dist/internal/isNil-CQNA0Sbe.js.map +1 -0
  122. package/dist/internal/item-label-DXeKI9sZ.js +282 -0
  123. package/dist/internal/item-label-DXeKI9sZ.js.map +1 -0
  124. package/dist/internal/loadTexture-CJ3EbTXw.js +18 -0
  125. package/dist/internal/loadTexture-CJ3EbTXw.js.map +1 -0
  126. package/dist/internal/loadVideoTexture-CWoiMWRg.js +43 -0
  127. package/dist/internal/loadVideoTexture-CWoiMWRg.js.map +1 -0
  128. package/dist/internal/lookObject-wesf8xt6.js +48 -0
  129. package/dist/internal/lookObject-wesf8xt6.js.map +1 -0
  130. package/dist/internal/measure-BX6boAC7.js +1027 -0
  131. package/dist/internal/measure-BX6boAC7.js.map +1 -0
  132. package/dist/internal/model-chassis-compass-InVNmOAQ.js +84 -0
  133. package/dist/internal/model-chassis-compass-InVNmOAQ.js.map +1 -0
  134. package/dist/internal/model-entry-door-guide-wZbyY77a.js +84 -0
  135. package/dist/internal/model-entry-door-guide-wZbyY77a.js.map +1 -0
  136. package/dist/internal/model-item-label-BwJ5Dgnp.js +179 -0
  137. package/dist/internal/model-item-label-BwJ5Dgnp.js.map +1 -0
  138. package/dist/internal/model-maker-uO8xlTuO.js +897 -0
  139. package/dist/internal/model-maker-uO8xlTuO.js.map +1 -0
  140. package/dist/internal/model-room-label-5NtOduW1.js +199 -0
  141. package/dist/internal/model-room-label-5NtOduW1.js.map +1 -0
  142. package/dist/internal/model-tv-video-DzXb2JRf.js +213 -0
  143. package/dist/internal/model-tv-video-DzXb2JRf.js.map +1 -0
  144. package/dist/internal/model-view-CBeeMM98.js +119 -0
  145. package/dist/internal/model-view-CBeeMM98.js.map +1 -0
  146. package/dist/internal/object3d-helper-DDYsVPN6.js +7 -0
  147. package/dist/internal/object3d-helper-DDYsVPN6.js.map +1 -0
  148. package/dist/internal/pano-compass-jSr629BP.js +193 -0
  149. package/dist/internal/pano-compass-jSr629BP.js.map +1 -0
  150. package/dist/internal/pano-cursor-raycaster-DydRx7wS.js +66 -0
  151. package/dist/internal/pano-cursor-raycaster-DydRx7wS.js.map +1 -0
  152. package/dist/internal/pano-door-label-DKoYIKLa.js +258 -0
  153. package/dist/internal/pano-door-label-DKoYIKLa.js.map +1 -0
  154. package/dist/internal/pano-measure-DW9mdx1O.js +2488 -0
  155. package/dist/internal/pano-measure-DW9mdx1O.js.map +1 -0
  156. package/dist/internal/pano-ruler-fzlUTkVu.js +236 -0
  157. package/dist/internal/pano-ruler-fzlUTkVu.js.map +1 -0
  158. package/dist/internal/pano-ruler-pro-D7q0Ob21.js +221 -0
  159. package/dist/internal/pano-ruler-pro-D7q0Ob21.js.map +1 -0
  160. package/dist/internal/pano-spatial-tag-D0qn-__S.js +392 -0
  161. package/dist/internal/pano-spatial-tag-D0qn-__S.js.map +1 -0
  162. package/dist/internal/pano-tag-BW5MXXws.js +7 -0
  163. package/dist/internal/pano-tag-BW5MXXws.js.map +1 -0
  164. package/dist/internal/pano-video-Bmud_CAn.js +365 -0
  165. package/dist/internal/pano-video-Bmud_CAn.js.map +1 -0
  166. package/dist/internal/pipeline-DDqgb1gw.js +386 -0
  167. package/dist/internal/pipeline-DDqgb1gw.js.map +1 -0
  168. package/dist/internal/planimetry-us3E4V8W.js +55 -0
  169. package/dist/internal/planimetry-us3E4V8W.js.map +1 -0
  170. package/dist/internal/rad2Deg-DutG55Wb.js +8 -0
  171. package/dist/internal/rad2Deg-DutG55Wb.js.map +1 -0
  172. package/dist/internal/rayOnLine-CrCXTByv.js +18 -0
  173. package/dist/internal/rayOnLine-CrCXTByv.js.map +1 -0
  174. package/dist/internal/recurveFindObject-1BZIH2bj.js +8 -0
  175. package/dist/internal/recurveFindObject-1BZIH2bj.js.map +1 -0
  176. package/dist/internal/resizeObserver-AY-35us4.js +32 -0
  177. package/dist/internal/resizeObserver-AY-35us4.js.map +1 -0
  178. package/dist/internal/resizeObserver-CHD4N_hp.js +14 -0
  179. package/dist/internal/resizeObserver-CHD4N_hp.js.map +1 -0
  180. package/dist/internal/rolldown-runtime-B0aSnxlc.js +20 -0
  181. package/dist/internal/safeObj-ic96Cf8D.js +51 -0
  182. package/dist/internal/safeObj-ic96Cf8D.js.map +1 -0
  183. package/dist/internal/sculpt-BNkLJR6p.js +879 -0
  184. package/dist/internal/sculpt-BNkLJR6p.js.map +1 -0
  185. package/dist/internal/sleep-1GNCncUi.js +12 -0
  186. package/dist/internal/sleep-1GNCncUi.js.map +1 -0
  187. package/dist/internal/throttle-YRIkRKaX.js +13 -0
  188. package/dist/internal/throttle-YRIkRKaX.js.map +1 -0
  189. package/dist/internal/transformPosition-Cc92Wf0o.js +11 -0
  190. package/dist/internal/transformPosition-Cc92Wf0o.js.map +1 -0
  191. package/dist/internal/transition-VqMiMmZR.js +49 -0
  192. package/dist/internal/transition-VqMiMmZR.js.map +1 -0
  193. package/dist/internal/tween.esm-CJDtohfp.js +378 -0
  194. package/dist/internal/tween.esm-CJDtohfp.js.map +1 -0
  195. package/dist/internal/util-vGeVT4oo.js +26 -0
  196. package/dist/internal/util-vGeVT4oo.js.map +1 -0
  197. package/dist/internal/uuid-BfVaI9vM.js +11 -0
  198. package/dist/internal/uuid-BfVaI9vM.js.map +1 -0
  199. package/dist/internal/vectorIsEqual-BXdJrP0J.js +9 -0
  200. package/dist/internal/vectorIsEqual-BXdJrP0J.js.map +1 -0
  201. package/dist/internal/vectorToCoordinate-DIOgfeEi.js +12 -0
  202. package/dist/internal/vectorToCoordinate-DIOgfeEi.js.map +1 -0
  203. package/dist/plugins/area-maker.d.ts +2 -0
  204. package/dist/plugins/area-maker.js +1 -0
  205. package/dist/plugins/camera-movement.d.ts +2 -0
  206. package/dist/plugins/camera-movement.js +1 -0
  207. package/dist/plugins/cruise.d.ts +2 -0
  208. package/dist/plugins/cruise.js +3 -0
  209. package/dist/plugins/css3d-render.d.ts +2 -0
  210. package/dist/plugins/css3d-render.js +1 -0
  211. package/dist/plugins/current-pano-image.d.ts +2 -0
  212. package/dist/plugins/current-pano-image.js +1 -0
  213. package/dist/plugins/digital-performance-v2.d.ts +2 -0
  214. package/dist/plugins/digital-performance-v2.js +1 -0
  215. package/dist/plugins/digital-performance.d.ts +2 -0
  216. package/dist/plugins/digital-performance.js +3 -0
  217. package/dist/plugins/fire-scene.d.ts +2 -0
  218. package/dist/plugins/fire-scene.js +1 -0
  219. package/dist/plugins/guide-line.d.ts +2 -0
  220. package/dist/plugins/guide-line.js +1 -0
  221. package/dist/plugins/item-label.d.ts +2 -0
  222. package/dist/plugins/item-label.js +1 -0
  223. package/dist/plugins/measure.d.ts +2 -0
  224. package/dist/plugins/measure.js +1 -0
  225. package/dist/plugins/model-chassis-compass.d.ts +2 -0
  226. package/dist/plugins/model-chassis-compass.js +1 -0
  227. package/dist/plugins/model-entry-door-guide.d.ts +2 -0
  228. package/dist/plugins/model-entry-door-guide.js +1 -0
  229. package/dist/plugins/model-item-label.d.ts +2 -0
  230. package/dist/plugins/model-item-label.js +1 -0
  231. package/dist/plugins/model-maker.d.ts +2 -0
  232. package/dist/plugins/model-maker.js +1 -0
  233. package/dist/plugins/model-room-label.d.ts +2 -0
  234. package/dist/plugins/model-room-label.js +1 -0
  235. package/dist/plugins/model-tv-video.d.ts +2 -0
  236. package/dist/plugins/model-tv-video.js +1 -0
  237. package/dist/plugins/model-view.d.ts +2 -0
  238. package/dist/plugins/model-view.js +1 -0
  239. package/dist/plugins/object3d-helper.d.ts +2 -0
  240. package/dist/plugins/object3d-helper.js +1 -0
  241. package/dist/plugins/pano-compass.d.ts +2 -0
  242. package/dist/plugins/pano-compass.js +1 -0
  243. package/dist/plugins/pano-cursor-raycaster.d.ts +2 -0
  244. package/dist/plugins/pano-cursor-raycaster.js +1 -0
  245. package/dist/plugins/pano-door-label.d.ts +2 -0
  246. package/dist/plugins/pano-door-label.js +1 -0
  247. package/dist/plugins/pano-measure.d.ts +2 -0
  248. package/dist/plugins/pano-measure.js +1 -0
  249. package/dist/plugins/pano-ruler-pro.d.ts +2 -0
  250. package/dist/plugins/pano-ruler-pro.js +1 -0
  251. package/dist/plugins/pano-ruler.d.ts +2 -0
  252. package/dist/plugins/pano-ruler.js +1 -0
  253. package/dist/plugins/pano-spatial-tag.d.ts +2 -0
  254. package/dist/plugins/pano-spatial-tag.js +1 -0
  255. package/dist/plugins/pano-tag.d.ts +2 -0
  256. package/dist/plugins/pano-tag.js +1 -0
  257. package/dist/plugins/pano-video.d.ts +2 -0
  258. package/dist/plugins/pano-video.js +1 -0
  259. package/dist/plugins/pipeline.d.ts +2 -0
  260. package/dist/plugins/pipeline.js +1 -0
  261. package/dist/plugins/sculpt.d.ts +2 -0
  262. package/dist/plugins/sculpt.js +1 -0
  263. package/dist/style.css +2 -0
  264. package/dist/types/AreaMakerPlugin/Controller.d.ts +97 -0
  265. package/dist/types/AreaMakerPlugin/index.d.ts +4 -0
  266. package/dist/types/AreaMakerPlugin/typing.d.ts +167 -0
  267. package/dist/types/AreaMakerPlugin/utils/Item.d.ts +137 -0
  268. package/dist/types/CSS3DRenderPlugin/Controller.d.ts +84 -0
  269. package/dist/types/CSS3DRenderPlugin/index.d.ts +6 -0
  270. package/dist/types/CSS3DRenderPlugin/typing.d.ts +26 -0
  271. package/dist/types/CSS3DRenderPlugin/utils/generateBehindFiveElement.d.ts +3 -0
  272. package/dist/types/CSS3DRenderPlugin/utils/getAllCSS3DObject.d.ts +3 -0
  273. package/dist/types/CSS3DRenderPlugin/utils/index.d.ts +4 -0
  274. package/dist/types/CSS3DRenderPlugin/utils/positionToVector3.d.ts +1 -0
  275. package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DGroup.d.ts +21 -0
  276. package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DObject.d.ts +54 -0
  277. package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DRender.d.ts +184 -0
  278. package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DRenderer.d.ts +1 -0
  279. package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DScene.d.ts +12 -0
  280. package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DSprite.d.ts +5 -0
  281. package/dist/types/CameraMovementPlugin/CameraMovementPlugin.d.ts +7 -0
  282. package/dist/types/CameraMovementPlugin/index.d.ts +5 -0
  283. package/dist/types/CameraMovementPlugin/typing.d.ts +70 -0
  284. package/dist/types/CruisePlugin/BaseController.d.ts +165 -0
  285. package/dist/types/CruisePlugin/Move.d.ts +56 -0
  286. package/dist/types/CruisePlugin/Work.d.ts +135 -0
  287. package/dist/types/CruisePlugin/index.d.ts +11 -0
  288. package/dist/types/CruisePlugin/typing.d.ts +159 -0
  289. package/dist/types/CruisePlugin/utils/coordinatesToVector.d.ts +7 -0
  290. package/dist/types/CruisePlugin/utils/getFiveStateOnCurve.d.ts +11 -0
  291. package/dist/types/CurrentPanoImagePlugin/Controller.d.ts +104 -0
  292. package/dist/types/CurrentPanoImagePlugin/index.d.ts +7 -0
  293. package/dist/types/CurrentPanoImagePlugin/typings.d.ts +58 -0
  294. package/dist/types/DigitalPerformancePlugin/controller/index.d.ts +227 -0
  295. package/dist/types/DigitalPerformancePlugin/core/DigitalHuman.d.ts +98 -0
  296. package/dist/types/DigitalPerformancePlugin/core/DigitalPerformanceNameplate.d.ts +115 -0
  297. package/dist/types/DigitalPerformancePlugin/core/DigitalPlayground.d.ts +52 -0
  298. package/dist/types/DigitalPerformancePlugin/core/DigitalStateMachine.d.ts +152 -0
  299. package/dist/types/DigitalPerformancePlugin/core/Trace.d.ts +9 -0
  300. package/dist/types/DigitalPerformancePlugin/index.d.ts +17 -0
  301. package/dist/types/DigitalPerformancePlugin/typings/index.d.ts +87 -0
  302. package/dist/types/DigitalPerformanceV2Plugin/controller/index.d.ts +402 -0
  303. package/dist/types/DigitalPerformanceV2Plugin/core/CameraDirector.d.ts +61 -0
  304. package/dist/types/DigitalPerformanceV2Plugin/core/CameraSampler.d.ts +53 -0
  305. package/dist/types/DigitalPerformanceV2Plugin/core/CameraTrack.d.ts +21 -0
  306. package/dist/types/DigitalPerformanceV2Plugin/core/FiveModelCameraBridge.d.ts +39 -0
  307. package/dist/types/DigitalPerformanceV2Plugin/core/PerformanceClock.d.ts +55 -0
  308. package/dist/types/DigitalPerformanceV2Plugin/core/Playground.d.ts +111 -0
  309. package/dist/types/DigitalPerformanceV2Plugin/core/shared.d.ts +5 -0
  310. package/dist/types/DigitalPerformanceV2Plugin/index.d.ts +11 -0
  311. package/dist/types/DigitalPerformanceV2Plugin/typings/index.d.ts +132 -0
  312. package/dist/types/FireScenePlugin/FireControl.d.ts +154 -0
  313. package/dist/types/FireScenePlugin/SequencePlayer.d.ts +41 -0
  314. package/dist/types/FireScenePlugin/constants.d.ts +28 -0
  315. package/dist/types/FireScenePlugin/fire/config.d.ts +10 -0
  316. package/dist/types/FireScenePlugin/fire/index.d.ts +6 -0
  317. package/dist/types/FireScenePlugin/fire/managers/FireManager.d.ts +76 -0
  318. package/dist/types/FireScenePlugin/fire/type.d.ts +51 -0
  319. package/dist/types/FireScenePlugin/index.d.ts +6 -0
  320. package/dist/types/FireScenePlugin/smoke/config.d.ts +8 -0
  321. package/dist/types/FireScenePlugin/smoke/index.d.ts +1 -0
  322. package/dist/types/FireScenePlugin/smoke/managers/NormalSmokeManager.d.ts +49 -0
  323. package/dist/types/FireScenePlugin/smoke/managers/SmokeManager.d.ts +89 -0
  324. package/dist/types/FireScenePlugin/utils/areaBounds.d.ts +14 -0
  325. package/dist/types/FireScenePlugin/utils/particle.d.ts +5 -0
  326. package/dist/types/FireScenePlugin/utils/particleTexture.d.ts +21 -0
  327. package/dist/types/FireScenePlugin/utils/radialSpread.d.ts +54 -0
  328. package/dist/types/FireScenePlugin/utils/spread.d.ts +17 -0
  329. package/dist/types/GuideLinePlugin/Components/Tag.svelte.d.ts +1 -0
  330. package/dist/types/GuideLinePlugin/Controller.d.ts +100 -0
  331. package/dist/types/GuideLinePlugin/GuideLineItem.d.ts +36 -0
  332. package/dist/types/GuideLinePlugin/GuideLineModeItem.d.ts +152 -0
  333. package/dist/types/GuideLinePlugin/index.d.ts +10 -0
  334. package/dist/types/GuideLinePlugin/typing.d.ts +199 -0
  335. package/dist/types/GuideLinePlugin/utils/GuideLineMaterial.d.ts +17 -0
  336. package/dist/types/GuideLinePlugin/utils/createLineGeometry.d.ts +36 -0
  337. package/dist/types/GuideLinePlugin/utils/createPath.d.ts +3 -0
  338. package/dist/types/GuideLinePlugin/utils/dataFormatter.d.ts +2 -0
  339. package/dist/types/GuideLinePlugin/utils/getArrowMaterial.d.ts +4 -0
  340. package/dist/types/GuideLinePlugin/utils/getPoint.d.ts +3 -0
  341. package/dist/types/GuideLinePlugin/utils/polyline-normals.d.ts +3 -0
  342. package/dist/types/ItemLabelPlugin/ItemLabelComponent.svelte.d.ts +1 -0
  343. package/dist/types/ItemLabelPlugin/ItemLabelItem.svelte.d.ts +1 -0
  344. package/dist/types/ItemLabelPlugin/Plugin.d.ts +4 -0
  345. package/dist/types/ItemLabelPlugin/events.type.d.ts +9 -0
  346. package/dist/types/ItemLabelPlugin/index.d.ts +9 -0
  347. package/dist/types/ItemLabelPlugin/typings.d.ts +65 -0
  348. package/dist/types/ItemLabelPlugin/utils/getStrokeLength.d.ts +2 -0
  349. package/dist/types/ItemLabelPlugin/utils/isImpacted.d.ts +6 -0
  350. package/dist/types/ItemLabelPlugin/utils/parseData.d.ts +3 -0
  351. package/dist/types/ItemLabelPlugin/utils/transform2RenderData.d.ts +3 -0
  352. package/dist/types/MeasurePlugin/Controller.d.ts +167 -0
  353. package/dist/types/MeasurePlugin/index.d.ts +17 -0
  354. package/dist/types/MeasurePlugin/utils/MeasureMesh.d.ts +29 -0
  355. package/dist/types/MeasurePlugin/utils/validatePolygon.d.ts +2 -0
  356. package/dist/types/ModelChassisCompassPlugin/Plugin.d.ts +20 -0
  357. package/dist/types/ModelChassisCompassPlugin/index.d.ts +4 -0
  358. package/dist/types/ModelEntryDoorGuidePlugin/Plugin.d.ts +28 -0
  359. package/dist/types/ModelEntryDoorGuidePlugin/index.d.ts +4 -0
  360. package/dist/types/ModelItemLabelPlugin/ItemLabelComponent.svelte.d.ts +1 -0
  361. package/dist/types/ModelItemLabelPlugin/ItemLabelItem.svelte.d.ts +1 -0
  362. package/dist/types/ModelItemLabelPlugin/ModelItemLabelPlugin.d.ts +4 -0
  363. package/dist/types/ModelItemLabelPlugin/events.type.d.ts +9 -0
  364. package/dist/types/ModelItemLabelPlugin/index.d.ts +9 -0
  365. package/dist/types/ModelItemLabelPlugin/typings.d.ts +56 -0
  366. package/dist/types/ModelItemLabelPlugin/utils/parseData.d.ts +3 -0
  367. package/dist/types/ModelMakerPlugin/Controller.d.ts +205 -0
  368. package/dist/types/ModelMakerPlugin/index.d.ts +8 -0
  369. package/dist/types/ModelMakerPlugin/item/baseItem.d.ts +65 -0
  370. package/dist/types/ModelMakerPlugin/item/boxItem.d.ts +20 -0
  371. package/dist/types/ModelMakerPlugin/item/polygonItem.d.ts +19 -0
  372. package/dist/types/ModelMakerPlugin/item/prismItem.d.ts +18 -0
  373. package/dist/types/ModelMakerPlugin/rendering/EncodedLineMaterial.d.ts +6 -0
  374. package/dist/types/ModelMakerPlugin/rendering/SavedAnnotationColor.d.ts +50 -0
  375. package/dist/types/ModelMakerPlugin/rendering/hdrContribution.d.ts +19 -0
  376. package/dist/types/ModelMakerPlugin/typings/config.d.ts +26 -0
  377. package/dist/types/ModelMakerPlugin/typings/index.d.ts +53 -0
  378. package/dist/types/ModelMakerPlugin/utils/ModelMakerPolygonMesh.d.ts +10 -0
  379. package/dist/types/ModelMakerPlugin/utils/ModelMakerPrismMesh.d.ts +6 -0
  380. package/dist/types/ModelMakerPlugin/utils/Text.svelte.d.ts +1 -0
  381. package/dist/types/ModelMakerPlugin/utils/getTagOcclusionObjects.d.ts +4 -0
  382. package/dist/types/ModelMakerPlugin/utils/setModelSortBounds.d.ts +3 -0
  383. package/dist/types/ModelMakerPlugin/utils/tagRenderer.d.ts +3 -0
  384. package/dist/types/ModelRoomLabelPlugin/Controller.d.ts +40 -0
  385. package/dist/types/ModelRoomLabelPlugin/RoomLabelItem.svelte.d.ts +1 -0
  386. package/dist/types/ModelRoomLabelPlugin/RoomLabelItems.svelte.d.ts +1 -0
  387. package/dist/types/ModelRoomLabelPlugin/index.d.ts +12 -0
  388. package/dist/types/ModelRoomLabelPlugin/utils/parseData.d.ts +3 -0
  389. package/dist/types/ModelTVVideoPlugin/Plugin.d.ts +4 -0
  390. package/dist/types/ModelTVVideoPlugin/index.d.ts +5 -0
  391. package/dist/types/ModelTVVideoPlugin/typings.d.ts +27 -0
  392. package/dist/types/ModelTVVideoPlugin/utils/parseData.d.ts +2 -0
  393. package/dist/types/ModelViewPlugin/Plugin.d.ts +43 -0
  394. package/dist/types/ModelViewPlugin/index.d.ts +4 -0
  395. package/dist/types/Object3DHelperPlugin/Controller.d.ts +153 -0
  396. package/dist/types/Object3DHelperPlugin/FiveControllerWrapper.d.ts +20 -0
  397. package/dist/types/Object3DHelperPlugin/index.d.ts +7 -0
  398. package/dist/types/PanoCompassPlugin/Controller.d.ts +88 -0
  399. package/dist/types/PanoCompassPlugin/getRoomInfoInstance.d.ts +8 -0
  400. package/dist/types/PanoCompassPlugin/index.d.ts +7 -0
  401. package/dist/types/PanoCompassPlugin/typings.d.ts +58 -0
  402. package/dist/types/PanoCursorRaycasterPlugin/index.d.ts +49 -0
  403. package/dist/types/PanoDoorLabelPlugin/Controller.d.ts +45 -0
  404. package/dist/types/PanoDoorLabelPlugin/DoorLabelItem.svelte.d.ts +1 -0
  405. package/dist/types/PanoDoorLabelPlugin/index.d.ts +7 -0
  406. package/dist/types/PanoDoorLabelPlugin/typings.d.ts +38 -0
  407. package/dist/types/PanoDoorLabelPlugin/utils.d.ts +5 -0
  408. package/dist/types/PanoMeasurePlugin/Components/Common/CircleButton.svelte.d.ts +1 -0
  409. package/dist/types/PanoMeasurePlugin/Components/Common/Exit.svelte.d.ts +1 -0
  410. package/dist/types/PanoMeasurePlugin/Components/Common/Switcher0.svelte.d.ts +1 -0
  411. package/dist/types/PanoMeasurePlugin/Components/Common/Switcher1.svelte.d.ts +1 -0
  412. package/dist/types/PanoMeasurePlugin/Components/Controller0.svelte.d.ts +1 -0
  413. package/dist/types/PanoMeasurePlugin/Components/Controller1.svelte.d.ts +1 -0
  414. package/dist/types/PanoMeasurePlugin/Components/Tip.svelte.d.ts +1 -0
  415. package/dist/types/PanoMeasurePlugin/Controller/BaseController.d.ts +55 -0
  416. package/dist/types/PanoMeasurePlugin/Controller/EditController.d.ts +57 -0
  417. package/dist/types/PanoMeasurePlugin/Controller/MixedController.d.ts +37 -0
  418. package/dist/types/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +12 -0
  419. package/dist/types/PanoMeasurePlugin/Controller/ViewController.d.ts +12 -0
  420. package/dist/types/PanoMeasurePlugin/Controller/WatchController.d.ts +34 -0
  421. package/dist/types/PanoMeasurePlugin/Controller/index.d.ts +104 -0
  422. package/dist/types/PanoMeasurePlugin/Model/area.d.ts +75 -0
  423. package/dist/types/PanoMeasurePlugin/Model/index.d.ts +45 -0
  424. package/dist/types/PanoMeasurePlugin/Model/line.d.ts +39 -0
  425. package/dist/types/PanoMeasurePlugin/Model/point.d.ts +10 -0
  426. package/dist/types/PanoMeasurePlugin/Model/polygon.d.ts +14 -0
  427. package/dist/types/PanoMeasurePlugin/Model/polyline.d.ts +47 -0
  428. package/dist/types/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +30 -0
  429. package/dist/types/PanoMeasurePlugin/Modules/GuideController.d.ts +26 -0
  430. package/dist/types/PanoMeasurePlugin/Modules/Magnifier.d.ts +19 -0
  431. package/dist/types/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +2 -0
  432. package/dist/types/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +19 -0
  433. package/dist/types/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +12 -0
  434. package/dist/types/PanoMeasurePlugin/Modules/UIController/index.d.ts +34 -0
  435. package/dist/types/PanoMeasurePlugin/Modules/UIController/mobileHTML.d.ts +4 -0
  436. package/dist/types/PanoMeasurePlugin/Modules/UIController/mobileMainBtnController.d.ts +15 -0
  437. package/dist/types/PanoMeasurePlugin/Modules/rangePiece/html.d.ts +4 -0
  438. package/dist/types/PanoMeasurePlugin/Modules/rangePiece/index.d.ts +42 -0
  439. package/dist/types/PanoMeasurePlugin/index.d.ts +14 -0
  440. package/dist/types/PanoMeasurePlugin/typings/data.d.ts +58 -0
  441. package/dist/types/PanoMeasurePlugin/typings/event.type.d.ts +55 -0
  442. package/dist/types/PanoMeasurePlugin/typings/index.d.ts +15 -0
  443. package/dist/types/PanoMeasurePlugin/utils/clearGroup.d.ts +2 -0
  444. package/dist/types/PanoMeasurePlugin/utils/constants.d.ts +5 -0
  445. package/dist/types/PanoMeasurePlugin/utils/dom/areaDom.d.ts +21 -0
  446. package/dist/types/PanoMeasurePlugin/utils/dom/base.d.ts +29 -0
  447. package/dist/types/PanoMeasurePlugin/utils/dom/distanceItem.d.ts +33 -0
  448. package/dist/types/PanoMeasurePlugin/utils/findClosestPoint.d.ts +10 -0
  449. package/dist/types/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +3 -0
  450. package/dist/types/PanoMeasurePlugin/utils/line.d.ts +17 -0
  451. package/dist/types/PanoMeasurePlugin/utils/math.d.ts +17 -0
  452. package/dist/types/PanoMeasurePlugin/utils/mouseGroup.d.ts +7 -0
  453. package/dist/types/PanoMeasurePlugin/utils/ndc2Screen.d.ts +5 -0
  454. package/dist/types/PanoRulerPlugin/Plugin.d.ts +34 -0
  455. package/dist/types/PanoRulerPlugin/index.d.ts +5 -0
  456. package/dist/types/PanoRulerProPlugin/Controller.d.ts +17 -0
  457. package/dist/types/PanoRulerProPlugin/RulerItem.svelte.d.ts +1 -0
  458. package/dist/types/PanoRulerProPlugin/RulerItems.svelte.d.ts +1 -0
  459. package/dist/types/PanoRulerProPlugin/index.d.ts +8 -0
  460. package/dist/types/PanoSpatialTagPlugin/Components/origins.svelte.d.ts +1 -0
  461. package/dist/types/PanoSpatialTagPlugin/Components/tag.svelte.d.ts +1 -0
  462. package/dist/types/PanoSpatialTagPlugin/Plugin.d.ts +35 -0
  463. package/dist/types/PanoSpatialTagPlugin/index.d.ts +5 -0
  464. package/dist/types/PanoSpatialTagPlugin/store.d.ts +1 -0
  465. package/dist/types/PanoSpatialTagPlugin/typings.d.ts +40 -0
  466. package/dist/types/PanoTagPlugin/Components/Common/Arrow.svelte.d.ts +1 -0
  467. package/dist/types/PanoTagPlugin/Components/Common/Audio.svelte.d.ts +1 -0
  468. package/dist/types/PanoTagPlugin/Components/Common/AudioPlayer.svelte.d.ts +1 -0
  469. package/dist/types/PanoTagPlugin/Components/Common/Carousel.svelte.d.ts +1 -0
  470. package/dist/types/PanoTagPlugin/Components/Common/Icon/Icon.svelte.d.ts +1 -0
  471. package/dist/types/PanoTagPlugin/Components/Common/Icon/PanoramaIcon.svelte.d.ts +1 -0
  472. package/dist/types/PanoTagPlugin/Components/Common/Icon/animationUtils.d.ts +9 -0
  473. package/dist/types/PanoTagPlugin/Components/Common/Icon/audioIcon.svelte.d.ts +1 -0
  474. package/dist/types/PanoTagPlugin/Components/Common/Line/Polyline.svelte.d.ts +1 -0
  475. package/dist/types/PanoTagPlugin/Components/Common/Line/Straight.svelte.d.ts +1 -0
  476. package/dist/types/PanoTagPlugin/Components/Common/Media.svelte.d.ts +1 -0
  477. package/dist/types/PanoTagPlugin/Components/Common/MediaItem.svelte.d.ts +1 -0
  478. package/dist/types/PanoTagPlugin/Components/Common/Shadow.svelte.d.ts +1 -0
  479. package/dist/types/PanoTagPlugin/Components/Common/TagPoint.svelte.d.ts +1 -0
  480. package/dist/types/PanoTagPlugin/Components/Common/TagPopover/ArrowRightIcon.svelte.d.ts +1 -0
  481. package/dist/types/PanoTagPlugin/Components/Common/TagPopover/PanoramaIcon.svelte.d.ts +1 -0
  482. package/dist/types/PanoTagPlugin/Components/Common/TagPopover/PopoverContent.svelte.d.ts +1 -0
  483. package/dist/types/PanoTagPlugin/Components/Common/TagPopover/ShareIcon.svelte.d.ts +1 -0
  484. package/dist/types/PanoTagPlugin/Components/Common/TagPopover/TagPopoverArrow.svelte.d.ts +1 -0
  485. package/dist/types/PanoTagPlugin/Components/Common/TagPopover/TagPopoverToolBar.svelte.d.ts +1 -0
  486. package/dist/types/PanoTagPlugin/Components/Common/TagPopover/TagPopup.svelte.d.ts +1 -0
  487. package/dist/types/PanoTagPlugin/Components/Common/TagPopover/index.svelte.d.ts +1 -0
  488. package/dist/types/PanoTagPlugin/Components/Common/Text/FlyMText.svelte.d.ts +1 -0
  489. package/dist/types/PanoTagPlugin/Components/Common/Text/FlyText.svelte.d.ts +1 -0
  490. package/dist/types/PanoTagPlugin/Components/Common/Text/MText.svelte.d.ts +1 -0
  491. package/dist/types/PanoTagPlugin/Components/Common/VideoIcon.svelte.d.ts +1 -0
  492. package/dist/types/PanoTagPlugin/Components/Tag/AudioTag/AudioPlaneTag.svelte.d.ts +1 -0
  493. package/dist/types/PanoTagPlugin/Components/Tag/AudioTag/AudioPoint.svelte.d.ts +1 -0
  494. package/dist/types/PanoTagPlugin/Components/Tag/AudioTag/AudioTag.svelte.d.ts +1 -0
  495. package/dist/types/PanoTagPlugin/Components/Tag/AudioTag/index.svelte.d.ts +1 -0
  496. package/dist/types/PanoTagPlugin/Components/Tag/CustomTag.svelte.d.ts +1 -0
  497. package/dist/types/PanoTagPlugin/Components/Tag/ImageTextTag.svelte.d.ts +1 -0
  498. package/dist/types/PanoTagPlugin/Components/Tag/LinkTag.svelte.d.ts +1 -0
  499. package/dist/types/PanoTagPlugin/Components/Tag/MarketingTag.svelte.d.ts +1 -0
  500. package/dist/types/PanoTagPlugin/Components/Tag/MediaPlane.svelte.d.ts +1 -0
  501. package/dist/types/PanoTagPlugin/Components/Tag/PanoramaTag.svelte.d.ts +1 -0
  502. package/dist/types/PanoTagPlugin/Components/Tag/TextTag/TextPlaneTag.svelte.d.ts +1 -0
  503. package/dist/types/PanoTagPlugin/Components/Tag/TextTag/TextTag.svelte.d.ts +1 -0
  504. package/dist/types/PanoTagPlugin/Components/Tag/TextTag/index.svelte.d.ts +1 -0
  505. package/dist/types/PanoTagPlugin/Components/Tag/index.svelte.d.ts +1 -0
  506. package/dist/types/PanoTagPlugin/Components/TagContainer.svelte.d.ts +1 -0
  507. package/dist/types/PanoTagPlugin/Components/TagItem.svelte.d.ts +1 -0
  508. package/dist/types/PanoTagPlugin/controller/Tag/BaseTag.d.ts +270 -0
  509. package/dist/types/PanoTagPlugin/controller/Tag/BoxTag.d.ts +118 -0
  510. package/dist/types/PanoTagPlugin/controller/Tag/MaskTag.d.ts +246 -0
  511. package/dist/types/PanoTagPlugin/controller/Tag/ModelTag.d.ts +15 -0
  512. package/dist/types/PanoTagPlugin/controller/Tag/PlaneTag.d.ts +53 -0
  513. package/dist/types/PanoTagPlugin/controller/Tag/PointTag.d.ts +47 -0
  514. package/dist/types/PanoTagPlugin/controller/Tag/PolygonTag.d.ts +111 -0
  515. package/dist/types/PanoTagPlugin/controller/TagRender.d.ts +35 -0
  516. package/dist/types/PanoTagPlugin/controller/TagUtil.d.ts +94 -0
  517. package/dist/types/PanoTagPlugin/controller/index.d.ts +228 -0
  518. package/dist/types/PanoTagPlugin/index.d.ts +9 -0
  519. package/dist/types/PanoTagPlugin/tag.config.d.ts +7 -0
  520. package/dist/types/PanoTagPlugin/typings/controller.d.ts +112 -0
  521. package/dist/types/PanoTagPlugin/typings/index.d.ts +7 -0
  522. package/dist/types/PanoTagPlugin/typings/tag/Tag.d.ts +69 -0
  523. package/dist/types/PanoTagPlugin/typings/tag/TagConfig.d.ts +404 -0
  524. package/dist/types/PanoTagPlugin/typings/tag/TagData.d.ts +165 -0
  525. package/dist/types/PanoTagPlugin/typings/tag/TagInstance.d.ts +8 -0
  526. package/dist/types/PanoTagPlugin/typings/tag/Utils.d.ts +156 -0
  527. package/dist/types/PanoTagPlugin/utils/Cache.d.ts +17 -0
  528. package/dist/types/PanoTagPlugin/utils/DebugUtil.d.ts +12 -0
  529. package/dist/types/PanoTagPlugin/utils/addDebugPoints.d.ts +3 -0
  530. package/dist/types/PanoTagPlugin/utils/audio/SharedAudio.d.ts +32 -0
  531. package/dist/types/PanoTagPlugin/utils/debounce.d.ts +8 -0
  532. package/dist/types/PanoTagPlugin/utils/getImageInfo.d.ts +14 -0
  533. package/dist/types/PanoTagPlugin/utils/index.d.ts +10 -0
  534. package/dist/types/PanoTagPlugin/utils/model/MaskNodeMaterial.d.ts +19 -0
  535. package/dist/types/PanoTagPlugin/utils/model/TagMediaTextureCache.d.ts +20 -0
  536. package/dist/types/PanoTagPlugin/utils/model/mediaPlane.d.ts +117 -0
  537. package/dist/types/PanoTagPlugin/utils/normalPositionToPositions.d.ts +2 -0
  538. package/dist/types/PanoTagPlugin/utils/planeNormal.d.ts +4 -0
  539. package/dist/types/PanoTagPlugin/utils/sculptDataToBoxPosition.d.ts +6 -0
  540. package/dist/types/PanoTagPlugin/utils/tag/adaptConfig.d.ts +2 -0
  541. package/dist/types/PanoTagPlugin/utils/tag/calculateTagConfig.d.ts +7 -0
  542. package/dist/types/PanoTagPlugin/utils/tag/canAutoPlayByOcclusion.d.ts +17 -0
  543. package/dist/types/PanoTagPlugin/utils/tag/format.d.ts +5 -0
  544. package/dist/types/PanoTagPlugin/utils/tag/getRaycasterStartPosition.d.ts +12 -0
  545. package/dist/types/PanoTagPlugin/utils/tag/tagCheck.d.ts +19 -0
  546. package/dist/types/PanoTagPlugin/utils/tagPosition.d.ts +12 -0
  547. package/dist/types/PanoVideoPlugin/Controller.d.ts +61 -0
  548. package/dist/types/PanoVideoPlugin/VideoMeshController.d.ts +132 -0
  549. package/dist/types/PanoVideoPlugin/index.d.ts +21 -0
  550. package/dist/types/PanoVideoPlugin/typings.d.ts +70 -0
  551. package/dist/types/PanoVideoPlugin/utils/index.d.ts +9 -0
  552. package/dist/types/PipelinePlugin/Controller.d.ts +108 -0
  553. package/dist/types/PipelinePlugin/index.d.ts +6 -0
  554. package/dist/types/PipelinePlugin/typing/index.d.ts +79 -0
  555. package/dist/types/PipelinePlugin/utils/Objects/FlowPipe.d.ts +33 -0
  556. package/dist/types/PipelinePlugin/utils/Objects/HighlightPipe.d.ts +10 -0
  557. package/dist/types/PipelinePlugin/utils/Objects/Pipe.d.ts +44 -0
  558. package/dist/types/PipelinePlugin/utils/formatData.d.ts +12 -0
  559. package/dist/types/Sculpt/Editors/BoxMeshEditor.d.ts +5 -0
  560. package/dist/types/Sculpt/Editors/CircleMeshEditor.d.ts +5 -0
  561. package/dist/types/Sculpt/Editors/CylinderMeshEditor.d.ts +5 -0
  562. package/dist/types/Sculpt/Editors/PrismMeshEditor.d.ts +5 -0
  563. package/dist/types/Sculpt/Editors/RectangleMeshEditor.d.ts +5 -0
  564. package/dist/types/Sculpt/Meshes/Area.d.ts +9 -0
  565. package/dist/types/Sculpt/Meshes/Box.d.ts +18 -0
  566. package/dist/types/Sculpt/Meshes/Circle.d.ts +24 -0
  567. package/dist/types/Sculpt/Meshes/CircleWithEdge.d.ts +11 -0
  568. package/dist/types/Sculpt/Meshes/Cylinder.d.ts +36 -0
  569. package/dist/types/Sculpt/Meshes/Line.d.ts +63 -0
  570. package/dist/types/Sculpt/Meshes/LineWithDots.d.ts +52 -0
  571. package/dist/types/Sculpt/Meshes/Point.d.ts +41 -0
  572. package/dist/types/Sculpt/Meshes/Polygon.d.ts +53 -0
  573. package/dist/types/Sculpt/Meshes/PolygonWithEdge.d.ts +33 -0
  574. package/dist/types/Sculpt/Meshes/Polyline.d.ts +47 -0
  575. package/dist/types/Sculpt/Meshes/Prism.d.ts +95 -0
  576. package/dist/types/Sculpt/Meshes/Rectangle.d.ts +19 -0
  577. package/dist/types/Sculpt/Meshes/RectangleWithEdge.d.ts +29 -0
  578. package/dist/types/Sculpt/Objects/Base/Editor.d.ts +55 -0
  579. package/dist/types/Sculpt/Objects/Base/index.d.ts +128 -0
  580. package/dist/types/Sculpt/Objects/Box/index.d.ts +49 -0
  581. package/dist/types/Sculpt/Objects/Circle/index.d.ts +33 -0
  582. package/dist/types/Sculpt/Objects/Cylinder/index.d.ts +35 -0
  583. package/dist/types/Sculpt/Objects/Line/Editor.d.ts +22 -0
  584. package/dist/types/Sculpt/Objects/Line/index.d.ts +49 -0
  585. package/dist/types/Sculpt/Objects/Point/Editor.d.ts +8 -0
  586. package/dist/types/Sculpt/Objects/Point/index.d.ts +40 -0
  587. package/dist/types/Sculpt/Objects/Polygon/Editor.d.ts +20 -0
  588. package/dist/types/Sculpt/Objects/Polygon/index.d.ts +81 -0
  589. package/dist/types/Sculpt/Objects/Polyline/Editor.d.ts +8 -0
  590. package/dist/types/Sculpt/Objects/Polyline/index.d.ts +48 -0
  591. package/dist/types/Sculpt/Objects/Prism/index.d.ts +58 -0
  592. package/dist/types/Sculpt/Objects/Rectangle/index.d.ts +49 -0
  593. package/dist/types/Sculpt/index.d.ts +233 -0
  594. package/dist/types/Sculpt/typings/index.d.ts +72 -0
  595. package/dist/types/Sculpt/typings/style.d.ts +108 -0
  596. package/dist/types/Sculpt/typings/utils.type.d.ts +18 -0
  597. package/dist/types/Sculpt/utils/Modules/Global.d.ts +23 -0
  598. package/dist/types/Sculpt/utils/data.d.ts +7 -0
  599. package/dist/types/Sculpt/utils/export.d.ts +25 -0
  600. package/dist/types/Sculpt/utils/removeAllTag.d.ts +2 -0
  601. package/dist/types/Sculpt/utils/renderDom.d.ts +19 -0
  602. package/dist/types/Sculpt/utils/sortPositionsByCameraPosition.d.ts +5 -0
  603. package/dist/types/Sculpt/utils/three/ColoredMesh.d.ts +33 -0
  604. package/dist/types/Sculpt/utils/three/RectangleGeometry.d.ts +6 -0
  605. package/dist/types/Sculpt/utils/three/rayOnLine.d.ts +12 -0
  606. package/dist/types/base/BasePlugin.d.ts +124 -0
  607. package/dist/types/base/BasePluginWithData.d.ts +21 -0
  608. package/dist/types/components/AreaLabel/LabelItem.svelte.d.ts +1 -0
  609. package/dist/types/components/PaintBrush/Controller.d.ts +45 -0
  610. package/dist/types/components/PaintBrush/index.d.ts +28 -0
  611. package/dist/types/components/PaintBrush/style.d.ts +2 -0
  612. package/dist/types/components/PaintBrush/typings.d.ts +59 -0
  613. package/dist/types/components/index.d.ts +3 -0
  614. package/dist/types/env.d.ts +1 -0
  615. package/dist/types/floorplan/Components/BaseImage.svelte.d.ts +1 -0
  616. package/dist/types/floorplan/Components/Camera.svelte.d.ts +1 -0
  617. package/dist/types/floorplan/Components/Compass.svelte.d.ts +1 -0
  618. package/dist/types/floorplan/Components/CurrentFloor.svelte.d.ts +1 -0
  619. package/dist/types/floorplan/Components/Items/Item.svelte.d.ts +1 -0
  620. package/dist/types/floorplan/Components/Items/Items.svelte.d.ts +1 -0
  621. package/dist/types/floorplan/Components/Main.svelte.d.ts +1 -0
  622. package/dist/types/floorplan/Components/MissingFloor.svelte.d.ts +1 -0
  623. package/dist/types/floorplan/Components/Normalmage.svelte.d.ts +1 -0
  624. package/dist/types/floorplan/Components/RoomHighlight/Room.svelte.d.ts +1 -0
  625. package/dist/types/floorplan/Components/RoomHighlight/RoomHighlight.svelte.d.ts +1 -0
  626. package/dist/types/floorplan/Components/RoomLabels/RoomLabel.svelte.d.ts +1 -0
  627. package/dist/types/floorplan/Components/RoomLabels/RoomLabels.svelte.d.ts +1 -0
  628. package/dist/types/floorplan/Components/RoomMaterials/RoomMaterial.svelte.d.ts +1 -0
  629. package/dist/types/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte.d.ts +1 -0
  630. package/dist/types/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte.d.ts +1 -0
  631. package/dist/types/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte.d.ts +1 -0
  632. package/dist/types/floorplan/Components/RoomMaterials/RoomTriangle.svelte.d.ts +1 -0
  633. package/dist/types/floorplan/Components/RuleLabels/RuleItem.svelte.d.ts +1 -0
  634. package/dist/types/floorplan/Components/RuleLabels/RuleLabels.svelte.d.ts +1 -0
  635. package/dist/types/floorplan/Components/StyledImage.svelte.d.ts +1 -0
  636. package/dist/types/floorplan/Components/SvgImage.svelte.d.ts +1 -0
  637. package/dist/types/floorplan/FloorplanGuidePlugin/Components/Camera.svelte.d.ts +1 -0
  638. package/dist/types/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +1 -0
  639. package/dist/types/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +1 -0
  640. package/dist/types/floorplan/FloorplanGuidePlugin/Components/FloorplanCompass.svelte.d.ts +1 -0
  641. package/dist/types/floorplan/FloorplanGuidePlugin/Components/Main.svelte.d.ts +1 -0
  642. package/dist/types/floorplan/FloorplanGuidePlugin/Components/ObserverDots.svelte.d.ts +1 -0
  643. package/dist/types/floorplan/FloorplanGuidePlugin/Components/RoomLabelItem.svelte.d.ts +1 -0
  644. package/dist/types/floorplan/FloorplanGuidePlugin/Components/RoomLabels.svelte.d.ts +1 -0
  645. package/dist/types/floorplan/FloorplanGuidePlugin/Controller.d.ts +52 -0
  646. package/dist/types/floorplan/FloorplanGuidePlugin/index.d.ts +7 -0
  647. package/dist/types/floorplan/FloorplanGuidePlugin/typing.d.ts +194 -0
  648. package/dist/types/floorplan/MapviewFloorplanPlugin/Controller.d.ts +125 -0
  649. package/dist/types/floorplan/MapviewFloorplanPlugin/index.d.ts +7 -0
  650. package/dist/types/floorplan/MapviewFloorplanPlugin/typing.d.ts +1 -0
  651. package/dist/types/floorplan/ModelFloorplanPlugin/Controller.d.ts +117 -0
  652. package/dist/types/floorplan/ModelFloorplanPlugin/index.d.ts +7 -0
  653. package/dist/types/floorplan/ModelFloorplanPlugin/typing.d.ts +1 -0
  654. package/dist/types/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte.d.ts +1 -0
  655. package/dist/types/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +1 -0
  656. package/dist/types/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +1 -0
  657. package/dist/types/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte.d.ts +1 -0
  658. package/dist/types/floorplan/PanoFloorplanRadarPlugin/Controller.d.ts +40 -0
  659. package/dist/types/floorplan/PanoFloorplanRadarPlugin/index.d.ts +7 -0
  660. package/dist/types/floorplan/PanoFloorplanRadarPlugin/typing.d.ts +69 -0
  661. package/dist/types/floorplan/TopviewFloorplanPlugin/Controller.d.ts +68 -0
  662. package/dist/types/floorplan/TopviewFloorplanPlugin/index.d.ts +7 -0
  663. package/dist/types/floorplan/TopviewFloorplanPlugin/typing.d.ts +11 -0
  664. package/dist/types/floorplan/index.d.ts +14 -0
  665. package/dist/types/floorplan/typings/floorplanData.d.ts +171 -0
  666. package/dist/types/floorplan/typings/index.d.ts +163 -0
  667. package/dist/types/floorplan/utils/correctFiveState.d.ts +18 -0
  668. package/dist/types/floorplan/utils/formatData.d.ts +5 -0
  669. package/dist/types/floorplan/utils/formatPosition.d.ts +36 -0
  670. package/dist/types/floorplan/utils/styledFloorplan.d.ts +2 -0
  671. package/dist/types/public/components.d.ts +2 -0
  672. package/dist/types/public/floorplan.d.ts +2 -0
  673. package/dist/types/public/index.d.ts +91 -0
  674. package/dist/types/public/plugins/area-maker.d.ts +4 -0
  675. package/dist/types/public/plugins/camera-movement.d.ts +4 -0
  676. package/dist/types/public/plugins/cruise.d.ts +8 -0
  677. package/dist/types/public/plugins/css3d-render.d.ts +5 -0
  678. package/dist/types/public/plugins/current-pano-image.d.ts +4 -0
  679. package/dist/types/public/plugins/digital-performance-v2.d.ts +4 -0
  680. package/dist/types/public/plugins/digital-performance.d.ts +4 -0
  681. package/dist/types/public/plugins/fire-scene.d.ts +2 -0
  682. package/dist/types/public/plugins/guide-line.d.ts +7 -0
  683. package/dist/types/public/plugins/item-label.d.ts +4 -0
  684. package/dist/types/public/plugins/measure.d.ts +5 -0
  685. package/dist/types/public/plugins/model-chassis-compass.d.ts +4 -0
  686. package/dist/types/public/plugins/model-entry-door-guide.d.ts +4 -0
  687. package/dist/types/public/plugins/model-item-label.d.ts +4 -0
  688. package/dist/types/public/plugins/model-maker.d.ts +4 -0
  689. package/dist/types/public/plugins/model-room-label.d.ts +4 -0
  690. package/dist/types/public/plugins/model-tv-video.d.ts +4 -0
  691. package/dist/types/public/plugins/model-view.d.ts +4 -0
  692. package/dist/types/public/plugins/object3d-helper.d.ts +4 -0
  693. package/dist/types/public/plugins/pano-compass.d.ts +5 -0
  694. package/dist/types/public/plugins/pano-cursor-raycaster.d.ts +4 -0
  695. package/dist/types/public/plugins/pano-door-label.d.ts +4 -0
  696. package/dist/types/public/plugins/pano-measure.d.ts +4 -0
  697. package/dist/types/public/plugins/pano-ruler-pro.d.ts +4 -0
  698. package/dist/types/public/plugins/pano-ruler.d.ts +4 -0
  699. package/dist/types/public/plugins/pano-spatial-tag.d.ts +4 -0
  700. package/dist/types/public/plugins/pano-tag.d.ts +4 -0
  701. package/dist/types/public/plugins/pano-video.d.ts +4 -0
  702. package/dist/types/public/plugins/pipeline.d.ts +4 -0
  703. package/dist/types/public/plugins/sculpt.d.ts +12 -0
  704. package/dist/types/public/utils.d.ts +29 -0
  705. package/dist/types/shared-utils/CSS3DRender/CSS3DObject.d.ts +39 -0
  706. package/dist/types/shared-utils/CSS3DRender/CSS3DRenderer.d.ts +17 -0
  707. package/dist/types/shared-utils/CSS3DRender/OpacityMesh.d.ts +6 -0
  708. package/dist/types/shared-utils/CSS3DRender/index.d.ts +15 -0
  709. package/dist/types/shared-utils/Object3DHelper/Base/BaseController.d.ts +142 -0
  710. package/dist/types/shared-utils/Object3DHelper/Base/BaseHelper.d.ts +104 -0
  711. package/dist/types/shared-utils/Object3DHelper/Constants/color.d.ts +12 -0
  712. package/dist/types/shared-utils/Object3DHelper/Controller/BoundingBoxController.d.ts +7 -0
  713. package/dist/types/shared-utils/Object3DHelper/Controller/CSS3DScaleController.d.ts +7 -0
  714. package/dist/types/shared-utils/Object3DHelper/Controller/MoveController.d.ts +60 -0
  715. package/dist/types/shared-utils/Object3DHelper/Controller/RectangleScaleController.d.ts +45 -0
  716. package/dist/types/shared-utils/Object3DHelper/Controller/RotateController.d.ts +46 -0
  717. package/dist/types/shared-utils/Object3DHelper/Controller/ScaleController.d.ts +66 -0
  718. package/dist/types/shared-utils/Object3DHelper/Helper/BoundingBoxHelper.d.ts +16 -0
  719. package/dist/types/shared-utils/Object3DHelper/Helper/CSS3DScaleHelper.d.ts +43 -0
  720. package/dist/types/shared-utils/Object3DHelper/Helper/HTML/rectangleScaleDom.d.ts +11 -0
  721. package/dist/types/shared-utils/Object3DHelper/Helper/MoveHelper.d.ts +24 -0
  722. package/dist/types/shared-utils/Object3DHelper/Helper/Objects/ArrowGroup.d.ts +18 -0
  723. package/dist/types/shared-utils/Object3DHelper/Helper/Objects/CenterHandle.d.ts +23 -0
  724. package/dist/types/shared-utils/Object3DHelper/Helper/RotateHelper.d.ts +93 -0
  725. package/dist/types/shared-utils/Object3DHelper/Helper/ScaleHelper.d.ts +65 -0
  726. package/dist/types/shared-utils/Object3DHelper/Helper/index.d.ts +6 -0
  727. package/dist/types/shared-utils/Object3DHelper/index.d.ts +51 -0
  728. package/dist/types/shared-utils/Object3DHelper/typings/Hooks.d.ts +63 -0
  729. package/dist/types/shared-utils/Object3DHelper/typings/index.d.ts +45 -0
  730. package/dist/types/shared-utils/Object3DHelper/utils/calculateScaleByCamera.d.ts +5 -0
  731. package/dist/types/shared-utils/Object3DHelper/utils/calculateThreeMouse.d.ts +14 -0
  732. package/dist/types/shared-utils/Object3DHelper/utils/cameraHooks.d.ts +3 -0
  733. package/dist/types/shared-utils/Object3DHelper/utils/direction.d.ts +14 -0
  734. package/dist/types/shared-utils/Object3DHelper/utils/filterNotColinearPoints.d.ts +2 -0
  735. package/dist/types/shared-utils/Object3DHelper/utils/finiteNumber.d.ts +1 -0
  736. package/dist/types/shared-utils/Object3DHelper/utils/getMouseRaycaster.d.ts +5 -0
  737. package/dist/types/shared-utils/Object3DHelper/utils/getOrthographicCameraDirection.d.ts +8 -0
  738. package/dist/types/shared-utils/Object3DHelper/utils/getPoint.d.ts +3 -0
  739. package/dist/types/shared-utils/Object3DHelper/utils/getPoseFromCamera.d.ts +8 -0
  740. package/dist/types/shared-utils/Object3DHelper/utils/index.d.ts +9 -0
  741. package/dist/types/shared-utils/Object3DHelper/utils/negateScale.d.ts +2 -0
  742. package/dist/types/shared-utils/Object3DHelper/utils/normalPositionToPositions.d.ts +5 -0
  743. package/dist/types/shared-utils/Object3DHelper/utils/setObjectQuaternion.d.ts +8 -0
  744. package/dist/types/shared-utils/Object3DHelper/utils/solidGuide.d.ts +27 -0
  745. package/dist/types/shared-utils/Preloader.d.ts +6 -0
  746. package/dist/types/shared-utils/Subscribe.d.ts +69 -0
  747. package/dist/types/shared-utils/Utils/BaseUtil.d.ts +6 -0
  748. package/dist/types/shared-utils/Utils/FiveUtil.d.ts +9 -0
  749. package/dist/types/shared-utils/Utils/WorkUtil.d.ts +36 -0
  750. package/dist/types/shared-utils/animationFrame/BetterTween.d.ts +12 -0
  751. package/dist/types/shared-utils/animationFrame/index.d.ts +9 -0
  752. package/dist/types/shared-utils/changeModelCanvasOpacity.d.ts +2 -0
  753. package/dist/types/shared-utils/createCanvasTextTexture.d.ts +8 -0
  754. package/dist/types/shared-utils/createLine/index.d.ts +3 -0
  755. package/dist/types/shared-utils/dom/mouse.d.ts +1 -0
  756. package/dist/types/shared-utils/five/FiveDomEvents.d.ts +130 -0
  757. package/dist/types/shared-utils/five/FiveLine.d.ts +14 -0
  758. package/dist/types/shared-utils/five/FivePuppet.d.ts +65 -0
  759. package/dist/types/shared-utils/five/calculateThreeMouse.d.ts +11 -0
  760. package/dist/types/shared-utils/five/changeMode.d.ts +3 -0
  761. package/dist/types/shared-utils/five/fiveEveryReadyListener.d.ts +2 -0
  762. package/dist/types/shared-utils/five/fiveLoaded.d.ts +2 -0
  763. package/dist/types/shared-utils/five/fiveModelLoad.d.ts +9 -0
  764. package/dist/types/shared-utils/five/getFiveFromParentChain.d.ts +4 -0
  765. package/dist/types/shared-utils/five/getFiveModel.d.ts +2 -0
  766. package/dist/types/shared-utils/five/getFloorIndex.d.ts +4 -0
  767. package/dist/types/shared-utils/five/getFloorMesh.d.ts +3 -0
  768. package/dist/types/shared-utils/five/getPosition.d.ts +24 -0
  769. package/dist/types/shared-utils/five/getRaycasterByNdcPosition.d.ts +6 -0
  770. package/dist/types/shared-utils/five/index.d.ts +13 -0
  771. package/dist/types/shared-utils/five/initialCSS3DRender.d.ts +1 -0
  772. package/dist/types/shared-utils/five/lookObject.d.ts +15 -0
  773. package/dist/types/shared-utils/five/lookPoint.d.ts +11 -0
  774. package/dist/types/shared-utils/five/mode.d.ts +3 -0
  775. package/dist/types/shared-utils/five/transformPosition.d.ts +2 -0
  776. package/dist/types/shared-utils/five/vector3ToScreen.d.ts +5 -0
  777. package/dist/types/shared-utils/fontSize.d.ts +185 -0
  778. package/dist/types/shared-utils/getIntersectionFromEvent.d.ts +4 -0
  779. package/dist/types/shared-utils/getPointFromHammerEvent.d.ts +10 -0
  780. package/dist/types/shared-utils/getPxmm.d.ts +19 -0
  781. package/dist/types/shared-utils/index.d.ts +13 -0
  782. package/dist/types/shared-utils/math/Rectangle.d.ts +27 -0
  783. package/dist/types/shared-utils/math/convexHull.d.ts +5 -0
  784. package/dist/types/shared-utils/math/evenNumber.d.ts +3 -0
  785. package/dist/types/shared-utils/math/index.d.ts +4 -0
  786. package/dist/types/shared-utils/math/planimetry.d.ts +116 -0
  787. package/dist/types/shared-utils/math/pointsIsRectangle.d.ts +2 -0
  788. package/dist/types/shared-utils/object3d2LocalMatrix.d.ts +12 -0
  789. package/dist/types/shared-utils/positionToVector3.d.ts +17 -0
  790. package/dist/types/shared-utils/removeArrayItem.d.ts +7 -0
  791. package/dist/types/shared-utils/rendering/Particle.d.ts +103 -0
  792. package/dist/types/shared-utils/rendering/StandaloneRenderer.d.ts +33 -0
  793. package/dist/types/shared-utils/svelte/component.svelte.d.ts +6 -0
  794. package/dist/types/shared-utils/svelte/resizeObserver.d.ts +4 -0
  795. package/dist/types/shared-utils/svelte/resizeObserverGlobal.d.ts +11 -0
  796. package/dist/types/shared-utils/tag.d.ts +100 -0
  797. package/dist/types/shared-utils/three/CSS3DRenderer/index.d.ts +22 -0
  798. package/dist/types/shared-utils/three/Extras/Core/Interpolations.d.ts +3 -0
  799. package/dist/types/shared-utils/three/Extras/Curves/BezierCurve3.d.ts +13 -0
  800. package/dist/types/shared-utils/three/FBXLoader/index.d.ts +1 -0
  801. package/dist/types/shared-utils/three/FragmentTransparencyMaterial.d.ts +4 -0
  802. package/dist/types/shared-utils/three/GLTFLoader.d.ts +9 -0
  803. package/dist/types/shared-utils/three/IObject3D.d.ts +11 -0
  804. package/dist/types/shared-utils/three/Magnifier.d.ts +80 -0
  805. package/dist/types/shared-utils/three/PointDomHelper.d.ts +18 -0
  806. package/dist/types/shared-utils/three/PointSelector/index.d.ts +174 -0
  807. package/dist/types/shared-utils/three/PointSelector/utils/PointHelper.d.ts +31 -0
  808. package/dist/types/shared-utils/three/PointSelector/utils/PointHelper2.d.ts +31 -0
  809. package/dist/types/shared-utils/three/PointSelector/utils/PointSelectorHelper.d.ts +73 -0
  810. package/dist/types/shared-utils/three/PointSelector/utils/html.d.ts +4 -0
  811. package/dist/types/shared-utils/three/PointSelector/utils/typing.d.ts +8 -0
  812. package/dist/types/shared-utils/three/PointSprite.d.ts +6 -0
  813. package/dist/types/shared-utils/three/Quadrangle.d.ts +20 -0
  814. package/dist/types/shared-utils/three/addIfNotExists.d.ts +2 -0
  815. package/dist/types/shared-utils/three/applyObjectMatrixWorld.d.ts +4 -0
  816. package/dist/types/shared-utils/three/blink.d.ts +26 -0
  817. package/dist/types/shared-utils/three/boundingBox.d.ts +25 -0
  818. package/dist/types/shared-utils/three/centerPoint.d.ts +2 -0
  819. package/dist/types/shared-utils/three/closeVectors.d.ts +2 -0
  820. package/dist/types/shared-utils/three/core/Line2.d.ts +8 -0
  821. package/dist/types/shared-utils/three/core/LineGeometry.d.ts +6 -0
  822. package/dist/types/shared-utils/three/core/LineMaterial.d.ts +17 -0
  823. package/dist/types/shared-utils/three/core/LineMaterial2.d.ts +5 -0
  824. package/dist/types/shared-utils/three/core/LineSegments.d.ts +7 -0
  825. package/dist/types/shared-utils/three/core/Object3D.d.ts +8 -0
  826. package/dist/types/shared-utils/three/core/PrismAnimationGeometry.d.ts +25 -0
  827. package/dist/types/shared-utils/three/core/PrismGeometry.d.ts +22 -0
  828. package/dist/types/shared-utils/three/core/Raycaster.d.ts +3 -0
  829. package/dist/types/shared-utils/three/core/Sphere.d.ts +4 -0
  830. package/dist/types/shared-utils/three/createIntersectionFace.d.ts +2 -0
  831. package/dist/types/shared-utils/three/disposeOwnedObject.d.ts +3 -0
  832. package/dist/types/shared-utils/three/earcut3D.d.ts +2 -0
  833. package/dist/types/shared-utils/three/filterVisibleIntersections.d.ts +3 -0
  834. package/dist/types/shared-utils/three/generatePolygonGeometry.d.ts +9 -0
  835. package/dist/types/shared-utils/three/geometryUtil.d.ts +15 -0
  836. package/dist/types/shared-utils/three/getCoords.d.ts +9 -0
  837. package/dist/types/shared-utils/three/getIntersect.d.ts +28 -0
  838. package/dist/types/shared-utils/three/getNormal.d.ts +5 -0
  839. package/dist/types/shared-utils/three/getObjectVisible.d.ts +5 -0
  840. package/dist/types/shared-utils/three/getPositionsByObjectFit.d.ts +3 -0
  841. package/dist/types/shared-utils/three/getRaycaster.d.ts +6 -0
  842. package/dist/types/shared-utils/three/getTextureLoader.d.ts +6 -0
  843. package/dist/types/shared-utils/three/index.d.ts +19 -0
  844. package/dist/types/shared-utils/three/loadTexture.d.ts +6 -0
  845. package/dist/types/shared-utils/three/loadVideoTexture.d.ts +13 -0
  846. package/dist/types/shared-utils/three/recurveFindObject.d.ts +2 -0
  847. package/dist/types/shared-utils/three/setObjectOriginSortBounds.d.ts +3 -0
  848. package/dist/types/shared-utils/three/temp.d.ts +2 -0
  849. package/dist/types/shared-utils/three/transformPositionToVector3.d.ts +7 -0
  850. package/dist/types/shared-utils/three/transformToMeshBasicMaterial.d.ts +2 -0
  851. package/dist/types/shared-utils/three/vector3ToArray.d.ts +3 -0
  852. package/dist/types/shared-utils/three/vectorIsEqual.d.ts +2 -0
  853. package/dist/types/shared-utils/threex/domevents/index.d.ts +36 -0
  854. package/dist/types/shared-utils/translateMode/getDistanceFromModel.d.ts +2 -0
  855. package/dist/types/shared-utils/typescript/entries.d.ts +2 -0
  856. package/dist/types/shared-utils/vectorToCoordinate.d.ts +7 -0
  857. package/dist/types/typings/typings.d.ts +15 -0
  858. package/dist/types/typings/utils.type.d.ts +4 -0
  859. package/dist/utils.d.ts +2 -0
  860. package/dist/utils.js +53 -0
  861. package/dist/utils.js.map +1 -0
  862. package/package.json +191 -77
  863. package/components/index.js +0 -994
  864. package/dist/AreaMakerPlugin/Controller.d.ts +0 -96
  865. package/dist/AreaMakerPlugin/index.d.ts +0 -4
  866. package/dist/AreaMakerPlugin/typing.d.ts +0 -167
  867. package/dist/AreaMakerPlugin/utils/Item.d.ts +0 -137
  868. package/dist/CSS3DRenderPlugin/Controller.d.ts +0 -87
  869. package/dist/CSS3DRenderPlugin/index.d.ts +0 -6
  870. package/dist/CSS3DRenderPlugin/typing.d.ts +0 -26
  871. package/dist/CSS3DRenderPlugin/utils/generateBehindFiveElement.d.ts +0 -3
  872. package/dist/CSS3DRenderPlugin/utils/getAllCSS3DObject.d.ts +0 -3
  873. package/dist/CSS3DRenderPlugin/utils/index.d.ts +0 -3
  874. package/dist/CSS3DRenderPlugin/utils/positionToVector3.d.ts +0 -1
  875. package/dist/CSS3DRenderPlugin/utils/three/CSS3DGroup.d.ts +0 -21
  876. package/dist/CSS3DRenderPlugin/utils/three/CSS3DObject.d.ts +0 -55
  877. package/dist/CSS3DRenderPlugin/utils/three/CSS3DRender.d.ts +0 -184
  878. package/dist/CSS3DRenderPlugin/utils/three/CSS3DRenderer.d.ts +0 -1
  879. package/dist/CSS3DRenderPlugin/utils/three/CSS3DScene.d.ts +0 -12
  880. package/dist/CSS3DRenderPlugin/utils/three/CSS3DSprite.d.ts +0 -5
  881. package/dist/CameraMovementPlugin/CameraMovementPlugin.d.ts +0 -7
  882. package/dist/CameraMovementPlugin/index.d.ts +0 -5
  883. package/dist/CameraMovementPlugin/typing.d.ts +0 -68
  884. package/dist/CruisePlugin/BaseController.d.ts +0 -165
  885. package/dist/CruisePlugin/Move.d.ts +0 -56
  886. package/dist/CruisePlugin/Work.d.ts +0 -127
  887. package/dist/CruisePlugin/index.d.ts +0 -12
  888. package/dist/CruisePlugin/typing.d.ts +0 -157
  889. package/dist/CruisePlugin/utils/coordinatesToVector.d.ts +0 -7
  890. package/dist/CruisePlugin/utils/getFiveStateOnCurve.d.ts +0 -11
  891. package/dist/CurrentPanoImagePlugin/Controller.d.ts +0 -103
  892. package/dist/CurrentPanoImagePlugin/index.d.ts +0 -7
  893. package/dist/CurrentPanoImagePlugin/typings.d.ts +0 -58
  894. package/dist/DigitalPerformancePlugin/controller/index.d.ts +0 -232
  895. package/dist/DigitalPerformancePlugin/core/DigitalHuman.d.ts +0 -96
  896. package/dist/DigitalPerformancePlugin/core/DigitalPerformanceNameplate.d.ts +0 -115
  897. package/dist/DigitalPerformancePlugin/core/DigitalPlayground.d.ts +0 -47
  898. package/dist/DigitalPerformancePlugin/core/DigitalStateMachine.d.ts +0 -152
  899. package/dist/DigitalPerformancePlugin/core/Trace.d.ts +0 -9
  900. package/dist/DigitalPerformancePlugin/index.d.ts +0 -16
  901. package/dist/DigitalPerformancePlugin/typings/index.d.ts +0 -87
  902. package/dist/DigitalPerformanceV2Plugin/controller/index.d.ts +0 -401
  903. package/dist/DigitalPerformanceV2Plugin/core/CameraDirector.d.ts +0 -61
  904. package/dist/DigitalPerformanceV2Plugin/core/CameraSampler.d.ts +0 -53
  905. package/dist/DigitalPerformanceV2Plugin/core/CameraTrack.d.ts +0 -21
  906. package/dist/DigitalPerformanceV2Plugin/core/FiveModelCameraBridge.d.ts +0 -39
  907. package/dist/DigitalPerformanceV2Plugin/core/PerformanceClock.d.ts +0 -55
  908. package/dist/DigitalPerformanceV2Plugin/core/Playground.d.ts +0 -112
  909. package/dist/DigitalPerformanceV2Plugin/core/shared.d.ts +0 -4
  910. package/dist/DigitalPerformanceV2Plugin/index.d.ts +0 -11
  911. package/dist/DigitalPerformanceV2Plugin/typings/index.d.ts +0 -124
  912. package/dist/FireScenePlugin/FireControl.d.ts +0 -153
  913. package/dist/FireScenePlugin/SequencePlayer.d.ts +0 -41
  914. package/dist/FireScenePlugin/constants.d.ts +0 -28
  915. package/dist/FireScenePlugin/fire/config.d.ts +0 -10
  916. package/dist/FireScenePlugin/fire/index.d.ts +0 -6
  917. package/dist/FireScenePlugin/fire/managers/FireManager.d.ts +0 -76
  918. package/dist/FireScenePlugin/fire/type.d.ts +0 -51
  919. package/dist/FireScenePlugin/index.d.ts +0 -6
  920. package/dist/FireScenePlugin/smoke/config.d.ts +0 -8
  921. package/dist/FireScenePlugin/smoke/index.d.ts +0 -1
  922. package/dist/FireScenePlugin/smoke/managers/NormalSmokeManager.d.ts +0 -49
  923. package/dist/FireScenePlugin/smoke/managers/SmokeManager.d.ts +0 -89
  924. package/dist/FireScenePlugin/utils/areaBounds.d.ts +0 -14
  925. package/dist/FireScenePlugin/utils/particle.d.ts +0 -5
  926. package/dist/FireScenePlugin/utils/particleTexture.d.ts +0 -21
  927. package/dist/FireScenePlugin/utils/radialSpread.d.ts +0 -54
  928. package/dist/FireScenePlugin/utils/spread.d.ts +0 -17
  929. package/dist/GuideLinePlugin/Components/Tag.svelte.d.ts +0 -1
  930. package/dist/GuideLinePlugin/Controller.d.ts +0 -98
  931. package/dist/GuideLinePlugin/GuideLineItem.d.ts +0 -36
  932. package/dist/GuideLinePlugin/GuideLineModeItem.d.ts +0 -152
  933. package/dist/GuideLinePlugin/index.d.ts +0 -10
  934. package/dist/GuideLinePlugin/typing.d.ts +0 -199
  935. package/dist/GuideLinePlugin/utils/createLineGeometry.d.ts +0 -36
  936. package/dist/GuideLinePlugin/utils/createPath.d.ts +0 -3
  937. package/dist/ItemLabelPlugin/ItemLabelComponent.svelte.d.ts +0 -1
  938. package/dist/ItemLabelPlugin/ItemLabelItem.svelte.d.ts +0 -1
  939. package/dist/ItemLabelPlugin/Plugin.d.ts +0 -4
  940. package/dist/ItemLabelPlugin/events.type.d.ts +0 -9
  941. package/dist/ItemLabelPlugin/index.d.ts +0 -9
  942. package/dist/ItemLabelPlugin/typings.d.ts +0 -65
  943. package/dist/ItemLabelPlugin/utils/getStrokeLength.d.ts +0 -5
  944. package/dist/ItemLabelPlugin/utils/isImpacted.d.ts +0 -8
  945. package/dist/ItemLabelPlugin/utils/parseData.d.ts +0 -3
  946. package/dist/ItemLabelPlugin/utils/transform2RenderData.d.ts +0 -3
  947. package/dist/MeasurePlugin/Controller.d.ts +0 -167
  948. package/dist/MeasurePlugin/index.d.ts +0 -17
  949. package/dist/MeasurePlugin/utils/MeasureMesh.d.ts +0 -29
  950. package/dist/MeasurePlugin/utils/validatePolygon.d.ts +0 -2
  951. package/dist/ModelChassisCompassPlugin/Plugin.d.ts +0 -19
  952. package/dist/ModelChassisCompassPlugin/index.d.ts +0 -4
  953. package/dist/ModelEntryDoorGuidePlugin/Plugin.d.ts +0 -27
  954. package/dist/ModelEntryDoorGuidePlugin/index.d.ts +0 -4
  955. package/dist/ModelItemLabelPlugin/ItemLabelComponent.svelte.d.ts +0 -1
  956. package/dist/ModelItemLabelPlugin/ItemLabelItem.svelte.d.ts +0 -1
  957. package/dist/ModelItemLabelPlugin/ModelItemLabelPlugin.d.ts +0 -4
  958. package/dist/ModelItemLabelPlugin/events.type.d.ts +0 -9
  959. package/dist/ModelItemLabelPlugin/index.d.ts +0 -9
  960. package/dist/ModelItemLabelPlugin/typings.d.ts +0 -56
  961. package/dist/ModelItemLabelPlugin/utils/parseData.d.ts +0 -3
  962. package/dist/ModelMakerPlugin/Controller.d.ts +0 -194
  963. package/dist/ModelMakerPlugin/index.d.ts +0 -9
  964. package/dist/ModelMakerPlugin/item/baseItem.d.ts +0 -68
  965. package/dist/ModelMakerPlugin/item/boxItem.d.ts +0 -20
  966. package/dist/ModelMakerPlugin/item/polygonItem.d.ts +0 -19
  967. package/dist/ModelMakerPlugin/item/prismItem.d.ts +0 -18
  968. package/dist/ModelMakerPlugin/typings/config.d.ts +0 -26
  969. package/dist/ModelMakerPlugin/typings/index.d.ts +0 -52
  970. package/dist/ModelMakerPlugin/utils/Text.svelte.d.ts +0 -1
  971. package/dist/ModelMakerPlugin/utils/getTagOcclusionObjects.d.ts +0 -4
  972. package/dist/ModelMakerPlugin/utils/tagRenderer.d.ts +0 -3
  973. package/dist/ModelRoomLabelPlugin/Controller.d.ts +0 -38
  974. package/dist/ModelRoomLabelPlugin/RoomLabelItem.svelte.d.ts +0 -1
  975. package/dist/ModelRoomLabelPlugin/RoomLabelItems.svelte.d.ts +0 -1
  976. package/dist/ModelRoomLabelPlugin/index.d.ts +0 -12
  977. package/dist/ModelRoomLabelPlugin/utils/parseData.d.ts +0 -3
  978. package/dist/ModelTVVideoPlugin/Plugin.d.ts +0 -4
  979. package/dist/ModelTVVideoPlugin/index.d.ts +0 -5
  980. package/dist/ModelTVVideoPlugin/typings.d.ts +0 -27
  981. package/dist/ModelTVVideoPlugin/utils/parseData.d.ts +0 -3
  982. package/dist/ModelViewPlugin/Plugin.d.ts +0 -42
  983. package/dist/ModelViewPlugin/index.d.ts +0 -4
  984. package/dist/Object3DHelperPlugin/Controller.d.ts +0 -153
  985. package/dist/Object3DHelperPlugin/FiveControllerWrapper.d.ts +0 -23
  986. package/dist/Object3DHelperPlugin/index.d.ts +0 -6
  987. package/dist/PanoCompassPlugin/Controller.d.ts +0 -88
  988. package/dist/PanoCompassPlugin/getRoomInfoInstance.d.ts +0 -8
  989. package/dist/PanoCompassPlugin/index.d.ts +0 -7
  990. package/dist/PanoCompassPlugin/typings.d.ts +0 -58
  991. package/dist/PanoCursorRaycasterPlugin/index.d.ts +0 -48
  992. package/dist/PanoDoorLabelPlugin/Controller.d.ts +0 -42
  993. package/dist/PanoDoorLabelPlugin/DoorLabelItem.svelte.d.ts +0 -1
  994. package/dist/PanoDoorLabelPlugin/index.d.ts +0 -7
  995. package/dist/PanoDoorLabelPlugin/typings.d.ts +0 -38
  996. package/dist/PanoDoorLabelPlugin/utils.d.ts +0 -5
  997. package/dist/PanoMeasurePlugin/Components/Common/CircleButton.svelte.d.ts +0 -1
  998. package/dist/PanoMeasurePlugin/Components/Common/Exit.svelte.d.ts +0 -1
  999. package/dist/PanoMeasurePlugin/Components/Common/Switcher0.svelte.d.ts +0 -1
  1000. package/dist/PanoMeasurePlugin/Components/Common/Switcher1.svelte.d.ts +0 -1
  1001. package/dist/PanoMeasurePlugin/Components/Controller0.svelte.d.ts +0 -1
  1002. package/dist/PanoMeasurePlugin/Components/Controller1.svelte.d.ts +0 -1
  1003. package/dist/PanoMeasurePlugin/Components/Tip.svelte.d.ts +0 -1
  1004. package/dist/PanoMeasurePlugin/Controller/BaseController.d.ts +0 -58
  1005. package/dist/PanoMeasurePlugin/Controller/EditController.d.ts +0 -58
  1006. package/dist/PanoMeasurePlugin/Controller/MixedController.d.ts +0 -38
  1007. package/dist/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +0 -12
  1008. package/dist/PanoMeasurePlugin/Controller/ViewController.d.ts +0 -13
  1009. package/dist/PanoMeasurePlugin/Controller/WatchController.d.ts +0 -33
  1010. package/dist/PanoMeasurePlugin/Controller/index.d.ts +0 -115
  1011. package/dist/PanoMeasurePlugin/Model/area.d.ts +0 -75
  1012. package/dist/PanoMeasurePlugin/Model/index.d.ts +0 -45
  1013. package/dist/PanoMeasurePlugin/Model/line.d.ts +0 -39
  1014. package/dist/PanoMeasurePlugin/Model/point.d.ts +0 -10
  1015. package/dist/PanoMeasurePlugin/Model/polygon.d.ts +0 -14
  1016. package/dist/PanoMeasurePlugin/Model/polyline.d.ts +0 -47
  1017. package/dist/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +0 -30
  1018. package/dist/PanoMeasurePlugin/Modules/GuideController.d.ts +0 -26
  1019. package/dist/PanoMeasurePlugin/Modules/Magnifier.d.ts +0 -19
  1020. package/dist/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +0 -2
  1021. package/dist/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +0 -19
  1022. package/dist/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +0 -12
  1023. package/dist/PanoMeasurePlugin/Modules/UIController/index.d.ts +0 -34
  1024. package/dist/PanoMeasurePlugin/Modules/UIController/mobileHTML.d.ts +0 -4
  1025. package/dist/PanoMeasurePlugin/Modules/UIController/mobileMainBtnController.d.ts +0 -15
  1026. package/dist/PanoMeasurePlugin/Modules/rangePiece/html.d.ts +0 -4
  1027. package/dist/PanoMeasurePlugin/Modules/rangePiece/index.d.ts +0 -42
  1028. package/dist/PanoMeasurePlugin/index.d.ts +0 -14
  1029. package/dist/PanoMeasurePlugin/typings/data.d.ts +0 -58
  1030. package/dist/PanoMeasurePlugin/typings/event.type.d.ts +0 -55
  1031. package/dist/PanoMeasurePlugin/typings/index.d.ts +0 -15
  1032. package/dist/PanoMeasurePlugin/utils/constants.d.ts +0 -4
  1033. package/dist/PanoMeasurePlugin/utils/dom/areaDom.d.ts +0 -22
  1034. package/dist/PanoMeasurePlugin/utils/dom/base.d.ts +0 -29
  1035. package/dist/PanoMeasurePlugin/utils/dom/distanceItem.d.ts +0 -34
  1036. package/dist/PanoMeasurePlugin/utils/findClosestPoint.d.ts +0 -10
  1037. package/dist/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +0 -3
  1038. package/dist/PanoMeasurePlugin/utils/line.d.ts +0 -18
  1039. package/dist/PanoMeasurePlugin/utils/math.d.ts +0 -17
  1040. package/dist/PanoMeasurePlugin/utils/mouseGroup.d.ts +0 -7
  1041. package/dist/PanoMeasurePlugin/utils/ndc2Screen.d.ts +0 -6
  1042. package/dist/PanoRulerPlugin/Plugin.d.ts +0 -34
  1043. package/dist/PanoRulerPlugin/index.d.ts +0 -5
  1044. package/dist/PanoRulerProPlugin/Controller.d.ts +0 -15
  1045. package/dist/PanoRulerProPlugin/RulerItem.svelte.d.ts +0 -1
  1046. package/dist/PanoRulerProPlugin/RulerItems.svelte.d.ts +0 -1
  1047. package/dist/PanoRulerProPlugin/index.d.ts +0 -8
  1048. package/dist/PanoSpatialTagPlugin/Components/origins.svelte.d.ts +0 -1
  1049. package/dist/PanoSpatialTagPlugin/Components/tag.svelte.d.ts +0 -1
  1050. package/dist/PanoSpatialTagPlugin/Plugin.d.ts +0 -35
  1051. package/dist/PanoSpatialTagPlugin/index.d.ts +0 -5
  1052. package/dist/PanoSpatialTagPlugin/store.d.ts +0 -1
  1053. package/dist/PanoSpatialTagPlugin/typings.d.ts +0 -40
  1054. package/dist/PanoTagPlugin/Archive/deprecated.d.ts +0 -73
  1055. package/dist/PanoTagPlugin/Components/Common/Arrow.svelte.d.ts +0 -1
  1056. package/dist/PanoTagPlugin/Components/Common/Audio.svelte.d.ts +0 -1
  1057. package/dist/PanoTagPlugin/Components/Common/AudioPlayer.svelte.d.ts +0 -1
  1058. package/dist/PanoTagPlugin/Components/Common/Icon/Icon.svelte.d.ts +0 -1
  1059. package/dist/PanoTagPlugin/Components/Common/Icon/PanoramaIcon.svelte.d.ts +0 -1
  1060. package/dist/PanoTagPlugin/Components/Common/Icon/animationUtils.d.ts +0 -9
  1061. package/dist/PanoTagPlugin/Components/Common/Icon/audioIcon.svelte.d.ts +0 -1
  1062. package/dist/PanoTagPlugin/Components/Common/Line/Polyline.svelte.d.ts +0 -1
  1063. package/dist/PanoTagPlugin/Components/Common/Line/Straight.svelte.d.ts +0 -1
  1064. package/dist/PanoTagPlugin/Components/Common/Media.svelte.d.ts +0 -1
  1065. package/dist/PanoTagPlugin/Components/Common/MediaItem.svelte.d.ts +0 -1
  1066. package/dist/PanoTagPlugin/Components/Common/Shadow.svelte.d.ts +0 -1
  1067. package/dist/PanoTagPlugin/Components/Common/TagPoint.svelte.d.ts +0 -1
  1068. package/dist/PanoTagPlugin/Components/Common/TagPopover/ArrowRightIcon.svelte.d.ts +0 -1
  1069. package/dist/PanoTagPlugin/Components/Common/TagPopover/PanoramaIcon.svelte.d.ts +0 -1
  1070. package/dist/PanoTagPlugin/Components/Common/TagPopover/PopoverContent.svelte.d.ts +0 -1
  1071. package/dist/PanoTagPlugin/Components/Common/TagPopover/ShareIcon.svelte.d.ts +0 -1
  1072. package/dist/PanoTagPlugin/Components/Common/TagPopover/TagPopoverArrow.svelte.d.ts +0 -1
  1073. package/dist/PanoTagPlugin/Components/Common/TagPopover/TagPopoverToolBar.svelte.d.ts +0 -1
  1074. package/dist/PanoTagPlugin/Components/Common/TagPopover/TagPopup.svelte.d.ts +0 -1
  1075. package/dist/PanoTagPlugin/Components/Common/TagPopover/index.svelte.d.ts +0 -1
  1076. package/dist/PanoTagPlugin/Components/Common/Text/FlyMText.svelte.d.ts +0 -1
  1077. package/dist/PanoTagPlugin/Components/Common/Text/FlyText.svelte.d.ts +0 -1
  1078. package/dist/PanoTagPlugin/Components/Common/Text/MText.svelte.d.ts +0 -1
  1079. package/dist/PanoTagPlugin/Components/Common/VideoIcon.svelte.d.ts +0 -1
  1080. package/dist/PanoTagPlugin/Components/Tag/AudioTag/AudioPlaneTag.svelte.d.ts +0 -1
  1081. package/dist/PanoTagPlugin/Components/Tag/AudioTag/AudioPoint.svelte.d.ts +0 -1
  1082. package/dist/PanoTagPlugin/Components/Tag/AudioTag/AudioTag.svelte.d.ts +0 -1
  1083. package/dist/PanoTagPlugin/Components/Tag/AudioTag/index.svelte.d.ts +0 -1
  1084. package/dist/PanoTagPlugin/Components/Tag/CustomTag.svelte.d.ts +0 -1
  1085. package/dist/PanoTagPlugin/Components/Tag/ImageTextTag.svelte.d.ts +0 -1
  1086. package/dist/PanoTagPlugin/Components/Tag/LinkTag.svelte.d.ts +0 -1
  1087. package/dist/PanoTagPlugin/Components/Tag/MarketingTag.svelte.d.ts +0 -1
  1088. package/dist/PanoTagPlugin/Components/Tag/MediaPlane.svelte.d.ts +0 -1
  1089. package/dist/PanoTagPlugin/Components/Tag/PanoramaTag.svelte.d.ts +0 -1
  1090. package/dist/PanoTagPlugin/Components/Tag/TextTag/TextPlaneTag.svelte.d.ts +0 -1
  1091. package/dist/PanoTagPlugin/Components/Tag/TextTag/TextTag.svelte.d.ts +0 -1
  1092. package/dist/PanoTagPlugin/Components/Tag/TextTag/index.svelte.d.ts +0 -1
  1093. package/dist/PanoTagPlugin/Components/Tag/index.svelte.d.ts +0 -1
  1094. package/dist/PanoTagPlugin/Components/TagContainer.svelte.d.ts +0 -1
  1095. package/dist/PanoTagPlugin/Components/TagItem.svelte.d.ts +0 -1
  1096. package/dist/PanoTagPlugin/controller/Tag/BaseTag.d.ts +0 -282
  1097. package/dist/PanoTagPlugin/controller/Tag/BoxTag.d.ts +0 -119
  1098. package/dist/PanoTagPlugin/controller/Tag/MaskTag.d.ts +0 -258
  1099. package/dist/PanoTagPlugin/controller/Tag/MaskTag.shaders.d.ts +0 -10
  1100. package/dist/PanoTagPlugin/controller/Tag/ModelTag.d.ts +0 -15
  1101. package/dist/PanoTagPlugin/controller/Tag/PlaneTag.d.ts +0 -51
  1102. package/dist/PanoTagPlugin/controller/Tag/PointTag.d.ts +0 -46
  1103. package/dist/PanoTagPlugin/controller/Tag/PolygonTag.d.ts +0 -112
  1104. package/dist/PanoTagPlugin/controller/TagRender.d.ts +0 -36
  1105. package/dist/PanoTagPlugin/controller/TagUtil.d.ts +0 -93
  1106. package/dist/PanoTagPlugin/controller/index.d.ts +0 -227
  1107. package/dist/PanoTagPlugin/index.d.ts +0 -8
  1108. package/dist/PanoTagPlugin/tag.config.d.ts +0 -7
  1109. package/dist/PanoTagPlugin/typings/controller.d.ts +0 -112
  1110. package/dist/PanoTagPlugin/typings/index.d.ts +0 -8
  1111. package/dist/PanoTagPlugin/typings/tag/Tag.d.ts +0 -64
  1112. package/dist/PanoTagPlugin/typings/tag/TagConfig.d.ts +0 -422
  1113. package/dist/PanoTagPlugin/typings/tag/TagData.d.ts +0 -176
  1114. package/dist/PanoTagPlugin/typings/tag/TagInstance.d.ts +0 -8
  1115. package/dist/PanoTagPlugin/typings/tag/Utils.d.ts +0 -164
  1116. package/dist/PanoTagPlugin/utils/Cache.d.ts +0 -17
  1117. package/dist/PanoTagPlugin/utils/DebugUtil.d.ts +0 -12
  1118. package/dist/PanoTagPlugin/utils/addDebugPoints.d.ts +0 -3
  1119. package/dist/PanoTagPlugin/utils/audio/SharedAudio.d.ts +0 -31
  1120. package/dist/PanoTagPlugin/utils/debounce.d.ts +0 -8
  1121. package/dist/PanoTagPlugin/utils/getImageInfo.d.ts +0 -14
  1122. package/dist/PanoTagPlugin/utils/index.d.ts +0 -10
  1123. package/dist/PanoTagPlugin/utils/model/mediaPlane.d.ts +0 -118
  1124. package/dist/PanoTagPlugin/utils/normalPositionToPositions.d.ts +0 -2
  1125. package/dist/PanoTagPlugin/utils/planeNormal.d.ts +0 -4
  1126. package/dist/PanoTagPlugin/utils/sculptDataToBoxPosition.d.ts +0 -6
  1127. package/dist/PanoTagPlugin/utils/tag/adaptConfig.d.ts +0 -2
  1128. package/dist/PanoTagPlugin/utils/tag/calculateTagConfig.d.ts +0 -7
  1129. package/dist/PanoTagPlugin/utils/tag/canAutoPlayByOcclusion.d.ts +0 -17
  1130. package/dist/PanoTagPlugin/utils/tag/format.d.ts +0 -5
  1131. package/dist/PanoTagPlugin/utils/tag/getRaycasterStartPosition.d.ts +0 -12
  1132. package/dist/PanoTagPlugin/utils/tag/tagCheck.d.ts +0 -19
  1133. package/dist/PanoTagPlugin/utils/tagPosition.d.ts +0 -13
  1134. package/dist/PanoVideoPlugin/Controller.d.ts +0 -59
  1135. package/dist/PanoVideoPlugin/VideoMeshController.d.ts +0 -129
  1136. package/dist/PanoVideoPlugin/index.d.ts +0 -21
  1137. package/dist/PanoVideoPlugin/typings.d.ts +0 -70
  1138. package/dist/PanoVideoPlugin/utils/index.d.ts +0 -9
  1139. package/dist/PanoVideoPlugin/utils/shader.d.ts +0 -2
  1140. package/dist/PipelinePlugin/Controller.d.ts +0 -108
  1141. package/dist/PipelinePlugin/index.d.ts +0 -6
  1142. package/dist/PipelinePlugin/typing/index.d.ts +0 -79
  1143. package/dist/PipelinePlugin/utils/Objects/FlowPipe.d.ts +0 -34
  1144. package/dist/PipelinePlugin/utils/Objects/Pipe.d.ts +0 -49
  1145. package/dist/PipelinePlugin/utils/formatData.d.ts +0 -12
  1146. package/dist/Sculpt/Editors/BoxMeshEditor.d.ts +0 -5
  1147. package/dist/Sculpt/Editors/CircleMeshEditor.d.ts +0 -5
  1148. package/dist/Sculpt/Editors/CylinderMeshEditor.d.ts +0 -5
  1149. package/dist/Sculpt/Editors/PrismMeshEditor.d.ts +0 -5
  1150. package/dist/Sculpt/Editors/RectangleMeshEditor.d.ts +0 -5
  1151. package/dist/Sculpt/Meshes/Area.d.ts +0 -9
  1152. package/dist/Sculpt/Meshes/Box.d.ts +0 -18
  1153. package/dist/Sculpt/Meshes/Circle.d.ts +0 -24
  1154. package/dist/Sculpt/Meshes/CircleWithEdge.d.ts +0 -11
  1155. package/dist/Sculpt/Meshes/Cylinder.d.ts +0 -36
  1156. package/dist/Sculpt/Meshes/Line.d.ts +0 -59
  1157. package/dist/Sculpt/Meshes/LineWithDots.d.ts +0 -52
  1158. package/dist/Sculpt/Meshes/Point.d.ts +0 -41
  1159. package/dist/Sculpt/Meshes/Polygon.d.ts +0 -53
  1160. package/dist/Sculpt/Meshes/PolygonWithEdge.d.ts +0 -33
  1161. package/dist/Sculpt/Meshes/Polyline.d.ts +0 -47
  1162. package/dist/Sculpt/Meshes/Prism.d.ts +0 -98
  1163. package/dist/Sculpt/Meshes/Rectangle.d.ts +0 -19
  1164. package/dist/Sculpt/Meshes/RectangleWithEdge.d.ts +0 -29
  1165. package/dist/Sculpt/Objects/Base/Editor.d.ts +0 -54
  1166. package/dist/Sculpt/Objects/Base/index.d.ts +0 -125
  1167. package/dist/Sculpt/Objects/Box/index.d.ts +0 -48
  1168. package/dist/Sculpt/Objects/Circle/index.d.ts +0 -32
  1169. package/dist/Sculpt/Objects/Cylinder/index.d.ts +0 -34
  1170. package/dist/Sculpt/Objects/Line/Editor.d.ts +0 -22
  1171. package/dist/Sculpt/Objects/Line/index.d.ts +0 -48
  1172. package/dist/Sculpt/Objects/Point/Editor.d.ts +0 -8
  1173. package/dist/Sculpt/Objects/Point/index.d.ts +0 -39
  1174. package/dist/Sculpt/Objects/Polygon/Editor.d.ts +0 -20
  1175. package/dist/Sculpt/Objects/Polygon/index.d.ts +0 -80
  1176. package/dist/Sculpt/Objects/Polyline/Editor.d.ts +0 -8
  1177. package/dist/Sculpt/Objects/Polyline/index.d.ts +0 -47
  1178. package/dist/Sculpt/Objects/Prism/index.d.ts +0 -57
  1179. package/dist/Sculpt/Objects/Rectangle/index.d.ts +0 -48
  1180. package/dist/Sculpt/index.d.ts +0 -266
  1181. package/dist/Sculpt/typings/index.d.ts +0 -72
  1182. package/dist/Sculpt/typings/style.d.ts +0 -108
  1183. package/dist/Sculpt/typings/utils.type.d.ts +0 -16
  1184. package/dist/Sculpt/utils/Modules/Global.d.ts +0 -22
  1185. package/dist/Sculpt/utils/data.d.ts +0 -7
  1186. package/dist/Sculpt/utils/export.d.ts +0 -25
  1187. package/dist/Sculpt/utils/removeAllTag.d.ts +0 -2
  1188. package/dist/Sculpt/utils/renderDom.d.ts +0 -19
  1189. package/dist/Sculpt/utils/sortPositionsByCameraPosition.d.ts +0 -5
  1190. package/dist/Sculpt/utils/three/ColoredMesh.d.ts +0 -33
  1191. package/dist/Sculpt/utils/three/RectangleGeometry.d.ts +0 -6
  1192. package/dist/Sculpt/utils/three/rayOnLine.d.ts +0 -12
  1193. package/dist/base/BasePlugin.d.ts +0 -124
  1194. package/dist/base/BasePluginWithData.d.ts +0 -21
  1195. package/dist/components/AreaLabel/LabelItem.svelte.d.ts +0 -1
  1196. package/dist/components/PaintBrush/Controller.d.ts +0 -43
  1197. package/dist/components/PaintBrush/index.d.ts +0 -27
  1198. package/dist/components/PaintBrush/style.d.ts +0 -2
  1199. package/dist/components/PaintBrush/typings.d.ts +0 -58
  1200. package/dist/components/index.d.ts +0 -2
  1201. package/dist/floorplan/Components/BaseImage.svelte.d.ts +0 -1
  1202. package/dist/floorplan/Components/Camera.svelte.d.ts +0 -1
  1203. package/dist/floorplan/Components/Compass.svelte.d.ts +0 -1
  1204. package/dist/floorplan/Components/CurrentFloor.svelte.d.ts +0 -1
  1205. package/dist/floorplan/Components/Items/Item.svelte.d.ts +0 -1
  1206. package/dist/floorplan/Components/Items/Items.svelte.d.ts +0 -1
  1207. package/dist/floorplan/Components/Main.svelte.d.ts +0 -1
  1208. package/dist/floorplan/Components/MissingFloor.svelte.d.ts +0 -1
  1209. package/dist/floorplan/Components/Normalmage.svelte.d.ts +0 -1
  1210. package/dist/floorplan/Components/RoomHighlight/Room.svelte.d.ts +0 -1
  1211. package/dist/floorplan/Components/RoomHighlight/RoomHighlight.svelte.d.ts +0 -1
  1212. package/dist/floorplan/Components/RoomLabels/RoomLabel.svelte.d.ts +0 -1
  1213. package/dist/floorplan/Components/RoomLabels/RoomLabels.svelte.d.ts +0 -1
  1214. package/dist/floorplan/Components/RoomMaterials/RoomMaterial.svelte.d.ts +0 -1
  1215. package/dist/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte.d.ts +0 -1
  1216. package/dist/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte.d.ts +0 -1
  1217. package/dist/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte.d.ts +0 -1
  1218. package/dist/floorplan/Components/RoomMaterials/RoomTriangle.svelte.d.ts +0 -1
  1219. package/dist/floorplan/Components/RuleLabels/RuleItem.svelte.d.ts +0 -1
  1220. package/dist/floorplan/Components/RuleLabels/RuleLabels.svelte.d.ts +0 -1
  1221. package/dist/floorplan/Components/StyledImage.svelte.d.ts +0 -1
  1222. package/dist/floorplan/Components/SvgImage.svelte.d.ts +0 -1
  1223. package/dist/floorplan/FloorplanGuidePlugin/Components/Camera.svelte.d.ts +0 -1
  1224. package/dist/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +0 -1
  1225. package/dist/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +0 -1
  1226. package/dist/floorplan/FloorplanGuidePlugin/Components/FloorplanCompass.svelte.d.ts +0 -1
  1227. package/dist/floorplan/FloorplanGuidePlugin/Components/Main.svelte.d.ts +0 -1
  1228. package/dist/floorplan/FloorplanGuidePlugin/Components/ObserverDots.svelte.d.ts +0 -1
  1229. package/dist/floorplan/FloorplanGuidePlugin/Components/RoomLabelItem.svelte.d.ts +0 -1
  1230. package/dist/floorplan/FloorplanGuidePlugin/Components/RoomLabels.svelte.d.ts +0 -1
  1231. package/dist/floorplan/FloorplanGuidePlugin/Controller.d.ts +0 -53
  1232. package/dist/floorplan/FloorplanGuidePlugin/index.d.ts +0 -7
  1233. package/dist/floorplan/FloorplanGuidePlugin/typing.d.ts +0 -196
  1234. package/dist/floorplan/MapviewFloorplanPlugin/Controller.d.ts +0 -128
  1235. package/dist/floorplan/MapviewFloorplanPlugin/index.d.ts +0 -7
  1236. package/dist/floorplan/MapviewFloorplanPlugin/typing.d.ts +0 -1
  1237. package/dist/floorplan/ModelFloorplanPlugin/Controller.d.ts +0 -121
  1238. package/dist/floorplan/ModelFloorplanPlugin/index.d.ts +0 -7
  1239. package/dist/floorplan/ModelFloorplanPlugin/typing.d.ts +0 -1
  1240. package/dist/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte.d.ts +0 -1
  1241. package/dist/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +0 -1
  1242. package/dist/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +0 -1
  1243. package/dist/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte.d.ts +0 -1
  1244. package/dist/floorplan/PanoFloorplanRadarPlugin/Controller.d.ts +0 -40
  1245. package/dist/floorplan/PanoFloorplanRadarPlugin/index.d.ts +0 -7
  1246. package/dist/floorplan/PanoFloorplanRadarPlugin/typing.d.ts +0 -70
  1247. package/dist/floorplan/TopviewFloorplanPlugin/Controller.d.ts +0 -74
  1248. package/dist/floorplan/TopviewFloorplanPlugin/index.d.ts +0 -7
  1249. package/dist/floorplan/TopviewFloorplanPlugin/typing.d.ts +0 -11
  1250. package/dist/floorplan/index.d.ts +0 -8
  1251. package/dist/floorplan/typings/floorplanData.d.ts +0 -176
  1252. package/dist/floorplan/typings/index.d.ts +0 -164
  1253. package/dist/floorplan/utils/correctFiveState.d.ts +0 -18
  1254. package/dist/floorplan/utils/formatData.d.ts +0 -5
  1255. package/dist/floorplan/utils/formatPosition.d.ts +0 -36
  1256. package/dist/floorplan/utils/styledFloorplan.d.ts +0 -2
  1257. package/dist/index.cjs.js +0 -1715
  1258. package/dist/index.umd.js +0 -1715
  1259. package/dist/shared-utils/CSS3DRender/CSS3DObject.d.ts +0 -37
  1260. package/dist/shared-utils/CSS3DRender/CSS3DRenderer.d.ts +0 -16
  1261. package/dist/shared-utils/CSS3DRender/OpacityMesh.d.ts +0 -6
  1262. package/dist/shared-utils/CSS3DRender/index.d.ts +0 -41
  1263. package/dist/shared-utils/Object3DHelper/Base/BaseController.d.ts +0 -142
  1264. package/dist/shared-utils/Object3DHelper/Base/BaseHelper.d.ts +0 -105
  1265. package/dist/shared-utils/Object3DHelper/Constants/color.d.ts +0 -12
  1266. package/dist/shared-utils/Object3DHelper/Controller/BoundingBoxController.d.ts +0 -7
  1267. package/dist/shared-utils/Object3DHelper/Controller/CSS3DScaleController.d.ts +0 -7
  1268. package/dist/shared-utils/Object3DHelper/Controller/MoveController.d.ts +0 -60
  1269. package/dist/shared-utils/Object3DHelper/Controller/RectangleScaleController.d.ts +0 -45
  1270. package/dist/shared-utils/Object3DHelper/Controller/RotateController.d.ts +0 -46
  1271. package/dist/shared-utils/Object3DHelper/Controller/ScaleController.d.ts +0 -66
  1272. package/dist/shared-utils/Object3DHelper/Helper/BoundingBoxHelper.d.ts +0 -16
  1273. package/dist/shared-utils/Object3DHelper/Helper/CSS3DScaleHelper.d.ts +0 -43
  1274. package/dist/shared-utils/Object3DHelper/Helper/HTML/rectangleScaleDom.d.ts +0 -11
  1275. package/dist/shared-utils/Object3DHelper/Helper/MoveHelper.d.ts +0 -24
  1276. package/dist/shared-utils/Object3DHelper/Helper/Objects/ArrowGroup.d.ts +0 -18
  1277. package/dist/shared-utils/Object3DHelper/Helper/Objects/CenterHandle.d.ts +0 -23
  1278. package/dist/shared-utils/Object3DHelper/Helper/RotateHelper.d.ts +0 -93
  1279. package/dist/shared-utils/Object3DHelper/Helper/ScaleHelper.d.ts +0 -65
  1280. package/dist/shared-utils/Object3DHelper/Helper/index.d.ts +0 -5
  1281. package/dist/shared-utils/Object3DHelper/index.d.ts +0 -52
  1282. package/dist/shared-utils/Object3DHelper/typings/Hooks.d.ts +0 -63
  1283. package/dist/shared-utils/Object3DHelper/typings/index.d.ts +0 -45
  1284. package/dist/shared-utils/Object3DHelper/utils/calculateScaleByCamera.d.ts +0 -5
  1285. package/dist/shared-utils/Object3DHelper/utils/calculateThreeMouse.d.ts +0 -14
  1286. package/dist/shared-utils/Object3DHelper/utils/cameraHooks.d.ts +0 -2
  1287. package/dist/shared-utils/Object3DHelper/utils/direction.d.ts +0 -14
  1288. package/dist/shared-utils/Object3DHelper/utils/filterNotColinearPoints.d.ts +0 -2
  1289. package/dist/shared-utils/Object3DHelper/utils/getMouseRaycaster.d.ts +0 -5
  1290. package/dist/shared-utils/Object3DHelper/utils/getOrthographicCameraDirection.d.ts +0 -8
  1291. package/dist/shared-utils/Object3DHelper/utils/getPoseFromCamera.d.ts +0 -8
  1292. package/dist/shared-utils/Object3DHelper/utils/index.d.ts +0 -8
  1293. package/dist/shared-utils/Object3DHelper/utils/normalPositionToPositions.d.ts +0 -5
  1294. package/dist/shared-utils/Object3DHelper/utils/setObjectQuaternion.d.ts +0 -8
  1295. package/dist/shared-utils/Object3DHelper/utils/solidGuide.d.ts +0 -27
  1296. package/dist/shared-utils/Subscribe.d.ts +0 -68
  1297. package/dist/shared-utils/Utils/BaseUtil.d.ts +0 -6
  1298. package/dist/shared-utils/Utils/FiveUtil.d.ts +0 -11
  1299. package/dist/shared-utils/Utils/WorkUtil.d.ts +0 -36
  1300. package/dist/shared-utils/animationFrame/BetterTween.d.ts +0 -12
  1301. package/dist/shared-utils/animationFrame/index.d.ts +0 -17
  1302. package/dist/shared-utils/changeModelCanvasOpacity.d.ts +0 -2
  1303. package/dist/shared-utils/createCanvasTextTexture.d.ts +0 -8
  1304. package/dist/shared-utils/createLine/index.d.ts +0 -3
  1305. package/dist/shared-utils/exports.d.ts +0 -2
  1306. package/dist/shared-utils/five/FiveDomEvents.d.ts +0 -138
  1307. package/dist/shared-utils/five/FiveLine.d.ts +0 -10
  1308. package/dist/shared-utils/five/FivePuppet.d.ts +0 -64
  1309. package/dist/shared-utils/five/calculateThreeMouse.d.ts +0 -11
  1310. package/dist/shared-utils/five/changeMode.d.ts +0 -3
  1311. package/dist/shared-utils/five/fiveEveryReadyListener.d.ts +0 -2
  1312. package/dist/shared-utils/five/fiveLoaded.d.ts +0 -2
  1313. package/dist/shared-utils/five/fiveModelLoad.d.ts +0 -9
  1314. package/dist/shared-utils/five/getFiveFromParentChain.d.ts +0 -8
  1315. package/dist/shared-utils/five/getFiveModel.d.ts +0 -2
  1316. package/dist/shared-utils/five/getFloorIndex.d.ts +0 -4
  1317. package/dist/shared-utils/five/getFloorMesh.d.ts +0 -3
  1318. package/dist/shared-utils/five/getPosition.d.ts +0 -24
  1319. package/dist/shared-utils/five/getRaycasterByNdcPosition.d.ts +0 -6
  1320. package/dist/shared-utils/five/index.d.ts +0 -12
  1321. package/dist/shared-utils/five/initialCSS3DRender.d.ts +0 -1
  1322. package/dist/shared-utils/five/lookObject.d.ts +0 -15
  1323. package/dist/shared-utils/five/lookPoint.d.ts +0 -11
  1324. package/dist/shared-utils/five/mode.d.ts +0 -3
  1325. package/dist/shared-utils/five/transformPosition.d.ts +0 -2
  1326. package/dist/shared-utils/five/vector3ToScreen.d.ts +0 -5
  1327. package/dist/shared-utils/fontSize.d.ts +0 -185
  1328. package/dist/shared-utils/getPointFromHammerEvent.d.ts +0 -10
  1329. package/dist/shared-utils/getPxmm.d.ts +0 -19
  1330. package/dist/shared-utils/index.d.ts +0 -11
  1331. package/dist/shared-utils/math/Rectangle.d.ts +0 -27
  1332. package/dist/shared-utils/math/convexHull.d.ts +0 -5
  1333. package/dist/shared-utils/math/index.d.ts +0 -4
  1334. package/dist/shared-utils/math/planimetry.d.ts +0 -116
  1335. package/dist/shared-utils/math/pointsIsRectangle.d.ts +0 -2
  1336. package/dist/shared-utils/object3d2LocalMatrix.d.ts +0 -12
  1337. package/dist/shared-utils/offscreenCanvas.d.ts +0 -2
  1338. package/dist/shared-utils/positionToVector3.d.ts +0 -17
  1339. package/dist/shared-utils/svelte/resizeObserver.d.ts +0 -2
  1340. package/dist/shared-utils/tag.d.ts +0 -99
  1341. package/dist/shared-utils/three/CSS3DRenderer/index.d.ts +0 -23
  1342. package/dist/shared-utils/three/Extras/Core/Interpolations.d.ts +0 -11
  1343. package/dist/shared-utils/three/Extras/Curves/BezierCurve3.d.ts +0 -13
  1344. package/dist/shared-utils/three/FBXLoader/index.d.ts +0 -6
  1345. package/dist/shared-utils/three/FragmentTransparencyMaterial.d.ts +0 -18
  1346. package/dist/shared-utils/three/GLTFLoader.d.ts +0 -9
  1347. package/dist/shared-utils/three/IObject3D.d.ts +0 -11
  1348. package/dist/shared-utils/three/LegacyPointHelper.d.ts +0 -22
  1349. package/dist/shared-utils/three/Magnifier.d.ts +0 -79
  1350. package/dist/shared-utils/three/PointDomHelper.d.ts +0 -18
  1351. package/dist/shared-utils/three/PointSelector/index.d.ts +0 -182
  1352. package/dist/shared-utils/three/PointSelector/utils/PointHelper.d.ts +0 -31
  1353. package/dist/shared-utils/three/PointSelector/utils/PointHelper2.d.ts +0 -31
  1354. package/dist/shared-utils/three/PointSelector/utils/PointSelectorHelper.d.ts +0 -73
  1355. package/dist/shared-utils/three/PointSelector/utils/html.d.ts +0 -4
  1356. package/dist/shared-utils/three/PointSelector/utils/typing.d.ts +0 -8
  1357. package/dist/shared-utils/three/Quadrangle.d.ts +0 -20
  1358. package/dist/shared-utils/three/addIfNotExists.d.ts +0 -2
  1359. package/dist/shared-utils/three/applyObjectMatrixWorld.d.ts +0 -3
  1360. package/dist/shared-utils/three/blink.d.ts +0 -278
  1361. package/dist/shared-utils/three/boundingBox.d.ts +0 -25
  1362. package/dist/shared-utils/three/centerPoint.d.ts +0 -2
  1363. package/dist/shared-utils/three/closeVectors.d.ts +0 -2
  1364. package/dist/shared-utils/three/core/Five_LineMaterial2.d.ts +0 -20
  1365. package/dist/shared-utils/three/core/Line2.d.ts +0 -13
  1366. package/dist/shared-utils/three/core/LineGeometry.d.ts +0 -13
  1367. package/dist/shared-utils/three/core/LineMaterial.d.ts +0 -15
  1368. package/dist/shared-utils/three/core/LineMaterial2.d.ts +0 -15
  1369. package/dist/shared-utils/three/core/LineSegments.d.ts +0 -9
  1370. package/dist/shared-utils/three/core/Object3D.d.ts +0 -8
  1371. package/dist/shared-utils/three/core/PrismAnimationGeometry.d.ts +0 -25
  1372. package/dist/shared-utils/three/core/PrismGeometry.d.ts +0 -22
  1373. package/dist/shared-utils/three/core/Raycaster.d.ts +0 -6
  1374. package/dist/shared-utils/three/core/Sphere.d.ts +0 -4
  1375. package/dist/shared-utils/three/earcut3D.d.ts +0 -2
  1376. package/dist/shared-utils/three/filterVisibleIntersections.d.ts +0 -3
  1377. package/dist/shared-utils/three/generatePolygonGeometry.d.ts +0 -9
  1378. package/dist/shared-utils/three/geometryUtil.d.ts +0 -15
  1379. package/dist/shared-utils/three/getCoords.d.ts +0 -9
  1380. package/dist/shared-utils/three/getIntersect.d.ts +0 -22
  1381. package/dist/shared-utils/three/getNormal.d.ts +0 -5
  1382. package/dist/shared-utils/three/getObjectVisible.d.ts +0 -5
  1383. package/dist/shared-utils/three/getPositionsByObjectFit.d.ts +0 -3
  1384. package/dist/shared-utils/three/getRaycaster.d.ts +0 -6
  1385. package/dist/shared-utils/three/getTextureLoader.d.ts +0 -6
  1386. package/dist/shared-utils/three/index.d.ts +0 -15
  1387. package/dist/shared-utils/three/loadTexture.d.ts +0 -6
  1388. package/dist/shared-utils/three/loadVideoTexture.d.ts +0 -9
  1389. package/dist/shared-utils/three/recurveFindObject.d.ts +0 -2
  1390. package/dist/shared-utils/three/temp.d.ts +0 -2
  1391. package/dist/shared-utils/three/transformPositionToVector3.d.ts +0 -7
  1392. package/dist/shared-utils/three/transformToMeshBasicMaterial.d.ts +0 -2
  1393. package/dist/shared-utils/three/vector3ToArray.d.ts +0 -3
  1394. package/dist/shared-utils/three/vectorIsEqual.d.ts +0 -2
  1395. package/dist/shared-utils/translateMode/getDistanceFromModel.d.ts +0 -2
  1396. package/dist/shared-utils/typescript/entries.d.ts +0 -2
  1397. package/dist/shared-utils/vectorToCoordinate.d.ts +0 -7
  1398. package/dist/typings/typings.d.ts +0 -15
  1399. package/dist/typings/utils.type.d.ts +0 -4
  1400. package/docs/.nojekyll +0 -1
  1401. package/docs/assets/custom.css +0 -0
  1402. package/docs/assets/highlight.css +0 -127
  1403. package/docs/assets/icons.js +0 -18
  1404. package/docs/assets/icons.svg +0 -1
  1405. package/docs/assets/main.js +0 -60
  1406. package/docs/assets/navigation.js +0 -1
  1407. package/docs/assets/search.js +0 -1
  1408. package/docs/assets/style.css +0 -1493
  1409. package/docs/classes/AnimationScriptAdapterSafetyError.html +0 -4
  1410. package/docs/classes/AreaMakerPluginType.AreaMakerController.html +0 -59
  1411. package/docs/classes/AreaMakerPluginType.AreaMakerItem.html +0 -71
  1412. package/docs/classes/CSS3DRender.html +0 -100
  1413. package/docs/classes/DigitalHuman.html +0 -43
  1414. package/docs/classes/DigitalPerformanceV2.DigitalPerformanceNameplate.html +0 -25
  1415. package/docs/classes/DigitalPerformanceV2.DigitalPerformanceV2PluginController.html +0 -178
  1416. package/docs/classes/DigitalPlayground.html +0 -25
  1417. package/docs/classes/DigitalStateMachine.html +0 -3
  1418. package/docs/classes/FireControl.html +0 -56
  1419. package/docs/classes/FireScenePlayer.html +0 -10
  1420. package/docs/classes/GuideLineItem.GuideLineItem.html +0 -21
  1421. package/docs/classes/GuideLineModeItem.GuideLineModeItem.html +0 -72
  1422. package/docs/classes/ModelMakerPluginInstance.html +0 -106
  1423. package/docs/classes/ModelMakerPluginType.ModelMakerBoxItem.html +0 -52
  1424. package/docs/classes/ModelMakerPluginType.ModelMakerPolygonItem.html +0 -52
  1425. package/docs/classes/ModelMakerPluginType.ModelMakerPrismItem.html +0 -53
  1426. package/docs/classes/ModelRoomLabelController.html +0 -19
  1427. package/docs/classes/MoveController.html +0 -45
  1428. package/docs/classes/Object3DHelperController.html +0 -45
  1429. package/docs/classes/PaintBrush.html +0 -15
  1430. package/docs/classes/PanoMeasurePluginLine.html +0 -24
  1431. package/docs/classes/PanoMeasurePluginModel.html +0 -23
  1432. package/docs/classes/PanoMeasurePluginPoint.html +0 -7
  1433. package/docs/classes/PanoMeasurePluginPolyline.html +0 -27
  1434. package/docs/classes/PanoTagPluginController.html +0 -129
  1435. package/docs/classes/Sculpt.html +0 -79
  1436. package/docs/classes/Util.BetterTween.html +0 -6
  1437. package/docs/classes/Util.FiveDomEvents.html +0 -13
  1438. package/docs/classes/Util.FivePuppet.html +0 -20
  1439. package/docs/classes/Util.Interval.html +0 -11
  1440. package/docs/classes/Util.LegacyPointHelper.html +0 -7
  1441. package/docs/classes/Util.LightTag.html +0 -47
  1442. package/docs/classes/Util.LineSegments.html +0 -4
  1443. package/docs/classes/Util.Magnifier.html +0 -26
  1444. package/docs/classes/Util.Object3D.html +0 -8
  1445. package/docs/classes/Util.PointDomHelper.html +0 -8
  1446. package/docs/classes/Util.PointHelper.html +0 -10
  1447. package/docs/classes/Util.PointSelector.html +0 -71
  1448. package/docs/classes/Util.PointSelectorHelper.html +0 -14
  1449. package/docs/classes/Util.Rectangle.html +0 -12
  1450. package/docs/classes/Util.sculpt.BaseEditor.html +0 -17
  1451. package/docs/classes/Util.sculpt.BoxMesh.html +0 -48
  1452. package/docs/classes/Util.sculpt.BoxMeshEditor.html +0 -18
  1453. package/docs/classes/Util.sculpt.CircleMesh.html +0 -26
  1454. package/docs/classes/Util.sculpt.CircleMeshEditor.html +0 -18
  1455. package/docs/classes/Util.sculpt.CircleWithEdgeMesh.html +0 -26
  1456. package/docs/classes/Util.sculpt.CylinderMesh.html +0 -25
  1457. package/docs/classes/Util.sculpt.CylinderMeshEditor.html +0 -18
  1458. package/docs/classes/Util.sculpt.LineMesh.html +0 -34
  1459. package/docs/classes/Util.sculpt.PointMesh.html +0 -24
  1460. package/docs/classes/Util.sculpt.PolygonMesh.html +0 -40
  1461. package/docs/classes/Util.sculpt.PrismMesh.html +0 -48
  1462. package/docs/classes/Util.sculpt.PrismMeshEditor.html +0 -18
  1463. package/docs/classes/Util.sculpt.RectangleMesh.html +0 -41
  1464. package/docs/classes/Util.sculpt.RectangleMeshEditor.html +0 -18
  1465. package/docs/classes/Util.sculpt.RectangleWithEdgeMesh.html +0 -44
  1466. package/docs/classes/WalkController.html +0 -42
  1467. package/docs/enums/CameraMovementEffect.html +0 -4
  1468. package/docs/enums/ContentType.html +0 -36
  1469. package/docs/enums/DIRECTION.html +0 -5
  1470. package/docs/enums/DISPLAY_STRATEGY_TYPE.html +0 -5
  1471. package/docs/enums/DimensionType.html +0 -4
  1472. package/docs/enums/FLOOR_PLAN_ATTACHED_TO.html +0 -4
  1473. package/docs/enums/ITEM_LABEL_PLUGIN_DISPLAY_STRATEGY_TYPE.html +0 -5
  1474. package/docs/enums/PaintBrushTypeEnum.html +0 -4
  1475. package/docs/enums/PointType.html +0 -4
  1476. package/docs/enums/Rotation.html +0 -5
  1477. package/docs/functions/AreaMakerPlugin.html +0 -1
  1478. package/docs/functions/CSS3DRenderPlugin.html +0 -1
  1479. package/docs/functions/CameraMovementPlugin.html +0 -2
  1480. package/docs/functions/CruisePlugin.html +0 -1
  1481. package/docs/functions/CurrentPanoImagePlugin.html +0 -1
  1482. package/docs/functions/DigitalPerformancePlugin.html +0 -1
  1483. package/docs/functions/DigitalPerformanceV2.DigitalPerformanceV2Plugin.html +0 -1
  1484. package/docs/functions/DigitalPerformanceV2.normalizeDigitalPerformanceName.html +0 -2
  1485. package/docs/functions/FloorplanGuidePlugin.html +0 -1
  1486. package/docs/functions/GuideLinePlugin.html +0 -1
  1487. package/docs/functions/ItemLabelPlugin.html +0 -1
  1488. package/docs/functions/MapviewFloorplanPlugin.html +0 -1
  1489. package/docs/functions/MeasurePlugin.html +0 -1
  1490. package/docs/functions/ModelChassisCompassPlugin.html +0 -2
  1491. package/docs/functions/ModelEntryDoorGuidePlugin.html +0 -2
  1492. package/docs/functions/ModelFloorplanPlugin.html +0 -1
  1493. package/docs/functions/ModelItemLabelPlugin.html +0 -1
  1494. package/docs/functions/ModelMakerPlugin.html +0 -1
  1495. package/docs/functions/ModelRoomLabelPlugin.html +0 -1
  1496. package/docs/functions/ModelTVVideoPlugin.html +0 -1
  1497. package/docs/functions/ModelViewPlugin.html +0 -2
  1498. package/docs/functions/MovePlugin.html +0 -1
  1499. package/docs/functions/Object3DHelperPlugin.html +0 -1
  1500. package/docs/functions/PanoCompassPlugin.html +0 -1
  1501. package/docs/functions/PanoCursorRaycasterPlugin.html +0 -2
  1502. package/docs/functions/PanoDoorLabelPlugin.html +0 -1
  1503. package/docs/functions/PanoFloorplanRadarPlugin.html +0 -1
  1504. package/docs/functions/PanoMeasurePlugin.html +0 -1
  1505. package/docs/functions/PanoRulerPlugin.html +0 -2
  1506. package/docs/functions/PanoRulerProPlugin.html +0 -2
  1507. package/docs/functions/PanoSpatialTagPlugin.html +0 -2
  1508. package/docs/functions/PanoTagPlugin.html +0 -1
  1509. package/docs/functions/PanoVideoPlugin.html +0 -10
  1510. package/docs/functions/PipelinePlugin.html +0 -1
  1511. package/docs/functions/SculptPlugin.html +0 -2
  1512. package/docs/functions/SculptPluginForFive.html +0 -2
  1513. package/docs/functions/TopviewFloorplanPlugin.html +0 -1
  1514. package/docs/functions/Util.awaitNextFrame.html +0 -1
  1515. package/docs/functions/Util.blink.html +0 -13
  1516. package/docs/functions/Util.blinkWithPreset.html +0 -6
  1517. package/docs/functions/Util.bounding.html +0 -1
  1518. package/docs/functions/Util.boundingBox.html +0 -1
  1519. package/docs/functions/Util.boundingSphere.html +0 -1
  1520. package/docs/functions/Util.boxVertex.html +0 -7
  1521. package/docs/functions/Util.boxVertexes.html +0 -1
  1522. package/docs/functions/Util.checkFiveModelLoaded.html +0 -2
  1523. package/docs/functions/Util.cleanup.html +0 -3
  1524. package/docs/functions/Util.convexHull.html +0 -2
  1525. package/docs/functions/Util.equal.html +0 -5
  1526. package/docs/functions/Util.fiveModelIsLoaded.html +0 -2
  1527. package/docs/functions/Util.generatePolygonGeometry.html +0 -2
  1528. package/docs/functions/Util.getCoordsFromClient.html +0 -1
  1529. package/docs/functions/Util.getCoordsFromElement.html +0 -1
  1530. package/docs/functions/Util.getFrameTime.html +0 -3
  1531. package/docs/functions/Util.getGeometryArea.html +0 -1
  1532. package/docs/functions/Util.getGeometryInfo.html +0 -1
  1533. package/docs/functions/Util.getIntersectFromRelativePosition.html +0 -1
  1534. package/docs/functions/Util.getRaycasterFromFivePointer.html +0 -1
  1535. package/docs/functions/Util.initialCSS3DRender.html +0 -1
  1536. package/docs/functions/Util.inside.html +0 -1
  1537. package/docs/functions/Util.isModelLike.html +0 -1
  1538. package/docs/functions/Util.isNil.html +0 -2
  1539. package/docs/functions/Util.isPanoramaLike.html +0 -1
  1540. package/docs/functions/Util.lookObject.html +0 -7
  1541. package/docs/functions/Util.lookPoint.html +0 -5
  1542. package/docs/functions/Util.nextFrame.html +0 -1
  1543. package/docs/functions/Util.notNil.html +0 -2
  1544. package/docs/functions/Util.reblink.html +0 -13
  1545. package/docs/functions/Util.replaceStaticPrefix.html +0 -8
  1546. package/docs/functions/Util.requestAnimationFrameInterval.html +0 -5
  1547. package/docs/functions/Util.sculpt.createBox.html +0 -1
  1548. package/docs/functions/Util.sculpt.createCircle.html +0 -1
  1549. package/docs/functions/Util.sculpt.createCylinder.html +0 -1
  1550. package/docs/functions/Util.sculpt.createLine.html +0 -2
  1551. package/docs/functions/Util.sculpt.createPoint.html +0 -1
  1552. package/docs/functions/Util.sculpt.createPolygon.html +0 -1
  1553. package/docs/functions/Util.sculpt.createPrism.html +0 -1
  1554. package/docs/functions/Util.sculpt.createRectangle.html +0 -2
  1555. package/docs/functions/Util.sculpt.transformUnit.html +0 -4
  1556. package/docs/functions/Util.sculpt.transformUnitSquare.html +0 -1
  1557. package/docs/functions/Util.tag.html +0 -1
  1558. package/docs/functions/Util.triangleArea.html +0 -2
  1559. package/docs/functions/Util.triangleCenter.html +0 -2
  1560. package/docs/functions/Util.tweenProgress.html +0 -1
  1561. package/docs/functions/Util.uuid.html +0 -2
  1562. package/docs/functions/Util.waitFiveModelLoaded.html +0 -2
  1563. package/docs/functions/Util.worldBounding.html +0 -1
  1564. package/docs/functions/Util.worldBoundingBox.html +0 -1
  1565. package/docs/functions/Util.worldBoundingSphere.html +0 -1
  1566. package/docs/functions/classifyMovementTrack.html +0 -1
  1567. package/docs/functions/createPolyline.html +0 -2
  1568. package/docs/functions/getAreaBox3.html +0 -2
  1569. package/docs/functions/getAreaVertices.html +0 -2
  1570. package/docs/functions/getEffectivePointActionDuration.html +0 -1
  1571. package/docs/functions/getEntryArea.html +0 -2
  1572. package/docs/functions/getMovementActionDuration.html +0 -1
  1573. package/docs/functions/hasMovementV2Signal.html +0 -1
  1574. package/docs/functions/isConverterSafeMovementMatrix.html +0 -1
  1575. package/docs/functions/pluginFlag.html +0 -1
  1576. package/docs/functions/transformAnimationDetailToDigitalScript.html +0 -3
  1577. package/docs/functions/transformScriptData.html +0 -4
  1578. package/docs/functions/validatePolygon.html +0 -1
  1579. package/docs/hierarchy.html +0 -1
  1580. package/docs/index.html +0 -69
  1581. package/docs/interfaces/AnimationScriptAdapterOptions.html +0 -6
  1582. package/docs/interfaces/AreaMakerPluginType.AnimeOptions.html +0 -4
  1583. package/docs/interfaces/AreaMakerPluginType.Config.html +0 -8
  1584. package/docs/interfaces/AreaMakerPluginType.EventMap.html +0 -25
  1585. package/docs/interfaces/AreaMakerPluginType.Params.html +0 -4
  1586. package/docs/interfaces/AreaMakerPluginType.ServerAreaMakerItem.html +0 -20
  1587. package/docs/interfaces/AreaMakerPluginType.ServerAreaMakerItemV1.html +0 -13
  1588. package/docs/interfaces/AreaMakerPluginType.ServerDataV1.html +0 -9
  1589. package/docs/interfaces/AreaMakerPluginType.ServerDataV2.html +0 -3
  1590. package/docs/interfaces/AreaMakerPluginType.ShowHideOptions.html +0 -3
  1591. package/docs/interfaces/AreaMakerPluginType.State.html +0 -8
  1592. package/docs/interfaces/BoxAnimationConfig.html +0 -6
  1593. package/docs/interfaces/BoxPosition.html +0 -8
  1594. package/docs/interfaces/CSS3DRenderPluginEventMap.html +0 -9
  1595. package/docs/interfaces/CSS3DRenderPluginState.html +0 -7
  1596. package/docs/interfaces/CameraMovementPluginExportType.html +0 -11
  1597. package/docs/interfaces/ChapterLocation.html +0 -4
  1598. package/docs/interfaces/ChapterTimeInfo.html +0 -7
  1599. package/docs/interfaces/ContentTypeMapInterface.html +0 -83
  1600. package/docs/interfaces/CruisePluginTypes.Config.html +0 -8
  1601. package/docs/interfaces/CruisePluginTypes.CruiseKeyframe.html +0 -8
  1602. package/docs/interfaces/CruisePluginTypes.EventMap.html +0 -33
  1603. package/docs/interfaces/CruisePluginTypes.GuildLineConfig.html +0 -6
  1604. package/docs/interfaces/CruisePluginTypes.MoveAction.html +0 -16
  1605. package/docs/interfaces/CruisePluginTypes.MoveWithKeyframesAction.html +0 -19
  1606. package/docs/interfaces/CruisePluginTypes.MoveWithPanoIndexAction.html +0 -20
  1607. package/docs/interfaces/CruisePluginTypes.PluginData.html +0 -8
  1608. package/docs/interfaces/CruisePluginTypes.PluginServerData.html +0 -2
  1609. package/docs/interfaces/CruisePluginTypes.PluginState.html +0 -15
  1610. package/docs/interfaces/CurrentPanoImagePluginType.Config.html +0 -14
  1611. package/docs/interfaces/CurrentPanoImagePluginType.EventMap.html +0 -15
  1612. package/docs/interfaces/CurrentPanoImagePluginType.Params.html +0 -4
  1613. package/docs/interfaces/CurrentPanoImagePluginType.ShowHideOptions.html +0 -3
  1614. package/docs/interfaces/CurrentPanoImagePluginType.State.html +0 -7
  1615. package/docs/interfaces/DigitalCameraKeyframe.html +0 -4
  1616. package/docs/interfaces/DigitalCameraPlayer.html +0 -4
  1617. package/docs/interfaces/DigitalCameraState.html +0 -4
  1618. package/docs/interfaces/DigitalChapter.html +0 -3
  1619. package/docs/interfaces/DigitalDataPlayer.html +0 -4
  1620. package/docs/interfaces/DigitalDataState.html +0 -4
  1621. package/docs/interfaces/DigitalEffectKeyframe.html +0 -4
  1622. package/docs/interfaces/DigitalEffectState.html +0 -8
  1623. package/docs/interfaces/DigitalItemKeyframe.html +0 -6
  1624. package/docs/interfaces/DigitalItemState.html +0 -7
  1625. package/docs/interfaces/DigitalModelKeyframe.html +0 -9
  1626. package/docs/interfaces/DigitalModelPlayer.html +0 -10
  1627. package/docs/interfaces/DigitalModelPlayerEffect.html +0 -4
  1628. package/docs/interfaces/DigitalModelPlayerItem.html +0 -6
  1629. package/docs/interfaces/DigitalModelState.html +0 -8
  1630. package/docs/interfaces/DigitalPerformancePluginConfig.html +0 -9
  1631. package/docs/interfaces/DigitalPerformanceV2.CameraState.html +0 -13
  1632. package/docs/interfaces/DigitalPerformanceV2.DigitalCameraKeyframe.html +0 -23
  1633. package/docs/interfaces/DigitalPerformanceV2.DigitalCameraPlayer.html +0 -7
  1634. package/docs/interfaces/DigitalPerformanceV2.DigitalPerformanceNameplateBinding.html +0 -5
  1635. package/docs/interfaces/DigitalPerformanceV2.DigitalPerformanceNameplateOptions.html +0 -22
  1636. package/docs/interfaces/DigitalPerformanceV2.DigitalPerformanceNameplateRenderContext.html +0 -5
  1637. package/docs/interfaces/DigitalPerformanceV2.DigitalPerformanceV2PluginConfig.html +0 -15
  1638. package/docs/interfaces/DigitalPerformanceV2.GroupChapterTimeInfo.html +0 -13
  1639. package/docs/interfaces/DigitalPerformanceV2.GroupProgress.html +0 -18
  1640. package/docs/interfaces/DigitalPerformanceV2.V2Progress.html +0 -10
  1641. package/docs/interfaces/DigitalScript.html +0 -5
  1642. package/docs/interfaces/DigitalSubTitleKeyframe.html +0 -7
  1643. package/docs/interfaces/DigitalSubTitlePlayer.html +0 -4
  1644. package/docs/interfaces/DigitalSubTitleState.html +0 -6
  1645. package/docs/interfaces/ExtendedAnimationConfig.html +0 -5
  1646. package/docs/interfaces/FireArea.html +0 -5
  1647. package/docs/interfaces/FireModel.html +0 -9
  1648. package/docs/interfaces/FireSceneConfig.html +0 -9
  1649. package/docs/interfaces/FireSequencePlayerOptions.html +0 -4
  1650. package/docs/interfaces/FireSequenceStep.html +0 -5
  1651. package/docs/interfaces/FireVector3.html +0 -4
  1652. package/docs/interfaces/FloorplanBounding.html +0 -9
  1653. package/docs/interfaces/FloorplanData.html +0 -8
  1654. package/docs/interfaces/FloorplanEntrance.html +0 -14
  1655. package/docs/interfaces/FloorplanExtraObject.html +0 -9
  1656. package/docs/interfaces/FloorplanExtraObject3D.html +0 -5
  1657. package/docs/interfaces/FloorplanFloorData.html +0 -9
  1658. package/docs/interfaces/FloorplanImagePosition.html +0 -4
  1659. package/docs/interfaces/FloorplanObserver.html +0 -9
  1660. package/docs/interfaces/FloorplanOutlineItem.html +0 -6
  1661. package/docs/interfaces/FloorplanPosition.html +0 -4
  1662. package/docs/interfaces/FloorplanRoomItem.html +0 -24
  1663. package/docs/interfaces/FloorplanRoomLabelItem.html +0 -6
  1664. package/docs/interfaces/FloorplanServerBounding.html +0 -9
  1665. package/docs/interfaces/FloorplanServerComputedData.html +0 -6
  1666. package/docs/interfaces/FloorplanServerData.html +0 -5
  1667. package/docs/interfaces/FloorplanServerDoorItem.html +0 -6
  1668. package/docs/interfaces/FloorplanServerDoorPosition.html +0 -4
  1669. package/docs/interfaces/FloorplanServerEntrance.html +0 -14
  1670. package/docs/interfaces/FloorplanServerFloorData.html +0 -8
  1671. package/docs/interfaces/FloorplanServerImagePosition.html +0 -4
  1672. package/docs/interfaces/FloorplanServerObserver.html +0 -9
  1673. package/docs/interfaces/FloorplanServerOutlineItem.html +0 -7
  1674. package/docs/interfaces/FloorplanServerPosition.html +0 -4
  1675. package/docs/interfaces/FloorplanServerRoomItem.html +0 -27
  1676. package/docs/interfaces/FloorplanServerRoomLabelItem.html +0 -6
  1677. package/docs/interfaces/FloorplanServerStyledFloorplan.html +0 -3
  1678. package/docs/interfaces/FloorplanServerStyledImage.html +0 -6
  1679. package/docs/interfaces/GlobalProgress.html +0 -7
  1680. package/docs/interfaces/GuideLineModeItem.GuideLineTagContainer.html +0 -4
  1681. package/docs/interfaces/GuideLinePluginType.CatmullRomCurve3.html +0 -7
  1682. package/docs/interfaces/GuideLinePluginType.EventMap.html +0 -13
  1683. package/docs/interfaces/GuideLinePluginType.ExtraRouteData.html +0 -5
  1684. package/docs/interfaces/GuideLinePluginType.GuideLineGeometryStyle.html +0 -8
  1685. package/docs/interfaces/GuideLinePluginType.GuideLineItemContainer.html +0 -2
  1686. package/docs/interfaces/GuideLinePluginType.GuideLineMaterialStyle.html +0 -32
  1687. package/docs/interfaces/GuideLinePluginType.GuideLineMeshStyle.html +0 -4
  1688. package/docs/interfaces/GuideLinePluginType.LineGeometriesConfig.html +0 -5
  1689. package/docs/interfaces/GuideLinePluginType.ModelGuideLineStyle.html +0 -42
  1690. package/docs/interfaces/GuideLinePluginType.ModelGuideLineTagData.html +0 -3
  1691. package/docs/interfaces/GuideLinePluginType.PanoramaGuideLineStyle.html +0 -57
  1692. package/docs/interfaces/GuideLinePluginType.PluginDataV2.html +0 -1
  1693. package/docs/interfaces/GuideLinePluginType.PluginServerData.html +0 -2
  1694. package/docs/interfaces/GuideLinePluginType.PluginState.html +0 -7
  1695. package/docs/interfaces/GuideLinePluginType.Route.html +0 -13
  1696. package/docs/interfaces/HelperOffset.html +0 -4
  1697. package/docs/interfaces/ImagePlaneGroup.html +0 -3
  1698. package/docs/interfaces/ItemLabelPluginData.html +0 -2
  1699. package/docs/interfaces/ItemLabelPluginExportReturnsType.html +0 -7
  1700. package/docs/interfaces/ItemLabelPluginParametersType.html +0 -5
  1701. package/docs/interfaces/LegacyScriptTransformer.html +0 -2
  1702. package/docs/interfaces/MinMax.html +0 -3
  1703. package/docs/interfaces/ModelChassisCompassPluginData.html +0 -3
  1704. package/docs/interfaces/ModelChassisCompassPluginExportType.html +0 -4
  1705. package/docs/interfaces/ModelChassisCompassPluginParameterType.html +0 -3
  1706. package/docs/interfaces/ModelEntryDoorGuidePluginData.html +0 -4
  1707. package/docs/interfaces/ModelEntryDoorGuidePluginExportType.html +0 -4
  1708. package/docs/interfaces/ModelItemLabelPluginData.html +0 -2
  1709. package/docs/interfaces/ModelItemLabelPluginExportReturnsType.html +0 -7
  1710. package/docs/interfaces/ModelItemLabelPluginParametersType.html +0 -3
  1711. package/docs/interfaces/ModelMakerPluginType.BoxItemObjectData.html +0 -17
  1712. package/docs/interfaces/ModelMakerPluginType.EventMap.html +0 -18
  1713. package/docs/interfaces/ModelMakerPluginType.ModelMakerPluginConfig.html +0 -19
  1714. package/docs/interfaces/ModelMakerPluginType.PrismItemObjectData.html +0 -23
  1715. package/docs/interfaces/ModelMakerPluginType.ServerBaseItem.html +0 -11
  1716. package/docs/interfaces/ModelMakerPluginType.ServerBoxItem.html +0 -10
  1717. package/docs/interfaces/ModelMakerPluginType.ServerData.html +0 -3
  1718. package/docs/interfaces/ModelMakerPluginType.ServerPrismItem.html +0 -10
  1719. package/docs/interfaces/ModelMakerPluginType.ServerTrianglesItem.html +0 -10
  1720. package/docs/interfaces/ModelMakerPluginType.State.html +0 -8
  1721. package/docs/interfaces/ModelMakerPluginType.TrianglesItemObjectData.html +0 -11
  1722. package/docs/interfaces/ModelRoomLabelPluginData.html +0 -2
  1723. package/docs/interfaces/ModelTVVideoPluginData.html +0 -5
  1724. package/docs/interfaces/ModelTVVideoPluginExportType.html +0 -4
  1725. package/docs/interfaces/ModelTVVideoPluginParameterType.html +0 -3
  1726. package/docs/interfaces/ModelViewPluginExportType.html +0 -8
  1727. package/docs/interfaces/Object3DHelperState.html +0 -4
  1728. package/docs/interfaces/ObjectHelperControllers.html +0 -5
  1729. package/docs/interfaces/PaintBrushAction.html +0 -14
  1730. package/docs/interfaces/PaintBrushConfigs.html +0 -8
  1731. package/docs/interfaces/PaintBrushState.html +0 -6
  1732. package/docs/interfaces/PanoCursorRaycasterPluginExportType.html +0 -16
  1733. package/docs/interfaces/PanoCursorRaycasterPluginParameterType.html +0 -1
  1734. package/docs/interfaces/PanoMeasureParameterType.html +0 -21
  1735. package/docs/interfaces/PanoMeasurePluginLineJson.html +0 -4
  1736. package/docs/interfaces/PanoMeasurePluginOpenParameter.html +0 -4
  1737. package/docs/interfaces/PanoMeasurePluginPointJson.html +0 -3
  1738. package/docs/interfaces/PanoMeasurePluginPolylineJson.html +0 -7
  1739. package/docs/interfaces/PanoRulerPluginExportType.html +0 -6
  1740. package/docs/interfaces/PanoRulerPluginOptions.html +0 -3
  1741. package/docs/interfaces/PanoRulerPluginParameterType.html +0 -4
  1742. package/docs/interfaces/PanoRulerProPluginExportType.html +0 -5
  1743. package/docs/interfaces/PanoRulerProPluginOptions.html +0 -3
  1744. package/docs/interfaces/PanoRulerProPluginParameterType.html +0 -3
  1745. package/docs/interfaces/PanoRulerProPluginState.html +0 -4
  1746. package/docs/interfaces/PanoSpatialTagPluginContentEvent.html +0 -1
  1747. package/docs/interfaces/PanoSpatialTagPluginContentReplacement.html +0 -1
  1748. package/docs/interfaces/PanoSpatialTagPluginData.html +0 -7
  1749. package/docs/interfaces/PanoSpatialTagPluginDataElement.html +0 -6
  1750. package/docs/interfaces/PanoSpatialTagPluginExportType.html +0 -9
  1751. package/docs/interfaces/PanoSpatialTagPluginOriginElement.html +0 -6
  1752. package/docs/interfaces/PanoSpatialTagPluginParameterType.html +0 -9
  1753. package/docs/interfaces/PanoSpatialTagPluginPointElement.html +0 -7
  1754. package/docs/interfaces/PanoSpatialTagPluginTagElement.html +0 -6
  1755. package/docs/interfaces/PanoVideoPluginType.LoadParams.html +0 -3
  1756. package/docs/interfaces/PanoVideoPluginType.PanoVideoItem.html +0 -8
  1757. package/docs/interfaces/PanoVideoPluginType.PluginData.html +0 -2
  1758. package/docs/interfaces/PanoVideoPluginType.PluginEventMap.html +0 -15
  1759. package/docs/interfaces/PanoVideoPluginType.PluginState.html +0 -2
  1760. package/docs/interfaces/PanoVideoPluginType.VideoItem.html +0 -14
  1761. package/docs/interfaces/PanoVideoPluginType.VideoMeshParams.html +0 -13
  1762. package/docs/interfaces/PlaybackController.html +0 -4
  1763. package/docs/interfaces/PlaybackManager.html +0 -2
  1764. package/docs/interfaces/PlaybackSession.html +0 -5
  1765. package/docs/interfaces/PluginEventMap.html +0 -16
  1766. package/docs/interfaces/Point.html +0 -4
  1767. package/docs/interfaces/ProgressBarEvents.html +0 -7
  1768. package/docs/interfaces/Room.html +0 -5
  1769. package/docs/interfaces/RoomInfo.html +0 -3
  1770. package/docs/interfaces/RoomLabel.html +0 -16
  1771. package/docs/interfaces/RoomRules.html +0 -1
  1772. package/docs/interfaces/Rooms.html +0 -1
  1773. package/docs/interfaces/Scissor.html +0 -13
  1774. package/docs/interfaces/SculptConfig.html +0 -19
  1775. package/docs/interfaces/State.html +0 -7
  1776. package/docs/interfaces/StyledFloorplan.html +0 -3
  1777. package/docs/interfaces/StyledFloorplanImage.html +0 -6
  1778. package/docs/interfaces/StyledFloorplanRoomLabel.html +0 -8
  1779. package/docs/interfaces/TagCacheInterface.html +0 -9
  1780. package/docs/interfaces/TagConfig.html +0 -189
  1781. package/docs/interfaces/TagGLTFObjectGroup.html +0 -3
  1782. package/docs/interfaces/TagIconAnimationConfig.html +0 -7
  1783. package/docs/interfaces/TagIconUrl.html +0 -22
  1784. package/docs/interfaces/TagObjectGroup.html +0 -3
  1785. package/docs/interfaces/TagState.html +0 -3
  1786. package/docs/interfaces/TagStyle.html +0 -17
  1787. package/docs/interfaces/Tags.html +0 -8
  1788. package/docs/interfaces/TemporaryState.html +0 -2
  1789. package/docs/interfaces/TraceManager.html +0 -6
  1790. package/docs/interfaces/TracePoint.html +0 -3
  1791. package/docs/interfaces/Util.AnimeInstance.html +0 -14
  1792. package/docs/interfaces/Util.BlinkAnimeOptions.html +0 -21
  1793. package/docs/interfaces/Util.EventHandlerConfig.html +0 -21
  1794. package/docs/interfaces/Util.FiveDomEvent.html +0 -7
  1795. package/docs/interfaces/Util.FiveDomEventMap.html +0 -20
  1796. package/docs/interfaces/Util.LegacyMouseGroupParameter.html +0 -4
  1797. package/docs/interfaces/Util.MagnifierParameter.html +0 -13
  1798. package/docs/interfaces/Util.MouseGroupParameter.html +0 -4
  1799. package/docs/interfaces/Util.ObjectInitialState.html +0 -9
  1800. package/docs/interfaces/Util.PointIntersection.html +0 -21
  1801. package/docs/interfaces/Util.PointSelectorHelperConfig.html +0 -6
  1802. package/docs/interfaces/Util.ReBlinkAnimeOptions.html +0 -27
  1803. package/docs/modules/AreaMakerPluginType.html +0 -17
  1804. package/docs/modules/CruisePluginTypes.html +0 -14
  1805. package/docs/modules/CurrentPanoImagePluginType.html +0 -6
  1806. package/docs/modules/DigitalPerformanceV2.html +0 -22
  1807. package/docs/modules/GuideLineItem.html +0 -2
  1808. package/docs/modules/GuideLineModeItem.html +0 -3
  1809. package/docs/modules/GuideLinePluginType.html +0 -25
  1810. package/docs/modules/ModelMakerPluginType.html +0 -22
  1811. package/docs/modules/PanoVideoPluginType.html +0 -8
  1812. package/docs/modules/SculptData.html +0 -9
  1813. package/docs/modules/SculptType.html +0 -2
  1814. package/docs/modules/Util.html +0 -91
  1815. package/docs/modules/Util.sculpt.html +0 -27
  1816. package/docs/modules.html +0 -382
  1817. package/docs/types/AddObject3DHelperConfig.html +0 -19
  1818. package/docs/types/AreaMakerPluginType.AreaMakerItemEventMap.html +0 -7
  1819. package/docs/types/AreaMakerPluginType.ItemRenderer.html +0 -1
  1820. package/docs/types/AreaMakerPluginType.PluginData.html +0 -2
  1821. package/docs/types/AreaMakerPluginType.ServerData.html +0 -2
  1822. package/docs/types/ArrayPosition.html +0 -1
  1823. package/docs/types/AudioAppearance.html +0 -1
  1824. package/docs/types/BoxTag.html +0 -2
  1825. package/docs/types/CSS3DRenderExportType.html +0 -1
  1826. package/docs/types/CSS3DRenderPluginExportType.html +0 -1
  1827. package/docs/types/CSS3DRenderPluginParameterType.html +0 -1
  1828. package/docs/types/CanonicalMovementTrackPlan.html +0 -1
  1829. package/docs/types/ClassFunctionParameters.html +0 -1
  1830. package/docs/types/Color.html +0 -1
  1831. package/docs/types/ContentTypeConfigKey.html +0 -1
  1832. package/docs/types/ContentTypeConfigKeySplit.html +0 -1
  1833. package/docs/types/ContentTypeMap.html +0 -1
  1834. package/docs/types/Create3DDomContainerReturnType.html +0 -1
  1835. package/docs/types/Create3DElementReturnType.html +0 -1
  1836. package/docs/types/CruisePluginExportType.html +0 -1
  1837. package/docs/types/CruisePluginTypes.CruiseData.html +0 -6
  1838. package/docs/types/CruisePluginTypes.MoveEffect.html +0 -1
  1839. package/docs/types/CurrentPanoImagePluginExportType.html +0 -1
  1840. package/docs/types/DeprecatedMediaPlaneProperty.html +0 -3
  1841. package/docs/types/DeprecatedTagProperty.html +0 -3
  1842. package/docs/types/DigitalPerformancePluginExportInterface.html +0 -1
  1843. package/docs/types/DigitalPerformancePluginParamsInterface.html +0 -1
  1844. package/docs/types/DigitalPerformanceV2.CameraCoordinateSpace.html +0 -7
  1845. package/docs/types/DigitalPerformanceV2.CameraTransition.html +0 -7
  1846. package/docs/types/DigitalPerformanceV2.DigitalPerformanceV2PluginExportInterface.html +0 -1
  1847. package/docs/types/DigitalPerformanceV2.DigitalPerformanceV2PluginParamsInterface.html +0 -1
  1848. package/docs/types/DigitalPerformanceV2.V2ProgressListener.html +0 -1
  1849. package/docs/types/Direction-1.html +0 -1
  1850. package/docs/types/Direction4.html +0 -1
  1851. package/docs/types/ElementRenderer.html +0 -2
  1852. package/docs/types/FireModelType.html +0 -5
  1853. package/docs/types/FireSequenceKind.html +0 -3
  1854. package/docs/types/FireSpreadBounds.html +0 -2
  1855. package/docs/types/FloorplanAffineTransform.html +0 -1
  1856. package/docs/types/FloorplanGuidePluginParameterType.html +0 -1
  1857. package/docs/types/FloorplanGuidePluginReturnType.html +0 -1
  1858. package/docs/types/FloorplanRuleLabels.html +0 -2
  1859. package/docs/types/FloorplanServerAffineTransform.html +0 -1
  1860. package/docs/types/FloorplanServerRuleLabels.html +0 -1
  1861. package/docs/types/GuideLinePluginExportType.html +0 -1
  1862. package/docs/types/GuideLinePluginType.GuideLineItem.html +0 -2
  1863. package/docs/types/GuideLinePluginType.GuideLineItemEventMap.html +0 -1
  1864. package/docs/types/GuideLinePluginType.GuideLineModeItemMode.html +0 -1
  1865. package/docs/types/GuideLinePluginType.GuideLineStyle.html +0 -2
  1866. package/docs/types/GuideLinePluginType.ModelGuideLineTag.html +0 -2
  1867. package/docs/types/GuideLinePluginType.PathItem.html +0 -2
  1868. package/docs/types/GuideLinePluginType.PluginData.html +0 -2
  1869. package/docs/types/GuideLinePluginType.RouteConfig.html +0 -4
  1870. package/docs/types/HelperEventMap.html +0 -1
  1871. package/docs/types/InternalHelperEventMap.html +0 -1
  1872. package/docs/types/KeyframeType.html +0 -1
  1873. package/docs/types/MapviewFloorplanPluginParameterType.html +0 -1
  1874. package/docs/types/MapviewFloorplanPluginReturnType.html +0 -1
  1875. package/docs/types/MaskPosition.html +0 -3
  1876. package/docs/types/MaskTag.html +0 -2
  1877. package/docs/types/MeasureEndReason.html +0 -1
  1878. package/docs/types/MeasurePluginConfig.html +0 -10
  1879. package/docs/types/MeasurePluginEventMap.html +0 -1
  1880. package/docs/types/MediaData.html +0 -2
  1881. package/docs/types/MediaOperations.html +0 -1
  1882. package/docs/types/MediaStore.html +0 -1
  1883. package/docs/types/ModelEntryDoorGuidePluginParameterType.html +0 -1
  1884. package/docs/types/ModelFloorplanPluginParameterType.html +0 -1
  1885. package/docs/types/ModelFloorplanPluginReturnType.html +0 -1
  1886. package/docs/types/ModelId.html +0 -1
  1887. package/docs/types/ModelMakerPluginType.ElementRenderer.html +0 -1
  1888. package/docs/types/ModelMakerPluginType.ItemType.html +0 -2
  1889. package/docs/types/ModelMakerPluginType.MarkerItem.html +0 -1
  1890. package/docs/types/ModelMakerPluginType.ServerItem.html +0 -2
  1891. package/docs/types/ModelMakerPluginType.TagOcclusionScope.html +0 -2
  1892. package/docs/types/ModelMakerPluginType.TagOcclusionScopeConfig.html +0 -2
  1893. package/docs/types/ModelRoomLabelPluginParameters.html +0 -1
  1894. package/docs/types/ModelRoomLabelPluginReturnType.html +0 -1
  1895. package/docs/types/MoveArgs.html +0 -2
  1896. package/docs/types/MoveOpts.html +0 -2
  1897. package/docs/types/MovementConfig.html +0 -1
  1898. package/docs/types/MovementPosition.html +0 -1
  1899. package/docs/types/MovementTrackClassification.html +0 -1
  1900. package/docs/types/MovementTrackConflictReason.html +0 -1
  1901. package/docs/types/MovementTrackProjection.html +0 -1
  1902. package/docs/types/Object3DHelperEventMap.html +0 -1
  1903. package/docs/types/ObjectFit.html +0 -1
  1904. package/docs/types/PaintBrushEventMap.html +0 -1
  1905. package/docs/types/PanoCompassPluginData.html +0 -1
  1906. package/docs/types/PanoCompassPluginExportType.html +0 -1
  1907. package/docs/types/PanoCompassPluginParameterType.html +0 -1
  1908. package/docs/types/PanoFloorplanRadarPluginParameterType.html +0 -1
  1909. package/docs/types/PanoFloorplanRadarPluginReturnType.html +0 -1
  1910. package/docs/types/PanoIndex.html +0 -1
  1911. package/docs/types/PanoMeasurePluginEvent.html +0 -1
  1912. package/docs/types/PanoMeasureReturnType.html +0 -1
  1913. package/docs/types/PanoSpatialTagPluginId.html +0 -1
  1914. package/docs/types/PanoTagPluginExportInterface.html +0 -1
  1915. package/docs/types/PanoTagPluginParamsInterface.html +0 -1
  1916. package/docs/types/PanoVideoPluginParameterType.html +0 -1
  1917. package/docs/types/PanoVideoPluginReturnType.html +0 -1
  1918. package/docs/types/PickTagContentTypeInContentTypeConfigKey.html +0 -2
  1919. package/docs/types/PipelinePluginParameterType.html +0 -1
  1920. package/docs/types/PipelinePluginReturnType.html +0 -1
  1921. package/docs/types/PlaneTag.html +0 -2
  1922. package/docs/types/Point2DTag.html +0 -2
  1923. package/docs/types/Point3DTag.html +0 -2
  1924. package/docs/types/PointAction.html +0 -1
  1925. package/docs/types/PointTagInstance.html +0 -1
  1926. package/docs/types/PolygonPosition.html +0 -3
  1927. package/docs/types/PolygonTag.html +0 -2
  1928. package/docs/types/Position.html +0 -1
  1929. package/docs/types/PositionFrom.html +0 -1
  1930. package/docs/types/ProgressListener.html +0 -1
  1931. package/docs/types/RotateArgs.html +0 -2
  1932. package/docs/types/RotateOpts.html +0 -2
  1933. package/docs/types/RuleLabelsKey.html +0 -1
  1934. package/docs/types/RuleLabelsValue.html +0 -1
  1935. package/docs/types/ScaleCallback.html +0 -1
  1936. package/docs/types/ScalePosition.html +0 -3
  1937. package/docs/types/SculptData.BoxData.html +0 -1
  1938. package/docs/types/SculptData.CircleData.html +0 -1
  1939. package/docs/types/SculptData.CylinderData.html +0 -1
  1940. package/docs/types/SculptData.PointData.html +0 -1
  1941. package/docs/types/SculptData.PolygonData.html +0 -1
  1942. package/docs/types/SculptData.PolylineData.html +0 -1
  1943. package/docs/types/SculptData.PrismData.html +0 -1
  1944. package/docs/types/SculptData.RectangleData.html +0 -1
  1945. package/docs/types/SculptType.Theme.html +0 -10
  1946. package/docs/types/StateType.html +0 -1
  1947. package/docs/types/StickType.html +0 -1
  1948. package/docs/types/Tag.html +0 -17
  1949. package/docs/types/Tag2D.html +0 -2
  1950. package/docs/types/Tag3D.html +0 -2
  1951. package/docs/types/TagClickParams.html +0 -1
  1952. package/docs/types/TagConfigByKey.html +0 -1
  1953. package/docs/types/TagContentType.html +0 -1
  1954. package/docs/types/TagContentTypeMapping.html +0 -1
  1955. package/docs/types/TagDimensionType.html +0 -1
  1956. package/docs/types/TagElement.html +0 -2
  1957. package/docs/types/TagEvents.html +0 -1
  1958. package/docs/types/TagGLTFObject.html +0 -1
  1959. package/docs/types/TagHooks.html +0 -1
  1960. package/docs/types/TagId.html +0 -1
  1961. package/docs/types/TagInstance.html +0 -1
  1962. package/docs/types/TagPlacement.html +0 -5
  1963. package/docs/types/TagPointType.html +0 -2
  1964. package/docs/types/TagRendererMap.html +0 -1
  1965. package/docs/types/TopviewFloorplanPluginParameterType.html +0 -1
  1966. package/docs/types/TopviewFloorplanPluginReturnType.html +0 -1
  1967. package/docs/types/TrackPoint.html +0 -1
  1968. package/docs/types/Util.ActionIfNoIntersection.html +0 -1
  1969. package/docs/types/Util.AdherePoint.html +0 -2
  1970. package/docs/types/Util.PointSelectorConfig.html +0 -1
  1971. package/docs/types/Util.SupportedTarget.html +0 -2
  1972. package/docs/types/Util.Target.html +0 -2
  1973. package/docs/types/Util.ThreeObject.html +0 -2
  1974. package/docs/types/WorkCode.html +0 -1
  1975. package/docs/variables/DigitalPerformanceV2.DEFAULT_DIGITAL_PERFORMANCE_NAME_MAX_LENGTH.html +0 -1
  1976. package/docs/variables/FIRE_ACTION_DURATION_MS.html +0 -2
  1977. package/docs/variables/FIRE_SPREAD_SPEED.html +0 -2
  1978. package/docs/variables/FLOOR_TYPE_MAP.html +0 -2
  1979. package/docs/variables/MODEL_SCALE_RANGE.html +0 -2
  1980. package/docs/variables/MOVEMENT_OCCURRENCE_EPSILON.html +0 -1
  1981. package/docs/variables/MOVEMENT_POSITION_EPSILON.html +0 -1
  1982. package/docs/variables/MOVEMENT_SCHEMA_VERSION.html +0 -1
  1983. package/docs/variables/PLUGIN.html +0 -1
  1984. package/docs/variables/ROOM_FETILE_TYPE_MAP.html +0 -2
  1985. package/docs/variables/ROOM_TYPE_MAP.html +0 -2
  1986. package/docs/variables/Util.ANIME_PRESETS.html +0 -2
  1987. package/docs/variables/Util.CURRENT_PANO_IMAGE_DEFAULT_IMAGE.html +0 -2
  1988. package/docs/variables/Util.DEFAULT_ANIME_CONFIG.html +0 -2
  1989. package/docs/variables/Util.DEFAULT_STATIC_PREFIX.html +0 -2
  1990. package/docs/variables/Util.DNALOGEL_DEFAULT_ASSETS.html +0 -2
  1991. package/docs/variables/Util.ENTRY_DOOR_DEFAULT_IMAGE.html +0 -2
  1992. package/docs/variables/Util.FLOORPLAN_DEFAULT_IMAGE.html +0 -2
  1993. package/docs/variables/Util.GUIDELINE_DEFAULT_ARROW_TEXTURE.html +0 -2
  1994. package/docs/variables/Util.GUIDELINE_WHITE_ARROW_TEXTURE.html +0 -2
  1995. package/docs/variables/Util.MODEL_CHASSIS_COMPASS_DEFAULT_MODEL.html +0 -2
  1996. package/docs/variables/Util.MODEL_ENTRY_DOOR_GUIDE_PLUGIN_DEFAULT_MODEL.html +0 -2
  1997. package/docs/variables/Util.PANO_COMPASS_DEFAULT_IMAGE.html +0 -2
  1998. package/docs/variables/Util.PANO_SPATIAL_TAG_BLUR_IMAGE.html +0 -2
  1999. package/docs/variables/Util.PANO_TAG_DEFAULT_LINK_ICON.html +0 -2
  2000. package/docs/variables/defaultGlobalConfig.html +0 -1
  2001. package/docs/variables/itemLabelPluginServerParams.html +0 -1
  2002. package/docs/variables/modelItemLabelPluginServerParams.html +0 -1
  2003. package/docs/variables/modelRoomLabelPluginServerParams.html +0 -1
  2004. package/libs/AreaMakerPlugin/Controller.d.ts +0 -96
  2005. package/libs/AreaMakerPlugin/Controller.js +0 -392
  2006. package/libs/AreaMakerPlugin/index.d.ts +0 -4
  2007. package/libs/AreaMakerPlugin/index.js +0 -91
  2008. package/libs/AreaMakerPlugin/typing.d.ts +0 -167
  2009. package/libs/AreaMakerPlugin/typing.js +0 -1
  2010. package/libs/AreaMakerPlugin/utils/Item.d.ts +0 -137
  2011. package/libs/AreaMakerPlugin/utils/Item.js +0 -365
  2012. package/libs/CSS3DRenderPlugin/Controller.d.ts +0 -87
  2013. package/libs/CSS3DRenderPlugin/Controller.js +0 -192
  2014. package/libs/CSS3DRenderPlugin/index.d.ts +0 -6
  2015. package/libs/CSS3DRenderPlugin/index.js +0 -76
  2016. package/libs/CSS3DRenderPlugin/typing.d.ts +0 -26
  2017. package/libs/CSS3DRenderPlugin/typing.js +0 -1
  2018. package/libs/CSS3DRenderPlugin/utils/generateBehindFiveElement.d.ts +0 -3
  2019. package/libs/CSS3DRenderPlugin/utils/generateBehindFiveElement.js +0 -32
  2020. package/libs/CSS3DRenderPlugin/utils/getAllCSS3DObject.d.ts +0 -3
  2021. package/libs/CSS3DRenderPlugin/utils/getAllCSS3DObject.js +0 -12
  2022. package/libs/CSS3DRenderPlugin/utils/index.d.ts +0 -3
  2023. package/libs/CSS3DRenderPlugin/utils/index.js +0 -11
  2024. package/libs/CSS3DRenderPlugin/utils/positionToVector3.d.ts +0 -1
  2025. package/libs/CSS3DRenderPlugin/utils/positionToVector3.js +0 -7
  2026. package/libs/CSS3DRenderPlugin/utils/random.d.ts +0 -1
  2027. package/libs/CSS3DRenderPlugin/utils/random.js +0 -6
  2028. package/libs/CSS3DRenderPlugin/utils/three/CSS3DGroup.d.ts +0 -21
  2029. package/libs/CSS3DRenderPlugin/utils/three/CSS3DGroup.js +0 -55
  2030. package/libs/CSS3DRenderPlugin/utils/three/CSS3DObject.d.ts +0 -55
  2031. package/libs/CSS3DRenderPlugin/utils/three/CSS3DObject.js +0 -182
  2032. package/libs/CSS3DRenderPlugin/utils/three/CSS3DRender.d.ts +0 -184
  2033. package/libs/CSS3DRenderPlugin/utils/three/CSS3DRender.js +0 -368
  2034. package/libs/CSS3DRenderPlugin/utils/three/CSS3DRenderer.d.ts +0 -1
  2035. package/libs/CSS3DRenderPlugin/utils/three/CSS3DRenderer.js +0 -8
  2036. package/libs/CSS3DRenderPlugin/utils/three/CSS3DScene.d.ts +0 -12
  2037. package/libs/CSS3DRenderPlugin/utils/three/CSS3DScene.js +0 -40
  2038. package/libs/CSS3DRenderPlugin/utils/three/CSS3DSprite.d.ts +0 -5
  2039. package/libs/CSS3DRenderPlugin/utils/three/CSS3DSprite.js +0 -15
  2040. package/libs/CameraMovementPlugin/CameraMovementPlugin.d.ts +0 -7
  2041. package/libs/CameraMovementPlugin/CameraMovementPlugin.js +0 -99
  2042. package/libs/CameraMovementPlugin/index.d.ts +0 -5
  2043. package/libs/CameraMovementPlugin/index.js +0 -14
  2044. package/libs/CameraMovementPlugin/typing.d.ts +0 -68
  2045. package/libs/CameraMovementPlugin/typing.js +0 -5
  2046. package/libs/CruisePlugin/BaseController.d.ts +0 -165
  2047. package/libs/CruisePlugin/BaseController.js +0 -287
  2048. package/libs/CruisePlugin/Move.d.ts +0 -56
  2049. package/libs/CruisePlugin/Move.js +0 -487
  2050. package/libs/CruisePlugin/Work.d.ts +0 -127
  2051. package/libs/CruisePlugin/Work.js +0 -907
  2052. package/libs/CruisePlugin/index.d.ts +0 -12
  2053. package/libs/CruisePlugin/index.js +0 -359
  2054. package/libs/CruisePlugin/typing/index.js +0 -6
  2055. package/libs/CruisePlugin/typing.d.ts +0 -157
  2056. package/libs/CruisePlugin/typing.js +0 -1
  2057. package/libs/CruisePlugin/utils/coordinatesAngle.d.ts +0 -28
  2058. package/libs/CruisePlugin/utils/coordinatesAngle.js +0 -14
  2059. package/libs/CruisePlugin/utils/coordinatesToVector.d.ts +0 -7
  2060. package/libs/CruisePlugin/utils/coordinatesToVector.js +0 -15
  2061. package/libs/CruisePlugin/utils/formatRad.js +0 -7
  2062. package/libs/CruisePlugin/utils/getFiveStateOnCurve.d.ts +0 -11
  2063. package/libs/CruisePlugin/utils/getFiveStateOnCurve.js +0 -11
  2064. package/libs/CruisePlugin/utils/linerValue.js +0 -7
  2065. package/libs/CruisePlugin/utils/safeCall.d.ts +0 -1
  2066. package/libs/CruisePlugin/utils/safeCall.js +0 -28
  2067. package/libs/CruisePlugin/utils/sleep.d.ts +0 -1
  2068. package/libs/CruisePlugin/utils/sleep.js +0 -10
  2069. package/libs/CurrentPanoImagePlugin/Controller.d.ts +0 -103
  2070. package/libs/CurrentPanoImagePlugin/Controller.js +0 -336
  2071. package/libs/CurrentPanoImagePlugin/index.d.ts +0 -7
  2072. package/libs/CurrentPanoImagePlugin/index.js +0 -81
  2073. package/libs/CurrentPanoImagePlugin/typings.d.ts +0 -58
  2074. package/libs/CurrentPanoImagePlugin/typings.js +0 -1
  2075. package/libs/DigitalPerformancePlugin/animation-script-adapter.d.ts +0 -20
  2076. package/libs/DigitalPerformancePlugin/animation-script-adapter.js +0 -234
  2077. package/libs/DigitalPerformancePlugin/controller/index.d.ts +0 -232
  2078. package/libs/DigitalPerformancePlugin/controller/index.js +0 -847
  2079. package/libs/DigitalPerformancePlugin/core/DigitalHuman.d.ts +0 -96
  2080. package/libs/DigitalPerformancePlugin/core/DigitalHuman.js +0 -333
  2081. package/libs/DigitalPerformancePlugin/core/DigitalPerformanceNameplate.d.ts +0 -115
  2082. package/libs/DigitalPerformancePlugin/core/DigitalPerformanceNameplate.js +0 -266
  2083. package/libs/DigitalPerformancePlugin/core/DigitalPlayground.d.ts +0 -47
  2084. package/libs/DigitalPerformancePlugin/core/DigitalPlayground.js +0 -184
  2085. package/libs/DigitalPerformancePlugin/core/DigitalStateMachine.d.ts +0 -152
  2086. package/libs/DigitalPerformancePlugin/core/DigitalStateMachine.js +0 -153
  2087. package/libs/DigitalPerformancePlugin/core/Trace.d.ts +0 -9
  2088. package/libs/DigitalPerformancePlugin/core/Trace.js +0 -23
  2089. package/libs/DigitalPerformancePlugin/index.d.ts +0 -16
  2090. package/libs/DigitalPerformancePlugin/index.js +0 -36
  2091. package/libs/DigitalPerformancePlugin/mock.d.ts +0 -76
  2092. package/libs/DigitalPerformancePlugin/mock.js +0 -379
  2093. package/libs/DigitalPerformancePlugin/movement-track-classifier.d.ts +0 -52
  2094. package/libs/DigitalPerformancePlugin/movement-track-classifier.js +0 -227
  2095. package/libs/DigitalPerformancePlugin/transform-script-data.d.ts +0 -7
  2096. package/libs/DigitalPerformancePlugin/transform-script-data.js +0 -72
  2097. package/libs/DigitalPerformancePlugin/typings/index.d.ts +0 -87
  2098. package/libs/DigitalPerformancePlugin/typings/index.js +0 -1
  2099. package/libs/DigitalPerformanceV2Plugin/controller/index.d.ts +0 -401
  2100. package/libs/DigitalPerformanceV2Plugin/controller/index.js +0 -874
  2101. package/libs/DigitalPerformanceV2Plugin/core/CameraDirector.d.ts +0 -61
  2102. package/libs/DigitalPerformanceV2Plugin/core/CameraDirector.js +0 -101
  2103. package/libs/DigitalPerformanceV2Plugin/core/CameraSampler.d.ts +0 -53
  2104. package/libs/DigitalPerformanceV2Plugin/core/CameraSampler.js +0 -91
  2105. package/libs/DigitalPerformanceV2Plugin/core/CameraTrack.d.ts +0 -21
  2106. package/libs/DigitalPerformanceV2Plugin/core/CameraTrack.js +0 -32
  2107. package/libs/DigitalPerformanceV2Plugin/core/FiveModelCameraBridge.d.ts +0 -39
  2108. package/libs/DigitalPerformanceV2Plugin/core/FiveModelCameraBridge.js +0 -72
  2109. package/libs/DigitalPerformanceV2Plugin/core/PerformanceClock.d.ts +0 -55
  2110. package/libs/DigitalPerformanceV2Plugin/core/PerformanceClock.js +0 -98
  2111. package/libs/DigitalPerformanceV2Plugin/core/Playground.d.ts +0 -112
  2112. package/libs/DigitalPerformanceV2Plugin/core/Playground.js +0 -219
  2113. package/libs/DigitalPerformanceV2Plugin/core/shared.d.ts +0 -4
  2114. package/libs/DigitalPerformanceV2Plugin/core/shared.js +0 -12
  2115. package/libs/DigitalPerformanceV2Plugin/index/index.js +0 -15
  2116. package/libs/DigitalPerformanceV2Plugin/index.d.ts +0 -11
  2117. package/libs/DigitalPerformanceV2Plugin/index.js +0 -29
  2118. package/libs/DigitalPerformanceV2Plugin/typings/index.d.ts +0 -124
  2119. package/libs/DigitalPerformanceV2Plugin/typings/index.js +0 -1
  2120. package/libs/FireScenePlugin/FireControl.d.ts +0 -153
  2121. package/libs/FireScenePlugin/FireControl.js +0 -450
  2122. package/libs/FireScenePlugin/SequencePlayer.d.ts +0 -41
  2123. package/libs/FireScenePlugin/SequencePlayer.js +0 -114
  2124. package/libs/FireScenePlugin/constants.d.ts +0 -28
  2125. package/libs/FireScenePlugin/constants.js +0 -26
  2126. package/libs/FireScenePlugin/fire/config.d.ts +0 -10
  2127. package/libs/FireScenePlugin/fire/config.js +0 -22
  2128. package/libs/FireScenePlugin/fire/index.d.ts +0 -6
  2129. package/libs/FireScenePlugin/fire/index.js +0 -13
  2130. package/libs/FireScenePlugin/fire/managers/FireManager.d.ts +0 -76
  2131. package/libs/FireScenePlugin/fire/managers/FireManager.js +0 -236
  2132. package/libs/FireScenePlugin/fire/type.d.ts +0 -51
  2133. package/libs/FireScenePlugin/fire/type.js +0 -1
  2134. package/libs/FireScenePlugin/index.d.ts +0 -6
  2135. package/libs/FireScenePlugin/index.js +0 -99
  2136. package/libs/FireScenePlugin/smoke/config.d.ts +0 -8
  2137. package/libs/FireScenePlugin/smoke/config.js +0 -18
  2138. package/libs/FireScenePlugin/smoke/index.d.ts +0 -1
  2139. package/libs/FireScenePlugin/smoke/index.js +0 -10
  2140. package/libs/FireScenePlugin/smoke/managers/NormalSmokeManager.d.ts +0 -49
  2141. package/libs/FireScenePlugin/smoke/managers/NormalSmokeManager.js +0 -136
  2142. package/libs/FireScenePlugin/smoke/managers/SmokeManager.d.ts +0 -89
  2143. package/libs/FireScenePlugin/smoke/managers/SmokeManager.js +0 -137
  2144. package/libs/FireScenePlugin/typing.d.ts +0 -55
  2145. package/libs/FireScenePlugin/typing.js +0 -1
  2146. package/libs/FireScenePlugin/utils/areaBounds.d.ts +0 -14
  2147. package/libs/FireScenePlugin/utils/areaBounds.js +0 -30
  2148. package/libs/FireScenePlugin/utils/particle.d.ts +0 -5
  2149. package/libs/FireScenePlugin/utils/particle.js +0 -7
  2150. package/libs/FireScenePlugin/utils/particleTexture.d.ts +0 -21
  2151. package/libs/FireScenePlugin/utils/particleTexture.js +0 -40
  2152. package/libs/FireScenePlugin/utils/radialSpread.d.ts +0 -54
  2153. package/libs/FireScenePlugin/utils/radialSpread.js +0 -75
  2154. package/libs/FireScenePlugin/utils/spread.d.ts +0 -17
  2155. package/libs/FireScenePlugin/utils/spread.js +0 -17
  2156. package/libs/GuideLinePlugin/Components/Tag.js +0 -293
  2157. package/libs/GuideLinePlugin/Components/Tag.svelte.d.ts +0 -1
  2158. package/libs/GuideLinePlugin/Controller.d.ts +0 -98
  2159. package/libs/GuideLinePlugin/Controller.js +0 -579
  2160. package/libs/GuideLinePlugin/GuideLineItem/index.js +0 -139
  2161. package/libs/GuideLinePlugin/GuideLineItem.d.ts +0 -36
  2162. package/libs/GuideLinePlugin/GuideLineItem.js +0 -351
  2163. package/libs/GuideLinePlugin/GuideLineModeItem/index.js +0 -545
  2164. package/libs/GuideLinePlugin/GuideLineModeItem.d.ts +0 -152
  2165. package/libs/GuideLinePlugin/GuideLineModeItem.js +0 -333
  2166. package/libs/GuideLinePlugin/index.d.ts +0 -10
  2167. package/libs/GuideLinePlugin/index.js +0 -355
  2168. package/libs/GuideLinePlugin/typing.d.ts +0 -199
  2169. package/libs/GuideLinePlugin/typing.js +0 -1
  2170. package/libs/GuideLinePlugin/utils/createLineGeometry.d.ts +0 -36
  2171. package/libs/GuideLinePlugin/utils/createLineGeometry.js +0 -115
  2172. package/libs/GuideLinePlugin/utils/createPath.d.ts +0 -3
  2173. package/libs/GuideLinePlugin/utils/createPath.js +0 -34
  2174. package/libs/GuideLinePlugin/utils/dataFormatter.d.ts +0 -2
  2175. package/libs/GuideLinePlugin/utils/dataFormatter.js +0 -6
  2176. package/libs/GuideLinePlugin/utils/getArrowMaterial.d.ts +0 -4
  2177. package/libs/GuideLinePlugin/utils/getArrowMaterial.js +0 -13
  2178. package/libs/GuideLinePlugin/utils/getPoint.d.ts +0 -3
  2179. package/libs/GuideLinePlugin/utils/getPoint.js +0 -22
  2180. package/libs/GuideLinePlugin/utils/index.d.ts +0 -6
  2181. package/libs/GuideLinePlugin/utils/index.js +0 -6
  2182. package/libs/ItemLabelPlugin/ItemLabelComponent.js +0 -321
  2183. package/libs/ItemLabelPlugin/ItemLabelComponent.svelte.d.ts +0 -1
  2184. package/libs/ItemLabelPlugin/ItemLabelItem.js +0 -211
  2185. package/libs/ItemLabelPlugin/ItemLabelItem.svelte.d.ts +0 -1
  2186. package/libs/ItemLabelPlugin/Plugin.d.ts +0 -4
  2187. package/libs/ItemLabelPlugin/Plugin.js +0 -89
  2188. package/libs/ItemLabelPlugin/events.type.d.ts +0 -9
  2189. package/libs/ItemLabelPlugin/events.type.js +0 -1
  2190. package/libs/ItemLabelPlugin/index.d.ts +0 -9
  2191. package/libs/ItemLabelPlugin/index.js +0 -24
  2192. package/libs/ItemLabelPlugin/typings.d.ts +0 -65
  2193. package/libs/ItemLabelPlugin/typings.js +0 -4
  2194. package/libs/ItemLabelPlugin/utils/getLabelTransform.d.ts +0 -1
  2195. package/libs/ItemLabelPlugin/utils/getLabelTransform.js +0 -4
  2196. package/libs/ItemLabelPlugin/utils/getStrokeLength.d.ts +0 -5
  2197. package/libs/ItemLabelPlugin/utils/getStrokeLength.js +0 -16
  2198. package/libs/ItemLabelPlugin/utils/isImpacted.d.ts +0 -8
  2199. package/libs/ItemLabelPlugin/utils/isImpacted.js +0 -10
  2200. package/libs/ItemLabelPlugin/utils/parseData.d.ts +0 -3
  2201. package/libs/ItemLabelPlugin/utils/parseData.js +0 -21
  2202. package/libs/ItemLabelPlugin/utils/transform2RenderData.d.ts +0 -3
  2203. package/libs/ItemLabelPlugin/utils/transform2RenderData.js +0 -21
  2204. package/libs/MeasurePlugin/Controller.d.ts +0 -167
  2205. package/libs/MeasurePlugin/Controller.js +0 -871
  2206. package/libs/MeasurePlugin/index.d.ts +0 -17
  2207. package/libs/MeasurePlugin/index.js +0 -92
  2208. package/libs/MeasurePlugin/utils/MeasureMesh.d.ts +0 -29
  2209. package/libs/MeasurePlugin/utils/MeasureMesh.js +0 -124
  2210. package/libs/MeasurePlugin/utils/validatePolygon.d.ts +0 -2
  2211. package/libs/MeasurePlugin/utils/validatePolygon.js +0 -22
  2212. package/libs/ModelChassisCompassPlugin/Plugin.d.ts +0 -19
  2213. package/libs/ModelChassisCompassPlugin/Plugin.js +0 -148
  2214. package/libs/ModelChassisCompassPlugin/index.d.ts +0 -4
  2215. package/libs/ModelChassisCompassPlugin/index.js +0 -80
  2216. package/libs/ModelEntryDoorGuidePlugin/Plugin.d.ts +0 -27
  2217. package/libs/ModelEntryDoorGuidePlugin/Plugin.js +0 -156
  2218. package/libs/ModelEntryDoorGuidePlugin/index.d.ts +0 -4
  2219. package/libs/ModelEntryDoorGuidePlugin/index.js +0 -81
  2220. package/libs/ModelItemLabelPlugin/ItemLabelComponent.js +0 -248
  2221. package/libs/ModelItemLabelPlugin/ItemLabelComponent.svelte.d.ts +0 -1
  2222. package/libs/ModelItemLabelPlugin/ItemLabelItem.js +0 -94
  2223. package/libs/ModelItemLabelPlugin/ItemLabelItem.svelte.d.ts +0 -1
  2224. package/libs/ModelItemLabelPlugin/ModelItemLabelPlugin.d.ts +0 -4
  2225. package/libs/ModelItemLabelPlugin/ModelItemLabelPlugin.js +0 -84
  2226. package/libs/ModelItemLabelPlugin/events.type.d.ts +0 -9
  2227. package/libs/ModelItemLabelPlugin/events.type.js +0 -1
  2228. package/libs/ModelItemLabelPlugin/index.d.ts +0 -9
  2229. package/libs/ModelItemLabelPlugin/index.js +0 -20
  2230. package/libs/ModelItemLabelPlugin/typings.d.ts +0 -56
  2231. package/libs/ModelItemLabelPlugin/typings.js +0 -4
  2232. package/libs/ModelItemLabelPlugin/utils/parseData.d.ts +0 -3
  2233. package/libs/ModelItemLabelPlugin/utils/parseData.js +0 -19
  2234. package/libs/ModelMakerPlugin/Controller.d.ts +0 -194
  2235. package/libs/ModelMakerPlugin/Controller.js +0 -652
  2236. package/libs/ModelMakerPlugin/index.d.ts +0 -9
  2237. package/libs/ModelMakerPlugin/index.js +0 -112
  2238. package/libs/ModelMakerPlugin/item/baseItem.d.ts +0 -68
  2239. package/libs/ModelMakerPlugin/item/baseItem.js +0 -128
  2240. package/libs/ModelMakerPlugin/item/boxItem.d.ts +0 -20
  2241. package/libs/ModelMakerPlugin/item/boxItem.js +0 -102
  2242. package/libs/ModelMakerPlugin/item/polygonItem.d.ts +0 -19
  2243. package/libs/ModelMakerPlugin/item/polygonItem.js +0 -102
  2244. package/libs/ModelMakerPlugin/item/prismItem.d.ts +0 -18
  2245. package/libs/ModelMakerPlugin/item/prismItem.js +0 -111
  2246. package/libs/ModelMakerPlugin/typings/config.d.ts +0 -26
  2247. package/libs/ModelMakerPlugin/typings/config.js +0 -1
  2248. package/libs/ModelMakerPlugin/typings/data.d.ts +0 -110
  2249. package/libs/ModelMakerPlugin/typings/data.js +0 -1
  2250. package/libs/ModelMakerPlugin/typings/index.d.ts +0 -52
  2251. package/libs/ModelMakerPlugin/typings/index.js +0 -1
  2252. package/libs/ModelMakerPlugin/utils/Text.js +0 -66
  2253. package/libs/ModelMakerPlugin/utils/Text.svelte.d.ts +0 -1
  2254. package/libs/ModelMakerPlugin/utils/getTagOcclusionObjects.d.ts +0 -4
  2255. package/libs/ModelMakerPlugin/utils/getTagOcclusionObjects.js +0 -14
  2256. package/libs/ModelMakerPlugin/utils/tagRenderer.d.ts +0 -3
  2257. package/libs/ModelMakerPlugin/utils/tagRenderer.js +0 -36
  2258. package/libs/ModelRoomLabelPlugin/Assets/roomLabelBg.d.ts +0 -1
  2259. package/libs/ModelRoomLabelPlugin/Assets/roomLabelBg.js +0 -4
  2260. package/libs/ModelRoomLabelPlugin/Controller.d.ts +0 -38
  2261. package/libs/ModelRoomLabelPlugin/Controller.js +0 -88
  2262. package/libs/ModelRoomLabelPlugin/RoomLabelItem.js +0 -154
  2263. package/libs/ModelRoomLabelPlugin/RoomLabelItem.svelte.d.ts +0 -1
  2264. package/libs/ModelRoomLabelPlugin/RoomLabelItems.js +0 -217
  2265. package/libs/ModelRoomLabelPlugin/RoomLabelItems.svelte.d.ts +0 -1
  2266. package/libs/ModelRoomLabelPlugin/index.d.ts +0 -12
  2267. package/libs/ModelRoomLabelPlugin/index.js +0 -20
  2268. package/libs/ModelRoomLabelPlugin/typings.d.ts +0 -35
  2269. package/libs/ModelRoomLabelPlugin/typings.js +0 -1
  2270. package/libs/ModelRoomLabelPlugin/utils/parseData.d.ts +0 -3
  2271. package/libs/ModelRoomLabelPlugin/utils/parseData.js +0 -16
  2272. package/libs/ModelTVVideoPlugin/Plugin.d.ts +0 -4
  2273. package/libs/ModelTVVideoPlugin/Plugin.js +0 -291
  2274. package/libs/ModelTVVideoPlugin/index.d.ts +0 -5
  2275. package/libs/ModelTVVideoPlugin/index.js +0 -80
  2276. package/libs/ModelTVVideoPlugin/typings.d.ts +0 -27
  2277. package/libs/ModelTVVideoPlugin/typings.js +0 -4
  2278. package/libs/ModelTVVideoPlugin/utils/parseData.d.ts +0 -3
  2279. package/libs/ModelTVVideoPlugin/utils/parseData.js +0 -20
  2280. package/libs/ModelViewPlugin/Plugin.d.ts +0 -42
  2281. package/libs/ModelViewPlugin/Plugin.js +0 -196
  2282. package/libs/ModelViewPlugin/index.d.ts +0 -4
  2283. package/libs/ModelViewPlugin/index.js +0 -74
  2284. package/libs/Object3DHelperPlugin/Controller.d.ts +0 -153
  2285. package/libs/Object3DHelperPlugin/Controller.js +0 -355
  2286. package/libs/Object3DHelperPlugin/FiveControllerWrapper.d.ts +0 -23
  2287. package/libs/Object3DHelperPlugin/FiveControllerWrapper.js +0 -57
  2288. package/libs/Object3DHelperPlugin/index.d.ts +0 -6
  2289. package/libs/Object3DHelperPlugin/index.js +0 -118
  2290. package/libs/Object3DHelperPlugin/typings.d.ts +0 -38
  2291. package/libs/Object3DHelperPlugin/typings.js +0 -1
  2292. package/libs/PanoCompassPlugin/Assets/roomInfoIcon.d.ts +0 -1
  2293. package/libs/PanoCompassPlugin/Assets/roomInfoIcon.js +0 -4
  2294. package/libs/PanoCompassPlugin/Controller.d.ts +0 -88
  2295. package/libs/PanoCompassPlugin/Controller.js +0 -364
  2296. package/libs/PanoCompassPlugin/getRoomInfoInstance.d.ts +0 -8
  2297. package/libs/PanoCompassPlugin/getRoomInfoInstance.js +0 -24
  2298. package/libs/PanoCompassPlugin/index.d.ts +0 -7
  2299. package/libs/PanoCompassPlugin/index.js +0 -84
  2300. package/libs/PanoCompassPlugin/typings.d.ts +0 -58
  2301. package/libs/PanoCompassPlugin/typings.js +0 -1
  2302. package/libs/PanoCursorRaycasterPlugin/index.d.ts +0 -48
  2303. package/libs/PanoCursorRaycasterPlugin/index.js +0 -61
  2304. package/libs/PanoDoorLabelPlugin/Controller.d.ts +0 -42
  2305. package/libs/PanoDoorLabelPlugin/Controller.js +0 -324
  2306. package/libs/PanoDoorLabelPlugin/DoorLabelItem.js +0 -88
  2307. package/libs/PanoDoorLabelPlugin/DoorLabelItem.svelte.d.ts +0 -1
  2308. package/libs/PanoDoorLabelPlugin/index.d.ts +0 -7
  2309. package/libs/PanoDoorLabelPlugin/index.js +0 -80
  2310. package/libs/PanoDoorLabelPlugin/typings.d.ts +0 -38
  2311. package/libs/PanoDoorLabelPlugin/typings.js +0 -1
  2312. package/libs/PanoDoorLabelPlugin/utils.d.ts +0 -5
  2313. package/libs/PanoDoorLabelPlugin/utils.js +0 -23
  2314. package/libs/PanoMeasurePlugin/Components/Common/CircleButton.js +0 -93
  2315. package/libs/PanoMeasurePlugin/Components/Common/CircleButton.svelte.d.ts +0 -1
  2316. package/libs/PanoMeasurePlugin/Components/Common/Exit.js +0 -42
  2317. package/libs/PanoMeasurePlugin/Components/Common/Exit.svelte.d.ts +0 -1
  2318. package/libs/PanoMeasurePlugin/Components/Common/Switcher0.js +0 -246
  2319. package/libs/PanoMeasurePlugin/Components/Common/Switcher0.svelte.d.ts +0 -1
  2320. package/libs/PanoMeasurePlugin/Components/Common/Switcher1.js +0 -211
  2321. package/libs/PanoMeasurePlugin/Components/Common/Switcher1.svelte.d.ts +0 -1
  2322. package/libs/PanoMeasurePlugin/Components/Common/icons/index.d.ts +0 -4
  2323. package/libs/PanoMeasurePlugin/Components/Common/icons/index.js +0 -7
  2324. package/libs/PanoMeasurePlugin/Components/Controller0.js +0 -327
  2325. package/libs/PanoMeasurePlugin/Components/Controller0.svelte.d.ts +0 -1
  2326. package/libs/PanoMeasurePlugin/Components/Controller1.js +0 -477
  2327. package/libs/PanoMeasurePlugin/Components/Controller1.svelte.d.ts +0 -1
  2328. package/libs/PanoMeasurePlugin/Components/Tip.js +0 -131
  2329. package/libs/PanoMeasurePlugin/Components/Tip.svelte.d.ts +0 -1
  2330. package/libs/PanoMeasurePlugin/Controller/BaseController.d.ts +0 -58
  2331. package/libs/PanoMeasurePlugin/Controller/BaseController.js +0 -91
  2332. package/libs/PanoMeasurePlugin/Controller/EditController.d.ts +0 -58
  2333. package/libs/PanoMeasurePlugin/Controller/EditController.js +0 -390
  2334. package/libs/PanoMeasurePlugin/Controller/MixedController.d.ts +0 -38
  2335. package/libs/PanoMeasurePlugin/Controller/MixedController.js +0 -150
  2336. package/libs/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +0 -12
  2337. package/libs/PanoMeasurePlugin/Controller/ShortcutKeyController.js +0 -30
  2338. package/libs/PanoMeasurePlugin/Controller/ViewController.d.ts +0 -13
  2339. package/libs/PanoMeasurePlugin/Controller/ViewController.js +0 -85
  2340. package/libs/PanoMeasurePlugin/Controller/WatchController.d.ts +0 -33
  2341. package/libs/PanoMeasurePlugin/Controller/WatchController.js +0 -275
  2342. package/libs/PanoMeasurePlugin/Controller/index.d.ts +0 -115
  2343. package/libs/PanoMeasurePlugin/Controller/index.js +0 -364
  2344. package/libs/PanoMeasurePlugin/Model/area.d.ts +0 -75
  2345. package/libs/PanoMeasurePlugin/Model/area.js +0 -189
  2346. package/libs/PanoMeasurePlugin/Model/index.d.ts +0 -45
  2347. package/libs/PanoMeasurePlugin/Model/index.js +0 -101
  2348. package/libs/PanoMeasurePlugin/Model/line.d.ts +0 -39
  2349. package/libs/PanoMeasurePlugin/Model/line.js +0 -82
  2350. package/libs/PanoMeasurePlugin/Model/point.d.ts +0 -10
  2351. package/libs/PanoMeasurePlugin/Model/point.js +0 -27
  2352. package/libs/PanoMeasurePlugin/Model/polygon.d.ts +0 -14
  2353. package/libs/PanoMeasurePlugin/Model/polygon.js +0 -47
  2354. package/libs/PanoMeasurePlugin/Model/polyline.d.ts +0 -47
  2355. package/libs/PanoMeasurePlugin/Model/polyline.js +0 -131
  2356. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.d.ts +0 -2
  2357. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.js +0 -14
  2358. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.d.ts +0 -2
  2359. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.js +0 -4
  2360. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.d.ts +0 -2
  2361. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.js +0 -4
  2362. package/libs/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +0 -30
  2363. package/libs/PanoMeasurePlugin/Modules/DeleteDom/index.js +0 -81
  2364. package/libs/PanoMeasurePlugin/Modules/GuideController.d.ts +0 -26
  2365. package/libs/PanoMeasurePlugin/Modules/GuideController.js +0 -55
  2366. package/libs/PanoMeasurePlugin/Modules/Magnifier.d.ts +0 -19
  2367. package/libs/PanoMeasurePlugin/Modules/Magnifier.js +0 -71
  2368. package/libs/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +0 -2
  2369. package/libs/PanoMeasurePlugin/Modules/UIController/HTML.js +0 -129
  2370. package/libs/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +0 -19
  2371. package/libs/PanoMeasurePlugin/Modules/UIController/MainBtnController.js +0 -75
  2372. package/libs/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +0 -12
  2373. package/libs/PanoMeasurePlugin/Modules/UIController/Revoke/index.js +0 -35
  2374. package/libs/PanoMeasurePlugin/Modules/UIController/index.d.ts +0 -34
  2375. package/libs/PanoMeasurePlugin/Modules/UIController/index.js +0 -171
  2376. package/libs/PanoMeasurePlugin/Modules/UIController/mobileHTML.d.ts +0 -4
  2377. package/libs/PanoMeasurePlugin/Modules/UIController/mobileHTML.js +0 -82
  2378. package/libs/PanoMeasurePlugin/Modules/UIController/mobileMainBtnController.d.ts +0 -15
  2379. package/libs/PanoMeasurePlugin/Modules/UIController/mobileMainBtnController.js +0 -53
  2380. package/libs/PanoMeasurePlugin/Modules/UIController/style.d.ts +0 -8
  2381. package/libs/PanoMeasurePlugin/Modules/UIController/style.js +0 -62
  2382. package/libs/PanoMeasurePlugin/Modules/rangePiece/html.d.ts +0 -4
  2383. package/libs/PanoMeasurePlugin/Modules/rangePiece/html.js +0 -67
  2384. package/libs/PanoMeasurePlugin/Modules/rangePiece/index.d.ts +0 -42
  2385. package/libs/PanoMeasurePlugin/Modules/rangePiece/index.js +0 -135
  2386. package/libs/PanoMeasurePlugin/index.d.ts +0 -14
  2387. package/libs/PanoMeasurePlugin/index.js +0 -145
  2388. package/libs/PanoMeasurePlugin/typings/data.d.ts +0 -58
  2389. package/libs/PanoMeasurePlugin/typings/data.js +0 -1
  2390. package/libs/PanoMeasurePlugin/typings/event.type.d.ts +0 -55
  2391. package/libs/PanoMeasurePlugin/typings/event.type.js +0 -1
  2392. package/libs/PanoMeasurePlugin/typings/index.d.ts +0 -15
  2393. package/libs/PanoMeasurePlugin/typings/index.js +0 -1
  2394. package/libs/PanoMeasurePlugin/typings/utils.type.js +0 -1
  2395. package/libs/PanoMeasurePlugin/utils/clearGroup.d.ts +0 -2
  2396. package/libs/PanoMeasurePlugin/utils/clearGroup.js +0 -6
  2397. package/libs/PanoMeasurePlugin/utils/constants.d.ts +0 -4
  2398. package/libs/PanoMeasurePlugin/utils/constants.js +0 -35
  2399. package/libs/PanoMeasurePlugin/utils/dom/areaDom.d.ts +0 -22
  2400. package/libs/PanoMeasurePlugin/utils/dom/areaDom.js +0 -117
  2401. package/libs/PanoMeasurePlugin/utils/dom/base.d.ts +0 -29
  2402. package/libs/PanoMeasurePlugin/utils/dom/base.js +0 -78
  2403. package/libs/PanoMeasurePlugin/utils/dom/distanceItem.d.ts +0 -34
  2404. package/libs/PanoMeasurePlugin/utils/dom/distanceItem.js +0 -147
  2405. package/libs/PanoMeasurePlugin/utils/findClosestPoint.d.ts +0 -10
  2406. package/libs/PanoMeasurePlugin/utils/findClosestPoint.js +0 -16
  2407. package/libs/PanoMeasurePlugin/utils/ironbox.d.ts +0 -1
  2408. package/libs/PanoMeasurePlugin/utils/ironbox.js +0 -4
  2409. package/libs/PanoMeasurePlugin/utils/isIntersecting.d.ts +0 -15
  2410. package/libs/PanoMeasurePlugin/utils/isIntersecting.js +0 -52
  2411. package/libs/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +0 -3
  2412. package/libs/PanoMeasurePlugin/utils/isNDCPointInScreen.js +0 -12
  2413. package/libs/PanoMeasurePlugin/utils/line.d.ts +0 -18
  2414. package/libs/PanoMeasurePlugin/utils/line.js +0 -19
  2415. package/libs/PanoMeasurePlugin/utils/math.d.ts +0 -17
  2416. package/libs/PanoMeasurePlugin/utils/math.js +0 -13
  2417. package/libs/PanoMeasurePlugin/utils/mouseGroup.d.ts +0 -7
  2418. package/libs/PanoMeasurePlugin/utils/mouseGroup.js +0 -46
  2419. package/libs/PanoMeasurePlugin/utils/ndc2Screen.d.ts +0 -6
  2420. package/libs/PanoMeasurePlugin/utils/ndc2Screen.js +0 -8
  2421. package/libs/PanoRulerPlugin/Plugin.d.ts +0 -34
  2422. package/libs/PanoRulerPlugin/Plugin.js +0 -277
  2423. package/libs/PanoRulerPlugin/index.d.ts +0 -5
  2424. package/libs/PanoRulerPlugin/index.js +0 -10
  2425. package/libs/PanoRulerPlugin/style.d.ts +0 -2
  2426. package/libs/PanoRulerPlugin/style.js +0 -90
  2427. package/libs/PanoRulerPlugin/typings.d.ts +0 -21
  2428. package/libs/PanoRulerPlugin/typings.js +0 -1
  2429. package/libs/PanoRulerProPlugin/Controller.d.ts +0 -15
  2430. package/libs/PanoRulerProPlugin/Controller.js +0 -168
  2431. package/libs/PanoRulerProPlugin/RulerItem.js +0 -207
  2432. package/libs/PanoRulerProPlugin/RulerItem.svelte.d.ts +0 -1
  2433. package/libs/PanoRulerProPlugin/RulerItems.js +0 -255
  2434. package/libs/PanoRulerProPlugin/RulerItems.svelte.d.ts +0 -1
  2435. package/libs/PanoRulerProPlugin/index.d.ts +0 -8
  2436. package/libs/PanoRulerProPlugin/index.js +0 -81
  2437. package/libs/PanoRulerProPlugin/typings.d.ts +0 -46
  2438. package/libs/PanoRulerProPlugin/typings.js +0 -1
  2439. package/libs/PanoSpatialTagPlugin/Components/origins.js +0 -121
  2440. package/libs/PanoSpatialTagPlugin/Components/origins.svelte.d.ts +0 -1
  2441. package/libs/PanoSpatialTagPlugin/Components/tag.js +0 -206
  2442. package/libs/PanoSpatialTagPlugin/Components/tag.svelte.d.ts +0 -1
  2443. package/libs/PanoSpatialTagPlugin/Plugin.d.ts +0 -35
  2444. package/libs/PanoSpatialTagPlugin/Plugin.js +0 -307
  2445. package/libs/PanoSpatialTagPlugin/index.d.ts +0 -5
  2446. package/libs/PanoSpatialTagPlugin/index.js +0 -83
  2447. package/libs/PanoSpatialTagPlugin/store.d.ts +0 -1
  2448. package/libs/PanoSpatialTagPlugin/store.js +0 -6
  2449. package/libs/PanoSpatialTagPlugin/style.js +0 -11
  2450. package/libs/PanoSpatialTagPlugin/typings.d.ts +0 -40
  2451. package/libs/PanoSpatialTagPlugin/typings.js +0 -1
  2452. package/libs/PanoTagPlugin/Archive/deprecated.d.ts +0 -73
  2453. package/libs/PanoTagPlugin/Archive/deprecated.js +0 -6
  2454. package/libs/PanoTagPlugin/Assets/Icon.d.ts +0 -4
  2455. package/libs/PanoTagPlugin/Assets/Icon.js +0 -7
  2456. package/libs/PanoTagPlugin/Components/Common/Arrow.js +0 -128
  2457. package/libs/PanoTagPlugin/Components/Common/Arrow.svelte.d.ts +0 -1
  2458. package/libs/PanoTagPlugin/Components/Common/Audio.js +0 -193
  2459. package/libs/PanoTagPlugin/Components/Common/Audio.svelte.d.ts +0 -1
  2460. package/libs/PanoTagPlugin/Components/Common/AudioPlayer.js +0 -93
  2461. package/libs/PanoTagPlugin/Components/Common/AudioPlayer.svelte.d.ts +0 -1
  2462. package/libs/PanoTagPlugin/Components/Common/Icon/Icon.js +0 -804
  2463. package/libs/PanoTagPlugin/Components/Common/Icon/Icon.svelte.d.ts +0 -1
  2464. package/libs/PanoTagPlugin/Components/Common/Icon/PanoramaIcon.js +0 -186
  2465. package/libs/PanoTagPlugin/Components/Common/Icon/PanoramaIcon.svelte.d.ts +0 -1
  2466. package/libs/PanoTagPlugin/Components/Common/Icon/animationUtils.d.ts +0 -9
  2467. package/libs/PanoTagPlugin/Components/Common/Icon/animationUtils.js +0 -128
  2468. package/libs/PanoTagPlugin/Components/Common/Icon/audioIcon.js +0 -175
  2469. package/libs/PanoTagPlugin/Components/Common/Icon/audioIcon.svelte.d.ts +0 -1
  2470. package/libs/PanoTagPlugin/Components/Common/Icon/tag-popover-arrow-base64.d.ts +0 -8
  2471. package/libs/PanoTagPlugin/Components/Common/Icon/tag-popover-arrow-base64.js +0 -11
  2472. package/libs/PanoTagPlugin/Components/Common/Line/Polyline.js +0 -116
  2473. package/libs/PanoTagPlugin/Components/Common/Line/Polyline.svelte.d.ts +0 -1
  2474. package/libs/PanoTagPlugin/Components/Common/Line/Straight.js +0 -251
  2475. package/libs/PanoTagPlugin/Components/Common/Line/Straight.svelte.d.ts +0 -1
  2476. package/libs/PanoTagPlugin/Components/Common/Media.js +0 -519
  2477. package/libs/PanoTagPlugin/Components/Common/Media.svelte.d.ts +0 -1
  2478. package/libs/PanoTagPlugin/Components/Common/MediaItem.js +0 -468
  2479. package/libs/PanoTagPlugin/Components/Common/MediaItem.svelte.d.ts +0 -1
  2480. package/libs/PanoTagPlugin/Components/Common/Shadow.js +0 -203
  2481. package/libs/PanoTagPlugin/Components/Common/Shadow.svelte.d.ts +0 -1
  2482. package/libs/PanoTagPlugin/Components/Common/TagPoint.js +0 -535
  2483. package/libs/PanoTagPlugin/Components/Common/TagPoint.svelte.d.ts +0 -1
  2484. package/libs/PanoTagPlugin/Components/Common/TagPopover/ArrowRightIcon.js +0 -123
  2485. package/libs/PanoTagPlugin/Components/Common/TagPopover/ArrowRightIcon.svelte.d.ts +0 -1
  2486. package/libs/PanoTagPlugin/Components/Common/TagPopover/PanoramaIcon.js +0 -70
  2487. package/libs/PanoTagPlugin/Components/Common/TagPopover/PanoramaIcon.svelte.d.ts +0 -1
  2488. package/libs/PanoTagPlugin/Components/Common/TagPopover/PopoverContent.js +0 -312
  2489. package/libs/PanoTagPlugin/Components/Common/TagPopover/PopoverContent.svelte.d.ts +0 -1
  2490. package/libs/PanoTagPlugin/Components/Common/TagPopover/ShareIcon.js +0 -123
  2491. package/libs/PanoTagPlugin/Components/Common/TagPopover/ShareIcon.svelte.d.ts +0 -1
  2492. package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopoverArrow.js +0 -95
  2493. package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopoverArrow.svelte.d.ts +0 -1
  2494. package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopoverToolBar.js +0 -291
  2495. package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopoverToolBar.svelte.d.ts +0 -1
  2496. package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopup.js +0 -838
  2497. package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopup.svelte.d.ts +0 -1
  2498. package/libs/PanoTagPlugin/Components/Common/TagPopover/index.js +0 -582
  2499. package/libs/PanoTagPlugin/Components/Common/TagPopover/index.svelte.d.ts +0 -1
  2500. package/libs/PanoTagPlugin/Components/Common/Text/FlyMText.js +0 -198
  2501. package/libs/PanoTagPlugin/Components/Common/Text/FlyMText.svelte.d.ts +0 -1
  2502. package/libs/PanoTagPlugin/Components/Common/Text/FlyText.js +0 -258
  2503. package/libs/PanoTagPlugin/Components/Common/Text/FlyText.svelte.d.ts +0 -1
  2504. package/libs/PanoTagPlugin/Components/Common/Text/MText.js +0 -238
  2505. package/libs/PanoTagPlugin/Components/Common/Text/MText.svelte.d.ts +0 -1
  2506. package/libs/PanoTagPlugin/Components/Common/TextItem.js +0 -129
  2507. package/libs/PanoTagPlugin/Components/Common/TextItem.svelte.d.ts +0 -1
  2508. package/libs/PanoTagPlugin/Components/Common/VideoIcon.js +0 -114
  2509. package/libs/PanoTagPlugin/Components/Common/VideoIcon.svelte.d.ts +0 -1
  2510. package/libs/PanoTagPlugin/Components/Tag/Assets/marketingIcon.d.ts +0 -2
  2511. package/libs/PanoTagPlugin/Components/Tag/Assets/marketingIcon.js +0 -5
  2512. package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioPlaneTag.js +0 -227
  2513. package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioPlaneTag.svelte.d.ts +0 -1
  2514. package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioPoint.js +0 -191
  2515. package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioPoint.svelte.d.ts +0 -1
  2516. package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioTag.js +0 -358
  2517. package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioTag.svelte.d.ts +0 -1
  2518. package/libs/PanoTagPlugin/Components/Tag/AudioTag/index.js +0 -150
  2519. package/libs/PanoTagPlugin/Components/Tag/AudioTag/index.svelte.d.ts +0 -1
  2520. package/libs/PanoTagPlugin/Components/Tag/CustomTag.js +0 -86
  2521. package/libs/PanoTagPlugin/Components/Tag/CustomTag.svelte.d.ts +0 -1
  2522. package/libs/PanoTagPlugin/Components/Tag/ImageTextTag.js +0 -259
  2523. package/libs/PanoTagPlugin/Components/Tag/ImageTextTag.svelte.d.ts +0 -1
  2524. package/libs/PanoTagPlugin/Components/Tag/LinkTag.js +0 -148
  2525. package/libs/PanoTagPlugin/Components/Tag/LinkTag.svelte.d.ts +0 -1
  2526. package/libs/PanoTagPlugin/Components/Tag/MarketingTag.js +0 -719
  2527. package/libs/PanoTagPlugin/Components/Tag/MarketingTag.svelte.d.ts +0 -1
  2528. package/libs/PanoTagPlugin/Components/Tag/MediaPlane.js +0 -184
  2529. package/libs/PanoTagPlugin/Components/Tag/MediaPlane.svelte.d.ts +0 -1
  2530. package/libs/PanoTagPlugin/Components/Tag/PanoramaTag.js +0 -57
  2531. package/libs/PanoTagPlugin/Components/Tag/PanoramaTag.svelte.d.ts +0 -1
  2532. package/libs/PanoTagPlugin/Components/Tag/TextTag/TextPlaneTag.js +0 -216
  2533. package/libs/PanoTagPlugin/Components/Tag/TextTag/TextPlaneTag.svelte.d.ts +0 -1
  2534. package/libs/PanoTagPlugin/Components/Tag/TextTag/TextTag.js +0 -219
  2535. package/libs/PanoTagPlugin/Components/Tag/TextTag/TextTag.svelte.d.ts +0 -1
  2536. package/libs/PanoTagPlugin/Components/Tag/TextTag/index.js +0 -134
  2537. package/libs/PanoTagPlugin/Components/Tag/TextTag/index.svelte.d.ts +0 -1
  2538. package/libs/PanoTagPlugin/Components/Tag/index.js +0 -834
  2539. package/libs/PanoTagPlugin/Components/Tag/index.svelte.d.ts +0 -1
  2540. package/libs/PanoTagPlugin/Components/TagContainer.js +0 -445
  2541. package/libs/PanoTagPlugin/Components/TagContainer.svelte.d.ts +0 -1
  2542. package/libs/PanoTagPlugin/Components/TagItem.js +0 -827
  2543. package/libs/PanoTagPlugin/Components/TagItem.svelte.d.ts +0 -1
  2544. package/libs/PanoTagPlugin/controller/Tag/BaseTag.d.ts +0 -282
  2545. package/libs/PanoTagPlugin/controller/Tag/BaseTag.js +0 -861
  2546. package/libs/PanoTagPlugin/controller/Tag/BoxTag.d.ts +0 -119
  2547. package/libs/PanoTagPlugin/controller/Tag/BoxTag.js +0 -519
  2548. package/libs/PanoTagPlugin/controller/Tag/MaskTag.d.ts +0 -258
  2549. package/libs/PanoTagPlugin/controller/Tag/MaskTag.js +0 -824
  2550. package/libs/PanoTagPlugin/controller/Tag/MaskTag.shaders.d.ts +0 -10
  2551. package/libs/PanoTagPlugin/controller/Tag/MaskTag.shaders.js +0 -100
  2552. package/libs/PanoTagPlugin/controller/Tag/ModelTag.d.ts +0 -15
  2553. package/libs/PanoTagPlugin/controller/Tag/ModelTag.js +0 -303
  2554. package/libs/PanoTagPlugin/controller/Tag/PlaneTag.d.ts +0 -51
  2555. package/libs/PanoTagPlugin/controller/Tag/PlaneTag.js +0 -587
  2556. package/libs/PanoTagPlugin/controller/Tag/PointTag.d.ts +0 -46
  2557. package/libs/PanoTagPlugin/controller/Tag/PointTag.js +0 -304
  2558. package/libs/PanoTagPlugin/controller/Tag/PolygonTag.d.ts +0 -112
  2559. package/libs/PanoTagPlugin/controller/Tag/PolygonTag.js +0 -483
  2560. package/libs/PanoTagPlugin/controller/TagRender.d.ts +0 -36
  2561. package/libs/PanoTagPlugin/controller/TagRender.js +0 -151
  2562. package/libs/PanoTagPlugin/controller/TagUtil.d.ts +0 -93
  2563. package/libs/PanoTagPlugin/controller/TagUtil.js +0 -317
  2564. package/libs/PanoTagPlugin/controller/index.d.ts +0 -227
  2565. package/libs/PanoTagPlugin/controller/index.js +0 -927
  2566. package/libs/PanoTagPlugin/index.d.ts +0 -8
  2567. package/libs/PanoTagPlugin/index.js +0 -325
  2568. package/libs/PanoTagPlugin/tag.config.d.ts +0 -7
  2569. package/libs/PanoTagPlugin/tag.config.js +0 -124
  2570. package/libs/PanoTagPlugin/typings/controller.d.ts +0 -112
  2571. package/libs/PanoTagPlugin/typings/controller.js +0 -1
  2572. package/libs/PanoTagPlugin/typings/index.d.ts +0 -8
  2573. package/libs/PanoTagPlugin/typings/index.js +0 -8
  2574. package/libs/PanoTagPlugin/typings/tag/Tag.d.ts +0 -64
  2575. package/libs/PanoTagPlugin/typings/tag/Tag.js +0 -1
  2576. package/libs/PanoTagPlugin/typings/tag/TagConfig.d.ts +0 -422
  2577. package/libs/PanoTagPlugin/typings/tag/TagConfig.js +0 -16
  2578. package/libs/PanoTagPlugin/typings/tag/TagData.d.ts +0 -176
  2579. package/libs/PanoTagPlugin/typings/tag/TagData.js +0 -1
  2580. package/libs/PanoTagPlugin/typings/tag/TagInstance.d.ts +0 -8
  2581. package/libs/PanoTagPlugin/typings/tag/TagInstance.js +0 -1
  2582. package/libs/PanoTagPlugin/typings/tag/Utils.d.ts +0 -164
  2583. package/libs/PanoTagPlugin/typings/tag/Utils.js +0 -1
  2584. package/libs/PanoTagPlugin/utils/Cache.d.ts +0 -17
  2585. package/libs/PanoTagPlugin/utils/Cache.js +0 -49
  2586. package/libs/PanoTagPlugin/utils/DebugUtil.d.ts +0 -12
  2587. package/libs/PanoTagPlugin/utils/DebugUtil.js +0 -62
  2588. package/libs/PanoTagPlugin/utils/addDebugPoints.d.ts +0 -3
  2589. package/libs/PanoTagPlugin/utils/addDebugPoints.js +0 -45
  2590. package/libs/PanoTagPlugin/utils/audio/AudioDiagnostics.d.ts +0 -42
  2591. package/libs/PanoTagPlugin/utils/audio/AudioDiagnostics.js +0 -165
  2592. package/libs/PanoTagPlugin/utils/audio/SharedAudio.d.ts +0 -31
  2593. package/libs/PanoTagPlugin/utils/audio/SharedAudio.js +0 -188
  2594. package/libs/PanoTagPlugin/utils/checkRange.d.ts +0 -4
  2595. package/libs/PanoTagPlugin/utils/checkRange.js +0 -10
  2596. package/libs/PanoTagPlugin/utils/color.js +0 -17
  2597. package/libs/PanoTagPlugin/utils/constants.d.ts +0 -3
  2598. package/libs/PanoTagPlugin/utils/constants.js +0 -8
  2599. package/libs/PanoTagPlugin/utils/debounce.d.ts +0 -8
  2600. package/libs/PanoTagPlugin/utils/debounce.js +0 -21
  2601. package/libs/PanoTagPlugin/utils/doUtil.d.ts +0 -1
  2602. package/libs/PanoTagPlugin/utils/doUtil.js +0 -12
  2603. package/libs/PanoTagPlugin/utils/getImageInfo.d.ts +0 -14
  2604. package/libs/PanoTagPlugin/utils/getImageInfo.js +0 -73
  2605. package/libs/PanoTagPlugin/utils/index.d.ts +0 -10
  2606. package/libs/PanoTagPlugin/utils/index.js +0 -37
  2607. package/libs/PanoTagPlugin/utils/model/mediaPlane.d.ts +0 -118
  2608. package/libs/PanoTagPlugin/utils/model/mediaPlane.js +0 -428
  2609. package/libs/PanoTagPlugin/utils/noTypecheck.d.ts +0 -1
  2610. package/libs/PanoTagPlugin/utils/noTypecheck.js +0 -4
  2611. package/libs/PanoTagPlugin/utils/normalPositionToPositions.d.ts +0 -2
  2612. package/libs/PanoTagPlugin/utils/normalPositionToPositions.js +0 -17
  2613. package/libs/PanoTagPlugin/utils/planeNormal.d.ts +0 -4
  2614. package/libs/PanoTagPlugin/utils/planeNormal.js +0 -11
  2615. package/libs/PanoTagPlugin/utils/popoverContainer.d.ts +0 -1
  2616. package/libs/PanoTagPlugin/utils/popoverContainer.js +0 -16
  2617. package/libs/PanoTagPlugin/utils/px2rem.d.ts +0 -3
  2618. package/libs/PanoTagPlugin/utils/px2rem.js +0 -6
  2619. package/libs/PanoTagPlugin/utils/requestIdleCallback.js +0 -14
  2620. package/libs/PanoTagPlugin/utils/sculptDataToBoxPosition.d.ts +0 -6
  2621. package/libs/PanoTagPlugin/utils/sculptDataToBoxPosition.js +0 -18
  2622. package/libs/PanoTagPlugin/utils/search.d.ts +0 -11
  2623. package/libs/PanoTagPlugin/utils/search.js +0 -33
  2624. package/libs/PanoTagPlugin/utils/tag/adaptConfig.d.ts +0 -2
  2625. package/libs/PanoTagPlugin/utils/tag/adaptConfig.js +0 -9
  2626. package/libs/PanoTagPlugin/utils/tag/calculateTagConfig.d.ts +0 -7
  2627. package/libs/PanoTagPlugin/utils/tag/calculateTagConfig.js +0 -133
  2628. package/libs/PanoTagPlugin/utils/tag/canAutoPlayByOcclusion.d.ts +0 -17
  2629. package/libs/PanoTagPlugin/utils/tag/canAutoPlayByOcclusion.js +0 -14
  2630. package/libs/PanoTagPlugin/utils/tag/format.d.ts +0 -5
  2631. package/libs/PanoTagPlugin/utils/tag/format.js +0 -89
  2632. package/libs/PanoTagPlugin/utils/tag/getRaycasterStartPosition.d.ts +0 -12
  2633. package/libs/PanoTagPlugin/utils/tag/getRaycasterStartPosition.js +0 -7
  2634. package/libs/PanoTagPlugin/utils/tag/tagCheck.d.ts +0 -19
  2635. package/libs/PanoTagPlugin/utils/tag/tagCheck.js +0 -46
  2636. package/libs/PanoTagPlugin/utils/tagPosition.d.ts +0 -13
  2637. package/libs/PanoTagPlugin/utils/tagPosition.js +0 -55
  2638. package/libs/PanoTagPlugin/utils/throttle.d.ts +0 -7
  2639. package/libs/PanoTagPlugin/utils/throttle.js +0 -11
  2640. package/libs/PanoTagPlugin/utils/timeToString.js +0 -7
  2641. package/libs/PanoTagPlugin/utils/videoHelper.d.ts +0 -45
  2642. package/libs/PanoTagPlugin/utils/videoHelper.js +0 -88
  2643. package/libs/PanoVideoPlugin/Controller.d.ts +0 -59
  2644. package/libs/PanoVideoPlugin/Controller.js +0 -241
  2645. package/libs/PanoVideoPlugin/VideoMeshController.d.ts +0 -129
  2646. package/libs/PanoVideoPlugin/VideoMeshController.js +0 -412
  2647. package/libs/PanoVideoPlugin/index.d.ts +0 -21
  2648. package/libs/PanoVideoPlugin/index.js +0 -82
  2649. package/libs/PanoVideoPlugin/typings/index.js +0 -6
  2650. package/libs/PanoVideoPlugin/typings.d.ts +0 -70
  2651. package/libs/PanoVideoPlugin/typings.js +0 -1
  2652. package/libs/PanoVideoPlugin/utils/index.d.ts +0 -9
  2653. package/libs/PanoVideoPlugin/utils/index.js +0 -10
  2654. package/libs/PanoVideoPlugin/utils/shader.d.ts +0 -2
  2655. package/libs/PanoVideoPlugin/utils/shader.js +0 -33
  2656. package/libs/PipelinePlugin/Controller.d.ts +0 -108
  2657. package/libs/PipelinePlugin/Controller.js +0 -393
  2658. package/libs/PipelinePlugin/index.d.ts +0 -6
  2659. package/libs/PipelinePlugin/index.js +0 -88
  2660. package/libs/PipelinePlugin/typing/PluginData/index.js +0 -6
  2661. package/libs/PipelinePlugin/typing/PluginData.d.ts +0 -20
  2662. package/libs/PipelinePlugin/typing/PluginData.js +0 -1
  2663. package/libs/PipelinePlugin/typing/ServerData/index.js +0 -6
  2664. package/libs/PipelinePlugin/typing/ServerData.d.ts +0 -28
  2665. package/libs/PipelinePlugin/typing/ServerData.js +0 -1
  2666. package/libs/PipelinePlugin/typing/index.d.ts +0 -79
  2667. package/libs/PipelinePlugin/typing/index.js +0 -6
  2668. package/libs/PipelinePlugin/utils/Objects/FlowPipe.d.ts +0 -34
  2669. package/libs/PipelinePlugin/utils/Objects/FlowPipe.js +0 -156
  2670. package/libs/PipelinePlugin/utils/Objects/HighlightPipe.d.ts +0 -11
  2671. package/libs/PipelinePlugin/utils/Objects/HighlightPipe.js +0 -102
  2672. package/libs/PipelinePlugin/utils/Objects/Pipe.d.ts +0 -49
  2673. package/libs/PipelinePlugin/utils/Objects/Pipe.js +0 -229
  2674. package/libs/PipelinePlugin/utils/formatData.d.ts +0 -12
  2675. package/libs/PipelinePlugin/utils/formatData.js +0 -46
  2676. package/libs/Sculpt/Editors/BoxMeshEditor.d.ts +0 -5
  2677. package/libs/Sculpt/Editors/BoxMeshEditor.js +0 -98
  2678. package/libs/Sculpt/Editors/CircleMeshEditor.d.ts +0 -5
  2679. package/libs/Sculpt/Editors/CircleMeshEditor.js +0 -9
  2680. package/libs/Sculpt/Editors/CylinderMeshEditor.d.ts +0 -5
  2681. package/libs/Sculpt/Editors/CylinderMeshEditor.js +0 -41
  2682. package/libs/Sculpt/Editors/PrismMeshEditor.d.ts +0 -5
  2683. package/libs/Sculpt/Editors/PrismMeshEditor.js +0 -43
  2684. package/libs/Sculpt/Editors/RectangleMeshEditor.d.ts +0 -5
  2685. package/libs/Sculpt/Editors/RectangleMeshEditor.js +0 -101
  2686. package/libs/Sculpt/Meshes/Area.d.ts +0 -9
  2687. package/libs/Sculpt/Meshes/Area.js +0 -13
  2688. package/libs/Sculpt/Meshes/Box.d.ts +0 -18
  2689. package/libs/Sculpt/Meshes/Box.js +0 -27
  2690. package/libs/Sculpt/Meshes/Circle.d.ts +0 -24
  2691. package/libs/Sculpt/Meshes/Circle.js +0 -54
  2692. package/libs/Sculpt/Meshes/CircleWithEdge.d.ts +0 -11
  2693. package/libs/Sculpt/Meshes/CircleWithEdge.js +0 -41
  2694. package/libs/Sculpt/Meshes/Cylinder.d.ts +0 -36
  2695. package/libs/Sculpt/Meshes/Cylinder.js +0 -101
  2696. package/libs/Sculpt/Meshes/Line.d.ts +0 -59
  2697. package/libs/Sculpt/Meshes/Line.js +0 -272
  2698. package/libs/Sculpt/Meshes/LineWithDots.d.ts +0 -52
  2699. package/libs/Sculpt/Meshes/LineWithDots.js +0 -84
  2700. package/libs/Sculpt/Meshes/Point.d.ts +0 -41
  2701. package/libs/Sculpt/Meshes/Point.js +0 -147
  2702. package/libs/Sculpt/Meshes/Polygon.d.ts +0 -53
  2703. package/libs/Sculpt/Meshes/Polygon.js +0 -127
  2704. package/libs/Sculpt/Meshes/PolygonWithEdge.d.ts +0 -33
  2705. package/libs/Sculpt/Meshes/PolygonWithEdge.js +0 -69
  2706. package/libs/Sculpt/Meshes/Polyline.d.ts +0 -47
  2707. package/libs/Sculpt/Meshes/Polyline.js +0 -119
  2708. package/libs/Sculpt/Meshes/Prism.d.ts +0 -98
  2709. package/libs/Sculpt/Meshes/Prism.js +0 -305
  2710. package/libs/Sculpt/Meshes/Rectangle.d.ts +0 -19
  2711. package/libs/Sculpt/Meshes/Rectangle.js +0 -45
  2712. package/libs/Sculpt/Meshes/RectangleWithEdge.d.ts +0 -29
  2713. package/libs/Sculpt/Meshes/RectangleWithEdge.js +0 -56
  2714. package/libs/Sculpt/Objects/Base/Editor.d.ts +0 -54
  2715. package/libs/Sculpt/Objects/Base/Editor.js +0 -133
  2716. package/libs/Sculpt/Objects/Base/index.d.ts +0 -125
  2717. package/libs/Sculpt/Objects/Base/index.js +0 -164
  2718. package/libs/Sculpt/Objects/Box/index.d.ts +0 -48
  2719. package/libs/Sculpt/Objects/Box/index.js +0 -149
  2720. package/libs/Sculpt/Objects/Circle/index.d.ts +0 -32
  2721. package/libs/Sculpt/Objects/Circle/index.js +0 -123
  2722. package/libs/Sculpt/Objects/Cylinder/index.d.ts +0 -34
  2723. package/libs/Sculpt/Objects/Cylinder/index.js +0 -110
  2724. package/libs/Sculpt/Objects/Line/Editor.d.ts +0 -22
  2725. package/libs/Sculpt/Objects/Line/Editor.js +0 -68
  2726. package/libs/Sculpt/Objects/Line/index.d.ts +0 -48
  2727. package/libs/Sculpt/Objects/Line/index.js +0 -145
  2728. package/libs/Sculpt/Objects/Point/Editor.d.ts +0 -8
  2729. package/libs/Sculpt/Objects/Point/Editor.js +0 -25
  2730. package/libs/Sculpt/Objects/Point/index.d.ts +0 -39
  2731. package/libs/Sculpt/Objects/Point/index.js +0 -101
  2732. package/libs/Sculpt/Objects/Polygon/Editor.d.ts +0 -20
  2733. package/libs/Sculpt/Objects/Polygon/Editor.js +0 -83
  2734. package/libs/Sculpt/Objects/Polygon/index.d.ts +0 -80
  2735. package/libs/Sculpt/Objects/Polygon/index.js +0 -254
  2736. package/libs/Sculpt/Objects/Polyline/Editor.d.ts +0 -8
  2737. package/libs/Sculpt/Objects/Polyline/Editor.js +0 -23
  2738. package/libs/Sculpt/Objects/Polyline/index.d.ts +0 -47
  2739. package/libs/Sculpt/Objects/Polyline/index.js +0 -137
  2740. package/libs/Sculpt/Objects/Prism/index.d.ts +0 -57
  2741. package/libs/Sculpt/Objects/Prism/index.js +0 -114
  2742. package/libs/Sculpt/Objects/Rectangle/index.d.ts +0 -48
  2743. package/libs/Sculpt/Objects/Rectangle/index.js +0 -205
  2744. package/libs/Sculpt/index.d.ts +0 -266
  2745. package/libs/Sculpt/index.js +0 -297
  2746. package/libs/Sculpt/typings/index.d.ts +0 -72
  2747. package/libs/Sculpt/typings/style.d.ts +0 -108
  2748. package/libs/Sculpt/typings/style.js +0 -8
  2749. package/libs/Sculpt/typings/utils.type.d.ts +0 -16
  2750. package/libs/Sculpt/utils/Meshes/getLengthHTML.d.ts +0 -4
  2751. package/libs/Sculpt/utils/Meshes/getLengthHTML.js +0 -72
  2752. package/libs/Sculpt/utils/Modules/Cursor.d.ts +0 -21
  2753. package/libs/Sculpt/utils/Modules/Cursor.js +0 -70
  2754. package/libs/Sculpt/utils/Modules/DeleteButtonBgBorder.d.ts +0 -6
  2755. package/libs/Sculpt/utils/Modules/DeleteButtonBgBorder.js +0 -4
  2756. package/libs/Sculpt/utils/Modules/DeleteIconSVG.d.ts +0 -1
  2757. package/libs/Sculpt/utils/Modules/DeleteIconSVG.js +0 -15
  2758. package/libs/Sculpt/utils/Modules/Global.d.ts +0 -22
  2759. package/libs/Sculpt/utils/Modules/Global.js +0 -65
  2760. package/libs/Sculpt/utils/data.d.ts +0 -7
  2761. package/libs/Sculpt/utils/export.d.ts +0 -25
  2762. package/libs/Sculpt/utils/export.js +0 -57
  2763. package/libs/Sculpt/utils/isIntersecting.d.ts +0 -17
  2764. package/libs/Sculpt/utils/isIntersecting.js +0 -68
  2765. package/libs/Sculpt/utils/radiusToSegments.d.ts +0 -1
  2766. package/libs/Sculpt/utils/radiusToSegments.js +0 -6
  2767. package/libs/Sculpt/utils/removeAllTag.d.ts +0 -2
  2768. package/libs/Sculpt/utils/renderDom.d.ts +0 -19
  2769. package/libs/Sculpt/utils/renderDom.js +0 -22
  2770. package/libs/Sculpt/utils/sortPositionsByCameraPosition.d.ts +0 -5
  2771. package/libs/Sculpt/utils/sortPositionsByCameraPosition.js +0 -9
  2772. package/libs/Sculpt/utils/three/ColoredMesh.d.ts +0 -33
  2773. package/libs/Sculpt/utils/three/ColoredMesh.js +0 -105
  2774. package/libs/Sculpt/utils/three/RectangleGeometry.d.ts +0 -6
  2775. package/libs/Sculpt/utils/three/RectangleGeometry.js +0 -19
  2776. package/libs/Sculpt/utils/three/rayOnLine.d.ts +0 -12
  2777. package/libs/Sculpt/utils/three/rayOnLine.js +0 -15
  2778. package/libs/Sculpt/utils/unit.d.ts +0 -7
  2779. package/libs/Sculpt/utils/unit.js +0 -41
  2780. package/libs/_commonjsHelpers.js +0 -4
  2781. package/libs/base/BasePlugin.d.ts +0 -124
  2782. package/libs/base/BasePlugin.js +0 -58
  2783. package/libs/base/BasePluginWithData.d.ts +0 -21
  2784. package/libs/base/BasePluginWithData.js +0 -6
  2785. package/libs/components/AreaLabel/Assets/fontSize.d.ts +0 -62
  2786. package/libs/components/AreaLabel/Assets/fontSize.js +0 -65
  2787. package/libs/components/AreaLabel/Assets/roomLabelBg.d.ts +0 -3
  2788. package/libs/components/AreaLabel/Assets/roomLabelBg.js +0 -5
  2789. package/libs/components/AreaLabel/LabelItem.js +0 -283
  2790. package/libs/components/AreaLabel/LabelItem.svelte.d.ts +0 -1
  2791. package/libs/components/PaintBrush/Controller.d.ts +0 -43
  2792. package/libs/components/PaintBrush/Controller.js +0 -319
  2793. package/libs/components/PaintBrush/Subscribe.d.ts +0 -76
  2794. package/libs/components/PaintBrush/Subscribe.js +0 -84
  2795. package/libs/components/PaintBrush/index.d.ts +0 -27
  2796. package/libs/components/PaintBrush/index.js +0 -58
  2797. package/libs/components/PaintBrush/style.d.ts +0 -2
  2798. package/libs/components/PaintBrush/style.js +0 -104
  2799. package/libs/components/PaintBrush/tween.d.ts +0 -7
  2800. package/libs/components/PaintBrush/tween.js +0 -11
  2801. package/libs/components/PaintBrush/typings.d.ts +0 -58
  2802. package/libs/components/PaintBrush/typings.js +0 -4
  2803. package/libs/components/PaintBrush/utils.d.ts +0 -26
  2804. package/libs/components/PaintBrush/utils.js +0 -45
  2805. package/libs/components/index.d.ts +0 -2
  2806. package/libs/components/index.js +0 -2
  2807. package/libs/floorplan/Assets/camera.d.ts +0 -2
  2808. package/libs/floorplan/Assets/camera.js +0 -5
  2809. package/libs/floorplan/Assets/compass.d.ts +0 -1
  2810. package/libs/floorplan/Assets/compass.js +0 -4
  2811. package/libs/floorplan/Assets/floorplanExtraObject.d.ts +0 -1
  2812. package/libs/floorplan/Assets/floorplanExtraObject.js +0 -4
  2813. package/libs/floorplan/Components/BaseImage.js +0 -121
  2814. package/libs/floorplan/Components/BaseImage.svelte.d.ts +0 -1
  2815. package/libs/floorplan/Components/Camera.js +0 -108
  2816. package/libs/floorplan/Components/Camera.svelte.d.ts +0 -1
  2817. package/libs/floorplan/Components/Compass.js +0 -75
  2818. package/libs/floorplan/Components/Compass.svelte.d.ts +0 -1
  2819. package/libs/floorplan/Components/CurrentFloor.js +0 -689
  2820. package/libs/floorplan/Components/CurrentFloor.svelte.d.ts +0 -1
  2821. package/libs/floorplan/Components/Items/Item.js +0 -69
  2822. package/libs/floorplan/Components/Items/Item.svelte.d.ts +0 -1
  2823. package/libs/floorplan/Components/Items/Items.js +0 -161
  2824. package/libs/floorplan/Components/Items/Items.svelte.d.ts +0 -1
  2825. package/libs/floorplan/Components/Main.js +0 -437
  2826. package/libs/floorplan/Components/Main.svelte.d.ts +0 -1
  2827. package/libs/floorplan/Components/MissingFloor.js +0 -99
  2828. package/libs/floorplan/Components/MissingFloor.svelte.d.ts +0 -1
  2829. package/libs/floorplan/Components/Normalmage.js +0 -40
  2830. package/libs/floorplan/Components/Normalmage.svelte.d.ts +0 -1
  2831. package/libs/floorplan/Components/RoomHighlight/Room.js +0 -111
  2832. package/libs/floorplan/Components/RoomHighlight/Room.svelte.d.ts +0 -1
  2833. package/libs/floorplan/Components/RoomHighlight/RoomHighlight.js +0 -180
  2834. package/libs/floorplan/Components/RoomHighlight/RoomHighlight.svelte.d.ts +0 -1
  2835. package/libs/floorplan/Components/RoomLabels/RoomLabel.js +0 -451
  2836. package/libs/floorplan/Components/RoomLabels/RoomLabel.svelte.d.ts +0 -1
  2837. package/libs/floorplan/Components/RoomLabels/RoomLabels.js +0 -300
  2838. package/libs/floorplan/Components/RoomLabels/RoomLabels.svelte.d.ts +0 -1
  2839. package/libs/floorplan/Components/RoomMaterials/RoomMaterial.js +0 -309
  2840. package/libs/floorplan/Components/RoomMaterials/RoomMaterial.svelte.d.ts +0 -1
  2841. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.js +0 -49
  2842. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte.d.ts +0 -1
  2843. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.js +0 -76
  2844. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte.d.ts +0 -1
  2845. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.js +0 -71
  2846. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte.d.ts +0 -1
  2847. package/libs/floorplan/Components/RoomMaterials/RoomTriangle.js +0 -103
  2848. package/libs/floorplan/Components/RoomMaterials/RoomTriangle.svelte.d.ts +0 -1
  2849. package/libs/floorplan/Components/RuleLabels/RuleItem.js +0 -208
  2850. package/libs/floorplan/Components/RuleLabels/RuleItem.svelte.d.ts +0 -1
  2851. package/libs/floorplan/Components/RuleLabels/RuleLabels.js +0 -204
  2852. package/libs/floorplan/Components/RuleLabels/RuleLabels.svelte.d.ts +0 -1
  2853. package/libs/floorplan/Components/StyledImage.js +0 -90
  2854. package/libs/floorplan/Components/StyledImage.svelte.d.ts +0 -1
  2855. package/libs/floorplan/Components/SvgImage.js +0 -59
  2856. package/libs/floorplan/Components/SvgImage.svelte.d.ts +0 -1
  2857. package/libs/floorplan/FloorplanGuidePlugin/Components/Camera.js +0 -171
  2858. package/libs/floorplan/FloorplanGuidePlugin/Components/Camera.svelte.d.ts +0 -1
  2859. package/libs/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/CurrentFloor.js +0 -357
  2860. package/libs/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +0 -1
  2861. package/libs/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/ExtraObjects.js +0 -94
  2862. package/libs/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +0 -1
  2863. package/libs/floorplan/FloorplanGuidePlugin/Components/FloorplanCompass.js +0 -110
  2864. package/libs/floorplan/FloorplanGuidePlugin/Components/FloorplanCompass.svelte.d.ts +0 -1
  2865. package/libs/floorplan/FloorplanGuidePlugin/Components/Main.js +0 -751
  2866. package/libs/floorplan/FloorplanGuidePlugin/Components/Main.svelte.d.ts +0 -1
  2867. package/libs/floorplan/FloorplanGuidePlugin/Components/ObserverDots.js +0 -153
  2868. package/libs/floorplan/FloorplanGuidePlugin/Components/ObserverDots.svelte.d.ts +0 -1
  2869. package/libs/floorplan/FloorplanGuidePlugin/Components/RoomLabelItem.js +0 -268
  2870. package/libs/floorplan/FloorplanGuidePlugin/Components/RoomLabelItem.svelte.d.ts +0 -1
  2871. package/libs/floorplan/FloorplanGuidePlugin/Components/RoomLabels.js +0 -329
  2872. package/libs/floorplan/FloorplanGuidePlugin/Components/RoomLabels.svelte.d.ts +0 -1
  2873. package/libs/floorplan/FloorplanGuidePlugin/Controller.d.ts +0 -53
  2874. package/libs/floorplan/FloorplanGuidePlugin/Controller.js +0 -355
  2875. package/libs/floorplan/FloorplanGuidePlugin/index.d.ts +0 -7
  2876. package/libs/floorplan/FloorplanGuidePlugin/index.js +0 -106
  2877. package/libs/floorplan/FloorplanGuidePlugin/typing.d.ts +0 -196
  2878. package/libs/floorplan/FloorplanGuidePlugin/typing.js +0 -1
  2879. package/libs/floorplan/MapviewFloorplanPlugin/Controller.d.ts +0 -128
  2880. package/libs/floorplan/MapviewFloorplanPlugin/Controller.js +0 -564
  2881. package/libs/floorplan/MapviewFloorplanPlugin/index.d.ts +0 -7
  2882. package/libs/floorplan/MapviewFloorplanPlugin/index.js +0 -128
  2883. package/libs/floorplan/MapviewFloorplanPlugin/items.d.ts +0 -30
  2884. package/libs/floorplan/MapviewFloorplanPlugin/items.js +0 -2672
  2885. package/libs/floorplan/MapviewFloorplanPlugin/typing.d.ts +0 -1
  2886. package/libs/floorplan/MapviewFloorplanPlugin/typing.js +0 -1
  2887. package/libs/floorplan/ModelFloorplanPlugin/Controller.d.ts +0 -121
  2888. package/libs/floorplan/ModelFloorplanPlugin/Controller.js +0 -522
  2889. package/libs/floorplan/ModelFloorplanPlugin/index.d.ts +0 -7
  2890. package/libs/floorplan/ModelFloorplanPlugin/index.js +0 -127
  2891. package/libs/floorplan/ModelFloorplanPlugin/typing.d.ts +0 -1
  2892. package/libs/floorplan/ModelFloorplanPlugin/typing.js +0 -1
  2893. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.js +0 -132
  2894. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte.d.ts +0 -1
  2895. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.js +0 -355
  2896. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +0 -1
  2897. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.js +0 -94
  2898. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +0 -1
  2899. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.js +0 -328
  2900. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte.d.ts +0 -1
  2901. package/libs/floorplan/PanoFloorplanRadarPlugin/Controller.d.ts +0 -40
  2902. package/libs/floorplan/PanoFloorplanRadarPlugin/Controller.js +0 -268
  2903. package/libs/floorplan/PanoFloorplanRadarPlugin/index.d.ts +0 -7
  2904. package/libs/floorplan/PanoFloorplanRadarPlugin/index.js +0 -99
  2905. package/libs/floorplan/PanoFloorplanRadarPlugin/typing.d.ts +0 -70
  2906. package/libs/floorplan/PanoFloorplanRadarPlugin/typing.js +0 -1
  2907. package/libs/floorplan/TopviewFloorplanPlugin/Controller.d.ts +0 -74
  2908. package/libs/floorplan/TopviewFloorplanPlugin/Controller.js +0 -423
  2909. package/libs/floorplan/TopviewFloorplanPlugin/index.d.ts +0 -7
  2910. package/libs/floorplan/TopviewFloorplanPlugin/index.js +0 -124
  2911. package/libs/floorplan/TopviewFloorplanPlugin/style.d.ts +0 -1
  2912. package/libs/floorplan/TopviewFloorplanPlugin/style.js +0 -11
  2913. package/libs/floorplan/TopviewFloorplanPlugin/typing.d.ts +0 -11
  2914. package/libs/floorplan/TopviewFloorplanPlugin/typing.js +0 -1
  2915. package/libs/floorplan/constant.d.ts +0 -5
  2916. package/libs/floorplan/constant.js +0 -4
  2917. package/libs/floorplan/index.d.ts +0 -8
  2918. package/libs/floorplan/index.js +0 -16
  2919. package/libs/floorplan/typings/floorplanData.d.ts +0 -176
  2920. package/libs/floorplan/typings/floorplanData.js +0 -1
  2921. package/libs/floorplan/typings/floorplanServerData.d.ts +0 -186
  2922. package/libs/floorplan/typings/floorplanServerData.js +0 -101
  2923. package/libs/floorplan/typings/index.d.ts +0 -164
  2924. package/libs/floorplan/typings/index.js +0 -1
  2925. package/libs/floorplan/typings/utility.d.ts +0 -2
  2926. package/libs/floorplan/utils/constant.d.ts +0 -24
  2927. package/libs/floorplan/utils/constant.js +0 -7
  2928. package/libs/floorplan/utils/correctFiveState.d.ts +0 -18
  2929. package/libs/floorplan/utils/correctFiveState.js +0 -57
  2930. package/libs/floorplan/utils/formatData.d.ts +0 -5
  2931. package/libs/floorplan/utils/formatData.js +0 -149
  2932. package/libs/floorplan/utils/formatPosition.d.ts +0 -36
  2933. package/libs/floorplan/utils/formatPosition.js +0 -35
  2934. package/libs/floorplan/utils/styledFloorplan.d.ts +0 -2
  2935. package/libs/floorplan/utils/styledFloorplan.js +0 -24
  2936. package/libs/index.d.ts +0 -34
  2937. package/libs/index.js +0 -738
  2938. package/libs/shared-utils/CSS3DRender/CSS3DObject.d.ts +0 -37
  2939. package/libs/shared-utils/CSS3DRender/CSS3DObject.js +0 -94
  2940. package/libs/shared-utils/CSS3DRender/CSS3DRenderer.d.ts +0 -16
  2941. package/libs/shared-utils/CSS3DRender/CSS3DRenderer.js +0 -61
  2942. package/libs/shared-utils/CSS3DRender/OpacityMesh.d.ts +0 -6
  2943. package/libs/shared-utils/CSS3DRender/OpacityMesh.js +0 -18
  2944. package/libs/shared-utils/CSS3DRender/index.d.ts +0 -41
  2945. package/libs/shared-utils/CSS3DRender/index.js +0 -76
  2946. package/libs/shared-utils/Object3DHelper/Base/BaseController.d.ts +0 -142
  2947. package/libs/shared-utils/Object3DHelper/Base/BaseController.js +0 -234
  2948. package/libs/shared-utils/Object3DHelper/Base/BaseHelper.d.ts +0 -105
  2949. package/libs/shared-utils/Object3DHelper/Base/BaseHelper.js +0 -103
  2950. package/libs/shared-utils/Object3DHelper/Constants/RenderOrder.d.ts +0 -15
  2951. package/libs/shared-utils/Object3DHelper/Constants/RenderOrder.js +0 -23
  2952. package/libs/shared-utils/Object3DHelper/Constants/color.d.ts +0 -12
  2953. package/libs/shared-utils/Object3DHelper/Constants/color.js +0 -20
  2954. package/libs/shared-utils/Object3DHelper/Controller/BoundingBoxController.d.ts +0 -7
  2955. package/libs/shared-utils/Object3DHelper/Controller/BoundingBoxController.js +0 -13
  2956. package/libs/shared-utils/Object3DHelper/Controller/CSS3DScaleController.d.ts +0 -7
  2957. package/libs/shared-utils/Object3DHelper/Controller/CSS3DScaleController.js +0 -22
  2958. package/libs/shared-utils/Object3DHelper/Controller/MoveController.d.ts +0 -60
  2959. package/libs/shared-utils/Object3DHelper/Controller/MoveController.js +0 -204
  2960. package/libs/shared-utils/Object3DHelper/Controller/RectangleScaleController.d.ts +0 -45
  2961. package/libs/shared-utils/Object3DHelper/Controller/RectangleScaleController.js +0 -116
  2962. package/libs/shared-utils/Object3DHelper/Controller/RotateController.d.ts +0 -46
  2963. package/libs/shared-utils/Object3DHelper/Controller/RotateController.js +0 -219
  2964. package/libs/shared-utils/Object3DHelper/Controller/ScaleController.d.ts +0 -66
  2965. package/libs/shared-utils/Object3DHelper/Controller/ScaleController.js +0 -307
  2966. package/libs/shared-utils/Object3DHelper/Helper/BoundingBoxHelper.d.ts +0 -16
  2967. package/libs/shared-utils/Object3DHelper/Helper/BoundingBoxHelper.js +0 -98
  2968. package/libs/shared-utils/Object3DHelper/Helper/CSS3DScaleHelper.d.ts +0 -43
  2969. package/libs/shared-utils/Object3DHelper/Helper/CSS3DScaleHelper.js +0 -150
  2970. package/libs/shared-utils/Object3DHelper/Helper/HTML/rectangleScaleDom.d.ts +0 -11
  2971. package/libs/shared-utils/Object3DHelper/Helper/HTML/rectangleScaleDom.js +0 -81
  2972. package/libs/shared-utils/Object3DHelper/Helper/HTML/tipsDom.d.ts +0 -6
  2973. package/libs/shared-utils/Object3DHelper/Helper/HTML/tipsDom.js +0 -41
  2974. package/libs/shared-utils/Object3DHelper/Helper/HTML/utils/createElement.d.ts +0 -2
  2975. package/libs/shared-utils/Object3DHelper/Helper/HTML/utils/createElement.js +0 -13
  2976. package/libs/shared-utils/Object3DHelper/Helper/MoveHelper.d.ts +0 -24
  2977. package/libs/shared-utils/Object3DHelper/Helper/MoveHelper.js +0 -51
  2978. package/libs/shared-utils/Object3DHelper/Helper/Objects/ArrowGroup.d.ts +0 -18
  2979. package/libs/shared-utils/Object3DHelper/Helper/Objects/ArrowGroup.js +0 -40
  2980. package/libs/shared-utils/Object3DHelper/Helper/Objects/CenterHandle.d.ts +0 -23
  2981. package/libs/shared-utils/Object3DHelper/Helper/Objects/CenterHandle.js +0 -73
  2982. package/libs/shared-utils/Object3DHelper/Helper/RotateHelper.d.ts +0 -93
  2983. package/libs/shared-utils/Object3DHelper/Helper/RotateHelper.js +0 -182
  2984. package/libs/shared-utils/Object3DHelper/Helper/ScaleHelper.d.ts +0 -65
  2985. package/libs/shared-utils/Object3DHelper/Helper/ScaleHelper.js +0 -220
  2986. package/libs/shared-utils/Object3DHelper/Helper/index.d.ts +0 -5
  2987. package/libs/shared-utils/Object3DHelper/Helper/index.js +0 -4
  2988. package/libs/shared-utils/Object3DHelper/index.d.ts +0 -52
  2989. package/libs/shared-utils/Object3DHelper/index.js +0 -144
  2990. package/libs/shared-utils/Object3DHelper/typings/Direction.d.ts +0 -2
  2991. package/libs/shared-utils/Object3DHelper/typings/Direction.js +0 -1
  2992. package/libs/shared-utils/Object3DHelper/typings/Hooks.d.ts +0 -63
  2993. package/libs/shared-utils/Object3DHelper/typings/Hooks.js +0 -1
  2994. package/libs/shared-utils/Object3DHelper/typings/Scissor.d.ts +0 -17
  2995. package/libs/shared-utils/Object3DHelper/typings/Scissor.js +0 -1
  2996. package/libs/shared-utils/Object3DHelper/typings/index.d.ts +0 -45
  2997. package/libs/shared-utils/Object3DHelper/typings/index.js +0 -1
  2998. package/libs/shared-utils/Object3DHelper/utils/calculateScaleByCamera.d.ts +0 -5
  2999. package/libs/shared-utils/Object3DHelper/utils/calculateScaleByCamera.js +0 -7
  3000. package/libs/shared-utils/Object3DHelper/utils/calculateThreeMouse.d.ts +0 -14
  3001. package/libs/shared-utils/Object3DHelper/utils/calculateThreeMouse.js +0 -11
  3002. package/libs/shared-utils/Object3DHelper/utils/cameraHooks.d.ts +0 -2
  3003. package/libs/shared-utils/Object3DHelper/utils/cameraHooks.js +0 -24
  3004. package/libs/shared-utils/Object3DHelper/utils/direction.d.ts +0 -14
  3005. package/libs/shared-utils/Object3DHelper/utils/direction.js +0 -22
  3006. package/libs/shared-utils/Object3DHelper/utils/filterNotColinearPoints.d.ts +0 -2
  3007. package/libs/shared-utils/Object3DHelper/utils/filterNotColinearPoints.js +0 -1
  3008. package/libs/shared-utils/Object3DHelper/utils/getMouseRaycaster.d.ts +0 -5
  3009. package/libs/shared-utils/Object3DHelper/utils/getMouseRaycaster.js +0 -14
  3010. package/libs/shared-utils/Object3DHelper/utils/getOrthographicCameraDirection.d.ts +0 -8
  3011. package/libs/shared-utils/Object3DHelper/utils/getOrthographicCameraDirection.js +0 -12
  3012. package/libs/shared-utils/Object3DHelper/utils/getPoseFromCamera.d.ts +0 -8
  3013. package/libs/shared-utils/Object3DHelper/utils/getPoseFromCamera.js +0 -14
  3014. package/libs/shared-utils/Object3DHelper/utils/index.d.ts +0 -8
  3015. package/libs/shared-utils/Object3DHelper/utils/index.js +0 -1
  3016. package/libs/shared-utils/Object3DHelper/utils/normalPositionToPositions.d.ts +0 -5
  3017. package/libs/shared-utils/Object3DHelper/utils/normalPositionToPositions.js +0 -1
  3018. package/libs/shared-utils/Object3DHelper/utils/object3DBoundingPosition.d.ts +0 -1
  3019. package/libs/shared-utils/Object3DHelper/utils/object3DBoundingPosition.js +0 -1
  3020. package/libs/shared-utils/Object3DHelper/utils/setObjectQuaternion.d.ts +0 -8
  3021. package/libs/shared-utils/Object3DHelper/utils/setObjectQuaternion.js +0 -11
  3022. package/libs/shared-utils/Object3DHelper/utils/solidGuide.d.ts +0 -27
  3023. package/libs/shared-utils/Object3DHelper/utils/solidGuide.js +0 -72
  3024. package/libs/shared-utils/Subscribe.d.ts +0 -68
  3025. package/libs/shared-utils/Subscribe.js +0 -103
  3026. package/libs/shared-utils/Utils/BaseUtil.d.ts +0 -6
  3027. package/libs/shared-utils/Utils/BaseUtil.js +0 -14
  3028. package/libs/shared-utils/Utils/FiveUtil.d.ts +0 -11
  3029. package/libs/shared-utils/Utils/FiveUtil.js +0 -31
  3030. package/libs/shared-utils/Utils/WorkUtil.d.ts +0 -36
  3031. package/libs/shared-utils/Utils/WorkUtil.js +0 -81
  3032. package/libs/shared-utils/animationFrame/BetterTween.d.ts +0 -12
  3033. package/libs/shared-utils/animationFrame/BetterTween.js +0 -33
  3034. package/libs/shared-utils/animationFrame/calculateProgress.d.ts +0 -8
  3035. package/libs/shared-utils/animationFrame/calculateProgress.js +0 -6
  3036. package/libs/shared-utils/animationFrame/formatRad.d.ts +0 -15
  3037. package/libs/shared-utils/animationFrame/formatRad.js +0 -11
  3038. package/libs/shared-utils/animationFrame/index.d.ts +0 -17
  3039. package/libs/shared-utils/animationFrame/index.js +0 -52
  3040. package/libs/shared-utils/animationFrame/tween.d.ts +0 -84
  3041. package/libs/shared-utils/animationFrame/tween.js +0 -28
  3042. package/libs/shared-utils/audio.d.ts +0 -36
  3043. package/libs/shared-utils/audio.js +0 -61
  3044. package/libs/shared-utils/changeModelCanvasOpacity.d.ts +0 -2
  3045. package/libs/shared-utils/changeModelCanvasOpacity.js +0 -20
  3046. package/libs/shared-utils/clamp.d.ts +0 -2
  3047. package/libs/shared-utils/clamp.js +0 -6
  3048. package/libs/shared-utils/constants.d.ts +0 -3
  3049. package/libs/shared-utils/constants.js +0 -4
  3050. package/libs/shared-utils/createCanvasTextTexture.d.ts +0 -8
  3051. package/libs/shared-utils/createCanvasTextTexture.js +0 -11
  3052. package/libs/shared-utils/createLine/index.d.ts +0 -3
  3053. package/libs/shared-utils/createLine/index.js +0 -9
  3054. package/libs/shared-utils/createResizeObserver.d.ts +0 -4
  3055. package/libs/shared-utils/createResizeObserver.js +0 -22
  3056. package/libs/shared-utils/debounce.d.ts +0 -6
  3057. package/libs/shared-utils/debounce.js +0 -11
  3058. package/libs/shared-utils/device.d.ts +0 -6
  3059. package/libs/shared-utils/device.js +0 -7
  3060. package/libs/shared-utils/dom/resizeObserver.d.ts +0 -4
  3061. package/libs/shared-utils/dom/resizeObserver.js +0 -17
  3062. package/libs/shared-utils/equal.d.ts +0 -11
  3063. package/libs/shared-utils/equal.js +0 -54
  3064. package/libs/shared-utils/even.d.ts +0 -9
  3065. package/libs/shared-utils/even.js +0 -7
  3066. package/libs/shared-utils/exports.d.ts +0 -2
  3067. package/libs/shared-utils/exports.js +0 -115
  3068. package/libs/shared-utils/filter.d.ts +0 -27
  3069. package/libs/shared-utils/filter.js +0 -10
  3070. package/libs/shared-utils/five/FiveDomEvents.d.ts +0 -138
  3071. package/libs/shared-utils/five/FiveDomEvents.js +0 -312
  3072. package/libs/shared-utils/five/FiveLine.d.ts +0 -10
  3073. package/libs/shared-utils/five/FiveLine.js +0 -15
  3074. package/libs/shared-utils/five/FivePuppet.d.ts +0 -64
  3075. package/libs/shared-utils/five/FivePuppet.js +0 -45
  3076. package/libs/shared-utils/five/calculateThreeMouse.d.ts +0 -11
  3077. package/libs/shared-utils/five/calculateThreeMouse.js +0 -8
  3078. package/libs/shared-utils/five/changeMode.d.ts +0 -3
  3079. package/libs/shared-utils/five/changeMode.js +0 -51
  3080. package/libs/shared-utils/five/fiveEveryReadyListener.d.ts +0 -2
  3081. package/libs/shared-utils/five/fiveEveryReadyListener.js +0 -15
  3082. package/libs/shared-utils/five/fiveLoaded.d.ts +0 -2
  3083. package/libs/shared-utils/five/fiveLoaded.js +0 -30
  3084. package/libs/shared-utils/five/fiveModelLoad.d.ts +0 -9
  3085. package/libs/shared-utils/five/fiveModelLoad.js +0 -40
  3086. package/libs/shared-utils/five/getFiveFromParentChain.d.ts +0 -8
  3087. package/libs/shared-utils/five/getFiveFromParentChain.js +0 -20
  3088. package/libs/shared-utils/five/getFiveModel.d.ts +0 -2
  3089. package/libs/shared-utils/five/getFiveModel.js +0 -7
  3090. package/libs/shared-utils/five/getFloorIndex.d.ts +0 -4
  3091. package/libs/shared-utils/five/getFloorIndex.js +0 -22
  3092. package/libs/shared-utils/five/getFloorMesh.d.ts +0 -3
  3093. package/libs/shared-utils/five/getFloorMesh.js +0 -11
  3094. package/libs/shared-utils/five/getPosition.d.ts +0 -24
  3095. package/libs/shared-utils/five/getPosition.js +0 -41
  3096. package/libs/shared-utils/five/getRaycasterByNdcPosition.d.ts +0 -6
  3097. package/libs/shared-utils/five/getRaycasterByNdcPosition.js +0 -8
  3098. package/libs/shared-utils/five/index.d.ts +0 -12
  3099. package/libs/shared-utils/five/index.js +0 -20
  3100. package/libs/shared-utils/five/initialCSS3DRender.d.ts +0 -1
  3101. package/libs/shared-utils/five/initialCSS3DRender.js +0 -2
  3102. package/libs/shared-utils/five/lookObject.d.ts +0 -15
  3103. package/libs/shared-utils/five/lookObject.js +0 -98
  3104. package/libs/shared-utils/five/lookPoint.d.ts +0 -11
  3105. package/libs/shared-utils/five/lookPoint.js +0 -71
  3106. package/libs/shared-utils/five/mode.d.ts +0 -3
  3107. package/libs/shared-utils/five/mode.js +0 -10
  3108. package/libs/shared-utils/five/transformPosition.d.ts +0 -2
  3109. package/libs/shared-utils/five/transformPosition.js +0 -10
  3110. package/libs/shared-utils/five/vector3ToScreen.d.ts +0 -5
  3111. package/libs/shared-utils/five/vector3ToScreen.js +0 -10
  3112. package/libs/shared-utils/fontSize.d.ts +0 -185
  3113. package/libs/shared-utils/fontSize.js +0 -105
  3114. package/libs/shared-utils/forReverseEach.d.ts +0 -1
  3115. package/libs/shared-utils/forReverseEach.js +0 -7
  3116. package/libs/shared-utils/formatRad.d.ts +0 -7
  3117. package/libs/shared-utils/formatRad.js +0 -7
  3118. package/libs/shared-utils/getPointFromHammerEvent.d.ts +0 -10
  3119. package/libs/shared-utils/getPointFromHammerEvent.js +0 -8
  3120. package/libs/shared-utils/getPxmm.d.ts +0 -19
  3121. package/libs/shared-utils/getPxmm.js +0 -18
  3122. package/libs/shared-utils/index.d.ts +0 -11
  3123. package/libs/shared-utils/index.js +0 -14
  3124. package/libs/shared-utils/isNil.d.ts +0 -10
  3125. package/libs/shared-utils/isNil.js +0 -10
  3126. package/libs/shared-utils/isTouchDevice.d.ts +0 -1
  3127. package/libs/shared-utils/isTouchDevice.js +0 -4
  3128. package/libs/shared-utils/isTruelyObject.d.ts +0 -18
  3129. package/libs/shared-utils/isTruelyObject.js +0 -6
  3130. package/libs/shared-utils/log.d.ts +0 -2
  3131. package/libs/shared-utils/log.js +0 -6
  3132. package/libs/shared-utils/logger.d.ts +0 -17
  3133. package/libs/shared-utils/logger.js +0 -16
  3134. package/libs/shared-utils/math/Interval.d.ts +0 -13
  3135. package/libs/shared-utils/math/Interval.js +0 -25
  3136. package/libs/shared-utils/math/Rectangle.d.ts +0 -27
  3137. package/libs/shared-utils/math/Rectangle.js +0 -25
  3138. package/libs/shared-utils/math/convexHull.d.ts +0 -5
  3139. package/libs/shared-utils/math/convexHull.js +0 -20
  3140. package/libs/shared-utils/math/deg2Rad.d.ts +0 -1
  3141. package/libs/shared-utils/math/deg2Rad.js +0 -6
  3142. package/libs/shared-utils/math/index.d.ts +0 -4
  3143. package/libs/shared-utils/math/index.js +0 -1
  3144. package/libs/shared-utils/math/inside.d.ts +0 -2
  3145. package/libs/shared-utils/math/inside.js +0 -12
  3146. package/libs/shared-utils/math/intersecting.d.ts +0 -25
  3147. package/libs/shared-utils/math/intersecting.js +0 -25
  3148. package/libs/shared-utils/math/planimetry.d.ts +0 -116
  3149. package/libs/shared-utils/math/planimetry.js +0 -50
  3150. package/libs/shared-utils/math/pointsIsRectangle.d.ts +0 -2
  3151. package/libs/shared-utils/math/pointsIsRectangle.js +0 -9
  3152. package/libs/shared-utils/math/rad2Deg.d.ts +0 -1
  3153. package/libs/shared-utils/math/rad2Deg.js +0 -6
  3154. package/libs/shared-utils/nearlyEqual.d.ts +0 -14
  3155. package/libs/shared-utils/nearlyEqual.js +0 -12
  3156. package/libs/shared-utils/nextFrame.d.ts +0 -1
  3157. package/libs/shared-utils/nextFrame.js +0 -6
  3158. package/libs/shared-utils/noop.d.ts +0 -5
  3159. package/libs/shared-utils/noop.js +0 -5
  3160. package/libs/shared-utils/object3d2LocalMatrix.d.ts +0 -12
  3161. package/libs/shared-utils/object3d2LocalMatrix.js +0 -18
  3162. package/libs/shared-utils/offscreenCanvas.d.ts +0 -2
  3163. package/libs/shared-utils/offscreenCanvas.js +0 -12
  3164. package/libs/shared-utils/playback.d.ts +0 -21
  3165. package/libs/shared-utils/positionToVector3.d.ts +0 -17
  3166. package/libs/shared-utils/positionToVector3.js +0 -15
  3167. package/libs/shared-utils/promise/withResolvers.d.ts +0 -10
  3168. package/libs/shared-utils/promise/withResolvers.js +0 -13
  3169. package/libs/shared-utils/px2rem.d.ts +0 -1
  3170. package/libs/shared-utils/px2rem.js +0 -6
  3171. package/libs/shared-utils/safeObj.d.ts +0 -1
  3172. package/libs/shared-utils/safeObj.js +0 -6
  3173. package/libs/shared-utils/svelte/resizeObserver.d.ts +0 -2
  3174. package/libs/shared-utils/svelte/resizeObserver.js +0 -13
  3175. package/libs/shared-utils/tag.d.ts +0 -99
  3176. package/libs/shared-utils/tag.js +0 -258
  3177. package/libs/shared-utils/tap.d.ts +0 -8
  3178. package/libs/shared-utils/tap.js +0 -6
  3179. package/libs/shared-utils/three/Assets/index.d.ts +0 -3
  3180. package/libs/shared-utils/three/Assets/index.js +0 -4
  3181. package/libs/shared-utils/three/CSS3DRenderer/index.d.ts +0 -23
  3182. package/libs/shared-utils/three/CSS3DRenderer/index.js +0 -107
  3183. package/libs/shared-utils/three/Extras/Core/Interpolations.d.ts +0 -11
  3184. package/libs/shared-utils/three/Extras/Core/Interpolations.js +0 -28
  3185. package/libs/shared-utils/three/Extras/Core/Interpolations2.js +0 -34
  3186. package/libs/shared-utils/three/Extras/Curves/BezierCurve3.d.ts +0 -13
  3187. package/libs/shared-utils/three/Extras/Curves/BezierCurve3.js +0 -30
  3188. package/libs/shared-utils/three/FBXLoader/index.d.ts +0 -6
  3189. package/libs/shared-utils/three/FBXLoader/index.js +0 -1493
  3190. package/libs/shared-utils/three/FragmentTransparencyMaterial.d.ts +0 -18
  3191. package/libs/shared-utils/three/FragmentTransparencyMaterial.js +0 -47
  3192. package/libs/shared-utils/three/GLTFLoader.d.ts +0 -9
  3193. package/libs/shared-utils/three/GLTFLoader.js +0 -23
  3194. package/libs/shared-utils/three/IObject3D.d.ts +0 -11
  3195. package/libs/shared-utils/three/IObject3D.js +0 -38
  3196. package/libs/shared-utils/three/LegacyPointHelper.d.ts +0 -22
  3197. package/libs/shared-utils/three/LegacyPointHelper.js +0 -73
  3198. package/libs/shared-utils/three/Magnifier.d.ts +0 -79
  3199. package/libs/shared-utils/three/Magnifier.js +0 -244
  3200. package/libs/shared-utils/three/PointDomHelper.d.ts +0 -18
  3201. package/libs/shared-utils/three/PointDomHelper.js +0 -70
  3202. package/libs/shared-utils/three/PointSelector/index.d.ts +0 -182
  3203. package/libs/shared-utils/three/PointSelector/index.js +0 -404
  3204. package/libs/shared-utils/three/PointSelector/utils/PointHelper.d.ts +0 -31
  3205. package/libs/shared-utils/three/PointSelector/utils/PointHelper.js +0 -99
  3206. package/libs/shared-utils/three/PointSelector/utils/PointHelper2.d.ts +0 -31
  3207. package/libs/shared-utils/three/PointSelector/utils/PointHelper2.js +0 -157
  3208. package/libs/shared-utils/three/PointSelector/utils/PointSelectorHelper.d.ts +0 -73
  3209. package/libs/shared-utils/three/PointSelector/utils/PointSelectorHelper.js +0 -78
  3210. package/libs/shared-utils/three/PointSelector/utils/contents.d.ts +0 -1
  3211. package/libs/shared-utils/three/PointSelector/utils/contents.js +0 -4
  3212. package/libs/shared-utils/three/PointSelector/utils/html.d.ts +0 -4
  3213. package/libs/shared-utils/three/PointSelector/utils/html.js +0 -66
  3214. package/libs/shared-utils/three/PointSelector/utils/typing.d.ts +0 -8
  3215. package/libs/shared-utils/three/Quadrangle.d.ts +0 -20
  3216. package/libs/shared-utils/three/Quadrangle.js +0 -65
  3217. package/libs/shared-utils/three/addIfNotExists.d.ts +0 -2
  3218. package/libs/shared-utils/three/addIfNotExists.js +0 -8
  3219. package/libs/shared-utils/three/applyObjectMatrixWorld.d.ts +0 -3
  3220. package/libs/shared-utils/three/applyObjectMatrixWorld.js +0 -13
  3221. package/libs/shared-utils/three/blink.d.ts +0 -278
  3222. package/libs/shared-utils/three/blink.js +0 -345
  3223. package/libs/shared-utils/three/boundingBox.d.ts +0 -25
  3224. package/libs/shared-utils/three/boundingBox.js +0 -90
  3225. package/libs/shared-utils/three/centerPoint.d.ts +0 -2
  3226. package/libs/shared-utils/three/centerPoint.js +0 -8
  3227. package/libs/shared-utils/three/closeVectors.d.ts +0 -2
  3228. package/libs/shared-utils/three/closeVectors.js +0 -10
  3229. package/libs/shared-utils/three/core/Five_LineMaterial2.d.ts +0 -20
  3230. package/libs/shared-utils/three/core/Five_LineMaterial2.js +0 -307
  3231. package/libs/shared-utils/three/core/Line2.d.ts +0 -13
  3232. package/libs/shared-utils/three/core/Line2.js +0 -15
  3233. package/libs/shared-utils/three/core/LineGeometry.d.ts +0 -13
  3234. package/libs/shared-utils/three/core/LineGeometry.js +0 -26
  3235. package/libs/shared-utils/three/core/LineMaterial.d.ts +0 -15
  3236. package/libs/shared-utils/three/core/LineMaterial.js +0 -40
  3237. package/libs/shared-utils/three/core/LineMaterial2.d.ts +0 -15
  3238. package/libs/shared-utils/three/core/LineMaterial2.js +0 -40
  3239. package/libs/shared-utils/three/core/LineSegments.d.ts +0 -9
  3240. package/libs/shared-utils/three/core/LineSegments.js +0 -9
  3241. package/libs/shared-utils/three/core/Object3D.d.ts +0 -8
  3242. package/libs/shared-utils/three/core/Object3D.js +0 -22
  3243. package/libs/shared-utils/three/core/PrismAnimationGeometry.d.ts +0 -25
  3244. package/libs/shared-utils/three/core/PrismAnimationGeometry.js +0 -146
  3245. package/libs/shared-utils/three/core/PrismGeometry.d.ts +0 -22
  3246. package/libs/shared-utils/three/core/PrismGeometry.js +0 -44
  3247. package/libs/shared-utils/three/core/Raycaster.d.ts +0 -6
  3248. package/libs/shared-utils/three/core/Raycaster.js +0 -34
  3249. package/libs/shared-utils/three/core/Sphere.d.ts +0 -4
  3250. package/libs/shared-utils/three/core/Sphere.js +0 -18
  3251. package/libs/shared-utils/three/core/polygonVertex.d.ts +0 -8
  3252. package/libs/shared-utils/three/core/polygonVertex.js +0 -16
  3253. package/libs/shared-utils/three/earcut3D.d.ts +0 -2
  3254. package/libs/shared-utils/three/earcut3D.js +0 -12
  3255. package/libs/shared-utils/three/filterVisibleIntersections.d.ts +0 -3
  3256. package/libs/shared-utils/three/filterVisibleIntersections.js +0 -7
  3257. package/libs/shared-utils/three/generatePolygonGeometry.d.ts +0 -9
  3258. package/libs/shared-utils/three/generatePolygonGeometry.js +0 -19
  3259. package/libs/shared-utils/three/geometryUtil.d.ts +0 -15
  3260. package/libs/shared-utils/three/geometryUtil.js +0 -43
  3261. package/libs/shared-utils/three/getCoords.d.ts +0 -9
  3262. package/libs/shared-utils/three/getCoords.js +0 -13
  3263. package/libs/shared-utils/three/getIntersect.d.ts +0 -22
  3264. package/libs/shared-utils/three/getIntersect.js +0 -24
  3265. package/libs/shared-utils/three/getNormal.d.ts +0 -5
  3266. package/libs/shared-utils/three/getNormal.js +0 -12
  3267. package/libs/shared-utils/three/getObjectVisible.d.ts +0 -5
  3268. package/libs/shared-utils/three/getObjectVisible.js +0 -4
  3269. package/libs/shared-utils/three/getPositionsByObjectFit.d.ts +0 -3
  3270. package/libs/shared-utils/three/getPositionsByObjectFit.js +0 -20
  3271. package/libs/shared-utils/three/getRaycaster.d.ts +0 -6
  3272. package/libs/shared-utils/three/getRaycaster.js +0 -12
  3273. package/libs/shared-utils/three/getTextureLoader.d.ts +0 -6
  3274. package/libs/shared-utils/three/getTextureLoader.js +0 -15
  3275. package/libs/shared-utils/three/index.d.ts +0 -15
  3276. package/libs/shared-utils/three/index.js +0 -14
  3277. package/libs/shared-utils/three/libs/NURBSCurve.js +0 -22
  3278. package/libs/shared-utils/three/libs/NURBSUtils.js +0 -212
  3279. package/libs/shared-utils/three/libs/inflate.js +0 -282
  3280. package/libs/shared-utils/three/loadTexture.d.ts +0 -6
  3281. package/libs/shared-utils/three/loadTexture.js +0 -37
  3282. package/libs/shared-utils/three/loadVideoTexture.d.ts +0 -9
  3283. package/libs/shared-utils/three/loadVideoTexture.js +0 -34
  3284. package/libs/shared-utils/three/recurveFindObject.d.ts +0 -2
  3285. package/libs/shared-utils/three/recurveFindObject.js +0 -6
  3286. package/libs/shared-utils/three/temp.d.ts +0 -2
  3287. package/libs/shared-utils/three/temp.js +0 -6
  3288. package/libs/shared-utils/three/transformPositionToVector3.d.ts +0 -7
  3289. package/libs/shared-utils/three/transformPositionToVector3.js +0 -5
  3290. package/libs/shared-utils/three/transformToMeshBasicMaterial.d.ts +0 -2
  3291. package/libs/shared-utils/three/transformToMeshBasicMaterial.js +0 -24
  3292. package/libs/shared-utils/three/vector3ToArray.d.ts +0 -3
  3293. package/libs/shared-utils/three/vector3ToArray.js +0 -6
  3294. package/libs/shared-utils/three/vectorIsEqual.d.ts +0 -2
  3295. package/libs/shared-utils/three/vectorIsEqual.js +0 -6
  3296. package/libs/shared-utils/threex/domevents/index.js +0 -222
  3297. package/libs/shared-utils/throttle.d.ts +0 -7
  3298. package/libs/shared-utils/throttle.js +0 -11
  3299. package/libs/shared-utils/tinyEJSrender.d.ts +0 -5
  3300. package/libs/shared-utils/tinyEJSrender.js +0 -140
  3301. package/libs/shared-utils/to.d.ts +0 -8
  3302. package/libs/shared-utils/to.js +0 -28
  3303. package/libs/shared-utils/translateMode/getDistanceFromModel.d.ts +0 -2
  3304. package/libs/shared-utils/translateMode/getDistanceFromModel.js +0 -11
  3305. package/libs/shared-utils/typescript/entries.d.ts +0 -2
  3306. package/libs/shared-utils/typescript/entries.js +0 -6
  3307. package/libs/shared-utils/url/absoluteUrl.d.ts +0 -5
  3308. package/libs/shared-utils/url/absoluteUrl.js +0 -6
  3309. package/libs/shared-utils/url/defaultUrls.d.ts +0 -30
  3310. package/libs/shared-utils/url/defaultUrls.js +0 -26
  3311. package/libs/shared-utils/url/getUrl.d.ts +0 -4
  3312. package/libs/shared-utils/url/getUrl.js +0 -7
  3313. package/libs/shared-utils/url/replace-static-prefix.d.ts +0 -11
  3314. package/libs/shared-utils/url/replace-static-prefix.js +0 -28
  3315. package/libs/shared-utils/util.d.ts +0 -1
  3316. package/libs/shared-utils/util.js +0 -6
  3317. package/libs/shared-utils/uuid.d.ts +0 -5
  3318. package/libs/shared-utils/uuid.js +0 -9
  3319. package/libs/shared-utils/vectorToCoordinate.d.ts +0 -7
  3320. package/libs/shared-utils/vectorToCoordinate.js +0 -10
  3321. package/libs/typings/math.type.d.ts +0 -44
  3322. package/libs/typings/typings.d.ts +0 -15
  3323. package/libs/typings/utils.type.d.ts +0 -4
  3324. package/libs/vendor/@realsee/five/vfx/index.js +0 -977
  3325. package/libs/vendor/@tweenjs/tween/dist/tween.esm.js.js +0 -412
  3326. package/libs/vendor/animejs/lib/anime.es.js +0 -863
  3327. package/libs/vendor/classnames/index.js +0 -47
  3328. package/libs/vendor/earcut/src/earcut.js +0 -280
  3329. package/libs/vendor/easy-reactive/main.js +0 -3
  3330. package/libs/vendor/easy-reactive/src/simply-reactive.js +0 -44
  3331. package/libs/vendor/easy-reactive/src/utils/object.js +0 -12
  3332. package/libs/vendor/easy-reactive/src/utils/subscription.js +0 -28
  3333. package/libs/vendor/easy-reactive/src/utils/watcher.js +0 -17
  3334. package/libs/vendor/gl-vec2/add.js +0 -7
  3335. package/libs/vendor/gl-vec2/dot.js +0 -7
  3336. package/libs/vendor/gl-vec2/normalize.js +0 -8
  3337. package/libs/vendor/gl-vec2/set.js +0 -7
  3338. package/libs/vendor/gl-vec2/subtract.js +0 -7
  3339. package/libs/vendor/hammerjs/hammer.js +0 -1189
  3340. package/libs/vendor/hotkeys-js/dist/hotkeys.esm.js +0 -384
  3341. package/libs/vendor/lodash.clonedeep/index.js +0 -457
  3342. package/libs/vendor/lodash.get/index.js +0 -236
  3343. package/libs/vendor/lodash.isequal/index.js +0 -489
  3344. package/libs/vendor/object-assign-deep/objectAssignDeep.js +0 -62
  3345. package/libs/vendor/polyline-miter-util/index.js +0 -18
  3346. package/libs/vendor/polyline-normals/index.js +0 -28
  3347. package/libs/vendor/resize-observer-polyfill/dist/ResizeObserver.es.js +0 -290
  3348. package/libs/vendor/svelte/easing/index.js +0 -11
  3349. package/libs/vendor/svelte/index.js +0 -1
  3350. package/libs/vendor/svelte/internal/index.js +0 -750
  3351. package/libs/vendor/svelte/store/index.js +0 -31
  3352. package/libs/vendor/svelte/transition/index.js +0 -40
  3353. package/libs/vendor/svelte-carousel/src/actions/hoverable/event.js +0 -18
  3354. package/libs/vendor/svelte-carousel/src/actions/hoverable/hoverable.js +0 -19
  3355. package/libs/vendor/svelte-carousel/src/actions/hoverable/index.js +0 -1
  3356. package/libs/vendor/svelte-carousel/src/actions/swipeable/event.js +0 -26
  3357. package/libs/vendor/svelte-carousel/src/actions/swipeable/index.js +0 -1
  3358. package/libs/vendor/svelte-carousel/src/actions/swipeable/swipeable.js +0 -51
  3359. package/libs/vendor/svelte-carousel/src/actions/tappable/event.js +0 -18
  3360. package/libs/vendor/svelte-carousel/src/actions/tappable/index.js +0 -1
  3361. package/libs/vendor/svelte-carousel/src/actions/tappable/tappable.js +0 -36
  3362. package/libs/vendor/svelte-carousel/src/components/Arrow/Arrow.js +0 -79
  3363. package/libs/vendor/svelte-carousel/src/components/Carousel/Carousel.js +0 -789
  3364. package/libs/vendor/svelte-carousel/src/components/Carousel/createCarousel.js +0 -261
  3365. package/libs/vendor/svelte-carousel/src/components/Dot/Dot.js +0 -58
  3366. package/libs/vendor/svelte-carousel/src/components/Dots/Dots.js +0 -127
  3367. package/libs/vendor/svelte-carousel/src/components/Progress/Progress.js +0 -52
  3368. package/libs/vendor/svelte-carousel/src/direction.js +0 -5
  3369. package/libs/vendor/svelte-carousel/src/main.js +0 -1
  3370. package/libs/vendor/svelte-carousel/src/units.js +0 -7
  3371. package/libs/vendor/svelte-carousel/src/utils/ProgressManager.js +0 -52
  3372. package/libs/vendor/svelte-carousel/src/utils/clones.js +0 -60
  3373. package/libs/vendor/svelte-carousel/src/utils/event.js +0 -12
  3374. package/libs/vendor/svelte-carousel/src/utils/interval.js +0 -4
  3375. package/libs/vendor/svelte-carousel/src/utils/lazy.js +0 -48
  3376. package/libs/vendor/svelte-carousel/src/utils/math.js +0 -11
  3377. package/libs/vendor/svelte-carousel/src/utils/object.js +0 -13
  3378. package/libs/vendor/svelte-carousel/src/utils/page.js +0 -154
  3379. /package/dist/{CSS3DRenderPlugin → types/CSS3DRenderPlugin}/utils/random.d.ts +0 -0
  3380. /package/dist/{CruisePlugin → types/CruisePlugin}/utils/coordinatesAngle.d.ts +0 -0
  3381. /package/dist/{shared-utils → types/CruisePlugin/utils}/formatRad.d.ts +0 -0
  3382. /package/{libs → dist/types}/CruisePlugin/utils/linerValue.d.ts +0 -0
  3383. /package/dist/{CruisePlugin → types/CruisePlugin}/utils/safeCall.d.ts +0 -0
  3384. /package/dist/{CruisePlugin → types/CruisePlugin}/utils/sleep.d.ts +0 -0
  3385. /package/dist/{DigitalPerformancePlugin → types/DigitalPerformancePlugin}/animation-script-adapter.d.ts +0 -0
  3386. /package/dist/{DigitalPerformancePlugin → types/DigitalPerformancePlugin}/mock.d.ts +0 -0
  3387. /package/dist/{DigitalPerformancePlugin → types/DigitalPerformancePlugin}/movement-track-classifier.d.ts +0 -0
  3388. /package/dist/{DigitalPerformancePlugin → types/DigitalPerformancePlugin}/transform-script-data.d.ts +0 -0
  3389. /package/dist/{FireScenePlugin → types/FireScenePlugin}/typing.d.ts +0 -0
  3390. /package/dist/{GuideLinePlugin → types/GuideLinePlugin}/utils/index.d.ts +0 -0
  3391. /package/dist/{ItemLabelPlugin → types/ItemLabelPlugin}/utils/getLabelTransform.d.ts +0 -0
  3392. /package/dist/{ModelMakerPlugin → types/ModelMakerPlugin}/typings/data.d.ts +0 -0
  3393. /package/dist/{ModelRoomLabelPlugin → types/ModelRoomLabelPlugin}/Assets/roomLabelBg.d.ts +0 -0
  3394. /package/dist/{ModelRoomLabelPlugin → types/ModelRoomLabelPlugin}/typings.d.ts +0 -0
  3395. /package/dist/{Object3DHelperPlugin → types/Object3DHelperPlugin}/typings.d.ts +0 -0
  3396. /package/dist/{PanoCompassPlugin → types/PanoCompassPlugin}/Assets/roomInfoIcon.d.ts +0 -0
  3397. /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/Components/Common/icons/index.d.ts +0 -0
  3398. /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/Modules/DeleteDom/_Assets/delete.svg.d.ts +0 -0
  3399. /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/Modules/DeleteDom/_Assets/delete_bg.png.d.ts +0 -0
  3400. /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/Modules/DeleteDom/_Assets/delete_hover_bg.png.d.ts +0 -0
  3401. /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/Modules/UIController/style.d.ts +0 -0
  3402. /package/{libs → dist/types}/PanoMeasurePlugin/typings/utils.type.d.ts +0 -0
  3403. /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/utils/ironbox.d.ts +0 -0
  3404. /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/utils/isIntersecting.d.ts +0 -0
  3405. /package/dist/{PanoRulerPlugin → types/PanoRulerPlugin}/style.d.ts +0 -0
  3406. /package/dist/{PanoRulerPlugin → types/PanoRulerPlugin}/typings.d.ts +0 -0
  3407. /package/dist/{PanoRulerProPlugin → types/PanoRulerProPlugin}/typings.d.ts +0 -0
  3408. /package/dist/{PanoSpatialTagPlugin → types/PanoSpatialTagPlugin}/style.d.ts +0 -0
  3409. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/Assets/Icon.d.ts +0 -0
  3410. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/Components/Common/Icon/tag-popover-arrow-base64.d.ts +0 -0
  3411. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/Components/Tag/Assets/marketingIcon.d.ts +0 -0
  3412. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/audio/AudioDiagnostics.d.ts +0 -0
  3413. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/checkRange.d.ts +0 -0
  3414. /package/{libs → dist/types}/PanoTagPlugin/utils/color.d.ts +0 -0
  3415. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/constants.d.ts +0 -0
  3416. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/doUtil.d.ts +0 -0
  3417. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/noTypecheck.d.ts +0 -0
  3418. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/popoverContainer.d.ts +0 -0
  3419. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/px2rem.d.ts +0 -0
  3420. /package/{libs → dist/types}/PanoTagPlugin/utils/requestIdleCallback.d.ts +0 -0
  3421. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/search.d.ts +0 -0
  3422. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/throttle.d.ts +0 -0
  3423. /package/{libs → dist/types}/PanoTagPlugin/utils/timeToString.d.ts +0 -0
  3424. /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/videoHelper.d.ts +0 -0
  3425. /package/dist/{PipelinePlugin → types/PipelinePlugin}/typing/PluginData.d.ts +0 -0
  3426. /package/dist/{PipelinePlugin → types/PipelinePlugin}/typing/ServerData.d.ts +0 -0
  3427. /package/dist/{Sculpt → types/Sculpt}/utils/Meshes/getLengthHTML.d.ts +0 -0
  3428. /package/dist/{Sculpt → types/Sculpt}/utils/Modules/Cursor.d.ts +0 -0
  3429. /package/dist/{Sculpt → types/Sculpt}/utils/Modules/DeleteButtonBgBorder.d.ts +0 -0
  3430. /package/dist/{Sculpt → types/Sculpt}/utils/Modules/DeleteIconSVG.d.ts +0 -0
  3431. /package/dist/{Sculpt → types/Sculpt}/utils/isIntersecting.d.ts +0 -0
  3432. /package/dist/{Sculpt → types/Sculpt}/utils/radiusToSegments.d.ts +0 -0
  3433. /package/dist/{Sculpt → types/Sculpt}/utils/unit.d.ts +0 -0
  3434. /package/dist/{components → types/components}/AreaLabel/Assets/fontSize.d.ts +0 -0
  3435. /package/dist/{components → types/components}/AreaLabel/Assets/roomLabelBg.d.ts +0 -0
  3436. /package/dist/{components → types/components}/PaintBrush/Subscribe.d.ts +0 -0
  3437. /package/dist/{components → types/components}/PaintBrush/tween.d.ts +0 -0
  3438. /package/dist/{components → types/components}/PaintBrush/utils.d.ts +0 -0
  3439. /package/dist/{floorplan → types/floorplan}/Assets/camera.d.ts +0 -0
  3440. /package/dist/{floorplan → types/floorplan}/Assets/compass.d.ts +0 -0
  3441. /package/dist/{floorplan → types/floorplan}/Assets/floorplanExtraObject.d.ts +0 -0
  3442. /package/dist/{floorplan → types/floorplan}/MapviewFloorplanPlugin/items.d.ts +0 -0
  3443. /package/{libs/PanoSpatialTagPlugin → dist/types/floorplan/TopviewFloorplanPlugin}/style.d.ts +0 -0
  3444. /package/dist/{floorplan → types/floorplan}/constant.d.ts +0 -0
  3445. /package/dist/{floorplan → types/floorplan}/typings/floorplanServerData.d.ts +0 -0
  3446. /package/dist/{floorplan → types/floorplan}/typings/utility.d.ts +0 -0
  3447. /package/dist/{floorplan → types/floorplan}/utils/constant.d.ts +0 -0
  3448. /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/Constants/RenderOrder.d.ts +0 -0
  3449. /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/Helper/HTML/tipsDom.d.ts +0 -0
  3450. /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/Helper/HTML/utils/createElement.d.ts +0 -0
  3451. /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/typings/Direction.d.ts +0 -0
  3452. /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/typings/Scissor.d.ts +0 -0
  3453. /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/utils/object3DBoundingPosition.d.ts +0 -0
  3454. /package/dist/{shared-utils → types/shared-utils}/animationFrame/calculateProgress.d.ts +0 -0
  3455. /package/dist/{shared-utils → types/shared-utils}/animationFrame/formatRad.d.ts +0 -0
  3456. /package/dist/{shared-utils → types/shared-utils}/animationFrame/tween.d.ts +0 -0
  3457. /package/dist/{shared-utils → types/shared-utils}/audio.d.ts +0 -0
  3458. /package/dist/{shared-utils → types/shared-utils}/clamp.d.ts +0 -0
  3459. /package/dist/{shared-utils → types/shared-utils}/constants.d.ts +0 -0
  3460. /package/dist/{shared-utils → types/shared-utils}/createResizeObserver.d.ts +0 -0
  3461. /package/dist/{shared-utils → types/shared-utils}/debounce.d.ts +0 -0
  3462. /package/dist/{shared-utils → types/shared-utils}/device.d.ts +0 -0
  3463. /package/dist/{shared-utils → types/shared-utils}/dom/resizeObserver.d.ts +0 -0
  3464. /package/dist/{shared-utils → types/shared-utils}/equal.d.ts +0 -0
  3465. /package/dist/{shared-utils → types/shared-utils}/even.d.ts +0 -0
  3466. /package/dist/{shared-utils → types/shared-utils}/filter.d.ts +0 -0
  3467. /package/dist/{shared-utils → types/shared-utils}/forReverseEach.d.ts +0 -0
  3468. /package/{libs/CruisePlugin/utils → dist/types/shared-utils}/formatRad.d.ts +0 -0
  3469. /package/dist/{shared-utils → types/shared-utils}/isNil.d.ts +0 -0
  3470. /package/dist/{shared-utils → types/shared-utils}/isTouchDevice.d.ts +0 -0
  3471. /package/dist/{shared-utils → types/shared-utils}/isTruelyObject.d.ts +0 -0
  3472. /package/dist/{shared-utils → types/shared-utils}/log.d.ts +0 -0
  3473. /package/dist/{shared-utils → types/shared-utils}/logger.d.ts +0 -0
  3474. /package/dist/{shared-utils → types/shared-utils}/math/Interval.d.ts +0 -0
  3475. /package/dist/{shared-utils → types/shared-utils}/math/deg2Rad.d.ts +0 -0
  3476. /package/dist/{shared-utils → types/shared-utils}/math/inside.d.ts +0 -0
  3477. /package/dist/{shared-utils → types/shared-utils}/math/intersecting.d.ts +0 -0
  3478. /package/dist/{shared-utils → types/shared-utils}/math/rad2Deg.d.ts +0 -0
  3479. /package/dist/{shared-utils → types/shared-utils}/nearlyEqual.d.ts +0 -0
  3480. /package/dist/{shared-utils → types/shared-utils}/nextFrame.d.ts +0 -0
  3481. /package/dist/{shared-utils → types/shared-utils}/noop.d.ts +0 -0
  3482. /package/dist/{shared-utils → types/shared-utils}/playback.d.ts +0 -0
  3483. /package/dist/{shared-utils → types/shared-utils}/promise/withResolvers.d.ts +0 -0
  3484. /package/dist/{shared-utils → types/shared-utils}/px2rem.d.ts +0 -0
  3485. /package/dist/{shared-utils → types/shared-utils}/safeObj.d.ts +0 -0
  3486. /package/dist/{shared-utils → types/shared-utils}/tap.d.ts +0 -0
  3487. /package/dist/{shared-utils → types/shared-utils}/three/Assets/index.d.ts +0 -0
  3488. /package/dist/{shared-utils → types/shared-utils}/three/PointSelector/utils/contents.d.ts +0 -0
  3489. /package/dist/{shared-utils → types/shared-utils}/three/core/polygonVertex.d.ts +0 -0
  3490. /package/dist/{shared-utils → types/shared-utils}/throttle.d.ts +0 -0
  3491. /package/dist/{shared-utils → types/shared-utils}/tinyEJSrender.d.ts +0 -0
  3492. /package/dist/{shared-utils → types/shared-utils}/to.d.ts +0 -0
  3493. /package/dist/{shared-utils → types/shared-utils}/url/absoluteUrl.d.ts +0 -0
  3494. /package/dist/{shared-utils → types/shared-utils}/url/defaultUrls.d.ts +0 -0
  3495. /package/dist/{shared-utils → types/shared-utils}/url/getUrl.d.ts +0 -0
  3496. /package/dist/{shared-utils → types/shared-utils}/url/replace-static-prefix.d.ts +0 -0
  3497. /package/dist/{shared-utils → types/shared-utils}/util.d.ts +0 -0
  3498. /package/dist/{shared-utils → types/shared-utils}/uuid.d.ts +0 -0
  3499. /package/dist/{typings → types/typings}/math.type.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller-BWkZT0l1.js","names":["isNil","random","random","ThreeVector3","objectAssignDeep","newHeight","newWidth","MediaPlane","BasePlugin.Controller","objectAssignDeep","Subscribe","Line","OpacityMesh","root","$.from_svg","root_1","$.from_html","$.mutable_source","$.prop","$.deep_read_state","$.comment","$.first_child","$.child","$.sibling","$.get","$.set_class","$.set_style","root","$.from_html","$.prop","$.comment","$.first_child","$.set_style","$.deep_read_state","$.untrack","root","$.from_html","root_1","root_2","$.mutable_source","$.prop","$.deep_read_state","$.get","$.comment","$.first_child","$.mutate","$.only_child","$.set_text","root","$.from_html","$.prop","$.comment","$.first_child","$.child","$.sibling","root","$.from_html","root_1","root_2","$.mutable_source","$.prop","$.get","$.deep_read_state","$.first_child","$.child","$.set","$.set_style","$.sibling","root","$.from_html","$.mutable_source","$.prop","$.get","$.deep_read_state","$.comment","$.first_child","$.derived_safe_equal","$.sibling","$.untrack","$.child","$.event","root","$.from_html","root_1","root_2","root_3","$.mutable_source","$.prop","text","$.deep_read_state","$.child","$.text","$.set_text","$.first_child","$.untrack","$.sibling","$.only_child","$.comment","$.get","$.set_style","root","$.from_html","root_1","$.mutable_source","$.prop","$.deep_read_state","$.get","$.comment","$.first_child","$.sibling","$.child","$.derived_safe_equal","$.untrack","$.set_class","$.set_style","$.mutable_source","$.prop","$.deep_read_state","$.comment","$.first_child","$.get","root","$.from_svg","root_1","$.prop","$.child","$.only_child","$.sibling","$.set_attribute","root","$.from_html","$.child","$.pop","root","$.from_html","root_1","root_2","root_3","$.mutable_source","$.prop","$.get","$.deep_read_state","$.comment","$.first_child","$.child","$.untrack","$.set_style","$.set_class","$.sibling","root","$.from_html","$.mutable_source","$.prop","$.get","$.deep_read_state","$.comment","$.first_child","$.child","$.index","$.spread_props","$.set","$.untrack","$.set_class","root","$.from_html","root_1","root_2","$.mutable_source","$.prop","$.deep_read_state","$.get","$.comment","$.first_child","$.sibling","$.child","$.untrack","root","$.from_html","root_1","root_2","root_3","root_4","root_5","root_6","root_7","root_8","root_9","root_10","root_11","root_12","$.mutable_source","$.prop","$.get","$.deep_read_state","$.child","$.sibling","$.set_attribute","$.untrack","$.only_child","$.index","$.set_text","$.event","$.set_class","$.set_style","$.set","root","$.from_html","Audio","$.prop","$.mutable_source","$.get","$.deep_read_state","$.child","$.set_style","$.stopPropagation","root","$.from_html","$.mutable_source","$.prop","$.get","$.deep_read_state","$.child","$.sibling","$.set","$.set_style","root","$.from_html","root_1","root_2","$.mutable_source","$.prop","$.get","$.deep_read_state","$.comment","$.first_child","$.child","$.derived_safe_equal","$.sibling","$.untrack","$.event","$.set_class","root","$.from_html","root_1","$.mutable_source","$.prop","$.deep_read_state","$.comment","$.first_child","$.child","$.derived_safe_equal","$.untrack","$.get","$.sibling","text","$.text","$.set_text","$.mutable_source","$.prop","$.deep_read_state","$.comment","$.first_child","$.get","root","$.from_html","$.mutable_source","$.prop","$.deep_read_state","$.get","$.comment","$.first_child","$.child","$.derived_safe_equal","$.untrack","root","$.from_html","root_1","root_2","root_3","root_4","root_5","$.mutable_source","$.prop","$.get","$.deep_read_state","$.comment","$.first_child","$.child","$.sibling","$.untrack","$.derived_safe_equal","$.set_style","$.derived","$.set_attribute","$.set","root","$.from_html","root_1","$.mutable_source","$.prop","$.deep_read_state","$.get","$.child","$.sibling","$.only_child","$.set_style","root","$.from_html","root_1","PanoramaIcon","$.mutable_source","$.prop","$.deep_read_state","$.get","$.child","$.sibling","$.set_style","root","$.from_html","$.mutable_source","$.prop","$.deep_read_state","$.child","$.get","root","$.from_html","$.mutable_source","$.prop","$.get","$.deep_read_state","$.child","$.comment","$.first_child","$.set","$.set_class","root","$.from_html","root_1","root_2","$.mutable_source","$.prop","$.get","$.deep_read_state","$.comment","$.first_child","$.child","$.derived_safe_equal","$.untrack","$.set_class","$.clsx","classNames","$.derived","$.set_style","$.set_attribute","TagContentSvelte","TagContentSvelte","root","$.from_html","$.prop","$.derived_safe_equal","$.deep_read_state","$.untrack","$.get","$.child","root","$.from_html","root_1","root_2","$.mutable_source","$.prop","$.deep_read_state","$.get","$.child","$.sibling","$.derived_safe_equal","$.untrack","$.set_class","$.set_style","$.pop","root","$.from_html","$.mutable_source","$.prop","$.deep_read_state","$.comment","$.first_child","$.get","root","$.from_html","$.prop","$.child","$.sibling","root","$.from_html","$.prop","$.only_child","root","$.from_html","$.prop","$.child","$.sibling","$.only_child","$.stopPropagation","root","$.from_html","root_1","root_2","root_3","$.mutable_source","$.prop","$.get","$.deep_read_state","$.child","$.only_child","$.set_text","$.sibling","$.index","$.untrack","$.set_attribute","root","$.from_svg","$.prop","$.child","$.sibling","root","$.from_svg","$.prop","$.child","$.sibling","root","$.from_html","root_1","root_2","$.mutable_source","$.prop","$.deep_read_state","$.comment","$.first_child","$.child","$.sibling","$.derived_safe_equal","$.get","$.set_text","$.untrack","$.set_class","root","$.from_html","$.prop","$.first_child","$.sibling","$.derived_safe_equal","$.deep_read_state","$.untrack","$.get","root","$.from_html","$.mutable_source","$.prop","$.get","$.deep_read_state","$.comment","$.first_child","$.child","$.set","$.untrack","$.set_class","root","$.from_html","$.mutable_source","$.prop","$.get","$.deep_read_state","$.first_child","$.child","$.derived_safe_equal","$.untrack","$.set","$.sibling","$.set_class","$.set_style","$.derived","$.from_html","$.prop","$.mutable_source","$.get","$.deep_read_state","$.comment","$.first_child","$.set","$.set_class","$.untrack","$.set_style","objectAssignDeep","type","TagContainerSvelte","__toESM","loadGLTF","transformPosition","Subscribe$1","removeBehindScene","removeFrontScene","addFrontScene","initialCSS3DRender","fiveEveryReadyListener","even","OpecityMesh","CSS3DObject","waitFiveModelLoaded","arrayPositionToVector3","anyPositionToVector3","centerPoint","vector3Position","toArray","getNormal","_raycaster","resizeObserver","isPanoramaLike","isModelLike","reblink","lookPoint","blink","vectorToCoordinates","notNil","isNil","FiveDomEvents","uuid","PANO_TAG_DEFAULT_LINK_ICON","tweenProgress","nextFrame","stringStartsWith","getRelativeValue","unitsExecRgx","isArr","isNum","isStr","sqrt","round","getOriginalAnimatableValue","isFnc","parseNumber","parseEase","abs","isUnd","registerTargets","floor","animate","isNil$1","relativeValuesExecRgx","Controller","flushSync","snippet","tick","if_block","createEventDispatcher","from_svg","template_effect","effect","text","only_child","child","event","append","comment","onDestroy","from_html","set","deep_read_state","afterUpdate","legacy_pre_effect","untrack","legacy_pre_effect_reset","mutable_source","sibling","mutate","transition","bubble_event","setContext","each","bind_window_size","derived_safe_equal","set_attribute","action","clsx","writable","push","set_text","onMount","bind_this","set_class","prop","getContext","init","next","set_style","first_child","spread_props","pop","stopPropagation","reset","mountComponent","slot","await_block","index","html","get","withResolvers","Box","SculptModules","Polygon","Rectangle","require_objectAssignDeep","safeObj","getVideoTexture","isIOSWX","Image_Play_Icon_With_Text","Image_Default_Point","Image_Play_Icon","CONST","FiveLine","cubicOut","linear","cubicInOut","fade","fly","draw","svelteResizeObserver","require_classnames","THREE","getPrevChildOffset","timePosition","goToPrevAnimationOffset","prevAnimation","timeline","prevOffset","parseTimelinePosition","tlDuration","timePosStr","tlLabels","hasLabels","hasSibling","matchedRelativeOperator","fullOperator","split","labelOffset","parsedOffset","parsedNumericalOffset","random$1","m","decimalLength","max","min","_seed","createSeededRandom","t","seed","seededMin","seededMax","seededDecimalLength","shuffle","items","rnd","stagger","values","maxValue","cachedOffset","jitterSamples","from","params","reversed","ease","hasEasing","staggerEase","grid","autoGrid","axis","customTotal","fromFirst","fromCenter","fromLast","fromRandom","fromArr","isRange","val","useProp","val1","val2","unitMatch","start","rng","jitter","hasJitter","jitterIsArr","jitterStart","jitterEnd","fromIndex","registeredTarget","target","total","customIndex","i","customIdx","staggerIndex","hasPositions","has3D","minPosX","minPosY","minPosZ","maxPosX","maxPosY","maxPosZ","pxArr","pyArr","pzArr","el","px","py","pz","found","rect","obj","fX","fY","fZ","distanceX","distanceY","distanceZ","value","minDist","absVal","dims","wh","fromX","fromY","fromZ","toX","toY","toZ","k","v","spacing","tl","output","progress","mag","import_objectAssignDeep","addDebugPoints","geometry","spheres","materials","tag","boxPosition","startSphere","endSphere","polygonPosition","material","sphere","p","five","noTypecheck","x","planeNormal","points","vector3Points","vector01","vector12","isPlaneTag","isPoint3DTag","isMediaModelTag","isModelTag","isVirtualObjectTag","isAutoLookAtModelTag","isMediaPlaneTag","isPolygonTag","is3DBoxTag","isMaskTag","getBoxCorners","end","rotation","Euler","center","Vector3","transform","halfSize","rotationMatrix","Matrix4","unitCorners","size","corner","applyMatrixToPoints","matrix","matrix4","point","getTagPosition","position","getTagCenterPosition","tagPosition","checkRange","range","normalPositionToPositions","squareHalfSize","plane","normal","right","cameraPosition","top","debounce","timer","savedFunc","callback","args","waitFor","throttle","last","func","wait","searchFirstValueSmallThanLastValue","indexRange","cache","getValue","key","getValueByIndex","getYouTubeId","url","urlObj","vParam","match","getVimeoId","pathParts","potentialId","isYouTube","isVimeo","formatVideo","videoId","embedUrl","config","getTagStickType","formatTag","linkTag","BlankAudioSrc","audioCache","AudioNamespace","\"Default\"","\"GetAudioDuration\"","\"PlayAudio\"","getAudio","namespace","audioList","audio","IAudio","src","generateBlankAudio","generateLength","length","paramsSrc","muted","generation","initAudio","entries","adaptConfig","initialState","defaultGlobalConfig","normalizedConfigs","calculateTagConfig","useCache","baseConfig","objWithoutMode","objWithModeLike","objWithMode","_key","keys","configIsWithMode","fiveModeInConfig","keysWithOutFiveMode","contentType","stickType","appearance","audioTag","configInTag","sharedConfig","configWithoutFiveMode","configWithFiveMode","fiveModeList","Five","modeLike","mode","temp","DefaultConfig","pointsIsRectangle","p1","p2","p3","p4","p1p2","p2p3","p3p4","p4p1","p1p3","p2p4","QuadrangleMesh","p0","QuadrangleGeometry","segments","parent","paramsSegments","uv0","uv1","uv2","uv3","verticesArray","uvArray","indicesArray","getPositionsByObjectFit","objectFit","originPositions","bottomWidth","topWidth","leftHeight","rightHeight","wrapperWidth","wrapperHeight","wrapperRatio","originRatio","newWidth","bottomDiff","topDiff","newHeight","leftDiff","rightDiff","FragmentTransparencyMaterial","texture","TagMediaTextureCache","videos","scope","owners","owner","loaded","pending","currentOwners","promise","loadPicture","result","error","MediaPlane$1","mesh","ImagePlane","imageSrc","resolveZFighting","opacity","newCornerPoints","cornerPoints","transparent","newPoints","pendingChange","props","VideoPlane","videoSrc","playButton","videoCoverSrc","cacheScope","domEvents","initialGeneration","paused","d","dispose","detached","manager","userAction","session","current","video","operations","onError","clearError","fromStart","playing","coverMesh","videoMesh","videoInstance","buttonMesh","videoMeshHeight","coverMeshHeight","scale","settled","finish","cancel","reject","resolve","newGeometry","Cache","state","fiveState","accurate","visible","TagUtil","container","renderType","currentMediaElement","type","tags","id","tagId","fiveMode","object","getTagVisible","\"loading\"","_handler","sortedTags","a","b","isUpdateing","tooLarge","delay","sizeEveryTimeout","j","timeoutId","TagRender","Group","builtInRenderer","disposer","DebugUtil","plugin","stack","functionName","property","argumentsList","thisArg","getUrlExt","ext","getFloorIndex","work","observer","floorY","floorIndex","o","floorAverageY","y","getRaycasterStartPosition","observerPosition","checkPoint","BaseTag","host","bind","tagData","freezeTagData","initialConfig","computedConfig","currentConfig","initialUnfolded","finalPosition","normalVector","modelMatrix","tagFiveState","targetMode","targetPanoIndex","vector","enabled","tagVisible","tagDom","list","additionalTargets","targets","blinkFunc","animeConfig","deepMerge","data","distance","panoIndex","media","_fiveState","checkedList","info","skipWhenSamePano","intersectRes","getVisibleByFiveMode","visibleFiveMode","visibleByFiveMode","intersectRaycasterConfig","overrideConfig","fivePanoIndex","startPosition","checkPoints","configCheckPoints","passedCount","unPassedCount","rayStart","direction","intersectionDistance","intersection","customModelIntersection","models","customModelIntersections","distanceError","needPassed","currentFiveFloorIndex","project","z","tagConfig","distanceRange","pointTag","projScreenMatrix","frustum","cameraDirection","unfoldedConfig","aPoint","bPoint","centerPosition","notify","_vector2","PointTag","pixelRatio","originPosition","canFold","canUnfold","unfolded","force","positionChanged","screenChanged","rendererSize","screenDistancePixel","scaledIconPixelGap","ray","c","e","denom","t_ray","lineLength","ratio","__Object__","screenProject","sseDenominator","VERSION","NAME","MinRatio","CSS3DObjectPlus","halfWidth","dpr","pointerEvents","realRatio","planeWidth","planeHeight","domWidthPx","domHeightPx","css3DObjectElement","element","targetVector01","targetVector03","targetNormal","up","targetUp","rotateAxis","addBehindScene","root$38","root_1$18","Straight","$$props","isVertical","width","height","path","inDelay","outDelay","duration","useLinearColor","color","defsID","fragment","node","consequent_1","div","classes","styles","svg","defs","linearGradient","stop","stop_1","node_1","consequent","path_1","$$anchor","$$render","root$37","Shadow","left","bottom","horizontalCenter","verticalCenter","blurRadius","spreadRadius","zIndex","px2rem","$0","$1","$2","random","RANDON_STRING","root$36","root_1$17","root_2$12","FlyText","contentList","content","isFistUnfoldedUpdate","__EmojiSplitFlag__","__EmojiFlag__","__SpaceFlag__","__NewLineFlag__","timeoutID","openAnimeIns","spanEleList","getContentList","emojiRegExp","emoji","item","doAnimation","shouldAnimeReversed","onUnfoldedUpdate","initAnimation","firstLineLastIndex","resultIndex","ele","$$item","fragment_1","span","$$value","br","alternate","span_1","text_1","root$35","Arrow","div_1","$$arg","doUtil","count","util","times","root$34","root_1$16","root_2$11","FlyMText","arrowDirection","foldTextDelay","textUnfolded","textElement","translateY","lineHeight","textHeight","lineHeightString","node_2","root$33","TextTag","title","description","contentWidth","textItems","toggleTextUnfolded","$$node","root$32","root_1$15","root_2$10","root_3$5","MText","isEditing","maxLine","maxWidth","text$2","edit","consequent_3","consequent_2","text_2","fragment_2","node_3","root$31","root_1$14","TextPlaneTag","folded","descriptionMaxRows","titleMaxRows","div_2","div_3","div_4","node_4","TextTag_1","root$30","root_1$13","Polyline","root$29","Carousel","currentIndex","updateIndex","nextIndex","goToNext","$$exports","root$28","root_1$12","root_2$9","root_3$4","MediaItem","mediaUrl","mediaInstance","playButtonIfNeed","playButtonSizeIfNeed","canPlay","autoplayVideo","disableVideoIfHavePoster","showPlayButton","playbackGeneration","playbackController","stopOutput","setMediaManager","unbindMediaManager","play","hooks","loadPoster","videoPosterLoaded","resetVideoPosterLoaded","mediaStore","isWX","img","img_1","styles_1","video_1","styles_2","classes_1","classes_2","classes_3","root$27","Media","carouselEnabled","mediaDataList","autoplay","mediaData","animation","mediaItemConfig","enableCarousel","mediaInstanceList","carousel","intervalId","clickMedia","onTagClick","autoplayCarousel","root$26","root_1$11","root_2$8","ImageTextTag","node_5","MARKETING_MORE_ICON","MARKETING_LIGHT_MORE_ICON","root$25","root_1$10","root_2$7","root_3$3","root_4$2","root_5$2","root_6$1","root_7$1","root_8$1","root_9$1","root_10$1","root_11$1","root_12$1","MarketingTag","havePrice","theme","isLight","showMedia","isSmallScreen","primaryTags","secondaryTagsLimit","secondaryTags","lineDelayUnfolded","lineDelayFolded","contentDelayUnfolded","hasTags","hasFooter","hasMore","viewMoreText","windowWidth","tagsOffsetHeight","maxTagsLength","tagsCalculated","handleHeightChange","limitWidth","calculatedWidth","div_5","div_6","div_7","div_8","div_9","div_10","text_3","div_11","node_7","div_12","text_4","node_8","consequent_7","div_13","node_9","consequent_5","div_14","text_5","node_10","consequent_4","text_6","div_15","node_11","consequent_6","span_2","text_7","node_12","consequent_9","div_16","div_17","text_8","node_13","consequent_8","img_2","AudioDiagnostics","userAgent","browser","version","formats","supportedFormats","warnings","format","response","resolved","cleanup","onSuccess","onCanPlay","browserSupport","extension","urlTest","audioTest","AudioElement","SharedAudio","mediaManager","poolGeneration","currentTime","restoreTimeAfterPlay","audioSrc","mimeType","\"mp3\"","\"ogg\"","\"wav\"","\"m4a\"","\"aac\"","\"webm\"","ontimeupdate","onplay","ownsAudio","onpause","onended","onerror","oncanplay","oncanplaythrough","onloadeddata","onloadedmetadata","root$24","Audio$1","enable","style","hooksInfo","dispatch","audioRefTimeout","audioUrl","audioPaused","addAudioEventListener","eventInfo","ownerTag","instance","unsubscribeMedia","releaseAudio","syncAudio","source","onClick","root$23","AudioIcon","styleWidth","shadow","animated","icon","animationStep","SimpleAnimationSteps","root$22","root_1$9","root_2$6","AudioTag","clickContent","root$21","root_1$8","AudioPlaneTag","text$1","AudioTag_1","audioRef","root$20","MediaPlane","playIcon","autoplayConfig","getImageSize","getImageInfo","realWidth","realHeight","getKeyframeInfo","steps","keyframesRealWidth","keyframesRealHeight","keyframesWidth","keyframesHeight","perWidth","perHeight","fps","AnimationStyleManager","elementIndex","timing","loop","loopInterval","properties","seg","segProgress","segIndex","localProgress","transforms","styleKey","ref","keyframeName","propArrays","arr","totalDuration","activePercent","keyframeContent","percent","opacityStr","finalTransform","finalOpacityStr","hasScale","styleElement","applySvgAnimation","svgElement","styleManager","elementConfig","selector","htmlElement","clearSvgAnimation","nodeList","root$19","root_1$7","root_2$5","root_3$2","root_4$1","root_5$1","Icon","iconUrl","bgcolor","bgopacity","iconSteps","iconFps","iconRatio","iconScale","iconWidth","iconAnimation","hasIcon","isKeyframe","paramsWidth","getKeyframe","getImage","finalSize","wantedWidth","originWidth","originHeight","emitIconLoaded","svgContainer","svgHtml","currentSvgEl","svgMarkupCache","prevAnimationKey","isSvgUrl","loadSvgMarkup","cached","res","err","mountSvgAnimation","nextKey","$$source","fragment_3","fragment_4","styles_3","node_6","fragment_5","user_derived","alternate_1","fragment_6","fragment_7","styles_4","styles_5","root$18","root_1$6","LinkTag","iconLoaded","textTop","root$17","root_1$5","PanoramaIcon$1","finalWidth","root$16","PanoramaTag","root$15","CustomTag","rendererMap","renderer","destroyTemplate","import_classnames","root$14","root_1$4","root_2$4","Tag","isVisible","isHide","haveContent","contentTypeMap","temporaryState","lastVisibleState","lastUnfoldedState","exposureEmit","ModelTag","d_1","d_2","d_3","d_4","d_5","d_6","d_7","positions","loadPromise","model","gltf","prevObject","bgColor","cssMesh","clickEventDispose","svelte","getFloorMesh","box","autoPlayIntersectConfig","canAutoPlayByOcclusion","PlaneTag","floorBoxMap","containingFloors","allFloors","minDistance","nearestFloor","boxCenter","uniqueId","rectangle","rectangleMesh","helper","editorEnabled","needRemove","needCreate","needRefresh","updateObjectFit","canAutoPlay","videoPlane","onContentAdded","onPlay","onPause","videoElement","render","sculptDataToBoxPosition","heightVector","heightPoint","bottomPoints","topPoints","allPoints","xAxis","yAxis","zAxis","quaternion","euler","invertedQuaternion","boxLocalPoints","xs","ys","zs","BoxTag","userStyle","point1","point2","upVector","sculptData","handler","newPosition","unitBottomCorners","unitTopCorner","rawHeightPoint","vertices","rightmostVertex","projected","PolygonTag","v1","v2","polygon","vertex","pos","MAX_MASK_STYLES","STRICT_COLOR_MATCH","MaskNodeMaterial","uv","quarterTexel","samples","selectedStyle","bestScore","bestCoverage","bestOpacity","bestHighlight","exactMatch","sample","coverage","score","image","parseColor","hex","r","g","MaskTag","maskSource","meshKey","entry","colorKey","idx","s","tol","tolerance255","maskTexture","styleIndex","newStyle","cachedImageData","cachedTexture","getImageData","tex","canvas","ctx","originalRaycast","raycaster","imageData","pixel","intersects","blinkTarget","newMask","translation","highlightColor","oldKey","styleList","symbol","cacheKey","loadStartTime","abortController","textureLoader","loadTime","sourceDesc","memoryMB","totalRefCount","estimatedMemoryMB","cacheEntries","sizeMB","root$13","AudioPoint","handlePointClick","handleMouseEnter","handleMouseLeave","audioEventHandlers","$$args","root$12","root_1$3","root_2$3","TagPoint","isAudioTag","timeout","animating","setAnimating","foldDelay","tagPointClickHelper","handleTagPointClick","beforeHover","onHoverEnd","audioInstance","pointWidth","tagPopoverArrowDarkBottom","tagPopoverArrowDarkTop","tagPopoverArrowDarkLeft","tagPopoverArrowDarkRight","tagPopoverArrowLightBottom","tagPopoverArrowLightTop","tagPopoverArrowLightLeft","tagPopoverArrowLightRight","root$11","TagPopoverArrow","arrowImage","show","root$10","VideoIcon","linearGradient_1","stop_2","stop_3","root$9","PanoramaIcon","root$8","AudioPlayer","elapsedTime","root$7","root_1$2","root_2$2","root_3$1","root_4","root_5","root_6","root_7","root_8","root_9","root_10","root_11","root_12","root_13","TagPopup","isMarketingTag","defaultTheme","effectiveTheme","finalTitle","finalDescription","mediaRawUrl","isVideoMedia","isPanoramaMedia","isYouTubeVideo","isVimeoVideo","isExternalVideo","formattedVideoUrl","videoPlayerTitle","mediaCount","currentMediaIndex","marketingBrandTags","marketingTags","remainingCount","marketingPrice","marketingPriceUnit","placement","audioPlaying","audioCurrentTime","audioDuration","audioProgress","audioElapsedTime","smoothUpdateFrame","lastUpdateTime","smoothProgress","formatTime","mins","seconds","secs","getTargetProgress","smoothUpdate","timeSinceLastUpdate","estimatedCurrentTime","progressDiff","updateDisplayState","targetProgress","manageSmoothUpdate","handleAudioPlayerClick","mediaItem","videoUrl","vimeoId","h3","iframe","consequent_10","consequent_11","node_15","consequent_13","node_16","consequent_12","node_17","node_18","root$6","ArrowRightIcon","root$5","ShareIcon","root$4","root_1$1","root_2$1","TagPopoverToolBar","toolbar","closePopover","handleViewMore","handleShare","root$3","PopoverContent","showArrow","adjustedPlacement","root$2","TagPopover","arrow","transitionDuration","triggerElement","wrapperElement","popoverContainer","popoverContentElement","popoverContentElementRect","anchorPosition","fadeAndFly","u","calculateOptimalPlacement","baseSpace","viewportWidth","viewportHeight","topBoundary","bottomBoundary","rightBoundary","popoverWidth","popoverHeight","calculateAnchorPositionGlobal","triggerRect","closePopoverInternal","handleContentResize","handleClick","popoverEl","mounted","mountToContainer","root$1","root_1","root_2","root_3","TagItem","havePoint","hasPopoverContent","screenPosition","disable","hide","isHovering","hoverTimeout","hideTimeout","debounceTimeout","isMouseOverPopover","isMouseOverTagPoint","tagPointComponent","hoverState","setHoverStateDebounced","newState","handlePopoverMouseEnter","handlePopoverMouseLeave","trigger","getOrCreatePopoverContainer","root","TagContainer","popoverContainerEl","popoverZIndex","PLUGIN_NAME","PanoTagPluginController","\"__PANOTAGPLUGIN_DEBUG_LIST__\"","\"__PANOTAGPLUGIN_DEBUG__\"","wrapper","validTags","options","maskUrl","_tags","merge","globalConfig","contentTypeConfig","prevState","plugins","currentTag","oldTagData","maskUpdates","mask","maskTagsAtIndex","resizeObserverDisposer","observerELement","hideObserve","hideUnobserve","showObserve","showUnobserve","tempObject","startQuaternion","endQuaternion","anime","hasTagUnfolded","fiveEveryReadyListenerDisposer","partialProps","currentPanoIndex","tagPanoIndex","cacheStats"],"sources":["../../../node_modules/animejs/dist/modules/timeline/position.js","../../../node_modules/animejs/dist/modules/utils/random.js","../../../node_modules/animejs/dist/modules/utils/stagger.js","../../src/PanoTagPlugin/utils/addDebugPoints.ts","../../src/PanoTagPlugin/utils/noTypecheck.ts","../../src/PanoTagPlugin/utils/planeNormal.ts","../../src/PanoTagPlugin/utils/tag/tagCheck.ts","../../src/PanoTagPlugin/utils/tagPosition.ts","../../src/PanoTagPlugin/utils/checkRange.ts","../../src/PanoTagPlugin/utils/normalPositionToPositions.ts","../../src/PanoTagPlugin/utils/debounce.ts","../../src/PanoTagPlugin/utils/throttle.ts","../../src/PanoTagPlugin/utils/search.ts","../../src/PanoTagPlugin/utils/videoHelper.ts","../../src/PanoTagPlugin/utils/tag/format.ts","../../src/shared-utils/audio.ts","../../src/shared-utils/typescript/entries.ts","../../src/PanoTagPlugin/utils/tag/adaptConfig.ts","../../src/PanoTagPlugin/typings/tag/TagConfig.ts","../../src/PanoTagPlugin/utils/tag/calculateTagConfig.ts","../../src/PanoTagPlugin/tag.config.ts","../../src/shared-utils/math/pointsIsRectangle.ts","../../src/shared-utils/three/Quadrangle.ts","../../src/shared-utils/three/getPositionsByObjectFit.ts","../../src/shared-utils/three/FragmentTransparencyMaterial.ts","../../src/PanoTagPlugin/utils/model/TagMediaTextureCache.ts","../../src/PanoTagPlugin/utils/model/mediaPlane.ts","../../src/PanoTagPlugin/utils/Cache.ts","../../src/PanoTagPlugin/controller/TagUtil.ts","../../src/PanoTagPlugin/controller/TagRender.ts","../../src/PanoTagPlugin/utils/DebugUtil.ts","../../src/shared-utils/url/getUrl.ts","../../src/shared-utils/five/getFloorIndex.ts","../../src/PanoTagPlugin/utils/tag/getRaycasterStartPosition.ts","../../src/PanoTagPlugin/controller/Tag/BaseTag.ts","../../src/PanoTagPlugin/controller/Tag/PointTag.ts","../../src/shared-utils/CSS3DRender/CSS3DObject.ts","../../src/PanoTagPlugin/Components/Common/Line/Straight.svelte","../../src/PanoTagPlugin/Components/Common/Shadow.svelte","../../src/PanoTagPlugin/utils/constants.ts","../../src/PanoTagPlugin/Components/Common/Text/FlyText.svelte","../../src/PanoTagPlugin/Components/Common/Arrow.svelte","../../src/PanoTagPlugin/utils/doUtil.ts","../../src/PanoTagPlugin/Components/Common/Text/FlyMText.svelte","../../src/PanoTagPlugin/Components/Tag/TextTag/TextTag.svelte","../../src/PanoTagPlugin/utils/px2rem.ts","../../src/PanoTagPlugin/Components/Common/Text/MText.svelte","../../src/PanoTagPlugin/Components/Tag/TextTag/TextPlaneTag.svelte","../../src/PanoTagPlugin/Components/Tag/TextTag/index.svelte","../../src/PanoTagPlugin/Components/Common/Line/Polyline.svelte","../../src/PanoTagPlugin/Components/Common/Carousel.svelte","../../src/PanoTagPlugin/Components/Common/MediaItem.svelte","../../src/PanoTagPlugin/Components/Common/Media.svelte","../../src/PanoTagPlugin/Components/Tag/ImageTextTag.svelte","../../src/PanoTagPlugin/Components/Tag/Assets/marketingIcon.ts","../../src/PanoTagPlugin/Components/Tag/MarketingTag.svelte","../../src/PanoTagPlugin/utils/audio/AudioDiagnostics.ts","../../src/PanoTagPlugin/utils/audio/SharedAudio.ts","../../src/PanoTagPlugin/Components/Common/Audio.svelte","../../src/PanoTagPlugin/Components/Common/Icon/audioIcon.svelte","../../src/PanoTagPlugin/Components/Tag/AudioTag/AudioTag.svelte","../../src/PanoTagPlugin/Components/Tag/AudioTag/AudioPlaneTag.svelte","../../src/PanoTagPlugin/Components/Tag/AudioTag/index.svelte","../../src/PanoTagPlugin/Components/Tag/MediaPlane.svelte","../../src/PanoTagPlugin/utils/getImageInfo.ts","../../src/PanoTagPlugin/Components/Common/Icon/animationUtils.ts","../../src/PanoTagPlugin/Components/Common/Icon/Icon.svelte","../../src/PanoTagPlugin/Components/Tag/LinkTag.svelte","../../src/PanoTagPlugin/Components/Common/Icon/PanoramaIcon.svelte","../../src/PanoTagPlugin/Components/Tag/PanoramaTag.svelte","../../src/PanoTagPlugin/Components/Tag/CustomTag.svelte","../../src/PanoTagPlugin/Components/Tag/index.svelte","../../src/PanoTagPlugin/Components/Tag/index.svelte","../../src/PanoTagPlugin/controller/Tag/ModelTag.ts","../../src/shared-utils/five/getFloorMesh.ts","../../src/PanoTagPlugin/utils/tag/canAutoPlayByOcclusion.ts","../../src/PanoTagPlugin/controller/Tag/PlaneTag.ts","../../src/PanoTagPlugin/utils/sculptDataToBoxPosition.ts","../../src/PanoTagPlugin/controller/Tag/BoxTag.ts","../../src/PanoTagPlugin/controller/Tag/PolygonTag.ts","../../src/PanoTagPlugin/utils/model/MaskNodeMaterial.ts","../../src/PanoTagPlugin/controller/Tag/MaskTag.ts","../../src/PanoTagPlugin/Components/Tag/AudioTag/AudioPoint.svelte","../../src/PanoTagPlugin/Components/Common/TagPoint.svelte","../../src/PanoTagPlugin/Components/Common/Icon/tag-popover-arrow-base64.ts","../../src/PanoTagPlugin/Components/Common/TagPopover/TagPopoverArrow.svelte","../../src/PanoTagPlugin/Components/Common/VideoIcon.svelte","../../src/PanoTagPlugin/Components/Common/TagPopover/PanoramaIcon.svelte","../../src/PanoTagPlugin/Components/Common/AudioPlayer.svelte","../../src/PanoTagPlugin/Components/Common/TagPopover/TagPopup.svelte","../../src/PanoTagPlugin/Components/Common/TagPopover/ArrowRightIcon.svelte","../../src/PanoTagPlugin/Components/Common/TagPopover/ShareIcon.svelte","../../src/PanoTagPlugin/Components/Common/TagPopover/TagPopoverToolBar.svelte","../../src/PanoTagPlugin/Components/Common/TagPopover/PopoverContent.svelte","../../src/PanoTagPlugin/Components/Common/TagPopover/index.svelte","../../src/PanoTagPlugin/Components/TagItem.svelte","../../src/PanoTagPlugin/utils/popoverContainer.ts","../../src/PanoTagPlugin/Components/TagContainer.svelte","../../src/PanoTagPlugin/controller/index.ts"],"sourcesContent":["/**\n * Anime.js - timeline - ESM\n * @version v4.5.0\n * @license MIT\n * @copyright 2026 - Julian Garnier\n */\n\nimport { relativeValuesExecRgx, minValue } from '../core/consts.js';\nimport { isUnd, isNum, stringStartsWith, isNil } from '../core/helpers.js';\nimport { getRelativeValue } from '../core/values.js';\n\n/**\n * @import {\n * Tickable,\n * TimelinePosition,\n * } from '../types/index.js'\n*/\n\n/**\n * @import {\n * Timeline,\n * } from './timeline.js'\n*/\n\n/**\n * Timeline's children offsets positions parser\n * @param {Timeline} timeline\n * @param {String} timePosition\n * @return {Number}\n */\nconst getPrevChildOffset = (timeline, timePosition) => {\n if (stringStartsWith(timePosition, '<')) {\n const goToPrevAnimationOffset = timePosition[1] === '<';\n const prevAnimation = /** @type {Tickable} */(timeline._tail);\n const prevOffset = prevAnimation ? prevAnimation._offset + prevAnimation._delay : 0;\n return goToPrevAnimationOffset ? prevOffset : prevOffset + prevAnimation.duration;\n }\n};\n\n/**\n * @param {Timeline} timeline\n * @param {TimelinePosition} [timePosition]\n * @return {Number}\n */\nconst parseTimelinePosition = (timeline, timePosition) => {\n let tlDuration = timeline.iterationDuration;\n if (tlDuration === minValue) tlDuration = 0;\n if (isUnd(timePosition)) return tlDuration;\n if (isNum(+timePosition)) return +timePosition;\n const timePosStr = /** @type {String} */(timePosition);\n const tlLabels = timeline ? timeline.labels : null;\n const hasLabels = !isNil(tlLabels);\n const prevOffset = getPrevChildOffset(timeline, timePosStr);\n const hasSibling = !isUnd(prevOffset);\n const matchedRelativeOperator = relativeValuesExecRgx.exec(timePosStr);\n if (matchedRelativeOperator) {\n const fullOperator = matchedRelativeOperator[0];\n const split = timePosStr.split(fullOperator);\n const labelOffset = hasLabels && split[0] ? tlLabels[split[0]] : tlDuration;\n const parsedOffset = hasSibling ? prevOffset : hasLabels ? labelOffset : tlDuration;\n const parsedNumericalOffset = +split[1];\n return getRelativeValue(parsedOffset, parsedNumericalOffset, fullOperator[0]);\n } else {\n return hasSibling ? prevOffset :\n hasLabels ? !isUnd(tlLabels[timePosStr]) ? tlLabels[timePosStr] :\n tlDuration : tlDuration;\n }\n};\n\nexport { parseTimelinePosition };\n","/**\n * Anime.js - utils - ESM\n * @version v4.5.0\n * @license MIT\n * @copyright 2026 - Julian Garnier\n */\n\n/**\n * Generate a random number between optional min and max (inclusive) and decimal precision\n *\n * @callback RandomNumberGenerator\n * @param {Number} [min=0] - The minimum value (inclusive)\n * @param {Number} [max=1] - The maximum value (inclusive)\n * @param {Number} [decimalLength=0] - Number of decimal places to round to\n * @return {Number} A random number between min and max\n */\n\n/**\n * Generates a random number between min and max (inclusive) with optional decimal precision\n *\n * @type {RandomNumberGenerator}\n */\nconst random = (min = 0, max = 1, decimalLength = 0) => {\n const m = 10 ** decimalLength;\n return Math.floor((Math.random() * (max - min + (1 / m)) + min) * m) / m;\n};\n\nlet _seed = 0;\n\n/**\n * Creates a seeded pseudorandom number generator function\n *\n * @param {Number} [seed] - The seed value for the random number generator\n * @param {Number} [seededMin=0] - The minimum default value (inclusive) of the returned function\n * @param {Number} [seededMax=1] - The maximum default value (inclusive) of the returned function\n * @param {Number} [seededDecimalLength=0] - Default number of decimal places to round to of the returned function\n * @return {RandomNumberGenerator} A function to generate a random number between optional min and max (inclusive) and decimal precision\n */\nconst createSeededRandom = (seed, seededMin = 0, seededMax = 1, seededDecimalLength = 0) => {\n let t = seed === undefined ? _seed++ : seed;\n return (min = seededMin, max = seededMax, decimalLength = seededDecimalLength) => {\n t += 0x6D2B79F5;\n t = Math.imul(t ^ t >>> 15, t | 1);\n t ^= t + Math.imul(t ^ t >>> 7, t | 61);\n const m = 10 ** decimalLength;\n return Math.floor(((((t ^ t >>> 14) >>> 0) / 4294967296) * (max - min + (1 / m)) + min) * m) / m;\n }\n};\n\n/**\n * Picks a random element from an array or a string\n *\n * @template T\n * @param {String|Array<T>} items - The array or string to pick from\n * @return {String|T} A random element from the array or character from the string\n */\nconst randomPick = items => items[random(0, items.length - 1)];\n\n/**\n * Shuffles an array in-place using the Fisher-Yates algorithm\n * Adapted from https://bost.ocks.org/mike/shuffle/\n *\n * @param {Array} items - The array to shuffle (will be modified in-place)\n * @param {RandomNumberGenerator} [rnd] - Optional RNG matching the random() signature (defaults to random)\n * @return {Array} The same array reference, now shuffled\n */\nconst shuffle = (items, rnd = random) => {\n let m = items.length, t, i;\n while (m) { i = rnd(0, --m); t = items[m]; items[m] = items[i]; items[i] = t; }\n return items;\n};\n\nexport { createSeededRandom, random, randomPick, shuffle };\n","/**\n * Anime.js - utils - ESM\n * @version v4.5.0\n * @license MIT\n * @copyright 2026 - Julian Garnier\n */\n\nimport { unitsExecRgx, emptyString } from '../core/consts.js';\nimport { isUnd, parseNumber, isFnc, isNum, sqrt, abs, floor, round, isArr, isStr } from '../core/helpers.js';\nimport { parseEase } from '../easings/eases/parser.js';\nimport { parseTimelinePosition } from '../timeline/position.js';\nimport { getOriginalAnimatableValue } from '../core/values.js';\nimport { registerTargets } from '../core/targets.js';\nimport { createSeededRandom, random, shuffle } from './random.js';\n\n/**\n * @import {\n * StaggerParams,\n * StaggerFunction,\n * JSTarget,\n * } from '../types/index.js'\n*/\n\n/**\n * @import {\n * Spring,\n * } from '../easings/spring/index.js'\n*/\n\n/**\n * @overload\n * @param {Number} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<Number>}\n */\n\n/**\n * @overload\n * @param {String} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<String>}\n */\n\n/**\n * @overload\n * @param {[Number, Number]} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<Number>}\n */\n\n/**\n * @overload\n * @param {[String, String]} val\n * @param {StaggerParams} [params]\n * @return {StaggerFunction<String>}\n */\n\n/**\n * @param {Number|String|[Number, Number]|[String, String]} val The staggered value or range\n * @param {StaggerParams} [params] The stagger parameters\n * @return {StaggerFunction<Number|String>}\n */\nconst stagger = (val, params = {}) => {\n let values = [];\n let maxValue = 0;\n let cachedOffset;\n let jitterSamples = null;\n const from = params.from;\n const reversed = params.reversed;\n const ease = params.ease;\n const hasEasing = !isUnd(ease);\n const hasSpring = hasEasing && !isUnd(/** @type {Spring} */(ease).ease);\n const staggerEase = hasSpring ? /** @type {Spring} */(ease).ease : hasEasing ? parseEase(ease) : null;\n const grid = params.grid;\n const autoGrid = grid === true;\n const axis = params.axis;\n const customTotal = params.total;\n const fromFirst = isUnd(from) || from === 0 || from === 'first';\n const fromCenter = from === 'center';\n const fromLast = from === 'last';\n const fromRandom = from === 'random';\n const fromArr = isArr(from);\n const isRange = isArr(val);\n const useProp = params.use;\n const val1 = isRange ? parseNumber(val[0]) : parseNumber(val);\n const val2 = isRange ? parseNumber(val[1]) : 0;\n const unitMatch = unitsExecRgx.exec((isRange ? val[1] : val) + emptyString);\n const start = params.start || 0 + (isRange ? val1 : 0);\n const seed = params.seed;\n const hasSeed = !isUnd(seed) && seed !== false;\n const rng = hasSeed ? createSeededRandom(seed === true ? 0 : /** @type {Number} */(seed)) : random;\n const jitter = params.jitter;\n const hasJitter = !isUnd(jitter);\n const jitterIsArr = isArr(jitter);\n const jitterStart = jitterIsArr ? /** @type {[Number,Number]} */(jitter)[0] : /** @type {Number} */(jitter) || 0;\n const jitterEnd = jitterIsArr ? /** @type {[Number,Number]} */(jitter)[1] : /** @type {Number} */(jitter) || 0;\n let fromIndex = fromFirst ? 0 : isNum(from) ? from : 0;\n return (target, i, t, _, tl) => {\n const [ registeredTarget ] = registerTargets(target);\n const total = isUnd(customTotal) ? t.length : customTotal;\n const customIndex = !isUnd(useProp) ? isFnc(useProp) ? useProp(registeredTarget, i, total) : getOriginalAnimatableValue(registeredTarget, useProp) : false;\n const customIdx = isNum(customIndex) || isStr(customIndex) && isNum(+customIndex) ? +customIndex : i;\n // Fall back to the natural index when the resolved value lands outside [0, total) so values[staggerIndex] never reads undefined.\n const staggerIndex = customIdx >= 0 && customIdx < total ? customIdx : i;\n if (fromCenter) fromIndex = (total - 1) / 2;\n if (fromLast) fromIndex = total - 1;\n if (!values.length) {\n if (autoGrid) {\n let hasPositions = true;\n let has3D = false;\n let minPosX = Infinity;\n let minPosY = Infinity;\n let minPosZ = Infinity;\n let maxPosX = -Infinity;\n let maxPosY = -Infinity;\n let maxPosZ = -Infinity;\n const pxArr = [];\n const pyArr = [];\n const pzArr = [];\n for (let index = 0; index < total; index++) {\n const el = t[index];\n let px = 0;\n let py = 0;\n let pz = 0;\n let found = false;\n if (el && isFnc(el.getBoundingClientRect)) {\n const rect = el.getBoundingClientRect();\n px = rect.left + rect.width / 2;\n py = rect.top + rect.height / 2;\n found = true;\n } else {\n const obj = /** @type {JSTarget} */(el);\n if (obj && isNum(obj.x) && isNum(obj.y)) {\n px = obj.x;\n py = obj.y;\n if (isNum(obj.z)) {\n pz = obj.z;\n has3D = true;\n }\n found = true;\n }\n }\n if (!found) {\n hasPositions = false;\n break;\n }\n pxArr.push(px);\n pyArr.push(py);\n pzArr.push(pz);\n if (px < minPosX) minPosX = px;\n if (py < minPosY) minPosY = py;\n if (pz < minPosZ) minPosZ = pz;\n if (px > maxPosX) maxPosX = px;\n if (py > maxPosY) maxPosY = py;\n if (pz > maxPosZ) maxPosZ = pz;\n }\n if (hasPositions) {\n let fX = pxArr[0];\n let fY = pyArr[0];\n let fZ = pzArr[0];\n if (fromArr) {\n fX = minPosX + from[0] * (maxPosX - minPosX);\n fY = minPosY + from[1] * (maxPosY - minPosY);\n fZ = has3D ? minPosZ + (from.length >= 3 ? from[2] : 0.5) * (maxPosZ - minPosZ) : 0;\n } else if (fromCenter) {\n fX = (minPosX + maxPosX) / 2;\n fY = (minPosY + maxPosY) / 2;\n fZ = (minPosZ + maxPosZ) / 2;\n } else if (fromLast) {\n fX = pxArr[total - 1];\n fY = pyArr[total - 1];\n fZ = pzArr[total - 1];\n } else if (isNum(from)) {\n fX = pxArr[from];\n fY = pyArr[from];\n fZ = pzArr[from];\n }\n for (let index = 0; index < total; index++) {\n const distanceX = fX - pxArr[index];\n const distanceY = fY - pyArr[index];\n const distanceZ = fZ - pzArr[index];\n let value = sqrt(distanceX * distanceX + distanceY * distanceY + (has3D ? distanceZ * distanceZ : 0));\n if (axis === 'x') value = -distanceX;\n if (axis === 'y') value = -distanceY;\n if (axis === 'z') value = -distanceZ;\n values.push(value);\n }\n let minDist = Infinity;\n for (let index = 0; index < total; index++) {\n const absVal = abs(values[index]);\n if (absVal > 0 && absVal < minDist) minDist = absVal;\n }\n if (minDist > 0 && minDist < Infinity) {\n for (let index = 0; index < total; index++) {\n values[index] = values[index] / minDist;\n }\n }\n } else {\n for (let index = 0; index < total; index++) {\n values.push(abs(fromIndex - index));\n }\n }\n } else {\n for (let index = 0; index < total; index++) {\n if (!grid) {\n values.push(abs(fromIndex - index));\n } else {\n const dims = grid.length;\n const wh = grid[0] * grid[1];\n let fromX, fromY, fromZ;\n if (fromArr) {\n fromX = from[0] * (grid[0] - 1);\n fromY = from[1] * (grid[1] - 1);\n fromZ = dims === 3 ? (from.length >= 3 ? from[2] : 0.5) * (grid[2] - 1) : 0;\n } else if (fromCenter) {\n fromX = (grid[0] - 1) / 2;\n fromY = (grid[1] - 1) / 2;\n fromZ = dims === 3 ? (grid[2] - 1) / 2 : 0;\n } else {\n fromX = fromIndex % grid[0];\n fromY = floor(fromIndex / grid[0]) % grid[1];\n fromZ = dims === 3 ? floor(fromIndex / wh) : 0;\n }\n const toX = index % grid[0];\n const toY = floor(index / grid[0]) % grid[1];\n const toZ = dims === 3 ? floor(index / wh) : 0;\n const distanceX = fromX - toX;\n const distanceY = fromY - toY;\n const distanceZ = fromZ - toZ;\n let value = sqrt(distanceX * distanceX + distanceY * distanceY + (dims === 3 ? distanceZ * distanceZ : 0));\n if (axis === 'x') value = -distanceX;\n if (axis === 'y') value = -distanceY;\n if (axis === 'z') value = -distanceZ;\n values.push(value);\n }\n }\n }\n maxValue = values[0];\n for (let k = 1; k < total; k++) if (values[k] > maxValue) maxValue = values[k];\n if (staggerEase || reversed) {\n for (let k = 0; k < total; k++) {\n let v = values[k];\n if (staggerEase) v = staggerEase(v / maxValue) * maxValue;\n if (reversed) v = axis ? -v : abs(maxValue - v);\n values[k] = v;\n }\n }\n if (hasJitter) {\n jitterSamples = new Array(total);\n for (let k = 0; k < total; k++) jitterSamples[k] = rng(-1, 1, 4);\n }\n if (fromRandom) values = shuffle(values, rng);\n }\n const spacing = isRange ? (val2 - val1) / maxValue : val1;\n if (isUnd(cachedOffset)) {\n cachedOffset = tl ? parseTimelinePosition(tl, isUnd(params.start) ? tl.iterationDuration : start) : /** @type {Number} */(start);\n }\n /** @type {String|Number} */\n let output = cachedOffset + ((spacing * round(values[staggerIndex], 2)) || 0);\n if (hasJitter) {\n const progress = maxValue ? values[staggerIndex] / maxValue : 0;\n const mag = jitterStart + (jitterEnd - jitterStart) * progress;\n output = /** @type {Number} */(output) + jitterSamples[staggerIndex] * mag;\n }\n if (params.modifier) output = params.modifier(/** @type {Number} */(output));\n if (unitMatch) output = `${output}${unitMatch[2]}`;\n return output;\n }\n};\n\nexport { stagger };\n","import type { Five } from '@realsee/five-webgpu'\nimport * as THREE from 'three/webgpu'\nimport type { Tag, BoxPosition } from '../typings'\nimport { arrayPositionToVector3 } from '../../shared-utils/positionToVector3'\n\nexport function addDebugPoints(five: Five, tags: Tag[]) {\n tags.forEach((tag) => {\n const geometry = new THREE.SphereGeometry(0.02, 16, 16)\n const spheres = []\n const materials = [\n new THREE.MeshBasicMaterial({ color: 0xffff00 }), // 黄\n new THREE.MeshBasicMaterial({ color: 0xff00ff }), // 粉\n new THREE.MeshBasicMaterial({ color: 0xff0000 }), // 红\n new THREE.MeshBasicMaterial({ color: 0x00ffff }), // 蓝\n ]\n\n // 处理 3DBox 类型\n if (tag.stickType === '3DBox') {\n const boxPosition = tag.position as unknown as BoxPosition\n if (boxPosition?.start && boxPosition?.end) {\n // 显示 start 点(黄色)和 end 点(粉色)\n const startSphere = new THREE.Mesh(geometry, materials[0]!)\n startSphere.position.copy(arrayPositionToVector3(boxPosition.start as any))\n spheres.push(startSphere)\n\n const endSphere = new THREE.Mesh(geometry, materials[1]!)\n endSphere.position.copy(arrayPositionToVector3(boxPosition.end as any))\n spheres.push(endSphere)\n }\n } else if (tag.stickType === 'Polygon') {\n // 处理 Polygon 类型 - 显示所有顶点\n const polygonPosition = tag.position as any[]\n if (Array.isArray(polygonPosition) && polygonPosition.length > 0) {\n polygonPosition.forEach((p, index) => {\n const material = materials[index % materials.length]!\n const sphere = new THREE.Mesh(geometry, material)\n sphere.position.copy(arrayPositionToVector3(p))\n spheres.push(sphere)\n })\n }\n } else if (Array.isArray(tag.position) && tag.position.length === 4) {\n tag.position.forEach((p, index) => {\n const material = materials[index]!\n const sphere = new THREE.Mesh(geometry, material)\n sphere.position.copy(arrayPositionToVector3(p))\n spheres.push(sphere)\n })\n } else if (Array.isArray(tag.position)) {\n const material = materials[0]!\n const sphere = new THREE.Mesh(geometry, material)\n sphere.position.copy(arrayPositionToVector3(tag.position as any))\n spheres.push(sphere)\n }\n\n spheres.forEach((sphere) => {\n sphere.material.depthTest = false\n five.scene.add(sphere)\n })\n })\n}\n","export const noTypecheck = <T = any>(x: T) => x as any\n","import type { Vector3 } from 'three/webgpu'\nimport { anyPositionToVector3, type AnyPosition } from '../../shared-utils/positionToVector3'\n\nexport function planeNormal(points: [AnyPosition, AnyPosition, AnyPosition] | [AnyPosition, AnyPosition, AnyPosition, AnyPosition]): Vector3\nexport function planeNormal(points: AnyPosition[]): Vector3 | void\nexport function planeNormal(points: AnyPosition[]) {\n if (!points) return\n if (points.length < 3) return\n const vector3Points = points.map(anyPositionToVector3) as [Vector3, Vector3, Vector3]\n const vector01 = vector3Points[1].clone().sub(vector3Points[0]) // 点0 -> 点1 的向量\n const vector12 = vector3Points[2].clone().sub(vector3Points[1]) // 点1 -> 点2 的向量\n return vector01.cross(vector12)\n}\n","import type { TagContentType, TagInstance } from '../../typings'\nimport type { ModelTagInterface } from '../../controller/Tag/ModelTag'\nimport type { PlaneTagInterface } from '../../controller/Tag/PlaneTag'\nimport type { PolygonTagInterface } from '../../controller/Tag/PolygonTag'\nimport type { BoxTagInterface } from '../../controller/Tag/BoxTag'\nimport type { MaskTagInterface } from '../../controller/Tag/MaskTag'\n\nexport function isPlaneTag<T extends TagContentType>(tag: TagInstance<T>): tag is PlaneTagInterface<T> {\n return tag.stickType === 'Plane'\n}\n\nexport function isPoint3DTag<T extends TagContentType>(tag: TagInstance<T>): tag is TagInstance<T, '3DPoint'> {\n return tag.stickType === '3DPoint'\n}\n\nexport function is3DTag<T extends TagContentType>(tag: TagInstance): tag is TagInstance<T, '3DPoint'> | TagInstance<T, 'Plane'> {\n return tag.stickType === '3DPoint' || tag.stickType === 'Plane'\n}\n\nexport function isMediaModelTag(tag: TagInstance): tag is ModelTagInterface<'MediaModel'> {\n return tag.stickType === 'Model' && tag.contentType === 'MediaModel'\n}\n\nexport function isModelTag(tag: TagInstance): tag is ModelTagInterface<'Model'> {\n return tag.stickType === 'Model' && tag.contentType === 'Model'\n}\n\n/** 虚拟模型标签(空间三维对象,渲染同纯模型) */\nexport function isVirtualObjectTag(tag: TagInstance): tag is ModelTagInterface<'VirtualObject'> {\n return tag.stickType === 'Model' && tag.contentType === 'VirtualObject'\n}\n\n/** 可自动转向用户的模型标签:纯模型(Model) 或 虚拟模型(VirtualObject) */\nexport function isAutoLookAtModelTag(tag: TagInstance): tag is ModelTagInterface<'Model'> | ModelTagInterface<'VirtualObject'> {\n return isModelTag(tag) || isVirtualObjectTag(tag)\n}\n\nexport function isMediaPlaneTag(tag: TagInstance): tag is PlaneTagInterface<'MediaModel'> {\n return tag.stickType === 'Plane' && tag.contentType === 'MediaPlane'\n}\nexport function isPolygonTag(tag: TagInstance): tag is PolygonTagInterface {\n return tag.stickType === 'Polygon'\n}\nexport function is3DBoxTag(tag: TagInstance): tag is BoxTagInterface {\n return tag.stickType === '3DBox'\n}\nexport function isMaskTag(tag: TagInstance): tag is MaskTagInterface {\n return tag.stickType === 'Mask'\n}\n","import type { Vector3 } from 'three/webgpu'\nimport { Matrix4, Vector3 as ThreeVector3, Euler } from 'three/webgpu'\nimport { centerPoint } from '../../shared-utils/three/centerPoint'\nimport { is3DBoxTag, isMediaModelTag, isPolygonTag, isMaskTag } from './tag/tagCheck'\nimport { anyPositionToVector3, vector3Position } from '../../shared-utils/positionToVector3'\nimport type { TagInstance, BoxPosition } from '../typings'\nimport { transformPosition } from '../../shared-utils/five/transformPosition'\n\n/**\n * 计算 BoxPosition 的8个角点\n */\nexport function getBoxCorners(boxPosition: BoxPosition, transform: Matrix4): Vector3[] {\n const start = anyPositionToVector3(boxPosition.start)\n const end = anyPositionToVector3(boxPosition.end)\n const rotation = new Euler().fromArray(boxPosition.rotation as [number, number, number])\n\n const center = transformPosition(new ThreeVector3((start.x + end.x) / 2, (start.y + end.y) / 2, (start.z + end.z) / 2), transform)\n const halfSize = new ThreeVector3(Math.abs(end.x - start.x) / 2, Math.abs(end.y - start.y) / 2, Math.abs(end.z - start.z) / 2)\n\n // 构建旋转矩阵\n const rotationMatrix = new Matrix4().makeRotationFromEuler(rotation)\n\n // 单位立方体的8个角点(未缩放、未旋转、未平移)\n const unitCorners = [\n // 底面4个点 (y = -0.5)\n new ThreeVector3(-0.5, -0.5, -0.5),\n new ThreeVector3(0.5, -0.5, -0.5),\n new ThreeVector3(0.5, -0.5, 0.5),\n new ThreeVector3(-0.5, -0.5, 0.5),\n // 顶面4个点 (y = 0.5)\n new ThreeVector3(-0.5, 0.5, -0.5),\n new ThreeVector3(0.5, 0.5, -0.5),\n new ThreeVector3(0.5, 0.5, 0.5),\n new ThreeVector3(-0.5, 0.5, 0.5),\n ]\n\n // 缩放并应用旋转和平移\n const size = halfSize.clone().multiplyScalar(2)\n const corners = unitCorners.map((corner) => {\n return corner.clone().multiply(size).applyMatrix4(rotationMatrix).add(center)\n })\n\n return corners\n}\n\n/**\n * 应用 matrix 变换到点数组\n */\nexport function applyMatrixToPoints(points: Vector3[], matrix?: number[]): Vector3[] {\n if (!matrix) return points\n\n const matrix4 = new Matrix4().fromArray(matrix)\n return points.map((point) => point.clone().applyMatrix4(matrix4))\n}\n\nexport function getTagPosition(tag: TagInstance): Vector3 | [Vector3, Vector3, Vector3, Vector3] | Vector3[] {\n const position = (() => {\n // 3DBox: 返回8个角点\n if (is3DBoxTag(tag) && tag.position) {\n const corners = getBoxCorners(tag.position as BoxPosition, tag.plugin?.workUtil?.transform)\n return applyMatrixToPoints(corners, tag.matrix)\n }\n\n // Polygon: 返回所有顶点\n if (isPolygonTag(tag) && tag.position) {\n const points = tag.position.map((p) => anyPositionToVector3(p))\n return applyMatrixToPoints(points, tag.matrix)\n }\n\n // MediaModel: 使用 mediaPosition\n if (isMediaModelTag(tag) && tag.matrix) {\n const points = tag.data.mediaPosition.map((p) => anyPositionToVector3(p))\n return applyMatrixToPoints(points, tag.matrix)\n }\n\n // Mask: 直接使用 position 字段(创建标签时已提供)\n if (isMaskTag(tag)) {\n if (tag.position && Array.isArray(tag.position)) {\n return anyPositionToVector3(tag.position)\n }\n // 如果没有 position,返回原点(这种情况不应该发生)\n console.warn('[getTagPosition] Mask tag without position, tag id:', tag.id)\n return new ThreeVector3(0, 0, 0)\n }\n\n // 其他类型: 直接返回 position\n return tag.position as Exclude<TagInstance['position'], BoxPosition>\n })()\n\n return vector3Position(position) as Vector3 | [Vector3, Vector3, Vector3, Vector3]\n}\n\nexport function getTagCenterPosition(tag: TagInstance) {\n const tagPosition = getTagPosition(tag)\n return centerPoint(...(Array.isArray(tagPosition) ? tagPosition : [tagPosition]))\n}\n","export function checkRange(value?: number, range?: { min?: number; max?: number }) {\n if (value === undefined) return\n const { min, max } = range ?? {}\n if (min === undefined && max === undefined) return\n if (typeof max === 'number' && max < value) return false\n if (typeof min === 'number' && min > value) return false\n return true\n}\n","import type { Vector3 } from 'three/webgpu'\nimport * as THREE from 'three/webgpu'\n\nexport function normalPositionToPositions(cameraPosition: Vector3, position: Vector3, normal: Vector3) {\n const squareHalfSize = 0.01\n const plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, position)\n const right = position.clone().sub(cameraPosition).cross(new THREE.Vector3(0, 1, 0)).setLength(squareHalfSize)\n const top = new THREE.Vector3(0, squareHalfSize, 0)\n const positions = [\n position.clone().sub(right).sub(top), // 左下\n position.clone().add(right).sub(top), // 右下\n position.clone().add(right).add(top), // 右上\n position.clone().sub(right).add(top), // 左上\n ].map((v) => plane.projectPoint(v, new THREE.Vector3())) as [Vector3, Vector3, Vector3, Vector3]\n\n return positions\n}\n","/**\n * 函数防抖:指触发事件后,在 `n` 秒内函数只能执行一次,如果触发事件后在 `n` 秒内又触发了事件,则会重新计算函数延执行时间。\n * @param callback 回调函数\n * @param waitFor 等待时间\n * @returns\n */\nexport const debounce = <F extends (...args: any) => any>(\n callback: F,\n waitFor = 1000 / 60,\n): ((...args: Parameters<F>) => ReturnType<F>) => {\n let timer: number | NodeJS.Timeout | null = null\n const savedFunc = callback\n\n const fn = (...args: any) => {\n if (timer) clearTimeout(timer)\n timer = setTimeout(() => {\n savedFunc?.(...args)\n if (timer) clearTimeout(timer)\n timer = null\n }, waitFor)\n }\n return fn as (...args: Parameters<F>) => ReturnType<F>\n}\n\nconst debounceMap = new Map<string, { debounceFn: Function; originalCallback: Function }>()\n\nexport const debounceByKey = <F extends (...args: any) => any>(\n key: string,\n callback: F,\n waitFor = 1000 / 60,\n): ((...args: Parameters<F>) => ReturnType<F>) => {\n if (debounceMap.has(key) && debounceMap.get(key).originalCallback === callback) {\n return debounceMap.get(key).debounceFn as (...args: Parameters<F>) => ReturnType<F>\n }\n const fn = debounce(callback, waitFor)\n debounceMap.set(key, {\n debounceFn: fn,\n originalCallback: callback,\n })\n return fn\n}\n","/**\n * 创建一个防抖动函数,该函数在高频调用时会每隔 wait 毫秒后调用 func 方法\n * `throttle` 会在第一次调用时立刻调用一次\n * @param func - 要防抖动的函数\n * @param wait - 需要延迟的毫秒数\n */\nexport function throttle<T>(func: (...args: T[]) => void, wait = 200) {\n let last: NodeJS.Timeout | null\n return function (this: any, ...args: T[]) {\n if (last) return\n func.apply(this, args)\n last = setTimeout(function () {\n last = null\n }, wait)\n }\n}\n","/**\n * 二分查找,查找第一个大于等于给定值的元素\n * 数组必须有序,存在重复\n * @param {array} arr 待排序数组\n * @param {number} target 目标数据\n */\nexport function binarySearchFirstBig(getValueByIndex: (index: number) => number, indexRange: [number, number], target: number) {\n const [min, max] = indexRange\n if (min >= max) return -1\n if (max <= 1) return -1\n // 低位下标\n let lowIndex = min\n // 高位下标\n let highIndex = max\n\n const cache: Record<number, number> = {}\n\n const getValue = (key: number) => {\n if (!cache[key]) cache[key] = getValueByIndex(key)\n return cache[key]!\n }\n\n while (lowIndex <= highIndex) {\n // 中间下标\n const midIndex = Math.floor((lowIndex + highIndex) / 2)\n if (getValue(midIndex) > target) {\n // 如果 midIndex 为0或者前一个数小于 target 那么找到第一个大于等于给定值的元素,直接返回\n if (midIndex === min || getValue(midIndex - 1)! <= target) return midIndex\n // 否则高位下标为中位下标减1\n highIndex = midIndex - 1\n } else {\n // 低位下标为中位下标加1\n lowIndex = midIndex + 1\n }\n }\n return -1\n}\n\n/**\n * @description 查找第一个小于前一个数字的值\n */\nexport function searchFirstValueSmallThanLastValue(getValueByIndex: (index: number) => number, indexRange: [number, number]) {\n const [min, max] = indexRange\n if (min >= max) return -1\n if (max <= 1) return -1\n if (min <= 1) return -1\n const cache: Record<number, number> = {}\n\n const getValue = (key: number) => {\n if (!cache[key]) cache[key] = getValueByIndex(key)\n return cache[key]!\n }\n\n for (let index = min; index < max; index++) {\n const value = getValue(index)\n const lastValue = getValue(index - 1)\n if (value < lastValue) {\n return index\n }\n }\n return -1\n}\n","/**\n * 视频URL处理辅助函数\n * 用于处理YouTube和Vimeo视频URL的解析和格式化\n */\n\n/**\n * 从YouTube URL中提取视频ID\n * @param url YouTube视频URL\n * @returns 视频ID或null(如果不是有效的YouTube URL)\n */\nexport function getYouTubeId(url: string) {\n // 如果URL为空,直接返回null\n if (!url) return null;\n \n // 尝试使用URL对象解析(现代浏览器支持的方式)\n try {\n // 1. 处理youtu.be短链接\n if (url.includes('youtu.be')) {\n const urlObj = new URL(url);\n // 提取路径中的ID,去掉开头的斜杠\n return urlObj.pathname.substring(1);\n }\n \n // 2. 处理youtube.com标准链接\n if (url.includes('youtube.com')) {\n const urlObj = new URL(url);\n \n // 2.1 常规watch链接,使用v参数\n const urlParams = new URLSearchParams(urlObj.search);\n const vParam = urlParams.get('v');\n if (vParam) return vParam;\n \n // 2.2 处理embed链接\n if (urlObj.pathname.includes('/embed/')) {\n return urlObj.pathname.split('/embed/')[1];\n }\n \n // 2.3 处理shorts链接\n if (urlObj.pathname.includes('/shorts/')) {\n return urlObj.pathname.split('/shorts/')[1];\n }\n \n // 2.4 处理直播链接\n if (urlObj.pathname.includes('/live/')) {\n return urlObj.pathname.split('/live/')[1];\n }\n }\n } catch (e) {\n // URL解析失败,使用后备方案\n }\n \n // 后备方案:使用正则表达式(兼容旧版浏览器和各种URL格式)\n // 这个正则表达式涵盖了几乎所有YouTube URL格式:标准、嵌入、短链接、shorts、直播等\n const regex = /^.*(?:(?:youtu\\.be\\/|v\\/|vi\\/|u\\/\\w\\/|embed\\/|shorts\\/|live\\/)|(?:(?:watch)?\\?v(?:i)?=|\\&v(?:i)?=))([^#\\&\\?]*).*/;\n const match = url.match(regex);\n return match && match[1] ? match[1] : null;\n}\n\n/**\n * 从Vimeo URL中提取视频ID\n * @param url Vimeo视频URL\n * @returns 视频ID或null(如果不是有效的Vimeo URL)\n */\nexport function getVimeoId(url: string) {\n if (!url) return null;\n \n // 尝试使用URL对象解析\n try {\n if (url.includes('vimeo.com')) {\n const urlObj = new URL(url);\n // Vimeo ID在路径名中,通常是数字\n const pathParts = urlObj.pathname.split('/').filter(Boolean);\n if (pathParts.length > 0) {\n const potentialId = pathParts[0];\n // Vimeo ID都是数字,且通常至少5位\n if (/^\\d+$/.test(potentialId) && potentialId.length >= 5) {\n return potentialId;\n }\n }\n }\n } catch (e) {\n // URL解析失败,使用后备方案\n }\n \n // 后备方案:使用正则表达式\n const regExp = /^.*vimeo\\.com\\/[A-Za-z\\/]*(\\d+)/;\n const match = url.match(regExp);\n return match && match[1] && match[1].length >= 5 ? match[1] : null;\n}\n\n/**\n * 判断URL是否为YouTube视频链接\n * @param url 要检查的URL\n * @returns 是否为YouTube链接\n */\nexport function isYouTube(url: string) {\n if (!url) return false;\n const pattern = /^(http(s)?:\\/\\/)?((w){3}.)?youtu(be|.be)?(\\.com)?\\/.+/;\n return pattern.test(url);\n}\n\n/**\n * 判断URL是否为Vimeo视频链接\n * @param url 要检查的URL\n * @returns 是否为Vimeo链接\n */\nexport function isVimeo(url: string) {\n if (!url) return false;\n const pattern = /^(http(s)?:\\/\\/)?((w){3}.)?vimeo\\.com\\/(.+)/;\n return pattern.test(url);\n}\n\n/**\n * 格式化视频URL为嵌入格式\n * @param url 原始视频URL\n * @param config 配置选项,如自动播放、开始时间等\n * @returns 格式化后的嵌入URL\n */\nexport function formatVideo(url: string, config?: { start?: number; autoplay?: 0 | 1 }) {\n if (isYouTube(url)) {\n const videoId = getYouTubeId(url);\n if (!videoId) return '';\n const embedUrl = new URL(`https://www.youtube.com/embed/${videoId}`);\n if (config?.start !== undefined) embedUrl.searchParams.set('start', config.start.toString());\n if (config?.autoplay !== undefined) embedUrl.searchParams.set('autoplay', config.autoplay.toString());\n return embedUrl.toString();\n }\n \n if (isVimeo(url)) {\n const videoId = getVimeoId(url);\n if (!videoId) return '';\n const embedUrl = new URL(`https://player.vimeo.com/video/${videoId}`);\n if (config?.autoplay !== undefined) embedUrl.searchParams.set('autoplay', config.autoplay.toString());\n return embedUrl.toString();\n }\n \n return url;\n}\n\n/**\n * 获取视频缩略图URL\n * @param url 视频URL\n * @param type 视频类型 ('youtube' | 'vimeo')\n * @returns 缩略图URL或null\n */\nexport function getVideoThumbnail(url: string, type?: 'youtube' | 'vimeo') {\n // 自动检测类型(如果未提供)\n if (!type) {\n if (isYouTube(url)) type = 'youtube';\n else if (isVimeo(url)) type = 'vimeo';\n else return null;\n }\n \n if (type === 'youtube') {\n const videoId = getYouTubeId(url);\n if (!videoId) return null;\n return `https://img.youtube.com/vi/${videoId}/hqdefault.jpg`;\n }\n \n if (type === 'vimeo') {\n const videoId = getVimeoId(url);\n if (!videoId) return null;\n return `https://vumbnail.com/${videoId}.jpg`;\n }\n \n return null;\n} ","import type { StickType, Tag } from '../../typings'\nimport { PANO_TAG_DEFAULT_LINK_ICON } from '../../../shared-utils'\n\nexport function getTagStickType(tag: Tag): StickType {\n if (tag.stickType) return tag.stickType\n return '2DPoint'\n}\n\nexport default function formatTag<T extends Tag>(tag: T): tag is T & { stickType: StickType } {\n if (!tag.stickType) {\n tag.stickType = getTagStickType(tag)\n }\n if (tag.contentType === 'VRLink' || tag.contentType === 'PanoLink' || tag.contentType === 'Link') {\n const linkTag = tag as Tag<'Link'>\n if (!linkTag.data?.icon?.url && !linkTag.style?.point?.url) {\n linkTag.data.icon = {\n url: PANO_TAG_DEFAULT_LINK_ICON,\n }\n }\n }\n\n return tag as any\n}\n","const BlankAudioSrc =\n 'data:audio/mpeg;base64,//uQxAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAADAAAGhgBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr///////////////////////////////////////////8AAAA5TEFNRTMuOThyAc0AAAAAAAAAABSAJAiqQgAAgAAABobxtI73AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//uQxAACFEII9ACZ/sJZwWEoEb8w/////N//////JcxjHjf+7/v/H2PzCCFAiDtGeyBCIx7bJJ1mmEEMy6g8mm2c8nrGABB4h2Mkmn//4z/73u773R5qHHu/j/w7Kxkzh5lWRWdsifCkNAnY9Zc1HvDAhjhSHdFkHFzLmabt/AQxSg2wwzLhHIJOBnAWwVY4zrhIYhhc2kvhYDfQ4hDi2Gmh5KyFn8EcGIrHAngNgIwVIEMf5bzbAiTRoAD///8z/KVhkkWEle6IX+d/z4fvH3BShK1e5kmjkCMoxVmXhd4ROlTKo3iipasvTilY21q19ta30/v/0/idPX1v8PNxJL6ramnOVsdvMv2akO0iSYIzdJFirtzWXCZicS9vHqvSKyqm5XJBdqBwPxyfJdykhWTZ0G0ZyTZGpLKxsNwwoRhsx3tZfhwmeOBVISm3impAC/IT/8hP/EKEM1KMdVdVKM2rHV4x7HVXZvbVVKN/qq8CiV9VL9jjH/6l6qf7MBCjZmOqsAibjcP+qqqv0oxqpa/NVW286hPo1nz2L/h8+jXt//uSxCmDU2IK/ECN98KKtE5IYzNoCfbw+u9i5r8PoadUMFPKqWL4LK3T/LCraMSHGkW4bpLXR/E6LlHOVQxmslKVJ8IULktMN06N0FKCpHCoYsjC4F+Z0NVqdNFoGSTjSiyjzLdnZ2fNqTi2eHKONONKLMPMKLONKLMPQRJGlFxZRoKcJFAYEeIFiRQkUWUeYfef//Ko04soswso40UJAgMw8wosososy0EalnZyjQUGBRQGIFggOWUacWUeYmuadrZziQKKEgQsQLAhQkUJAgMQDghltLO1onp0cpkNInSFMqlYeSEJ5AHsqFdOwy1DA2sRmRJKxdKRfLhfLw5BzUxBTUUzLjk4LjJVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjk4LjJVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7ksRRA8AAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU='\n\nexport const audioCache: Record<string, IAudio[]> = {}\n\nexport enum AudioNamespace {\n Default = 'default',\n GetAudioDuration = 'getAudioDuration',\n PlayAudio = 'playAudio',\n}\n\nexport function getAudio(src?: string, params?: { namespace?: string }) {\n const namespace = params?.namespace || AudioNamespace.Default\n const audioList = audioCache[namespace] || (audioCache[namespace] = [])\n let audio = audioList.find((audio) => {\n return !audio.realSrc || audio.realSrc === BlankAudioSrc\n })\n if (!audio) {\n console.warn('未找到缓存音频,已新建', audioCache)\n audio = new IAudio(BlankAudioSrc)\n audioList.push(audio)\n }\n if (src) {\n audio.src = src\n }\n return audio\n}\n\nexport async function getAudioDuration(audio?: string | IAudio): Promise<number> {\n const audioInstance = (() => {\n if (audio instanceof IAudio) return audio\n else return getAudio(audio, { namespace: AudioNamespace.GetAudioDuration })\n })()\n const duration = await new Promise<number>((resolve) => {\n if (audioInstance.duration) {\n if (audioInstance.isBlankAudio) resolve(0)\n else resolve(audioInstance.duration)\n } else {\n audioInstance.addEventListener('loadedmetadata', () => {\n if (audioInstance.isBlankAudio) resolve(0)\n else resolve(audioInstance.duration)\n })\n audioInstance.addEventListener('canplaythrough', () => {\n if (audioInstance.isBlankAudio) resolve(0)\n else resolve(audioInstance.duration)\n })\n }\n })\n\n if (typeof audio === 'string') audioInstance.clear()\n return duration\n}\n\nexport async function waitForBlankAudioGenerated(checkInterval = 100, timeout = 2000, params?: { namespace?: string }) {\n const namespace = params?.namespace || AudioNamespace.Default\n const audioList = audioCache[namespace] || (audioCache[namespace] = [])\n // while any audioList not ended\n const startTime = Date.now()\n let isTimedOut = false\n while (audioList.some((audio) => !audio.ended && audio.src === BlankAudioSrc) && !isTimedOut) {\n if (Date.now() - startTime > timeout) {\n isTimedOut = true\n return Promise.resolve()\n }\n await new Promise((resolve) => {\n setTimeout(resolve, checkInterval)\n })\n }\n}\n\n/**\n * @description: 生成空音频\n */\nexport function generateBlankAudio(length: number, params?: { namespace?: string }) {\n const namespace = params?.namespace || 'default'\n const audioList = audioCache[namespace] || (audioCache[namespace] = [])\n // 判断一下已经生成几个了,防止重复生成\n const generateLength = length - audioList.length\n if (generateLength <= 0) return\n for (let i = 0; i < generateLength; i++) {\n audioList.push(new IAudio(BlankAudioSrc))\n }\n}\n\nexport class IAudio extends (() => {\n // SSR\n if (typeof Audio === 'undefined') {\n return class {} as new (src?: string) => HTMLAudioElement\n } else {\n return Audio\n }\n})() {\n public preload = 'auto' as const\n public crossOrigin = 'anonymous' as const\n\n public get isBlankAudio() {\n return this.realSrc === BlankAudioSrc || !this.realSrc\n }\n\n public get src() {\n return super.src\n }\n\n public set src(paramsSrc: string) {\n super.muted = true\n this.generation++\n super.src = paramsSrc\n this.realSrc = paramsSrc\n this.removeDocumentEventListener()\n }\n\n public get muted() {\n return super.muted\n }\n\n public set muted(muted: boolean) {\n super.muted = muted\n }\n\n public generation = 0\n\n public realSrc = ''\n\n public inited = false\n\n public removeDocumentEventListener: () => void\n\n public constructor(src?: string) {\n super(src)\n this.realSrc = src ?? ''\n this.muted = true\n super.autoplay = true\n\n super.addEventListener('ended', () => {\n if (this.isBlankAudio || !this.ended) return\n const generation = this.generation\n // Let current ended consumers finish before releasing the pool element.\n // A new source or owner makes this completion obsolete.\n setTimeout(() => {\n if (this.generation === generation && this.ended && !this.isBlankAudio) this.clear()\n }, 0)\n })\n\n const init = () => initAudio(this)\n\n document.addEventListener('click', init)\n document.addEventListener('touchend', init)\n this.removeDocumentEventListener = () => {\n document.removeEventListener('click', init)\n document.removeEventListener('touchend', init)\n }\n }\n\n public clear(): void {\n this.muted = true\n this.pause()\n this.currentTime = 0\n this.src = BlankAudioSrc\n }\n}\n\nfunction initAudio(audio: IAudio) {\n if (!audio) return\n if (audio.inited) return\n if (audio.src) {\n audio.inited = true\n audio.removeDocumentEventListener()\n }\n if (audio.src === BlankAudioSrc) {\n audio.play()\n }\n}\n","import type { Entries } from 'type-fest'\n\nexport default function entries<T>(obj: T) {\n return Object.entries(obj) as Entries<T>\n}\n","import type { TagConfig } from '../..'\n\nexport default function adaptConfig(config: TagConfig) {\n if (typeof config.visibleConfig === 'object') {\n if (config.visibleConfig.keep) {\n if (config.visibleConfig.keep === 'visible') {\n config.visibleConfig = { keep: config.visibleConfig.keep, visibleFiveMode: config.visibleConfig?.visibleFiveMode }\n } else if (config.visibleConfig.keep === 'hidden') {\n config.visibleConfig = { keep: config.visibleConfig.keep }\n }\n }\n }\n\n // 兼容\n if (typeof config.unfoldedConfig === 'object') {\n if (config.unfoldedConfig.keep) config.unfoldedConfig = { keep: config.unfoldedConfig.keep }\n }\n\n const initialState = config.initialState ?? {}\n if (typeof config.unfoldedConfig === 'object') {\n if (config.unfoldedConfig.keep === 'unfolded') {\n initialState.unfolded = true\n } else if (config.unfoldedConfig.keep === 'folded') {\n initialState.unfolded = false\n }\n }\n if (typeof config.visibleConfig === 'object') {\n if (config.visibleConfig.keep === 'visible') {\n initialState.visible = true\n } else if (config.visibleConfig.keep === 'hidden') {\n initialState.visible = false\n }\n }\n\n config.initialState = initialState\n\n return config\n}\n","import type { Create3DDomContainerParamsType } from '../../../CSS3DRenderPlugin/Controller'\nimport type { Five, Mode } from '@realsee/five-webgpu'\nimport type { ContentTypeMap, TagContentType } from './TagData'\nimport type { MinMax } from './Utils'\nimport type { PartialObjectDeep } from '../../../typings/typings'\nimport type { Vector3 } from 'three/webgpu'\nimport type { TagInstance } from '../..'\n\ntype TagVisibleMode = Mode | Mode[] | 'PanoramaLike' | 'ModelLike' | 'all'\n\n/**\n * @description 标签悬停时popover的位置\n * @default 'auto'\n * top 是标签上方,bottom 是标签下方,left 是标签左侧,right 是标签右侧\n * top-left 是标签上方,Popover的左边界与标签的左边界对齐\n * top-right 是标签上方,Popover的右边界与标签的右边界对齐\n * bottom-left 是标签下方,Popover的左边界与标签的左边界对齐\n * bottom-right 是标签下方,Popover的右边界与标签的右边界对齐\n * left-top 是标签左侧,Popover的上边界与标签的上边界对齐\n * left-bottom 是标签左侧,Popover的下边界与标签的下边界对齐\n * right-top 是标签右侧,Popover的上边界与标签的上边界对齐\n * right-bottom 是标签右侧,Popover的下边界与标签的下边界对齐\n * auto 是根据标签位置自动计算\n */\nexport type TagPlacement =\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n | 'left-top'\n | 'left-bottom'\n | 'right-top'\n | 'right-bottom'\n | 'auto'\n\nexport interface TagConfig<C extends TagContentType = TagContentType> {\n /**\n * @description 显示/隐藏相关配置\n */\n visibleConfig?:\n | {\n /**\n * @description 在 `visibleFiveMode` 指定的 `mode` 中,保持可见/不可见。设置后 `visibleConfig` 中除了 `visibleFiveMode` 外的所有其他配置都不生效\n * @default null\n * @example\n * ```typescript\n * // 在 Panorama 和 Floorplan 模式下永远保持可见\n * const config = {\n * keep: 'visible',\n * visibleFiveMode: ['Panorama', 'Floorplan'],\n * }\n * // 在 tag.fiveState.mode 中时,永远保持可见\n * const config = {\n * keep: 'visible',\n * }\n * ```\n */\n keep?: 'visible' | 'hidden' | null\n /**\n * @description 在哪些 `five mode` 下可见\n * @tips 默认值的设定是在 config 合并后,而不是合并前\n * @default\n * ```\n * 普通全景模式:['Panorama']\n * ```\n * @example\n * ```typescript\n * const tag = {\n * ...\n * fiveState: {\n * mode: 'Floorplan',\n * }\n * ...\n * config: {},\n * }\n * // 相当于\n * const tag = {\n * ...\n * fiveState: {\n * mode: 'Floorplan',\n * }\n * ...\n * config: {\n * visibleFiveMode: 'Floorplan',\n * },\n * }\n * ```\n */\n visibleFiveMode?: TagVisibleMode | ((tag: TagInstance) => TagVisibleMode)\n /**\n * @description 全景标签在模型中可见,点击后进入全景看向标签\n * @default false\n */\n entryFromModel?: boolean\n /**\n * @description 当 visibleFiveMode 包含 'Floorplan' 或者 'MapView' 时,是否仅在当前楼层模型下可见\n * @default false\n */\n followModelVisibility?: boolean\n /** @deprecated 所有标签走点时都不统一隐藏;保留旧配置兼容,仍按可见性规则计算。 */\n alwaysShowWhenMovePano?: boolean\n /**\n * @description 配置可见距离\n * @fivemode 只在全景模式下生效\n * @default 'unLimited'\n */\n visibleDistance?: MinMax | 'unLimited'\n /**\n * @description 配置标签可见点位\n * @fivemode 只在全景模式下生效\n * @param all 不限制\n * @param current 仅当前点位可见\n * @param number[] 仅指定点位可见\n * @default 'all'\n */\n visiblePanoIndex?: 'all' | 'current' | number[]\n /**\n * @description 碰撞检测配置\n * @default true\n */\n intersectRaycaster?:\n | boolean\n | {\n /**\n * @description 是否开启碰撞检测\n * @default true\n */\n enabled?: boolean\n /**\n * @description 碰撞检测的允许误差\n * @default 0.01\n */\n distanceAccuracy?: number\n /**\n * @description 碰撞检测的点\n * @default 'center'\n */\n checkPoints?: 'center' | 'corner' | Vector3[]\n /**\n * @description 碰撞检测策略,多少点通过检测则认为碰撞通过\n * @default 1\n */\n needPassed?: number\n /**\n * @description 模型加载(loaded)完成前,射线打空时是否判为不可见。\n * 开启后可避免「模型未加载好时射线打空被误判为未遮挡 → 标签先全部显示,加载后再逐渐消失」的闪烁。\n * @default false\n */\n hideWhenModelNotLoaded?: boolean\n /**\n * @description 碰撞检测射线的起点策略\n * @param observer 全景态取观察点位置、模型态取相机位置(含眼高,射线是斜的)\n * @param horizontal 与检测点保持水平:y 取检测点高度,x/z 取观察点(或相机)的值。\n * 用于「虚拟屏幕与当前点位的水平连线是否被模型挡住」这类判定,\n * 斜射线可能从矮柜/栏杆上方越过,水平射线才会撞上。\n * 开启 `horizontal` 时,即使当前点位与标签绑定点位相同也会执行碰撞检测(不走跳过分支)。\n * @default 'observer'\n */\n startPointMode?: 'observer' | 'horizontal'\n }\n /**\n * @description 3D标签中 「标签所在平面或垂直于标签法线的平面」 与 「摄像机到标签点或中心点的向量」 的夹角,范围内自动展开,范围外自动收起\n * @fivemode 只在全景模式下生效\n * @default undefined\n */\n angleRange?: MinMax\n }\n | ConfigFunction\n /**\n * @description 展开/收起相关配置\n * @warning 与 popoverConfig 同时使用时,popoverConfig 优先级更高\n */\n unfoldedConfig?:\n | {\n /**\n * @description 保持展开/收起,设置后unfoldedConfig下所有其他配置都不生效\n * @default null\n */\n keep?: 'unfolded' | 'folded' | null\n /**\n * @description 划动到不可见状态时,自动收起,disableFold: true 的标签不受此参数影响\n * @note 部分标签是无法收起的\n * @default true\n */\n autoFoldWhenHide?: false\n /** min-max米内自动展开,否则收起 */\n unfoldDistance?: MinMax\n /**\n * @description 自动展开策略\n *\n * @strategy 'ScreenPostion':根据屏幕位置展开\n * @strategy 'MinimumDistance':最近标签自动展开\n * @strategy 'FoldWhenMove':移动屏幕自动收起\n */\n autoUnfold?:\n | false\n | {\n enable?: boolean\n /** 自动展开 策略 */\n strategy?: 'ScreenPostion'\n /** 自动展开策略,{min,max}为project(camera)后的x值 */\n autoUnfoldProjectX?: MinMax\n }\n | {\n enable?: boolean\n /** 自动展开:最近标签自动展开 */\n strategy?: 'MinimumDistance'\n /**\n * @description 展开的最大数量\n * @default 1\n */\n maxNumber?: number\n /**\n * @description 展开的最大距离\n * @default 无限制\n */\n distance?: MinMax\n }\n | {\n enable?: boolean\n /** 移动屏幕自动收起 */\n strategy?: 'FoldWhenMove'\n }\n | {\n enable?: boolean\n /** 屏幕中心自动展开 */\n strategy?: 'ScreenCenter'\n /** 展开的最大距离 */\n distance?: MinMax\n /** 展开的最大数量 */\n maxNumber?: number\n }\n }\n | ConfigFunction\n /** 初始状态 */\n initialState?: {\n /**\n * @description 展示状态\n */\n visible?: boolean\n /**\n * @description 展开状态\n */\n unfolded?: boolean\n }\n /**\n * @description 标签的默认数据,会将 tag.data 深度合并进来\n * @code `tag.data = ObjectAssignDeep(initialData, tag.data)`\n */\n initialData?: PartialObjectDeep<ContentTypeMap[C]> & {\n /**\n * @description 类似 css 的 !important,会覆盖掉 tag.data 中对应的数据\n * @code\n * ```typescript\n * if (initialData.important) {\n * tag.data = ObjectAssignDeep(tag.data, initialData)\n * } else {\n * tag.data = ObjectAssignDeep(initialData, tag.data)\n * }\n * ```\n */\n important?: boolean\n }\n /**\n * @description 内部使用 css3DRenderer 渲染的标签可以使用此配置来设置 css3DRenderer 相关参数\n */\n tag3DConfig?: Create3DDomContainerParamsType['config']\n modelConfig?: { autoLookAtEnabled?: boolean }\n /**\n * @description 当图片为一张时可以选择通过Mesh渲染\n * @default 'Dom'\n */\n renderType?: 'Mesh' | 'Dom'\n /**\n * @description 是否模拟近大远小的效果\n * @default false\n */\n simulate3D?: boolean\n /**\n * @description 是否可以点击\n * @default true\n */\n clickable?: boolean\n /**\n * @description 标签浮窗相关配置\n * @warning 开启之后 unfoldedConfig 无效\n */\n popoverConfig?: {\n /**\n * @description 是否启用 TagPopover\n * @warning 开启之后 unfoldedConfig 无效\n * @default false\n */\n enabled?: boolean\n\n /**\n * @description 浮层容器的 zIndex,默认 2000000\n */\n zIndex?: number\n\n /**\n * @description 是否开启调试模式,调试模式popover常驻\n * @default false\n */\n debug?: boolean\n\n /**\n * @description 触发方式\n * @description hover - 鼠标悬停触发,移出后面板消失\n * @description click - 点击触发(fold/unfold模式),再次点击隐藏\n * @default 'hover'\n */\n trigger?: 'hover' | 'click'\n\n /**\n * @description 触发延迟时间(仅在 trigger 为 hover 时生效), 单位为毫秒\n * @default 300\n */\n triggerDelay?: number\n\n /**\n * @description popover的位置, 默认根据标签位置自动计算\n * @description top 是标签上方,bottom 是标签下方,left 是标签左侧,right 是标签右侧\n * @description top-left 是标签上方,Popover的左边界与标签的左边界对齐\n * @description top-right 是标签上方,Popover的右边界与标签的右边界对齐\n * @description bottom-left 是标签下方,Popover的左边界与标签的左边界对齐\n * @description bottom-right 是标签下方,Popover的右边界与标签的右边界对齐\n * @description left-top 是标签左侧,Popover的上边界与标签的上边界对齐\n * @description left-bottom 是标签左侧,Popover的下边界与标签的下边界对齐\n * @description right-top 是标签右侧,Popover的上边界与标签的上边界对齐\n * @description right-bottom 是标签右侧,Popover的下边界与标签的下边界对齐\n * @description auto 是根据标签位置自动计算\n * @default 'auto'\n */\n placement?: TagPlacement\n\n /**\n * @description 自动计算位置时,所参考的wrapperElement的区域分割\n * @default {\n * top: 0.2,\n * bottom: 0.2,\n * right: 0.15,\n * }\n */\n autoPlacementBaseSpace?: {\n top?: number\n bottom?: number\n right?: number\n }\n\n /**\n * @description 过渡动画的持续时间, 单位为毫秒\n * @default 100\n */\n transitionDuration?: number\n\n /**\n * @description 主题,可选值为 'dark' | 'light'\n * @default 'dark'\n */\n theme?: 'dark' | 'light'\n\n /**\n * @description 工具栏配置\n */\n toolbar?: {\n showMore?: boolean\n showShare?: boolean\n }\n\n /**\n * @description 图片URL转换函数\n */\n imageURLTransform?: (url: string, options: { width: number; height: number }) => string\n\n /**\n * @description 查看更多按钮的文本\n * @default '查看更多'\n */\n viewMoreText?: string\n\n /**\n * @description 营销标签展开卡片中是否展示媒体区域(需同时提供 data.mediaData,与 popoverConfig.enabled 无关)\n * @default false\n */\n showMedia?: boolean\n\n /**\n * @description 鼠标悬停前的拦截函数,返回 true 允许 hover,false 阻止 hover\n */\n beforeOpen?: (tag?: TagInstance) => boolean | undefined\n\n /**\n * @description 鼠标离开标签区域后的回调(在 hover 结束时触发,无论 beforeOpen 是否拦截过本次 hover)\n * @param tag 当前标签实例\n * @param event 原生 PointerEvent,可通过 event.pointerType 区分 'mouse' / 'touch' / 'pen'\n */\n onHoverEnd?: (tag?: TagInstance, event?: PointerEvent) => void\n }\n /**\n * @description 标签法线相关配置\n */\n tagNormalLineConfig?: {\n /**\n * @description 是否启用标签法线\n * @default true\n */\n enabled?: boolean\n /**\n * @description 标签法线宽度\n * @default 1.2\n */\n lineWidth?: number\n }\n /**\n * @description Polygon mesh 渲染相关配置\n * @experimental 此配置为实验性 API,后续可能调整\n */\n __experimental_PolygonMeshConfig?: {\n /**\n * @description 是否启用默认的 Polygon mesh 渲染。设为 false 可禁用插件内置的多边形面渲染,\n * 适用于业务侧自定义 Polygon mesh 渲染的场景。\n * @default true\n */\n enabled?: boolean\n }\n}\n\nexport const defaultGlobalConfig: TagConfig = {\n visibleConfig: {\n intersectRaycaster: {\n enabled: true,\n distanceAccuracy: 0.04,\n checkPoints: 'corner',\n needPassed: 1,\n },\n },\n clickable: true,\n simulate3D: false,\n renderType: 'Dom',\n}\n\ntype ConfigFunction = (\n five: Five,\n tagState: {\n tag: TagInstance\n /** 标签点或中心点的到摄像机的距离 */\n distance: number\n /** 3D标签中 「标签所在平面或垂直于标签法线的平面」 与 「摄像机到标签点或中心点的向量」 的夹角 */\n angleRange?: number\n },\n) => boolean\n","import objectAssignDeep from 'object-assign-deep'\nimport entries from '../../../shared-utils/typescript/entries'\nimport adaptConfig from './adaptConfig'\nimport {\n type Tag,\n type Tags,\n type TagInstance,\n type TagConfig,\n defaultGlobalConfig,\n type ContentTypeConfigKey,\n type ContentTypeConfigKeySplit,\n} from '../../typings'\nimport { Five, type Mode } from '@realsee/five-webgpu'\nimport { isModelLike, isPanoramaLike } from '../../../shared-utils'\n\nconst normalizedConfigs = new WeakSet<object>()\n\n/**\n * @description 获取merge后的配置\n */\nexport function calculateTagConfig(\n tag: Tag,\n baseConfig: Pick<Tags, 'globalConfig' | 'contentTypeConfig'>,\n params?: { useCache?: boolean },\n): TagInstance['computedConfig'] {\n const useCache = params?.useCache ?? true\n\n if (!tag) return baseConfig.globalConfig ?? {}\n\n // 走缓存的情况\n if (useCache) {\n if ((tag as any)?.computedConfig && normalizedConfigs.has((tag as any).computedConfig)) return (tag as any).computedConfig as any\n if (tag?.config && normalizedConfigs.has(tag.config)) return tag.config\n }\n\n // 没缓存的情况\n const objWithoutMode: Tags['contentTypeConfig'] = {}\n const objWithModeLike: {\n [key in 'PanoramaLike' | 'ModelLike']?: Tags['contentTypeConfig']\n } = {}\n const objWithMode: {\n [key in Mode]?: Tags['contentTypeConfig']\n } = {}\n\n if (baseConfig.contentTypeConfig) {\n\n Object.entries(baseConfig.contentTypeConfig).forEach(([_key, config]) => {\n const key = _key as ContentTypeConfigKey\n const keys = key.split('-')\n\n const configIsWithMode = _key.startsWith('[')\n const fiveModeInConfig = configIsWithMode ? keys[0].slice(1, -1) : undefined\n const keysWithOutFiveMode = (configIsWithMode ? keys.slice(1) : keys) as ContentTypeConfigKeySplit\n\n const obj = fiveModeInConfig\n ? ['PanoramaLike', 'ModelLike'].includes(fiveModeInConfig)\n ? objWithModeLike[fiveModeInConfig] ?? (objWithModeLike[fiveModeInConfig] = {})\n : objWithMode[fiveModeInConfig] ?? (objWithMode[fiveModeInConfig] = {})\n : objWithoutMode\n\n if (obj[key]) return\n\n if (keysWithOutFiveMode.length === 0) {\n obj[key] = config\n }\n\n // 匹配一个长度的\n if (keysWithOutFiveMode.length === 1) {\n const [contentType] = keysWithOutFiveMode\n if (tag.contentType === contentType || contentType === 'Any') {\n obj[key] = config as any\n }\n }\n\n // 匹配两个长度的\n if (keysWithOutFiveMode.length === 2) {\n const [stickType = 'Any', contentType = 'Any'] = keysWithOutFiveMode as any\n if (\n (tag.stickType === stickType || stickType === 'Any') &&\n (tag.contentType === contentType || contentType === 'Any')\n ) {\n obj[key] = config as any\n }\n }\n\n // 匹配三个长度的\n if (keysWithOutFiveMode.length === 3) {\n const [stickType = 'Any', contentType, appearance] = keysWithOutFiveMode\n if (contentType === 'Audio' && tag.contentType === 'Audio') {\n const audioTag = tag as Tag<'Audio'>\n if ((audioTag.stickType === stickType || stickType === 'Any') && audioTag.data.appearance === appearance) {\n obj[key] = config as any\n }\n }\n }\n })\n }\n\n // 写在tag内的config,优先级最高\n const configInTag = 'initialConfig' in tag ? (tag as TagInstance).initialConfig : tag.config ?? {}\n\n //\n const sharedConfig: TagConfig = objectAssignDeep({}, defaultGlobalConfig, baseConfig.globalConfig, ...Object.values(objWithoutMode))\n\n // 普通 config\n const configWithoutFiveMode = objectAssignDeep({}, sharedConfig, configInTag)\n\n // Five Mode config\n const configWithFiveMode: {\n [key in Mode]?: TagConfig\n } = {}\n\n const fiveModeList = Object.values(Five.Mode)\n\n entries(objWithModeLike).forEach(([modeLike, config]) => {\n fiveModeList.forEach((mode) => {\n if ((modeLike === 'PanoramaLike' && isPanoramaLike(mode)) || (modeLike === 'ModelLike' && isModelLike(mode))) {\n configWithFiveMode[mode] = objectAssignDeep({}, sharedConfig, ...Object.values(config), configInTag)\n }\n })\n })\n\n entries(objWithMode).forEach(([mode, config]) => {\n const temp = configWithFiveMode[mode]\n configWithFiveMode[mode] = objectAssignDeep({}, sharedConfig, temp, ...Object.values(config), configInTag)\n })\n\n // 最终结果\n const config = { ...configWithoutFiveMode, configWithFiveMode }\n\n // 兼容\n adaptConfig(config)\n Object.values(configWithFiveMode).forEach((config) => adaptConfig(config))\n\n normalizedConfigs.add(config)\n Object.values(configWithFiveMode).forEach((config) => normalizedConfigs.add(config))\n\n return config\n}\n","import type { Tags } from './typings'\n\nconst DefaultConfig: {\n globalConfig?: Tags['globalConfig']\n contentTypeConfig?: Tags['contentTypeConfig']\n} = {\n globalConfig: {\n visibleConfig: {\n followModelVisibility: true,\n },\n unfoldedConfig: {\n autoUnfold: {\n enable: true,\n strategy: 'MinimumDistance',\n distance: { max: 5 },\n },\n },\n tag3DConfig: {\n ratio: 0.0035,\n },\n popoverConfig: {\n enabled: false,\n // debug: true,\n trigger: 'hover',\n triggerDelay: 500,\n placement: 'auto',\n autoPlacementBaseSpace: {\n top: 0.2,\n right: 0.15,\n bottom: 0.2,\n },\n transitionDuration: 100,\n // theme: 'light',\n toolbar: {\n showMore: true,\n showShare: true,\n },\n viewMoreText: '查看更多',\n showMedia: false,\n },\n tagNormalLineConfig: {\n enabled: true,\n lineWidth: 1.2\n }\n },\n contentTypeConfig: {\n '[Mapview]': {\n unfoldedConfig: {\n autoUnfold: {\n enable: false,\n distance: { max: 9999 },\n },\n },\n },\n '[Floorplan]': {\n unfoldedConfig: {\n autoUnfold: {\n enable: false,\n distance: { max: 9999 },\n },\n },\n },\n 'Any-Audio-plane': {\n unfoldedConfig: {\n keep: 'unfolded',\n },\n },\n Link: {\n unfoldedConfig: {\n // VR 跳转标签没有收起状态\n keep: 'unfolded',\n },\n },\n Panorama: {\n unfoldedConfig: {\n // VR 跳转标签没有收起状态\n keep: 'unfolded',\n },\n },\n VRLink: {\n unfoldedConfig: {\n // VR 跳转标签没有收起状态\n keep: 'unfolded',\n },\n },\n PanoLink: {\n unfoldedConfig: {\n // VR 跳转标签没有收起状态\n keep: 'unfolded',\n },\n },\n MediaPlane: {\n unfoldedConfig: {\n keep: 'unfolded',\n },\n initialData: {\n autoplayConfig: {\n autoplayCarousel: true,\n autoplayVideo: false,\n autoplayVideoInCarousel: false,\n },\n },\n },\n 'Model-Any': {\n unfoldedConfig: {\n keep: 'unfolded',\n },\n visibleConfig: {\n visibleFiveMode: 'all',\n },\n },\n Marketing: {\n popoverConfig: {\n enabled: false,\n },\n },\n Audio: {\n popoverConfig: {\n toolbar: {\n showMore: false,\n }\n },\n },\n },\n}\n\nexport { DefaultConfig }\nexport default DefaultConfig\n","import type * as THREE from 'three/webgpu'\n\nexport function pointsIsRectangle(points: THREE.Vector3[]): boolean {\n if (points.length !== 4) return false\n const [p1, p2, p3, p4] = points\n const p1p2 = p1.distanceTo(p2)\n const p2p3 = p2.distanceTo(p3)\n const p3p4 = p3.distanceTo(p4)\n const p4p1 = p4.distanceTo(p1)\n const p1p3 = p1.distanceTo(p3)\n const p2p4 = p2.distanceTo(p4)\n return p1p2 === p3p4 && p2p3 === p4p1 && p1p3 === p2p4\n}\n","import * as THREE from 'three/webgpu'\nimport { pointsIsRectangle } from '../math/pointsIsRectangle'\nimport { centerPoint } from './centerPoint'\n\nclass QuadrangleMesh extends THREE.Mesh<QuadrangleGeometry, THREE.Material> {\n public name = 'QuadrangleMesh'\n /**\n * @description 生成一个四边形的Mesh\n * @param {Vector3Position[]} points: 四个顶点的坐标, [左下,右下,右上,左上]\n */\n public constructor(points: THREE.Vector3[], material?: THREE.Material, segments?: number) {\n if (points.length !== 4) throw new Error(\"QuadrangleMesh: Invalid number of points, it's not a quadrangle\")\n const [p0, p1, p2, p3] = points\n\n const center = centerPoint(...points)\n\n const geometryPositions = [p0.clone().sub(center), p1.clone().sub(center), p2.clone().sub(center), p3.clone().sub(center)]\n\n const geometry = new QuadrangleGeometry(geometryPositions, segments)\n super(geometry, material)\n\n this.position.copy(center)\n }\n\n public removeFromParent() {\n const parent = this.parent\n\n if (parent !== null) {\n parent.remove(this)\n }\n\n return this\n }\n}\n\nclass QuadrangleGeometry extends THREE.BufferGeometry {\n public name = 'QuadrangleGeometry'\n public points: THREE.Vector3[]\n /**\n * @description 生成一个四边形的BufferGeometry,原点取 points[0],即左下角\n * @param {Vector3Position[]} points: 四个顶点的坐标, [左下,右下,右上,左上]\n */\n public constructor(points: THREE.Vector3[], paramsSegments?: number) {\n super()\n\n this.points = points\n const segments = paramsSegments ?? (pointsIsRectangle(points) ? 64 : 1)\n\n if (points.length !== 4) {\n console.error(\"Invalid number of points, it's not a quadrangle\")\n return\n }\n\n const [p0, p1, p2, p3] = points\n const [uv0, uv1, uv2, uv3] = [new THREE.Vector2(0, 0), new THREE.Vector2(1, 0), new THREE.Vector2(1, 1), new THREE.Vector2(0, 1)]\n\n const verticesArray = []\n const uvArray = []\n\n // 左下角\n verticesArray.push(...p0.toArray())\n uvArray.push(...uv0.toArray())\n // 左下角到右下角\n for (let i = 1; i < segments; i++) {\n verticesArray.push(\n p0.x + ((p1.x - p0.x) * i) / segments,\n p0.y + ((p1.y - p0.y) * i) / segments,\n p0.z + ((p1.z - p0.z) * i) / segments,\n )\n uvArray.push(uv0.x + ((uv1.x - uv0.x) * i) / segments, uv0.y + ((uv1.y - uv0.y) * i) / segments)\n }\n // 右下角\n verticesArray.push(...p1.toArray())\n uvArray.push(...uv1.toArray())\n // 右上角\n verticesArray.push(...p2.toArray())\n uvArray.push(...uv2.toArray())\n // 右上角到左上角\n for (let i = 1; i < segments; i++) {\n verticesArray.push(\n p2.x + ((p3.x - p2.x) * i) / segments,\n p2.y + ((p3.y - p2.y) * i) / segments,\n p2.z + ((p3.z - p2.z) * i) / segments,\n )\n uvArray.push(uv2.x + ((uv3.x - uv2.x) * i) / segments, uv2.y + ((uv3.y - uv2.y) * i) / segments)\n }\n // 左上角\n verticesArray.push(...p3.toArray())\n uvArray.push(...uv3.toArray())\n\n const indicesArray = []\n for (let i = 0; i < segments; i++) {\n indicesArray.push(i, i + 1, segments * 2 - i, i, segments * 2 - i, segments * 2 + 1 - i)\n }\n\n this.setAttribute('position', new THREE.BufferAttribute(new Float32Array(verticesArray), 3))\n this.setAttribute('uv', new THREE.BufferAttribute(new Float32Array(uvArray), 2))\n this.setIndex(new THREE.BufferAttribute(new Uint32Array(indicesArray), 1))\n }\n}\n\nexport { QuadrangleMesh, QuadrangleGeometry }\n","import * as THREE from 'three/webgpu'\nimport type { ObjectFit } from '../../PanoTagPlugin'\n\nexport default function getPositionsByObjectFit(objectFit: ObjectFit, originPositions: THREE.Vector3[], originRatio: number) {\n if (objectFit === 'fill') return originPositions\n else if (objectFit === 'contain') {\n const [p0, p1, p2, p3] = originPositions\n const bottomWidth = p0.distanceTo(p1)\n const topWidth = p2.distanceTo(p3)\n const leftHeight = p0.distanceTo(p3)\n const rightHeight = p1.distanceTo(p2)\n\n const wrapperWidth = bottomWidth\n const wrapperHeight = leftHeight\n const wrapperRatio = wrapperWidth / wrapperHeight\n if (wrapperRatio > originRatio) {\n const newHeight = wrapperHeight\n const newWidth = newHeight * originRatio\n const bottomDiff = new THREE.Vector3().subVectors(p1, p0).multiplyScalar((bottomWidth - newWidth) / 2 / bottomWidth)\n const topDiff = new THREE.Vector3().subVectors(p2, p3).multiplyScalar((topWidth - newWidth) / 2 / topWidth)\n\n return [p0.clone().add(bottomDiff), p1.clone().sub(bottomDiff), p2.clone().sub(topDiff), p3.clone().add(topDiff)]\n } else if (wrapperRatio < originRatio) {\n const newWidth = wrapperWidth\n const newHeight = newWidth / originRatio\n const leftDiff = new THREE.Vector3().subVectors(p3, p0).multiplyScalar((leftHeight - newHeight) / 2 / leftHeight)\n const rightDiff = new THREE.Vector3().subVectors(p2, p1).multiplyScalar((rightHeight - newHeight) / 2 / rightHeight)\n\n return [p0.clone().add(leftDiff), p1.clone().add(rightDiff), p2.clone().sub(rightDiff), p3.clone().sub(leftDiff)]\n } else {\n return originPositions\n }\n } else {\n console.warn(`objectFit: ${objectFit} is not supported yet`)\n return originPositions\n }\n}\n","import * as THREE from 'three/webgpu'\n\nexport class FragmentTransparencyMaterial extends THREE.MeshBasicNodeMaterial {\n public constructor(texture: THREE.Texture) {\n super({\n map: texture,\n transparent: true,\n depthWrite: false,\n blending: THREE.CustomBlending,\n blendSrc: THREE.SrcAlphaFactor,\n blendDst: THREE.OneMinusSrcAlphaFactor,\n blendSrcAlpha: THREE.OneFactor,\n blendDstAlpha: THREE.OneMinusSrcAlphaFactor,\n })\n }\n}\n","import { getVideoTexture, type ReadyVideoTexture } from '../../../shared-utils/three/loadVideoTexture'\nimport { loadPicture } from '../../../shared-utils/three/loadTexture'\n\ntype Picture = Awaited<ReturnType<typeof loadPicture>>\n\n/** Tags retain cache leases across temporary hiding; their controller owns the cache. */\nexport class TagMediaTextureCache {\n public readonly videoTextures: Map<string, ReadyVideoTexture>\n public readonly imageTextures = new Map<string, Picture>()\n private videoOwners = new Map<string, Set<object>>()\n private imageOwners = new Map<string, Set<object>>()\n private pendingImages = new Map<string, Promise<Picture>>()\n\n public constructor(videos = new Map<string, ReadyVideoTexture>()) {\n this.videoTextures = videos\n }\n\n public getVideo(owner: object, src: string, scope?: string) {\n const key = scope ? `${scope}::${src}` : src\n let owners = this.videoOwners.get(key)\n if (!owners) this.videoOwners.set(key, owners = new Set())\n owners.add(owner)\n let texture = this.videoTextures.get(key)\n if (!texture) {\n texture = getVideoTexture(src)\n this.videoTextures.set(key, texture)\n }\n return texture\n }\n\n public getImage(owner: object, src: string): Promise<Picture> {\n let owners = this.imageOwners.get(src)\n if (!owners) this.imageOwners.set(src, owners = new Set())\n owners.add(owner)\n const loaded = this.imageTextures.get(src)\n if (loaded) return Promise.resolve(loaded)\n const pending = this.pendingImages.get(src)\n if (pending) return pending\n const currentOwners = owners\n const promise = loadPicture(src).then(result => {\n if (this.imageOwners.get(src) === currentOwners && currentOwners.size > 0) {\n this.imageTextures.set(src, result)\n } else {\n result.texture.dispose()\n }\n if (this.pendingImages.get(src) === promise) this.pendingImages.delete(src)\n return result\n }, error => {\n if (this.pendingImages.get(src) === promise) this.pendingImages.delete(src)\n throw error\n })\n this.pendingImages.set(src, promise)\n return promise\n }\n\n public release(owner: object) {\n for (const [key, owners] of this.videoOwners) {\n if (!owners.delete(owner) || owners.size > 0) continue\n this.videoOwners.delete(key)\n const texture = this.videoTextures.get(key)\n if (texture) {\n texture.image.muted = true\n texture.image.pause()\n texture.image.onloadedmetadata = null\n texture.image.removeAttribute('src')\n texture.image.load()\n texture.dispose()\n this.videoTextures.delete(key)\n }\n }\n for (const [src, owners] of this.imageOwners) {\n if (!owners.delete(owner) || owners.size > 0) continue\n this.imageOwners.delete(src)\n this.imageTextures.get(src)?.texture.dispose()\n this.imageTextures.delete(src)\n this.pendingImages.delete(src)\n }\n }\n\n public clear() {\n const owners = new Set([...this.videoOwners.values(), ...this.imageOwners.values()].flatMap(set => [...set]))\n owners.forEach(owner => this.release(owner))\n }\n}\n","import type { PlaybackManager, PlaybackController, PlaybackSession, MediaOperations } from '../../../shared-utils/playback'\nimport * as THREE from 'three/webgpu'\nimport { Vector3 } from 'three/webgpu'\nimport { centerPoint } from '../../../shared-utils/three/centerPoint'\nimport { loadPicture } from '../../../shared-utils/three/loadTexture'\nimport { QuadrangleGeometry, QuadrangleMesh } from '../../../shared-utils/three/Quadrangle'\nimport { type ReadyVideoTexture } from '../../../shared-utils/three/loadVideoTexture'\nimport { Image_Play_Icon_With_Text } from '../../Assets/Icon'\nimport { Image_Play_Icon } from '../../Assets/Icon'\nimport getPositionsByObjectFit from '../../../shared-utils/three/getPositionsByObjectFit'\nimport type { FiveDomEvents } from '../../../shared-utils/five/FiveDomEvents'\nimport type { ObjectFit } from '../../typings'\nimport { FragmentTransparencyMaterial } from '../../../shared-utils/three/FragmentTransparencyMaterial'\nimport getNormal from '../../../shared-utils/three/getNormal'\nimport { CONST } from '../../../shared-utils/constants'\nimport { TagMediaTextureCache } from './TagMediaTextureCache'\n\ntype VideoTexture = ReadyVideoTexture\n\nabstract class MediaPlane extends THREE.Mesh<THREE.BufferGeometry, THREE.MeshBasicMaterial> {\n public name = 'MediaPlane'\n public src?: string\n public objectFit: ObjectFit\n\n protected constructor() {\n super()\n // The empty root is a container until an image replaces its geometry/material.\n // Video surfaces live in child meshes; their materials remain drawable.\n this.material.visible = false\n }\n\n /** 获取透明度 */\n public get opacity(): number {\n return this.material?.opacity ?? 1\n }\n\n /** 设置透明度 (0-1) */\n public set opacity(value: number) {\n if (this.material) {\n this.material.opacity = value\n this.material.transparent = value < 1\n this.material.needsUpdate = true\n }\n // 同时更新子 mesh 的透明度\n this.traverse((obj) => {\n if ((obj as any).isMesh && obj !== this) {\n const mesh = obj as THREE.Mesh<THREE.BufferGeometry, THREE.MeshBasicMaterial>\n if (mesh.material) {\n mesh.material.opacity = value\n mesh.material.transparent = value < 1\n mesh.material.needsUpdate = true\n }\n }\n })\n }\n\n public removeFromParent() {\n const parent = this.parent\n if (parent !== null) {\n parent.remove(this)\n }\n return this\n }\n\n public dispose() {\n this.traverse((obj) => {\n if ((obj as any).isMesh) {\n const mesh = obj as THREE.Mesh\n mesh.geometry.dispose()\n const materiales = mesh.material instanceof Array ? mesh.material : [mesh.material]\n materiales.forEach((material) => {\n material.dispose()\n })\n }\n })\n }\n}\n\ntype ImagePlaneUpdate = { cornerPoints: Vector3[]; params?: { objectFit?: ObjectFit; resolveZFighting?: boolean } }\n\nclass ImagePlane extends MediaPlane {\n public name = 'PanoTagPluginImagePlane'\n private disposed = false\n private pendingChange?: ImagePlaneUpdate\n\n public originRatio?: number\n public constructor(imageSrc: string, cornerPoints: Vector3[], params?: { objectFit?: ObjectFit; resolveZFighting?: boolean; opacity?: number }) {\n super()\n this.src = imageSrc\n this.objectFit = params?.objectFit ?? 'contain'\n const resolveZFighting = params?.resolveZFighting ?? true\n const opacity = params?.opacity ?? 1\n // 解决 z-fighting\n let newCornerPoints = cornerPoints\n if (resolveZFighting) {\n // 往法向量方向位移一点点\n const normal = getNormal(cornerPoints).multiplyScalar(CONST.Z_FIGHTING_OFFSET)\n newCornerPoints = cornerPoints.map((p) => p.clone().add(normal))\n }\n // 加载texture\n loadPicture(imageSrc)\n .then(({ texture, transparent }) => {\n if (this.disposed) {\n texture.dispose()\n return\n }\n const material = new THREE.MeshBasicMaterial({\n map: texture,\n transparent: transparent || opacity < 1,\n opacity,\n side: THREE.DoubleSide\n })\n this.originRatio = texture.image.width / texture.image.height\n const newPoints = getPositionsByObjectFit(this.objectFit, newCornerPoints, texture.image.width / texture.image.height)\n const center = centerPoint(...newPoints)\n const geometryPositions = newPoints.map((p) => p.clone().sub(center))\n const geometry = new QuadrangleGeometry(geometryPositions)\n\n this.position.copy(center)\n\n this.geometry.dispose()\n this.material.dispose()\n this.geometry = geometry\n this.material = material\n const pendingChange = this.pendingChange\n this.pendingChange = undefined\n if (pendingChange) this.changePointsOrParams(pendingChange)\n })\n .catch((e: Error) => {\n console.error(`Imageplane error: ${e?.message}`)\n })\n }\n\n public changePointsOrParams(props: ImagePlaneUpdate) {\n if (this.disposed) return\n const { cornerPoints, params = {} } = props\n\n const { objectFit = this.objectFit } = params\n // 解决 z-fighting\n let newCornerPoints = cornerPoints\n const { resolveZFighting } = params ?? {}\n if (this.originRatio === undefined) {\n this.pendingChange = {\n cornerPoints: cornerPoints.map((point) => point.clone()),\n params: { objectFit: objectFit ?? 'contain', resolveZFighting },\n }\n }\n if (resolveZFighting) {\n // 往法向量方向位移一点点\n const normal = getNormal(cornerPoints).multiplyScalar(CONST.Z_FIGHTING_OFFSET)\n newCornerPoints = cornerPoints.map((p) => p.clone().add(normal))\n }\n\n const newPoints = getPositionsByObjectFit(objectFit ?? 'contain', newCornerPoints, this.originRatio)\n const center = centerPoint(...newPoints)\n const geometryPositions = newPoints.map((p) => p.clone().sub(center))\n const geometry = new QuadrangleGeometry(geometryPositions)\n\n this.objectFit = objectFit ?? 'contain'\n this.position.copy(center)\n this.geometry.dispose()\n this.geometry = geometry\n }\n\n public dispose() {\n if (this.disposed) return\n this.disposed = true\n this.pendingChange = undefined\n this.material.map?.dispose()\n super.dispose()\n }\n}\n\nclass VideoPlane extends MediaPlane {\n public readonly isVideoPlane = true\n public name = 'PanoTagPluginImagePlane'\n public videoInstance?: HTMLVideoElement\n public onVideoReady?: (videoInstance?: HTMLVideoElement) => void\n private buttonSrc: string\n private videoCoverSrc?: string\n private domEvents?: FiveDomEvents\n private disposers: (() => void)[] = []\n private cornerPoints: Vector3[]\n private videoMesh?: THREE.Mesh<QuadrangleGeometry, THREE.Material> & { needsRender?: boolean }\n private coverMesh?: THREE.Mesh<QuadrangleGeometry, THREE.Material> & { needsRender?: boolean }\n private buttonMesh?: THREE.Mesh<QuadrangleGeometry, THREE.Material> & { needsRender?: boolean }\n private mediaTextures: TagMediaTextureCache\n private textureOwner: object\n private ownsTextureLease: boolean\n private initialOpacity: number\n private playbackController?: PlaybackController\n private session?: PlaybackSession\n private nativeErrorDisposer?: () => void\n private cancelMetadataWait?: () => void\n private loadGeneration = 0\n private playbackDisposed = false\n private resourcesDisposed = false\n private cacheScope?: string\n\n\n public constructor(\n videoSrc: string,\n cornerPoints: Vector3[],\n params?: {\n mediaManager?: PlaybackManager\n paused?: boolean\n playButton?: 'withText' | 'withoutText' | string\n videoCoverSrc?: string\n objectFit?: ObjectFit\n mediaTextures?: TagMediaTextureCache\n textureOwner?: object\n domEvents?: FiveDomEvents\n opacity?: number\n /** video 元素的归属标识(一般是标签 id)。传入后同 src 的多个屏幕不再共享 video 元素 */\n cacheScope?: string\n },\n ) {\n const {\n videoCoverSrc,\n objectFit = 'contain',\n playButton = 'withText',\n paused = true,\n domEvents,\n opacity = 1,\n cacheScope,\n } = params ?? {}\n super()\n this.playbackController = params?.mediaManager?.createController({ label: 'tag-video-plane', onCancel: () => this.stopOutput() })\n this.cornerPoints = cornerPoints\n this.src = videoSrc\n this.initialOpacity = opacity\n this.buttonSrc = (() => {\n if (playButton === 'withText') return Image_Play_Icon_With_Text\n else if (playButton === 'withoutText') return Image_Play_Icon\n else if (typeof playButton === 'string') return playButton\n else return Image_Play_Icon\n })()\n this.videoCoverSrc = videoCoverSrc\n this.objectFit = objectFit\n this.cacheScope = cacheScope\n this.mediaTextures = params?.mediaTextures ?? new TagMediaTextureCache()\n this.textureOwner = params?.textureOwner ?? this\n this.ownsTextureLease = params?.textureOwner === undefined\n this.domEvents = domEvents\n\n this.position.copy(centerPoint(...cornerPoints))\n\n const initialGeneration = this.loadGeneration\n if (this.videoCoverSrc && paused) {\n this.addCoverMesh().then(() => this.addButtonMesh())\n } else {\n this.addVideoMesh().then(() => {\n if (initialGeneration !== this.loadGeneration || this.playbackDisposed) return\n if (paused) this.addButtonMesh()\n else {\n void this.play(true).catch(error => console.error('Video play failed', error))\n }\n }).catch((error: Error) => {\n if (initialGeneration !== this.loadGeneration || this.playbackDisposed) return\n this.pause()\n console.error('Video metadata load failed', error)\n })\n }\n\n this.addEventListener('removed', () => {\n this.pause()\n // Keep owned child resources reachable until dispose() traverses them.\n })\n\n this.addEventListener('dispose', () => {\n this.playbackDisposed = true; this.playbackController?.dispose(); this.stopOutput()\n this.disposers?.forEach((d) => d?.())\n })\n }\n\n public dispose() {\n if (this.resourcesDisposed) return\n this.resourcesDisposed = true\n this.playbackDisposed = true; this.playbackController?.dispose(); this.stopOutput()\n this.disposers.forEach((dispose) => dispose())\n this.disposers = []\n // Playing detaches the button; hidden UI still belongs to this plane.\n const detached = [this.videoMesh, this.coverMesh, this.buttonMesh].filter(mesh => mesh && mesh.parent !== this)\n super.dispose()\n detached.forEach(mesh => { mesh.geometry.dispose(); mesh.material.dispose() })\n if (this.ownsTextureLease) this.mediaTextures.release(this.textureOwner)\n }\n\n public setMediaManager(manager?: PlaybackManager) {\n this.playbackController?.dispose()\n this.stopOutput()\n this.playbackController = manager?.createController({ label: 'tag-video-plane', onCancel: () => this.stopOutput() })\n }\n\n /**\n * @returns 播放结果。`'no-session'` 表示没拿到音频焦点(并非异常),\n * 调用方可据此降级为静音播放;`'disposed'`/`'stale'` 表示这次调用已失效。\n */\n public play(muted = false, userAction = false) {\n return this.startPlayback(muted, userAction, false)\n }\n\n private async startPlayback(muted: boolean, userAction: boolean, fromStart: boolean): Promise<'played' | 'no-session' | 'disposed' | 'stale'> {\n if (this.playbackDisposed) return 'disposed'\n const session = this.playbackController?.begin({ userAction, audible: !muted })\n if (this.playbackController && !session) return 'no-session'\n this.session = session\n const generation = ++this.loadGeneration\n const current = () => generation === this.loadGeneration && !session?.signal.aborted\n try {\n if (!this.videoMesh) await this.addVideoMesh()\n if (!current()) return 'stale'\n const video = this.videoInstance\n const operations = session?.bind(video) ?? video\n this.nativeErrorDisposer?.()\n const onError = () => {\n if (!video.error || !current() || this.session !== session || this.videoInstance !== video) return\n this.pause()\n }\n const clearError = () => {\n video.removeEventListener('error', onError)\n session?.signal.removeEventListener('abort', clearError)\n if (this.nativeErrorDisposer === clearError) this.nativeErrorDisposer = undefined\n }\n this.nativeErrorDisposer = clearError\n video.addEventListener('error', onError)\n session?.signal.addEventListener('abort', clearError, { once: true })\n if (fromStart) this.resetProgress(operations)\n operations.muted = muted\n try {\n await operations.play()\n } catch (error) {\n if (!fromStart || (error as Error).name !== 'NotAllowedError' || !current()) throw error\n // 浏览器拒绝有声自动播放时,沿用本次任务降级静音,不重新申请。\n operations.muted = true\n await operations.play()\n }\n if (!current()) return 'stale'\n this.showPlayUI()\n this.render()\n return 'played'\n } catch (error) {\n if (!current()) return 'stale'\n if ((error as Error).name === 'AbortError') { this.pause(); return 'stale' }\n this.pause()\n throw error\n }\n }\n\n /**\n * @description 从头播放。用于「离开可见范围后走回来」的场景:\n * 先重置进度,再尝试有声播放;有声不可用时回退静音,避免出现「既没声音也不播放」。\n * @param userAction 是否按用户操作申请音频焦点(true 会抢占当前音源)\n */\n public async replayFromStart(userAction = true): Promise<'audible' | 'muted' | 'failed'> {\n const playing = this.startPlayback(false, userAction, true)\n const generation = this.loadGeneration\n try {\n const result = await playing\n if (generation !== this.loadGeneration) return 'failed'\n if (result === 'played') return this.videoInstance.muted ? 'muted' : 'audible'\n if (result !== 'no-session') return 'failed'\n const muted = await this.startPlayback(true, false, true)\n return muted === 'played' ? 'muted' : 'failed'\n } catch (error) {\n console.error('Video replay failed', error)\n return 'failed'\n }\n }\n\n /** 复用的 video 元素不会自动回到起点,需显式重置 */\n private resetProgress(media: MediaOperations) {\n try {\n media.currentTime = 0\n } catch {\n // 少数浏览器在 metadata 未就绪时 seek 会抛错,忽略即可,播放本身不受影响\n }\n }\n\n public pause() { this.playbackController?.cancel(); this.stopOutput() }\n\n private stopOutput() {\n this.nativeErrorDisposer?.()\n this.loadGeneration++\n this.session = undefined\n this.cancelMetadataWait?.()\n if (!this.videoInstance) return\n // The manager has already stopped this session's bindings. A cached texture may\n // now belong to another screen, so only standalone planes stop the raw element.\n if (!this.playbackController) {\n this.videoInstance.muted = true\n this.videoInstance.pause()\n }\n this.showPauseUI().then(() => this.render())\n }\n\n public onDispose(dispose: () => void) { this.disposers.push(dispose) }\n\n public initialRenderHooks(func: (render: () => void) => () => void) {\n const render = () => {\n if (this.videoMesh && this.videoInstance?.paused === false) this.videoMesh.needsRender = true\n }\n const dispose = func(render)\n this.disposers.push(dispose)\n }\n\n private showPlayUI() {\n if (this.coverMesh) this.coverMesh.visible = false\n this.remove(this.buttonMesh)\n this.videoMesh.visible = true\n }\n\n private async showPauseUI() {\n if (this.playbackDisposed) return\n const generation = this.loadGeneration\n if (this.coverMesh) {\n this.coverMesh.visible = true\n if (this.videoMesh) this.videoMesh.visible = false\n } else {\n await this.addCoverMesh()\n if (generation !== this.loadGeneration || this.playbackDisposed) return\n if (this.coverMesh) this.videoMesh.visible = false\n }\n this.addButtonMesh().then(() => this.render())\n }\n\n private render() {\n if (this.videoMesh) this.videoMesh.needsRender = true\n if (this.coverMesh) this.coverMesh.needsRender = true\n if (this.buttonMesh) this.buttonMesh.needsRender = true\n if (this.videoMesh && this.videoInstance?.paused === false) this.videoMesh.needsRender = true\n }\n\n private async addCoverMesh() {\n if (this.playbackDisposed) return\n const generation = this.loadGeneration\n if (this.children.includes(this.coverMesh)) return\n const coverMesh = await (async () => {\n if (this.coverMesh) return this.coverMesh\n if (!this.videoCoverSrc) return\n // material\n const { texture, transparent } = await this.getImageTexture(this.videoCoverSrc)\n const material = new THREE.MeshBasicMaterial({\n transparent: transparent || this.initialOpacity < 1,\n opacity: this.initialOpacity,\n map: texture,\n side: THREE.DoubleSide\n })\n const points = getPositionsByObjectFit(this.objectFit, this.cornerPoints, texture.image.width / texture.image.height)\n const mesh = new QuadrangleMesh(points, material)\n mesh.position.copy(new Vector3(0, 0, 0))\n mesh.name = 'videoCoverMesh'\n\n // 往前拉一点,避免 z-fighting\n const normal = getNormal(points).multiplyScalar(CONST.Z_FIGHTING_OFFSET)\n mesh.position.add(normal)\n return mesh\n })()\n if (generation !== this.loadGeneration || this.playbackDisposed) {\n if (coverMesh && coverMesh !== this.coverMesh) {\n coverMesh.geometry.dispose()\n coverMesh.material.dispose()\n }\n return\n }\n if (coverMesh) {\n if (!this.children.includes(this.coverMesh)) {\n this.add(coverMesh)\n this.coverMesh = coverMesh\n }\n }\n return coverMesh\n }\n\n private async addVideoMesh() {\n const generation = this.loadGeneration\n if (this.playbackDisposed) return\n if (this.children.includes(this.videoMesh)) return\n\n const videoMesh = await (async () => {\n if (this.videoMesh) return this.videoMesh\n if (!this.src) return\n // material\n const texture = this.getVideoTexture(this.src)\n const material = new THREE.MeshBasicMaterial({\n transparent: this.initialOpacity < 1,\n opacity: this.initialOpacity,\n map: texture,\n side: THREE.DoubleSide\n })\n try {\n await this.waitForVideoMetadata(texture)\n } catch (error) {\n material.dispose()\n throw error\n }\n const points = getPositionsByObjectFit(this.objectFit, this.cornerPoints, texture.image.videoWidth / texture.image.videoHeight)\n const mesh = new QuadrangleMesh(points, material)\n mesh.name = 'videoMesh'\n mesh.position.copy(new Vector3(0, 0, 0))\n\n // 往前拉一点,避免 z-fighting\n const normal = getNormal(points).multiplyScalar(CONST.Z_FIGHTING_OFFSET)\n mesh.position.add(normal)\n\n return mesh\n })()\n\n if (generation !== this.loadGeneration || this.playbackDisposed) {\n if (videoMesh && videoMesh !== this.videoMesh) {\n videoMesh.geometry.dispose()\n videoMesh.material.dispose()\n }\n return\n }\n if (!videoMesh) return\n\n // 添加点击监听\n this.domEvents.addAutoBindEventListener(\n videoMesh,\n 'click',\n () => {\n if (!this.videoInstance.paused && this.videoInstance?.muted) {\n void this.play(false, true).catch(error => console.error('Video play failed', error))\n } else {\n this.pause()\n }\n },\n { noEmitWhenHide: true },\n )\n\n const videoInstance = ((videoMesh.material as THREE.MeshBasicMaterial).map as VideoTexture).image\n this.onVideoReady?.(videoInstance)\n videoInstance.addEventListener('playing', () => {\n if (this.playbackController && (!this.session || this.session.signal.aborted)) return\n // 被动的开始播放时:\n // 没有封面图能看到视频在播,所以需要去掉播放按钮\n // 有封面图的因为看不到视频在播,所以就不用管\n if (!this.coverMesh) this.remove(this.buttonMesh)\n this.render()\n })\n\n videoInstance.addEventListener('pause', () => {\n if (!this.videoInstance.paused) return // 部分版本的微信中,会莫名其妙在第一次播放前触发一次 'pause' 事件,实际上并没有暂停\n this.showPauseUI()\n this.render()\n })\n\n if (!this.children.includes(this.videoMesh)) {\n this.add(videoMesh)\n this.videoMesh = videoMesh\n this.videoInstance = videoInstance\n }\n return videoMesh\n }\n\n private async addButtonMesh() {\n if (this.playbackDisposed) return\n const generation = this.loadGeneration\n if (this.children.includes(this.buttonMesh)) return\n const buttonMesh = await (async () => {\n if (this.buttonMesh) return this.buttonMesh\n\n // const videoMeshWidth = this.videoMesh?.geometry.points[0].distanceTo(this.videoMesh.geometry.points[1]) ?? Infinity\n const videoMeshHeight = this.videoMesh?.geometry.points[0].distanceTo(this.videoMesh.geometry.points[3]) ?? Infinity\n // const coverMeshWidth = this.coverMesh?.geometry.points[0].distanceTo(this.coverMesh.geometry.points[1]) ?? Infinity\n const coverMeshHeight = this.coverMesh?.geometry.points[0].distanceTo(this.coverMesh.geometry.points[3]) ?? Infinity\n // const wrapperWidth = this.cornerPoints[0].distanceTo(this.cornerPoints[1])\n const wrapperHeight = this.cornerPoints[0].distanceTo(this.cornerPoints[3])\n\n // const minContentWidth = Math.min(videoMeshWidth, coverMeshWidth, wrapperWidth)\n const minContentHeight = Math.min(videoMeshHeight, coverMeshHeight, wrapperHeight)\n const scale = (minContentHeight / wrapperHeight) * 0.3\n\n // material\n const { texture, transparent } = await this.getImageTexture(this.buttonSrc)\n // geometry\n const point = getPositionsByObjectFit('contain', this.cornerPoints, texture.image.width / texture.image.height)\n const mesh = new QuadrangleMesh(point, new FragmentTransparencyMaterial(texture))\n mesh.position.copy(new Vector3(0, 0, 0))\n mesh.name = 'buttonMesh'\n mesh.scale.set(scale, scale, scale)\n mesh.material.side = THREE.DoubleSide\n\n // 往前拉一点,确保在 videoMesh 前面(videoMesh 也有 Z_FIGHTING_OFFSET)\n const normal = getNormal(point).multiplyScalar(CONST.Z_FIGHTING_OFFSET * 2)\n mesh.position.add(normal)\n\n return mesh\n })()\n\n if (generation !== this.loadGeneration || this.playbackDisposed) {\n if (buttonMesh !== this.buttonMesh) {\n buttonMesh.geometry.dispose()\n buttonMesh.material.dispose()\n }\n return\n }\n if (buttonMesh !== this.buttonMesh) {\n this.domEvents.addAutoBindEventListener(\n buttonMesh,\n 'click',\n () => {\n void this.play(false, true).catch(error => console.error('Video play failed', error))\n },\n { noEmitWhenHide: true },\n )\n }\n if (!this.children.includes(this.buttonMesh)) {\n this.add(buttonMesh)\n this.buttonMesh = buttonMesh\n }\n return buttonMesh\n }\n\n private async getImageTexture(src: string) {\n return this.mediaTextures.getImage(this.textureOwner, src)\n }\n\n private getVideoTexture(src: string) {\n // 缓存 key 带上归属标签:多块屏幕用同一个视频地址时各自持有 video 元素,\n // 否则重置进度、暂停等操作会互相干扰。未指定归属时沿用按 src 共享的旧行为。\n return this.mediaTextures.getVideo(this.textureOwner, src, this.cacheScope)\n }\n\n private waitForVideoMetadata(texture: VideoTexture): Promise<void> {\n this.cancelMetadataWait?.()\n if (texture.metadataLoaded) return Promise.resolve()\n const video = texture.image\n return new Promise<void>((resolve, reject) => {\n let settled = false\n const finish = (error?: Error) => {\n if (settled) return\n settled = true\n video.removeEventListener('error', onError)\n if (this.cancelMetadataWait === cancel) this.cancelMetadataWait = undefined\n if (error) reject(error)\n else resolve()\n }\n const onError = () => {\n if (!video.error) return\n const error = new Error(`Video metadata failed (code ${video.error.code})`)\n error.name = 'MediaError'\n finish(error)\n }\n const cancel = () => finish(new DOMException('Video metadata wait canceled', 'AbortError'))\n this.cancelMetadataWait = cancel\n video.addEventListener('error', onError)\n // Keep the loader's readiness semantics, including its WeChat poster step.\n texture.metadataReady.then(() => finish(), finish)\n onError()\n })\n }\n\n public async changePointsOrParams(props: { cornerPoints: Vector3[]; params?: { objectFit?: ObjectFit } }) {\n const { cornerPoints, params } = props\n\n // 更新 cornerPoints\n if (cornerPoints) {\n this.cornerPoints = cornerPoints\n this.position.copy(centerPoint(...cornerPoints))\n }\n\n // 更新 objectFit\n if (params?.objectFit) {\n this.objectFit = params.objectFit\n }\n\n // 重新计算并更新所有 mesh 的位置\n await this.updateAllMeshes()\n }\n\n private async updateAllMeshes() {\n // 更新 videoMesh\n if (this.videoMesh) {\n await this.updateVideoMesh()\n }\n\n // 更新 coverMesh\n if (this.coverMesh) {\n await this.updateCoverMesh()\n }\n\n // 更新 buttonMesh\n if (this.buttonMesh) {\n await this.updateButtonMesh()\n }\n\n this.render()\n }\n\n private async updateVideoMesh() {\n if (!this.videoMesh || !this.src) return\n\n const texture = this.getVideoTexture(this.src)\n await texture.metadataReady\n const points = getPositionsByObjectFit(this.objectFit, this.cornerPoints, texture.image.videoWidth / texture.image.videoHeight)\n\n const center = centerPoint(...points)\n const geometryPositions = points.map((p) => p.clone().sub(center))\n const newGeometry = new QuadrangleGeometry(geometryPositions)\n\n this.videoMesh.geometry.dispose()\n this.videoMesh.geometry = newGeometry\n this.videoMesh.position.copy(new Vector3(0, 0, 0))\n\n // 往前拉一点,避免 z-fighting\n const normal = getNormal(points).multiplyScalar(CONST.Z_FIGHTING_OFFSET)\n this.videoMesh.position.add(normal)\n }\n\n private async updateCoverMesh() {\n if (!this.coverMesh || !this.videoCoverSrc) return\n\n const { texture } = await this.getImageTexture(this.videoCoverSrc)\n const points = getPositionsByObjectFit(this.objectFit, this.cornerPoints, texture.image.width / texture.image.height)\n const center = centerPoint(...points)\n const geometryPositions = points.map((p) => p.clone().sub(center))\n const newGeometry = new QuadrangleGeometry(geometryPositions)\n\n this.coverMesh.geometry.dispose()\n this.coverMesh.geometry = newGeometry\n this.coverMesh.position.copy(new Vector3(0, 0, 0))\n }\n\n private async updateButtonMesh() {\n if (!this.buttonMesh) return\n\n const { texture } = await this.getImageTexture(this.buttonSrc)\n const points = getPositionsByObjectFit('contain', this.cornerPoints, texture.image.width / texture.image.height)\n const center = centerPoint(...points)\n const geometryPositions = points.map((p) => p.clone().sub(center))\n const newGeometry = new QuadrangleGeometry(geometryPositions)\n\n // 重新计算缩放比例\n const videoMeshHeight = this.videoMesh?.geometry.points[0].distanceTo(this.videoMesh.geometry.points[3]) ?? Infinity\n const coverMeshHeight = this.coverMesh?.geometry.points[0].distanceTo(this.coverMesh.geometry.points[3]) ?? Infinity\n const wrapperHeight = this.cornerPoints[0].distanceTo(this.cornerPoints[3])\n const minContentHeight = Math.min(videoMeshHeight, coverMeshHeight, wrapperHeight)\n const scale = (minContentHeight / wrapperHeight) * 0.3\n\n this.buttonMesh.geometry.dispose()\n this.buttonMesh.geometry = newGeometry\n this.buttonMesh.position.copy(new Vector3(0, 0, 0))\n this.buttonMesh.scale.set(scale, scale, scale)\n\n // 重新计算 z-fighting 偏移,确保在 videoMesh 前面(videoMesh 也有 Z_FIGHTING_OFFSET)\n const normal = getNormal(points).multiplyScalar(CONST.Z_FIGHTING_OFFSET * 2)\n this.buttonMesh.position.add(normal)\n }\n}\n\nexport { ImagePlane, VideoPlane }\n","import type { State as FiveState } from '@realsee/five-webgpu'\nimport type { TagInstance } from '../typings'\n\ntype Distance = number\n\nexport class Cache {\n /**\n * @description 射线碰撞检测的距离缓存\n */\n public cache_raycasterDistance = new Map<string, Distance>()\n /**\n * @description 标签是否可见缓存\n */\n public cache_visible = new Map<string, boolean>()\n\n public constructor() {}\n\n public clear() {\n this.cache_visible.clear()\n this.cache_raycasterDistance.clear()\n }\n\n public static generateCameraTagKey(fiveState: Partial<FiveState>, tag: TagInstance, accurate = 3) {\n const state = { ...tag.five.getCurrentState(), ...fiveState }\n\n const cameraPosition = state.mode === 'Panorama' ? tag.workUtil.getObserverPosition(state.panoIndex) : tag.five.camera.position\n\n if (!cameraPosition) return\n\n const key = [\n //\n cameraPosition.x.toFixed(accurate),\n cameraPosition.y.toFixed(accurate),\n cameraPosition.z.toFixed(accurate),\n tag.id,\n ].join(',')\n\n return key\n }\n\n public getVisible(tag: TagInstance, fiveState: Partial<FiveState>, accurate = 1) {\n const key = Cache.generateCameraTagKey(fiveState, tag, accurate)\n if (key) {\n return this.cache_visible.get(key)\n }\n }\n\n public setVisible(tag: TagInstance, fiveState: Partial<FiveState>, visible: boolean, accurate = 1) {\n const key = Cache.generateCameraTagKey(fiveState, tag, accurate)\n if (key) {\n this.cache_visible.set(key, visible)\n }\n }\n}\n","import { calculateTagConfig } from '../utils/tag/calculateTagConfig'\nimport type * as THREE from 'three/webgpu'\nimport {\n type TagContentType,\n type StickType,\n type TagId,\n type MediaStore,\n type State,\n type PluginEventMap,\n type TagInstance,\n type Tag,\n type ContentTypeConfigKey,\n type ContentTypeConfigKeySplit,\n type TagConfig,\n defaultGlobalConfig,\n} from '../typings'\nimport { DefaultConfig } from '../tag.config'\nimport type { Tags } from '../typings'\nimport { normalPositionToPositions } from '../utils'\nimport { writable } from 'svelte/store'\nimport { isIOSWX } from '../../shared-utils/device'\nimport type { Five} from '@realsee/five-webgpu';\nimport { type Mode } from '@realsee/five-webgpu'\nimport { isMediaModelTag, isPlaneTag, isPoint3DTag } from '../utils/tag/tagCheck'\nimport { VideoPlane } from '../utils/model/mediaPlane'\nimport { TagMediaTextureCache } from '../utils/model/TagMediaTextureCache'\nimport { FiveDomEvents } from '../../shared-utils'\nimport { anyPositionToVector3 } from '../../shared-utils/positionToVector3'\nimport type { BaseTag } from './Tag/BaseTag'\nimport { Cache } from '../utils/Cache'\n\nimport * as BasePlugin from '../../base/BasePlugin'\nimport type { PointTag } from './Tag/PointTag'\nimport objectAssignDeep from 'object-assign-deep'\nimport entries from '../../shared-utils/typescript/entries'\nimport { isModelLike, isPanoramaLike } from '../../shared-utils'\nimport adaptConfig from '../utils/tag/adaptConfig'\n\ntype RenderQueueType = 'TagContainerSvelte'\n\nexport abstract class TagUtil extends BasePlugin.Controller<State, PluginEventMap> {\n public readonly mediaTextures = new TagMediaTextureCache()\n public tags: (BaseTag & { [key: string]: any })[] = []\n\n public cache = new Cache()\n\n public get container() {\n return this._container || this.five.getElement()?.parentElement\n }\n\n public set container(container: Element) {\n this._container = container\n }\n\n public config: Pick<Tags, 'globalConfig' | 'contentTypeConfig'> = DefaultConfig\n\n public renderQueue: Map<string, { keys: string[]; tags: BaseTag[] }> = new Map()\n\n\n public set tagsLengthWillUpdate(value: boolean) {\n if (value) {\n // 更新缓存:包含 2DPoint, 3DPoint, 3DBox, Polygon 和 Mask\n this._cache_pointTag = this.tags\n .filter(\n (tag) =>\n tag.stickType === '2DPoint' ||\n tag.stickType === '3DPoint' ||\n tag.stickType === '3DBox' ||\n tag.stickType === 'Polygon' ||\n tag.stickType === 'Mask',\n )\n .filter((tag) => tag.position) as any\n\n this._cache_2DPointTag = this.tags.filter((tag) => tag.stickType === '2DPoint').filter((tag) => tag.position) as any\n\n this._cache_css3DTag = this.tags\n .filter(\n (tag) =>\n tag.stickType === '3DPoint' || tag.stickType === 'Plane' || (tag.stickType === 'Model' && tag.contentType === 'MediaModel'),\n )\n .filter((tag) => {\n const renderType = tag.computeRenderType()\n return renderType === 'BehindDom' || renderType === 'Dom'\n }) as any\n }\n }\n\n /** 插件参数 */\n protected params: {\n config: Pick<Tags, 'contentTypeConfig' | 'globalConfig'>\n debug: boolean\n containerZIndex?: number\n }\n\n\n public mediaStore: MediaStore = writable({\n currentMediaElement: null,\n })\n\n protected store: {\n /** 清理函数数组 */\n disposers: (() => void)[]\n css3DRenderDisposer: Map<TagId, (() => void)[]>\n eventListenerDisposer?: () => void\n resizeObserverDisposer?: () => void\n resizeObserverDisposerAdding: boolean\n disposed: boolean\n } = {\n disposers: [],\n disposed: false,\n resizeObserverDisposerAdding: false,\n css3DRenderDisposer: new Map<TagId, (() => void)[]>(),\n }\n\n\n public domEvents = new FiveDomEvents(this.five)\n\n private _cache_pointTag?: PointTag[]\n private _cache_2DPointTag?: PointTag[]\n private _cache_css3DTag?: (BaseTag<TagContentType, 'Plane'> | BaseTag<TagContentType, 'Model'> | BaseTag<TagContentType, '3DPoint'>)[]\n\n public get filterPointTag() {\n return this._cache_pointTag ?? []\n }\n\n public get filter2DPointTag() {\n return this._cache_2DPointTag ?? []\n }\n\n public get filterCSS3DTag() {\n return this._cache_css3DTag ?? []\n }\n\n private _container: Element | null = null\n\n private timeoutIds: any[] = []\n\n protected constructor(five: Five) {\n super(five)\n this.mediaStore.subscribe(({ currentMediaElement }) => {\n this.tags.forEach((tag) => {\n if (tag.mediaPlane instanceof VideoPlane && currentMediaElement !== tag.mediaPlane.videoInstance) {\n if (!tag.mediaPlane.videoInstance?.src) return\n if (currentMediaElement === tag.mediaPlane.videoInstance) return\n tag.mediaPlane.pause()\n }\n })\n })\n }\n\n public updateFive(five: Five) {\n super.updateFive(five)\n this.domEvents.dispose()\n this.domEvents = new FiveDomEvents(five)\n }\n\n public addRenderQueue(params: { type: RenderQueueType; keys?: string[]; tags?: BaseTag[] }) {\n const { type, keys = [], tags = [] } = params\n if (!this.renderQueue.has(type)) {\n this.renderQueue.set(type, { keys, tags })\n } else {\n this.renderQueue.set(type, {\n keys: Array.from(new Set([...(this.renderQueue.get(type)!.keys ?? []), ...keys])),\n tags: Array.from(new Set([...(this.renderQueue.get(type)!.tags ?? []), ...tags])),\n })\n }\n }\n\n public getTagById<C extends TagContentType = TagContentType, S extends StickType = StickType>(id: TagId): BaseTag<C, S> | undefined {\n const tag = this.tags.find((tag) => {\n return tag.id === id\n })\n\n if (!tag) {\n console.warn(`getTagById Error: can't find tag id: ${id}`)\n return\n }\n return tag as BaseTag<C, S>\n }\n\n public whyHide = (tagId: TagId) => {\n const tag = this.getTagById(tagId)\n if (!tag) {\n return { reason: `tag ${tagId} not found` }\n }\n return tag.whyHide()\n }\n\n /** 暂停当前标签内进行的所有多媒体 */\n public pauseCurrentMedia() {\n this.mediaStore.set({ currentMediaElement: null })\n }\n\n /**\n * @description 获取标签配置\n */\n public getTagConfig(tag: Tag, params?: { useCache?: boolean; fiveMode?: Mode }) {\n const config = this.calculateTagConfig(tag, { useCache: params?.useCache })\n const fiveMode = params?.fiveMode ?? this.five.getCurrentState().mode\n const fiveModeConfig = config.configWithFiveMode?.[fiveMode]\n return fiveModeConfig ?? config ?? {}\n }\n\n protected loadVideoFirstFrame = () => {\n if (isIOSWX) this.hooks.emit('loadVideoFirstFrame')\n }\n\n protected getPositions(tag: BaseTag) {\n if (isPlaneTag(tag)) return tag.position\n if (isMediaModelTag(tag)) return tag.data.mediaPosition\n if (isPoint3DTag(tag))\n return normalPositionToPositions(this.five.camera.position, anyPositionToVector3(tag.position), anyPositionToVector3(tag.normal))\n }\n\n protected addObjectClickHandler(tag: BaseTag, object: THREE.Object3D | undefined, handler: (event: Event) => any) {\n if (!object || !this.domEvents) return () => {}\n\n const getTagVisible = () => {\n if (!tag.currentVisible) return false\n if (tag['loading']) return false\n return true\n }\n\n const _handler = (event: any) => {\n if (!getTagVisible()) return false\n handler(event.origDomEvent)\n }\n\n this.domEvents.addEventListener(object, 'click', _handler)\n\n return () => {\n this.domEvents?.removeEventListener(object, 'click', _handler)\n }\n }\n\n protected tagsDo = (tags: TagInstance[], func: (tag: TagInstance) => any, isUpdateing = true) => {\n // 排序,1000 个标签排序约 1ms\n let sortedTags = [...(tags ?? this.tags)].sort((a, b) => a.getSquaredDistance() - b.getSquaredDistance())\n\n this.timeoutIds.forEach((id) => clearTimeout(id))\n this.timeoutIds.length = 0\n\n // 先执行20个\n for (let i = 0; i < 20; i++) {\n const tag = sortedTags[i]\n if (tag) {\n func(tag)\n if (isUpdateing) tag._updating = false\n }\n }\n\n // 慢点执行剩下的\n sortedTags = sortedTags.slice(20)\n\n const tooLarge = sortedTags.length > 1000\n\n const delay = tooLarge ? 30 : 17 // ms\n\n const sizeEveryTimeout = tooLarge ? 1 : 3\n\n for (let i = 0; i < sortedTags.length; i += sizeEveryTimeout) {\n const tags: TagInstance[] = []\n\n for (let j = 0; j < sizeEveryTimeout; j++) {\n if (sortedTags[i + j]) tags.push(sortedTags[i + j])\n }\n\n tags.forEach((tag) => {\n if (isUpdateing) tag._updating = true\n })\n\n const timeoutId = setTimeout(() => {\n tags.forEach((t) => {\n func(t)\n if (isUpdateing) t._updating = false\n })\n }, i * delay)\n\n this.timeoutIds.push(timeoutId)\n }\n }\n\n /**\n * @description 检查是否已经销毁\n * @returns isDisposed; 已经销毁返回 true,否则返回 false\n */\n protected checkDisposed() {\n if (this.store.disposed) {\n console.error('PanoTagPluginController has been disposed')\n return true\n }\n return false\n }\n\n /**\n * @description 获取merge后的配置\n */\n protected calculateTagConfig(tag: Tag | TagInstance, params?: { useCache?: boolean }): TagInstance['computedConfig'] {\n return calculateTagConfig(tag, this.config, params)\n }\n}\n","import type {\n TagObjectGroup,\n TagGLTFObjectGroup,\n ImagePlaneGroup,\n TagContentType,\n ElementRenderer,\n TagRendererMap,\n TagContentTypeMapping,\n} from '../typings'\nimport type { TemporaryState } from '../typings'\nimport { Group } from 'three/webgpu'\nimport type { MountedComponent } from '../../shared-utils/svelte/component.svelte'\nimport type { Five } from '@realsee/five-webgpu'\nimport { TagUtil } from './TagUtil'\n\nexport abstract class TagRender extends TagUtil {\n public rendererMap: TagRendererMap = new Map()\n public contentTypeMap: TagContentTypeMapping = new Map()\n public group = new Group() as TagObjectGroup\n public imagePlaneGroup = new Group() as ImagePlaneGroup\n public gltfObjectGroup = new Group() as TagGLTFObjectGroup\n\n /** 维护一个可用模型表,用于快速删除不应该在场景中的模型 */\n protected enabledModelTagSet = new Set<string | number>()\n\n /** 临时状态 */\n public temporaryState: TemporaryState = { visible: true }\n\n /** 点标签 */\n public TagContainerSvelte?: MountedComponent<any>\n\n public constructor(five: Five) {\n super(five)\n // init group\n this.group.name = 'PanoTagPluginModelGroup'\n this.gltfObjectGroup.name = 'PanoTagPluginGLTFObjectGroup'\n this.imagePlaneGroup.name = 'ImagePlaneGroup'\n this.group.add(this.gltfObjectGroup)\n this.group.add(this.imagePlaneGroup)\n }\n\n /**\n * @description 设置 contentType 的渲染器\n * @param {string} contentType\n * 如果是 `TagContentType` 中的类型,将会覆盖掉插件内部默认的渲染器,\n * 如果是其他任意 string 如:'Foo',则可以将类似 `{id: 1, contentType: 'Foo', position: [0,0,0]}` 的 tag 交给插件渲染\n * @param config.usePoint 是否需要标签点, 默认为 false\n * @note 优先级低于 tag.element\n */\n public registerRenderer(contentType: string, renderer: ElementRenderer, config?: { usePoint?: boolean }) {\n this.rendererMap.set(contentType, { renderer, usePoint: config?.usePoint ?? false })\n }\n\n public bindRenderer(contentType: string, builtInRenderer: TagContentType) {\n this.contentTypeMap.set(contentType, builtInRenderer)\n }\n\n protected disposeAllCSS3DContainer() {\n for (const [, disposer] of this.store.css3DRenderDisposer) disposer?.forEach((d) => d?.())\n this.store.css3DRenderDisposer = new Map()\n }\n\n /**\n * @description 检查并销毁不用的3D贴片\n */\n protected clearUnusedPanelTag() {\n // 3D 转 2D 的时候要销毁 3D container\n this.filter2DPointTag.forEach((tag) => {\n tag.tag3DContentSvelte?.dispose()\n tag.tag3DContentSvelte = undefined\n })\n\n for (const [id, disposer] of this.store.css3DRenderDisposer) {\n const tag = this.getTagById(id)\n if (!tag || tag.stickType === '2DPoint') {\n disposer?.forEach((d) => d?.())\n this.store.css3DRenderDisposer.delete(id)\n }\n }\n }\n}\n","import safeObj from '../../shared-utils/safeObj'\nimport type PanoTagPluginController from '../controller'\nimport { addDebugPoints } from './addDebugPoints'\n\nexport class DebugUtil {\n public plugin: PanoTagPluginController\n\n public get debug() {\n return (this.plugin as any).debug as boolean\n }\n\n private logBound = false\n\n public constructor(plugin: PanoTagPluginController) {\n this.plugin = plugin\n }\n\n public addDebugPoints() {\n try {\n addDebugPoints(this.plugin.five, this.plugin.tags)\n } catch (error) {\n console.error(error)\n }\n }\n\n public bindLog() {\n if (this.logBound) return\n this.logBound = true\n\n this.bindLogByObject(this.plugin)\n this.bindLogByObject(this.plugin.constructor.prototype)\n }\n\n private log(functionName: string, ...args: any[]) {\n let stack = new Error().stack\n console.debug(\n `%cPanoTagPlugin%c${functionName}`,\n 'background-color: #35e0ed; color: black; padding:0 6px; border-radius: 3px',\n 'padding: 0 3px; color: #f3f47c',\n ...args,\n { stack },\n )\n }\n\n private bindLogByObject = (obj: any) => {\n Object.getOwnPropertyNames(obj).forEach((property) => {\n try {\n if (typeof obj[property] === 'function') {\n obj[property] = new Proxy(obj[property], {\n apply: (target, thisArg, argumentsList) => {\n if (!['render'].includes(property)) {\n this.log(property, { obj }, ...argumentsList)\n }\n return target.apply(thisArg, argumentsList)\n },\n })\n }\n } catch (error) {}\n })\n }\n\n private closeIntersectRaycaster() {\n this.plugin.tags.forEach((tag) => {\n if (safeObj(tag?.initialConfig?.visibleConfig).intersectRaycaster) {\n ;(tag.initialConfig.visibleConfig as any).intersectRaycaster.enabled = false\n }\n })\n this.plugin.changeGlobalConfig({\n visibleConfig: {\n intersectRaycaster: {\n enabled: false,\n },\n },\n })\n }\n}\n","/**\n * @description 获取文件路径后缀\n */\nexport function getUrlExt(url: string) {\n const ext = url.split('?')[0].split('.').pop()\n return ext ? ext.toLowerCase() : ''\n}\n","import type { Work } from '@realsee/five-webgpu'\nimport { transformPosition } from './transformPosition'\n\nexport default function getFloorIndex(work: Work, point: { y: number }) {\n if (!work) return 0\n const observer = work.observers\n if (!point || !observer) {\n console.error('getFloorIndex: invalid arguments: ', { point, observer })\n return 0\n }\n const floorY: number[][] = []\n observer.forEach((o) => {\n const floorIndex = o.floorIndex ?? (o as any).floor_index ?? 0\n if (!floorY[floorIndex]) floorY[floorIndex] = []\n floorY[floorIndex].push(transformPosition(o.position, work.options?.transform).y)\n })\n const floorAverageY = floorY.map((y) => y.reduce((a, b) => a + b, 0) / y.length)\n\n for (let i = floorAverageY.length - 1; i > 0; i--) {\n if (point.y >= floorAverageY[i]) return i\n }\n return 0\n}\n","import * as THREE from 'three/webgpu'\n\nexport type RaycasterStartPointMode = 'observer' | 'horizontal'\n\n/**\n * @description 计算碰撞检测射线的起点\n * @param observerPosition 观察点位置(全景态)或相机位置(模型态),含真实高度\n * @param checkPoint 检测点(标签中心点或角点)\n * @param mode\n * - `observer`:直接使用观察点位置,射线是斜的,可能从矮柜/栏杆上方越过\n * - `horizontal`:与检测点保持水平,y 取检测点高度、x/z 取观察点的值,\n * 用于判定「当前点位与检测点的水平连线是否被模型挡住」\n */\nexport function getRaycasterStartPosition(\n observerPosition: THREE.Vector3,\n checkPoint: THREE.Vector3,\n mode: RaycasterStartPointMode = 'observer',\n): THREE.Vector3 {\n if (mode !== 'horizontal') return observerPosition\n return new THREE.Vector3(observerPosition.x, checkPoint.y, observerPosition.z)\n}\n","import type { PlaybackManager } from '../../../shared-utils/playback'\nimport type { MountedComponent } from '../../../shared-utils/svelte/component.svelte'\nimport type { Mode, State as FiveState } from '@realsee/five-webgpu'\nimport type PanoTagPluginController from '..'\nimport type {\n ArrayPosition,\n BoxPosition,\n PolygonPosition,\n Position,\n StickType,\n Tag,\n TagClickParams,\n TagConfig,\n TagContentType,\n Tag as TagData,\n TagEvents,\n TagGLTFObject,\n TagId,\n} from '../..'\nimport { Subscribe } from '../../../shared-utils/Subscribe'\nimport { calculateTagConfig } from '../../utils/tag/calculateTagConfig'\nimport { getTagStickType } from '../../utils/tag/format'\nimport { isModelLike, isNil, isPanoramaLike, notNil, reblink, blink, uuid, lookPoint } from '../../../shared-utils'\nimport objectAssignDeep from 'object-assign-deep'\nimport { anyPositionToVector3 } from '../../../shared-utils/positionToVector3'\nimport { transformPosition } from '../../../shared-utils/five/transformPosition'\nimport * as THREE from 'three/webgpu'\nimport { checkRange, getTagCenterPosition, getTagPosition } from '../../utils'\nimport { centerPoint } from '../../../shared-utils/three/centerPoint'\nimport { isMediaModelTag, isMediaPlaneTag } from '../../utils/tag/tagCheck'\nimport { getUrlExt } from '../../../shared-utils/url/getUrl'\nimport getFloorIndex from '../../../shared-utils/five/getFloorIndex'\nimport type { ImagePlane, VideoPlane } from '../../utils/model/mediaPlane'\nimport safeObj from '../../../shared-utils/safeObj'\nimport { toArray } from '../../../shared-utils/util'\nimport { Cache } from '../../utils/Cache'\nimport type { BlinkOptions } from '../../../shared-utils/three/blink'\nimport type { Create3DDomContainerReturnType } from '../../../CSS3DRenderPlugin'\nimport type TagContentSvelte from '../../Components/Tag/index.svelte'\nimport type { PartialObjectDeep } from '../../../typings/typings'\nimport type { LiteralUnion } from 'type-fest'\nimport { vectorToCoordinates } from '../../../shared-utils/vectorToCoordinate'\nimport { _raycaster } from '../../../shared-utils/three/temp'\nimport { getRaycasterStartPosition } from '../../utils/tag/getRaycasterStartPosition'\nimport { withResolvers } from '../../../shared-utils/promise/withResolvers'\nimport type { CSS3DObjectPlus } from '../../../shared-utils/CSS3DRender/CSS3DObject'\nimport type { Rectangle } from '../../../Sculpt/Objects/Rectangle'\nimport type { FiveLine as Line } from '../../../shared-utils/five/FiveLine'\nimport type { Box } from '../../../Sculpt/Objects/Box'\nimport type { Polygon } from '../../../Sculpt/typings'\n\n/**\n * @description 标签实例\n * @property `id` 标签id\n * @property `contentType` 标签内容类型\n * @property `stickType` 标签附着点类型\n * @property `state` 标签状态\n * @property `centerPosition` 标签位置\n * @property `currentConfig` 当前配置\n * @property `hooks` 事件钩子\n * @property `plugin` 标签所属插件的实例\n * @function `enable()` 启用\n * @function `disable()` 禁用\n * @function `blink()` 闪烁\n * @function `unfold()` 展开\n * @function `fold()` 收起\n * @function `setData()` 修改标签数据\n * @function `setPosition()` 修改标签位置\n * @function `find()` 找到标签\n */\nexport abstract class BaseTag<C extends TagContentType = TagContentType, S extends StickType = StickType> implements Tag {\n public plugin: PanoTagPluginController\n\n public id: TagId\n\n public contentType: LiteralUnion<C, string>\n\n public stickType: S\n\n public enabled: boolean\n\n public config: TagConfig\n\n public data: Tag<C, S>['data']\n\n public get visible() {\n return this.temporaryState?.visible !== false && this.state.visible !== false && this.enabled !== false\n }\n\n public state: { visible: boolean; unfolded: boolean }\n\n public temporaryState: { visible: boolean } = { visible: true }\n\n public originPosition: Tag<C, S>['position']\n\n public position: Tag<C, S>['position']\n\n public fiveState?: Partial<FiveState>\n\n public model?: {\n promise: Promise<TagGLTFObject>\n object?: TagGLTFObject\n }\n\n public matrix?: number[]\n\n public screenPosition: { leftPx: number; topPx: number; scale: number } | null\n\n public normal?: Position\n\n public mediaPlane?: ImagePlane | VideoPlane\n\n public tagNormalLine: Line\n\n public hooks: Subscribe<TagEvents<C>>\n\n public zIndex?: number\n\n public manuallyOperated = false\n\n public normalLineLength?: number\n\n private mediaManagerOverride?: PlaybackManager\n private mediaManagerBindings = new Set<(host?: PlaybackManager) => void>()\n public get mediaManager(): PlaybackManager | undefined { return this.mediaManagerOverride ?? this.plugin.mediaManager }\n /** Bind this tag to a parent media task; undefined restores the plugin host. */\n public setMediaManager(host?: PlaybackManager) {\n if (host === this.mediaManagerOverride) return\n this.mediaManagerOverride = host\n this.mediaManagerBindings.forEach((bind) => bind(this.mediaManager))\n }\n public bindMediaManager(bind: (host?: PlaybackManager) => void): () => void {\n this.mediaManagerBindings.add(bind)\n return () => this.mediaManagerBindings.delete(bind)\n }\n public play?: (userAction?: boolean) => void\n public pause?: () => void\n\n public get five() {\n return this.plugin.five\n }\n\n public get fiveUtil() {\n return this.plugin.fiveUtil\n }\n\n public get workUtil() {\n return this.plugin.workUtil\n }\n\n public get centerPosition() {\n const tagPosition = getTagPosition(this)\n return centerPoint(...(Array.isArray(tagPosition) ? tagPosition : [tagPosition]))\n }\n\n public get currentConfig() {\n const config = calculateTagConfig(this, this.plugin.config, { useCache: true })\n const fiveMode = this.five.getCurrentState().mode\n const fiveModeConfig = config.configWithFiveMode?.[fiveMode]\n return fiveModeConfig ?? config ?? {}\n }\n\n public get currentVisible() {\n if (!this.plugin.state.enabled) return false\n if (!this.plugin.state.visible) return false\n\n if (!this.enabled) return false\n if (!this.state.visible) return false\n\n return true\n }\n\n public tag3DContentSvelte?: {\n svelteApp: MountedComponent<any>\n css3DInstance: CSS3DObjectPlus\n initialNormal: THREE.Vector3\n currentNormal: THREE.Vector3\n dispose: () => void\n }\n public rectanglePlane?: Rectangle\n public boxShape?: Box\n public polygonShape?: Polygon\n\n public dom?: HTMLDivElement\n public contentDom?: HTMLDivElement\n\n public initialConfig: TagData['config']\n private computedConfig: TagData['config'] & {\n configWithFiveMode?: Partial<Record<Mode, TagData['config']>>\n }\n\n /**\n * 存储当前的闪烁动画实例\n * @private\n */\n private _currentBlinkInstance?: any\n\n public cache: Cache\n\n public entryFromModel?: boolean\n\n public get sharedCache() {\n return this.plugin.cache\n }\n\n public _updating = false\n\n /**\n * 是否启用 hover 行为,默认 为config.popoverConfig.enabled\n */\n public hoverEnabled: boolean\n\n constructor(plugin: PanoTagPluginController, tagData: TagData) {\n this.plugin = plugin\n\n const stickType = getTagStickType(tagData)\n tagData.stickType = stickType\n\n // TODO: 这种方式有bug(initialData中设置的函数会不生效),不过目前不影响,后续得自己做一个 setObjectDefaultDeep 的方法,将initialData深度初始化到data中\n const freezeTagData = JSON.parse(JSON.stringify(tagData.data))\n const initialConfig = objectAssignDeep({}, tagData.config ?? {})\n const computedConfig = calculateTagConfig(tagData, plugin.config)\n const currentConfig = this.getConfig(tagData)\n\n tagData.config = currentConfig\n\n this.id = tagData.id ?? uuid()\n this.enabled = tagData.enabled ?? true\n\n this.contentType = tagData.contentType as any\n\n this.hoverEnabled = currentConfig.popoverConfig?.enabled ?? true\n\n this.data = currentConfig.initialData?.important\n ? objectAssignDeep(tagData.data, freezeTagData, currentConfig.initialData)\n : objectAssignDeep(tagData.data, currentConfig.initialData, freezeTagData)\n\n // 初始化 unfolded 状态,考虑 unfoldedConfig.keep 设置\n let initialUnfolded: boolean\n\n if (typeof currentConfig.unfoldedConfig === 'object') {\n if (currentConfig.unfoldedConfig.keep === 'unfolded') {\n initialUnfolded = true\n } else if (currentConfig.unfoldedConfig.keep === 'folded') {\n initialUnfolded = false\n } else {\n initialUnfolded = !this.can('fold') // 没有 keep 设置,根据能否折叠决定初始状态\n }\n } else {\n initialUnfolded = !this.can('fold') // 没有 unfoldedConfig 对象,根据能否折叠决定初始状态\n }\n\n this.state = {\n visible: undefined,\n unfolded: initialUnfolded,\n ...currentConfig.initialState,\n } as any\n\n // 若启用了 popoverConfig,则无论 unfoldedConfig.keep 如何设置,都强制 unfolded 为 false\n if (this.isPopoverConfigEnabled()) {\n this.state.unfolded = false\n }\n\n this.normalLineLength = tagData.style?.point?.normalLen\n this.originPosition = tagData.position as any\n\n this.position = (() => {\n const position = this.originPosition\n const matrix4 = plugin.workUtil.transform\n\n // 3DBox 类型特殊处理\n if (tagData.stickType === '3DBox') {\n // 如果没有 position,提供默认值兜底\n if (!position) {\n return {\n start: [0, 0, 0],\n end: [0, 0, 0],\n rotation: [0, 0, 0],\n } as any\n }\n const { start, end, rotation } = position as BoxPosition\n return {\n start: anyPositionToVector3(start.map((p: any) => Number(p))).toArray(),\n end: anyPositionToVector3(end.map((p: any) => Number(p))).toArray(),\n rotation: anyPositionToVector3(rotation.map((p: any) => Number(p))).toArray(),\n } as any\n }\n\n // Polygon 类型特殊处理\n if (tagData.stickType === 'Polygon') {\n // 如果没有 position,提供默认值兜底\n if (!position) {\n return [] as any\n }\n // 直接使用原始坐标,不进行转换\n return (position as PolygonPosition).map(anyPositionToVector3).map((p) => transformPosition(p, matrix4).toArray()) as any\n }\n\n if (!position) return\n\n let finalPosition = position\n if (Array.isArray(position) && position.length === 4) {\n finalPosition = position.map(anyPositionToVector3).map((p) => transformPosition(p, matrix4).toArray()) as any\n } else {\n finalPosition = transformPosition(anyPositionToVector3(position as Position), matrix4).toArray() as any\n }\n if (\n (tagData.stickType === '2DPoint' || tagData.stickType === '3DPoint') &&\n currentConfig?.tagNormalLineConfig?.enabled &&\n tagData.normal &&\n this.normalLineLength\n ) {\n const normalVector = new THREE.Vector3().fromArray(tagData.normal)\n finalPosition = new THREE.Vector3()\n .fromArray(finalPosition as Position)\n .clone()\n .add(normalVector.clone().setLength(this.normalLineLength))\n .toArray() as any\n }\n return finalPosition\n })()\n\n const modelMatrix = tagData.stickType === 'Model' ? (tagData as Tag<TagContentType, 'Model'>).matrix : undefined\n this.matrix = modelMatrix ? new THREE.Matrix4().fromArray(modelMatrix).premultiply(plugin.workUtil.transform).toArray() : undefined\n\n this.initialConfig = initialConfig\n this.computedConfig = computedConfig\n this.stickType = stickType as any\n this.config = tagData.config\n this.fiveState = tagData.fiveState\n this.normal = tagData.normal\n this.cache = new Cache()\n this.hooks = new Subscribe()\n\n Object.keys(tagData).forEach((key) => {\n if (this[key] === undefined && tagData[key] !== undefined) this[key] = tagData[key]\n })\n }\n\n /**\n * @description 使 state.visible 生效,但是只是加入渲染队列。等下次渲染时再真正生效\n */\n public applyVisible() {\n throw new Error('Method not implemented.')\n }\n\n /**\n * @description 找到标签\n */\n public async find(params?: { targetMode?: 'Panorama' | 'Mapview'; pointConfig?: Parameters<typeof lookPoint>[2] }) {\n const tagFiveState = this.fiveState\n if (!this.fiveState) return this\n\n const targetMode = params?.targetMode ?? this.five.state.mode\n\n if (targetMode === 'Panorama') {\n const targetPanoIndex = tagFiveState?.panoIndex\n if (isNil(targetPanoIndex)) return this\n\n const observerPosition = this.workUtil.getObserverPosition(targetPanoIndex)\n const vector = this.centerPosition.clone().sub(observerPosition).normalize()\n\n this.five.setState({\n mode: 'Panorama',\n workCode: this.workUtil.workCode,\n panoIndex: targetPanoIndex,\n ...vectorToCoordinates(vector),\n })\n await this.five.ready()\n } else if (targetMode === 'Mapview') {\n await lookPoint(this.five, this.centerPosition, params?.pointConfig)\n }\n\n return this\n }\n\n /**\n * @description 获取额外的闪烁目标(子类可以重写此方法添加额外的闪烁目标,如法线等)\n * @returns 额外的闪烁目标或目标数组,返回 null/undefined 表示没有额外目标\n */\n protected getAdditionalBlinkTargets(): any | any[] | null {\n return null\n }\n\n /**\n * @description 闪烁\n */\n public async blink(animeConfig?: BlinkOptions) {\n await this.ready()\n\n // 如果当前正在进行 blink 动画,先中断它\n if (this._currentBlinkInstance && !this._currentBlinkInstance.completed) {\n this._currentBlinkInstance.finish?.()\n this._currentBlinkInstance = undefined\n }\n\n const enabled = this.enabled ?? true\n const visible = this.state?.visible\n\n const tagVisible = enabled && visible\n\n // 看不到的标签要强行看到然后闪一下\n if (tagVisible === false) {\n this.state.visible = true\n this.enabled = true\n this.applyVisible()\n this.plugin.render()\n\n if (this.computeRenderType() !== 'Mesh') {\n // 等待dom更新\n await new Promise<void>((resolve) => {\n if (this.dom || this.contentDom) {\n resolve()\n return\n }\n const id = setInterval(() => {\n if (this.dom || this.contentDom) {\n resolve()\n clearInterval(id)\n }\n }, 16.7)\n })\n } else {\n // 等待mesh更新\n if (this.stickType === 'Model' && !this.model?.object) {\n await this.model?.promise\n } else if (this.stickType === 'Plane') {\n await new Promise<void>((resolve) => {\n if (this.mediaPlane) {\n resolve()\n return\n }\n const id = setInterval(() => {\n if (this.mediaPlane) {\n resolve()\n clearInterval(id)\n }\n }, 16.7)\n })\n }\n }\n if (this.dom) this.dom.style.visibility = 'hidden'\n if (this.contentDom) this.contentDom.style.visibility = 'hidden'\n }\n\n const tagDom: any[] = (() => {\n const list = []\n\n // 2d point\n list.push(this.dom)\n // 3d content\n list.push(this.tag3DContentSvelte?.css3DInstance?.container)\n\n list.push(this.model?.object)\n list.push(this.mediaPlane)\n list.push(this.boxShape)\n list.push(this.polygonShape)\n\n // 添加子类可以扩展的额外闪烁目标(如法线等)\n const additionalTargets = this.getAdditionalBlinkTargets()\n if (additionalTargets) {\n // 统一转换为数组后展开,避免嵌套数组\n const targets = Array.isArray(additionalTargets) ? additionalTargets : [additionalTargets]\n list.push(...targets)\n }\n\n return list.filter(Boolean)\n })()\n\n if (!tagDom.length) {\n console.warn('tagDom is empty')\n return\n }\n\n const blinkFunc = tagVisible ? blink : reblink\n\n // 存储当前动画实例\n this._currentBlinkInstance = blinkFunc(tagDom, {\n onStart: () => {\n if (tagVisible === false) {\n if (this.dom) this.dom.style.visibility = ''\n if (this.contentDom) this.contentDom.style.visibility = ''\n }\n },\n updateRender: () => {\n this.five.needsRender = true\n },\n ...animeConfig,\n })\n\n try {\n await this._currentBlinkInstance.finished\n } catch (error) {\n // 动画被中断时可能会抛出错误,这里捕获并忽略\n console.debug('Blink animation interrupted:', error)\n } finally {\n // 清理动画实例引用\n this._currentBlinkInstance = undefined\n }\n\n if (enabled === false) {\n this.enabled = false\n this.updateVisible()\n }\n if (visible === false) {\n this.updateVisible()\n }\n\n if (tagVisible === false) {\n if (this.dom) this.dom.style.visibility = ''\n if (this.contentDom) this.contentDom.style.visibility = ''\n }\n }\n\n /**\n * @description 展开\n */\n public unfold() {}\n\n /**\n * @description 展开自己,收起其他标签\n */\n public unfoldAndFoldOthers() {}\n\n /**\n * @description 收起\n */\n public fold() {}\n\n /**\n * @description 启用\n */\n public enable() {\n this.enabled = true\n this.hooks.emit('enable')\n this.five.needsRender = true\n this.applyVisible()\n }\n\n /**\n * @description 禁用\n */\n public disable() {\n this.enabled = false\n this.hooks.emit('disable')\n this.rectanglePlane?.delete()\n this.boxShape?.delete()\n this.polygonShape?.delete()\n this.five.needsRender = true\n this.applyVisible()\n }\n\n /**\n * @description 修改标签数据\n * @param deepMerge 是否深度合并 data,默认为 true\n */\n public setData(data: PartialObjectDeep<Tag<C>['data']>, deepMerge = true) {\n if (deepMerge) {\n this.data = objectAssignDeep(this.data, data)\n } else {\n this.data = { ...this.data, ...data }\n }\n this.hooks.emit('dataChanged', this.data)\n }\n\n /**\n * @description 修改标签位置\n */\n public setPosition(position: Tag<C>['position']) {\n throw new Error('Method not implemented.')\n }\n\n /**\n * @description 设置标签实例的属性\n * @param deepMerge 是否深度合并 data,默认为 true\n */\n public set(tag: PartialObjectDeep<Tag<C>>, deepMerge = true) {\n this.plugin.tagsLengthWillUpdate = true\n\n if (deepMerge) {\n objectAssignDeep(this, tag)\n } else {\n Object.assign(this, tag)\n }\n\n this.cache.clear()\n }\n\n public updateConfig() {\n const computedConfig = this.getConfig(undefined, { useCache: false })\n this.computedConfig = computedConfig\n\n const config = this.getConfig()\n this.config = config\n\n if (this.config.initialData) {\n const freezeTagData = JSON.parse(JSON.stringify(this.data))\n this.data = config.initialData?.important\n ? objectAssignDeep(this.data, freezeTagData, config.initialData)\n : objectAssignDeep(this.data, config.initialData, freezeTagData)\n }\n\n this.cache.clear()\n }\n\n public updateVisible() {\n if (!this.enabled) {\n this.applyVisible()\n } else {\n this.state.visible = this.getVisible()\n this.applyVisible()\n }\n this.five.needsRender = true\n this._updating = false\n }\n\n public updateZIndex() {\n const distance = this.getSquaredDistance()\n this.zIndex = Math.round((10000 - (distance ?? 0)) * 100)\n }\n\n public getConfig(tagData?: TagData, params?: { useCache?: boolean; fiveMode?: Mode }): TagConfig {\n const config = calculateTagConfig(tagData ?? this, this.plugin.config, { useCache: params?.useCache })\n const fiveMode = params?.fiveMode ?? this.five.getCurrentState().mode\n const fiveModeConfig = config.configWithFiveMode?.[fiveMode]\n return fiveModeConfig ?? config ?? {}\n }\n\n public getDistance(fiveState?: Partial<FiveState>, accurate = 3) {\n const state = { ...this.five.getCurrentState(), ...fiveState }\n const { panoIndex, mode } = state\n\n const cameraPosition = mode === 'Panorama' ? this.workUtil.getObserverPosition(panoIndex) : this.five.camera.position\n const tagPosition = this.centerPosition\n\n if (!cameraPosition || !tagPosition) return -1\n\n const distance = cameraPosition.distanceTo(tagPosition)\n\n return distance\n }\n\n /**\n * @description 用于排序的距离,性能更好\n */\n public getSquaredDistance() {\n const cameraPosition = this.five.camera.position\n\n // 处理 3DBox 类型\n if (this.stickType === '3DBox') {\n const boxPosition = this.position as any\n if (!boxPosition || !boxPosition.start) return Infinity\n // 使用 Box 的 start 点作为参考点\n const p = boxPosition.start\n return (p[0] - cameraPosition.x) ** 2 + (p[1] - cameraPosition.y) ** 2 + (p[2] - cameraPosition.z) ** 2\n }\n\n // 处理 Polygon 类型\n if (this.stickType === 'Polygon') {\n const polygonPosition = this.position as any[]\n if (!polygonPosition || polygonPosition.length === 0) return Infinity\n // 使用第一个点作为参考点\n const p = polygonPosition[0]\n return (p[0] - cameraPosition.x) ** 2 + (p[1] - cameraPosition.y) ** 2 + (p[2] - cameraPosition.z) ** 2\n }\n\n let p: ArrayPosition\n if (!this.position) {\n console.log(this, 'no position')\n }\n if (Array.isArray(this.position[0])) p = this.position[0] as ArrayPosition\n else p = this.position as ArrayPosition\n\n return (p[0] - cameraPosition.x) ** 2 + (p[1] - cameraPosition.y) ** 2 + (p[2] - cameraPosition.z) ** 2\n }\n\n public getVisible(fiveState?: Partial<FiveState>) {\n if (!this.enabled) return false\n if (!this.plugin.state.enabled) return false\n if (!this.fiveUtil.model) return false\n const state = { ...this.five.getCurrentState(), ...fiveState }\n let visible = this.cache.getVisible(this, state)\n if (isNil(visible)) {\n visible = this.computeVisible(state).value\n this.cache.setVisible(this, state, visible)\n }\n return visible\n }\n\n public getUnfoldedByPanoIndex(panoIndex?: number) {\n const visible = this.currentVisible\n if (!visible) return\n\n const unfolded = this.computeUnfoldedByPanoIndex(panoIndex)\n\n if (unfolded) {\n const unfoldedByCamera = this.getUnfoldedByCamera()\n return unfoldedByCamera\n }\n\n return unfolded\n }\n\n public getUnfoldedByCamera() {\n const visible = this.currentVisible\n if (!visible) return\n const unfolded = this.computeUnfoldedByCamera()\n return unfolded\n }\n\n public can(action: 'show' | 'hide' | 'fold' | 'unfold'): boolean {\n // popoverConfig.enabled 开启后,unfoldedConfig 失效\n if ((action === 'fold' || action === 'unfold') && this.currentConfig?.popoverConfig?.enabled === true) {\n return false\n }\n const config = this.currentConfig\n if (!config || typeof config !== 'object') return true\n if (action === 'show' || action === 'hide') {\n if (!config.visibleConfig || typeof config.visibleConfig !== 'object') return true\n if (action === 'show') {\n if (config.visibleConfig.keep === 'hidden') return false\n }\n if (action === 'hide') {\n if (config.visibleConfig.keep === 'visible') return false\n }\n }\n\n if (action === 'fold' || action === 'unfold') {\n if (!config.unfoldedConfig || typeof config.unfoldedConfig !== 'object') return true\n if (action === 'fold') {\n if (config.unfoldedConfig.keep === 'unfolded') return false\n }\n if (action === 'unfold') {\n if (config.unfoldedConfig.keep === 'folded') return false\n }\n }\n\n return true\n }\n\n public onClick(params: Pick<TagClickParams, 'target'>) {}\n\n public abstract computeNormal(): THREE.Vector3 | undefined\n\n public computeRenderType() {\n const renderType = (() => {\n if (this.stickType === '3DPoint') return 'Dom'\n\n const config = this.getConfig()\n if (!config || typeof config !== 'object' || !config.renderType) return\n // 如果是营销贴片,直接返回配置的renderType\n const media = this.data.mediaData\n if (!media || media.length === 0) {\n if (isMediaPlaneTag(this)) return config.renderType\n }\n\n if (config.renderType === 'Mesh') {\n if (isMediaPlaneTag(this)) {\n // 仅单张的营销贴片才能渲染成mesh\n if (media.length === 1) {\n if (media[0].type === 'Video') {\n // 啥比火狐\n const isMobileFirefox =\n navigator.userAgent.toLowerCase().indexOf('firefox') > -1 && navigator.userAgent.toLowerCase().indexOf('mobile') > -1\n if (isMobileFirefox) return 'Dom'\n return 'Mesh'\n }\n if (media[0].type === 'Image') {\n if (getUrlExt(media[0].url) === 'gif') return 'Dom'\n else return 'Mesh'\n }\n }\n } else if (isMediaModelTag(this)) {\n if (media.length === 1 && media[0].type === 'Image') {\n if (getUrlExt(media[0].url) === 'gif') return 'Dom'\n else return 'Mesh'\n } else {\n return 'BehindDom'\n }\n }\n }\n })()\n // 兜底值 'Dom', 防止返回 undefined\n return renderType ?? 'Dom'\n }\n\n protected computeVisible(_fiveState?: Partial<FiveState>) {\n const state = { ...this.five.getCurrentState(), ..._fiveState }\n const { panoIndex, mode } = state\n const checkedList: string[] = []\n\n const visible: { value: boolean; reason?: any } = (() => {\n const allConfig = this.getConfig()\n const config = allConfig.visibleConfig ?? {}\n if (typeof config === 'function') {\n return {\n value: config(this.five, { tag: this, distance: this.getDistance(state, undefined) }),\n checkedList,\n reason: 'config function result',\n }\n } else {\n if (config.keep === 'hidden') return { value: false, checkedList, reason: 'config.keep is hidden' }\n if (config.keep === 'visible') return { value: true, checkedList, reason: 'config.keep is visible' }\n\n // 可见 mode 检测\n const visible = this.computeVisibleByFiveMode(config, mode)\n if (visible?.value === false) return visible\n\n // 楼层检测\n if (\n config.followModelVisibility === true &&\n ['poincare', 'aerophoto', 'sand'].includes(this.workUtil.fromType) &&\n (mode === 'Floorplan' || mode === 'Mapview')\n ) {\n const { value: visible, ...info } = this.computeVisibleByFloorIndex()\n if (visible === false) return { value: false, checkedList, reason: 'followModelVisibility check failed', ...info }\n }\n\n // 点位检测\n if (isPanoramaLike(mode) && config.visiblePanoIndex !== undefined && config.visiblePanoIndex !== 'all') {\n if (panoIndex !== undefined) {\n checkedList.push('visiblePanoIndex')\n if (Array.isArray(config.visiblePanoIndex)) {\n if (!config.visiblePanoIndex.includes(panoIndex))\n return {\n value: false,\n checkedList,\n reason: `current panoIndex is not included in visiblePano. currentPanoIndex: ${panoIndex}, visiblePanoIndex: ${config.visiblePanoIndex}`,\n }\n }\n if (config.visiblePanoIndex === 'current') {\n if (panoIndex !== this.fiveState?.panoIndex)\n return {\n value: false,\n checkedList,\n reason: `current panoIndex is not equal to tag.panoIndex. currentPanoIndex: ${panoIndex}, tag.panoIndex: ${this.fiveState?.panoIndex}`,\n }\n }\n }\n }\n\n // 距离检测\n if (config.visibleDistance !== undefined) {\n checkedList.push('visibleDistance')\n if (config.visibleDistance !== 'unLimited') {\n const distance = this.getDistance(state, 1)\n const visible = checkRange(distance, config.visibleDistance)\n if (visible === false)\n return {\n value: false,\n checkedList,\n panoIndex,\n visibleDistance: config.visibleDistance,\n reason: `distance is not in visibleDistance. distance: ${distance}, visibleDistance: ${config.visibleDistance.min} - ${config.visibleDistance.max}`,\n }\n }\n }\n\n // // 角度检测\n // if (isPanoramaLike(mode) && config.angleRange && is3DTag(tag)) {\n // checkedList.push('angleRange')\n // const angle = this.getAngle(tag, panoIndex)\n // const visible = checkRange(angle, config.angleRange)\n // if (visible === false)\n // return { value: false, checkedList, reason: `angle is not in angleRange. angle: ${angle}, angleRange: ${config.angleRange}` }\n // }\n\n // 碰撞检测\n if (\n config.intersectRaycaster !== false &&\n (typeof config.intersectRaycaster !== 'object' || config.intersectRaycaster.enabled !== false)\n ) {\n checkedList.push('intersectRaycaster')\n if (panoIndex === undefined)\n return {\n value: false,\n checkedList,\n reason: `intersectRaycaster check failed: panoIndex is ${panoIndex}`,\n }\n\n // 水平射线模式下,站在标签自身绑定点位也可能被矮柜/隔断挡住,因此不跳过检测\n const skipWhenSamePano =\n typeof config.intersectRaycaster !== 'object' || config.intersectRaycaster.startPointMode !== 'horizontal'\n\n if (panoIndex === this.fiveState?.panoIndex && skipWhenSamePano) {\n checkedList.push('intersectCheckSkiped')\n } else {\n const intersectRes = this.computeVisibleByIntersect(panoIndex)\n if (intersectRes.value === false) return Object.assign(intersectRes, { checkedList })\n }\n }\n\n // 结束\n return {\n value: true,\n checkedList,\n reason: 'all check passed',\n }\n }\n })()\n\n return visible\n }\n\n /**\n * @description 计算标签可见性\n */\n protected computeVisibleByFiveMode(config: Exclude<Extract<TagConfig['visibleConfig'], Record<any, any>>, Function>, mode: Mode) {\n // 可见 mode 检测\n const getVisibleByFiveMode = () => {\n let visibleFiveMode = typeof config.visibleFiveMode === 'function' ? config.visibleFiveMode(this) : config.visibleFiveMode\n if (!visibleFiveMode) {\n visibleFiveMode = this.fiveState?.mode ?? (this.workUtil.observers.length ? 'Panorama' : 'ModelLike')\n }\n\n if (Array.isArray(visibleFiveMode)) {\n return visibleFiveMode.includes(mode)\n } else if (visibleFiveMode === 'ModelLike') {\n return isModelLike(mode)\n } else if (visibleFiveMode === 'PanoramaLike') {\n return !isPanoramaLike(mode)\n } else if (visibleFiveMode === 'all') {\n return true\n } else if (typeof visibleFiveMode === 'string' /** Match FiveMode */) {\n return visibleFiveMode === mode\n }\n }\n const visible = (() => {\n const visibleByFiveMode = getVisibleByFiveMode()\n\n if (notNil(this.fiveState?.panoIndex) && config.entryFromModel) {\n if (isModelLike(mode) && visibleByFiveMode) {\n // 模型态本来就能看到的标签,自有交互优先级是最高的,所以模型入口的交互不能开\n this.entryFromModel = false\n } else {\n this.entryFromModel = true\n }\n\n if (isModelLike(mode)) {\n return true\n }\n } else {\n this.entryFromModel = false\n }\n\n return visibleByFiveMode\n })()\n\n if (visible === false) {\n return {\n value: false,\n reason: 'current mode is not included in visibleFiveMode',\n visibleFiveMode: config.visibleFiveMode,\n mode,\n }\n }\n }\n\n /** 通过射线检测标签可用性 */\n protected computeVisibleByIntersect(\n panoIndex?: number,\n overrideConfig?: {\n checkPoints?: 'center' | 'corner' | THREE.Vector3[]\n needPassed?: number\n hideWhenModelNotLoaded?: boolean\n startPointMode?: 'observer' | 'horizontal'\n },\n ) {\n const intersectRaycasterConfig = {\n ...safeObj(safeObj(this.getConfig().visibleConfig ?? {}).intersectRaycaster),\n ...overrideConfig,\n }\n\n const fivePanoIndex = panoIndex ?? this.five.getCurrentState().panoIndex\n\n const startPosition = isPanoramaLike(this.five.getCurrentState().mode)\n ? this.workUtil.getObserverPosition(fivePanoIndex)\n : this.five.camera.position\n if (startPosition === undefined) return { value: false, reason: { type: 'startPosition is undefined', fivePanoIndex } }\n\n // 开关开启后:模型loaded 完成前标签直接判为不可见,等模型加载完成重算时再得出真实遮挡结果。\n if (intersectRaycasterConfig.hideWhenModelNotLoaded && this.fiveUtil.model?.loaded === false) {\n return { value: false, reason: { type: 'model not loaded', fivePanoIndex } }\n }\n\n // 获取检测点数组\n const checkPoints: THREE.Vector3[] = toArray(\n (() => {\n const configCheckPoints = intersectRaycasterConfig.checkPoints ?? 'center'\n if (configCheckPoints === 'center') return getTagCenterPosition(this)\n if (configCheckPoints === 'corner') return getTagPosition(this)\n if (Array.isArray(configCheckPoints)) return configCheckPoints\n else return []\n })(),\n )\n\n let passedCount = 0\n let unPassedCount = 0\n\n // 碰撞检测\n for (const checkPoint of checkPoints) {\n // horizontal 模式下射线与检测点保持水平,避免斜射线从矮柜/栏杆上方越过\n const rayStart = getRaycasterStartPosition(startPosition, checkPoint, intersectRaycasterConfig.startPointMode)\n const direction = new THREE.Vector3().subVectors(checkPoint, rayStart).normalize() // 向量相减得到相机到模型的射线\n\n let intersectionDistance: number | undefined\n _raycaster.set(rayStart, direction)\n const [intersection] = this.fiveUtil.model.intersectRaycaster(_raycaster)\n intersectionDistance = intersection?.distance\n\n const customModelIntersection = (() => {\n // TODO\n if (!isMediaModelTag(this)) return undefined\n // 如果是多媒体模型标签,需要检测自定义模型的模型碰撞\n const models = this.plugin.tags\n .filter(isMediaModelTag)\n .map((tag) => tag.model?.object)\n .filter(notNil)\n const [customModelIntersections] = _raycaster.intersectObjects(models, true)\n return customModelIntersections\n })()\n\n // 必须用与射线同源的起点,否则 horizontal 模式下命中距离与目标距离不同源,判定会错\n const distance = rayStart.distanceTo(checkPoint)\n\n // 距离误差值\n const distanceError = intersectRaycasterConfig.distanceAccuracy ?? 0.01\n intersectionDistance = Math.min(intersectionDistance ?? Infinity, customModelIntersection?.distance ?? Infinity)\n\n // 当前点检测是否通过\n const passed = intersectionDistance + distanceError >= distance\n if (passed) passedCount++\n else unPassedCount++\n\n // 是否可以结束碰撞检测\n const needPassed = intersectRaycasterConfig.needPassed ?? 1\n if (passedCount >= needPassed) return { value: true }\n }\n\n if (unPassedCount === 0) return { value: true }\n\n return {\n value: false,\n reason: {\n type: 'intersectRaycaster check failed',\n passedCount,\n needPassed: intersectRaycasterConfig.needPassed,\n model: this.fiveUtil.model.name,\n },\n }\n }\n\n protected computeVisibleByFloorIndex() {\n let floorIndex = 0\n const panoIndex = this.fiveState?.panoIndex\n if (panoIndex !== undefined) {\n floorIndex = this.workUtil.getObserver(panoIndex)?.floorIndex\n } else {\n floorIndex = getFloorIndex(\n this.workUtil.work,\n this.model?.object?.position ?? this.mediaPlane?.position ?? getTagCenterPosition(this),\n )\n }\n const currentFiveFloorIndex = this.fiveUtil.model.shownFloor\n return {\n value: currentFiveFloorIndex === null || currentFiveFloorIndex === floorIndex,\n currentFiveFloorIndex,\n tagFloorIndex: floorIndex,\n }\n }\n\n /**\n * @description 获取是否展开\n */\n protected computeUnfoldedByPanoIndex(panoIndex?: number) {\n const config = this.getConfig().unfoldedConfig\n if (!config) return\n if (typeof config === 'function') {\n return config(this.five, { tag: this, distance: this.getDistance({ panoIndex }) })\n } else {\n if (config.keep === 'folded') return false\n if (config.keep === 'unfolded') return true\n // 距离检测\n if (config.unfoldDistance) {\n const unfolded = checkRange(this.getDistance({ panoIndex }), config.unfoldDistance)\n if (unfolded === false) return false\n }\n }\n }\n\n // 该方法有很大优化空间,这个检测显示方法不应该挂在tagBase下,做了多次不必要计算(MinimumDistance,ScreenCenter)。\n protected computeUnfoldedByCamera() {\n // 模型态入口的标签不能展开\n if (this.entryFromModel && isModelLike(this.five.state.mode)) return false\n const config = this.getConfig().unfoldedConfig\n if (!config) return\n if (typeof config === 'function') {\n return config(this.five, { tag: this, distance: this.getDistance() })\n } else {\n if (config.keep === 'folded') return false\n if (config.keep === 'unfolded') return true\n if (typeof config !== 'object') return\n if (config.autoUnfold === undefined) return\n if (config.autoUnfold === false) return\n if (config.autoUnfold.enable === false) return\n if (!config.autoUnfold.strategy) return\n // 屏幕位置检测\n if (config.autoUnfold.strategy === 'ScreenPostion') {\n const project = this.computeTagProject()\n if (project) {\n const unfolded = checkRange(project.x, config.autoUnfold.autoUnfoldProjectX)\n if (unfolded === false) return false\n }\n }\n // 最近距离检测\n if (config.autoUnfold.strategy === 'MinimumDistance') {\n const pointTag = this.plugin.filterPointTag\n const sameStrategyTags = pointTag\n .filter((t) => t.currentVisible) // 筛选可见标签\n .filter((t) => {\n const project = this.computeTagProject()\n if (!project) return false\n const { x, y, z } = project\n return !(Math.abs(z) > 1 || Math.abs(x) > 1 || Math.abs(y) > 1)\n })\n .map((tag) => ({ tag, id: tag.id, tagConfig: tag.getConfig().unfoldedConfig }))\n .filter(({ tagConfig }) => {\n if (typeof tagConfig === 'function') return false\n // 不受一些固定unfold标签的影响\n if (tagConfig.keep) return false\n if (tagConfig.autoUnfold === false) return false\n if (tagConfig.autoUnfold?.enable === false) return false\n if (tagConfig.autoUnfold?.strategy !== 'MinimumDistance') return false\n return true\n }) // 筛选 MinimumDistance 标签\n .map((data) => ({ ...data, distance: data.tag.getDistance() })) // map\n .filter(({ distance, tagConfig }) => {\n const distanceRange = (tagConfig as any).autoUnfold.distance\n if (distanceRange) {\n const unfolded = checkRange(distance, distanceRange)\n if (unfolded === false) return false\n }\n return true\n }) // 过滤出要求距离的标签\n .sort((a, b) => a.distance - b.distance) // 距离排序\n const index = sameStrategyTags.findIndex((t) => t.id === this.id)\n if (index === -1) return false\n const unfolded = index <= (config.autoUnfold.maxNumber ?? 1) - 1\n if (unfolded === false) return false\n }\n if (config.autoUnfold.strategy === 'FoldWhenMove') {\n return false\n }\n // 屏幕中心检测\n if (config.autoUnfold.strategy === 'ScreenCenter') {\n const pointTag = this.plugin.filterPointTag\n const projScreenMatrix = new THREE.Matrix4()\n projScreenMatrix.multiplyMatrices(this.five.camera.projectionMatrix, this.five.camera.matrixWorldInverse)\n const frustum = new THREE.Frustum()\n frustum.setFromProjectionMatrix(projScreenMatrix, this.five.camera.coordinateSystem)\n const cameraDirection = this.five.camera.getWorldDirection(new THREE.Vector3())\n\n const sameStrategyTags = pointTag\n .filter((t) => {\n if (!t.currentVisible) return false\n const unfoldedConfig = t.getConfig().unfoldedConfig\n if (t.manuallyOperated) return false\n\n // 筛选 ScreenCenter 标签\n if (\n typeof unfoldedConfig !== 'object' ||\n unfoldedConfig?.autoUnfold === false ||\n unfoldedConfig?.autoUnfold?.strategy !== 'ScreenCenter'\n )\n return false\n if (unfoldedConfig.keep) return false\n if (unfoldedConfig.autoUnfold?.enable === false) return false\n\n // 标签是否在屏幕中\n const isInView = frustum.containsPoint(new THREE.Vector3().fromArray(t.position))\n if (!isInView) return false\n\n // 标签距离检测\n const distanceRange = unfoldedConfig.autoUnfold.distance\n\n if (distanceRange) {\n const distance = t.getDistance()\n const unfolded = checkRange(distance, distanceRange)\n if (unfolded === false) return false\n }\n\n return true\n })\n .sort((a, b) => {\n // 距离屏幕中心更近排序\n const aPoint = new THREE.Vector3().fromArray(a.position)\n const bPoint = new THREE.Vector3().fromArray(b.position)\n\n return (\n cameraDirection.angleTo(aPoint.sub(this.five.camera.position)) -\n cameraDirection.angleTo(bPoint.sub(this.five.camera.position))\n )\n })\n // 是否应该显示当前tag\n const index = sameStrategyTags.findIndex((t) => t.id === this.id)\n if (index === -1) return false\n const unfolded = index <= (config.autoUnfold.maxNumber ?? 1) - 1\n if (unfolded === false) return false\n }\n return true\n }\n }\n\n protected computeTagProject() {\n const centerPosition = this.centerPosition\n if (!centerPosition) return\n const { x, y, z } = centerPosition.project(this.five.camera)\n if (z > 1) return\n return { x, y, z }\n }\n\n protected addObjectClickHandler(tag: BaseTag, object: THREE.Object3D | undefined, handler: (event: Event) => any) {\n if (!object || !this.plugin.domEvents) return () => {}\n\n const getTagVisible = () => {\n if (!tag.currentVisible) return false\n if (tag['loading']) return false\n return true\n }\n\n const _handler = (event: any) => {\n if (!getTagVisible()) return false\n handler(event.origDomEvent)\n }\n\n this.plugin.domEvents.addEventListener(object, 'click', _handler)\n\n return () => {\n this.plugin.domEvents?.removeEventListener(object, 'click', _handler)\n }\n }\n\n public whyHide(this: BaseTag) {\n if (!this.plugin.state.enabled) {\n return { reason: `plugin.state.enabled is ${this.plugin.state.enabled}` }\n }\n\n if (!this.plugin.state.visible) {\n return { reason: `plugin.state.visible is ${this.plugin.state.visible}` }\n }\n\n if (!this.enabled) {\n return { reason: `tag ${this.id} enabled is: ${this.enabled}` }\n }\n\n const info = {\n ...this.computeVisible(),\n tagInstance: this,\n }\n\n if (info.value !== this.state.visible) {\n return { reason: '插件故障,请联系维护人员, err: 0', info }\n }\n\n if (!this.state.visible) {\n if (info.value === true) {\n return { reason: '插件故障,请联系维护人员, err: 1', info }\n } else {\n return { reason: info.reason.type ?? info.reason, info }\n }\n } else {\n return { reason: '应该是能看见才对', info }\n }\n }\n\n private ready = () => {\n const { promise, resolve } = withResolvers<void>()\n if (!this._updating) resolve()\n else {\n const id = setInterval(() => {\n if (!this._updating) {\n clearInterval(id)\n resolve()\n }\n }, 17)\n\n // 超时\n setTimeout(() => {\n clearInterval(id)\n resolve()\n }, 300)\n }\n\n return promise\n }\n\n /**\n * @description 销毁并移除\n */\n public destroy(notify = true) {\n const index = this.plugin.tags.findIndex((tag) => tag.id === this.id)\n if (index === -1) {\n console.warn(`Destroy failed: tag ${this.id} not found`)\n return\n }\n\n // 清理正在进行的闪烁动画\n if (this._currentBlinkInstance && !this._currentBlinkInstance.completed) {\n this._currentBlinkInstance.finish?.()\n this._currentBlinkInstance = undefined\n }\n\n this.disable()\n this.tag3DContentSvelte?.dispose?.()\n this.hooks.off()\n this.cache.clear()\n\n this.plugin.tags.splice(index, 1)\n\n if (notify) {\n this.plugin.tagsLengthWillUpdate = true\n this.plugin.hooks.emit('tagsLengthChange')\n }\n }\n\n /**\n * @description 判断 popover 是否在配置上启用(永久配置)\n */\n public isPopoverConfigEnabled(): boolean {\n return this.currentConfig?.popoverConfig?.enabled === true\n }\n\n /**\n * @description 判断当前标签是否允许临时 hover 弹出 popover(临时控制)\n */\n public isHoverEnabled(): boolean {\n if (this.plugin?.globalHoverEnabled === false) return false\n if (this.hoverEnabled === false) return false\n return true\n }\n}\n","import objectAssignDeep from 'object-assign-deep'\nimport type PanoTagPluginController from '..'\nimport type { ArrayPosition, Position, Tag, TagClickParams, TagContentType, Tag as TagData, TagInstance } from '../..'\nimport type { PartialObjectDeep } from '../../../typings/typings'\nimport { BaseTag } from './BaseTag'\nimport * as THREE from 'three/webgpu'\nimport { FiveLine as Line } from '../../../shared-utils/five/FiveLine'\nimport { anyPositionToVector3 } from '../../../shared-utils/positionToVector3'\nimport { transformPosition } from '../../../shared-utils/five/transformPosition'\n\nexport type PointTagInterface<C extends TagContentType = TagContentType> = TagInstance<C, '2DPoint' | '3DPoint'>\nconst _vector2 = new THREE.Vector2()\n\nexport class PointTag<C extends TagContentType = TagContentType> extends BaseTag<C, '2DPoint' | '3DPoint'> {\n private __Object__: any\n private requestIdleCallbackId?: number | undefined\n // icon 与线条端点的固定像素间距\n private iconPixelGap = 10\n\n // 优化:重用临时对象,避免频繁创建\n private _temp = {\n lineStart: new THREE.Vector3(), // 线条起点(project后会变成NDC)\n iconPos: new THREE.Vector3(), // icon位置(project后会变成NDC)\n screenDirPixel: new THREE.Vector2(), // 屏幕方向(normalize后会变成单位向量)\n targetNDC: new THREE.Vector2(), // 目标NDC坐标\n lineDir: new THREE.Vector3(), // 线条方向(计算w0时重用)\n lineEnd: new THREE.Vector3(), // 线条终点\n raycaster: new THREE.Raycaster(), // 射线投射器\n }\n // 用于变化检测的缓存值\n private _lastUpdateCache = {\n position: [0, 0, 0] as number[],\n screenLeft: 0,\n screenTop: 0,\n scale: 1,\n visible: false,\n }\n\n public constructor(plugin: PanoTagPluginController, tagData: TagData) {\n super(plugin, tagData)\n if (tagData.style?.point?.width) {\n const scale = tagData.style?.point?.scale ?? 1\n this.iconPixelGap = (tagData.style.point.width * scale * 1.4) / 2 + 2\n }\n if (tagData.contentType === 'Audio') {\n this.iconPixelGap = 34 / 2 + 2\n }\n this.initialTagLine()\n }\n\n public initialTagLine() {\n const config = this.config\n if (!this.five.renderer) return\n if (!config?.tagNormalLineConfig?.enabled || !this.normalLineLength) return\n const size = this.five.renderer.getSize(_vector2)\n const pixelRatio = this.five.renderer.getPixelRatio()\n const originPosition = transformPosition(anyPositionToVector3(this.originPosition as Position), this.plugin.workUtil.transform) as any\n this.tagNormalLine = new Line(new THREE.Vector3().fromArray(this.position), originPosition)\n this.tagNormalLine.points.visible = false\n this.tagNormalLine.setMaterial({\n color: new THREE.Color(1, 1, 1),\n linewidth: config?.tagNormalLineConfig?.lineWidth ?? 1.2,\n dashed: false,\n })\n // 设置材质属性以优化渲染\n this.tagNormalLine.line.material.transparent = true\n this.tagNormalLine.line.material.depthWrite = false\n this.tagNormalLine.line.material.depthTest = true // 启用深度测试,使线条在被模型遮挡时不显示\n this.tagNormalLine.line.material.dashed = false // 确保虚线关闭\n this.tagNormalLine.line.renderOrder = 2\n this.tagNormalLine.setResolution(size.width * pixelRatio, size.height * pixelRatio)\n this.tagNormalLine.visible = false\n this.tagNormalLine.name = `tagNormalLine-${this.id}`\n this.plugin.group.add(this.tagNormalLine)\n }\n /**\n * @description 展开自己,收起其他标签\n */\n public unfoldAndFoldOthers() {\n // 当 popoverConfig.enabled 为 true 时,展开/收起逻辑无效\n if (this.isPopoverConfigEnabled()) return\n\n // 先检查一下能不能打开/关闭\n const canFold = this.can('fold')\n const canUnfold = this.can('unfold')\n if (canFold && canUnfold) {\n // 展开/收起 点击的标签\n this.state.unfolded = !this.state.unfolded\n this.manuallyOperated = true\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n\n // 点开的话,收起其他标签\n if (this.state.unfolded) {\n this.plugin.tags.forEach((tag) => {\n if (tag.id === this.id) return\n tag.fold()\n })\n }\n }\n }\n\n public onClick(params: Pick<TagClickParams, 'target'>) {\n if (params.target !== 'TagPoint') return\n this.unfoldAndFoldOthers()\n }\n\n public applyVisible() {\n if (this.currentVisible) this.updateScreenPosition()\n if (this.tag3DContentSvelte?.css3DInstance) this.tag3DContentSvelte.css3DInstance.visible = this.visible\n this.tag3DContentSvelte?.svelteApp.update({\n state: this.plugin.state,\n temporaryState: this.temporaryState,\n })\n if (!this.tagNormalLine && this.normalLineLength) {\n this.initialTagLine()\n }\n if (this.tagNormalLine) {\n this.tagNormalLine.visible = this.visible\n }\n\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n }\n\n public unfold() {\n if (this.isPopoverConfigEnabled()) return\n this.setUnfold(true)\n }\n\n public fold() {\n if (this.isPopoverConfigEnabled()) return\n this.setUnfold(false)\n }\n\n /**\n * @description 展开/收起指定id的标签\n * @param {boolean} unfolded\n */\n public setUnfold(unfolded: boolean) {\n // 当 popoverConfig.enabled 为 true 时,展开/收起逻辑无效\n if (this.isPopoverConfigEnabled()) return\n\n const canFold = this.can('fold')\n const canUnfold = this.can('unfold')\n if (canFold && canUnfold) {\n this.state.unfolded = unfolded\n this.hooks.emit(unfolded ? 'unfolded' : 'folded')\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n } else {\n // console.warn(`tag ${this.id} cannot be ${unfolded ? 'unfolded' : 'folded'}`)\n }\n }\n\n public setPosition(position: ArrayPosition) {\n this.originPosition = position\n this.position = (() => {\n // const matrix4 = this.plugin.workUtil.transform\n let finalPosition = anyPositionToVector3(position as Position).toArray()\n // let finalPosition = transformPosition(anyPositionToVector3(position as Position), matrix4).toArray() as any\n if (this.normal && this.normalLineLength) {\n const normalVector = this.computeNormal()\n finalPosition = new THREE.Vector3()\n .fromArray(finalPosition)\n .clone()\n .add(normalVector.clone().setLength(this.normalLineLength))\n .toArray() as any\n }\n return finalPosition\n })()\n\n this.cache.clear()\n // 位置变化时重置缓存,强制下次更新法线\n this._lastUpdateCache.position = [0, 0, 0]\n\n this.updateVisible()\n\n this.updateScreenPosition()\n this.updateZIndex()\n\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n }\n /**\n * 更新标签连线的位置,使其端点与icon保持固定像素距离\n * 使用屏幕空间反投影方法,确保任意视角下都保持固定像素距离\n */\n private updateTagNormalLinePosition(params?: { force?: boolean }) {\n if (!this.screenPosition || !this.tagNormalLine) return\n const { force = false } = params ?? {}\n const visible = force ? this.state.visible : this.currentVisible\n\n // 标签不可见时跳过计算\n if (!visible) {\n this.tagNormalLine.visible = false\n return\n }\n // 变化检测:检查标签自身相关的值\n const cache = this._lastUpdateCache\n const visibleChanged = this.visible !== cache.visible\n\n if (!visibleChanged) {\n // 检查position\n const positionChanged =\n Math.abs(this.position[0] - cache.position[0]) > 0.001 ||\n Math.abs(this.position[1] - cache.position[1]) > 0.001 ||\n Math.abs(this.position[2] - cache.position[2]) > 0.001\n const screenChanged =\n Math.abs((this.screenPosition.leftPx ?? 0) - cache.screenLeft) > 0.5 ||\n Math.abs((this.screenPosition.topPx ?? 0) - cache.screenTop) > 0.5 ||\n Math.abs((this.screenPosition.scale ?? 1) - cache.scale) > 0.002\n // 如果都没有变化,跳过计算\n if (!positionChanged && !screenChanged) {\n return\n }\n }\n // 更新缓存\n cache.position = new THREE.Vector3().fromArray(this.position).toArray()\n cache.screenLeft = this.screenPosition.leftPx ?? 0\n cache.screenTop = this.screenPosition.topPx ?? 0\n cache.scale = this.screenPosition.scale ?? 1\n cache.visible = this.visible\n\n if (!this.five.renderer) return\n const rendererSize = this.five.renderer.getSize(_vector2)\n const originPosition = transformPosition(\n anyPositionToVector3(this.originPosition as Position),\n this.plugin.workUtil.transform,\n ).toArray() as any\n\n // 步骤1: 设置3D坐标\n this._temp.lineStart.fromArray(originPosition)\n this._temp.iconPos.fromArray(this.position)\n\n // 步骤2: 转换为NDC坐标(project会修改原对象,lineStart和iconPos现在存储的是NDC值)\n this._temp.lineStart.project(this.five.camera)\n this._temp.iconPos.project(this.five.camera)\n\n // 步骤3: 使用NDC坐标计算屏幕空间距离和方向\n this._temp.screenDirPixel.set(\n ((this._temp.iconPos.x - this._temp.lineStart.x) * rendererSize.x) / 2,\n ((this._temp.iconPos.y - this._temp.lineStart.y) * rendererSize.y) / 2,\n )\n const screenDistancePixel = this._temp.screenDirPixel.length()\n this._temp.screenDirPixel.normalize() // 修改原对象,变成单位向量\n\n // 步骤4: 计算目标NDC坐标(使用NDC坐标)\n // 当 simulate3D 为 true 时,标签会缩放,所以间距也需要同步缩放\n const scaledIconPixelGap = this.iconPixelGap * (this.screenPosition.scale ?? 1)\n this._temp.targetNDC.set(\n ((this._temp.iconPos.x * rendererSize.x) / 2 - this._temp.screenDirPixel.x * scaledIconPixelGap) / (rendererSize.x / 2),\n ((this._temp.iconPos.y * rendererSize.y) / 2 - this._temp.screenDirPixel.y * scaledIconPixelGap) / (rendererSize.y / 2),\n )\n\n // 步骤5: 构建射线\n this._temp.raycaster.setFromCamera(this._temp.targetNDC, this.five.camera)\n const ray = this._temp.raycaster.ray\n\n // 步骤6: 恢复3D坐标(因为后续计算需要原始的3D坐标,而project已经将lineStart和iconPos改成了NDC)\n\n this._temp.lineStart.fromArray(originPosition)\n this._temp.iconPos.fromArray(this.position)\n\n // 计算线条方向\n this._temp.lineDir.copy(this._temp.iconPos).sub(this._temp.lineStart).normalize()\n\n // 计算射线到线段的最近点(重用lineEnd存储w0,因为lineEnd此时还未使用)\n this._temp.lineEnd.copy(ray.origin).sub(this._temp.lineStart) // 重用lineEnd存储w0\n\n const a = ray.direction.dot(ray.direction) // 总是 1(归一化)\n const b = ray.direction.dot(this._temp.lineDir)\n const c = this._temp.lineDir.dot(this._temp.lineDir) // 总是 1(归一化)\n const d = ray.direction.dot(this._temp.lineEnd) // w0\n const e = this._temp.lineDir.dot(this._temp.lineEnd) // w0\n\n const denom = a * c - b * b\n let t_ray = 0\n if (Math.abs(denom) > 0.0001) {\n t_ray = (b * e - c * d) / denom\n }\n\n // 计算射线上的点\n this._temp.lineEnd.copy(ray.origin).add(ray.direction.multiplyScalar(Math.max(0, t_ray)))\n\n // 确保 lineEnd 在 lineStart 和 iconPos 之间\n const lineLength = this._temp.lineStart.distanceTo(this._temp.iconPos)\n const endDistance = this._temp.lineStart.distanceTo(this._temp.lineEnd)\n if (endDistance > lineLength) {\n // 如果超出范围,使用简单的比例缩放(使用缩放后的间距)\n const ratio = Math.max(0, 1 - scaledIconPixelGap / screenDistancePixel)\n this._temp.lineEnd.copy(this._temp.lineStart).lerp(this._temp.iconPos, ratio)\n }\n\n // 更新线条的端点\n this.tagNormalLine.setPoints(this._temp.lineStart, this._temp.lineEnd)\n this.tagNormalLine.visible = true\n }\n\n public updateScreenPosition(params?: { force?: boolean }) {\n if (this.stickType !== '2DPoint' && this.stickType !== '3DPoint') return\n\n const { force = false } = params ?? {}\n\n const visible = force ? this.state.visible : this.currentVisible\n\n // 下面这一坨东西是为了在带动画hide期间(1000ms),依然能够更新标签位置\n const __Object__ = this.__Object__ ?? {\n timeoutId: undefined,\n inAnimation: false,\n }\n this.__Object__ = __Object__\n if (!visible && this.screenPosition) {\n __Object__.inAnimation = true\n __Object__.timeoutId = setTimeout(() => {\n requestAnimationFrame(() => {\n const visible = this.currentVisible\n if (!visible) {\n __Object__.inAnimation = false\n this.screenPosition = null\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n }\n })\n }, 1000)\n } else {\n if (__Object__.timeoutId) {\n clearTimeout(__Object__.timeoutId)\n __Object__.inAnimation = false\n __Object__.timeoutId = undefined\n }\n }\n\n if (!visible && !__Object__.inAnimation) return\n\n const screenProject = this.computeTagProject()\n if (screenProject && this.five.renderer) {\n const scale = (() => {\n if (!this.currentConfig.simulate3D) return 1\n const distance = this.getDistance(undefined, 1)\n const sseDenominator = 2.0 * Math.tan(((0.5 * this.five.camera.fov) / 180) * Math.PI)\n return Math.max(Math.min(1 - (sseDenominator * distance) / 40, 1), 0.7)\n })()\n const rendererSize = this.five.renderer.getSize(_vector2)\n this.screenPosition = {\n leftPx: ((screenProject.x + 1) / 2) * rendererSize.x,\n topPx: ((-screenProject.y + 1) / 2) * rendererSize.y,\n scale,\n }\n // 更新法线位置\n this.updateTagNormalLinePosition({ force: params?.force })\n } else {\n this.screenPosition = null\n }\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n }\n\n public set(tag: PartialObjectDeep<Tag<C, '2DPoint' | '3DPoint'>>, deepMerge = true) {\n super.set(tag, deepMerge)\n\n this.normalLineLength = tag.style?.point?.normalLen ?? 0\n // 重置缓存,强制下次更新线条\n this._lastUpdateCache.position = [0, 0, 0]\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n if (tag.position) this.setPosition(this.position)\n }\n\n public setData(...data: Parameters<InstanceType<typeof BaseTag<C, '2DPoint' | '3DPoint'>>['setData']>) {\n super.setData(...data)\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n }\n\n public updateUnfoldedByPanoIndex() {\n // 当 popoverConfig.enabled 为 true 时,展开/收起逻辑无效\n if (this.isPopoverConfigEnabled()) return\n\n const unfolded = this.getUnfoldedByPanoIndex()\n if (!this.state) return\n if (unfolded !== undefined) {\n this.state.unfolded = unfolded\n }\n\n // 如果标签展开但不可见,就要判断 autoFoldWhenHide\n if (unfolded && !this.state.visible) {\n const config = this.getConfig()\n if (typeof config.unfoldedConfig === 'object' && config.unfoldedConfig.autoFoldWhenHide !== false) {\n this.state.unfolded = false\n }\n }\n }\n\n public computeNormal() {\n return new THREE.Vector3().fromArray(this.normal)\n }\n\n public removeTagNormalLine() {\n if (this.tagNormalLine) {\n this.plugin.group.remove(this.tagNormalLine)\n this.tagNormalLine.line.geometry.dispose()\n this.tagNormalLine.line.material.dispose()\n this.tagNormalLine.points.geometry.dispose()\n const pointMaterials = Array.isArray(this.tagNormalLine.points.material)\n ? this.tagNormalLine.points.material\n : [this.tagNormalLine.points.material]\n pointMaterials.forEach(material => material.dispose())\n this.tagNormalLine = null\n }\n }\n\n public override destroy(notify = true) {\n super.destroy(notify)\n this.removeTagNormalLine()\n }\n\n /**\n * @description 获取额外的闪烁目标,包括法线(如果有)\n */\n protected getAdditionalBlinkTargets(): any | any[] | null {\n // 如果有法线,将其添加到闪烁目标中(使用 line 对象,因为材质在 line.material 上)\n if (this.tagNormalLine?.line) {\n return this.tagNormalLine.line\n }\n return null\n }\n}\n","import type { Five } from '@realsee/five-webgpu'\nimport type { Matrix4, Quaternion } from 'three/webgpu'\nimport { Vector3 } from 'three/webgpu'\nimport { even } from '../even'\nimport OpacityMesh from './OpacityMesh'\nimport { centerPoint } from '../three/centerPoint'\nimport { isNil } from '..'\nimport { CSS3DObject } from '../three/CSS3DRenderer'\nimport { addBehindScene, addFrontScene, removeBehindScene, removeFrontScene } from '.'\n\n/**\n * @changelog\n * - 1: Fix rotate\n * - 0: Add `applyScaleMatrix4` method, Rewrite `applyQuaternion` and `applyMatrix4` method\n */\nconst VERSION = 1\n\nconst NAME = `CSS3DObject@${VERSION}`\n\nexport const MinRatio = 0.00216\n\nexport const DefaultRatio = 0.003\n\nexport type Mode = 'front' | 'behind'\n\nexport class CSS3DObjectPlus<T extends HTMLElement = HTMLElement> extends CSS3DObject {\n public version = VERSION\n public readonly isCSS3DObject: true = true\n public name: string = NAME\n\n /**\n * @description object dom\n */\n public container: T\n public width: number\n public height: number\n public domWidthPx: number\n public domHeightPx: number\n public cornerPoints: Vector3[]\n public centerPosition: Vector3\n public ratio: number\n public get mode() {\n return this._mode\n }\n public set mode(mode: 'front' | 'behind') {\n this._mode = mode\n if (this._opacityMesh) this._opacityMesh.visible = mode === 'behind'\n }\n private _mode: 'front' | 'behind' = 'front'\n\n private _opacityMesh: OpacityMesh\n\n public constructor(params: {\n container?: T\n five?: Five\n mode?: 'front' | 'behind'\n width?: number\n cornerPoints?: Vector3[]\n ratio?: number\n dpr?: number\n pointerEvents?: 'none' | 'auto'\n style?: Partial<CSSStyleDeclaration>\n }) {\n if (isNil(params.cornerPoints) && isNil(params.width)) {\n throw new Error('cornerPoints and width cannot be both empty')\n }\n const container = params.container ?? (document.createElement('div') as unknown as T)\n const cornerPoints =\n params.cornerPoints ??\n (() => {\n const halfWidth = params.width / 2\n return [\n new Vector3(-halfWidth, halfWidth, 0),\n new Vector3(-halfWidth, -halfWidth, 0),\n new Vector3(halfWidth, -halfWidth, 0),\n new Vector3(halfWidth, halfWidth, 0),\n ]\n })()\n const ratio = params.ratio ?? DefaultRatio\n const dpr = params.dpr ?? 1\n const pointerEvents = params.pointerEvents ?? 'auto'\n\n const realRatio = Math.max(MinRatio, ratio)\n const planeWidth = cornerPoints[0].distanceTo(cornerPoints[1])\n const planeHeight = cornerPoints[1].distanceTo(cornerPoints[2])\n let domWidthPx: number = even((planeWidth / ratio) * dpr)\n let domHeightPx: number = even((planeHeight / ratio) * dpr)\n const centerPosition = centerPoint(...cornerPoints)\n\n let css3DObjectElement: HTMLElement\n\n if (realRatio === ratio) {\n container.style.width = `${domWidthPx}px`\n container.style.height = `${domHeightPx}px`\n\n css3DObjectElement = container\n } else {\n // 兼容ratio小于0.00216的情况\n const element = document.createElement('div')\n element.style.width = `${domWidthPx}px`\n element.style.height = `${domHeightPx}px`\n element.style.pointerEvents = 'none'\n\n const scale = ratio / realRatio\n container.style.position = 'absolute'\n container.style.left = '0'\n container.style.top = '0'\n container.style.width = `${scale * domWidthPx}px`\n container.style.height = `${scale * domHeightPx}px`\n element.appendChild(container)\n\n css3DObjectElement = element\n }\n\n super(css3DObjectElement)\n\n css3DObjectElement.id = this.id.toString()\n\n // 注意设置pointerEvents要在super之后,否则会被覆盖\n container.style.pointerEvents = pointerEvents\n Object.assign(container.style, params.style)\n\n this.scale.set(realRatio, realRatio, realRatio)\n\n // set public property\n this.cornerPoints = cornerPoints\n this.ratio = ratio\n this.container = container\n if (params.mode) this.mode = params.mode\n\n if (realRatio === ratio) {\n this.width = planeWidth\n this.height = planeHeight\n this.centerPosition = centerPosition\n } else {\n const scale = ratio / realRatio\n\n this.width = scale * planeWidth\n this.height = scale * planeHeight\n domWidthPx = scale * domWidthPx\n domHeightPx = scale * domHeightPx\n this.centerPosition = new Vector3()\n .subVectors(centerPosition, cornerPoints[0])\n .multiplyScalar(scale)\n .add(cornerPoints[0])\n }\n\n this.domWidthPx = domWidthPx\n this.domHeightPx = domHeightPx\n // end\n\n container.classList.add(`${NAME}__container`)\n\n const targetVector01 = new Vector3().subVectors(cornerPoints[1], cornerPoints[0]) // 点0 -> 点1 的向量\n const targetVector03 = new Vector3().subVectors(cornerPoints[3], cornerPoints[0]) // 点0 -> 点3 的向量\n\n // 旋转法向量\n const targetNormal = new Vector3().crossVectors(targetVector01, targetVector03).normalize() // 旋转后的法向量\n this.lookAt(targetNormal)\n\n // 绕法向量旋转\n const up = this.up.clone().applyQuaternion(this.quaternion)\n const targetUp = targetVector03.clone()\n const rotateAxis = new Vector3().crossVectors(up, targetUp).normalize() // 计算旋转轴\n this.rotateOnWorldAxis(rotateAxis, up.angleTo(targetUp))\n\n // set position\n this.position.copy(centerPosition)\n\n this._opacityMesh = new OpacityMesh(domWidthPx, domHeightPx)\n this._opacityMesh.visible = params.mode === 'behind'\n this.add(this._opacityMesh)\n\n if (params.mode === 'front') {\n addFrontScene(this, undefined, params.five)\n } else if (params.mode === 'behind') {\n addBehindScene(this, undefined, params.five)\n }\n }\n\n public removeFromParent() {\n const parent = this.parent\n if (parent !== null) {\n parent.remove(this)\n }\n return this\n }\n\n public dispose() {\n this.container.remove()\n this.removeFromParent()\n if (this.mode === 'front') {\n removeFrontScene(this)\n } else if (this.mode === 'behind') {\n removeBehindScene(this)\n }\n }\n}\n","<script lang=\"ts\">\n import { linear } from 'svelte/easing'\n import { draw } from 'svelte/transition'\n import uuid from '../../../../shared-utils/uuid'\n\n export let inDelay = 0\n export let outDelay = 0\n export let duration = 1000\n export let unfolded: boolean\n export let length: number\n export let direction: 'vertical' | 'horizontal' = 'horizontal'\n export let useLinearColor = false\n export let color = 'white'\n\n $: isVertical = direction === 'vertical'\n $: width = length\n $: height = 1\n $: path = `M0.5 0.5 H ${length}`\n\n const defsID = uuid()\n</script>\n\n{#if width}\n <div class=\"line\" class:vertical={isVertical} class:horizontal={!isVertical} style:width={width + 'px'} style:height={height + 'px'}>\n <svg class=\"straight-line\" viewBox=\"0 0 {width} {height}\" preserveAspectRatio=\"none\">\n <defs>\n <linearGradient x1={0.5} y1={0.5} x2={width} y2={0.5} id={defsID} gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"25%\" stop-color={color} stop-opacity=\"1\" />\n <stop offset=\"100%\" stop-color={color} stop-opacity=\"0.5\" />\n </linearGradient>\n </defs>\n {#if unfolded}\n <path\n in:draw|local={{ duration, delay: inDelay, easing: linear }}\n out:draw|local={{ duration, delay: outDelay, easing: linear }}\n fill=\"none\"\n stroke={useLinearColor ? `url(#${defsID})` : color}\n stroke-width={1}\n d={path}\n />\n {/if}\n </svg>\n </div>\n{/if}\n\n<style lang=\"scss\">\n .line {\n position: absolute;\n pointer-events: none;\n &.vertical {\n transform: rotate(-90deg) translate3d(0.5px, 0, 10px);\n transform-origin: 0 0;\n }\n &.horizontal {\n transform: translate3d(0, -0.5px, 10px);\n }\n }\n .straight-line {\n display: block;\n width: 100%;\n height: 100%;\n overflow: visible;\n }\n</style>\n","<script lang=\"ts\">\n import { fade } from 'svelte/transition'\n\n export let inDelay = 1000\n export let outDelay = 1000\n export let visible = true\n export let width: number | string = 0\n export let height: number | string = 0\n export let left: number | string = 0\n export let bottom: number | string = 0\n export let center = false\n export let horizontalCenter = false\n export let verticalCenter = false\n export let round = false\n export let blurRadius: number\n export let spreadRadius: number\n export let opacity = 0.15\n\n export let zIndex = -1\n\n function px2rem(value: string | number) {\n return typeof value === 'number' ? value / 16 + 'rem' : value\n }\n</script>\n\n{#if visible}\n <div\n class=\"shadow\"\n style:width={px2rem(width)}\n style:height={px2rem(height)}\n style:z-index={zIndex}\n style={`\n left: ${px2rem(left)};\n bottom: ${px2rem(bottom)};\n border-radius: ${round ? '9999px' : '0'};\n box-shadow: 0 0 ${px2rem(blurRadius)} ${px2rem(spreadRadius)} rgba(0, 0, 0, ${opacity});\n ${horizontalCenter ? 'transform: translateX(-50%); left: 50%' : ''}\n ${verticalCenter ? 'transform: translateX(-50%); top: 50%' : ''}\n ${center ? 'transform: translate(-50%, -50%); left: 50%; top: 50%;' : ''}\n `}\n in:fade|local={{ duration: inDelay }}\n out:fade|local={{ duration: outDelay }}\n />\n{/if}\n\n<style>\n .shadow {\n position: absolute;\n }\n</style>\n","export function random() {\n return Math.random().toString(36).slice(-6)\n}\n\nconst RANDON_STRING = random()\n\nexport { RANDON_STRING }\n","<script lang=\"ts\">\n import { animate, stagger, type JSAnimation } from 'animejs'\n import { onDestroy } from 'svelte'\n import uuid from '../../../../shared-utils/uuid'\n import { notNil } from '../../../../shared-utils/isNil'\n import { searchFirstValueSmallThanLastValue } from '../../../utils'\n import { RANDON_STRING } from '../../../utils/constants'\n\n export let inDelay = 0\n export let outDelay = 0\n export let content: string\n export let unfolded: boolean\n export let isFistUnfoldedUpdate = true\n\n const __EmojiSplitFlag__ = `__EMOJI_SPLIT_${RANDON_STRING}__`\n const __EmojiFlag__ = `__EMOJI_${RANDON_STRING}__`\n const __SpaceFlag__ = `__SPACE_${RANDON_STRING}__`\n const __NewLineFlag__ = `__NEW_LINE_${RANDON_STRING}__`\n\n let timeoutID: NodeJS.Timeout\n let openAnimeIns: JSAnimation | undefined\n onDestroy(() => { clearTimeout(timeoutID); openAnimeIns?.cancel() })\n // v0.3.7 emoji support\n $: contentList = getContentList(content)\n let spanEleList: HTMLSpanElement[] = []\n\n function getContentList(content: string) {\n const result: { id: string; content: string }[] = []\n const emojiRegExp = new RegExp(\n /\\p{Regional_Indicator}\\p{Regional_Indicator}|\\p{Emoji}(\\p{Emoji_Modifier}+|\\uFE0F\\u20E3?)?(\\u200D\\p{Emoji}(\\p{Emoji_Modifier}+|\\uFE0F\\u20E3?)?)+|\\p{Emoji_Presentation}(\\p{Emoji_Modifier}+|\\uFE0F\\u20E3?)?|\\p{Emoji}(\\p{Emoji_Modifier}+|\\uFE0F\\u20E3?)/gu,\n )\n // const sentence =\n // 'A ticket to 大阪 costs ¥2000 👌. Repeated emojis: 😁😁. Crying cat: 😿. Repeated emoji with skin tones: ✊🏿✊🏿✊🏿✊✊✊🏿. Flags: 🇱🇹🏴󠁧󠁢󠁷󠁬󠁳󠁿. Scales ⚖️⚖️⚖️.'\n // console.info(sentence)\n // console.info(sentence.match(emojiRegExp))\n content\n .slice()\n .replace(emojiRegExp, (emoji) => `${__EmojiSplitFlag__}${__EmojiFlag__}${emoji}${__EmojiSplitFlag__}`)\n .split(__EmojiSplitFlag__)\n .forEach((item) => {\n if (item.startsWith(__EmojiFlag__)) return result.push({ id: uuid(), content: item.slice(__EmojiFlag__.length) })\n else\n return result.push(\n ...item\n .split('')\n .map((text) => {\n if (text === ' ') return __SpaceFlag__\n else if (text === '\\n') return __NewLineFlag__\n else return text\n })\n .map((content) => ({ id: uuid(), content })),\n )\n })\n return result\n }\n\n function doAnimation() {\n if (!openAnimeIns) return\n // 动画描述的是一个展开动画,如果当前是收起状态,应该执行反向动画\n const shouldAnimeReversed = !unfolded\n // 判断动画当前的反转状态是否符合预期,如果不符合,需要反转动画\n if (openAnimeIns.reversed !== shouldAnimeReversed) openAnimeIns.reverse()\n openAnimeIns.play()\n }\n\n function onUnfoldedUpdate(unfolded: boolean) {\n // 只希望在 unfolded 变化时执行动画,所以在第一次更新时不执行动画\n if (isFistUnfoldedUpdate) {\n isFistUnfoldedUpdate = false\n return\n }\n clearTimeout(timeoutID)\n timeoutID = setTimeout(doAnimation, unfolded ? inDelay : outDelay)\n }\n\n function initAnimation(spanEleList: HTMLSpanElement[]) {\n /** 计算第一行的最后一个字的index */\n const firstLineLastIndex = (function () {\n const resultIndex = searchFirstValueSmallThanLastValue(\n (index) => spanEleList[index]!.getBoundingClientRect().x,\n [Math.min(spanEleList.length - 1, 10), Math.min(spanEleList.length - 1, 30)],\n )\n if (resultIndex > 0) return resultIndex\n })()\n\n /** 文字依次从底部旋转出现\n * @member duration 单个文字的动画时间是 400ms\n * @member scale 大小缩放 [0.7 - 1]\n * @member rotate 旋转 [20 - 0]deg\n * @member opacity 透明度 [0 - 1]\n * @member translateX 水平方向位移 [4 - 0]px\n * @member translateY 水平方向位移 [10 - 0]px\n * @member delay 动画开始的延时是当前元素的索引 index * 50ms\n */\n const targets = spanEleList.slice(0, firstLineLastIndex).filter(notNil)\n openAnimeIns?.cancel()\n openAnimeIns = undefined\n // Svelte updates once before bind:this has populated the span elements.\n if (targets.length === 0) return\n openAnimeIns = animate(targets, {\n autoplay: false,\n duration: 400,\n scale: [0.7, 1],\n rotate: [20, 0],\n opacity: [0, 1],\n translateX: [4, 0],\n translateY: [10, 0],\n delay: stagger(50),\n ease: 'inOutCubic',\n })\n if (unfolded) openAnimeIns.seek(openAnimeIns.duration)\n }\n\n $: {\n onUnfoldedUpdate(unfolded)\n }\n\n $: {\n initAnimation(spanEleList.filter((ele) => !!ele))\n }\n</script>\n\n{#each contentList as { id, content }, index (id)}\n {#if content === __SpaceFlag__}\n <span bind:this={spanEleList[index]} class=\"text-char\">&nbsp;</span>\n {:else if content === __NewLineFlag__}\n <br />\n {:else}\n <span bind:this={spanEleList[index]} class=\"text-char\">{content}</span>\n {/if}\n{/each}\n\n<style>\n .text-char {\n display: inline-block;\n text-shadow: 2px 0px 8px rgba(0, 0, 0, 0.15);\n }\n</style>\n","<script lang=\"ts\">\n import { fade } from 'svelte/transition'\n import { Image_Arrow } from '../../Assets/Icon'\n import { cubicInOut } from 'svelte/easing'\n import Shadow from './Shadow.svelte'\n\n export let direction: 'left' | 'top' | 'right' | 'bottom' = 'right'\n export let visible = true\n export let duration = 0\n export let inDelay = 0\n export let outDelay = 0\n</script>\n\n{#if visible}\n <div class=\"arrow-wrapper\">\n <Shadow center blurRadius={9} spreadRadius={3} />\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div\n on:click\n in:fade|local={{ duration, delay: inDelay, easing: cubicInOut }}\n out:fade|local={{ duration, delay: outDelay, easing: cubicInOut }}\n class=\"arrow {direction}\"\n style=\"background-image: url({Image_Arrow});\"\n />\n </div>\n{/if}\n\n<style>\n .arrow {\n width: 100%;\n height: 100%;\n background-size: 100%;\n transition: transform 400ms ease-in-out;\n cursor: pointer;\n pointer-events: auto;\n }\n\n .arrow-wrapper {\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n .arrow.left {\n transform: rotate(0deg);\n }\n\n .arrow.right {\n transform: rotate(-180deg);\n }\n\n .arrow.top {\n transform: rotate(90deg);\n }\n\n .arrow.bottom {\n transform: rotate(-90deg);\n }\n</style>\n","\nexport default function doUtil<T = any>(func: () => T, util: (value: T) => boolean, duration = 20, times = 5): Promise<T> {\n return new Promise((resolve, reject) => {\n let count = 0\n const timer = setInterval(() => {\n const value = func()\n if (util(value)) {\n clearInterval(timer)\n resolve(value)\n } else if (count >= times) {\n clearInterval(timer)\n reject(value)\n }\n count++\n }, duration)\n })\n}\n","<script lang=\"ts\">\n import FlyText from './FlyText.svelte'\n import Arrow from '../Arrow.svelte'\n import doUtil from '../../../utils/doUtil'\n\n export let visible = false\n export let textUnfolded = false\n export let content: string\n\n let textElement: HTMLDivElement\n let translateY = 0\n let lineHeight = 0\n let textHeight = 0\n\n $: translateY = textUnfolded ? lineHeight - textHeight : 0\n $: transform = `translateY(${translateY}px)`\n $: arrowDirection = textUnfolded ? ('left' as const) : ('right' as const)\n $: foldTextDelay = textUnfolded ? 450 : 0\n\n $: {\n if (textElement && visible && content) {\n const { lineHeight: lineHeightString } = getComputedStyle(textElement)\n textHeight = textElement.offsetHeight\n doUtil(() => textElement?.offsetHeight, Boolean).then(() => {\n textHeight = textElement.offsetHeight\n })\n lineHeight = Number(lineHeightString.replace('px', ''))\n }\n }\n</script>\n\n{#if content}\n <div bind:this={textElement} class=\"text\" style:transform>\n <FlyText unfolded={visible} {content} inDelay={500} outDelay={foldTextDelay} />\n </div>\n{/if}\n{#if lineHeight < textHeight}\n <div class=\"arrow\">\n <Arrow direction={arrowDirection} {visible} inDelay={600} duration={1000} />\n </div>\n{/if}\n\n<style>\n .text {\n pointer-events: auto;\n box-sizing: border-box;\n display: inline-block;\n max-width: 120px;\n transition: transform 400ms ease-in-out;\n font-size: 12px;\n line-height: 18px;\n white-space: initial;\n cursor: pointer;\n }\n\n .arrow {\n pointer-events: auto;\n display: inline-block;\n vertical-align: top;\n width: 14px;\n height: 14px;\n margin-left: 2px;\n margin-top: 2px;\n }\n</style>\n","<script lang=\"ts\">\n import type { TagInstance } from '../../../typings'\n import Line from '../../Common/Line/Straight.svelte'\n import Shadow from '../../Common/Shadow.svelte'\n import FlyMText from '../../Common/Text/FlyMText.svelte'\n import { svelteResizeObserver } from '../../../../shared-utils/svelte/resizeObserver'\n\n export let tag: TagInstance<'Text'>\n\n let contentWidth: number\n let textUnfolded = false\n let textItems: { id: string; content: string }[] = []\n $: unfolded = !!tag.state?.unfolded\n $: title = tag.data.title ?? ''\n $: description = tag.data.description ?? ''\n $: content = (() => {\n if (title && description) return title + '\\n' + description\n if (title) return title\n if (description) return description\n })()\n\n // 收起的时候,如果文字展开了,要先下下去,再收起\n $: foldTextDelay = textUnfolded ? 450 : 0\n\n function toggleTextUnfolded() {\n textUnfolded = !textUnfolded\n }\n\n $: {\n if (!unfolded)\n setTimeout(() => {\n textUnfolded = false\n }, 20)\n }\n</script>\n\n{#if tag.state}\n <Shadow visible={unfolded} left={contentWidth / 2 + 'px'} bottom={12} width={2} blurRadius={120} spreadRadius={60} />\n <Line {unfolded} length={contentWidth} outDelay={foldTextDelay + 40 * Math.min(textItems[0]?.content.length ?? 10, 15)} useLinearColor />\n <div\n class=\"content\"\n use:svelteResizeObserver\n on:clientWidth={(e) => {\n contentWidth = e.detail\n }}\n on:click={toggleTextUnfolded}\n >\n <FlyMText visible={unfolded} {textUnfolded} {content} />\n </div>\n{/if}\n\n<style>\n .content {\n --height: 999px;\n width: max-content;\n height: var(--height);\n padding: calc(var(--height) - 18px) 4px 0 16px;\n position: absolute;\n left: 0;\n bottom: 0;\n overflow: hidden;\n box-sizing: border-box;\n font-size: 0;\n pointer-events: none;\n white-space: nowrap;\n font-weight: 600;\n }\n</style>\n","function px2rem(value: number | string): string\nfunction px2rem(value: number | string | undefined): string | undefined\nfunction px2rem(value?: number | string | undefined) {\n return typeof value === 'number' ? value / 16 + 'rem' : value\n}\n\nexport default px2rem\n","<script lang=\"ts\">\n import px2rem from '../../../utils/px2rem'\n\n export let maxLine: number | undefined | null = null\n export let maxWidth: number | null | undefined = null\n export let text: string | null | undefined = null\n export let edit: { inputting?: boolean; placeholder?: string } | null | undefined = null\n $: isEditing = typeof edit?.placeholder === 'string' || edit?.inputting\n</script>\n\n<div class=\"text\" style:max-width={typeof maxWidth === 'number' ? px2rem(maxWidth) : maxWidth} style:-webkit-line-clamp={maxLine}>\n {#if text}\n {text}\n {:else if isEditing}\n {#if edit?.inputting}\n <div class=\"caret\" />\n {/if}\n {#if typeof edit?.placeholder === 'string'}\n <span class=\"placeholder\">\n {edit.placeholder}\n </span>\n {/if}\n {:else}\n <slot />\n {/if}\n</div>\n\n<style lang=\"scss\">\n .text {\n display: -webkit-box;\n display: -ms-box;\n display: -moz-box;\n position: relative;\n width: max-content;\n max-width: 100%;\n -webkit-box-orient: vertical;\n -ms-box-orient: vertical;\n -moz-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n @keyframes blink {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n\n .caret {\n position: absolute;\n width: 1px;\n height: 100%;\n background-color: #fff;\n animation: blink 1.2s infinite;\n }\n\n .placeholder {\n opacity: 0.5;\n &:empty::after {\n content: ' ';\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { TagInstance } from '../../../typings'\n import Line from '../../Common/Line/Straight.svelte'\n import MText from '../../Common/Text/MText.svelte'\n\n export let tag: TagInstance<'Text'>\n\n $: unfolded = !!tag.state?.unfolded\n $: folded = !unfolded\n $: title = tag.data.title ?? ''\n $: descriptionMaxRows = tag.data.descriptionMaxRows ?? null\n $: titleMaxRows = tag.data.titleMaxRows ?? null\n</script>\n\n{#if tag.state}\n <Line {unfolded} direction=\"vertical\" length={15} duration={500} inDelay={200} useLinearColor />\n <div class=\"plane__container\" class:unfolded class:folded>\n <div class=\"plane__wrapper\" style:transform={unfolded ? 'translateY(-15px)' : 'translateY(0)'}>\n <div class=\"plane\">\n <div class=\"title\">\n <MText text={title} edit={tag.data.edit?.title} maxLine={titleMaxRows} />\n </div>\n {#if tag.data.description || tag.data.edit?.description}\n <div class=\"description\">\n <MText text={tag.data.description} edit={tag.data.edit?.description} maxLine={descriptionMaxRows} />\n </div>\n {/if}\n </div>\n </div>\n </div>\n{/if}\n\n<style lang=\"scss\">\n .plane__container {\n position: absolute;\n left: 50%;\n transform: translate(-50%, -100%);\n width: max-content;\n }\n\n .plane__wrapper {\n transition: transform 500ms linear, opacity 200ms linear;\n padding: 10px;\n background-color: rgba(0, 0, 0, 0.5);\n border: 0.5px solid rgba(255, 255, 255, 0.3);\n border-radius: 4px;\n }\n\n .unfolded .plane__wrapper {\n transition-delay: 200ms, 500ms;\n opacity: 1;\n }\n\n .folded .plane__wrapper {\n opacity: 0;\n }\n\n .plane {\n max-width: 188px;\n }\n\n .title {\n white-space: pre-wrap;\n font-weight: bold;\n font-size: 12px;\n line-height: 18px;\n }\n\n .description {\n margin-top: 4px;\n white-space: pre-wrap;\n font-size: 11px;\n line-height: 16px;\n }\n</style>\n","<script lang=\"ts\">\n import type { TagInstance } from '../../../typings'\n import TextTag from './TextTag.svelte'\n import TextPlaneTag from './TextPlaneTag.svelte'\n\n export let tag: TagInstance<'Text'>\n\n $: appearance = tag.data.appearance ?? 'line'\n</script>\n\n{#if appearance === 'line'}\n <TextTag {tag} />\n{:else if appearance === 'plane'}\n <TextPlaneTag {tag} />\n{/if}\n","<script lang=\"ts\">\n import uuid from '../../../../shared-utils/uuid'\n import { draw } from 'svelte/transition'\n import { cubicOut, cubicInOut } from 'svelte/easing'\n\n export let inDelay = 0\n export let duration = 1000\n export let outDelay = 0\n export let unfolded: boolean\n\n const defsID = uuid()\n</script>\n\n<svg class=\"line\" viewBox=\"0 0 105 21\">\n <defs>\n <linearGradient id={defsID} gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"25%\" stop-color=\"white\" stop-opacity=\"1\" />\n <stop offset=\"100%\" stop-color=\"white\" stop-opacity=\"0.5\" />\n </linearGradient>\n </defs>\n {#if unfolded}\n <path\n in:draw|local={{ duration, delay: inDelay, easing: cubicOut }}\n out:draw|local={{ duration, delay: outDelay, easing: cubicInOut }}\n fill=\"none\"\n stroke=\"url(#{defsID})\"\n stroke-width=\"1\"\n d=\"M0 21 L14 0.5 L105 0.5\"\n />\n {/if}\n</svg>\n\n<style>\n .line {\n width: 100%;\n height: 100%;\n overflow: visible;\n pointer-events: none;\n }\n</style>\n","<script lang=\"ts\">\n import type { Snippet } from 'svelte'\n let { children, onPageChange }: { children: Snippet; onPageChange: (index: number) => void } = $props()\n let element: HTMLDivElement\n let currentIndex = 0\n\n function updateIndex() {\n const nextIndex = Math.round(element.scrollLeft / Math.max(1, element.clientWidth))\n if (nextIndex === currentIndex) return\n currentIndex = nextIndex\n onPageChange(currentIndex)\n }\n\n export function goToNext() {\n const next = (currentIndex + 1) % Math.max(1, element.children.length)\n element.scrollTo({ left: next * element.clientWidth, behavior: 'smooth' })\n }\n</script>\n\n<div class=\"carousel\" bind:this={element} onscroll={updateIndex} role=\"region\" aria-label=\"媒体轮播\" tabindex=\"0\">\n {@render children()}\n</div>\n\n<style>\n .carousel {\n display: flex;\n width: 100%;\n height: 100%;\n overflow-x: auto;\n overscroll-behavior-x: contain;\n scroll-snap-type: x mandatory;\n scrollbar-width: none;\n }\n .carousel::-webkit-scrollbar { display: none; }\n .carousel > :global(*) { flex: 0 0 100%; width: 100%; scroll-snap-align: start; }\n</style>\n","<script lang=\"ts\">\n import type { PlaybackController, PlaybackSession, PlaybackManager } from '../../../shared-utils/playback'\n import type { ObjectFit, MediaData, MediaStore, TagHooks, TagInstance } from '../../typings'\n import { Image_Play_Icon_With_Text, Image_Play_Icon } from '../../Assets/Icon'\n import { getContext, onMount, onDestroy } from 'svelte'\n\n export let mediaInstance: { videoInstance?: HTMLVideoElement; paused: boolean; play?: (userAction?: boolean) => Promise<void>; pause?: () => void } = { videoInstance: undefined, paused: true }\n export let tag: TagInstance\n export let media: (MediaData & { name?: string }) | undefined\n export let playButtonIfNeed: 'withText' | 'withoutText' | string = 'withoutText'\n export let playButtonSizeIfNeed: 'large' | 'small' = 'small'\n export let canPlay = true\n export let autoplayVideo = false\n export let objectFit: ObjectFit = 'fill'\n export let disableVideoIfHavePoster = false\n\n let showPlayButton = true\n let playbackGeneration = 0\n let session: PlaybackSession | undefined\n let playbackController: PlaybackController | undefined\n const stopOutput = () => {\n playbackGeneration++\n session = undefined\n if (mediaInstance.videoInstance) { mediaInstance.videoInstance.muted = true; mediaInstance.videoInstance.pause() }\n mediaInstance.paused = true\n showPlayButton = true\n }\n const setMediaManager = (manager?: PlaybackManager) => {\n playbackController?.dispose()\n stopOutput()\n playbackController = manager?.createController({ label: 'tag-media', onCancel: stopOutput })\n }\n const cancel = () => { playbackController?.cancel(); stopOutput() }\n const finish = () => { session?.finish(); session = undefined }\n setMediaManager(tag?.mediaManager)\n const unbindMediaManager = tag.bindMediaManager(setMediaManager)\n const play = async (userAction = false) => {\n const video = mediaInstance.videoInstance\n if (!video) return\n const next = playbackController?.begin({ userAction, audible: true })\n if (playbackController && !next) return\n session = next\n const generation = ++playbackGeneration\n const operations = next?.bind(video) ?? video\n operations.muted = false\n try { await operations.play() } catch (error) {\n if (next?.signal.aborted || generation !== playbackGeneration || session !== next) return\n if ((error as Error).name === 'AbortError') { cancel(); return }\n cancel()\n throw error\n }\n }\n $: { mediaInstance.play = play; mediaInstance.pause = cancel }\n onDestroy(() => {\n unbindMediaManager()\n playbackController?.dispose()\n stopOutput()\n hooks.off('loadVideoFirstFrame', loadPoster)\n document.removeEventListener('WeixinJSBridgeReady', loadPoster)\n document.removeEventListener('touchstart', loadPoster)\n document.removeEventListener('click', loadPoster)\n })\n $: videoInstance = mediaInstance.videoInstance\n let videoPosterLoaded = false\n\n $: mediaUrl = media?.url\n\n function resetVideoPosterLoaded() {\n videoPosterLoaded = media?.type === 'Video' && Boolean(media.videoCoverUrl)\n }\n\n $: {\n const videoChanged = Boolean(mediaUrl)\n if (videoChanged) resetVideoPosterLoaded()\n }\n\n const mediaStore = getContext<MediaStore>('mediaStore')\n const hooks = getContext<TagHooks>('hooks')\n\n const loadPoster = () => {\n if (videoPosterLoaded) return\n if (!videoInstance) return\n videoInstance.muted = true\n videoInstance.play()\n videoInstance.pause()\n videoPosterLoaded = true\n }\n\n hooks.on('loadVideoFirstFrame', loadPoster)\n\n $: {\n if (videoInstance) showPlayButton = videoInstance.paused\n }\n\n onMount(() => {\n return mediaStore.subscribe(({ currentMediaElement }) => {\n if (currentMediaElement !== videoInstance) cancel()\n })\n })\n\n $: {\n if (media?.type === 'Video' && !videoPosterLoaded) {\n const isWX = navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1\n const isIOS = navigator.userAgent.toLowerCase().indexOf('iphone') !== -1\n const isIOSWX = isIOS && isWX\n // 兼容IOS微信\n if (videoInstance && isIOSWX) {\n if (videoInstance.paused) {\n document.removeEventListener('WeixinJSBridgeReady', loadPoster)\n document.removeEventListener('touchstart', loadPoster)\n document.removeEventListener('click', loadPoster)\n\n document.addEventListener('WeixinJSBridgeReady', loadPoster)\n document.addEventListener('touchstart', loadPoster)\n document.addEventListener('click', loadPoster)\n }\n }\n }\n }\n</script>\n\n{#if media}\n <div class=\"media-item\" draggable=\"false\">\n {#if media.type === 'Image'}\n <img class=\"media-content\" style:object-fit={objectFit} src={media.url} alt={media.name} draggable={false} />\n {:else if media.type === 'Video'}\n {#if disableVideoIfHavePoster && media.videoCoverUrl}\n <img class=\"media-content\" style:object-fit={objectFit} src={media.videoCoverUrl} alt={media.name} draggable={false} />\n {:else}\n <!-- video src '#t=0.1' 兼容 https://www.w3.org/TR/media-frags/ 3.2 Resolving URI fragments within the user agent -->\n <video\n class=\"media-content\"\n style:object-fit={objectFit}\n class:showPlayButton\n src={media.videoCoverUrl ? media.url : media.url + '#t=0.1'}\n poster={media.videoCoverUrl}\n preload={media.videoCoverUrl ? 'none' : 'auto'}\n disablePictureInPicture\n playsinline\n muted\n draggable={false}\n loop={false}\n crossorigin=\"\"\n autoplay={autoplayVideo}\n controls={false}\n on:play={(event) => {\n showPlayButton = false\n mediaInstance.paused = false\n videoPosterLoaded = true\n if (videoInstance) mediaStore.set({ currentMediaElement: videoInstance })\n hooks.emit('playStateChange', { event, state: 'playing', tag, mediaInstance: videoInstance })\n }}\n on:pause={(event) => {\n if (videoInstance?.paused) finish()\n showPlayButton = true\n mediaInstance.paused = true\n hooks.emit('playStateChange', { event, state: 'paused', tag, mediaInstance: videoInstance })\n }}\n on:error={(event) => {\n finish()\n showPlayButton = true\n mediaInstance.paused = true\n hooks.emit('playStateChange', { event, state: 'paused', tag, mediaInstance: videoInstance })\n }}\n on:ended={(event) => {\n finish()\n showPlayButton = true\n mediaInstance.paused = true\n hooks.emit('playStateChange', { event, state: 'paused', tag, mediaInstance: videoInstance })\n }}\n on:click={(event) => {\n cancel()\n }}\n bind:this={mediaInstance.videoInstance}\n />\n {/if}\n <div class=\"video-play-button-container\" class:showPlayButton>\n <div class=\"video-icon\" class:large={playButtonSizeIfNeed === 'large'} class:small={playButtonSizeIfNeed === 'small'}>\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div\n class=\"video-icon-img\"\n class:canPlay\n style=\"background-image: url({(() => {\n if (playButtonIfNeed === 'withText') return Image_Play_Icon_With_Text\n if (playButtonIfNeed === 'withoutText') return Image_Play_Icon\n return playButtonIfNeed\n })()});\"\n on:click={(event) => {\n if (!canPlay) return\n if (videoInstance) {\n play(true)\n }\n }}\n />\n </div>\n </div>\n {/if}\n </div>\n{/if}\n\n<style>\n .media-item {\n position: relative;\n height: 100%;\n }\n\n .media-content {\n position: relative;\n pointer-events: auto;\n width: 100%;\n height: 100%;\n user-select: none;\n object-fit: inherit;\n }\n\n .media-content.showPlayButton {\n pointer-events: none;\n }\n\n .video-icon {\n width: 200px;\n height: 100px;\n max-width: 60%;\n max-height: 60%;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n .video-play-button-container {\n display: none;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n transform: translate3d(0, 0, 0);\n }\n\n .video-play-button-container.showPlayButton {\n pointer-events: none;\n display: block;\n }\n\n .video-icon {\n pointer-events: auto;\n }\n\n .video-icon.large {\n width: 200px;\n height: 100px;\n }\n\n .video-icon.small {\n width: 28px;\n height: 28px;\n }\n\n .video-icon .video-icon-img {\n width: 100%;\n height: 100%;\n background-position: center center;\n background-size: contain;\n background-repeat: no-repeat;\n }\n .video-icon .video-icon-img.canPlay {\n cursor: pointer;\n }\n</style>\n","<script lang=\"ts\">\n import type { MediaData, TagInstance, MediaStore, TagHooks, TagClickParams } from '../../typings'\n import Carousel from './Carousel.svelte'\n import { fly } from 'svelte/transition'\n import { linear } from 'svelte/easing'\n import MediaItem from './MediaItem.svelte'\n import { onMount, onDestroy } from 'svelte'\n import { getContext, type ComponentProps } from 'svelte'\n\n export let tag: TagInstance\n export let mediaData: (MediaData & { name?: string })[]\n export let inDelay = 0\n export let outDelay = 0\n export let duration = 0\n export let unfolded = true\n export let animation = true\n export let mediaItemConfig: Partial<ComponentProps<typeof MediaItem>>\n export let enableCarousel = true\n export let autoplayConfig: {\n /** @description 是否自动播放视频 */\n autoplayVideo?: boolean\n /** @description 是否自动轮播 */\n autoplayCarousel?: boolean\n /** @description 轮播中遇到视频是否要自动播放 */\n autoplayVideoInCarousel?: boolean\n } = {}\n\n const { autoplayVideo = false, autoplayCarousel = true, autoplayVideoInCarousel = false } = autoplayConfig\n let mediaInstanceList: { paused: boolean; videoInstance?: HTMLVideoElement; play?: (userAction?: boolean) => Promise<void>; pause?: () => void }[] = []\n let currentIndex = 0\n let carousel\n let intervalId: number | null | NodeJS.Timer = null\n\n const hooks = getContext<TagHooks>('hooks')\n const mediaStore = getContext<MediaStore>('mediaStore')\n\n $: paused = mediaInstanceList.every((mediaInstance) => mediaInstance.paused)\n $: carouselEnabled = enableCarousel && mediaData?.length > 1\n $: mediaDataList = mediaData\n $: autoplay = mediaDataList.length > 1 && autoplayCarousel && paused\n\n function clickMedia() {\n const media = mediaInstanceList[currentIndex]\n const video = media?.videoInstance\n if (!video) return\n if (video.paused) {\n media.play?.(true)\n } else {\n media.pause?.()\n }\n }\n\n const onTagClick = (params: TagClickParams) => {\n if (!tag.tag3DContentSvelte?.css3DInstance || params.tag.id !== tag.id) return\n if (params.target === 'TagContent') clickMedia()\n }\n\n onMount(() => {\n hooks.on('click', onTagClick)\n\n tag.play = (userAction = false) => {\n const media = mediaInstanceList[currentIndex]\n const video = media?.videoInstance\n if (!video) return\n media.play?.(userAction)\n }\n\n tag.pause = () => {\n const media = mediaInstanceList[currentIndex]\n const video = media?.videoInstance\n if (!video) return\n media.pause?.()\n }\n\n intervalId = setInterval(() => {\n if (autoplay) carousel?.goToNext()\n }, 3000)\n })\n\n onDestroy(() => {\n clearInterval(intervalId as any)\n hooks.off('click', onTagClick)\n })\n\n</script>\n\n{#if unfolded}\n <div\n class=\"media-list-wrapper\"\n class:unfolded\n in:fly|local={animation ? { y: 4, duration, delay: inDelay, easing: linear } : undefined}\n out:fly|local={animation ? { y: 4, duration, delay: outDelay, easing: linear } : undefined}\n >\n <div class=\"media-list\" class:carouselEnabled>\n {#if carouselEnabled && mediaDataList.length > 1}\n <Carousel\n bind:this={carousel}\n onPageChange={(index) => {\n if (!paused) mediaStore.set({ currentMediaElement: null })\n currentIndex = index\n }}\n >\n {#each mediaDataList as media, index}\n <MediaItem {...mediaItemConfig} {media} {tag} bind:mediaInstance={mediaInstanceList[index]} />\n {/each}\n </Carousel>\n {:else}\n <MediaItem media={mediaData[0]} {autoplayVideo} {...mediaItemConfig} {tag} bind:mediaInstance={mediaInstanceList[0]} />\n {/if}\n </div>\n </div>\n{/if}\n\n<style lang=\"scss\">\n .media-list-wrapper {\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n border-radius: 2px;\n .media-list {\n position: relative;\n pointer-events: auto;\n height: 100%;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n :global(.sc-carousel__carousel-container),\n :global(.sc-carousel__content-container) {\n height: 100%;\n }\n }\n }\n\n // .media-list {\n // pointer-events: none;\n // &.carouselEnabled {\n // pointer-events: auto;\n // }\n // }\n\n</style>\n","<!-- 图文标签 -->\n<script lang=\"ts\">\n import type { TagInstance } from '../../typings'\n import FlyText from '../Common/Text/FlyText.svelte'\n import Line from '../Common/Line/Polyline.svelte'\n import Media from '../Common/Media.svelte'\n import Shadow from '../Common/Shadow.svelte'\n\n export let tag: TagInstance<'ImageText'>\n\n $: unfolded = tag.state ? tag.state.unfolded : false\n $: title = tag.data.title ?? ''\n $: content = (title.length ?? 0) > 7 ? title.substring(0, 6) + '...' : title\n $: mediaData = tag.data.mediaData\n</script>\n\n{#if tag.state}\n <Shadow visible={unfolded} left={61} bottom={57} width={2} blurRadius={150} spreadRadius={75} />\n <div class=\"line\">\n <Line {unfolded} outDelay={400} />\n </div>\n {#if content}\n <div class=\"text\">\n <FlyText {unfolded} {content} inDelay={500} />\n </div>\n {/if}\n {#if mediaData}\n <div class=\"media-wrapper\">\n <Media\n autoplayConfig={{ autoplayCarousel: false }}\n {unfolded}\n {mediaData}\n {tag}\n enableCarousel={false}\n mediaItemConfig={{ canPlay: false, playButtonSizeIfNeed: 'small', disableVideoIfHavePoster: true }}\n inDelay={500}\n duration={500}\n />\n </div>\n {/if}\n{/if}\n\n<style>\n .line {\n position: absolute;\n width: 105px;\n height: 21px;\n transform: translateY(-100%);\n }\n\n .text {\n position: absolute;\n width: 100px;\n left: 16px;\n bottom: 1px;\n font-weight: 600;\n }\n\n .media-wrapper {\n position: absolute;\n left: 14px;\n top: -85px;\n width: 90px;\n height: 60px;\n font-weight: 600;\n }\n</style>\n","export const MARKETING_MORE_ICON = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAOVBMVEUAAAD///////////////////////////////////////////////////////////////////////8KOjVvAAAAE3RSTlMAZV7nzWlZRTewq5CJUlEeHA4Lu1bjhwAAADRJREFUCNdjIAz4mFC4gtyMKHx+TlYUPgcLKp+RmQmVy4aiGFlSgAtZToiHF1kjOzsDUQAAVSIA07bTGZwAAAAASUVORK5CYII='\nexport const MARKETING_LIGHT_MORE_ICON = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAM1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjBUbJAAAAEXRSTlMAUUg+uqRVTBcKjop0bjUtK+w+Um4AAAA1SURBVAjXYyAMmNlRuJw8jCh8Di42FD4/KyqfkYUdlcuExBNgReZxcCPzOHmZkTXygXmEAQBMcAC8/O73cwAAAABJRU5ErkJggg=='\n","<!-- 营销标签 -->\n<script lang=\"ts\">\n import { notNil } from '../../../shared-utils'\n import type { TagInstance } from '../../typings'\n import px2rem from '../../utils/px2rem'\n import Shadow from '../Common/Shadow.svelte'\n import { svelteResizeObserver } from '../../../shared-utils/svelte/resizeObserver'\n import { MARKETING_LIGHT_MORE_ICON, MARKETING_MORE_ICON } from './Assets/marketingIcon'\n import MediaItem from '../Common/MediaItem.svelte'\n\n export let tag: TagInstance<'Marketing'>\n\n const SMALL_SCREEN_MAX_WIDTH = 499\n const SMALL_SCREEN_PANEL_WIDTH = 238\n const DEFAULT_PANEL_WIDTH = 280\n $: unfolded = tag.state?.unfolded ?? false\n $: folded = !unfolded\n $: data = tag.data\n $: havePrice = notNil(data.price?.value) && data.price?.value !== ''\n $: theme = tag.data.theme || 'light'\n $: isLight = theme === 'light'\n $: mediaData = data.mediaData\n $: showMedia = tag.config.popoverConfig?.showMedia === true\n\n const minTagWidth = 40\n\n let windowWidth = 0\n let tagsOffsetHeight: number\n\n $: isSmallScreen = windowWidth > 0 && windowWidth <= SMALL_SCREEN_MAX_WIDTH\n $: maxWidth = (() => {\n const limitWidth = tag.data.limitWidth ?? true\n if (typeof limitWidth === 'number') return limitWidth\n else if (limitWidth === true) return isSmallScreen ? SMALL_SCREEN_PANEL_WIDTH : DEFAULT_PANEL_WIDTH\n return undefined\n })()\n\n // 修复标签计算逻辑,避免循环更新\n let maxTagsLength = 0\n let tagsCalculated = false // 添加标志,防止反复计算\n\n $: {\n // 只有在未计算过或宽度变化时才重新计算\n if (!tagsCalculated || (maxWidth && maxWidth > 0)) {\n const calculatedWidth = maxWidth || 172\n maxTagsLength = Math.max(1, Math.floor((calculatedWidth - 20) / minTagWidth))\n\n // 只在初始化完成后才考虑高度因素\n if (tagsOffsetHeight !== undefined && tagsOffsetHeight > 40) {\n maxTagsLength = Math.max(1, maxTagsLength - 1)\n }\n\n // 标记已计算,避免频繁重新计算\n tagsCalculated = true\n }\n }\n\n // 独立的处理函数,避免在模板中直接修改状态\n function handleHeightChange(height: number) {\n // 添加防抖动逻辑,避免微小变化触发重新计算\n if (Math.abs(tagsOffsetHeight - height) > 5) {\n tagsOffsetHeight = height\n // 重置标志以允许重新计算,但不立即触发\n setTimeout(() => {\n tagsCalculated = false\n }, 100)\n }\n }\n\n // 优化标签过滤逻辑,固定长度避免抖动\n $: primaryTags = (data.brandTags || []).filter(Boolean).slice(0, maxTagsLength)\n $: secondaryTagsLimit = Math.max(0, maxTagsLength - primaryTags.length)\n $: secondaryTags = (data.tags || []).filter(Boolean).slice(0, secondaryTagsLimit)\n\n // 预计算动画时间以提高可维护性\n $: lineDelayUnfolded = 400\n $: lineDelayFolded = 180 + 500 - 500 - 40\n $: contentDelayUnfolded = 400 + 180\n\n // 添加缓存检查以避免不必要的CSS计算\n $: hasTags = primaryTags.length > 0 || secondaryTags.length > 0\n $: hasFooter = havePrice || data.highlightText\n $: hasMore = tag.config.popoverConfig.toolbar.showMore\n\n $: viewMoreText = (() => {\n if (notNil(tag.config.popoverConfig.viewMoreText) && tag.config.popoverConfig.viewMoreText.trim() !== '') {\n return tag.config.popoverConfig.viewMoreText\n }\n return '查看更多'\n })()\n\n // 大小点切换时长/线条开始生长时间\n const bigSmallDotChange = 400\n // 线条生长时长\n const lineGrow = 500\n // 线条开始生长后x秒标签开始出现\n const tagContentShowWhenLineStartGrow = 180\n // 标签出现时长\n const tagContentShow = 500\n\n // 添加辅助函数确保文本显示安全\n function safeHighlightText(text) {\n return text || ''\n }\n</script>\n\n<svelte:window bind:innerWidth={windowWidth} />\n\n<div class={`marketing ${theme}`} class:unfolded class:folded>\n <Shadow visible={unfolded} outDelay={500} left={61} bottom={87} blurRadius={150} spreadRadius={75} />\n <div class=\"line\" style:transition-delay={unfolded ? lineDelayUnfolded + 'ms' : lineDelayFolded + 'ms'} />\n <div\n class=\"content\"\n style:max-width={px2rem(maxWidth)}\n style:transition-delay={unfolded ? contentDelayUnfolded + 'ms' : '0ms'}\n style:border-top-left-radius={data.headerPictureUrl ? '0px' : '6px'}\n style:border-top-right-radius={data.headerPictureUrl ? '0px' : '6px'}\n >\n {#if data.headerPictureUrl}\n <img class=\"headerImage\" src={data.headerPictureUrl} alt=\"\" />\n {/if}\n <div class=\"content-wrapper\" style:padding-top={data.headerPictureUrl ? '10px' : '20px'}>\n <div class=\"title-wrapper\">\n <div class=\"title\">\n <div class=\"text\">{data.title}</div>\n </div>\n </div>\n {#if hasTags}\n <div class=\"tags-wrapper\">\n <div class=\"tags\" use:svelteResizeObserver on:clientHeight={(e) => handleHeightChange(e.detail)}>\n {#each primaryTags || [] as tag}\n <div style:min-width={minTagWidth} class=\"tag primary-tag\">{tag}</div>\n {/each}\n {#each secondaryTags || [] as tag}\n <div style:min-width={minTagWidth} class=\"tag secondary-tag\">{tag}</div>\n {/each}\n </div>\n </div>\n {/if}\n\n {#if showMedia && mediaData && mediaData.length > 0}\n <div class=\"media-wrapper\">\n <MediaItem media={mediaData[0]} {tag} objectFit=\"cover\" />\n </div>\n {/if}\n\n {#if data.description}\n <div class=\"description\">{data.description}</div>\n {/if}\n\n {#if havePrice || data.highlightText}\n <div class=\"price-wrapper\">\n <!-- 左侧价格部分 - 始终优先完整展示 -->\n {#if havePrice}\n <div class=\"price-section\">\n <span class=\"value\">{data.price.value}</span>\n {#if data.price.unit}\n <span class=\"unit\">{data.price.unit}</span>\n {/if}\n </div>\n {/if}\n\n <!-- 右侧高亮文本和箭头 - 只在没有价格时显示高亮文本 -->\n <div class=\"action-section\">\n {#if !havePrice && data.highlightText}\n <span class=\"highlight-text\">{data.highlightText}</span>\n {/if}\n </div>\n </div>\n {/if}\n\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n {#if hasMore}\n <div class=\"more-share-wrapper\">\n <div class=\"more-text\">\n {viewMoreText}\n {#if isLight}\n <img class=\"more-icon\" src={MARKETING_LIGHT_MORE_ICON} alt=\"查看更多\" />\n {:else}\n <img class=\"more-icon\" src={MARKETING_MORE_ICON} alt=\"查看更多\" />\n {/if}\n </div>\n </div>\n {/if}\n </div>\n </div>\n</div>\n\n<style lang=\"scss\">\n * {\n box-sizing: border-box;\n }\n\n .marketing {\n transform: translateY(-100%);\n .line {\n position: absolute;\n height: 30px;\n width: 1px;\n left: 50%;\n transform: translateX(-50%);\n background-color: white;\n bottom: 0;\n transform-origin: bottom;\n transition: all 500ms;\n }\n\n .content {\n position: relative;\n min-width: 120px;\n width: max-content;\n height: max-content;\n border-radius: 6px;\n top: -30px;\n left: -16px;\n transition-property: opacity, transform;\n transition-duration: 500ms;\n .headerImage {\n width: 100%;\n position: absolute;\n left: 0;\n top: 0;\n transform: translateY(-100%);\n border-top-left-radius: 6px;\n border-top-right-radius: 6px;\n }\n\n .content-wrapper {\n width: 100%;\n padding: 20px;\n }\n }\n }\n\n .title-wrapper {\n position: relative;\n width: 100%;\n .title {\n border-radius: 4px;\n width: 100%;\n .text {\n display: -webkit-box; // 必须设置为弹性盒子\n -webkit-box-orient: vertical; // 设置盒子方向为垂直\n -webkit-line-clamp: 2; // 限制显示4行\n line-clamp: 2;\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: normal;\n word-break: break-word;\n overflow-wrap: break-word;\n hyphens: auto;\n -webkit-hyphens: auto;\n letter-spacing: 0;\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n }\n }\n }\n\n .price-wrapper {\n box-sizing: border-box;\n width: 100%;\n margin-top: 8px;\n display: flex;\n justify-content: space-between; /* 左右两端对齐 */\n align-items: center;\n\n /* 价格部分 - 优先显示,不受挤压 */\n .price-section {\n flex-shrink: 0; /* 不缩小 */\n overflow: hidden; /* 溢出处理 */\n white-space: nowrap;\n\n .value {\n font-size: 20px;\n font-weight: 700;\n line-height: 24px;\n font-family: DINAlternate-Bold TG-TYPE, PingFangSC, Segoe UI, Rototo, sans-serif;\n letter-spacing: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .unit {\n font-size: 20px;\n font-weight: 700;\n line-height: 24px;\n font-family: DINAlternate-Bold TG-TYPE, PingFangSC, Segoe UI, Rototo, sans-serif !important;\n letter-spacing: 0;\n }\n }\n\n /* 高亮文本和箭头部分 */\n .action-section {\n display: flex;\n align-items: center;\n height: 18px;\n\n .highlight-text {\n font-size: 12px;\n line-height: 18px;\n font-weight: 400;\n letter-spacing: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 140px; /* 最大宽度限制 */\n }\n }\n }\n\n .tags-wrapper {\n position: relative;\n overflow: hidden;\n margin-top: 5px;\n .tags {\n position: relative;\n display: inline-flex;\n max-width: 100%;\n flex-wrap: wrap;\n .tag {\n display: block;\n text-align: center;\n flex-shrink: 0;\n flex-grow: 0;\n font-size: 12px;\n font-weight: 400;\n height: 18px;\n line-height: 18px;\n margin-right: 4px;\n margin-bottom: 4px;\n padding: 0 4px;\n border-radius: 2px;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n box-sizing: border-box;\n }\n }\n }\n\n .media-wrapper {\n margin-top: 6px;\n width: 100%;\n aspect-ratio: 16 / 9;\n border-radius: 4px;\n overflow: hidden;\n }\n\n .description {\n display: -webkit-box; // 必须设置为弹性盒子\n -webkit-box-orient: vertical; // 设置盒子方向为垂直\n -webkit-line-clamp: 4; // 限制显示4行\n line-clamp: 4;\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n overflow-wrap: break-word;\n hyphens: auto;\n -webkit-hyphens: auto;\n white-space: normal;\n margin-top: 4px;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: 0;\n }\n\n .more-share-wrapper {\n margin-top: 12px;\n display: block;\n width: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n justify-content: space-between;\n\n .more-text {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n justify-content: center;\n height: 20px;\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n letter-spacing: 0;\n .more-icon {\n margin-left: 2px;\n width: 14px;\n height: 14px;\n }\n }\n }\n\n .marketing {\n &.light {\n .content {\n background-color: white;\n .title-wrapper {\n .title {\n .text {\n color: rgba(0, 0, 0, 0.8);\n }\n }\n }\n .tags-wrapper {\n .tags {\n .primary-tag {\n background: rgba(234, 208, 154, 0.5);\n color: #946700;\n }\n .secondary-tag {\n background: rgba(0, 0, 0, 0.06);\n color: rgba(0, 0, 0, 0.5);\n }\n }\n }\n\n .description {\n color: #000;\n }\n .price-wrapper {\n color: #ae7900;\n }\n\n .more-share-wrapper {\n .more-text {\n font-family: PingFangSC-Medium;\n color: #000000d9;\n }\n }\n }\n }\n &.dark {\n .content {\n background-color: rgba(0, 0, 0, 0.75);\n .title-wrapper {\n .title {\n .text {\n color: white;\n }\n }\n }\n .tags-wrapper {\n .tags {\n .primary-tag {\n background: rgba(234, 208, 154, 0.5);\n color: white;\n }\n .secondary-tag {\n background: rgba(255, 255, 255, 0.15);\n color: rgba(255, 255, 255, 0.85);\n }\n }\n }\n\n .description {\n color: #fff;\n }\n .price-wrapper {\n color: #ead09a;\n fill: #ead09a;\n }\n\n .more-share-wrapper {\n .more-text {\n font-family: PingFangSC-Medium;\n color: #fff;\n }\n }\n }\n }\n }\n\n /** 动画 */\n .marketing {\n &.unfolded .line {\n transform: translateX(-50%) scale(1, 1);\n transition-timing-function: ease-out;\n }\n &.folded .line {\n transform: translateX(-50%) scale(1, 0);\n transition-timing-function: ease-in;\n }\n &.unfolded .content {\n opacity: 1;\n transform: translateY(0);\n transition-timing-function: ease-out;\n }\n &.folded .content {\n opacity: 0;\n transform: translateY(0.425rem);\n transition-timing-function: ease-in;\n }\n }\n\n /* 优化文本溢出处理 */\n .tag,\n .text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n</style>\n","/**\n * 音频诊断工具\n * 用于检测和诊断音频播放问题\n */\nexport class AudioDiagnostics {\n \n /**\n * 检查浏览器音频支持\n */\n static checkBrowserSupport(): {\n browser: string\n version: string\n supportedFormats: string[]\n warnings: string[]\n } {\n const userAgent = navigator.userAgent\n const audio = document.createElement('audio')\n \n // 检测浏览器\n let browser = 'Unknown'\n let version = 'Unknown'\n \n if (userAgent.includes('Edge/')) {\n browser = 'Microsoft Edge'\n version = userAgent.match(/Edge\\/(\\d+)/)?.[1] || 'Unknown'\n } else if (userAgent.includes('Chrome/')) {\n browser = 'Chrome'\n version = userAgent.match(/Chrome\\/(\\d+)/)?.[1] || 'Unknown'\n } else if (userAgent.includes('Firefox/')) {\n browser = 'Firefox'\n version = userAgent.match(/Firefox\\/(\\d+)/)?.[1] || 'Unknown'\n } else if (userAgent.includes('Safari/') && !userAgent.includes('Chrome')) {\n browser = 'Safari'\n version = userAgent.match(/Version\\/(\\d+)/)?.[1] || 'Unknown'\n }\n \n // 检查支持的格式\n const formats = [\n { name: 'MP3', mime: 'audio/mpeg' },\n { name: 'OGG', mime: 'audio/ogg' },\n { name: 'WAV', mime: 'audio/wav' },\n { name: 'M4A', mime: 'audio/mp4' },\n { name: 'AAC', mime: 'audio/aac' },\n { name: 'WEBM', mime: 'audio/webm' }\n ]\n \n const supportedFormats: string[] = []\n const warnings: string[] = []\n \n formats.forEach(format => {\n const canPlay = audio.canPlayType(format.mime)\n if (canPlay === 'probably') {\n supportedFormats.push(`${format.name} (完全支持)`)\n } else if (canPlay === 'maybe') {\n supportedFormats.push(`${format.name} (可能支持)`)\n warnings.push(`${format.name} 格式支持不确定,建议使用其他格式`)\n } else {\n warnings.push(`${format.name} 格式不被支持`)\n }\n })\n \n return {\n browser: `${browser} ${version}`,\n version,\n supportedFormats,\n warnings\n }\n }\n \n /**\n * 测试音频URL的可访问性\n */\n static async testAudioUrl(url: string): Promise<{\n accessible: boolean\n status?: number\n error?: string\n contentType?: string\n contentLength?: number\n }> {\n try {\n const response = await fetch(url, { method: 'HEAD' })\n \n return {\n accessible: response.ok,\n status: response.status,\n contentType: response.headers.get('content-type') || undefined,\n contentLength: parseInt(response.headers.get('content-length') || '0') || undefined\n }\n } catch (error) {\n return {\n accessible: false,\n error: error instanceof Error ? error.message : String(error)\n }\n }\n }\n \n /**\n * 尝试创建和测试音频元素\n */\n static async testAudioElement(url: string): Promise<{\n success: boolean\n error?: string\n canPlay?: string\n duration?: number\n networkState?: number\n readyState?: number\n }> {\n return new Promise((resolve) => {\n const audio = new Audio()\n let resolved = false\n \n const cleanup = () => {\n if (!resolved) {\n resolved = true\n audio.removeEventListener('loadedmetadata', onSuccess)\n audio.removeEventListener('error', onError)\n audio.removeEventListener('canplay', onCanPlay)\n }\n }\n \n const onSuccess = () => {\n cleanup()\n resolve({\n success: true,\n duration: audio.duration,\n networkState: audio.networkState,\n readyState: audio.readyState\n })\n }\n \n const onCanPlay = () => {\n cleanup()\n resolve({\n success: true,\n canPlay: 'canplay',\n duration: audio.duration,\n networkState: audio.networkState,\n readyState: audio.readyState\n })\n }\n \n const onError = () => {\n cleanup()\n resolve({\n success: false,\n error: audio.error ? `${audio.error.code}: ${audio.error.message}` : 'Unknown audio error',\n networkState: audio.networkState,\n readyState: audio.readyState\n })\n }\n \n // 设置事件监听器\n audio.addEventListener('loadedmetadata', onSuccess)\n audio.addEventListener('canplay', onCanPlay)\n audio.addEventListener('error', onError)\n \n // 超时处理\n setTimeout(() => {\n if (!resolved) {\n cleanup()\n resolve({\n success: false,\n error: '音频加载超时',\n networkState: audio.networkState,\n readyState: audio.readyState\n })\n }\n }, 10000) // 10秒超时\n \n // 开始加载\n audio.src = url\n audio.load()\n })\n }\n \n /**\n * 完整的音频诊断\n */\n static async diagnoseAudio(url: string): Promise<void> {\n console.group('🎵 音频诊断报告')\n \n // 1. 浏览器支持检查\n console.group('1. 浏览器支持检查')\n const browserSupport = this.checkBrowserSupport()\n console.log('浏览器:', browserSupport.browser)\n console.log('支持的格式:', browserSupport.supportedFormats)\n if (browserSupport.warnings.length > 0) {\n console.warn('警告:', browserSupport.warnings)\n }\n console.groupEnd()\n \n // 2. URL 检查\n console.group('2. 音频文件URL检查')\n console.log('音频URL:', url)\n \n try {\n new URL(url, window.location.href)\n console.log('✅ URL格式正确')\n } catch {\n console.error('❌ URL格式错误')\n console.groupEnd()\n console.groupEnd()\n return\n }\n \n // 检查文件扩展名\n const extension = url.split('.').pop()?.toLowerCase()\n if (extension) {\n console.log('文件扩展名:', extension.toUpperCase())\n const commonFormats = ['mp3', 'ogg', 'wav', 'm4a', 'aac', 'webm']\n if (commonFormats.includes(extension)) {\n console.log('✅ 文件格式常见')\n } else {\n console.warn('⚠️ 不常见的文件格式,可能存在兼容性问题')\n }\n }\n console.groupEnd()\n \n // 3. 网络可访问性测试\n console.group('3. 网络可访问性测试')\n const urlTest = await this.testAudioUrl(url)\n \n if (urlTest.accessible) {\n console.log('✅ 文件可访问')\n console.log('HTTP状态:', urlTest.status)\n if (urlTest.contentType) {\n console.log('内容类型:', urlTest.contentType)\n }\n if (urlTest.contentLength) {\n console.log('文件大小:', (urlTest.contentLength / 1024).toFixed(2), 'KB')\n }\n } else {\n console.error('❌ 文件无法访问')\n if (urlTest.status) {\n console.error('HTTP状态:', urlTest.status)\n }\n if (urlTest.error) {\n console.error('错误:', urlTest.error)\n }\n }\n console.groupEnd()\n \n // 4. 音频元素测试\n console.group('4. 音频元素测试')\n const audioTest = await this.testAudioElement(url)\n \n if (audioTest.success) {\n console.log('✅ 音频元素创建成功')\n if (audioTest.duration) {\n console.log('音频时长:', audioTest.duration.toFixed(2), '秒')\n }\n console.log('网络状态:', this.getNetworkStateDescription(audioTest.networkState))\n console.log('就绪状态:', this.getReadyStateDescription(audioTest.readyState))\n } else {\n console.error('❌ 音频元素创建失败')\n console.error('错误:', audioTest.error)\n console.log('网络状态:', this.getNetworkStateDescription(audioTest.networkState))\n console.log('就绪状态:', this.getReadyStateDescription(audioTest.readyState))\n }\n console.groupEnd()\n \n console.groupEnd()\n }\n \n private static getNetworkStateDescription(state?: number): string {\n switch (state) {\n case 0: return 'NETWORK_EMPTY - 音频元素尚未初始化'\n case 1: return 'NETWORK_IDLE - 音频元素处于活动状态但未使用网络'\n case 2: return 'NETWORK_LOADING - 浏览器正在下载数据'\n case 3: return 'NETWORK_NO_SOURCE - 未找到合适的音频源'\n default: return `未知状态 (${state})`\n }\n }\n \n private static getReadyStateDescription(state?: number): string {\n switch (state) {\n case 0: return 'HAVE_NOTHING - 没有音频数据'\n case 1: return 'HAVE_METADATA - 已获取元数据'\n case 2: return 'HAVE_CURRENT_DATA - 有当前播放位置的数据'\n case 3: return 'HAVE_FUTURE_DATA - 有足够的数据开始播放'\n case 4: return 'HAVE_ENOUGH_DATA - 有足够的数据流畅播放'\n default: return `未知状态 (${state})`\n }\n }\n} ","import type { PlaybackManager, PlaybackController, PlaybackSession } from '../../../shared-utils/playback'\nimport type { IAudio } from '../../../shared-utils/audio';\nimport { AudioNamespace, getAudio } from '../../../shared-utils/audio'\nimport { AudioDiagnostics } from './AudioDiagnostics'\n\n// 导出诊断工具供外部使用\nexport { AudioDiagnostics }\n\nconst AudioElement = (() => {\n if (typeof Audio === 'undefined') return class {} as new () => HTMLAudioElement\n return Audio\n})()\n\nexport class SharedAudio extends AudioElement {\n public get paused() {\n return this.sharedAudioPaused ?? true\n }\n public get currentTime() {\n return this.sharedAudioCurrentTime\n }\n public get duration() {\n return this.audioInstance?.duration || 0\n }\n\n private sharedAudioSrc?: string\n private sharedAudioPaused = true\n private sharedAudioCurrentTime = 0\n private tryplaying = false\n private audioInstance?: IAudio\n private eventListenerDisposer?: () => void\n\n private mediaManager?: PlaybackManager\n private controller?: PlaybackController\n private session?: PlaybackSession\n private playGeneration = 0\n private disposed = false\n private poolGeneration = -1\n\n public constructor(src?: string, mediaManager?: PlaybackManager) {\n super()\n this.setMediaManager(mediaManager)\n this.sharedAudioSrc = src\n \n // 预验证音频文件\n if (src) {\n this.validateAudioSource(src)\n }\n }\n\n public async play(userAction = false): Promise<void> {\n if (this.tryplaying || this.disposed) return\n const session = this.controller?.begin({ userAction, audible: true })\n if (this.controller && !session) return\n this.session = session\n const generation = ++this.playGeneration\n const current = () => generation === this.playGeneration && !session?.signal.aborted\n this.tryplaying = true\n if (!this.audioInstance || this.audioInstance.realSrc !== this.sharedAudioSrc || this.audioInstance.generation !== this.poolGeneration) {\n this.audioInstance = getAudio(this.sharedAudioSrc, { namespace: AudioNamespace.PlayAudio })\n this.poolGeneration = this.audioInstance.generation\n }\n const audio = this.audioInstance\n const poolGeneration = this.poolGeneration\n this.eventListenerDisposer?.()\n this.eventListenerDisposer = this.addEventListeners()\n const operations = session?.bind(audio) ?? audio\n const currentTime = this.currentTime ?? 0\n operations.currentTime = currentTime\n // 部分 iOS 机型在 loadeddata 前忽略 seek,播放就绪后恢复暂停位置。\n const restoreTimeAfterPlay = operations.currentTime !== currentTime\n try {\n operations.muted = false\n await operations.play()\n if (!current() || audio.generation !== poolGeneration) return\n if (restoreTimeAfterPlay) operations.currentTime = currentTime\n this.sharedAudioPaused = false\n } catch (error) {\n if (!current()) return\n if ((error as Error).name === 'AbortError') { this.pause(); return }\n this.controller?.cancel()\n this.stopOutput()\n this.handlePlayError(error)\n this.onerror?.(error)\n throw error\n } finally {\n if (audio.generation === poolGeneration) this.tryplaying = false\n }\n }\n\n public setMediaManager(manager?: PlaybackManager) {\n if (this.disposed || manager === this.mediaManager) return\n this.mediaManager = manager\n this.controller?.dispose()\n this.stopOutput()\n this.controller = manager?.createController({ label: 'tag-audio', onCancel: () => this.stopOutput() })\n }\n\n public pause(e?: Event): void { this.controller?.cancel(); this.stopOutput() }\n\n private stopOutput(): void {\n this.playGeneration++\n this.session = undefined\n this.tryplaying = false\n this.sharedAudioPaused = true\n this.eventListenerDisposer?.()\n this.eventListenerDisposer = undefined\n if (this.audioInstance?.generation === this.poolGeneration) {\n this.sharedAudioCurrentTime = this.audioInstance.currentTime\n this.audioInstance.muted = true\n this.audioInstance.pause()\n this.audioInstance.clear()\n }\n this.audioInstance = undefined\n this.onpause?.(new Event('pause'))\n }\n\n public dispose(): void { this.disposed = true; this.controller?.dispose(); this.stopOutput() }\n\n\n private handlePlayError(error: any): void {\n const userAgent = navigator.userAgent\n const audioSrc = this.sharedAudioSrc\n \n console.group('🎵 音频播放错误详情')\n console.error('错误对象:', error)\n console.error('错误名称:', error.name)\n console.error('错误信息:', error.message)\n console.error('音频文件路径:', audioSrc)\n console.error('浏览器信息:', userAgent)\n console.error('音频实例状态:', {\n exists: !!this.audioInstance,\n readyState: this.audioInstance?.readyState,\n networkState: this.audioInstance?.networkState,\n error: this.audioInstance?.error\n })\n \n // 根据错误类型提供具体的解决建议\n if (error.name === 'NotSupportedError') {\n if (error.message.includes('no supported source was found')) {\n console.error('❌ 错误原因: 无法找到支持的音频源')\n console.error('💡 可能的解决方案:')\n console.error(' 1. 检查音频文件路径是否正确')\n console.error(' 2. 检查音频文件是否存在')\n console.error(' 3. 检查音频文件格式是否被浏览器支持 (推荐: MP3, OGG, WAV)')\n console.error(' 4. 检查CORS设置,确保可以跨域访问音频文件')\n \n // 检查文件扩展名\n if (audioSrc) {\n const extension = audioSrc.split('.').pop()?.toLowerCase()\n const supportedFormats = ['mp3', 'ogg', 'wav', 'm4a', 'aac']\n if (extension && !supportedFormats.includes(extension)) {\n console.error(` ⚠️ 检测到不常见的音频格式: .${extension}`)\n console.error(` 📝 建议使用: ${supportedFormats.join(', ')}`)\n }\n }\n }\n } else if (error.name === 'AbortError') {\n console.error('❌ 错误原因: 音频播放被中断')\n } else if (error.name === 'NotAllowedError') {\n console.error('❌ 错误原因: 浏览器阻止了音频播放 (通常需要用户交互)')\n } else if (error.message === 'The operation is not supported.') {\n console.error('❌ 错误原因: 音频文件可能损坏或格式有问题')\n } else {\n console.error('❌ 未知的音频播放错误')\n }\n \n console.groupEnd()\n \n // 如果是严重错误,建议运行完整诊断\n if (error.name === 'NotSupportedError' && audioSrc) {\n console.error('💡 建议运行完整音频诊断来查找问题根源:')\n console.error(`AudioDiagnostics.diagnoseAudio(\"${audioSrc}\")`)\n \n // 自动运行诊断(仅在开发环境)\n if (process.env.NODE_ENV === 'development') {\n console.warn('🔍 自动运行音频诊断...')\n AudioDiagnostics.diagnoseAudio(audioSrc)\n }\n }\n }\n\n private validateAudioSource(src: string): void {\n // 快速检查URL格式\n try {\n new URL(src, window.location.href)\n } catch {\n console.warn('🎵 音频URL格式可能有问题:', src)\n // 如果URL有问题,立即运行完整诊断\n AudioDiagnostics.diagnoseAudio(src)\n return\n }\n\n // 检查文件扩展名\n const extension = src.split('.').pop()?.toLowerCase()\n const supportedFormats = ['mp3', 'ogg', 'wav', 'm4a', 'aac', 'webm']\n \n if (extension && !supportedFormats.includes(extension)) {\n console.warn('🎵 音频格式可能不被广泛支持:', extension)\n console.warn('💡 建议使用常见格式:', supportedFormats.join(', '))\n console.warn('💡 运行音频诊断:AudioDiagnostics.diagnoseAudio(\"' + src + '\")')\n }\n\n // 检查浏览器对该格式的支持\n this.checkBrowserSupport(extension)\n }\n\n private checkBrowserSupport(extension?: string): void {\n if (!extension) return\n\n const audio = document.createElement('audio')\n const mimeTypes: Record<string, string> = {\n 'mp3': 'audio/mpeg',\n 'ogg': 'audio/ogg',\n 'wav': 'audio/wav',\n 'm4a': 'audio/mp4',\n 'aac': 'audio/aac',\n 'webm': 'audio/webm'\n }\n\n const mimeType = mimeTypes[extension]\n if (mimeType) {\n const canPlay = audio.canPlayType(mimeType)\n if (canPlay === '') {\n console.warn(`🎵 当前浏览器可能不支持 ${extension.toUpperCase()} 格式`)\n console.warn('💡 建议提供多种格式的音频文件作为备选')\n } else if (canPlay === 'maybe') {\n console.info(`🎵 当前浏览器可能支持 ${extension.toUpperCase()} 格式 (不确定)`)\n } else {\n console.info(`🎵 当前浏览器支持 ${extension.toUpperCase()} 格式`)\n }\n }\n }\n\n private endedHandler(e?: Event): void {\n const audio = this.audioInstance\n const poolGeneration = this.poolGeneration\n const session = this.session\n this.playGeneration++\n this.session = undefined\n this.tryplaying = false\n this.eventListenerDisposer?.()\n this.eventListenerDisposer = undefined\n this.sharedAudioPaused = true\n this.sharedAudioCurrentTime = 0\n this.audioInstance = undefined\n session?.finish()\n if (audio?.generation === poolGeneration) audio.clear()\n // Consumers may synchronously replay here; no old cleanup may follow it.\n this.onended?.(e ?? new Event('ended'))\n }\n\n private addEventListeners() {\n const audio = this.audioInstance\n if (!audio) return\n const poolGeneration = this.poolGeneration\n\n const ontimeupdate = (e: Event) => {\n this.sharedAudioCurrentTime = audio.currentTime\n this.ontimeupdate?.(e)\n }\n const onplay = (e: Event) => {\n if (audio.isBlankAudio) return\n this.sharedAudioPaused = false\n this.onplay?.(e)\n }\n const ownsAudio = () => this.audioInstance === audio && audio.generation === poolGeneration\n const onpause = (e: Event) => {\n if (!ownsAudio() || !audio.paused || audio.ended) return\n this.pause(e)\n }\n const onended = (e: Event) => {\n if (ownsAudio() && audio.ended) this.endedHandler(e)\n }\n const onerror = (e: Event) => {\n if (!ownsAudio()) return\n this.controller?.cancel()\n // A manager may already have stopped this output in its cancel callback.\n if (ownsAudio()) this.stopOutput()\n if (!this.disposed && !this.audioInstance) this.onerror?.(e)\n }\n const oncanplay = (e: Event) => this.oncanplay?.(e)\n const oncanplaythrough = (e: Event) => this.oncanplaythrough?.(e)\n const onloadeddata = (e: Event) => this.onloadeddata?.(e)\n const onloadedmetadata = (e: Event) => this.onloadedmetadata?.(e)\n\n audio.addEventListener('timeupdate', ontimeupdate)\n audio.addEventListener('play', onplay)\n audio.addEventListener('pause', onpause)\n audio.addEventListener('ended', onended)\n audio.addEventListener('error', onerror)\n audio.addEventListener('canplay', oncanplay)\n audio.addEventListener('canplaythrough', oncanplaythrough)\n audio.addEventListener('loadeddata', onloadeddata)\n audio.addEventListener('loadedmetadata', onloadedmetadata)\n\n return () => {\n audio.removeEventListener('timeupdate', ontimeupdate)\n audio.removeEventListener('play', onplay)\n audio.removeEventListener('pause', onpause)\n audio.removeEventListener('ended', onended)\n audio.removeEventListener('error', onerror)\n audio.removeEventListener('canplay', oncanplay)\n audio.removeEventListener('canplaythrough', oncanplaythrough)\n audio.removeEventListener('loadeddata', onloadeddata)\n audio.removeEventListener('loadedmetadata', onloadedmetadata)\n }\n }\n}\n","<script lang=\"ts\">\n import type { TagHooks, MediaStore, TagInstance } from '../../typings'\n import { createEventDispatcher, getContext, onDestroy } from 'svelte'\n import { SharedAudio } from '../../utils/audio/SharedAudio'\n\n export let url: string\n export let enable = true\n export let style = ''\n export let hooksInfo: {\n tag: TagInstance\n }\n\n const dispatch = createEventDispatcher<{\n audioRef: SharedAudio\n duration: number\n play: undefined\n pause: undefined\n timeupdate: number\n }>()\n const hooks = getContext<TagHooks>('hooks')\n const mediaStore = getContext<MediaStore>('mediaStore')\n\n let unbindMediaManager: (() => void) | undefined\n let audioRefTimeout: ReturnType<typeof setTimeout> | undefined\n let audioUrl: string | undefined\n let audioTag: TagInstance | undefined\n let audio: SharedAudio\n let audioPaused = true\n\n $: {\n if (!url) dispatch('duration', 0)\n }\n\n function addAudioEventListener(instance: SharedAudio, ownerTag: TagInstance) {\n const eventInfo = () => hooksInfo?.tag === ownerTag ? hooksInfo : { tag: ownerTag }\n instance.onplay = (event) => {\n hooks.emit('playStateChange', { event, state: 'playing', mediaInstance: instance, ...eventInfo() })\n dispatch('play')\n audioPaused = false\n }\n instance.onpause = (event) => {\n hooks.emit('playStateChange', { event, state: 'paused', mediaInstance: instance, ...eventInfo() })\n dispatch('pause')\n audioPaused = true\n }\n instance.onended = (event) => {\n hooks.emit('playStateChange', { event, state: 'paused', mediaInstance: instance, ...eventInfo() })\n dispatch('pause')\n audioPaused = true\n }\n instance.onloadedmetadata = (event) => {\n if (typeof instance.duration === 'number' && !Number.isNaN(instance.duration)) dispatch('duration', instance.duration)\n }\n instance.onerror = (event) => {\n dispatch('pause')\n audioPaused = true\n }\n instance.ontimeupdate = (event) => {\n dispatch('timeupdate', instance.currentTime)\n }\n }\n\n const unsubscribeMedia = mediaStore.subscribe(({ currentMediaElement }) => {\n if (currentMediaElement !== audio) {\n if (!audioPaused) audio?.pause()\n }\n })\n\n $: {\n if (!enable) audio?.pause()\n }\n\n $: {\n const playing = enable && !audioPaused\n playing ? dispatch('play') : dispatch('pause')\n }\n\n function releaseAudio() {\n clearTimeout(audioRefTimeout)\n audioRefTimeout = undefined\n unbindMediaManager?.()\n unbindMediaManager = undefined\n audio?.dispose()\n }\n\n function syncAudio(source: string, tag: TagInstance) {\n // Render updates pass a fresh hooksInfo wrapper for the same tag each frame.\n if (audio && source === audioUrl && tag === audioTag) {\n audio.setMediaManager(tag?.mediaManager)\n return\n }\n releaseAudio()\n const instance = new SharedAudio(source, tag?.mediaManager)\n audio = instance\n audioUrl = source\n audioTag = tag\n unbindMediaManager = tag?.bindMediaManager((host) => instance.setMediaManager(host))\n addAudioEventListener(instance, tag)\n dispatch('audioRef', instance)\n audioRefTimeout = setTimeout(() => {\n if (audio === instance) dispatch('audioRef', instance)\n }, 200)\n }\n\n $: syncAudio(url, hooksInfo?.tag)\n\n function onClick(event: MouseEvent) {\n if (!audio) return\n hooks.emit('click', { event, target: 'AudioTagPlayIcon', audioInstance: audio, ...hooksInfo })\n // 暂停其他音频\n mediaStore.set({ currentMediaElement: audio })\n\n if (audio.paused) {\n // SharedAudio already stops output, reports diagnostics and emits onerror.\n void audio.play(true).catch(() => {})\n } else audio.pause()\n }\n onDestroy(() => { unsubscribeMedia(); releaseAudio() })\n</script>\n\n<!-- svelte-ignore a11y-click-events-have-key-events -->\n<div class=\"audio\" on:click|stopPropagation={onClick} {style}>\n <slot />\n</div>\n\n<style>\n .audio {\n pointer-events: auto;\n cursor: pointer;\n width: 100%;\n height: 100%;\n }\n</style>\n","<script lang=\"ts\">\n import px2rem from '../../../utils/px2rem'\n import Shadow from '../Shadow.svelte'\n import { onDestroy } from 'svelte'\n\n export let playing: boolean\n export let shadow = false\n export let style: string | undefined | null = null\n export let width: number | string | undefined | null = '100%'\n export let animated = true\n\n let icon: HTMLDivElement\n let animationStep = 0\n let timer: ReturnType<typeof setInterval> | null = null\n\n const SimpleAnimationSteps = [\n 'M12 3.25c2.416 0 4.604.98 6.187 2.563A8.723 8.723 0 0 1 20.75 12c0 2.416-.98 4.604-2.563 6.187A8.723 8.723 0 0 1 12 20.75a8.723 8.723 0 0 1-6.187-2.563A8.723 8.723 0 0 1 3.25 12c0-2.416.98-4.604 2.563-6.187A8.723 8.723 0 0 1 12 3.25Zm1.534 3.282-1.29 1.289.186.183a5.86 5.86 0 0 1 1.663 4.095c0 1.555-.605 2.965-1.786 4.236l1.118 1.12.2-.19a7.46 7.46 0 0 0 2.225-5.322 7.46 7.46 0 0 0-2.316-5.411Zm-2.046 2.047-1.245 1.243.14.133a3.04 3.04 0 0 1 .882 2.144c0 .795-.308 1.516-.955 2.24l1.23 1.231.168-.168a4.793 4.793 0 0 0 1.314-3.303c0-1.39-.59-2.643-1.534-3.52Zm-1.752 1.78-1.69 1.689 1.745 1.743.132-.13a2.29 2.29 0 0 0-.187-3.302Z',\n 'M12 3.25c2.416 0 4.604.98 6.187 2.563A8.723 8.723 0 0 1 20.75 12c0 2.416-.98 4.604-2.563 6.187A8.723 8.723 0 0 1 12 20.75a8.723 8.723 0 0 1-6.187-2.563A8.723 8.723 0 0 1 3.25 12c0-2.416.98-4.604 2.563-6.187A8.723 8.723 0 0 1 12 3.25Zm-2.264 7.109-1.69 1.689 1.745 1.743.132-.13a2.29 2.29 0 0 0-.187-3.302Z',\n 'M12 3.25c2.416 0 4.604.98 6.187 2.563A8.723 8.723 0 0 1 20.75 12c0 2.416-.98 4.604-2.563 6.187A8.723 8.723 0 0 1 12 20.75a8.723 8.723 0 0 1-6.187-2.563A8.723 8.723 0 0 1 3.25 12c0-2.416.98-4.604 2.563-6.187A8.723 8.723 0 0 1 12 3.25Zm-.512 5.329-1.245 1.243.14.133a3.04 3.04 0 0 1 .882 2.144c0 .795-.308 1.516-.955 2.24l1.23 1.231.168-.168a4.793 4.793 0 0 0 1.314-3.303c0-1.39-.59-2.643-1.534-3.52Zm-1.752 1.78-1.69 1.689 1.745 1.743.132-.13a2.29 2.29 0 0 0-.187-3.302Z',\n ]\n\n $: styleWidth = typeof width === 'number' ? px2rem(width) : width\n\n // 监听 playing 状态变化\n $: if (playing) {\n if (!timer) {\n // 开始动画\n timer = setInterval(() => {\n animationStep = (animationStep + 1) % SimpleAnimationSteps.length\n }, 500)\n }\n } else {\n // 停止动画\n if (timer) {\n clearInterval(timer)\n timer = null\n }\n animationStep = 0\n }\n\n // 计算当前要使用的动画步骤\n $: d = SimpleAnimationSteps[animated ? animationStep : 0] ?? SimpleAnimationSteps[0]\n\n // 组件销毁时清理定时器\n onDestroy(() => {\n if (timer) {\n clearInterval(timer)\n timer = null\n }\n })\n\n</script>\n\n<div class=\"audio-icon__wrapper\" style:width={styleWidth} style:height={styleWidth} {style}>\n {#if shadow}\n <Shadow center blurRadius={12} spreadRadius={5} />\n {/if}\n <div class=\"audio-icon\">\n <div bind:this={icon} class=\"sound-wave__container\">\n <svg viewBox=\"0 0 24 24\" version=\"1.1\" aria-label=\"audio-icon\">\n <defs>\n <linearGradient x1=\"8.653%\" y1=\"15.676%\" x2=\"85.159%\" y2=\"79.274%\" id=\"dnalogel-audio-icon-linear-gradient-1\">\n <stop stop-color=\"rgba(255, 255, 255, 1)\" stop-opacity=\".5\" offset=\"0%\" />\n <stop stop-color=\"rgba(255, 255, 255, 1)\" offset=\"100%\" />\n </linearGradient>\n <linearGradient x1=\"0%\" y1=\"0%\" x2=\"64.422%\" y2=\"62.326%\" id=\"dnalogel-audio-icon-linear-gradient-2\">\n <stop stop-color=\"rgba(255, 255, 255, 1)\" offset=\"0%\" />\n <stop stop-color=\"rgba(255, 255, 255, 1)\" stop-opacity=\"0\" offset=\"100%\" />\n </linearGradient>\n </defs>\n <path\n {d}\n fill=\"url(#dnalogel-audio-icon-linear-gradient-1)\"\n fill-rule=\"nonzero\"\n stroke=\"url(#dnalogel-audio-icon-linear-gradient-2)\"\n stroke-width=\".5\"\n />\n </svg>\n </div>\n </div>\n</div>\n\n<style lang=\"scss\">\n .audio-icon__wrapper {\n display: inline-block;\n }\n\n .audio-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n .sound-wave__container {\n position: absolute;\n pointer-events: none;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n }\n\n // 动画\n .sound-wave {\n animation-duration: 2s;\n // animation-timing-function: ease-in-out;\n animation-iteration-count: infinite;\n animation-play-state: paused;\n transition: opacity 0;\n }\n .playing {\n .sound-wave {\n animation-play-state: running;\n }\n .sound-wave-1 {\n animation-name: sound_wave_1_animation;\n }\n .sound-wave-2 {\n animation-name: sound_wave_2_animation;\n }\n .sound-wave-3 {\n animation-name: sound_wave_3_animation;\n }\n }\n\n @keyframes sound_wave_1_animation {\n 0%,\n 10% {\n opacity: 0;\n }\n 25%,\n 100% {\n opacity: 1;\n }\n }\n\n @keyframes sound_wave_2_animation {\n 0%,\n 35% {\n opacity: 0;\n }\n 50%,\n 100% {\n opacity: 1;\n }\n }\n\n @keyframes sound_wave_3_animation {\n 0%,\n 60% {\n opacity: 0;\n }\n 75%,\n 100% {\n opacity: 1;\n }\n }\n\n</style>\n","<!-- 图文标签 -->\n<script lang=\"ts\">\n import { cubicInOut } from 'svelte/easing'\n import { fade } from 'svelte/transition'\n import type { TagInstance } from '../../../typings'\n import Audio from '../../Common/Audio.svelte'\n import Line from '../../Common/Line/Straight.svelte'\n import Shadow from '../../Common/Shadow.svelte'\n import FlyMText from '../../Common/Text/FlyMText.svelte'\n import AudioIcon from '../../Common/Icon/audioIcon.svelte'\n import { svelteResizeObserver } from '../../../../shared-utils/svelte/resizeObserver'\n\n export let tag: TagInstance<'Audio'>\n\n let textUnfolded = false\n let playing = false\n let contentWidth: number\n $: unfolded = !!tag.state?.unfolded\n $: content = tag.data.title ?? ''\n\n // 收起的时候,如果文字展开了,要先下下去,再收起\n $: foldTextDelay = textUnfolded ? 450 : 0\n\n function clickContent() {\n textUnfolded = !textUnfolded\n }\n</script>\n\n{#if tag.state}\n <div class=\"audio-tag\" class:unfolded>\n <Shadow visible={unfolded} left={contentWidth / 2 + 'px'} bottom={12} width={2} blurRadius={120} spreadRadius={60} />\n <div class=\"content\">\n <div class=\"wrapper\">\n <div class=\"audio-icon\">\n {#if unfolded}\n <div\n class=\"audio\"\n in:fade|local={{ duration: 1000, delay: 0, easing: cubicInOut }}\n out:fade|local={{ duration: 1000, delay: 20 * Math.min(content?.length ?? 10, 15), easing: cubicInOut }}\n >\n <Shadow center blurRadius={15} spreadRadius={6} />\n <Audio\n enable={unfolded}\n url={tag.data.audioUrl}\n hooksInfo={{ tag }}\n on:play={() => {\n playing = true\n }}\n on:pause={() => {\n playing = false\n }}\n on:error={() => {\n playing = false\n }}\n on:audioRef\n >\n <div class=\"audio-icon__wrapper\">\n <AudioIcon {playing} />\n </div>\n </Audio>\n </div>\n {/if}\n </div>\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div\n style:display=\"inline-block\"\n on:click={clickContent}\n use:svelteResizeObserver\n on:clientWidth={(e) => {\n contentWidth = e.detail\n }}\n >\n <FlyMText visible={unfolded} {textUnfolded} {content} />\n </div>\n </div>\n </div>\n <Line {unfolded} length={contentWidth} outDelay={foldTextDelay + 20 * Math.min(content?.length ?? 10, 15)} useLinearColor />\n </div>\n{/if}\n\n<style>\n .audio-tag {\n position: absolute;\n left: 0;\n top: 0;\n width: 0;\n height: 0;\n overflow: visible;\n }\n\n .audio-icon__wrapper {\n position: relative;\n vertical-align: top;\n width: 100%;\n height: 100%;\n }\n\n .content {\n width: max-content;\n height: 54px;\n padding: 36px 4px 0 16px;\n position: absolute;\n left: 0;\n bottom: 2px;\n overflow: hidden;\n box-sizing: border-box;\n font-size: 0;\n white-space: nowrap;\n font-weight: 600;\n }\n\n .wrapper {\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n .audio-icon {\n pointer-events: none;\n vertical-align: top;\n display: inline-block;\n width: 16px;\n height: 16px;\n margin-right: 4px;\n margin-top: 1px;\n }\n\n .audio {\n position: relative;\n width: 100%;\n height: 100%;\n }\n</style>\n","<!-- 图文标签 -->\n<script lang=\"ts\">\n import type { TagInstance } from '../../../typings'\n import AudioIcon from '../../Common/Icon/audioIcon.svelte'\n import MText from '../../Common/Text/MText.svelte'\n import Audio from '../../Common/Audio.svelte'\n\n export let tag: TagInstance<'Audio'>\n\n let currentTime = 0\n let duration = 0\n let playing = false\n\n $: title = tag.data.title ?? ''\n</script>\n\n{#if tag.state}\n <div class=\"audio-tag__wrapper\">\n <div class=\"audio-tag\">\n <Audio\n style=\"width: max-content; height: max-content;\"\n enable={tag.state.visible}\n url={tag.data.audioUrl}\n hooksInfo={{ tag }}\n on:play={() => {\n playing = true\n }}\n on:pause={() => {\n playing = false\n }}\n on:error={() => {\n playing = false\n }}\n on:timeupdate={(event) => {\n currentTime = event.detail\n }}\n on:duration={(event) => {\n duration = event.detail\n }}\n on:audioRef\n >\n <div class=\"audio__inner\">\n <div class=\"audio-icon__wrapper\">\n <AudioIcon {playing} />\n </div>\n <!-- <div class=\"currentTime\">\n {#if typeof (playing ? currentTime : duration) === 'number'}\n {timeToString(noTypecheck(playing ? currentTime : duration ?? 0))}\n {/if}\n </div> -->\n <div class=\"text\">\n <MText maxWidth={72} maxLine={1}>\n {title}\n </MText>\n </div>\n </div>\n </Audio>\n </div>\n </div>\n{/if}\n\n<style>\n .audio-tag__wrapper {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n .audio-tag {\n position: relative;\n width: max-content;\n height: max-content;\n padding: 4px;\n padding-right: 10px;\n border-radius: 9999999px;\n border: 1px solid rgba(255, 255, 255, 0.6);\n background: linear-gradient(to bottom, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.2));\n box-shadow: inset 0 0 4px 0 rgba(255, 255, 255, 0.3);\n }\n\n .currentTime {\n font-family: TG-TYPE, PingFangSC, Segoe UI, Rototo, sans-serif;\n margin-left: 4px;\n }\n\n .audio__inner {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n }\n\n .text {\n font-weight: bold;\n font-size: 12px;\n margin-left: 4px;\n }\n\n .audio-icon__wrapper {\n position: relative;\n vertical-align: top;\n pointer-events: none;\n width: 24px;\n height: 24px;\n }\n</style>\n","<script lang=\"ts\">\n import type { TagInstance } from '../../../typings'\n import type { SharedAudio } from '../../../utils/audio/SharedAudio'\n import AudioTag from './AudioTag.svelte'\n import AudioPlaneTag from './AudioPlaneTag.svelte'\n\n export let tag: TagInstance<'Audio'>\n\n let audio: SharedAudio\n\n function audioRef(event) {\n audio = event.detail\n }\n tag.play = (userAction = false) => audio.play(userAction)\n tag.pause = () => audio.pause()\n\n $: appearance = tag.data.appearance ?? 'line'\n</script>\n\n{#if appearance === 'line'}\n <AudioTag {tag} on:audioRef={audioRef} />\n{:else if appearance === 'plane'}\n <AudioPlaneTag {tag} on:audioRef={audioRef} />\n{/if}\n","<!-- 多媒体贴片; 营销贴片 -->\n<script lang=\"ts\">\n import type { TagInstance } from '../../typings'\n import Media from '../Common/Media.svelte'\n\n export let tag: TagInstance<'MediaPlane'>\n\n $: unfolded = tag.state ? tag.state.unfolded : false\n $: mediaData = tag.data.mediaData\n $: enableCarousel = tag.data.enableCarousel\n $: playIcon = tag.data.playIcon\n $: autoplayConfig = tag.data.autoplayConfig ?? { autoplay: enableCarousel ?? true, autoplayVideo: true }\n $: objectFit = tag.data.objectFit\n</script>\n\n{#if tag.state && mediaData}\n <div class=\"media-wrapper\">\n <Media\n mediaItemConfig={{\n canPlay: true,\n playButtonSizeIfNeed: 'large',\n playButtonIfNeed: playIcon ?? 'withText',\n disableVideoIfHavePoster: false,\n objectFit,\n }}\n {unfolded}\n {mediaData}\n {enableCarousel}\n {autoplayConfig}\n {tag}\n inDelay={500}\n duration={500}\n />\n </div>\n{/if}\n\n<style>\n .media-wrapper {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n</style>\n","import type { TagIconUrl } from '..'\n\nconst cache = new Map<string, Promise<{ width: number; height: number }>>()\n\nexport async function getImageSize(url: string): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n if (!url) {\n reject(Error('url is empty'))\n return\n }\n\n const img = new Image()\n img.src = url\n img.onload = () => resolve({ width: img.width, height: img.height })\n img.onerror = reject\n })\n}\n\nexport async function getImageInfo<T extends Pick<TagIconUrl, 'url' | 'ratio'>>(params: T) {\n const { url, ratio = 3 } = params\n\n // 建议设置 ratio\n // if (!params.ratio) console.warn('Tag icon ratio is not set, default is 3')\n\n const getImageSizePromise = (() => {\n if (cache.has(url)) return cache.get(url)\n const promise = getImageSize(url)\n cache.set(url, promise)\n return promise\n })()\n const { width: realWidth, height: realHeight } = await getImageSizePromise\n\n return {\n ...params,\n width: realWidth / ratio,\n height: realHeight / ratio,\n }\n}\n\nexport async function getKeyframeInfo<T extends Pick<TagIconUrl, 'fps' | 'ratio' | 'steps' | 'url'>>(params: T) {\n const { steps, url, ratio = 3, fps = 24 } = params\n\n if (!steps || !Number.isInteger(steps) || steps < 2) throw new Error('KeyframeIcon requires at least two frames')\n\n const { width: keyframesRealWidth, height: keyframesRealHeight } = await getImageSize(url)\n\n const keyframesWidth = keyframesRealWidth / ratio\n const keyframesHeight = keyframesRealHeight / ratio\n\n const perWidth = keyframesWidth / steps\n const perHeight = keyframesHeight\n\n const duration = (1 / fps) * steps + 's'\n\n return {\n ...params,\n width: perWidth,\n height: perHeight,\n duration,\n }\n}\n","import type { TagIconAnimationConfig } from '../../../typings/tag/Utils'\n\n// 样式管理器,用于复用相同的动画样式\nclass AnimationStyleManager {\n private static instance: AnimationStyleManager\n private styleRefs: Map<string, { element: HTMLStyleElement; count: number }> = new Map()\n\n // 基于配置生成唯一的样式键\n private generateStyleKey(config: TagIconAnimationConfig, elementIndex: number): string {\n const { duration, timing, loop, loopInterval = 0 } = config\n const elementConfig = config.elements[elementIndex]\n const { properties } = elementConfig\n\n const keyParts = [duration, timing, loop, loopInterval, JSON.stringify(properties)]\n\n return `svg-anim-${keyParts\n .join('-')\n .replace(/[^a-zA-Z0-9-]/g, '')\n .toLowerCase()}`\n }\n\n // 多段插值,支持数组长度大于2\n private interpolateMulti(values: number[], progress: number): number {\n if (values.length === 2) {\n return this.interpolate(values[0], values[1], progress)\n }\n if (values.length < 2) return values[0] ?? 0\n const seg = values.length - 1\n const segProgress = progress * seg\n const segIndex = Math.floor(segProgress)\n const localProgress = segProgress - segIndex\n if (segIndex >= seg) return values[seg]\n return this.interpolate(values[segIndex], values[segIndex + 1], localProgress)\n }\n\n // 生成变换字符串,支持多段\n private generateTransformMulti(properties: any, progress: number): string {\n const transforms: string[] = []\n if (properties.scale) {\n const value = this.interpolateMulti(properties.scale, progress)\n transforms.push(`scale(${value})`)\n }\n if (properties.translateX) {\n const value = this.interpolateMulti(properties.translateX, progress)\n transforms.push(`translateX(${value}px)`)\n }\n if (properties.translateY) {\n const value = this.interpolateMulti(properties.translateY, progress)\n transforms.push(`translateY(${value}px)`)\n }\n if (properties.rotate) {\n const value = this.interpolateMulti(properties.rotate, progress)\n transforms.push(`rotate(${value}deg)`)\n }\n return transforms.join(' ')\n }\n\n // 线性插值\n private interpolate(start: number, end: number, progress: number): number {\n return start + (end - start) * progress\n }\n\n\n public static getInstance() {\n if (!AnimationStyleManager.instance) {\n AnimationStyleManager.instance = new AnimationStyleManager()\n }\n return AnimationStyleManager.instance\n }\n\n // 获取或创建样式(重写关键帧生成,支持多段)\n\n public getOrCreateStyle(config: TagIconAnimationConfig, elementIndex: number): string {\n const styleKey = this.generateStyleKey(config, elementIndex)\n if (this.styleRefs.has(styleKey)) {\n const ref = this.styleRefs.get(styleKey)!\n ref.count++\n return styleKey\n }\n const { duration, timing = 'linear', loop, loopInterval = 0 } = config\n const elementConfig = config.elements[elementIndex]\n const { properties } = elementConfig\n const keyframeName = `${styleKey}-keyframe`\n // 关键帧百分比数组\n let steps = 2\n // 检查所有属性的最大长度\n const propArrays = [properties.translateX, properties.translateY, properties.scale, properties.rotate, properties.opacity].filter(\n (arr) => Array.isArray(arr) && arr.length > 0,\n )\n if (propArrays.length > 0) {\n steps = Math.max(...propArrays.map((arr) => (arr as number[]).length))\n }\n // 计算循环间隔\n const totalDuration = loop && loopInterval > 0 ? duration + loopInterval : duration\n // 活动动画的时间占比(其余为静止,形成 loopInterval 停顿)\n const activePercent = Math.max(0, Math.min(100, (duration / totalDuration) * 100))\n // 生成每个关键帧:在 activePercent 之前完成插值\n let keyframeContent = `@keyframes ${keyframeName} {\\n`\n for (let i = 0; i < steps; i++) {\n const localProgress = i / (steps - 1)\n const percent = localProgress * activePercent\n const transform = this.generateTransformMulti(properties, localProgress)\n let opacityStr = ''\n if (properties.opacity) {\n const opacity = this.interpolateMulti(properties.opacity, localProgress)\n opacityStr = ` opacity: ${opacity};`\n }\n keyframeContent += ` ${percent}% {\\n${transform ? ` transform: ${transform};\\n` : ''}${opacityStr}\\n }\\n`\n }\n // 100% 维持终态,覆盖 activePercent..100% 的静止阶段\n const finalTransform = this.generateTransformMulti(properties, 1)\n let finalOpacityStr = ''\n if (properties.opacity) {\n const finalOpacity = this.interpolateMulti(properties.opacity, 1)\n finalOpacityStr = ` opacity: ${finalOpacity};`\n }\n keyframeContent += ` 100% {\\n${finalTransform ? ` transform: ${finalTransform};\\n` : ''}${finalOpacityStr}\\n }\\n`\n keyframeContent += `}\\n`\n // 生成动画类\n const hasScale = !!properties.scale\n keyframeContent += `.${styleKey} {\\n animation: ${keyframeName} ${totalDuration}ms ${timing} ${loop ? 'infinite' : '1'};\\n${\n hasScale ? ' transform-origin: 50% 50%;\\n transform-box: fill-box;' : ''\n }\\n}`\n const styleElement = document.createElement('style')\n styleElement.id = styleKey\n styleElement.textContent = keyframeContent\n document.head.appendChild(styleElement)\n this.styleRefs.set(styleKey, { element: styleElement, count: 1 })\n return styleKey\n }\n\n // 释放样式引用\n\n public releaseStyle(styleKey: string) {\n const ref = this.styleRefs.get(styleKey)\n if (!ref) return\n\n ref.count--\n if (ref.count <= 0) {\n // 没有元素使用此样式,移除它\n ref.element.remove()\n this.styleRefs.delete(styleKey)\n }\n }\n}\n\n/**\n * 应用 SVG 动画配置\n */\nexport function applySvgAnimation(svgElement: SVGSVGElement, config: TagIconAnimationConfig) {\n if (!svgElement || !config) return\n\n const styleManager = AnimationStyleManager.getInstance()\n const { elements } = config\n\n elements.forEach((elementConfig, index) => {\n const { selector } = elementConfig\n const targetElements = selector ? svgElement.querySelectorAll(selector) : [svgElement]\n\n targetElements.forEach((element) => {\n const htmlElement = element as HTMLElement\n const styleKey = styleManager.getOrCreateStyle(config, index)\n\n // 应用动画类\n htmlElement.classList.add(styleKey)\n\n htmlElement.setAttribute('data-style-key', styleKey)\n })\n })\n}\n\n/**\n * 清除 SVG 动画\n */\nexport function clearSvgAnimation(svgElement: SVGSVGElement) {\n if (!svgElement) return\n\n const styleManager = AnimationStyleManager.getInstance()\n const nodeList = svgElement.querySelectorAll('*')\n const allElements: Element[] = [svgElement, ...Array.from(nodeList)]\n\n allElements.forEach((element) => {\n const htmlElement = element as HTMLElement\n\n // 获取样式键并释放引用\n const styleKey = htmlElement.getAttribute('data-style-key')\n if (styleKey) {\n // 清除动画类\n htmlElement.classList.remove(styleKey)\n styleManager.releaseStyle(styleKey)\n htmlElement.removeAttribute('data-style-key')\n }\n\n // 清除内联样式\n htmlElement.style.animation = ''\n htmlElement.style.transform = ''\n htmlElement.style.opacity = ''\n })\n}\n","<script lang=\"ts\">\n import { createEventDispatcher, onMount, onDestroy, tick } from 'svelte'\n import type { TagIconUrl } from '../../../typings'\n import { noTypecheck } from '../../../utils'\n import { getImageInfo, getKeyframeInfo } from '../../../utils/getImageInfo'\n import px2rem from '../../../utils/px2rem'\n import Shadow from '../Shadow.svelte'\n import { applySvgAnimation, clearSvgAnimation } from './animationUtils'\n\n export let width: number | undefined | null = null\n export let icon: TagIconUrl | undefined | null = null\n export let shadow = false\n\n $: iconUrl = icon?.url\n $: bgcolor = icon?.bgcolor\n $: bgopacity = icon?.bgopacity ?? 0.6\n $: iconSteps = icon?.steps ?? 1\n $: iconFps = icon?.fps\n $: iconRatio = icon?.ratio\n $: iconScale = icon?.scale ?? 1\n $: iconWidth = icon?.width\n $: iconAnimation = icon?.animation\n $: hasIcon = !!icon\n\n $: isKeyframe = iconSteps > 1 && !iconAnimation\n $: paramsWidth = width\n\n const dispatch = createEventDispatcher<{ iconLoaded: { width: number } }>()\n\n async function getKeyframe(params: TagIconUrl) {\n const result = await getKeyframeInfo(params)\n dispatch('iconLoaded', result)\n return result\n }\n\n async function getImage(params: TagIconUrl) {\n if (typeof paramsWidth === 'number') {\n return { ...params, width: paramsWidth }\n }\n const result = await getImageInfo(params)\n dispatch('iconLoaded', result)\n return result\n }\n\n function finalSize(params: { originWidth: number; originHeight?: number; scale?: number; wantedWidth?: number }) {\n const { originWidth, originHeight, scale = 1, wantedWidth } = params\n const width = (wantedWidth ?? originWidth) * scale\n const height = typeof originHeight === 'number' ? width * (originHeight / originWidth) : undefined\n return { ...params, width, height }\n }\n\n function emitIconLoaded() {\n dispatch('iconLoaded')\n }\n\n onMount(() => {\n emitIconLoaded()\n })\n\n $: emitIconLoaded()\n\n // ========= SVG 动画支持 =========\n let svgContainer: HTMLElement | null = null\n let svgHtml: string | null = null\n let currentSvgEl: SVGSVGElement | null = null\n const svgMarkupCache = new Map<string, Promise<string>>()\n let prevAnimationKey: string | null = null\n\n function isSvgUrl(url: string | undefined | null): boolean {\n if (!url) return false\n try {\n const u = new URL(url)\n return u.pathname.endsWith('.svg')\n } catch {\n return url.endsWith('.svg')\n }\n }\n\n async function loadSvgMarkup(url: string): Promise<string> {\n const cached = svgMarkupCache.get(url)\n if (cached) return await cached\n const pending = fetch(url, { cache: 'force-cache' }).then((res) => res.text())\n svgMarkupCache.set(url, pending)\n try {\n return await pending\n } catch (err) {\n svgMarkupCache.delete(url)\n throw err\n }\n }\n\n async function mountSvgAnimation() {\n if (!iconAnimation) return\n if (!svgContainer) {\n await tick()\n if (!svgContainer) return\n }\n // 仅对 svg 资源进行内联与动画\n if (!isSvgUrl(iconUrl)) return\n\n // 重新应用前,清理旧动画与引用\n if (currentSvgEl) {\n clearSvgAnimation(currentSvgEl)\n currentSvgEl = null\n }\n\n // 加载与注入\n if (iconUrl) {\n svgHtml = await loadSvgMarkup(iconUrl)\n await tick()\n }\n const el = svgContainer.querySelector<SVGSVGElement>('svg')\n if (!el) return\n currentSvgEl = el\n applySvgAnimation(currentSvgEl, iconAnimation)\n }\n\n // 当动画配置或 url 变化时,基于稳定 key 触发挂载,避免仅引用变化造成的重复触发\n $: {\n const nextKey = iconAnimation && isSvgUrl(iconUrl) ? iconUrl : null\n if (nextKey && nextKey !== prevAnimationKey) {\n prevAnimationKey = nextKey\n void mountSvgAnimation()\n }\n }\n\n // 当容器绑定完成后,如果存在待应用的动画且尚未挂载,补一次挂载\n $: if (prevAnimationKey && svgContainer && iconAnimation && isSvgUrl(iconUrl) && !currentSvgEl) {\n void mountSvgAnimation()\n }\n\n $: if (!iconAnimation || !isSvgUrl(iconUrl)) {\n if (currentSvgEl) {\n clearSvgAnimation(currentSvgEl)\n currentSvgEl = null\n }\n if (svgHtml !== null) {\n svgHtml = null\n }\n // 重置 key,确保后续真正变化时可触发\n if (prevAnimationKey !== null) {\n prevAnimationKey = null\n }\n }\n\n onDestroy(() => {\n if (currentSvgEl) clearSvgAnimation(currentSvgEl)\n })\n</script>\n\n{#if hasIcon}\n <div class=\"icon\" style:width>\n {#if shadow}\n <Shadow center blurRadius={24} spreadRadius={16} />\n {/if}\n {#if isKeyframe}\n {#await getKeyframe(noTypecheck( { url: iconUrl, steps: iconSteps, fps: iconFps, ratio: iconRatio }, )) then { width, height, steps, duration }}\n <div\n class=\"icon-keyframe\"\n style:width={px2rem(finalSize({ originWidth: width, originHeight: height, scale: iconScale, wantedWidth: iconWidth }).width)}\n style:height={px2rem(finalSize({ originWidth: width, originHeight: height, scale: iconScale, wantedWidth: iconWidth }).height)}\n style:background-image=\"url({iconUrl})\"\n style:animation-duration={duration}\n style:animation-timing-function=\"steps({steps - 1})\"\n ></div>\n {/await}\n {:else if iconAnimation}\n {#await getImage(noTypecheck({ url: iconUrl, ratio: iconRatio })) then { width }}\n {#if bgcolor}\n <div class=\"icon-bg\">\n <div class=\"icon-bg-circle\">\n <div class=\"icon-bg-circle-inner\" style:background={bgcolor} style:opacity={bgopacity}></div>\n <div class=\"icon-bg-circle-inner-shadow\"></div>\n </div>\n </div>\n {/if}\n <div\n class=\"icon-svg\"\n bind:this={svgContainer}\n style:width={px2rem(finalSize({ originWidth: width, scale: iconScale, wantedWidth: iconWidth }).width)}\n >\n {#if isSvgUrl(iconUrl)}\n {@html svgHtml}\n {:else}\n <!-- 非 svg 资源降级为 img(若使用选择器将无法作用到内部) -->\n <img\n alt=\"tag-icon\"\n class=\"icon-image\"\n src={iconUrl}\n style:width=\"100%\"\n style:max-width=\"initial\"\n />\n {/if}\n </div>\n {/await}\n {:else}\n {#await getImage(noTypecheck({ url: iconUrl, ratio: iconRatio })) then { width }}\n {#if bgcolor}\n <div class=\"icon-bg\">\n <div class=\"icon-bg-circle\">\n <div class=\"icon-bg-circle-inner\" style:background={bgcolor} style:opacity={bgopacity}></div>\n <div class=\"icon-bg-circle-inner-shadow\"></div>\n </div>\n </div>\n {/if}\n <img\n alt=\"tag-icon\"\n class=\"icon-image\"\n src={iconUrl}\n style:width={px2rem(finalSize({ originWidth: width, scale: iconScale, wantedWidth: iconWidth }).width)}\n style:max-width=\"initial\"\n />\n {/await}\n {/if}\n </div>\n{/if}\n\n<style>\n @keyframes sprites-animation {\n 0% {\n background-position: 0 0;\n }\n 100% {\n background-position: 100% 0;\n }\n }\n\n .icon-bg {\n position: absolute;\n width: 141%; /* 根号2 */\n height: 141%;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 50%;\n overflow: hidden;\n }\n\n .icon-bg-circle {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .icon-bg-circle-inner {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .icon-bg-circle-inner-shadow {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: radial-gradient(circle at center, transparent 20%, rgba(255,255,255,0.3));\n }\n\n .icon-bg-circle::before {\n content: \"\";\n position: absolute;\n z-index: 1;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border-radius: 50%;\n /* background: linear-gradient(-45deg, rgba(255,255,255,1), rgba(255,255,255,0.2), rgba(255,255,255,1)); */\n z-index: 1;\n /* mask: radial-gradient(circle at center,\n transparent 65%,\n black 0%);\n -webkit-mask: radial-gradient(circle at center,\n transparent 65%,\n black 0%); */\n border: 1px solid rgba(255,255,255,0.6);\n }\n\n .icon-image {\n position: relative;\n display: block;\n width: auto;\n }\n\n .icon-keyframe {\n background-repeat: no-repeat;\n background-size: auto 100%;\n animation-direction: normal;\n animation-iteration-count: infinite;\n animation-name: sprites-animation;\n animation-delay: 0;\n }\n\n .icon-svg {\n position: relative;\n display: block;\n font-size: 0;\n }\n .icon-svg svg {\n display: block;\n width: 100%;\n height: auto;\n }\n</style>\n","<script lang=\"ts\">\n import type { TagInstance } from '../../typings'\n import Shadow from '../Common/Shadow.svelte'\n import Icon from '../Common/Icon/Icon.svelte'\n import px2rem from '../../utils/px2rem'\n\n export let tag: TagInstance<'Link'>\n\n $: iconLoaded = false\n\n $: title = tag.data.title\n\n $: icon = tag.data.icon ?? tag.style?.point\n\n $: width = tag.style?.point?.width\n\n $: scale = tag.style?.point?.scale ?? 1\n\n $: bgcolor = icon?.bgcolor\n\n const TEXT_PADDING = 4;\n\n /**\n * 新版的标签 icon 一定会有 width, 通过 width 计算 text 的 top\n *\n * 这段逻辑比较绕,原因是:\n * 浩正在开发 bgcolor 的时候 bgcolor 的区域是中间图标的 1.414 倍,导致与下方文字的距离无法控制\n * 所以通过 width 计算 text 的 top,来控制文字与图标的距离\n */\n $: textTop = bgcolor && width && typeof width === 'number' ? px2rem((width * 0.414 * scale) / 2 + TEXT_PADDING) : 0\n\n</script>\n\n<div class=\"wrapper\">\n <Icon\n {icon}\n shadow\n on:iconLoaded={() => {\n iconLoaded = true\n }}\n />\n {#if title && iconLoaded}\n <div class=\"text-wrapper\">\n <Shadow outDelay={0} inDelay={0} center width=\"80%\" blurRadius={40} spreadRadius={16} opacity={0.08} />\n <div class=\"text\" style:top={textTop}>\n {title}\n </div>\n </div>\n {/if}\n</div>\n\n<style>\n .wrapper {\n font-weight: 600;\n cursor: pointer;\n width: max-content;\n height: max-content;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n pointer-events: auto;\n }\n .text-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .text {\n position: absolute;\n top: 0;\n font-size: 14px;\n color: #ffffff;\n letter-spacing: 0;\n text-align: center;\n max-width: 140px;\n width: max-content;\n line-height: 18px;\n text-shadow: 2px 0px 8px rgba(0, 0, 0, 0.15);\n }\n\n</style>\n","<script lang=\"ts\">\n import { createEventDispatcher, onMount } from 'svelte'\n import type { TagIconUrl } from '../../../typings'\n import Shadow from '../Shadow.svelte'\n\n export let width: number | undefined | null = null\n export let icon: TagIconUrl | undefined | null = null\n export let shadow = false\n\n $: bgcolor = icon?.bgcolor\n $: bgopacity = icon?.bgopacity ?? 0.6\n $: iconScale = icon?.scale ?? 1\n $: iconWidth = icon?.width\n\n\n function finalSize(params: { originWidth: number; originHeight?: number; scale?: number; wantedWidth?: number }) {\n const { originWidth, originHeight, scale = 1, wantedWidth } = params\n const width = (wantedWidth ?? originWidth) * scale\n const height = typeof originHeight === 'number' ? width * (originHeight / originWidth) : undefined\n return { ...params, width, height }\n }\n\n $: finalWidth = finalSize({ originWidth: 24, originHeight: 24, scale: iconScale, wantedWidth: iconWidth }).width\n</script>\n\n<div class=\"icon\" style:width>\n {#if shadow}\n <Shadow center blurRadius={24} spreadRadius={16} />\n {/if}\n {#if bgcolor}\n <div class=\"icon-bg\">\n <div class=\"icon-bg-circle\">\n <div class=\"icon-bg-circle-inner\" style:background={bgcolor} style:opacity={bgopacity}></div>\n <div class=\"icon-bg-circle-inner-shadow\"></div>\n </div>\n </div>\n {/if}\n <svg height={finalWidth} width={finalWidth} viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><linearGradient id=\"a\" x1=\"78.74567%\" x2=\"5.663764%\" y1=\"94.075617%\" y2=\"5.924383%\"><stop offset=\"0\" stop-color=\"#fff\"/><stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".7\"/></linearGradient><linearGradient id=\"b\" x1=\"16.588502%\" x2=\"68.285986%\" y1=\"5.924383%\" y2=\"63.800896%\"><stop offset=\"0\" stop-color=\"#fff\"/><stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(3 3.1)\"><path d=\"m18 5.4v8c0 1.9329966-4.0294373 3.5-9 3.5-4.97056275 0-9-1.5670034-9-3.5v-8c0 1.93299662 4.02943725 3.5 9 3.5 4.8670094 0 8.8316983-1.50239169 8.9947813-3.37967512zm-13.0396582-.5c.259 0 .504-.063.728-.196.441-.259.721-.728.721-1.26 0-.441-.189-.833-.504-1.085.259-.259.434-.63.434-1.022 0-.245-.063-.476-.182-.679-.252-.413-.693-.658-1.197-.658-.238 0-.462.056-.665.175-.42.238-.679.665-.679 1.162v.035h.721v-.035c0-.315.294-.616.623-.616.357 0 .651.287.651.616 0 .371-.287.658-.651.658h-.14v.728h.14c.399 0 .728.322.728.721s-.329.735-.728.735-.728-.336-.728-.735v-.105h-.728v.105c0 .266.063.511.196.728.259.448.728.728 1.26.728zm3.647 0c.273 0 .518-.07.749-.203.448-.273.742-.763.742-1.302 0-.273-.07-.518-.203-.749-.273-.448-.749-.742-1.288-.742-.077 0-.133 0-.168.007l.875-1.911h-.805l-1.274 2.793c-.091.189-.133.392-.133.602 0 .273.07.525.203.756.273.455.749.749 1.302.749zm0-.742c-.427 0-.763-.336-.763-.763 0-.42.343-.77.763-.77s.77.35.77.77-.35.763-.77.763zm3.654.749c.504 0 .952-.273 1.204-.7.126-.21.189-.441.189-.693v-2.086c0-.511-.273-.98-.693-1.239-.217-.126-.448-.189-.7-.189-.511 0-.98.273-1.232.714-.133.217-.196.455-.196.714v2.086c0 .504.273.952.714 1.204.217.126.455.189.714.189zm0-.721c-.371 0-.693-.301-.693-.672v-2.086c0-.399.308-.693.693-.693.371 0 .651.294.651.693v2.086c0 .385-.28.672-.651.672zm3.2140391-2.11266016c.2734375 0 .5132649-.09855143.7194824-.29565429.2062174-.19710287.3093262-.44376628.3093262-.73999024 0-.28710937-.0991211-.53035481-.2973633-.72973633-.1982422-.19938151-.4420573-.29907226-.7314453-.29907226-.2825521 0-.5257976.10026042-.7297364.30078125s-.3059082.44661458-.3059082.73828125c0 .2734375.0968425.51269531.2905274.71777344.1936849.20507812.4420573.30761718.7451172.30761718zm0-.37255859c-.1822917 0-.3383789-.06494141-.4682618-.19482422-.1298828-.12988281-.1948242-.28369141-.1948242-.46142578 0-.18457031.0655111-.34122721.1965332-.4699707.1310222-.12874349.2865397-.19311524.4665528-.19311524.180013 0 .3343912.06494141.4631347.19482422s.1931153.28369141.1931153.46142578c0 .18457031-.0655111.34122722-.1965332.46997071-.1310222.12874349-.2842611.19311523-.4597168.19311523z\" fill=\"url(#a)\" fill-rule=\"nonzero\"/><path d=\"m18 5.4v8c0 1.9329966-4.0294373 3.5-9 3.5-4.97056275 0-9-1.5670034-9-3.5v-8c0 1.93299662 4.02943725 3.5 9 3.5 4.8670094 0 8.8316983-1.50239169 8.9947813-3.37967512zm-.537 1.917-.0556083.04651904c-1.6129673 1.27557869-4.7855335 2.07278608-8.4073917 2.07278608-3.5667171 0-6.69228643-.77164105-8.32741897-2.0099189l-.13658103-.10838622.00030512 6.082c0 1.4658868 3.60570734 2.8999734 8.15878222 2.9616322l.30491266.0020627c4.6959533 0 8.4636949-1.4652329 8.4636949-2.9636949zm-5.2016582-7.317c.252 0 .483.063.7.189.42.259.693.728.693 1.239v2.086l-.00756.14868c-.02016.19488-.08064.37632-.18144.54432-.252.427-.7.7-1.204.7-.259 0-.497-.063-.714-.189-.441-.252-.714-.7-.714-1.204v-2.086l.007616-.15288c.020384-.20048.081984-.38752.188384-.56112.252-.441.721-.714 1.232-.714zm-7.301 0c.504 0 .945.245 1.197.658.119.203.182.434.182.679 0 .392-.175.763-.434 1.022.315.252.504.644.504 1.085 0 .532-.28 1.001-.721 1.26-.224.133-.469.196-.728.196-.532 0-1.001-.28-1.26-.728-.133-.217-.196-.462-.196-.728v-.105h.728v.105c0 .399.329.735.728.735s.728-.336.728-.735-.329-.721-.728-.721h-.14v-.728h.14c.364 0 .651-.287.651-.658 0-.329-.294-.616-.651-.616-.329 0-.623.301-.623.616v.035h-.721v-.035c0-.497.259-.924.679-1.162.203-.119.427-.175.665-.175zm4.354 0-.875 1.911c.035-.007.091-.007.168-.007.539 0 1.015.294 1.288.742.133.231.203.476.203.749 0 .539-.294 1.029-.742 1.302-.231.133-.476.203-.749.203-.553 0-1.029-.294-1.302-.749-.133-.231-.203-.483-.203-.756 0-.21.042-.413.133-.602l1.274-2.793zm2.947.735c-.385 0-.693.294-.693.693v2.086l.0077784.09927273c.051172.32396694.3479489.57272727.6852216.57272727.371 0 .651-.287.651-.672v-2.086l-.0068002-.10607288c-.044861-.34395191-.3069271-.58692712-.6441998-.58692712zm-3.654 1.89c-.42 0-.763.35-.763.77 0 .427.336.763.763.763.42 0 .77-.343.77-.763s-.35-.77-.77-.77zm6.8680391-2.61611328c.289388 0 .5332031.09969075.7314453.29907226.1982422.19938152.2973633.44262696.2973633.72973633 0 .29622396-.1031088.54288737-.3093262.73999024-.2062175.19710286-.4460449.29565429-.7194824.29565429-.3030599 0-.5514323-.10253906-.7451172-.30761718-.1936849-.20507813-.2905274-.44433594-.2905274-.71777344 0-.29166667.1019694-.53776042.3059082-.73828125s.4471843-.30078125.7297364-.30078125zm0 .37255859c-.1800131 0-.3355306.06437175-.4665528.19311524-.1310221.12874349-.1965332.28540039-.1965332.4699707 0 .17773437.0649414.33154297.1948242.46142578.1298829.12988281.2859701.19482422.4682618.19482422.1754557 0 .3286946-.06437174.4597168-.19311523.1310221-.12874349.1965332-.2854004.1965332-.46997071 0-.17773437-.0643718-.33154297-.1931153-.46142578s-.2831217-.19482422-.4631347-.19482422z\" fill=\"url(#b)\" fill-rule=\"nonzero\"/><path d=\"m3.00030998 2.79110119v5.21779762c-1.84142801-.64087734-3.00030998-1.57225753-3.00030998-2.60889881s1.15888197-1.96802147 3.00030998-2.60889881zm12.00038752.00035068c1.8408432.64086639 2.9993025 1.57209591 2.9993025 2.60854813s-1.1584593 1.96768174-2.9993025 2.60854813z\" fill=\"#d8d8d8\" opacity=\".6\"/></g></svg>\n</div>\n\n\n<style>\n .icon {\n font-size: 0;\n }\n .icon-bg {\n position: absolute; \n width: 141%; /* 根号2 */\n height: 141%;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 50%;\n overflow: hidden;\n z-index: -1;\n }\n\n .icon-bg-circle {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .icon-bg-circle-inner {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .icon-bg-circle-inner-shadow {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: radial-gradient(circle at center, transparent 20%, rgba(255,255,255,0.3));\n }\n \n .icon-bg-circle::before {\n content: \"\";\n position: absolute;\n z-index: 1;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border-radius: 50%;\n background: linear-gradient(-45deg, rgba(255,255,255,1), rgba(255,255,255,0.2), rgba(255,255,255,1));\n z-index: 1;\n mask: radial-gradient(circle at center, \n transparent 65%, \n black 0%);\n -webkit-mask: radial-gradient(circle at center, \n transparent 65%, \n black 0%);\n }\n</style>\n","<script lang=\"ts\">\n import type { TagInstance } from '../../typings'\n import PanoramaIcon from '../Common/Icon/PanoramaIcon.svelte'\n\n export let tag: TagInstance<'Panorama'>\n\n $: icon = tag.data.icon ?? tag.style?.point\n</script>\n\n<div class=\"wrapper\">\n <PanoramaIcon\n {icon}\n shadow\n />\n</div>\n\n<style>\n .wrapper {\n font-weight: 600;\n cursor: pointer;\n width: max-content;\n height: max-content;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n pointer-events: auto;\n }\n</style>\n","<script lang=\"ts\">\n import { onDestroy, onMount } from 'svelte'\n import type { TagInstance, TagRendererMap } from '../../typings'\n\n export let tag: TagInstance\n export let rendererMap: TagRendererMap = new Map()\n\n let content: HTMLElement | undefined\n let renderer = tag.element ?? rendererMap.get(tag.contentType)?.renderer\n $: unfolded = tag.state.unfolded\n let destroyTemplate: () => void | undefined\n\n onMount(() => {\n if (content) {\n if (renderer instanceof Element) {\n content.appendChild(renderer)\n destroyTemplate = () => {\n if (renderer instanceof Element) renderer.remove()\n }\n } else if (typeof renderer === 'function') {\n destroyTemplate = renderer(content, tag)\n }\n }\n })\n\n onDestroy(() => {\n destroyTemplate?.()\n })\n</script>\n\n<div class=\"customElement__container\" class:unfolded bind:this={content}>\n {#if typeof renderer === 'string'}\n {@html renderer}\n {/if}\n</div>\n\n<style>\n .customElement__container {\n position: relative;\n }\n</style>\n","<script lang=\"ts\">\n import type { TagInstance, TagHooks, State, TemporaryState, MediaStore, TagRendererMap, TagContentTypeMapping } from '../../typings'\n import TextTag from './TextTag/index.svelte'\n import ImageTextTag from './ImageTextTag.svelte'\n import MarketingTag from './MarketingTag.svelte'\n import { noTypecheck } from '../../utils'\n import { setContext } from 'svelte'\n import AudioTag from './AudioTag/index.svelte'\n import MediaPlane from './MediaPlane.svelte'\n import LinkTag from './LinkTag.svelte'\n import PanoramaTag from './PanoramaTag.svelte'\n import CustomTag from './CustomTag.svelte'\n import classNames from 'classnames'\n import { ModelTag } from '../../controller/Tag/ModelTag'\n import { isModelLike } from '../../../shared-utils'\n\n export let tag: TagInstance\n export let hooks: TagHooks\n export let rendererMap: TagRendererMap = new Map()\n export let contentTypeMap: TagContentTypeMapping = new Map()\n export let state: State\n export let mediaStore: MediaStore\n export let temporaryState: TemporaryState\n\n $: unfolded = tag.state?.unfolded\n $: visible = tag.state?.visible\n $: isVisible = state.visible && temporaryState.visible && tag.state?.visible\n $: tagId = tag.id\n $: isHide = !getTagVisible(tag, state, temporaryState)\n\n setContext('hooks', hooks)\n setContext('mediaStore', mediaStore)\n\n let lastVisibleState: boolean | undefined\n let lastUnfoldedState: boolean | undefined\n\n function exposureEmit(isVisible?: boolean) {\n if (isVisible) hooks.emit('exposure', { id: tagId, type: 'start' })\n else hooks.emit('exposure', { id: tagId, type: 'end' })\n }\n\n $: exposureEmit(isVisible)\n\n $: {\n if (tag.hooks) {\n if (unfolded !== undefined && unfolded !== lastUnfoldedState) {\n lastUnfoldedState = unfolded\n if (unfolded) tag.hooks.emit?.('unfolded')\n else tag?.hooks.emit?.('folded')\n }\n if (visible !== undefined && visible !== lastVisibleState) {\n lastVisibleState = visible\n if (visible) tag.hooks.emit?.('show')\n else tag.hooks.emit?.('hide')\n }\n }\n }\n\n $: haveContent = (() => {\n if (typeof tag.config.unfoldedConfig === 'object' && tag.config.unfoldedConfig.keep === 'folded') return false\n return true\n })()\n\n function getTagVisible(tag: TagInstance, state: State, temporaryState: TemporaryState) {\n if (!tag.enabled) return false\n if (!state.visible) return false\n if (!state.enabled) return false\n if (!temporaryState.visible) return false\n if (!tag.state?.visible) return false\n if (tag.temporaryState?.visible === false) return false\n if (tag instanceof ModelTag && tag.loading) return false\n return true\n }\n\n</script>\n\n{#if tag.element || rendererMap.has(tag.contentType)}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div\n bind:this={tag.contentDom}\n class={classNames('content__container', tag.className)}\n class:custom-tag-disable={tag.enabled === false}\n class:custom-tag-hide={isHide}\n data-id={tag.id}\n on:click={(event) => hooks.emit('click', { event, target: 'TagContent', tag })}\n >\n <CustomTag tag={noTypecheck(tag)} {rendererMap} />\n </div>\n{:else if haveContent}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div\n bind:this={tag.contentDom}\n class={classNames('content__container', tag.className)}\n class:disable={tag.enabled === false}\n class:hide={isHide}\n class:unClickable={tag.config.clickable === false}\n style:width={tag.stickType === 'Plane' || tag.contentType === 'MediaModel' ? '100%' : 0}\n style:height={tag.stickType === 'Plane' || tag.contentType === 'MediaModel' ? '100%' : 0}\n data-id={tag.id}\n on:click|capture={(event) => {\n if (tag.entryFromModel && isModelLike(tag.five.state.mode)) {\n event.stopPropagation()\n tag.find({ targetMode: 'Panorama' })\n } else {\n hooks.emit('click', { event, target: 'TagContent', tag })\n }\n }}\n >\n <div class=\"content__wrapper\">\n <div class=\"content\" class:unfolded={tag.state?.unfolded}>\n <!-- 文字标签 -->\n {#if ['Text'].includes(tag.contentType) || ['Text'].includes(contentTypeMap.get(tag.contentType))}\n <TextTag tag={noTypecheck(tag)} />\n <!-- 多媒体标签 -->\n {:else if ['ImageText', 'Image', 'Video'].includes(tag.contentType) || ['ImageText', 'Image', 'Video'].includes(contentTypeMap.get(tag.contentType))}\n <ImageTextTag tag={noTypecheck(tag)} />\n <!-- 音频标签 -->\n {:else if ['Audio'].includes(tag.contentType) || ['Audio'].includes(contentTypeMap.get(tag.contentType))}\n <AudioTag tag={noTypecheck(tag)} />\n <!-- 营销标签 -->\n {:else if ['Marketing'].includes(tag.contentType) || ['Marketing'].includes(contentTypeMap.get(tag.contentType))}\n <MarketingTag tag={noTypecheck(tag)} />\n <!-- 链接标签 -->\n {:else if ['Link', 'VRLink', 'PanoLink', 'Sticker'].includes(tag.contentType) || ['Link', 'VRLink', 'PanoLink', 'Sticker'].includes(contentTypeMap.get(tag.contentType))}\n <LinkTag tag={noTypecheck(tag)} />\n <!-- 模型标签 -->\n {:else if ['MediaPlane', 'MediaModel'].includes(tag.contentType) || ['MediaPlane', 'MediaModel'].includes(contentTypeMap.get(tag.contentType))}\n <MediaPlane tag={noTypecheck(tag)} />\n <!-- 全景标签 -->\n {:else if ['Panorama'].includes(tag.contentType) || ['Panorama'].includes(contentTypeMap.get(tag.contentType))}\n <PanoramaTag tag={noTypecheck(tag)} />\n {/if}\n </div>\n </div>\n </div>\n{:else}\n <div data-info=\"tag content is keep folded\" data-id={tag.id} />\n{/if}\n\n<style lang=\"scss\">@font-face {\n font-family: \"TG-TYPE\";\n font-style: normal;\n font-weight: 400;\n /* src: local('TG-TYPE-Bold'), url(//vr-static.realsee-cdn.cn/release/web/TG-TYPE-Bold.769fe64d.otf) format('woff2'); */\n src: local(\"TG-TYPE-Bold\"), url(data:application/font-woff2;charset=utf-8;base64,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) format(\"woff2\");\n}\n:global(*) {\n -webkit-tap-highlight-color: transparent;\n}\n\n.content__container {\n position: relative;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n font-family: PingFangSC, Segoe UI, Rototo, sans-serif;\n transition: opacity 0.2s linear;\n}\n.content__container.unClickable {\n pointer-events: none !important;\n}\n.content__container.unClickable :global(*) {\n pointer-events: none !important;\n}\n\n.content__wrapper {\n pointer-events: none;\n width: 100%;\n height: 100%;\n}\n\n.content__container.hide {\n opacity: 0;\n pointer-events: none;\n}\n.content__container.hide :global(*) {\n pointer-events: none !important;\n}\n\n.content__container.disable {\n display: none;\n}\n\n.content {\n position: relative;\n width: 100%;\n height: 100%;\n font-size: 0.75rem;\n color: #fff;\n}\n.content:not(.unfolded) {\n pointer-events: none;\n}\n.content:not(.unfolded) :global(*) {\n pointer-events: none !important;\n}\n.content.unfolded {\n pointer-events: auto;\n cursor: pointer;\n}</style>\n","<script lang=\"ts\">\n import type { TagInstance, TagHooks, State, TemporaryState, MediaStore, TagRendererMap, TagContentTypeMapping } from '../../typings'\n import TextTag from './TextTag/index.svelte'\n import ImageTextTag from './ImageTextTag.svelte'\n import MarketingTag from './MarketingTag.svelte'\n import { noTypecheck } from '../../utils'\n import { setContext } from 'svelte'\n import AudioTag from './AudioTag/index.svelte'\n import MediaPlane from './MediaPlane.svelte'\n import LinkTag from './LinkTag.svelte'\n import PanoramaTag from './PanoramaTag.svelte'\n import CustomTag from './CustomTag.svelte'\n import classNames from 'classnames'\n import { ModelTag } from '../../controller/Tag/ModelTag'\n import { isModelLike } from '../../../shared-utils'\n\n export let tag: TagInstance\n export let hooks: TagHooks\n export let rendererMap: TagRendererMap = new Map()\n export let contentTypeMap: TagContentTypeMapping = new Map()\n export let state: State\n export let mediaStore: MediaStore\n export let temporaryState: TemporaryState\n\n $: unfolded = tag.state?.unfolded\n $: visible = tag.state?.visible\n $: isVisible = state.visible && temporaryState.visible && tag.state?.visible\n $: tagId = tag.id\n $: isHide = !getTagVisible(tag, state, temporaryState)\n\n setContext('hooks', hooks)\n setContext('mediaStore', mediaStore)\n\n let lastVisibleState: boolean | undefined\n let lastUnfoldedState: boolean | undefined\n\n function exposureEmit(isVisible?: boolean) {\n if (isVisible) hooks.emit('exposure', { id: tagId, type: 'start' })\n else hooks.emit('exposure', { id: tagId, type: 'end' })\n }\n\n $: exposureEmit(isVisible)\n\n $: {\n if (tag.hooks) {\n if (unfolded !== undefined && unfolded !== lastUnfoldedState) {\n lastUnfoldedState = unfolded\n if (unfolded) tag.hooks.emit?.('unfolded')\n else tag?.hooks.emit?.('folded')\n }\n if (visible !== undefined && visible !== lastVisibleState) {\n lastVisibleState = visible\n if (visible) tag.hooks.emit?.('show')\n else tag.hooks.emit?.('hide')\n }\n }\n }\n\n $: haveContent = (() => {\n if (typeof tag.config.unfoldedConfig === 'object' && tag.config.unfoldedConfig.keep === 'folded') return false\n return true\n })()\n\n function getTagVisible(tag: TagInstance, state: State, temporaryState: TemporaryState) {\n if (!tag.enabled) return false\n if (!state.visible) return false\n if (!state.enabled) return false\n if (!temporaryState.visible) return false\n if (!tag.state?.visible) return false\n if (tag.temporaryState?.visible === false) return false\n if (tag instanceof ModelTag && tag.loading) return false\n return true\n }\n\n</script>\n\n{#if tag.element || rendererMap.has(tag.contentType)}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div\n bind:this={tag.contentDom}\n class={classNames('content__container', tag.className)}\n class:custom-tag-disable={tag.enabled === false}\n class:custom-tag-hide={isHide}\n data-id={tag.id}\n on:click={(event) => hooks.emit('click', { event, target: 'TagContent', tag })}\n >\n <CustomTag tag={noTypecheck(tag)} {rendererMap} />\n </div>\n{:else if haveContent}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div\n bind:this={tag.contentDom}\n class={classNames('content__container', tag.className)}\n class:disable={tag.enabled === false}\n class:hide={isHide}\n class:unClickable={tag.config.clickable === false}\n style:width={tag.stickType === 'Plane' || tag.contentType === 'MediaModel' ? '100%' : 0}\n style:height={tag.stickType === 'Plane' || tag.contentType === 'MediaModel' ? '100%' : 0}\n data-id={tag.id}\n on:click|capture={(event) => {\n if (tag.entryFromModel && isModelLike(tag.five.state.mode)) {\n event.stopPropagation()\n tag.find({ targetMode: 'Panorama' })\n } else {\n hooks.emit('click', { event, target: 'TagContent', tag })\n }\n }}\n >\n <div class=\"content__wrapper\">\n <div class=\"content\" class:unfolded={tag.state?.unfolded}>\n <!-- 文字标签 -->\n {#if ['Text'].includes(tag.contentType) || ['Text'].includes(contentTypeMap.get(tag.contentType))}\n <TextTag tag={noTypecheck(tag)} />\n <!-- 多媒体标签 -->\n {:else if ['ImageText', 'Image', 'Video'].includes(tag.contentType) || ['ImageText', 'Image', 'Video'].includes(contentTypeMap.get(tag.contentType))}\n <ImageTextTag tag={noTypecheck(tag)} />\n <!-- 音频标签 -->\n {:else if ['Audio'].includes(tag.contentType) || ['Audio'].includes(contentTypeMap.get(tag.contentType))}\n <AudioTag tag={noTypecheck(tag)} />\n <!-- 营销标签 -->\n {:else if ['Marketing'].includes(tag.contentType) || ['Marketing'].includes(contentTypeMap.get(tag.contentType))}\n <MarketingTag tag={noTypecheck(tag)} />\n <!-- 链接标签 -->\n {:else if ['Link', 'VRLink', 'PanoLink', 'Sticker'].includes(tag.contentType) || ['Link', 'VRLink', 'PanoLink', 'Sticker'].includes(contentTypeMap.get(tag.contentType))}\n <LinkTag tag={noTypecheck(tag)} />\n <!-- 模型标签 -->\n {:else if ['MediaPlane', 'MediaModel'].includes(tag.contentType) || ['MediaPlane', 'MediaModel'].includes(contentTypeMap.get(tag.contentType))}\n <MediaPlane tag={noTypecheck(tag)} />\n <!-- 全景标签 -->\n {:else if ['Panorama'].includes(tag.contentType) || ['Panorama'].includes(contentTypeMap.get(tag.contentType))}\n <PanoramaTag tag={noTypecheck(tag)} />\n {/if}\n </div>\n </div>\n </div>\n{:else}\n <div data-info=\"tag content is keep folded\" data-id={tag.id} />\n{/if}\n\n<style lang=\"scss\">\n @font-face {\n font-family: 'TG-TYPE';\n font-style: normal;\n font-weight: 400;\n /* src: local('TG-TYPE-Bold'), url(//vr-static.realsee-cdn.cn/release/web/TG-TYPE-Bold.769fe64d.otf) format('woff2'); */\n src: local('TG-TYPE-Bold'),\n url(data:application/font-woff2;charset=utf-8;base64,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)\n format('woff2');\n }\n\n :global(*) {\n -webkit-tap-highlight-color: transparent;\n }\n\n .content__container {\n position: relative;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n font-family: PingFangSC, Segoe UI, Rototo, sans-serif;\n transition: opacity 0.2s linear;\n\n &.unClickable {\n pointer-events: none !important;\n }\n &.unClickable :global(*) {\n pointer-events: none !important;\n }\n }\n\n .content__wrapper {\n pointer-events: none;\n width: 100%;\n height: 100%;\n }\n\n .content__container.hide {\n opacity: 0;\n pointer-events: none;\n :global(*) {\n pointer-events: none !important;\n }\n }\n\n .content__container.disable {\n display: none;\n }\n\n .content {\n position: relative;\n width: 100%;\n height: 100%;\n font-size: 12px;\n color: #fff;\n &:not(.unfolded) {\n pointer-events: none;\n }\n &:not(.unfolded) :global(*) {\n pointer-events: none !important;\n }\n &.unfolded {\n pointer-events: auto;\n cursor: pointer;\n }\n }\n\n</style>\n","import type PanoTagPluginController from '..'\nimport type { TagContentType, Tag as TagData, TagGLTFObject, TagInstance } from '../..'\nimport { initialCSS3DRender } from '../../../shared-utils/CSS3DRender'\nimport { CSS3DObjectPlus } from '../../../shared-utils/CSS3DRender/CSS3DObject'\nimport { arrayPositionToVector3 } from '../../../shared-utils/positionToVector3'\nimport loadGLTF from '../../../shared-utils/three/GLTFLoader'\nimport { planeNormal } from '../../utils'\nimport { ImagePlane } from '../../utils/model/mediaPlane'\nimport TagContentSvelte from '../../Components/Tag/index.svelte'\nimport { isMediaModelTag } from '../../utils/tag/tagCheck'\nimport { BaseTag } from './BaseTag'\nimport * as THREE from 'three/webgpu'\nimport { CONST } from '../../../shared-utils/constants'\nimport { waitFiveModelLoaded } from '../../../shared-utils'\n\nimport { mountComponent, type MountedComponent } from '../../../shared-utils/svelte/component.svelte'\nexport type ModelTagInterface<C extends TagContentType = TagContentType> = TagInstance<C, 'Model'>\n\nexport class ModelTag<C extends TagContentType = TagContentType> extends BaseTag<C, 'Model'> {\n public loading = false\n\n public constructor(plugin: PanoTagPluginController, tagData: TagData) {\n super(plugin, tagData)\n this.state.unfolded = true\n initialCSS3DRender(this.five)\n this.loadModel().then(() => this.updateVisible())\n }\n\n public applyVisible() {\n this.tag3DContentSvelte?.svelteApp.update({\n tag: this,\n state: this.plugin.state,\n temporaryState: this.plugin.temporaryState,\n })\n if (this.model?.object) this.model.object.visible = this.visible\n }\n\n public set(...data: Parameters<InstanceType<typeof BaseTag<C, 'Model'>>['set']>) {\n super.set(...data)\n this.loadModel()\n }\n\n public setData(...data: Parameters<InstanceType<typeof BaseTag<C, 'Model'>>['setData']>) {\n super.setData(...data)\n\n const positions = this.data.mediaPosition.map(arrayPositionToVector3)\n if (this.computeRenderType() === 'Mesh') {\n if (this.mediaPlane && this.mediaPlane.src !== this.data.mediaData[0]!.url) {\n this.mediaPlane.removeFromParent()\n this.mediaPlane = new ImagePlane(this.data.mediaData[0]!.url, positions, { objectFit: this.data.objectFit })\n }\n } else {\n this.tag3DContentSvelte?.svelteApp.update({ tag: this })\n }\n }\n\n /** 加载外部模型 */\n public loadModel = async () => {\n const url = this.data.modelUrl\n if (!url) return\n this.loading = true\n\n await waitFiveModelLoaded(this.five)\n\n if (!this.plugin.tags.includes(this)) return\n\n const loadPromise = loadGLTF(url).then(async (gltf) => {\n const model: TagGLTFObject = Object.assign(gltf.scene, {\n customID: this.id,\n isTagModel: true,\n removeEventListener:\n this.getConfig().clickable === false\n ? () => void 0\n : this.addObjectClickHandler(this, gltf.scene, (event) => {\n this.plugin.hooks.emit('click', { target: 'TagModel', tag: this as any, event })\n }),\n })\n // 还原模型位姿\n const matrix = new THREE.Matrix4().fromArray(this.matrix)\n matrix.decompose(model.position, model.quaternion, model.scale)\n // 更新子元素的 matrix,否则射线检测结果会出问题\n model.updateWorldMatrix(true, true)\n // 模型 visible 跟 tag 保持一致\n model.visible = this.visible\n\n if (this.getConfig().modelConfig?.autoLookAtEnabled) {\n model.lookAt(this.five.camera.position.clone().setY(model.position.y))\n }\n return model\n })\n\n this.model = { promise: loadPromise }\n const object = await loadPromise\n this.loading = false\n\n // 标签在加载的过程中模型可能会被替换,所以需要判断 promise 是否一致\n if (this.model?.promise !== loadPromise) return\n // 异步过程结束后需要判断标签是否被删除\n if (!this.plugin.tags.includes(this)) return\n\n // 更新标签 model 数据\n this.model.object = object\n\n const prevObject = this.plugin.gltfObjectGroup.children.find((obj) => obj.customID === this.id)\n if (prevObject) {\n this.plugin.gltfObjectGroup.remove(prevObject)\n prevObject.removeEventListener()\n }\n\n if (isMediaModelTag(this)) {\n const positions = this.data.mediaPosition.map(arrayPositionToVector3)\n // 添加模型多媒体贴片\n if (this.computeRenderType() === 'Mesh' && !this.mediaPlane) {\n this.mediaPlane = new ImagePlane(this.data.mediaData[0]!.url, positions, { objectFit: this.data.objectFit })\n const center = new THREE.Vector3().addVectors(positions[0], positions[2]).divideScalar(2)\n this.mediaPlane.position.copy(center)\n object.add(this.mediaPlane)\n }\n\n if (this.computeRenderType() !== 'Mesh') {\n this.tag3DContentSvelte?.dispose()\n const container = document.createElement('div')\n container.classList.add('tag-media-container')\n const bgColor = 'black' // 广告牌模型的屏幕一般都是黑的,所以使用相同的背景色\n container.style.backgroundColor = bgColor\n container.style.border = `3px solid ${bgColor}` // 用 border 挡住 mesh 的锯齿\n\n const config = { mode: 'behind', cornerPoints: positions, container, ...this.config.tag3DConfig }\n const mode = this.computeRenderType() === 'BehindDom' || config.mode === 'behind' ? 'behind' : 'front'\n const cssMesh = new CSS3DObjectPlus({ ...config, mode, five: this.five })\n const normal = this.computeNormal()\n // 解决 z-fighting\n cssMesh.position.add(normal.clone().setLength(CONST.Z_FIGHTING_OFFSET))\n\n object.add(cssMesh)\n\n let clickEventDispose: () => void\n if (cssMesh.mode === 'behind' && this.config.clickable !== false) {\n clickEventDispose = this.addObjectClickHandler(this, cssMesh, (e) => {\n this.plugin.hooks.emit('click', { event: e, target: 'TagContent', tag: this })\n })\n }\n\n const svelte = mountComponent(TagContentSvelte, container, {\n tag: this,\n hooks: this.plugin.hooks,\n /** 模型标签要等模型加载好之后再展示 */\n state: this.plugin.state,\n mediaStore: this.plugin.mediaStore,\n temporaryState: this.plugin.temporaryState,\n })\n\n this.tag3DContentSvelte = {\n svelteApp: svelte,\n css3DInstance: cssMesh,\n initialNormal: normal,\n currentNormal: normal,\n dispose: () => {\n svelte.destroy()\n cssMesh.dispose()\n clickEventDispose?.()\n },\n }\n }\n }\n\n this.plugin.gltfObjectGroup.add(object)\n return object\n }\n\n public computeNormal() {\n return planeNormal(this.data.mediaPosition)\n }\n}\n","import { PBMMesh, type Five } from '@realsee/five-webgpu'\nimport * as THREE from 'three/webgpu'\n\nexport const getFloorMesh = (five: Five, floorIndex: number) => {\n const box = new THREE.Box3()\n const model = five.models.find((m) => m.name === five.state.workCode)\n model.traverse((obj: any) => {\n const objFloorIndex = obj?.material?.[0]?.floorIndex\n if (objFloorIndex === floorIndex) {\n box.expandByObject(obj)\n }\n })\n return box\n}\n\n","import type * as THREE from 'three/webgpu'\n\nexport interface AutoPlayIntersectConfig {\n checkPoints?: 'center' | 'corner' | THREE.Vector3[]\n needPassed?: number\n hideWhenModelNotLoaded?: boolean\n startPointMode?: 'observer' | 'horizontal'\n}\n\nexport const autoPlayIntersectConfig: AutoPlayIntersectConfig = {\n startPointMode: 'observer',\n checkPoints: 'corner',\n needPassed: 1,\n // 模型未加载完成时无法证明视线无遮挡,先不自动播放,避免抢占正在播放的媒体。\n hideWhenModelNotLoaded: true,\n}\n\nexport function canAutoPlayByOcclusion(params: {\n currentVisible: boolean\n panoIndex?: number\n computeVisibleByIntersect: (\n panoIndex: number | undefined,\n config: AutoPlayIntersectConfig,\n ) => { value: boolean }\n}) {\n if (!params.currentVisible) return { value: false }\n return params.computeVisibleByIntersect(params.panoIndex, autoPlayIntersectConfig)\n}\n","import type PanoTagPluginController from '..'\nimport type { Tag, TagContentType, Tag as TagData, TagInstance } from '../..'\nimport { CONST } from '../../../shared-utils/constants'\nimport { CSS3DObjectPlus } from '../../../shared-utils/CSS3DRender/CSS3DObject'\nimport { anyPositionToVector3, arrayPositionToVector3 } from '../../../shared-utils/positionToVector3'\nimport { planeNormal } from '../../utils'\nimport { ImagePlane, VideoPlane } from '../../utils/model/mediaPlane'\nimport TagContentSvelte from '../../Components/Tag/index.svelte'\nimport { BaseTag } from './BaseTag'\nimport { uuid, waitFiveModelLoaded } from '../../../shared-utils'\nimport { initialCSS3DRender } from '../../../shared-utils/CSS3DRender'\nimport type { PartialObjectDeep } from '../../../typings/typings'\nimport type { Vector3 } from 'three/webgpu'\nimport { Rectangle } from '../../../Sculpt/Objects/Rectangle'\nimport { getFloorMesh } from '../../../shared-utils/five/getFloorMesh'\nimport { centerPoint } from '../../../shared-utils/three/centerPoint'\nimport * as THREE from 'three/webgpu'\nimport { canAutoPlayByOcclusion } from '../../utils/tag/canAutoPlayByOcclusion'\n\nimport { mountComponent, type MountedComponent } from '../../../shared-utils/svelte/component.svelte'\n\nexport class PlaneTag<C extends TagContentType = TagContentType> extends BaseTag<C, 'Plane'> {\n public declare rectanglePlane?: Rectangle\n\n private _floorIndex?: number\n private _floorIndexDirty = true\n private _opacity?: number\n /**\n * 因不可见被销毁前是否处于播放态。\n * PlaneTag 实例在不可见期间存活(只有 mediaPlane 被销毁),因此状态记在这里。\n */\n private wasPlayingBeforeHidden = false\n private cachedVideoSource?: string\n\n public constructor(plugin: PanoTagPluginController, tagData: TagData) {\n super(plugin, tagData)\n this.state.unfolded = true\n this.loadModel()\n }\n\n /** 获取透明度 */\n public get opacity(): number {\n if (this._opacity !== undefined) {\n return this._opacity\n }\n // 从 data 中读取,如果没有则默认为 1\n return (this.data as any)?.opacity ?? 1\n }\n\n /** 设置透明度 (0-1) */\n public set opacity(value: number) {\n if (value !== this._opacity) {\n this._opacity = value\n // 如果 mediaPlane 已创建,同步更新其 opacity\n if (this.mediaPlane) {\n this.mediaPlane.opacity = value\n }\n }\n }\n\n /** 获取楼层索引(惰性计算 + 缓存) */\n public get floorIndex(): number | undefined {\n if (this._floorIndexDirty || this._floorIndex === undefined) {\n this._floorIndex = this.computeFloorIndex()\n this._floorIndexDirty = false\n }\n return this._floorIndex\n }\n\n /** 标记 floorIndex 需要重新计算(在位置等相关数据变化时调用) */\n public invalidateFloorIndex() {\n this._floorIndexDirty = true\n }\n\n public applyVisible() {\n const renderType = this.computeRenderType()\n if (renderType === 'Mesh') {\n this.initialSculpt()\n if (this.data.mediaData?.[0]?.type === 'Video') {\n this.renderVideoPlane()\n } else if (this.data.mediaData?.[0]?.type === 'Image') {\n this.renderImagePlane()\n } else {\n this.renderEmptyPlane()\n }\n } else {\n this.tag3DContentSvelte?.svelteApp.update({\n tag: this,\n state: this.plugin.state,\n temporaryState: this.plugin.temporaryState,\n })\n if (this.tag3DContentSvelte?.css3DInstance) {\n this.tag3DContentSvelte.css3DInstance.visible = this.visible\n this.five.needsRender = true\n }\n }\n this.syncEditorAuxiliaryVisibility()\n }\n\n public set(tag: PartialObjectDeep<Tag<C, 'Plane'>>, deepMerge = true) {\n super.set(tag, deepMerge)\n waitFiveModelLoaded(this.five).then(() => {\n if (!this.tag3DContentSvelte) return\n if (tag.data) {\n this.tag3DContentSvelte.svelteApp.update({\n tag: this,\n state: this.plugin.state,\n temporaryState: this.plugin.temporaryState,\n })\n } else if (tag.position) {\n this.loadModel()\n }\n })\n }\n\n public setData(...data: Parameters<InstanceType<typeof BaseTag<C, 'Plane'>>['setData']>) {\n super.setData(...data)\n\n const renderType = this.computeRenderType()\n if (renderType === 'Mesh') {\n if (this.data.mediaData?.[0]?.type === 'Video') {\n this.renderVideoPlane()\n } else if (this.data.mediaData?.[0]?.type === 'Image') {\n this.renderImagePlane()\n } else {\n this.renderEmptyPlane()\n }\n // 如果 mediaPlane 已存在且未重新创建,同步更新 opacity\n if (this.mediaPlane) {\n this.mediaPlane.opacity = this.opacity\n }\n } else {\n this.tag3DContentSvelte?.svelteApp.update({ tag: this })\n }\n }\n\n /** 计算楼层索引 */\n private computeFloorIndex(): number | undefined {\n // 1. 收集所有楼层索引并缓存对应的 Bounding Box\n const floorBoxMap = new Map<number, THREE.Box3>()\n const observers = this.five.works.getWork(this.workUtil.workCode)?.observers ?? []\n observers.forEach((observer) => {\n const floorIndex = observer.floorIndex ?? 0\n if (!floorBoxMap.has(floorIndex)) {\n const box = getFloorMesh(this.five, floorIndex)\n if (!box.isEmpty()) {\n floorBoxMap.set(floorIndex, box)\n }\n }\n })\n\n // 2. 计算 Tag 中心点\n const center = centerPoint(...this.position.map(anyPositionToVector3))\n\n // 3. 根据缓存的 Bounding Box 判断包含关系\n const containingFloors: { floorIndex: number; box: THREE.Box3 }[] = []\n const allFloors: { floorIndex: number; box: THREE.Box3 }[] = []\n floorBoxMap.forEach((box, floorIndex) => {\n allFloors.push({ floorIndex, box })\n if (box.containsPoint(center)) {\n containingFloors.push({ floorIndex, box })\n }\n })\n\n // 4. 选择楼层\n // 4.1 如果只有一个楼层包含,直接返回\n if (containingFloors.length === 1) {\n return containingFloors[0].floorIndex\n }\n\n // 4.2 如果多个楼层包含,选择最近的\n if (containingFloors.length > 1) {\n let minDistance = Infinity\n let nearestFloor = containingFloors[0].floorIndex\n containingFloors.forEach(({ floorIndex, box }) => {\n const boxCenter = new THREE.Vector3()\n box.getCenter(boxCenter)\n const distance = center.distanceTo(boxCenter)\n if (distance < minDistance) {\n minDistance = distance\n nearestFloor = floorIndex\n }\n })\n return nearestFloor\n }\n\n // 4.3 如果没有楼层包含,按就近原则分配一个\n if (allFloors.length > 0) {\n let minDistance = Infinity\n let nearestFloor = allFloors[0].floorIndex\n allFloors.forEach(({ floorIndex, box }) => {\n const boxCenter = new THREE.Vector3()\n box.getCenter(boxCenter)\n const distance = center.distanceTo(boxCenter)\n if (distance < minDistance) {\n minDistance = distance\n nearestFloor = floorIndex\n }\n })\n return nearestFloor\n }\n\n return undefined\n }\n\n private async loadModel() {\n await waitFiveModelLoaded(this.five)\n const renderType = this.computeRenderType()\n if (renderType === 'Mesh') {\n this.initialSculpt()\n if (this.data.mediaData?.[0]?.type === 'Video') {\n this.renderVideoPlane()\n } else if (this.data.mediaData?.[0]?.type === 'Image') {\n this.renderImagePlane()\n } else {\n this.renderEmptyPlane()\n }\n } else {\n initialCSS3DRender(this.five)\n const positions = this.position.map(anyPositionToVector3)\n this.tag3DContentSvelte?.dispose?.()\n const container = document.createElement('div')\n container.classList.add('tag-media-container')\n const config = { mode: 'front', cornerPoints: positions, container, ...this.config.tag3DConfig }\n const mode = this.computeRenderType() === 'BehindDom' || config.mode === 'behind' ? 'behind' : 'front'\n const cssMesh = new CSS3DObjectPlus({ ...config, mode, five: this.five })\n const normal = this.computeNormal()\n // 解决 z-fighting\n cssMesh.position.add(normal.clone().setLength(CONST.Z_FIGHTING_OFFSET))\n\n this.plugin.group.add(cssMesh)\n\n let clickEventDispose: () => void\n if (cssMesh.mode === 'behind' && this.config.clickable !== false) {\n clickEventDispose = this.addObjectClickHandler(this, cssMesh, (e) => {\n this.plugin.hooks.emit('click', { event: e, target: 'TagContent', tag: this })\n })\n }\n\n const svelte = mountComponent(TagContentSvelte, container, {\n tag: this,\n hooks: this.plugin.hooks,\n /** 模型标签要等模型加载好之后再展示 */\n state: this.plugin.state,\n mediaStore: this.plugin.mediaStore,\n temporaryState: this.plugin.temporaryState,\n })\n\n this.tag3DContentSvelte = {\n svelteApp: svelte,\n css3DInstance: cssMesh,\n initialNormal: normal,\n currentNormal: normal,\n dispose: () => {\n svelte.destroy()\n cssMesh.dispose()\n clickEventDispose?.()\n },\n }\n\n this.five.needsRender = true\n }\n }\n\n private initialSculpt() {\n if (this.rectanglePlane) return\n\n const uniqueId = uuid()\n const rectangle = new Rectangle(\n this.plugin.sculptModules,\n {\n id: uniqueId,\n type: 'Rectangle',\n points: this.position.map(arrayPositionToVector3),\n style: {\n color: 0x219fe4,\n opacity: 0.1,\n lineColor: 0x66cff3,\n },\n },\n {\n defaultAction: false,\n },\n )\n rectangle.visible = false\n this.plugin.imagePlaneGroup.add(rectangle)\n this.rectanglePlane = rectangle\n rectangle.editor.hooks.on('objectUpdate', () => {\n this.mediaPlane?.changePointsOrParams({ cornerPoints: rectangle.data.points.map(arrayPositionToVector3) })\n })\n rectangle.editor.disable()\n }\n\n public editorEnable() {\n if (!this.rectanglePlane) {\n this.initialSculpt()\n }\n this.rectanglePlane.visible = true\n this.rectanglePlane.editor.enable()\n this.syncEditorAuxiliaryVisibility()\n }\n\n public editorDisable(position?: Vector3[]) {\n this.rectanglePlane.visible = false\n const cornerPoints = position || this.position.map(arrayPositionToVector3)\n this.mediaPlane?.changePointsOrParams({ cornerPoints: cornerPoints })\n this.rectanglePlane.setData({\n points: cornerPoints,\n })\n this.rectanglePlane.editor.disable()\n }\n\n private getRectangleHelper() {\n const rectangleMesh = this.rectanglePlane?.rectangleMesh\n if (!rectangleMesh) return\n return this.plugin.sculptModules.object3DHelper.getObject3DHelper(rectangleMesh)?.helper\n }\n\n /**\n * 标签因为 visiblePanoIndex 等可见性规则被隐藏时,同时隐藏编辑辅助元素。\n * 当标签重新可见且仍处于编辑态时,再恢复辅助元素显示。\n */\n private syncEditorAuxiliaryVisibility() {\n if (!this.rectanglePlane) return\n const helper = this.getRectangleHelper()\n const editorEnabled = Boolean(this.rectanglePlane.editor.parent)\n\n if (!this.currentVisible || !editorEnabled) {\n this.rectanglePlane.visible = false\n helper?.hide()\n this.five.needsRender = true\n return\n }\n\n this.rectanglePlane.visible = true\n helper?.show()\n this.five.needsRender = true\n }\n\n /**\n * 自动播放使用真实观察点到屏幕角点的视线检测,不复用展示用的 horizontal 射线。\n * 这样标签仍可按既有策略展示,但真实视线被楼板、墙体等挡住时不会自动播放或抢占音频焦点。\n */\n private canAutoPlayByOcclusion() {\n const { panoIndex } = this.five.getCurrentState()\n return canAutoPlayByOcclusion({\n currentVisible: this.currentVisible,\n panoIndex,\n computeVisibleByIntersect: (targetPanoIndex, config) => this.computeVisibleByIntersect(targetPanoIndex, config),\n }).value\n }\n\n private renderVideoPlane() {\n const mediaData = this.data.mediaData[0]\n if (!mediaData) return\n const { url: src } = mediaData\n if (!src) return\n const objectFit = this.data.objectFit ?? 'contain'\n /** ============ 刷新贴片 ============ */\n // 视频\n const visible = this.currentVisible\n const needRemove = (() => {\n if (this.mediaPlane && !visible) return true\n return false\n })()\n\n const needCreate = (() => {\n if (!this.mediaPlane && visible) return true\n return false\n })()\n\n const needRefresh = (() => {\n if (this.mediaPlane && (this.mediaPlane.src !== src || this.mediaPlane.objectFit !== objectFit)) return true\n return false\n })()\n\n if (needRemove || needRefresh) {\n if (this.mediaPlane) {\n // 销毁前记住播放态:dispose 会连带停播,之后就无法判断「离开时是否在播」。\n // 只有因不可见移除(needRemove)才算「离开」;换源刷新(needRefresh)不算。\n const videoInstance = 'videoInstance' in this.mediaPlane ? this.mediaPlane.videoInstance : undefined\n this.wasPlayingBeforeHidden = needRemove && videoInstance?.paused === false\n this.plugin.imagePlaneGroup.remove(this.mediaPlane)\n this.mediaPlane.dispose()\n // 因为后面有赋值操作,如果已经有mesh了,需要先清除掉\n this.mediaPlane.removeFromParent()\n this.mediaPlane = undefined\n }\n }\n\n const updateObjectFit = (() => {\n if (this.mediaPlane && this.mediaPlane.objectFit && this.mediaPlane.objectFit !== objectFit) return true\n return false\n })()\n\n if (needCreate || needRefresh) {\n if (this.cachedVideoSource !== undefined && this.cachedVideoSource !== src) {\n this.plugin.mediaTextures.release(this)\n }\n this.cachedVideoSource = src\n let cornerPoints = this.position.map(arrayPositionToVector3)\n if (this.rectanglePlane) {\n cornerPoints = this.rectanglePlane.data.points.map(arrayPositionToVector3)\n }\n\n const canAutoPlay = this.canAutoPlayByOcclusion()\n const videoPlane = new VideoPlane(src, cornerPoints, {\n mediaManager: this.mediaManager,\n videoCoverSrc: (mediaData as any).videoCoverUrl,\n playButton: this.data.playIcon,\n paused: !(this.data.autoplayConfig?.autoplayVideo && canAutoPlay),\n objectFit: this.data.objectFit,\n mediaTextures: this.plugin.mediaTextures,\n textureOwner: this,\n domEvents: this.plugin.domEvents,\n opacity: this.opacity,\n // 开启重播时按标签独占 video 元素,避免同 src 的多块屏幕互相干扰进度\n cacheScope: this.data.autoplayConfig?.replayWhenRevisible ? String(this.id) : undefined,\n })\n const onContentAdded = () => {\n if (this.mediaPlane !== videoPlane || !this.currentVisible) return\n this.five.needsRender = true\n }\n videoPlane.addEventListener('childadded', onContentAdded)\n videoPlane.onDispose(() => videoPlane.removeEventListener('childadded', onContentAdded))\n videoPlane.onDispose(this.bindMediaManager((host) => videoPlane.setMediaManager(host)))\n this.plugin.domEvents.addAutoBindEventListener(videoPlane, 'click', (event) => {\n // 静音播放时点击会取消静音不触发play事件,增加点击监听触发playStateChange事件\n if (!videoPlane.videoInstance?.paused && videoPlane.videoInstance?.muted === false) {\n this.plugin.hooks.emit('playStateChange', {\n event: event as unknown as Event,\n state: 'playing',\n tag: this,\n mediaInstance: videoPlane.videoInstance,\n })\n }\n })\n\n videoPlane.onVideoReady = (videoElement) => {\n const onPlay = (event: Event) => {\n this.plugin.mediaStore.set({ currentMediaElement: videoPlane.videoInstance })\n this.plugin.hooks.emit('playStateChange', {\n event,\n state: 'playing',\n tag: this,\n mediaInstance: videoPlane.videoInstance,\n })\n }\n const onPause = (event: Event) => {\n this.plugin.hooks.emit('playStateChange', {\n event,\n state: 'paused',\n tag: this,\n mediaInstance: videoPlane.videoInstance,\n })\n }\n videoElement.addEventListener('play', onPlay)\n videoElement.addEventListener('pause', onPause)\n videoElement.addEventListener('ended', onPause)\n videoPlane.onDispose(() => {\n videoElement.removeEventListener('play', onPlay)\n videoElement.removeEventListener('pause', onPause)\n videoElement.removeEventListener('ended', onPause)\n })\n }\n const renderFrame = (render: () => void) => {\n this.five.on('renderFrame', render)\n return () => this.five.off('renderFrame', render)\n }\n videoPlane.initialRenderHooks(renderFrame)\n this.mediaPlane = videoPlane\n this.play = (userAction = false) => videoPlane.play(false, userAction)\n this.pause = () => videoPlane.pause()\n this.plugin.imagePlaneGroup.add(this.mediaPlane)\n\n // 走回可见范围/遮挡解除后从头重播。只在「离开前确实在播」时触发,\n // 首次创建走 VideoPlane 构造函数里的既有自动播放逻辑,不受影响。\n if (needCreate && this.wasPlayingBeforeHidden && this.data.autoplayConfig?.replayWhenRevisible && canAutoPlay) {\n this.wasPlayingBeforeHidden = false\n void videoPlane.replayFromStart()\n }\n }\n\n if (updateObjectFit) {\n const cornerPoints = this.rectanglePlane.data.points.map(arrayPositionToVector3)\n this.mediaPlane?.changePointsOrParams({ cornerPoints, params: { objectFit } })\n }\n this.five.needsRender = true\n }\n\n private renderImagePlane() {\n this.plugin.mediaTextures.release(this)\n this.cachedVideoSource = undefined\n const mediaData = this.data.mediaData[0]\n const objectFit = this.data.objectFit ?? 'contain'\n if (!mediaData) return\n const { url: src } = mediaData\n if (!src) return\n\n let cornerPoints = this.position.map(arrayPositionToVector3)\n\n /** ============ 刷新贴片 ============ */\n // 图片\n const visible = this.currentVisible\n const needRemove = (() => {\n if (this.mediaPlane && !visible) return true\n return false\n })()\n\n const needCreate = (() => {\n if (!this.mediaPlane && visible) return true\n return false\n })()\n\n const needRefresh = (() => {\n if (this.mediaPlane && this.mediaPlane.src !== src) return true\n return false\n })()\n\n const updateObjectFit = (() => {\n if (this.mediaPlane && this.mediaPlane.objectFit && this.mediaPlane.objectFit !== objectFit) return true\n return false\n })()\n\n if (needRemove || needRefresh) {\n if (this.mediaPlane) {\n this.plugin.imagePlaneGroup.remove(this.mediaPlane)\n this.mediaPlane.dispose()\n // 因为后面有赋值操作,如果已经有mesh了,需要先清除掉\n this.mediaPlane.removeFromParent()\n this.mediaPlane = undefined\n }\n }\n\n if (needCreate || needRefresh) {\n if (this.rectanglePlane) {\n cornerPoints = this.rectanglePlane.data.points.map(arrayPositionToVector3)\n }\n this.mediaPlane = new ImagePlane(src, cornerPoints, { objectFit: this.data.objectFit, opacity: this.opacity })\n if (this.getConfig().clickable !== false) {\n this.plugin.domEvents.addAutoBindEventListener(\n this.mediaPlane,\n 'click',\n (e) => {\n this.plugin.hooks.emit('click', { tag: this, target: 'TagContent', event: e.origDomEvent })\n },\n { noEmitWhenHide: true },\n )\n }\n this.plugin.imagePlaneGroup.add(this.mediaPlane)\n }\n\n if (updateObjectFit) {\n const cornerPoints = this.rectanglePlane.data.points.map(arrayPositionToVector3)\n this.mediaPlane?.changePointsOrParams({ cornerPoints, params: { objectFit } })\n }\n\n this.five.needsRender = true\n }\n\n private renderEmptyPlane() {\n if (this.mediaPlane) {\n this.plugin.imagePlaneGroup.remove(this.mediaPlane)\n this.mediaPlane.dispose()\n this.mediaPlane.removeFromParent()\n this.mediaPlane = undefined\n }\n this.plugin.mediaTextures.release(this)\n this.cachedVideoSource = undefined\n }\n\n public override destroy(notify = true) {\n super.destroy(notify)\n this.plugin.mediaTextures.release(this)\n }\n\n public computeNormal() {\n return planeNormal(this.position)\n }\n}\n\nexport type PlaneTagInterface<C extends TagContentType = TagContentType> = TagInstance<C, 'Plane'>\n","import * as THREE from 'three/webgpu'\nimport type { BoxPosition } from '../typings'\n\n/**\n * 将 Sculpt 数据转换为 BoxPosition\n */\nexport function sculptDataToBoxPosition(bottomPoints: THREE.Vector3[], heightPoint: THREE.Vector3): BoxPosition {\n // 计算所有8个角点\n const heightVector = new THREE.Vector3().subVectors(heightPoint, bottomPoints[0])\n const topPoints = bottomPoints.map((p) => p.clone().add(heightVector))\n const allPoints = [...bottomPoints, ...topPoints]\n\n // 计算中心点\n const center = new THREE.Vector3()\n allPoints.forEach((p) => center.add(p))\n center.divideScalar(8)\n\n // 计算旋转\n const edge01 = new THREE.Vector3().subVectors(bottomPoints[1], bottomPoints[0])\n const xAxis = edge01.clone().normalize()\n const yAxis = heightVector.clone().normalize()\n const zAxis = new THREE.Vector3().crossVectors(xAxis, yAxis).normalize()\n\n const rotationMatrix = new THREE.Matrix4().makeBasis(xAxis, yAxis, zAxis)\n const quaternion = new THREE.Quaternion().setFromRotationMatrix(rotationMatrix)\n const euler = new THREE.Euler().setFromQuaternion(quaternion)\n\n // 计算尺寸:将所有点转换到局部坐标系\n const invertedQuaternion = quaternion.clone().invert()\n const boxLocalPoints = allPoints.map((p) => {\n return p.clone().sub(center).applyQuaternion(invertedQuaternion)\n })\n\n const xs = boxLocalPoints.map((p) => p.x)\n const ys = boxLocalPoints.map((p) => p.y)\n const zs = boxLocalPoints.map((p) => p.z)\n\n const halfSize = new THREE.Vector3(\n (Math.max(...xs) - Math.min(...xs)) / 2,\n (Math.max(...ys) - Math.min(...ys)) / 2,\n (Math.max(...zs) - Math.min(...zs)) / 2,\n )\n\n const start = new THREE.Vector3(center.x - halfSize.x, center.y - halfSize.y, center.z - halfSize.z)\n const end = new THREE.Vector3(center.x + halfSize.x, center.y + halfSize.y, center.z + halfSize.z)\n\n return {\n start: start.toArray() as [number, number, number],\n end: end.toArray() as [number, number, number],\n rotation: [euler.x, euler.y, euler.z],\n }\n}\n","import type PanoTagPluginController from '..'\nimport type { TagContentType, Tag as TagData, TagInstance, BoxPosition, ArrayPosition, TagClickParams } from '../..'\nimport { BaseTag } from './BaseTag'\nimport * as THREE from 'three/webgpu'\nimport type { PartialObjectDeep } from '../../../typings/typings'\nimport type { Tag } from '../..'\nimport { Box } from '../../../Sculpt/Objects/Box'\nimport { uuid } from '../../../shared-utils'\nimport { applyMatrixToPoints, getBoxCorners } from '../../utils/tagPosition'\nimport { anyPositionToVector3 } from '../../../shared-utils/positionToVector3'\nimport { sculptDataToBoxPosition } from '../../utils/sculptDataToBoxPosition'\nimport { transformPosition } from '../../../shared-utils/five/transformPosition'\n\nexport type BoxTagInterface<C extends TagContentType = TagContentType> = TagInstance<C, '3DBox'>\n\n/**\n * 3DBox 类型的标签\n * 使用 Sculpt Box 进行渲染,避免复杂的坐标转换\n */\nexport class BoxTag<C extends TagContentType = TagContentType> extends BaseTag<C, '3DBox'> {\n public declare boxShape?: Box\n private tagStyle?: TagData['style']\n private clickEventDispose?: () => void\n private domClickDispose?: () => void\n public screenPosition: { leftPx: number; topPx: number; scale: number } | null = null\n\n public constructor(plugin: PanoTagPluginController, tagData: TagData) {\n super(plugin, tagData)\n this.tagStyle = tagData.style\n this.initializeSculptBox()\n this.updateVisible()\n }\n\n /**\n * 获取 Box 样式配置(合并用户配置和默认值)\n */\n private getBoxStyle() {\n const userStyle = (this.tagStyle as any)?.boxOrPolygon || {}\n return {\n color: userStyle.color ?? 0xffffff,\n opacity: userStyle.opacity ?? 0.4,\n lineColor: userStyle.color ?? 0xffffff,\n lineWidth: 1,\n }\n }\n\n /**\n * 更新 Box 样式\n */\n private updateBoxStyle() {\n if (!this.boxShape || !this.boxShape.boxMesh) return\n\n const style = this.getBoxStyle()\n this.boxShape.boxMesh.setStyle(style)\n }\n\n /**\n * 更新标签数据\n */\n public set(tag: PartialObjectDeep<Tag<C, '3DBox'>>, deepMerge = true) {\n super.set(tag, deepMerge)\n\n // 更新 style\n if (tag.style) {\n this.tagStyle = { ...this.tagStyle, ...tag.style } as any\n }\n\n if (tag.position) {\n // 更新 Sculpt Box 的数据\n if (this.boxShape) {\n this.updateSculptBox()\n } else {\n this.initializeSculptBox()\n }\n }\n\n // 如果样式变化,更新 box 样式\n if (tag.style && this.boxShape) {\n this.updateBoxStyle()\n }\n }\n\n /**\n * 设置标签数据\n */\n public setData(...data: Parameters<InstanceType<typeof BaseTag<C, '3DBox'>>['setData']>) {\n super.setData(...data)\n }\n\n /**\n * 获取盒子的中心点\n */\n public getCenter(): ArrayPosition {\n const boxPosition = this.position as unknown as BoxPosition\n if (!boxPosition?.start || !boxPosition?.end) {\n return [0, 0, 0]\n }\n const point1 = boxPosition.end.map((p: number) => Number(p))\n const point2 = boxPosition.start.map((p: number) => Number(p))\n const x = point1[0] / 2 + point2[0] / 2\n const y = point1[1] / 2 + point2[1] / 2\n const z = point1[2] / 2 + point2[2] / 2\n const center = new THREE.Vector3(x, y, z)\n return transformPosition(center, this.workUtil.transform).toArray() as [number, number, number]\n }\n\n /**\n * 获取盒子的8个角点坐标\n */\n public getCorners(): THREE.Vector3[] {\n if (this.boxShape) {\n // 如果有 Sculpt Box,直接从它获取\n const data = this.boxShape.data\n const bottomPoints = (data.points as [number, number, number][]).map((p) => anyPositionToVector3(p))\n const heightVector = new THREE.Vector3().subVectors(\n anyPositionToVector3(data.heightPoint as [number, number, number]),\n bottomPoints[0],\n )\n const topPoints = bottomPoints.map((p) => p.clone().add(heightVector))\n return [...bottomPoints, ...topPoints]\n }\n return []\n }\n\n /**\n * 计算盒子的法向量\n */\n public computeNormal(): THREE.Vector3 {\n const boxPosition = this.position as unknown as BoxPosition\n if (!boxPosition.rotation) {\n return new THREE.Vector3(0, 1, 0)\n }\n\n const rotation = new THREE.Euler().fromArray(boxPosition.rotation as [number, number, number])\n const upVector = new THREE.Vector3(0, 1, 0)\n upVector.applyEuler(rotation)\n return upVector\n }\n\n /**\n * 初始化 Sculpt Box\n */\n private initializeSculptBox() {\n if (this.boxShape) return\n\n const boxPosition = this.position as unknown as BoxPosition\n\n // 如果没有 position,跳过初始化,等待交互式创建\n if (!boxPosition?.start || !boxPosition?.end || !boxPosition?.rotation) {\n return\n }\n\n\n // 将 BoxPosition 转换为 Sculpt 数据格式\n const sculptData = this.boxPositionToSculptData(boxPosition)\n\n // 获取样式配置\n const style = this.getBoxStyle()\n\n const box = new Box(\n this.plugin.sculptModules,\n {\n id: uuid(),\n type: 'Box',\n points: sculptData.bottomPoints,\n heightPoint: sculptData.heightPoint,\n style,\n },\n {\n defaultAction: false,\n occlusionVisibility: false,\n // occlusionMode: 'translucence' as any,\n },\n )\n box.visible = this.visible\n this.plugin.imagePlaneGroup.add(box)\n this.boxShape = box\n\n // 监听编辑事件\n box.editor.hooks.on('objectUpdate', () => {\n this.syncBoxPositionFromSculpt()\n })\n\n box.editor.disable()\n\n // 添加点击事件监听\n this.setupClickEvents()\n }\n\n /**\n * 设置点击事件\n */\n private setupClickEvents() {\n if (!this.boxShape || !this.boxShape.boxMesh || this.config.clickable === false) {\n console.warn(\n `[BoxTag ${this.id}] Cannot setup click events: boxShape=${!!this.boxShape}, boxMesh=${!!this.boxShape?.boxMesh}, clickable=${\n this.config.clickable\n }`,\n )\n return\n }\n\n // 清理旧的事件监听器\n this.cleanupClickEvents()\n\n const handler = (e: Event) => {\n this.plugin.hooks.emit('click', { event: e, target: 'TagBoxModel', tag: this })\n }\n\n // 延迟绑定点击事件,确保 domEvents 系统能够识别新添加的对象\n requestAnimationFrame(() => {\n if (!this.boxShape || !this.plugin.domEvents) {\n console.warn(`[BoxTag ${this.id}] Cannot bind click events: boxShape or domEvents not available`)\n return\n }\n // 只监听 box 本身\n this.clickEventDispose = this.addObjectClickHandler(this, this.boxShape, handler)\n })\n }\n\n /**\n * 清理点击事件\n */\n private cleanupClickEvents() {\n if (this.clickEventDispose) {\n this.clickEventDispose()\n this.clickEventDispose = undefined\n }\n }\n\n /**\n * 更新 Sculpt Box 的数据\n */\n private updateSculptBox() {\n if (!this.boxShape) return\n\n const boxPosition = this.position as unknown as BoxPosition\n if (!boxPosition?.start || !boxPosition?.end || !boxPosition?.rotation) return\n\n // 将 BoxPosition 转换为 Sculpt 数据格式\n const sculptData = this.boxPositionToSculptData(boxPosition)\n\n this.boxShape.setData({\n points: sculptData.bottomPoints.map((p) => p.toArray()) as any,\n heightPoint: sculptData.heightPoint.toArray() as any,\n })\n\n // 重新设置点击事件(子对象可能已更新)\n this.setupClickEvents()\n }\n\n /**\n * 启用编辑器\n * 用于编辑已存在的 Box\n */\n public async editorEnable() {\n // 如果 position 不存在,需要先调用 startDrawing() 创建\n if (!this.position) {\n console.warn('[BoxTag] Cannot enable editor without position. Call startDrawing() first.')\n return\n }\n\n if (!this.boxShape) {\n this.initializeSculptBox()\n }\n\n if (this.boxShape) {\n this.boxShape.visible = true\n this.boxShape.editor.enable()\n }\n }\n\n /**\n * 禁用编辑器\n */\n public editorDisable() {\n if (!this.boxShape) return\n this.boxShape.editor.disable()\n }\n\n /**\n * 从 Sculpt Box 同步 position 到 BoxTag\n */\n private syncBoxPositionFromSculpt() {\n if (!this.boxShape) return\n\n const data = this.boxShape.data\n const bottomPoints = (data.points as [number, number, number][]).map((p) => anyPositionToVector3(p))\n const heightPoint = anyPositionToVector3(data.heightPoint as [number, number, number])\n const newPosition = sculptDataToBoxPosition(bottomPoints, heightPoint)\n\n // 更新内部 position 数据(不触发 set 避免递归)\n ;(this.position as any) = newPosition\n\n // 触发事件\n this.hooks.emit('positionChanged', newPosition)\n }\n\n /**\n * 将 BoxPosition 转换为 Sculpt 需要的数据格式\n */\n private boxPositionToSculptData(boxPosition: BoxPosition): { bottomPoints: THREE.Vector3[]; heightPoint: THREE.Vector3 } {\n const start = anyPositionToVector3(boxPosition.start)\n const end = anyPositionToVector3(boxPosition.end)\n const rotation = new THREE.Euler().fromArray(boxPosition.rotation as [number, number, number])\n\n const center = new THREE.Vector3((start.x + end.x) / 2, (start.y + end.y) / 2, (start.z + end.z) / 2)\n const halfSize = new THREE.Vector3(Math.abs(end.x - start.x) / 2, Math.abs(end.y - start.y) / 2, Math.abs(end.z - start.z) / 2)\n\n // 构建旋转矩阵\n const rotationMatrix = new THREE.Matrix4().makeRotationFromEuler(rotation)\n\n // 单位立方体的底面4个点和一个顶面点\n const unitBottomCorners = [\n new THREE.Vector3(-0.5, -0.5, -0.5),\n new THREE.Vector3(0.5, -0.5, -0.5),\n new THREE.Vector3(0.5, -0.5, 0.5),\n new THREE.Vector3(-0.5, -0.5, 0.5),\n ]\n const unitTopCorner = new THREE.Vector3(-0.5, 0.5, -0.5)\n\n const size = halfSize.clone().multiplyScalar(2)\n const transform = this.workUtil.transform\n const bottomPoints = unitBottomCorners.map((corner) => {\n const point = corner.clone().multiply(size).applyMatrix4(rotationMatrix).add(center)\n return transformPosition(point, transform)\n })\n\n const rawHeightPoint = unitTopCorner.clone().multiply(size).applyMatrix4(rotationMatrix).add(center)\n const heightPoint = transformPosition(rawHeightPoint, transform)\n return { bottomPoints, heightPoint }\n }\n\n /**\n * @description 点击事件处理\n */\n public onClick(params: Pick<TagClickParams, 'target'>) {\n if (params.target !== 'TagBoxModel') return\n this.unfoldAndFoldOthers()\n }\n\n /**\n * @description 展开自己,收起其他标签\n */\n public unfoldAndFoldOthers() {\n // 当 popoverConfig.enabled 为 true 时,展开/收起逻辑无效\n if (this.isPopoverConfigEnabled()) return\n\n // 先检查一下能不能打开/关闭\n const canFold = this.can('fold')\n const canUnfold = this.can('unfold')\n if (canFold && canUnfold) {\n // 展开/收起 点击的标签\n this.state.unfolded = !this.state.unfolded\n this.manuallyOperated = true\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n\n // 点开的话,收起其他标签\n if (this.state.unfolded) {\n this.plugin.tags.forEach((tag) => {\n if (tag.id === this.id) return\n tag.fold()\n })\n }\n }\n }\n\n /**\n * 展开标签详情\n */\n public unfold() {\n if (this.isPopoverConfigEnabled()) return\n this.setUnfold(true)\n }\n\n /**\n * 折叠标签详情\n */\n public fold() {\n if (this.isPopoverConfigEnabled()) return\n this.setUnfold(false)\n }\n\n /**\n * 设置展开/折叠状态\n */\n public setUnfold(unfolded: boolean) {\n if (this.isPopoverConfigEnabled()) return\n\n const canFold = this.can('fold')\n const canUnfold = this.can('unfold')\n if (canFold && canUnfold) {\n this.state.unfolded = unfolded\n this.hooks.emit(unfolded ? 'unfolded' : 'folded')\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n }\n }\n\n /**\n * 更新屏幕位置(用于在 2D UI 中显示内容)\n * 显示在 Box 最右侧的顶点位置\n */\n public updateScreenPosition() {\n const visible = this.currentVisible\n if (!visible) {\n this.screenPosition = null\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n return\n }\n\n const boxPosition = this.position as unknown as BoxPosition\n if (!boxPosition?.start || !boxPosition?.end) {\n this.screenPosition = null\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n return\n }\n\n // 获取 Box 的 8 个顶点\n const start = new THREE.Vector3().fromArray(boxPosition.start)\n const end = new THREE.Vector3().fromArray(boxPosition.end)\n const rotation = new THREE.Euler().fromArray(boxPosition.rotation as [number, number, number])\n\n // 计算 8 个顶点(考虑旋转)\n const vertices = [\n new THREE.Vector3(start.x, start.y, start.z),\n new THREE.Vector3(end.x, start.y, start.z),\n new THREE.Vector3(start.x, end.y, start.z),\n new THREE.Vector3(end.x, end.y, start.z),\n new THREE.Vector3(start.x, start.y, end.z),\n new THREE.Vector3(end.x, start.y, end.z),\n new THREE.Vector3(start.x, end.y, end.z),\n new THREE.Vector3(end.x, end.y, end.z),\n ]\n\n const center = new THREE.Vector3().addVectors(start, end).multiplyScalar(0.5)\n const transform = this.workUtil.transform\n vertices.forEach((v) => {\n v.sub(center).applyEuler(rotation).add(center)\n v.copy(transformPosition(v, transform))\n })\n\n // 找到 x 坐标最大的顶点(最右侧)\n let rightmostVertex = vertices[0]\n vertices.forEach((v) => {\n if (v.x > rightmostVertex.x) {\n rightmostVertex = v\n }\n })\n\n const projected = rightmostVertex.clone().project(this.five.camera)\n\n // 检查是否在视锥体内\n if (projected.x < -1 || projected.x > 1 || projected.y < -1 || projected.y > 1 || projected.z < 0 || projected.z > 1) {\n this.screenPosition = null\n } else if (this.five.renderer) {\n const rendererSize = this.five.renderer.getSize(new THREE.Vector2())\n this.screenPosition = {\n leftPx: ((projected.x + 1) / 2) * rendererSize.x,\n topPx: ((-projected.y + 1) / 2) * rendererSize.y,\n scale: 1,\n }\n }\n\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n }\n\n public get centerPosition() {\n const corners = getBoxCorners(this.position as BoxPosition, this.workUtil.transform)\n const tagPosition = applyMatrixToPoints(corners, this.matrix)\n\n // 找到 x 坐标最大的顶点(最右侧),与 screenPosition 计算逻辑一致\n let rightmostVertex = tagPosition[0]\n tagPosition.forEach((v) => {\n if (v.x > rightmostVertex.x) {\n rightmostVertex = v\n }\n })\n\n return rightmostVertex\n }\n\n /**\n * 应用可见性变化\n */\n public applyVisible() {\n if (this.boxShape) {\n // 检查 boxShape 是否还在 imagePlaneGroup 中\n if (!this.plugin.imagePlaneGroup.children.includes(this.boxShape as any)) {\n console.warn(`[BoxTag ${this.id}] applyVisible: boxShape not in imagePlaneGroup, re-adding...`, {\n boxShapeParent: this.boxShape.parent?.name || 'null',\n imagePlaneGroupChildren: this.plugin.imagePlaneGroup.children.length,\n })\n // 自动修复:重新添加到 imagePlaneGroup\n if (this.boxShape.parent) {\n this.boxShape.parent.remove(this.boxShape)\n }\n this.plugin.imagePlaneGroup.add(this.boxShape)\n }\n this.boxShape.visible = this.visible\n }\n\n // 更新屏幕位置\n this.updateScreenPosition()\n }\n\n /**\n * 销毁标签\n */\n public dispose() {\n // 清理点击事件\n this.cleanupClickEvents()\n\n // 清理 DOM 点击监听\n if (this.domClickDispose) {\n this.domClickDispose()\n this.domClickDispose = undefined\n }\n\n // 清理 Box\n if (this.boxShape) {\n this.boxShape.removeFromParent()\n this.boxShape = undefined\n }\n }\n}\n","import type PanoTagPluginController from '..'\nimport type { TagContentType, Tag as TagData, TagInstance, PolygonPosition, ArrayPosition, TagClickParams } from '../..'\nimport { BaseTag } from './BaseTag'\nimport * as THREE from 'three/webgpu'\nimport type { PartialObjectDeep } from '../../../typings/typings'\nimport type { Tag } from '../..'\nimport { Polygon } from '../../../Sculpt/Objects/Polygon'\nimport { uuid } from '../../../shared-utils'\nimport { anyPositionToVector3 } from '../../../shared-utils/positionToVector3'\n\nexport type PolygonTagInterface<C extends TagContentType = TagContentType> = TagInstance<C, 'Polygon'>\n\n/**\n * Polygon 类型的标签\n * 使用 Sculpt Polygon 进行渲染\n */\nexport class PolygonTag<C extends TagContentType = TagContentType> extends BaseTag<C, 'Polygon'> {\n public declare polygonShape?: Polygon\n private tagStyle?: TagData['style']\n private clickEventDispose?: () => void\n private domClickDispose?: () => void\n public screenPosition: { leftPx: number; topPx: number; scale: number } | null = null\n\n public constructor(plugin: PanoTagPluginController, tagData: TagData) {\n super(plugin, tagData)\n this.tagStyle = tagData.style\n this.initializeSculptPolygon()\n this.updateVisible()\n }\n\n /**\n * 获取 Polygon 样式配置(合并用户配置和默认值)\n */\n private getPolygonStyle() {\n const userStyle = (this.tagStyle as any)?.boxOrPolygon || {}\n return {\n color: userStyle.color ?? 0xffffff,\n opacity: userStyle.opacity ?? 0.4,\n lineColor: userStyle.lineColor ?? userStyle.color ?? 0xffffff,\n lineWidth: userStyle.lineWidth ?? 1,\n }\n }\n\n /**\n * 更新 Polygon 样式\n */\n private updatePolygonStyle() {\n if (!this.polygonShape || !this.polygonShape.areaMesh) return\n\n const style = this.getPolygonStyle()\n this.polygonShape.areaMesh.setStyle(style)\n }\n\n /**\n * 更新标签数据\n */\n public set(tag: PartialObjectDeep<Tag<C, 'Polygon'>>, deepMerge = true) {\n super.set(tag, deepMerge)\n // 更新 style\n if (tag.style) {\n this.tagStyle = { ...this.tagStyle, ...tag.style } as any\n }\n\n if (tag.position) {\n // 更新 Sculpt Polygon 的数据\n if (this.polygonShape) {\n this.updateSculptPolygon()\n } else {\n this.initializeSculptPolygon()\n }\n }\n\n // 如果样式变化,更新 polygon 样式\n if (tag.style && this.polygonShape) {\n this.updatePolygonStyle()\n }\n }\n\n /**\n * 获取多边形的所有角点(世界坐标)\n */\n public getCorners(): THREE.Vector3[] {\n if (!this.polygonShape) return []\n return this.polygonShape.areaMesh.points.map((p) => p.clone())\n }\n\n public getCenter(): ArrayPosition {\n const polygonPosition = this.originPosition as PolygonPosition\n if (!polygonPosition || polygonPosition.length === 0) {\n return [0, 0, 0]\n }\n const center = new THREE.Vector3()\n polygonPosition.forEach((p) => {\n center.add(anyPositionToVector3(p))\n })\n center.divideScalar(polygonPosition.length)\n return center.toArray() as [number, number, number]\n }\n\n /**\n * 计算多边形的法向量\n * 使用前三个点来计算平面的法向量\n */\n public computeNormal(): THREE.Vector3 | undefined {\n const polygonPosition = this.position as unknown as PolygonPosition\n if (!polygonPosition || polygonPosition.length < 3) {\n return new THREE.Vector3(0, 1, 0)\n }\n\n const p0 = anyPositionToVector3(polygonPosition[0])\n const p1 = anyPositionToVector3(polygonPosition[1])\n const p2 = anyPositionToVector3(polygonPosition[2])\n\n const v1 = new THREE.Vector3().subVectors(p1, p0)\n const v2 = new THREE.Vector3().subVectors(p2, p0)\n\n return new THREE.Vector3().crossVectors(v1, v2).normalize()\n }\n\n /**\n * 初始化 Sculpt Polygon\n */\n private initializeSculptPolygon() {\n if (this.polygonShape) return\n\n // 如果业务侧禁用了默认 Polygon mesh 渲染,直接跳过\n if (this.getConfig()?.__experimental_PolygonMeshConfig?.enabled === false) return\n\n const polygonPosition = this.position as unknown as PolygonPosition\n\n // 如果没有 position 或点数少于 3,跳过初始化\n if (!polygonPosition || polygonPosition.length < 3) {\n return\n }\n\n\n // 将 PolygonPosition 转换为 Sculpt 数据格式\n const points = polygonPosition.map((p) => anyPositionToVector3(p))\n // 获取样式配置\n const style = this.getPolygonStyle()\n\n // // 往法向量方向位移一点点\n // const normal = getNormal(points).multiplyScalar(CONST.Z_FIGHTING_OFFSET)\n // const newPoints = points.map((p) => p.clone().add(normal))\n const polygon = new Polygon(\n this.plugin.sculptModules,\n {\n id: uuid(),\n type: 'Polygon',\n points: points,\n style,\n },\n {\n defaultAction: false,\n occlusionVisibility: true,\n occlusionMode: 'depthTest',\n },\n )\n\n polygon.visible = this.visible\n this.plugin.imagePlaneGroup.add(polygon)\n this.polygonShape = polygon\n\n // 监听编辑事件\n polygon.editor.hooks.on('objectUpdate', () => {\n this.syncPolygonPositionFromSculpt()\n })\n\n polygon.editor.disable()\n\n // 添加点击事件监听\n this.setupClickEvents()\n }\n\n /**\n * 设置点击事件\n */\n private setupClickEvents() {\n if (!this.polygonShape || this.config.clickable === false) {\n console.warn(\n `[PolygonTag ${this.id}] Cannot setup click events: polygonShape=${!!this.polygonShape}, clickable=${this.config.clickable}`,\n )\n return\n }\n\n // 清理旧的事件监听器\n this.cleanupClickEvents()\n\n const handler = (e: Event) => {\n this.plugin.hooks.emit('click', { event: e, target: 'TagPolygonModel', tag: this })\n }\n\n requestAnimationFrame(() => {\n if (!this.polygonShape || !this.plugin.domEvents) {\n console.warn(`[PolygonTag ${this.id}] Cannot bind click events: polygonShape or domEvents not available`)\n return\n }\n // 只监听 polygon 本身\n this.clickEventDispose = this.addObjectClickHandler(this, this.polygonShape, handler)\n })\n }\n\n /**\n * 清理点击事件\n */\n private cleanupClickEvents() {\n if (this.clickEventDispose) {\n this.clickEventDispose()\n this.clickEventDispose = undefined\n }\n }\n\n /**\n * 更新 Sculpt Polygon 的数据\n */\n private updateSculptPolygon() {\n if (!this.polygonShape) return\n\n const polygonPosition = this.position as unknown as PolygonPosition\n if (!polygonPosition || polygonPosition.length < 3) return\n\n // 将 PolygonPosition 转换为 Sculpt 数据格式\n const points = polygonPosition.map((p) => anyPositionToVector3(p))\n this.polygonShape.setData({\n points: points.map((p) => p.toArray()) as any,\n style: this.getPolygonStyle(),\n })\n\n // 重新设置点击事件(子对象可能已更新)\n this.setupClickEvents()\n }\n\n /**\n * 启用编辑器\n * 用于编辑已存在的 Polygon\n */\n public async editorEnable() {\n // 如果 position 不存在,需要先调用 startDrawing() 创建\n if (!this.position) {\n console.warn('[PolygonTag] Cannot enable editor without position. Call startDrawing() first.')\n return\n }\n\n if (!this.polygonShape) {\n this.initializeSculptPolygon()\n }\n\n if (this.polygonShape) {\n this.polygonShape.visible = true\n this.polygonShape.editor.enable()\n }\n }\n\n /**\n * 禁用编辑器\n */\n public editorDisable() {\n if (!this.polygonShape) return\n this.polygonShape.editor.disable()\n }\n\n /**\n * 同步 Sculpt Polygon 的数据到 PolygonPosition\n */\n private syncPolygonPositionFromSculpt() {\n if (!this.polygonShape) return\n\n const data = this.polygonShape.data\n const points = (data.points as [number, number, number][]).map((p) => anyPositionToVector3(p))\n\n const newPosition: PolygonPosition = points.map((p) => p.toArray() as [number, number, number])\n\n // 更新内部 position 数据(不触发 set 避免递归)\n ;(this as any).position = newPosition\n\n this.hooks.emit('positionChanged', newPosition)\n }\n\n /**\n * @description 点击事件处理\n */\n public onClick(params: Pick<TagClickParams, 'target'>) {\n if (params.target !== 'TagPolygonModel') return\n this.unfoldAndFoldOthers()\n }\n\n /**\n * @description 展开自己,收起其他标签\n */\n public unfoldAndFoldOthers() {\n // 当 popoverConfig.enabled 为 true 时,展开/收起逻辑无效\n if (this.isPopoverConfigEnabled()) return\n\n // 先检查一下能不能打开/关闭\n const canFold = this.can('fold')\n const canUnfold = this.can('unfold')\n if (canFold && canUnfold) {\n // 展开/收起 点击的标签\n this.state.unfolded = !this.state.unfolded\n this.manuallyOperated = true\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n\n // 点开的话,收起其他标签\n if (this.state.unfolded) {\n this.plugin.tags.forEach((tag) => {\n if (tag.id === this.id) return\n tag.fold()\n })\n }\n }\n }\n\n /**\n * 展开标签详情\n */\n public unfold() {\n if (this.isPopoverConfigEnabled()) return\n this.setUnfold(true)\n }\n\n /**\n * 折叠标签详情\n */\n public fold() {\n if (this.isPopoverConfigEnabled()) return\n this.setUnfold(false)\n }\n\n /**\n * 设置展开/折叠状态\n */\n public setUnfold(unfolded: boolean) {\n if (this.isPopoverConfigEnabled()) return\n\n const canFold = this.can('fold')\n const canUnfold = this.can('unfold')\n if (canFold && canUnfold) {\n this.state.unfolded = unfolded\n this.hooks.emit(unfolded ? 'unfolded' : 'folded')\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n }\n }\n\n /**\n * 获取多边形的中心点\n */\n private getPolygonCenter(): THREE.Vector3 {\n const polygonPosition = this.position as unknown as PolygonPosition\n if (!polygonPosition || polygonPosition.length === 0) {\n return new THREE.Vector3()\n }\n\n const center = new THREE.Vector3()\n polygonPosition.forEach((p) => {\n const point = anyPositionToVector3(p)\n center.add(point)\n })\n center.divideScalar(polygonPosition.length)\n return center\n }\n\n /**\n * 更新屏幕位置(用于在 2D UI 中显示内容)\n * 显示在 Polygon 最右侧的顶点位置\n */\n public updateScreenPosition() {\n const visible = this.currentVisible\n if (!visible) {\n this.screenPosition = null\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n return\n }\n\n const polygonPosition = this.position as unknown as PolygonPosition\n if (!polygonPosition || polygonPosition.length === 0) {\n this.screenPosition = null\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n return\n }\n\n // 找到 x 坐标最大的顶点(最右侧)\n let rightmostVertex = anyPositionToVector3(polygonPosition[0])\n polygonPosition.forEach((pos) => {\n const vertex = anyPositionToVector3(pos)\n if (vertex.x > rightmostVertex.x) {\n rightmostVertex = vertex\n }\n })\n\n const projected = rightmostVertex.clone().project(this.five.camera)\n\n // 检查是否在视锥体内\n if (projected.x < -1 || projected.x > 1 || projected.y < -1 || projected.y > 1 || projected.z < 0 || projected.z > 1) {\n this.screenPosition = null\n } else if (this.five.renderer) {\n const rendererSize = this.five.renderer.getSize(new THREE.Vector2())\n this.screenPosition = {\n leftPx: ((projected.x + 1) / 2) * rendererSize.x,\n topPx: ((-projected.y + 1) / 2) * rendererSize.y,\n scale: 1,\n }\n }\n\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n }\n\n /**\n * 应用可见性变化\n */\n public applyVisible() {\n if (this.polygonShape) {\n // 检查 polygonShape 是否还在 imagePlaneGroup 中\n if (!this.plugin.imagePlaneGroup.children.includes(this.polygonShape as any)) {\n console.warn(`[PolygonTag ${this.id}] applyVisible: polygonShape not in imagePlaneGroup, re-adding...`, {\n polygonShapeParent: this.polygonShape.parent?.name || 'null',\n imagePlaneGroupChildren: this.plugin.imagePlaneGroup.children.length,\n })\n // 自动修复:重新添加到 imagePlaneGroup\n if (this.polygonShape.parent) {\n this.polygonShape.parent.remove(this.polygonShape)\n }\n this.plugin.imagePlaneGroup.add(this.polygonShape)\n }\n this.polygonShape.visible = this.visible\n }\n\n // 更新屏幕位置\n this.updateScreenPosition()\n }\n\n /**\n * 销毁标签\n */\n public dispose() {\n // 清理点击事件\n this.cleanupClickEvents()\n\n // 清理 DOM 点击监听\n if (this.domClickDispose) {\n this.domClickDispose()\n this.domClickDispose = undefined\n }\n\n // 清理 Polygon\n if (this.polygonShape) {\n this.polygonShape.removeFromParent()\n this.polygonShape = undefined\n }\n }\n}\n","import * as THREE from 'three/webgpu'\n\nexport type MaskMaterialStyle = {\n color: number[]\n tolerance: number\n highlightColor: number[]\n opacity: number\n}\n\nconst MAX_MASK_STYLES = 64\nconst STRICT_COLOR_MATCH = 0.5 / 255\n\nexport class MaskNodeMaterial extends THREE.MeshBasicNodeMaterial {\n private readonly maskTextureNode: ReturnType<typeof THREE.TSL.texture>\n private readonly maskTexelSize = THREE.TSL.uniform(new THREE.Vector2(1, 1))\n private readonly slots = Array.from({ length: MAX_MASK_STYLES }, () => ({\n color: THREE.TSL.uniform(new THREE.Vector3()),\n highlight: THREE.TSL.uniform(new THREE.Vector3()),\n opacity: THREE.TSL.uniform(0),\n }))\n private styles: MaskMaterialStyle[] = []\n\n public constructor(texture: THREE.Texture) {\n super({ depthWrite: false, depthTest: false, transparent: true })\n this.maskTextureNode = THREE.TSL.texture(texture)\n this.updateMaskTexture(texture)\n\n const uv = THREE.TSL.uv()\n const quarterTexel = this.maskTexelSize.mul(0.25)\n const center = this.maskTextureNode.sample(uv).rgb\n const samples = [\n this.maskTextureNode.sample(uv.add(quarterTexel.mul(THREE.TSL.vec2(-1, -1)))).rgb,\n this.maskTextureNode.sample(uv.add(quarterTexel.mul(THREE.TSL.vec2(1, -1)))).rgb,\n this.maskTextureNode.sample(uv.add(quarterTexel.mul(THREE.TSL.vec2(-1, 1)))).rgb,\n this.maskTextureNode.sample(uv.add(quarterTexel.mul(THREE.TSL.vec2(1, 1)))).rgb,\n ]\n\n // Use imperative TSL variables so style selection emits a flat WGSL body.\n // Chaining 64 nested selects exceeds shader expression nesting limits.\n const selectedStyle = THREE.TSL.Fn(() => {\n const bestScore = THREE.TSL.float(-1).toVar()\n const bestCoverage = THREE.TSL.float(0).toVar()\n const bestOpacity = THREE.TSL.float(0).toVar()\n const bestHighlight = THREE.TSL.vec3(0).toVar()\n\n for (const slot of this.slots) {\n const exactMatch = (sample: typeof center) =>\n THREE.TSL.select(\n THREE.TSL.abs(sample.r.sub(slot.color.r))\n .add(THREE.TSL.abs(sample.g.sub(slot.color.g)))\n .add(THREE.TSL.abs(sample.b.sub(slot.color.b)))\n .lessThanEqual(STRICT_COLOR_MATCH),\n 1,\n 0,\n )\n const coverage = exactMatch(samples[0]).add(exactMatch(samples[1])).add(exactMatch(samples[2])).add(exactMatch(samples[3])).mul(0.25).toVar()\n const score = coverage.add(exactMatch(center).mul(0.001)).toVar()\n THREE.TSL.If(slot.opacity.greaterThan(0).and(coverage.greaterThan(0)).and(score.greaterThan(bestScore)), () => {\n bestCoverage.assign(coverage)\n bestScore.assign(score)\n bestOpacity.assign(slot.opacity)\n bestHighlight.assign(slot.highlight)\n })\n }\n return THREE.TSL.vec4(bestHighlight, bestOpacity.mul(bestCoverage))\n })()\n this.colorNode = selectedStyle.rgb\n this.opacityNode = selectedStyle.a\n }\n\n public updateMaskTexture(texture: THREE.Texture) {\n this.maskTextureNode.value = texture\n const image = texture.image as { width?: number; height?: number } | undefined\n this.maskTexelSize.value.set(1 / Math.max(image?.width ?? 1, 1), 1 / Math.max(image?.height ?? 1, 1))\n }\n\n public appendStyle(style: MaskMaterialStyle) {\n if (this.styles.length >= MAX_MASK_STYLES) throw new RangeError(`A mask supports at most ${MAX_MASK_STYLES} styles`)\n this.styles.push(style)\n this.writeSlot(this.styles.length - 1, style)\n }\n\n public updateStyle(index: number, style: MaskMaterialStyle) {\n if (index < 0 || index >= this.styles.length) return\n this.styles[index] = style\n this.writeSlot(index, style)\n }\n\n public replaceStyles(styles: MaskMaterialStyle[]) {\n if (styles.length > MAX_MASK_STYLES) throw new RangeError(`A mask supports at most ${MAX_MASK_STYLES} styles`)\n this.styles = styles.slice()\n this.slots.forEach((slot, index) => {\n const style = this.styles[index]\n if (style) this.writeSlot(index, style)\n else slot.opacity.value = 0\n })\n }\n\n private writeSlot(index: number, style: MaskMaterialStyle) {\n const slot = this.slots[index]\n slot.color.value.set(style.color[0] / 255, style.color[1] / 255, style.color[2] / 255)\n slot.highlight.value.set(style.highlightColor[0] / 255, style.highlightColor[1] / 255, style.highlightColor[2] / 255)\n slot.opacity.value = style.opacity\n }\n}\n","import { MaskNodeMaterial, type MaskMaterialStyle } from '../../utils/model/MaskNodeMaterial'\nimport type PanoTagPluginController from '..'\nimport type { TagContentType, Tag as TagData, TagInstance, TagClickParams } from '../..'\nimport { BaseTag } from './BaseTag'\nimport * as THREE from 'three/webgpu'\nimport type { PartialObjectDeep } from '../../../typings/typings'\nimport type { Tag } from '../..'\nimport type { State as FiveState } from '@realsee/five-webgpu'\nimport { animate } from 'animejs'\nimport { transformPosition } from '../../../shared-utils/five/transformPosition'\nimport type { BlinkOptions } from '../../../shared-utils/three/blink'\n\nexport type MaskTagInterface<C extends TagContentType = TagContentType> = TagInstance<C, 'Mask'>\n\n\n/**\n * 解析颜色为 RGB 数组\n * 支持:RGB 数组、十六进制数字、十六进制字符串(#FFFFFF 或 #FFF)\n */\nfunction parseColor(color: [number, number, number] | number | string | undefined): [number, number, number] {\n // RGB 数组\n if (Array.isArray(color)) {\n return color as [number, number, number]\n }\n\n // 十六进制数字\n if (typeof color === 'number') {\n return [(color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff]\n }\n\n // 十六进制字符串\n if (typeof color === 'string') {\n // 移除 # 符号\n let hex = color.trim().replace(/^#/, '')\n\n // 支持简写格式 #FFF -> #FFFFFF\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]\n }\n\n // 解析 RGB\n if (hex.length === 6) {\n const r = parseInt(hex.substring(0, 2), 16)\n const g = parseInt(hex.substring(2, 4), 16)\n const b = parseInt(hex.substring(4, 6), 16)\n\n if (!isNaN(r) && !isNaN(g) && !isNaN(b)) {\n return [r, g, b]\n }\n }\n\n console.warn('[MaskTag] Invalid hex color string:', color)\n }\n\n // 默认黑色\n return [0, 0, 0]\n}\n\n/**\n * Mask 类型的标签\n * 基于全景图 mask 和颜色区域进行物体标记\n */\nexport class MaskTag<C extends TagContentType = TagContentType> extends BaseTag<C, 'Mask'> {\n /**\n * Mask 纹理缓存(静态,所有 MaskTag 实例共享)\n * key: mask URL 或 canvas 的 symbol, value: { texture: THREE.Texture, refCount: number, abortController?: AbortController }\n */\n private static maskTextureCache: Map<string | symbol, { texture: THREE.Texture; refCount: number; abortController?: AbortController }> =\n new Map()\n\n /**\n * Canvas 到 Symbol 的映射(用于缓存 canvas 纹理)\n */\n private static canvasSymbolMap: WeakMap<HTMLCanvasElement, symbol> = new WeakMap()\n\n /** 同点位共用 mesh:key = meshKey(panoIndex + maskKey), value = 共享数据 */\n private static sharedMeshRegistry: Map<\n string,\n {\n mesh: THREE.Mesh\n material: MaskNodeMaterial\n maskTexture: THREE.Texture\n maskSource: string | HTMLCanvasElement\n tagsByColorKey: Map<string, MaskTag>\n styleIndexByColorKey: Map<string, number>\n }\n > = new Map()\n\n /**\n * mask 图片 URL 或 Canvas 元素(2:1 全景图格式)\n */\n public maskUrl: string | HTMLCanvasElement\n\n /**\n * 目标颜色(RGB 格式)\n */\n public targetColor: [number, number, number]\n\n /**\n * mask 渲染的 mesh 对象(使用 Sphere)\n */\n public maskMesh?: THREE.Mesh\n\n /**\n * mask 纹理对象\n */\n private maskTexture?: THREE.Texture\n\n /**\n * 是否正在加载 mask\n */\n private loadingMask = false\n\n /**\n * 资源是否已释放\n */\n private _disposed = false\n\n /**\n * 标签样式配置\n */\n private tagStyle?: TagData['style']\n\n /**\n * 点击事件清理函数\n */\n private clickEventDispose?: () => void\n\n /** 当前 tag 在共享 style 纹理中的下标(color 即 id) */\n private sharedStyleIndex = -1\n /** 共享 mesh 的 registry key,用于 updateMaskStyle / dispose 查找 entry */\n private _sharedMeshKey: string | null = null\n\n public constructor(plugin: PanoTagPluginController, tagData: TagData) {\n super(plugin, tagData)\n\n const maskSource = (tagData as any).mask ?? (tagData as any).maskUrl\n this.maskUrl = maskSource instanceof HTMLCanvasElement || (typeof maskSource === 'string' && maskSource) ? maskSource : ('' as string)\n\n const color = (tagData as any).color\n this.targetColor = parseColor(color)\n if (!color) {\n console.warn(`[MaskTag] No color provided for tag ${tagData.id}, using default [0, 0, 0]`)\n }\n this.tagStyle = tagData.style\n this.updateVisible()\n if (this.currentVisible) {\n this.initializeMaskMesh()\n }\n }\n\n private getColorKey(): string {\n return `${this.targetColor[0]},${this.targetColor[1]},${this.targetColor[2]}`\n }\n\n /** 同点位共用一个 mesh,key 仅用 panoIndex(string/canvas 切换时不会因 key 不同而重复创建) */\n private static getMeshKey(panoIndex: number): string {\n return String(panoIndex)\n }\n\n /**\n * 初始化/挂载到同点位共享 mesh,用 appendStyleToMaterial 注册本 tag 的 style(color 即 id)\n */\n private async initializeMaskMesh() {\n if (this._disposed || !this.maskUrl) return\n const panoIndex = this.fiveState?.panoIndex\n if (typeof panoIndex !== 'number') return\n this.loadingMask = true\n try {\n const texture = await MaskTag.loadMaskTexture(this.maskUrl)\n this.maskTexture = texture\n const meshKey = MaskTag.getMeshKey(panoIndex)\n this._sharedMeshKey = meshKey\n let entry = MaskTag.sharedMeshRegistry.get(meshKey)\n const colorKey = this.getColorKey()\n const style = this.buildStyleForMaterial()\n\n if (!entry) {\n entry = MaskTag.createSharedMesh(texture, this.maskUrl, this.plugin)\n MaskTag.sharedMeshRegistry.set(meshKey, entry)\n this.plugin.imagePlaneGroup.add(entry.mesh)\n } else if (entry.maskSource !== this.maskUrl) {\n // 同点位 mask 源从 string↔canvas 切换:只换纹理,不新建 mesh\n MaskTag.releaseMaskTexture(entry.maskSource)\n entry.maskTexture = texture\n entry.maskSource = this.maskUrl\n entry.material.updateMaskTexture(texture)\n }\n\n const idx = entry.styleIndexByColorKey.get(colorKey)\n if (idx !== undefined) {\n this.sharedStyleIndex = idx\n this.maskMesh = entry.mesh\n this.updateStyleSlotInMaterial(entry.material, idx, style)\n } else {\n entry.tagsByColorKey.set(colorKey, this)\n this.appendStyleToMaterial(entry.material, style)\n this.sharedStyleIndex = entry.tagsByColorKey.size - 1\n entry.styleIndexByColorKey.set(colorKey, this.sharedStyleIndex)\n this.maskMesh = entry.mesh\n }\n\n this.setupSharedMeshRaycast(entry)\n this.updateMeshTransform()\n this.setupClickEvents()\n this.updateScreenPosition()\n entry.mesh.visible = true\n } finally {\n this.loadingMask = false\n }\n }\n\n /** 构建用于 mergedTexture 的 style 对象(color 作 id),tolerance 0–255 */\n private buildStyleForMaterial(): MaskMaterialStyle {\n const s = this.getMaskStyle()\n const tol = s.tolerance\n const tolerance255 = tol <= 1 ? tol * 255 : tol\n return {\n color: [this.targetColor[0], this.targetColor[1], this.targetColor[2], 1],\n tolerance: tolerance255,\n highlightColor: s.highlightColor,\n opacity: this.enabled && this.visible ? s.opacity : 0,\n }\n }\n\n private static createSharedMesh(\n maskTexture: THREE.Texture,\n maskSource: string | HTMLCanvasElement,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- 保留参数以统一调用方式\n _plugin: PanoTagPluginController,\n ): NonNullable<ReturnType<typeof MaskTag.sharedMeshRegistry.get>> {\n const material = new MaskNodeMaterial(maskTexture)\n const geometry = new THREE.SphereGeometry(1, 60, 40)\n geometry.rotateY(-Math.PI / 2)\n geometry.scale(-1, 1, 1)\n const mesh = new THREE.Mesh(geometry, material)\n mesh.renderOrder = -1000\n ;(mesh as any).__maskMesh = true\n\n return {\n mesh,\n material,\n maskTexture,\n maskSource,\n tagsByColorKey: new Map(),\n styleIndexByColorKey: new Map(),\n }\n }\n\n /** 仅更新材质中某一 slot 的 style(用于 enable/disable/updateMaskStyle) */\n private updateStyleSlotInMaterial(material: MaskNodeMaterial, styleIndex: number, newStyle: MaskMaterialStyle) {\n material.updateStyle(styleIndex, newStyle)\n this.five.needsRender = true\n }\n\n private setupSharedMeshRaycast(entry: NonNullable<ReturnType<typeof MaskTag.sharedMeshRegistry.get>>) {\n const mesh = entry.mesh\n if ((mesh as any).__maskRaycastSet) return\n ;(mesh as any).__maskRaycastSet = true\n\n let cachedImageData: ImageData | null = null\n let cachedTexture: THREE.Texture | null = null\n const getImageData = (): ImageData | null => {\n const tex = entry.maskTexture\n if (!tex?.image) return null\n if (cachedTexture === tex && cachedImageData) return cachedImageData\n cachedTexture = tex\n try {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n if (!ctx) return null\n const img = tex.image as CanvasImageSource & { width: number; height: number }\n canvas.width = img.width\n canvas.height = img.height\n ctx.drawImage(img, 0, 0)\n cachedImageData = ctx.getImageData(0, 0, img.width, img.height)\n return cachedImageData\n } catch {\n return null\n }\n }\n\n const originalRaycast = mesh.raycast.bind(mesh)\n mesh.raycast = (raycaster: THREE.Raycaster, intersects: THREE.Intersection[]) => {\n const temp: THREE.Intersection[] = []\n originalRaycast(raycaster, temp)\n if (temp.length === 0) return\n const intersection = temp[0]\n if (!intersection.uv || !entry.maskTexture?.image) return\n const imageData = getImageData()\n if (!imageData) return\n const x = Math.floor(intersection.uv.x * imageData.width)\n const y = Math.floor((1 - intersection.uv.y) * imageData.height)\n const i = (y * imageData.width + x) * 4\n const pixel = [imageData.data[i], imageData.data[i + 1], imageData.data[i + 2]]\n\n const STRICT_MATCH = 0.5 / 255\n for (const [, tag] of entry.tagsByColorKey) {\n if (!tag.enabled || tag.config?.clickable === false) continue\n const [r, g, b] = tag.targetColor\n const gap = Math.abs(pixel[0] / 255 - r / 255) + Math.abs(pixel[1] / 255 - g / 255) + Math.abs(pixel[2] / 255 - b / 255)\n if (gap <= STRICT_MATCH) {\n ;(mesh.userData as any).__lastHitTag = tag\n intersects.push(intersection)\n return\n }\n }\n }\n }\n\n /**\n * 计算法向量\n * Mask 标签返回向上的法向量(因为是贴在 cube 面上)\n */\n public computeNormal(): THREE.Vector3 {\n return new THREE.Vector3(0, 1, 0)\n }\n\n /**\n * 不把共享 mesh 作为 blink 目标,闪烁通过本 tag 的 style opacity 动画实现\n */\n protected getAdditionalBlinkTargets(): any | any[] | null {\n return null\n }\n\n /**\n * 闪烁仅针对本 tag:通过改变本 tag 在 merged texture 中的 opacity 实现\n */\n public override async blink(animeConfig?: BlinkOptions) {\n if (!this.maskMesh || this._sharedMeshKey === null || this.sharedStyleIndex < 0) return\n const entry = MaskTag.sharedMeshRegistry.get(this._sharedMeshKey)\n if (!entry) return\n\n const baseStyle = this.buildStyleForMaterial()\n const baseOpacity = baseStyle.opacity\n const blinkTarget = { opacity: baseOpacity }\n\n const duration = (animeConfig?.duration as number) ?? 300\n const loop = (animeConfig?.loop as number) ?? 4\n\n const instance = animate(blinkTarget, {\n opacity: [0, 1],\n duration,\n ease: (animeConfig?.ease as string) ?? 'inOutQuad',\n alternate: true,\n loop,\n onUpdate: () => {\n const style = this.buildStyleForMaterial()\n style.opacity = blinkTarget.opacity\n this.updateStyleSlotInMaterial(entry.material, this.sharedStyleIndex, style)\n },\n })\n\n try {\n await instance\n } catch {\n // 动画被中断忽略\n } finally {\n this.updateMaskStyle()\n }\n }\n\n /**\n * 更新标签数据\n */\n public set(tag: PartialObjectDeep<Tag<C, 'Mask'>>, deepMerge = true) {\n super.set(tag, deepMerge)\n\n // 更新 style\n if (tag.style) {\n this.tagStyle = { ...this.tagStyle, ...tag.style } as any\n // style.mask 影响高亮颜色等渲染,需更新 shader\n if ((tag.style as any)?.mask) {\n this.updateMaskStyle()\n }\n }\n\n // 更新 mask URL(支持 mask 或 maskUrl 字段):只更新共享 mesh 的 texture,不 unregister\n const newMask = (tag as any).mask ?? (tag as any).maskUrl\n if (newMask && newMask !== this.maskUrl) {\n this.maskUrl = newMask\n this.updateSharedMeshTexture()\n }\n\n // 更新颜色\n if ((tag as any).color !== undefined) {\n this.targetColor = parseColor((tag as any).color)\n // 颜色变化,需要更新 shader uniform\n this.updateMaskStyle()\n }\n\n if (this.maskMesh) this.updateMaskStyle()\n }\n\n /** 供 rebuildEntryMaterial 使用:返回当前 tag 的 style 对象 */\n public getStyleForMaterial(): MaskMaterialStyle {\n return this.buildStyleForMaterial()\n }\n\n /**\n * 重写 getVisible 方法\n * Mask 标签仅在当前点位可见\n */\n public getVisible(fiveState?: Partial<FiveState>) {\n try {\n if (!this.enabled) return false\n if (!this.plugin.state.enabled) return false\n if (!this.fiveUtil.model) return false\n\n // 检查 maskUrl 是否有效\n if (!this.maskUrl) {\n return false\n }\n\n const state = { ...this.five.getCurrentState(), ...fiveState }\n const { panoIndex } = state\n\n // 强制检查:仅当前点位的标签才可见\n if (panoIndex !== this.fiveState?.panoIndex) {\n return false\n }\n\n // 调用父类的可见性检查(mode、距离等)\n return super.getVisible(state)\n } catch (error) {\n return false\n }\n }\n\n /**\n * 重写 computeVisible 方法\n * 增加 Mask 特有的可见性检查逻辑,用于 whyHide 功能\n */\n protected computeVisible(_fiveState?: Partial<FiveState>) {\n const state = { ...this.five.getCurrentState(), ..._fiveState }\n const { panoIndex } = state\n\n // Mask 特有检查:maskUrl 是否有效\n // if (!this.maskUrl) {\n // return {\n // value: false,\n // reason: {\n // type: 'maskUrl invalid',\n // detail: `Mask 标签 ${this.id} 的 maskUrl 无效`,\n // maskUrl: this.maskUrl,\n // },\n // }\n // }\n\n // Mask 特有检查:点位是否一致\n if (panoIndex !== this.fiveState?.panoIndex) {\n return {\n value: false,\n reason: {\n type: 'panoIndex mismatch',\n detail: `Mask 标签仅在当前点位可见。当前点位: ${panoIndex}, 标签点位: ${this.fiveState?.panoIndex}`,\n currentPanoIndex: panoIndex,\n tagPanoIndex: this.fiveState?.panoIndex,\n },\n }\n }\n\n // 调用父类的可见性检查(mode、距离等)\n return super.computeVisible(_fiveState)\n }\n\n /**\n * 点击事件处理\n */\n public onClick(params: Pick<TagClickParams, 'target'>) {\n if (params.target !== 'TagMaskModel') return\n this.unfoldAndFoldOthers()\n }\n\n /**\n * 展开自己,收起其他标签\n */\n public unfoldAndFoldOthers() {\n // 当 popoverConfig.enabled 为 true 时,展开/收起逻辑无效\n if (this.isPopoverConfigEnabled()) return\n\n const canFold = this.can('fold')\n const canUnfold = this.can('unfold')\n if (canFold && canUnfold) {\n this.state.unfolded = !this.state.unfolded\n this.manuallyOperated = true\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n\n if (this.state.unfolded) {\n this.plugin.tags.forEach((tag) => {\n if (tag.id === this.id) return\n tag.fold()\n })\n }\n }\n }\n\n /**\n * 展开标签详情\n */\n public unfold() {\n if (this.isPopoverConfigEnabled()) return\n this.setUnfold(true)\n }\n\n /**\n * 折叠标签详情\n */\n public fold() {\n if (this.isPopoverConfigEnabled()) return\n this.setUnfold(false)\n }\n\n /**\n * 设置展开/折叠状态\n */\n public setUnfold(unfolded: boolean) {\n if (this.isPopoverConfigEnabled()) return\n\n const canFold = this.can('fold')\n const canUnfold = this.can('unfold')\n if (canFold && canUnfold) {\n this.state.unfolded = unfolded\n this.hooks.emit(unfolded ? 'unfolded' : 'folded')\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n }\n }\n\n /**\n * 更新屏幕位置\n */\n public updateScreenPosition() {\n if (!this.currentVisible || !this.position || !Array.isArray(this.position)) {\n this.screenPosition = null\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n return\n }\n\n const worldPosition = new THREE.Vector3(...(this.position as [number, number, number]))\n const projected = worldPosition.clone().project(this.five.camera)\n\n if (this.five.renderer) {\n const rendererSize = this.five.renderer.getSize(new THREE.Vector2())\n this.screenPosition = {\n leftPx: ((projected.x + 1) / 2) * rendererSize.x,\n topPx: ((-projected.y + 1) / 2) * rendererSize.y,\n scale: 1,\n }\n }\n\n this.plugin.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n }\n\n /**\n * 应用可见性变化(通过 style opacity 控制展示,共享 mesh 保持 visible)\n */\n public applyVisible() {\n try {\n if (!this.maskUrl) return\n if (this.visible && !this.loadingMask) {\n this.initializeMaskMesh()\n }\n if (this.maskMesh) {\n this.updateMaskStyle()\n this.updateMeshTransform()\n }\n this.updateScreenPosition()\n } catch (error) {\n console.error(`[MaskTag] Error in applyVisible for tag ${this.id}:`, error)\n }\n }\n\n /**\n * 更新 mesh 的位置和旋转(跟随观察者)\n * 参考 itemMask 实现\n */\n private updateMeshTransform() {\n if (!this.maskMesh) return\n\n const panoIndex = this.fiveState?.panoIndex\n if (panoIndex === undefined) return\n\n const observer = this.workUtil.getObserver(panoIndex)\n if (!observer) return\n\n // 设置 mesh 位置和旋转与观察者一致(参考 itemMask)\n this.maskMesh.position.copy(transformPosition(observer.position, this.workUtil.transform))\n this.maskMesh.quaternion.copy(observer.quaternion)\n\n const translation = new THREE.Vector3()\n const quaternion = new THREE.Quaternion()\n const scale = new THREE.Vector3()\n this.workUtil.transform.decompose(translation, quaternion, scale)\n this.maskMesh.quaternion.multiply(quaternion)\n\n this.five.needsRender = true\n }\n\n /**\n * 步骤1:从材质中解析出 styleList\n * @param {MaskNodeMaterial} material - 目标材质\n * @returns {Array} 解析后的 styleList\n */\n private appendStyleToMaterial(material: MaskNodeMaterial, newStyle: MaskMaterialStyle) {\n material.appendStyle(newStyle)\n }\n\n /**\n * 获取 Mask 样式配置(合并用户配置和默认值)\n */\n private getMaskStyle() {\n const userStyle = (this.tagStyle as any)?.mask || {}\n\n // 处理高亮颜色:支持 RGB 数组、十六进制数字、十六进制字符串,或默认蓝色\n let highlightColor: [number, number, number] = [255, 255, 255] // 默认蓝色\n if (userStyle.color !== undefined) {\n highlightColor = parseColor(userStyle.color)\n } else if (userStyle.highlightColor !== undefined) {\n // 兼容旧的 highlightColor 字段\n highlightColor = parseColor(userStyle.highlightColor as any)\n }\n\n return {\n tolerance: userStyle.tolerance ?? 0.001, // 参考 itemMask 默认 0.001(归一化后的值)\n highlightColor: highlightColor,\n opacity: userStyle.opacity ?? 0.6, // 默认 0.6(用于填充区域)\n }\n }\n\n /**\n * 设置点击事件(仅当 raycast 命中本 tag 的 color 时触发)\n */\n private setupClickEvents() {\n if (!this.maskMesh || this.config?.clickable === false) return\n this.cleanupClickEvents()\n const handler = (e: Event) => {\n const hitTag = (this.maskMesh?.userData as any)?.__lastHitTag\n if (hitTag === this) {\n this.plugin.hooks.emit('click', { event: e, target: 'TagMaskModel', tag: this })\n }\n }\n requestAnimationFrame(() => {\n if (!this.maskMesh || !this.plugin.domEvents) return\n this.clickEventDispose = this.addObjectClickHandler(this, this.maskMesh, handler)\n })\n }\n\n /**\n * 清理点击事件\n */\n private cleanupClickEvents() {\n if (this.clickEventDispose) {\n this.clickEventDispose()\n this.clickEventDispose = undefined\n }\n }\n\n /**\n * 重新加载 mask 图:从旧点位 mesh 注销,再按新 maskUrl 初始化\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- 保留参数与 set() 调用一致\n private reloadMask(_oldMaskUrl?: string | HTMLCanvasElement) {\n const panoIndex = this.fiveState?.panoIndex\n const colorKey = this.getColorKey()\n const oldKey = typeof panoIndex === 'number' ? MaskTag.getMeshKey(panoIndex) : this._sharedMeshKey\n\n if (oldKey) {\n const entry = MaskTag.sharedMeshRegistry.get(oldKey)\n if (entry) {\n entry.tagsByColorKey.delete(colorKey)\n entry.styleIndexByColorKey.delete(colorKey)\n if (entry.tagsByColorKey.size === 0) {\n if (entry.mesh.parent) entry.mesh.parent.remove(entry.mesh)\n entry.mesh.geometry.dispose()\n ;(entry.mesh.material as THREE.Material).dispose()\n MaskTag.releaseMaskTexture(entry.maskSource)\n MaskTag.sharedMeshRegistry.delete(oldKey)\n }\n }\n }\n\n this.maskMesh = undefined\n this._sharedMeshKey = null\n this.sharedStyleIndex = -1\n this.maskTexture = undefined\n\n if (this.visible && !this.loadingMask) {\n this.initializeMaskMesh()\n }\n }\n\n /**\n * changeTagById 改 mask 时:只更新共享 mesh 的 texture,不 unregister\n * 有 entry 则换图;无 entry 则走完整初始化\n */\n private async updateSharedMeshTexture(): Promise<void> {\n if (this._disposed || !this.maskUrl) return\n const panoIndex = this.fiveState?.panoIndex\n if (typeof panoIndex !== 'number') return\n const meshKey = MaskTag.getMeshKey(panoIndex)\n const entry = MaskTag.sharedMeshRegistry.get(meshKey)\n if (!entry) {\n await this.initializeMaskMesh()\n return\n }\n if (entry.maskSource === this.maskUrl) return\n const texture = await MaskTag.loadMaskTexture(this.maskUrl)\n this.maskTexture = texture\n MaskTag.releaseMaskTexture(entry.maskSource)\n entry.maskTexture = texture\n entry.maskSource = this.maskUrl\n entry.material.updateMaskTexture(texture)\n this.five.needsRender = true\n }\n\n /**\n * 更新当前 tag 在共享材质中的 style slot(color/style 控制展示)\n */\n public updateMaskStyle() {\n if (!this.maskMesh || this._sharedMeshKey === null || this.sharedStyleIndex < 0) return\n const entry = MaskTag.sharedMeshRegistry.get(this._sharedMeshKey)\n if (!entry) return\n this.updateStyleSlotInMaterial(entry.material, this.sharedStyleIndex, this.buildStyleForMaterial())\n }\n\n /**\n * 更新 Canvas 纹理(仅当 maskUrl 为 Canvas 时有效)\n * 当 canvas 内容发生变化时,调用此方法更新渲染\n */\n public updateCanvasTexture() {\n if (!this.maskTexture || typeof this.maskUrl === 'string') {\n console.warn('[MaskTag] updateCanvasTexture only works for Canvas-based masks')\n return\n }\n\n // 标记纹理需要更新\n if (this.maskTexture instanceof THREE.CanvasTexture) {\n this.maskTexture.needsUpdate = true\n this.five.needsRender = true\n console.log('[MaskTag] Canvas texture updated')\n }\n }\n\n /**\n * 清理当前标签:从共享材质中删除本 tag 的样式槽,并更新材质;\n * 若该点位已无其他 tag 则销毁 mesh 并释放纹理。\n */\n private disposeMaskResources() {\n if (this._disposed) return\n this._disposed = true\n\n this.cleanupClickEvents()\n\n const meshKey = this._sharedMeshKey\n const colorKey = this.getColorKey()\n if (meshKey) {\n const entry = MaskTag.sharedMeshRegistry.get(meshKey)\n if (entry) {\n // 只删除当前这一个标签的样式:从 map 移除\n entry.tagsByColorKey.delete(colorKey)\n entry.styleIndexByColorKey.delete(colorKey)\n if (entry.tagsByColorKey.size === 0) {\n // 该点位已无 tag,销毁 mesh\n if (entry.mesh.parent) entry.mesh.parent.remove(entry.mesh)\n entry.mesh.geometry.dispose()\n ;(entry.mesh.material as THREE.Material).dispose()\n MaskTag.releaseMaskTexture(entry.maskSource)\n MaskTag.sharedMeshRegistry.delete(meshKey)\n } else {\n // 还有其它 tag:从材质中移除本 tag 的样式槽,按剩余 tag 重建 mergedTexture\n MaskTag.rebuildEntryMaterial(entry)\n }\n }\n }\n\n this.maskMesh = undefined\n this._sharedMeshKey = null\n this.sharedStyleIndex = -1\n this.maskTexture = undefined\n this.five.needsRender = true\n }\n\n /**\n * 清理 MaskTag 特有的资源(公开方法)\n */\n public dispose() {\n this.disposeMaskResources()\n }\n\n /**\n * 禁用标签(通过 style opacity=0 隐藏,不拆 mesh)\n */\n public override disable() {\n super.disable()\n this.updateMaskStyle()\n }\n\n /**\n * 启用标签(恢复 style 展示)\n */\n public override enable() {\n super.enable()\n this.updateMaskStyle()\n }\n\n /**\n * 销毁标签(重写父类方法)\n */\n public override destroy(notify = true) {\n this.disposeMaskResources()\n super.destroy(notify)\n }\n\n /**\n * 清除所有点位共享 mesh(重新 load 数据前调用)\n */\n public static clearSharedMeshRegistry(): void {\n MaskTag.sharedMeshRegistry.forEach((entry) => {\n entry.tagsByColorKey.forEach((tag) => {\n tag.maskMesh = undefined\n tag._sharedMeshKey = null\n tag.sharedStyleIndex = -1\n })\n if (entry.mesh.parent) entry.mesh.parent.remove(entry.mesh)\n entry.mesh.geometry.dispose()\n ;(entry.mesh.material as THREE.Material).dispose()\n MaskTag.releaseMaskTexture(entry.maskSource)\n })\n MaskTag.sharedMeshRegistry.clear()\n }\n\n /**\n * 将 style 列表写入材质(用于重建材质)\n */\n private static writeStyleListToMaterial(material: MaskNodeMaterial, styleList: MaskMaterialStyle[]): void {\n material.replaceStyles(styleList)\n }\n\n /**\n * destroy 后重建该点位材质,更新剩余 tag 的 styleIndex\n */\n private static rebuildEntryMaterial(entry: NonNullable<ReturnType<typeof MaskTag.sharedMeshRegistry.get>>): void {\n const tags = Array.from(entry.tagsByColorKey.values()).sort((a, b) => a.sharedStyleIndex - b.sharedStyleIndex)\n if (tags.length === 0) return\n const styleList = tags.map((t) => t.getStyleForMaterial())\n MaskTag.writeStyleListToMaterial(entry.material, styleList)\n tags.forEach((t, i) => {\n t.sharedStyleIndex = i\n entry.styleIndexByColorKey.set(`${t.targetColor[0]},${t.targetColor[1]},${t.targetColor[2]}`, i)\n })\n }\n\n /**\n * 获取 mask 的缓存 key\n * @param maskSource mask URL 或 Canvas\n * @returns 缓存 key\n */\n private static getMaskCacheKey(maskSource: string | HTMLCanvasElement): string | symbol {\n if (typeof maskSource === 'string') {\n return maskSource\n } else {\n // Canvas 使用 WeakMap 存储的 symbol 作为 key\n let symbol = MaskTag.canvasSymbolMap.get(maskSource)\n if (!symbol) {\n symbol = Symbol('canvas-mask')\n MaskTag.canvasSymbolMap.set(maskSource, symbol)\n }\n return symbol\n }\n }\n\n /**\n * 加载 Mask 纹理(静态方法,支持缓存和引用计数)\n * @param maskSource mask 图片 URL 或 Canvas 元素\n * @returns Promise<THREE.Texture>\n */\n private static async loadMaskTexture(maskSource: string | HTMLCanvasElement): Promise<THREE.Texture> {\n const cacheKey = MaskTag.getMaskCacheKey(maskSource)\n\n // 检查缓存\n const cached = MaskTag.maskTextureCache.get(cacheKey)\n if (cached) {\n // 增加引用计数\n cached.refCount++\n return cached.texture\n }\n\n // 性能监控:记录开始时间\n const loadStartTime = performance.now()\n\n // 创建 AbortController 用于取消加载\n const abortController = new AbortController()\n\n try {\n let texture: THREE.Texture\n\n if (typeof maskSource === 'string') {\n // 从 URL 加载纹理\n const textureLoader = new THREE.TextureLoader()\n\n texture = await new Promise<THREE.Texture>((resolve, reject) => {\n // 检查是否已取消\n if (abortController.signal.aborted) {\n reject(new Error('Load aborted'))\n return\n }\n\n textureLoader.load(\n maskSource,\n (tex) => {\n if (abortController.signal.aborted) {\n tex.dispose()\n reject(new Error('Load aborted'))\n } else {\n resolve(tex)\n }\n },\n undefined,\n (error) => {\n reject(error)\n },\n )\n\n // 监听取消信号\n abortController.signal.addEventListener('abort', () => {\n reject(new Error('Load aborted'))\n })\n })\n } else {\n // 从 Canvas 创建纹理\n texture = new THREE.CanvasTexture(maskSource)\n // 重要:标记纹理需要更新,确保上传到 GPU\n texture.needsUpdate = true\n console.log('[MaskTag] Created texture from canvas, size:', maskSource.width, 'x', maskSource.height)\n }\n\n // 性能优化:配置纹理参数\n texture.wrapS = THREE.ClampToEdgeWrapping\n texture.wrapT = THREE.ClampToEdgeWrapping\n\n // Mask 依赖精确颜色作为标签 ID,使用最近邻过滤避免颜色在边界处被插值污染\n texture.minFilter = THREE.NearestFilter\n texture.magFilter = THREE.NearestFilter\n\n // 性能优化:生成 mipmap(如果需要)\n // 注意:对于需要精确颜色匹配的 mask 图,不建议使用 mipmap\n // texture.generateMipmaps = false\n\n // 性能优化:设置各向异性过滤(提升倾斜角度观看的质量)\n // 适度的各向异性过滤可以在不显著增加性能开销的情况下提升质量\n texture.anisotropy = 4\n\n // Canvas 纹理需要确保立即更新\n if (texture instanceof THREE.CanvasTexture) {\n texture.needsUpdate = true\n }\n\n // 缓存纹理\n MaskTag.maskTextureCache.set(cacheKey, {\n texture,\n refCount: 1,\n abortController,\n })\n\n // 性能监控:记录加载时间\n const loadTime = performance.now() - loadStartTime\n const sourceDesc = typeof maskSource === 'string' ? maskSource.substring(0, 50) : 'Canvas'\n console.log(`[MaskTag Performance] Texture loaded in ${loadTime.toFixed(2)}ms, source: ${sourceDesc}`)\n\n // 内存监控:记录纹理信息\n if (texture.image) {\n const memoryMB = (((texture.image as { width: number; height: number }).width * (texture.image as { width: number; height: number }).height * 4) / (1024 * 1024)).toFixed(2)\n console.log(`[MaskTag Memory] Texture size: ${(texture.image as { width: number; height: number }).width}x${(texture.image as { width: number; height: number }).height}, estimated memory: ${memoryMB}MB`)\n }\n\n return texture\n } catch (error) {\n const sourceDesc = typeof maskSource === 'string' ? maskSource : 'Canvas'\n console.error('[MaskTag] Failed to load mask texture:', sourceDesc, error)\n throw error\n }\n }\n\n /**\n * 释放 Mask 纹理(静态方法)\n * @param maskSource mask 图片 URL 或 Canvas 元素\n */\n private static releaseMaskTexture(maskSource: string | HTMLCanvasElement): void {\n const cacheKey = MaskTag.getMaskCacheKey(maskSource)\n const cached = MaskTag.maskTextureCache.get(cacheKey)\n if (!cached) return\n\n // 减少引用计数\n cached.refCount--\n\n // 如果引用计数为 0,释放纹理\n if (cached.refCount <= 0) {\n // 性能监控:记录释放的纹理\n const sourceDesc = typeof maskSource === 'string' ? maskSource.substring(0, 50) : 'Canvas'\n console.log(`[MaskTag Memory] Releasing texture (refCount=0): ${sourceDesc}`)\n\n // 取消加载(如果还在加载中)\n cached.abortController?.abort()\n\n // 释放纹理资源\n cached.texture.dispose()\n\n // 从缓存中移除\n MaskTag.maskTextureCache.delete(cacheKey)\n }\n }\n\n /**\n * 获取当前缓存的纹理统计信息(用于性能监控和调试)\n * @returns 缓存统计信息\n */\n public static getCacheStats(): {\n totalCached: number\n totalRefCount: number\n estimatedMemoryMB: number\n cacheEntries: Array<{ source: string; refCount: number; sizeMB: number }>\n } {\n let totalRefCount = 0\n let estimatedMemoryMB = 0\n const cacheEntries: Array<{ source: string; refCount: number; sizeMB: number }> = []\n\n MaskTag.maskTextureCache.forEach((cached, key) => {\n totalRefCount += cached.refCount\n\n // 估算内存占用\n let sizeMB = 0\n if (cached.texture.image) {\n const width = (cached.texture.image as { width?: number; height?: number }).width || 0\n const height = (cached.texture.image as { width?: number; height?: number }).height || 0\n sizeMB = (width * height * 4) / (1024 * 1024) // RGBA 4 bytes per pixel\n estimatedMemoryMB += sizeMB\n }\n\n // 根据 key 类型生成描述\n const sourceDesc = typeof key === 'string' ? key.substring(0, 80) : '[Canvas]'\n\n cacheEntries.push({\n source: sourceDesc,\n refCount: cached.refCount,\n sizeMB: parseFloat(sizeMB.toFixed(2)),\n })\n })\n\n return {\n totalCached: MaskTag.maskTextureCache.size,\n totalRefCount,\n estimatedMemoryMB: parseFloat(estimatedMemoryMB.toFixed(2)),\n cacheEntries,\n }\n }\n\n /**\n * 强制清理所有缓存的纹理(用于内存管理,谨慎使用)\n * 注意:这会释放所有纹理,即使它们仍在使用中\n */\n public static clearAllCache(): void {\n console.warn('[MaskTag] Clearing all texture cache')\n\n MaskTag.maskTextureCache.forEach((cached) => {\n cached.abortController?.abort()\n cached.texture.dispose()\n })\n\n MaskTag.maskTextureCache.clear()\n }\n}\n","<!-- 图文标签 -->\n<script lang=\"ts\">\n import type { PointTagInstance } from '../../../typings'\n import Audio from '../../Common/Audio.svelte'\n import AudioIcon from '../../Common/Icon/audioIcon.svelte'\n import { createEventDispatcher } from 'svelte'\n\n export let playing = false\n export let tag: PointTagInstance<'Audio'>\n \n // 接收来自 TagPoint 的事件处理器\n export let handlePointClick: (event: MouseEvent) => void = () => {}\n export let handleMouseEnter: (event: PointerEvent) => void = () => {}\n export let handleMouseLeave: (event: PointerEvent) => void = () => {}\n \n const dispatch = createEventDispatcher()\n \n // 音频事件处理器\n const audioEventHandlers = {\n audioRef: (event) => dispatch('audioRef', event.detail),\n play: () => {\n playing = true\n dispatch('play')\n },\n pause: () => {\n playing = false\n dispatch('pause')\n },\n error: () => {\n playing = false\n dispatch('pause')\n },\n timeupdate: (event) => dispatch('timeupdate', event.detail),\n duration: (event) => dispatch('duration', event.detail)\n }\n</script>\n\n<Audio\n url={tag.data.audioUrl}\n enable={tag.state.visible}\n style=\"width: max-content; height: max-content;\"\n hooksInfo={{ tag }}\n on:play={audioEventHandlers.play}\n on:pause={audioEventHandlers.pause}\n on:error={audioEventHandlers.error}\n on:timeupdate={audioEventHandlers.timeupdate}\n on:duration={audioEventHandlers.duration}\n on:audioRef={audioEventHandlers.audioRef}\n>\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div \n class=\"audio-tag-point\"\n on:click={handlePointClick}\n on:pointerenter={handleMouseEnter}\n on:pointerleave={handleMouseLeave}\n >\n <AudioIcon {playing} width={24} />\n </div>\n</Audio>\n\n<style>\n .audio-tag-point {\n position: relative;\n width: max-content;\n height: max-content;\n padding: 4px;\n border-radius: 100%;\n border: 1px solid rgba(255, 255, 255, 0.6);\n background: linear-gradient(to bottom, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.2));\n box-shadow: inset 0 0 4px 0 rgba(255, 255, 255, 0.3);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n</style>\n","<svelte:options accessors/>\n\n<script lang=\"ts\">\n import type { PointTagInstance, Tag, TagHooks } from '../../typings'\n import Shadow from './Shadow.svelte'\n import Icon from './Icon/Icon.svelte'\n import { Image_Default_Point } from '../../Assets/Icon'\n import { getContext, createEventDispatcher } from 'svelte'\n import { isModelLike } from '../../../shared-utils'\n import AudioPoint from '../Tag/AudioTag/AudioPoint.svelte'\n import { noTypecheck } from '../../utils'\n import type { SharedAudio } from '../../utils/audio/SharedAudio'\n\n const hooks = getContext<TagHooks>('hooks')\n const dispatch = createEventDispatcher<{\n audioInstanceReady: SharedAudio\n audioPlay: undefined\n audioPause: undefined\n audioTimeUpdate: number\n audioDuration: number\n }>()\n\n export let tag: PointTagInstance\n\n let timeout: NodeJS.Timeout | undefined\n let animating = false\n\n const setAnimating = () => {\n if (timeout !== undefined) clearTimeout(timeout)\n animating = true\n timeout = setTimeout(() => {\n animating = false\n }, 800)\n }\n\n const handlePointClick = (event: MouseEvent) => {\n if (animating) return\n if (tag.entryFromModel && isModelLike(tag.five.state.mode)) {\n tag.find({ targetMode: 'Panorama' }).then(() => tag.unfoldAndFoldOthers())\n } else {\n hooks.emit('click', { event, target: 'TagPoint', tag })\n }\n }\n\n $: unfolded = tag.state?.unfolded\n $: folded = !unfolded\n $: setAnimating()\n $: url = tag.style?.point?.url ? tag.style?.point : { url: Image_Default_Point }\n $: width = (() => {\n const pointWidth = tag.style?.point?.width\n if (typeof pointWidth === 'number') return pointWidth\n return 20\n })()\n\n const foldDelay = (() => {\n if (tag.contentType === 'Text' && (tag as Tag<'Text'>).data.appearance === 'plane') return 500\n return 800\n })()\n\n export let tagPointClickHelper: HTMLElement | null = null\n export let handleMouseEnter: (event: PointerEvent) => void = () => {}\n export let handleMouseLeave: (event: PointerEvent) => void = () => {}\n export let handleTagPointClick: (event: MouseEvent) => void = () => {}\n\n const defaultBeforeHover = () => true\n const beforeHover = tag.config.popoverConfig?.beforeOpen ?? defaultBeforeHover\n const onHoverEnd = tag.config.popoverConfig?.onHoverEnd\n\n $: isAudioTag = tag.contentType === 'Audio' && (tag as PointTagInstance<'Audio'>).data.appearance === 'plane'\n\n // 音频实例引用\n let audioInstance: SharedAudio | null = null\n export { audioInstance }\n\n // 音频事件处理器\n const audioEventHandlers = {\n audioRef: (event: CustomEvent<SharedAudio>) => {\n audioInstance = event.detail\n dispatch('audioInstanceReady', audioInstance)\n },\n play: () => dispatch('audioPlay'),\n pause: () => dispatch('audioPause'),\n timeupdate: (e) => dispatch('audioTimeUpdate', e.detail),\n duration: (e) => dispatch('audioDuration', e.detail)\n }\n</script>\n\n<!-- svelte-ignore a11y-click-events-have-key-events -->\n<div class=\"tag-point-wrapper\" class:unfolded class:folded class:disable-unfold={tag.isPopoverConfigEnabled()}>\n <!-- 标签比较小,加一个大一点的点击区域 -->\n {#if !isAudioTag}\n <div\n class=\"tag-point-click-helper\"\n on:click={(event) => {\n handleTagPointClick(event)\n handlePointClick(event)\n }}\n on:pointerenter={(event) => {\n if (beforeHover(tag)) {\n handleMouseEnter(event)\n }\n }}\n on:pointerleave={(event) => {\n handleMouseLeave(event)\n onHoverEnd?.(tag, event)\n }}\n bind:this={tagPointClickHelper}\n />\n {:else}\n <!-- 音频标签不需要点击辅助区域,事件由 AudioPoint 处理 -->\n <div class=\"audio-tag-point-click-helper\" bind:this={tagPointClickHelper} />\n {/if}\n <!-- 标签点阴影 -->\n <Shadow center blurRadius={15} spreadRadius={5} opacity={0.3} />\n <!-- 有两层,一层是标签展开时的小点,一层是标签收起时的大圈 -->\n <!-- 小点 -->\n <div class=\"tag-unfolded-point\" style:transition-delay={(folded ? foldDelay : 0) + 'ms'} />\n <!-- 大圈 -->\n <div class=\"tag-folded-point\" style:transition-delay={(folded ? foldDelay : 0) + 'ms'}>\n {#if isAudioTag}\n <AudioPoint\n tag={noTypecheck(tag)}\n handlePointClick={(event) => {\n handleTagPointClick(event)\n handlePointClick(event)\n }}\n handleMouseEnter={(event) => {\n if (beforeHover(tag)) {\n handleMouseEnter(event)\n }\n }}\n handleMouseLeave={handleMouseLeave}\n on:audioRef={audioEventHandlers.audioRef}\n on:play={audioEventHandlers.play}\n on:pause={audioEventHandlers.pause}\n on:timeupdate={audioEventHandlers.timeupdate}\n on:duration={audioEventHandlers.duration}\n />\n {:else}\n <Icon icon={url} {width} on:iconLoaded />\n {/if}\n </div>\n</div>\n\n<style lang=\"scss\">\n .tag-point-click-helper {\n position: absolute;\n pointer-events: auto;\n cursor: pointer;\n width: calc(141%);\n height: calc(141%);\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n z-index: 1000000;\n }\n // 音频标签的辅助区域仅用于绑定引用,不处理任何事件\n .audio-tag-point-click-helper {\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1;\n }\n .tag-point-wrapper {\n pointer-events: none;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n cursor: pointer;\n z-index: 1040;\n }\n\n .tag-folded-point,\n .tag-unfolded-point {\n transition: all 0.5s;\n }\n\n .tag-point-wrapper {\n .tag-unfolded-point {\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n &:after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 5px;\n height: 5px;\n border-radius: 50%;\n background-color: white;\n }\n &:before {\n content: '';\n position: absolute;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n background-color: rgba(0, 0, 0, 0.2);\n }\n }\n }\n\n /** 动画 */\n .tag-point-wrapper.folded {\n .tag-folded-point {\n opacity: 1;\n scale: 1;\n }\n .tag-unfolded-point {\n opacity: 0;\n scale: 1;\n }\n }\n\n .tag-point-wrapper.unfolded {\n .tag-folded-point {\n opacity: 0;\n scale: 0.2;\n }\n .tag-unfolded-point {\n opacity: 1;\n scale: 1;\n }\n }\n\n /* 当启用了popover时,强制保持折叠状态的样式 */\n .tag-point-wrapper.disable-unfold {\n .tag-folded-point {\n opacity: 1 !important;\n scale: 1 !important;\n }\n .tag-unfolded-point {\n opacity: 0 !important;\n scale: 1 !important;\n }\n }\n</style>\n","// base64 encoded PNG images for tag popover arrows\nexport const tagPopoverArrowDarkBottom =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAFBlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAMKADAAQAAAABAAAAHgAAAAC3G9N3AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAACfklEQVRYCe2Yu2tVQRCHb1QQFQRBKzEkooJoISL+ATYW/kXBSrBKLxZaidaKhSCxs1Asg4qgRhHBB6IkKr4f3yd3vCfHezfnsTGnuD/4ZWf3zO7M7M4+biZ6vd5muBsehydg1/EdB6/3uTBR8vYg9dPQoLqILzg1A++Gc+tD6JevKR/AY/BXB3kSn+bhX5QD8MNLuAnugz87xMv4cg0uw7AAVDDKo3Ar7MJKPMWPWeiELsOoAFS8D00l98laBvEN+6fgO/gPRgWg4iL8Ct3Ya5lKl7B/Bw7FhqGtg8ariAZwYND0X6V7WNOHkVg38svgw1nED/2qyykDIRfLsmy93Falvza1nUQqhaLjZ4Q38HA0UOqQ+0LExoqy2PaDipNkGfp+r9L/PHqPVE6hSgD2fw63w51QR7wN3dw6EqVOhhylQSmL0K3S/zb6ydT5MyJ/qgagvhfcEbjRCogZjzLVFjqWRbnYJ+S3CGegAa+IOgE44DPo/RCOrEZp3r+ClVAnAAd0djy5puBqOD/HuLdgZdQNwIEfQ4/WLdB8zsUXjHUBRoohrowmAWhgAbofRI6VMD3PwSUHrIMmATi+Z7S39B6YYwV8pHlp1UbTADTkhp6GPvjarMIT+l+BjdAmAA1q/FDfsmOZCuVgUu3v0b8IvSwboW0AGvaVuDdh3YCGwXYvK1eyMdoGoGF/xW2D3tTl2U/V59G/CVvBMz0HbjDILujRWgUfUbJPa+RYAZ0w970998Mqp5I/D30gtkauAHTEH0BuyimYSp05vj+EWZAzAB1yP/jc2AFNz2Ign6ibNj4KsyGeutkGLAw0iewdIfx/jkeuz/AxxjMwnoGMM/AbzDbNM/bhiRQAAAAASUVORK5CYII='\n\nexport const tagPopoverArrowDarkTop =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAMAAABdem3zAAAAb1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABt6r1GAAAAJXRSTlMApb6gupm3s7CprZWRfoeOg4qdenZzLG9ka04KJR4EET04MBlfDzTkzgAAAMpJREFUOMvd0dsSgiAQBuA1o7KMTJRUEE+9/zOGjhmjIHvdtyizM1zAv/C3lOS8BjxZlNpbAhJ/zTig1PkCdS1RZotSgF/FDBXiAXcT8z6jyZLp5PfPGthXJCsF7GrpRgs7BvrcoAM4qexhkSl3orGVM1t5c5COEVPiQIU9UZISvXRNi6S/3pptF87S8dNl9p1lxCQIw2CsadfMnmwHzoJdbJNo5LHKto6uHlENBhVfvGJlJnpGMLLtTyg9zPj5iHLhoAmeHw9YORcf/XMbuOSlzkgAAAAASUVORK5CYII='\n\nexport const tagPopoverArrowDarkLeft =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAwCAYAAAAGlsrkAAAAAXNSR0IArs4c6QAAAFBlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAABAAAAMAAAAACmbYh+AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAACtUlEQVRYCcWXzUtWQRSHb1ZWL1FYIH2AkSaEBbkMsTYFQVCbdkVQ7Vr3L/RXRQURIrVopxAuBEmIwCBqkfZBz2/0yLV35oz39X4c+HnHuXPOM2c+ztWi6MZ6Q91wi/GuwLe6SPgy0NdtZzwN9LmyPaAfLZg4j9A9tB+1Ah6D8wyNC2jWdMZ3AT1Ahwxoz6bAIwCeoisoyoh22qwGfF7F7zE66vnXCe4Buo9m0UEPqnd1gSeJ9QSNKij2C7nwvYLlfxupElWKVWkwwct2ml8eorOlzt9b7cOlvmhzUPA1oinT/6+J4oUCEaWVOquCdU1UfSZQDKCM1V/rHqu4qyAcQSmzRNyDJWcbmAqkfl2Tm0jg3PjaMladvYOOb0GzmTBOlh3nZaAMdU3Ke5nbO4uXG1ekvseTAG+gqmbXKeuXAs9kPeMDLOPsUsfA2le3wMeZodcy1lK7FgMfcz3yL//khxTJPU755pZQS10+jKk4UfB6cvRmRXJeh1cDZ7yMuwf3wFZAcisTzVjOb7zozjs71QMdLsVdQq8cwJ5feQfhC9FX0Xmk76vdAPmoHdNf+vch+1zGxoQ+D4x/8Q0tIN3rU8j2LhXQTrXFTY0bsgHETJr26yNaQ+eQskkFVMaC6+mtzK7AxAimpV9EZ9AJFIMLqv7cylQCE6/4iT6gDXQBGcgm0UjGcLZthZayn0AqsQamGSZTe8YKbPaDxjukrJW94LYCte4xcftMAB083fuLSAdPcFlth2szXPznV7rn0Uk0hhpdauLvMF07HbzP6BIaRrb3fc/d3GP8K9knRs8h3XkVnT6o+poAEzdcu7c8de3sz+IdE2gKLLhMB+89mkL6L2Qb3jQYVqj3L3nqPxBNIMDbAMMKtVsHTx+c60gHr3XTnr9oK+NydvrYjHYB1iS+l2fSZrv3D/+KTyvCdHWgAAAAAElFTkSuQmCC'\n\nexport const tagPopoverArrowDarkRight =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAwCAYAAAAGlsrkAAAAAXNSR0IArs4c6QAAAFBlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAABAAAAMAAAAACmbYh+AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAACpklEQVRYCcWYPYwOURSGP38Rv4lEsZoVkq0oNEQjEopNFCQSlUIkJCqFUiLR0ah1SIROgWQLQSNBKUIhGwUNUZD4K/w/b3wnmZ1v7tx3xsw4ybsz994z57nn3J9lR6PRaCUa3BZD3Dw4FaDAs/8DLOYdtHVouDJeis6hbUPClwA7gjSBPWgFeop+oV5NwKIdoHEBTRc7+3iPjJXhb6TnWqTsv6EXqBcrZxwQrfthdBqti84unylwMLbwch7tjI6unjmwOKvRCXQMdXbLOeDvAGXb0Rk0o8a/WtXm0iaLjabNJskWoeVoB9IeeIlijNdm5mS8bBzyRyH0Xt5PoQ2FvkavDjhKXQ48RcdJtKs84LQdcGSs8pZNS7UPaeM1OnYOODIulro8gY10HEf2LxsHXJdxcQJraBxE+1H22DlgBf+J6jKWT1RGWR9F0+pMmQNWQK1l1Rqn4q5i4BBKlt4Bp4I7/Tp2M1WODjjWOFfqqvjq240mquWAVWqt8cTH9Dmm225T2dEB6xutcc6iMlV+gi8wF9xkVy8ApBou2Mk4xVD/x/KgA44Stl3jz0BftwHHxdB2Vz8sQ9V2Mo7v2mR8j4/nI0Dx6QRTqZV1LuPwU/wv6DaaKLEGZQ44Sv33i/TPmNwzXO6ir2lXDxyZaJJ1WWvsFhI4a00yroO+gnQDfcgSxw4OuC5jXSxz6IELDD8HLN+qm+st/VfRGzk0NQesTRM3V5Rbx0SZRrsp19rVxaDvaVxC88XONu9OxrHGjwBcR7XHxJ2EA9Zdexk9doM6fjnwc4JcRPYxcaDySYG1aa4hXQi9WBVYl4H+HJG8Z7uYSRl8k6BXUOtj4k4qwNqpZ9ET98Mu/O4TJPkP7y4AVTF0I61HKvGgJvAn9G5Q6hiW/Z9dH5P6A8K2bfEUA9VoAAAAAElFTkSuQmCC'\n\nexport const tagPopoverArrowLightBottom =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAYAAABqpJ3BAAAAAXNSR0IArs4c6QAAAFBlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAMKADAAQAAAABAAAAHgAAAAC3G9N3AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAACfElEQVRYCe2XP2sVQRTFd0VsIgmpTAqx1EAStLAIpowgFmohFkEQ0+UbBEEJCpJvkE4REguVoBY2EaysLJSkSCzFQq1EMQg2z9+Jc2EyziSzb/eZJ7wLlzv37v1zzuy82aRstVr9RVGModfQGfR/kHuAfICulz5ayJzBf4oe9uNdtP4BlktlWb42TDsIKAiJs5gnltBl9jLgV31MfxHQQ0jcxsz6iV2wXgT8rRBHisAhEl+gI2HBPvkbzD0PgV/h/CgBJfEWjmOeoyKznyLQFwD/PgYiSUDJkLiOmYsV/sPYAuDvp+btSkBFkFDx6VSDDsffAF6bmJQcAkNUP0J1tbZcJ6uTr7VZPba1nxuLhblhT12ZVyDwWYkpsaLU8+04b0FX651dk5p/eBPwO67M2IiDsWAYUyNITBCfCp91yH+ZA16zs96AEiGgPzkW0SPyOyhf6D0Lge85M7IJqBkkxjELOY1r5MwBfi23PusIWTM1hsRj/IsWa9g+qwJesysRcGCXsaPoUec3ZT7SSL0rSaUjZJ15C8dYz6NNfaX1tZ1n9z9gK0lbBDQBErpapytNSyc/BPyeV2asvJ0jtN1HAyGho3QC9T9Util+TDVhXDHJZrvgVWxNta4sENDVegPtq1z8p2ALcxcCWVdmbEYtAmoIiVOYq7HmGbElwL/NyEumtH2ErKMAQEJ/ep+0WKZ9Vxe85tQm4MCuYIfRQefvZb6SoJracqB2Bxqwk7oGBUg2R1dcDen1pPZvwB/PURrHP+fHIuvVJo6O9W2UgJq638Mky34b4uxP7CvAR/81DHKz3cYJ2GSI6Gs94Pxv2E9NHRub0bO9HejtQFH8BvWooa9jGY/wAAAAAElFTkSuQmCC'\n\nexport const tagPopoverArrowLightTop =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAeCAMAAABdem3zAAAAgVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9d3yJTAAAAK3RSTlMA/Pfx6+XZ39TIwry2sJ+qpY3Ok4jNgpl8dnEGmEUfDi5hOycxmn5YGGhjcHcwqwAAAMZJREFUOMvd0e0OgiAUgGEqs9IiLdNCRQS/6v4vMGrNofJxfvfIzuZ2fugL+ls5ZYwiOPEk0ktA95vHD4Pt0/uIgr6fpCOSI7c+UfSAH4gnGtd+lVwnkgrZkSzLCnmK75QPse+XeKG0FsXRAqaWovFZIza3rU9atWmfHQ2YoWgUGkT6tl1g1GmLHiw0bYfgcrvI8xlyyqG+BwOaw3srvCjqO8zaCn/n4IvJFYdbp1C98NQDSJWiG5CxLffWIB5HUsXbFVjLqzcmgh9KFWWqZgAAAABJRU5ErkJggg=='\n\nexport const tagPopoverArrowLightLeft =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAwCAYAAAAGlsrkAAAAAXNSR0IArs4c6QAAAFBlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAABAAAAMAAAAACmbYh+AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAACiElEQVRYCcWYsUscQRSH74LaBE60MU2wsBALBQsbTSuEFCkCKmghYmUjdmohiIUpU6WxSZEQQrqkjZA/IEXESksREbEQBRFEOL+nOzK3O7NvvNudG/g5s29m3je/mbnz2EqlDaVer9detIEryOF2geejG2abJ9BdVDDASXQeDQyoC22hS3SDyncMZBDtInH6BC71cgFa4Cx/o6H0mXakA0U8A3xFno9oHHW5chbuGOgkoJ9ozAU0scIcA6yRdAW9Q06XBip1IWCgI+RaRa8lKaX+WPn/tgQGKM7m0BRSXdrLaBoMtJ9Ey2jATpi0q45YQ6gpMFC5QLPoZUO2Zzw8CwxQLtAikjPN29rizhjoKLAZ1IO00vpWAxRnH5B8LqWtugkZk7vVQOUCCbQPmaK6YaA6xgsGKuf4HqXPMsSxWaS3dn5lAh1kxlvPLNUN89TFOcFMfOOBhobVxWXAybnKx8ZXVDdMVMdkwEzq9hGTuOpGmf/Q7QJr81Q3JFAX5wJfauSAfnVxLvApiW9ykqtumKuOyYCr1eotE//mgEO6mnJcAX5I9j8egprUM68hnHFseoH/p/0VXZhYUqvbyDh1jBcsEOBHVJ/RnjwXWXLBApIzRz9ofkPXEgso6nGoYANJtn6b5wMTy6lb2+p0YuBX6BPx70huv68U59gmAJcbv4mO7bjVLtaxldhcvHViv+x4aDv4jF0JcS4X7wt9a+jMGlPOVluAhybwfRpLaDfpU7daHZAkCq74fy6/uTdQL+pE8tMprc6WtpqEmZJcvGk6/mU6YwVwv4AO0QlqeCNQ+hoAOl9FlA4WAPD4L19sZywg7uumFDz+CzazAJzvmHbUGvBEVKCBAa7dA6h+CDnUpjBPAAAAAElFTkSuQmCC'\n\nexport const tagPopoverArrowLightRight =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAwCAYAAAAGlsrkAAAAAXNSR0IArs4c6QAAAFBlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAABAAAAMAAAAACmbYh+AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAACXElEQVRYCcWYQSgFQRjHdyUlRU5ykCMOxMHJSXlnV4nk7OTISRw8N7koJSeKg+Ig5R3l4kBOHF8u5KD3IoVa/692XtPXzOz3Ztfu1jQz35v5ft//2++1uxNEUdQZFHC1gDlcADcg8EIR4ACp/kWbyB0eg9/Ql3KFx+Av9DW0dbS2XAJgYFJeQRv4bzgVF7+GYDgHfJH/kOU8JMVw+IP2bWg3sK2EYfiCPtPLpFgHjGNyguAyL7wkxXomLhDENtTX9ch8x0mKyW8UO59Cvwv1I/E8VScBhxqhB+MyFR5aqr+dBKxxG8NpjDYB729YmhxIwCrV3HUfDGuAexWeBKynmsMp3bOAL6M19XiVgG2K9SAGMVkFfEw3usYSsEux7rsDkznAZ9ASC08C1p1LxqNYtAS4s/AkYEmq+ZpuwOddqZeAJSptt6MEuPFJJwHbnEoCojWTpnsuAfM0moCuNe3Y0Ms3ScBpFROzywfsUqP8NR2cRLFy7uqTgqvxzRKwRI1rTR3P8KoPOEkN98nn19xA86wU24K7hNonE7jVZPSw8VS/w8epKcXKtwRsU6N8UK+vucecoPTWar0kYK7G5IzWfKIdA3hnWsBtErCuhu9X80cM9gEVv4FKwC7FlM4jAK9UBNJeArb5esYPO4BWbQtcdgnYlOozOD0E1FlAacH6/ldMtgB80I0+Y4lidY8rAGT2CSMBfwC44VNArkwkgW+x+V8+U21gKpoyVB64ok71G96H6NRHnYHkdhShjpsUOPfDl8KOmwo5YNtLVSS+m1FY+aulYAFu6rvWVyDf9wc6+wpavsNbLQAAAABJRU5ErkJggg=='\n","<script lang=\"ts\">\n import {\n tagPopoverArrowLightRight,\n tagPopoverArrowLightLeft,\n tagPopoverArrowLightTop,\n tagPopoverArrowLightBottom,\n tagPopoverArrowDarkRight,\n tagPopoverArrowDarkLeft,\n tagPopoverArrowDarkTop,\n tagPopoverArrowDarkBottom,\n } from '../Icon/tag-popover-arrow-base64'\n\n // 箭头方向,如 top, bottom, left, right\n export let direction: string = 'bottom'\n // 是否显示箭头\n export let show: boolean = true\n // 主题\n export let theme: 'dark' | 'light' = 'dark'\n\n $: arrowImage = (() => {\n switch (theme) {\n case 'dark':\n switch (direction) {\n case 'top':\n return tagPopoverArrowDarkTop\n case 'bottom':\n return tagPopoverArrowDarkBottom\n case 'left':\n return tagPopoverArrowDarkLeft\n case 'right':\n return tagPopoverArrowDarkRight\n }\n case 'light':\n switch (direction) {\n case 'top':\n return tagPopoverArrowLightTop\n case 'bottom':\n return tagPopoverArrowLightBottom\n case 'left':\n return tagPopoverArrowLightLeft\n case 'right':\n return tagPopoverArrowLightRight\n }\n }\n })()\n</script>\n\n{#if show}\n <div class=\"tag-popover-arrow-wrapper tag-popover-arrow-{direction} theme-{theme}\" style={`background-image: url(${arrowImage})`} />\n{/if}\n\n<style lang=\"scss\">\n .tag-popover-arrow-wrapper {\n position: absolute;\n transform-origin: center;\n background-position: center;\n background-repeat: no-repeat;\n background-size: 100% 100%;\n }\n\n .tag-popover-arrow-top {\n width: 16px;\n height: 10px;\n top: 8px;\n left: 50%;\n transform: translateX(-50%);\n }\n\n .tag-popover-arrow-bottom {\n width: 16px;\n height: 10px;\n bottom: 8px;\n left: 50%;\n transform: translateX(-50%);\n }\n\n .tag-popover-arrow-left {\n width: 10px;\n height: 16px;\n top: 50%;\n left: 8px;\n transform: translateY(-50%);\n }\n\n .tag-popover-arrow-right {\n width: 10px;\n height: 16px;\n top: 50%;\n right: 8px;\n transform: translateY(-50%);\n }\n</style>\n","<script lang=\"ts\">\n export let size = \"28\";\n export let color = \"#ffffff\";\n export let bgColor = \"#0000004d\";\n</script>\n\n<div class=\"icon-container\" style=\"--bg-color: {bgColor};\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 28\" width={size} height={size}>\n <defs>\n <linearGradient x1=\"53.2804066%\" y1=\"100%\" x2=\"64.4764442%\" y2=\"2.52981206%\" id=\"video-icon-gradient-a\">\n <stop stop-color={color} offset=\"0%\"/>\n <stop stop-color={color} stop-opacity=\".5\" offset=\"100%\"/>\n </linearGradient>\n <linearGradient x1=\"50%\" y1=\"-5.89066117%\" x2=\"60.3018289%\" y2=\"32.0415872%\" id=\"video-icon-gradient-b\">\n <stop stop-color={color} offset=\"0%\"/>\n <stop stop-color={color} stop-opacity=\"0\" offset=\"100%\"/>\n </linearGradient>\n </defs>\n <path d=\"M8.0883645,5.35 C8.27319183,5.35 8.45426937,5.40368245 8.61098984,5.50477659 L20.4341152,13.1314044 C20.6662958,13.2811749 20.8173539,13.5140616 20.8743923,13.7691613 C20.9300733,14.0181899 20.8962437,14.2885953 20.7601668,14.5243865 L8.61098984,22.4950731 C8.38014238,22.6439836 8.11267156,22.6823641 7.86680489,22.6238045 C7.62023287,22.5650769 7.39563144,22.408984 7.25097187,22.1700998 C7.15226844,22.0071054 7.1,21.8187509 7.1,21.6265526 L7.1,6.37329702 C7.1,6.09035119 7.2108925,5.83405961 7.39059316,5.64859123 C7.56916841,5.46428435 7.81578724,5.35 8.0883645,5.35 Z\" \n fill=\"url(#video-icon-gradient-a)\" \n fill-rule=\"nonzero\" \n stroke=\"url(#video-icon-gradient-b)\" \n stroke-width=\".2\"/>\n </svg>\n</div>\n\n<style>\n .icon-container {\n width: 52px;\n height: 52px;\n background-color: var(--bg-color);\n border-radius: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n }\n</style> ","<script lang=\"ts\">\n export let size = '28'\n export let color = '#ffffff'\n export let bgColor = '#0000004d'\n</script>\n\n<div class=\"icon-container\" style=\"--bg-color: {bgColor};\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width={size} height={size}>\n <defs>\n <linearGradient x1=\"54.417371%\" y1=\"106.742364%\" x2=\"72.619444%\" y2=\"8.15444328%\" id=\"xmfpi7cnc__sgsykm5x9a\">\n <stop stop-color=\"#FFF\" offset=\"0%\" />\n <stop stop-color=\"#FFF\" stop-opacity=\".5\" offset=\"100%\" />\n </linearGradient>\n <linearGradient x1=\"50%\" y1=\".73169217%\" x2=\"66.0966077%\" y2=\"34.1694374%\" id=\"xmfpi7cnc__tjqs3iy6kb\">\n <stop stop-color=\"#FFF\" offset=\"0%\" />\n <stop stop-color=\"#FFF\" stop-opacity=\"0\" offset=\"100%\" />\n </linearGradient>\n <linearGradient x1=\"55.1256353%\" y1=\"273.650936%\" x2=\"55.1256353%\" y2=\"81.7206937%\" id=\"xmfpi7cnc__rs5hxavsyc\">\n <stop stop-color=\"#FFF\" offset=\"0%\" />\n <stop stop-color=\"#FFF\" stop-opacity=\".5\" offset=\"100%\" />\n </linearGradient>\n </defs>\n <g fill-rule=\"nonzero\" fill=\"none\">\n <path\n d=\"M18,5.4 L18,13.4 C18,15.3329966 13.9705627,16.9 9,16.9 C4.02943725,16.9 0,15.3329966 0,13.4 L0,5.4 C0,7.33299662 4.02943725,8.9 9,8.9 C13.8670094,8.9 17.8316983,7.39760831 17.9947813,5.52032488 L18,5.4 Z M4.9603418,4.9 C5.2193418,4.9 5.4643418,4.837 5.6883418,4.704 C6.1293418,4.445 6.4093418,3.976 6.4093418,3.444 C6.4093418,3.003 6.2203418,2.611 5.9053418,2.359 C6.1643418,2.1 6.3393418,1.729 6.3393418,1.337 C6.3393418,1.092 6.2763418,0.861 6.1573418,0.658 C5.9053418,0.245 5.4643418,0 4.9603418,0 C4.7223418,0 4.4983418,0.056 4.2953418,0.175 C3.8753418,0.413 3.6163418,0.84 3.6163418,1.337 L3.6163418,1.372 L4.3373418,1.372 L4.3373418,1.337 C4.3373418,1.022 4.6313418,0.721 4.9603418,0.721 C5.3173418,0.721 5.6113418,1.008 5.6113418,1.337 C5.6113418,1.708 5.3243418,1.995 4.9603418,1.995 L4.8203418,1.995 L4.8203418,2.723 L4.9603418,2.723 C5.3593418,2.723 5.6883418,3.045 5.6883418,3.444 C5.6883418,3.843 5.3593418,4.179 4.9603418,4.179 C4.5613418,4.179 4.2323418,3.843 4.2323418,3.444 L4.2323418,3.339 L3.5043418,3.339 L3.5043418,3.444 C3.5043418,3.71 3.5673418,3.955 3.7003418,4.172 C3.9593418,4.62 4.4283418,4.9 4.9603418,4.9 Z M8.6073418,4.9 C8.8803418,4.9 9.1253418,4.83 9.3563418,4.697 C9.8043418,4.424 10.0983418,3.934 10.0983418,3.395 C10.0983418,3.122 10.0283418,2.877 9.8953418,2.646 C9.6223418,2.198 9.1463418,1.904 8.6073418,1.904 C8.5303418,1.904 8.4743418,1.904 8.4393418,1.911 L9.3143418,0 L8.5093418,0 L7.2353418,2.793 C7.1443418,2.982 7.1023418,3.185 7.1023418,3.395 C7.1023418,3.668 7.1723418,3.92 7.3053418,4.151 C7.5783418,4.606 8.0543418,4.9 8.6073418,4.9 Z M8.6073418,4.158 C8.1803418,4.158 7.8443418,3.822 7.8443418,3.395 C7.8443418,2.975 8.1873418,2.625 8.6073418,2.625 C9.0273418,2.625 9.3773418,2.975 9.3773418,3.395 C9.3773418,3.815 9.0273418,4.158 8.6073418,4.158 Z M12.2613418,4.907 C12.7653418,4.907 13.2133418,4.634 13.4653418,4.207 C13.5913418,3.997 13.6543418,3.766 13.6543418,3.514 L13.6543418,3.514 L13.6543418,1.428 C13.6543418,0.917 13.3813418,0.448 12.9613418,0.189 C12.7443418,0.063 12.5133418,0 12.2613418,0 C11.7503418,0 11.2813418,0.273 11.0293418,0.714 C10.8963418,0.931 10.8333418,1.169 10.8333418,1.428 L10.8333418,1.428 L10.8333418,3.514 C10.8333418,4.018 11.1063418,4.466 11.5473418,4.718 C11.7643418,4.844 12.0023418,4.907 12.2613418,4.907 Z M12.2613418,4.186 C11.8903418,4.186 11.5683418,3.885 11.5683418,3.514 L11.5683418,3.514 L11.5683418,1.428 C11.5683418,1.029 11.8763418,0.735 12.2613418,0.735 C12.6323418,0.735 12.9123418,1.029 12.9123418,1.428 L12.9123418,1.428 L12.9123418,3.514 C12.9123418,3.899 12.6323418,4.186 12.2613418,4.186 Z M15.4753809,2.07333984 C15.7488184,2.07333984 15.9886458,1.97478841 16.1948633,1.77768555 C16.4010807,1.58058268 16.5041895,1.33391927 16.5041895,1.03769531 C16.5041895,0.750585938 16.4050684,0.507340495 16.2068262,0.307958984 C16.008584,0.108577474 15.7647689,0.00888671875 15.4753809,0.00888671875 C15.1928288,0.00888671875 14.9495833,0.109147135 14.7456445,0.309667969 C14.5417057,0.510188802 14.4397363,0.756282552 14.4397363,1.04794922 C14.4397363,1.32138672 14.5365788,1.56064453 14.7302637,1.76572266 C14.9239486,1.97080078 15.172321,2.07333984 15.4753809,2.07333984 Z M15.4753809,1.70078125 C15.2930892,1.70078125 15.137002,1.63583984 15.0071191,1.50595703 C14.8772363,1.37607422 14.8122949,1.22226563 14.8122949,1.04453125 C14.8122949,0.859960938 14.877806,0.703304036 15.0088281,0.574560547 C15.1398503,0.445817057 15.2953678,0.381445313 15.4753809,0.381445313 C15.6553939,0.381445313 15.8097721,0.446386719 15.9385156,0.576269531 C16.0672591,0.706152344 16.1316309,0.859960938 16.1316309,1.03769531 C16.1316309,1.22226563 16.0661198,1.37892253 15.9350977,1.50766602 C15.8040755,1.63640951 15.6508366,1.70078125 15.4753809,1.70078125 Z\"\n fill=\"url(#xmfpi7cnc__sgsykm5x9a)\"\n transform=\"translate(3 3.1)\"\n />\n <path\n d=\"M18,5.4 L18,13.4 C18,15.3329966 13.9705627,16.9 9,16.9 C4.02943725,16.9 0,15.3329966 0,13.4 L0,5.4 C0,7.33299662 4.02943725,8.9 9,8.9 C13.8670094,8.9 17.8316983,7.39760831 17.9947813,5.52032488 L18,5.4 Z M17.8,6.499 L17.7806846,6.52607583 C16.6077599,8.0452893 13.108676,9.1 9,9.1 C4.87821133,9.1 1.38089175,8.04047836 0.214303539,6.51942435 L0.2,6.5 L0.2,13.4 C0.2,15.1332693 3.96631253,16.6348245 8.69056715,16.6979358 L9,16.7 C13.8681548,16.7 17.8,15.1709491 17.8,13.4 L17.8,6.499 Z M12.2613418,0 C12.5133418,0 12.7443418,0.063 12.9613418,0.189 C13.3813418,0.448 13.6543418,0.917 13.6543418,1.428 L13.6543418,3.514 L13.6467818,3.66268 C13.6266218,3.85756 13.5661418,4.039 13.4653418,4.207 C13.2133418,4.634 12.7653418,4.907 12.2613418,4.907 C12.0023418,4.907 11.7643418,4.844 11.5473418,4.718 C11.1063418,4.466 10.8333418,4.018 10.8333418,3.514 L10.8333418,1.428 L10.8409578,1.27512 C10.8613418,1.07464 10.9229418,0.8876 11.0293418,0.714 C11.2813418,0.273 11.7503418,0 12.2613418,0 Z M9.3143418,0 L8.4393418,1.911 C8.4743418,1.904 8.5303418,1.904 8.6073418,1.904 C9.1463418,1.904 9.6223418,2.198 9.8953418,2.646 C10.0283418,2.877 10.0983418,3.122 10.0983418,3.395 C10.0983418,3.934 9.8043418,4.424 9.3563418,4.697 C9.1253418,4.83 8.8803418,4.9 8.6073418,4.9 C8.0543418,4.9 7.5783418,4.606 7.3053418,4.151 C7.1723418,3.92 7.1023418,3.668 7.1023418,3.395 C7.1023418,3.185 7.1443418,2.982 7.2353418,2.793 L8.5093418,0 L9.3143418,0 Z M4.9603418,0 C5.4643418,0 5.9053418,0.245 6.1573418,0.658 C6.2763418,0.861 6.3393418,1.092 6.3393418,1.337 C6.3393418,1.729 6.1643418,2.1 5.9053418,2.359 C6.2203418,2.611 6.4093418,3.003 6.4093418,3.444 C6.4093418,3.976 6.1293418,4.445 5.6883418,4.704 C5.4643418,4.837 5.2193418,4.9 4.9603418,4.9 C4.4283418,4.9 3.9593418,4.62 3.7003418,4.172 C3.5673418,3.955 3.5043418,3.71 3.5043418,3.444 L3.5043418,3.339 L4.2323418,3.339 L4.2323418,3.444 C4.2323418,3.843 4.5613418,4.179 4.9603418,4.179 C5.3593418,4.179 5.6883418,3.843 5.6883418,3.444 C5.6883418,3.045 5.3593418,2.723 4.9603418,2.723 L4.8203418,2.723 L4.8203418,1.995 L4.9603418,1.995 C5.3243418,1.995 5.6113418,1.708 5.6113418,1.337 C5.6113418,1.008 5.3173418,0.721 4.9603418,0.721 C4.6313418,0.721 4.3373418,1.022 4.3373418,1.337 L4.3373418,1.372 L3.6163418,1.372 L3.6163418,1.337 C3.6163418,0.84 3.8753418,0.413 4.2953418,0.175 C4.4983418,0.056 4.7223418,0 4.9603418,0 Z M12.2613418,0.2 C11.8228535,0.2 11.4197491,0.433900098 11.199862,0.818512412 C11.0880596,1.00092699 11.0333418,1.20205175 11.0333418,1.428 L11.0333418,3.514 C11.0333418,3.94076817 11.2630074,4.32517296 11.6477689,4.54504221 C11.8340054,4.65317955 12.0373271,4.707 12.2613418,4.707 C12.685768,4.707 13.0724302,4.4792625 13.2938432,4.10410085 C13.4010506,3.92542185 13.4543418,3.73002084 13.4543418,3.514 L13.4543418,1.428 C13.4543418,0.993663172 13.2236099,0.585702454 12.8609147,0.361957789 C12.673578,0.253181671 12.4771013,0.2 12.2613418,0.2 Z M4.9603418,0.2 C4.75293536,0.2 4.56476024,0.248895899 4.39394431,0.349004437 C4.11167513,0.508956972 3.91907748,0.764507622 3.84741774,1.06716925 L3.829,1.171 L4.157,1.171 L4.1635929,1.14325273 C4.24904453,0.829489942 4.53273472,0.571946496 4.86075855,0.527713496 L4.9603418,0.521 C5.42264158,0.521 5.8113418,0.89242465 5.8113418,1.337 C5.8113418,1.78012728 5.4916909,2.13625035 5.06824166,2.18841646 L5.02,2.191 L5.02,2.526 L5.06813812,2.52919506 C5.49271718,2.57829524 5.83232975,2.91371045 5.88206553,3.33657664 L5.8883418,3.444 C5.8883418,3.95419336 5.46908818,4.379 4.9603418,4.379 C4.48793444,4.379 4.09269177,4.01271264 4.03863877,3.55189651 L4.037,3.539 L3.709,3.539 L3.71100539,3.58140766 C3.72435814,3.71571552 3.75785509,3.84083114 3.8121867,3.95771875 L3.87348876,4.07189941 C4.09978468,4.46333019 4.50573915,4.7 4.9603418,4.7 C5.18808795,4.7 5.39698916,4.6443932 5.58705743,4.53154283 C5.97364119,4.30450157 6.2093418,3.89738234 6.2093418,3.444 C6.2093418,3.06849319 6.05147644,2.73203269 5.78040279,2.51517376 L5.60591531,2.37558378 L5.76392044,2.21757864 C5.99772857,1.98377051 6.1393418,1.65985061 6.1393418,1.337 C6.1393418,1.12891147 6.08649325,0.932616859 5.98661394,0.762172929 C5.77036899,0.407771483 5.39348118,0.2 4.9603418,0.2 Z M9.002,0.2 L8.638,0.2 L7.41554213,2.87976312 C7.3587619,2.9976913 7.32347683,3.1241874 7.30938306,3.25833536 L7.3023418,3.395 C7.3023418,3.62951354 7.36137928,3.8474981 7.47684038,4.04810085 C7.72111603,4.45522692 8.1383802,4.7 8.6073418,4.7 C8.83989632,4.7 9.05100342,4.64201988 9.25226776,4.52621184 C9.649754,4.28399367 9.8983418,3.85400396 9.8983418,3.395 C9.8983418,3.16244548 9.84036168,2.95133838 9.72455364,2.75007403 C9.48026964,2.34919774 9.06277079,2.104 8.6073418,2.104 L8.51445661,2.10475811 C8.49442789,2.10527049 8.48389809,2.10604952 8.47856502,2.10711614 L8.0943966,2.18394982 L8.25749731,1.82773787 L9.002,0.2 Z M12.2613418,0.535 C12.7468356,0.535 13.1123418,0.922491584 13.1123418,1.428 L13.1123418,3.514 C13.1123418,4.00744192 12.7448365,4.386 12.2613418,4.386 C11.7777279,4.386 11.3683418,3.99355405 11.3683418,3.514 L11.3683418,1.428 C11.3683418,0.922753743 11.7615956,0.535 12.2613418,0.535 Z M8.6073418,2.425 C9.13779875,2.425 9.5773418,2.86454305 9.5773418,3.395 C9.5773418,3.92471151 9.13856864,4.358 8.6073418,4.358 C8.06988485,4.358 7.6443418,3.93245695 7.6443418,3.395 C7.6443418,2.86377316 8.07763029,2.425 8.6073418,2.425 Z M12.2613418,0.735 C11.8763418,0.735 11.5683418,1.029 11.5683418,1.428 L11.5683418,3.514 L11.5761202,3.61327273 C11.6272922,3.93723967 11.9240691,4.186 12.2613418,4.186 C12.6323418,4.186 12.9123418,3.899 12.9123418,3.514 L12.9123418,1.428 L12.9055416,1.32192712 C12.8606806,0.977975207 12.5986145,0.735 12.2613418,0.735 Z M8.6073418,2.625 C8.1873418,2.625 7.8443418,2.975 7.8443418,3.395 C7.8443418,3.822 8.1803418,4.158 8.6073418,4.158 C9.0273418,4.158 9.3773418,3.815 9.3773418,3.395 C9.3773418,2.975 9.0273418,2.625 8.6073418,2.625 Z M15.4753809,0.00888671875 C15.7647689,0.00888671875 16.008584,0.108577474 16.2068262,0.307958984 C16.4050684,0.507340495 16.5041895,0.750585938 16.5041895,1.03769531 C16.5041895,1.33391927 16.4010807,1.58058268 16.1948633,1.77768555 C15.9886458,1.97478841 15.7488184,2.07333984 15.4753809,2.07333984 C15.172321,2.07333984 14.9239486,1.97080078 14.7302637,1.76572266 C14.5365788,1.56064453 14.4397363,1.32138672 14.4397363,1.04794922 C14.4397363,0.756282552 14.5417057,0.510188802 14.7456445,0.309667969 C14.9495833,0.109147135 15.1928288,0.00888671875 15.4753809,0.00888671875 Z M15.4753809,0.381445313 C15.2953678,0.381445313 15.1398503,0.445817057 15.0088281,0.574560547 C14.877806,0.703304036 14.8122949,0.859960938 14.8122949,1.04453125 C14.8122949,1.22226563 14.8772363,1.37607422 15.0071191,1.50595703 C15.137002,1.63583984 15.2930892,1.70078125 15.4753809,1.70078125 C15.6508366,1.70078125 15.8040755,1.63640951 15.9350977,1.50766602 C16.0661198,1.37892253 16.1316309,1.22226563 16.1316309,1.03769531 C16.1316309,0.859960938 16.0672591,0.706152344 15.9385156,0.576269531 C15.8097721,0.446386719 15.6553939,0.381445313 15.4753809,0.381445313 Z\"\n fill=\"url(#xmfpi7cnc__tjqs3iy6kb)\"\n transform=\"translate(3 3.1)\"\n />\n <path\n d=\"M3.00030998,2.79110119 L3.00030998,8.00889881 C1.15888197,7.36802147 0,6.43664128 0,5.4 C0,4.36335872 1.15888197,3.43197853 3.00030998,2.79110119 Z M15.0006975,2.79145187 C16.8415407,3.43231826 18,4.36354778 18,5.4 C18,6.43645222 16.8415407,7.36768174 15.0006975,8.00854813 Z\"\n fill=\"url(#xmfpi7cnc__rs5hxavsyc)\"\n transform=\"translate(3 3.1)\"\n />\n </g>\n </svg>\n</div>\n\n<style>\n .icon-container {\n width: 52px;\n height: 52px;\n background-color: var(--bg-color);\n border-radius: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n }\n</style>\n","<script lang=\"ts\">\n import AudioIcon from './Icon/audioIcon.svelte'\n\n export let playing = false\n export let elapsedTime = '00:00'\n export let progress = 0\n export let onClick = () => {}\n</script>\n\n<!-- svelte-ignore a11y-click-events-have-key-events -->\n<div class=\"pano-tag-audio-popup-inline-player-wrapper\" on:click|stopPropagation={onClick}>\n <div class=\"pano-tag-audio-popup-inline-player-icon\">\n <AudioIcon {playing} width={24} />\n </div>\n <div class=\"pano-tag-audio-popup-inline-player-progress\">\n <div class=\"pano-tag-audio-popup-inline-player-progress-bar\" style=\"width: {progress}%\" />\n <div class=\"pano-tag-audio-popup-inline-player-elapsed-time\">{elapsedTime}</div>\n </div>\n</div>\n\n<style lang=\"scss\">\n .pano-tag-audio-popup-inline-player-wrapper {\n width: 100%;\n height: 28px;\n background-color: rgba(255, 255, 255, 0.06);\n border-radius: 2px;\n display: flex;\n align-items: center;\n cursor: pointer;\n }\n\n .pano-tag-audio-popup-inline-player-icon {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .pano-tag-audio-popup-inline-player-progress {\n flex-grow: 1;\n display: flex;\n position: relative;\n height: 100%;\n align-items: center;\n }\n\n .pano-tag-audio-popup-inline-player-progress-bar {\n width: 0;\n height: 100%;\n background: linear-gradient(to right, rgba(238, 238, 238, 0) 0, rgba(216, 216, 216, 0.3) 100%);\n position: absolute;\n top: 0;\n left: 0;\n z-index: 0;\n }\n\n .pano-tag-audio-popup-inline-player-elapsed-time {\n position: absolute;\n z-index: 1;\n font-weight: 500;\n font-size: 14px;\n color: #ffffff;\n line-height: 20px;\n padding-left: 4px;\n }\n</style>\n","<script lang=\"ts\">\n import VideoIcon from '../VideoIcon.svelte'\n import PanoramaIcon from './PanoramaIcon.svelte'\n import type { PointTagInstance, Tag, TagPlacement } from '../../../typings'\n import { getYouTubeId, getVimeoId, isYouTube, isVimeo, formatVideo, getVideoThumbnail } from '../../../utils/videoHelper'\n import AudioPlayer from '../AudioPlayer.svelte'\n import type { SharedAudio } from '../../../utils/audio/SharedAudio'\n import { onDestroy } from 'svelte'\n\n // 主要参数\n export let tag: PointTagInstance\n export let config: Tag['config']['popoverConfig'] = {}\n export let theme: 'dark' | 'light' | undefined = undefined\n export let placement: TagPlacement = 'right-top'\n // 接收音频实例引用\n export let audioInstance: SharedAudio | null = null\n export let audioPlaying: boolean = false\n export let audioCurrentTime: number = 0\n export let audioDuration: number = 0\n\n // 判断是否为营销标签,营销标签有特殊模板\n $: isMarketingTag = tag.contentType === 'Marketing'\n\n // 是否是音频标签\n $: isAudioTag = tag.contentType === 'Audio'\n\n // 预设默认主题\n $: defaultTheme = isMarketingTag ? 'light' : 'dark'\n\n // 计算实际使用的主题\n $: effectiveTheme =\n tag.data.theme !== undefined && tag.data.theme !== null ? tag.data.theme : theme !== undefined && theme !== null ? theme : defaultTheme\n\n // 从tag中提取标题和描述\n $: title = tag.data.title || tag.data.name || ''\n $: description = tag.data.description || tag.data.tooltip || ''\n\n // 计算最终标题和描述\n $: finalTitle = title || ''\n $: finalDescription = description || ''\n\n // 音频显示状态\n let audioProgress = 0\n let audioElapsedTime = '00:00'\n\n // 平滑更新相关变量\n let smoothUpdateFrame: number | null = null\n let lastUpdateTime = 0\n let smoothProgress = 0\n\n // 格式化时间显示\n function formatTime(seconds: number): string {\n const mins = Math.floor(seconds / 60)\n const secs = Math.floor(seconds % 60)\n return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`\n }\n\n // 计算目标进度\n function getTargetProgress(): number {\n return audioDuration > 0 ? (audioCurrentTime / audioDuration) * 100 : 0\n }\n\n // 平滑更新函数\n function smoothUpdate() {\n if (!audioPlaying || audioDuration <= 0) {\n smoothUpdateFrame = null\n return\n }\n\n const now = Date.now()\n const timeSinceLastUpdate = (now - lastUpdateTime) / 1000\n\n // 估算当前进度(基于时间流逝)\n const estimatedCurrentTime = audioCurrentTime + timeSinceLastUpdate\n const estimatedProgress = Math.min((estimatedCurrentTime / audioDuration) * 100, 100)\n\n // 平滑插值到估算位置\n const progressDiff = estimatedProgress - smoothProgress\n if (Math.abs(progressDiff) > 0.05) {\n smoothProgress += progressDiff * 0.2 // 20%的插值速度\n }\n\n // 请求下一帧\n smoothUpdateFrame = requestAnimationFrame(smoothUpdate)\n }\n\n // 更新显示状态\n function updateDisplayState() {\n if (!isAudioTag) return\n\n const targetProgress = getTargetProgress()\n\n if (audioDuration > 0) {\n if (!audioPlaying) {\n // 暂停时立即同步到准确位置\n smoothProgress = targetProgress\n }\n audioProgress = smoothProgress\n audioElapsedTime = formatTime((smoothProgress / 100) * audioDuration)\n lastUpdateTime = Date.now()\n } else {\n // 重置状态\n smoothProgress = 0\n audioProgress = 0\n audioElapsedTime = '00:00'\n }\n }\n\n // 控制平滑更新的启动和停止\n function manageSmoothUpdate() {\n if (audioPlaying && audioDuration > 0) {\n if (!smoothUpdateFrame) {\n smoothUpdate()\n }\n } else {\n if (smoothUpdateFrame) {\n cancelAnimationFrame(smoothUpdateFrame)\n smoothUpdateFrame = null\n }\n }\n }\n\n // 响应式更新\n $: audioCurrentTime, audioDuration, audioPlaying, updateDisplayState()\n $: audioPlaying, audioDuration, manageSmoothUpdate()\n\n // AudioPlayer 点击事件处理\n function handleAudioPlayerClick() {\n if (!audioInstance) return\n\n if (audioInstance.paused) {\n audioInstance.play(true)\n } else {\n audioInstance.pause()\n }\n }\n\n // 确定媒体URL和类型\n $: mediaRawUrl = (() => {\n if (isAudioTag) return null\n if (isMarketingTag) return null\n // 安全地访问mediaData数组\n if (tag.data.mediaData && tag.data.mediaData.length > 0) {\n const mediaItem = tag.data.mediaData[0]\n\n // 检查是否为视频类型\n if (mediaItem.type === 'Video') {\n // 1. 优先使用视频封面图\n if (mediaItem.videoCoverUrl) {\n return mediaItem.videoCoverUrl\n }\n\n // 2. 尝试从视频URL生成封面图\n if (mediaItem.url) {\n const videoUrl = mediaItem.url.toLowerCase()\n\n // YouTube\n if (isYouTube(videoUrl)) {\n const videoId = getYouTubeId(videoUrl)\n if (videoId) {\n return `https://img.youtube.com/vi/${videoId}/hqdefault.jpg`\n }\n }\n\n // Vimeo\n if (isVimeo(videoUrl)) {\n const vimeoId = getVimeoId(videoUrl)\n if (vimeoId) {\n // Vimeo缩略图需要通过API获取,这里提供一个代理实现\n return `https://vumbnail.com/${vimeoId}.jpg`\n }\n }\n\n // 如果都失败了,返回一个默认的视频封面图\n return\n }\n }\n\n if (tag.contentType === 'Panorama') {\n // 对于全景标签,优先使用切瓦片再使用缩略图,最后使用原图\n return (\n tag.data.mediaData?.[0]?.cube?.front ??\n tag.data.mediaData?.[0]?.thumbnail?.split('?')[0] ??\n tag.data.mediaData?.[0]?.url?.split('?')[0]\n )\n } else if (mediaItem.url || mediaItem.thumbnail) {\n // 对于图片和其他类型,直接使用URL\n return mediaItem.url || mediaItem.thumbnail\n }\n }\n\n // 如果没有mediaData或URL,尝试使用imageUrl或返回默认图片\n return tag.data.imageUrl\n })()\n\n $: mediaUrl =\n config?.imageURLTransform && (mediaRawUrl?.includes('realsee-cdn') || mediaRawUrl?.includes('ljcdn.com'))\n ? config.imageURLTransform(mediaRawUrl, { width: 280, height: 280 })\n : mediaRawUrl || tag.data.mediaUrl || ''\n\n // 添加媒体类型检测变量\n $: isVideoMedia = tag.contentType === 'Video' || tag.data.mediaType === 'video'\n $: isPanoramaMedia = tag.contentType === 'Panorama' || tag.data.mediaType === 'panorama'\n\n // 检查是否为YouTube或Vimeo视频\n $: isYouTubeVideo = isVideoMedia && tag.data.mediaData && tag.data.mediaData[0]?.url && isYouTube(tag.data.mediaData[0].url)\n $: isVimeoVideo = isVideoMedia && tag.data.mediaData && tag.data.mediaData[0]?.url && isVimeo(tag.data.mediaData[0].url)\n $: isExternalVideo = isYouTubeVideo || isVimeoVideo\n\n // 格式化外部视频URL\n $: formattedVideoUrl =\n isExternalVideo && tag.data.mediaData && tag.data.mediaData[0]?.url ? formatVideo(tag.data.mediaData[0].url, { autoplay: 0 }) : ''\n\n // 视频播放器标题\n $: videoPlayerTitle = isYouTubeVideo ? 'YouTube video player' : isVimeoVideo ? 'Vimeo video player' : finalTitle\n\n // 媒体数据的数量\n $: mediaCount = tag.data.mediaData?.length || 0\n $: currentMediaIndex = 1\n\n // 处理营销标签的 tags,primaryTags + secondaryTags 最多显示2个\n $: marketingBrandTags = isMarketingTag ? tag.data.brandTags || [] : []\n $: marketingTags = isMarketingTag ? tag.data.tags || [] : []\n $: primaryTags = marketingBrandTags.filter(Boolean).slice(0, 2)\n $: remainingCount = Math.max(0, 2 - primaryTags.length)\n $: secondaryTags = remainingCount > 0 ? marketingTags.filter(Boolean).slice(0, remainingCount) : []\n\n // 获取营销数据(如果有)\n $: marketingPrice = isMarketingTag ? tag.data.price?.value || '' : ''\n $: marketingPriceUnit = isMarketingTag ? tag.data.price?.unit || '' : ''\n\n // 组件销毁时清理动画帧\n onDestroy(() => {\n if (smoothUpdateFrame) {\n cancelAnimationFrame(smoothUpdateFrame)\n smoothUpdateFrame = null\n }\n })\n</script>\n\n<div class=\"tag-popup tag-popup-{placement}\">\n <div class=\"tag-popup-content {effectiveTheme}\">\n <!-- 标题 -->\n {#if finalTitle}\n <h3 class=\"tag-popup-title\">{finalTitle}</h3>\n {/if}\n\n <!-- 营销的 tags -->\n {#if isMarketingTag && (primaryTags.length > 0 || secondaryTags.length > 0)}\n <div class=\"tag-popup-tags\">\n {#each primaryTags as tag}\n <div class=\"tag-popup-tag tag-popup-tag-primary\">{tag}</div>\n {/each}\n {#each secondaryTags as tag}\n <div class=\"tag-popup-tag tag-popup-tag-secondary\">{tag}</div>\n {/each}\n </div>\n {/if}\n\n <!-- 媒体信息 -->\n {#if isExternalVideo && formattedVideoUrl}\n <!-- YouTube/Vimeo视频使用iframe嵌入 -->\n <div class=\"tag-popup-media\">\n <iframe\n title={videoPlayerTitle}\n src={formattedVideoUrl}\n class=\"tag-popup-video-iframe\"\n frameborder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n referrerpolicy=\"strict-origin-when-cross-origin\"\n allowfullscreen\n style=\"width: 100%; height: 100%; position: absolute; top: 0; left: 0;\"\n />\n <div class=\"iframe-overlay\" />\n {#if mediaCount > 1}\n <div class=\"tag-popup-media-index\">{currentMediaIndex}/{mediaCount}</div>\n {/if}\n </div>\n {:else if mediaUrl}\n <div class=\"tag-popup-media\">\n <img src={mediaUrl} alt={finalTitle || ''} draggable=\"false\" />\n {#if isVideoMedia}\n <div class=\"tag-popup-media-type\">\n <VideoIcon />\n </div>\n {:else if isPanoramaMedia}\n <div class=\"tag-popup-media-type\">\n <PanoramaIcon />\n </div>\n {/if}\n {#if mediaCount > 1}\n <div class=\"tag-popup-media-index\">{currentMediaIndex}/{mediaCount}</div>\n {/if}\n </div>\n {:else if isVideoMedia && tag.data.mediaData && tag.data.mediaData[0]?.url}\n <div class=\"tag-popup-media\">\n <video\n src={tag.data.mediaData[0].url}\n class=\"tag-popup-video-fallback\"\n controls={false}\n autoplay={false}\n muted\n loop\n preload=\"metadata\"\n disablePictureInPicture\n playsinline\n style=\"width: 100%; height: 100%; object-fit: cover;\"\n />\n <div class=\"tag-popup-media-type\">\n <VideoIcon />\n </div>\n {#if mediaCount > 1}\n <div class=\"tag-popup-media-index\">{currentMediaIndex}/{mediaCount}</div>\n {/if}\n </div>\n {/if}\n\n <!-- 描述信息 -->\n {#if finalDescription}\n <div class=\"tag-popup-description\">{finalDescription}</div>\n {/if}\n\n <!-- 音频标签 -->\n {#if isAudioTag}\n <div class=\"tag-popup-audio-player-wrapper\">\n <AudioPlayer playing={audioPlaying} progress={audioProgress} elapsedTime={audioElapsedTime} onClick={handleAudioPlayerClick} />\n </div>\n {/if}\n\n <!-- 营销的 price -->\n {#if marketingPrice}\n <div class=\"tag-popup-price\">\n {#if marketingPriceUnit}\n <span class=\"tag-popup-price-unit\">{marketingPriceUnit}</span>\n {/if}\n <span class=\"tag-popup-price-value\">{marketingPrice}</span>\n </div>\n {/if}\n\n <!-- 插槽用于底部工具栏 -->\n <slot name=\"toolbar\" />\n\n <!-- 插槽用于箭头 -->\n <slot name=\"arrow\" />\n </div>\n</div>\n\n<style lang=\"scss\">\n .tag-popup {\n position: absolute;\n pointer-events: auto;\n padding: 10px 10px 10px 18px;\n width: fit-content;\n height: fit-content;\n transform-origin: center;\n }\n\n .tag-popup-top {\n transform: translate(-50%, -100%);\n left: 50%;\n }\n\n .tag-popup-bottom {\n transform: translate(-50%, 0);\n left: 50%;\n }\n\n .tag-popup-left {\n transform: translate(-100%, -50%);\n top: 50%;\n }\n\n .tag-popup-right {\n transform: translate(0, -50%);\n top: 50%;\n }\n\n .tag-popup-top-left {\n transform: translate(calc(42px - 100%), -100%);\n }\n\n .tag-popup-top-right {\n transform: translate(-42px, -100%);\n }\n\n .tag-popup-bottom-left {\n transform: translate(calc(42px - 100%), 0);\n }\n\n .tag-popup-bottom-right {\n transform: translate(-42px, 0);\n }\n\n .tag-popup-left-top {\n transform: translate(-100%, -42px);\n }\n\n .tag-popup-left-bottom {\n transform: translate(-100%, calc(42px - 100%));\n }\n\n .tag-popup-right-top {\n transform: translate(0, -42px);\n }\n\n .tag-popup-right-bottom {\n transform: translate(0, calc(42px - 100%));\n }\n\n .tag-popup-content {\n position: relative;\n pointer-events: auto;\n cursor: pointer;\n padding: 20px;\n border-radius: 6px;\n max-width: 280px;\n width: 280px;\n background: #000000bf;\n }\n\n /* 顶部朝向 - 只显示左右边框 */\n .tag-popup-top .tag-popup-content,\n .tag-popup-top-left .tag-popup-content,\n .tag-popup-top-right .tag-popup-content {\n box-shadow: 0.5px 0 0 0 rgba(255, 255, 255, 0.3), /* 右 */ -0.5px 0 0 0 rgba(255, 255, 255, 0.3); /* 左 */\n }\n\n /* 底部朝向 - 只显示左右边框 */\n .tag-popup-bottom .tag-popup-content,\n .tag-popup-bottom-left .tag-popup-content,\n .tag-popup-bottom-right .tag-popup-content {\n box-shadow: 0.5px 0 0 0 rgba(255, 255, 255, 0.3), /* 右 */ -0.5px 0 0 0 rgba(255, 255, 255, 0.3); /* 左 */\n }\n\n /* 左侧朝向 - 只显示上下边框 */\n .tag-popup-left .tag-popup-content,\n .tag-popup-left-top .tag-popup-content,\n .tag-popup-left-bottom .tag-popup-content {\n box-shadow: 0 0.5px 0 0 rgba(255, 255, 255, 0.3), /* 上 */ 0 -0.5px 0 0 rgba(255, 255, 255, 0.3); /* 下 */\n }\n\n /* 右侧朝向 - 只显示上下边框 */\n .tag-popup-right .tag-popup-content,\n .tag-popup-right-top .tag-popup-content,\n .tag-popup-right-bottom .tag-popup-content {\n box-shadow: 0 0.5px 0 0 rgba(255, 255, 255, 0.3), /* 上 */ 0 -0.5px 0 0 rgba(255, 255, 255, 0.3); /* 下 */\n }\n\n .light {\n background: #ffffff;\n }\n\n .tag-popup-title {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n line-height: 22px;\n letter-spacing: 0;\n display: -webkit-box;\n -webkit-line-clamp: 2; /* 最多显示两行 */\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n color: #ffffff;\n }\n\n .light .tag-popup-title {\n color: #000000d9;\n }\n\n .tag-popup-description {\n margin: 0;\n font-size: 14px;\n font-weight: 400;\n color: #ffffff;\n line-height: 20px;\n display: -webkit-box;\n -webkit-line-clamp: 4; /* 最多显示4行 */\n -webkit-box-orient: vertical;\n max-height: 80px; /* 4行 * 20px行高 */\n overflow: hidden;\n word-wrap: break-word;\n word-break: break-word;\n text-overflow: ellipsis;\n white-space: pre-wrap;\n }\n\n .light .tag-popup-description {\n color: #000000d9;\n }\n\n .tag-popup-tags {\n display: flex;\n align-items: center;\n margin: 0;\n margin-bottom: 0;\n\n .tag-popup-tag + .tag-popup-tag {\n margin-left: 4px;\n }\n }\n\n .tag-popup-tag {\n padding: 2px 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n font-size: 12px;\n line-height: 18px;\n letter-spacing: 0;\n border-radius: 2px;\n max-width: 120px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .tag-popup-tag-primary {\n color: #ffffff;\n background-image: linear-gradient(90deg, #ead09a 0%, #e0cca3 100%);\n }\n\n .light .tag-popup-tag-primary {\n color: #946700;\n background-image: linear-gradient(90deg, #ead09a 0%, #e0cca3 100%);\n }\n\n .tag-popup-tag-secondary {\n color: #ffffff;\n background: #ffffff26;\n }\n\n .light .tag-popup-tag-secondary {\n color: #00000080;\n background: #0000000f;\n }\n\n .tag-popup-price {\n font-family: DINAlternate-Bold;\n font-weight: 700;\n font-size: 20px;\n color: #ae7900;\n letter-spacing: 0;\n text-align: center;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n margin: 0;\n }\n\n .tag-popup-media {\n width: 240px;\n height: 160px;\n margin: 0 auto;\n overflow: hidden;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n }\n\n .tag-popup-media-type {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 2;\n }\n\n .tag-popup-media-index {\n position: absolute;\n right: 6px;\n bottom: 6px;\n padding: 1px 4px;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 2px;\n font-weight: bold;\n font-size: 12px;\n color: #ffffff;\n letter-spacing: 0;\n line-height: 18px;\n }\n\n .iframe-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: transparent;\n z-index: 10;\n }\n\n /* 统一内容块间距,只有有多个内容块时才有间距 */\n .tag-popup-content > * + * {\n margin-top: 8px;\n }\n\n .tag-popup-content > *:first-child {\n margin-top: 0 !important;\n }\n</style>\n","<script lang=\"ts\">\n export let size = \"14\";\n export let color = \"#ffffff\";\n export let opacity = 1;\n</script>\n\n<svg \n xmlns=\"http://www.w3.org/2000/svg\" \n viewBox=\"0 0 14 14\" \n width={size} \n height={size}\n style=\"opacity: {opacity};\"\n>\n <defs>\n <linearGradient id=\"arrow-right-icon-gradient-{color}\" x1=\"96.2%\" y1=\"50%\" x2=\"0%\" y2=\"50%\">\n <stop stop-color={color} offset=\"0%\"/>\n <stop stop-color={color} stop-opacity=\".5\" offset=\"100%\"/>\n </linearGradient>\n <linearGradient id=\"arrow-right-icon-stroke-{color}\" x1=\"50%\" y1=\"9.83%\" x2=\"41.99%\" y2=\"24.46%\">\n <stop stop-color={color} offset=\"0%\"/>\n <stop stop-color={color} stop-opacity=\"0\" offset=\"100%\"/>\n </linearGradient>\n </defs>\n <path \n d=\"M4.84572153,2.14166669 C4.94036186,2.14170036 5.03490004,2.17870347 5.10676798,2.25203341 L9.39516942,6.66308361 C9.48635681,6.75687897 9.53195051,6.87843949 9.53195051,7 C9.53195051,7.12156051 9.48635681,7.24312103 9.39516942,7.33691639 L5.11673708,11.7390017 C5.02118573,11.813978 4.92122439,11.8514005 4.82705048,11.851434 C4.73517505,11.8514667 4.65029153,11.8150862 4.59276829,11.7576692 C4.51856427,11.6593496 4.48179951,11.5564146 4.48176638,11.4595899 C4.48173399,11.3649536 4.51747117,11.2773335 4.58937836,11.2035272 L7.74273899,7.43877755 C7.84906128,7.31184097 7.90222243,7.15592048 7.90222243,7 C7.90222243,6.84407952 7.84906128,6.68815903 7.74273449,6.56121708 L4.54804918,2.74803934 C4.65338339,2.20863952 4.74441906,2.14163065 4.84572153,2.14166669 Z\" \n fill={`url(#arrow-right-icon-gradient-${color})`}\n fill-rule=\"nonzero\"\n stroke={`url(#arrow-right-icon-stroke-${color})`}\n stroke-width=\".2\"\n />\n</svg> ","<script lang=\"ts\">\n export let size = \"20\";\n export let color = \"#ffffff\";\n export let opacity = 1;\n</script>\n\n<svg \n xmlns=\"http://www.w3.org/2000/svg\" \n viewBox=\"0 0 20 20\" \n width={size} \n height={size}\n style=\"opacity: {opacity};\"\n>\n <defs>\n <linearGradient id=\"share-icon-gradient-{color}\" x1=\"41.65%\" y1=\"59.05%\" x2=\"66.13%\" y2=\"9.07%\">\n <stop stop-color={color} offset=\"0%\"/>\n <stop stop-color={color} stop-opacity=\".5\" offset=\"100%\"/>\n </linearGradient>\n <linearGradient id=\"share-icon-stroke-{color}\" x1=\"55.68%\" y1=\"2.48%\" x2=\"60.83%\" y2=\"14.28%\">\n <stop stop-color={color} offset=\"0%\"/>\n <stop stop-color={color} stop-opacity=\"0\" offset=\"100%\"/>\n </linearGradient>\n </defs>\n <path \n d=\"M12.4937515,2.60140991 L12.6834904,2.60248871 C13.307774,2.63121157 13.9222065,2.90874077 14.3642696,3.436433 C14.7794904,3.93278385 14.923342,4.60854408 14.8265514,5.24548738 C14.7279361,5.89144103 14.4428997,6.3527969 14.063774,6.65956953 C13.6079793,7.02837949 13.0189069,7.17403325 12.4632035,7.15562178 C11.7380729,7.13162078 11.0390809,7.42803145 10.5261758,7.9357119 C9.96083448,8.49643643 9.67596892,9.19792997 9.69443632,9.91942004 C9.66449732,10.8859455 9.96309104,11.5807243 10.4796578,12.092029 C11.0239965,12.6296813 11.7402488,12.9101676 12.4817091,12.8884813 C13.0940469,12.8705618 13.7481304,13.0495781 14.2150699,13.5117611 C14.6987029,13.9904677 14.9268415,14.6256711 14.8974895,15.2508921 C14.8684928,15.868544 14.5880857,16.4761837 14.055365,16.9134138 C13.5533941,17.3248246 12.8689122,17.4672624 12.2258037,17.3713572 C11.5727886,17.2736846 11.1063284,16.991503 10.7961882,16.6159844 C10.4239402,16.1652655 10.2768519,15.5827583 10.2954352,15.0332376 C10.3197006,14.3149783 10.0202124,13.6224897 9.50703789,13.1145427 C8.94671715,12.5587885 8.2455275,12.2800717 7.51547371,12.2927077 C7.23521908,12.3053648 6.95603622,12.2673623 6.69423123,12.1827116 C6.1605306,11.9588888 5.9529663,11.8380114 5.77703284,11.66387 C5.40155143,11.2922134 5.1829777,10.8272392 5.11950899,10.3459077 C5.05433663,9.85165608 5.15259721,9.34024891 5.41443015,8.89062791 C5.61688125,8.49864777 5.91421421,8.21950306 6.25529625,8.03627882 C6.64911257,7.8247265 7.1008248,7.74055154 7.53306889,7.75691992 L7.73219905,7.75624362 C8.39290266,7.7280909 9.01896921,7.44343917 9.49037385,6.97683639 C10.0339806,6.43762468 10.3173723,5.72806794 10.2954528,4.99382841 C10.2784266,4.38712951 10.4592448,3.74020534 10.9258673,3.27833603 C11.4093877,2.79921041 12.051472,2.57340998 12.6834904,2.60248871 Z\" \n fill={`url(#share-icon-gradient-${color})`}\n fill-rule=\"nonzero\"\n stroke={`url(#share-icon-stroke-${color})`}\n stroke-width=\".2\"\n />\n</svg> ","<script lang=\"ts\">\n import { createEventDispatcher, getContext, onMount } from 'svelte'\n import ArrowRightIcon from './ArrowRightIcon.svelte'\n import ShareIcon from './ShareIcon.svelte'\n import { notNil } from '../../../../shared-utils'\n import type { PointTagInstance, TagHooks } from '../../../typings'\n\n const hooks = getContext<TagHooks>('hooks')\n const dispatch = createEventDispatcher()\n\n export let tag: PointTagInstance\n\n export let toolbar: { showMore: boolean; showShare: boolean } = { showMore: true, showShare: true }\n export let theme: 'dark' | 'light' = 'dark'\n export let closePopover: (() => void) | undefined = undefined;\n\n // 组件显示时发送emit事件\n onMount(() => {\n hooks.emit('popoverToolbarShow', { tag })\n })\n\n $: viewMoreText = (() => {\n if (notNil(tag.data.highlightText) && tag.data.highlightText.trim() !== '') {\n return tag.data.highlightText\n }\n if (notNil(tag.config.popoverConfig.viewMoreText) && tag.config.popoverConfig.viewMoreText.trim() !== '') {\n return tag.config.popoverConfig.viewMoreText\n }\n return '查看更多'\n })()\n\n // 处理点击查看更多\n function handleViewMore(event: MouseEvent) {\n event.stopPropagation()\n if (typeof closePopover === 'function') closePopover();\n hooks.emit('click', { event, target: 'TagPopoverViewMore', tag })\n }\n\n // 处理点击分享\n function handleShare(event: MouseEvent) {\n event.stopPropagation()\n if (typeof closePopover === 'function') closePopover();\n hooks.emit('click', { event, target: 'TagPopoverShare', tag })\n }\n</script>\n\n{#if toolbar.showMore || toolbar.showShare}\n <div class=\"tag-popover-toolbar tag-popover-toolbar-{theme} {toolbar.showMore && toolbar.showShare ? 'both-buttons' : 'single-button'}\">\n {#if toolbar.showMore}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div class=\"tag-popover-btn view-more\" on:click={handleViewMore}>\n {viewMoreText}\n <ArrowRightIcon size=\"14\" color={theme === 'light' ? '#000000' : '#ffffff'} opacity={theme === 'light' ? 0.8 : 1} />\n </div>\n {/if}\n {#if toolbar.showShare}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div class=\"tag-popover-btn share\" on:click={handleShare}>\n <ShareIcon size=\"20\" color={theme === 'light' ? '#000000' : '#ffffff'} opacity={theme === 'light' ? 0.8 : 1} />\n </div>\n {/if}\n </div>\n{/if}\n\n<style lang=\"scss\">\n .tag-popover-toolbar {\n display: flex;\n align-items: center;\n margin-top: 12px;\n padding-top: 0;\n border-top: none;\n\n &.both-buttons {\n justify-content: space-between;\n }\n\n &.single-button {\n justify-content: flex-end;\n }\n }\n\n .tag-popover-toolbar-dark .tag-popover-btn {\n color: #ffffff;\n }\n\n .tag-popover-toolbar-light .tag-popover-btn {\n color: rgba(0, 0, 0, 0.85);\n }\n\n .tag-popover-btn {\n &.view-more {\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 500;\n font-size: 14px;\n letter-spacing: 0;\n line-height: 20px;\n }\n\n &.share {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { PointTagInstance, Tag, TagPlacement } from '../../../typings'\n import TagPopoverArrow from './TagPopoverArrow.svelte'\n import TagPopup from './TagPopup.svelte'\n import TagPopoverToolBar from './TagPopoverToolBar.svelte'\n import type { SharedAudio } from '../../../utils/audio/SharedAudio'\n \n export let showArrow: boolean\n export let arrowDirection: 'top' | 'bottom' | 'left' | 'right'\n export let effectiveTheme: 'dark' | 'light'\n export let adjustedPlacement: TagPlacement\n export let tag: PointTagInstance\n export let config: Tag['config']['popoverConfig']\n export let theme: 'dark' | 'light' | undefined\n export let toolbar: { showMore?: boolean; showShare?: boolean }\n export let closePopover: () => void\n // 音频实例引用\n export let audioInstance: SharedAudio | null = null\n export let audioPlaying: boolean = false\n export let audioCurrentTime: number = 0\n export let audioDuration: number = 0\n\n\n</script>\n\n<TagPopoverArrow show={showArrow} direction={arrowDirection} theme={effectiveTheme} />\n<TagPopup placement={adjustedPlacement} {tag} {config} {theme} {audioInstance} {audioPlaying} {audioCurrentTime} {audioDuration} on:resize>\n <svelte:fragment slot=\"toolbar\">\n <TagPopoverToolBar\n toolbar={{\n showMore: toolbar.showMore === undefined ? true : toolbar.showMore,\n showShare: toolbar.showShare === undefined ? true : toolbar.showShare,\n }}\n theme={effectiveTheme}\n tag={tag}\n closePopover={closePopover}\n />\n </svelte:fragment>\n</TagPopup>\n","<script lang=\"ts\">\n import type { PointTagInstance, Tag, TagHooks, TagPlacement } from '../../../typings'\n import { onMount, tick, getContext, onDestroy, afterUpdate } from 'svelte'\n import { cubicOut } from 'svelte/easing'\n import { notNil } from '../../../../shared-utils'\n import PopoverContent from './PopoverContent.svelte'\n import { createEventDispatcher } from 'svelte'\n import type { SharedAudio } from '../../../utils/audio/SharedAudio'\n\n const hooks = getContext<TagHooks>('hooks')\n\n export let tag: PointTagInstance\n export let config: Tag['config']['popoverConfig'] = {}\n export let triggerElement: HTMLElement // 必传参数,不得为空\n export let wrapperElement: HTMLElement = document.body\n export let popoverContainer: HTMLElement | null = null\n export let theme: 'dark' | 'light' | undefined = undefined\n export let visible: boolean = true\n export let closePopover: (() => void) | undefined = undefined\n // 音频实例引用\n export let audioInstance: SharedAudio | null = null\n export let audioPlaying: boolean = false\n export let audioCurrentTime: number = 0\n export let audioDuration: number = 0\n\n const dispatch = createEventDispatcher()\n\n // 计算实际使用的主题\n $: effectiveTheme = (() => {\n if (notNil(theme)) {\n return theme\n }\n\n if (notNil(tag.data.theme) && ['light', 'dark'].includes(tag.data.theme)) {\n return tag.data.theme\n }\n\n return tag.contentType === 'Marketing' ? 'light' : 'dark'\n })()\n\n // 内部状态\n let popoverContentElement: HTMLElement\n let popoverContentElementRect = { width: 0, height: 0 }\n // 存储锚点坐标,初始值为null\n let anchorPosition: { x: number; y: number } | null = null\n\n // 解析配置\n $: placement = (config?.placement || 'right-top') as TagPlacement\n $: arrow = true\n $: zIndex = 1060\n $: toolbar = (() => {\n if (typeof config?.toolbar === 'boolean') {\n return config.toolbar ? { showMore: true, showShare: true } : { showMore: false, showShare: false }\n }\n return config?.toolbar || { showMore: true, showShare: true }\n })()\n\n // 存储调整后的placement,初始值为传入的placement\n let adjustedPlacement: TagPlacement = placement\n\n // 当placement变化时,如果是'auto',则计算最佳位置\n $: if (placement === 'auto') {\n adjustedPlacement = calculateOptimalPlacement()\n } else {\n adjustedPlacement = placement\n }\n\n // 动画配置\n $: transitionDuration = config?.transitionDuration || 350 // 增加默认时长\n\n // 自定义过渡函数,同时具有fade和fly效果\n function fadeAndFly(node, { duration = 400, easing = cubicOut, x = 0, y = 0 }) {\n return {\n duration,\n css: (t, u) => {\n return `\n opacity: ${t};\n transform: translate(${u * x}px, ${u * y}px);\n `\n },\n }\n }\n\n // 创建一个函数来计算最优placement\n const calculateOptimalPlacement = (): TagPlacement => {\n if (!tag.screenPosition || !triggerElement || !wrapperElement) return placement\n\n // 获取配置的区域划分比例,使用默认值或配置值\n const baseSpace = config?.autoPlacementBaseSpace || {\n top: 0.2, // 顶部区域占比20%\n bottom: 0.2, // 底部区域占比20%\n right: 0.15, // 右侧区域占比15%\n }\n\n // 获取视口尺寸\n const viewportWidth = wrapperElement.clientWidth\n const viewportHeight = wrapperElement.clientHeight\n\n // 计算各区域的边界值\n const topBoundary = viewportHeight * baseSpace.top\n const bottomBoundary = viewportHeight * (1 - baseSpace.bottom)\n const rightBoundary = viewportWidth * (1 - baseSpace.right)\n\n // 获取标签在屏幕上的位置\n const x = tag.screenPosition.leftPx\n const y = tag.screenPosition.topPx\n\n // 弹出框的尺寸\n const popoverWidth = popoverContentElementRect.width || 280\n const popoverHeight = popoverContentElementRect.height || 200\n\n // 根据标签位置判断所在区域\n if (y <= topBoundary) {\n // 在顶部区域 (top-left)\n if (x <= rightBoundary) {\n // 确保有足够空间显示popover\n if (x + popoverWidth <= viewportWidth && y + popoverHeight <= viewportHeight) {\n return 'right-top'\n }\n return 'bottom-left'\n } else {\n // 在右上角区域 (top-right)\n if (x - popoverWidth >= 0 && y + popoverHeight <= viewportHeight) {\n return 'left-top'\n }\n return 'bottom-right'\n }\n } else if (y >= bottomBoundary) {\n // 在底部区域 (bottom-left)\n if (x <= rightBoundary) {\n if (x + popoverWidth <= viewportWidth && y - popoverHeight >= 0) {\n return 'right-bottom'\n }\n return 'top-left'\n } else {\n // 在右下角\n if (x - popoverWidth >= 0 && y - popoverHeight >= 0) {\n return 'left-bottom'\n }\n return 'top-right'\n }\n } else {\n // 在中间区域 (right-top)\n if (x <= rightBoundary) {\n if (x + popoverWidth <= viewportWidth) {\n return 'right-top'\n }\n return 'left-top'\n } else {\n if (x - popoverWidth >= 0) {\n return 'left-top'\n }\n return 'right-top'\n }\n }\n }\n\n // 监听 tag.screenPosition 的变化\n $: if (tag.screenPosition && triggerElement) {\n adjustedPlacement = calculateOptimalPlacement()\n }\n\n // 监听 contentRect 的变化\n $: if (popoverContentElementRect.width > 0 && popoverContentElementRect.height > 0) {\n adjustedPlacement = calculateOptimalPlacement()\n }\n\n // 添加一个用于计算最终位置的函数,考虑 8px 的间距\n const calculateFinalPosition = (basePosition: { x: number; y: number } | null, placement: TagPlacement) => {\n if (!basePosition) return null\n\n const offset = 8 // 设置 8px 的间距\n const position = { ...basePosition }\n\n // 根据方位调整位置\n if (['top', 'top-left', 'top-right'].includes(placement)) {\n position.y -= offset // 顶部位置,向上偏移\n } else if (['bottom', 'bottom-left', 'bottom-right'].includes(placement)) {\n position.y += offset // 底部位置,向下偏移\n } else if (['left', 'left-top', 'left-bottom'].includes(placement)) {\n position.x -= offset // 左侧位置,向左偏移\n } else if (['right', 'right-top', 'right-bottom'].includes(placement)) {\n position.x += offset // 右侧位置,向右偏移\n }\n\n return position\n }\n\n // 计算相对于body的锚点位置(全局坐标)\n const calculateAnchorPositionGlobal = (placement: TagPlacement, triggerRect: DOMRect): { x: number; y: number } => {\n switch (placement) {\n case 'top':\n case 'top-left':\n case 'top-right':\n return {\n x: triggerRect.left + triggerRect.width / 2,\n y: triggerRect.top,\n }\n case 'bottom':\n case 'bottom-left':\n case 'bottom-right':\n return {\n x: triggerRect.left + triggerRect.width / 2,\n y: triggerRect.top + triggerRect.height,\n }\n case 'left':\n case 'left-top':\n case 'left-bottom':\n return {\n x: triggerRect.left,\n y: triggerRect.top + triggerRect.height / 2,\n }\n case 'right':\n case 'right-top':\n case 'right-bottom':\n return {\n x: triggerRect.left + triggerRect.width,\n y: triggerRect.top + triggerRect.height / 2,\n }\n default:\n return {\n x: triggerRect.left + triggerRect.width / 2,\n y: triggerRect.top,\n }\n }\n }\n\n // 当adjustedPlacement发生变化时,重新计算锚点坐标(全局坐标)\n $: if (tag.screenPosition && adjustedPlacement && triggerElement) {\n const triggerRect = triggerElement.getBoundingClientRect()\n if (triggerRect.width > 0 && triggerRect.height > 0) {\n anchorPosition = calculateAnchorPositionGlobal(adjustedPlacement, triggerRect)\n }\n }\n\n // 计算最终位置,添加间距\n $: finalPosition = anchorPosition\n\n // 处理底部工具栏事件\n const handleViewMore = (event: CustomEvent<{ event: MouseEvent }>) => {\n closePopoverInternal()\n if (hooks) {\n hooks.emit('click', { event: event.detail.event, target: 'TagPopoverViewMore', tag })\n }\n }\n\n const handleShare = (event: CustomEvent<{ event: MouseEvent }>) => {\n closePopoverInternal()\n if (hooks) {\n hooks.emit('click', { event: event.detail.event, target: 'TagPopoverShare', tag })\n }\n }\n\n // 从tag和props中获取内容\n $: showArrow = typeof arrow === 'boolean' ? arrow : true\n\n // 定义箭头方向的类型\n type ArrowDirection = 'top' | 'bottom' | 'left' | 'right'\n\n // 计算箭头朝向,如 top, bottom, left, right\n $: arrowDirection = ((): ArrowDirection => {\n switch (adjustedPlacement) {\n case 'top':\n case 'top-left':\n case 'top-right':\n return 'bottom'\n case 'bottom':\n case 'bottom-left':\n case 'bottom-right':\n return 'top'\n case 'left':\n case 'left-top':\n case 'left-bottom':\n return 'right'\n case 'right':\n case 'right-top':\n case 'right-bottom':\n return 'left'\n default:\n return 'bottom' // 默认值\n }\n })()\n\n // 计算内容大小,用于辅助定位\n const updateContentRect = () => {\n if (popoverContentElement) {\n const rect = popoverContentElement.getBoundingClientRect()\n popoverContentElementRect = { width: rect.width, height: rect.height }\n // 获取到新的内容尺寸后重新计算placement\n if (popoverContentElementRect.width > 0 && popoverContentElementRect.height > 0) {\n adjustedPlacement = calculateOptimalPlacement()\n }\n }\n }\n\n // 处理内容resize事件\n const handleContentResize = (event) => {\n popoverContentElementRect = event.detail\n // 当内容尺寸变化时,立即重新计算最佳位置\n if (popoverContentElementRect.width > 0 && popoverContentElementRect.height > 0) {\n adjustedPlacement = calculateOptimalPlacement()\n }\n }\n\n const handleClick = (event: MouseEvent) => {\n // 音频标签的 popover 内容点击不关闭 popover\n if (!isAudioTag) {\n closePopoverInternal()\n }\n event.stopPropagation()\n hooks.emit('click', { event, target: 'TagPopoverContent', tag })\n }\n\n let popoverEl: HTMLElement | null = null\n let mounted = false\n\n function mountToContainer() {\n if (popoverContainer && popoverEl && popoverEl.parentNode !== popoverContainer) {\n popoverContainer.appendChild(popoverEl)\n }\n }\n\n onMount(() => {\n if (!wrapperElement || wrapperElement === document.body) {\n console.warn('TagPopover 组件警告:禁止使用 document.body 作为 wrapperElement,请传入自定义容器元素。')\n }\n mounted = true\n mountToContainer()\n // 只对自定义 wrapperElement 设置 overflow,不能是 document.body\n if (wrapperElement && wrapperElement !== document.body) {\n wrapperElement.style.overflow = 'hidden'\n }\n })\n\n afterUpdate(() => {\n if (mounted) mountToContainer()\n })\n\n onDestroy(() => {\n if (popoverEl && popoverEl.parentNode) {\n popoverEl.parentNode.removeChild(popoverEl)\n }\n // 只恢复自定义 wrapperElement 的 overflow\n if (wrapperElement && wrapperElement !== document.body) {\n wrapperElement.style.overflow = ''\n }\n })\n\n function closePopoverInternal() {\n if (typeof closePopover === 'function') closePopover()\n dispatch('close')\n }\n\n // 计算是否为音频标签\n $: isAudioTag = tag.contentType === 'Audio' && (tag as any).data.appearance === 'plane'\n</script>\n\n{#if visible && finalPosition}\n <div\n class=\"tag-popover tag-popover-{effectiveTheme} tag-popover-{adjustedPlacement}\"\n data-tag-id={tag.id}\n style=\"z-index: {zIndex}; left: {finalPosition.x}px; top: {finalPosition.y}px;\"\n bind:this={popoverEl}\n >\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div\n class=\"tag-popover-content\"\n class:audio-tag-popover={isAudioTag}\n bind:this={popoverContentElement}\n on:mouseenter\n on:mouseleave\n transition:fadeAndFly={{\n duration: transitionDuration,\n easing: cubicOut,\n y: arrowDirection === 'top' ? -8 : arrowDirection === 'bottom' ? 8 : 0,\n x: arrowDirection === 'left' ? -8 : arrowDirection === 'right' ? 8 : 0,\n }}\n on:click={handleClick}\n >\n <PopoverContent\n {showArrow}\n {arrowDirection}\n {effectiveTheme}\n {adjustedPlacement}\n {tag}\n {config}\n {theme}\n {toolbar}\n {audioInstance}\n {audioPlaying}\n {audioCurrentTime}\n {audioDuration}\n closePopover={closePopoverInternal}\n on:viewMore={handleViewMore}\n on:share={handleShare}\n on:resize={handleContentResize}\n />\n </div>\n </div>\n{/if}\n\n<style lang=\"scss\">\n .tag-popover {\n position: absolute;\n z-index: 1000010;\n pointer-events: auto;\n width: auto;\n height: auto;\n padding: 0;\n margin: 0;\n visibility: visible;\n opacity: 1;\n }\n .tag-popover-content {\n cursor: pointer;\n pointer-events: auto;\n }\n\n .tag-popover-content.audio-tag-popover {\n cursor: default; /* 音频标签的 popover 不显示点击光标 */\n }\n</style>\n","<script lang=\"ts\">\n import { getContext, onMount } from 'svelte'\n import type {\n PointTagInstance,\n State,\n TemporaryState,\n MediaStore,\n TagHooks,\n TagRendererMap,\n TagContentTypeMapping,\n TagInstance,\n } from '../typings'\n import TagContent from './Tag/index.svelte'\n import { noTypecheck } from '../utils'\n import TagPoint from './Common/TagPoint.svelte'\n import { isModelLike } from '../../shared-utils'\n import TagPopover from './Common/TagPopover/index.svelte'\n import type { SharedAudio } from '../utils/audio/SharedAudio'\n\n export let tag: PointTagInstance | TagInstance\n export let mediaStore: MediaStore\n export let rendererMap: TagRendererMap = new Map()\n export let contentTypeMap: TagContentTypeMapping = new Map()\n export let state: State\n export let temporaryState: TemporaryState\n export let wrapperElement: HTMLElement | null = null\n export let popoverContainer: HTMLElement | null = null\n\n $: havePoint = (() => {\n if (tag.style?.point?.enabled === false) return false\n if (rendererMap.get(tag.contentType)?.usePoint === false) return false\n if (tag.contentType === 'Sticker') return false\n if (tag.contentType === 'Link') return false\n if (tag.contentType === 'VRLink') return false\n if (tag.contentType === 'PanoLink') return false\n if (tag.contentType === 'Panorama') return true\n if (tag.contentType === 'Audio' && (tag as PointTagInstance<'Audio'>).data.appearance === 'plane') return tag.isPopoverConfigEnabled()\n // 非 2DPoint / 3DPoint 的 stickType(如 Polygon、3DBox、Mask)不渲染标签点\n if (tag.stickType && tag.stickType !== '2DPoint' && tag.stickType !== '3DPoint') return false\n return true\n })()\n\n $: haveContent = (() => {\n if (tag.isPopoverConfigEnabled() && tag.contentType === 'Panorama') return false\n if (tag.isPopoverConfigEnabled() && tag.contentType === 'ImageText') return false\n if (tag.isPopoverConfigEnabled() && tag.contentType === 'Text') return false\n if (tag.isPopoverConfigEnabled() && tag.contentType === 'Audio') return false\n // TODO\n // if (tag.isPopoverConfigEnabled() && tag.contentType === 'Marketing') return false\n // 有自定义渲染器/自定义 element 时,必须渲染 content(否则会导致 Mask/3DBox 等非 Point stickType 无法渲染业务侧面板)\n if (tag.element || rendererMap.has(tag.contentType)) return true\n // 仅 2DPoint / 3DPoint 类型显示内容\n if (tag.stickType && tag.stickType !== '2DPoint' && tag.stickType !== '3DPoint') return false\n if (tag.entryFromModel && isModelLike(tag.five.state.mode) && havePoint) return false\n return true\n })()\n\n // 检查标签是否有内容,只有当有内容时才显示 popover\n $: hasPopoverContent = (() => {\n // 营销标签判断\n if (tag.contentType === 'Marketing') {\n return !!(\n tag.data.title ||\n tag.data.name ||\n tag.data.description ||\n tag.data.tooltip ||\n tag.data.price?.value ||\n (tag.data.brandTags && tag.data.brandTags.length > 0) ||\n (tag.data.tags && tag.data.tags.length > 0) ||\n tag.data.imageUrl ||\n tag.data.mediaUrl ||\n (tag.data.mediaData && tag.data.mediaData.length > 0)\n )\n }\n\n // 普通标签判断\n return !!(\n tag.data.title ||\n tag.data.name ||\n tag.data.description ||\n tag.data.tooltip ||\n tag.data.imageUrl ||\n tag.data.mediaUrl ||\n tag.data.audioUrl ||\n (tag.data.mediaData && tag.data.mediaData.length > 0)\n )\n })()\n\n $: id = tag.id\n $: screenPosition = tag.screenPosition\n $: disable = tag.enabled === false || !tag.state\n $: hide = !tag.state?.visible || tag.temporaryState?.visible === false || !screenPosition\n $: unfolded = tag.state?.unfolded && !tag.isPopoverConfigEnabled()\n $: left = screenPosition?.leftPx + 'px'\n $: top = screenPosition?.topPx + 'px'\n // 由于性能问题,只有展开的标签生效\n $: zIndex = unfolded ? (tag.zIndex ?? 0) + (unfolded ? 1000000 : 0) : undefined // 之前展开后的zIndex统一为是9999,但是会忽略距离因素,现在展开的话也要按距离来展示\n\n const hooks: TagHooks = getContext('hooks')\n\n let isHovering = false\n let hoverTimeout: NodeJS.Timeout | undefined\n let hideTimeout: NodeJS.Timeout | undefined\n let debounceTimeout: NodeJS.Timeout | undefined\n let tagPointClickHelper: HTMLElement | null = null\n let isMouseOverPopover = false\n let isMouseOverTagPoint = false\n let tagPointComponent: any = null\n\n // 音频状态管理\n let audioInstance: SharedAudio | null = null\n let audioPlaying = false\n let audioCurrentTime = 0\n let audioDuration = 0\n\n // 音频事件处理器映射\n const audioEventHandlers = {\n audioInstanceReady: (event: CustomEvent<SharedAudio>) => {\n audioInstance = event.detail\n audioPlaying = !audioInstance.paused\n },\n audioPlay: () => {\n audioPlaying = true\n },\n audioPause: () => {\n audioPlaying = false\n },\n audioTimeUpdate: (event: CustomEvent<number>) => {\n audioCurrentTime = event.detail\n },\n audioDuration: (event: CustomEvent<number>) => {\n audioDuration = event.detail\n },\n }\n\n let hoverState = false // 真实的hover状态,用于防抖处理\n\n // 使用防抖函数设置hover状态,避免频繁切换\n const setHoverStateDebounced = (newState: boolean) => {\n if (debounceTimeout) {\n clearTimeout(debounceTimeout)\n }\n\n // 如果是设置为true,直接设置不需要防抖\n if (newState === true && !hoverState) {\n hoverState = true\n isHovering = true\n return\n }\n\n // 如果是设置为false,添加延迟\n debounceTimeout = setTimeout(() => {\n // 只有当鼠标既不在TagPoint上也不在Popover上时才隐藏\n if (!isMouseOverPopover && !isMouseOverTagPoint && !tag.config.popoverConfig?.debug) {\n hoverState = false\n isHovering = false\n }\n }, 300)\n }\n\n const handlePopoverMouseEnter = () => {\n isMouseOverPopover = true\n // 进入popover区域时,清除可能存在的隐藏定时器\n if (hideTimeout) {\n clearTimeout(hideTimeout)\n hideTimeout = undefined\n }\n if (debounceTimeout) {\n clearTimeout(debounceTimeout)\n }\n }\n\n const handlePopoverMouseLeave = () => {\n isMouseOverPopover = false\n // 使用防抖设置hover状态\n setHoverStateDebounced(false)\n }\n\n const handleMouseEnter = (event: PointerEvent) => {\n if (event.pointerType !== 'mouse') return // 只响应鼠标事件\n isMouseOverTagPoint = true\n\n const trigger = tag.currentConfig?.popoverConfig?.trigger\n if (tag.isPopoverConfigEnabled() && tag.isHoverEnabled() && trigger === 'hover') {\n // 清除隐藏相关的定时器\n if (hideTimeout) {\n clearTimeout(hideTimeout)\n hideTimeout = undefined\n }\n if (debounceTimeout) {\n clearTimeout(debounceTimeout)\n }\n\n // 如果已经有延迟显示的定时器,不需要重新创建\n if (hoverTimeout !== undefined) {\n return\n }\n\n if (tag.currentConfig?.popoverConfig?.triggerDelay > 0) {\n hoverTimeout = setTimeout(() => {\n setHoverStateDebounced(true)\n tag.hooks.emit('hover', { event, tag })\n hoverTimeout = undefined\n }, tag.currentConfig?.popoverConfig?.triggerDelay)\n } else {\n setHoverStateDebounced(true)\n tag.hooks.emit('hover', { event, tag })\n }\n }\n }\n\n const handleMouseLeave = (event: PointerEvent) => {\n if (event.pointerType !== 'mouse') return // 只响应鼠标事件\n isMouseOverTagPoint = false\n\n const trigger = tag.currentConfig?.popoverConfig?.trigger\n if (tag.isHoverEnabled() && tag.isPopoverConfigEnabled() && trigger === 'hover') {\n // 清除显示定时器\n if (hoverTimeout !== undefined) {\n clearTimeout(hoverTimeout)\n hoverTimeout = undefined\n }\n\n // 使用防抖设置hover状态\n setHoverStateDebounced(false)\n }\n }\n\n const handleTagPointClick = (event: MouseEvent) => {\n // 音频标签的点击应该控制播放/暂停,不影响 popover 状态\n const isAudioTag = tag.contentType === 'Audio' && (tag as any).data.appearance === 'plane'\n\n const trigger = tag.currentConfig?.popoverConfig?.trigger\n\n if (tag.isPopoverConfigEnabled() && tag.isHoverEnabled() && trigger === 'click') {\n if (!isAudioTag) {\n // 非音频标签:切换 popover 显示状态\n isHovering = !isHovering\n if (isHovering) {\n tag.hooks.emit('hover', { event, tag })\n }\n } else {\n // 音频标签:只在首次点击时显示 popover,后续点击不影响 popover 状态\n if (!isHovering) {\n isHovering = true\n tag.hooks.emit('hover', { event, tag })\n }\n // 如果 popover 已显示,点击不关闭它,让音频播放/暂停逻辑自己处理\n }\n }\n }\n\n function closePopover() {\n hoverState = false\n isHovering = false\n }\n\n onMount(() => {\n return () => {\n if (hoverTimeout) clearTimeout(hoverTimeout)\n if (hideTimeout) clearTimeout(hideTimeout)\n if (debounceTimeout) clearTimeout(debounceTimeout)\n }\n })\n</script>\n\n<!--\n 不用 hide 作为判断条件是因为 svelte if 为 false 的时候,里面的 dom 就不会更新了, 会导致消失动画期间标签位置不更新,\n 所以在使用 screenPosition (相当于延迟更新的 hide) 来代替 hide\n-->\n{#if screenPosition && (!disable || isHovering)}\n <div\n class=\"tag\"\n class:unClickable={tag.config.clickable === false}\n data-tag-id={id}\n data-tag-unfolded={unfolded}\n data-content-type={tag.contentType}\n data-popover-enabled={tag.isPopoverConfigEnabled()}\n id={`tag-${id}`}\n class:hide\n class:enableZIndex={zIndex}\n style:z-index={zIndex}\n style:transform={`translate3d(${left}, ${top}, 0) scale(${screenPosition.scale})`}\n bind:this={tag.dom}\n >\n {#if havePoint}\n <TagPoint\n tag={noTypecheck(tag)}\n {handleMouseEnter}\n {handleMouseLeave}\n {handleTagPointClick}\n bind:tagPointClickHelper\n bind:this={tagPointComponent}\n on:audioInstanceReady={audioEventHandlers.audioInstanceReady}\n on:audioPlay={audioEventHandlers.audioPlay}\n on:audioPause={audioEventHandlers.audioPause}\n on:audioTimeUpdate={audioEventHandlers.audioTimeUpdate}\n on:audioDuration={audioEventHandlers.audioDuration}\n />\n {:else}\n <div data-info=\"tag point is disable\" />\n {/if}\n {#if haveContent}\n <TagContent {mediaStore} tag={noTypecheck(tag)} {hooks} {state} {temporaryState} {rendererMap} {contentTypeMap} />\n {:else}\n <div data-info=\"tag content is disable\" />\n {/if}\n </div>\n{/if}\n<!-- Popover 组件 -->\n{#if tag.isPopoverConfigEnabled() && hasPopoverContent && (isHovering || tag.config.popoverConfig?.debug)}\n <TagPopover\n tag={noTypecheck(tag)}\n config={tag.config.popoverConfig}\n theme={tag.config.popoverConfig?.theme}\n {wrapperElement}\n triggerElement={tagPointClickHelper}\n {popoverContainer}\n visible={true}\n {closePopover}\n {audioInstance}\n {audioPlaying}\n {audioCurrentTime}\n {audioDuration}\n on:mouseenter={handlePopoverMouseEnter}\n on:mouseleave={handlePopoverMouseLeave}\n on:close={closePopover}\n />\n{/if}\n\n<style lang=\"scss\">\n .tag {\n position: absolute;\n width: 0px;\n height: 0px;\n overflow: visible;\n pointer-events: auto;\n will-change: opacity; // 修复safari中模型态标签hide时,opacity不会立即生效的问题\n transition: opacity 0.2s linear;\n\n &.enableZIndex {\n position: absolute;\n }\n &.hide {\n opacity: 0;\n pointer-events: none;\n }\n &.hide :global(*) {\n pointer-events: none !important;\n }\n\n &.unClickable {\n pointer-events: none !important;\n }\n\n &.unClickable :global(*) {\n pointer-events: none !important;\n }\n }\n</style>\n","let popoverContainer: HTMLElement | null = null;\n\nexport function getOrCreatePopoverContainer(zIndex: number = 2000000) {\n if (popoverContainer && document.body.contains(popoverContainer)) {\n popoverContainer.style.zIndex = String(zIndex);\n return popoverContainer;\n }\n popoverContainer = document.createElement('div');\n popoverContainer.className = 'tag-popover-container';\n Object.assign(popoverContainer.style, {\n position: 'absolute',\n left: '0',\n top: '0',\n width: '100%',\n height: '100%',\n zIndex: String(zIndex),\n pointerEvents: 'none',\n overflow: 'hidden',\n });\n document.body.appendChild(popoverContainer);\n return popoverContainer;\n} ","<script lang=\"ts\">\n import { setContext } from 'svelte'\n import type { TagHooks, PointTagInstance, State, TemporaryState, MediaStore, TagRendererMap, TagContentTypeMapping, TagInstance } from '../typings'\n import TagItem from './TagItem.svelte'\n import { fade } from 'svelte/transition'\n import { getOrCreatePopoverContainer } from '../utils/popoverContainer'\n import { onMount } from 'svelte'\n\n export let tags: (PointTagInstance | TagInstance)[] = []\n export let hooks: TagHooks\n export let mediaStore: MediaStore\n export let rendererMap: TagRendererMap\n export let contentTypeMap: TagContentTypeMapping\n export let state: State\n export let temporaryState: TemporaryState\n export let zIndex: number | undefined = undefined\n let wrapperElement: HTMLElement | null = null\n let popoverContainerEl: HTMLElement | null = null\n let popoverZIndex = 2000\n $: if (tags && tags.length > 0) {\n // 取第一个 tag 的 popoverConfig.zIndex,或默认值\n popoverZIndex = tags[0]?.config?.popoverConfig?.zIndex ?? 2000000\n }\n setContext('hooks', hooks)\n setContext('mediaStore', mediaStore)\n\n onMount(() => {\n popoverContainerEl = getOrCreatePopoverContainer(popoverZIndex)\n })\n</script>\n\n<!-- 当data-infive为0时,opacity为1,否则为null -->\n{#if state.enabled}\n <div\n in:fade\n class=\"tag--container\"\n data-infive={!state.visible || !temporaryState.visible ? '1' : '0'}\n class:hide={!state.visible || !temporaryState.visible}\n style:z-index={zIndex ?? ''}\n style:opacity={!state.visible || !temporaryState.visible ? null : 1}\n bind:this={wrapperElement}\n >\n {#each tags as tag (tag.id)}\n <TagItem\n {state}\n {temporaryState}\n {tag}\n {mediaStore}\n {rendererMap}\n {contentTypeMap}\n {wrapperElement}\n popoverContainer={popoverContainerEl}\n />\n {/each}\n </div>\n{/if}\n\n<style>\n .tag--container {\n box-sizing: border-box;\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n opacity: 1;\n user-select: none;\n transform: translate3d(0, 0, 0);\n transition: opacity 0.2s linear;\n overflow: hidden;\n }\n\n .tag--container.hide {\n /* 别删 important,因为有 infive */\n opacity: 0 !important;\n pointer-events: none;\n }\n\n .tag--container.hide :global(*) {\n pointer-events: none !important;\n }\n</style>\n","import type { BlinkOptions } from '../../shared-utils/three/blink'\nimport { SculptModules } from '../../Sculpt/utils/Modules/Global'\nimport type { PlaybackManager } from '../../shared-utils/playback'\nimport { mountComponent, type MountedComponent } from '../../shared-utils/svelte/component.svelte'\n\nimport * as THREE from 'three/webgpu'\nimport type { Tag, TagId, Tags, State, ContentTypeConfigKey, TagInstance } from '../typings'\nimport type { TagClickParams, TagConfigByKey, TagContentType } from '..'\nimport type { ArrayPosition } from '../typings'\nimport type { Five, Mode } from '@realsee/five-webgpu'\nimport objectAssignDeep from 'object-assign-deep'\nimport { debounce, throttle } from '../utils'\nimport formatTag, { getTagStickType } from '../utils/tag/format'\nimport { AudioNamespace, generateBlankAudio } from '../../shared-utils/audio'\nimport { resizeObserver } from '../../shared-utils/dom/resizeObserver'\nimport { isMediaModelTag, isAutoLookAtModelTag } from '../utils/tag/tagCheck'\nimport { TagRender } from './TagRender'\nimport { isModelLike, nextFrame, tweenProgress } from '../../shared-utils'\nimport type { PartialObjectDeep } from '../../typings/typings'\nimport { waitFiveModelLoaded } from '../../shared-utils/five/fiveModelLoad'\nimport { arrayPositionToVector3 } from '../../shared-utils/positionToVector3'\nimport { DebugUtil } from '../utils/DebugUtil'\nimport safeObj from '../../shared-utils/safeObj'\nimport { PointTag } from './Tag/PointTag'\nimport { ModelTag } from './Tag/ModelTag'\nimport { PlaneTag } from './Tag/PlaneTag'\nimport { BoxTag } from './Tag/BoxTag'\nimport { PolygonTag } from './Tag/PolygonTag'\nimport { MaskTag } from './Tag/MaskTag'\nimport TagContainerSvelte from '../Components/TagContainer.svelte'\nimport { fiveEveryReadyListener } from '../../shared-utils/five/fiveEveryReadyListener'\nimport { getFiveModel } from '../../shared-utils/five/getFiveModel'\nimport vector3ToArray from '../../shared-utils/three/vector3ToArray'\n\nconst PLUGIN_NAME = 'Dnalogel-PanoTagPlugin'\n\nexport const pluginFlag = (name: string) => `${PLUGIN_NAME}--${name}`\n\nclass PanoTagPluginController extends TagRender {\n public readonly sculptModules: SculptModules\n public mediaManager?: PlaybackManager\n /** state */\n public state = { enabled: true, visible: true }\n\n /** debug */\n private debug: boolean\n\n private debugUtil = new DebugUtil(this)\n\n /** 全局 hover 启用状态,默认 true */\n public globalHoverEnabled = true\n\n private tagContainerTarget?: Element\n\n private readonly handleFiveDispose = () => this.dispose()\n\n public constructor(\n five: Five,\n params?: {\n mediaManager?: PlaybackManager\n config?: Pick<Tags, 'contentTypeConfig' | 'globalConfig'>\n debug?: boolean\n containerZIndex?: number\n },\n ) {\n super(five)\n this.sculptModules = new SculptModules(five, { magnifier: null })\n five.on('dispose', this.handleFiveDispose)\n this.mediaManager = params?.mediaManager\n\n this.params = objectAssignDeep({}, { debug: false, config: this.config }, { ...params, mediaManager: undefined })\n this.debug = this.params.debug\n this.config = this.params.config\n\n if (this.debug) {\n this.debugUtil.bindLog()\n }\n\n // generateBlankAudio(1, { namespace: AudioNamespace.GetAudioDuration })\n generateBlankAudio(1, { namespace: AudioNamespace.PlayAudio })\n\n // Explicit debug opt-in only; normal instances must not retain a global scene.\n if (this.debug) try {\n if (!Array.isArray(window['__PANOTAGPLUGIN_DEBUG_LIST__'])) window['__PANOTAGPLUGIN_DEBUG_LIST__'] = []\n this.NAME = PLUGIN_NAME + '-' + window['__PANOTAGPLUGIN_DEBUG_LIST__'].length\n\n window['__PANOTAGPLUGIN_DEBUG_LIST__'].push(this)\n\n if (!window['__PANOTAGPLUGIN_DEBUG__']) {\n Object.defineProperty(window, '__PANOTAGPLUGIN_DEBUG__', {\n get: function () {\n return window['__PANOTAGPLUGIN_DEBUG_LIST__'].sort((a, b) => b.tags.length - a.tags.length)[0]\n },\n })\n }\n } catch {}\n }\n\n public updateFive(five: Five) {\n if (this.store.disposed) return\n this.five.off('dispose', this.handleFiveDispose)\n super.updateFive(five)\n five.on('dispose', this.handleFiveDispose)\n }\n\n public appendTo(wrapper: Element): void {\n this.container = wrapper\n\n if (this.TagContainerSvelte && this.tagContainerTarget !== wrapper) {\n this.TagContainerSvelte.destroy()\n this.TagContainerSvelte = undefined\n this.tagContainerTarget = undefined\n this.addRenderQueue({ type: 'TagContainerSvelte' })\n }\n if (this.renderQueue.size) this.render()\n }\n\n /**\n * @description 加载数据\n */\n public async load(data: Tags) {\n MaskTag.clearSharedMeshRegistry()\n this.clearTags()\n\n try {\n console.debug(this.NAME, ' load:', { data: JSON.parse(JSON.stringify(data)) })\n } catch (e) {}\n this.config = objectAssignDeep({}, this.config, {\n globalConfig: data.globalConfig ?? {},\n contentTypeConfig: data.contentTypeConfig ?? {},\n })\n\n const result = await this.addTag(data.tagList)\n if (this.store.disposed) return result\n\n // 初始加载后,如果当前在 Panorama 模式,需要触发 Mask 标签的初始化\n if (this.five.state.mode === 'Panorama') {\n this.updateMaskTagsForCurrentPano()\n }\n\n this.hooks.emit('loaded')\n\n return result\n }\n\n /**\n * @description 添加标签\n * @param tag 标签或标签数组\n * @param options 可选配置\n * @param options.updateMaskUrl 是否更新 mask。若为 true 且该 panoIndex 已有 Mask 标签,仅更新其 maskUrl(不变 color、style),并添加新标签\n */\n public async addTag(tag: Tag | Tag[], options?: { updateMaskUrl?: boolean }) {\n const tags = Array.isArray(tag) ? tag : [tag]\n const validTags = tags.filter((tag) => tag.stickType === '3DBox' || tag.stickType === 'Mask' || tag.position)\n\n // 若 updateMaskUrl 为 true,仅更新该点位已有 Mask 标签的 maskUrl(不变 color、style)\n if (options?.updateMaskUrl && validTags.length === 1 && validTags[0].stickType === 'Mask') {\n const tagData = validTags[0]\n const maskUrl = (tagData as any).maskUrl ?? (tagData as any).mask\n const panoIndex = (tagData as any).fiveState?.panoIndex\n if (maskUrl && typeof panoIndex === 'number') {\n const maskTagsAtIndex = this.tags.filter((t) => t instanceof MaskTag && t.fiveState?.panoIndex === panoIndex) as MaskTag[]\n maskTagsAtIndex.forEach((t) => t.set({ mask: maskUrl } as any))\n }\n }\n\n const _tags = validTags.map((tag) => {\n const stickType = getTagStickType(tag)\n\n if (stickType === '2DPoint' || stickType === '3DPoint') {\n return new PointTag(this, tag)\n } else if (stickType === 'Model') {\n return new ModelTag(this, tag)\n } else if (stickType === 'Plane') {\n // 虚拟屏幕等\n return new PlaneTag(this, tag)\n } else if (stickType === '3DBox') {\n return new BoxTag(this, tag)\n } else if (stickType === 'Polygon') {\n return new PolygonTag(this, tag)\n } else if (stickType === 'Mask') {\n return new MaskTag(this, tag)\n }\n\n return null\n })\n _tags.forEach((tag) => formatTag(tag))\n this.tags.push(...(_tags as any[]))\n\n this.tagsLengthWillUpdate = true\n\n return waitFiveModelLoaded(this.five).then(async () => {\n if (this.store.disposed) return\n // 添加事件\n if (this.store.eventListenerDisposer) {\n this.store.eventListenerDisposer?.()\n }\n if (this.state.enabled) {\n this.handleEnable()\n }\n\n this.addResizeListener()\n this.clearUnusedPanelTag()\n\n this.tagsDo(_tags, (tag) => {\n if (this.tags.includes(tag)) {\n tag.updateVisible()\n tag.updateZIndex()\n }\n })\n\n this.setUnfolded()\n\n this.addRenderQueue({ type: 'TagContainerSvelte' })\n\n this.hooks.emit('tagsLengthChange')\n })\n }\n\n /**\n * @description 改变配置\n */\n public changeConfig(config: Pick<Tags, 'globalConfig' | 'contentTypeConfig'>, merge = true) {\n if (merge) {\n this.config = objectAssignDeep({}, this.config, config)\n } else {\n this.config = config\n }\n // 配置改变后要清空缓存,重新计算\n this.tags.forEach((tag) => {\n tag.updateConfig()\n })\n\n this.tagsDo(this.tags, (tag) => tag.updateVisible())\n }\n\n /**\n * @description 改变全局配置\n */\n public changeGlobalConfig(globalConfig: Tags['globalConfig'], merge = true) {\n if (merge) {\n this.config.globalConfig = objectAssignDeep({}, this.config.globalConfig, globalConfig)\n } else {\n this.config.globalConfig = globalConfig\n }\n // 配置改变后要清空缓存,重新计算\n this.tags.forEach((tag) => {\n tag.updateConfig()\n })\n\n this.tagsDo(this.tags, (tag) => {\n tag.updateVisible()\n })\n }\n\n /**\n * @description 改变类型配置\n */\n public changeContentTypeConfig<T extends ContentTypeConfigKey>(key: T, contentTypeConfig: TagConfigByKey<T>, merge = true) {\n if (!this.config.contentTypeConfig) this.config.contentTypeConfig = {}\n if (merge) {\n // @ts-ignore\n this.config.contentTypeConfig[key] = objectAssignDeep({}, this.config.contentTypeConfig[key], contentTypeConfig)\n } else {\n this.config.contentTypeConfig[key] = contentTypeConfig as any\n }\n // 配置改变后要清空缓存,重新计算\n this.tags.forEach((tag) => {\n tag.updateConfig()\n })\n\n this.tagsDo(this.tags, (tag) => {\n tag.updateVisible()\n })\n }\n\n public async show(params?: { userAction?: boolean }) {\n if (this.checkDisposed()) return\n const { userAction = true } = params ?? {}\n this.setState({ visible: true }, { userAction })\n this.hooks.emit('show', { userAction })\n }\n\n public async hide(params?: { userAction?: boolean }) {\n if (this.checkDisposed()) return\n const { userAction = true } = params ?? {}\n this.setState({ visible: false }, { userAction })\n this.hooks.emit('hide', { userAction })\n }\n\n public enable(params?: { userAction?: boolean }) {\n if (this.checkDisposed()) return\n const { userAction = true } = params ?? {}\n this.setState({ enabled: true }, { userAction })\n this.hooks.emit('enable', { userAction })\n }\n\n public disable(params?: { userAction?: boolean }) {\n if (this.checkDisposed()) return\n const { userAction = true } = params ?? {}\n this.setState({ enabled: false }, { userAction })\n this.hooks.emit('disable', { userAction })\n }\n\n public setState(state: Partial<State>, params?: { userAction?: boolean }): void {\n if (this.checkDisposed()) return\n const { userAction = true } = params ?? {}\n const prevState = { ...this.state }\n this.state = Object.assign(this.state, state)\n if (prevState.visible !== this.state.visible) {\n state.visible ? this.handleShow() : this.handleHide()\n }\n if (prevState.enabled !== this.state.enabled) {\n state.enabled ? this.handleEnable() : this.handleDisable()\n }\n this.hooks.emit('stateChange', { state: this.state, prevState, userAction })\n }\n\n /**\n * @description 销毁\n */\n public dispose(): void {\n if (this.store.disposed) return\n this.store.disposed = true\n this.five.off('dispose', this.handleFiveDispose)\n // Debug references must not retain a disposed Five/Three scene across sessions.\n if (typeof window !== 'undefined') {\n const plugins = window['__PANOTAGPLUGIN_DEBUG_LIST__']\n if (Array.isArray(plugins)) {\n const index = plugins.indexOf(this)\n if (index >= 0) plugins.splice(index, 1)\n }\n }\n this.pauseCurrentMedia()\n this.clearTags()\n this.disposeAllCSS3DContainer()\n this.store.disposers?.forEach((d) => d?.())\n this.store.disposers = []\n this.store.eventListenerDisposer?.()\n this.store.eventListenerDisposer = undefined\n this.store.resizeObserverDisposer?.()\n this.store.resizeObserverDisposer = undefined\n this.store.resizeObserverDisposerAdding = false\n this.five.scene.remove(this.group)\n this.group.remove(...this.group.children)\n this.gltfObjectGroup.remove(...this.gltfObjectGroup.children)\n this.imagePlaneGroup.remove(...this.imagePlaneGroup.children)\n this.five.needsRender = true\n this.sculptModules.dispose()\n this.domEvents.dispose()\n this.renderQueue.clear()\n this.hooks.emit('dispose')\n }\n\n /**\n * @description 闪烁标签\n * @param {TagId} id\n * @param {BlinkOptions} animeConfig\n */\n public async blinkTagById(id: TagId, animeConfig?: BlinkOptions) {\n return this.getTagById(id)?.blink(animeConfig)\n }\n\n /**\n * @description 展开/收起指定id的标签\n * @param {TagId} id\n * @param {boolean} unfolded\n */\n public changeUnfoldedById(id: TagId, unfolded: boolean) {\n const tag = this.getTagById(id)\n unfolded ? tag?.unfold() : tag?.fold()\n }\n\n /**\n * @description 启用/停用指定id的标签\n * @param {TagId} id\n * @param {boolean} enabled\n */\n public changeEnabledById(id: TagId, enabled: boolean) {\n const tag = this.getTagById(id)\n if (!tag) return\n tag.enabled = enabled\n tag.hooks?.emit(enabled ? 'enable' : 'disable')\n }\n\n /**\n * @description 修改3D标签normal\n * @param {TagId} id\n * @param {ArrayPosition} normal\n */\n public changeTagNormalById(id: TagId, normal: ArrayPosition) {\n const tag = this.getTagById(id)\n if (!tag) return\n if (!tag.tag3DContentSvelte) return\n tag.tag3DContentSvelte.currentNormal = arrayPositionToVector3(normal)\n }\n\n /**\n * @description 改变data\n */\n public changePositionById(id: TagId, position: Tag['position']) {\n const tag = this.getTagById(id)\n if (!tag) return\n\n tag.setPosition(position)\n }\n\n /**\n * @description 改变data\n */\n public changeDataById<C extends TagContentType = TagContentType>(id: TagId, data: PartialObjectDeep<Tag<C>['data']>, deepMerge = true) {\n const tag = this.getTagById<C>(id)\n if (!tag) return\n tag.setData(data, deepMerge)\n // 3D 转 2D 的时候要销毁 3D container\n this.clearUnusedPanelTag()\n tag.hooks.emit('dataChanged', tag.data)\n }\n\n /**\n * @description 改变tag的stickType\n */\n public changeStickTypeById<C extends TagContentType = TagContentType>(\n id: TagId,\n data: PartialObjectDeep<{ [P in keyof Pick<Tag<C>, 'stickType' | 'position' | 'normal' | 'data'>]: Tag[P] }>,\n deepMerge = true,\n ) {\n this.changeTagById(id, data, deepMerge)\n }\n\n /**\n * @description 改变tag任意属性\n */\n public changeTagById<C extends TagContentType = TagContentType>(id: TagId, tag: PartialObjectDeep<Tag<C>>, deepMerge = true) {\n const currentTag = this.getTagById<C>(id)\n if (!currentTag) return\n\n // 检测 stickType 变更\n if (tag.stickType && tag.stickType !== currentTag.stickType) {\n console.log(`[PanoTagPlugin] stickType changed from ${currentTag.stickType} to ${tag.stickType}, recreating tag`)\n\n // 收集当前 tag 的数据\n const oldTagData: any = { ...currentTag }\n\n // 销毁旧 tag\n this.destroyTagById(id)\n this.five.ready().then(() => {\n // 创建新 tag(合并新数据)\n this.addTag({ ...oldTagData, ...tag } as any)\n })\n return\n }\n\n currentTag.set(tag)\n if (currentTag instanceof MaskTag) (currentTag as MaskTag).updateMaskStyle()\n currentTag.updateVisible()\n\n this.clearUnusedPanelTag()\n currentTag.hooks.emit('dataChanged', currentTag.data)\n }\n\n /**\n * @description 批量更新指定点位的 Mask 图\n * @param maskUpdates 包含点位索引和对应 mask 的数组\n * @example\n * changeMask([\n * { index: 0, mask: 'https://example.com/mask1.png' },\n * { index: 1, mask: canvasElement }\n * ])\n */\n public changeMask(maskUpdates: Array<{ index: number; mask: string | HTMLCanvasElement }>) {\n if (!Array.isArray(maskUpdates) || maskUpdates.length === 0) {\n console.warn('[PanoTagPlugin] changeMask: invalid or empty maskUpdates')\n return\n }\n\n // 遍历每个 mask 更新请求\n maskUpdates.forEach(({ index, mask }) => {\n if (typeof index !== 'number') {\n console.warn('[PanoTagPlugin] changeMask: invalid index', index)\n return\n }\n\n if (!mask) {\n console.warn('[PanoTagPlugin] changeMask: invalid mask for index', index)\n return\n }\n\n // 找到所有在该点位的 MaskTag\n const maskTagsAtIndex = this.tags.filter((tag) => {\n return tag instanceof MaskTag && tag.fiveState?.panoIndex === index\n }) as MaskTag[]\n\n if (maskTagsAtIndex.length === 0) {\n console.debug(`[PanoTagPlugin] changeMask: no MaskTag found at panoIndex ${index}`)\n return\n }\n\n // 更新所有找到的 MaskTag\n maskTagsAtIndex.forEach((tag) => {\n tag.set({ mask } as any)\n console.log(`[PanoTagPlugin] Updated mask for tag ${tag.id} at panoIndex ${index}`)\n })\n })\n\n // 触发渲染\n this.five.needsRender = true\n }\n\n /**\n * @description 销毁tag\n */\n public destroyTagById(id: TagId | TagId[]) {\n const ids = Array.isArray(id) ? id : [id]\n ids.forEach((id) => this.getTagById(id)?.destroy())\n }\n\n /** 更改 tag 模型 */\n public changeTagModel = async (tag: any, data: PartialObjectDeep<Tag<'MediaModel'>['data']>) => {\n tag.data = objectAssignDeep({}, tag.data, data)\n await tag.loadModel?.()\n }\n\n /**\n * @description 清除所有标签\n */\n public clearTags() {\n if (this.tags.length) {\n // Destroy owned resources while retaining the single batch length-change event.\n for (const tag of [...this.tags]) tag.destroy(false)\n this.tags = []\n this.tagsLengthWillUpdate = true\n this.hooks.emit('tagsLengthChange')\n this.disposeAllCSS3DContainer()\n }\n this.TagContainerSvelte?.destroy()\n this.TagContainerSvelte = undefined\n this.tagContainerTarget = undefined\n this.mediaTextures.clear()\n this.enabledModelTagSet.clear()\n this.cache.clear()\n }\n\n /**\n * @description 设置 unfolded\n */\n private async setUnfolded() {\n return new Promise<void>((resolve) => {\n // setTimeout 初始隐藏,然后展开,而不是一步到位,要不就没动画了\n setTimeout(() => {\n this.setUnfoldedByCamera()\n resolve()\n }, 100) // 10ms 是等待 TextTag onMount\n })\n }\n\n private handleShow() {\n this.state.visible = true\n this.group.visible = this.state.enabled\n this.addRenderQueue({ type: 'TagContainerSvelte', keys: ['state'] })\n this.tagsDo(this.tags, (tag) => tag.updateVisible())\n this.five.needsRender = true\n }\n\n private handleHide() {\n this.pauseCurrentMedia()\n this.state.visible = false\n this.group.visible = false\n this.addRenderQueue({ type: 'TagContainerSvelte', keys: ['state'] })\n this.five.needsRender = true\n }\n\n private handleEnable() {\n this.state.enabled = true\n this.group.visible = this.state.visible\n this.store.eventListenerDisposer = this.addEventListener()\n if (!this.five.scene.children.includes(this.group)) this.five.scene.add(this.group)\n this.five.needsRender = true\n }\n\n private handleDisable() {\n this.group.visible = false\n this.pauseCurrentMedia()\n this.tags.forEach((item) => item.rectanglePlane?.delete())\n this.state.enabled = false\n this.store.eventListenerDisposer?.()\n this.five.scene.remove(this.group)\n this.TagContainerSvelte?.update({ tags: [] })\n this.five.needsRender = true\n }\n\n private addResizeListener() {\n // resizeObserverDisposerAdding 避免200ms内重复执行 addResizeObserver\n if (!this.store.resizeObserverDisposer && !this.store.resizeObserverDisposerAdding) {\n const resizeObserverDisposer = this.addResizeObserver()\n this.store.resizeObserverDisposerAdding = true\n setTimeout(() => {\n this.store.resizeObserverDisposer = resizeObserverDisposer\n this.store.resizeObserverDisposerAdding = false\n }, 200)\n }\n }\n\n private addResizeObserver() {\n if (this.store.disposed) return\n const observerELement = this.five.getElement()\n // resize\n const show = () => {\n if (!this.state.enabled) return\n this.filterPointTag.forEach((tag) => tag.updateScreenPosition({ force: true }))\n this.temporaryState.visible = true\n this.addRenderQueue({ type: 'TagContainerSvelte', keys: ['temporaryState'] })\n }\n const hide = () => {\n if (!this.state.enabled) return\n this.temporaryState.visible = false\n this.addRenderQueue({ type: 'TagContainerSvelte', keys: ['temporaryState'] })\n }\n const { observe: hideObserve, unobserve: hideUnobserve } = resizeObserver(\n throttle(() => {\n /**\n * 加这个判断是因为,第一次添加监听的时候会触发此函数,本来是没问题的,hide()后立马show(),但是show()加了debounce,所以resize触发后先hide,再过500ms才show,就有问题,所以加了这么一个限制\n * 在addTag函数中,先addResizeObserver(),过150ms再设置this.store.resizeObserverDisposer,200ms是resizeObserver添加时间到检测到resize触发resizeObserver的时间,大约100ms,这里加一点\n */\n if (!this.store.resizeObserverDisposer) return\n hide()\n }, 500),\n observerELement,\n )\n const { observe: showObserve, unobserve: showUnobserve } = resizeObserver(\n debounce(() => show(), 400),\n observerELement,\n )\n hideObserve()\n showObserve()\n\n return () => {\n hideUnobserve()\n showUnobserve()\n }\n }\n\n private handleFiveModeChange = (mode: Mode) => {\n const func = () => {\n this.filter2DPointTag.forEach((t) => {\n // 先隐藏,再异步计算可见性\n t.state.visible = false\n t.applyVisible()\n })\n\n this.five.ready().then(() => {\n this.tagsDo(this.tags, (t) => {\n t.updateVisible()\n if (isMediaModelTag(t) && mode !== 'Panorama') this.changeTagMode(t, 'behind')\n })\n\n // 模态切换时更新 Mask 标签:仅在 Panorama 模式下显示\n if (mode === 'Panorama') {\n this.updateMaskTagsForCurrentPano()\n } else {\n // 非 Panorama 模式下隐藏所有 Mask 标签\n this.filterMaskTag.forEach((tag) => {\n tag.state.visible = false\n tag.applyVisible()\n })\n }\n })\n }\n\n if (this.tags.length < 500) func()\n else this.five.ready().then(() => func())\n }\n\n private handleFiveWantsMoveToPano = () => {\n if (this.tags.length > 500) {\n this.temporaryState.visible = false\n this.addRenderQueue({ type: 'TagContainerSvelte', keys: ['temporaryState'] })\n return\n } else {\n this.temporaryState.visible = true\n this.tags.forEach((tag) => {\n tag.temporaryState.visible = true\n })\n this.addRenderQueue({ type: 'TagContainerSvelte', keys: ['tags'] })\n this.tags.forEach((tag) => tag.applyVisible())\n }\n }\n\n public clickhandler = (params: TagClickParams) => {\n params.tag.onClick(params)\n }\n\n private handleFiveCameraUpdate = () => {\n this.filterPointTag.forEach((t) => t.updateScreenPosition())\n }\n\n private handleFiveCameraFovUpdate = () => {\n this.handleFiveCameraUpdate()\n this.five.off('render.prepare', this.handleFiveCameraUpdate)\n this.five.on('render.prepare', this.handleFiveCameraUpdate)\n setTimeout(() => {\n this.five.off('render.prepare', this.handleFiveCameraUpdate)\n }, 1000)\n }\n\n private handleFivePanoArrived = async () => {\n this.filter2DPointTag.forEach((t) => {\n // 先隐藏,再异步计算可见性\n t.state.visible = false\n t.applyVisible()\n })\n\n // 更新所有标签的可见性\n this.tagsDo(this.tags, (tag) => {\n tag.updateVisible()\n })\n\n // 处理 Mask 标签:仅当前点位的 Mask 标签可见\n this.updateMaskTagsForCurrentPano()\n\n this.temporaryState.visible = true\n this.addRenderQueue({ type: 'TagContainerSvelte', keys: ['temporaryState'] })\n\n await this.setUnfolded()\n // 处理自动转向(纯模型 Model 与 虚拟模型 VirtualObject 均支持)\n this.tags\n .filter(isAutoLookAtModelTag)\n .filter((tag) => tag.getConfig().modelConfig?.autoLookAtEnabled)\n .forEach((tag) => {\n const tempObject = new THREE.Mesh(new THREE.BoxGeometry(), new THREE.MeshBasicMaterial())\n const object = tag.model?.object\n if (!object) return\n tempObject.position.copy(object.position)\n tempObject.quaternion.copy(object.quaternion)\n const cameraPosition = this.five.camera.position\n tempObject.lookAt(cameraPosition.clone().setY(tempObject.position.y))\n const startQuaternion = object.quaternion.clone()\n const endQuaternion = tempObject.quaternion.clone()\n const anime = tweenProgress()\n anime.onUpdate(({ progress }) => {\n object.quaternion.copy(startQuaternion.clone().slerp(endQuaternion, progress))\n })\n anime.play()\n })\n }\n\n /** 楼层切换时,需要更新标签可见性 */\n private handleFiveModelShownFloorChange = () => {\n this.tagsDo(this.tags, (tag) => tag.updateVisible())\n }\n\n private onFiveRefined = debounce(() => {\n if (isModelLike(this.five.getCurrentState().mode)) {\n this.setUnfoldedByCamera()\n } else {\n this.tags.forEach((tag) => tag.cache.clear())\n }\n\n this.tagsDo(this.tags, (tag) => tag.updateVisible())\n })\n\n private onFiveEveryReady = () => {\n this.setUnfoldedByCamera()\n if (isModelLike(this.five.getCurrentState().mode)) {\n this.tagsDo(this.tags, (tag) => tag.updateVisible())\n }\n }\n\n private setUnfoldedByCamera() {\n let hasTagUnfolded = false // 是否有标签由于camera的转动而展开\n this.filterPointTag.forEach((tag) => {\n const unfolded = tag.getUnfoldedByCamera()\n if (!tag.state) return\n if (unfolded === undefined) return\n // 视野外的/保持开启的标签,不应该认为是展开了而导致其他标签收起,所以这里的 `hasTagUnfolded=true` 是否执行要有一些判断\n if (unfolded === true && tag.screenPosition) {\n const unfoldedConfig = tag.getConfig().unfoldedConfig\n if (safeObj(unfoldedConfig).keep !== 'unfolded') {\n hasTagUnfolded = true\n }\n }\n tag.state.unfolded = unfolded\n })\n\n if (hasTagUnfolded) {\n this.filterPointTag.forEach((tag) => {\n const unfoldedConfig = tag.getConfig().unfoldedConfig\n if (typeof unfoldedConfig === 'object') {\n if (unfoldedConfig.autoUnfold) return // 如果有标签由于camera的转动而展开,则将所有没有配置autoUnfold的标签收起\n if (unfoldedConfig.autoUnfold === false) return // 如果有标签不需要自动展开/收起,跳过\n if (safeObj(unfoldedConfig.autoUnfold).enable === false) return // 同上, 另一种配置方式\n if (unfoldedConfig.keep) return // 不动keep标签\n }\n if (tag.state) tag.state.unfolded = false\n })\n }\n }\n\n private changeTagMode(tag: TagInstance, mode: 'behind' | 'front') {\n if (tag.tag3DContentSvelte?.css3DInstance) {\n tag.tag3DContentSvelte.css3DInstance.mode = mode\n }\n }\n\n /**\n * @description 添加 cameraUpdate, panoArrived 等事件监听\n */\n private addEventListener() {\n const { five, hooks } = this\n\n const fiveEveryReadyListenerDisposer = fiveEveryReadyListener(this.five, this.onFiveEveryReady)\n\n this.handleFivePanoArrived()\n\n // 走点/切换模型时临时隐藏\n five.on('wantsMoveToPano', this.handleFiveWantsMoveToPano)\n // 模型替换,需要视为一次新的加载\n five.on('models.refined', this.onFiveRefined)\n five.on('modeChange', this.handleFiveModeChange)\n five.on('modelShownFloorChange', this.handleFiveModelShownFloorChange)\n // Five旋转时更新位置\n five.on('cameraUpdate', this.handleFiveCameraUpdate)\n five.on('cameraFovUpdate', this.handleFiveCameraFovUpdate)\n five.on('panoArrived', this.handleFivePanoArrived)\n five.on('panoArrived', this.loadVideoFirstFrame)\n five.on('render.prepare', this.render)\n hooks.on('click', this.clickhandler)\n\n return () => {\n fiveEveryReadyListenerDisposer()\n five.off('wantsMoveToPano', this.handleFiveWantsMoveToPano)\n five.off('models.refined', this.onFiveRefined)\n five.off('modeChange', this.handleFiveModeChange)\n five.off('modelShownFloorChange', this.handleFiveModelShownFloorChange)\n five.off('cameraUpdate', this.handleFiveCameraUpdate)\n five.off('cameraFovUpdate', this.handleFiveCameraFovUpdate)\n five.off('panoArrived', this.handleFivePanoArrived)\n five.off('panoArrived', this.loadVideoFirstFrame)\n five.off('render.prepare', this.render)\n hooks.off('click', this.clickhandler)\n this.store.eventListenerDisposer = undefined\n }\n }\n\n public render = () => {\n if (this.store.disposed) {\n this.renderQueue.clear()\n return\n }\n const container = this.container\n // A live Five can be detached briefly during a host change. Retain work until it is attached.\n if (!container?.isConnected) return\n if (this.TagContainerSvelte && this.tagContainerTarget !== container) {\n this.TagContainerSvelte.destroy()\n this.TagContainerSvelte = undefined\n this.tagContainerTarget = undefined\n this.addRenderQueue({ type: 'TagContainerSvelte' })\n }\n this.renderQueue.forEach((value, key) => {\n const { keys } = value\n const type = key\n\n if (type === 'TagContainerSvelte') {\n const tags = this.filterPointTag.filter((tag) => tag.screenPosition)\n const props = {\n hooks: this.hooks,\n tags,\n state: this.state,\n temporaryState: this.temporaryState,\n mediaStore: this.mediaStore,\n rendererMap: this.rendererMap,\n contentTypeMap: this.contentTypeMap,\n zIndex: this.params.containerZIndex,\n }\n\n if (!this.TagContainerSvelte) {\n this.TagContainerSvelte = mountComponent(TagContainerSvelte, container, { ...props, state: { ...this.state, enabled: false } })\n this.tagContainerTarget = container\n nextFrame(() => {\n // 为了渐显的动画效果\n this.TagContainerSvelte?.update({ state: this.state })\n })\n } else {\n let partialProps = {}\n if (keys.length === 0) {\n partialProps = props\n } else {\n for (const key of keys) {\n partialProps[key] = props[key]\n }\n }\n this.TagContainerSvelte.update(partialProps)\n }\n }\n })\n this.renderQueue.clear()\n }\n\n /**\n * @description 设置标签 hover 启用状态\n */\n public setTagHoverEnabled(id: TagId, enabled: boolean) {\n const tag = this.getTagById(id)\n if (tag) tag.hoverEnabled = enabled\n }\n\n /**\n * @description 获取标签 hover 启用状态\n */\n public getTagHoverEnabled(id: TagId): boolean | undefined {\n const tag = this.getTagById(id)\n return tag?.hoverEnabled\n }\n\n /**\n * 设置全局 hover 启用状态\n */\n public setGlobalHoverEnabled(enabled: boolean) {\n this.globalHoverEnabled = enabled\n }\n\n /**\n * 获取全局 hover 启用状态\n */\n public getGlobalHoverEnabled() {\n return this.globalHoverEnabled\n }\n\n /**\n * 验证 ArrayPosition 是否为有效格式\n * @param value 待验证的值\n * @returns 是否为有效的 ArrayPosition\n */\n private isValidArrayPosition(value: any): value is ArrayPosition {\n // 检查是否为数组\n if (!Array.isArray(value)) {\n return false\n }\n\n // 检查数组长度是否为3(x, y, z坐标)\n if (value.length !== 3) {\n return false\n }\n\n // 检查所有元素是否为有效数字\n return value.every((item) => typeof item === 'number' && !isNaN(item) && isFinite(item))\n }\n\n /**\n * 更新当前点位的 Mask 标签\n * Mask 标签仅在当前点位可见\n */\n private updateMaskTagsForCurrentPano(): void {\n const currentPanoIndex = this.five.getCurrentState().panoIndex\n console.log(\n '[PanoTagPlugin] updateMaskTagsForCurrentPano, current panoIndex:',\n currentPanoIndex,\n 'mask tags count:',\n this.filterMaskTag.length,\n )\n\n // 筛选 Mask 类型的标签并更新\n this.filterMaskTag.forEach((tag) => {\n const tagPanoIndex = tag.fiveState?.panoIndex\n console.log(\n '[PanoTagPlugin] Processing mask tag:',\n tag.id,\n 'tagPanoIndex:',\n tagPanoIndex,\n 'matches current:',\n tagPanoIndex === currentPanoIndex,\n )\n\n // 如果是当前点位的标签,确保可见性已更新\n if (tagPanoIndex === currentPanoIndex) {\n console.log('[PanoTagPlugin] Tag matches current pano, updating visibility...')\n tag.updateVisible()\n // 触发 applyVisible 以加载 mask\n tag.applyVisible()\n } else {\n // 不是当前点位的标签,确保不可见\n if (tag.visible) {\n console.log('[PanoTagPlugin] Tag is from different pano, hiding...')\n tag.state.visible = false\n tag.applyVisible()\n }\n }\n })\n }\n\n /**\n * 获取所有 Mask 类型的标签\n */\n public get filterMaskTag() {\n return this.tags.filter((tag) => tag.stickType === 'Mask')\n }\n\n /**\n * 获取 MaskTag 性能统计信息(用于性能监控和调试)\n * @returns 性能统计信息\n */\n public getMaskTagPerformanceStats() {\n const cacheStats = MaskTag.getCacheStats()\n const maskTagCount = this.filterMaskTag.length\n const visibleMaskTags = this.filterMaskTag.filter((tag) => tag.visible).length\n\n return {\n // 标签统计\n totalMaskTags: maskTagCount,\n visibleMaskTags,\n // 纹理缓存统计\n textureCache: cacheStats,\n // 当前点位\n currentPanoIndex: this.five.state.panoIndex,\n }\n }\n\n /**\n * 清理所有 MaskTag 纹理缓存(用于内存管理)\n * 注意:这会释放所有纹理缓存,谨慎使用\n */\n public clearMaskTagCache() {\n MaskTag.clearAllCache()\n }\n}\n\nexport default PanoTagPluginController\nexport { PanoTagPluginController }\n"],"ignoreList":[0,1,2],"mappings":"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"}