@openui5/sap.ui.core 1.126.1 → 1.127.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 (647) hide show
  1. package/THIRDPARTY.txt +1 -1
  2. package/package.json +1 -1
  3. package/src/jquery.sap.global.js +1 -1
  4. package/src/jquery.sap.properties.js +1 -1
  5. package/src/jquery.sap.resources.js +1 -1
  6. package/src/jquery.sap.script.js +1 -1
  7. package/src/jquery.sap.storage.js +3 -3
  8. package/src/sap/base/Event.js +1 -1
  9. package/src/sap/base/Eventing.js +1 -1
  10. package/src/sap/base/config.js +1 -1
  11. package/src/sap/base/i18n/LanguageTag.js +1 -1
  12. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  13. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  14. package/src/sap/base/util/restricted/_castArray.js +1 -1
  15. package/src/sap/base/util/restricted/_compact.js +1 -1
  16. package/src/sap/base/util/restricted/_curry.js +1 -1
  17. package/src/sap/base/util/restricted/_debounce.js +1 -1
  18. package/src/sap/base/util/restricted/_difference.js +1 -1
  19. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  20. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  21. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  22. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  23. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  24. package/src/sap/base/util/restricted/_flatten.js +1 -1
  25. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  26. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  27. package/src/sap/base/util/restricted/_intersection.js +1 -1
  28. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  29. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  30. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  31. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  32. package/src/sap/base/util/restricted/_isNil.js +1 -1
  33. package/src/sap/base/util/restricted/_max.js +1 -1
  34. package/src/sap/base/util/restricted/_merge.js +1 -1
  35. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  36. package/src/sap/base/util/restricted/_min.js +1 -1
  37. package/src/sap/base/util/restricted/_omit.js +1 -1
  38. package/src/sap/base/util/restricted/_pick.js +1 -1
  39. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  40. package/src/sap/base/util/restricted/_throttle.js +1 -1
  41. package/src/sap/base/util/restricted/_toArray.js +1 -1
  42. package/src/sap/base/util/restricted/_union.js +1 -1
  43. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  44. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  45. package/src/sap/base/util/restricted/_uniq.js +1 -1
  46. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  47. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  48. package/src/sap/base/util/restricted/_without.js +1 -1
  49. package/src/sap/base/util/restricted/_xor.js +1 -1
  50. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  51. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  52. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  53. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  54. package/src/sap/ui/Device.js +3 -3
  55. package/src/sap/ui/Global.js +5 -15
  56. package/src/sap/ui/base/BindingInfo.js +45 -24
  57. package/src/sap/ui/base/DataType.js +19 -0
  58. package/src/sap/ui/base/Event.js +1 -1
  59. package/src/sap/ui/base/EventProvider.js +1 -1
  60. package/src/sap/ui/base/Interface.js +31 -1
  61. package/src/sap/ui/base/ManagedObject.js +3 -4
  62. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  63. package/src/sap/ui/base/Metadata.js +1 -1
  64. package/src/sap/ui/base/Object.js +1 -1
  65. package/src/sap/ui/base/ObjectPool.js +1 -1
  66. package/src/sap/ui/core/.library +1 -1
  67. package/src/sap/ui/core/.theming +8 -0
  68. package/src/sap/ui/core/BusyIndicator.js +1 -1
  69. package/src/sap/ui/core/Component.js +1 -1
  70. package/src/sap/ui/core/ComponentContainer.js +1 -1
  71. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  72. package/src/sap/ui/core/ComponentSupport.js +1 -1
  73. package/src/sap/ui/core/Configuration.js +1 -1
  74. package/src/sap/ui/core/Control.js +2 -2
  75. package/src/sap/ui/core/Core.js +57 -2
  76. package/src/sap/ui/core/CustomData.js +1 -1
  77. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  78. package/src/sap/ui/core/Element.js +166 -16
  79. package/src/sap/ui/core/ElementMetadata.js +1 -1
  80. package/src/sap/ui/core/EnabledPropagator.js +17 -31
  81. package/src/sap/ui/core/EventBus.js +1 -1
  82. package/src/sap/ui/core/Fragment.js +1 -1
  83. package/src/sap/ui/core/HTML.js +1 -1
  84. package/src/sap/ui/core/History.js +1 -1
  85. package/src/sap/ui/core/Icon.js +1 -1
  86. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  87. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  88. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  89. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  90. package/src/sap/ui/core/InvisibleText.js +1 -1
  91. package/src/sap/ui/core/Item.js +2 -2
  92. package/src/sap/ui/core/LabelEnablement.js +1 -1
  93. package/src/sap/ui/core/LayoutData.js +1 -1
  94. package/src/sap/ui/core/ListItem.js +1 -1
  95. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  96. package/src/sap/ui/core/Locale.js +1 -1
  97. package/src/sap/ui/core/LocaleData.js +118 -55
  98. package/src/sap/ui/core/Manifest.js +1 -1
  99. package/src/sap/ui/core/Message.js +1 -1
  100. package/src/sap/ui/core/Popup.js +8 -0
  101. package/src/sap/ui/core/RenderManager.js +1 -1
  102. package/src/sap/ui/core/Renderer.js +1 -1
  103. package/src/sap/ui/core/ResizeHandler.js +1 -1
  104. package/src/sap/ui/core/ScrollBar.js +1 -1
  105. package/src/sap/ui/core/SeparatorItem.js +1 -1
  106. package/src/sap/ui/core/Theming.js +4 -4
  107. package/src/sap/ui/core/Title.js +2 -2
  108. package/src/sap/ui/core/TooltipBase.js +2 -2
  109. package/src/sap/ui/core/UIArea.js +1 -1
  110. package/src/sap/ui/core/UIComponent.js +1 -1
  111. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  112. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  113. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  114. package/src/sap/ui/core/XMLComposite.js +1 -1
  115. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  116. package/src/sap/ui/core/cache/CacheManagerNOP.js +3 -0
  117. package/src/sap/ui/core/cache/LRUPersistentCache.js +13 -4
  118. package/src/sap/ui/core/date/UI5Date.js +1 -1
  119. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  120. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  121. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  122. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  123. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  124. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  125. package/src/sap/ui/core/fieldhelp/FieldHelp.js +53 -11
  126. package/src/sap/ui/core/fieldhelp/FieldHelpUtil.js +4 -0
  127. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  128. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  129. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  130. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  131. package/src/sap/ui/core/library.js +37 -21
  132. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  133. package/src/sap/ui/core/message/Message.js +1 -1
  134. package/src/sap/ui/core/message/MessageManager.js +1 -1
  135. package/src/sap/ui/core/message/MessageParser.js +1 -1
  136. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  137. package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +30 -18
  138. package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +294 -282
  139. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  140. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  141. package/src/sap/ui/core/mvc/JSView.js +1 -1
  142. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  143. package/src/sap/ui/core/mvc/View.js +1 -1
  144. package/src/sap/ui/core/mvc/XMLView.js +4 -4
  145. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  146. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  147. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  148. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  149. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  150. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  151. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  152. package/src/sap/ui/core/service/Service.js +1 -1
  153. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  154. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  155. package/src/sap/ui/core/support/Plugin.js +1 -1
  156. package/src/sap/ui/core/support/Support.js +1 -1
  157. package/src/sap/ui/core/support/ToolsAPI.js +5 -5
  158. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  159. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  160. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  161. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  162. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  163. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  164. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  165. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  166. package/src/sap/ui/core/themes/base/base.less +119 -49
  167. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  168. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  169. package/src/sap/ui/core/themes/base/library.source.less +2 -0
  170. package/src/sap/ui/core/themes/base/skeleton.less +958 -0
  171. package/src/sap/ui/core/theming/ThemeManager.js +56 -73
  172. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  173. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  174. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  175. package/src/sap/ui/core/tmpl/Template.js +1 -1
  176. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  177. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  178. package/src/sap/ui/core/util/Export.js +1 -1
  179. package/src/sap/ui/core/util/ExportCell.js +1 -1
  180. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  181. package/src/sap/ui/core/util/ExportRow.js +1 -1
  182. package/src/sap/ui/core/util/ExportType.js +1 -1
  183. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  184. package/src/sap/ui/core/util/File.js +1 -1
  185. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  186. package/src/sap/ui/core/util/MockServer.js +1 -1
  187. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  188. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  189. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  190. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  191. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  192. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  193. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  194. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  195. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  196. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  197. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  198. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  199. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  200. package/src/sap/ui/debug/ControlTree.js +1 -1
  201. package/src/sap/ui/debug/DebugEnv.js +1 -1
  202. package/src/sap/ui/debug/PropertyList.js +1 -1
  203. package/src/sap/ui/dom/findTabbable.js +244 -0
  204. package/src/sap/ui/dom/isElementCovered.js +51 -0
  205. package/src/sap/ui/events/F6Navigation.js +10 -164
  206. package/src/sap/ui/model/ClientModel.js +1 -1
  207. package/src/sap/ui/model/CompositeDataState.js +1 -1
  208. package/src/sap/ui/model/CompositeType.js +1 -1
  209. package/src/sap/ui/model/DataState.js +1 -1
  210. package/src/sap/ui/model/MetaModel.js +1 -1
  211. package/src/sap/ui/model/Model.js +1 -1
  212. package/src/sap/ui/model/SelectionModel.js +1 -1
  213. package/src/sap/ui/model/SimpleType.js +1 -1
  214. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  215. package/src/sap/ui/model/Type.js +1 -1
  216. package/src/sap/ui/model/json/JSONModel.js +1 -1
  217. package/src/sap/ui/model/message/MessageModel.js +1 -1
  218. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  219. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  220. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  221. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  222. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  223. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  224. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  225. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  226. package/src/sap/ui/model/odata/type/Date.js +1 -1
  227. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  228. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  229. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  230. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  231. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  232. package/src/sap/ui/model/odata/type/Double.js +1 -1
  233. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  234. package/src/sap/ui/model/odata/type/Int.js +1 -1
  235. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  236. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  237. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  238. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  239. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  240. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  241. package/src/sap/ui/model/odata/type/Single.js +1 -1
  242. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  243. package/src/sap/ui/model/odata/type/String.js +1 -1
  244. package/src/sap/ui/model/odata/type/Time.js +1 -1
  245. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  246. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  247. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  248. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  249. package/src/sap/ui/model/odata/v2/ODataModel.js +144 -14
  250. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  251. package/src/sap/ui/model/odata/v4/Context.js +18 -8
  252. package/src/sap/ui/model/odata/v4/ODataBinding.js +1 -1
  253. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +12 -9
  254. package/src/sap/ui/model/odata/v4/ODataListBinding.js +30 -14
  255. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +254 -189
  256. package/src/sap/ui/model/odata/v4/ODataModel.js +51 -13
  257. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +4 -1
  258. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +68 -32
  259. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +9 -6
  260. package/src/sap/ui/model/odata/v4/lib/_Cache.js +7 -7
  261. package/src/sap/ui/model/odata/v4/lib/_Helper.js +17 -11
  262. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +11 -3
  263. package/src/sap/ui/model/odata/v4/lib/_TreeState.js +10 -4
  264. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  265. package/src/sap/ui/model/type/Boolean.js +1 -1
  266. package/src/sap/ui/model/type/Currency.js +1 -1
  267. package/src/sap/ui/model/type/Date.js +1 -1
  268. package/src/sap/ui/model/type/DateInterval.js +1 -1
  269. package/src/sap/ui/model/type/DateTime.js +1 -1
  270. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  271. package/src/sap/ui/model/type/FileSize.js +1 -1
  272. package/src/sap/ui/model/type/Float.js +1 -1
  273. package/src/sap/ui/model/type/Integer.js +1 -1
  274. package/src/sap/ui/model/type/String.js +1 -1
  275. package/src/sap/ui/model/type/Time.js +1 -1
  276. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  277. package/src/sap/ui/model/type/Unit.js +1 -1
  278. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  279. package/src/sap/ui/performance/trace/FESR.js +3 -0
  280. package/src/sap/ui/performance/trace/Interaction.js +4 -2
  281. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  282. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  283. package/src/sap/ui/qunit/utils/nextUIUpdate.js +7 -53
  284. package/src/sap/ui/qunit/utils/waitForThemeApplied.js +6 -42
  285. package/src/sap/ui/test/ModuleTracking.js +1 -1
  286. package/src/sap/ui/test/generic/TestBase.js +1 -1
  287. package/src/sap/ui/test/generic/Utils.js +3 -7
  288. package/src/sap/ui/test/opaQunit.js +3 -3
  289. package/src/sap/ui/test/utils/nextUIUpdate.js +64 -0
  290. package/src/sap/ui/test/utils/waitForThemeApplied.js +58 -0
  291. package/src/sap/ui/util/Storage.js +1 -1
  292. package/src/ui5loader.js +9 -0
  293. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/ui5.yaml +1 -1
  294. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +1 -1
  295. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +1 -1
  296. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +1 -1
  297. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +1 -1
  298. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/SandboxModel.js +1 -1
  299. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/data/SalesOrderList('0500000000')-requestSideEffects.json +14 -14
  300. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.controller.js +32 -2
  301. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +22 -0
  302. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Component.js +69 -0
  303. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/MIT.ListBindingTemplate.AnnotationChanges.html +63 -0
  304. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Main.view.xml +19 -7
  305. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/SandboxModel.js +1 -4
  306. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/data/equipments.json +37 -22
  307. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/data/localAnnotations.xml +10 -2
  308. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +5 -5
  309. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +32 -2
  310. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +30 -0
  311. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +12 -6
  312. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.controller.js +7 -0
  313. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.view.xml +2 -0
  314. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/SandboxModel.js +14 -14
  315. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/pages/Main.js +1 -1
  316. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  317. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  318. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  319. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  320. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  321. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  322. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  323. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  324. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  325. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  326. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  327. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  328. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  329. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  330. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  331. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  332. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  333. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  334. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  335. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  336. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  337. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  338. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  339. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  340. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  341. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  342. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  343. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  344. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  345. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  346. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  347. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  348. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  349. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  350. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  351. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  352. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  353. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  354. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  355. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  356. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  357. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  358. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  359. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  360. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  361. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  362. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  363. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/package.json +3 -0
  364. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  365. package/test/sap/ui/core/qunit/BlockLayerUtils.qunit.js +1 -1
  366. package/test/sap/ui/core/qunit/CalculatedFields.qunit.js +1 -1
  367. package/test/sap/ui/core/qunit/ContextMenuSupport.qunit.js +1 -1
  368. package/test/sap/ui/core/qunit/ControlDefinition.qunit.js +2 -2
  369. package/test/sap/ui/core/qunit/ControlRenderer.qunit.js +1 -1
  370. package/test/sap/ui/core/qunit/Core.qunit.js +1 -1
  371. package/test/sap/ui/core/qunit/CustomStyleClassSupport.qunit.js +1 -1
  372. package/test/sap/ui/core/qunit/CustomThemeFallback.qunit.js +1 -1
  373. package/test/sap/ui/core/qunit/CustomThemeFallback_unavoidablySync.qunit.js +1 -1
  374. package/test/sap/ui/core/qunit/Element_data.qunit.js +1 -1
  375. package/test/sap/ui/core/qunit/Element_destroy.qunit.js +1 -1
  376. package/test/sap/ui/core/qunit/Element_focus.qunit.js +196 -3
  377. package/test/sap/ui/core/qunit/Element_metadata_selector.qunit.js +1 -1
  378. package/test/sap/ui/core/qunit/EnabledPropagator.qunit.js +2 -3
  379. package/test/sap/ui/core/qunit/FastNavigationWithWebComponents.qunit.js +1 -1
  380. package/test/sap/ui/core/qunit/FieldGroup.qunit.js +1 -1
  381. package/test/sap/ui/core/qunit/FocusHandler.qunit.js +1 -1
  382. package/test/sap/ui/core/qunit/Fragment.qunit.js +1 -1
  383. package/test/sap/ui/core/qunit/Fragment_legacyAPIs.qunit.js +1 -1
  384. package/test/sap/ui/core/qunit/HTML.qunit.js +1 -1
  385. package/test/sap/ui/core/qunit/Icon.qunit.js +1 -1
  386. package/test/sap/ui/core/qunit/InvisibleText.qunit.js +1 -1
  387. package/test/sap/ui/core/qunit/LRUPersistentCache.qunit.js +8 -4
  388. package/test/sap/ui/core/qunit/LocalBusyIndicator.qunit.js +1 -1
  389. package/test/sap/ui/core/qunit/RenderManager.qunit.js +1 -1
  390. package/test/sap/ui/core/qunit/Rendering.qunit.js +1 -1
  391. package/test/sap/ui/core/qunit/ResizeHandler.qunit.js +1 -1
  392. package/test/sap/ui/core/qunit/ScrollBar.qunit.js +1 -1
  393. package/test/sap/ui/core/qunit/ShortcutHints.qunit.js +1 -1
  394. package/test/sap/ui/core/qunit/StashedControlSupport.qunit.js +1 -1
  395. package/test/sap/ui/core/qunit/StashedControlSupport_unavoidablySync.qunit.js +1 -1
  396. package/test/sap/ui/core/qunit/ThemeManager.qunit.js +1 -1
  397. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +1 -1
  398. package/test/sap/ui/core/qunit/ThemeParameters_legacyAPIs.qunit.js +1 -1
  399. package/test/sap/ui/core/qunit/Theming.qunit.js +1 -1
  400. package/test/sap/ui/core/qunit/Theming_default_and_fallback.qunit.js +1 -1
  401. package/test/sap/ui/core/qunit/TooltipBase.qunit.js +1 -1
  402. package/test/sap/ui/core/qunit/UIArea.qunit.js +1 -1
  403. package/test/sap/ui/core/qunit/bootstrap/ThemeVersion.qunit.js +1 -1
  404. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +1 -8
  405. package/test/sap/ui/core/qunit/component/Component.qunit.js +36 -36
  406. package/test/sap/ui/core/qunit/component/ComponentContainer.qunit.js +2 -10
  407. package/test/sap/ui/core/qunit/component/ComponentContainer_unavoidablySync.qunit.js +2 -10
  408. package/test/sap/ui/core/qunit/component/ComponentSupport.qunit.js +5 -5
  409. package/test/sap/ui/core/qunit/component/Component_containedInLibrary.qunit.js +10 -10
  410. package/test/sap/ui/core/qunit/component/Component_dependencyLoading.qunit.js +7 -7
  411. package/test/sap/ui/core/qunit/component/Component_dependencyLoading_unavoidablySync.qunit.js +6 -6
  412. package/test/sap/ui/core/qunit/component/Component_unavoidablySync.qunit.js +8 -8
  413. package/test/sap/ui/core/qunit/component/Customizing.qunit.js +1 -1
  414. package/test/sap/ui/core/qunit/component/Customizing_async.qunit.js +3 -3
  415. package/test/sap/ui/core/qunit/component/Customizing_disabled.qunit.js +1 -1
  416. package/test/sap/ui/core/qunit/component/Customizing_legacyAPIs.qunit.js +2 -2
  417. package/test/sap/ui/core/qunit/component/Customizing_multi.qunit.js +1 -1
  418. package/test/sap/ui/core/qunit/component/Customizing_unavoidablySync.qunit.js +1 -1
  419. package/test/sap/ui/core/qunit/component/ExtensionPoint.qunit.js +3 -3
  420. package/test/sap/ui/core/qunit/component/ExtensionPoint_unavoidablySync.qunit.js +1 -1
  421. package/test/sap/ui/core/qunit/component/Manifest.qunit.js +10 -10
  422. package/test/sap/ui/core/qunit/component/Manifest_unavoidablySync.qunit.js +1 -1
  423. package/test/sap/ui/core/qunit/component/Metadata.qunit.js +47 -47
  424. package/test/sap/ui/core/qunit/component/Metadata_unavoidablySync.qunit.js +33 -33
  425. package/test/sap/ui/core/qunit/component/Models.qunit.js +57 -57
  426. package/test/sap/ui/core/qunit/component/Models_unavoidablySync.qunit.js +12 -12
  427. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +2 -2
  428. package/test/sap/ui/core/qunit/component/UIComponent_unavoidablySync.qunit.js +1 -1
  429. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component1/Component.js +2 -2
  430. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component1/manifest.json +3 -3
  431. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component2/Component.js +2 -2
  432. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component2/manifest.json +1 -1
  433. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component3/Component.js +2 -2
  434. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component3/manifest.json +2 -2
  435. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component4/Component.js +2 -2
  436. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component4/manifest.json +2 -2
  437. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component5/Component.js +2 -2
  438. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component5/manifest.json +2 -2
  439. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component6/Component.js +2 -2
  440. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component6/manifest.json +2 -2
  441. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/componentVariant/manifest.json +2 -2
  442. package/test/sap/ui/core/qunit/component/testdata/embedded/Component.js +2 -2
  443. package/test/sap/ui/core/qunit/component/testdata/embedded/manifest.json +2 -2
  444. package/test/sap/ui/core/qunit/component/testdata/inherit/Component.js +2 -2
  445. package/test/sap/ui/core/qunit/component/testdata/inherit/component.json +1 -1
  446. package/test/sap/ui/core/qunit/component/testdata/inherit/manifest.json +9 -9
  447. package/test/sap/ui/core/qunit/component/testdata/inherit/parent/Component.js +2 -2
  448. package/test/sap/ui/core/qunit/component/testdata/inherit/parent/component.json +1 -1
  449. package/test/sap/ui/core/qunit/component/testdata/inherit/parent/manifest.json +9 -9
  450. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/Component.js +2 -2
  451. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/manifest.json +3 -3
  452. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentA/Component.js +2 -2
  453. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentA/manifest.json +2 -2
  454. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentB/Component.js +2 -2
  455. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentB/manifest.json +3 -3
  456. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/Component.js +2 -2
  457. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/manifest.json +3 -3
  458. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentA/Component.js +2 -2
  459. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentA/manifest.json +2 -2
  460. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentB/Component.js +2 -2
  461. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentB/manifest.json +3 -3
  462. package/test/sap/ui/core/qunit/component/testdata/manifestload/manifest.json +2 -2
  463. package/test/sap/ui/core/qunit/component/testdata/minUI5Version/Component.js +1 -1
  464. package/test/sap/ui/core/qunit/component/testdata/minUI5Version/manifest.json +1 -1
  465. package/test/sap/ui/core/qunit/component/testdata/mixed/Component.js +1 -1
  466. package/test/sap/ui/core/qunit/component/testdata/mixed/manifest.json +9 -9
  467. package/test/sap/ui/core/qunit/component/testdata/mixed_legacyAPIs/Component.js +1 -1
  468. package/test/sap/ui/core/qunit/component/testdata/mixed_legacyAPIs/component.json +8 -8
  469. package/test/sap/ui/core/qunit/component/testdata/mixed_legacyAPIs/manifest.json +9 -9
  470. package/test/sap/ui/core/qunit/component/testdata/modelsMisc/Component.js +1 -1
  471. package/test/sap/ui/core/qunit/component/testdata/modelsMisc/manifest.json +1 -1
  472. package/test/sap/ui/core/qunit/component/testdata/other/Component.js +2 -2
  473. package/test/sap/ui/core/qunit/component/testdata/routerClass/Component.js +1 -1
  474. package/test/sap/ui/core/qunit/component/testdata/routerClass/manifest.json +2 -2
  475. package/test/sap/ui/core/qunit/component/testdata/routerPreloading/Component.js +1 -1
  476. package/test/sap/ui/core/qunit/component/testdata/routerPreloading/manifest.json +2 -2
  477. package/test/sap/ui/core/qunit/component/testdata/routing/Component.js +2 -2
  478. package/test/sap/ui/core/qunit/component/testdata/routing/RouterExtension.js +1 -1
  479. package/test/sap/ui/core/qunit/component/testdata/routing/TestView.js +1 -8
  480. package/test/sap/ui/core/qunit/component/testdata/routing/targets/Component.js +2 -2
  481. package/test/sap/ui/core/qunit/component/testdata/routing_legacyAPIs/Component.js +5 -5
  482. package/test/sap/ui/core/qunit/component/testdata/routing_legacyAPIs/targets/Component.js +5 -5
  483. package/test/sap/ui/core/qunit/component/testdata/targetsPreloading/Component.js +1 -1
  484. package/test/sap/ui/core/qunit/component/testdata/targetsPreloading/manifest.json +2 -2
  485. package/test/sap/ui/core/qunit/component/testdata/terminologies/Component.js +1 -1
  486. package/test/sap/ui/core/qunit/component/testdata/terminologies/Main.controller.js +1 -1
  487. package/test/sap/ui/core/qunit/component/testdata/terminologies/component1/Component.js +1 -1
  488. package/test/sap/ui/core/qunit/component/testdata/terminologies/component1/Main.controller.js +1 -1
  489. package/test/sap/ui/core/qunit/component/testdata/terminologies/component2/Component.js +1 -1
  490. package/test/sap/ui/core/qunit/component/testdata/terminologies/component2/Main.controller.js +1 -1
  491. package/test/sap/ui/core/qunit/component/testdata/terminologies/component3/Component.js +1 -1
  492. package/test/sap/ui/core/qunit/component/testdata/terminologies/component3/Main.controller.js +1 -1
  493. package/test/sap/ui/core/qunit/component/testdata/terminologies/component4/Component.js +1 -1
  494. package/test/sap/ui/core/qunit/component/testdata/terminologies/component4/Main.controller.js +1 -1
  495. package/test/sap/ui/core/qunit/component/testdata/terminologies/component5/Component.js +1 -1
  496. package/test/sap/ui/core/qunit/component/testdata/terminologies/component5/Main.controller.js +1 -1
  497. package/test/sap/ui/core/qunit/component/testdata/terminologies/reuse/Component.js +1 -1
  498. package/test/sap/ui/core/qunit/component/testdata/terminologies/reuse/Main.controller.js +1 -1
  499. package/test/sap/ui/core/qunit/component/testdata/v1/Component.js +2 -2
  500. package/test/sap/ui/core/qunit/component/testdata/v1/component.json +8 -8
  501. package/test/sap/ui/core/qunit/component/testdata/v1empty/Component.js +2 -2
  502. package/test/sap/ui/core/qunit/component/testdata/v1empty/component.json +1 -1
  503. package/test/sap/ui/core/qunit/component/testdata/v1inline/Component.js +10 -10
  504. package/test/sap/ui/core/qunit/component/testdata/v1missing/Component.js +2 -2
  505. package/test/sap/ui/core/qunit/component/testdata/v2/Component.js +2 -2
  506. package/test/sap/ui/core/qunit/component/testdata/v2/manifest.json +9 -9
  507. package/test/sap/ui/core/qunit/component/testdata/v2asyncRootView/Component.js +2 -2
  508. package/test/sap/ui/core/qunit/component/testdata/v2asyncRootView/manifest.json +9 -9
  509. package/test/sap/ui/core/qunit/component/testdata/v2empty/Component.js +1 -1
  510. package/test/sap/ui/core/qunit/component/testdata/v2empty/manifest.json +1 -1
  511. package/test/sap/ui/core/qunit/component/testdata/v2inline/Component.js +10 -10
  512. package/test/sap/ui/core/qunit/component/testdata/v2missing/Component.js +1 -1
  513. package/test/sap/ui/core/qunit/component/testdata/v2models/empty/Component.js +3 -3
  514. package/test/sap/ui/core/qunit/component/testdata/v2models/empty/manifest.json +1 -1
  515. package/test/sap/ui/core/qunit/component/testdata/v2models/extension/Component.js +4 -4
  516. package/test/sap/ui/core/qunit/component/testdata/v2models/parent/Component.js +12 -12
  517. package/test/sap/ui/core/qunit/component/testdata/v2models/parent/CustomModel.js +2 -2
  518. package/test/sap/ui/core/qunit/component/testdata/v2models/parent/ModelNotDefined.js +2 -2
  519. package/test/sap/ui/core/qunit/component/testdata/v2models/parentValid/Component.js +11 -11
  520. package/test/sap/ui/core/qunit/component/testdata/v2models/ui5Urls/Component.js +2 -2
  521. package/test/sap/ui/core/qunit/component/testdata/v2models/ui5Urls/manifest.json +2 -2
  522. package/test/sap/ui/core/qunit/component/testdata/v2version/Component.js +2 -2
  523. package/test/sap/ui/core/qunit/component/testdata/v2version/manifest.json +2 -2
  524. package/test/sap/ui/core/qunit/component/testdata/v4models/Component.js +3 -3
  525. package/test/sap/ui/core/qunit/component/testdata/v4models/cacheTokens/Component.js +3 -3
  526. package/test/sap/ui/core/qunit/component/testdata/v4models/sapSystem/Component.js +2 -2
  527. package/test/sap/ui/core/qunit/component/testdata/v4models/sapSystem/manifest.json +1 -1
  528. package/test/sap/ui/core/qunit/component/testdata/v4models/unsupportedVersion/Component.js +3 -3
  529. package/test/sap/ui/core/qunit/component/testdata/verticalLayout/Component.js +1 -1
  530. package/test/sap/ui/core/qunit/component/testdata/verticalLayout_legacyAPIs/Component.js +1 -1
  531. package/test/sap/ui/core/qunit/component/testdata/view/Main.controller.js +2 -2
  532. package/test/sap/ui/core/qunit/component/testdata/view/Main.view.xml +1 -1
  533. package/test/sap/ui/core/qunit/component/testdata/view/MainAsync.view.xml +1 -1
  534. package/test/sap/ui/core/qunit/component/testdata/view/MainAsyncWithWrongNesting.view.xml +1 -1
  535. package/test/sap/ui/core/qunit/component/testdata/view/Nested.view.xml +1 -1
  536. package/test/sap/ui/core/qunit/component/testsuite.component.qunit.js +2 -8
  537. package/test/sap/ui/core/qunit/composite/XMLComposite.qunit.js +1 -1
  538. package/test/sap/ui/core/qunit/dnd/DragAndDrop.qunit.js +1 -1
  539. package/test/sap/ui/core/qunit/dnd/DragInfo.qunit.js +1 -1
  540. package/test/sap/ui/core/qunit/dnd/DropInfo.qunit.js +1 -1
  541. package/test/sap/ui/core/qunit/fieldhelp/FieldHelp.qunit.js +184 -51
  542. package/test/sap/ui/core/qunit/fieldhelp/FieldHelpUtil.qunit.js +2 -0
  543. package/test/sap/ui/core/qunit/generic/ControlMemoryLeaks.qunit.js +1 -1
  544. package/test/sap/ui/core/qunit/generic/DuplicateIdCheck.qunit.js +1 -1
  545. package/test/sap/ui/core/qunit/generic/legacy/ControlIterator.qunit.js +1 -1
  546. package/test/sap/ui/core/qunit/generic/legacy/ControlMemoryLeaks.qunit.js +1 -1
  547. package/test/sap/ui/core/qunit/generic/legacy/DuplicateIdCheck.qunit.js +1 -1
  548. package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +188 -61
  549. package/test/sap/ui/core/qunit/isBehindOtherElement.qunit.js +1 -1
  550. package/test/sap/ui/core/qunit/jquery.sap.events.qunit.js +1 -1
  551. package/test/sap/ui/core/qunit/jquery.sap.ui.qunit.js +1 -1
  552. package/test/sap/ui/core/qunit/messages/messagesUsage.qunit.js +1 -1
  553. package/test/sap/ui/core/qunit/mvc/AnyView.qunit.js +1 -1
  554. package/test/sap/ui/core/qunit/mvc/AnyViewAsync.qunit.js +1 -1
  555. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +1 -1
  556. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorAsync_unavoidablyUsingInlineStyle.qunit.js +1 -1
  557. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +1 -1
  558. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +1 -1
  559. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing.qunit.js +1 -1
  560. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing_legacyAPIs.qunit.js +1 -1
  561. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AnyViewAsync_legacyAPIs.qunit.js +1 -1
  562. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AnyView_legacyAPIs.qunit.js +1 -1
  563. package/test/sap/ui/core/qunit/mvc_legacyAPIs/HTMLView_legacyAPIs.qunit.js +1 -1
  564. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLTemplateProcessorRequireXML_legacyAPIs.qunit.js +1 -1
  565. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLView_legacyAPIs.qunit.js +1 -1
  566. package/test/sap/ui/core/qunit/odata/ODataAnnotations.qunit.js +1 -1
  567. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +511 -21
  568. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +382 -3
  569. package/test/sap/ui/core/qunit/odata/v2/V2ODataModel.qunit.js +1 -1
  570. package/test/sap/ui/core/qunit/odata/v2/V2ODataModelB.qunit.js +1 -1
  571. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +28 -4
  572. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +34 -20
  573. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +80 -15
  574. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +90 -6
  575. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +1201 -202
  576. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +34 -0
  577. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +38 -0
  578. package/test/sap/ui/core/qunit/odata/v4/data/annotations_tea_busi.xml +14 -0
  579. package/test/sap/ui/core/qunit/odata/v4/data/metadata_tea_busi_supplier.xml +36 -0
  580. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +319 -38
  581. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +22 -9
  582. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +2 -2
  583. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +53 -10
  584. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +6 -0
  585. package/test/sap/ui/core/qunit/odata/v4/lib/_TreeState.qunit.js +30 -1
  586. package/test/sap/ui/core/qunit/opa/Opa5PageObject.qunit.js +1 -1
  587. package/test/sap/ui/core/qunit/opa/OpaPlugin.qunit.js +1 -1
  588. package/test/sap/ui/core/qunit/opa/RecordReplay.qunit.js +1 -1
  589. package/test/sap/ui/core/qunit/opa/_ControlFinder.qunit.js +1 -1
  590. package/test/sap/ui/core/qunit/opa/actions/Action.qunit.js +1 -1
  591. package/test/sap/ui/core/qunit/opa/actions/EnterText.qunit.js +1 -1
  592. package/test/sap/ui/core/qunit/opa/actions/Press.qunit.js +1 -1
  593. package/test/sap/ui/core/qunit/opa/autowaiter/_cssAnimationWaiter.js +1 -1
  594. package/test/sap/ui/core/qunit/opa/autowaiter/_cssTransitionWaiter.js +1 -1
  595. package/test/sap/ui/core/qunit/opa/autowaiter/_jsAnimationWaiter.js +1 -1
  596. package/test/sap/ui/core/qunit/opa/autowaiter/_navigationContainerWaiter.js +1 -1
  597. package/test/sap/ui/core/qunit/opa/autowaiter/_resourceWaiter.js +1 -1
  598. package/test/sap/ui/core/qunit/opa/fixture/bindingPath.js +1 -1
  599. package/test/sap/ui/core/qunit/opa/matchers/Interactable.qunit.js +1 -1
  600. package/test/sap/ui/core/qunit/opa/matchers/LabelFor.qunit.js +1 -1
  601. package/test/sap/ui/core/qunit/opa/matchers/Sibling.qunit.js +1 -1
  602. package/test/sap/ui/core/qunit/opa/matchers/Visible.qunit.js +1 -1
  603. package/test/sap/ui/core/qunit/opa/matchers/_Busy.qunit.js +1 -1
  604. package/test/sap/ui/core/qunit/opa/matchers/_Editable.qunit.js +1 -1
  605. package/test/sap/ui/core/qunit/opa/matchers/_Enabled.qunit.js +1 -1
  606. package/test/sap/ui/core/qunit/opa/matchers/_Visitor.qunit.js +1 -1
  607. package/test/sap/ui/core/qunit/opa/opa5/actions.qunit.js +1 -1
  608. package/test/sap/ui/core/qunit/opa/opa5/basics.qunit.js +1 -1
  609. package/test/sap/ui/core/qunit/opa/opa5/logging.qunit.js +1 -1
  610. package/test/sap/ui/core/qunit/opa/opa5/matchers.qunit.js +1 -1
  611. package/test/sap/ui/core/qunit/opa/selectors/_BindingPath.js +1 -1
  612. package/test/sap/ui/core/qunit/opa/selectors/_ControlSelectorGenerator.js +1 -1
  613. package/test/sap/ui/core/qunit/opa/selectors/_ControlSelectorValidator.js +1 -1
  614. package/test/sap/ui/core/qunit/opa/selectors/_DropdownItem.js +1 -1
  615. package/test/sap/ui/core/qunit/opa/selectors/_GlobalID.js +1 -1
  616. package/test/sap/ui/core/qunit/opa/selectors/_LabelFor.js +1 -1
  617. package/test/sap/ui/core/qunit/opa/selectors/_Properties.js +1 -1
  618. package/test/sap/ui/core/qunit/opa/selectors/_Selector.js +1 -1
  619. package/test/sap/ui/core/qunit/opa/selectors/_TableRowItem.js +1 -1
  620. package/test/sap/ui/core/qunit/opa/selectors/_ViewID.js +1 -1
  621. package/test/sap/ui/core/qunit/opa/testsuite.opa.qunit.js +448 -426
  622. package/test/sap/ui/core/qunit/performance/trace/FESR.qunit.js +8 -4
  623. package/test/sap/ui/core/qunit/performance/trace/Interaction.qunit.js +1 -1
  624. package/test/sap/ui/core/qunit/routing/Placeholder.qunit.js +1 -1
  625. package/test/sap/ui/core/qunit/routing/PlaceholderOptOut.qunit.js +1 -1
  626. package/test/sap/ui/core/qunit/tmpl/Template.qunit.js +1 -1
  627. package/test/sap/ui/core/qunit/ui5classes/ManagedObject.qunit.js +62 -1
  628. package/test/sap/ui/core/qunit/util/InvisibleMessage.qunit.js +1 -1
  629. package/test/sap/ui/core/qunit/util/LabelEnablement.qunit.js +1 -1
  630. package/test/sap/ui/core/qunit/util/Popup.qunit.js +1 -1
  631. package/test/sap/ui/core/qunit/util/ResponsivePaddingsEnablement.qunit.js +1 -1
  632. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +1 -1
  633. package/test/sap/ui/core/qunit/util/jquery.sap.dom.qunit.js +1 -1
  634. package/test/sap/ui/core/qunit/util/reflection/BaseTreeModifier.qunit.js +3 -3
  635. package/test/sap/ui/core/qunit/util/reflection/JsControlTreeModifier.qunit.js +3 -3
  636. package/test/sap/ui/core/qunit/util/reflection/XmlTreeModifier.qunit.js +3 -3
  637. package/test/sap/ui/core/qunit/util/reflection/testdata/comp/Component.js +10 -0
  638. package/test/sap/ui/core/qunit/util/reflection/testsuite.reflection.qunit.html +14 -0
  639. package/test/sap/ui/core/qunit/util/reflection/testsuite.reflection.qunit.js +30 -0
  640. package/test/sap/ui/core/qunit/util/testsuite.util.qunit.js +3 -56
  641. package/test/sap/ui/core/relnotes/changes-1.126.json +1 -17
  642. package/test/sap/ui/core/relnotes/changes-1.127.json +52 -0
  643. package/test/sap/ui/core/samples/databinding/UnitTable/ui5.yaml +1 -1
  644. package/test/sap/ui/qunit/TestRunner.js +721 -521
  645. package/test/sap/ui/qunit/testrunner.css +123 -20
  646. package/test/sap/ui/qunit/testrunner.html +57 -287
  647. /package/test/sap/ui/core/qunit/{component/testdata/other → util/reflection/testdata/comp}/fragment-withTemplating.fragment.xml +0 -0
