@openui5/sap.ui.core 1.124.2 → 1.126.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 (734) hide show
  1. package/.eslintrc.json +4 -1
  2. package/.reuse/dep5 +9 -4
  3. package/THIRDPARTY.txt +13 -6
  4. package/package.json +1 -1
  5. package/src/jquery.sap.global.js +1 -1
  6. package/src/jquery.sap.properties.js +1 -1
  7. package/src/jquery.sap.resources.js +1 -1
  8. package/src/jquery.sap.script.js +1 -1
  9. package/src/jquery.sap.storage.js +3 -3
  10. package/src/sap/base/Event.js +1 -1
  11. package/src/sap/base/Eventing.js +1 -1
  12. package/src/sap/base/Log.js +0 -16
  13. package/src/sap/base/config.js +1 -1
  14. package/src/sap/base/i18n/LanguageTag.js +1 -1
  15. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  16. package/src/sap/base/util/ObjectPath.js +6 -6
  17. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  18. package/src/sap/base/util/restricted/_castArray.js +1 -1
  19. package/src/sap/base/util/restricted/_compact.js +1 -1
  20. package/src/sap/base/util/restricted/_curry.js +1 -1
  21. package/src/sap/base/util/restricted/_debounce.js +1 -1
  22. package/src/sap/base/util/restricted/_difference.js +1 -1
  23. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  24. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  25. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  26. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  27. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  28. package/src/sap/base/util/restricted/_flatten.js +1 -1
  29. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  30. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  31. package/src/sap/base/util/restricted/_intersection.js +1 -1
  32. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  33. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  34. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  35. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  36. package/src/sap/base/util/restricted/_isNil.js +1 -1
  37. package/src/sap/base/util/restricted/_max.js +1 -1
  38. package/src/sap/base/util/restricted/_merge.js +1 -1
  39. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  40. package/src/sap/base/util/restricted/_min.js +1 -1
  41. package/src/sap/base/util/restricted/_omit.js +1 -1
  42. package/src/sap/base/util/restricted/_pick.js +1 -1
  43. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  44. package/src/sap/base/util/restricted/_throttle.js +1 -1
  45. package/src/sap/base/util/restricted/_toArray.js +1 -1
  46. package/src/sap/base/util/restricted/_union.js +1 -1
  47. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  48. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  49. package/src/sap/base/util/restricted/_uniq.js +1 -1
  50. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  51. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  52. package/src/sap/base/util/restricted/_without.js +1 -1
  53. package/src/sap/base/util/restricted/_xor.js +1 -1
  54. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  55. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  56. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  57. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  58. package/src/sap/ui/Device.js +35 -10
  59. package/src/sap/ui/Global.js +6 -6
  60. package/src/sap/ui/base/Event.js +1 -1
  61. package/src/sap/ui/base/EventProvider.js +1 -1
  62. package/src/sap/ui/base/Interface.js +1 -1
  63. package/src/sap/ui/base/ManagedObject.js +16 -1
  64. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  65. package/src/sap/ui/base/Metadata.js +1 -1
  66. package/src/sap/ui/base/Object.js +1 -1
  67. package/src/sap/ui/base/ObjectPool.js +1 -1
  68. package/src/sap/ui/core/.library +3 -3
  69. package/src/sap/ui/core/BusyIndicator.js +1 -1
  70. package/src/sap/ui/core/Component.js +22 -5
  71. package/src/sap/ui/core/ComponentContainer.js +1 -1
  72. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  73. package/src/sap/ui/core/ComponentSupport.js +1 -1
  74. package/src/sap/ui/core/Configuration.js +1 -1
  75. package/src/sap/ui/core/Control.js +1 -1
  76. package/src/sap/ui/core/Core.js +31 -29
  77. package/src/sap/ui/core/CustomData.js +1 -1
  78. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  79. package/src/sap/ui/core/Element.js +1 -1
  80. package/src/sap/ui/core/ElementMetadata.js +4 -3
  81. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  82. package/src/sap/ui/core/EventBus.js +1 -1
  83. package/src/sap/ui/core/ExtensionPoint.js +23 -9
  84. package/src/sap/ui/core/Fragment.js +15 -1
  85. package/src/sap/ui/core/HTML.js +1 -1
  86. package/src/sap/ui/core/History.js +1 -1
  87. package/src/sap/ui/core/Icon.js +84 -50
  88. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  89. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  90. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  91. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  92. package/src/sap/ui/core/InvisibleText.js +1 -1
  93. package/src/sap/ui/core/Item.js +1 -1
  94. package/src/sap/ui/core/LabelEnablement.js +66 -1
  95. package/src/sap/ui/core/LayoutData.js +1 -1
  96. package/src/sap/ui/core/Lib.js +2 -2
  97. package/src/sap/ui/core/ListItem.js +1 -1
  98. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  99. package/src/sap/ui/core/Locale.js +1 -1
  100. package/src/sap/ui/core/LocaleData.js +148 -102
  101. package/src/sap/ui/core/Manifest.js +1 -1
  102. package/src/sap/ui/core/Message.js +1 -1
  103. package/src/sap/ui/core/RenderManager.js +1 -1
  104. package/src/sap/ui/core/Renderer.js +1 -1
  105. package/src/sap/ui/core/ResizeHandler.js +1 -1
  106. package/src/sap/ui/core/ScrollBar.js +1 -1
  107. package/src/sap/ui/core/SeparatorItem.js +1 -1
  108. package/src/sap/ui/core/Title.js +1 -1
  109. package/src/sap/ui/core/TooltipBase.js +1 -1
  110. package/src/sap/ui/core/UIArea.js +2 -2
  111. package/src/sap/ui/core/UIComponent.js +23 -16
  112. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  113. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  114. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  115. package/src/sap/ui/core/XMLComposite.js +1 -1
  116. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  117. package/src/sap/ui/core/XMLTemplateProcessor.js +110 -74
  118. package/src/sap/ui/core/boot.js +1 -6
  119. package/src/sap/ui/core/cldr/zh_TW.json +20 -20
  120. package/src/sap/ui/core/date/UI5Date.js +1 -1
  121. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  122. package/src/sap/ui/core/delegate/ScrollEnablement.js +2 -2
  123. package/src/sap/ui/core/dnd/DragAndDrop.js +180 -33
  124. package/src/sap/ui/core/dnd/DragDropBase.js +13 -2
  125. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  126. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  127. package/src/sap/ui/core/dnd/DropInfo.js +6 -3
  128. package/src/sap/ui/core/fieldhelp/FieldHelp.js +389 -0
  129. package/src/sap/ui/core/fieldhelp/FieldHelpUtil.js +62 -0
  130. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  131. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  132. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  133. package/src/sap/ui/core/hyphenation/Hyphenation.js +2 -1
  134. package/src/sap/ui/core/library.js +49 -9
  135. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  136. package/src/sap/ui/core/message/Message.js +1 -1
  137. package/src/sap/ui/core/message/MessageManager.js +1 -1
  138. package/src/sap/ui/core/message/MessageParser.js +1 -1
  139. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  140. package/src/sap/ui/core/mvc/Controller.js +77 -77
  141. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  142. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  143. package/src/sap/ui/core/mvc/JSView.js +1 -1
  144. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  145. package/src/sap/ui/core/mvc/View.js +10 -2
  146. package/src/sap/ui/core/mvc/XMLProcessingMode.js +4 -1
  147. package/src/sap/ui/core/mvc/XMLView.js +33 -5
  148. package/src/sap/ui/core/mvc/XMLViewRenderer.js +40 -7
  149. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  150. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  151. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  152. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  153. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  154. package/src/sap/ui/core/routing/async/TargetCache.js +12 -1
  155. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  156. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  157. package/src/sap/ui/core/service/Service.js +1 -1
  158. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  159. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  160. package/src/sap/ui/core/support/Plugin.js +1 -1
  161. package/src/sap/ui/core/support/Support.js +1 -1
  162. package/src/sap/ui/core/support/bootstrapFallback.js +1 -1
  163. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  164. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  165. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  166. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  167. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  168. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  169. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  170. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  171. package/src/sap/ui/core/themes/sap_hcb/base_BlindLayer.less +37 -0
  172. package/src/sap/ui/core/themes/sap_hcb/base_BrowserScrollbar.less +36 -0
  173. package/src/sap/ui/core/themes/sap_hcb/base_BusyIndicator.less +19 -0
  174. package/src/sap/ui/core/themes/sap_hcb/base_CommandShortcutHints.less +20 -0
  175. package/src/sap/ui/core/themes/sap_hcb/base_DragAndDrop.less +76 -0
  176. package/src/sap/ui/core/themes/sap_hcb/base_Icon.less +144 -0
  177. package/src/sap/ui/core/themes/sap_hcb/base_LocalBusyIndicator.less +292 -0
  178. package/src/sap/ui/core/themes/sap_hcb/base_SAP-icons.less +10 -0
  179. package/src/sap/ui/core/themes/sap_hcb/base_ScrollBar.less +20 -0
  180. package/src/sap/ui/core/themes/sap_hcb/base_Shadow.less +3 -0
  181. package/src/sap/ui/core/themes/sap_hcb/base_TechnicalInfo.less +157 -0
  182. package/src/sap/ui/core/themes/sap_hcb/base_View.less +12 -0
  183. package/src/sap/ui/core/themes/sap_hcb/base_media.less +36 -0
  184. package/src/sap/ui/core/themes/sap_hcb/base_parameterClasses.less +83 -0
  185. package/src/sap/ui/core/themes/sap_hcb/base_shared.less +340 -0
  186. package/src/sap/ui/core/themes/sap_hcb/library.source.less +27 -1
  187. package/src/sap/ui/core/theming/Parameters.js +66 -6
  188. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  189. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  190. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  191. package/src/sap/ui/core/tmpl/Template.js +1 -1
  192. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  193. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  194. package/src/sap/ui/core/util/Export.js +1 -1
  195. package/src/sap/ui/core/util/ExportCell.js +1 -1
  196. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  197. package/src/sap/ui/core/util/ExportRow.js +1 -1
  198. package/src/sap/ui/core/util/ExportType.js +1 -1
  199. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  200. package/src/sap/ui/core/util/File.js +1 -1
  201. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  202. package/src/sap/ui/core/util/MockServer.js +1 -1
  203. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  204. package/src/sap/ui/core/util/XMLPreprocessor.js +14 -15
  205. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  206. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  207. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  208. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  209. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  210. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  211. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  212. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  213. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  214. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  215. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  216. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  217. package/src/sap/ui/debug/ControlTree.js +1 -1
  218. package/src/sap/ui/debug/DebugEnv.js +1 -1
  219. package/src/sap/ui/debug/PropertyList.js +1 -1
  220. package/src/sap/ui/dom/jquery/control.js +6 -3
  221. package/src/sap/ui/model/Binding.js +38 -0
  222. package/src/sap/ui/model/ClientModel.js +1 -1
  223. package/src/sap/ui/model/CompositeDataState.js +1 -1
  224. package/src/sap/ui/model/CompositeType.js +1 -1
  225. package/src/sap/ui/model/DataState.js +1 -1
  226. package/src/sap/ui/model/ManagedObjectBindingSupport.js +5 -0
  227. package/src/sap/ui/model/MetaModel.js +1 -1
  228. package/src/sap/ui/model/Model.js +1 -1
  229. package/src/sap/ui/model/SelectionModel.js +1 -1
  230. package/src/sap/ui/model/SimpleType.js +1 -1
  231. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  232. package/src/sap/ui/model/Type.js +1 -1
  233. package/src/sap/ui/model/analytics/AnalyticalBinding.js +8 -12
  234. package/src/sap/ui/model/base/ManagedObjectModel.js +12 -2
  235. package/src/sap/ui/model/json/JSONModel.js +6 -5
  236. package/src/sap/ui/model/message/MessageModel.js +1 -1
  237. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  238. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  239. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  240. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  241. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  242. package/src/sap/ui/model/odata/ODataUtils.js +22 -14
  243. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  244. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  245. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  246. package/src/sap/ui/model/odata/type/Date.js +1 -1
  247. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  248. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  249. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  250. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  251. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  252. package/src/sap/ui/model/odata/type/Double.js +1 -1
  253. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  254. package/src/sap/ui/model/odata/type/Int.js +1 -1
  255. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  256. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  257. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  258. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  259. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  260. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  261. package/src/sap/ui/model/odata/type/Single.js +1 -1
  262. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  263. package/src/sap/ui/model/odata/type/String.js +1 -1
  264. package/src/sap/ui/model/odata/type/Time.js +1 -1
  265. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  266. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  267. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  268. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  269. package/src/sap/ui/model/odata/v2/ODataModel.js +50 -6
  270. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  271. package/src/sap/ui/model/odata/v4/Context.js +127 -46
  272. package/src/sap/ui/model/odata/v4/ODataBinding.js +20 -20
  273. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +72 -73
  274. package/src/sap/ui/model/odata/v4/ODataListBinding.js +406 -250
  275. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +49 -47
  276. package/src/sap/ui/model/odata/v4/ODataModel.js +271 -217
  277. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +205 -205
  278. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +11 -10
  279. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +232 -61
  280. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +53 -9
  281. package/src/sap/ui/model/odata/v4/lib/_Cache.js +53 -59
  282. package/src/sap/ui/model/odata/v4/lib/_Helper.js +140 -80
  283. package/src/sap/ui/model/odata/v4/lib/_Parser.js +3 -3
  284. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +98 -90
  285. package/src/sap/ui/model/odata/v4/lib/_TreeState.js +1 -1
  286. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +22 -22
  287. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +63 -63
  288. package/src/sap/ui/model/resource/ResourceModel.js +7 -2
  289. package/src/sap/ui/model/type/Boolean.js +1 -1
  290. package/src/sap/ui/model/type/Currency.js +1 -1
  291. package/src/sap/ui/model/type/Date.js +1 -1
  292. package/src/sap/ui/model/type/DateInterval.js +1 -1
  293. package/src/sap/ui/model/type/DateTime.js +1 -1
  294. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  295. package/src/sap/ui/model/type/FileSize.js +1 -1
  296. package/src/sap/ui/model/type/Float.js +1 -1
  297. package/src/sap/ui/model/type/Integer.js +1 -1
  298. package/src/sap/ui/model/type/String.js +1 -1
  299. package/src/sap/ui/model/type/Time.js +1 -1
  300. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  301. package/src/sap/ui/model/type/Unit.js +1 -1
  302. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  303. package/src/sap/ui/performance/trace/FESR.js +1 -1
  304. package/src/sap/ui/qunit/qunit-coverage-istanbul.js +1 -1
  305. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  306. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  307. package/src/sap/ui/test/OpaPlugin.js +36 -12
  308. package/src/sap/ui/test/generic/TestBase.js +1 -1
  309. package/src/sap/ui/test/starter/_utils.js +18 -3
  310. package/src/sap/ui/util/Storage.js +1 -1
  311. package/src/ui5loader-autoconfig.js +0 -25
  312. package/test/sap/ui/core/BindableResponseHeaders.html +5 -6
  313. package/test/sap/ui/core/ComponentCleanup.html +46 -46
  314. package/test/sap/ui/core/ComponentManifestFirst.html +26 -20
  315. package/test/sap/ui/core/ContextMenuSupport.html +9 -10
  316. package/test/sap/ui/core/DesigntimeOverview.html +1 -1
  317. package/test/sap/ui/core/EventBroadcaster.html +2 -2
  318. package/test/sap/ui/core/FieldGroup.html +70 -61
  319. package/test/sap/ui/core/GenericEventBinding.html +26 -23
  320. package/test/sap/ui/core/HTMLControl.html +46 -38
  321. package/test/sap/ui/core/HTMLSanitizer.html +70 -45
  322. package/test/sap/ui/core/IntervalTrigger.html +22 -21
  323. package/test/sap/ui/core/InvisibleControls.html +72 -72
  324. package/test/sap/ui/core/InvisibleText.html +2 -2
  325. package/test/sap/ui/core/LRUPersistentCache.html +19 -18
  326. package/test/sap/ui/core/LabelEnablement.html +18 -29
  327. package/test/sap/ui/core/Localization.html +40 -65
  328. package/test/sap/ui/core/Localization_HeapUsage.html +11 -12
  329. package/test/sap/ui/core/ManagedObjectModel.html +6 -7
  330. package/test/sap/ui/core/ODataAnnotationsPerformance.html +592 -602
  331. package/test/sap/ui/core/ODataV2CanonicalRequests.html +16 -13
  332. package/test/sap/ui/core/ODataV2Messages.html +15 -12
  333. package/test/sap/ui/core/ODataV2MessagesPerf.html +156 -132
  334. package/test/sap/ui/core/Popup.html +18 -14
  335. package/test/sap/ui/core/PopupWithUserSelection.html +4 -4
  336. package/test/sap/ui/core/StashedControlSupport.html +1 -1
  337. package/test/sap/ui/core/ThemeParameters.html +32 -20
  338. package/test/sap/ui/core/ValidateURL.html +109 -75
  339. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/ui5.yaml +1 -1
  340. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/iStartMyAppInAFrame.html +2 -1
  341. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/iStartMyAppInAFrame.js +2 -12
  342. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Component.js +1 -4
  343. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Detail.controller.js +0 -1
  344. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Main.controller.js +0 -1
  345. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Opa.qunit.html +0 -1
  346. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/extension/Component.js +1 -5
  347. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/manifest.json +2 -10
  348. package/test/sap/ui/core/demokit/sample/ViewTemplate/tiny/Component.js +4 -1
  349. package/test/sap/ui/core/demokit/sample/ViewTemplate/tiny/manifest.json +37 -0
  350. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Component.js +5 -1
  351. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/manifest.json +42 -0
  352. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/Component.js +6 -3
  353. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/Main.view.xml +4 -1
  354. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/manifest.json +49 -0
  355. package/test/sap/ui/core/demokit/sample/common/Controller.js +2 -2
  356. package/test/sap/ui/core/demokit/sample/common/ValueHelp.js +2 -2
  357. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +1 -1
  358. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +1 -1
  359. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +1 -1
  360. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +1 -1
  361. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTime/Component.js +1 -0
  362. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTime/manifest.json +1 -2
  363. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTimeOffset/Component.js +1 -0
  364. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTimeOffset/manifest.json +1 -2
  365. package/test/sap/ui/core/demokit/sample/odata/types/v2/Time/Component.js +1 -0
  366. package/test/sap/ui/core/demokit/sample/odata/types/v2/Time/manifest.json +1 -2
  367. package/test/sap/ui/core/demokit/sample/odata/types/v4/Date/Component.js +1 -0
  368. package/test/sap/ui/core/demokit/sample/odata/types/v4/Date/manifest.json +1 -2
  369. package/test/sap/ui/core/demokit/sample/odata/types/v4/DateTimeOffset/Component.js +1 -0
  370. package/test/sap/ui/core/demokit/sample/odata/types/v4/DateTimeOffset/manifest.json +1 -2
  371. package/test/sap/ui/core/demokit/sample/odata/types/v4/TimeOfDay/Component.js +1 -0
  372. package/test/sap/ui/core/demokit/sample/odata/types/v4/TimeOfDay/manifest.json +1 -2
  373. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Component.js +1 -0
  374. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Main.controller.js +35 -31
  375. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/manifest.json +1 -10
  376. package/test/sap/ui/core/demokit/sample/odata/v4/ConsumeV2Service/Component.js +1 -0
  377. package/test/sap/ui/core/demokit/sample/odata/v4/ConsumeV2Service/manifest.json +2 -11
  378. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/Component.js +1 -0
  379. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/DataAggregation.controller.js +71 -68
  380. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/Opa.qunit.html +0 -1
  381. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/manifest.json +3 -11
  382. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Component.js +1 -0
  383. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.html +0 -1
  384. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/manifest.json +7 -16
  385. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Component.js +1 -0
  386. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Main.controller.js +3 -3
  387. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Opa.qunit.html +0 -1
  388. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/manifest.json +1 -10
  389. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Component.js +1 -0
  390. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/FieldGroups.view.xml +0 -1
  391. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Opa.qunit.html +0 -1
  392. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/manifest.json +3 -11
  393. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/Component.js +1 -0
  394. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.controller.js +46 -43
  395. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.view.xml +12 -10
  396. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/manifest.json +3 -11
  397. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Component.js +1 -0
  398. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Main.controller.js +21 -18
  399. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Opa.qunit.html +0 -1
  400. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/manifest.json +4 -7
  401. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/Component.js +1 -0
  402. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/SandboxModel.js +6 -6
  403. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/manifest.json +1 -10
  404. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Component.js +1 -0
  405. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.controller.js +130 -38
  406. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +35 -43
  407. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/manifest.json +1 -10
  408. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Component.js +1 -0
  409. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Main.controller.js +25 -22
  410. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.OptimisticBatch.qunit.html +0 -1
  411. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.OptimisticBatch.qunit.js +5 -4
  412. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.qunit.html +0 -1
  413. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/manifest.json +3 -7
  414. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Component.js +1 -0
  415. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Opa.qunit.html +0 -1
  416. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/manifest.json +3 -11
  417. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Component.js +1 -0
  418. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Opa.qunit.html +0 -1
  419. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/manifest.json +2 -10
  420. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Component.js +1 -0
  421. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +60 -57
  422. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Opa.qunit.html +0 -1
  423. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/manifest.json +4 -6
  424. package/test/sap/ui/core/demokit/sample/odata/v4/MusicArtists/Component.js +1 -0
  425. package/test/sap/ui/core/demokit/sample/odata/v4/MusicArtists/manifest.json +3 -11
  426. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Component.js +1 -0
  427. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Main.view.xml +0 -1
  428. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Opa.qunit.html +0 -1
  429. package/test/sap/ui/core/demokit/sample/odata/v4/Products/manifest.json +3 -10
  430. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/Component.js +1 -0
  431. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/Opa.qunit.html +0 -1
  432. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +194 -90
  433. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +102 -58
  434. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +135 -39
  435. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/data/metadata.xml +14 -0
  436. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/manifest.json +1 -10
  437. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/pages/Main.js +4 -3
  438. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Component.js +1 -0
  439. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Opa.qunit.html +0 -1
  440. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/manifest.json +2 -11
  441. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Component.js +1 -0
  442. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Opa.qunit.html +0 -1
  443. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/manifest.json +2 -11
  444. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Component.js +19 -2
  445. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Opa.qunit.html +0 -1
  446. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/manifest.json +3 -10
  447. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/CreateRelative.js +1 -8
  448. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Component.js +1 -0
  449. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Main.controller.js +1 -2
  450. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Opa.qunit.html +0 -1
  451. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/manifest.json +6 -5
  452. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Component.js +1 -0
  453. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Opa.qunit.html +0 -1
  454. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/manifest.json +2 -10
  455. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Component.js +1 -0
  456. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Opa.qunit.html +0 -1
  457. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/manifest.json +3 -10
  458. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/Opa.qunit.html +0 -1
  459. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/manifest.json +3 -11
  460. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  461. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  462. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  463. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  464. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  465. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  466. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  467. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  468. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  469. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  470. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  471. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  472. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  473. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  474. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  475. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  476. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  477. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  478. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  479. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  480. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  481. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  482. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  483. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  484. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  485. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  486. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  487. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  488. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  489. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  490. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  491. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  492. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  493. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  494. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  495. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  496. package/test/sap/ui/core/demokit/tutorial/odatav4/01/Component.js +1 -0
  497. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  498. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/Component.js +1 -0
  499. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/index.html +0 -1
  500. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/localService/mockserver.js +4 -4
  501. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/manifest.json +2 -13
  502. package/test/sap/ui/core/demokit/tutorial/odatav4/02/Component.js +1 -0
  503. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  504. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/Component.js +1 -0
  505. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/index.html +0 -1
  506. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/localService/mockserver.js +4 -4
  507. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/manifest.json +2 -13
  508. package/test/sap/ui/core/demokit/tutorial/odatav4/03/Component.js +1 -0
  509. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  510. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/Component.js +1 -0
  511. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/index.html +0 -1
  512. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/localService/mockserver.js +4 -4
  513. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/manifest.json +2 -13
  514. package/test/sap/ui/core/demokit/tutorial/odatav4/04/Component.js +1 -0
  515. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  516. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/Component.js +1 -0
  517. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/index.html +0 -1
  518. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/localService/mockserver.js +4 -4
  519. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/manifest.json +2 -13
  520. package/test/sap/ui/core/demokit/tutorial/odatav4/05/Component.js +1 -0
  521. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  522. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/Component.js +1 -0
  523. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/index.html +0 -1
  524. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/localService/mockserver.js +4 -4
  525. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/manifest.json +2 -13
  526. package/test/sap/ui/core/demokit/tutorial/odatav4/06/Component.js +1 -0
  527. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  528. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/Component.js +1 -0
  529. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/index.html +0 -1
  530. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/localService/mockserver.js +4 -4
  531. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/manifest.json +2 -13
  532. package/test/sap/ui/core/demokit/tutorial/odatav4/07/Component.js +1 -0
  533. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  534. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/Component.js +1 -0
  535. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/index.html +0 -1
  536. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/localService/mockserver.js +4 -4
  537. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/manifest.json +2 -13
  538. package/test/sap/ui/core/demokit/tutorial/odatav4/08/Component.js +1 -0
  539. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  540. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/Component.js +1 -0
  541. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/index.html +0 -1
  542. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/localService/mockserver.js +4 -4
  543. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/manifest.json +2 -13
  544. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/test/integration/opaTests.qunit.html +0 -1
  545. package/test/sap/ui/core/demokit/tutorial/odatav4/09/Component.js +1 -0
  546. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  547. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/Component.js +1 -0
  548. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/index.html +0 -1
  549. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/localService/mockserver.js +4 -4
  550. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/manifest.json +2 -11
  551. package/test/sap/ui/core/demokit/tutorial/odatav4/10/Component.js +1 -0
  552. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  553. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/Component.js +1 -0
  554. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/index.html +0 -1
  555. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/localService/mockserver.js +4 -4
  556. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/manifest.json +2 -11
  557. package/test/sap/ui/core/demokit/tutorial/odatav4/11/Component.js +1 -0
  558. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  559. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/Component.js +1 -0
  560. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/index.html +0 -1
  561. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/localService/mockserver.js +4 -4
  562. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/manifest.json +2 -11
  563. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/test/integration/opaTests.qunit.html +0 -1
  564. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  565. package/test/sap/ui/core/getComputedStyle.html +2 -1
  566. package/test/sap/ui/core/getComputedStyleFF.html +1 -1
  567. package/test/sap/ui/core/internal/samples/client/MusicCollection/Component.js +5 -8
  568. package/test/sap/ui/core/internal/samples/client/MusicCollection/Main.controller.js +6 -2
  569. package/test/sap/ui/core/internal/samples/client/MusicCollection/Main.view.xml +7 -3
  570. package/test/sap/ui/core/internal/samples/client/MusicCollection/index.html +1 -3
  571. package/test/sap/ui/core/internal/samples/client/MusicCollection/manifest.json +1 -13
  572. package/test/sap/ui/core/internal/samples/odata/twoFields/Component.js +3 -45
  573. package/test/sap/ui/core/internal/samples/odata/twoFields/Main.controller.js +37 -1
  574. package/test/sap/ui/core/internal/samples/odata/twoFields/Main.view.xml +5 -5
  575. package/test/sap/ui/core/internal/samples/odata/twoFields/Opa.qunit.html +1 -3
  576. package/test/sap/ui/core/internal/samples/odata/twoFields/index.html +1 -3
  577. package/test/sap/ui/core/internal/samples/odata/twoFields/manifest.json +1 -11
  578. package/test/sap/ui/core/internal/samples/odata/v2/Products/Component.js +3 -22
  579. package/test/sap/ui/core/internal/samples/odata/v2/Products/Main.controller.js +16 -22
  580. package/test/sap/ui/core/internal/samples/odata/v2/Products/Main.view.xml +3 -2
  581. package/test/sap/ui/core/internal/samples/odata/v2/Products/SandboxModel.js +1 -1
  582. package/test/sap/ui/core/internal/samples/odata/v2/Products/index.html +1 -3
  583. package/test/sap/ui/core/internal/samples/odata/v2/Products/manifest.json +2 -13
  584. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Component.js +1 -0
  585. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.controller.js +49 -41
  586. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.view.xml +6 -4
  587. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/manifest.json +3 -12
  588. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Component.js +1 -0
  589. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Main.controller.js +2 -2
  590. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Main.view.xml +7 -6
  591. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/index.html +1 -3
  592. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/manifest.json +1 -11
  593. package/test/sap/ui/core/qunit/CommandExecution.qunit.js +96 -92
  594. package/test/sap/ui/core/qunit/Fragment.qunit.js +20 -20
  595. package/test/sap/ui/core/qunit/Fragment_legacyAPIs.qunit.js +4 -4
  596. package/test/sap/ui/core/qunit/Icon.qunit.js +217 -1
  597. package/test/sap/ui/core/qunit/ManagedObjectModel.qunit.js +24 -0
  598. package/test/sap/ui/core/qunit/RenderManager.qunit.js +18 -5
  599. package/test/sap/ui/core/qunit/ScrollBar.qunit.js +15 -18
  600. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +80 -0
  601. package/test/sap/ui/core/qunit/ThemeParameters_legacyAPIs.qunit.js +1 -0
  602. package/test/sap/ui/core/qunit/analytics/AnalyticalBinding.qunit.js +6 -14
  603. package/test/sap/ui/core/qunit/app/testsuite.app.qunit.js +2 -1
  604. package/test/sap/ui/core/qunit/base/Config.qunit.js +117 -114
  605. package/test/sap/ui/core/qunit/base/Config_bootstrap.qunit.html +3 -3
  606. package/test/sap/ui/core/qunit/base/Config_bootstrap.qunit.js +98 -95
  607. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +20 -45
  608. package/test/sap/ui/core/qunit/base/Config_global.qunit.html +2 -2
  609. package/test/sap/ui/core/qunit/base/Config_meta.qunit.html +2 -2
  610. package/test/sap/ui/core/qunit/base/Config_noUrl.qunit.html +2 -2
  611. package/test/sap/ui/core/qunit/base/Config_noUrl.qunit.js +17 -16
  612. package/test/sap/ui/core/qunit/base/Config_url.qunit.html +2 -2
  613. package/test/sap/ui/core/qunit/bootstrap/BootstrapMainModule.beforeBootstrap.js +6 -0
  614. package/test/sap/ui/core/qunit/bootstrap/BootstrapMainModule.qunit.js +4 -4
  615. package/test/sap/ui/core/qunit/bootstrap/BootstrapMinimal.qunit.js +30 -10
  616. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +5 -1
  617. package/test/sap/ui/core/qunit/component/Customizing.qunit.js +2 -2
  618. package/test/sap/ui/core/qunit/component/Customizing_async.qunit.js +36 -1
  619. package/test/sap/ui/core/qunit/component/ExtensionPoint.qunit.js +475 -290
  620. package/test/sap/ui/core/qunit/component/Models.qunit.js +0 -70
  621. package/test/sap/ui/core/qunit/component/Models_unavoidablySync.qunit.js +86 -0
  622. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +86 -1
  623. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/EP_In_Product_Table_Cell_Found.fragment.xml +5 -0
  624. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/EP_In_Product_Table_Column.fragment.xml +5 -0
  625. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/EPinNestedView.view.xml +51 -0
  626. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/ExtensionPointProvider.js +27 -4
  627. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/Main.view.xml +5 -0
  628. package/test/sap/ui/core/qunit/component/testdata/customizing/sap/Main.view.xml +0 -1
  629. package/test/sap/ui/core/qunit/component/testdata/customizing/sap/Sub2.view.xml +1 -3
  630. package/test/sap/ui/core/qunit/dnd/DragAndDrop.qunit.js +231 -5
  631. package/test/sap/ui/core/qunit/dnd/DropInfo.qunit.js +14 -2
  632. package/test/sap/ui/core/qunit/fieldhelp/FieldHelp.qunit.js +1146 -0
  633. package/test/sap/ui/core/qunit/fieldhelp/FieldHelpUtil.qunit.js +55 -0
  634. package/test/sap/ui/core/qunit/fieldhelp/testsuite.fieldhelp.qunit.html +12 -0
  635. package/test/sap/ui/core/qunit/fieldhelp/testsuite.fieldhelp.qunit.js +50 -0
  636. package/test/sap/ui/core/qunit/generic/ControlRenderer.qunit.js +4 -1
  637. package/test/sap/ui/core/qunit/generic/legacy/ControlRenderer.qunit.js +4 -0
  638. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.html +1 -1
  639. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +6 -0
  640. package/test/sap/ui/core/qunit/internal/testsuite.feature-odata-v4.qunit.js +1 -1
  641. package/test/sap/ui/core/qunit/jquery-mobile-custom.beforeBootstrap.js +11 -0
  642. package/test/sap/ui/core/qunit/jquery-mobile-custom.qunit.js +3 -3
  643. package/test/sap/ui/core/qunit/loader/amd/base_tag/_launchTest.js +2 -4
  644. package/test/sap/ui/core/qunit/loader/amd/config_paths/_launchTest.js +2 -4
  645. package/test/sap/ui/core/qunit/loader/amd/config_paths_relative/_launchTest.js +2 -4
  646. package/test/sap/ui/core/qunit/loader/amdAPIs.qunit.js +3 -0
  647. package/test/sap/ui/core/qunit/loader/asyncMode.qunit.js +2 -6
  648. package/test/sap/ui/core/qunit/loader/config.qunit.js +41 -2
  649. package/test/sap/ui/core/qunit/model/Binding.qunit.js +13 -0
  650. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +2 -2
  651. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorAsync.qunit.js +8 -6
  652. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +7 -7
  653. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +131 -22
  654. package/test/sap/ui/core/qunit/mvc/testdata/Async.view.xml +1 -2
  655. package/test/sap/ui/core/qunit/mvc/testdata/asyncHooks.view.xml +1 -3
  656. package/test/sap/ui/core/qunit/mvc/testdata/cache.view.xml +1 -1
  657. package/test/sap/ui/core/qunit/mvc/testdata/legacy/test.view.xml +32 -0
  658. package/test/sap/ui/core/qunit/mvc/testdata/test.view.xml +2 -15
  659. package/test/sap/ui/core/qunit/mvc/testsuite.mvc.qunit.js +9 -4
  660. package/test/sap/ui/core/qunit/odata/ODataUtils.qunit.js +5 -12
  661. package/test/sap/ui/core/qunit/odata/type/testsuite.odata.types.qunit.js +1 -0
  662. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +285 -12
  663. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +55 -6
  664. package/test/sap/ui/core/qunit/odata/v2/data/ZUI5_GWSAMPLE_BASIC.metadata.xml +18 -0
  665. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +118 -61
  666. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +17 -17
  667. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +559 -74
  668. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +42 -42
  669. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +2695 -97
  670. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +125 -12
  671. package/test/sap/ui/core/qunit/odata/v4/ODataModel.realOData.qunit.js +7 -6
  672. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +12 -13
  673. package/test/sap/ui/core/qunit/odata/v4/_AnnotationHelperExpression.qunit.js +3 -3
  674. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +796 -110
  675. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +102 -2
  676. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +48 -57
  677. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +141 -33
  678. package/test/sap/ui/core/qunit/odata/v4/lib/_MetadataRequestor.qunit.js +2 -2
  679. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +175 -69
  680. package/test/sap/ui/core/qunit/odata/v4/lib/_V2Requestor.qunit.js +3 -3
  681. package/test/sap/ui/core/qunit/odata/v4/testsuite.odatav4.qunit.js +1 -1
  682. package/test/sap/ui/core/qunit/resource/ResourceBinding.qunit.js +17 -14
  683. package/test/sap/ui/core/qunit/routing/async/Views.qunit.js +3 -0
  684. package/test/sap/ui/core/qunit/rule/testsuite.rule.qunit.js +6 -1
  685. package/test/sap/ui/core/qunit/test/starter/find/main.js +6 -4
  686. package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib4/themes/sap_horizon_hcb/library.css +2 -0
  687. package/test/sap/ui/core/qunit/testdata/routing/HistoryIFrame.html +2 -1
  688. package/test/sap/ui/core/qunit/testsuite.qunit.js +1 -0
  689. package/test/sap/ui/core/qunit/testsuites/testsuite.browser.runtime.qunit.js +5 -1
  690. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +4 -1
  691. package/test/sap/ui/core/qunit/ui/Device.qunit.js +92 -25
  692. package/test/sap/ui/core/qunit/ui5classes/ManagedObjectMetadata.qunit.js +3 -0
  693. package/test/sap/ui/core/qunit/util/LabelEnablement.qunit.js +47 -1
  694. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +20 -20
  695. package/test/sap/ui/core/relnotes/changes-1.124.json +1 -66
  696. package/test/sap/ui/core/relnotes/changes-1.125.json +32 -0
  697. package/test/sap/ui/core/relnotes/changes-1.126.json +47 -0
  698. package/test/sap/ui/core/samples/ResponsiveDemo.html +97 -103
  699. package/test/sap/ui/core/samples/databinding/UnitTable/ui5.yaml +1 -1
  700. package/test/sap/ui/core/samples/draganddrop/DragAndDrop.html +2 -2
  701. package/test/sap/ui/core/samples/mvc/Product.html +1 -7
  702. package/test/sap/ui/core/samples/mvc/ViewPreprocessor.html +20 -12
  703. package/test/sap/ui/core/samples/mvc/XMLView.html +77 -24
  704. package/test/sap/ui/core/samples/mvc/XMLViewAsync.html +13 -19
  705. package/test/sap/ui/core/samples/mvc/controller/Async.controller.js +0 -1
  706. package/test/sap/ui/core/samples/mvc/controller/Product.controller.js +0 -1
  707. package/test/sap/ui/core/samples/mvc/views/Async.view.xml +16 -57
  708. package/test/sap/ui/core/samples/mvc/views/Dummy.fragment.xml +2 -2
  709. package/test/sap/ui/core/samples/mvc/views/Dummy.view.xml +2 -2
  710. package/test/sap/ui/core/samples/mvc/views/Product.view.xml +16 -57
  711. package/test/sap/ui/core/util/PasteHelper.html +148 -147
  712. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/firstItem-contextMenu.ref.lnk +1 -1
  713. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/initial.ref.lnk +1 -1
  714. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/lastItem-contextMenu.ref.lnk +1 -1
  715. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/leftDownBtn-contextMenu.ref.lnk +1 -1
  716. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/myButtonSample-contextMenu.ref.lnk +1 -1
  717. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/rightDownBtn-contextMenu.ref.lnk +1 -1
  718. package/test/testsuite/js/settings.js +5 -4
  719. package/test/testsuite/styles/main.css +5 -0
  720. package/test/sap/ui/core/ResourceRoots.html +0 -28
  721. package/test/sap/ui/core/demokit/sample/ViewTemplate/tiny/component.json +0 -17
  722. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/component.json +0 -18
  723. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/component.json +0 -30
  724. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/AutoExpand.view.xml +0 -52
  725. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/Component.js +0 -30
  726. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/Sandbox.js +0 -51
  727. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L0_top5.json +0 -32
  728. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_A_skip8.json +0 -138
  729. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_B.json +0 -17
  730. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_C.json +0 -17
  731. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_top8.json +0 -93
  732. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/metadata.xml +0 -2322
  733. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/i18n/i18n.properties +0 -3
  734. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/manifest.json +0 -69
