@sapui5/sap.ui.vk 1.139.0 → 1.141.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/package.json +1 -1
  2. package/src/sap/ui/vk/.library +1 -1
  3. package/src/sap/ui/vk/AnimationPlayback.js +1 -1
  4. package/src/sap/ui/vk/AnimationPlayer.js +1 -1
  5. package/src/sap/ui/vk/AnimationSequence.js +1 -1
  6. package/src/sap/ui/vk/AnimationTimeSlider.js +1 -1
  7. package/src/sap/ui/vk/AnimationTrack.js +1 -1
  8. package/src/sap/ui/vk/Annotation.js +3 -3
  9. package/src/sap/ui/vk/BaseNodeProxy.js +1 -1
  10. package/src/sap/ui/vk/Camera.js +1 -1
  11. package/src/sap/ui/vk/ContentConnector.js +1 -1
  12. package/src/sap/ui/vk/ContentManager.js +1 -1
  13. package/src/sap/ui/vk/ContentResource.js +1 -1
  14. package/src/sap/ui/vk/Core.js +1 -1
  15. package/src/sap/ui/vk/DownloadManager.js +1 -1
  16. package/src/sap/ui/vk/DrawerToolbar.js +1 -1
  17. package/src/sap/ui/vk/DvlException.js +1 -1
  18. package/src/sap/ui/vk/FlexibleControl.js +1 -1
  19. package/src/sap/ui/vk/FlexibleControlLayoutData.js +1 -1
  20. package/src/sap/ui/vk/Highlight.js +1 -1
  21. package/src/sap/ui/vk/ImageContentManager.js +1 -1
  22. package/src/sap/ui/vk/JointUtils.js +1 -1
  23. package/src/sap/ui/vk/LayerProxy.js +1 -1
  24. package/src/sap/ui/vk/Loco.js +1 -1
  25. package/src/sap/ui/vk/Material.js +1 -1
  26. package/src/sap/ui/vk/NativeViewport.js +1 -1
  27. package/src/sap/ui/vk/NodeContentType.js +6 -1
  28. package/src/sap/ui/vk/NodeHierarchy.js +1 -1
  29. package/src/sap/ui/vk/NodeProxy.js +1 -1
  30. package/src/sap/ui/vk/NodeUtils.js +1 -1
  31. package/src/sap/ui/vk/Notifications.js +1 -1
  32. package/src/sap/ui/vk/ObjectType.js +2 -1
  33. package/src/sap/ui/vk/OrthographicCamera.js +1 -1
  34. package/src/sap/ui/vk/PerspectiveCamera.js +1 -1
  35. package/src/sap/ui/vk/ProgressIndicator.js +1 -1
  36. package/src/sap/ui/vk/RedlineCollaboration.js +1 -1
  37. package/src/sap/ui/vk/RedlineConversation.js +1 -1
  38. package/src/sap/ui/vk/RedlineDesign.js +1 -1
  39. package/src/sap/ui/vk/RedlineElement.js +1 -1
  40. package/src/sap/ui/vk/RedlineElementComment.js +1 -1
  41. package/src/sap/ui/vk/RedlineElementEllipse.js +1 -1
  42. package/src/sap/ui/vk/RedlineElementFreehand.js +1 -1
  43. package/src/sap/ui/vk/RedlineElementLine.js +1 -1
  44. package/src/sap/ui/vk/RedlineElementRectangle.js +1 -1
  45. package/src/sap/ui/vk/RedlineElementText.js +1 -1
  46. package/src/sap/ui/vk/RedlineSurface.js +1 -1
  47. package/src/sap/ui/vk/SafeArea.js +1 -1
  48. package/src/sap/ui/vk/Scene.js +1 -1
  49. package/src/sap/ui/vk/SceneTree.js +1 -1
  50. package/src/sap/ui/vk/StepNavigation.js +1 -1
  51. package/src/sap/ui/vk/Texture.js +1 -1
  52. package/src/sap/ui/vk/ToggleMenuButton.js +1 -1
  53. package/src/sap/ui/vk/ToggleMenuItem.js +1 -1
  54. package/src/sap/ui/vk/Toolbar.js +1 -1
  55. package/src/sap/ui/vk/View.js +1 -1
  56. package/src/sap/ui/vk/ViewGallery.js +1 -1
  57. package/src/sap/ui/vk/ViewGalleryThumbnail.js +1 -1
  58. package/src/sap/ui/vk/ViewGroup.js +1 -1
  59. package/src/sap/ui/vk/ViewManager.js +1 -1
  60. package/src/sap/ui/vk/ViewStateManager.js +1 -1
  61. package/src/sap/ui/vk/ViewStateManagerBase.js +1 -1
  62. package/src/sap/ui/vk/Viewer.js +12 -2
  63. package/src/sap/ui/vk/Viewport.js +43 -1
  64. package/src/sap/ui/vk/ViewportBase.js +24 -1
  65. package/src/sap/ui/vk/dvl/BaseNodeProxy.js +1 -1
  66. package/src/sap/ui/vk/dvl/ContentManager.js +1 -1
  67. package/src/sap/ui/vk/dvl/GraphicsCore.js +1 -1
  68. package/src/sap/ui/vk/dvl/LayerProxy.js +1 -1
  69. package/src/sap/ui/vk/dvl/NodeHierarchy.js +1 -1
  70. package/src/sap/ui/vk/dvl/NodeProxy.js +1 -1
  71. package/src/sap/ui/vk/dvl/Scene.js +1 -1
  72. package/src/sap/ui/vk/dvl/ViewStateManager.js +1 -1
  73. package/src/sap/ui/vk/dvl/Viewport.js +2 -2
  74. package/src/sap/ui/vk/ecad/ElementsPanel.js +636 -375
  75. package/src/sap/ui/vk/ecad/LayersPanel.js +88 -75
  76. package/src/sap/ui/vk/i18n/messagebundle.properties +0 -4
  77. package/src/sap/ui/vk/i18n/messagebundle_ar.properties +2 -3
  78. package/src/sap/ui/vk/i18n/messagebundle_bg.properties +2 -3
  79. package/src/sap/ui/vk/i18n/messagebundle_ca.properties +2 -3
  80. package/src/sap/ui/vk/i18n/messagebundle_cnr.properties +2 -3
  81. package/src/sap/ui/vk/i18n/messagebundle_cs.properties +2 -3
  82. package/src/sap/ui/vk/i18n/messagebundle_cy.properties +2 -3
  83. package/src/sap/ui/vk/i18n/messagebundle_da.properties +2 -3
  84. package/src/sap/ui/vk/i18n/messagebundle_de.properties +4 -5
  85. package/src/sap/ui/vk/i18n/messagebundle_el.properties +2 -3
  86. package/src/sap/ui/vk/i18n/messagebundle_en.properties +2 -3
  87. package/src/sap/ui/vk/i18n/messagebundle_en_GB.properties +2 -3
  88. package/src/sap/ui/vk/i18n/messagebundle_en_US_saprigi.properties +1 -3
  89. package/src/sap/ui/vk/i18n/messagebundle_es.properties +2 -3
  90. package/src/sap/ui/vk/i18n/messagebundle_es_MX.properties +2 -3
  91. package/src/sap/ui/vk/i18n/messagebundle_et.properties +2 -3
  92. package/src/sap/ui/vk/i18n/messagebundle_fi.properties +2 -3
  93. package/src/sap/ui/vk/i18n/messagebundle_fr.properties +2 -3
  94. package/src/sap/ui/vk/i18n/messagebundle_fr_CA.properties +2 -3
  95. package/src/sap/ui/vk/i18n/messagebundle_hi.properties +2 -3
  96. package/src/sap/ui/vk/i18n/messagebundle_hr.properties +2 -3
  97. package/src/sap/ui/vk/i18n/messagebundle_hu.properties +2 -3
  98. package/src/sap/ui/vk/i18n/messagebundle_id.properties +3 -4
  99. package/src/sap/ui/vk/i18n/messagebundle_it.properties +2 -3
  100. package/src/sap/ui/vk/i18n/messagebundle_iw.properties +2 -3
  101. package/src/sap/ui/vk/i18n/messagebundle_ja.properties +4 -5
  102. package/src/sap/ui/vk/i18n/messagebundle_kk.properties +2 -3
  103. package/src/sap/ui/vk/i18n/messagebundle_ko.properties +2 -3
  104. package/src/sap/ui/vk/i18n/messagebundle_lt.properties +2 -3
  105. package/src/sap/ui/vk/i18n/messagebundle_lv.properties +2 -3
  106. package/src/sap/ui/vk/i18n/messagebundle_mk.properties +2 -3
  107. package/src/sap/ui/vk/i18n/messagebundle_ms.properties +2 -3
  108. package/src/sap/ui/vk/i18n/messagebundle_nl.properties +2 -3
  109. package/src/sap/ui/vk/i18n/messagebundle_no.properties +3 -4
  110. package/src/sap/ui/vk/i18n/messagebundle_pl.properties +2 -3
  111. package/src/sap/ui/vk/i18n/messagebundle_pt.properties +2 -3
  112. package/src/sap/ui/vk/i18n/messagebundle_pt_PT.properties +2 -3
  113. package/src/sap/ui/vk/i18n/messagebundle_ro.properties +2 -3
  114. package/src/sap/ui/vk/i18n/messagebundle_ru.properties +2 -3
  115. package/src/sap/ui/vk/i18n/messagebundle_sh.properties +2 -3
  116. package/src/sap/ui/vk/i18n/messagebundle_sk.properties +2 -3
  117. package/src/sap/ui/vk/i18n/messagebundle_sl.properties +2 -3
  118. package/src/sap/ui/vk/i18n/messagebundle_sr.properties +2 -3
  119. package/src/sap/ui/vk/i18n/messagebundle_sv.properties +2 -3
  120. package/src/sap/ui/vk/i18n/messagebundle_th.properties +2 -3
  121. package/src/sap/ui/vk/i18n/messagebundle_tr.properties +2 -3
  122. package/src/sap/ui/vk/i18n/messagebundle_uk.properties +2 -3
  123. package/src/sap/ui/vk/i18n/messagebundle_vi.properties +3 -4
  124. package/src/sap/ui/vk/i18n/messagebundle_zh_CN.properties +2 -3
  125. package/src/sap/ui/vk/i18n/messagebundle_zh_TW.properties +2 -3
  126. package/src/sap/ui/vk/library.js +2 -2
  127. package/src/sap/ui/vk/measurements/Angle.js +1 -1
  128. package/src/sap/ui/vk/measurements/Area.js +1 -1
  129. package/src/sap/ui/vk/measurements/Distance.js +1 -1
  130. package/src/sap/ui/vk/measurements/Edge.js +1 -1
  131. package/src/sap/ui/vk/measurements/Face.js +1 -1
  132. package/src/sap/ui/vk/measurements/Feature.js +1 -1
  133. package/src/sap/ui/vk/measurements/Vertex.js +1 -1
  134. package/src/sap/ui/vk/pdf/ContentManager.js +85 -13
  135. package/src/sap/ui/vk/pdf/Viewport.js +1 -1
  136. package/src/sap/ui/vk/svg/BaseNodeProxy.js +1 -1
  137. package/src/sap/ui/vk/svg/ContentDeliveryService.js +1 -1
  138. package/src/sap/ui/vk/svg/ContentManager.js +2 -1
  139. package/src/sap/ui/vk/svg/Element.js +162 -23
  140. package/src/sap/ui/vk/svg/Ellipse.js +4 -0
  141. package/src/sap/ui/vk/svg/HotspotHelper.js +30 -17
  142. package/src/sap/ui/vk/svg/MiniMap.js +63 -1
  143. package/src/sap/ui/vk/svg/NodeHierarchy.js +17 -1
  144. package/src/sap/ui/vk/svg/NodeProxy.js +1 -1
  145. package/src/sap/ui/vk/svg/OrthographicCamera.js +1 -1
  146. package/src/sap/ui/vk/svg/Scene.js +1 -1
  147. package/src/sap/ui/vk/svg/SceneBuilder.js +57 -5
  148. package/src/sap/ui/vk/svg/Text.js +72 -30
  149. package/src/sap/ui/vk/svg/ViewStateManager.js +2 -2
  150. package/src/sap/ui/vk/svg/Viewport.js +178 -32
  151. package/src/sap/ui/vk/svg/ViewportRenderer.js +82 -0
  152. package/src/sap/ui/vk/thirdparty/BufferGeometryUtils.js +86 -27
  153. package/src/sap/ui/vk/thirdparty/pdf.js +18003 -13388
  154. package/src/sap/ui/vk/thirdparty/pdf.worker.js +38149 -36166
  155. package/src/sap/ui/vk/thirdparty/three.js +48127 -25854
  156. package/src/sap/ui/vk/threejs/AnimationHelper.js +1 -1
  157. package/src/sap/ui/vk/threejs/BaseNodeProxy.js +1 -1
  158. package/src/sap/ui/vk/threejs/Billboard.js +1 -1
  159. package/src/sap/ui/vk/threejs/Callout.js +1 -1
  160. package/src/sap/ui/vk/threejs/ContentDeliveryService.js +1 -1
  161. package/src/sap/ui/vk/threejs/ContentManager.js +1 -1
  162. package/src/sap/ui/vk/threejs/DetailView.js +1 -1
  163. package/src/sap/ui/vk/threejs/HighlightPlayer.js +1 -1
  164. package/src/sap/ui/vk/threejs/Material.js +1 -1
  165. package/src/sap/ui/vk/threejs/NodeHierarchy.js +1 -1
  166. package/src/sap/ui/vk/threejs/NodeProxy.js +1 -1
  167. package/src/sap/ui/vk/threejs/OrthographicCamera.js +1 -1
  168. package/src/sap/ui/vk/threejs/PerspectiveCamera.js +1 -1
  169. package/src/sap/ui/vk/threejs/PointCloudGroup.js +1 -1
  170. package/src/sap/ui/vk/threejs/Scene.js +1 -1
  171. package/src/sap/ui/vk/threejs/SceneBuilder.js +12 -1
  172. package/src/sap/ui/vk/threejs/Texture.js +1 -1
  173. package/src/sap/ui/vk/threejs/Thrustline.js +1 -1
  174. package/src/sap/ui/vk/threejs/ViewStateManager.js +7 -8
  175. package/src/sap/ui/vk/threejs/Viewport.js +7 -5
  176. package/src/sap/ui/vk/tools/AnchorPointTool.js +1 -1
  177. package/src/sap/ui/vk/tools/AnchorPointToolGizmo.js +1 -1
  178. package/src/sap/ui/vk/tools/AxisAngleRotationTool.js +1 -1
  179. package/src/sap/ui/vk/tools/AxisAngleRotationToolGizmo.js +1 -1
  180. package/src/sap/ui/vk/tools/CreateEllipseTool.js +1 -1
  181. package/src/sap/ui/vk/tools/CreateEllipseToolGizmo.js +1 -1
  182. package/src/sap/ui/vk/tools/CreateParametricGizmo.js +1 -1
  183. package/src/sap/ui/vk/tools/CreatePathTool.js +1 -1
  184. package/src/sap/ui/vk/tools/CreatePathToolGizmo.js +1 -1
  185. package/src/sap/ui/vk/tools/CreateRectangleTool.js +1 -1
  186. package/src/sap/ui/vk/tools/CreateRectangleToolGizmo.js +1 -1
  187. package/src/sap/ui/vk/tools/CreateTextTool.js +1 -1
  188. package/src/sap/ui/vk/tools/CreateTextToolGizmo.js +1 -1
  189. package/src/sap/ui/vk/tools/CrossSectionTool.js +1 -1
  190. package/src/sap/ui/vk/tools/CrossSectionToolGizmo.js +1 -1
  191. package/src/sap/ui/vk/tools/DuplicateSvgElementTool.js +1 -1
  192. package/src/sap/ui/vk/tools/DuplicateSvgElementToolGizmo.js +1 -1
  193. package/src/sap/ui/vk/tools/ExplodeTool.js +1 -1
  194. package/src/sap/ui/vk/tools/ExplodeToolGizmo.js +1 -1
  195. package/src/sap/ui/vk/tools/Gizmo.js +4 -3
  196. package/src/sap/ui/vk/tools/HitTestTool.js +1 -1
  197. package/src/sap/ui/vk/tools/MoveTool.js +1 -1
  198. package/src/sap/ui/vk/tools/MoveToolGizmo.js +1 -1
  199. package/src/sap/ui/vk/tools/PointCloudSelectionTool.js +1 -1
  200. package/src/sap/ui/vk/tools/PointCloudSelectionToolGizmo.js +1 -1
  201. package/src/sap/ui/vk/tools/RectSelectTool.js +1 -1
  202. package/src/sap/ui/vk/tools/RedlineTool.js +1 -1
  203. package/src/sap/ui/vk/tools/RedlineToolGizmo.js +1 -1
  204. package/src/sap/ui/vk/tools/RotateOrbitTool.js +1 -1
  205. package/src/sap/ui/vk/tools/RotateTool.js +1 -1
  206. package/src/sap/ui/vk/tools/RotateToolGizmo.js +1 -1
  207. package/src/sap/ui/vk/tools/RotateTurntableTool.js +1 -1
  208. package/src/sap/ui/vk/tools/ScaleTool.js +1 -1
  209. package/src/sap/ui/vk/tools/ScaleToolGizmo.js +1 -1
  210. package/src/sap/ui/vk/tools/SceneOrientationTool.js +1 -1
  211. package/src/sap/ui/vk/tools/SceneOrientationToolGizmo.js +1 -1
  212. package/src/sap/ui/vk/tools/Tool.js +1 -1
  213. package/src/sap/ui/vk/tools/TooltipTool.js +1 -1
  214. package/src/sap/ui/vk/tools/TooltipToolGizmo.js +1 -1
  215. package/src/sap/ui/vk/tools/TransformSvgElementTool.js +1 -1
  216. package/src/sap/ui/vk/tools/TransformSvgElementToolGizmo.js +3 -3
  217. package/src/sap/ui/vk/tools/TransformSvgElementToolHandler.js +1 -1
  218. package/src/sap/ui/vk/totara/Command.js +1 -0
  219. package/src/sap/ui/vk/totara/SceneContext.js +26 -2
  220. package/src/sap/ui/vk/totara/TotaraLoader.js +1 -0
  221. package/src/sap/ui/vk/totara/TotaraLoaderWorker.js +16 -0
  222. package/src/sap/ui/vk/totara/TotaraUtils.js +3 -1
  223. package/src/sap/ui/vk/ve/dvl.wasm +0 -0