@@ -182,7 +182,7 @@ sap.ui.define([
182
182
  * @param {string} [mParameters.updateGroupId]
183
183
  * The group ID that is used for update requests. If no update group ID is specified,
184
184
  * <code>mParameters.groupId</code> is used. Valid update group IDs are
185
- * <code>undefined</code>, '$auto', '$direct' or an application group ID.
185
+ * <code>undefined</code>, '$auto', '$auto.*', '$direct' or an application group ID.
186
186
  * @param {boolean} [mParameters.withCredentials]
187
187
  * Whether the XMLHttpRequest is called with <code>withCredentials</code>, so that user
188
188
  * credentials are included in cross-origin requests by the browser (since 1.120.0)
@@ -234,7 +234,7 @@ sap.ui.define([
234
234
  * @extends sap.ui.model.Model
235
235
  * @public
236
236
  * @since 1.37.0
237
- * @version 1.126.1
237
+ * @version 1.127.0
238
238
  */
239
239
  ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
240
240
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
@@ -397,6 +397,7 @@ sap.ui.define([
397
397
  }
398
398
 
399
399
  this.aAllBindings = [];
400
+ this.oAnnotationChangePromise = null; // @see #_requestAnnotationChanges
400
401
  // The bindings holding keep-alive contexts without a $$getKeepAlive binding
401
402
  this.mKeepAliveBindingsByPath = {};
402
403
  this.mSupportedBindingModes = {
@@ -419,6 +420,22 @@ sap.ui.define([
419
420
  this.mPath2DataRequestedCount = {};
420
421
  }
421
422
 
423
+ /**
424
+ * Requests changes to annotations.
425
+ *
426
+ * @returns {Promise<Array<object>>|sap.ui.base.SyncPromise<undefined>}
427
+ * A promise resolving with an optional array of change objects defining a metamodel path and
428
+ * a value to be set for that path
429
+ *
430
+ * @private
431
+ * @see #setAnnotationChangePromise
432
+ */
433
+ ODataModel.prototype._requestAnnotationChanges = function () {
434
+ this.oAnnotationChangePromise ??= SyncPromise.resolve(); // now it's too late for the setter
435
+
436
+ return this.oAnnotationChangePromise;
437
+ };
438
+
422
439
  /**
423
440
  * Submits the requests associated with this group ID in one batch request.
424
441
  *
@@ -1007,9 +1024,8 @@ sap.ui.define([
1007
1024
  * and the binding is relative or points to metadata, the binding may have an object value;
1008
1025
  * in this case and unless the binding refers to an action advertisement the binding's mode must
1009
1026
  * be {@link sap.ui.model.BindingMode.OneTime}. {@link sap.ui.model.BindingMode.OneWay OneWay}
1010
- * is also supported (@experimental as of version 1.126.0), but client-side updates of the
1011
- * object are not supported and <code>$$patchWithoutSideEffects</code> should be used for the
1012
- * parent entity.
1027
+ * is also supported (@experimental as of version 1.126.0) for complex types and collections
1028
+ * thereof; for entity types, use {@link #bindContext} instead.
1013
1029
  *
1014
1030
  * @param {string} sPath
1015
1031
  * The binding path in the model; must not end with a slash
@@ -2753,18 +2769,25 @@ sap.ui.define([
2753
2769
  };
2754
2770
 
2755
2771
  /**
2756
- * Tells whether an entity's ETag should be actively ignored (If-Match:*) for PATCH requests.
2757
- * Ignored if there is no ETag. Decided at the point in time when the PATCH is actually being
2758
- * sent.
2772
+ * Sets a promise resolving with changes which are applied to all annotations loaded by this
2773
+ * model, either as part of service metadata or from annotation files given via parameter
2774
+ * "annotationURI" (see {@link #constructor}).
2759
2775
  *
2760
- * @param {boolean} bIgnoreETag - Whether an entity's ETag should be actively ignored
2776
+ * @param {Promise<Array<object>>} oAnnotationChangePromise
2777
+ * A promise resolving with an array of change objects defining a metamodel path (pointing to
2778
+ * an annotation) and a value to be set for that annotation
2779
+ * @throws {Error}
2780
+ * In case the promise is set too late or has already been set
2761
2781
  *
2762
2782
  * @private
2763
- * @since 1.110.0
2764
- * @ui5-restricted sap.fe
2783
+ * @since 1.127.0
2784
+ * @ui5-restricted sap.ui.fl
2765
2785
  */
2766
- ODataModel.prototype.setIgnoreETag = function (bIgnoreETag) {
2767
- this.bIgnoreETag = bIgnoreETag;
2786
+ ODataModel.prototype.setAnnotationChangePromise = function (oAnnotationChangePromise) {
2787
+ if (this.oAnnotationChangePromise) {
2788
+ throw Error("Too late");
2789
+ }
2790
+ this.oAnnotationChangePromise = oAnnotationChangePromise;
2768
2791
  };
2769
2792
 
2770
2793
  /**
@@ -2788,6 +2811,21 @@ sap.ui.define([
2788
2811
  this.fnHttpListener = fnListener;
2789
2812
  };
2790
2813
 
2814
+ /**
2815
+ * Tells whether an entity's ETag should be actively ignored (If-Match:*) for PATCH requests.
2816
+ * Ignored if there is no ETag. Decided at the point in time when the PATCH is actually being
2817
+ * sent.
2818
+ *
2819
+ * @param {boolean} bIgnoreETag - Whether an entity's ETag should be actively ignored
2820
+ *
2821
+ * @private
2822
+ * @since 1.110.0
2823
+ * @ui5-restricted sap.fe
2824
+ */
2825
+ ODataModel.prototype.setIgnoreETag = function (bIgnoreETag) {
2826
+ this.bIgnoreETag = bIgnoreETag;
2827
+ };
2828
+
2791
2829
  /**
2792
2830
  * Method not supported
2793
2831
  *
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @mixes sap.ui.model.odata.v4.ODataBinding
43
43
  * @public
44
44
  * @since 1.37.0
45
- * @version 1.126.1
45
+ * @version 1.127.0
46
46
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
47
47
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
48
48
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -349,7 +349,10 @@ sap.ui.define([
349
349
  // Use Promise to become async so that only the latest sync call to checkUpdateInternal
350
350
  // wins
351
351
  vValue = Promise.resolve(vValue);
352
+ } else if (vValue && typeof vValue === "object") {
353
+ vValue = _Helper.publicClone(vValue);
352
354
  }
355
+
353
356
  return SyncPromise.all([vValue, vType]).then(function (aResults) {
354
357
  var oType = aResults[1],
355
358
  vValue0 = aResults[0];
@@ -432,34 +432,31 @@ sap.ui.define([
432
432
  _AggregationCache.prototype.countDescendants = function (oGroupNode, iIndex) {
433
433
  var i;
434
434
 
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;
435
+ const iGroupNodeLevel = oGroupNode["@$ui5.node.level"];
436
+ // Note: iExpandTo may be undefined (when using data aggregation)
437
+ const iExpandTo = this.bUnifiedCache ? Infinity : this.oAggregation.expandTo;
438
+ // Note: "descendants" refers to LimitedDescendantCount and counts descendants within
439
+ // "top pyramid" only!
439
440
  let iDescendants = _Helper.getPrivateAnnotation(oGroupNode, "descendants");
440
- if (iDescendants) { // => this.oAggregation.expandTo > 1
441
- // Note: "descendants" refers to LimitedDescendantCount and counts descendants within
442
- // "top pyramid" only!
443
- iGroupNodeLevel = this.oAggregation.expandTo;
444
- }
445
- if (this.bUnifiedCache) {
446
- iGroupNodeLevel = Infinity;
447
- bCheckRank = true;
448
- }
449
- const aElements = this.aElements;
450
- for (i = iIndex + 1; i < aElements.length; i += 1) {
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"))) {
455
- // Note: level 0 or 1 is used for initial placeholders of 1st level cache!
441
+ for (i = iIndex + 1; i < this.aElements.length; i += 1) {
442
+ const oCandidate = this.aElements[i];
443
+ const iCandidateLevel = oCandidate["@$ui5.node.level"];
444
+ // level 0 means "don't know" for a placeholder, otherwise candidate is grand total
445
+ const bLevelUnknown = iCandidateLevel === 0
446
+ && _Helper.hasPrivateAnnotation(oCandidate, "placeholder");
447
+ if (!bLevelUnknown && iCandidateLevel <= iGroupNodeLevel) {
448
+ break; // not a descendant
449
+ }
450
+ if (iCandidateLevel <= iExpandTo && _Helper.hasPrivateAnnotation(oCandidate, "rank")) {
451
+ // a node w/ rank in oFirstLevel => counted in "descendants"
452
+ // Note: a placeholder w/ level 0 has a rank
456
453
  if (!iDescendants) {
457
- break; // we've reached a sibling of the collapsed node
454
+ break; // not a descendant
458
455
  }
459
456
  iDescendants -= 1;
460
- if (aElements[i]["@$ui5.node.isExpanded"] === false) {
457
+ if (oCandidate["@$ui5.node.isExpanded"] === false) {
461
458
  // skip descendants of manually collapsed node
462
- iDescendants -= _Helper.getPrivateAnnotation(aElements[i], "descendants", 0);
459
+ iDescendants -= _Helper.getPrivateAnnotation(oCandidate, "descendants", 0);
463
460
  }
464
461
  }
465
462
  }
@@ -580,6 +577,7 @@ sap.ui.define([
580
577
  if (this.oAggregation.createInPlace) {
581
578
  return oPromise.then(async () => {
582
579
  _Helper.removeByPath(this.mPostRequests, sTransientPredicate, oEntityData);
580
+ delete oEntityData["@$ui5.context.isTransient"];
583
581
  const [iRank] = await Promise.all([
584
582
  this.requestRank(oEntityData, oGroupLock),
585
583
  this.requestNodeProperty(oEntityData, oGroupLock)
@@ -684,13 +682,16 @@ sap.ui.define([
684
682
  };
685
683
 
686
684
  /**
687
- * Expands the given group node.
685
+ * Expands the given group node by the given number of levels.
688
686
  *
689
687
  * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
690
688
  * An unlocked lock for the group to associate the requests with
691
689
  * @param {object|string} vGroupNodeOrPath
692
690
  * The group node or its path relative to the cache; a group node instance (instead of a path)
693
691
  * MUST only be given in case of "expanding" continued
692
+ * @param {number} iLevels
693
+ * The number of levels to expand, <code>iLevels >= Number.MAX_SAFE_INTEGER</code> can be
694
+ * used to expand all levels
694
695
  * @param {function} [fnDataRequested]
695
696
  * The function is called just before the back-end request is sent.
696
697
  * If no back-end request is needed, the function is not called.
@@ -702,7 +703,8 @@ sap.ui.define([
702
703
  * @public
703
704
  * @see #collapse
704
705
  */
705
- _AggregationCache.prototype.expand = function (oGroupLock, vGroupNodeOrPath, fnDataRequested) {
706
+ _AggregationCache.prototype.expand = function (oGroupLock, vGroupNodeOrPath, iLevels,
707
+ fnDataRequested) {
706
708
  var iCount,
707
709
  oGroupNode = typeof vGroupNodeOrPath === "string"
708
710
  ? this.getValue(vGroupNodeOrPath)
@@ -714,7 +716,7 @@ sap.ui.define([
714
716
  // Note: this also prevents a 2nd expand of the same node
715
717
  _Helper.updateAll(this.mChangeListeners, vGroupNodeOrPath, oGroupNode,
716
718
  _AggregationHelper.getOrCreateExpandedObject(this.oAggregation, oGroupNode));
717
- this.oTreeState.expand(oGroupNode);
719
+ this.oTreeState.expand(oGroupNode, iLevels);
718
720
  } // else: no update needed!
719
721
 
720
722
  if (aSpliced) {
@@ -743,7 +745,7 @@ sap.ui.define([
743
745
  }
744
746
  }
745
747
  if (!_Helper.hasPrivateAnnotation(oElement, "placeholder")) {
746
- if (aSpliced.$stale) {
748
+ if (aSpliced.$stale && !oElement["@$ui5.context.isSelected"]) {
747
749
  that.turnIntoPlaceholder(oElement, sPredicate);
748
750
  } else {
749
751
  that.aElements.$byPredicate[sPredicate] = oElement;
@@ -761,7 +763,7 @@ sap.ui.define([
761
763
  });
762
764
  return SyncPromise.resolve(iCount);
763
765
  }
764
- if (this.bUnifiedCache) {
766
+ if (this.bUnifiedCache || iLevels > 1) {
765
767
  return SyncPromise.resolve(-1); // refresh needed
766
768
  }
767
769
 
@@ -997,6 +999,28 @@ sap.ui.define([
997
999
  && _Helper.getPrivateAnnotation(oNode, "parent") === oCache);
998
1000
  };
999
1001
 
1002
+ /**
1003
+ * Returns the index in <code>this.aElements</code> of the first in-place child of the given
1004
+ * parent node, or the first in-place root if no parent is given.
1005
+ *
1006
+ * @param {number} iParentIndex
1007
+ * The parent node's index, or -1 if looking for a root node
1008
+ * @returns {number}
1009
+ * The array index, or -1 if there is no such first in-place node
1010
+ *
1011
+ * @public
1012
+ */
1013
+ _AggregationCache.prototype.get1stInPlaceChildIndex = function (iParentIndex) {
1014
+ const iLevel = iParentIndex >= 0
1015
+ ? this.aElements[iParentIndex]["@$ui5.node.level"] + 1
1016
+ : 1;
1017
+
1018
+ return this.aElements.findIndex(
1019
+ (oElement, iIndex) => iIndex > iParentIndex
1020
+ && oElement["@$ui5.node.level"] === iLevel
1021
+ && oElement["@$ui5.context.isTransient"] === undefined);
1022
+ };
1023
+
1000
1024
  /**
1001
1025
  * Returns an array containing all current elements of this aggregation cache's flat list; the
1002
1026
  * array is annotated with the collection's $count. If there are placeholders, the corresponding
@@ -1131,7 +1155,7 @@ sap.ui.define([
1131
1155
 
1132
1156
  /**
1133
1157
  * Returns the index of the given node's sibling, either the next one (via offset +1) or the
1134
- * previous one (via offset -1).
1158
+ * previous one (via offset -1), skipping out-of-place nodes.
1135
1159
  *
1136
1160
  * @param {number} iIndex - The index of a node
1137
1161
  * @param {number} iOffset - An offset, either -1 or +1
@@ -1169,8 +1193,16 @@ sap.ui.define([
1169
1193
 
1170
1194
  if (iSiblingRank >= 0) {
1171
1195
  const iSiblingIndex = this.findIndex(iSiblingRank, oCache);
1196
+ if (iSiblingIndex < 0) {
1197
+ return -1; // no such sibling
1198
+ }
1199
+ const oSibling = this.aElements[iSiblingIndex];
1172
1200
  if (bSingleLevelCache && bAllowPlaceholder
1173
- || !_Helper.hasPrivateAnnotation(this.aElements[iSiblingIndex], "placeholder")) {
1201
+ || !_Helper.hasPrivateAnnotation(oSibling, "placeholder")) {
1202
+ if (oSibling["@$ui5.context.isTransient"] !== undefined) {
1203
+ // sibling is out of place, skip it!
1204
+ return this.getSiblingIndex(iSiblingIndex, iOffset, bAllowPlaceholder);
1205
+ }
1174
1206
  return iSiblingIndex; // sibling found
1175
1207
  }
1176
1208
  } // else: iSiblingRank === undefined => return undefined;
@@ -1345,7 +1377,7 @@ sap.ui.define([
1345
1377
  mPredicates[sPredicate] = true;
1346
1378
  });
1347
1379
 
1348
- return this.aElements.filter(function (oElement) {
1380
+ return Object.values(this.aElements.$byPredicate).filter(function (oElement) {
1349
1381
  var sPredicate = _Helper.getPrivateAnnotation(oElement, "predicate");
1350
1382
 
1351
1383
  if (!sPredicate) {
@@ -1354,10 +1386,13 @@ sap.ui.define([
1354
1386
 
1355
1387
  if (mPredicates[sPredicate]) {
1356
1388
  _AggregationHelper.markSplicedStale(oElement);
1389
+ mPredicates[sPredicate] = false;
1357
1390
  return true; // keep and request
1358
1391
  }
1359
1392
 
1360
- that.turnIntoPlaceholder(oElement, sPredicate);
1393
+ if (!(sPredicate in mPredicates)) {
1394
+ that.turnIntoPlaceholder(oElement, sPredicate);
1395
+ }
1361
1396
  });
1362
1397
  };
1363
1398
 
@@ -1422,6 +1457,7 @@ sap.ui.define([
1422
1457
  if (this.oTreeState.isOutOfPlace(sChildPredicate)) {
1423
1458
  // remove OOP for all descendants (incl. itself) of a moved OOP node
1424
1459
  this.oTreeState.deleteOutOfPlace(sChildPredicate);
1460
+ delete oChildNode["@$ui5.context.isTransient"];
1425
1461
  bRefreshNeeded = true;
1426
1462
  }
1427
1463
 
@@ -1086,14 +1086,17 @@ sap.ui.define([
1086
1086
  oNodeFilters.add(sNodeFilter);
1087
1087
  });
1088
1088
  });
1089
+ const aSelect = [
1090
+ oAggregation.$DistanceFromRoot,
1091
+ oAggregation.$DrillState,
1092
+ oAggregation.$LimitedRank
1093
+ ];
1094
+ if (oAggregation.$LimitedDescendantCount) {
1095
+ aSelect.push(oAggregation.$LimitedDescendantCount);
1096
+ }
1089
1097
  mQueryOptions = Object.assign({}, mQueryOptions, {
1090
1098
  $filter : [...oNodeFilters].sort().join(" or "),
1091
- $select : [
1092
- oAggregation.$DistanceFromRoot,
1093
- oAggregation.$DrillState,
1094
- oAggregation.$LimitedDescendantCount,
1095
- oAggregation.$LimitedRank
1096
- ],
1099
+ $select : aSelect,
1097
1100
  $top : oNodeFilters.size
1098
1101
  });
1099
1102
  delete mQueryOptions.$count;
@@ -122,7 +122,7 @@ sap.ui.define([
122
122
  */
123
123
  _Cache.prototype._delete = function (oGroupLock, sEditUrl, sPath, oETagEntity, fnCallback) {
124
124
  var aSegments = sPath.split("/"),
125
- // either a :1 nav.prop, the index as string, or a key-predicate (kept-alive and hidden)
125
+ // either a :1 nav.prop, the index as string, or a key-predicate (kept alive and hidden)
126
126
  sDeleteProperty = aSegments.pop(),
127
127
  sParentPath = aSegments.join("/"),
128
128
  that = this;
@@ -1418,7 +1418,7 @@ sap.ui.define([
1418
1418
  * The key predicate of the entity; only evaluated if <code>iIndex</code> is undefined or
1419
1419
  * negative
1420
1420
  * @param {boolean} [bKeepAlive]
1421
- * Whether the entity is kept-alive
1421
+ * Whether the entity is kept alive
1422
1422
  * @param {boolean} [bWithMessages]
1423
1423
  * Whether the "@com.sap.vocabularies.Common.v1.Messages" path is treated specially, supported
1424
1424
  * only for <code>sPath === ""</code>
@@ -1494,7 +1494,7 @@ sap.ui.define([
1494
1494
  * Refreshes a single entity within a collection cache and removes it from the cache if the
1495
1495
  * filter does not match anymore.
1496
1496
  * Since 1.84.0, only removes entities that do not match the filter from the cache in case they
1497
- * are not kept-alive. If the entity is kept-alive, checks also the existence and removes it
1497
+ * are not kept alive. If the entity is kept alive, checks also the existence and removes it
1498
1498
  * from the cache if it is no longer exists. For a kept-alive entity late properties are taken
1499
1499
  * into account.
1500
1500
  *
@@ -1507,14 +1507,14 @@ sap.ui.define([
1507
1507
  * @param {string} [sPredicate]
1508
1508
  * The key predicate of the entity; only evaluated if the <code>iIndex === undefined</code>
1509
1509
  * @param {boolean} [bKeepAlive]
1510
- * Whether the entity is kept-alive
1510
+ * Whether the entity is kept alive
1511
1511
  * @param {function} [fnDataRequested]
1512
1512
  * The function is called just before the back-end request is sent.
1513
1513
  * If no back-end request is needed, the function is not called.
1514
1514
  * @param {function} [fnOnRemove]
1515
1515
  * A function which is called after the entity does not match the binding's filter anymore,
1516
1516
  * see {@link sap.ui.model.odata.v4.ODataListBinding#filter}. Since 1.84.0, if the entity is
1517
- * kept-alive and still exists, the function is called with <code>true</code>, otherwise with
1517
+ * kept alive and still exists, the function is called with <code>true</code>, otherwise with
1518
1518
  * <code>false</code>
1519
1519
  * @returns {sap.ui.base.SyncPromise}
1520
1520
  * A promise which resolves with <code>undefined</code> when the entity is updated in
@@ -2099,7 +2099,7 @@ sap.ui.define([
2099
2099
  * The function is called just before a back-end request is sent for the first time.
2100
2100
  * If no back-end request is needed, the function is not called.
2101
2101
  * @param {function} fnIsKeepAlive
2102
- * A function to tell whether the entity is kept-alive
2102
+ * A function to tell whether the entity is kept alive
2103
2103
  * @returns {sap.ui.base.SyncPromise}
2104
2104
  * A promise for the PATCH request (resolves with <code>undefined</code>); rejected in case of
2105
2105
  * cancellation or if no <code>fnErrorCallback</code> is given
@@ -3543,7 +3543,7 @@ sap.ui.define([
3543
3543
  mQueryOptions.$filter = aElements.map(function (oElement) {
3544
3544
  // all elements have a key predicate, so we will get a key filter
3545
3545
  return _Helper.getKeyFilter(oElement, that.sMetaPath, mTypeForMetaPath);
3546
- }).join(" or ");
3546
+ }).sort().join(" or ");
3547
3547
  if (aElements.length > 1) { // avoid small default page size for server-driven paging
3548
3548
  mQueryOptions.$top = aElements.length;
3549
3549
  }
@@ -1890,7 +1890,7 @@ sap.ui.define([
1890
1890
  * properties of the related entity type to the "$select" query options. Although this is
1891
1891
  * not needed in order to obtain the correct nested entity it enables
1892
1892
  * {@link sap.ui.model.odata.v4.Context#requestSideEffects}) to check the consistency of the
1893
- * key predicates.
1893
+ * key predicate.
1894
1894
  *
1895
1895
  * @param {object} [mCacheQueryOptions]
1896
1896
  * A map of query options as returned by
@@ -2358,7 +2358,7 @@ sap.ui.define([
2358
2358
 
2359
2359
  /**
2360
2360
  * Returns a clone of the given value where all occurrences of the private namespace
2361
- * object have been deleted.
2361
+ * object have been deleted. Also, properties starting with "$" are dropped from arrays.
2362
2362
  *
2363
2363
  * @param {any} vValue
2364
2364
  * Any value, including <code>undefined</code>
@@ -2373,6 +2373,9 @@ sap.ui.define([
2373
2373
  * @see sap.ui.model.odata.v4.lib._Helper.clone
2374
2374
  */
2375
2375
  publicClone : function (vValue, bRemoveClientAnnotations, bAsString) {
2376
+ if (Array.isArray(vValue)) {
2377
+ vValue = vValue.slice(); // drop "$*" properties
2378
+ }
2376
2379
  return _Helper.clone(vValue, function (sKey, vValue0) {
2377
2380
  if (bRemoveClientAnnotations ? !sKey.startsWith("@$ui5.") : sKey !== "@$ui5._") {
2378
2381
  return vValue0;
@@ -2688,7 +2691,7 @@ sap.ui.define([
2688
2691
  * taken into account. Fires change events for all changed properties. The function
2689
2692
  * recursively handles modified, added or removed structural properties (or single-valued
2690
2693
  * navigation properties) and fires change events for all modified/added/removed primitive
2691
- * properties therein. It also fires for each collection encounterd, no matter if changed
2694
+ * properties therein. It also fires for each collection encountered, no matter if changed
2692
2695
  * or not.
2693
2696
  *
2694
2697
  * Restrictions:
@@ -2721,10 +2724,10 @@ sap.ui.define([
2721
2724
  oTarget[sProperty] = vSourceProperty;
2722
2725
  _Helper.fireChange(mChangeListeners, sPropertyPath, vSourceProperty);
2723
2726
  } else if (vSourceProperty && typeof vSourceProperty === "object") {
2724
- oTarget[sProperty]
2727
+ vTargetProperty = oTarget[sProperty]
2725
2728
  = _Helper.updateAll(mChangeListeners, sPropertyPath, vTargetProperty || {},
2726
2729
  vSourceProperty);
2727
- _Helper.fireChange(mChangeListeners, sPropertyPath, vSourceProperty);
2730
+ _Helper.fireChange(mChangeListeners, sPropertyPath, vTargetProperty);
2728
2731
  } else if (vTargetProperty !== vSourceProperty) {
2729
2732
  oTarget[sProperty] = vSourceProperty;
2730
2733
  if (vTargetProperty && typeof vTargetProperty === "object") {
@@ -2743,14 +2746,15 @@ sap.ui.define([
2743
2746
  * are updated. Fires change events for all changed properties. The function recursively
2744
2747
  * handles modified, added or removed structural properties and fires change events for all
2745
2748
  * modified/added/removed primitive properties therein. Also fires change events for new
2746
- * advertised actions.
2749
+ * advertised actions. It also fires for each collection encountered, no matter if changed
2750
+ * or not.
2747
2751
  *
2748
2752
  * Restrictions:
2749
2753
  * - oOldObject and oNewObject are expected to have the same structure: when there is an
2750
2754
  * object at a given path in either of them, the other one must have an object or
2751
2755
  * <code>null</code>.
2752
- * - no change events for collection-valued properties
2753
- * - does not update collection-valued navigation properties
2756
+ * - does not update collection-valued navigation properties properly (ignores both key
2757
+ * predicates and $count)
2754
2758
  *
2755
2759
  * @param {object} mChangeListeners A map of change listeners by path
2756
2760
  * @param {string} sPath The path of the old object in mChangeListeners
@@ -2772,14 +2776,15 @@ sap.ui.define([
2772
2776
 
2773
2777
  if (sProperty in oNewObject || sProperty[0] === "#") {
2774
2778
  if (Array.isArray(vNewProperty)) {
2775
- // copy complete collection; no change events as long as collection-valued
2776
- // properties are not supported
2779
+ // copy complete collection
2777
2780
  oOldObject[sProperty] = vNewProperty;
2781
+ _Helper.fireChange(mChangeListeners, sPropertyPath, vNewProperty);
2778
2782
  } else if (vNewProperty && typeof vNewProperty === "object") {
2779
2783
  if (vOldProperty) {
2780
2784
  // a structural property was modified
2781
2785
  _Helper.updateExisting(mChangeListeners, sPropertyPath, vOldProperty,
2782
2786
  vNewProperty);
2787
+ _Helper.fireChange(mChangeListeners, sPropertyPath, vOldProperty);
2783
2788
  } else {
2784
2789
  // a structural property was added; copy the whole structure because we
2785
2790
  // cannot tell which primitive properties are required therein
@@ -2948,7 +2953,8 @@ sap.ui.define([
2948
2953
  * object at a given path in either of them, the other one must have an object or
2949
2954
  * <code>null</code>.
2950
2955
  * - "*" in aSelect does not work correctly if oNewValue contains navigation properties
2951
- * - does not update navigation properties (ignores both key predicates and $count)
2956
+ * - does not update collection-valued navigation properties properly (ignores both key
2957
+ * predicates and $count)
2952
2958
  *
2953
2959
  * @param {object} mChangeListeners
2954
2960
  * A map of change listeners by path
@@ -822,9 +822,17 @@ sap.ui.define([
822
822
  break;
823
823
  case "$select":
824
824
  if (Array.isArray(vValue)) {
825
- vValue = bSortExpandSelect
826
- ? vValue.slice().sort().join(",") // Note: Array#sort is "in place"
827
- : vValue.join(",");
825
+ if (bSortExpandSelect) {
826
+ vValue = vValue.slice().sort(); // Note: Array#sort is "in place"
827
+ for (let i = 1; i < vValue.length;) {
828
+ if (_Helper.hasPathPrefix(vValue[i], vValue[i - 1])) {
829
+ vValue.splice(i, 1);
830
+ } else {
831
+ i += 1;
832
+ }
833
+ }
834
+ }
835
+ vValue = vValue.join(",");
828
836
  }
829
837
  break;
830
838
  default:
@@ -57,7 +57,7 @@ sap.ui.define([
57
57
 
58
58
  const sPredicate = _Helper.getPrivateAnnotation(oNode, "predicate");
59
59
  const oExpandLevel = this.mPredicate2ExpandLevels[sPredicate];
60
- if (oExpandLevel && oExpandLevel.Levels) {
60
+ if (oExpandLevel && oExpandLevel.Levels !== 0) {
61
61
  delete this.mPredicate2ExpandLevels[sPredicate];
62
62
  } else {
63
63
  // must have NodeId as the node may be missing when calling #getExpandLevels
@@ -117,13 +117,16 @@ sap.ui.define([
117
117
  }
118
118
 
119
119
  /**
120
- * Expand a node.
120
+ * Expand a node by the given number of levels.
121
121
  *
122
122
  * @param {object} oNode - The node
123
+ * @param {number} [iLevels=1]
124
+ * The number of levels to expand, <code>iLevels >= Number.MAX_SAFE_INTEGER</code> can be
125
+ * used to expand all levels
123
126
  *
124
127
  * @public
125
128
  */
126
- expand(oNode) {
129
+ expand(oNode, iLevels = 1) {
127
130
  if (!this.sNodeProperty) {
128
131
  return;
129
132
  }
@@ -135,7 +138,10 @@ sap.ui.define([
135
138
  } else {
136
139
  // must have NodeId as the node may be missing when calling #getExpandLevels
137
140
  const sNodeId = _Helper.drillDown(oNode, this.sNodeProperty);
138
- this.mPredicate2ExpandLevels[sPredicate] = {NodeID : sNodeId, Levels : 1};
141
+ if (iLevels >= Number.MAX_SAFE_INTEGER) {
142
+ iLevels = null;
143
+ }
144
+ this.mPredicate2ExpandLevels[sPredicate] = {NodeID : sNodeId, Levels : iLevels};
139
145
  }
140
146
  }
141
147
 
@@ -227,7 +227,7 @@ sap.ui.define([
227
227
  *
228
228
  * @extends sap.ui.model.Model
229
229
  * @public
230
- * @version 1.126.1
230
+ * @version 1.127.0
231
231
  */
232
232
  var ResourceModel = Model.extend("sap.ui.model.resource.ResourceModel", /** @lends sap.ui.model.resource.ResourceModel.prototype */ {
233
233
 
@@ -19,7 +19,7 @@ sap.ui.define(["sap/ui/core/Lib", 'sap/ui/model/SimpleType', 'sap/ui/model/Forma
19
19
  * @extends sap.ui.model.SimpleType
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.126.1
22
+ * @version 1.127.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions]
@@ -34,7 +34,7 @@ sap.ui.define([
34
34
  * @extends sap.ui.model.CompositeType
35
35
  *
36
36
  * @author SAP SE
37
- * @version 1.126.1
37
+ * @version 1.127.0
38
38
  *
39
39
  * @public
40
40
  * @param {object} [oFormatOptions]
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  * @extends sap.ui.model.SimpleType
28
28
  *
29
29
  * @author SAP SE
30
- * @version 1.126.1
30
+ * @version 1.127.0
31
31
  *
32
32
  * @public
33
33
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateInstance DateFormat}.
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @extends sap.ui.model.CompositeType
26
26
  *
27
27
  * @author SAP SE
28
- * @version 1.126.1
28
+ * @version 1.127.0
29
29
  *
30
30
  * @alias sap.ui.model.type.DateInterval
31
31
  * @param {object} [oFormatOptions]
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.126.1
22
+ * @version 1.127.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./DateInterval', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.DateInterval
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.126.1
22
+ * @version 1.127.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.