@@ -121,7 +121,8 @@ sap.ui.define([
121
121
  (oNode) => _Helper.getKeyFilter(oNode, this.sMetaPath, this.getTypes()));
122
122
  // Whether this cache is a unified cache, using oFirstLevel with ExpandLevels instead of
123
123
  // separate group level caches
124
- this.bUnifiedCache = this.oAggregation.expandTo >= Number.MAX_SAFE_INTEGER;
124
+ this.bUnifiedCache = this.oAggregation.expandTo >= Number.MAX_SAFE_INTEGER
125
+ || !!this.oAggregation.createInPlace;
125
126
  }
126
127
 
127
128
  // make _AggregationCache a _Cache, but actively disinherit some critical methods
@@ -398,9 +399,14 @@ sap.ui.define([
398
399
  }
399
400
 
400
401
  for (let i = iIndex + 1; i < iIndex + 1 + iCount; i += 1) {
401
- delete aElements.$byPredicate[_Helper.getPrivateAnnotation(aElements[i], "predicate")];
402
- delete aElements.$byPredicate[
403
- _Helper.getPrivateAnnotation(aElements[i], "transientPredicate")];
402
+ // selected elements are effectively kept alive (with recursive hierarchy)
403
+ if (!this.oAggregation.hierarchyQualifier
404
+ || !aElements[i]["@$ui5.context.isSelected"]) {
405
+ delete aElements.$byPredicate[
406
+ _Helper.getPrivateAnnotation(aElements[i], "predicate")];
407
+ delete aElements.$byPredicate[
408
+ _Helper.getPrivateAnnotation(aElements[i], "transientPredicate")];
409
+ }
404
410
  }
405
411
  const aSpliced = aElements.splice(iIndex + 1, iCount);
406
412
  aSpliced.$level = oGroupNode["@$ui5.node.level"];
@@ -426,7 +432,10 @@ sap.ui.define([
426
432
  _AggregationCache.prototype.countDescendants = function (oGroupNode, iIndex) {
427
433
  var i;
428
434
 
429
- let iGroupNodeLevel = oGroupNode["@$ui5.node.level"];
435
+ let iGroupNodeLevel = oGroupNode["@$ui5.node.level"]; // max level of oGroupNode's cache
436
+ // We have to check a candidate's rank if oGroupNode is in oFirstLevel
437
+ // Note: expandTo may be undefined (when using data aggregation)
438
+ let bCheckRank = iGroupNodeLevel <= this.oAggregation.expandTo;
430
439
  let iDescendants = _Helper.getPrivateAnnotation(oGroupNode, "descendants");
431
440
  if (iDescendants) { // => this.oAggregation.expandTo > 1
432
441
  // Note: "descendants" refers to LimitedDescendantCount and counts descendants within
@@ -435,10 +444,14 @@ sap.ui.define([
435
444
  }
436
445
  if (this.bUnifiedCache) {
437
446
  iGroupNodeLevel = Infinity;
447
+ bCheckRank = true;
438
448
  }
439
449
  const aElements = this.aElements;
440
450
  for (i = iIndex + 1; i < aElements.length; i += 1) {
441
- if (aElements[i]["@$ui5.node.level"] <= iGroupNodeLevel) {
451
+ // If the candidate is not in a nested level cache and (in oFirstLevel) it has a rank,
452
+ // it counts as descendant. Or it is a sibling if oGroupNode did not have descendants.
453
+ if (aElements[i]["@$ui5.node.level"] <= iGroupNodeLevel
454
+ && (!bCheckRank || _Helper.hasPrivateAnnotation(aElements[i], "rank"))) {
442
455
  // Note: level 0 or 1 is used for initial placeholders of 1st level cache!
443
456
  if (!iDescendants) {
444
457
  break; // we've reached a sibling of the collapsed node
@@ -502,18 +515,11 @@ sap.ui.define([
502
515
  if (oParentNode?.["@$ui5.node.isExpanded"] === false) {
503
516
  throw new Error("Unsupported collapsed parent: " + sParentPath);
504
517
  }
505
- if (oParentNode && oParentNode["@$ui5.node.isExpanded"] === undefined) {
506
- _Helper.updateAll(this.mChangeListeners, sParentPredicate, oParentNode,
507
- {"@$ui5.node.isExpanded" : true}); // not a leaf anymore
508
- if (oParentNode["@$ui5.node.level"] >= this.oAggregation.expandTo) {
509
- this.oTreeState.expand(oParentNode);
510
- } // else: already expanded automatically
511
- }
512
518
 
513
519
  const iLevel = oParentNode
514
520
  ? oParentNode["@$ui5.node.level"] + 1
515
521
  : 1;
516
- let oCache = iLevel > this.oAggregation.expandTo
522
+ let oCache = iLevel > this.oAggregation.expandTo && !this.oAggregation.createInPlace
517
523
  ? _Helper.getPrivateAnnotation(oParentNode, "cache")
518
524
  : this.oFirstLevel;
519
525
  if (!oCache) {
@@ -527,8 +533,8 @@ sap.ui.define([
527
533
  const oPromise = oCache.create(oGroupLock, oPostPathPromise, sPath, sTransientPredicate,
528
534
  oEntityData, bAtEndOfCreated, fnErrorCallback, fnSubmitCallback, /*onCancel*/() => {
529
535
  _Helper.removeByPath(this.mPostRequests, sTransientPredicate, oEntityData);
530
- if (oCache === this.oFirstLevel) {
531
- this.adjustDescendantCount(oEntityData, iIndex, -1);
536
+ if (this.oAggregation.createInPlace) {
537
+ return;
532
538
  }
533
539
  aElements.$count -= 1;
534
540
  delete aElements.$byPredicate[sTransientPredicate];
@@ -540,15 +546,59 @@ sap.ui.define([
540
546
  [this.oAggregation.$ParentNavigationProperty + "@odata.bind"]
541
547
  = _Helper.makeRelativeUrl("/" + sParentPath, "/" + this.sResourcePath);
542
548
  }
543
- oEntityData["@$ui5.node.level"] = iLevel; // do not send via POST!
544
549
 
545
- aElements.splice(iIndex, 0, null); // create a gap
546
- this.addElements(oEntityData, iIndex, oCache); // rank is undefined!
547
- aElements.$count += 1;
548
- if (oCache === this.oFirstLevel) {
549
- this.adjustDescendantCount(oEntityData, iIndex, +1);
550
+ const bParentIsLeaf = oParentNode && oParentNode["@$ui5.node.isExpanded"] === undefined;
551
+ const bExpandTreeState = bParentIsLeaf
552
+ && oParentNode?.["@$ui5.node.level"] >= this.oAggregation.expandTo;
553
+ if (bExpandTreeState) {
554
+ this.oTreeState.expand(oParentNode);
555
+ } // else: already expanded automatically
556
+
557
+ const addElement = (iIndex0, iRank) => {
558
+ if (bParentIsLeaf) {
559
+ _Helper.updateAll(this.mChangeListeners, sParentPredicate, oParentNode,
560
+ {"@$ui5.node.isExpanded" : true}); // not a leaf anymore
561
+ }
562
+ oEntityData["@$ui5.node.level"] = iLevel; // do not send via POST!
563
+ aElements.splice(iIndex0, 0, null); // create a gap
564
+ this.addElements(oEntityData, iIndex0, oCache, iRank);
565
+ aElements.$count += 1;
566
+ };
567
+
568
+ const completeCreation = (iIndex0, iRank) => {
569
+ oCache.removeElement(0);
570
+ _Helper.deletePrivateAnnotation(oEntityData, "transientPredicate");
571
+ delete aElements.$byPredicate[sTransientPredicate];
572
+ if (iRank !== undefined) {
573
+ this.adjustDescendantCount(oEntityData, iIndex0, +1);
574
+ oCache.restoreElement(iRank, oEntityData);
575
+ _Helper.setPrivateAnnotation(oEntityData, "rank", iRank);
576
+ this.shiftRank(iIndex0, +1);
577
+ }
578
+ };
579
+
580
+ if (this.oAggregation.createInPlace) {
581
+ return oPromise.then(async () => {
582
+ _Helper.removeByPath(this.mPostRequests, sTransientPredicate, oEntityData);
583
+ const [iRank] = await Promise.all([
584
+ this.requestRank(oEntityData, oGroupLock),
585
+ this.requestNodeProperty(oEntityData, oGroupLock)
586
+ ]);
587
+ if (bExpandTreeState) { // isRefreshNeededAfterCreate returns true
588
+ _Helper.setPrivateAnnotation(oEntityData, "rank", iRank);
589
+ } else if (iRank === undefined) {
590
+ oCache.removeElement(0);
591
+ } else {
592
+ addElement(iRank, iRank);
593
+ completeCreation(iRank, iRank);
594
+ }
595
+
596
+ return oEntityData;
597
+ });
550
598
  }
551
599
 
600
+ addElement(iIndex, /*iRank*/undefined);
601
+
552
602
  return oPromise.then(async () => {
553
603
  _Helper.removeByPath(this.mPostRequests, sTransientPredicate, oEntityData);
554
604
  aElements.$byPredicate[_Helper.getPrivateAnnotation(oEntityData, "predicate")]
@@ -564,13 +614,7 @@ sap.ui.define([
564
614
  this.requestNodeProperty(oEntityData, oGroupLock, /*bDropFilter*/true)
565
615
  ]);
566
616
 
567
- oCache.removeElement(0, sTransientPredicate);
568
- _Helper.deletePrivateAnnotation(oEntityData, "transientPredicate");
569
- oCache.restoreElement(iRank, oEntityData);
570
-
571
- delete this.aElements.$byPredicate[sTransientPredicate];
572
- _Helper.setPrivateAnnotation(oEntityData, "rank", iRank);
573
- this.shiftRank(iIndex, +1);
617
+ completeCreation(iIndex, iRank);
574
618
  } else {
575
619
  await this.requestNodeProperty(oEntityData, oGroupLock, /*bDropFilter*/true);
576
620
  }
@@ -643,7 +687,7 @@ sap.ui.define([
643
687
  * Expands the given group node.
644
688
  *
645
689
  * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
646
- * A lock for the group to associate the requests with
690
+ * An unlocked lock for the group to associate the requests with
647
691
  * @param {object|string} vGroupNodeOrPath
648
692
  * The group node or its path relative to the cache; a group node instance (instead of a path)
649
693
  * MUST only be given in case of "expanding" continued
@@ -808,7 +852,7 @@ sap.ui.define([
808
852
  * @param {number} iIndex
809
853
  * The index of the child node
810
854
  * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
811
- * A lock for the group to associate the requests with
855
+ * An unlocked lock for the group to associate the requests with
812
856
  * @returns {sap.ui.base.SyncPromise}
813
857
  * A promise to be resolved with the requested index of the parent.
814
858
  *
@@ -869,7 +913,7 @@ sap.ui.define([
869
913
  this.oFirstLevel.calculateKeyPredicate(oParent, this.getTypes(), this.sMetaPath);
870
914
 
871
915
  const iParentIndex = this.findIndex(iRank);
872
- if (_Helper.getPrivateAnnotation(this.aElements[iParentIndex], "placeholder")) {
916
+ if (_Helper.hasPrivateAnnotation(this.aElements[iParentIndex], "placeholder")) {
873
917
  this.insertNode(oParent, iRank, iParentIndex);
874
918
  } // else: parent already inside collection
875
919
 
@@ -888,8 +932,7 @@ sap.ui.define([
888
932
  * Returns a promise to be resolved with an OData object for the requested data.
889
933
  *
890
934
  * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
891
- * A lock for the group to associate the request with; unused in CollectionCache since no
892
- * request will be created
935
+ * An unlocked lock for the group to associate the request with
893
936
  * @param {string} [sPath]
894
937
  * Relative path to drill-down into
895
938
  * @param {function} [fnDataRequested]
@@ -935,20 +978,23 @@ sap.ui.define([
935
978
 
936
979
  /**
937
980
  * Returns the index in <code>this.aElements</code> for a given (limited preorder) rank where
938
- * either a node or placeholder with that rank is present and belongs to the first level cache.
981
+ * either a node or placeholder with that rank is present and belongs to the given first level
982
+ * or group level cache.
939
983
  *
940
984
  * @param {number} iRank
941
985
  * The (limited preorder) rank of a node
986
+ * @param {sap.ui.model.odata.v4.lib._CollectionCache} [oCache]
987
+ * A (group level) cache
942
988
  * @returns {number}
943
989
  * The array index
944
990
  *
945
991
  * @private
946
992
  * @see #getInsertIndex
947
993
  */
948
- _AggregationCache.prototype.findIndex = function (iRank) {
994
+ _AggregationCache.prototype.findIndex = function (iRank, oCache = this.oFirstLevel) {
949
995
  return this.aElements.findIndex(
950
996
  (oNode) => _Helper.getPrivateAnnotation(oNode, "rank") === iRank
951
- && _Helper.getPrivateAnnotation(oNode, "parent") === this.oFirstLevel);
997
+ && _Helper.getPrivateAnnotation(oNode, "parent") === oCache);
952
998
  };
953
999
 
954
1000
  /**
@@ -1083,6 +1129,53 @@ sap.ui.define([
1083
1129
  // return undefined;
1084
1130
  };
1085
1131
 
1132
+ /**
1133
+ * Returns the index of the given node's sibling, either the next one (via offset +1) or the
1134
+ * previous one (via offset -1).
1135
+ *
1136
+ * @param {number} iIndex - The index of a node
1137
+ * @param {number} iOffset - An offset, either -1 or +1
1138
+ * @param {boolean} [bAllowPlaceholder] - Whether the sibling is allowed to be a placeholder
1139
+ * @returns {number}
1140
+ * The sibling node's index, or -1 if no such sibling exists for sure, or
1141
+ * <code>undefined</code> if we cannot tell or if the sibling is currently a placeholder and
1142
+ * that is not allowed
1143
+ *
1144
+ * @public
1145
+ */
1146
+ _AggregationCache.prototype.getSiblingIndex = function (iIndex, iOffset, bAllowPlaceholder) {
1147
+ const oNode = this.aElements[iIndex];
1148
+ const oCache = _Helper.getPrivateAnnotation(oNode, "parent");
1149
+ const bSingleLevelCache = oCache !== this.oFirstLevel
1150
+ || this.oAggregation.expandTo === 1 && !this.oAggregation.$ExpandLevels;
1151
+ const iRank = _Helper.getPrivateAnnotation(oNode, "rank");
1152
+ let iSiblingRank = iRank + iOffset;
1153
+ if (iOffset < 0) { // previous sibling
1154
+ if (!bSingleLevelCache) {
1155
+ iSiblingRank // Note: may become undefined!
1156
+ = _AggregationHelper.findPreviousSiblingIndex(oCache.aElements, iRank);
1157
+ }
1158
+ if (iSiblingRank < 0) {
1159
+ return -1; // no such sibling
1160
+ }
1161
+ } else { // next sibling: skip descendants
1162
+ iSiblingRank += _Helper.getPrivateAnnotation(oNode, "descendants", 0);
1163
+ if (iSiblingRank >= oCache.aElements.$count
1164
+ || oCache.aElements[iSiblingRank]?.["@$ui5.node.level"]
1165
+ < oNode["@$ui5.node.level"]) {
1166
+ return -1; // no such sibling
1167
+ }
1168
+ }
1169
+
1170
+ if (iSiblingRank >= 0) {
1171
+ const iSiblingIndex = this.findIndex(iSiblingRank, oCache);
1172
+ if (bSingleLevelCache && bAllowPlaceholder
1173
+ || !_Helper.hasPrivateAnnotation(this.aElements[iSiblingIndex], "placeholder")) {
1174
+ return iSiblingIndex; // sibling found
1175
+ }
1176
+ } // else: iSiblingRank === undefined => return undefined;
1177
+ };
1178
+
1086
1179
  /**
1087
1180
  * @override
1088
1181
  * @see sap.ui.model.odata.v4.lib._Cache#getValue
@@ -1116,7 +1209,7 @@ sap.ui.define([
1116
1209
  const getPredicate
1117
1210
  = (oNode) => _Helper.getKeyPredicate(oNode, this.sMetaPath, this.getTypes());
1118
1211
  const getRank
1119
- = (oNode) => Number.parseInt(_Helper.drillDown(oNode, this.oAggregation.$LimitedRank));
1212
+ = (oNode) => parseInt(_Helper.drillDown(oNode, this.oAggregation.$LimitedRank));
1120
1213
  const mPredicate2RankResult = {};
1121
1214
  oRankResult.value.forEach((oNode) => {
1122
1215
  mPredicate2RankResult[getPredicate(oNode)] = oNode;
@@ -1145,8 +1238,10 @@ sap.ui.define([
1145
1238
  _Helper.merge(oNode, mPredicate2RankResult[sPredicate]);
1146
1239
  // Note: overridden by _AggregationCache.calculateKeyPredicateRH
1147
1240
  this.oFirstLevel.calculateKeyPredicate(oNode, this.getTypes(), this.sMetaPath);
1241
+ const iRank = getRank(oNode);
1242
+ _Helper.deleteProperty(oNode, this.oAggregation.$LimitedRank);
1148
1243
  // insert at rank position to ensure correct placeholder is replaced
1149
- this.insertNode(oNode, getRank(oNode));
1244
+ this.insertNode(oNode, iRank);
1150
1245
  });
1151
1246
  });
1152
1247
 
@@ -1213,6 +1308,22 @@ sap.ui.define([
1213
1308
  return false;
1214
1309
  };
1215
1310
 
1311
+ /**
1312
+ * Returns whether a refresh is needed, if a child is created below the given parent (index).
1313
+ *
1314
+ * @param {number} iParentIndex Index of the parent
1315
+ * @returns {boolean} Whether a refresh is needed
1316
+ *
1317
+ * @public
1318
+ */
1319
+ _AggregationCache.prototype.isRefreshNeededAfterCreate = function (iParentIndex) {
1320
+ const oParent = this.aElements[iParentIndex];
1321
+
1322
+ return this.oAggregation.createInPlace
1323
+ && oParent["@$ui5.node.isExpanded"] === undefined
1324
+ && oParent["@$ui5.node.level"] >= this.oAggregation.expandTo;
1325
+ };
1326
+
1216
1327
  /**
1217
1328
  * Determines the list of elements determined by the given predicates. All other elements are
1218
1329
  * turned into placeholders (lazily), except transient ones.
@@ -1284,12 +1395,15 @@ sap.ui.define([
1284
1395
  * @param {string} [sNonCanonicalChildPath]
1285
1396
  * The (child) node's non-canonical path (relative to the service); only used when
1286
1397
  * <code>sSiblingPath</code> is given
1398
+ * @param {boolean} [bRequestSiblingRank]
1399
+ * Whether to request the next sibling's rank and return its new index
1287
1400
  * @returns {{promise : sap.ui.base.SyncPromise<function():number|number[]>, refresh : boolean}}
1288
1401
  * An object with two properties:
1289
1402
  * - <code>promise</code>: A promise which is resolved when the move is finished, or rejected
1290
1403
  * in case of an error. In case a refresh is needed, the promise is resolved with a function
1291
- * that can be called w/o args once the refresh is finished; it then returns the new index
1292
- * of the moved node (or <code>undefined</code>). Else it resolves with with an array of:
1404
+ * that can be called w/o args once the refresh is finished - it then returns an array with
1405
+ * the new indices of the moved node (or <code>undefined</code>) and of the next sibling (if
1406
+ * requested). Else it is resolved with an array of:
1293
1407
  * - the number of child nodes added (normally one, but maybe more in case the parent node
1294
1408
  * was collapsed before),
1295
1409
  * - the new index of the moved node,
@@ -1300,7 +1414,7 @@ sap.ui.define([
1300
1414
  * @public
1301
1415
  */
1302
1416
  _AggregationCache.prototype.move = function (oGroupLock, sChildPath, sParentPath, sSiblingPath,
1303
- sNonCanonicalChildPath) {
1417
+ sNonCanonicalChildPath, bRequestSiblingRank) {
1304
1418
  let bRefreshNeeded = !this.bUnifiedCache;
1305
1419
 
1306
1420
  const sChildPredicate = sChildPath.slice(sChildPath.indexOf("("));
@@ -1330,13 +1444,15 @@ sap.ui.define([
1330
1444
  }
1331
1445
  }
1332
1446
 
1447
+ let oSiblingNode; // side effect of calling invokeNextSibling()
1333
1448
  const invokeNextSibling = () => {
1334
1449
  if (sSiblingPath !== undefined) {
1335
1450
  bRefreshNeeded = true;
1336
1451
  const sActionPath = sNonCanonicalChildPath + "/"
1337
1452
  + this.oAggregation.$Actions.ChangeNextSiblingAction;
1338
1453
  const sSiblingPredicate = sSiblingPath?.slice(sSiblingPath.indexOf("("));
1339
- let oSiblingNode = this.aElements.$byPredicate[sSiblingPredicate];
1454
+ oSiblingNode = this.aElements.$byPredicate[sSiblingPredicate];
1455
+ let oNextSibling = null;
1340
1456
  if (oSiblingNode) {
1341
1457
  // remove OOP for all descendants (incl. itself) of a next sibling
1342
1458
  this.oTreeState.deleteOutOfPlace(sSiblingPredicate);
@@ -1344,18 +1460,16 @@ sap.ui.define([
1344
1460
  _Helper.getMetaPath("/" + sActionPath + "/NextSibling/")
1345
1461
  ).getResult();
1346
1462
  const aKeys = Object.keys(oNextSiblingType).filter((sKey) => sKey[0] !== "$");
1347
- oSiblingNode = aKeys.reduce((oKeys, sKey) => {
1463
+ oNextSibling = aKeys.reduce((oKeys, sKey) => {
1348
1464
  oKeys[sKey] = oSiblingNode[sKey];
1349
1465
  return oKeys;
1350
1466
  }, {});
1351
- } else {
1352
- oSiblingNode = null;
1353
1467
  }
1354
1468
 
1355
1469
  return this.oRequestor.request("POST", sActionPath, oGroupLock.getUnlockedCopy(), {
1356
1470
  "If-Match" : oChildNode,
1357
1471
  Prefer : "return=minimal"
1358
- }, {NextSibling : oSiblingNode});
1472
+ }, {NextSibling : oNextSibling});
1359
1473
  }
1360
1474
  };
1361
1475
 
@@ -1366,13 +1480,17 @@ sap.ui.define([
1366
1480
  }, {[this.oAggregation.$ParentNavigationProperty + "@odata.bind"] : sParentPath},
1367
1481
  /*fnSubmit*/null, function fnCancel() { /*nothing to do*/ }),
1368
1482
  invokeNextSibling(),
1369
- this.requestRank(oChildNode, oGroupLock, bRefreshNeeded)
1483
+ this.requestRank(oChildNode, oGroupLock, bRefreshNeeded),
1484
+ bRequestSiblingRank && this.requestRank(oSiblingNode, oGroupLock, true)
1370
1485
  ]);
1371
1486
 
1372
1487
  if (bRefreshNeeded) {
1373
- oPromise = oPromise.then(([,, iRank]) => {
1488
+ oPromise = oPromise.then(([,, iRank, iSiblingRank]) => {
1374
1489
  return () => { // Note: caller MUST wait for side-effects refresh first
1375
- return iRank === undefined ? undefined : this.findIndex(iRank);
1490
+ return [
1491
+ iRank === undefined ? undefined : this.findIndex(iRank),
1492
+ bRequestSiblingRank && this.findIndex(iSiblingRank)
1493
+ ];
1376
1494
  };
1377
1495
  });
1378
1496
  } else {
@@ -1483,7 +1601,6 @@ sap.ui.define([
1483
1601
  _AggregationCache.prototype.read = function (iIndex, iLength, iPrefetchLength, oGroupLock,
1484
1602
  fnDataRequested) {
1485
1603
  var oCurrentParent,
1486
- oElement,
1487
1604
  iFirstLevelIndex = iIndex,
1488
1605
  iFirstLevelLength = iLength,
1489
1606
  oGapParent,
@@ -1501,9 +1618,9 @@ sap.ui.define([
1501
1618
  * @param {number} iGapStart start of gap, inclusive
1502
1619
  * @param {number} iGapEnd end of gap, exclusive
1503
1620
  */
1504
- function readGap(iGapStart, iGapEnd) {
1621
+ function readGap(iGapStart0, iGapEnd) {
1505
1622
  aReadPromises.push(
1506
- that.readGap(oGapParent, iGapStart, iGapEnd, oGroupLock.getUnlockedCopy(),
1623
+ that.readGap(oGapParent, iGapStart0, iGapEnd, oGroupLock.getUnlockedCopy(),
1507
1624
  fnDataRequested));
1508
1625
  }
1509
1626
 
@@ -1549,7 +1666,7 @@ sap.ui.define([
1549
1666
  });
1550
1667
  const n = Math.min(oReadRange.start + oReadRange.length, this.aElements.length);
1551
1668
  for (i = oReadRange.start; i < n; i += 1) {
1552
- oElement = this.aElements[i];
1669
+ const oElement = this.aElements[i];
1553
1670
  oCurrentParent = _Helper.hasPrivateAnnotation(oElement, "placeholder")
1554
1671
  ? _Helper.getPrivateAnnotation(oElement, "parent")
1555
1672
  : undefined;
@@ -1596,8 +1713,8 @@ sap.ui.define([
1596
1713
  * search into account.
1597
1714
  *
1598
1715
  * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
1599
- * A lock for the group to associate the requests with;
1600
- * {@link sap.ui.model.odata.v4.lib._GroupLock#getUnlockedCopy} still needs to be called!
1716
+ * An original lock for the group ID to be used for the GET request, to be cloned via
1717
+ * {@link sap.ui.model.odata.v4.lib._GroupLock#getUnlockedCopy}
1601
1718
  * @returns {Promise<void>|undefined}
1602
1719
  * A promise which is resolved without a defined result when the read is finished, or
1603
1720
  * rejected in case of an error; <code>undefined</code> in case no count needs to be read
@@ -1826,10 +1943,12 @@ sap.ui.define([
1826
1943
  * @override
1827
1944
  * @see sap.ui.model.odata.v4.lib._CollectionCache#refreshKeptElements
1828
1945
  */
1829
- _AggregationCache.prototype.refreshKeptElements = function (oGroupLock, fnOnRemove) {
1946
+ _AggregationCache.prototype.refreshKeptElements = function (oGroupLock, fnOnRemove,
1947
+ bIgnorePendingChanges, _bDropApply) {
1830
1948
  // "super" call (like @borrows ...)
1831
1949
  const fnSuper = this.oFirstLevel.refreshKeptElements;
1832
- return fnSuper.call(this, oGroupLock, fnOnRemove, true);
1950
+ return fnSuper.call(this, oGroupLock, fnOnRemove, bIgnorePendingChanges,
1951
+ /*bDropApply*/true);
1833
1952
  };
1834
1953
 
1835
1954
  /**
@@ -1864,7 +1983,8 @@ sap.ui.define([
1864
1983
  * moved to their out-of-place position in the cache.
1865
1984
  *
1866
1985
  * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
1867
- * A lock for the group to associate the requests with
1986
+ * An original lock for the group ID to be used for the GET request, to be cloned via
1987
+ * {@link sap.ui.model.odata.v4.lib._GroupLock#getUnlockedCopy}
1868
1988
  * @returns {Promise[]}
1869
1989
  * The request promises
1870
1990
  *
@@ -1943,7 +2063,7 @@ sap.ui.define([
1943
2063
  mQueryOptions = getApply(
1944
2064
  _AggregationHelper.buildApply4Hierarchy(oAggregation, this.mQueryOptions));
1945
2065
  } else {
1946
- const oCache = _Helper.getPrivateAnnotation(oElement, "parent");
2066
+ const oCache = _Helper.getPrivateAnnotation(oElement, "parent", this.oFirstLevel);
1947
2067
  mQueryOptions = bDropFilter
1948
2068
  ? _AggregationHelper
1949
2069
  .dropFilter(this.oAggregation, this.mQueryOptions, oCache.$parentFilter)
@@ -1957,7 +2077,7 @@ sap.ui.define([
1957
2077
  this.sMetaPath, undefined, false, {$select : aSelect}, this);
1958
2078
  const oRequestedProperties = oResult.value[0];
1959
2079
 
1960
- if (bInheritResult) {
2080
+ if (bInheritResult && oRequestedProperties) {
1961
2081
  aSelect.forEach((sPath) => {
1962
2082
  _Helper.inheritPathValue(sPath.split("/"), oRequestedProperties, oElement, true);
1963
2083
  });
@@ -1991,6 +2111,57 @@ sap.ui.define([
1991
2111
  return oResult && parseInt(_Helper.drillDown(oResult, this.oAggregation.$LimitedRank));
1992
2112
  };
1993
2113
 
2114
+ /**
2115
+ * Returns the index of the given node's sibling, either the next one (via offset +1) or the
2116
+ * previous one (via offset -1).
2117
+ *
2118
+ * @param {number} iIndex - The index of a node
2119
+ * @param {number} iOffset - An offset, either -1 or +1
2120
+ * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
2121
+ * An unlocked lock for the group to associate the requests with
2122
+ * @returns {Promise<number>}
2123
+ * The sibling node's index, or -1 if no such sibling exists
2124
+ *
2125
+ * @public
2126
+ */
2127
+ _AggregationCache.prototype.requestSiblingIndex = async function (iIndex, iOffset, oGroupLock) {
2128
+ const iSiblingIndex = this.getSiblingIndex(iIndex, iOffset, true);
2129
+ if (iSiblingIndex !== undefined) {
2130
+ return iSiblingIndex;
2131
+ }
2132
+
2133
+ const oNode = this.aElements[iIndex];
2134
+ const mQueryOptions = {
2135
+ ...this.oFirstLevel.mQueryOptions,
2136
+ $filter : this.oAggregation.$LimitedRank + (iOffset < 0 ? " lt " : " gt ")
2137
+ + _Helper.getPrivateAnnotation(oNode, "rank") + " and "
2138
+ + this.oAggregation.$DistanceFromRoot + " lt " + oNode["@$ui5.node.level"],
2139
+ $top : 1
2140
+ };
2141
+ if (iOffset < 0) {
2142
+ mQueryOptions.$orderby = this.oAggregation.$LimitedRank + " desc";
2143
+ }
2144
+ mQueryOptions.$select = [...mQueryOptions.$select, this.oAggregation.$LimitedRank];
2145
+ delete mQueryOptions.$count;
2146
+ const sResourcePath = this.sResourcePath
2147
+ + this.oRequestor.buildQueryString("", mQueryOptions, false, true, true);
2148
+
2149
+ const oResult = await this.oRequestor.request("GET", sResourcePath, oGroupLock);
2150
+
2151
+ const oSibling = oResult.value[0];
2152
+ // Note: overridden by _AggregationCache.calculateKeyPredicateRH
2153
+ this.oFirstLevel.calculateKeyPredicate(oSibling, this.getTypes(), this.sMetaPath);
2154
+ const iSiblingRank = parseInt(_Helper.drillDown(oSibling, this.oAggregation.$LimitedRank));
2155
+ _Helper.deleteProperty(oSibling, this.oAggregation.$LimitedRank);
2156
+ if (_Helper.hasPrivateAnnotation(this.aElements[iSiblingRank], "placeholder")) {
2157
+ this.insertNode(oSibling, iSiblingRank);
2158
+ } // else: sibling already inside collection
2159
+
2160
+ return oSibling["@$ui5.node.level"] === oNode["@$ui5.node.level"]
2161
+ ? iSiblingRank
2162
+ : -1; // no such sibling
2163
+ };
2164
+
1994
2165
  /**
1995
2166
  * @override
1996
2167
  * @see sap.ui.model.odata.v4.lib._CollectionCache#reset
@@ -44,6 +44,7 @@ sap.ui.define([
44
44
  + "(?:/" + _Parser.sODataIdentifier + ")*"
45
45
  + ")(?:" + _Parser.sWhitespace + "+(?:asc|desc))?$"),
46
46
  mRecursiveHierarchyType = {
47
+ createInPlace : true,
47
48
  expandTo : /^[1-9]\d*$/, // a positive integer
48
49
  hierarchyQualifier : "string",
49
50
  search : "string"
@@ -182,6 +183,7 @@ sap.ui.define([
182
183
  // restore previous expansion state
183
184
  oElement["@$ui5.node.isExpanded"] = oPlaceholder["@$ui5.node.isExpanded"];
184
185
  }
186
+ _Helper.copySelected(oPlaceholder, oElement);
185
187
  }
186
188
  },
187
189
 
@@ -636,6 +638,10 @@ sap.ui.define([
636
638
  _AggregationHelper.checkTypeof(vValue[sKey], vType[bIsMap ? "*" : sKey],
637
639
  sPath + "/" + sKey);
638
640
  });
641
+ } else if (vType === true) {
642
+ if (vValue !== true) {
643
+ throw new Error("Not a true value for '" + sPath + "'");
644
+ }
639
645
  } else if (typeof vValue !== vType) { // eslint-disable-line valid-typeof
640
646
  throw new Error("Not a " + vType + " value for '" + sPath + "'");
641
647
  }
@@ -793,6 +799,44 @@ sap.ui.define([
793
799
  return mQueryOptions;
794
800
  },
795
801
 
802
+ /**
803
+ * Finds the index of the previous sibling within the given list of elements (which is meant
804
+ * to contain different levels), starting from an original node at the given index.
805
+ *
806
+ * @param {object[]} aElements - A list of elements with possible holes
807
+ * @param {number} iIndex - The original node's index within list of elements
808
+ * @returns {number}
809
+ * The previous sibling's index, or -1 if there is no previous sibling for sure, or
810
+ * <code>undefined</code> if we cannot tell
811
+ *
812
+ * @public
813
+ */
814
+ findPreviousSiblingIndex : function (aElements, iIndex) {
815
+ let bHole;
816
+ const iLevel = aElements[iIndex]["@$ui5.node.level"];
817
+ for (let iSibling = iIndex - 1; iSibling >= 0; iSibling -= 1) {
818
+ const oCandidate = aElements[iSibling];
819
+ if (!oCandidate) {
820
+ bHole = true;
821
+ continue; // skip holes
822
+ }
823
+ if (oCandidate["@$ui5.node.level"] < iLevel) {
824
+ break; // sibling missed or no such sibling
825
+ }
826
+ if (oCandidate["@$ui5.node.level"] > iLevel) {
827
+ continue; // ignore descendants
828
+ }
829
+ // else: same level
830
+ if (iSibling + _Helper.getPrivateAnnotation(oCandidate, "descendants", 0)
831
+ === iIndex - 1) {
832
+ return iSibling; // sibling found
833
+ }
834
+ break; // sibling missed (implies bHole)
835
+ }
836
+
837
+ return bHole ? undefined : -1;
838
+ },
839
+
796
840
  /**
797
841
  * Returns an unsorted list of all aggregatable or groupable properties, including units.
798
842
  *
@@ -1257,10 +1301,10 @@ sap.ui.define([
1257
1301
  * @returns {boolean}
1258
1302
  * Whether the filter must be applied after aggregating
1259
1303
  */
1260
- function isAfter(oFilter) {
1261
- return oFilter.aFilters
1262
- ? oFilter.aFilters.some(isAfter)
1263
- : oFilter.sPath in oAggregation.aggregate;
1304
+ function isAfter(oFilter0) {
1305
+ return oFilter0.aFilters
1306
+ ? oFilter0.aFilters.some(isAfter)
1307
+ : oFilter0.sPath in oAggregation.aggregate;
1264
1308
  }
1265
1309
 
1266
1310
  /*
@@ -1270,12 +1314,12 @@ sap.ui.define([
1270
1314
  * @param {sap.ui.model.Filter} oFilter
1271
1315
  * A filter
1272
1316
  */
1273
- function split(oFilter) {
1274
- if (oFilter.aFilters && oFilter.bAnd) {
1275
- oFilter.aFilters.forEach(split);
1317
+ function split(oFilter0) {
1318
+ if (oFilter0.aFilters && oFilter0.bAnd) {
1319
+ oFilter0.aFilters.forEach(split);
1276
1320
  } else {
1277
- (isAfter(oFilter) ? aFiltersAfterAggregate : aFiltersBeforeAggregate)
1278
- .push(oFilter);
1321
+ (isAfter(oFilter0) ? aFiltersAfterAggregate : aFiltersBeforeAggregate)
1322
+ .push(oFilter0);
1279
1323
  }
1280
1324
  }
1281
1325