@@ -44,7 +44,7 @@ SCENETREE_VISIBILITYSTATEHIDDEN=\u5355\u51FB\u4EE5\u53D8\u4E3A\u53EF\u89C1
44
44
  SCENETREE_VISIBILITYSTATEVISIBLEALL=\u5355\u51FB\u4EE5\u5168\u90E8\u9690\u85CF
45
45
  SCENETREE_VISIBILITYSTATEHIDDENALL=\u5355\u51FB\u4EE5\u5168\u90E8\u663E\u793A
46
46
  SCENETREE_SELECTIONSTATESELECTED=\u5DF2\u9009\u62E9
47
-
47
+ SCENETREE_SELECTED_SCENE_TREE_ITEM_INFO=\u5DF2\u9009\u62E9\uFF1A{0}
48
48
 
49
49
  CONTAINERBASE_FULLSCREEN=\u5168\u5C4F
50
50
  CONTAINERBASE_SETTINGS=\u8BBE\u7F6E
@@ -378,7 +378,6 @@ ELEMENTS_BUTTONTOOLTIP=\u5143\u7D20
378
378
 
379
379
  TOGGLE_HOTSPOTS_BUTTONTOOLTIP=\u5207\u6362\u70ED\u70B9
380
380
 
381
- LAYERS_PANEL_NO_DATA=\u65E0\u4EFB\u4F55\u5C42
382
381
  LAYERS_PANEL_SHOW_BUTTON=\u663E\u793A
