@openui5/sap.ui.core 1.121.1 → 1.122.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 (604) hide show
  1. package/.eslintrc.json +22 -5
  2. package/THIRDPARTY.txt +1 -1
  3. package/package.json +1 -1
  4. package/src/jquery.sap.global.js +1 -1
  5. package/src/jquery.sap.properties.js +1 -1
  6. package/src/jquery.sap.resources.js +1 -1
  7. package/src/jquery.sap.script.js +1 -1
  8. package/src/jquery.sap.sjax.js +6 -5
  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/config.js +1 -1
  13. package/src/sap/base/i18n/Formatting.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/Deferred.js +4 -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 +3 -3
  59. package/src/sap/ui/Global.js +4 -4
  60. package/src/sap/ui/base/Event.js +1 -1
  61. package/src/sap/ui/base/EventProvider.js +11 -5
  62. package/src/sap/ui/base/Exception.js +1 -1
  63. package/src/sap/ui/base/Interface.js +1 -1
  64. package/src/sap/ui/base/ManagedObject.js +22 -3
  65. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  66. package/src/sap/ui/base/Metadata.js +1 -1
  67. package/src/sap/ui/base/Object.js +1 -1
  68. package/src/sap/ui/base/ObjectPool.js +1 -1
  69. package/src/sap/ui/core/.library +1 -1
  70. package/src/sap/ui/core/BusyIndicator.js +1 -1
  71. package/src/sap/ui/core/Component.js +33 -5
  72. package/src/sap/ui/core/ComponentContainer.js +1 -1
  73. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  74. package/src/sap/ui/core/ComponentSupport.js +1 -1
  75. package/src/sap/ui/core/Configuration.js +1 -1
  76. package/src/sap/ui/core/Control.js +19 -3
  77. package/src/sap/ui/core/Core.js +1 -1
  78. package/src/sap/ui/core/CustomData.js +1 -1
  79. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  80. package/src/sap/ui/core/Element.js +28 -3
  81. package/src/sap/ui/core/ElementMetadata.js +1 -1
  82. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  83. package/src/sap/ui/core/EventBus.js +1 -1
  84. package/src/sap/ui/core/Fragment.js +1 -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 +1 -1
  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 +1 -1
  95. package/src/sap/ui/core/LayoutData.js +1 -1
  96. package/src/sap/ui/core/ListItem.js +1 -1
  97. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  98. package/src/sap/ui/core/Locale.js +1 -1
  99. package/src/sap/ui/core/LocaleData.js +14 -6
  100. package/src/sap/ui/core/Manifest.js +1 -1
  101. package/src/sap/ui/core/Message.js +1 -1
  102. package/src/sap/ui/core/RenderManager.js +1 -1
  103. package/src/sap/ui/core/Renderer.js +1 -1
  104. package/src/sap/ui/core/ResizeHandler.js +1 -1
  105. package/src/sap/ui/core/ScrollBar.js +1 -1
  106. package/src/sap/ui/core/SeparatorItem.js +1 -1
  107. package/src/sap/ui/core/Title.js +1 -1
  108. package/src/sap/ui/core/TooltipBase.js +1 -1
  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/date/UI5Date.js +1 -1
  117. package/src/sap/ui/core/date/UniversalDateUtils.js +52 -52
  118. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  119. package/src/sap/ui/core/delegate/ScrollEnablement.js +4 -4
  120. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  121. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  122. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  123. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  124. package/src/sap/ui/core/format/DateFormat.js +4 -4
  125. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  126. package/src/sap/ui/core/format/NumberFormat.js +32 -13
  127. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  128. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  129. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  130. package/src/sap/ui/core/library.js +3 -3
  131. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  132. package/src/sap/ui/core/message/Message.js +1 -1
  133. package/src/sap/ui/core/message/MessageManager.js +1 -1
  134. package/src/sap/ui/core/message/MessageParser.js +1 -1
  135. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  136. package/src/sap/ui/core/messagebundle_ar.properties +1 -1
  137. package/src/sap/ui/core/messagebundle_mk.properties +1 -1
  138. package/src/sap/ui/core/mvc/Controller.js +42 -7
  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 +1 -1
  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/routing/Router.js +1 -1
  151. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  152. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  153. package/src/sap/ui/core/service/Service.js +1 -1
  154. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  155. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  156. package/src/sap/ui/core/support/Plugin.js +1 -1
  157. package/src/sap/ui/core/support/Support.js +1 -1
  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 +239 -8
  167. package/src/sap/ui/core/themes/base/global.less +20 -0
  168. package/src/sap/ui/core/themes/sap_hcb/global.less +20 -0
  169. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  170. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  171. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  172. package/src/sap/ui/core/tmpl/Template.js +1 -1
  173. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  174. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  175. package/src/sap/ui/core/util/Export.js +1 -1
  176. package/src/sap/ui/core/util/ExportCell.js +1 -1
  177. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  178. package/src/sap/ui/core/util/ExportRow.js +1 -1
  179. package/src/sap/ui/core/util/ExportType.js +1 -1
  180. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  181. package/src/sap/ui/core/util/File.js +1 -1
  182. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  183. package/src/sap/ui/core/util/MockServer.js +1 -1
  184. package/src/sap/ui/core/util/PasteHelper.js +2 -2
  185. package/src/sap/ui/core/util/ShortcutHelper.js +6 -0
  186. package/src/sap/ui/core/util/XMLPreprocessor.js +54 -30
  187. package/src/sap/ui/core/util/_LocalizationHelper.js +2 -1
  188. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +0 -29
  189. package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +0 -26
  190. package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +0 -56
  191. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  192. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  193. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  194. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  195. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  196. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  197. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  198. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  199. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  200. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  201. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  202. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  203. package/src/sap/ui/debug/ControlTree.js +1 -1
  204. package/src/sap/ui/debug/DebugEnv.js +1 -1
  205. package/src/sap/ui/debug/PropertyList.js +1 -1
  206. package/src/sap/ui/model/ClientListBinding.js +13 -6
  207. package/src/sap/ui/model/ClientModel.js +1 -1
  208. package/src/sap/ui/model/ClientTreeBinding.js +16 -7
  209. package/src/sap/ui/model/CompositeBinding.js +11 -4
  210. package/src/sap/ui/model/CompositeDataState.js +1 -1
  211. package/src/sap/ui/model/CompositeType.js +17 -3
  212. package/src/sap/ui/model/DataState.js +1 -1
  213. package/src/sap/ui/model/ListBinding.js +14 -11
  214. package/src/sap/ui/model/MetaModel.js +1 -1
  215. package/src/sap/ui/model/Model.js +11 -9
  216. package/src/sap/ui/model/PropertyBinding.js +21 -4
  217. package/src/sap/ui/model/SelectionModel.js +1 -1
  218. package/src/sap/ui/model/SimpleType.js +1 -1
  219. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  220. package/src/sap/ui/model/TreeBinding.js +14 -7
  221. package/src/sap/ui/model/Type.js +1 -1
  222. package/src/sap/ui/model/analytics/AnalyticalBinding.js +12 -8
  223. package/src/sap/ui/model/analytics/BatchResponseCollector.js +1 -1
  224. package/src/sap/ui/model/analytics/odata4analytics.js +66 -52
  225. package/src/sap/ui/model/controlhelper/TreeBindingProxy.js +1 -4
  226. package/src/sap/ui/model/json/JSONListBinding.js +5 -2
  227. package/src/sap/ui/model/json/JSONModel.js +7 -5
  228. package/src/sap/ui/model/json/JSONTreeBinding.js +5 -2
  229. package/src/sap/ui/model/message/MessageListBinding.js +5 -2
  230. package/src/sap/ui/model/message/MessageModel.js +1 -1
  231. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  232. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  233. package/src/sap/ui/model/odata/ODataMetaModel.js +8 -9
  234. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  235. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  236. package/src/sap/ui/model/odata/ODataUtils.js +1 -1
  237. package/src/sap/ui/model/odata/type/Boolean.js +2 -4
  238. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  239. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  240. package/src/sap/ui/model/odata/type/Date.js +1 -1
  241. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  242. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  243. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  244. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  245. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  246. package/src/sap/ui/model/odata/type/Double.js +1 -1
  247. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  248. package/src/sap/ui/model/odata/type/Int.js +1 -1
  249. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  250. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  251. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  252. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  253. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  254. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  255. package/src/sap/ui/model/odata/type/Single.js +1 -1
  256. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  257. package/src/sap/ui/model/odata/type/String.js +1 -1
  258. package/src/sap/ui/model/odata/type/Time.js +1 -1
  259. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  260. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  261. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  262. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +2 -2
  263. package/src/sap/ui/model/odata/v2/ODataListBinding.js +14 -8
  264. package/src/sap/ui/model/odata/v2/ODataModel.js +25 -28
  265. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +15 -12
  266. package/src/sap/ui/model/odata/v4/Context.js +111 -30
  267. package/src/sap/ui/model/odata/v4/ODataBinding.js +9 -5
  268. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +1 -1
  269. package/src/sap/ui/model/odata/v4/ODataListBinding.js +14 -9
  270. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +4 -3
  271. package/src/sap/ui/model/odata/v4/ODataModel.js +27 -2
  272. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +19 -7
  273. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +240 -41
  274. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +88 -0
  275. package/src/sap/ui/model/odata/v4/lib/_Cache.js +13 -4
  276. package/src/sap/ui/model/odata/v4/lib/_Helper.js +15 -0
  277. package/src/sap/ui/model/odata/v4/lib/_TreeState.js +77 -15
  278. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  279. package/src/sap/ui/model/type/Boolean.js +1 -1
  280. package/src/sap/ui/model/type/Currency.js +1 -1
  281. package/src/sap/ui/model/type/Date.js +1 -1
  282. package/src/sap/ui/model/type/DateInterval.js +1 -1
  283. package/src/sap/ui/model/type/DateTime.js +1 -1
  284. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  285. package/src/sap/ui/model/type/FileSize.js +1 -1
  286. package/src/sap/ui/model/type/Float.js +1 -1
  287. package/src/sap/ui/model/type/Integer.js +1 -1
  288. package/src/sap/ui/model/type/String.js +1 -1
  289. package/src/sap/ui/model/type/Time.js +1 -1
  290. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  291. package/src/sap/ui/model/type/Unit.js +38 -1
  292. package/src/sap/ui/model/xml/XMLListBinding.js +5 -2
  293. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  294. package/src/sap/ui/model/xml/XMLTreeBinding.js +5 -1
  295. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  296. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  297. package/src/sap/ui/test/RecordReplay.js +1 -0
  298. package/src/sap/ui/test/autowaiter/_autoWaiterAsync.js +8 -1
  299. package/src/sap/ui/test/generic/TestBase.js +1 -1
  300. package/src/sap/ui/test/gherkin/opa5TestHarness.js +0 -6
  301. package/src/sap/ui/test/gherkin/qUnitTestHarness.js +0 -6
  302. package/src/sap/ui/test/qunitPause.js +5 -1
  303. package/src/sap/ui/util/Storage.js +1 -1
  304. package/src/sap/ui/util/_enforceNoReturnValue.js +26 -0
  305. package/src/ui5loader.js +25 -2
  306. package/test/sap/ui/core/HyphenationPlayground.html +6 -292
  307. package/test/sap/ui/core/HyphenationPlayground.js +313 -0
  308. package/test/sap/ui/core/demokit/docuindex.json +1 -1
  309. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/ui5.yaml +1 -1
  310. package/test/sap/ui/core/demokit/sample/OpaAutoWaitParams/OpaAutoWaitParams.html +1 -1
  311. package/test/sap/ui/core/demokit/sample/OpaAutoWaitParams/applicationUnderTest/index.html +1 -2
  312. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/README.js +31 -23
  313. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/iStartMyAppInAFrame.js +103 -94
  314. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithOPA5/GherkinTestRunner.html +3 -0
  315. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithOPA5/GherkinTestRunner.js +1 -5
  316. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithPageObjects/GherkinTestRunner.html +3 -0
  317. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithPageObjects/GherkinTestRunner.js +1 -5
  318. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithQUnit/GherkinTestRunner.html +3 -0
  319. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithQUnit/GherkinTestRunner.js +1 -5
  320. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithQUnit/Steps.js +5 -5
  321. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithUIComponent/GherkinTestRunner.html +3 -0
  322. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithUIComponent/GherkinTestRunner.js +1 -5
  323. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +1 -1
  324. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +1 -1
  325. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +1 -1
  326. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +1 -1
  327. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +16 -9
  328. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.view.xml +9 -0
  329. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/SandboxModel.js +11 -0
  330. package/test/sap/ui/core/demokit/sample/odata/v4/Products/data/UnitsOfMeasure.json +1 -1
  331. package/test/sap/ui/core/demokit/tutorial/databinding/01/manifest.json +2 -1
  332. package/test/sap/ui/core/demokit/tutorial/databinding/01/package.json +4 -1
  333. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  334. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/Component.js +12 -0
  335. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/index.html +8 -7
  336. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/manifest.json +28 -1
  337. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/view/App.view.xml +5 -0
  338. package/test/sap/ui/core/demokit/tutorial/databinding/02/manifest.json +3 -1
  339. package/test/sap/ui/core/demokit/tutorial/databinding/02/package.json +4 -1
  340. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  341. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/Component.js +12 -0
  342. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/index.html +8 -7
  343. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/manifest.json +34 -1
  344. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/model/data.json +3 -0
  345. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/view/App.view.xml +5 -0
  346. package/test/sap/ui/core/demokit/tutorial/databinding/03/manifest.json +3 -1
  347. package/test/sap/ui/core/demokit/tutorial/databinding/03/package.json +4 -1
  348. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  349. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/Component.js +12 -0
  350. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/index.html +8 -7
  351. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/manifest.json +34 -1
  352. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/model/data.json +3 -0
  353. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/view/App.view.xml +5 -0
  354. package/test/sap/ui/core/demokit/tutorial/databinding/04/manifest.json +3 -2
  355. package/test/sap/ui/core/demokit/tutorial/databinding/04/package.json +4 -1
  356. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  357. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/Component.js +12 -0
  358. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/index.html +8 -10
  359. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/manifest.json +35 -1
  360. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/model/data.json +6 -0
  361. package/test/sap/ui/core/demokit/tutorial/databinding/05/manifest.json +3 -2
  362. package/test/sap/ui/core/demokit/tutorial/databinding/05/package.json +4 -1
  363. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  364. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/Component.js +20 -0
  365. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/index.html +8 -10
  366. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/manifest.json +35 -1
  367. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/model/data.json +6 -0
  368. package/test/sap/ui/core/demokit/tutorial/databinding/06/manifest.json +4 -3
  369. package/test/sap/ui/core/demokit/tutorial/databinding/06/package.json +4 -1
  370. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  371. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/Component.js +12 -0
  372. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/index.html +8 -10
  373. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/manifest.json +46 -1
  374. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/model/data.json +5 -0
  375. package/test/sap/ui/core/demokit/tutorial/databinding/07/manifest.json +4 -3
  376. package/test/sap/ui/core/demokit/tutorial/databinding/07/package.json +3 -0
  377. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  378. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/Component.js +12 -0
  379. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/index.html +8 -10
  380. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/manifest.json +46 -1
  381. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/model/data.json +5 -0
  382. package/test/sap/ui/core/demokit/tutorial/databinding/08/manifest.json +4 -3
  383. package/test/sap/ui/core/demokit/tutorial/databinding/08/package.json +3 -0
  384. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  385. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/Component.js +12 -0
  386. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/index.html +8 -10
  387. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/manifest.json +46 -1
  388. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/model/data.json +11 -0
  389. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/view/App.view.xml +1 -1
  390. package/test/sap/ui/core/demokit/tutorial/databinding/09/manifest.json +4 -3
  391. package/test/sap/ui/core/demokit/tutorial/databinding/09/package.json +3 -0
  392. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  393. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/Component.js +12 -0
  394. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/controller/App.controller.js +8 -7
  395. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/index.html +8 -10
  396. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/manifest.json +46 -1
  397. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/model/data.json +11 -0
  398. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/view/App.view.xml +2 -2
  399. package/test/sap/ui/core/demokit/tutorial/databinding/10/manifest.json +4 -3
  400. package/test/sap/ui/core/demokit/tutorial/databinding/10/package.json +3 -0
  401. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  402. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/Component.js +12 -0
  403. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/controller/App.controller.js +8 -7
  404. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/index.html +8 -10
  405. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/manifest.json +46 -1
  406. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/model/data.json +13 -0
  407. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/view/App.view.xml +3 -3
  408. package/test/sap/ui/core/demokit/tutorial/databinding/11/manifest.json +4 -3
  409. package/test/sap/ui/core/demokit/tutorial/databinding/11/package.json +3 -0
  410. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  411. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/Component.js +12 -0
  412. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/controller/App.controller.js +8 -7
  413. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/index.html +8 -10
  414. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/manifest.json +47 -1
  415. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/model/data.json +13 -0
  416. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/view/App.view.xml +3 -3
  417. package/test/sap/ui/core/demokit/tutorial/databinding/12/manifest.json +4 -3
  418. package/test/sap/ui/core/demokit/tutorial/databinding/12/package.json +3 -0
  419. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  420. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/Component.js +12 -0
  421. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/controller/App.controller.js +10 -11
  422. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/index.html +8 -10
  423. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/manifest.json +51 -1
  424. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/model/Products.json +64 -57
  425. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/model/data.json +13 -0
  426. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/view/App.view.xml +3 -3
  427. package/test/sap/ui/core/demokit/tutorial/databinding/13/manifest.json +4 -3
  428. package/test/sap/ui/core/demokit/tutorial/databinding/13/package.json +3 -0
  429. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  430. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/Component.js +12 -0
  431. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/controller/App.controller.js +16 -16
  432. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/index.html +8 -10
  433. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/manifest.json +51 -1
  434. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/model/Products.json +64 -57
  435. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/model/data.json +13 -0
  436. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/view/App.view.xml +3 -3
  437. package/test/sap/ui/core/demokit/tutorial/databinding/14/manifest.json +4 -3
  438. package/test/sap/ui/core/demokit/tutorial/databinding/14/package.json +3 -0
  439. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  440. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/Component.js +12 -0
  441. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/controller/App.controller.js +16 -16
  442. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/index.html +8 -10
  443. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/manifest.json +51 -1
  444. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/model/Products.json +64 -57
  445. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/model/data.json +14 -0
  446. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/view/App.view.xml +3 -3
  447. package/test/sap/ui/core/demokit/tutorial/databinding/15/manifest.json +4 -3
  448. package/test/sap/ui/core/demokit/tutorial/databinding/15/package.json +3 -0
  449. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  450. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/Component.js +12 -0
  451. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/controller/App.controller.js +19 -22
  452. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/index.html +8 -10
  453. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/manifest.json +51 -1
  454. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/model/Products.json +64 -57
  455. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/model/data.json +14 -0
  456. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/view/App.view.xml +5 -5
  457. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  458. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  459. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  460. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  461. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  462. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  463. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  464. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  465. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  466. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  467. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  468. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  469. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  470. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  471. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  472. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  473. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  474. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  475. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  476. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  477. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  478. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  479. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  480. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  481. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  482. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  483. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  484. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  485. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  486. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  487. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  488. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  489. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  490. package/test/sap/ui/core/qunit/CompositeBinding.qunit.js +67 -0
  491. package/test/sap/ui/core/qunit/EventProvider.qunit.js +30 -2
  492. package/test/sap/ui/core/qunit/{Core_libraryPreloadFiles.qunit.html → Lib_preloadFiles.qunit.html} +1 -1
  493. package/test/sap/ui/core/qunit/{Core_libraryPreloadFiles.qunit.js → Lib_preloadFiles.qunit.js} +5 -10
  494. package/test/sap/ui/core/qunit/ThemeHelper.qunit.js +1 -1
  495. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +4 -4
  496. package/test/sap/ui/core/qunit/ThemeParameters_legacyAPIs.qunit.js +12 -12
  497. package/test/sap/ui/core/qunit/analytics/odata4analytics.qunit.js +262 -12
  498. package/test/sap/ui/core/qunit/app/DesignMode_suppressedDeactivation.qunit.js +8 -4
  499. package/test/sap/ui/core/qunit/app/_createDesignModeTests_legacyAPIs.qunit.js +8 -4
  500. package/test/sap/ui/core/qunit/app/fixture/designmode/test01.controller.js +4 -4
  501. package/test/sap/ui/core/qunit/app/testsuite.app.qunit.js +3 -3
  502. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +11 -0
  503. package/test/sap/ui/core/qunit/component/Component_keepAlive.qunit.js +30 -2
  504. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +82 -19
  505. package/test/sap/ui/core/qunit/component/testdata/keepAlive/child3/App.view.xml +3 -0
  506. package/test/sap/ui/core/qunit/component/testdata/keepAlive/child3/Component.js +20 -0
  507. package/test/sap/ui/core/qunit/component/testdata/keepAlive/child3/Home.view.xml +5 -0
  508. package/test/sap/ui/core/qunit/component/testdata/keepAlive/child3/Other.view.xml +5 -0
  509. package/test/sap/ui/core/qunit/component/testdata/keepAlive/child3/manifest.json +54 -0
  510. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessAmbiguous.html +4 -0
  511. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessDuplicate.html +4 -0
  512. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessFailing.html +4 -0
  513. package/test/sap/ui/core/qunit/gherkin/opa5TestHarness.qunit.html +4 -0
  514. package/test/sap/ui/core/qunit/gherkin/opa5TestHarness.qunit.js +1 -1
  515. package/test/sap/ui/core/qunit/gherkin/qUnitTestHarness.qunit.html +4 -0
  516. package/test/sap/ui/core/qunit/gherkin/qUnitTestHarness.qunit.js +1 -1
  517. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.html +1 -1
  518. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +5 -6
  519. package/test/sap/ui/core/qunit/internal/testsuite.models.qunit.js +43 -16
  520. package/test/sap/ui/core/qunit/messages/messagesGeneral.qunit.js +194 -180
  521. package/test/sap/ui/core/qunit/messages/messagesUsage.qunit.js +15 -33
  522. package/test/sap/ui/core/qunit/mockserver/MockServer.qunit.js +936 -1014
  523. package/test/sap/ui/core/qunit/mockserver/testsuite.mockserver.qunit.js +2 -4
  524. package/test/sap/ui/core/qunit/model/FAR_CUSTOMER_LINE_ITEMS.metadata.xml +2 -0
  525. package/test/sap/ui/core/qunit/model/PropertyBinding.qunit.js +50 -1
  526. package/test/sap/ui/core/qunit/model/controlhelper/TreeBindingProxy.qunit.js +18 -8
  527. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +107 -49
  528. package/test/sap/ui/core/qunit/mvc/testdata/asyncHooks.view.xml +7 -0
  529. package/test/sap/ui/core/qunit/odata/ODataMetaModel.qunit.js +0 -3
  530. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +143 -2
  531. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +34 -0
  532. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +230 -39
  533. package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +57 -18
  534. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +40 -6
  535. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +3 -0
  536. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +1715 -106
  537. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +39 -0
  538. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +88 -18
  539. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +544 -50
  540. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +175 -0
  541. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +50 -9
  542. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +17 -0
  543. package/test/sap/ui/core/qunit/odata/v4/lib/_TreeState.qunit.js +140 -27
  544. package/test/sap/ui/core/qunit/opa/RecordReplay.qunit.js +12 -3
  545. package/test/sap/ui/core/qunit/resource/ResourceModel.qunit.js +1 -2
  546. package/test/sap/ui/core/qunit/routing/fixture/placeholder/component/NavContainerOptOut/Component.js +1 -0
  547. package/test/sap/ui/core/qunit/rule/model/bindingPathSyntaxValidation.qunit.js +37 -0
  548. package/test/sap/ui/core/qunit/rule/model/{modelSupport.qunit.js → selectUsedInBoundAggregation.qunit.js} +86 -154
  549. package/test/sap/ui/core/qunit/rule/testsuite.rule.qunit.js +5 -2
  550. package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib12/themes/{sap_hcb → sap_horizon_hcb}/library.css +1 -1
  551. package/test/sap/ui/core/qunit/testsuite.core.framework.qunit.js +18 -18
  552. package/test/sap/ui/core/qunit/testsuites/testsuite.base.configuration.qunit.js +1 -1
  553. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +3 -3
  554. package/test/sap/ui/core/qunit/types/CompositeType.qunit.js +6 -0
  555. package/test/sap/ui/core/qunit/types/DateFormat.qunit.js +3 -6
  556. package/test/sap/ui/core/qunit/types/NumberFormat.qunit.js +1370 -1242
  557. package/test/sap/ui/core/qunit/types/Types.qunit.js +65 -0
  558. package/test/sap/ui/core/qunit/types/testsuite.types.qunit.js +0 -3
  559. package/test/sap/ui/core/qunit/ui5classes/ManagedObject.qunit.js +68 -3
  560. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +2625 -1899
  561. package/test/sap/ui/core/qunit/util/reflection/JsControlTreeModifier.qunit.js +0 -102
  562. package/test/sap/ui/core/qunit/util/reflection/XmlTreeModifier.qunit.js +0 -165
  563. package/test/sap/ui/core/relnotes/changes-1.121.json +0 -15
  564. package/test/sap/ui/core/relnotes/changes-1.122.json +80 -0
  565. package/test/sap/ui/core/visual/HyphenationPlayground.spec.js +5 -2
  566. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/index.js +0 -15
  567. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/index.js +0 -21
  568. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/index.js +0 -21
  569. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/index.js +0 -25
  570. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/index.js +0 -29
  571. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/index.js +0 -42
  572. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/index.js +0 -44
  573. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/index.js +0 -39
  574. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/index.js +0 -39
  575. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/index.js +0 -41
  576. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/index.js +0 -48
  577. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/index.js +0 -52
  578. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/index.js +0 -52
  579. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/index.js +0 -54
  580. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/index.js +0 -54
  581. /package/test/sap/ui/core/qunit/testdata/legacy-uilib_legacyAPIs/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  582. /package/test/sap/ui/core/qunit/testdata/legacy-uilib_legacyAPIs/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  583. /package/test/sap/ui/core/qunit/testdata/legacy-uilib_legacyAPIs/themes/{sap_hcb → sap_horizon_hcb}/library[legacy].css +0 -0
  584. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib1/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  585. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib1/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  586. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib10/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  587. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib11/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  588. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib13/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  589. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib14/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  590. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib15/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  591. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib15/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  592. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib16/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  593. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib16/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  594. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib17/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  595. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib2/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  596. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib2/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  597. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib3/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  598. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib3/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  599. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib4/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  600. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib5/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  601. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib6/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  602. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib7/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  603. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib8/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  604. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib9/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
