@realsee/dnalogel 3.81.13 → 4.0.0-webgpu.4
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.
- package/CHANGELOG.md +38 -0
- package/README.md +20 -26
- package/dist/components.d.ts +2 -0
- package/dist/components.js +1 -0
- package/dist/floorplan.d.ts +2 -0
- package/dist/floorplan.js +1 -0
- package/dist/index.d.ts +2 -34
- package/dist/index.js +268 -67466
- package/dist/index.js.map +1 -0
- package/dist/internal/BasePlugin-DC5m72La.js +33 -0
- package/dist/internal/BasePlugin-DC5m72La.js.map +1 -0
- package/dist/internal/BasePluginWithData-D_0W46_q.js +7 -0
- package/dist/internal/BasePluginWithData-D_0W46_q.js.map +1 -0
- package/dist/internal/BetterTween-DmptqE8m.js +23 -0
- package/dist/internal/BetterTween-DmptqE8m.js.map +1 -0
- package/dist/internal/CSS3DObject-C9ck81UX.js +312 -0
- package/dist/internal/CSS3DObject-C9ck81UX.js.map +1 -0
- package/dist/internal/CSS3DRender-BKWjq-Mo.js +297 -0
- package/dist/internal/CSS3DRender-BKWjq-Mo.js.map +1 -0
- package/dist/internal/CSS3DRenderPlugin-CEatgl0m.js +77 -0
- package/dist/internal/CSS3DRenderPlugin-CEatgl0m.js.map +1 -0
- package/dist/internal/Controller-D6o4OGWJ.js +2498 -0
- package/dist/internal/Controller-D6o4OGWJ.js.map +1 -0
- package/dist/internal/Cursor-3AwKvViZ.js +61 -0
- package/dist/internal/Cursor-3AwKvViZ.js.map +1 -0
- package/dist/internal/FBXLoader-Chl2iTDE.js +23 -0
- package/dist/internal/FBXLoader-Chl2iTDE.js.map +1 -0
- package/dist/internal/FiveDomEvents-BUBLFzti.js +267 -0
- package/dist/internal/FiveDomEvents-BUBLFzti.js.map +1 -0
- package/dist/internal/FiveLine-0OtX3RDV.js +28 -0
- package/dist/internal/FiveLine-0OtX3RDV.js.map +1 -0
- package/dist/internal/FivePuppet-C6QmVY70.js +67 -0
- package/dist/internal/FivePuppet-C6QmVY70.js.map +1 -0
- package/dist/internal/FiveUtil-DyTBRHpM.js +74 -0
- package/dist/internal/FiveUtil-DyTBRHpM.js.map +1 -0
- package/dist/internal/GLTFLoader-DCsDrP-N.js +16 -0
- package/dist/internal/GLTFLoader-DCsDrP-N.js.map +1 -0
- package/dist/internal/Icon-8d4DFYTH.js +6 -0
- package/dist/internal/Icon-8d4DFYTH.js.map +1 -0
- package/dist/internal/LabelItem-Cnys51gZ.js +137 -0
- package/dist/internal/LabelItem-Cnys51gZ.js.map +1 -0
- package/dist/internal/Line2-CDxLMjGj.js +63 -0
- package/dist/internal/Line2-CDxLMjGj.js.map +1 -0
- package/dist/internal/PointHelper-DIhgdjY2.js +937 -0
- package/dist/internal/PointHelper-DIhgdjY2.js.map +1 -0
- package/dist/internal/Polygon-D3xIL1Pl.js +324 -0
- package/dist/internal/Polygon-D3xIL1Pl.js.map +1 -0
- package/dist/internal/Prism-CJlyAEAU.js +484 -0
- package/dist/internal/Prism-CJlyAEAU.js.map +1 -0
- package/dist/internal/Rectangle-BpL9lNKU.js +1221 -0
- package/dist/internal/Rectangle-BpL9lNKU.js.map +1 -0
- package/dist/internal/StandaloneRenderer-Jo60ASPd.js +91 -0
- package/dist/internal/StandaloneRenderer-Jo60ASPd.js.map +1 -0
- package/dist/internal/Subscribe-DLlAl88n.js +58 -0
- package/dist/internal/Subscribe-DLlAl88n.js.map +1 -0
- package/dist/internal/Work-BE4AgdwH.js +1637 -0
- package/dist/internal/Work-BE4AgdwH.js.map +1 -0
- package/dist/internal/animation-D9rPUNWJ.js +1043 -0
- package/dist/internal/animation-D9rPUNWJ.js.map +1 -0
- package/dist/internal/animation-script-adapter-DVXnC6Pt.js +1602 -0
- package/dist/internal/animation-script-adapter-DVXnC6Pt.js.map +1 -0
- package/dist/internal/animationFrame-CacKXN8l.js +29 -0
- package/dist/internal/animationFrame-CacKXN8l.js.map +1 -0
- package/dist/internal/area-maker-Bnhx4SkH.js +446 -0
- package/dist/internal/area-maker-Bnhx4SkH.js.map +1 -0
- package/dist/internal/boundingBox-CIqXgNXW.js +83 -0
- package/dist/internal/boundingBox-CIqXgNXW.js.map +1 -0
- package/dist/internal/camera-movement-C1pwfMk_.js +112 -0
- package/dist/internal/camera-movement-C1pwfMk_.js.map +1 -0
- package/dist/internal/changeMode-D_I2AOjH.js +73 -0
- package/dist/internal/changeMode-D_I2AOjH.js.map +1 -0
- package/dist/internal/classnames-DUxZNrrI.js +33 -0
- package/dist/internal/classnames-DUxZNrrI.js.map +1 -0
- package/dist/internal/component.svelte-D5LYqt50.js +2750 -0
- package/dist/internal/component.svelte-D5LYqt50.js.map +1 -0
- package/dist/internal/components-Ed73WMB0.js +434 -0
- package/dist/internal/components-Ed73WMB0.js.map +1 -0
- package/dist/internal/constants-A7EqoECw.js +6 -0
- package/dist/internal/constants-A7EqoECw.js.map +1 -0
- package/dist/internal/controller-DIDtFrBE.js +7422 -0
- package/dist/internal/controller-DIDtFrBE.js.map +1 -0
- package/dist/internal/cruise-B50Tcq66.js +7 -0
- package/dist/internal/cruise-B50Tcq66.js.map +1 -0
- package/dist/internal/current-pano-image-BCFr6njt.js +219 -0
- package/dist/internal/current-pano-image-BCFr6njt.js.map +1 -0
- package/dist/internal/debounce-Dsju-hoR.js +13 -0
- package/dist/internal/debounce-Dsju-hoR.js.map +1 -0
- package/dist/internal/defaultUrls-CfMtGzqM.js +17 -0
- package/dist/internal/defaultUrls-CfMtGzqM.js.map +1 -0
- package/dist/internal/digital-performance-B4DdvGbx.js +589 -0
- package/dist/internal/digital-performance-B4DdvGbx.js.map +1 -0
- package/dist/internal/digital-performance-v2-Cspjjn51.js +1030 -0
- package/dist/internal/digital-performance-v2-Cspjjn51.js.map +1 -0
- package/dist/internal/disposeOwnedObject-DsYpFpqh.js +16 -0
- package/dist/internal/disposeOwnedObject-DsYpFpqh.js.map +1 -0
- package/dist/internal/easing-D6YjRdGJ.js +15 -0
- package/dist/internal/easing-D6YjRdGJ.js.map +1 -0
- package/dist/internal/equal-BiDAilPV.js +50 -0
- package/dist/internal/equal-BiDAilPV.js.map +1 -0
- package/dist/internal/filter-Br6vP-OZ.js +15 -0
- package/dist/internal/filter-Br6vP-OZ.js.map +1 -0
- package/dist/internal/fire-scene-BzZGvyh_.js +1167 -0
- package/dist/internal/fire-scene-BzZGvyh_.js.map +1 -0
- package/dist/internal/fiveModelLoad-BUIBYxzp.js +23 -0
- package/dist/internal/fiveModelLoad-BUIBYxzp.js.map +1 -0
- package/dist/internal/floorplan-C8BGw87S.js +6059 -0
- package/dist/internal/floorplan-C8BGw87S.js.map +1 -0
- package/dist/internal/fontSize-DMhRSrtx.js +104 -0
- package/dist/internal/fontSize-DMhRSrtx.js.map +1 -0
- package/dist/internal/formatRad-kChZaf0k.js +9 -0
- package/dist/internal/formatRad-kChZaf0k.js.map +1 -0
- package/dist/internal/generatePolygonGeometry-BOnzdCaG.js +1011 -0
- package/dist/internal/generatePolygonGeometry-BOnzdCaG.js.map +1 -0
- package/dist/internal/getFiveModel-CZVrrU1D.js +8 -0
- package/dist/internal/getFiveModel-CZVrrU1D.js.map +1 -0
- package/dist/internal/getNormal-BatLuzsS.js +45 -0
- package/dist/internal/getNormal-BatLuzsS.js.map +1 -0
- package/dist/internal/hammer-Cq7WcpTp.js +835 -0
- package/dist/internal/hammer-Cq7WcpTp.js.map +1 -0
- package/dist/internal/index-client-W3QT304M.js +1 -0
- package/dist/internal/isNil-CQNA0Sbe.js +11 -0
- package/dist/internal/isNil-CQNA0Sbe.js.map +1 -0
- package/dist/internal/item-label-DXeKI9sZ.js +282 -0
- package/dist/internal/item-label-DXeKI9sZ.js.map +1 -0
- package/dist/internal/loadTexture-CJ3EbTXw.js +18 -0
- package/dist/internal/loadTexture-CJ3EbTXw.js.map +1 -0
- package/dist/internal/loadVideoTexture-CWoiMWRg.js +43 -0
- package/dist/internal/loadVideoTexture-CWoiMWRg.js.map +1 -0
- package/dist/internal/lookObject-DuRab5wf.js +48 -0
- package/dist/internal/lookObject-DuRab5wf.js.map +1 -0
- package/dist/internal/measure-B4jFwdQ6.js +1027 -0
- package/dist/internal/measure-B4jFwdQ6.js.map +1 -0
- package/dist/internal/model-chassis-compass-C6NTVMLo.js +84 -0
- package/dist/internal/model-chassis-compass-C6NTVMLo.js.map +1 -0
- package/dist/internal/model-entry-door-guide-DnGTLY2s.js +84 -0
- package/dist/internal/model-entry-door-guide-DnGTLY2s.js.map +1 -0
- package/dist/internal/model-item-label-BwJ5Dgnp.js +179 -0
- package/dist/internal/model-item-label-BwJ5Dgnp.js.map +1 -0
- package/dist/internal/model-maker-B1mnDdKY.js +897 -0
- package/dist/internal/model-maker-B1mnDdKY.js.map +1 -0
- package/dist/internal/model-room-label-5NtOduW1.js +199 -0
- package/dist/internal/model-room-label-5NtOduW1.js.map +1 -0
- package/dist/internal/model-tv-video-BP-7HoDC.js +213 -0
- package/dist/internal/model-tv-video-BP-7HoDC.js.map +1 -0
- package/dist/internal/model-view-BWUU0-uq.js +119 -0
- package/dist/internal/model-view-BWUU0-uq.js.map +1 -0
- package/dist/internal/object3d-helper-CbRRhnLV.js +7 -0
- package/dist/internal/object3d-helper-CbRRhnLV.js.map +1 -0
- package/dist/internal/pano-compass-BRTM0dCc.js +193 -0
- package/dist/internal/pano-compass-BRTM0dCc.js.map +1 -0
- package/dist/internal/pano-cursor-raycaster-DydRx7wS.js +66 -0
- package/dist/internal/pano-cursor-raycaster-DydRx7wS.js.map +1 -0
- package/dist/internal/pano-door-label-BLjYGZrr.js +258 -0
- package/dist/internal/pano-door-label-BLjYGZrr.js.map +1 -0
- package/dist/internal/pano-measure-BIgCWkVJ.js +2488 -0
- package/dist/internal/pano-measure-BIgCWkVJ.js.map +1 -0
- package/dist/internal/pano-ruler-fzlUTkVu.js +236 -0
- package/dist/internal/pano-ruler-fzlUTkVu.js.map +1 -0
- package/dist/internal/pano-ruler-pro-D9yTbHJz.js +221 -0
- package/dist/internal/pano-ruler-pro-D9yTbHJz.js.map +1 -0
- package/dist/internal/pano-spatial-tag-B7Gxn3BS.js +392 -0
- package/dist/internal/pano-spatial-tag-B7Gxn3BS.js.map +1 -0
- package/dist/internal/pano-tag-Bchz-jED.js +7 -0
- package/dist/internal/pano-tag-Bchz-jED.js.map +1 -0
- package/dist/internal/pano-video-BufYQMqo.js +365 -0
- package/dist/internal/pano-video-BufYQMqo.js.map +1 -0
- package/dist/internal/pipeline-t_3IMXKB.js +386 -0
- package/dist/internal/pipeline-t_3IMXKB.js.map +1 -0
- package/dist/internal/planimetry-us3E4V8W.js +55 -0
- package/dist/internal/planimetry-us3E4V8W.js.map +1 -0
- package/dist/internal/rad2Deg-DutG55Wb.js +8 -0
- package/dist/internal/rad2Deg-DutG55Wb.js.map +1 -0
- package/dist/internal/rayOnLine-CrCXTByv.js +18 -0
- package/dist/internal/rayOnLine-CrCXTByv.js.map +1 -0
- package/dist/internal/recurveFindObject-1BZIH2bj.js +8 -0
- package/dist/internal/recurveFindObject-1BZIH2bj.js.map +1 -0
- package/dist/internal/resizeObserver-AY-35us4.js +32 -0
- package/dist/internal/resizeObserver-AY-35us4.js.map +1 -0
- package/dist/internal/resizeObserver-CHD4N_hp.js +14 -0
- package/dist/internal/resizeObserver-CHD4N_hp.js.map +1 -0
- package/dist/internal/rolldown-runtime-B0aSnxlc.js +20 -0
- package/dist/internal/safeObj-ic96Cf8D.js +51 -0
- package/dist/internal/safeObj-ic96Cf8D.js.map +1 -0
- package/dist/internal/sculpt-BCK4PMwL.js +880 -0
- package/dist/internal/sculpt-BCK4PMwL.js.map +1 -0
- package/dist/internal/sleep-1GNCncUi.js +12 -0
- package/dist/internal/sleep-1GNCncUi.js.map +1 -0
- package/dist/internal/tagPosition-DA9YguT8.js +176 -0
- package/dist/internal/tagPosition-DA9YguT8.js.map +1 -0
- package/dist/internal/throttle-YRIkRKaX.js +13 -0
- package/dist/internal/throttle-YRIkRKaX.js.map +1 -0
- package/dist/internal/transformPosition-Cc92Wf0o.js +11 -0
- package/dist/internal/transformPosition-Cc92Wf0o.js.map +1 -0
- package/dist/internal/transition-VqMiMmZR.js +49 -0
- package/dist/internal/transition-VqMiMmZR.js.map +1 -0
- package/dist/internal/tween.esm-CJDtohfp.js +378 -0
- package/dist/internal/tween.esm-CJDtohfp.js.map +1 -0
- package/dist/internal/util-vGeVT4oo.js +26 -0
- package/dist/internal/util-vGeVT4oo.js.map +1 -0
- package/dist/internal/uuid-BfVaI9vM.js +11 -0
- package/dist/internal/uuid-BfVaI9vM.js.map +1 -0
- package/dist/internal/vectorIsEqual-BXdJrP0J.js +9 -0
- package/dist/internal/vectorIsEqual-BXdJrP0J.js.map +1 -0
- package/dist/internal/vectorToCoordinate-DIOgfeEi.js +12 -0
- package/dist/internal/vectorToCoordinate-DIOgfeEi.js.map +1 -0
- package/dist/internal/withResolvers-DVr4bnnk.js +15 -0
- package/dist/internal/withResolvers-DVr4bnnk.js.map +1 -0
- package/dist/plugins/area-maker.d.ts +2 -0
- package/dist/plugins/area-maker.js +1 -0
- package/dist/plugins/camera-movement.d.ts +2 -0
- package/dist/plugins/camera-movement.js +1 -0
- package/dist/plugins/cruise.d.ts +2 -0
- package/dist/plugins/cruise.js +3 -0
- package/dist/plugins/css3d-render.d.ts +2 -0
- package/dist/plugins/css3d-render.js +1 -0
- package/dist/plugins/current-pano-image.d.ts +2 -0
- package/dist/plugins/current-pano-image.js +1 -0
- package/dist/plugins/digital-performance-v2.d.ts +2 -0
- package/dist/plugins/digital-performance-v2.js +1 -0
- package/dist/plugins/digital-performance.d.ts +2 -0
- package/dist/plugins/digital-performance.js +3 -0
- package/dist/plugins/fire-scene.d.ts +2 -0
- package/dist/plugins/fire-scene.js +1 -0
- package/dist/plugins/guide-line.d.ts +2 -0
- package/dist/plugins/guide-line.js +1 -0
- package/dist/plugins/item-label.d.ts +2 -0
- package/dist/plugins/item-label.js +1 -0
- package/dist/plugins/measure.d.ts +2 -0
- package/dist/plugins/measure.js +1 -0
- package/dist/plugins/model-chassis-compass.d.ts +2 -0
- package/dist/plugins/model-chassis-compass.js +1 -0
- package/dist/plugins/model-entry-door-guide.d.ts +2 -0
- package/dist/plugins/model-entry-door-guide.js +1 -0
- package/dist/plugins/model-item-label.d.ts +2 -0
- package/dist/plugins/model-item-label.js +1 -0
- package/dist/plugins/model-maker.d.ts +2 -0
- package/dist/plugins/model-maker.js +1 -0
- package/dist/plugins/model-room-label.d.ts +2 -0
- package/dist/plugins/model-room-label.js +1 -0
- package/dist/plugins/model-tv-video.d.ts +2 -0
- package/dist/plugins/model-tv-video.js +1 -0
- package/dist/plugins/model-view.d.ts +2 -0
- package/dist/plugins/model-view.js +1 -0
- package/dist/plugins/object3d-helper.d.ts +2 -0
- package/dist/plugins/object3d-helper.js +3 -0
- package/dist/plugins/pano-compass.d.ts +2 -0
- package/dist/plugins/pano-compass.js +1 -0
- package/dist/plugins/pano-cursor-raycaster.d.ts +2 -0
- package/dist/plugins/pano-cursor-raycaster.js +1 -0
- package/dist/plugins/pano-door-label.d.ts +2 -0
- package/dist/plugins/pano-door-label.js +1 -0
- package/dist/plugins/pano-measure.d.ts +2 -0
- package/dist/plugins/pano-measure.js +1 -0
- package/dist/plugins/pano-ruler-pro.d.ts +2 -0
- package/dist/plugins/pano-ruler-pro.js +1 -0
- package/dist/plugins/pano-ruler.d.ts +2 -0
- package/dist/plugins/pano-ruler.js +1 -0
- package/dist/plugins/pano-spatial-tag.d.ts +2 -0
- package/dist/plugins/pano-spatial-tag.js +1 -0
- package/dist/plugins/pano-tag.d.ts +2 -0
- package/dist/plugins/pano-tag.js +4 -0
- package/dist/plugins/pano-video.d.ts +2 -0
- package/dist/plugins/pano-video.js +1 -0
- package/dist/plugins/pipeline.d.ts +2 -0
- package/dist/plugins/pipeline.js +1 -0
- package/dist/plugins/sculpt.d.ts +2 -0
- package/dist/plugins/sculpt.js +7 -0
- package/dist/style.css +2 -0
- package/dist/types/AreaMakerPlugin/Controller.d.ts +97 -0
- package/dist/types/AreaMakerPlugin/index.d.ts +4 -0
- package/dist/types/AreaMakerPlugin/typing.d.ts +167 -0
- package/dist/types/AreaMakerPlugin/utils/Item.d.ts +137 -0
- package/dist/types/CSS3DRenderPlugin/Controller.d.ts +84 -0
- package/dist/types/CSS3DRenderPlugin/index.d.ts +6 -0
- package/dist/types/CSS3DRenderPlugin/typing.d.ts +26 -0
- package/dist/types/CSS3DRenderPlugin/utils/generateBehindFiveElement.d.ts +3 -0
- package/dist/types/CSS3DRenderPlugin/utils/getAllCSS3DObject.d.ts +3 -0
- package/dist/types/CSS3DRenderPlugin/utils/index.d.ts +4 -0
- package/dist/types/CSS3DRenderPlugin/utils/positionToVector3.d.ts +1 -0
- package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DGroup.d.ts +21 -0
- package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DObject.d.ts +54 -0
- package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DRender.d.ts +184 -0
- package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DRenderer.d.ts +1 -0
- package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DScene.d.ts +12 -0
- package/dist/types/CSS3DRenderPlugin/utils/three/CSS3DSprite.d.ts +5 -0
- package/dist/types/CameraMovementPlugin/CameraMovementPlugin.d.ts +7 -0
- package/dist/types/CameraMovementPlugin/index.d.ts +5 -0
- package/dist/types/CameraMovementPlugin/typing.d.ts +70 -0
- package/dist/types/CruisePlugin/BaseController.d.ts +165 -0
- package/dist/types/CruisePlugin/Move.d.ts +56 -0
- package/dist/types/CruisePlugin/Work.d.ts +135 -0
- package/dist/types/CruisePlugin/index.d.ts +11 -0
- package/dist/types/CruisePlugin/typing.d.ts +159 -0
- package/dist/types/CruisePlugin/utils/coordinatesToVector.d.ts +7 -0
- package/dist/types/CruisePlugin/utils/getFiveStateOnCurve.d.ts +11 -0
- package/dist/types/CurrentPanoImagePlugin/Controller.d.ts +104 -0
- package/dist/types/CurrentPanoImagePlugin/index.d.ts +7 -0
- package/dist/types/CurrentPanoImagePlugin/typings.d.ts +58 -0
- package/dist/types/DigitalPerformancePlugin/controller/index.d.ts +227 -0
- package/dist/types/DigitalPerformancePlugin/core/DigitalHuman.d.ts +98 -0
- package/dist/types/DigitalPerformancePlugin/core/DigitalPerformanceNameplate.d.ts +115 -0
- package/dist/types/DigitalPerformancePlugin/core/DigitalPlayground.d.ts +52 -0
- package/dist/types/DigitalPerformancePlugin/core/DigitalStateMachine.d.ts +152 -0
- package/dist/types/DigitalPerformancePlugin/core/Trace.d.ts +9 -0
- package/dist/types/DigitalPerformancePlugin/index.d.ts +17 -0
- package/dist/types/DigitalPerformancePlugin/typings/index.d.ts +87 -0
- package/dist/types/DigitalPerformanceV2Plugin/controller/index.d.ts +402 -0
- package/dist/types/DigitalPerformanceV2Plugin/core/CameraDirector.d.ts +61 -0
- package/dist/types/DigitalPerformanceV2Plugin/core/CameraSampler.d.ts +53 -0
- package/dist/types/DigitalPerformanceV2Plugin/core/CameraTrack.d.ts +21 -0
- package/dist/types/DigitalPerformanceV2Plugin/core/FiveModelCameraBridge.d.ts +39 -0
- package/dist/types/DigitalPerformanceV2Plugin/core/PerformanceClock.d.ts +55 -0
- package/dist/types/DigitalPerformanceV2Plugin/core/Playground.d.ts +111 -0
- package/dist/types/DigitalPerformanceV2Plugin/core/shared.d.ts +5 -0
- package/dist/types/DigitalPerformanceV2Plugin/index.d.ts +11 -0
- package/dist/types/DigitalPerformanceV2Plugin/typings/index.d.ts +132 -0
- package/dist/types/FireScenePlugin/FireControl.d.ts +154 -0
- package/dist/types/FireScenePlugin/SequencePlayer.d.ts +41 -0
- package/dist/types/FireScenePlugin/constants.d.ts +28 -0
- package/dist/types/FireScenePlugin/fire/config.d.ts +10 -0
- package/dist/types/FireScenePlugin/fire/index.d.ts +6 -0
- package/dist/types/FireScenePlugin/fire/managers/FireManager.d.ts +76 -0
- package/dist/types/FireScenePlugin/fire/type.d.ts +51 -0
- package/dist/types/FireScenePlugin/index.d.ts +6 -0
- package/dist/types/FireScenePlugin/smoke/config.d.ts +8 -0
- package/dist/types/FireScenePlugin/smoke/index.d.ts +1 -0
- package/dist/types/FireScenePlugin/smoke/managers/NormalSmokeManager.d.ts +49 -0
- package/dist/types/FireScenePlugin/smoke/managers/SmokeManager.d.ts +89 -0
- package/dist/types/FireScenePlugin/utils/areaBounds.d.ts +14 -0
- package/dist/types/FireScenePlugin/utils/particle.d.ts +5 -0
- package/dist/types/FireScenePlugin/utils/particleTexture.d.ts +21 -0
- package/dist/types/FireScenePlugin/utils/radialSpread.d.ts +54 -0
- package/dist/types/FireScenePlugin/utils/spread.d.ts +17 -0
- package/dist/types/GuideLinePlugin/Components/Tag.svelte.d.ts +1 -0
- package/dist/types/GuideLinePlugin/Controller.d.ts +100 -0
- package/dist/types/GuideLinePlugin/GuideLineItem.d.ts +36 -0
- package/dist/types/GuideLinePlugin/GuideLineModeItem.d.ts +152 -0
- package/dist/types/GuideLinePlugin/index.d.ts +10 -0
- package/dist/types/GuideLinePlugin/typing.d.ts +199 -0
- package/dist/types/GuideLinePlugin/utils/GuideLineMaterial.d.ts +17 -0
- package/dist/types/GuideLinePlugin/utils/createLineGeometry.d.ts +36 -0
- package/dist/types/GuideLinePlugin/utils/createPath.d.ts +3 -0
- package/dist/types/GuideLinePlugin/utils/dataFormatter.d.ts +2 -0
- package/dist/types/GuideLinePlugin/utils/getArrowMaterial.d.ts +4 -0
- package/dist/types/GuideLinePlugin/utils/getPoint.d.ts +3 -0
- package/dist/types/GuideLinePlugin/utils/polyline-normals.d.ts +3 -0
- package/dist/types/ItemLabelPlugin/ItemLabelComponent.svelte.d.ts +1 -0
- package/dist/types/ItemLabelPlugin/ItemLabelItem.svelte.d.ts +1 -0
- package/dist/types/ItemLabelPlugin/Plugin.d.ts +4 -0
- package/dist/types/ItemLabelPlugin/events.type.d.ts +9 -0
- package/dist/types/ItemLabelPlugin/index.d.ts +9 -0
- package/dist/types/ItemLabelPlugin/typings.d.ts +65 -0
- package/dist/types/ItemLabelPlugin/utils/getStrokeLength.d.ts +2 -0
- package/dist/types/ItemLabelPlugin/utils/isImpacted.d.ts +6 -0
- package/dist/types/ItemLabelPlugin/utils/parseData.d.ts +3 -0
- package/dist/types/ItemLabelPlugin/utils/transform2RenderData.d.ts +3 -0
- package/dist/types/MeasurePlugin/Controller.d.ts +167 -0
- package/dist/types/MeasurePlugin/index.d.ts +17 -0
- package/dist/types/MeasurePlugin/utils/MeasureMesh.d.ts +29 -0
- package/dist/types/MeasurePlugin/utils/validatePolygon.d.ts +2 -0
- package/dist/types/ModelChassisCompassPlugin/Plugin.d.ts +20 -0
- package/dist/types/ModelChassisCompassPlugin/index.d.ts +4 -0
- package/dist/types/ModelEntryDoorGuidePlugin/Plugin.d.ts +28 -0
- package/dist/types/ModelEntryDoorGuidePlugin/index.d.ts +4 -0
- package/dist/types/ModelItemLabelPlugin/ItemLabelComponent.svelte.d.ts +1 -0
- package/dist/types/ModelItemLabelPlugin/ItemLabelItem.svelte.d.ts +1 -0
- package/dist/types/ModelItemLabelPlugin/ModelItemLabelPlugin.d.ts +4 -0
- package/dist/types/ModelItemLabelPlugin/events.type.d.ts +9 -0
- package/dist/types/ModelItemLabelPlugin/index.d.ts +9 -0
- package/dist/types/ModelItemLabelPlugin/typings.d.ts +56 -0
- package/dist/types/ModelItemLabelPlugin/utils/parseData.d.ts +3 -0
- package/dist/types/ModelMakerPlugin/Controller.d.ts +205 -0
- package/dist/types/ModelMakerPlugin/index.d.ts +8 -0
- package/dist/types/ModelMakerPlugin/item/baseItem.d.ts +65 -0
- package/dist/types/ModelMakerPlugin/item/boxItem.d.ts +20 -0
- package/dist/types/ModelMakerPlugin/item/polygonItem.d.ts +19 -0
- package/dist/types/ModelMakerPlugin/item/prismItem.d.ts +18 -0
- package/dist/types/ModelMakerPlugin/rendering/EncodedLineMaterial.d.ts +6 -0
- package/dist/types/ModelMakerPlugin/rendering/SavedAnnotationColor.d.ts +50 -0
- package/dist/types/ModelMakerPlugin/rendering/hdrContribution.d.ts +19 -0
- package/dist/types/ModelMakerPlugin/typings/config.d.ts +26 -0
- package/dist/types/ModelMakerPlugin/typings/index.d.ts +53 -0
- package/dist/types/ModelMakerPlugin/utils/ModelMakerPolygonMesh.d.ts +10 -0
- package/dist/types/ModelMakerPlugin/utils/ModelMakerPrismMesh.d.ts +6 -0
- package/dist/types/ModelMakerPlugin/utils/Text.svelte.d.ts +1 -0
- package/dist/types/ModelMakerPlugin/utils/getTagOcclusionObjects.d.ts +4 -0
- package/dist/types/ModelMakerPlugin/utils/setModelSortBounds.d.ts +3 -0
- package/dist/types/ModelMakerPlugin/utils/tagRenderer.d.ts +3 -0
- package/dist/types/ModelRoomLabelPlugin/Controller.d.ts +40 -0
- package/dist/types/ModelRoomLabelPlugin/RoomLabelItem.svelte.d.ts +1 -0
- package/dist/types/ModelRoomLabelPlugin/RoomLabelItems.svelte.d.ts +1 -0
- package/dist/types/ModelRoomLabelPlugin/index.d.ts +12 -0
- package/dist/types/ModelRoomLabelPlugin/utils/parseData.d.ts +3 -0
- package/dist/types/ModelTVVideoPlugin/Plugin.d.ts +4 -0
- package/dist/types/ModelTVVideoPlugin/index.d.ts +5 -0
- package/dist/types/ModelTVVideoPlugin/typings.d.ts +27 -0
- package/dist/types/ModelTVVideoPlugin/utils/parseData.d.ts +2 -0
- package/dist/types/ModelViewPlugin/Plugin.d.ts +43 -0
- package/dist/types/ModelViewPlugin/index.d.ts +4 -0
- package/dist/types/Object3DHelperPlugin/Controller.d.ts +153 -0
- package/dist/types/Object3DHelperPlugin/FiveControllerWrapper.d.ts +20 -0
- package/dist/types/Object3DHelperPlugin/index.d.ts +7 -0
- package/dist/types/PanoCompassPlugin/Controller.d.ts +88 -0
- package/dist/types/PanoCompassPlugin/getRoomInfoInstance.d.ts +8 -0
- package/dist/types/PanoCompassPlugin/index.d.ts +7 -0
- package/dist/types/PanoCompassPlugin/typings.d.ts +58 -0
- package/dist/types/PanoCursorRaycasterPlugin/index.d.ts +49 -0
- package/dist/types/PanoDoorLabelPlugin/Controller.d.ts +45 -0
- package/dist/types/PanoDoorLabelPlugin/DoorLabelItem.svelte.d.ts +1 -0
- package/dist/types/PanoDoorLabelPlugin/index.d.ts +7 -0
- package/dist/types/PanoDoorLabelPlugin/typings.d.ts +38 -0
- package/dist/types/PanoDoorLabelPlugin/utils.d.ts +5 -0
- package/dist/types/PanoMeasurePlugin/Components/Common/CircleButton.svelte.d.ts +1 -0
- package/dist/types/PanoMeasurePlugin/Components/Common/Exit.svelte.d.ts +1 -0
- package/dist/types/PanoMeasurePlugin/Components/Common/Switcher0.svelte.d.ts +1 -0
- package/dist/types/PanoMeasurePlugin/Components/Common/Switcher1.svelte.d.ts +1 -0
- package/dist/types/PanoMeasurePlugin/Components/Controller0.svelte.d.ts +1 -0
- package/dist/types/PanoMeasurePlugin/Components/Controller1.svelte.d.ts +1 -0
- package/dist/types/PanoMeasurePlugin/Components/Tip.svelte.d.ts +1 -0
- package/dist/types/PanoMeasurePlugin/Controller/BaseController.d.ts +55 -0
- package/dist/types/PanoMeasurePlugin/Controller/EditController.d.ts +57 -0
- package/dist/types/PanoMeasurePlugin/Controller/MixedController.d.ts +37 -0
- package/dist/types/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +12 -0
- package/dist/types/PanoMeasurePlugin/Controller/ViewController.d.ts +12 -0
- package/dist/types/PanoMeasurePlugin/Controller/WatchController.d.ts +34 -0
- package/dist/types/PanoMeasurePlugin/Controller/index.d.ts +104 -0
- package/dist/types/PanoMeasurePlugin/Model/area.d.ts +75 -0
- package/dist/types/PanoMeasurePlugin/Model/index.d.ts +45 -0
- package/dist/types/PanoMeasurePlugin/Model/line.d.ts +39 -0
- package/dist/types/PanoMeasurePlugin/Model/point.d.ts +10 -0
- package/dist/types/PanoMeasurePlugin/Model/polygon.d.ts +14 -0
- package/dist/types/PanoMeasurePlugin/Model/polyline.d.ts +47 -0
- package/dist/types/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +30 -0
- package/dist/types/PanoMeasurePlugin/Modules/GuideController.d.ts +26 -0
- package/dist/types/PanoMeasurePlugin/Modules/Magnifier.d.ts +19 -0
- package/dist/types/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +2 -0
- package/dist/types/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +19 -0
- package/dist/types/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +12 -0
- package/dist/types/PanoMeasurePlugin/Modules/UIController/index.d.ts +34 -0
- package/dist/types/PanoMeasurePlugin/Modules/UIController/mobileHTML.d.ts +4 -0
- package/dist/types/PanoMeasurePlugin/Modules/UIController/mobileMainBtnController.d.ts +15 -0
- package/dist/types/PanoMeasurePlugin/Modules/rangePiece/html.d.ts +4 -0
- package/dist/types/PanoMeasurePlugin/Modules/rangePiece/index.d.ts +42 -0
- package/dist/types/PanoMeasurePlugin/index.d.ts +14 -0
- package/dist/types/PanoMeasurePlugin/typings/data.d.ts +58 -0
- package/dist/types/PanoMeasurePlugin/typings/event.type.d.ts +55 -0
- package/dist/types/PanoMeasurePlugin/typings/index.d.ts +15 -0
- package/dist/types/PanoMeasurePlugin/utils/clearGroup.d.ts +2 -0
- package/dist/types/PanoMeasurePlugin/utils/constants.d.ts +5 -0
- package/dist/types/PanoMeasurePlugin/utils/dom/areaDom.d.ts +21 -0
- package/dist/types/PanoMeasurePlugin/utils/dom/base.d.ts +29 -0
- package/dist/types/PanoMeasurePlugin/utils/dom/distanceItem.d.ts +33 -0
- package/dist/types/PanoMeasurePlugin/utils/findClosestPoint.d.ts +10 -0
- package/dist/types/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +3 -0
- package/dist/types/PanoMeasurePlugin/utils/line.d.ts +17 -0
- package/dist/types/PanoMeasurePlugin/utils/math.d.ts +17 -0
- package/dist/types/PanoMeasurePlugin/utils/mouseGroup.d.ts +7 -0
- package/dist/types/PanoMeasurePlugin/utils/ndc2Screen.d.ts +5 -0
- package/dist/types/PanoRulerPlugin/Plugin.d.ts +34 -0
- package/dist/types/PanoRulerPlugin/index.d.ts +5 -0
- package/dist/types/PanoRulerProPlugin/Controller.d.ts +17 -0
- package/dist/types/PanoRulerProPlugin/RulerItem.svelte.d.ts +1 -0
- package/dist/types/PanoRulerProPlugin/RulerItems.svelte.d.ts +1 -0
- package/dist/types/PanoRulerProPlugin/index.d.ts +8 -0
- package/dist/types/PanoSpatialTagPlugin/Components/origins.svelte.d.ts +1 -0
- package/dist/types/PanoSpatialTagPlugin/Components/tag.svelte.d.ts +1 -0
- package/dist/types/PanoSpatialTagPlugin/Plugin.d.ts +35 -0
- package/dist/types/PanoSpatialTagPlugin/index.d.ts +5 -0
- package/dist/types/PanoSpatialTagPlugin/store.d.ts +1 -0
- package/dist/types/PanoSpatialTagPlugin/typings.d.ts +40 -0
- package/dist/types/PanoTagPlugin/Components/Common/Arrow.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Audio.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/AudioPlayer.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Carousel.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Icon/Icon.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Icon/PanoramaIcon.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Icon/animationUtils.d.ts +9 -0
- package/dist/types/PanoTagPlugin/Components/Common/Icon/audioIcon.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Line/Polyline.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Line/Straight.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Media.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/MediaItem.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Shadow.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/TagPoint.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/TagPopover/ArrowRightIcon.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/TagPopover/PanoramaIcon.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/TagPopover/PopoverContent.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/TagPopover/ShareIcon.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/TagPopover/TagPopoverArrow.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/TagPopover/TagPopoverToolBar.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/TagPopover/TagPopup.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/TagPopover/index.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Text/FlyMText.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Text/FlyText.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/Text/MText.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Common/VideoIcon.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/AudioTag/AudioPlaneTag.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/AudioTag/AudioPoint.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/AudioTag/AudioTag.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/AudioTag/index.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/CustomTag.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/ImageTextTag.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/LinkTag.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/MarketingTag.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/MediaPlane.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/PanoramaTag.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/TextTag/TextPlaneTag.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/TextTag/TextTag.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/TextTag/index.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/Tag/index.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/TagContainer.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/Components/TagItem.svelte.d.ts +1 -0
- package/dist/types/PanoTagPlugin/controller/Tag/BaseTag.d.ts +270 -0
- package/dist/types/PanoTagPlugin/controller/Tag/BoxTag.d.ts +118 -0
- package/dist/types/PanoTagPlugin/controller/Tag/MaskTag.d.ts +246 -0
- package/dist/types/PanoTagPlugin/controller/Tag/ModelTag.d.ts +15 -0
- package/dist/types/PanoTagPlugin/controller/Tag/PlaneTag.d.ts +53 -0
- package/dist/types/PanoTagPlugin/controller/Tag/PointTag.d.ts +47 -0
- package/dist/types/PanoTagPlugin/controller/Tag/PolygonTag.d.ts +111 -0
- package/dist/types/PanoTagPlugin/controller/TagRender.d.ts +35 -0
- package/dist/types/PanoTagPlugin/controller/TagUtil.d.ts +94 -0
- package/dist/types/PanoTagPlugin/controller/index.d.ts +228 -0
- package/dist/types/PanoTagPlugin/index.d.ts +9 -0
- package/dist/types/PanoTagPlugin/tag.config.d.ts +7 -0
- package/dist/types/PanoTagPlugin/typings/controller.d.ts +112 -0
- package/dist/types/PanoTagPlugin/typings/index.d.ts +7 -0
- package/dist/types/PanoTagPlugin/typings/tag/Tag.d.ts +69 -0
- package/dist/types/PanoTagPlugin/typings/tag/TagConfig.d.ts +404 -0
- package/dist/types/PanoTagPlugin/typings/tag/TagData.d.ts +165 -0
- package/dist/types/PanoTagPlugin/typings/tag/TagInstance.d.ts +8 -0
- package/dist/types/PanoTagPlugin/typings/tag/Utils.d.ts +156 -0
- package/dist/types/PanoTagPlugin/utils/Cache.d.ts +17 -0
- package/dist/types/PanoTagPlugin/utils/DebugUtil.d.ts +12 -0
- package/dist/types/PanoTagPlugin/utils/addDebugPoints.d.ts +3 -0
- package/dist/types/PanoTagPlugin/utils/audio/SharedAudio.d.ts +32 -0
- package/dist/types/PanoTagPlugin/utils/debounce.d.ts +8 -0
- package/dist/types/PanoTagPlugin/utils/getImageInfo.d.ts +14 -0
- package/dist/types/PanoTagPlugin/utils/index.d.ts +10 -0
- package/dist/types/PanoTagPlugin/utils/model/MaskNodeMaterial.d.ts +19 -0
- package/dist/types/PanoTagPlugin/utils/model/TagMediaTextureCache.d.ts +20 -0
- package/dist/types/PanoTagPlugin/utils/model/mediaPlane.d.ts +117 -0
- package/dist/types/PanoTagPlugin/utils/normalPositionToPositions.d.ts +2 -0
- package/dist/types/PanoTagPlugin/utils/planeNormal.d.ts +4 -0
- package/dist/types/PanoTagPlugin/utils/sculptDataToBoxPosition.d.ts +6 -0
- package/dist/types/PanoTagPlugin/utils/tag/adaptConfig.d.ts +2 -0
- package/dist/types/PanoTagPlugin/utils/tag/calculateTagConfig.d.ts +7 -0
- package/dist/types/PanoTagPlugin/utils/tag/canAutoPlayByOcclusion.d.ts +17 -0
- package/dist/types/PanoTagPlugin/utils/tag/format.d.ts +5 -0
- package/dist/types/PanoTagPlugin/utils/tag/getRaycasterStartPosition.d.ts +12 -0
- package/dist/types/PanoTagPlugin/utils/tag/tagCheck.d.ts +19 -0
- package/dist/types/PanoTagPlugin/utils/tagPosition.d.ts +12 -0
- package/dist/types/PanoVideoPlugin/Controller.d.ts +61 -0
- package/dist/types/PanoVideoPlugin/VideoMeshController.d.ts +132 -0
- package/dist/types/PanoVideoPlugin/index.d.ts +21 -0
- package/dist/types/PanoVideoPlugin/typings.d.ts +70 -0
- package/dist/types/PanoVideoPlugin/utils/index.d.ts +9 -0
- package/dist/types/PipelinePlugin/Controller.d.ts +108 -0
- package/dist/types/PipelinePlugin/index.d.ts +6 -0
- package/dist/types/PipelinePlugin/typing/index.d.ts +79 -0
- package/dist/types/PipelinePlugin/utils/Objects/FlowPipe.d.ts +33 -0
- package/dist/types/PipelinePlugin/utils/Objects/HighlightPipe.d.ts +10 -0
- package/dist/types/PipelinePlugin/utils/Objects/Pipe.d.ts +44 -0
- package/dist/types/PipelinePlugin/utils/formatData.d.ts +12 -0
- package/dist/types/Sculpt/Editors/BoxMeshEditor.d.ts +5 -0
- package/dist/types/Sculpt/Editors/CircleMeshEditor.d.ts +5 -0
- package/dist/types/Sculpt/Editors/CylinderMeshEditor.d.ts +5 -0
- package/dist/types/Sculpt/Editors/PrismMeshEditor.d.ts +5 -0
- package/dist/types/Sculpt/Editors/RectangleMeshEditor.d.ts +5 -0
- package/dist/types/Sculpt/Meshes/Area.d.ts +9 -0
- package/dist/types/Sculpt/Meshes/Box.d.ts +18 -0
- package/dist/types/Sculpt/Meshes/Circle.d.ts +24 -0
- package/dist/types/Sculpt/Meshes/CircleWithEdge.d.ts +11 -0
- package/dist/types/Sculpt/Meshes/Cylinder.d.ts +36 -0
- package/dist/types/Sculpt/Meshes/Line.d.ts +63 -0
- package/dist/types/Sculpt/Meshes/LineWithDots.d.ts +52 -0
- package/dist/types/Sculpt/Meshes/Point.d.ts +41 -0
- package/dist/types/Sculpt/Meshes/Polygon.d.ts +53 -0
- package/dist/types/Sculpt/Meshes/PolygonWithEdge.d.ts +33 -0
- package/dist/types/Sculpt/Meshes/Polyline.d.ts +47 -0
- package/dist/types/Sculpt/Meshes/Prism.d.ts +95 -0
- package/dist/types/Sculpt/Meshes/Rectangle.d.ts +19 -0
- package/dist/types/Sculpt/Meshes/RectangleWithEdge.d.ts +29 -0
- package/dist/types/Sculpt/Objects/Base/Editor.d.ts +55 -0
- package/dist/types/Sculpt/Objects/Base/index.d.ts +128 -0
- package/dist/types/Sculpt/Objects/Box/index.d.ts +49 -0
- package/dist/types/Sculpt/Objects/Circle/index.d.ts +33 -0
- package/dist/types/Sculpt/Objects/Cylinder/index.d.ts +35 -0
- package/dist/types/Sculpt/Objects/Line/Editor.d.ts +22 -0
- package/dist/types/Sculpt/Objects/Line/index.d.ts +49 -0
- package/dist/types/Sculpt/Objects/Point/Editor.d.ts +8 -0
- package/dist/types/Sculpt/Objects/Point/index.d.ts +40 -0
- package/dist/types/Sculpt/Objects/Polygon/Editor.d.ts +20 -0
- package/dist/types/Sculpt/Objects/Polygon/index.d.ts +81 -0
- package/dist/types/Sculpt/Objects/Polyline/Editor.d.ts +8 -0
- package/dist/types/Sculpt/Objects/Polyline/index.d.ts +48 -0
- package/dist/types/Sculpt/Objects/Prism/index.d.ts +58 -0
- package/dist/types/Sculpt/Objects/Rectangle/index.d.ts +49 -0
- package/dist/types/Sculpt/index.d.ts +233 -0
- package/dist/types/Sculpt/typings/index.d.ts +72 -0
- package/dist/types/Sculpt/typings/style.d.ts +108 -0
- package/dist/types/Sculpt/typings/utils.type.d.ts +18 -0
- package/dist/types/Sculpt/utils/Modules/Global.d.ts +23 -0
- package/dist/types/Sculpt/utils/data.d.ts +7 -0
- package/dist/types/Sculpt/utils/export.d.ts +25 -0
- package/dist/types/Sculpt/utils/removeAllTag.d.ts +2 -0
- package/dist/types/Sculpt/utils/renderDom.d.ts +19 -0
- package/dist/types/Sculpt/utils/sortPositionsByCameraPosition.d.ts +5 -0
- package/dist/types/Sculpt/utils/three/ColoredMesh.d.ts +33 -0
- package/dist/types/Sculpt/utils/three/RectangleGeometry.d.ts +6 -0
- package/dist/types/Sculpt/utils/three/rayOnLine.d.ts +12 -0
- package/dist/types/base/BasePlugin.d.ts +124 -0
- package/dist/types/base/BasePluginWithData.d.ts +21 -0
- package/dist/types/components/AreaLabel/LabelItem.svelte.d.ts +1 -0
- package/dist/types/components/PaintBrush/Controller.d.ts +45 -0
- package/dist/types/components/PaintBrush/index.d.ts +28 -0
- package/dist/types/components/PaintBrush/style.d.ts +2 -0
- package/dist/types/components/PaintBrush/typings.d.ts +59 -0
- package/dist/types/components/index.d.ts +3 -0
- package/dist/types/env.d.ts +1 -0
- package/dist/types/floorplan/Components/BaseImage.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/Camera.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/Compass.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/CurrentFloor.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/Items/Item.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/Items/Items.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/Main.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/MissingFloor.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/Normalmage.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/RoomHighlight/Room.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/RoomHighlight/RoomHighlight.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/RoomLabels/RoomLabel.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/RoomLabels/RoomLabels.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/RoomMaterials/RoomMaterial.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/RoomMaterials/RoomTriangle.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/RuleLabels/RuleItem.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/RuleLabels/RuleLabels.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/StyledImage.svelte.d.ts +1 -0
- package/dist/types/floorplan/Components/SvgImage.svelte.d.ts +1 -0
- package/dist/types/floorplan/FloorplanGuidePlugin/Components/Camera.svelte.d.ts +1 -0
- package/dist/types/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +1 -0
- package/dist/types/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +1 -0
- package/dist/types/floorplan/FloorplanGuidePlugin/Components/FloorplanCompass.svelte.d.ts +1 -0
- package/dist/types/floorplan/FloorplanGuidePlugin/Components/Main.svelte.d.ts +1 -0
- package/dist/types/floorplan/FloorplanGuidePlugin/Components/ObserverDots.svelte.d.ts +1 -0
- package/dist/types/floorplan/FloorplanGuidePlugin/Components/RoomLabelItem.svelte.d.ts +1 -0
- package/dist/types/floorplan/FloorplanGuidePlugin/Components/RoomLabels.svelte.d.ts +1 -0
- package/dist/types/floorplan/FloorplanGuidePlugin/Controller.d.ts +52 -0
- package/dist/types/floorplan/FloorplanGuidePlugin/index.d.ts +7 -0
- package/dist/types/floorplan/FloorplanGuidePlugin/typing.d.ts +194 -0
- package/dist/types/floorplan/MapviewFloorplanPlugin/Controller.d.ts +125 -0
- package/dist/types/floorplan/MapviewFloorplanPlugin/index.d.ts +7 -0
- package/dist/types/floorplan/MapviewFloorplanPlugin/typing.d.ts +1 -0
- package/dist/types/floorplan/ModelFloorplanPlugin/Controller.d.ts +117 -0
- package/dist/types/floorplan/ModelFloorplanPlugin/index.d.ts +7 -0
- package/dist/types/floorplan/ModelFloorplanPlugin/typing.d.ts +1 -0
- package/dist/types/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte.d.ts +1 -0
- package/dist/types/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +1 -0
- package/dist/types/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +1 -0
- package/dist/types/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte.d.ts +1 -0
- package/dist/types/floorplan/PanoFloorplanRadarPlugin/Controller.d.ts +40 -0
- package/dist/types/floorplan/PanoFloorplanRadarPlugin/index.d.ts +7 -0
- package/dist/types/floorplan/PanoFloorplanRadarPlugin/typing.d.ts +69 -0
- package/dist/types/floorplan/TopviewFloorplanPlugin/Controller.d.ts +68 -0
- package/dist/types/floorplan/TopviewFloorplanPlugin/index.d.ts +7 -0
- package/dist/types/floorplan/TopviewFloorplanPlugin/typing.d.ts +11 -0
- package/dist/types/floorplan/index.d.ts +14 -0
- package/dist/types/floorplan/typings/floorplanData.d.ts +171 -0
- package/dist/types/floorplan/typings/index.d.ts +163 -0
- package/dist/types/floorplan/utils/correctFiveState.d.ts +18 -0
- package/dist/types/floorplan/utils/formatData.d.ts +5 -0
- package/dist/types/floorplan/utils/formatPosition.d.ts +36 -0
- package/dist/types/floorplan/utils/styledFloorplan.d.ts +2 -0
- package/dist/types/public/components.d.ts +2 -0
- package/dist/types/public/floorplan.d.ts +2 -0
- package/dist/types/public/index.d.ts +93 -0
- package/dist/types/public/plugins/area-maker.d.ts +4 -0
- package/dist/types/public/plugins/camera-movement.d.ts +4 -0
- package/dist/types/public/plugins/cruise.d.ts +8 -0
- package/dist/types/public/plugins/css3d-render.d.ts +5 -0
- package/dist/types/public/plugins/current-pano-image.d.ts +4 -0
- package/dist/types/public/plugins/digital-performance-v2.d.ts +4 -0
- package/dist/types/public/plugins/digital-performance.d.ts +5 -0
- package/dist/types/public/plugins/fire-scene.d.ts +3 -0
- package/dist/types/public/plugins/guide-line.d.ts +7 -0
- package/dist/types/public/plugins/item-label.d.ts +4 -0
- package/dist/types/public/plugins/measure.d.ts +5 -0
- package/dist/types/public/plugins/model-chassis-compass.d.ts +4 -0
- package/dist/types/public/plugins/model-entry-door-guide.d.ts +4 -0
- package/dist/types/public/plugins/model-item-label.d.ts +4 -0
- package/dist/types/public/plugins/model-maker.d.ts +5 -0
- package/dist/types/public/plugins/model-room-label.d.ts +4 -0
- package/dist/types/public/plugins/model-tv-video.d.ts +4 -0
- package/dist/types/public/plugins/model-view.d.ts +4 -0
- package/dist/types/public/plugins/object3d-helper.d.ts +5 -0
- package/dist/types/public/plugins/pano-compass.d.ts +5 -0
- package/dist/types/public/plugins/pano-cursor-raycaster.d.ts +4 -0
- package/dist/types/public/plugins/pano-door-label.d.ts +4 -0
- package/dist/types/public/plugins/pano-measure.d.ts +4 -0
- package/dist/types/public/plugins/pano-ruler-pro.d.ts +4 -0
- package/dist/types/public/plugins/pano-ruler.d.ts +4 -0
- package/dist/types/public/plugins/pano-spatial-tag.d.ts +4 -0
- package/dist/types/public/plugins/pano-tag.d.ts +6 -0
- package/dist/types/public/plugins/pano-video.d.ts +4 -0
- package/dist/types/public/plugins/pipeline.d.ts +4 -0
- package/dist/types/public/plugins/sculpt.d.ts +20 -0
- package/dist/types/public/utils.d.ts +34 -0
- package/dist/types/shared-utils/CSS3DRender/CSS3DObject.d.ts +39 -0
- package/dist/types/shared-utils/CSS3DRender/CSS3DRenderer.d.ts +17 -0
- package/dist/types/shared-utils/CSS3DRender/OpacityMesh.d.ts +6 -0
- package/dist/types/shared-utils/CSS3DRender/index.d.ts +15 -0
- package/dist/types/shared-utils/Object3DHelper/Base/BaseController.d.ts +142 -0
- package/dist/types/shared-utils/Object3DHelper/Base/BaseHelper.d.ts +104 -0
- package/dist/types/shared-utils/Object3DHelper/Constants/color.d.ts +12 -0
- package/dist/types/shared-utils/Object3DHelper/Controller/BoundingBoxController.d.ts +7 -0
- package/dist/types/shared-utils/Object3DHelper/Controller/CSS3DScaleController.d.ts +7 -0
- package/dist/types/shared-utils/Object3DHelper/Controller/MoveController.d.ts +60 -0
- package/dist/types/shared-utils/Object3DHelper/Controller/RectangleScaleController.d.ts +45 -0
- package/dist/types/shared-utils/Object3DHelper/Controller/RotateController.d.ts +46 -0
- package/dist/types/shared-utils/Object3DHelper/Controller/ScaleController.d.ts +66 -0
- package/dist/types/shared-utils/Object3DHelper/Helper/BoundingBoxHelper.d.ts +16 -0
- package/dist/types/shared-utils/Object3DHelper/Helper/CSS3DScaleHelper.d.ts +43 -0
- package/dist/types/shared-utils/Object3DHelper/Helper/HTML/rectangleScaleDom.d.ts +11 -0
- package/dist/types/shared-utils/Object3DHelper/Helper/MoveHelper.d.ts +24 -0
- package/dist/types/shared-utils/Object3DHelper/Helper/Objects/ArrowGroup.d.ts +18 -0
- package/dist/types/shared-utils/Object3DHelper/Helper/Objects/CenterHandle.d.ts +23 -0
- package/dist/types/shared-utils/Object3DHelper/Helper/RotateHelper.d.ts +93 -0
- package/dist/types/shared-utils/Object3DHelper/Helper/ScaleHelper.d.ts +65 -0
- package/dist/types/shared-utils/Object3DHelper/Helper/index.d.ts +6 -0
- package/dist/types/shared-utils/Object3DHelper/index.d.ts +51 -0
- package/dist/types/shared-utils/Object3DHelper/typings/Hooks.d.ts +63 -0
- package/dist/types/shared-utils/Object3DHelper/typings/index.d.ts +45 -0
- package/dist/types/shared-utils/Object3DHelper/utils/calculateScaleByCamera.d.ts +5 -0
- package/dist/types/shared-utils/Object3DHelper/utils/calculateThreeMouse.d.ts +14 -0
- package/dist/types/shared-utils/Object3DHelper/utils/cameraHooks.d.ts +3 -0
- package/dist/types/shared-utils/Object3DHelper/utils/direction.d.ts +14 -0
- package/dist/types/shared-utils/Object3DHelper/utils/filterNotColinearPoints.d.ts +2 -0
- package/dist/types/shared-utils/Object3DHelper/utils/finiteNumber.d.ts +1 -0
- package/dist/types/shared-utils/Object3DHelper/utils/getMouseRaycaster.d.ts +5 -0
- package/dist/types/shared-utils/Object3DHelper/utils/getOrthographicCameraDirection.d.ts +8 -0
- package/dist/types/shared-utils/Object3DHelper/utils/getPoint.d.ts +3 -0
- package/dist/types/shared-utils/Object3DHelper/utils/getPoseFromCamera.d.ts +8 -0
- package/dist/types/shared-utils/Object3DHelper/utils/index.d.ts +9 -0
- package/dist/types/shared-utils/Object3DHelper/utils/negateScale.d.ts +2 -0
- package/dist/types/shared-utils/Object3DHelper/utils/normalPositionToPositions.d.ts +5 -0
- package/dist/types/shared-utils/Object3DHelper/utils/setObjectQuaternion.d.ts +8 -0
- package/dist/types/shared-utils/Object3DHelper/utils/solidGuide.d.ts +27 -0
- package/dist/types/shared-utils/Preloader.d.ts +6 -0
- package/dist/types/shared-utils/Subscribe.d.ts +69 -0
- package/dist/types/shared-utils/Utils/BaseUtil.d.ts +6 -0
- package/dist/types/shared-utils/Utils/FiveUtil.d.ts +9 -0
- package/dist/types/shared-utils/Utils/WorkUtil.d.ts +36 -0
- package/dist/types/shared-utils/animationFrame/BetterTween.d.ts +12 -0
- package/dist/types/shared-utils/animationFrame/index.d.ts +9 -0
- package/dist/types/shared-utils/changeModelCanvasOpacity.d.ts +2 -0
- package/dist/types/shared-utils/createCanvasTextTexture.d.ts +8 -0
- package/dist/types/shared-utils/createLine/index.d.ts +3 -0
- package/dist/types/shared-utils/dom/mouse.d.ts +1 -0
- package/dist/types/shared-utils/five/FiveDomEvents.d.ts +130 -0
- package/dist/types/shared-utils/five/FiveLine.d.ts +14 -0
- package/dist/types/shared-utils/five/FivePuppet.d.ts +65 -0
- package/dist/types/shared-utils/five/calculateThreeMouse.d.ts +11 -0
- package/dist/types/shared-utils/five/changeMode.d.ts +3 -0
- package/dist/types/shared-utils/five/fiveEveryReadyListener.d.ts +2 -0
- package/dist/types/shared-utils/five/fiveLoaded.d.ts +2 -0
- package/dist/types/shared-utils/five/fiveModelLoad.d.ts +9 -0
- package/dist/types/shared-utils/five/getFiveFromParentChain.d.ts +4 -0
- package/dist/types/shared-utils/five/getFiveModel.d.ts +2 -0
- package/dist/types/shared-utils/five/getFloorIndex.d.ts +4 -0
- package/dist/types/shared-utils/five/getFloorMesh.d.ts +3 -0
- package/dist/types/shared-utils/five/getPosition.d.ts +24 -0
- package/dist/types/shared-utils/five/getRaycasterByNdcPosition.d.ts +6 -0
- package/dist/types/shared-utils/five/index.d.ts +13 -0
- package/dist/types/shared-utils/five/initialCSS3DRender.d.ts +1 -0
- package/dist/types/shared-utils/five/lookObject.d.ts +15 -0
- package/dist/types/shared-utils/five/lookPoint.d.ts +11 -0
- package/dist/types/shared-utils/five/mode.d.ts +3 -0
- package/dist/types/shared-utils/five/transformPosition.d.ts +2 -0
- package/dist/types/shared-utils/five/vector3ToScreen.d.ts +5 -0
- package/dist/types/shared-utils/fontSize.d.ts +185 -0
- package/dist/types/shared-utils/getIntersectionFromEvent.d.ts +4 -0
- package/dist/types/shared-utils/getPointFromHammerEvent.d.ts +10 -0
- package/dist/types/shared-utils/getPxmm.d.ts +19 -0
- package/dist/types/shared-utils/index.d.ts +13 -0
- package/dist/types/shared-utils/math/Rectangle.d.ts +27 -0
- package/dist/types/shared-utils/math/convexHull.d.ts +5 -0
- package/dist/types/shared-utils/math/evenNumber.d.ts +3 -0
- package/dist/types/shared-utils/math/index.d.ts +4 -0
- package/dist/types/shared-utils/math/planimetry.d.ts +116 -0
- package/dist/types/shared-utils/math/pointsIsRectangle.d.ts +2 -0
- package/dist/types/shared-utils/object3d2LocalMatrix.d.ts +12 -0
- package/dist/types/shared-utils/positionToVector3.d.ts +17 -0
- package/dist/types/shared-utils/removeArrayItem.d.ts +7 -0
- package/dist/types/shared-utils/rendering/Particle.d.ts +103 -0
- package/dist/types/shared-utils/rendering/StandaloneRenderer.d.ts +33 -0
- package/dist/types/shared-utils/svelte/component.svelte.d.ts +6 -0
- package/dist/types/shared-utils/svelte/resizeObserver.d.ts +4 -0
- package/dist/types/shared-utils/svelte/resizeObserverGlobal.d.ts +11 -0
- package/dist/types/shared-utils/tag.d.ts +100 -0
- package/dist/types/shared-utils/three/CSS3DRenderer/index.d.ts +22 -0
- package/dist/types/shared-utils/three/Extras/Core/Interpolations.d.ts +3 -0
- package/dist/types/shared-utils/three/Extras/Curves/BezierCurve3.d.ts +13 -0
- package/dist/types/shared-utils/three/FBXLoader/index.d.ts +1 -0
- package/dist/types/shared-utils/three/FragmentTransparencyMaterial.d.ts +4 -0
- package/dist/types/shared-utils/three/GLTFLoader.d.ts +9 -0
- package/dist/types/shared-utils/three/IObject3D.d.ts +11 -0
- package/dist/types/shared-utils/three/Magnifier.d.ts +80 -0
- package/dist/types/shared-utils/three/PointDomHelper.d.ts +18 -0
- package/dist/types/shared-utils/three/PointSelector/index.d.ts +174 -0
- package/dist/types/shared-utils/three/PointSelector/utils/PointHelper.d.ts +31 -0
- package/dist/types/shared-utils/three/PointSelector/utils/PointHelper2.d.ts +31 -0
- package/dist/types/shared-utils/three/PointSelector/utils/PointSelectorHelper.d.ts +73 -0
- package/dist/types/shared-utils/three/PointSelector/utils/html.d.ts +4 -0
- package/dist/types/shared-utils/three/PointSelector/utils/typing.d.ts +8 -0
- package/dist/types/shared-utils/three/PointSprite.d.ts +6 -0
- package/dist/types/shared-utils/three/Quadrangle.d.ts +20 -0
- package/dist/types/shared-utils/three/addIfNotExists.d.ts +2 -0
- package/dist/types/shared-utils/three/applyObjectMatrixWorld.d.ts +4 -0
- package/dist/types/shared-utils/three/blink.d.ts +26 -0
- package/dist/types/shared-utils/three/boundingBox.d.ts +25 -0
- package/dist/types/shared-utils/three/centerPoint.d.ts +2 -0
- package/dist/types/shared-utils/three/closeVectors.d.ts +2 -0
- package/dist/types/shared-utils/three/core/Line2.d.ts +8 -0
- package/dist/types/shared-utils/three/core/LineGeometry.d.ts +6 -0
- package/dist/types/shared-utils/three/core/LineMaterial.d.ts +17 -0
- package/dist/types/shared-utils/three/core/LineMaterial2.d.ts +5 -0
- package/dist/types/shared-utils/three/core/LineSegments.d.ts +7 -0
- package/dist/types/shared-utils/three/core/Object3D.d.ts +8 -0
- package/dist/types/shared-utils/three/core/PrismAnimationGeometry.d.ts +25 -0
- package/dist/types/shared-utils/three/core/PrismGeometry.d.ts +22 -0
- package/dist/types/shared-utils/three/core/Raycaster.d.ts +3 -0
- package/dist/types/shared-utils/three/core/Sphere.d.ts +4 -0
- package/dist/types/shared-utils/three/createIntersectionFace.d.ts +2 -0
- package/dist/types/shared-utils/three/disposeOwnedObject.d.ts +3 -0
- package/dist/types/shared-utils/three/earcut3D.d.ts +2 -0
- package/dist/types/shared-utils/three/filterVisibleIntersections.d.ts +3 -0
- package/dist/types/shared-utils/three/generatePolygonGeometry.d.ts +9 -0
- package/dist/types/shared-utils/three/geometryUtil.d.ts +15 -0
- package/dist/types/shared-utils/three/getCoords.d.ts +9 -0
- package/dist/types/shared-utils/three/getIntersect.d.ts +28 -0
- package/dist/types/shared-utils/three/getNormal.d.ts +5 -0
- package/dist/types/shared-utils/three/getObjectVisible.d.ts +5 -0
- package/dist/types/shared-utils/three/getPositionsByObjectFit.d.ts +3 -0
- package/dist/types/shared-utils/three/getRaycaster.d.ts +6 -0
- package/dist/types/shared-utils/three/getTextureLoader.d.ts +6 -0
- package/dist/types/shared-utils/three/index.d.ts +19 -0
- package/dist/types/shared-utils/three/loadTexture.d.ts +6 -0
- package/dist/types/shared-utils/three/loadVideoTexture.d.ts +13 -0
- package/dist/types/shared-utils/three/recurveFindObject.d.ts +2 -0
- package/dist/types/shared-utils/three/setObjectOriginSortBounds.d.ts +3 -0
- package/dist/types/shared-utils/three/temp.d.ts +2 -0
- package/dist/types/shared-utils/three/transformPositionToVector3.d.ts +7 -0
- package/dist/types/shared-utils/three/transformToMeshBasicMaterial.d.ts +2 -0
- package/dist/types/shared-utils/three/vector3ToArray.d.ts +3 -0
- package/dist/types/shared-utils/three/vectorIsEqual.d.ts +2 -0
- package/dist/types/shared-utils/threex/domevents/index.d.ts +36 -0
- package/dist/types/shared-utils/translateMode/getDistanceFromModel.d.ts +2 -0
- package/dist/types/shared-utils/typescript/entries.d.ts +2 -0
- package/dist/types/shared-utils/vectorToCoordinate.d.ts +7 -0
- package/dist/types/typings/typings.d.ts +15 -0
- package/dist/types/typings/utils.type.d.ts +4 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.js +19 -0
- package/package.json +191 -77
- package/components/index.js +0 -994
- package/dist/AreaMakerPlugin/Controller.d.ts +0 -96
- package/dist/AreaMakerPlugin/index.d.ts +0 -4
- package/dist/AreaMakerPlugin/typing.d.ts +0 -167
- package/dist/AreaMakerPlugin/utils/Item.d.ts +0 -137
- package/dist/CSS3DRenderPlugin/Controller.d.ts +0 -87
- package/dist/CSS3DRenderPlugin/index.d.ts +0 -6
- package/dist/CSS3DRenderPlugin/typing.d.ts +0 -26
- package/dist/CSS3DRenderPlugin/utils/generateBehindFiveElement.d.ts +0 -3
- package/dist/CSS3DRenderPlugin/utils/getAllCSS3DObject.d.ts +0 -3
- package/dist/CSS3DRenderPlugin/utils/index.d.ts +0 -3
- package/dist/CSS3DRenderPlugin/utils/positionToVector3.d.ts +0 -1
- package/dist/CSS3DRenderPlugin/utils/three/CSS3DGroup.d.ts +0 -21
- package/dist/CSS3DRenderPlugin/utils/three/CSS3DObject.d.ts +0 -55
- package/dist/CSS3DRenderPlugin/utils/three/CSS3DRender.d.ts +0 -184
- package/dist/CSS3DRenderPlugin/utils/three/CSS3DRenderer.d.ts +0 -1
- package/dist/CSS3DRenderPlugin/utils/three/CSS3DScene.d.ts +0 -12
- package/dist/CSS3DRenderPlugin/utils/three/CSS3DSprite.d.ts +0 -5
- package/dist/CameraMovementPlugin/CameraMovementPlugin.d.ts +0 -7
- package/dist/CameraMovementPlugin/index.d.ts +0 -5
- package/dist/CameraMovementPlugin/typing.d.ts +0 -68
- package/dist/CruisePlugin/BaseController.d.ts +0 -165
- package/dist/CruisePlugin/Move.d.ts +0 -56
- package/dist/CruisePlugin/Work.d.ts +0 -127
- package/dist/CruisePlugin/index.d.ts +0 -12
- package/dist/CruisePlugin/typing.d.ts +0 -157
- package/dist/CruisePlugin/utils/coordinatesToVector.d.ts +0 -7
- package/dist/CruisePlugin/utils/getFiveStateOnCurve.d.ts +0 -11
- package/dist/CurrentPanoImagePlugin/Controller.d.ts +0 -103
- package/dist/CurrentPanoImagePlugin/index.d.ts +0 -7
- package/dist/CurrentPanoImagePlugin/typings.d.ts +0 -58
- package/dist/DigitalPerformancePlugin/controller/index.d.ts +0 -232
- package/dist/DigitalPerformancePlugin/core/DigitalHuman.d.ts +0 -96
- package/dist/DigitalPerformancePlugin/core/DigitalPerformanceNameplate.d.ts +0 -115
- package/dist/DigitalPerformancePlugin/core/DigitalPlayground.d.ts +0 -47
- package/dist/DigitalPerformancePlugin/core/DigitalStateMachine.d.ts +0 -152
- package/dist/DigitalPerformancePlugin/core/Trace.d.ts +0 -9
- package/dist/DigitalPerformancePlugin/index.d.ts +0 -16
- package/dist/DigitalPerformancePlugin/typings/index.d.ts +0 -87
- package/dist/DigitalPerformanceV2Plugin/controller/index.d.ts +0 -401
- package/dist/DigitalPerformanceV2Plugin/core/CameraDirector.d.ts +0 -61
- package/dist/DigitalPerformanceV2Plugin/core/CameraSampler.d.ts +0 -53
- package/dist/DigitalPerformanceV2Plugin/core/CameraTrack.d.ts +0 -21
- package/dist/DigitalPerformanceV2Plugin/core/FiveModelCameraBridge.d.ts +0 -39
- package/dist/DigitalPerformanceV2Plugin/core/PerformanceClock.d.ts +0 -55
- package/dist/DigitalPerformanceV2Plugin/core/Playground.d.ts +0 -112
- package/dist/DigitalPerformanceV2Plugin/core/shared.d.ts +0 -4
- package/dist/DigitalPerformanceV2Plugin/index.d.ts +0 -11
- package/dist/DigitalPerformanceV2Plugin/typings/index.d.ts +0 -124
- package/dist/FireScenePlugin/FireControl.d.ts +0 -153
- package/dist/FireScenePlugin/SequencePlayer.d.ts +0 -41
- package/dist/FireScenePlugin/constants.d.ts +0 -28
- package/dist/FireScenePlugin/fire/config.d.ts +0 -10
- package/dist/FireScenePlugin/fire/index.d.ts +0 -6
- package/dist/FireScenePlugin/fire/managers/FireManager.d.ts +0 -76
- package/dist/FireScenePlugin/fire/type.d.ts +0 -51
- package/dist/FireScenePlugin/index.d.ts +0 -6
- package/dist/FireScenePlugin/smoke/config.d.ts +0 -8
- package/dist/FireScenePlugin/smoke/index.d.ts +0 -1
- package/dist/FireScenePlugin/smoke/managers/NormalSmokeManager.d.ts +0 -49
- package/dist/FireScenePlugin/smoke/managers/SmokeManager.d.ts +0 -89
- package/dist/FireScenePlugin/utils/areaBounds.d.ts +0 -14
- package/dist/FireScenePlugin/utils/particle.d.ts +0 -5
- package/dist/FireScenePlugin/utils/particleTexture.d.ts +0 -21
- package/dist/FireScenePlugin/utils/radialSpread.d.ts +0 -54
- package/dist/FireScenePlugin/utils/spread.d.ts +0 -17
- package/dist/GuideLinePlugin/Components/Tag.svelte.d.ts +0 -1
- package/dist/GuideLinePlugin/Controller.d.ts +0 -98
- package/dist/GuideLinePlugin/GuideLineItem.d.ts +0 -36
- package/dist/GuideLinePlugin/GuideLineModeItem.d.ts +0 -152
- package/dist/GuideLinePlugin/index.d.ts +0 -10
- package/dist/GuideLinePlugin/typing.d.ts +0 -199
- package/dist/GuideLinePlugin/utils/createLineGeometry.d.ts +0 -36
- package/dist/GuideLinePlugin/utils/createPath.d.ts +0 -3
- package/dist/ItemLabelPlugin/ItemLabelComponent.svelte.d.ts +0 -1
- package/dist/ItemLabelPlugin/ItemLabelItem.svelte.d.ts +0 -1
- package/dist/ItemLabelPlugin/Plugin.d.ts +0 -4
- package/dist/ItemLabelPlugin/events.type.d.ts +0 -9
- package/dist/ItemLabelPlugin/index.d.ts +0 -9
- package/dist/ItemLabelPlugin/typings.d.ts +0 -65
- package/dist/ItemLabelPlugin/utils/getStrokeLength.d.ts +0 -5
- package/dist/ItemLabelPlugin/utils/isImpacted.d.ts +0 -8
- package/dist/ItemLabelPlugin/utils/parseData.d.ts +0 -3
- package/dist/ItemLabelPlugin/utils/transform2RenderData.d.ts +0 -3
- package/dist/MeasurePlugin/Controller.d.ts +0 -167
- package/dist/MeasurePlugin/index.d.ts +0 -17
- package/dist/MeasurePlugin/utils/MeasureMesh.d.ts +0 -29
- package/dist/MeasurePlugin/utils/validatePolygon.d.ts +0 -2
- package/dist/ModelChassisCompassPlugin/Plugin.d.ts +0 -19
- package/dist/ModelChassisCompassPlugin/index.d.ts +0 -4
- package/dist/ModelEntryDoorGuidePlugin/Plugin.d.ts +0 -27
- package/dist/ModelEntryDoorGuidePlugin/index.d.ts +0 -4
- package/dist/ModelItemLabelPlugin/ItemLabelComponent.svelte.d.ts +0 -1
- package/dist/ModelItemLabelPlugin/ItemLabelItem.svelte.d.ts +0 -1
- package/dist/ModelItemLabelPlugin/ModelItemLabelPlugin.d.ts +0 -4
- package/dist/ModelItemLabelPlugin/events.type.d.ts +0 -9
- package/dist/ModelItemLabelPlugin/index.d.ts +0 -9
- package/dist/ModelItemLabelPlugin/typings.d.ts +0 -56
- package/dist/ModelItemLabelPlugin/utils/parseData.d.ts +0 -3
- package/dist/ModelMakerPlugin/Controller.d.ts +0 -194
- package/dist/ModelMakerPlugin/index.d.ts +0 -9
- package/dist/ModelMakerPlugin/item/baseItem.d.ts +0 -68
- package/dist/ModelMakerPlugin/item/boxItem.d.ts +0 -20
- package/dist/ModelMakerPlugin/item/polygonItem.d.ts +0 -19
- package/dist/ModelMakerPlugin/item/prismItem.d.ts +0 -18
- package/dist/ModelMakerPlugin/typings/config.d.ts +0 -26
- package/dist/ModelMakerPlugin/typings/index.d.ts +0 -52
- package/dist/ModelMakerPlugin/utils/Text.svelte.d.ts +0 -1
- package/dist/ModelMakerPlugin/utils/getTagOcclusionObjects.d.ts +0 -4
- package/dist/ModelMakerPlugin/utils/tagRenderer.d.ts +0 -3
- package/dist/ModelRoomLabelPlugin/Controller.d.ts +0 -38
- package/dist/ModelRoomLabelPlugin/RoomLabelItem.svelte.d.ts +0 -1
- package/dist/ModelRoomLabelPlugin/RoomLabelItems.svelte.d.ts +0 -1
- package/dist/ModelRoomLabelPlugin/index.d.ts +0 -12
- package/dist/ModelRoomLabelPlugin/utils/parseData.d.ts +0 -3
- package/dist/ModelTVVideoPlugin/Plugin.d.ts +0 -4
- package/dist/ModelTVVideoPlugin/index.d.ts +0 -5
- package/dist/ModelTVVideoPlugin/typings.d.ts +0 -27
- package/dist/ModelTVVideoPlugin/utils/parseData.d.ts +0 -3
- package/dist/ModelViewPlugin/Plugin.d.ts +0 -42
- package/dist/ModelViewPlugin/index.d.ts +0 -4
- package/dist/Object3DHelperPlugin/Controller.d.ts +0 -153
- package/dist/Object3DHelperPlugin/FiveControllerWrapper.d.ts +0 -23
- package/dist/Object3DHelperPlugin/index.d.ts +0 -6
- package/dist/PanoCompassPlugin/Controller.d.ts +0 -88
- package/dist/PanoCompassPlugin/getRoomInfoInstance.d.ts +0 -8
- package/dist/PanoCompassPlugin/index.d.ts +0 -7
- package/dist/PanoCompassPlugin/typings.d.ts +0 -58
- package/dist/PanoCursorRaycasterPlugin/index.d.ts +0 -48
- package/dist/PanoDoorLabelPlugin/Controller.d.ts +0 -42
- package/dist/PanoDoorLabelPlugin/DoorLabelItem.svelte.d.ts +0 -1
- package/dist/PanoDoorLabelPlugin/index.d.ts +0 -7
- package/dist/PanoDoorLabelPlugin/typings.d.ts +0 -38
- package/dist/PanoDoorLabelPlugin/utils.d.ts +0 -5
- package/dist/PanoMeasurePlugin/Components/Common/CircleButton.svelte.d.ts +0 -1
- package/dist/PanoMeasurePlugin/Components/Common/Exit.svelte.d.ts +0 -1
- package/dist/PanoMeasurePlugin/Components/Common/Switcher0.svelte.d.ts +0 -1
- package/dist/PanoMeasurePlugin/Components/Common/Switcher1.svelte.d.ts +0 -1
- package/dist/PanoMeasurePlugin/Components/Controller0.svelte.d.ts +0 -1
- package/dist/PanoMeasurePlugin/Components/Controller1.svelte.d.ts +0 -1
- package/dist/PanoMeasurePlugin/Components/Tip.svelte.d.ts +0 -1
- package/dist/PanoMeasurePlugin/Controller/BaseController.d.ts +0 -58
- package/dist/PanoMeasurePlugin/Controller/EditController.d.ts +0 -58
- package/dist/PanoMeasurePlugin/Controller/MixedController.d.ts +0 -38
- package/dist/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +0 -12
- package/dist/PanoMeasurePlugin/Controller/ViewController.d.ts +0 -13
- package/dist/PanoMeasurePlugin/Controller/WatchController.d.ts +0 -33
- package/dist/PanoMeasurePlugin/Controller/index.d.ts +0 -115
- package/dist/PanoMeasurePlugin/Model/area.d.ts +0 -75
- package/dist/PanoMeasurePlugin/Model/index.d.ts +0 -45
- package/dist/PanoMeasurePlugin/Model/line.d.ts +0 -39
- package/dist/PanoMeasurePlugin/Model/point.d.ts +0 -10
- package/dist/PanoMeasurePlugin/Model/polygon.d.ts +0 -14
- package/dist/PanoMeasurePlugin/Model/polyline.d.ts +0 -47
- package/dist/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +0 -30
- package/dist/PanoMeasurePlugin/Modules/GuideController.d.ts +0 -26
- package/dist/PanoMeasurePlugin/Modules/Magnifier.d.ts +0 -19
- package/dist/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +0 -2
- package/dist/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +0 -19
- package/dist/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +0 -12
- package/dist/PanoMeasurePlugin/Modules/UIController/index.d.ts +0 -34
- package/dist/PanoMeasurePlugin/Modules/UIController/mobileHTML.d.ts +0 -4
- package/dist/PanoMeasurePlugin/Modules/UIController/mobileMainBtnController.d.ts +0 -15
- package/dist/PanoMeasurePlugin/Modules/rangePiece/html.d.ts +0 -4
- package/dist/PanoMeasurePlugin/Modules/rangePiece/index.d.ts +0 -42
- package/dist/PanoMeasurePlugin/index.d.ts +0 -14
- package/dist/PanoMeasurePlugin/typings/data.d.ts +0 -58
- package/dist/PanoMeasurePlugin/typings/event.type.d.ts +0 -55
- package/dist/PanoMeasurePlugin/typings/index.d.ts +0 -15
- package/dist/PanoMeasurePlugin/utils/constants.d.ts +0 -4
- package/dist/PanoMeasurePlugin/utils/dom/areaDom.d.ts +0 -22
- package/dist/PanoMeasurePlugin/utils/dom/base.d.ts +0 -29
- package/dist/PanoMeasurePlugin/utils/dom/distanceItem.d.ts +0 -34
- package/dist/PanoMeasurePlugin/utils/findClosestPoint.d.ts +0 -10
- package/dist/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +0 -3
- package/dist/PanoMeasurePlugin/utils/line.d.ts +0 -18
- package/dist/PanoMeasurePlugin/utils/math.d.ts +0 -17
- package/dist/PanoMeasurePlugin/utils/mouseGroup.d.ts +0 -7
- package/dist/PanoMeasurePlugin/utils/ndc2Screen.d.ts +0 -6
- package/dist/PanoRulerPlugin/Plugin.d.ts +0 -34
- package/dist/PanoRulerPlugin/index.d.ts +0 -5
- package/dist/PanoRulerProPlugin/Controller.d.ts +0 -15
- package/dist/PanoRulerProPlugin/RulerItem.svelte.d.ts +0 -1
- package/dist/PanoRulerProPlugin/RulerItems.svelte.d.ts +0 -1
- package/dist/PanoRulerProPlugin/index.d.ts +0 -8
- package/dist/PanoSpatialTagPlugin/Components/origins.svelte.d.ts +0 -1
- package/dist/PanoSpatialTagPlugin/Components/tag.svelte.d.ts +0 -1
- package/dist/PanoSpatialTagPlugin/Plugin.d.ts +0 -35
- package/dist/PanoSpatialTagPlugin/index.d.ts +0 -5
- package/dist/PanoSpatialTagPlugin/store.d.ts +0 -1
- package/dist/PanoSpatialTagPlugin/typings.d.ts +0 -40
- package/dist/PanoTagPlugin/Archive/deprecated.d.ts +0 -73
- package/dist/PanoTagPlugin/Components/Common/Arrow.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/Audio.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/AudioPlayer.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/Icon/Icon.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/Icon/PanoramaIcon.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/Icon/animationUtils.d.ts +0 -9
- package/dist/PanoTagPlugin/Components/Common/Icon/audioIcon.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/Line/Polyline.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/Line/Straight.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/Media.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/MediaItem.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/Shadow.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/TagPoint.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/TagPopover/ArrowRightIcon.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/TagPopover/PanoramaIcon.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/TagPopover/PopoverContent.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/TagPopover/ShareIcon.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/TagPopover/TagPopoverArrow.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/TagPopover/TagPopoverToolBar.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/TagPopover/TagPopup.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/TagPopover/index.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/Text/FlyMText.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/Text/FlyText.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/Text/MText.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Common/VideoIcon.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/AudioTag/AudioPlaneTag.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/AudioTag/AudioPoint.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/AudioTag/AudioTag.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/AudioTag/index.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/CustomTag.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/ImageTextTag.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/LinkTag.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/MarketingTag.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/MediaPlane.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/PanoramaTag.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/TextTag/TextPlaneTag.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/TextTag/TextTag.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/TextTag/index.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/Tag/index.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/TagContainer.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/Components/TagItem.svelte.d.ts +0 -1
- package/dist/PanoTagPlugin/controller/Tag/BaseTag.d.ts +0 -282
- package/dist/PanoTagPlugin/controller/Tag/BoxTag.d.ts +0 -119
- package/dist/PanoTagPlugin/controller/Tag/MaskTag.d.ts +0 -258
- package/dist/PanoTagPlugin/controller/Tag/MaskTag.shaders.d.ts +0 -10
- package/dist/PanoTagPlugin/controller/Tag/ModelTag.d.ts +0 -15
- package/dist/PanoTagPlugin/controller/Tag/PlaneTag.d.ts +0 -51
- package/dist/PanoTagPlugin/controller/Tag/PointTag.d.ts +0 -46
- package/dist/PanoTagPlugin/controller/Tag/PolygonTag.d.ts +0 -112
- package/dist/PanoTagPlugin/controller/TagRender.d.ts +0 -36
- package/dist/PanoTagPlugin/controller/TagUtil.d.ts +0 -93
- package/dist/PanoTagPlugin/controller/index.d.ts +0 -227
- package/dist/PanoTagPlugin/index.d.ts +0 -8
- package/dist/PanoTagPlugin/tag.config.d.ts +0 -7
- package/dist/PanoTagPlugin/typings/controller.d.ts +0 -112
- package/dist/PanoTagPlugin/typings/index.d.ts +0 -8
- package/dist/PanoTagPlugin/typings/tag/Tag.d.ts +0 -64
- package/dist/PanoTagPlugin/typings/tag/TagConfig.d.ts +0 -422
- package/dist/PanoTagPlugin/typings/tag/TagData.d.ts +0 -176
- package/dist/PanoTagPlugin/typings/tag/TagInstance.d.ts +0 -8
- package/dist/PanoTagPlugin/typings/tag/Utils.d.ts +0 -164
- package/dist/PanoTagPlugin/utils/Cache.d.ts +0 -17
- package/dist/PanoTagPlugin/utils/DebugUtil.d.ts +0 -12
- package/dist/PanoTagPlugin/utils/addDebugPoints.d.ts +0 -3
- package/dist/PanoTagPlugin/utils/audio/SharedAudio.d.ts +0 -31
- package/dist/PanoTagPlugin/utils/debounce.d.ts +0 -8
- package/dist/PanoTagPlugin/utils/getImageInfo.d.ts +0 -14
- package/dist/PanoTagPlugin/utils/index.d.ts +0 -10
- package/dist/PanoTagPlugin/utils/model/mediaPlane.d.ts +0 -118
- package/dist/PanoTagPlugin/utils/normalPositionToPositions.d.ts +0 -2
- package/dist/PanoTagPlugin/utils/planeNormal.d.ts +0 -4
- package/dist/PanoTagPlugin/utils/sculptDataToBoxPosition.d.ts +0 -6
- package/dist/PanoTagPlugin/utils/tag/adaptConfig.d.ts +0 -2
- package/dist/PanoTagPlugin/utils/tag/calculateTagConfig.d.ts +0 -7
- package/dist/PanoTagPlugin/utils/tag/canAutoPlayByOcclusion.d.ts +0 -17
- package/dist/PanoTagPlugin/utils/tag/format.d.ts +0 -5
- package/dist/PanoTagPlugin/utils/tag/getRaycasterStartPosition.d.ts +0 -12
- package/dist/PanoTagPlugin/utils/tag/tagCheck.d.ts +0 -19
- package/dist/PanoTagPlugin/utils/tagPosition.d.ts +0 -13
- package/dist/PanoVideoPlugin/Controller.d.ts +0 -59
- package/dist/PanoVideoPlugin/VideoMeshController.d.ts +0 -129
- package/dist/PanoVideoPlugin/index.d.ts +0 -21
- package/dist/PanoVideoPlugin/typings.d.ts +0 -70
- package/dist/PanoVideoPlugin/utils/index.d.ts +0 -9
- package/dist/PanoVideoPlugin/utils/shader.d.ts +0 -2
- package/dist/PipelinePlugin/Controller.d.ts +0 -108
- package/dist/PipelinePlugin/index.d.ts +0 -6
- package/dist/PipelinePlugin/typing/index.d.ts +0 -79
- package/dist/PipelinePlugin/utils/Objects/FlowPipe.d.ts +0 -34
- package/dist/PipelinePlugin/utils/Objects/Pipe.d.ts +0 -49
- package/dist/PipelinePlugin/utils/formatData.d.ts +0 -12
- package/dist/Sculpt/Editors/BoxMeshEditor.d.ts +0 -5
- package/dist/Sculpt/Editors/CircleMeshEditor.d.ts +0 -5
- package/dist/Sculpt/Editors/CylinderMeshEditor.d.ts +0 -5
- package/dist/Sculpt/Editors/PrismMeshEditor.d.ts +0 -5
- package/dist/Sculpt/Editors/RectangleMeshEditor.d.ts +0 -5
- package/dist/Sculpt/Meshes/Area.d.ts +0 -9
- package/dist/Sculpt/Meshes/Box.d.ts +0 -18
- package/dist/Sculpt/Meshes/Circle.d.ts +0 -24
- package/dist/Sculpt/Meshes/CircleWithEdge.d.ts +0 -11
- package/dist/Sculpt/Meshes/Cylinder.d.ts +0 -36
- package/dist/Sculpt/Meshes/Line.d.ts +0 -59
- package/dist/Sculpt/Meshes/LineWithDots.d.ts +0 -52
- package/dist/Sculpt/Meshes/Point.d.ts +0 -41
- package/dist/Sculpt/Meshes/Polygon.d.ts +0 -53
- package/dist/Sculpt/Meshes/PolygonWithEdge.d.ts +0 -33
- package/dist/Sculpt/Meshes/Polyline.d.ts +0 -47
- package/dist/Sculpt/Meshes/Prism.d.ts +0 -98
- package/dist/Sculpt/Meshes/Rectangle.d.ts +0 -19
- package/dist/Sculpt/Meshes/RectangleWithEdge.d.ts +0 -29
- package/dist/Sculpt/Objects/Base/Editor.d.ts +0 -54
- package/dist/Sculpt/Objects/Base/index.d.ts +0 -125
- package/dist/Sculpt/Objects/Box/index.d.ts +0 -48
- package/dist/Sculpt/Objects/Circle/index.d.ts +0 -32
- package/dist/Sculpt/Objects/Cylinder/index.d.ts +0 -34
- package/dist/Sculpt/Objects/Line/Editor.d.ts +0 -22
- package/dist/Sculpt/Objects/Line/index.d.ts +0 -48
- package/dist/Sculpt/Objects/Point/Editor.d.ts +0 -8
- package/dist/Sculpt/Objects/Point/index.d.ts +0 -39
- package/dist/Sculpt/Objects/Polygon/Editor.d.ts +0 -20
- package/dist/Sculpt/Objects/Polygon/index.d.ts +0 -80
- package/dist/Sculpt/Objects/Polyline/Editor.d.ts +0 -8
- package/dist/Sculpt/Objects/Polyline/index.d.ts +0 -47
- package/dist/Sculpt/Objects/Prism/index.d.ts +0 -57
- package/dist/Sculpt/Objects/Rectangle/index.d.ts +0 -48
- package/dist/Sculpt/index.d.ts +0 -266
- package/dist/Sculpt/typings/index.d.ts +0 -72
- package/dist/Sculpt/typings/style.d.ts +0 -108
- package/dist/Sculpt/typings/utils.type.d.ts +0 -16
- package/dist/Sculpt/utils/Modules/Global.d.ts +0 -22
- package/dist/Sculpt/utils/data.d.ts +0 -7
- package/dist/Sculpt/utils/export.d.ts +0 -25
- package/dist/Sculpt/utils/removeAllTag.d.ts +0 -2
- package/dist/Sculpt/utils/renderDom.d.ts +0 -19
- package/dist/Sculpt/utils/sortPositionsByCameraPosition.d.ts +0 -5
- package/dist/Sculpt/utils/three/ColoredMesh.d.ts +0 -33
- package/dist/Sculpt/utils/three/RectangleGeometry.d.ts +0 -6
- package/dist/Sculpt/utils/three/rayOnLine.d.ts +0 -12
- package/dist/base/BasePlugin.d.ts +0 -124
- package/dist/base/BasePluginWithData.d.ts +0 -21
- package/dist/components/AreaLabel/LabelItem.svelte.d.ts +0 -1
- package/dist/components/PaintBrush/Controller.d.ts +0 -43
- package/dist/components/PaintBrush/index.d.ts +0 -27
- package/dist/components/PaintBrush/style.d.ts +0 -2
- package/dist/components/PaintBrush/typings.d.ts +0 -58
- package/dist/components/index.d.ts +0 -2
- package/dist/floorplan/Components/BaseImage.svelte.d.ts +0 -1
- package/dist/floorplan/Components/Camera.svelte.d.ts +0 -1
- package/dist/floorplan/Components/Compass.svelte.d.ts +0 -1
- package/dist/floorplan/Components/CurrentFloor.svelte.d.ts +0 -1
- package/dist/floorplan/Components/Items/Item.svelte.d.ts +0 -1
- package/dist/floorplan/Components/Items/Items.svelte.d.ts +0 -1
- package/dist/floorplan/Components/Main.svelte.d.ts +0 -1
- package/dist/floorplan/Components/MissingFloor.svelte.d.ts +0 -1
- package/dist/floorplan/Components/Normalmage.svelte.d.ts +0 -1
- package/dist/floorplan/Components/RoomHighlight/Room.svelte.d.ts +0 -1
- package/dist/floorplan/Components/RoomHighlight/RoomHighlight.svelte.d.ts +0 -1
- package/dist/floorplan/Components/RoomLabels/RoomLabel.svelte.d.ts +0 -1
- package/dist/floorplan/Components/RoomLabels/RoomLabels.svelte.d.ts +0 -1
- package/dist/floorplan/Components/RoomMaterials/RoomMaterial.svelte.d.ts +0 -1
- package/dist/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte.d.ts +0 -1
- package/dist/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte.d.ts +0 -1
- package/dist/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte.d.ts +0 -1
- package/dist/floorplan/Components/RoomMaterials/RoomTriangle.svelte.d.ts +0 -1
- package/dist/floorplan/Components/RuleLabels/RuleItem.svelte.d.ts +0 -1
- package/dist/floorplan/Components/RuleLabels/RuleLabels.svelte.d.ts +0 -1
- package/dist/floorplan/Components/StyledImage.svelte.d.ts +0 -1
- package/dist/floorplan/Components/SvgImage.svelte.d.ts +0 -1
- package/dist/floorplan/FloorplanGuidePlugin/Components/Camera.svelte.d.ts +0 -1
- package/dist/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +0 -1
- package/dist/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +0 -1
- package/dist/floorplan/FloorplanGuidePlugin/Components/FloorplanCompass.svelte.d.ts +0 -1
- package/dist/floorplan/FloorplanGuidePlugin/Components/Main.svelte.d.ts +0 -1
- package/dist/floorplan/FloorplanGuidePlugin/Components/ObserverDots.svelte.d.ts +0 -1
- package/dist/floorplan/FloorplanGuidePlugin/Components/RoomLabelItem.svelte.d.ts +0 -1
- package/dist/floorplan/FloorplanGuidePlugin/Components/RoomLabels.svelte.d.ts +0 -1
- package/dist/floorplan/FloorplanGuidePlugin/Controller.d.ts +0 -53
- package/dist/floorplan/FloorplanGuidePlugin/index.d.ts +0 -7
- package/dist/floorplan/FloorplanGuidePlugin/typing.d.ts +0 -196
- package/dist/floorplan/MapviewFloorplanPlugin/Controller.d.ts +0 -128
- package/dist/floorplan/MapviewFloorplanPlugin/index.d.ts +0 -7
- package/dist/floorplan/MapviewFloorplanPlugin/typing.d.ts +0 -1
- package/dist/floorplan/ModelFloorplanPlugin/Controller.d.ts +0 -121
- package/dist/floorplan/ModelFloorplanPlugin/index.d.ts +0 -7
- package/dist/floorplan/ModelFloorplanPlugin/typing.d.ts +0 -1
- package/dist/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte.d.ts +0 -1
- package/dist/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +0 -1
- package/dist/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +0 -1
- package/dist/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte.d.ts +0 -1
- package/dist/floorplan/PanoFloorplanRadarPlugin/Controller.d.ts +0 -40
- package/dist/floorplan/PanoFloorplanRadarPlugin/index.d.ts +0 -7
- package/dist/floorplan/PanoFloorplanRadarPlugin/typing.d.ts +0 -70
- package/dist/floorplan/TopviewFloorplanPlugin/Controller.d.ts +0 -74
- package/dist/floorplan/TopviewFloorplanPlugin/index.d.ts +0 -7
- package/dist/floorplan/TopviewFloorplanPlugin/typing.d.ts +0 -11
- package/dist/floorplan/index.d.ts +0 -8
- package/dist/floorplan/typings/floorplanData.d.ts +0 -176
- package/dist/floorplan/typings/index.d.ts +0 -164
- package/dist/floorplan/utils/correctFiveState.d.ts +0 -18
- package/dist/floorplan/utils/formatData.d.ts +0 -5
- package/dist/floorplan/utils/formatPosition.d.ts +0 -36
- package/dist/floorplan/utils/styledFloorplan.d.ts +0 -2
- package/dist/index.cjs.js +0 -1715
- package/dist/index.umd.js +0 -1715
- package/dist/shared-utils/CSS3DRender/CSS3DObject.d.ts +0 -37
- package/dist/shared-utils/CSS3DRender/CSS3DRenderer.d.ts +0 -16
- package/dist/shared-utils/CSS3DRender/OpacityMesh.d.ts +0 -6
- package/dist/shared-utils/CSS3DRender/index.d.ts +0 -41
- package/dist/shared-utils/Object3DHelper/Base/BaseController.d.ts +0 -142
- package/dist/shared-utils/Object3DHelper/Base/BaseHelper.d.ts +0 -105
- package/dist/shared-utils/Object3DHelper/Constants/color.d.ts +0 -12
- package/dist/shared-utils/Object3DHelper/Controller/BoundingBoxController.d.ts +0 -7
- package/dist/shared-utils/Object3DHelper/Controller/CSS3DScaleController.d.ts +0 -7
- package/dist/shared-utils/Object3DHelper/Controller/MoveController.d.ts +0 -60
- package/dist/shared-utils/Object3DHelper/Controller/RectangleScaleController.d.ts +0 -45
- package/dist/shared-utils/Object3DHelper/Controller/RotateController.d.ts +0 -46
- package/dist/shared-utils/Object3DHelper/Controller/ScaleController.d.ts +0 -66
- package/dist/shared-utils/Object3DHelper/Helper/BoundingBoxHelper.d.ts +0 -16
- package/dist/shared-utils/Object3DHelper/Helper/CSS3DScaleHelper.d.ts +0 -43
- package/dist/shared-utils/Object3DHelper/Helper/HTML/rectangleScaleDom.d.ts +0 -11
- package/dist/shared-utils/Object3DHelper/Helper/MoveHelper.d.ts +0 -24
- package/dist/shared-utils/Object3DHelper/Helper/Objects/ArrowGroup.d.ts +0 -18
- package/dist/shared-utils/Object3DHelper/Helper/Objects/CenterHandle.d.ts +0 -23
- package/dist/shared-utils/Object3DHelper/Helper/RotateHelper.d.ts +0 -93
- package/dist/shared-utils/Object3DHelper/Helper/ScaleHelper.d.ts +0 -65
- package/dist/shared-utils/Object3DHelper/Helper/index.d.ts +0 -5
- package/dist/shared-utils/Object3DHelper/index.d.ts +0 -52
- package/dist/shared-utils/Object3DHelper/typings/Hooks.d.ts +0 -63
- package/dist/shared-utils/Object3DHelper/typings/index.d.ts +0 -45
- package/dist/shared-utils/Object3DHelper/utils/calculateScaleByCamera.d.ts +0 -5
- package/dist/shared-utils/Object3DHelper/utils/calculateThreeMouse.d.ts +0 -14
- package/dist/shared-utils/Object3DHelper/utils/cameraHooks.d.ts +0 -2
- package/dist/shared-utils/Object3DHelper/utils/direction.d.ts +0 -14
- package/dist/shared-utils/Object3DHelper/utils/filterNotColinearPoints.d.ts +0 -2
- package/dist/shared-utils/Object3DHelper/utils/getMouseRaycaster.d.ts +0 -5
- package/dist/shared-utils/Object3DHelper/utils/getOrthographicCameraDirection.d.ts +0 -8
- package/dist/shared-utils/Object3DHelper/utils/getPoseFromCamera.d.ts +0 -8
- package/dist/shared-utils/Object3DHelper/utils/index.d.ts +0 -8
- package/dist/shared-utils/Object3DHelper/utils/normalPositionToPositions.d.ts +0 -5
- package/dist/shared-utils/Object3DHelper/utils/setObjectQuaternion.d.ts +0 -8
- package/dist/shared-utils/Object3DHelper/utils/solidGuide.d.ts +0 -27
- package/dist/shared-utils/Subscribe.d.ts +0 -68
- package/dist/shared-utils/Utils/BaseUtil.d.ts +0 -6
- package/dist/shared-utils/Utils/FiveUtil.d.ts +0 -11
- package/dist/shared-utils/Utils/WorkUtil.d.ts +0 -36
- package/dist/shared-utils/animationFrame/BetterTween.d.ts +0 -12
- package/dist/shared-utils/animationFrame/index.d.ts +0 -17
- package/dist/shared-utils/changeModelCanvasOpacity.d.ts +0 -2
- package/dist/shared-utils/createCanvasTextTexture.d.ts +0 -8
- package/dist/shared-utils/createLine/index.d.ts +0 -3
- package/dist/shared-utils/exports.d.ts +0 -2
- package/dist/shared-utils/five/FiveDomEvents.d.ts +0 -138
- package/dist/shared-utils/five/FiveLine.d.ts +0 -10
- package/dist/shared-utils/five/FivePuppet.d.ts +0 -64
- package/dist/shared-utils/five/calculateThreeMouse.d.ts +0 -11
- package/dist/shared-utils/five/changeMode.d.ts +0 -3
- package/dist/shared-utils/five/fiveEveryReadyListener.d.ts +0 -2
- package/dist/shared-utils/five/fiveLoaded.d.ts +0 -2
- package/dist/shared-utils/five/fiveModelLoad.d.ts +0 -9
- package/dist/shared-utils/five/getFiveFromParentChain.d.ts +0 -8
- package/dist/shared-utils/five/getFiveModel.d.ts +0 -2
- package/dist/shared-utils/five/getFloorIndex.d.ts +0 -4
- package/dist/shared-utils/five/getFloorMesh.d.ts +0 -3
- package/dist/shared-utils/five/getPosition.d.ts +0 -24
- package/dist/shared-utils/five/getRaycasterByNdcPosition.d.ts +0 -6
- package/dist/shared-utils/five/index.d.ts +0 -12
- package/dist/shared-utils/five/initialCSS3DRender.d.ts +0 -1
- package/dist/shared-utils/five/lookObject.d.ts +0 -15
- package/dist/shared-utils/five/lookPoint.d.ts +0 -11
- package/dist/shared-utils/five/mode.d.ts +0 -3
- package/dist/shared-utils/five/transformPosition.d.ts +0 -2
- package/dist/shared-utils/five/vector3ToScreen.d.ts +0 -5
- package/dist/shared-utils/fontSize.d.ts +0 -185
- package/dist/shared-utils/getPointFromHammerEvent.d.ts +0 -10
- package/dist/shared-utils/getPxmm.d.ts +0 -19
- package/dist/shared-utils/index.d.ts +0 -11
- package/dist/shared-utils/math/Rectangle.d.ts +0 -27
- package/dist/shared-utils/math/convexHull.d.ts +0 -5
- package/dist/shared-utils/math/index.d.ts +0 -4
- package/dist/shared-utils/math/planimetry.d.ts +0 -116
- package/dist/shared-utils/math/pointsIsRectangle.d.ts +0 -2
- package/dist/shared-utils/object3d2LocalMatrix.d.ts +0 -12
- package/dist/shared-utils/offscreenCanvas.d.ts +0 -2
- package/dist/shared-utils/positionToVector3.d.ts +0 -17
- package/dist/shared-utils/svelte/resizeObserver.d.ts +0 -2
- package/dist/shared-utils/tag.d.ts +0 -99
- package/dist/shared-utils/three/CSS3DRenderer/index.d.ts +0 -23
- package/dist/shared-utils/three/Extras/Core/Interpolations.d.ts +0 -11
- package/dist/shared-utils/three/Extras/Curves/BezierCurve3.d.ts +0 -13
- package/dist/shared-utils/three/FBXLoader/index.d.ts +0 -6
- package/dist/shared-utils/three/FragmentTransparencyMaterial.d.ts +0 -18
- package/dist/shared-utils/three/GLTFLoader.d.ts +0 -9
- package/dist/shared-utils/three/IObject3D.d.ts +0 -11
- package/dist/shared-utils/three/LegacyPointHelper.d.ts +0 -22
- package/dist/shared-utils/three/Magnifier.d.ts +0 -79
- package/dist/shared-utils/three/PointDomHelper.d.ts +0 -18
- package/dist/shared-utils/three/PointSelector/index.d.ts +0 -182
- package/dist/shared-utils/three/PointSelector/utils/PointHelper.d.ts +0 -31
- package/dist/shared-utils/three/PointSelector/utils/PointHelper2.d.ts +0 -31
- package/dist/shared-utils/three/PointSelector/utils/PointSelectorHelper.d.ts +0 -73
- package/dist/shared-utils/three/PointSelector/utils/html.d.ts +0 -4
- package/dist/shared-utils/three/PointSelector/utils/typing.d.ts +0 -8
- package/dist/shared-utils/three/Quadrangle.d.ts +0 -20
- package/dist/shared-utils/three/addIfNotExists.d.ts +0 -2
- package/dist/shared-utils/three/applyObjectMatrixWorld.d.ts +0 -3
- package/dist/shared-utils/three/blink.d.ts +0 -278
- package/dist/shared-utils/three/boundingBox.d.ts +0 -25
- package/dist/shared-utils/three/centerPoint.d.ts +0 -2
- package/dist/shared-utils/three/closeVectors.d.ts +0 -2
- package/dist/shared-utils/three/core/Five_LineMaterial2.d.ts +0 -20
- package/dist/shared-utils/three/core/Line2.d.ts +0 -13
- package/dist/shared-utils/three/core/LineGeometry.d.ts +0 -13
- package/dist/shared-utils/three/core/LineMaterial.d.ts +0 -15
- package/dist/shared-utils/three/core/LineMaterial2.d.ts +0 -15
- package/dist/shared-utils/three/core/LineSegments.d.ts +0 -9
- package/dist/shared-utils/three/core/Object3D.d.ts +0 -8
- package/dist/shared-utils/three/core/PrismAnimationGeometry.d.ts +0 -25
- package/dist/shared-utils/three/core/PrismGeometry.d.ts +0 -22
- package/dist/shared-utils/three/core/Raycaster.d.ts +0 -6
- package/dist/shared-utils/three/core/Sphere.d.ts +0 -4
- package/dist/shared-utils/three/earcut3D.d.ts +0 -2
- package/dist/shared-utils/three/filterVisibleIntersections.d.ts +0 -3
- package/dist/shared-utils/three/generatePolygonGeometry.d.ts +0 -9
- package/dist/shared-utils/three/geometryUtil.d.ts +0 -15
- package/dist/shared-utils/three/getCoords.d.ts +0 -9
- package/dist/shared-utils/three/getIntersect.d.ts +0 -22
- package/dist/shared-utils/three/getNormal.d.ts +0 -5
- package/dist/shared-utils/three/getObjectVisible.d.ts +0 -5
- package/dist/shared-utils/three/getPositionsByObjectFit.d.ts +0 -3
- package/dist/shared-utils/three/getRaycaster.d.ts +0 -6
- package/dist/shared-utils/three/getTextureLoader.d.ts +0 -6
- package/dist/shared-utils/three/index.d.ts +0 -15
- package/dist/shared-utils/three/loadTexture.d.ts +0 -6
- package/dist/shared-utils/three/loadVideoTexture.d.ts +0 -9
- package/dist/shared-utils/three/recurveFindObject.d.ts +0 -2
- package/dist/shared-utils/three/temp.d.ts +0 -2
- package/dist/shared-utils/three/transformPositionToVector3.d.ts +0 -7
- package/dist/shared-utils/three/transformToMeshBasicMaterial.d.ts +0 -2
- package/dist/shared-utils/three/vector3ToArray.d.ts +0 -3
- package/dist/shared-utils/three/vectorIsEqual.d.ts +0 -2
- package/dist/shared-utils/translateMode/getDistanceFromModel.d.ts +0 -2
- package/dist/shared-utils/typescript/entries.d.ts +0 -2
- package/dist/shared-utils/vectorToCoordinate.d.ts +0 -7
- package/dist/typings/typings.d.ts +0 -15
- package/dist/typings/utils.type.d.ts +0 -4
- package/docs/.nojekyll +0 -1
- package/docs/assets/custom.css +0 -0
- package/docs/assets/highlight.css +0 -127
- package/docs/assets/icons.js +0 -18
- package/docs/assets/icons.svg +0 -1
- package/docs/assets/main.js +0 -60
- package/docs/assets/navigation.js +0 -1
- package/docs/assets/search.js +0 -1
- package/docs/assets/style.css +0 -1493
- package/docs/classes/AnimationScriptAdapterSafetyError.html +0 -4
- package/docs/classes/AreaMakerPluginType.AreaMakerController.html +0 -59
- package/docs/classes/AreaMakerPluginType.AreaMakerItem.html +0 -71
- package/docs/classes/CSS3DRender.html +0 -100
- package/docs/classes/DigitalHuman.html +0 -43
- package/docs/classes/DigitalPerformanceV2.DigitalPerformanceNameplate.html +0 -25
- package/docs/classes/DigitalPerformanceV2.DigitalPerformanceV2PluginController.html +0 -178
- package/docs/classes/DigitalPlayground.html +0 -25
- package/docs/classes/DigitalStateMachine.html +0 -3
- package/docs/classes/FireControl.html +0 -56
- package/docs/classes/FireScenePlayer.html +0 -10
- package/docs/classes/GuideLineItem.GuideLineItem.html +0 -21
- package/docs/classes/GuideLineModeItem.GuideLineModeItem.html +0 -72
- package/docs/classes/ModelMakerPluginInstance.html +0 -106
- package/docs/classes/ModelMakerPluginType.ModelMakerBoxItem.html +0 -52
- package/docs/classes/ModelMakerPluginType.ModelMakerPolygonItem.html +0 -52
- package/docs/classes/ModelMakerPluginType.ModelMakerPrismItem.html +0 -53
- package/docs/classes/ModelRoomLabelController.html +0 -19
- package/docs/classes/MoveController.html +0 -45
- package/docs/classes/Object3DHelperController.html +0 -45
- package/docs/classes/PaintBrush.html +0 -15
- package/docs/classes/PanoMeasurePluginLine.html +0 -24
- package/docs/classes/PanoMeasurePluginModel.html +0 -23
- package/docs/classes/PanoMeasurePluginPoint.html +0 -7
- package/docs/classes/PanoMeasurePluginPolyline.html +0 -27
- package/docs/classes/PanoTagPluginController.html +0 -129
- package/docs/classes/Sculpt.html +0 -79
- package/docs/classes/Util.BetterTween.html +0 -6
- package/docs/classes/Util.FiveDomEvents.html +0 -13
- package/docs/classes/Util.FivePuppet.html +0 -20
- package/docs/classes/Util.Interval.html +0 -11
- package/docs/classes/Util.LegacyPointHelper.html +0 -7
- package/docs/classes/Util.LightTag.html +0 -47
- package/docs/classes/Util.LineSegments.html +0 -4
- package/docs/classes/Util.Magnifier.html +0 -26
- package/docs/classes/Util.Object3D.html +0 -8
- package/docs/classes/Util.PointDomHelper.html +0 -8
- package/docs/classes/Util.PointHelper.html +0 -10
- package/docs/classes/Util.PointSelector.html +0 -71
- package/docs/classes/Util.PointSelectorHelper.html +0 -14
- package/docs/classes/Util.Rectangle.html +0 -12
- package/docs/classes/Util.sculpt.BaseEditor.html +0 -17
- package/docs/classes/Util.sculpt.BoxMesh.html +0 -48
- package/docs/classes/Util.sculpt.BoxMeshEditor.html +0 -18
- package/docs/classes/Util.sculpt.CircleMesh.html +0 -26
- package/docs/classes/Util.sculpt.CircleMeshEditor.html +0 -18
- package/docs/classes/Util.sculpt.CircleWithEdgeMesh.html +0 -26
- package/docs/classes/Util.sculpt.CylinderMesh.html +0 -25
- package/docs/classes/Util.sculpt.CylinderMeshEditor.html +0 -18
- package/docs/classes/Util.sculpt.LineMesh.html +0 -34
- package/docs/classes/Util.sculpt.PointMesh.html +0 -24
- package/docs/classes/Util.sculpt.PolygonMesh.html +0 -40
- package/docs/classes/Util.sculpt.PrismMesh.html +0 -48
- package/docs/classes/Util.sculpt.PrismMeshEditor.html +0 -18
- package/docs/classes/Util.sculpt.RectangleMesh.html +0 -41
- package/docs/classes/Util.sculpt.RectangleMeshEditor.html +0 -18
- package/docs/classes/Util.sculpt.RectangleWithEdgeMesh.html +0 -44
- package/docs/classes/WalkController.html +0 -42
- package/docs/enums/CameraMovementEffect.html +0 -4
- package/docs/enums/ContentType.html +0 -36
- package/docs/enums/DIRECTION.html +0 -5
- package/docs/enums/DISPLAY_STRATEGY_TYPE.html +0 -5
- package/docs/enums/DimensionType.html +0 -4
- package/docs/enums/FLOOR_PLAN_ATTACHED_TO.html +0 -4
- package/docs/enums/ITEM_LABEL_PLUGIN_DISPLAY_STRATEGY_TYPE.html +0 -5
- package/docs/enums/PaintBrushTypeEnum.html +0 -4
- package/docs/enums/PointType.html +0 -4
- package/docs/enums/Rotation.html +0 -5
- package/docs/functions/AreaMakerPlugin.html +0 -1
- package/docs/functions/CSS3DRenderPlugin.html +0 -1
- package/docs/functions/CameraMovementPlugin.html +0 -2
- package/docs/functions/CruisePlugin.html +0 -1
- package/docs/functions/CurrentPanoImagePlugin.html +0 -1
- package/docs/functions/DigitalPerformancePlugin.html +0 -1
- package/docs/functions/DigitalPerformanceV2.DigitalPerformanceV2Plugin.html +0 -1
- package/docs/functions/DigitalPerformanceV2.normalizeDigitalPerformanceName.html +0 -2
- package/docs/functions/FloorplanGuidePlugin.html +0 -1
- package/docs/functions/GuideLinePlugin.html +0 -1
- package/docs/functions/ItemLabelPlugin.html +0 -1
- package/docs/functions/MapviewFloorplanPlugin.html +0 -1
- package/docs/functions/MeasurePlugin.html +0 -1
- package/docs/functions/ModelChassisCompassPlugin.html +0 -2
- package/docs/functions/ModelEntryDoorGuidePlugin.html +0 -2
- package/docs/functions/ModelFloorplanPlugin.html +0 -1
- package/docs/functions/ModelItemLabelPlugin.html +0 -1
- package/docs/functions/ModelMakerPlugin.html +0 -1
- package/docs/functions/ModelRoomLabelPlugin.html +0 -1
- package/docs/functions/ModelTVVideoPlugin.html +0 -1
- package/docs/functions/ModelViewPlugin.html +0 -2
- package/docs/functions/MovePlugin.html +0 -1
- package/docs/functions/Object3DHelperPlugin.html +0 -1
- package/docs/functions/PanoCompassPlugin.html +0 -1
- package/docs/functions/PanoCursorRaycasterPlugin.html +0 -2
- package/docs/functions/PanoDoorLabelPlugin.html +0 -1
- package/docs/functions/PanoFloorplanRadarPlugin.html +0 -1
- package/docs/functions/PanoMeasurePlugin.html +0 -1
- package/docs/functions/PanoRulerPlugin.html +0 -2
- package/docs/functions/PanoRulerProPlugin.html +0 -2
- package/docs/functions/PanoSpatialTagPlugin.html +0 -2
- package/docs/functions/PanoTagPlugin.html +0 -1
- package/docs/functions/PanoVideoPlugin.html +0 -10
- package/docs/functions/PipelinePlugin.html +0 -1
- package/docs/functions/SculptPlugin.html +0 -2
- package/docs/functions/SculptPluginForFive.html +0 -2
- package/docs/functions/TopviewFloorplanPlugin.html +0 -1
- package/docs/functions/Util.awaitNextFrame.html +0 -1
- package/docs/functions/Util.blink.html +0 -13
- package/docs/functions/Util.blinkWithPreset.html +0 -6
- package/docs/functions/Util.bounding.html +0 -1
- package/docs/functions/Util.boundingBox.html +0 -1
- package/docs/functions/Util.boundingSphere.html +0 -1
- package/docs/functions/Util.boxVertex.html +0 -7
- package/docs/functions/Util.boxVertexes.html +0 -1
- package/docs/functions/Util.checkFiveModelLoaded.html +0 -2
- package/docs/functions/Util.cleanup.html +0 -3
- package/docs/functions/Util.convexHull.html +0 -2
- package/docs/functions/Util.equal.html +0 -5
- package/docs/functions/Util.fiveModelIsLoaded.html +0 -2
- package/docs/functions/Util.generatePolygonGeometry.html +0 -2
- package/docs/functions/Util.getCoordsFromClient.html +0 -1
- package/docs/functions/Util.getCoordsFromElement.html +0 -1
- package/docs/functions/Util.getFrameTime.html +0 -3
- package/docs/functions/Util.getGeometryArea.html +0 -1
- package/docs/functions/Util.getGeometryInfo.html +0 -1
- package/docs/functions/Util.getIntersectFromRelativePosition.html +0 -1
- package/docs/functions/Util.getRaycasterFromFivePointer.html +0 -1
- package/docs/functions/Util.initialCSS3DRender.html +0 -1
- package/docs/functions/Util.inside.html +0 -1
- package/docs/functions/Util.isModelLike.html +0 -1
- package/docs/functions/Util.isNil.html +0 -2
- package/docs/functions/Util.isPanoramaLike.html +0 -1
- package/docs/functions/Util.lookObject.html +0 -7
- package/docs/functions/Util.lookPoint.html +0 -5
- package/docs/functions/Util.nextFrame.html +0 -1
- package/docs/functions/Util.notNil.html +0 -2
- package/docs/functions/Util.reblink.html +0 -13
- package/docs/functions/Util.replaceStaticPrefix.html +0 -8
- package/docs/functions/Util.requestAnimationFrameInterval.html +0 -5
- package/docs/functions/Util.sculpt.createBox.html +0 -1
- package/docs/functions/Util.sculpt.createCircle.html +0 -1
- package/docs/functions/Util.sculpt.createCylinder.html +0 -1
- package/docs/functions/Util.sculpt.createLine.html +0 -2
- package/docs/functions/Util.sculpt.createPoint.html +0 -1
- package/docs/functions/Util.sculpt.createPolygon.html +0 -1
- package/docs/functions/Util.sculpt.createPrism.html +0 -1
- package/docs/functions/Util.sculpt.createRectangle.html +0 -2
- package/docs/functions/Util.sculpt.transformUnit.html +0 -4
- package/docs/functions/Util.sculpt.transformUnitSquare.html +0 -1
- package/docs/functions/Util.tag.html +0 -1
- package/docs/functions/Util.triangleArea.html +0 -2
- package/docs/functions/Util.triangleCenter.html +0 -2
- package/docs/functions/Util.tweenProgress.html +0 -1
- package/docs/functions/Util.uuid.html +0 -2
- package/docs/functions/Util.waitFiveModelLoaded.html +0 -2
- package/docs/functions/Util.worldBounding.html +0 -1
- package/docs/functions/Util.worldBoundingBox.html +0 -1
- package/docs/functions/Util.worldBoundingSphere.html +0 -1
- package/docs/functions/classifyMovementTrack.html +0 -1
- package/docs/functions/createPolyline.html +0 -2
- package/docs/functions/getAreaBox3.html +0 -2
- package/docs/functions/getAreaVertices.html +0 -2
- package/docs/functions/getEffectivePointActionDuration.html +0 -1
- package/docs/functions/getEntryArea.html +0 -2
- package/docs/functions/getMovementActionDuration.html +0 -1
- package/docs/functions/hasMovementV2Signal.html +0 -1
- package/docs/functions/isConverterSafeMovementMatrix.html +0 -1
- package/docs/functions/pluginFlag.html +0 -1
- package/docs/functions/transformAnimationDetailToDigitalScript.html +0 -3
- package/docs/functions/transformScriptData.html +0 -4
- package/docs/functions/validatePolygon.html +0 -1
- package/docs/hierarchy.html +0 -1
- package/docs/index.html +0 -69
- package/docs/interfaces/AnimationScriptAdapterOptions.html +0 -6
- package/docs/interfaces/AreaMakerPluginType.AnimeOptions.html +0 -4
- package/docs/interfaces/AreaMakerPluginType.Config.html +0 -8
- package/docs/interfaces/AreaMakerPluginType.EventMap.html +0 -25
- package/docs/interfaces/AreaMakerPluginType.Params.html +0 -4
- package/docs/interfaces/AreaMakerPluginType.ServerAreaMakerItem.html +0 -20
- package/docs/interfaces/AreaMakerPluginType.ServerAreaMakerItemV1.html +0 -13
- package/docs/interfaces/AreaMakerPluginType.ServerDataV1.html +0 -9
- package/docs/interfaces/AreaMakerPluginType.ServerDataV2.html +0 -3
- package/docs/interfaces/AreaMakerPluginType.ShowHideOptions.html +0 -3
- package/docs/interfaces/AreaMakerPluginType.State.html +0 -8
- package/docs/interfaces/BoxAnimationConfig.html +0 -6
- package/docs/interfaces/BoxPosition.html +0 -8
- package/docs/interfaces/CSS3DRenderPluginEventMap.html +0 -9
- package/docs/interfaces/CSS3DRenderPluginState.html +0 -7
- package/docs/interfaces/CameraMovementPluginExportType.html +0 -11
- package/docs/interfaces/ChapterLocation.html +0 -4
- package/docs/interfaces/ChapterTimeInfo.html +0 -7
- package/docs/interfaces/ContentTypeMapInterface.html +0 -83
- package/docs/interfaces/CruisePluginTypes.Config.html +0 -8
- package/docs/interfaces/CruisePluginTypes.CruiseKeyframe.html +0 -8
- package/docs/interfaces/CruisePluginTypes.EventMap.html +0 -33
- package/docs/interfaces/CruisePluginTypes.GuildLineConfig.html +0 -6
- package/docs/interfaces/CruisePluginTypes.MoveAction.html +0 -16
- package/docs/interfaces/CruisePluginTypes.MoveWithKeyframesAction.html +0 -19
- package/docs/interfaces/CruisePluginTypes.MoveWithPanoIndexAction.html +0 -20
- package/docs/interfaces/CruisePluginTypes.PluginData.html +0 -8
- package/docs/interfaces/CruisePluginTypes.PluginServerData.html +0 -2
- package/docs/interfaces/CruisePluginTypes.PluginState.html +0 -15
- package/docs/interfaces/CurrentPanoImagePluginType.Config.html +0 -14
- package/docs/interfaces/CurrentPanoImagePluginType.EventMap.html +0 -15
- package/docs/interfaces/CurrentPanoImagePluginType.Params.html +0 -4
- package/docs/interfaces/CurrentPanoImagePluginType.ShowHideOptions.html +0 -3
- package/docs/interfaces/CurrentPanoImagePluginType.State.html +0 -7
- package/docs/interfaces/DigitalCameraKeyframe.html +0 -4
- package/docs/interfaces/DigitalCameraPlayer.html +0 -4
- package/docs/interfaces/DigitalCameraState.html +0 -4
- package/docs/interfaces/DigitalChapter.html +0 -3
- package/docs/interfaces/DigitalDataPlayer.html +0 -4
- package/docs/interfaces/DigitalDataState.html +0 -4
- package/docs/interfaces/DigitalEffectKeyframe.html +0 -4
- package/docs/interfaces/DigitalEffectState.html +0 -8
- package/docs/interfaces/DigitalItemKeyframe.html +0 -6
- package/docs/interfaces/DigitalItemState.html +0 -7
- package/docs/interfaces/DigitalModelKeyframe.html +0 -9
- package/docs/interfaces/DigitalModelPlayer.html +0 -10
- package/docs/interfaces/DigitalModelPlayerEffect.html +0 -4
- package/docs/interfaces/DigitalModelPlayerItem.html +0 -6
- package/docs/interfaces/DigitalModelState.html +0 -8
- package/docs/interfaces/DigitalPerformancePluginConfig.html +0 -9
- package/docs/interfaces/DigitalPerformanceV2.CameraState.html +0 -13
- package/docs/interfaces/DigitalPerformanceV2.DigitalCameraKeyframe.html +0 -23
- package/docs/interfaces/DigitalPerformanceV2.DigitalCameraPlayer.html +0 -7
- package/docs/interfaces/DigitalPerformanceV2.DigitalPerformanceNameplateBinding.html +0 -5
- package/docs/interfaces/DigitalPerformanceV2.DigitalPerformanceNameplateOptions.html +0 -22
- package/docs/interfaces/DigitalPerformanceV2.DigitalPerformanceNameplateRenderContext.html +0 -5
- package/docs/interfaces/DigitalPerformanceV2.DigitalPerformanceV2PluginConfig.html +0 -15
- package/docs/interfaces/DigitalPerformanceV2.GroupChapterTimeInfo.html +0 -13
- package/docs/interfaces/DigitalPerformanceV2.GroupProgress.html +0 -18
- package/docs/interfaces/DigitalPerformanceV2.V2Progress.html +0 -10
- package/docs/interfaces/DigitalScript.html +0 -5
- package/docs/interfaces/DigitalSubTitleKeyframe.html +0 -7
- package/docs/interfaces/DigitalSubTitlePlayer.html +0 -4
- package/docs/interfaces/DigitalSubTitleState.html +0 -6
- package/docs/interfaces/ExtendedAnimationConfig.html +0 -5
- package/docs/interfaces/FireArea.html +0 -5
- package/docs/interfaces/FireModel.html +0 -9
- package/docs/interfaces/FireSceneConfig.html +0 -9
- package/docs/interfaces/FireSequencePlayerOptions.html +0 -4
- package/docs/interfaces/FireSequenceStep.html +0 -5
- package/docs/interfaces/FireVector3.html +0 -4
- package/docs/interfaces/FloorplanBounding.html +0 -9
- package/docs/interfaces/FloorplanData.html +0 -8
- package/docs/interfaces/FloorplanEntrance.html +0 -14
- package/docs/interfaces/FloorplanExtraObject.html +0 -9
- package/docs/interfaces/FloorplanExtraObject3D.html +0 -5
- package/docs/interfaces/FloorplanFloorData.html +0 -9
- package/docs/interfaces/FloorplanImagePosition.html +0 -4
- package/docs/interfaces/FloorplanObserver.html +0 -9
- package/docs/interfaces/FloorplanOutlineItem.html +0 -6
- package/docs/interfaces/FloorplanPosition.html +0 -4
- package/docs/interfaces/FloorplanRoomItem.html +0 -24
- package/docs/interfaces/FloorplanRoomLabelItem.html +0 -6
- package/docs/interfaces/FloorplanServerBounding.html +0 -9
- package/docs/interfaces/FloorplanServerComputedData.html +0 -6
- package/docs/interfaces/FloorplanServerData.html +0 -5
- package/docs/interfaces/FloorplanServerDoorItem.html +0 -6
- package/docs/interfaces/FloorplanServerDoorPosition.html +0 -4
- package/docs/interfaces/FloorplanServerEntrance.html +0 -14
- package/docs/interfaces/FloorplanServerFloorData.html +0 -8
- package/docs/interfaces/FloorplanServerImagePosition.html +0 -4
- package/docs/interfaces/FloorplanServerObserver.html +0 -9
- package/docs/interfaces/FloorplanServerOutlineItem.html +0 -7
- package/docs/interfaces/FloorplanServerPosition.html +0 -4
- package/docs/interfaces/FloorplanServerRoomItem.html +0 -27
- package/docs/interfaces/FloorplanServerRoomLabelItem.html +0 -6
- package/docs/interfaces/FloorplanServerStyledFloorplan.html +0 -3
- package/docs/interfaces/FloorplanServerStyledImage.html +0 -6
- package/docs/interfaces/GlobalProgress.html +0 -7
- package/docs/interfaces/GuideLineModeItem.GuideLineTagContainer.html +0 -4
- package/docs/interfaces/GuideLinePluginType.CatmullRomCurve3.html +0 -7
- package/docs/interfaces/GuideLinePluginType.EventMap.html +0 -13
- package/docs/interfaces/GuideLinePluginType.ExtraRouteData.html +0 -5
- package/docs/interfaces/GuideLinePluginType.GuideLineGeometryStyle.html +0 -8
- package/docs/interfaces/GuideLinePluginType.GuideLineItemContainer.html +0 -2
- package/docs/interfaces/GuideLinePluginType.GuideLineMaterialStyle.html +0 -32
- package/docs/interfaces/GuideLinePluginType.GuideLineMeshStyle.html +0 -4
- package/docs/interfaces/GuideLinePluginType.LineGeometriesConfig.html +0 -5
- package/docs/interfaces/GuideLinePluginType.ModelGuideLineStyle.html +0 -42
- package/docs/interfaces/GuideLinePluginType.ModelGuideLineTagData.html +0 -3
- package/docs/interfaces/GuideLinePluginType.PanoramaGuideLineStyle.html +0 -57
- package/docs/interfaces/GuideLinePluginType.PluginDataV2.html +0 -1
- package/docs/interfaces/GuideLinePluginType.PluginServerData.html +0 -2
- package/docs/interfaces/GuideLinePluginType.PluginState.html +0 -7
- package/docs/interfaces/GuideLinePluginType.Route.html +0 -13
- package/docs/interfaces/HelperOffset.html +0 -4
- package/docs/interfaces/ImagePlaneGroup.html +0 -3
- package/docs/interfaces/ItemLabelPluginData.html +0 -2
- package/docs/interfaces/ItemLabelPluginExportReturnsType.html +0 -7
- package/docs/interfaces/ItemLabelPluginParametersType.html +0 -5
- package/docs/interfaces/LegacyScriptTransformer.html +0 -2
- package/docs/interfaces/MinMax.html +0 -3
- package/docs/interfaces/ModelChassisCompassPluginData.html +0 -3
- package/docs/interfaces/ModelChassisCompassPluginExportType.html +0 -4
- package/docs/interfaces/ModelChassisCompassPluginParameterType.html +0 -3
- package/docs/interfaces/ModelEntryDoorGuidePluginData.html +0 -4
- package/docs/interfaces/ModelEntryDoorGuidePluginExportType.html +0 -4
- package/docs/interfaces/ModelItemLabelPluginData.html +0 -2
- package/docs/interfaces/ModelItemLabelPluginExportReturnsType.html +0 -7
- package/docs/interfaces/ModelItemLabelPluginParametersType.html +0 -3
- package/docs/interfaces/ModelMakerPluginType.BoxItemObjectData.html +0 -17
- package/docs/interfaces/ModelMakerPluginType.EventMap.html +0 -18
- package/docs/interfaces/ModelMakerPluginType.ModelMakerPluginConfig.html +0 -19
- package/docs/interfaces/ModelMakerPluginType.PrismItemObjectData.html +0 -23
- package/docs/interfaces/ModelMakerPluginType.ServerBaseItem.html +0 -11
- package/docs/interfaces/ModelMakerPluginType.ServerBoxItem.html +0 -10
- package/docs/interfaces/ModelMakerPluginType.ServerData.html +0 -3
- package/docs/interfaces/ModelMakerPluginType.ServerPrismItem.html +0 -10
- package/docs/interfaces/ModelMakerPluginType.ServerTrianglesItem.html +0 -10
- package/docs/interfaces/ModelMakerPluginType.State.html +0 -8
- package/docs/interfaces/ModelMakerPluginType.TrianglesItemObjectData.html +0 -11
- package/docs/interfaces/ModelRoomLabelPluginData.html +0 -2
- package/docs/interfaces/ModelTVVideoPluginData.html +0 -5
- package/docs/interfaces/ModelTVVideoPluginExportType.html +0 -4
- package/docs/interfaces/ModelTVVideoPluginParameterType.html +0 -3
- package/docs/interfaces/ModelViewPluginExportType.html +0 -8
- package/docs/interfaces/Object3DHelperState.html +0 -4
- package/docs/interfaces/ObjectHelperControllers.html +0 -5
- package/docs/interfaces/PaintBrushAction.html +0 -14
- package/docs/interfaces/PaintBrushConfigs.html +0 -8
- package/docs/interfaces/PaintBrushState.html +0 -6
- package/docs/interfaces/PanoCursorRaycasterPluginExportType.html +0 -16
- package/docs/interfaces/PanoCursorRaycasterPluginParameterType.html +0 -1
- package/docs/interfaces/PanoMeasureParameterType.html +0 -21
- package/docs/interfaces/PanoMeasurePluginLineJson.html +0 -4
- package/docs/interfaces/PanoMeasurePluginOpenParameter.html +0 -4
- package/docs/interfaces/PanoMeasurePluginPointJson.html +0 -3
- package/docs/interfaces/PanoMeasurePluginPolylineJson.html +0 -7
- package/docs/interfaces/PanoRulerPluginExportType.html +0 -6
- package/docs/interfaces/PanoRulerPluginOptions.html +0 -3
- package/docs/interfaces/PanoRulerPluginParameterType.html +0 -4
- package/docs/interfaces/PanoRulerProPluginExportType.html +0 -5
- package/docs/interfaces/PanoRulerProPluginOptions.html +0 -3
- package/docs/interfaces/PanoRulerProPluginParameterType.html +0 -3
- package/docs/interfaces/PanoRulerProPluginState.html +0 -4
- package/docs/interfaces/PanoSpatialTagPluginContentEvent.html +0 -1
- package/docs/interfaces/PanoSpatialTagPluginContentReplacement.html +0 -1
- package/docs/interfaces/PanoSpatialTagPluginData.html +0 -7
- package/docs/interfaces/PanoSpatialTagPluginDataElement.html +0 -6
- package/docs/interfaces/PanoSpatialTagPluginExportType.html +0 -9
- package/docs/interfaces/PanoSpatialTagPluginOriginElement.html +0 -6
- package/docs/interfaces/PanoSpatialTagPluginParameterType.html +0 -9
- package/docs/interfaces/PanoSpatialTagPluginPointElement.html +0 -7
- package/docs/interfaces/PanoSpatialTagPluginTagElement.html +0 -6
- package/docs/interfaces/PanoVideoPluginType.LoadParams.html +0 -3
- package/docs/interfaces/PanoVideoPluginType.PanoVideoItem.html +0 -8
- package/docs/interfaces/PanoVideoPluginType.PluginData.html +0 -2
- package/docs/interfaces/PanoVideoPluginType.PluginEventMap.html +0 -15
- package/docs/interfaces/PanoVideoPluginType.PluginState.html +0 -2
- package/docs/interfaces/PanoVideoPluginType.VideoItem.html +0 -14
- package/docs/interfaces/PanoVideoPluginType.VideoMeshParams.html +0 -13
- package/docs/interfaces/PlaybackController.html +0 -4
- package/docs/interfaces/PlaybackManager.html +0 -2
- package/docs/interfaces/PlaybackSession.html +0 -5
- package/docs/interfaces/PluginEventMap.html +0 -16
- package/docs/interfaces/Point.html +0 -4
- package/docs/interfaces/ProgressBarEvents.html +0 -7
- package/docs/interfaces/Room.html +0 -5
- package/docs/interfaces/RoomInfo.html +0 -3
- package/docs/interfaces/RoomLabel.html +0 -16
- package/docs/interfaces/RoomRules.html +0 -1
- package/docs/interfaces/Rooms.html +0 -1
- package/docs/interfaces/Scissor.html +0 -13
- package/docs/interfaces/SculptConfig.html +0 -19
- package/docs/interfaces/State.html +0 -7
- package/docs/interfaces/StyledFloorplan.html +0 -3
- package/docs/interfaces/StyledFloorplanImage.html +0 -6
- package/docs/interfaces/StyledFloorplanRoomLabel.html +0 -8
- package/docs/interfaces/TagCacheInterface.html +0 -9
- package/docs/interfaces/TagConfig.html +0 -189
- package/docs/interfaces/TagGLTFObjectGroup.html +0 -3
- package/docs/interfaces/TagIconAnimationConfig.html +0 -7
- package/docs/interfaces/TagIconUrl.html +0 -22
- package/docs/interfaces/TagObjectGroup.html +0 -3
- package/docs/interfaces/TagState.html +0 -3
- package/docs/interfaces/TagStyle.html +0 -17
- package/docs/interfaces/Tags.html +0 -8
- package/docs/interfaces/TemporaryState.html +0 -2
- package/docs/interfaces/TraceManager.html +0 -6
- package/docs/interfaces/TracePoint.html +0 -3
- package/docs/interfaces/Util.AnimeInstance.html +0 -14
- package/docs/interfaces/Util.BlinkAnimeOptions.html +0 -21
- package/docs/interfaces/Util.EventHandlerConfig.html +0 -21
- package/docs/interfaces/Util.FiveDomEvent.html +0 -7
- package/docs/interfaces/Util.FiveDomEventMap.html +0 -20
- package/docs/interfaces/Util.LegacyMouseGroupParameter.html +0 -4
- package/docs/interfaces/Util.MagnifierParameter.html +0 -13
- package/docs/interfaces/Util.MouseGroupParameter.html +0 -4
- package/docs/interfaces/Util.ObjectInitialState.html +0 -9
- package/docs/interfaces/Util.PointIntersection.html +0 -21
- package/docs/interfaces/Util.PointSelectorHelperConfig.html +0 -6
- package/docs/interfaces/Util.ReBlinkAnimeOptions.html +0 -27
- package/docs/modules/AreaMakerPluginType.html +0 -17
- package/docs/modules/CruisePluginTypes.html +0 -14
- package/docs/modules/CurrentPanoImagePluginType.html +0 -6
- package/docs/modules/DigitalPerformanceV2.html +0 -22
- package/docs/modules/GuideLineItem.html +0 -2
- package/docs/modules/GuideLineModeItem.html +0 -3
- package/docs/modules/GuideLinePluginType.html +0 -25
- package/docs/modules/ModelMakerPluginType.html +0 -22
- package/docs/modules/PanoVideoPluginType.html +0 -8
- package/docs/modules/SculptData.html +0 -9
- package/docs/modules/SculptType.html +0 -2
- package/docs/modules/Util.html +0 -91
- package/docs/modules/Util.sculpt.html +0 -27
- package/docs/modules.html +0 -382
- package/docs/types/AddObject3DHelperConfig.html +0 -19
- package/docs/types/AreaMakerPluginType.AreaMakerItemEventMap.html +0 -7
- package/docs/types/AreaMakerPluginType.ItemRenderer.html +0 -1
- package/docs/types/AreaMakerPluginType.PluginData.html +0 -2
- package/docs/types/AreaMakerPluginType.ServerData.html +0 -2
- package/docs/types/ArrayPosition.html +0 -1
- package/docs/types/AudioAppearance.html +0 -1
- package/docs/types/BoxTag.html +0 -2
- package/docs/types/CSS3DRenderExportType.html +0 -1
- package/docs/types/CSS3DRenderPluginExportType.html +0 -1
- package/docs/types/CSS3DRenderPluginParameterType.html +0 -1
- package/docs/types/CanonicalMovementTrackPlan.html +0 -1
- package/docs/types/ClassFunctionParameters.html +0 -1
- package/docs/types/Color.html +0 -1
- package/docs/types/ContentTypeConfigKey.html +0 -1
- package/docs/types/ContentTypeConfigKeySplit.html +0 -1
- package/docs/types/ContentTypeMap.html +0 -1
- package/docs/types/Create3DDomContainerReturnType.html +0 -1
- package/docs/types/Create3DElementReturnType.html +0 -1
- package/docs/types/CruisePluginExportType.html +0 -1
- package/docs/types/CruisePluginTypes.CruiseData.html +0 -6
- package/docs/types/CruisePluginTypes.MoveEffect.html +0 -1
- package/docs/types/CurrentPanoImagePluginExportType.html +0 -1
- package/docs/types/DeprecatedMediaPlaneProperty.html +0 -3
- package/docs/types/DeprecatedTagProperty.html +0 -3
- package/docs/types/DigitalPerformancePluginExportInterface.html +0 -1
- package/docs/types/DigitalPerformancePluginParamsInterface.html +0 -1
- package/docs/types/DigitalPerformanceV2.CameraCoordinateSpace.html +0 -7
- package/docs/types/DigitalPerformanceV2.CameraTransition.html +0 -7
- package/docs/types/DigitalPerformanceV2.DigitalPerformanceV2PluginExportInterface.html +0 -1
- package/docs/types/DigitalPerformanceV2.DigitalPerformanceV2PluginParamsInterface.html +0 -1
- package/docs/types/DigitalPerformanceV2.V2ProgressListener.html +0 -1
- package/docs/types/Direction-1.html +0 -1
- package/docs/types/Direction4.html +0 -1
- package/docs/types/ElementRenderer.html +0 -2
- package/docs/types/FireModelType.html +0 -5
- package/docs/types/FireSequenceKind.html +0 -3
- package/docs/types/FireSpreadBounds.html +0 -2
- package/docs/types/FloorplanAffineTransform.html +0 -1
- package/docs/types/FloorplanGuidePluginParameterType.html +0 -1
- package/docs/types/FloorplanGuidePluginReturnType.html +0 -1
- package/docs/types/FloorplanRuleLabels.html +0 -2
- package/docs/types/FloorplanServerAffineTransform.html +0 -1
- package/docs/types/FloorplanServerRuleLabels.html +0 -1
- package/docs/types/GuideLinePluginExportType.html +0 -1
- package/docs/types/GuideLinePluginType.GuideLineItem.html +0 -2
- package/docs/types/GuideLinePluginType.GuideLineItemEventMap.html +0 -1
- package/docs/types/GuideLinePluginType.GuideLineModeItemMode.html +0 -1
- package/docs/types/GuideLinePluginType.GuideLineStyle.html +0 -2
- package/docs/types/GuideLinePluginType.ModelGuideLineTag.html +0 -2
- package/docs/types/GuideLinePluginType.PathItem.html +0 -2
- package/docs/types/GuideLinePluginType.PluginData.html +0 -2
- package/docs/types/GuideLinePluginType.RouteConfig.html +0 -4
- package/docs/types/HelperEventMap.html +0 -1
- package/docs/types/InternalHelperEventMap.html +0 -1
- package/docs/types/KeyframeType.html +0 -1
- package/docs/types/MapviewFloorplanPluginParameterType.html +0 -1
- package/docs/types/MapviewFloorplanPluginReturnType.html +0 -1
- package/docs/types/MaskPosition.html +0 -3
- package/docs/types/MaskTag.html +0 -2
- package/docs/types/MeasureEndReason.html +0 -1
- package/docs/types/MeasurePluginConfig.html +0 -10
- package/docs/types/MeasurePluginEventMap.html +0 -1
- package/docs/types/MediaData.html +0 -2
- package/docs/types/MediaOperations.html +0 -1
- package/docs/types/MediaStore.html +0 -1
- package/docs/types/ModelEntryDoorGuidePluginParameterType.html +0 -1
- package/docs/types/ModelFloorplanPluginParameterType.html +0 -1
- package/docs/types/ModelFloorplanPluginReturnType.html +0 -1
- package/docs/types/ModelId.html +0 -1
- package/docs/types/ModelMakerPluginType.ElementRenderer.html +0 -1
- package/docs/types/ModelMakerPluginType.ItemType.html +0 -2
- package/docs/types/ModelMakerPluginType.MarkerItem.html +0 -1
- package/docs/types/ModelMakerPluginType.ServerItem.html +0 -2
- package/docs/types/ModelMakerPluginType.TagOcclusionScope.html +0 -2
- package/docs/types/ModelMakerPluginType.TagOcclusionScopeConfig.html +0 -2
- package/docs/types/ModelRoomLabelPluginParameters.html +0 -1
- package/docs/types/ModelRoomLabelPluginReturnType.html +0 -1
- package/docs/types/MoveArgs.html +0 -2
- package/docs/types/MoveOpts.html +0 -2
- package/docs/types/MovementConfig.html +0 -1
- package/docs/types/MovementPosition.html +0 -1
- package/docs/types/MovementTrackClassification.html +0 -1
- package/docs/types/MovementTrackConflictReason.html +0 -1
- package/docs/types/MovementTrackProjection.html +0 -1
- package/docs/types/Object3DHelperEventMap.html +0 -1
- package/docs/types/ObjectFit.html +0 -1
- package/docs/types/PaintBrushEventMap.html +0 -1
- package/docs/types/PanoCompassPluginData.html +0 -1
- package/docs/types/PanoCompassPluginExportType.html +0 -1
- package/docs/types/PanoCompassPluginParameterType.html +0 -1
- package/docs/types/PanoFloorplanRadarPluginParameterType.html +0 -1
- package/docs/types/PanoFloorplanRadarPluginReturnType.html +0 -1
- package/docs/types/PanoIndex.html +0 -1
- package/docs/types/PanoMeasurePluginEvent.html +0 -1
- package/docs/types/PanoMeasureReturnType.html +0 -1
- package/docs/types/PanoSpatialTagPluginId.html +0 -1
- package/docs/types/PanoTagPluginExportInterface.html +0 -1
- package/docs/types/PanoTagPluginParamsInterface.html +0 -1
- package/docs/types/PanoVideoPluginParameterType.html +0 -1
- package/docs/types/PanoVideoPluginReturnType.html +0 -1
- package/docs/types/PickTagContentTypeInContentTypeConfigKey.html +0 -2
- package/docs/types/PipelinePluginParameterType.html +0 -1
- package/docs/types/PipelinePluginReturnType.html +0 -1
- package/docs/types/PlaneTag.html +0 -2
- package/docs/types/Point2DTag.html +0 -2
- package/docs/types/Point3DTag.html +0 -2
- package/docs/types/PointAction.html +0 -1
- package/docs/types/PointTagInstance.html +0 -1
- package/docs/types/PolygonPosition.html +0 -3
- package/docs/types/PolygonTag.html +0 -2
- package/docs/types/Position.html +0 -1
- package/docs/types/PositionFrom.html +0 -1
- package/docs/types/ProgressListener.html +0 -1
- package/docs/types/RotateArgs.html +0 -2
- package/docs/types/RotateOpts.html +0 -2
- package/docs/types/RuleLabelsKey.html +0 -1
- package/docs/types/RuleLabelsValue.html +0 -1
- package/docs/types/ScaleCallback.html +0 -1
- package/docs/types/ScalePosition.html +0 -3
- package/docs/types/SculptData.BoxData.html +0 -1
- package/docs/types/SculptData.CircleData.html +0 -1
- package/docs/types/SculptData.CylinderData.html +0 -1
- package/docs/types/SculptData.PointData.html +0 -1
- package/docs/types/SculptData.PolygonData.html +0 -1
- package/docs/types/SculptData.PolylineData.html +0 -1
- package/docs/types/SculptData.PrismData.html +0 -1
- package/docs/types/SculptData.RectangleData.html +0 -1
- package/docs/types/SculptType.Theme.html +0 -10
- package/docs/types/StateType.html +0 -1
- package/docs/types/StickType.html +0 -1
- package/docs/types/Tag.html +0 -17
- package/docs/types/Tag2D.html +0 -2
- package/docs/types/Tag3D.html +0 -2
- package/docs/types/TagClickParams.html +0 -1
- package/docs/types/TagConfigByKey.html +0 -1
- package/docs/types/TagContentType.html +0 -1
- package/docs/types/TagContentTypeMapping.html +0 -1
- package/docs/types/TagDimensionType.html +0 -1
- package/docs/types/TagElement.html +0 -2
- package/docs/types/TagEvents.html +0 -1
- package/docs/types/TagGLTFObject.html +0 -1
- package/docs/types/TagHooks.html +0 -1
- package/docs/types/TagId.html +0 -1
- package/docs/types/TagInstance.html +0 -1
- package/docs/types/TagPlacement.html +0 -5
- package/docs/types/TagPointType.html +0 -2
- package/docs/types/TagRendererMap.html +0 -1
- package/docs/types/TopviewFloorplanPluginParameterType.html +0 -1
- package/docs/types/TopviewFloorplanPluginReturnType.html +0 -1
- package/docs/types/TrackPoint.html +0 -1
- package/docs/types/Util.ActionIfNoIntersection.html +0 -1
- package/docs/types/Util.AdherePoint.html +0 -2
- package/docs/types/Util.PointSelectorConfig.html +0 -1
- package/docs/types/Util.SupportedTarget.html +0 -2
- package/docs/types/Util.Target.html +0 -2
- package/docs/types/Util.ThreeObject.html +0 -2
- package/docs/types/WorkCode.html +0 -1
- package/docs/variables/DigitalPerformanceV2.DEFAULT_DIGITAL_PERFORMANCE_NAME_MAX_LENGTH.html +0 -1
- package/docs/variables/FIRE_ACTION_DURATION_MS.html +0 -2
- package/docs/variables/FIRE_SPREAD_SPEED.html +0 -2
- package/docs/variables/FLOOR_TYPE_MAP.html +0 -2
- package/docs/variables/MODEL_SCALE_RANGE.html +0 -2
- package/docs/variables/MOVEMENT_OCCURRENCE_EPSILON.html +0 -1
- package/docs/variables/MOVEMENT_POSITION_EPSILON.html +0 -1
- package/docs/variables/MOVEMENT_SCHEMA_VERSION.html +0 -1
- package/docs/variables/PLUGIN.html +0 -1
- package/docs/variables/ROOM_FETILE_TYPE_MAP.html +0 -2
- package/docs/variables/ROOM_TYPE_MAP.html +0 -2
- package/docs/variables/Util.ANIME_PRESETS.html +0 -2
- package/docs/variables/Util.CURRENT_PANO_IMAGE_DEFAULT_IMAGE.html +0 -2
- package/docs/variables/Util.DEFAULT_ANIME_CONFIG.html +0 -2
- package/docs/variables/Util.DEFAULT_STATIC_PREFIX.html +0 -2
- package/docs/variables/Util.DNALOGEL_DEFAULT_ASSETS.html +0 -2
- package/docs/variables/Util.ENTRY_DOOR_DEFAULT_IMAGE.html +0 -2
- package/docs/variables/Util.FLOORPLAN_DEFAULT_IMAGE.html +0 -2
- package/docs/variables/Util.GUIDELINE_DEFAULT_ARROW_TEXTURE.html +0 -2
- package/docs/variables/Util.GUIDELINE_WHITE_ARROW_TEXTURE.html +0 -2
- package/docs/variables/Util.MODEL_CHASSIS_COMPASS_DEFAULT_MODEL.html +0 -2
- package/docs/variables/Util.MODEL_ENTRY_DOOR_GUIDE_PLUGIN_DEFAULT_MODEL.html +0 -2
- package/docs/variables/Util.PANO_COMPASS_DEFAULT_IMAGE.html +0 -2
- package/docs/variables/Util.PANO_SPATIAL_TAG_BLUR_IMAGE.html +0 -2
- package/docs/variables/Util.PANO_TAG_DEFAULT_LINK_ICON.html +0 -2
- package/docs/variables/defaultGlobalConfig.html +0 -1
- package/docs/variables/itemLabelPluginServerParams.html +0 -1
- package/docs/variables/modelItemLabelPluginServerParams.html +0 -1
- package/docs/variables/modelRoomLabelPluginServerParams.html +0 -1
- package/libs/AreaMakerPlugin/Controller.d.ts +0 -96
- package/libs/AreaMakerPlugin/Controller.js +0 -392
- package/libs/AreaMakerPlugin/index.d.ts +0 -4
- package/libs/AreaMakerPlugin/index.js +0 -91
- package/libs/AreaMakerPlugin/typing.d.ts +0 -167
- package/libs/AreaMakerPlugin/typing.js +0 -1
- package/libs/AreaMakerPlugin/utils/Item.d.ts +0 -137
- package/libs/AreaMakerPlugin/utils/Item.js +0 -365
- package/libs/CSS3DRenderPlugin/Controller.d.ts +0 -87
- package/libs/CSS3DRenderPlugin/Controller.js +0 -192
- package/libs/CSS3DRenderPlugin/index.d.ts +0 -6
- package/libs/CSS3DRenderPlugin/index.js +0 -76
- package/libs/CSS3DRenderPlugin/typing.d.ts +0 -26
- package/libs/CSS3DRenderPlugin/typing.js +0 -1
- package/libs/CSS3DRenderPlugin/utils/generateBehindFiveElement.d.ts +0 -3
- package/libs/CSS3DRenderPlugin/utils/generateBehindFiveElement.js +0 -32
- package/libs/CSS3DRenderPlugin/utils/getAllCSS3DObject.d.ts +0 -3
- package/libs/CSS3DRenderPlugin/utils/getAllCSS3DObject.js +0 -12
- package/libs/CSS3DRenderPlugin/utils/index.d.ts +0 -3
- package/libs/CSS3DRenderPlugin/utils/index.js +0 -11
- package/libs/CSS3DRenderPlugin/utils/positionToVector3.d.ts +0 -1
- package/libs/CSS3DRenderPlugin/utils/positionToVector3.js +0 -7
- package/libs/CSS3DRenderPlugin/utils/random.d.ts +0 -1
- package/libs/CSS3DRenderPlugin/utils/random.js +0 -6
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DGroup.d.ts +0 -21
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DGroup.js +0 -55
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DObject.d.ts +0 -55
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DObject.js +0 -182
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DRender.d.ts +0 -184
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DRender.js +0 -368
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DRenderer.d.ts +0 -1
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DRenderer.js +0 -8
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DScene.d.ts +0 -12
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DScene.js +0 -40
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DSprite.d.ts +0 -5
- package/libs/CSS3DRenderPlugin/utils/three/CSS3DSprite.js +0 -15
- package/libs/CameraMovementPlugin/CameraMovementPlugin.d.ts +0 -7
- package/libs/CameraMovementPlugin/CameraMovementPlugin.js +0 -99
- package/libs/CameraMovementPlugin/index.d.ts +0 -5
- package/libs/CameraMovementPlugin/index.js +0 -14
- package/libs/CameraMovementPlugin/typing.d.ts +0 -68
- package/libs/CameraMovementPlugin/typing.js +0 -5
- package/libs/CruisePlugin/BaseController.d.ts +0 -165
- package/libs/CruisePlugin/BaseController.js +0 -287
- package/libs/CruisePlugin/Move.d.ts +0 -56
- package/libs/CruisePlugin/Move.js +0 -487
- package/libs/CruisePlugin/Work.d.ts +0 -127
- package/libs/CruisePlugin/Work.js +0 -907
- package/libs/CruisePlugin/index.d.ts +0 -12
- package/libs/CruisePlugin/index.js +0 -359
- package/libs/CruisePlugin/typing/index.js +0 -6
- package/libs/CruisePlugin/typing.d.ts +0 -157
- package/libs/CruisePlugin/typing.js +0 -1
- package/libs/CruisePlugin/utils/coordinatesAngle.d.ts +0 -28
- package/libs/CruisePlugin/utils/coordinatesAngle.js +0 -14
- package/libs/CruisePlugin/utils/coordinatesToVector.d.ts +0 -7
- package/libs/CruisePlugin/utils/coordinatesToVector.js +0 -15
- package/libs/CruisePlugin/utils/formatRad.js +0 -7
- package/libs/CruisePlugin/utils/getFiveStateOnCurve.d.ts +0 -11
- package/libs/CruisePlugin/utils/getFiveStateOnCurve.js +0 -11
- package/libs/CruisePlugin/utils/linerValue.js +0 -7
- package/libs/CruisePlugin/utils/safeCall.d.ts +0 -1
- package/libs/CruisePlugin/utils/safeCall.js +0 -28
- package/libs/CruisePlugin/utils/sleep.d.ts +0 -1
- package/libs/CruisePlugin/utils/sleep.js +0 -10
- package/libs/CurrentPanoImagePlugin/Controller.d.ts +0 -103
- package/libs/CurrentPanoImagePlugin/Controller.js +0 -336
- package/libs/CurrentPanoImagePlugin/index.d.ts +0 -7
- package/libs/CurrentPanoImagePlugin/index.js +0 -81
- package/libs/CurrentPanoImagePlugin/typings.d.ts +0 -58
- package/libs/CurrentPanoImagePlugin/typings.js +0 -1
- package/libs/DigitalPerformancePlugin/animation-script-adapter.d.ts +0 -20
- package/libs/DigitalPerformancePlugin/animation-script-adapter.js +0 -234
- package/libs/DigitalPerformancePlugin/controller/index.d.ts +0 -232
- package/libs/DigitalPerformancePlugin/controller/index.js +0 -847
- package/libs/DigitalPerformancePlugin/core/DigitalHuman.d.ts +0 -96
- package/libs/DigitalPerformancePlugin/core/DigitalHuman.js +0 -333
- package/libs/DigitalPerformancePlugin/core/DigitalPerformanceNameplate.d.ts +0 -115
- package/libs/DigitalPerformancePlugin/core/DigitalPerformanceNameplate.js +0 -266
- package/libs/DigitalPerformancePlugin/core/DigitalPlayground.d.ts +0 -47
- package/libs/DigitalPerformancePlugin/core/DigitalPlayground.js +0 -184
- package/libs/DigitalPerformancePlugin/core/DigitalStateMachine.d.ts +0 -152
- package/libs/DigitalPerformancePlugin/core/DigitalStateMachine.js +0 -153
- package/libs/DigitalPerformancePlugin/core/Trace.d.ts +0 -9
- package/libs/DigitalPerformancePlugin/core/Trace.js +0 -23
- package/libs/DigitalPerformancePlugin/index.d.ts +0 -16
- package/libs/DigitalPerformancePlugin/index.js +0 -36
- package/libs/DigitalPerformancePlugin/mock.d.ts +0 -76
- package/libs/DigitalPerformancePlugin/mock.js +0 -379
- package/libs/DigitalPerformancePlugin/movement-track-classifier.d.ts +0 -52
- package/libs/DigitalPerformancePlugin/movement-track-classifier.js +0 -227
- package/libs/DigitalPerformancePlugin/transform-script-data.d.ts +0 -7
- package/libs/DigitalPerformancePlugin/transform-script-data.js +0 -72
- package/libs/DigitalPerformancePlugin/typings/index.d.ts +0 -87
- package/libs/DigitalPerformancePlugin/typings/index.js +0 -1
- package/libs/DigitalPerformanceV2Plugin/controller/index.d.ts +0 -401
- package/libs/DigitalPerformanceV2Plugin/controller/index.js +0 -874
- package/libs/DigitalPerformanceV2Plugin/core/CameraDirector.d.ts +0 -61
- package/libs/DigitalPerformanceV2Plugin/core/CameraDirector.js +0 -101
- package/libs/DigitalPerformanceV2Plugin/core/CameraSampler.d.ts +0 -53
- package/libs/DigitalPerformanceV2Plugin/core/CameraSampler.js +0 -91
- package/libs/DigitalPerformanceV2Plugin/core/CameraTrack.d.ts +0 -21
- package/libs/DigitalPerformanceV2Plugin/core/CameraTrack.js +0 -32
- package/libs/DigitalPerformanceV2Plugin/core/FiveModelCameraBridge.d.ts +0 -39
- package/libs/DigitalPerformanceV2Plugin/core/FiveModelCameraBridge.js +0 -72
- package/libs/DigitalPerformanceV2Plugin/core/PerformanceClock.d.ts +0 -55
- package/libs/DigitalPerformanceV2Plugin/core/PerformanceClock.js +0 -98
- package/libs/DigitalPerformanceV2Plugin/core/Playground.d.ts +0 -112
- package/libs/DigitalPerformanceV2Plugin/core/Playground.js +0 -219
- package/libs/DigitalPerformanceV2Plugin/core/shared.d.ts +0 -4
- package/libs/DigitalPerformanceV2Plugin/core/shared.js +0 -12
- package/libs/DigitalPerformanceV2Plugin/index/index.js +0 -15
- package/libs/DigitalPerformanceV2Plugin/index.d.ts +0 -11
- package/libs/DigitalPerformanceV2Plugin/index.js +0 -29
- package/libs/DigitalPerformanceV2Plugin/typings/index.d.ts +0 -124
- package/libs/DigitalPerformanceV2Plugin/typings/index.js +0 -1
- package/libs/FireScenePlugin/FireControl.d.ts +0 -153
- package/libs/FireScenePlugin/FireControl.js +0 -450
- package/libs/FireScenePlugin/SequencePlayer.d.ts +0 -41
- package/libs/FireScenePlugin/SequencePlayer.js +0 -114
- package/libs/FireScenePlugin/constants.d.ts +0 -28
- package/libs/FireScenePlugin/constants.js +0 -26
- package/libs/FireScenePlugin/fire/config.d.ts +0 -10
- package/libs/FireScenePlugin/fire/config.js +0 -22
- package/libs/FireScenePlugin/fire/index.d.ts +0 -6
- package/libs/FireScenePlugin/fire/index.js +0 -13
- package/libs/FireScenePlugin/fire/managers/FireManager.d.ts +0 -76
- package/libs/FireScenePlugin/fire/managers/FireManager.js +0 -236
- package/libs/FireScenePlugin/fire/type.d.ts +0 -51
- package/libs/FireScenePlugin/fire/type.js +0 -1
- package/libs/FireScenePlugin/index.d.ts +0 -6
- package/libs/FireScenePlugin/index.js +0 -99
- package/libs/FireScenePlugin/smoke/config.d.ts +0 -8
- package/libs/FireScenePlugin/smoke/config.js +0 -18
- package/libs/FireScenePlugin/smoke/index.d.ts +0 -1
- package/libs/FireScenePlugin/smoke/index.js +0 -10
- package/libs/FireScenePlugin/smoke/managers/NormalSmokeManager.d.ts +0 -49
- package/libs/FireScenePlugin/smoke/managers/NormalSmokeManager.js +0 -136
- package/libs/FireScenePlugin/smoke/managers/SmokeManager.d.ts +0 -89
- package/libs/FireScenePlugin/smoke/managers/SmokeManager.js +0 -137
- package/libs/FireScenePlugin/typing.d.ts +0 -55
- package/libs/FireScenePlugin/typing.js +0 -1
- package/libs/FireScenePlugin/utils/areaBounds.d.ts +0 -14
- package/libs/FireScenePlugin/utils/areaBounds.js +0 -30
- package/libs/FireScenePlugin/utils/particle.d.ts +0 -5
- package/libs/FireScenePlugin/utils/particle.js +0 -7
- package/libs/FireScenePlugin/utils/particleTexture.d.ts +0 -21
- package/libs/FireScenePlugin/utils/particleTexture.js +0 -40
- package/libs/FireScenePlugin/utils/radialSpread.d.ts +0 -54
- package/libs/FireScenePlugin/utils/radialSpread.js +0 -75
- package/libs/FireScenePlugin/utils/spread.d.ts +0 -17
- package/libs/FireScenePlugin/utils/spread.js +0 -17
- package/libs/GuideLinePlugin/Components/Tag.js +0 -293
- package/libs/GuideLinePlugin/Components/Tag.svelte.d.ts +0 -1
- package/libs/GuideLinePlugin/Controller.d.ts +0 -98
- package/libs/GuideLinePlugin/Controller.js +0 -579
- package/libs/GuideLinePlugin/GuideLineItem/index.js +0 -139
- package/libs/GuideLinePlugin/GuideLineItem.d.ts +0 -36
- package/libs/GuideLinePlugin/GuideLineItem.js +0 -351
- package/libs/GuideLinePlugin/GuideLineModeItem/index.js +0 -545
- package/libs/GuideLinePlugin/GuideLineModeItem.d.ts +0 -152
- package/libs/GuideLinePlugin/GuideLineModeItem.js +0 -333
- package/libs/GuideLinePlugin/index.d.ts +0 -10
- package/libs/GuideLinePlugin/index.js +0 -355
- package/libs/GuideLinePlugin/typing.d.ts +0 -199
- package/libs/GuideLinePlugin/typing.js +0 -1
- package/libs/GuideLinePlugin/utils/createLineGeometry.d.ts +0 -36
- package/libs/GuideLinePlugin/utils/createLineGeometry.js +0 -115
- package/libs/GuideLinePlugin/utils/createPath.d.ts +0 -3
- package/libs/GuideLinePlugin/utils/createPath.js +0 -34
- package/libs/GuideLinePlugin/utils/dataFormatter.d.ts +0 -2
- package/libs/GuideLinePlugin/utils/dataFormatter.js +0 -6
- package/libs/GuideLinePlugin/utils/getArrowMaterial.d.ts +0 -4
- package/libs/GuideLinePlugin/utils/getArrowMaterial.js +0 -13
- package/libs/GuideLinePlugin/utils/getPoint.d.ts +0 -3
- package/libs/GuideLinePlugin/utils/getPoint.js +0 -22
- package/libs/GuideLinePlugin/utils/index.d.ts +0 -6
- package/libs/GuideLinePlugin/utils/index.js +0 -6
- package/libs/ItemLabelPlugin/ItemLabelComponent.js +0 -321
- package/libs/ItemLabelPlugin/ItemLabelComponent.svelte.d.ts +0 -1
- package/libs/ItemLabelPlugin/ItemLabelItem.js +0 -211
- package/libs/ItemLabelPlugin/ItemLabelItem.svelte.d.ts +0 -1
- package/libs/ItemLabelPlugin/Plugin.d.ts +0 -4
- package/libs/ItemLabelPlugin/Plugin.js +0 -89
- package/libs/ItemLabelPlugin/events.type.d.ts +0 -9
- package/libs/ItemLabelPlugin/events.type.js +0 -1
- package/libs/ItemLabelPlugin/index.d.ts +0 -9
- package/libs/ItemLabelPlugin/index.js +0 -24
- package/libs/ItemLabelPlugin/typings.d.ts +0 -65
- package/libs/ItemLabelPlugin/typings.js +0 -4
- package/libs/ItemLabelPlugin/utils/getLabelTransform.d.ts +0 -1
- package/libs/ItemLabelPlugin/utils/getLabelTransform.js +0 -4
- package/libs/ItemLabelPlugin/utils/getStrokeLength.d.ts +0 -5
- package/libs/ItemLabelPlugin/utils/getStrokeLength.js +0 -16
- package/libs/ItemLabelPlugin/utils/isImpacted.d.ts +0 -8
- package/libs/ItemLabelPlugin/utils/isImpacted.js +0 -10
- package/libs/ItemLabelPlugin/utils/parseData.d.ts +0 -3
- package/libs/ItemLabelPlugin/utils/parseData.js +0 -21
- package/libs/ItemLabelPlugin/utils/transform2RenderData.d.ts +0 -3
- package/libs/ItemLabelPlugin/utils/transform2RenderData.js +0 -21
- package/libs/MeasurePlugin/Controller.d.ts +0 -167
- package/libs/MeasurePlugin/Controller.js +0 -871
- package/libs/MeasurePlugin/index.d.ts +0 -17
- package/libs/MeasurePlugin/index.js +0 -92
- package/libs/MeasurePlugin/utils/MeasureMesh.d.ts +0 -29
- package/libs/MeasurePlugin/utils/MeasureMesh.js +0 -124
- package/libs/MeasurePlugin/utils/validatePolygon.d.ts +0 -2
- package/libs/MeasurePlugin/utils/validatePolygon.js +0 -22
- package/libs/ModelChassisCompassPlugin/Plugin.d.ts +0 -19
- package/libs/ModelChassisCompassPlugin/Plugin.js +0 -148
- package/libs/ModelChassisCompassPlugin/index.d.ts +0 -4
- package/libs/ModelChassisCompassPlugin/index.js +0 -80
- package/libs/ModelEntryDoorGuidePlugin/Plugin.d.ts +0 -27
- package/libs/ModelEntryDoorGuidePlugin/Plugin.js +0 -156
- package/libs/ModelEntryDoorGuidePlugin/index.d.ts +0 -4
- package/libs/ModelEntryDoorGuidePlugin/index.js +0 -81
- package/libs/ModelItemLabelPlugin/ItemLabelComponent.js +0 -248
- package/libs/ModelItemLabelPlugin/ItemLabelComponent.svelte.d.ts +0 -1
- package/libs/ModelItemLabelPlugin/ItemLabelItem.js +0 -94
- package/libs/ModelItemLabelPlugin/ItemLabelItem.svelte.d.ts +0 -1
- package/libs/ModelItemLabelPlugin/ModelItemLabelPlugin.d.ts +0 -4
- package/libs/ModelItemLabelPlugin/ModelItemLabelPlugin.js +0 -84
- package/libs/ModelItemLabelPlugin/events.type.d.ts +0 -9
- package/libs/ModelItemLabelPlugin/events.type.js +0 -1
- package/libs/ModelItemLabelPlugin/index.d.ts +0 -9
- package/libs/ModelItemLabelPlugin/index.js +0 -20
- package/libs/ModelItemLabelPlugin/typings.d.ts +0 -56
- package/libs/ModelItemLabelPlugin/typings.js +0 -4
- package/libs/ModelItemLabelPlugin/utils/parseData.d.ts +0 -3
- package/libs/ModelItemLabelPlugin/utils/parseData.js +0 -19
- package/libs/ModelMakerPlugin/Controller.d.ts +0 -194
- package/libs/ModelMakerPlugin/Controller.js +0 -652
- package/libs/ModelMakerPlugin/index.d.ts +0 -9
- package/libs/ModelMakerPlugin/index.js +0 -112
- package/libs/ModelMakerPlugin/item/baseItem.d.ts +0 -68
- package/libs/ModelMakerPlugin/item/baseItem.js +0 -128
- package/libs/ModelMakerPlugin/item/boxItem.d.ts +0 -20
- package/libs/ModelMakerPlugin/item/boxItem.js +0 -102
- package/libs/ModelMakerPlugin/item/polygonItem.d.ts +0 -19
- package/libs/ModelMakerPlugin/item/polygonItem.js +0 -102
- package/libs/ModelMakerPlugin/item/prismItem.d.ts +0 -18
- package/libs/ModelMakerPlugin/item/prismItem.js +0 -111
- package/libs/ModelMakerPlugin/typings/config.d.ts +0 -26
- package/libs/ModelMakerPlugin/typings/config.js +0 -1
- package/libs/ModelMakerPlugin/typings/data.d.ts +0 -110
- package/libs/ModelMakerPlugin/typings/data.js +0 -1
- package/libs/ModelMakerPlugin/typings/index.d.ts +0 -52
- package/libs/ModelMakerPlugin/typings/index.js +0 -1
- package/libs/ModelMakerPlugin/utils/Text.js +0 -66
- package/libs/ModelMakerPlugin/utils/Text.svelte.d.ts +0 -1
- package/libs/ModelMakerPlugin/utils/getTagOcclusionObjects.d.ts +0 -4
- package/libs/ModelMakerPlugin/utils/getTagOcclusionObjects.js +0 -14
- package/libs/ModelMakerPlugin/utils/tagRenderer.d.ts +0 -3
- package/libs/ModelMakerPlugin/utils/tagRenderer.js +0 -36
- package/libs/ModelRoomLabelPlugin/Assets/roomLabelBg.d.ts +0 -1
- package/libs/ModelRoomLabelPlugin/Assets/roomLabelBg.js +0 -4
- package/libs/ModelRoomLabelPlugin/Controller.d.ts +0 -38
- package/libs/ModelRoomLabelPlugin/Controller.js +0 -88
- package/libs/ModelRoomLabelPlugin/RoomLabelItem.js +0 -154
- package/libs/ModelRoomLabelPlugin/RoomLabelItem.svelte.d.ts +0 -1
- package/libs/ModelRoomLabelPlugin/RoomLabelItems.js +0 -217
- package/libs/ModelRoomLabelPlugin/RoomLabelItems.svelte.d.ts +0 -1
- package/libs/ModelRoomLabelPlugin/index.d.ts +0 -12
- package/libs/ModelRoomLabelPlugin/index.js +0 -20
- package/libs/ModelRoomLabelPlugin/typings.d.ts +0 -35
- package/libs/ModelRoomLabelPlugin/typings.js +0 -1
- package/libs/ModelRoomLabelPlugin/utils/parseData.d.ts +0 -3
- package/libs/ModelRoomLabelPlugin/utils/parseData.js +0 -16
- package/libs/ModelTVVideoPlugin/Plugin.d.ts +0 -4
- package/libs/ModelTVVideoPlugin/Plugin.js +0 -291
- package/libs/ModelTVVideoPlugin/index.d.ts +0 -5
- package/libs/ModelTVVideoPlugin/index.js +0 -80
- package/libs/ModelTVVideoPlugin/typings.d.ts +0 -27
- package/libs/ModelTVVideoPlugin/typings.js +0 -4
- package/libs/ModelTVVideoPlugin/utils/parseData.d.ts +0 -3
- package/libs/ModelTVVideoPlugin/utils/parseData.js +0 -20
- package/libs/ModelViewPlugin/Plugin.d.ts +0 -42
- package/libs/ModelViewPlugin/Plugin.js +0 -196
- package/libs/ModelViewPlugin/index.d.ts +0 -4
- package/libs/ModelViewPlugin/index.js +0 -74
- package/libs/Object3DHelperPlugin/Controller.d.ts +0 -153
- package/libs/Object3DHelperPlugin/Controller.js +0 -355
- package/libs/Object3DHelperPlugin/FiveControllerWrapper.d.ts +0 -23
- package/libs/Object3DHelperPlugin/FiveControllerWrapper.js +0 -57
- package/libs/Object3DHelperPlugin/index.d.ts +0 -6
- package/libs/Object3DHelperPlugin/index.js +0 -118
- package/libs/Object3DHelperPlugin/typings.d.ts +0 -38
- package/libs/Object3DHelperPlugin/typings.js +0 -1
- package/libs/PanoCompassPlugin/Assets/roomInfoIcon.d.ts +0 -1
- package/libs/PanoCompassPlugin/Assets/roomInfoIcon.js +0 -4
- package/libs/PanoCompassPlugin/Controller.d.ts +0 -88
- package/libs/PanoCompassPlugin/Controller.js +0 -364
- package/libs/PanoCompassPlugin/getRoomInfoInstance.d.ts +0 -8
- package/libs/PanoCompassPlugin/getRoomInfoInstance.js +0 -24
- package/libs/PanoCompassPlugin/index.d.ts +0 -7
- package/libs/PanoCompassPlugin/index.js +0 -84
- package/libs/PanoCompassPlugin/typings.d.ts +0 -58
- package/libs/PanoCompassPlugin/typings.js +0 -1
- package/libs/PanoCursorRaycasterPlugin/index.d.ts +0 -48
- package/libs/PanoCursorRaycasterPlugin/index.js +0 -61
- package/libs/PanoDoorLabelPlugin/Controller.d.ts +0 -42
- package/libs/PanoDoorLabelPlugin/Controller.js +0 -324
- package/libs/PanoDoorLabelPlugin/DoorLabelItem.js +0 -88
- package/libs/PanoDoorLabelPlugin/DoorLabelItem.svelte.d.ts +0 -1
- package/libs/PanoDoorLabelPlugin/index.d.ts +0 -7
- package/libs/PanoDoorLabelPlugin/index.js +0 -80
- package/libs/PanoDoorLabelPlugin/typings.d.ts +0 -38
- package/libs/PanoDoorLabelPlugin/typings.js +0 -1
- package/libs/PanoDoorLabelPlugin/utils.d.ts +0 -5
- package/libs/PanoDoorLabelPlugin/utils.js +0 -23
- package/libs/PanoMeasurePlugin/Components/Common/CircleButton.js +0 -93
- package/libs/PanoMeasurePlugin/Components/Common/CircleButton.svelte.d.ts +0 -1
- package/libs/PanoMeasurePlugin/Components/Common/Exit.js +0 -42
- package/libs/PanoMeasurePlugin/Components/Common/Exit.svelte.d.ts +0 -1
- package/libs/PanoMeasurePlugin/Components/Common/Switcher0.js +0 -246
- package/libs/PanoMeasurePlugin/Components/Common/Switcher0.svelte.d.ts +0 -1
- package/libs/PanoMeasurePlugin/Components/Common/Switcher1.js +0 -211
- package/libs/PanoMeasurePlugin/Components/Common/Switcher1.svelte.d.ts +0 -1
- package/libs/PanoMeasurePlugin/Components/Common/icons/index.d.ts +0 -4
- package/libs/PanoMeasurePlugin/Components/Common/icons/index.js +0 -7
- package/libs/PanoMeasurePlugin/Components/Controller0.js +0 -327
- package/libs/PanoMeasurePlugin/Components/Controller0.svelte.d.ts +0 -1
- package/libs/PanoMeasurePlugin/Components/Controller1.js +0 -477
- package/libs/PanoMeasurePlugin/Components/Controller1.svelte.d.ts +0 -1
- package/libs/PanoMeasurePlugin/Components/Tip.js +0 -131
- package/libs/PanoMeasurePlugin/Components/Tip.svelte.d.ts +0 -1
- package/libs/PanoMeasurePlugin/Controller/BaseController.d.ts +0 -58
- package/libs/PanoMeasurePlugin/Controller/BaseController.js +0 -91
- package/libs/PanoMeasurePlugin/Controller/EditController.d.ts +0 -58
- package/libs/PanoMeasurePlugin/Controller/EditController.js +0 -390
- package/libs/PanoMeasurePlugin/Controller/MixedController.d.ts +0 -38
- package/libs/PanoMeasurePlugin/Controller/MixedController.js +0 -150
- package/libs/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +0 -12
- package/libs/PanoMeasurePlugin/Controller/ShortcutKeyController.js +0 -30
- package/libs/PanoMeasurePlugin/Controller/ViewController.d.ts +0 -13
- package/libs/PanoMeasurePlugin/Controller/ViewController.js +0 -85
- package/libs/PanoMeasurePlugin/Controller/WatchController.d.ts +0 -33
- package/libs/PanoMeasurePlugin/Controller/WatchController.js +0 -275
- package/libs/PanoMeasurePlugin/Controller/index.d.ts +0 -115
- package/libs/PanoMeasurePlugin/Controller/index.js +0 -364
- package/libs/PanoMeasurePlugin/Model/area.d.ts +0 -75
- package/libs/PanoMeasurePlugin/Model/area.js +0 -189
- package/libs/PanoMeasurePlugin/Model/index.d.ts +0 -45
- package/libs/PanoMeasurePlugin/Model/index.js +0 -101
- package/libs/PanoMeasurePlugin/Model/line.d.ts +0 -39
- package/libs/PanoMeasurePlugin/Model/line.js +0 -82
- package/libs/PanoMeasurePlugin/Model/point.d.ts +0 -10
- package/libs/PanoMeasurePlugin/Model/point.js +0 -27
- package/libs/PanoMeasurePlugin/Model/polygon.d.ts +0 -14
- package/libs/PanoMeasurePlugin/Model/polygon.js +0 -47
- package/libs/PanoMeasurePlugin/Model/polyline.d.ts +0 -47
- package/libs/PanoMeasurePlugin/Model/polyline.js +0 -131
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.d.ts +0 -2
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.js +0 -14
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.d.ts +0 -2
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.js +0 -4
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.d.ts +0 -2
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.js +0 -4
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +0 -30
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/index.js +0 -81
- package/libs/PanoMeasurePlugin/Modules/GuideController.d.ts +0 -26
- package/libs/PanoMeasurePlugin/Modules/GuideController.js +0 -55
- package/libs/PanoMeasurePlugin/Modules/Magnifier.d.ts +0 -19
- package/libs/PanoMeasurePlugin/Modules/Magnifier.js +0 -71
- package/libs/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +0 -2
- package/libs/PanoMeasurePlugin/Modules/UIController/HTML.js +0 -129
- package/libs/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +0 -19
- package/libs/PanoMeasurePlugin/Modules/UIController/MainBtnController.js +0 -75
- package/libs/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +0 -12
- package/libs/PanoMeasurePlugin/Modules/UIController/Revoke/index.js +0 -35
- package/libs/PanoMeasurePlugin/Modules/UIController/index.d.ts +0 -34
- package/libs/PanoMeasurePlugin/Modules/UIController/index.js +0 -171
- package/libs/PanoMeasurePlugin/Modules/UIController/mobileHTML.d.ts +0 -4
- package/libs/PanoMeasurePlugin/Modules/UIController/mobileHTML.js +0 -82
- package/libs/PanoMeasurePlugin/Modules/UIController/mobileMainBtnController.d.ts +0 -15
- package/libs/PanoMeasurePlugin/Modules/UIController/mobileMainBtnController.js +0 -53
- package/libs/PanoMeasurePlugin/Modules/UIController/style.d.ts +0 -8
- package/libs/PanoMeasurePlugin/Modules/UIController/style.js +0 -62
- package/libs/PanoMeasurePlugin/Modules/rangePiece/html.d.ts +0 -4
- package/libs/PanoMeasurePlugin/Modules/rangePiece/html.js +0 -67
- package/libs/PanoMeasurePlugin/Modules/rangePiece/index.d.ts +0 -42
- package/libs/PanoMeasurePlugin/Modules/rangePiece/index.js +0 -135
- package/libs/PanoMeasurePlugin/index.d.ts +0 -14
- package/libs/PanoMeasurePlugin/index.js +0 -145
- package/libs/PanoMeasurePlugin/typings/data.d.ts +0 -58
- package/libs/PanoMeasurePlugin/typings/data.js +0 -1
- package/libs/PanoMeasurePlugin/typings/event.type.d.ts +0 -55
- package/libs/PanoMeasurePlugin/typings/event.type.js +0 -1
- package/libs/PanoMeasurePlugin/typings/index.d.ts +0 -15
- package/libs/PanoMeasurePlugin/typings/index.js +0 -1
- package/libs/PanoMeasurePlugin/typings/utils.type.js +0 -1
- package/libs/PanoMeasurePlugin/utils/clearGroup.d.ts +0 -2
- package/libs/PanoMeasurePlugin/utils/clearGroup.js +0 -6
- package/libs/PanoMeasurePlugin/utils/constants.d.ts +0 -4
- package/libs/PanoMeasurePlugin/utils/constants.js +0 -35
- package/libs/PanoMeasurePlugin/utils/dom/areaDom.d.ts +0 -22
- package/libs/PanoMeasurePlugin/utils/dom/areaDom.js +0 -117
- package/libs/PanoMeasurePlugin/utils/dom/base.d.ts +0 -29
- package/libs/PanoMeasurePlugin/utils/dom/base.js +0 -78
- package/libs/PanoMeasurePlugin/utils/dom/distanceItem.d.ts +0 -34
- package/libs/PanoMeasurePlugin/utils/dom/distanceItem.js +0 -147
- package/libs/PanoMeasurePlugin/utils/findClosestPoint.d.ts +0 -10
- package/libs/PanoMeasurePlugin/utils/findClosestPoint.js +0 -16
- package/libs/PanoMeasurePlugin/utils/ironbox.d.ts +0 -1
- package/libs/PanoMeasurePlugin/utils/ironbox.js +0 -4
- package/libs/PanoMeasurePlugin/utils/isIntersecting.d.ts +0 -15
- package/libs/PanoMeasurePlugin/utils/isIntersecting.js +0 -52
- package/libs/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +0 -3
- package/libs/PanoMeasurePlugin/utils/isNDCPointInScreen.js +0 -12
- package/libs/PanoMeasurePlugin/utils/line.d.ts +0 -18
- package/libs/PanoMeasurePlugin/utils/line.js +0 -19
- package/libs/PanoMeasurePlugin/utils/math.d.ts +0 -17
- package/libs/PanoMeasurePlugin/utils/math.js +0 -13
- package/libs/PanoMeasurePlugin/utils/mouseGroup.d.ts +0 -7
- package/libs/PanoMeasurePlugin/utils/mouseGroup.js +0 -46
- package/libs/PanoMeasurePlugin/utils/ndc2Screen.d.ts +0 -6
- package/libs/PanoMeasurePlugin/utils/ndc2Screen.js +0 -8
- package/libs/PanoRulerPlugin/Plugin.d.ts +0 -34
- package/libs/PanoRulerPlugin/Plugin.js +0 -277
- package/libs/PanoRulerPlugin/index.d.ts +0 -5
- package/libs/PanoRulerPlugin/index.js +0 -10
- package/libs/PanoRulerPlugin/style.d.ts +0 -2
- package/libs/PanoRulerPlugin/style.js +0 -90
- package/libs/PanoRulerPlugin/typings.d.ts +0 -21
- package/libs/PanoRulerPlugin/typings.js +0 -1
- package/libs/PanoRulerProPlugin/Controller.d.ts +0 -15
- package/libs/PanoRulerProPlugin/Controller.js +0 -168
- package/libs/PanoRulerProPlugin/RulerItem.js +0 -207
- package/libs/PanoRulerProPlugin/RulerItem.svelte.d.ts +0 -1
- package/libs/PanoRulerProPlugin/RulerItems.js +0 -255
- package/libs/PanoRulerProPlugin/RulerItems.svelte.d.ts +0 -1
- package/libs/PanoRulerProPlugin/index.d.ts +0 -8
- package/libs/PanoRulerProPlugin/index.js +0 -81
- package/libs/PanoRulerProPlugin/typings.d.ts +0 -46
- package/libs/PanoRulerProPlugin/typings.js +0 -1
- package/libs/PanoSpatialTagPlugin/Components/origins.js +0 -121
- package/libs/PanoSpatialTagPlugin/Components/origins.svelte.d.ts +0 -1
- package/libs/PanoSpatialTagPlugin/Components/tag.js +0 -206
- package/libs/PanoSpatialTagPlugin/Components/tag.svelte.d.ts +0 -1
- package/libs/PanoSpatialTagPlugin/Plugin.d.ts +0 -35
- package/libs/PanoSpatialTagPlugin/Plugin.js +0 -307
- package/libs/PanoSpatialTagPlugin/index.d.ts +0 -5
- package/libs/PanoSpatialTagPlugin/index.js +0 -83
- package/libs/PanoSpatialTagPlugin/store.d.ts +0 -1
- package/libs/PanoSpatialTagPlugin/store.js +0 -6
- package/libs/PanoSpatialTagPlugin/style.js +0 -11
- package/libs/PanoSpatialTagPlugin/typings.d.ts +0 -40
- package/libs/PanoSpatialTagPlugin/typings.js +0 -1
- package/libs/PanoTagPlugin/Archive/deprecated.d.ts +0 -73
- package/libs/PanoTagPlugin/Archive/deprecated.js +0 -6
- package/libs/PanoTagPlugin/Assets/Icon.d.ts +0 -4
- package/libs/PanoTagPlugin/Assets/Icon.js +0 -7
- package/libs/PanoTagPlugin/Components/Common/Arrow.js +0 -128
- package/libs/PanoTagPlugin/Components/Common/Arrow.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/Audio.js +0 -193
- package/libs/PanoTagPlugin/Components/Common/Audio.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/AudioPlayer.js +0 -93
- package/libs/PanoTagPlugin/Components/Common/AudioPlayer.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/Icon/Icon.js +0 -804
- package/libs/PanoTagPlugin/Components/Common/Icon/Icon.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/Icon/PanoramaIcon.js +0 -186
- package/libs/PanoTagPlugin/Components/Common/Icon/PanoramaIcon.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/Icon/animationUtils.d.ts +0 -9
- package/libs/PanoTagPlugin/Components/Common/Icon/animationUtils.js +0 -128
- package/libs/PanoTagPlugin/Components/Common/Icon/audioIcon.js +0 -175
- package/libs/PanoTagPlugin/Components/Common/Icon/audioIcon.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/Icon/tag-popover-arrow-base64.d.ts +0 -8
- package/libs/PanoTagPlugin/Components/Common/Icon/tag-popover-arrow-base64.js +0 -11
- package/libs/PanoTagPlugin/Components/Common/Line/Polyline.js +0 -116
- package/libs/PanoTagPlugin/Components/Common/Line/Polyline.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/Line/Straight.js +0 -251
- package/libs/PanoTagPlugin/Components/Common/Line/Straight.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/Media.js +0 -519
- package/libs/PanoTagPlugin/Components/Common/Media.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/MediaItem.js +0 -468
- package/libs/PanoTagPlugin/Components/Common/MediaItem.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/Shadow.js +0 -203
- package/libs/PanoTagPlugin/Components/Common/Shadow.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/TagPoint.js +0 -535
- package/libs/PanoTagPlugin/Components/Common/TagPoint.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/TagPopover/ArrowRightIcon.js +0 -123
- package/libs/PanoTagPlugin/Components/Common/TagPopover/ArrowRightIcon.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/TagPopover/PanoramaIcon.js +0 -70
- package/libs/PanoTagPlugin/Components/Common/TagPopover/PanoramaIcon.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/TagPopover/PopoverContent.js +0 -312
- package/libs/PanoTagPlugin/Components/Common/TagPopover/PopoverContent.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/TagPopover/ShareIcon.js +0 -123
- package/libs/PanoTagPlugin/Components/Common/TagPopover/ShareIcon.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopoverArrow.js +0 -95
- package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopoverArrow.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopoverToolBar.js +0 -291
- package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopoverToolBar.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopup.js +0 -838
- package/libs/PanoTagPlugin/Components/Common/TagPopover/TagPopup.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/TagPopover/index.js +0 -582
- package/libs/PanoTagPlugin/Components/Common/TagPopover/index.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/Text/FlyMText.js +0 -198
- package/libs/PanoTagPlugin/Components/Common/Text/FlyMText.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/Text/FlyText.js +0 -258
- package/libs/PanoTagPlugin/Components/Common/Text/FlyText.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/Text/MText.js +0 -238
- package/libs/PanoTagPlugin/Components/Common/Text/MText.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/TextItem.js +0 -129
- package/libs/PanoTagPlugin/Components/Common/TextItem.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Common/VideoIcon.js +0 -114
- package/libs/PanoTagPlugin/Components/Common/VideoIcon.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/Assets/marketingIcon.d.ts +0 -2
- package/libs/PanoTagPlugin/Components/Tag/Assets/marketingIcon.js +0 -5
- package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioPlaneTag.js +0 -227
- package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioPlaneTag.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioPoint.js +0 -191
- package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioPoint.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioTag.js +0 -358
- package/libs/PanoTagPlugin/Components/Tag/AudioTag/AudioTag.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/AudioTag/index.js +0 -150
- package/libs/PanoTagPlugin/Components/Tag/AudioTag/index.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/CustomTag.js +0 -86
- package/libs/PanoTagPlugin/Components/Tag/CustomTag.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/ImageTextTag.js +0 -259
- package/libs/PanoTagPlugin/Components/Tag/ImageTextTag.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/LinkTag.js +0 -148
- package/libs/PanoTagPlugin/Components/Tag/LinkTag.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/MarketingTag.js +0 -719
- package/libs/PanoTagPlugin/Components/Tag/MarketingTag.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/MediaPlane.js +0 -184
- package/libs/PanoTagPlugin/Components/Tag/MediaPlane.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/PanoramaTag.js +0 -57
- package/libs/PanoTagPlugin/Components/Tag/PanoramaTag.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/TextTag/TextPlaneTag.js +0 -216
- package/libs/PanoTagPlugin/Components/Tag/TextTag/TextPlaneTag.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/TextTag/TextTag.js +0 -219
- package/libs/PanoTagPlugin/Components/Tag/TextTag/TextTag.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/TextTag/index.js +0 -134
- package/libs/PanoTagPlugin/Components/Tag/TextTag/index.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/Tag/index.js +0 -834
- package/libs/PanoTagPlugin/Components/Tag/index.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/TagContainer.js +0 -445
- package/libs/PanoTagPlugin/Components/TagContainer.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/Components/TagItem.js +0 -827
- package/libs/PanoTagPlugin/Components/TagItem.svelte.d.ts +0 -1
- package/libs/PanoTagPlugin/controller/Tag/BaseTag.d.ts +0 -282
- package/libs/PanoTagPlugin/controller/Tag/BaseTag.js +0 -861
- package/libs/PanoTagPlugin/controller/Tag/BoxTag.d.ts +0 -119
- package/libs/PanoTagPlugin/controller/Tag/BoxTag.js +0 -519
- package/libs/PanoTagPlugin/controller/Tag/MaskTag.d.ts +0 -258
- package/libs/PanoTagPlugin/controller/Tag/MaskTag.js +0 -824
- package/libs/PanoTagPlugin/controller/Tag/MaskTag.shaders.d.ts +0 -10
- package/libs/PanoTagPlugin/controller/Tag/MaskTag.shaders.js +0 -100
- package/libs/PanoTagPlugin/controller/Tag/ModelTag.d.ts +0 -15
- package/libs/PanoTagPlugin/controller/Tag/ModelTag.js +0 -303
- package/libs/PanoTagPlugin/controller/Tag/PlaneTag.d.ts +0 -51
- package/libs/PanoTagPlugin/controller/Tag/PlaneTag.js +0 -587
- package/libs/PanoTagPlugin/controller/Tag/PointTag.d.ts +0 -46
- package/libs/PanoTagPlugin/controller/Tag/PointTag.js +0 -304
- package/libs/PanoTagPlugin/controller/Tag/PolygonTag.d.ts +0 -112
- package/libs/PanoTagPlugin/controller/Tag/PolygonTag.js +0 -483
- package/libs/PanoTagPlugin/controller/TagRender.d.ts +0 -36
- package/libs/PanoTagPlugin/controller/TagRender.js +0 -151
- package/libs/PanoTagPlugin/controller/TagUtil.d.ts +0 -93
- package/libs/PanoTagPlugin/controller/TagUtil.js +0 -317
- package/libs/PanoTagPlugin/controller/index.d.ts +0 -227
- package/libs/PanoTagPlugin/controller/index.js +0 -927
- package/libs/PanoTagPlugin/index.d.ts +0 -8
- package/libs/PanoTagPlugin/index.js +0 -325
- package/libs/PanoTagPlugin/tag.config.d.ts +0 -7
- package/libs/PanoTagPlugin/tag.config.js +0 -124
- package/libs/PanoTagPlugin/typings/controller.d.ts +0 -112
- package/libs/PanoTagPlugin/typings/controller.js +0 -1
- package/libs/PanoTagPlugin/typings/index.d.ts +0 -8
- package/libs/PanoTagPlugin/typings/index.js +0 -8
- package/libs/PanoTagPlugin/typings/tag/Tag.d.ts +0 -64
- package/libs/PanoTagPlugin/typings/tag/Tag.js +0 -1
- package/libs/PanoTagPlugin/typings/tag/TagConfig.d.ts +0 -422
- package/libs/PanoTagPlugin/typings/tag/TagConfig.js +0 -16
- package/libs/PanoTagPlugin/typings/tag/TagData.d.ts +0 -176
- package/libs/PanoTagPlugin/typings/tag/TagData.js +0 -1
- package/libs/PanoTagPlugin/typings/tag/TagInstance.d.ts +0 -8
- package/libs/PanoTagPlugin/typings/tag/TagInstance.js +0 -1
- package/libs/PanoTagPlugin/typings/tag/Utils.d.ts +0 -164
- package/libs/PanoTagPlugin/typings/tag/Utils.js +0 -1
- package/libs/PanoTagPlugin/utils/Cache.d.ts +0 -17
- package/libs/PanoTagPlugin/utils/Cache.js +0 -49
- package/libs/PanoTagPlugin/utils/DebugUtil.d.ts +0 -12
- package/libs/PanoTagPlugin/utils/DebugUtil.js +0 -62
- package/libs/PanoTagPlugin/utils/addDebugPoints.d.ts +0 -3
- package/libs/PanoTagPlugin/utils/addDebugPoints.js +0 -45
- package/libs/PanoTagPlugin/utils/audio/AudioDiagnostics.d.ts +0 -42
- package/libs/PanoTagPlugin/utils/audio/AudioDiagnostics.js +0 -165
- package/libs/PanoTagPlugin/utils/audio/SharedAudio.d.ts +0 -31
- package/libs/PanoTagPlugin/utils/audio/SharedAudio.js +0 -188
- package/libs/PanoTagPlugin/utils/checkRange.d.ts +0 -4
- package/libs/PanoTagPlugin/utils/checkRange.js +0 -10
- package/libs/PanoTagPlugin/utils/color.js +0 -17
- package/libs/PanoTagPlugin/utils/constants.d.ts +0 -3
- package/libs/PanoTagPlugin/utils/constants.js +0 -8
- package/libs/PanoTagPlugin/utils/debounce.d.ts +0 -8
- package/libs/PanoTagPlugin/utils/debounce.js +0 -21
- package/libs/PanoTagPlugin/utils/doUtil.d.ts +0 -1
- package/libs/PanoTagPlugin/utils/doUtil.js +0 -12
- package/libs/PanoTagPlugin/utils/getImageInfo.d.ts +0 -14
- package/libs/PanoTagPlugin/utils/getImageInfo.js +0 -73
- package/libs/PanoTagPlugin/utils/index.d.ts +0 -10
- package/libs/PanoTagPlugin/utils/index.js +0 -37
- package/libs/PanoTagPlugin/utils/model/mediaPlane.d.ts +0 -118
- package/libs/PanoTagPlugin/utils/model/mediaPlane.js +0 -428
- package/libs/PanoTagPlugin/utils/noTypecheck.d.ts +0 -1
- package/libs/PanoTagPlugin/utils/noTypecheck.js +0 -4
- package/libs/PanoTagPlugin/utils/normalPositionToPositions.d.ts +0 -2
- package/libs/PanoTagPlugin/utils/normalPositionToPositions.js +0 -17
- package/libs/PanoTagPlugin/utils/planeNormal.d.ts +0 -4
- package/libs/PanoTagPlugin/utils/planeNormal.js +0 -11
- package/libs/PanoTagPlugin/utils/popoverContainer.d.ts +0 -1
- package/libs/PanoTagPlugin/utils/popoverContainer.js +0 -16
- package/libs/PanoTagPlugin/utils/px2rem.d.ts +0 -3
- package/libs/PanoTagPlugin/utils/px2rem.js +0 -6
- package/libs/PanoTagPlugin/utils/requestIdleCallback.js +0 -14
- package/libs/PanoTagPlugin/utils/sculptDataToBoxPosition.d.ts +0 -6
- package/libs/PanoTagPlugin/utils/sculptDataToBoxPosition.js +0 -18
- package/libs/PanoTagPlugin/utils/search.d.ts +0 -11
- package/libs/PanoTagPlugin/utils/search.js +0 -33
- package/libs/PanoTagPlugin/utils/tag/adaptConfig.d.ts +0 -2
- package/libs/PanoTagPlugin/utils/tag/adaptConfig.js +0 -9
- package/libs/PanoTagPlugin/utils/tag/calculateTagConfig.d.ts +0 -7
- package/libs/PanoTagPlugin/utils/tag/calculateTagConfig.js +0 -133
- package/libs/PanoTagPlugin/utils/tag/canAutoPlayByOcclusion.d.ts +0 -17
- package/libs/PanoTagPlugin/utils/tag/canAutoPlayByOcclusion.js +0 -14
- package/libs/PanoTagPlugin/utils/tag/format.d.ts +0 -5
- package/libs/PanoTagPlugin/utils/tag/format.js +0 -89
- package/libs/PanoTagPlugin/utils/tag/getRaycasterStartPosition.d.ts +0 -12
- package/libs/PanoTagPlugin/utils/tag/getRaycasterStartPosition.js +0 -7
- package/libs/PanoTagPlugin/utils/tag/tagCheck.d.ts +0 -19
- package/libs/PanoTagPlugin/utils/tag/tagCheck.js +0 -46
- package/libs/PanoTagPlugin/utils/tagPosition.d.ts +0 -13
- package/libs/PanoTagPlugin/utils/tagPosition.js +0 -55
- package/libs/PanoTagPlugin/utils/throttle.d.ts +0 -7
- package/libs/PanoTagPlugin/utils/throttle.js +0 -11
- package/libs/PanoTagPlugin/utils/timeToString.js +0 -7
- package/libs/PanoTagPlugin/utils/videoHelper.d.ts +0 -45
- package/libs/PanoTagPlugin/utils/videoHelper.js +0 -88
- package/libs/PanoVideoPlugin/Controller.d.ts +0 -59
- package/libs/PanoVideoPlugin/Controller.js +0 -241
- package/libs/PanoVideoPlugin/VideoMeshController.d.ts +0 -129
- package/libs/PanoVideoPlugin/VideoMeshController.js +0 -412
- package/libs/PanoVideoPlugin/index.d.ts +0 -21
- package/libs/PanoVideoPlugin/index.js +0 -82
- package/libs/PanoVideoPlugin/typings/index.js +0 -6
- package/libs/PanoVideoPlugin/typings.d.ts +0 -70
- package/libs/PanoVideoPlugin/typings.js +0 -1
- package/libs/PanoVideoPlugin/utils/index.d.ts +0 -9
- package/libs/PanoVideoPlugin/utils/index.js +0 -10
- package/libs/PanoVideoPlugin/utils/shader.d.ts +0 -2
- package/libs/PanoVideoPlugin/utils/shader.js +0 -33
- package/libs/PipelinePlugin/Controller.d.ts +0 -108
- package/libs/PipelinePlugin/Controller.js +0 -393
- package/libs/PipelinePlugin/index.d.ts +0 -6
- package/libs/PipelinePlugin/index.js +0 -88
- package/libs/PipelinePlugin/typing/PluginData/index.js +0 -6
- package/libs/PipelinePlugin/typing/PluginData.d.ts +0 -20
- package/libs/PipelinePlugin/typing/PluginData.js +0 -1
- package/libs/PipelinePlugin/typing/ServerData/index.js +0 -6
- package/libs/PipelinePlugin/typing/ServerData.d.ts +0 -28
- package/libs/PipelinePlugin/typing/ServerData.js +0 -1
- package/libs/PipelinePlugin/typing/index.d.ts +0 -79
- package/libs/PipelinePlugin/typing/index.js +0 -6
- package/libs/PipelinePlugin/utils/Objects/FlowPipe.d.ts +0 -34
- package/libs/PipelinePlugin/utils/Objects/FlowPipe.js +0 -156
- package/libs/PipelinePlugin/utils/Objects/HighlightPipe.d.ts +0 -11
- package/libs/PipelinePlugin/utils/Objects/HighlightPipe.js +0 -102
- package/libs/PipelinePlugin/utils/Objects/Pipe.d.ts +0 -49
- package/libs/PipelinePlugin/utils/Objects/Pipe.js +0 -229
- package/libs/PipelinePlugin/utils/formatData.d.ts +0 -12
- package/libs/PipelinePlugin/utils/formatData.js +0 -46
- package/libs/Sculpt/Editors/BoxMeshEditor.d.ts +0 -5
- package/libs/Sculpt/Editors/BoxMeshEditor.js +0 -98
- package/libs/Sculpt/Editors/CircleMeshEditor.d.ts +0 -5
- package/libs/Sculpt/Editors/CircleMeshEditor.js +0 -9
- package/libs/Sculpt/Editors/CylinderMeshEditor.d.ts +0 -5
- package/libs/Sculpt/Editors/CylinderMeshEditor.js +0 -41
- package/libs/Sculpt/Editors/PrismMeshEditor.d.ts +0 -5
- package/libs/Sculpt/Editors/PrismMeshEditor.js +0 -43
- package/libs/Sculpt/Editors/RectangleMeshEditor.d.ts +0 -5
- package/libs/Sculpt/Editors/RectangleMeshEditor.js +0 -101
- package/libs/Sculpt/Meshes/Area.d.ts +0 -9
- package/libs/Sculpt/Meshes/Area.js +0 -13
- package/libs/Sculpt/Meshes/Box.d.ts +0 -18
- package/libs/Sculpt/Meshes/Box.js +0 -27
- package/libs/Sculpt/Meshes/Circle.d.ts +0 -24
- package/libs/Sculpt/Meshes/Circle.js +0 -54
- package/libs/Sculpt/Meshes/CircleWithEdge.d.ts +0 -11
- package/libs/Sculpt/Meshes/CircleWithEdge.js +0 -41
- package/libs/Sculpt/Meshes/Cylinder.d.ts +0 -36
- package/libs/Sculpt/Meshes/Cylinder.js +0 -101
- package/libs/Sculpt/Meshes/Line.d.ts +0 -59
- package/libs/Sculpt/Meshes/Line.js +0 -272
- package/libs/Sculpt/Meshes/LineWithDots.d.ts +0 -52
- package/libs/Sculpt/Meshes/LineWithDots.js +0 -84
- package/libs/Sculpt/Meshes/Point.d.ts +0 -41
- package/libs/Sculpt/Meshes/Point.js +0 -147
- package/libs/Sculpt/Meshes/Polygon.d.ts +0 -53
- package/libs/Sculpt/Meshes/Polygon.js +0 -127
- package/libs/Sculpt/Meshes/PolygonWithEdge.d.ts +0 -33
- package/libs/Sculpt/Meshes/PolygonWithEdge.js +0 -69
- package/libs/Sculpt/Meshes/Polyline.d.ts +0 -47
- package/libs/Sculpt/Meshes/Polyline.js +0 -119
- package/libs/Sculpt/Meshes/Prism.d.ts +0 -98
- package/libs/Sculpt/Meshes/Prism.js +0 -305
- package/libs/Sculpt/Meshes/Rectangle.d.ts +0 -19
- package/libs/Sculpt/Meshes/Rectangle.js +0 -45
- package/libs/Sculpt/Meshes/RectangleWithEdge.d.ts +0 -29
- package/libs/Sculpt/Meshes/RectangleWithEdge.js +0 -56
- package/libs/Sculpt/Objects/Base/Editor.d.ts +0 -54
- package/libs/Sculpt/Objects/Base/Editor.js +0 -133
- package/libs/Sculpt/Objects/Base/index.d.ts +0 -125
- package/libs/Sculpt/Objects/Base/index.js +0 -164
- package/libs/Sculpt/Objects/Box/index.d.ts +0 -48
- package/libs/Sculpt/Objects/Box/index.js +0 -149
- package/libs/Sculpt/Objects/Circle/index.d.ts +0 -32
- package/libs/Sculpt/Objects/Circle/index.js +0 -123
- package/libs/Sculpt/Objects/Cylinder/index.d.ts +0 -34
- package/libs/Sculpt/Objects/Cylinder/index.js +0 -110
- package/libs/Sculpt/Objects/Line/Editor.d.ts +0 -22
- package/libs/Sculpt/Objects/Line/Editor.js +0 -68
- package/libs/Sculpt/Objects/Line/index.d.ts +0 -48
- package/libs/Sculpt/Objects/Line/index.js +0 -145
- package/libs/Sculpt/Objects/Point/Editor.d.ts +0 -8
- package/libs/Sculpt/Objects/Point/Editor.js +0 -25
- package/libs/Sculpt/Objects/Point/index.d.ts +0 -39
- package/libs/Sculpt/Objects/Point/index.js +0 -101
- package/libs/Sculpt/Objects/Polygon/Editor.d.ts +0 -20
- package/libs/Sculpt/Objects/Polygon/Editor.js +0 -83
- package/libs/Sculpt/Objects/Polygon/index.d.ts +0 -80
- package/libs/Sculpt/Objects/Polygon/index.js +0 -254
- package/libs/Sculpt/Objects/Polyline/Editor.d.ts +0 -8
- package/libs/Sculpt/Objects/Polyline/Editor.js +0 -23
- package/libs/Sculpt/Objects/Polyline/index.d.ts +0 -47
- package/libs/Sculpt/Objects/Polyline/index.js +0 -137
- package/libs/Sculpt/Objects/Prism/index.d.ts +0 -57
- package/libs/Sculpt/Objects/Prism/index.js +0 -114
- package/libs/Sculpt/Objects/Rectangle/index.d.ts +0 -48
- package/libs/Sculpt/Objects/Rectangle/index.js +0 -205
- package/libs/Sculpt/index.d.ts +0 -266
- package/libs/Sculpt/index.js +0 -297
- package/libs/Sculpt/typings/index.d.ts +0 -72
- package/libs/Sculpt/typings/style.d.ts +0 -108
- package/libs/Sculpt/typings/style.js +0 -8
- package/libs/Sculpt/typings/utils.type.d.ts +0 -16
- package/libs/Sculpt/utils/Meshes/getLengthHTML.d.ts +0 -4
- package/libs/Sculpt/utils/Meshes/getLengthHTML.js +0 -72
- package/libs/Sculpt/utils/Modules/Cursor.d.ts +0 -21
- package/libs/Sculpt/utils/Modules/Cursor.js +0 -70
- package/libs/Sculpt/utils/Modules/DeleteButtonBgBorder.d.ts +0 -6
- package/libs/Sculpt/utils/Modules/DeleteButtonBgBorder.js +0 -4
- package/libs/Sculpt/utils/Modules/DeleteIconSVG.d.ts +0 -1
- package/libs/Sculpt/utils/Modules/DeleteIconSVG.js +0 -15
- package/libs/Sculpt/utils/Modules/Global.d.ts +0 -22
- package/libs/Sculpt/utils/Modules/Global.js +0 -65
- package/libs/Sculpt/utils/data.d.ts +0 -7
- package/libs/Sculpt/utils/export.d.ts +0 -25
- package/libs/Sculpt/utils/export.js +0 -57
- package/libs/Sculpt/utils/isIntersecting.d.ts +0 -17
- package/libs/Sculpt/utils/isIntersecting.js +0 -68
- package/libs/Sculpt/utils/radiusToSegments.d.ts +0 -1
- package/libs/Sculpt/utils/radiusToSegments.js +0 -6
- package/libs/Sculpt/utils/removeAllTag.d.ts +0 -2
- package/libs/Sculpt/utils/renderDom.d.ts +0 -19
- package/libs/Sculpt/utils/renderDom.js +0 -22
- package/libs/Sculpt/utils/sortPositionsByCameraPosition.d.ts +0 -5
- package/libs/Sculpt/utils/sortPositionsByCameraPosition.js +0 -9
- package/libs/Sculpt/utils/three/ColoredMesh.d.ts +0 -33
- package/libs/Sculpt/utils/three/ColoredMesh.js +0 -105
- package/libs/Sculpt/utils/three/RectangleGeometry.d.ts +0 -6
- package/libs/Sculpt/utils/three/RectangleGeometry.js +0 -19
- package/libs/Sculpt/utils/three/rayOnLine.d.ts +0 -12
- package/libs/Sculpt/utils/three/rayOnLine.js +0 -15
- package/libs/Sculpt/utils/unit.d.ts +0 -7
- package/libs/Sculpt/utils/unit.js +0 -41
- package/libs/_commonjsHelpers.js +0 -4
- package/libs/base/BasePlugin.d.ts +0 -124
- package/libs/base/BasePlugin.js +0 -58
- package/libs/base/BasePluginWithData.d.ts +0 -21
- package/libs/base/BasePluginWithData.js +0 -6
- package/libs/components/AreaLabel/Assets/fontSize.d.ts +0 -62
- package/libs/components/AreaLabel/Assets/fontSize.js +0 -65
- package/libs/components/AreaLabel/Assets/roomLabelBg.d.ts +0 -3
- package/libs/components/AreaLabel/Assets/roomLabelBg.js +0 -5
- package/libs/components/AreaLabel/LabelItem.js +0 -283
- package/libs/components/AreaLabel/LabelItem.svelte.d.ts +0 -1
- package/libs/components/PaintBrush/Controller.d.ts +0 -43
- package/libs/components/PaintBrush/Controller.js +0 -319
- package/libs/components/PaintBrush/Subscribe.d.ts +0 -76
- package/libs/components/PaintBrush/Subscribe.js +0 -84
- package/libs/components/PaintBrush/index.d.ts +0 -27
- package/libs/components/PaintBrush/index.js +0 -58
- package/libs/components/PaintBrush/style.d.ts +0 -2
- package/libs/components/PaintBrush/style.js +0 -104
- package/libs/components/PaintBrush/tween.d.ts +0 -7
- package/libs/components/PaintBrush/tween.js +0 -11
- package/libs/components/PaintBrush/typings.d.ts +0 -58
- package/libs/components/PaintBrush/typings.js +0 -4
- package/libs/components/PaintBrush/utils.d.ts +0 -26
- package/libs/components/PaintBrush/utils.js +0 -45
- package/libs/components/index.d.ts +0 -2
- package/libs/components/index.js +0 -2
- package/libs/floorplan/Assets/camera.d.ts +0 -2
- package/libs/floorplan/Assets/camera.js +0 -5
- package/libs/floorplan/Assets/compass.d.ts +0 -1
- package/libs/floorplan/Assets/compass.js +0 -4
- package/libs/floorplan/Assets/floorplanExtraObject.d.ts +0 -1
- package/libs/floorplan/Assets/floorplanExtraObject.js +0 -4
- package/libs/floorplan/Components/BaseImage.js +0 -121
- package/libs/floorplan/Components/BaseImage.svelte.d.ts +0 -1
- package/libs/floorplan/Components/Camera.js +0 -108
- package/libs/floorplan/Components/Camera.svelte.d.ts +0 -1
- package/libs/floorplan/Components/Compass.js +0 -75
- package/libs/floorplan/Components/Compass.svelte.d.ts +0 -1
- package/libs/floorplan/Components/CurrentFloor.js +0 -689
- package/libs/floorplan/Components/CurrentFloor.svelte.d.ts +0 -1
- package/libs/floorplan/Components/Items/Item.js +0 -69
- package/libs/floorplan/Components/Items/Item.svelte.d.ts +0 -1
- package/libs/floorplan/Components/Items/Items.js +0 -161
- package/libs/floorplan/Components/Items/Items.svelte.d.ts +0 -1
- package/libs/floorplan/Components/Main.js +0 -437
- package/libs/floorplan/Components/Main.svelte.d.ts +0 -1
- package/libs/floorplan/Components/MissingFloor.js +0 -99
- package/libs/floorplan/Components/MissingFloor.svelte.d.ts +0 -1
- package/libs/floorplan/Components/Normalmage.js +0 -40
- package/libs/floorplan/Components/Normalmage.svelte.d.ts +0 -1
- package/libs/floorplan/Components/RoomHighlight/Room.js +0 -111
- package/libs/floorplan/Components/RoomHighlight/Room.svelte.d.ts +0 -1
- package/libs/floorplan/Components/RoomHighlight/RoomHighlight.js +0 -180
- package/libs/floorplan/Components/RoomHighlight/RoomHighlight.svelte.d.ts +0 -1
- package/libs/floorplan/Components/RoomLabels/RoomLabel.js +0 -451
- package/libs/floorplan/Components/RoomLabels/RoomLabel.svelte.d.ts +0 -1
- package/libs/floorplan/Components/RoomLabels/RoomLabels.js +0 -300
- package/libs/floorplan/Components/RoomLabels/RoomLabels.svelte.d.ts +0 -1
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial.js +0 -309
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial.svelte.d.ts +0 -1
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.js +0 -49
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte.d.ts +0 -1
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.js +0 -76
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte.d.ts +0 -1
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.js +0 -71
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte.d.ts +0 -1
- package/libs/floorplan/Components/RoomMaterials/RoomTriangle.js +0 -103
- package/libs/floorplan/Components/RoomMaterials/RoomTriangle.svelte.d.ts +0 -1
- package/libs/floorplan/Components/RuleLabels/RuleItem.js +0 -208
- package/libs/floorplan/Components/RuleLabels/RuleItem.svelte.d.ts +0 -1
- package/libs/floorplan/Components/RuleLabels/RuleLabels.js +0 -204
- package/libs/floorplan/Components/RuleLabels/RuleLabels.svelte.d.ts +0 -1
- package/libs/floorplan/Components/StyledImage.js +0 -90
- package/libs/floorplan/Components/StyledImage.svelte.d.ts +0 -1
- package/libs/floorplan/Components/SvgImage.js +0 -59
- package/libs/floorplan/Components/SvgImage.svelte.d.ts +0 -1
- package/libs/floorplan/FloorplanGuidePlugin/Components/Camera.js +0 -171
- package/libs/floorplan/FloorplanGuidePlugin/Components/Camera.svelte.d.ts +0 -1
- package/libs/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/CurrentFloor.js +0 -357
- package/libs/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +0 -1
- package/libs/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/ExtraObjects.js +0 -94
- package/libs/floorplan/FloorplanGuidePlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +0 -1
- package/libs/floorplan/FloorplanGuidePlugin/Components/FloorplanCompass.js +0 -110
- package/libs/floorplan/FloorplanGuidePlugin/Components/FloorplanCompass.svelte.d.ts +0 -1
- package/libs/floorplan/FloorplanGuidePlugin/Components/Main.js +0 -751
- package/libs/floorplan/FloorplanGuidePlugin/Components/Main.svelte.d.ts +0 -1
- package/libs/floorplan/FloorplanGuidePlugin/Components/ObserverDots.js +0 -153
- package/libs/floorplan/FloorplanGuidePlugin/Components/ObserverDots.svelte.d.ts +0 -1
- package/libs/floorplan/FloorplanGuidePlugin/Components/RoomLabelItem.js +0 -268
- package/libs/floorplan/FloorplanGuidePlugin/Components/RoomLabelItem.svelte.d.ts +0 -1
- package/libs/floorplan/FloorplanGuidePlugin/Components/RoomLabels.js +0 -329
- package/libs/floorplan/FloorplanGuidePlugin/Components/RoomLabels.svelte.d.ts +0 -1
- package/libs/floorplan/FloorplanGuidePlugin/Controller.d.ts +0 -53
- package/libs/floorplan/FloorplanGuidePlugin/Controller.js +0 -355
- package/libs/floorplan/FloorplanGuidePlugin/index.d.ts +0 -7
- package/libs/floorplan/FloorplanGuidePlugin/index.js +0 -106
- package/libs/floorplan/FloorplanGuidePlugin/typing.d.ts +0 -196
- package/libs/floorplan/FloorplanGuidePlugin/typing.js +0 -1
- package/libs/floorplan/MapviewFloorplanPlugin/Controller.d.ts +0 -128
- package/libs/floorplan/MapviewFloorplanPlugin/Controller.js +0 -564
- package/libs/floorplan/MapviewFloorplanPlugin/index.d.ts +0 -7
- package/libs/floorplan/MapviewFloorplanPlugin/index.js +0 -128
- package/libs/floorplan/MapviewFloorplanPlugin/items.d.ts +0 -30
- package/libs/floorplan/MapviewFloorplanPlugin/items.js +0 -2672
- package/libs/floorplan/MapviewFloorplanPlugin/typing.d.ts +0 -1
- package/libs/floorplan/MapviewFloorplanPlugin/typing.js +0 -1
- package/libs/floorplan/ModelFloorplanPlugin/Controller.d.ts +0 -121
- package/libs/floorplan/ModelFloorplanPlugin/Controller.js +0 -522
- package/libs/floorplan/ModelFloorplanPlugin/index.d.ts +0 -7
- package/libs/floorplan/ModelFloorplanPlugin/index.js +0 -127
- package/libs/floorplan/ModelFloorplanPlugin/typing.d.ts +0 -1
- package/libs/floorplan/ModelFloorplanPlugin/typing.js +0 -1
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.js +0 -132
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte.d.ts +0 -1
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.js +0 -355
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte.d.ts +0 -1
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.js +0 -94
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte.d.ts +0 -1
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.js +0 -328
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte.d.ts +0 -1
- package/libs/floorplan/PanoFloorplanRadarPlugin/Controller.d.ts +0 -40
- package/libs/floorplan/PanoFloorplanRadarPlugin/Controller.js +0 -268
- package/libs/floorplan/PanoFloorplanRadarPlugin/index.d.ts +0 -7
- package/libs/floorplan/PanoFloorplanRadarPlugin/index.js +0 -99
- package/libs/floorplan/PanoFloorplanRadarPlugin/typing.d.ts +0 -70
- package/libs/floorplan/PanoFloorplanRadarPlugin/typing.js +0 -1
- package/libs/floorplan/TopviewFloorplanPlugin/Controller.d.ts +0 -74
- package/libs/floorplan/TopviewFloorplanPlugin/Controller.js +0 -423
- package/libs/floorplan/TopviewFloorplanPlugin/index.d.ts +0 -7
- package/libs/floorplan/TopviewFloorplanPlugin/index.js +0 -124
- package/libs/floorplan/TopviewFloorplanPlugin/style.d.ts +0 -1
- package/libs/floorplan/TopviewFloorplanPlugin/style.js +0 -11
- package/libs/floorplan/TopviewFloorplanPlugin/typing.d.ts +0 -11
- package/libs/floorplan/TopviewFloorplanPlugin/typing.js +0 -1
- package/libs/floorplan/constant.d.ts +0 -5
- package/libs/floorplan/constant.js +0 -4
- package/libs/floorplan/index.d.ts +0 -8
- package/libs/floorplan/index.js +0 -16
- package/libs/floorplan/typings/floorplanData.d.ts +0 -176
- package/libs/floorplan/typings/floorplanData.js +0 -1
- package/libs/floorplan/typings/floorplanServerData.d.ts +0 -186
- package/libs/floorplan/typings/floorplanServerData.js +0 -101
- package/libs/floorplan/typings/index.d.ts +0 -164
- package/libs/floorplan/typings/index.js +0 -1
- package/libs/floorplan/typings/utility.d.ts +0 -2
- package/libs/floorplan/utils/constant.d.ts +0 -24
- package/libs/floorplan/utils/constant.js +0 -7
- package/libs/floorplan/utils/correctFiveState.d.ts +0 -18
- package/libs/floorplan/utils/correctFiveState.js +0 -57
- package/libs/floorplan/utils/formatData.d.ts +0 -5
- package/libs/floorplan/utils/formatData.js +0 -149
- package/libs/floorplan/utils/formatPosition.d.ts +0 -36
- package/libs/floorplan/utils/formatPosition.js +0 -35
- package/libs/floorplan/utils/styledFloorplan.d.ts +0 -2
- package/libs/floorplan/utils/styledFloorplan.js +0 -24
- package/libs/index.d.ts +0 -34
- package/libs/index.js +0 -738
- package/libs/shared-utils/CSS3DRender/CSS3DObject.d.ts +0 -37
- package/libs/shared-utils/CSS3DRender/CSS3DObject.js +0 -94
- package/libs/shared-utils/CSS3DRender/CSS3DRenderer.d.ts +0 -16
- package/libs/shared-utils/CSS3DRender/CSS3DRenderer.js +0 -61
- package/libs/shared-utils/CSS3DRender/OpacityMesh.d.ts +0 -6
- package/libs/shared-utils/CSS3DRender/OpacityMesh.js +0 -18
- package/libs/shared-utils/CSS3DRender/index.d.ts +0 -41
- package/libs/shared-utils/CSS3DRender/index.js +0 -76
- package/libs/shared-utils/Object3DHelper/Base/BaseController.d.ts +0 -142
- package/libs/shared-utils/Object3DHelper/Base/BaseController.js +0 -234
- package/libs/shared-utils/Object3DHelper/Base/BaseHelper.d.ts +0 -105
- package/libs/shared-utils/Object3DHelper/Base/BaseHelper.js +0 -103
- package/libs/shared-utils/Object3DHelper/Constants/RenderOrder.d.ts +0 -15
- package/libs/shared-utils/Object3DHelper/Constants/RenderOrder.js +0 -23
- package/libs/shared-utils/Object3DHelper/Constants/color.d.ts +0 -12
- package/libs/shared-utils/Object3DHelper/Constants/color.js +0 -20
- package/libs/shared-utils/Object3DHelper/Controller/BoundingBoxController.d.ts +0 -7
- package/libs/shared-utils/Object3DHelper/Controller/BoundingBoxController.js +0 -13
- package/libs/shared-utils/Object3DHelper/Controller/CSS3DScaleController.d.ts +0 -7
- package/libs/shared-utils/Object3DHelper/Controller/CSS3DScaleController.js +0 -22
- package/libs/shared-utils/Object3DHelper/Controller/MoveController.d.ts +0 -60
- package/libs/shared-utils/Object3DHelper/Controller/MoveController.js +0 -204
- package/libs/shared-utils/Object3DHelper/Controller/RectangleScaleController.d.ts +0 -45
- package/libs/shared-utils/Object3DHelper/Controller/RectangleScaleController.js +0 -116
- package/libs/shared-utils/Object3DHelper/Controller/RotateController.d.ts +0 -46
- package/libs/shared-utils/Object3DHelper/Controller/RotateController.js +0 -219
- package/libs/shared-utils/Object3DHelper/Controller/ScaleController.d.ts +0 -66
- package/libs/shared-utils/Object3DHelper/Controller/ScaleController.js +0 -307
- package/libs/shared-utils/Object3DHelper/Helper/BoundingBoxHelper.d.ts +0 -16
- package/libs/shared-utils/Object3DHelper/Helper/BoundingBoxHelper.js +0 -98
- package/libs/shared-utils/Object3DHelper/Helper/CSS3DScaleHelper.d.ts +0 -43
- package/libs/shared-utils/Object3DHelper/Helper/CSS3DScaleHelper.js +0 -150
- package/libs/shared-utils/Object3DHelper/Helper/HTML/rectangleScaleDom.d.ts +0 -11
- package/libs/shared-utils/Object3DHelper/Helper/HTML/rectangleScaleDom.js +0 -81
- package/libs/shared-utils/Object3DHelper/Helper/HTML/tipsDom.d.ts +0 -6
- package/libs/shared-utils/Object3DHelper/Helper/HTML/tipsDom.js +0 -41
- package/libs/shared-utils/Object3DHelper/Helper/HTML/utils/createElement.d.ts +0 -2
- package/libs/shared-utils/Object3DHelper/Helper/HTML/utils/createElement.js +0 -13
- package/libs/shared-utils/Object3DHelper/Helper/MoveHelper.d.ts +0 -24
- package/libs/shared-utils/Object3DHelper/Helper/MoveHelper.js +0 -51
- package/libs/shared-utils/Object3DHelper/Helper/Objects/ArrowGroup.d.ts +0 -18
- package/libs/shared-utils/Object3DHelper/Helper/Objects/ArrowGroup.js +0 -40
- package/libs/shared-utils/Object3DHelper/Helper/Objects/CenterHandle.d.ts +0 -23
- package/libs/shared-utils/Object3DHelper/Helper/Objects/CenterHandle.js +0 -73
- package/libs/shared-utils/Object3DHelper/Helper/RotateHelper.d.ts +0 -93
- package/libs/shared-utils/Object3DHelper/Helper/RotateHelper.js +0 -182
- package/libs/shared-utils/Object3DHelper/Helper/ScaleHelper.d.ts +0 -65
- package/libs/shared-utils/Object3DHelper/Helper/ScaleHelper.js +0 -220
- package/libs/shared-utils/Object3DHelper/Helper/index.d.ts +0 -5
- package/libs/shared-utils/Object3DHelper/Helper/index.js +0 -4
- package/libs/shared-utils/Object3DHelper/index.d.ts +0 -52
- package/libs/shared-utils/Object3DHelper/index.js +0 -144
- package/libs/shared-utils/Object3DHelper/typings/Direction.d.ts +0 -2
- package/libs/shared-utils/Object3DHelper/typings/Direction.js +0 -1
- package/libs/shared-utils/Object3DHelper/typings/Hooks.d.ts +0 -63
- package/libs/shared-utils/Object3DHelper/typings/Hooks.js +0 -1
- package/libs/shared-utils/Object3DHelper/typings/Scissor.d.ts +0 -17
- package/libs/shared-utils/Object3DHelper/typings/Scissor.js +0 -1
- package/libs/shared-utils/Object3DHelper/typings/index.d.ts +0 -45
- package/libs/shared-utils/Object3DHelper/typings/index.js +0 -1
- package/libs/shared-utils/Object3DHelper/utils/calculateScaleByCamera.d.ts +0 -5
- package/libs/shared-utils/Object3DHelper/utils/calculateScaleByCamera.js +0 -7
- package/libs/shared-utils/Object3DHelper/utils/calculateThreeMouse.d.ts +0 -14
- package/libs/shared-utils/Object3DHelper/utils/calculateThreeMouse.js +0 -11
- package/libs/shared-utils/Object3DHelper/utils/cameraHooks.d.ts +0 -2
- package/libs/shared-utils/Object3DHelper/utils/cameraHooks.js +0 -24
- package/libs/shared-utils/Object3DHelper/utils/direction.d.ts +0 -14
- package/libs/shared-utils/Object3DHelper/utils/direction.js +0 -22
- package/libs/shared-utils/Object3DHelper/utils/filterNotColinearPoints.d.ts +0 -2
- package/libs/shared-utils/Object3DHelper/utils/filterNotColinearPoints.js +0 -1
- package/libs/shared-utils/Object3DHelper/utils/getMouseRaycaster.d.ts +0 -5
- package/libs/shared-utils/Object3DHelper/utils/getMouseRaycaster.js +0 -14
- package/libs/shared-utils/Object3DHelper/utils/getOrthographicCameraDirection.d.ts +0 -8
- package/libs/shared-utils/Object3DHelper/utils/getOrthographicCameraDirection.js +0 -12
- package/libs/shared-utils/Object3DHelper/utils/getPoseFromCamera.d.ts +0 -8
- package/libs/shared-utils/Object3DHelper/utils/getPoseFromCamera.js +0 -14
- package/libs/shared-utils/Object3DHelper/utils/index.d.ts +0 -8
- package/libs/shared-utils/Object3DHelper/utils/index.js +0 -1
- package/libs/shared-utils/Object3DHelper/utils/normalPositionToPositions.d.ts +0 -5
- package/libs/shared-utils/Object3DHelper/utils/normalPositionToPositions.js +0 -1
- package/libs/shared-utils/Object3DHelper/utils/object3DBoundingPosition.d.ts +0 -1
- package/libs/shared-utils/Object3DHelper/utils/object3DBoundingPosition.js +0 -1
- package/libs/shared-utils/Object3DHelper/utils/setObjectQuaternion.d.ts +0 -8
- package/libs/shared-utils/Object3DHelper/utils/setObjectQuaternion.js +0 -11
- package/libs/shared-utils/Object3DHelper/utils/solidGuide.d.ts +0 -27
- package/libs/shared-utils/Object3DHelper/utils/solidGuide.js +0 -72
- package/libs/shared-utils/Subscribe.d.ts +0 -68
- package/libs/shared-utils/Subscribe.js +0 -103
- package/libs/shared-utils/Utils/BaseUtil.d.ts +0 -6
- package/libs/shared-utils/Utils/BaseUtil.js +0 -14
- package/libs/shared-utils/Utils/FiveUtil.d.ts +0 -11
- package/libs/shared-utils/Utils/FiveUtil.js +0 -31
- package/libs/shared-utils/Utils/WorkUtil.d.ts +0 -36
- package/libs/shared-utils/Utils/WorkUtil.js +0 -81
- package/libs/shared-utils/animationFrame/BetterTween.d.ts +0 -12
- package/libs/shared-utils/animationFrame/BetterTween.js +0 -33
- package/libs/shared-utils/animationFrame/calculateProgress.d.ts +0 -8
- package/libs/shared-utils/animationFrame/calculateProgress.js +0 -6
- package/libs/shared-utils/animationFrame/formatRad.d.ts +0 -15
- package/libs/shared-utils/animationFrame/formatRad.js +0 -11
- package/libs/shared-utils/animationFrame/index.d.ts +0 -17
- package/libs/shared-utils/animationFrame/index.js +0 -52
- package/libs/shared-utils/animationFrame/tween.d.ts +0 -84
- package/libs/shared-utils/animationFrame/tween.js +0 -28
- package/libs/shared-utils/audio.d.ts +0 -36
- package/libs/shared-utils/audio.js +0 -61
- package/libs/shared-utils/changeModelCanvasOpacity.d.ts +0 -2
- package/libs/shared-utils/changeModelCanvasOpacity.js +0 -20
- package/libs/shared-utils/clamp.d.ts +0 -2
- package/libs/shared-utils/clamp.js +0 -6
- package/libs/shared-utils/constants.d.ts +0 -3
- package/libs/shared-utils/constants.js +0 -4
- package/libs/shared-utils/createCanvasTextTexture.d.ts +0 -8
- package/libs/shared-utils/createCanvasTextTexture.js +0 -11
- package/libs/shared-utils/createLine/index.d.ts +0 -3
- package/libs/shared-utils/createLine/index.js +0 -9
- package/libs/shared-utils/createResizeObserver.d.ts +0 -4
- package/libs/shared-utils/createResizeObserver.js +0 -22
- package/libs/shared-utils/debounce.d.ts +0 -6
- package/libs/shared-utils/debounce.js +0 -11
- package/libs/shared-utils/device.d.ts +0 -6
- package/libs/shared-utils/device.js +0 -7
- package/libs/shared-utils/dom/resizeObserver.d.ts +0 -4
- package/libs/shared-utils/dom/resizeObserver.js +0 -17
- package/libs/shared-utils/equal.d.ts +0 -11
- package/libs/shared-utils/equal.js +0 -54
- package/libs/shared-utils/even.d.ts +0 -9
- package/libs/shared-utils/even.js +0 -7
- package/libs/shared-utils/exports.d.ts +0 -2
- package/libs/shared-utils/exports.js +0 -115
- package/libs/shared-utils/filter.d.ts +0 -27
- package/libs/shared-utils/filter.js +0 -10
- package/libs/shared-utils/five/FiveDomEvents.d.ts +0 -138
- package/libs/shared-utils/five/FiveDomEvents.js +0 -312
- package/libs/shared-utils/five/FiveLine.d.ts +0 -10
- package/libs/shared-utils/five/FiveLine.js +0 -15
- package/libs/shared-utils/five/FivePuppet.d.ts +0 -64
- package/libs/shared-utils/five/FivePuppet.js +0 -45
- package/libs/shared-utils/five/calculateThreeMouse.d.ts +0 -11
- package/libs/shared-utils/five/calculateThreeMouse.js +0 -8
- package/libs/shared-utils/five/changeMode.d.ts +0 -3
- package/libs/shared-utils/five/changeMode.js +0 -51
- package/libs/shared-utils/five/fiveEveryReadyListener.d.ts +0 -2
- package/libs/shared-utils/five/fiveEveryReadyListener.js +0 -15
- package/libs/shared-utils/five/fiveLoaded.d.ts +0 -2
- package/libs/shared-utils/five/fiveLoaded.js +0 -30
- package/libs/shared-utils/five/fiveModelLoad.d.ts +0 -9
- package/libs/shared-utils/five/fiveModelLoad.js +0 -40
- package/libs/shared-utils/five/getFiveFromParentChain.d.ts +0 -8
- package/libs/shared-utils/five/getFiveFromParentChain.js +0 -20
- package/libs/shared-utils/five/getFiveModel.d.ts +0 -2
- package/libs/shared-utils/five/getFiveModel.js +0 -7
- package/libs/shared-utils/five/getFloorIndex.d.ts +0 -4
- package/libs/shared-utils/five/getFloorIndex.js +0 -22
- package/libs/shared-utils/five/getFloorMesh.d.ts +0 -3
- package/libs/shared-utils/five/getFloorMesh.js +0 -11
- package/libs/shared-utils/five/getPosition.d.ts +0 -24
- package/libs/shared-utils/five/getPosition.js +0 -41
- package/libs/shared-utils/five/getRaycasterByNdcPosition.d.ts +0 -6
- package/libs/shared-utils/five/getRaycasterByNdcPosition.js +0 -8
- package/libs/shared-utils/five/index.d.ts +0 -12
- package/libs/shared-utils/five/index.js +0 -20
- package/libs/shared-utils/five/initialCSS3DRender.d.ts +0 -1
- package/libs/shared-utils/five/initialCSS3DRender.js +0 -2
- package/libs/shared-utils/five/lookObject.d.ts +0 -15
- package/libs/shared-utils/five/lookObject.js +0 -98
- package/libs/shared-utils/five/lookPoint.d.ts +0 -11
- package/libs/shared-utils/five/lookPoint.js +0 -71
- package/libs/shared-utils/five/mode.d.ts +0 -3
- package/libs/shared-utils/five/mode.js +0 -10
- package/libs/shared-utils/five/transformPosition.d.ts +0 -2
- package/libs/shared-utils/five/transformPosition.js +0 -10
- package/libs/shared-utils/five/vector3ToScreen.d.ts +0 -5
- package/libs/shared-utils/five/vector3ToScreen.js +0 -10
- package/libs/shared-utils/fontSize.d.ts +0 -185
- package/libs/shared-utils/fontSize.js +0 -105
- package/libs/shared-utils/forReverseEach.d.ts +0 -1
- package/libs/shared-utils/forReverseEach.js +0 -7
- package/libs/shared-utils/formatRad.d.ts +0 -7
- package/libs/shared-utils/formatRad.js +0 -7
- package/libs/shared-utils/getPointFromHammerEvent.d.ts +0 -10
- package/libs/shared-utils/getPointFromHammerEvent.js +0 -8
- package/libs/shared-utils/getPxmm.d.ts +0 -19
- package/libs/shared-utils/getPxmm.js +0 -18
- package/libs/shared-utils/index.d.ts +0 -11
- package/libs/shared-utils/index.js +0 -14
- package/libs/shared-utils/isNil.d.ts +0 -10
- package/libs/shared-utils/isNil.js +0 -10
- package/libs/shared-utils/isTouchDevice.d.ts +0 -1
- package/libs/shared-utils/isTouchDevice.js +0 -4
- package/libs/shared-utils/isTruelyObject.d.ts +0 -18
- package/libs/shared-utils/isTruelyObject.js +0 -6
- package/libs/shared-utils/log.d.ts +0 -2
- package/libs/shared-utils/log.js +0 -6
- package/libs/shared-utils/logger.d.ts +0 -17
- package/libs/shared-utils/logger.js +0 -16
- package/libs/shared-utils/math/Interval.d.ts +0 -13
- package/libs/shared-utils/math/Interval.js +0 -25
- package/libs/shared-utils/math/Rectangle.d.ts +0 -27
- package/libs/shared-utils/math/Rectangle.js +0 -25
- package/libs/shared-utils/math/convexHull.d.ts +0 -5
- package/libs/shared-utils/math/convexHull.js +0 -20
- package/libs/shared-utils/math/deg2Rad.d.ts +0 -1
- package/libs/shared-utils/math/deg2Rad.js +0 -6
- package/libs/shared-utils/math/index.d.ts +0 -4
- package/libs/shared-utils/math/index.js +0 -1
- package/libs/shared-utils/math/inside.d.ts +0 -2
- package/libs/shared-utils/math/inside.js +0 -12
- package/libs/shared-utils/math/intersecting.d.ts +0 -25
- package/libs/shared-utils/math/intersecting.js +0 -25
- package/libs/shared-utils/math/planimetry.d.ts +0 -116
- package/libs/shared-utils/math/planimetry.js +0 -50
- package/libs/shared-utils/math/pointsIsRectangle.d.ts +0 -2
- package/libs/shared-utils/math/pointsIsRectangle.js +0 -9
- package/libs/shared-utils/math/rad2Deg.d.ts +0 -1
- package/libs/shared-utils/math/rad2Deg.js +0 -6
- package/libs/shared-utils/nearlyEqual.d.ts +0 -14
- package/libs/shared-utils/nearlyEqual.js +0 -12
- package/libs/shared-utils/nextFrame.d.ts +0 -1
- package/libs/shared-utils/nextFrame.js +0 -6
- package/libs/shared-utils/noop.d.ts +0 -5
- package/libs/shared-utils/noop.js +0 -5
- package/libs/shared-utils/object3d2LocalMatrix.d.ts +0 -12
- package/libs/shared-utils/object3d2LocalMatrix.js +0 -18
- package/libs/shared-utils/offscreenCanvas.d.ts +0 -2
- package/libs/shared-utils/offscreenCanvas.js +0 -12
- package/libs/shared-utils/playback.d.ts +0 -21
- package/libs/shared-utils/positionToVector3.d.ts +0 -17
- package/libs/shared-utils/positionToVector3.js +0 -15
- package/libs/shared-utils/promise/withResolvers.d.ts +0 -10
- package/libs/shared-utils/promise/withResolvers.js +0 -13
- package/libs/shared-utils/px2rem.d.ts +0 -1
- package/libs/shared-utils/px2rem.js +0 -6
- package/libs/shared-utils/safeObj.d.ts +0 -1
- package/libs/shared-utils/safeObj.js +0 -6
- package/libs/shared-utils/svelte/resizeObserver.d.ts +0 -2
- package/libs/shared-utils/svelte/resizeObserver.js +0 -13
- package/libs/shared-utils/tag.d.ts +0 -99
- package/libs/shared-utils/tag.js +0 -258
- package/libs/shared-utils/tap.d.ts +0 -8
- package/libs/shared-utils/tap.js +0 -6
- package/libs/shared-utils/three/Assets/index.d.ts +0 -3
- package/libs/shared-utils/three/Assets/index.js +0 -4
- package/libs/shared-utils/three/CSS3DRenderer/index.d.ts +0 -23
- package/libs/shared-utils/three/CSS3DRenderer/index.js +0 -107
- package/libs/shared-utils/three/Extras/Core/Interpolations.d.ts +0 -11
- package/libs/shared-utils/three/Extras/Core/Interpolations.js +0 -28
- package/libs/shared-utils/three/Extras/Core/Interpolations2.js +0 -34
- package/libs/shared-utils/three/Extras/Curves/BezierCurve3.d.ts +0 -13
- package/libs/shared-utils/three/Extras/Curves/BezierCurve3.js +0 -30
- package/libs/shared-utils/three/FBXLoader/index.d.ts +0 -6
- package/libs/shared-utils/three/FBXLoader/index.js +0 -1493
- package/libs/shared-utils/three/FragmentTransparencyMaterial.d.ts +0 -18
- package/libs/shared-utils/three/FragmentTransparencyMaterial.js +0 -47
- package/libs/shared-utils/three/GLTFLoader.d.ts +0 -9
- package/libs/shared-utils/three/GLTFLoader.js +0 -23
- package/libs/shared-utils/three/IObject3D.d.ts +0 -11
- package/libs/shared-utils/three/IObject3D.js +0 -38
- package/libs/shared-utils/three/LegacyPointHelper.d.ts +0 -22
- package/libs/shared-utils/three/LegacyPointHelper.js +0 -73
- package/libs/shared-utils/three/Magnifier.d.ts +0 -79
- package/libs/shared-utils/three/Magnifier.js +0 -244
- package/libs/shared-utils/three/PointDomHelper.d.ts +0 -18
- package/libs/shared-utils/three/PointDomHelper.js +0 -70
- package/libs/shared-utils/three/PointSelector/index.d.ts +0 -182
- package/libs/shared-utils/three/PointSelector/index.js +0 -404
- package/libs/shared-utils/three/PointSelector/utils/PointHelper.d.ts +0 -31
- package/libs/shared-utils/three/PointSelector/utils/PointHelper.js +0 -99
- package/libs/shared-utils/three/PointSelector/utils/PointHelper2.d.ts +0 -31
- package/libs/shared-utils/three/PointSelector/utils/PointHelper2.js +0 -157
- package/libs/shared-utils/three/PointSelector/utils/PointSelectorHelper.d.ts +0 -73
- package/libs/shared-utils/three/PointSelector/utils/PointSelectorHelper.js +0 -78
- package/libs/shared-utils/three/PointSelector/utils/contents.d.ts +0 -1
- package/libs/shared-utils/three/PointSelector/utils/contents.js +0 -4
- package/libs/shared-utils/three/PointSelector/utils/html.d.ts +0 -4
- package/libs/shared-utils/three/PointSelector/utils/html.js +0 -66
- package/libs/shared-utils/three/PointSelector/utils/typing.d.ts +0 -8
- package/libs/shared-utils/three/Quadrangle.d.ts +0 -20
- package/libs/shared-utils/three/Quadrangle.js +0 -65
- package/libs/shared-utils/three/addIfNotExists.d.ts +0 -2
- package/libs/shared-utils/three/addIfNotExists.js +0 -8
- package/libs/shared-utils/three/applyObjectMatrixWorld.d.ts +0 -3
- package/libs/shared-utils/three/applyObjectMatrixWorld.js +0 -13
- package/libs/shared-utils/three/blink.d.ts +0 -278
- package/libs/shared-utils/three/blink.js +0 -345
- package/libs/shared-utils/three/boundingBox.d.ts +0 -25
- package/libs/shared-utils/three/boundingBox.js +0 -90
- package/libs/shared-utils/three/centerPoint.d.ts +0 -2
- package/libs/shared-utils/three/centerPoint.js +0 -8
- package/libs/shared-utils/three/closeVectors.d.ts +0 -2
- package/libs/shared-utils/three/closeVectors.js +0 -10
- package/libs/shared-utils/three/core/Five_LineMaterial2.d.ts +0 -20
- package/libs/shared-utils/three/core/Five_LineMaterial2.js +0 -307
- package/libs/shared-utils/three/core/Line2.d.ts +0 -13
- package/libs/shared-utils/three/core/Line2.js +0 -15
- package/libs/shared-utils/three/core/LineGeometry.d.ts +0 -13
- package/libs/shared-utils/three/core/LineGeometry.js +0 -26
- package/libs/shared-utils/three/core/LineMaterial.d.ts +0 -15
- package/libs/shared-utils/three/core/LineMaterial.js +0 -40
- package/libs/shared-utils/three/core/LineMaterial2.d.ts +0 -15
- package/libs/shared-utils/three/core/LineMaterial2.js +0 -40
- package/libs/shared-utils/three/core/LineSegments.d.ts +0 -9
- package/libs/shared-utils/three/core/LineSegments.js +0 -9
- package/libs/shared-utils/three/core/Object3D.d.ts +0 -8
- package/libs/shared-utils/three/core/Object3D.js +0 -22
- package/libs/shared-utils/three/core/PrismAnimationGeometry.d.ts +0 -25
- package/libs/shared-utils/three/core/PrismAnimationGeometry.js +0 -146
- package/libs/shared-utils/three/core/PrismGeometry.d.ts +0 -22
- package/libs/shared-utils/three/core/PrismGeometry.js +0 -44
- package/libs/shared-utils/three/core/Raycaster.d.ts +0 -6
- package/libs/shared-utils/three/core/Raycaster.js +0 -34
- package/libs/shared-utils/three/core/Sphere.d.ts +0 -4
- package/libs/shared-utils/three/core/Sphere.js +0 -18
- package/libs/shared-utils/three/core/polygonVertex.d.ts +0 -8
- package/libs/shared-utils/three/core/polygonVertex.js +0 -16
- package/libs/shared-utils/three/earcut3D.d.ts +0 -2
- package/libs/shared-utils/three/earcut3D.js +0 -12
- package/libs/shared-utils/three/filterVisibleIntersections.d.ts +0 -3
- package/libs/shared-utils/three/filterVisibleIntersections.js +0 -7
- package/libs/shared-utils/three/generatePolygonGeometry.d.ts +0 -9
- package/libs/shared-utils/three/generatePolygonGeometry.js +0 -19
- package/libs/shared-utils/three/geometryUtil.d.ts +0 -15
- package/libs/shared-utils/three/geometryUtil.js +0 -43
- package/libs/shared-utils/three/getCoords.d.ts +0 -9
- package/libs/shared-utils/three/getCoords.js +0 -13
- package/libs/shared-utils/three/getIntersect.d.ts +0 -22
- package/libs/shared-utils/three/getIntersect.js +0 -24
- package/libs/shared-utils/three/getNormal.d.ts +0 -5
- package/libs/shared-utils/three/getNormal.js +0 -12
- package/libs/shared-utils/three/getObjectVisible.d.ts +0 -5
- package/libs/shared-utils/three/getObjectVisible.js +0 -4
- package/libs/shared-utils/three/getPositionsByObjectFit.d.ts +0 -3
- package/libs/shared-utils/three/getPositionsByObjectFit.js +0 -20
- package/libs/shared-utils/three/getRaycaster.d.ts +0 -6
- package/libs/shared-utils/three/getRaycaster.js +0 -12
- package/libs/shared-utils/three/getTextureLoader.d.ts +0 -6
- package/libs/shared-utils/three/getTextureLoader.js +0 -15
- package/libs/shared-utils/three/index.d.ts +0 -15
- package/libs/shared-utils/three/index.js +0 -14
- package/libs/shared-utils/three/libs/NURBSCurve.js +0 -22
- package/libs/shared-utils/three/libs/NURBSUtils.js +0 -212
- package/libs/shared-utils/three/libs/inflate.js +0 -282
- package/libs/shared-utils/three/loadTexture.d.ts +0 -6
- package/libs/shared-utils/three/loadTexture.js +0 -37
- package/libs/shared-utils/three/loadVideoTexture.d.ts +0 -9
- package/libs/shared-utils/three/loadVideoTexture.js +0 -34
- package/libs/shared-utils/three/recurveFindObject.d.ts +0 -2
- package/libs/shared-utils/three/recurveFindObject.js +0 -6
- package/libs/shared-utils/three/temp.d.ts +0 -2
- package/libs/shared-utils/three/temp.js +0 -6
- package/libs/shared-utils/three/transformPositionToVector3.d.ts +0 -7
- package/libs/shared-utils/three/transformPositionToVector3.js +0 -5
- package/libs/shared-utils/three/transformToMeshBasicMaterial.d.ts +0 -2
- package/libs/shared-utils/three/transformToMeshBasicMaterial.js +0 -24
- package/libs/shared-utils/three/vector3ToArray.d.ts +0 -3
- package/libs/shared-utils/three/vector3ToArray.js +0 -6
- package/libs/shared-utils/three/vectorIsEqual.d.ts +0 -2
- package/libs/shared-utils/three/vectorIsEqual.js +0 -6
- package/libs/shared-utils/threex/domevents/index.js +0 -222
- package/libs/shared-utils/throttle.d.ts +0 -7
- package/libs/shared-utils/throttle.js +0 -11
- package/libs/shared-utils/tinyEJSrender.d.ts +0 -5
- package/libs/shared-utils/tinyEJSrender.js +0 -140
- package/libs/shared-utils/to.d.ts +0 -8
- package/libs/shared-utils/to.js +0 -28
- package/libs/shared-utils/translateMode/getDistanceFromModel.d.ts +0 -2
- package/libs/shared-utils/translateMode/getDistanceFromModel.js +0 -11
- package/libs/shared-utils/typescript/entries.d.ts +0 -2
- package/libs/shared-utils/typescript/entries.js +0 -6
- package/libs/shared-utils/url/absoluteUrl.d.ts +0 -5
- package/libs/shared-utils/url/absoluteUrl.js +0 -6
- package/libs/shared-utils/url/defaultUrls.d.ts +0 -30
- package/libs/shared-utils/url/defaultUrls.js +0 -26
- package/libs/shared-utils/url/getUrl.d.ts +0 -4
- package/libs/shared-utils/url/getUrl.js +0 -7
- package/libs/shared-utils/url/replace-static-prefix.d.ts +0 -11
- package/libs/shared-utils/url/replace-static-prefix.js +0 -28
- package/libs/shared-utils/util.d.ts +0 -1
- package/libs/shared-utils/util.js +0 -6
- package/libs/shared-utils/uuid.d.ts +0 -5
- package/libs/shared-utils/uuid.js +0 -9
- package/libs/shared-utils/vectorToCoordinate.d.ts +0 -7
- package/libs/shared-utils/vectorToCoordinate.js +0 -10
- package/libs/typings/math.type.d.ts +0 -44
- package/libs/typings/typings.d.ts +0 -15
- package/libs/typings/utils.type.d.ts +0 -4
- package/libs/vendor/@realsee/five/vfx/index.js +0 -977
- package/libs/vendor/@tweenjs/tween/dist/tween.esm.js.js +0 -412
- package/libs/vendor/animejs/lib/anime.es.js +0 -863
- package/libs/vendor/classnames/index.js +0 -47
- package/libs/vendor/earcut/src/earcut.js +0 -280
- package/libs/vendor/easy-reactive/main.js +0 -3
- package/libs/vendor/easy-reactive/src/simply-reactive.js +0 -44
- package/libs/vendor/easy-reactive/src/utils/object.js +0 -12
- package/libs/vendor/easy-reactive/src/utils/subscription.js +0 -28
- package/libs/vendor/easy-reactive/src/utils/watcher.js +0 -17
- package/libs/vendor/gl-vec2/add.js +0 -7
- package/libs/vendor/gl-vec2/dot.js +0 -7
- package/libs/vendor/gl-vec2/normalize.js +0 -8
- package/libs/vendor/gl-vec2/set.js +0 -7
- package/libs/vendor/gl-vec2/subtract.js +0 -7
- package/libs/vendor/hammerjs/hammer.js +0 -1189
- package/libs/vendor/hotkeys-js/dist/hotkeys.esm.js +0 -384
- package/libs/vendor/lodash.clonedeep/index.js +0 -457
- package/libs/vendor/lodash.get/index.js +0 -236
- package/libs/vendor/lodash.isequal/index.js +0 -489
- package/libs/vendor/object-assign-deep/objectAssignDeep.js +0 -62
- package/libs/vendor/polyline-miter-util/index.js +0 -18
- package/libs/vendor/polyline-normals/index.js +0 -28
- package/libs/vendor/resize-observer-polyfill/dist/ResizeObserver.es.js +0 -290
- package/libs/vendor/svelte/easing/index.js +0 -11
- package/libs/vendor/svelte/index.js +0 -1
- package/libs/vendor/svelte/internal/index.js +0 -750
- package/libs/vendor/svelte/store/index.js +0 -31
- package/libs/vendor/svelte/transition/index.js +0 -40
- package/libs/vendor/svelte-carousel/src/actions/hoverable/event.js +0 -18
- package/libs/vendor/svelte-carousel/src/actions/hoverable/hoverable.js +0 -19
- package/libs/vendor/svelte-carousel/src/actions/hoverable/index.js +0 -1
- package/libs/vendor/svelte-carousel/src/actions/swipeable/event.js +0 -26
- package/libs/vendor/svelte-carousel/src/actions/swipeable/index.js +0 -1
- package/libs/vendor/svelte-carousel/src/actions/swipeable/swipeable.js +0 -51
- package/libs/vendor/svelte-carousel/src/actions/tappable/event.js +0 -18
- package/libs/vendor/svelte-carousel/src/actions/tappable/index.js +0 -1
- package/libs/vendor/svelte-carousel/src/actions/tappable/tappable.js +0 -36
- package/libs/vendor/svelte-carousel/src/components/Arrow/Arrow.js +0 -79
- package/libs/vendor/svelte-carousel/src/components/Carousel/Carousel.js +0 -789
- package/libs/vendor/svelte-carousel/src/components/Carousel/createCarousel.js +0 -261
- package/libs/vendor/svelte-carousel/src/components/Dot/Dot.js +0 -58
- package/libs/vendor/svelte-carousel/src/components/Dots/Dots.js +0 -127
- package/libs/vendor/svelte-carousel/src/components/Progress/Progress.js +0 -52
- package/libs/vendor/svelte-carousel/src/direction.js +0 -5
- package/libs/vendor/svelte-carousel/src/main.js +0 -1
- package/libs/vendor/svelte-carousel/src/units.js +0 -7
- package/libs/vendor/svelte-carousel/src/utils/ProgressManager.js +0 -52
- package/libs/vendor/svelte-carousel/src/utils/clones.js +0 -60
- package/libs/vendor/svelte-carousel/src/utils/event.js +0 -12
- package/libs/vendor/svelte-carousel/src/utils/interval.js +0 -4
- package/libs/vendor/svelte-carousel/src/utils/lazy.js +0 -48
- package/libs/vendor/svelte-carousel/src/utils/math.js +0 -11
- package/libs/vendor/svelte-carousel/src/utils/object.js +0 -13
- package/libs/vendor/svelte-carousel/src/utils/page.js +0 -154
- /package/dist/{CSS3DRenderPlugin → types/CSS3DRenderPlugin}/utils/random.d.ts +0 -0
- /package/dist/{CruisePlugin → types/CruisePlugin}/utils/coordinatesAngle.d.ts +0 -0
- /package/dist/{shared-utils → types/CruisePlugin/utils}/formatRad.d.ts +0 -0
- /package/{libs → dist/types}/CruisePlugin/utils/linerValue.d.ts +0 -0
- /package/dist/{CruisePlugin → types/CruisePlugin}/utils/safeCall.d.ts +0 -0
- /package/dist/{CruisePlugin → types/CruisePlugin}/utils/sleep.d.ts +0 -0
- /package/dist/{DigitalPerformancePlugin → types/DigitalPerformancePlugin}/animation-script-adapter.d.ts +0 -0
- /package/dist/{DigitalPerformancePlugin → types/DigitalPerformancePlugin}/mock.d.ts +0 -0
- /package/dist/{DigitalPerformancePlugin → types/DigitalPerformancePlugin}/movement-track-classifier.d.ts +0 -0
- /package/dist/{DigitalPerformancePlugin → types/DigitalPerformancePlugin}/transform-script-data.d.ts +0 -0
- /package/dist/{FireScenePlugin → types/FireScenePlugin}/typing.d.ts +0 -0
- /package/dist/{GuideLinePlugin → types/GuideLinePlugin}/utils/index.d.ts +0 -0
- /package/dist/{ItemLabelPlugin → types/ItemLabelPlugin}/utils/getLabelTransform.d.ts +0 -0
- /package/dist/{ModelMakerPlugin → types/ModelMakerPlugin}/typings/data.d.ts +0 -0
- /package/dist/{ModelRoomLabelPlugin → types/ModelRoomLabelPlugin}/Assets/roomLabelBg.d.ts +0 -0
- /package/dist/{ModelRoomLabelPlugin → types/ModelRoomLabelPlugin}/typings.d.ts +0 -0
- /package/dist/{Object3DHelperPlugin → types/Object3DHelperPlugin}/typings.d.ts +0 -0
- /package/dist/{PanoCompassPlugin → types/PanoCompassPlugin}/Assets/roomInfoIcon.d.ts +0 -0
- /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/Components/Common/icons/index.d.ts +0 -0
- /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/Modules/DeleteDom/_Assets/delete.svg.d.ts +0 -0
- /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/Modules/DeleteDom/_Assets/delete_bg.png.d.ts +0 -0
- /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/Modules/DeleteDom/_Assets/delete_hover_bg.png.d.ts +0 -0
- /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/Modules/UIController/style.d.ts +0 -0
- /package/{libs → dist/types}/PanoMeasurePlugin/typings/utils.type.d.ts +0 -0
- /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/utils/ironbox.d.ts +0 -0
- /package/dist/{PanoMeasurePlugin → types/PanoMeasurePlugin}/utils/isIntersecting.d.ts +0 -0
- /package/dist/{PanoRulerPlugin → types/PanoRulerPlugin}/style.d.ts +0 -0
- /package/dist/{PanoRulerPlugin → types/PanoRulerPlugin}/typings.d.ts +0 -0
- /package/dist/{PanoRulerProPlugin → types/PanoRulerProPlugin}/typings.d.ts +0 -0
- /package/dist/{PanoSpatialTagPlugin → types/PanoSpatialTagPlugin}/style.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/Assets/Icon.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/Components/Common/Icon/tag-popover-arrow-base64.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/Components/Tag/Assets/marketingIcon.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/audio/AudioDiagnostics.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/checkRange.d.ts +0 -0
- /package/{libs → dist/types}/PanoTagPlugin/utils/color.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/constants.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/doUtil.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/noTypecheck.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/popoverContainer.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/px2rem.d.ts +0 -0
- /package/{libs → dist/types}/PanoTagPlugin/utils/requestIdleCallback.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/search.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/throttle.d.ts +0 -0
- /package/{libs → dist/types}/PanoTagPlugin/utils/timeToString.d.ts +0 -0
- /package/dist/{PanoTagPlugin → types/PanoTagPlugin}/utils/videoHelper.d.ts +0 -0
- /package/dist/{PipelinePlugin → types/PipelinePlugin}/typing/PluginData.d.ts +0 -0
- /package/dist/{PipelinePlugin → types/PipelinePlugin}/typing/ServerData.d.ts +0 -0
- /package/dist/{Sculpt → types/Sculpt}/utils/Meshes/getLengthHTML.d.ts +0 -0
- /package/dist/{Sculpt → types/Sculpt}/utils/Modules/Cursor.d.ts +0 -0
- /package/dist/{Sculpt → types/Sculpt}/utils/Modules/DeleteButtonBgBorder.d.ts +0 -0
- /package/dist/{Sculpt → types/Sculpt}/utils/Modules/DeleteIconSVG.d.ts +0 -0
- /package/dist/{Sculpt → types/Sculpt}/utils/isIntersecting.d.ts +0 -0
- /package/dist/{Sculpt → types/Sculpt}/utils/radiusToSegments.d.ts +0 -0
- /package/dist/{Sculpt → types/Sculpt}/utils/unit.d.ts +0 -0
- /package/dist/{components → types/components}/AreaLabel/Assets/fontSize.d.ts +0 -0
- /package/dist/{components → types/components}/AreaLabel/Assets/roomLabelBg.d.ts +0 -0
- /package/dist/{components → types/components}/PaintBrush/Subscribe.d.ts +0 -0
- /package/dist/{components → types/components}/PaintBrush/tween.d.ts +0 -0
- /package/dist/{components → types/components}/PaintBrush/utils.d.ts +0 -0
- /package/dist/{floorplan → types/floorplan}/Assets/camera.d.ts +0 -0
- /package/dist/{floorplan → types/floorplan}/Assets/compass.d.ts +0 -0
- /package/dist/{floorplan → types/floorplan}/Assets/floorplanExtraObject.d.ts +0 -0
- /package/dist/{floorplan → types/floorplan}/MapviewFloorplanPlugin/items.d.ts +0 -0
- /package/{libs/PanoSpatialTagPlugin → dist/types/floorplan/TopviewFloorplanPlugin}/style.d.ts +0 -0
- /package/dist/{floorplan → types/floorplan}/constant.d.ts +0 -0
- /package/dist/{floorplan → types/floorplan}/typings/floorplanServerData.d.ts +0 -0
- /package/dist/{floorplan → types/floorplan}/typings/utility.d.ts +0 -0
- /package/dist/{floorplan → types/floorplan}/utils/constant.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/Constants/RenderOrder.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/Helper/HTML/tipsDom.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/Helper/HTML/utils/createElement.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/typings/Direction.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/typings/Scissor.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/Object3DHelper/utils/object3DBoundingPosition.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/animationFrame/calculateProgress.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/animationFrame/formatRad.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/animationFrame/tween.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/audio.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/clamp.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/constants.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/createResizeObserver.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/debounce.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/device.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/dom/resizeObserver.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/equal.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/even.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/filter.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/forReverseEach.d.ts +0 -0
- /package/{libs/CruisePlugin/utils → dist/types/shared-utils}/formatRad.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/isNil.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/isTouchDevice.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/isTruelyObject.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/log.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/logger.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/math/Interval.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/math/deg2Rad.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/math/inside.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/math/intersecting.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/math/rad2Deg.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/nearlyEqual.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/nextFrame.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/noop.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/playback.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/promise/withResolvers.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/px2rem.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/safeObj.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/tap.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/three/Assets/index.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/three/PointSelector/utils/contents.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/three/core/polygonVertex.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/throttle.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/tinyEJSrender.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/to.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/url/absoluteUrl.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/url/defaultUrls.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/url/getUrl.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/url/replace-static-prefix.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/util.d.ts +0 -0
- /package/dist/{shared-utils → types/shared-utils}/uuid.d.ts +0 -0
- /package/dist/{typings → types/typings}/math.type.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-DIDtFrBE.js","names":["isNil","random","random","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","addFrontScene","removeFrontScene","initialCSS3DRender","addBehindScene","removeBehindScene","fiveEveryReadyListener","even","OpecityMesh","CSS3DObject","waitFiveModelLoaded","arrayPositionToVector3","anyPositionToVector3","centerPoint","toArray","getNormal","_raycaster","resizeObserver","isAutoLookAtModelTag","isPlaneTag","reblink","lookPoint","getTagPosition","isPoint3DTag","isPanoramaLike","getBoxCorners","isMediaModelTag","isModelLike","getTagCenterPosition","isMediaPlaneTag","applyMatrixToPoints","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","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","set_style","first_child","spread_props","pop","stopPropagation","reset","mountComponent","user_derived","slot","await_block","index","html","get","SculptModules","Box","Polygon","Rectangle","require_objectAssignDeep","safeObj","getVideoTexture","isIOSWX","Image_Play_Icon_With_Text","Image_Default_Point","Image_Play_Icon","CONST","withResolvers","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","checkRange","range","normalPositionToPositions","squareHalfSize","plane","normal","position","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","center","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","point","VideoPlane","videoSrc","playButton","videoCoverSrc","cacheScope","domEvents","initialGeneration","paused","d","dispose","detached","manager","userAction","session","current","video","operations","onError","clearError","fromStart","playing","coverMesh","Vector3","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","tagPosition","tagData","freezeTagData","initialConfig","computedConfig","currentConfig","initialUnfolded","matrix4","end","rotation","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","size","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","root$38","root_1$18","from_html","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","transform","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","next","$$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","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","rotationMatrix","quaternion","euler","invertedQuaternion","boxLocalPoints","xs","ys","zs","halfSize","BoxTag","userStyle","point1","point2","upVector","sculptData","handler","newPosition","unitBottomCorners","unitTopCorner","corner","rawHeightPoint","vertices","rightmostVertex","projected","corners","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/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","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\"> </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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"}
|