383
382
  LAYERS_PANEL_SHOW_BUTTON_TOOLTIP=\u663E\u793A\u6240\u9009\u5C42\u7684\u5143\u7D20
384
383
  LAYERS_PANEL_HIDE_BUTTON=\u9690\u85CF
@@ -389,7 +388,6 @@ LAYERS_PANEL_VISIBLE_COLUMN_VISIBLE_TOOLTIP=\u6240\u6709\u5143\u7D20\u90FD\u53EF
389
388
  LAYERS_PANEL_VISIBLE_COLUMN_PARTIAL_TOOLTIP=\u4E00\u4E9B\u5143\u7D20\u53EF\u89C1\uFF0C\u4E00\u4E9B\u5143\u7D20\u5DF2\u9690\u85CF
390
389
  LAYERS_PANEL_VISIBLE_COLUMN_HIDDEN_TOOLTIP=\u6240\u6709\u5143\u7D20\u90FD\u5DF2\u9690\u85CF
391
390
 
392
- ELEMENTS_PANEL_NO_DATA=\u65E0\u4EFB\u4F55\u5143\u7D20
393
391
  ELEMENTS_PANEL_SHOW_BUTTON=\u663E\u793A
394
392
  ELEMENTS_PANEL_SHOW_BUTTON_TOOLTIP=\u5728\u89C6\u53E3\u4E2D\u663E\u793A\u5143\u7D20