@@ -38,8 +38,9 @@ sap.ui.define([
38
38
  * The binding path, either absolute or relative to a given <code>oContext</code>
39
39
  * @param {sap.ui.model.Context} [oContext]
40
40
  * The parent context which is required as base for a relative path
41
- * @param {sap.ui.model.Filter | sap.ui.model.Filter[]} [vFilters]
42
- * The application filters to be used initially
41
+ * @param {sap.ui.model.Filter[]|sap.ui.model.Filter} [vFilters=[]]
42
+ * The filters to be used initially with type {@link sap.ui.model.FilterType.Application}; call {@link #filter} to
43
+ * replace them
43
44
  * @param {object} [mParameters]
44
45
  * Map of binding parameters
45
46
  * @param {boolean} [mParameters.transitionMessagesOnly=false]
@@ -89,8 +90,8 @@ sap.ui.define([
89
90
  * @param {object} [mParameters.navigation]
90
91
  * <b>Deprecated since 1.44:</b> A map describing the navigation properties between entity
91
92
  * sets, which is used for constructing and paging the tree
92
- * @param {sap.ui.model.Sorter | sap.ui.model.Sorter[]} [vSorters]
93
- * The dynamic sorters to be used initially
93
+ * @param {sap.ui.model.Sorter[]|sap.ui.model.Sorter} [vSorters=[]]
94
+ * The sorters used initially; call {@link #sort} to replace them
94
95
  * @throws {Error} If one of the filters uses an operator that is not supported by the underlying model
95
96
  * implementation or if the {@link sap.ui.model.Filter.NONE} filter instance is contained in
96
97
  * <code>vFilters</code> together with other filters
@@ -102,7 +103,7 @@ sap.ui.define([
102
103
  * @extends sap.ui.model.TreeBinding
103
104
  * @hideconstructor
104
105
  * @public
105
- * @version 1.121.1
106
+ * @version 1.122.0
106
107
  */
107
108
  var ODataTreeBinding = TreeBinding.extend("sap.ui.model.odata.v2.ODataTreeBinding", /** @lends sap.ui.model.odata.v2.ODataTreeBinding.prototype */ {
108
109
 
@@ -1629,11 +1630,12 @@ sap.ui.define([
1629
1630
  * For more information, see {@link sap.ui.model.odata.v2.ODataModel#bindTree}.
1630
1631
  * <b>Note:</b> {@link sap.ui.model.odata.OperationMode.Auto} is deprecated since 1.102.0.
1631
1632
  *
1632
- * @param {sap.ui.model.Filter[]|sap.ui.model.Filter} aFilters
1633
- * Filter or array of filters to apply
1634
- * @param {sap.ui.model.FilterType} sFilterType
1635
- * Type of the filter which should be adjusted. If it is not given,
1636
- * the type <code>FilterType.Control</code> is assumed
1633
+ * @param {sap.ui.model.Filter[]|sap.ui.model.Filter} [aFilters=[]]
1634
+ * The filters to use; in case of type {@link sap.ui.model.FilterType.Application} this replaces the filters given
1635
+ * in {@link sap.ui.model.odata.v2.ODataModel#bindTree}; a falsy value is treated as an empty array and thus
1636
+ * removes all filters of the specified type
1637
+ * @param {sap.ui.model.FilterType} [sFilterType=sap.ui.model.FilterType.Control]
1638
+ * The type of the filter to replace
1637
1639
  * @param {boolean} [bReturnSuccess]
1638
1640
  * Whether to return <code>true</code> or <code>false</code>, instead of <code>this</code>,
1639
1641
  * depending on whether the filtering has been done
@@ -1808,8 +1810,9 @@ sap.ui.define([
1808
1810
  * applied locally on the client.
1809
1811
  * <b>Note:</b> {@link sap.ui.model.odata.OperationMode.Auto} is deprecated since 1.102.0.
1810
1812
  *
1811
- * @param {sap.ui.model.Sorter[]|sap.ui.model.Sorter} aSorters
1812
- * The Sorter or an Array of sap.ui.model.Sorter instances
1813
+ * @param {sap.ui.model.Sorter[]|sap.ui.model.Sorter} [aSorters=[]]
1814
+ * The sorters to use; they replace the sorters given in {@link sap.ui.model.odata.v2.ODataModel#bindTree}; a
1815
+ * falsy value is treated as an empty array and thus removes all sorters
1813
1816
  * @param {boolean} [bReturnSuccess]
1814
1817
  * Whether to return <code>true</code> or <code>false</code>, instead of <code>this</code>,
1815
1818
  * depending on whether the sorting has been done
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @hideconstructor
43
43
  * @public
44
44
  * @since 1.39.0
45
- * @version 1.121.1
45
+ * @version 1.122.0
46
46
  */
47
47
  Context = BaseContext.extend("sap.ui.model.odata.v4.Context", {
48
48
  constructor : constructor
@@ -348,6 +348,24 @@ sap.ui.define([
348
348
  );
349
349
  };
350
350
 
351
+ /**
352
+ * Deregisters the given change listener if it is registered for its path. Note: This
353
+ * method is for special cases with a header context and the path "@$ui5.context.isSelected"
354
+ * and should not be confused with <code>Cache#deregisterChangeListener</code>.
355
+ *
356
+ * @param {sap.ui.model.odata.v4.ODataPropertyBinding} oListener - The listener to be removed
357
+ * @returns {boolean} - If this function has handled the deregistering
358
+ *
359
+ * @private
360
+ */
361
+ Context.prototype.deregisterChangeListener = function (oListener) {
362
+ if (this.mChangeListeners && oListener.getPath() === "@$ui5.context.isSelected") {
363
+ _Helper.removeByPath(this.mChangeListeners, "", oListener);
364
+ return true;
365
+ }
366
+ return false;
367
+ };
368
+
351
369
  /**
352
370
  * Destroys this context, that is, it removes this context from all dependent bindings and drops
353
371
  * references to binding and model, so that the context cannot be used anymore; it keeps path
@@ -373,6 +391,7 @@ sap.ui.define([
373
391
  oDependentBinding.setContext(undefined);
374
392
  });
375
393
  this.oBinding = undefined;
394
+ delete this.mChangeListeners;
376
395
  this.oCreatedPromise = undefined;
377
396
  // keep oDeletePromise so that isDeleted does not unexpectedly become false
378
397
  this.oSyncCreatePromise = undefined;
@@ -477,6 +496,19 @@ sap.ui.define([
477
496
  }
478
497
  throw new Error("Must not modify a deleted entity: " + this);
479
498
  }
499
+
500
+ if (sPath === "@$ui5.context.isSelected") {
501
+ this.setSelected(vValue);
502
+
503
+ if (oGroupLock) {
504
+ oGroupLock.unlock();
505
+ oGroupLock = null;
506
+ }
507
+ if (this.oBinding.getHeaderContext?.() === this) {
508
+ return SyncPromise.resolve();
509
+ }
510
+ }
511
+
480
512
  if (oGroupLock && this.isTransient() && !this.isInactive()) {
481
513
  oValue = this.getValue();
482
514
  oPromise = oValue && _Helper.getPrivateAnnotation(oValue, "transient");
@@ -577,6 +609,22 @@ sap.ui.define([
577
609
  }, sPath, /*bSync*/false, /*bWithOrWithoutCache*/true);
578
610
  };
579
611
 
612
+ /**
613
+ * Sets the selected state for this context.
614
+ *
615
+ * @param {boolean} bSelected
616
+ * Whether this context is to be selected
617
+ *
618
+ * @private
619
+ * @see #setSelected
620
+ */
621
+ Context.prototype.doSetSelected = function (bSelected) {
622
+ this.bSelected = bSelected;
623
+ if (this.oBinding) {
624
+ this.oBinding.onKeepAliveChanged(this); // selected contexts are effectively kept alive
625
+ }
626
+ };
627
+
580
628
  /**
581
629
  * Expands the group node that this context points to.
582
630
  *
@@ -663,25 +711,43 @@ sap.ui.define([
663
711
  * @returns {sap.ui.base.SyncPromise}
664
712
  * A promise on the outcome of the binding's <code>fetchValue</code> call; it is rejected
665
713
  * in case cached values are asked for, but not found
714
+ * @throws {Error} If this context is a header context and no or empty path is given and
715
+ * a listener is given.
666
716
  *
667
717
  * @private
718
+ * @see #getObject
719
+ * @see #getProperty
668
720
  */
669
721
  Context.prototype.fetchValue = function (sPath, oListener, bCached) {
670
- var oBinding = this.oBinding;
722
+ var oBinding = this.oBinding,
723
+ that = this;
671
724
 
672
725
  if (this.iIndex === iVIRTUAL) {
673
726
  return SyncPromise.resolve(); // no cache access for virtual contexts
674
727
  }
675
- if (oBinding.getHeaderContext && oBinding.getHeaderContext() === this) {
728
+ if (oBinding.getHeaderContext?.() === this) {
676
729
  if (sPath && sPath.startsWith(this.sPath)) {
677
730
  sPath = sPath.slice(this.sPath.length + 1);
678
731
  }
679
732
  if (!sPath) {
680
- return oBinding.fetchValue(this.sPath + "/$count", oListener, bCached)
681
- .then(function (iCount) {
682
- return {$count : iCount};
683
- });
684
- } else if (sPath !== "$count") {
733
+ if (oListener) {
734
+ throw new Error("Cannot register change listener for header context object");
735
+ }
736
+ return oBinding.fetchValue(this.sPath + "/$count", null, bCached).then((iCount) => {
737
+ return {
738
+ "@$ui5.context.isSelected" : that.bSelected,
739
+ $count : iCount
740
+ };
741
+ });
742
+ } else if (sPath === "@$ui5.context.isSelected") {
743
+ // @$ui5.context.isSelected is a virtual property for header contexts and not part
744
+ // of the cache (in contrast to row contexts, where it is saved in the cache).
745
+ // Therefore, change listeners are saved and fired via the header context
746
+ this.mChangeListeners ??= {};
747
+ _Helper.addByPath(this.mChangeListeners, "", oListener);
748
+
749
+ return SyncPromise.resolve(this.bSelected);
750
+ } else if (sPath !== "$count" && sPath !== "@$ui5.context.isSelected") {
685
751
  throw new Error("Invalid header path: " + sPath);
686
752
  }
687
753
  }
@@ -851,8 +917,8 @@ sap.ui.define([
851
917
  * Returns <code>undefined</code> if the data is not (yet) available; no request is triggered.
852
918
  * Use {@link #requestObject} for asynchronous access.
853
919
  *
854
- * The header context of a list binding only delivers <code>$count</code> (wrapped in an object
855
- * if <code>sPath</code> is "").
920
+ * The header context of a list binding only delivers <code>$count</code> and
921
+ * <code>@$ui5.context.isSelected</code> (wrapped in an object if <code>sPath</code> is "").
856
922
  *
857
923
  * @param {string} [sPath=""]
858
924
  * A path relative to this context
@@ -860,7 +926,7 @@ sap.ui.define([
860
926
  * The requested value
861
927
  * @throws {Error}
862
928
  * If the context's root binding is suspended or if the context is a header context and the
863
- * path is neither empty nor "$count".
929
+ * path is neither empty, "$count", nor "@ui5.context.isSelected".
864
930
  *
865
931
  * @public
866
932
  * @see sap.ui.model.Context#getObject
@@ -886,8 +952,8 @@ sap.ui.define([
886
952
  * <li> this context is not part of a recursive hierarchy.
887
953
  * </ul>
888
954
  *
889
- * @experimental As of version 1.120.0
890
955
  * @public
956
+ * @since 1.122.0
891
957
  */
892
958
  Context.prototype.getParent = function () {
893
959
  if (!this.oBinding.fetchOrGetParent) {
@@ -914,7 +980,8 @@ sap.ui.define([
914
980
  * <ul>
915
981
  * <li> the context's root binding is suspended,
916
982
  * <li> the value is not primitive,
917
- * <li> or the context is a header context and the path is not "$count"
983
+ * <li> or the context is a header context and the path is not "$count" or
984
+ * "@ui5.context.isSelected".
918
985
  * </ul>
919
986
  *
920
987
  * @public
@@ -1157,7 +1224,9 @@ sap.ui.define([
1157
1224
 
1158
1225
  /**
1159
1226
  * Tells whether this context is currently selected, but not {@link #delete deleted} on the
1160
- * client.
1227
+ * client. Since 1.122.0 the selection state can also be accessed via instance annotation
1228
+ * "@$ui5.context.isSelected" at the entity. Note that the annotation does not take the deletion
1229
+ * state into account.
1161
1230
  *
1162
1231
  * @returns {boolean} Whether this context is currently selected
1163
1232
  *
@@ -1376,8 +1445,8 @@ sap.ui.define([
1376
1445
  * Note that the function clones the result. Modify values via
1377
1446
  * {@link sap.ui.model.odata.v4.Context#setProperty}.
1378
1447
  *
1379
- * The header context of a list binding only delivers <code>$count</code> (wrapped in an object
1380
- * if <code>sPath</code> is "").
1448
+ * The header context of a list binding only delivers <code>$count</code> and
1449
+ * <code>@$ui5.context.isSelected</code> (wrapped in an object if <code>sPath</code> is "").
1381
1450
  *
1382
1451
  * In case of a {@link sap.ui.model.odata.v4.ODataContextBinding#getBoundContext context
1383
1452
  * binding's bound context} that hasn't requested its data yet, this method causes an initial
@@ -1394,7 +1463,7 @@ sap.ui.define([
1394
1463
  * A promise on the requested value
1395
1464
  * @throws {Error}
1396
1465
  * If the context's root binding is suspended, or if the context is a header context and the
1397
- * path is neither empty nor "$count"
1466
+ * path is neither empty, "$count", nor "@$ui5.context.isSelected".
1398
1467
  *
1399
1468
  * @public
1400
1469
  * @see #getBinding
@@ -1412,8 +1481,6 @@ sap.ui.define([
1412
1481
  * Requests the parent node (in case of a recursive hierarchy; see
1413
1482
  * {@link sap.ui.model.odata.v4.ODataListBinding#setAggregation}).
1414
1483
  *
1415
- * Note: <strong>DO NOT</strong> call {@link #setKeepAlive} on the resulting context!
1416
- *
1417
1484
  * @returns {Promise<sap.ui.model.odata.v4.Context|null>} A promise which:
1418
1485
  * <ul>
1419
1486
  * <li> Resolves if successful with either the parent node or <code>null</code> for a root
@@ -1426,9 +1493,9 @@ sap.ui.define([
1426
1493
  * <li> this context is not part of a recursive hierarchy.
1427
1494
  * </ul>
1428
1495
  *
1429
- * @experimental As of version 1.120.0
1430
1496
  * @public
1431
1497
  * @see #getParent
1498
+ * @since 1.122.0
1432
1499
  */
1433
1500
  Context.prototype.requestParent = function () {
1434
1501
  if (!this.oBinding.fetchOrGetParent) {
@@ -1450,7 +1517,7 @@ sap.ui.define([
1450
1517
  * given property paths that format corresponding to the properties' EDM types and constraints
1451
1518
  * @returns {Promise<any>}
1452
1519
  * A promise on the requested value or values; it is rejected if a value is not primitive or
1453
- * if the context is a header context and a path is not "$count"
1520
+ * if the context is a header context and a path is not "$count" or "@$ui5.context.isSelected"
1454
1521
  * @throws {Error}
1455
1522
  * If the context's root binding is suspended
1456
1523
  *
@@ -2019,7 +2086,10 @@ sap.ui.define([
2019
2086
  /**
2020
2087
  * Sets a new value for the property identified by the given path. The path is relative to this
2021
2088
  * context and is expected to point to a structural property with primitive type or, since
2022
- * 1.85.0, to an instance annotation.
2089
+ * 1.85.0, to an instance annotation. Since 1.122.0 the client-side annotation
2090
+ * "@$ui5.context.isSelected" can be given as a path. Note: Writing to a client-side
2091
+ * annotation never triggers a PATCH request, even if <code>sGroupId</code> is given.
2092
+ * Thus, reverting the value of this annotation cannot be done via {@link #resetChanges}.
2023
2093
  *
2024
2094
  * @param {string} sPath
2025
2095
  * A path relative to this context
@@ -2027,7 +2097,8 @@ sap.ui.define([
2027
2097
  * The new value which must be primitive
2028
2098
  * @param {string} [sGroupId]
2029
2099
  * The group ID to be used for the PATCH request; if not specified, the update group ID for
2030
- * the context's binding is used, see {@link #getUpdateGroupId}. Since 1.74.0, you can use
2100
+ * the context's binding is used, see {@link #getUpdateGroupId}. When writing to a client-side
2101
+ * annotation, <code>null</code> is used automatically. Since 1.74.0, you can use
2031
2102
  * <code>null</code> to prevent the PATCH request.
2032
2103
  * @param {boolean} [bRetry]
2033
2104
  * Since 1.85.0, if <code>true</code> the property is not reset if the PATCH request failed.
@@ -2094,10 +2165,12 @@ sap.ui.define([
2094
2165
  };
2095
2166
 
2096
2167
  /**
2097
- * Determines whether this context is currently selected. If the preconditions of
2098
- * {@link #setKeepAlive} hold, a best effort is made to implicitly keep a selected context alive
2099
- * in order to preserve the selection state. While a context is currently
2100
- * {@link #delete deleted} on the client, it does not appear as {@link #isSelected selected}.
2168
+ * Sets whether this context is currently selected. While a context is currently
2169
+ * {@link #delete deleted} on the client, it does not appear as {@link #isSelected selected}. If
2170
+ * the preconditions of {@link #setKeepAlive} hold, a best effort is made to implicitly keep a
2171
+ * selected context alive in order to preserve the selection state. Once the selection is no
2172
+ * longer needed, for example because you perform an operation on this context which logically
2173
+ * removes it from its list, you need to reset the selection.
2101
2174
  *
2102
2175
  * <b>Note:</b> It is unsafe to keep a reference to a context instance which is not
2103
2176
  * {@link #isKeepAlive kept alive}.
@@ -2118,10 +2191,18 @@ sap.ui.define([
2118
2191
  if (bSelected && this.isDeleted()) {
2119
2192
  throw new Error("Must not select a deleted entity: " + this);
2120
2193
  }
2121
- this.bSelected = bSelected;
2122
- if (this.oBinding) {
2123
- this.oBinding.onKeepAliveChanged(this); // selected contexts are effectively kept alive
2194
+ if (bSelected !== this.bSelected) {
2195
+ if (this.mChangeListeners) {
2196
+ _Helper.fireChange(this.mChangeListeners, "", bSelected);
2197
+ }
2198
+ this.withCache((oCache, sPath) => {
2199
+ if (this.oBinding) {
2200
+ oCache.setProperty("@$ui5.context.isSelected", bSelected, sPath);
2201
+ } // else: context already destroyed
2202
+ }, "");
2124
2203
  }
2204
+
2205
+ this.doSetSelected(bSelected);
2125
2206
  };
2126
2207
 
2127
2208
  /**
@@ -560,9 +560,11 @@ sap.ui.define([
560
560
  throw oError;
561
561
  });
562
562
  }
563
- that.oFetchCacheCallToken = undefined; // cleanup
564
- return that.createAndSetCache(mQueryOptions, sResourcePath, oContext,
565
- sGroupId, oCallToken.oOldCache);
563
+ return that.oModel.waitForKeepAliveBinding(that).then(function () {
564
+ that.oFetchCacheCallToken = undefined; // cleanup
565
+ return that.createAndSetCache(mQueryOptions, sResourcePath, oContext,
566
+ sGroupId, oCallToken.oOldCache);
567
+ });
566
568
  });
567
569
  }
568
570
 
@@ -1207,7 +1209,9 @@ sap.ui.define([
1207
1209
  * group ID and notifies the control that new data is available.
1208
1210
  *
1209
1211
  * Refresh is supported for bindings which are not relative to an
1210
- * {@link sap.ui.model.odata.v4.Context}.
1212
+ * {@link sap.ui.model.odata.v4.Context}, as well as (since 1.122.0) for bindings with the
1213
+ * <code>$$ownRequest</code> parameter (see {@link sap.ui.model.odata.v4.ODataModel#bindList}
1214
+ * and {@link sap.ui.model.odata.v4.ODataModel#bindContext})
1211
1215
  *
1212
1216
  * Note: When calling {@link #refresh} multiple times, the result of the request triggered by
1213
1217
  * the last call determines the binding's data; it is <b>independent</b> of the order of calls
@@ -1392,7 +1396,7 @@ sap.ui.define([
1392
1396
  * @since 1.87.0
1393
1397
  */
1394
1398
  ODataBinding.prototype.requestRefresh = function (sGroupId) {
1395
- if (!this.isRoot()) {
1399
+ if (!this.mParameters?.$$ownRequest && !this.isRoot()) {
1396
1400
  throw new Error("Refresh on this binding is not supported");
1397
1401
  }
1398
1402
  if (this.hasPendingChanges(true)) {
@@ -74,7 +74,7 @@ sap.ui.define([
74
74
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
75
75
  * @public
76
76
  * @since 1.37.0
77
- * @version 1.121.1
77
+ * @version 1.122.0
78
78
  *
79
79
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
80
80
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
@@ -57,7 +57,7 @@ sap.ui.define([
57
57
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
58
58
  * @public
59
59
  * @since 1.37.0
60
- * @version 1.121.1
60
+ * @version 1.122.0
61
61
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
62
62
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
63
63
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -934,7 +934,7 @@ sap.ui.define([
934
934
  return;
935
935
  }
936
936
 
937
- oContext.setSelected(false);
937
+ oContext.doSetSelected(false);
938
938
  that.removeCreated(oContext);
939
939
  return Promise.resolve().then(function () {
940
940
  // Fire the change asynchronously so that Cache#delete is finished and #getContexts
@@ -1073,9 +1073,10 @@ sap.ui.define([
1073
1073
  sPredicate = _Helper.getPrivateAnnotation(aResults[i], "predicate");
1074
1074
  sContextPath = sPath + (sPredicate || "/" + i$skipIndex);
1075
1075
  oContext = this.mPreviousContextsByPath[sContextPath];
1076
- if (oContext && (!oContext.created() || oContext.isEffectivelyKeptAlive())) {
1076
+ if (oContext && (!oContext.created() || oContext.isEffectivelyKeptAlive()
1077
+ || this.mParameters.$$aggregation?.hierarchyQualifier)) {
1077
1078
  // reuse the previous context, unless it is created (and persisted), but not
1078
- // kept alive
1079
+ // kept alive; always reuse created contexts in a recursive hierarchy
1079
1080
  delete this.mPreviousContextsByPath[sContextPath];
1080
1081
  oContext.iIndex = i$skipIndex;
1081
1082
  oContext.checkUpdate();
@@ -1885,7 +1886,7 @@ sap.ui.define([
1885
1886
  * @param {boolean} [bAllowRequest]
1886
1887
  * Whether it is allowed to send a GET request to fetch the parent node's data
1887
1888
  * @returns {sap.ui.model.odata.v4.Context|null|undefined|
1888
- * Promise<sap.ui.model.odata.v4.Context>}
1889
+ * Promise<sap.ui.model.odata.v4.Context>|sap.ui.base.SyncPromise}
1889
1890
  * <ul>
1890
1891
  * <li> The parent node if already known,
1891
1892
  * <li> <code>null</code> if the given node is a root node and thus has no parent,
@@ -2721,7 +2722,8 @@ sap.ui.define([
2721
2722
  };
2722
2723
 
2723
2724
  /**
2724
- * Returns the header context which allows binding to <code>$count</code>.
2725
+ * Returns the header context which allows binding to <code>$count</code> or
2726
+ * <code>@$ui5.context.isSelected</code>.
2725
2727
  *
2726
2728
  * @returns {sap.ui.model.odata.v4.Context|null}
2727
2729
  * The header context or <code>null</code> if the binding is relative and has no context
@@ -3479,7 +3481,8 @@ sap.ui.define([
3479
3481
  } else {
3480
3482
  that.fetchCache(that.oContext, false, /*bKeepQueryOptions*/true,
3481
3483
  bKeepCacheOnError ? sGroupId : undefined);
3482
- oKeptElementsPromise = that.refreshKeptElements(sGroupId);
3484
+ oKeptElementsPromise = that.refreshKeptElements(sGroupId,
3485
+ /*bIgnorePendingChanges*/ bKeepCacheOnError);
3483
3486
  if (that.iCurrentEnd > 0) {
3484
3487
  oPromise = that.createRefreshPromise(
3485
3488
  /*bPreventBubbling*/bKeepCacheOnError
@@ -3538,13 +3541,15 @@ sap.ui.define([
3538
3541
  *
3539
3542
  * @param {string} sGroupId
3540
3543
  * The effective group ID
3544
+ * @param {boolean} bIgnorePendingChanges
3545
+ * Whether kept elements are refreshed although there are pending changes.
3541
3546
  * @returns {sap.ui.base.SyncPromise}
3542
3547
  * A promise which is resolved without a defined result, or rejected with an error if the
3543
3548
  * refresh fails.
3544
3549
  *
3545
3550
  * @private
3546
3551
  */
3547
- ODataListBinding.prototype.refreshKeptElements = function (sGroupId) {
3552
+ ODataListBinding.prototype.refreshKeptElements = function (sGroupId, bIgnorePendingChanges) {
3548
3553
  var that = this;
3549
3554
 
3550
3555
  return this.oCachePromise.then(function (oCache) {
@@ -3558,7 +3563,7 @@ sap.ui.define([
3558
3563
  if (iIndex >= 0) { // Note: implies oContext.created()
3559
3564
  that.removeCreated(oContext);
3560
3565
  }
3561
- });
3566
+ }, false, bIgnorePendingChanges);
3562
3567
  }).catch(function (oError) {
3563
3568
  that.oModel.reportError("Failed to refresh kept-alive elements", sClassName, oError);
3564
3569
  throw oError;
@@ -156,7 +156,7 @@ sap.ui.define([
156
156
  * @hideconstructor
157
157
  * @public
158
158
  * @since 1.37.0
159
- * @version 1.121.1
159
+ * @version 1.122.0
160
160
  */
161
161
  ODataMetaModel = MetaModel.extend("sap.ui.model.odata.v4.ODataMetaModel", {
162
162
  constructor : constructor
@@ -1773,7 +1773,8 @@ sap.ui.define([
1773
1773
  oProperty = bInsideAnnotation ? {} : oType[sPropertyName];
1774
1774
  if (!oProperty) {
1775
1775
  if (sPropertyName.includes("@")) {
1776
- if (sPropertyName.includes("@$ui5.")) {
1776
+ if (sPropertyName.includes("@$ui5.")
1777
+ && sPropertyName !== "@$ui5.context.isSelected") {
1777
1778
  error("Read-only path must not be updated");
1778
1779
  }
1779
1780
  bInsideAnnotation = true;
@@ -2859,7 +2860,7 @@ sap.ui.define([
2859
2860
  * with a dot, which is stripped before lookup; see the <code>&lt;template:alias></code>
2860
2861
  * instruction for XML Templating. In case of an absolute name, it is searched in
2861
2862
  * <code>mParameters.scope</code> first and then in the global namespace. (Using the global
2862
- * namespace is @deprecated as of version 1.120.3). The names "requestCurrencyCodes" and
2863
+ * namespace is deprecated as of version 1.120.3). The names "requestCurrencyCodes" and
2863
2864
  * "requestUnitsOfMeasure" default to {@link #requestCurrencyCodes} and
2864
2865
  * {@link #requestUnitsOfMeasure} resp. if not present in <code>mParameters.scope</code>. This
2865
2866
  * function is called with the current object (or primitive value) and additional details and
@@ -235,7 +235,7 @@ sap.ui.define([
235
235
  * @extends sap.ui.model.Model
236
236
  * @public
237
237
  * @since 1.37.0
238
- * @version 1.121.1
238
+ * @version 1.122.0
239
239
  */
240
240
  ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
241
241
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
@@ -1073,7 +1073,8 @@ sap.ui.define([
1073
1073
  };
1074
1074
 
1075
1075
  /**
1076
- * Method not supported
1076
+ * Method not supported, use {@link #bindList} with <code>mParameters.$$aggregation</code>
1077
+ * instead.
1077
1078
  *
1078
1079
  * @param {string} _sPath
1079
1080
  * @param {sap.ui.model.Context} [_oContext]
@@ -1772,6 +1773,8 @@ sap.ui.define([
1772
1773
  * A list of all dependent bindings, never <code>null</code>
1773
1774
  *
1774
1775
  * @private
1776
+ * @since 1.122.0
1777
+ * @ui5-restricted sap.fe
1775
1778
  */
1776
1779
  ODataModel.prototype.getDependentBindings = function (oParent) {
1777
1780
  return this.aAllBindings.filter(function (oBinding) {
@@ -2852,6 +2855,28 @@ sap.ui.define([
2852
2855
  return sClassName + ": " + this.sServiceUrl;
2853
2856
  };
2854
2857
 
2858
+ /**
2859
+ * Waits until the temporary keep-alive binding matching the given binding has created its
2860
+ * cache, if required and there is such a binding.
2861
+ *
2862
+ * @param {sap.ui.model.odata.v4.ODataBinding} oBinding
2863
+ * The binding that possibly needs the cache of a temporary keep-alive binding
2864
+ * @returns {sap.ui.base.SyncPromise}
2865
+ * A promise which is resolved without a defined result when that cache is available
2866
+ *
2867
+ * @private
2868
+ */
2869
+ ODataModel.prototype.waitForKeepAliveBinding = function (oBinding) {
2870
+ if (oBinding.mParameters?.$$getKeepAliveContext) {
2871
+ // $$canonicalPath is not allowed, binding path and resource path are (almost) identical
2872
+ const oTemporaryBinding = this.mKeepAliveBindingsByPath[oBinding.getResolvedPath()];
2873
+ if (oTemporaryBinding) {
2874
+ return oTemporaryBinding.oCachePromise;
2875
+ }
2876
+ }
2877
+ return SyncPromise.resolve();
2878
+ };
2879
+
2855
2880
  /**
2856
2881
  * Iterates over this model's unresolved bindings and calls the function with the given name on
2857
2882
  * each unresolved binding, passing the given parameter. Iteration stops if a function call on
@@ -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.121.1
45
+ * @version 1.122.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
@@ -101,6 +101,9 @@ sap.ui.define([
101
101
  this.sGroupId = undefined;
102
102
  this.bNoPatch = false;
103
103
  }
104
+ if (this.sPath === "@$ui5.context.isSelected") {
105
+ this.bNoPatch = true;
106
+ }
104
107
  this.oCheckUpdateCallToken = undefined;
105
108
  this.oContext = oContext;
106
109
  this.bHasDeclaredType = undefined; // whether the binding info declares a type
@@ -338,7 +341,8 @@ sap.ui.define([
338
341
  });
339
342
  if (bForceUpdate && vValue.isFulfilled()) {
340
343
  if (vType && vType.isFulfilled && vType.isFulfilled()) {
341
- this.oType = vType.getResult();
344
+ PropertyBinding.prototype.setType
345
+ .call(this, vType.getResult(), this.sInternalType);
342
346
  }
343
347
  this.vValue = vValue.getResult();
344
348
  }
@@ -352,7 +356,7 @@ sap.ui.define([
352
356
 
353
357
  if (oCallToken === that.oCheckUpdateCallToken) { // latest call to checkUpdateInternal
354
358
  that.oCheckUpdateCallToken = undefined;
355
- that.oType = oType;
359
+ PropertyBinding.prototype.setType.call(that, oType, that.sInternalType);
356
360
  if (oCallToken.forceUpdate || that.vValue !== vValue) {
357
361
  that.bInitial = false;
358
362
  that.vValue = vValue;
@@ -370,11 +374,15 @@ sap.ui.define([
370
374
  };
371
375
 
372
376
  /**
373
- * Deregisters the binding as change listener from its cache or operation binding ($Parameter).
377
+ * Deregisters the binding as change listener from its context if applicable. If not, it will be
378
+ * deregistered from the cache or operation binding ($Parameter).
374
379
  *
375
380
  * @private
376
381
  */
377
382
  ODataPropertyBinding.prototype.deregisterChangeListener = function () {
383
+ if (this.bRelative && this.oContext?.deregisterChangeListener?.(this)) {
384
+ return;
385
+ }
378
386
  if (this.sReducedPath) {
379
387
  this.doDeregisterChangeListener(this.sReducedPath, this);
380
388
  }
@@ -687,7 +695,7 @@ sap.ui.define([
687
695
  // Note: this.oType => this.sReducedPath
688
696
  && _Helper.getMetaPath(this.oModel.resolve(this.sPath, oContext))
689
697
  !== _Helper.getMetaPath(this.sReducedPath)) {
690
- this.oType = undefined;
698
+ PropertyBinding.prototype.setType.call(this, undefined, this.sInternalType);
691
699
  }
692
700
  this.sReducedPath = undefined;
693
701
  }
@@ -736,7 +744,10 @@ sap.ui.define([
736
744
  * be updated on the server, an error is logged to the console and added to the message manager
737
745
  * as a technical message. Unless preconditions fail synchronously, a
738
746
  * {@link sap.ui.model.odata.v4.ODataModel#event:propertyChange 'propertyChange'} event is
739
- * fired and provides a promise on the outcome of the asynchronous operation.
747
+ * fired and provides a promise on the outcome of the asynchronous operation. Since 1.122.0
748
+ * this method allows updates to the client-side annotation "@$ui5.context.isSelected". Note:
749
+ * Changing the value of a client-side annotation never triggers a PATCH request, no matter
750
+ * which <code>sGroupId</code> is given. Thus, it cannot be reverted via {@link #resetChanges}.
740
751
  *
741
752
  * @param {any} vValue
742
753
  * The new value which must be primitive
@@ -744,7 +755,8 @@ sap.ui.define([
744
755
  * The group ID to be used for this update call; if not specified, the update group ID for
745
756
  * this binding (or its relevant parent binding) is used, see {@link #getUpdateGroupId}.
746
757
  * Valid values are <code>undefined</code>, '$auto', '$auto.*', '$direct' or application group
747
- * IDs as specified in {@link sap.ui.model.odata.v4.ODataModel}.
758
+ * IDs as specified in {@link sap.ui.model.odata.v4.ODataModel}. When writing to a client-side
759
+ * annotation, this parameter is ignored.
748
760
  * @throws {Error} If
749
761
  * <ul>
750
762
  * <li> the binding's root binding is suspended.