395
393
  ELEMENTS_PANEL_HIDE_BUTTON=\u9690\u85CF
@@ -402,6 +400,7 @@ ELEMENTS_PANEL_VISIBLE_COLUMN=\u53EF\u89C1\u6027
402
400
  ELEMENTS_PANEL_VISIBLE_COLUMN_VISIBLE_TOOLTIP=\u53EF\u89C1\u5143\u7D20
403
401
  ELEMENTS_PANEL_VISIBLE_COLUMN_PARTIAL_TOOLTIP=\u90E8\u5206\u53EF\u89C1\u5143\u7D20
404
402
  ELEMENTS_PANEL_VISIBLE_COLUMN_HIDDEN_TOOLTIP=\u5DF2\u9690\u85CF\u5143\u7D20
403
+
405
404
  ELEMENTS_PANEL_TYPE_COMPONENT=\u7EC4\u4EF6
406
405
  ELEMENTS_PANEL_TYPE_NET=\u7F51
407
406
  ELEMENTS_PANEL_TYPE_UNKNOWN=\u672A\u77E5
@@ -44,7 +44,7 @@ SCENETREE_VISIBILITYSTATEHIDDEN=\u6309\u4E00\u4E0B\u4EE5\u986F\u793A
44
44
  SCENETREE_VISIBILITYSTATEVISIBLEALL=\u6309\u4E00\u4E0B\u4EE5\u5168\u90E8\u96B1\u85CF
45
45
  SCENETREE_VISIBILITYSTATEHIDDENALL=\u6309\u4E00\u4E0B\u4EE5\u5168\u90E8\u986F\u793A
46
46
  SCENETREE_SELECTIONSTATESELECTED=\u5DF2\u9078\u64C7
47
-
47
+ SCENETREE_SELECTED_SCENE_TREE_ITEM_INFO=\u5DF2\u9078\u64C7\uFF1A{0}
48
48
 
49
49
  CONTAINERBASE_FULLSCREEN=\u5168\u756B\u9762
50
50
  CONTAINERBASE_SETTINGS=\u8A2D\u5B9A
@@ -378,7 +378,6 @@ ELEMENTS_BUTTONTOOLTIP=\u5143\u7D20
378
378
 
379
379
  TOGGLE_HOTSPOTS_BUTTONTOOLTIP=\u5207\u63DB\u71B1\u9EDE
380
380
 
381
- LAYERS_PANEL_NO_DATA=\u6C92\u6709\u5C64
382
381
  LAYERS_PANEL_SHOW_BUTTON=\u986F\u793A
383
382
  LAYERS_PANEL_SHOW_BUTTON_TOOLTIP=\u986F\u793A\u6240\u9078\u5C64\u7684\u5143\u7D20
384
383
  LAYERS_PANEL_HIDE_BUTTON=\u96B1\u85CF
@@ -389,7 +388,6 @@ LAYERS_PANEL_VISIBLE_COLUMN_VISIBLE_TOOLTIP=\u6240\u6709\u5143\u7D20\u7686\u53EF
389
388
  LAYERS_PANEL_VISIBLE_COLUMN_PARTIAL_TOOLTIP=\u90E8\u4EFD\u5143\u7D20\u53EF\u898B\uFF0C\u90E8\u4EFD\u5143\u7D20\u5247\u96B1\u85CF
390
389
  LAYERS_PANEL_VISIBLE_COLUMN_HIDDEN_TOOLTIP=\u6240\u6709\u5143\u7D20\u7686\u96B1\u85CF
391
390
 
392
- ELEMENTS_PANEL_NO_DATA=\u6C92\u6709\u5143\u7D20
393
391
  ELEMENTS_PANEL_SHOW_BUTTON=\u986F\u793A
394
392
  ELEMENTS_PANEL_SHOW_BUTTON_TOOLTIP=\u986F\u793A\u6AA2\u8996\u5340\u4E2D\u7684\u5143\u7D20
395
393
  ELEMENTS_PANEL_HIDE_BUTTON=\u96B1\u85CF
@@ -402,6 +400,7 @@ ELEMENTS_PANEL_VISIBLE_COLUMN=\u53EF\u898B\u5EA6
402
400
  ELEMENTS_PANEL_VISIBLE_COLUMN_VISIBLE_TOOLTIP=\u53EF\u898B\u5143\u7D20
403
401
  ELEMENTS_PANEL_VISIBLE_COLUMN_PARTIAL_TOOLTIP=\u90E8\u4EFD\u53EF\u898B\u5143\u7D20
404
402
  ELEMENTS_PANEL_VISIBLE_COLUMN_HIDDEN_TOOLTIP=\u96B1\u85CF\u5143\u7D20
403
+
405
404
  ELEMENTS_PANEL_TYPE_COMPONENT=\u5143\u4EF6
406
405
  ELEMENTS_PANEL_TYPE_NET=\u6DE8\u503C
407
406
  ELEMENTS_PANEL_TYPE_UNKNOWN=\u672A\u77E5
@@ -62,7 +62,7 @@ sap.ui.define([
62
62
  * @namespace
63
63
  * @name sap.ui.vk
64
64
  * @author SAP SE
65
- * @version 1.139.0
65
+ * @version 1.141.0
66
66
  * @public
67
67
  */
68
68
 
@@ -150,7 +150,7 @@ sap.ui.define([
150
150
  "sap.ui.vk.tools.PoiManipulationTool"
151
151
  ],
152
152
  noLibraryCSS: false,
153
- version: "1.139.0",
153
+ version: "1.141.0",
154
154
  designtime: "sap/ui/vk/designtime/library.designtime"
155
155
  });
156
156
 
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @param {object} [settings] A JSON-like object.
26
26
  * @private
27
27
  * @author SAP SE
28
- * @version 1.139.0
28
+ * @version 1.141.0
29
29
  * @alias sap.ui.vk.measurement.Angle
30
30
  * @since 1.101.0
31
31
  */
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @param {object} [settings] A JSON-like object.
26
26
  * @private
27
27
  * @author SAP SE
28
- * @version 1.139.0
28
+ * @version 1.141.0
29
29
  * @alias sap.ui.vk.measurement.Area
30
30
  * @since 1.101.0
31
31
  */
@@ -23,7 +23,7 @@ sap.ui.define([
23
23
  * @param {object} [settings] A JSON-like object.
24
24
  * @private
25
25
  * @author SAP SE
26
- * @version 1.139.0
26
+ * @version 1.141.0
27
27
  * @alias sap.ui.vk.measurement.Distance
28
28
  * @since 1.101.0
29
29
  */
@@ -28,7 +28,7 @@ sap.ui.define([
28
28
  * @param {float[]} [settings.edge] World coordinates of the edge ends in form <code>[x1, y1, z1, x2, y2, z2]</code>.
29
29
  * @private
30
30
  * @author SAP SE
31
- * @version 1.139.0
31
+ * @version 1.141.0
32
32
  * @alias sap.ui.vk.measurement.Edge
33
33
  * @since 1.101.0
34
34
  */
@@ -44,7 +44,7 @@ sap.ui.define([
44
44
  * where <code>e</code> is the number of edges in the list.
45
45
  * @private
46
46
  * @author SAP SE
47
- * @version 1.139.0
47
+ * @version 1.141.0
48
48
  * @alias sap.ui.vk.measurement.Face
49
49
  * @since 1.101.0
50
50
  */
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  * @abstract
28
28
  * @private
29
29
  * @author SAP SE
30
- * @version 1.139.0
30
+ * @version 1.141.0
31
31
  * @alias sap.ui.vk.measurement.Feature
32
32
  * @since 1.101.0
33
33
  */
@@ -28,7 +28,7 @@ sap.ui.define([
28
28
  * @param {float[]} [settings.vertex] World coordinates of the vertex in form <code>[x, y, z]</code>.
29
29
  * @private
30
30
  * @author SAP SE
31
- * @version 1.139.0
31
+ * @version 1.141.0
32
32
  * @alias sap.ui.vk.measurement.Vertex
33
33
  * @since 1.101.0
34
34
  */
@@ -43,7 +43,7 @@ sap.ui.define([
43
43
  * @param {object} [mSettings] Initial settings for the new ContentManager object.
44
44
  * @private
45
45
  * @author SAP SE
46
- * @version 1.139.0
46
+ * @version 1.141.0
47
47
  * @extends sap.ui.vk.ContentManager
48
48
  * @alias sap.ui.vk.pdf.ContentManager
49
49
  * @since 1.123.0
@@ -288,31 +288,51 @@ sap.ui.define([
288
288
  };
289
289
 
290
290
  function addNodesToScene(sceneBuilder, sceneId, nodes, parametrics) {
291
- for (const node of nodes) {
292
- const parametric = parametrics[node.parametric];
291
+ // Recursively process each tree node.
292
+ function processNodeRecursively(treeNode) {
293
+ const { node, children = [], parentId } = treeNode;
294
+
295
+ // Set parent ID if parent exists. `parentId` is used by `SceneBuilder` to set up the
296
+ // parent-child relationship when creating the node.
297
+ if (parentId != null) {
298
+ node.parentId = parentId;
299
+ } else if (node.parent != null) {
300
+ node.parentId = node.parent;
301
+ }
302
+
303
+ // // Handle parametric content.
304
+ const parametric = node.parametric == null
305
+ ? null
306
+ : parametrics[node.parametric];
293
307
 
294
308
  if (parametric != null) {
295
309
  node.parametricId = parametric.id;
296
310
  }
297
311
 
298
- sceneBuilder.createNode(node, sceneId);
312
+ // Create the node in the scene.
313
+ const nodeRef = sceneBuilder.createNode(node, sceneId);
299
314
 
315
+ // Set parametric content if available.
300
316
  if (parametric != null) {
301
317
  sceneBuilder.setParametricContent(node.sid, parametric, sceneId);
302
318
  }
303
- }
304
319
 
305
- /*
306
- TODO: HotspotHelper.updateHotspot is used to modify the runtime structure of hotspot nodes which were created as
307
- part of mering two or more other hotspots. This is not supported in the PDF content manager yet as the backend
308
- does not return joints in responses from `GET v1/scenes/{sceneId}` requests.
320
+ // Recursively process all children.
321
+ for (const childTreeNode of children) {
322
+ processNodeRecursively(childTreeNode);
323
+ }
324
+
325
+ // Initialize as hotspot.
326
+ nodeRef._initAsHotspot();
327
+ }
309
328
 
310
- const hotspotHelper = new HotspotHelper();
329
+ // Convert flat array to forest (array of root trees).
330
+ const forest = convertFlatListToForest(nodes);
311
331
 
312
- for (const node of nodes) {
313
- hotspotHelper.updateHotspot(sceneBuilder.getNode(node.sid, sceneId));
332
+ // Process each root tree in the forest.
333
+ for (const rootTreeNode of forest) {
334
+ processNodeRecursively(rootTreeNode);
314
335
  }
315
- */
316
336
  }
317
337
 
318
338
  function buildGetSceneUrl(contentResource, parameters) {
@@ -337,5 +357,57 @@ sap.ui.define([
337
357
  return source;
338
358
  }
339
359
 
360
+ /**
361
+ * @typedef {object} Node
362
+ * @property {string} sid The node's persistent ID.
363
+ * @property {string} name The name of the node.
364
+ * @property {string} [parent] The persistent ID of the node's parent.
365
+ * @property {int[]} [children] The indices of the node's children in the flat list of nodes.
366
+ * @property {int} [parametric] The index of the node's parametric in the <code>parametrics</code> array.
367
+ * @property {object} [transform] The node's transformation matrix.
368
+ * @property {boolean} [visible] Whether the node is visible.
369
+ * @property {int} [pageIndex] The zero-based index of the page on which the node is located.
370
+ * @property {string} contentType The type of content. E.g. for hotspots this is always "HOTSPOT".
371
+ */
372
+
373
+ /**
374
+ * @typedef {object} TreeNode
375
+ * @property {Node} node The node.
376
+ * @property {string} [parentId] The persistent ID of the node's parent.
377
+ * @property {TreeNode} [parent] The node's parent.
378
+ * @property {TreeNode[]} [children] The node's children.
379
+ */
380
+
381
+ /**
382
+ * Converts a flat list of nodes received from the backend into a forest (an array of root nodes).
383
+ *
384
+ * The input nodes are not modified.
385
+ *
386
+ * @param {Node[]} nodes The flat list of nodes
387
+ * @returns {TreeNode[]} The forest of nodes (root nodes)
388
+ */
389
+ function convertFlatListToForest(nodes) {
390
+ // First create a TreeNode object for each node in the flat list.
391
+ /** @type TreeNode[] */
392
+ const treeNodes = nodes.map((node) => ({ node }));
393
+
394
+ // Then set up parent-child relationships between the TreeNode objects.
395
+ treeNodes
396
+ .filter(({ node: { children } }) => children != null)
397
+ .forEach((treeNode) => {
398
+ const { node } = treeNode;
399
+
400
+ treeNode.children = node.children.map((childIndex) => {
401
+ const childNode = treeNodes[childIndex];
402
+ childNode.parentId = node.sid;
403
+ childNode.parent = treeNode;
404
+ return childNode;
405
+ });
406
+ });
407
+
408
+ // Finally, return the roots of the trees in the forest.
409
+ return treeNodes.filter(({ parent }) => parent == null);
410
+ }
411
+
340
412
  return ContentManager;
341
413
  });
@@ -64,7 +64,7 @@ sap.ui.define([
64
64
  *
65
65
  * @extends sap.ui.vk.ViewportBase
66
66
  * @author SAP SE
67
- * @version 1.139.0
67
+ * @version 1.141.0
68
68
  * @constructor
69
69
  * @public
70
70
  * @alias sap.ui.vk.pdf.Viewport
@@ -35,7 +35,7 @@ sap.ui.define([
35
35
  *
36
36
  * @public
37
37
  * @author SAP SE
38
- * @version 1.139.0
38
+ * @version 1.141.0
39
39
  * @extends sap.ui.vk.BaseNodeProxy
40
40
  * @implements sap.ui.base.Poolable
41
41
  * @alias sap.ui.vk.svg.BaseNodeProxy
@@ -29,7 +29,7 @@ sap.ui.define([
29
29
  * @class Provides a class to communicate with content delivery service.
30
30
  * @private
31
31
  * @author SAP SE
32
- * @version 1.139.0
32
+ * @version 1.141.0
33
33
  * @extends sap.ui.base.ManagedObject
34
34
  * @alias sap.ui.vk.svg.ContentDeliveryService
35
35
  */
@@ -45,7 +45,7 @@ sap.ui.define([
45
45
  * @param {object} [mSettings] Initial settings for the new ContentManager object.
46
46
  * @protected
47
47
  * @author SAP SE
48
- * @version 1.139.0
48
+ * @version 1.141.0
49
49
  * @extends sap.ui.vk.ContentManager
50
50
  * @alias sap.ui.vk.svg.ContentManager
51
51
  * @since 1.80.0
@@ -137,6 +137,7 @@ sap.ui.define([
137
137
  var value = values[0];
138
138
  scene.backgroundTopColor = value.backgroundTopColor; // hex color or undefined
139
139
  scene.backgroundBottomColor = value.backgroundBottomColor; // hex color or undefined
140
+ scene.outputSettings = value.outputSettings;
140
141
  }
141
142
 
142
143
  // add loader information to content to show who loaded it
@@ -11,12 +11,14 @@ sap.ui.define([
11
11
  "../cssColorToColor",
12
12
  "../NodeContentType",
13
13
  "sap/base/assert",
14
+ "sap/base/Log",
14
15
  "sap/base/util/uid"
15
16
  ], function(
16
17
  abgrToColor,
17
18
  cssColorToColor,
18
19
  NodeContentType,
19
20
  assert,
21
+ Log,
20
22
  uid
21
23
  ) {
22
24
  "use strict";
@@ -136,6 +138,7 @@ sap.ui.define([
136
138
  this.stroke = convertColor(material.lineColor, 1);
137
139
  this.strokeWidth = material.lineWidth !== undefined ? material.lineWidth : 1;
138
140
  this.strokeDashArray = (material.lineStyle && material.lineStyle.dashPattern) || [];
141
+ this.coordinateSpace = material.lineStyle?.widthCoordinateSpace ?? unknownCoordinateSpace;
139
142
  }
140
143
  }
141
144
 
@@ -208,6 +211,11 @@ sap.ui.define([
208
211
  this._updateHotspotDescendants(hasHostpotAncestor ? null : this);
209
212
  }
210
213
 
214
+ const hasDynamicContentAncestor = this._hasDynamicContentAncestor();
215
+ if (hasDynamicContentAncestor || this.nodeContentType === NodeContentType.DynamicContent) {
216
+ this._updateHotspotDescendants(hasDynamicContentAncestor ? null : this);
217
+ }
218
+
211
219
  if (this.domRef) {
212
220
  element.traverse(function(child) {
213
221
  if (!child.domRef) {
@@ -274,6 +282,19 @@ sap.ui.define([
274
282
 
275
283
  node.userData.skipIt = true;
276
284
 
285
+ if (hotspotNode && node._isGeometryNode()) {
286
+ Object.defineProperty(node, "filter", {
287
+ get: function() {
288
+ return hotspotNode.getHotspotEffectDef().name;
289
+ },
290
+ configurable: true
291
+ });
292
+ }
293
+
294
+ if (node.hasOwnProperty("opacity")) {
295
+ delete node.opacity;
296
+ }
297
+
277
298
  if (node._isGeometryNode()) {
278
299
  node.fill = node.stroke = new Float32Array([1, 1, 1, 1]);
279
300
  node._updateColor();
@@ -289,6 +310,29 @@ sap.ui.define([
289
310
  return; // ignore this hotspot node because it has a hotspot ancestor
290
311
  }
291
312
 
313
+ Object.defineProperty(this, "opacity", {
314
+ get: function() {
315
+ return this.highlightColor || this.customHotspotColor || this.hotspotColor ? 1 : 0;
316
+ },
317
+ configurable: true
318
+ });
319
+
320
+ this._updateHotspotDescendants(this);
321
+
322
+ if (this.domRef !== null) {
323
+ if (this.domRef === (this.parent && this.parent.domRef)) {
324
+ this.invalidate();
325
+ } else {
326
+ this._updateColor();
327
+ }
328
+ }
329
+ };
330
+
331
+ Element.prototype._initAsDynamicContent = function() {
332
+ if (this._hasDynamicContentAncestor()) {
333
+ return; // ignore this dynamic content node because it has a dynamic content ancestor
334
+ }
335
+
292
336
  this._updateHotspotDescendants(this);
293
337
 
294
338
  if (this.domRef !== null) {
@@ -305,6 +349,10 @@ sap.ui.define([
305
349
  if (nodeContentType === NodeContentType.Hotspot) {
306
350
  this._initAsHotspot();
307
351
  }
352
+
353
+ if (nodeContentType === NodeContentType.DynamicContent) {
354
+ this._initAsDynamicContent();
355
+ }
308
356
  };
309
357
 
310
358
  Element.prototype.traverse = function(callback) {
@@ -362,8 +410,28 @@ sap.ui.define([
362
410
  var domRef = this.domRef;
363
411
  if (domRef !== null) {
364
412
  if (this.nodeContentType === NodeContentType.Hotspot && !this._hasHostpotAncestor()) {
365
- domRef.setAttribute("filter", "url(#" + this.getHotspotEffectDef().name + ")");
366
- domRef.setAttribute("opacity", this._getHotspotOpacity());
413
+ if (this.customText) {
414
+ this.customText.filter = this.getHotspotEffectDef().name + "-custom-text";
415
+ this.customText.domRef?.setAttribute("filter", `url(#${this.customText.filter})`);
416
+ }
417
+ this.traverse((node) => {
418
+ const filter = node.filter;
419
+ if (filter) {
420
+ node.domRef?.setAttribute("filter", `url(#${filter})`);
421
+ }
422
+ });
423
+ domRef.setAttribute("opacity", this.opacity);
424
+ } else if (this.nodeContentType === NodeContentType.DynamicContent && !this._hasDynamicContentAncestor()) {
425
+ if (this.customText) {
426
+ this.customText.filter = this.getHotspotEffectDef().name + "-custom-text";
427
+ this.customText.domRef?.setAttribute("filter", `url(#${this.customText.filter})`);
428
+ }
429
+ this.traverse((node) => {
430
+ const filter = node.filter;
431
+ if (filter) {
432
+ node.domRef?.setAttribute("filter", `url(#${filter})`);
433
+ }
434
+ });
367
435
  } else {
368
436
  var setAttributeFunc = domRef.setAttribute.bind(domRef);
369
437
  if (this.highlightColor || this.tintColor) {
@@ -397,10 +465,6 @@ sap.ui.define([
397
465
  }
398
466
  };
399
467
 
400
- Element.prototype._getHotspotOpacity = function() {
401
- return this.highlightColor || this.customHotspotColor || this.hotspotColor ? 1 : 0;
402
- };
403
-
404
468
  Element._hotspotEffectName = function(color) {
405
469
  return "hotspot-effect-" + rgbaToCSS(color.red, color.green, color.blue, color.alpha);
406
470
  };
@@ -440,7 +504,7 @@ sap.ui.define([
440
504
  };
441
505
 
442
506
  Element.prototype.setTintColor = function(mask, tintColor) {
443
- assert(this.nodeContentType !== NodeContentType.Hotspot && "setTintColor() method is not for hotspots, use setHotspotColor() method");
507
+ assert(this.nodeContentType !== NodeContentType.Hotspot, "setTintColor() method is not for hotspots, use setHotspotColor() method");
444
508
  this.tintColor = tintColor;
445
509
  this._updateColor(mask);
446
510
  };
@@ -450,13 +514,13 @@ sap.ui.define([
450
514
  };
451
515
 
452
516
  Element.prototype.setHotspotColor = function(mask, color) {
453
- assert(this.nodeContentType === NodeContentType.Hotspot && "setHotspotColor() method is only for hotspots");
517
+ assert((this.nodeContentType === NodeContentType.Hotspot || this.nodeContentType === NodeContentType.DynamicContent), "setHotspotColor() method is only for hotspots or dynamic content");
454
518
  this.hotspotColor = color;
455
519
  this._updateColor(mask);
456
520
  };
457
521
 
458
522
  Element.prototype.setCustomHotspotColor = function(mask, color) {
459
- assert(this.nodeContentType === NodeContentType.Hotspot && "setCustomHotspotColor() method is only for hotspots");
523
+ assert(this.nodeContentType === NodeContentType.Hotspot, "setCustomHotspotColor() method is only for hotspots");
460
524
  this.customHotspotColor = color;
461
525
  this._updateColor(mask);
462
526
  };
@@ -466,7 +530,7 @@ sap.ui.define([
466
530
  };
467
531
 
468
532
  Element.prototype.setOpacity = function(opacity) {
469
- assert(this.nodeContentType !== NodeContentType.Hotspot && "setOpacity() method is not for hotspots");
533
+ assert(this.nodeContentType !== NodeContentType.Hotspot, "setOpacity() method is not for hotspots");
470
534
 
471
535
  if (this._isGeometryNode()) {
472
536
  return;
@@ -502,6 +566,57 @@ sap.ui.define([
502
566
  }
503
567
  }
504
568
  }
569
+ this._updateCustomText();
570
+ };
571
+
572
+ /**
573
+ * Attaches a custom text to this element.
574
+ * @param {object} [options] The custom text options. If not specified, the existing custom text will be removed.
575
+ * @param {string} [options.text] The text to display, it's mutually exclusive with htmlText option.
576
+ * @param {string} [options.htmlText] The HTML text to display, it's mutually exclusive with text option.
577
+ * @param {string} [options.fontFamily] The font family of the text. Default is "Arial".
578
+ * @param {string} [options.fontStyle] The font style of the text (normal | italic | oblique). Default is undefined ("normal").
579
+ * @param {string} [options.fontWeight] The font weight of the text (normal | bold | bolder | lighter | <number>). Default is undefined ("normal").
580
+ * @param {string} [options.textDecoration] The text decoration of the text (none | underline | line-through, etc). Default is undefined ("none").
581
+ * @param {number} [options.size] The font size of the text in pixels. If not specified then the size will be automatically
582
+ * determined based on the median text size in the scene or computed from the bounding box of the scene.
583
+ * @param {string} [options.fill] The fill color of the text in CSS format. Default is "black".
584
+ * @param {number[]} [options.pivot] The pivot point of the text relative to the bounding box of the element. Default is [0.5, 0.5] (center).
585
+ * @param {number[]} [options.anchor] The anchor point of the text. Default is [0.5, 0.5] (center).
586
+ * @returns {sap.ui.vk.svg.Element} Returns this element for method chaining.
587
+ * @public
588
+ * @experimental
589
+ * @since 1.141.0
590
+ */
591
+ Element.prototype.setCustomText = function(options) {
592
+ Log.warning("You need to import 'sap.ui.vk.svg.Text' module to call method setCustomText().");
593
+ return this;
594
+ };
595
+
596
+ Element.prototype._updateCustomText = function() {
597
+ if (this.customText) {
598
+ const bbox = this._getBBox(null, true);
599
+ const textBBox = this.customText.domRef?.getBBox();
600
+ if (bbox && textBBox) {
601
+ // calculate the matrix of the custom text element based on the bounding box of the element
602
+ const matrix = this._matrixWorld();
603
+ const pivot = this.customText.pivot ?? [0.5, 0.5]; // default pivot is center of the bonding box
604
+ const x = bbox.x + bbox.width * pivot[0];
605
+ const y = bbox.y + bbox.height * (matrix[3] < 0 ? 1 - pivot[1] : pivot[1]);
606
+ matrix[4] = matrix[5] = 0;
607
+ const p = Element._transformPoint(x, y, matrix);
608
+ const anchor = this.customText.anchor;
609
+ if (anchor) {
610
+ p.x -= textBBox.x + textBBox.width * anchor[0];
611
+ p.y -= textBBox.y + textBBox.height * anchor[1];
612
+ }
613
+ const invMatrix = Element._invertMatrix(matrix);
614
+ const p2 = Element._transformPoint(p.x, p.y, invMatrix);
615
+ invMatrix[4] = p2.x;
616
+ invMatrix[5] = p2.y;
617
+ this.customText.setMatrix(invMatrix);
618
+ }
619
+ }
505
620
  };
506
621
 
507
622
  Element._multiplyMatrices = function(a, b) {
@@ -650,10 +765,10 @@ sap.ui.define([
650
765
  }
651
766
 
652
767
  // This method returns aligned bounding box if the matrix is passed, or oriented bounding box if no matrix is passed
653
- Element.prototype._getBBox = function(matrix) {
768
+ Element.prototype._getBBox = function(matrix, childrenOnly) {
654
769
  if (this.domRef) {
655
770
  var bbox;
656
- if (!this.parent || this.domRef !== this.parent.domRef) {
771
+ if (!childrenOnly && this.domRef !== this.parent?.domRef) {
657
772
  bbox = this.domRef.getBBox();
658
773
  if (matrix && bbox) {// transform bounding box to parent coordinate system
659
774
  bbox = transformBBox(bbox, matrix);
@@ -687,6 +802,7 @@ sap.ui.define([
687
802
  isIdentityMatrix(element.matrix) &&
688
803
  element.opacity === undefined &&
689
804
  (element.nodeContentType !== NodeContentType.Hotspot || element._hasHostpotAncestor()) && // not a hotspot
805
+ (element.nodeContentType !== NodeContentType.DynamicContent || element._hasDynamicContentAncestor()) && // not a dynamic content
690
806
  element.vMask === 1;
691
807
  }
692
808
 
@@ -777,13 +893,14 @@ sap.ui.define([
777
893
  Element.prototype._setBaseAttributes = function(setAttributeFunc, mask) {
778
894
  setAttributeFunc("id", this.uid);
779
895
 
780
- if (this.nodeContentType === NodeContentType.Hotspot) {
781
- if (!this._hasHostpotAncestor()) {
782
- setAttributeFunc("filter", "url(#" + this.getHotspotEffectDef().name + ")");
783
- setAttributeFunc("opacity", this._getHotspotOpacity());
784
- }
785
- } else if (this.opacity !== undefined) {
786
- setAttributeFunc("opacity", this.opacity);
896
+ const filter = this.filter; // filter can be defined as a getter for hotspots
897
+ if (filter != null) {
898
+ setAttributeFunc("filter", `url(#${filter})`);
899
+ }
900
+
901
+ const opacity = this.opacity; // opacity can be defined as a getter for hotspots
902
+ if (opacity != null) {
903
+ setAttributeFunc("opacity", opacity);
787
904
  }
788
905
  if (!isIdentityMatrix(this.matrix)) {
789
906
  setAttributeFunc("transform", "matrix(" + this.matrix.join(",") + ")");
@@ -876,7 +993,7 @@ sap.ui.define([
876
993
 
877
994
  var hotspots = [];
878
995
  this.children.forEach(function(element) {
879
- if (element.nodeContentType === NodeContentType.Hotspot) {
996
+ if (element.nodeContentType === NodeContentType.Hotspot || element.nodeContentType === NodeContentType.DynamicContent) {
880
997
  hotspots.push(element);
881
998
  } else {
882
999
  element.render(rm, mask, viewport);
@@ -888,6 +1005,8 @@ sap.ui.define([
888
1005
  element.render(rm, mask);
889
1006
  });
890
1007
 
1008
+ this.customText?.render(rm, mask);
1009
+
891
1010
  if (!skipIt) {
892
1011
  rm.close(tagName);
893
1012
  }
@@ -979,6 +1098,11 @@ sap.ui.define([
979
1098
  }
980
1099
  child._setDomRef(childDomRef);
981
1100
  }
1101
+
1102
+ if (this.customText) {
1103
+ this.customText.domRef = document.getElementById(this.customText.uid);
1104
+ this._updateCustomText();
1105
+ }
982
1106
  };
983
1107
 
984
1108
  Element.prototype.getElementByProperty = function(name, value) {
@@ -986,14 +1110,17 @@ sap.ui.define([
986
1110
  return this;
987
1111
  }
988
1112
 
989
- var children = this.children;
990
- for (var i = 0, l = children.length; i < l; i++) {
991
- var element = children[i].getElementByProperty(name, value);
1113
+ for (const child of this.children) {
1114
+ const element = child.getElementByProperty(name, value);
992
1115
  if (element !== null) {
993
1116
  return element;
994
1117
  }
995
1118
  }
996
1119
 
1120
+ if (this.customText && this.customText[name] === value) {
1121
+ return this.customText;
1122
+ }
1123
+
997
1124
  return null;
998
1125
  };
999
1126
 
@@ -1193,6 +1320,18 @@ sap.ui.define([
1193
1320
  return false;
1194
1321
  };
1195
1322
 
1323
+ Element.prototype._hasDynamicContentAncestor = function() {
1324
+ var ancestor = this.parent;
1325
+ while (ancestor) {
1326
+ if (ancestor.nodeContentType === NodeContentType.DynamicContent) {
1327
+ return true;
1328
+ }
1329
+ ancestor = ancestor.parent;
1330
+ }
1331
+
1332
+ return false;
1333
+ };
1334
+
1196
1335
  /**
1197
1336
  * The string given as "className" will be added to the "class" attribute of this element's root HTML element.
1198
1337
  * @param {string} className the CSS class name to be added