@openui5/sap.m 1.103.0 → 1.105.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 (475) hide show
  1. package/.eslintrc.json +2 -3
  2. package/.reuse/dep5 +18 -1
  3. package/LICENSES/LicenseRef-tzdata-PublicDomain.txt +5 -0
  4. package/THIRDPARTY.txt +36 -3
  5. package/package.json +4 -4
  6. package/src/sap/m/.library +1 -1
  7. package/src/sap/m/AccButton.js +1 -1
  8. package/src/sap/m/ActionListItem.js +1 -1
  9. package/src/sap/m/ActionSelect.js +1 -1
  10. package/src/sap/m/ActionSheet.js +1 -1
  11. package/src/sap/m/App.js +2 -3
  12. package/src/sap/m/AssociativeOverflowToolbar.js +1 -1
  13. package/src/sap/m/Avatar.js +2 -2
  14. package/src/sap/m/BadgeEnabler.js +1 -2
  15. package/src/sap/m/Bar.js +11 -10
  16. package/src/sap/m/Breadcrumbs.js +2 -2
  17. package/src/sap/m/BusyDialog.js +1 -1
  18. package/src/sap/m/BusyIndicator.js +1 -1
  19. package/src/sap/m/Button.js +49 -10
  20. package/src/sap/m/ButtonRenderer.js +10 -2
  21. package/src/sap/m/Carousel.js +3 -4
  22. package/src/sap/m/CarouselLayout.js +1 -1
  23. package/src/sap/m/CheckBox.js +46 -6
  24. package/src/sap/m/CheckBoxRenderer.js +1 -0
  25. package/src/sap/m/ColorPalette.js +1 -1
  26. package/src/sap/m/ColorPalettePopover.js +1 -1
  27. package/src/sap/m/Column.js +1 -1
  28. package/src/sap/m/ColumnHeaderPopover.js +5 -7
  29. package/src/sap/m/ColumnListItem.js +1 -4
  30. package/src/sap/m/ColumnListItemRenderer.js +1 -2
  31. package/src/sap/m/ColumnPopoverActionItem.js +3 -3
  32. package/src/sap/m/ColumnPopoverCustomItem.js +3 -3
  33. package/src/sap/m/ColumnPopoverItem.js +3 -3
  34. package/src/sap/m/ColumnPopoverSelectListItem.js +3 -5
  35. package/src/sap/m/ColumnPopoverSortItem.js +3 -3
  36. package/src/sap/m/ComboBox.js +6 -5
  37. package/src/sap/m/ComboBoxBase.js +1 -5
  38. package/src/sap/m/ComboBoxBaseRenderer.js +2 -2
  39. package/src/sap/m/ComboBoxTextField.js +1 -7
  40. package/src/sap/m/ComboBoxTextFieldRenderer.js +19 -4
  41. package/src/sap/m/CustomDynamicDateOption.js +1 -1
  42. package/src/sap/m/CustomListItem.js +1 -1
  43. package/src/sap/m/CustomTile.js +1 -1
  44. package/src/sap/m/CustomTreeItem.js +3 -3
  45. package/src/sap/m/CustomTreeItemRenderer.js +2 -2
  46. package/src/sap/m/DatePicker.js +14 -24
  47. package/src/sap/m/DateRangeSelection.js +45 -38
  48. package/src/sap/m/DateTimeField.js +87 -20
  49. package/src/sap/m/DateTimeInput.js +1 -1
  50. package/src/sap/m/DateTimePicker.js +52 -28
  51. package/src/sap/m/Dialog.js +38 -1
  52. package/src/sap/m/DisplayListItem.js +1 -1
  53. package/src/sap/m/DraftIndicator.js +1 -1
  54. package/src/sap/m/DynamicDate.js +1 -1
  55. package/src/sap/m/DynamicDateFormat.js +2 -5
  56. package/src/sap/m/DynamicDateOption.js +43 -16
  57. package/src/sap/m/DynamicDateRange.js +49 -7
  58. package/src/sap/m/DynamicDateRangeRenderer.js +5 -2
  59. package/src/sap/m/DynamicDateUtil.js +23 -2
  60. package/src/sap/m/DynamicDateValueHelpUIType.js +1 -1
  61. package/src/sap/m/ExpandableText.js +1 -1
  62. package/src/sap/m/FacetFilter.js +2 -2
  63. package/src/sap/m/FacetFilterItem.js +1 -1
  64. package/src/sap/m/FacetFilterList.js +4 -4
  65. package/src/sap/m/FeedContent.js +1 -1
  66. package/src/sap/m/FeedInput.js +1 -1
  67. package/src/sap/m/FeedListItem.js +1 -1
  68. package/src/sap/m/FeedListItemAction.js +1 -1
  69. package/src/sap/m/Fiori20Adapter.js +2 -2
  70. package/src/sap/m/FlexBox.js +1 -1
  71. package/src/sap/m/FlexItemData.js +1 -1
  72. package/src/sap/m/FormattedText.js +1 -1
  73. package/src/sap/m/GenericTag.js +1 -1
  74. package/src/sap/m/GenericTile.js +67 -16
  75. package/src/sap/m/GenericTileLineModeRenderer.js +4 -4
  76. package/src/sap/m/GenericTileRenderer.js +16 -4
  77. package/src/sap/m/GroupHeaderListItem.js +1 -1
  78. package/src/sap/m/GrowingEnablement.js +37 -11
  79. package/src/sap/m/GrowingList.js +1 -1
  80. package/src/sap/m/HBox.js +1 -1
  81. package/src/sap/m/HeaderContainer.js +3 -3
  82. package/src/sap/m/HeaderContainerItemNavigator.js +3 -6
  83. package/src/sap/m/IconTabBar.js +54 -22
  84. package/src/sap/m/IconTabBarSelectList.js +1 -1
  85. package/src/sap/m/IconTabFilter.js +1 -1
  86. package/src/sap/m/IconTabFilterExpandButtonBadge.js +1 -1
  87. package/src/sap/m/IconTabHeader.js +5 -1
  88. package/src/sap/m/IconTabSeparator.js +1 -1
  89. package/src/sap/m/IllustratedMessage.js +64 -25
  90. package/src/sap/m/IllustratedMessageRenderer.js +10 -6
  91. package/src/sap/m/Illustration.js +1 -1
  92. package/src/sap/m/IllustrationPool.js +1 -0
  93. package/src/sap/m/IllustrationRenderer.js +1 -1
  94. package/src/sap/m/Image.js +2 -2
  95. package/src/sap/m/ImageContent.js +1 -1
  96. package/src/sap/m/Input.js +51 -7
  97. package/src/sap/m/InputBase.js +1 -1
  98. package/src/sap/m/InputBaseRenderer.js +2 -2
  99. package/src/sap/m/InputListItem.js +1 -1
  100. package/src/sap/m/InputRenderer.js +4 -0
  101. package/src/sap/m/Label.js +34 -4
  102. package/src/sap/m/LabelRenderer.js +7 -2
  103. package/src/sap/m/LightBox.js +1 -1
  104. package/src/sap/m/LightBoxItem.js +1 -1
  105. package/src/sap/m/Link.js +95 -10
  106. package/src/sap/m/LinkRenderer.js +26 -12
  107. package/src/sap/m/List.js +38 -1
  108. package/src/sap/m/ListBase.js +104 -40
  109. package/src/sap/m/ListBaseRenderer.js +7 -15
  110. package/src/sap/m/ListItemBase.js +40 -11
  111. package/src/sap/m/ListItemBaseRenderer.js +17 -6
  112. package/src/sap/m/ListRenderer.js +2 -2
  113. package/src/sap/m/MaskEnabler.js +52 -2
  114. package/src/sap/m/MaskInput.js +23 -1
  115. package/src/sap/m/MaskInputRule.js +1 -1
  116. package/src/sap/m/Menu.js +1 -1
  117. package/src/sap/m/MenuButton.js +1 -1
  118. package/src/sap/m/MenuItem.js +1 -1
  119. package/src/sap/m/MenuListItem.js +1 -1
  120. package/src/sap/m/MessageBox.js +1 -1
  121. package/src/sap/m/MessageItem.js +3 -4
  122. package/src/sap/m/MessageListItem.js +8 -4
  123. package/src/sap/m/MessagePage.js +1 -1
  124. package/src/sap/m/MessagePopover.js +4 -1
  125. package/src/sap/m/MessagePopoverItem.js +1 -1
  126. package/src/sap/m/MessageStrip.js +1 -1
  127. package/src/sap/m/MessageToast.js +1 -1
  128. package/src/sap/m/MessageView.js +1 -1
  129. package/src/sap/m/MultiComboBox.js +5 -16
  130. package/src/sap/m/MultiEditField.js +1 -1
  131. package/src/sap/m/MultiInput.js +1 -15
  132. package/src/sap/m/NavContainer.js +21 -19
  133. package/src/sap/m/NewsContent.js +2 -3
  134. package/src/sap/m/NotificationList.js +1 -1
  135. package/src/sap/m/NotificationListBase.js +1 -1
  136. package/src/sap/m/NotificationListGroup.js +3 -7
  137. package/src/sap/m/NotificationListGroupRenderer.js +1 -1
  138. package/src/sap/m/NotificationListItem.js +1 -1
  139. package/src/sap/m/NumericContent.js +1 -1
  140. package/src/sap/m/NumericInput.js +1 -1
  141. package/src/sap/m/ObjectAttribute.js +1 -1
  142. package/src/sap/m/ObjectHeader.js +3 -3
  143. package/src/sap/m/ObjectIdentifier.js +3 -3
  144. package/src/sap/m/ObjectListItem.js +7 -1
  145. package/src/sap/m/ObjectMarker.js +1 -1
  146. package/src/sap/m/ObjectNumber.js +2 -3
  147. package/src/sap/m/ObjectNumberRenderer.js +10 -3
  148. package/src/sap/m/ObjectStatus.js +2 -3
  149. package/src/sap/m/ObjectStatusRenderer.js +2 -2
  150. package/src/sap/m/OverflowToolbar.js +3 -8
  151. package/src/sap/m/OverflowToolbarAssociativePopover.js +1 -1
  152. package/src/sap/m/OverflowToolbarAssociativePopoverControls.js +3 -3
  153. package/src/sap/m/OverflowToolbarAssociativePopoverRenderer.js +2 -2
  154. package/src/sap/m/OverflowToolbarButton.js +1 -1
  155. package/src/sap/m/OverflowToolbarLayoutData.js +1 -1
  156. package/src/sap/m/OverflowToolbarToggleButton.js +1 -1
  157. package/src/sap/m/P13nAnyFilterItem.js +3 -3
  158. package/src/sap/m/P13nColumnsItem.js +3 -3
  159. package/src/sap/m/P13nColumnsPanel.js +3 -3
  160. package/src/sap/m/P13nConditionPanel.js +10 -3
  161. package/src/sap/m/P13nDialog.js +3 -3
  162. package/src/sap/m/P13nDimMeasureItem.js +3 -3
  163. package/src/sap/m/P13nDimMeasurePanel.js +3 -3
  164. package/src/sap/m/P13nFilterItem.js +3 -3
  165. package/src/sap/m/P13nFilterPanel.js +3 -3
  166. package/src/sap/m/P13nGroupItem.js +3 -3
  167. package/src/sap/m/P13nGroupPanel.js +3 -3
  168. package/src/sap/m/P13nItem.js +3 -3
  169. package/src/sap/m/P13nOperationsHelper.js +2 -2
  170. package/src/sap/m/P13nPanel.js +3 -3
  171. package/src/sap/m/P13nSelectionItem.js +3 -3
  172. package/src/sap/m/P13nSelectionPanel.js +3 -3
  173. package/src/sap/m/P13nSortItem.js +3 -3
  174. package/src/sap/m/P13nSortPanel.js +3 -3
  175. package/src/sap/m/PDFViewer.js +2 -2
  176. package/src/sap/m/PDFViewerRenderer.js +1 -0
  177. package/src/sap/m/Page.js +1 -3
  178. package/src/sap/m/PageAccessibleLandmarkInfo.js +1 -1
  179. package/src/sap/m/PagingButton.js +1 -1
  180. package/src/sap/m/Panel.js +1 -1
  181. package/src/sap/m/PlanningCalendar.js +4 -16
  182. package/src/sap/m/PlanningCalendarHeader.js +1 -5
  183. package/src/sap/m/PlanningCalendarLegend.js +1 -1
  184. package/src/sap/m/PlanningCalendarRow.js +1 -1
  185. package/src/sap/m/PlanningCalendarView.js +1 -1
  186. package/src/sap/m/Popover.js +11 -4
  187. package/src/sap/m/ProgressIndicator.js +1 -1
  188. package/src/sap/m/ProgressIndicatorRenderer.js +6 -3
  189. package/src/sap/m/PullToRefresh.js +1 -1
  190. package/src/sap/m/QuickView.js +3 -3
  191. package/src/sap/m/QuickViewBase.js +3 -3
  192. package/src/sap/m/QuickViewCard.js +3 -3
  193. package/src/sap/m/QuickViewGroup.js +1 -1
  194. package/src/sap/m/QuickViewGroupElement.js +3 -3
  195. package/src/sap/m/QuickViewPage.js +3 -3
  196. package/src/sap/m/RadioButton.js +47 -20
  197. package/src/sap/m/RadioButtonGroup.js +29 -19
  198. package/src/sap/m/RangeSlider.js +1 -3
  199. package/src/sap/m/RatingIndicator.js +8 -1
  200. package/src/sap/m/RatingIndicatorRenderer.js +13 -4
  201. package/src/sap/m/ResponsivePopover.js +3 -3
  202. package/src/sap/m/ResponsiveScale.js +1 -1
  203. package/src/sap/m/ScrollBar.js +1 -1
  204. package/src/sap/m/ScrollContainer.js +1 -1
  205. package/src/sap/m/SearchField.js +1 -1
  206. package/src/sap/m/SegmentedButton.js +1 -1
  207. package/src/sap/m/SegmentedButtonItem.js +1 -1
  208. package/src/sap/m/Select.js +7 -13
  209. package/src/sap/m/SelectDialog.js +2 -1
  210. package/src/sap/m/SelectDialogBase.js +1 -1
  211. package/src/sap/m/SelectList.js +1 -1
  212. package/src/sap/m/SelectListRenderer.js +2 -2
  213. package/src/sap/m/SelectionDetails.js +2 -2
  214. package/src/sap/m/SelectionDetailsFacade.js +2 -2
  215. package/src/sap/m/SelectionDetailsItem.js +1 -1
  216. package/src/sap/m/SelectionDetailsItemLine.js +1 -1
  217. package/src/sap/m/Shell.js +1 -1
  218. package/src/sap/m/SimpleFixFlex.js +1 -1
  219. package/src/sap/m/SinglePlanningCalendar.js +5 -7
  220. package/src/sap/m/SinglePlanningCalendarDayView.js +1 -1
  221. package/src/sap/m/SinglePlanningCalendarGrid.js +1 -7
  222. package/src/sap/m/SinglePlanningCalendarMonthGrid.js +1 -1
  223. package/src/sap/m/SinglePlanningCalendarMonthGridRenderer.js +0 -2
  224. package/src/sap/m/SinglePlanningCalendarMonthView.js +1 -1
  225. package/src/sap/m/SinglePlanningCalendarView.js +1 -1
  226. package/src/sap/m/SinglePlanningCalendarWeekView.js +1 -1
  227. package/src/sap/m/SinglePlanningCalendarWorkWeekView.js +1 -1
  228. package/src/sap/m/SlideTile.js +30 -5
  229. package/src/sap/m/Slider.js +1 -1
  230. package/src/sap/m/SliderTooltip.js +1 -3
  231. package/src/sap/m/SliderTooltipBase.js +1 -1
  232. package/src/sap/m/SliderTooltipBaseRenderer.js +2 -2
  233. package/src/sap/m/SliderTooltipContainer.js +1 -1
  234. package/src/sap/m/SliderTooltipContainerRenderer.js +2 -2
  235. package/src/sap/m/SliderTooltipRenderer.js +2 -2
  236. package/src/sap/m/SplitApp.js +1 -1
  237. package/src/sap/m/SplitButton.js +1 -3
  238. package/src/sap/m/SplitContainer.js +1 -5
  239. package/src/sap/m/StandardDynamicDateOption.js +9 -15
  240. package/src/sap/m/StandardListItem.js +1 -1
  241. package/src/sap/m/StandardListItemRenderer.js +2 -2
  242. package/src/sap/m/StandardTile.js +1 -1
  243. package/src/sap/m/StandardTreeItem.js +1 -1
  244. package/src/sap/m/StepInput.js +1 -1
  245. package/src/sap/m/SuggestionItem.js +1 -1
  246. package/src/sap/m/SuggestionsPopover.js +4 -2
  247. package/src/sap/m/Switch.js +1 -1
  248. package/src/sap/m/TabContainer.js +1 -1
  249. package/src/sap/m/TabContainerItem.js +1 -1
  250. package/src/sap/m/TabStrip.js +1 -1
  251. package/src/sap/m/TabStripItem.js +1 -1
  252. package/src/sap/m/Table.js +11 -9
  253. package/src/sap/m/TablePersoController.js +1 -1
  254. package/src/sap/m/TablePersoDialog.js +6 -15
  255. package/src/sap/m/TablePersoProvider.js +1 -1
  256. package/src/sap/m/TableRenderer.js +2 -9
  257. package/src/sap/m/TableSelectDialog.js +1 -1
  258. package/src/sap/m/Text.js +1 -1
  259. package/src/sap/m/TextArea.js +1 -1
  260. package/src/sap/m/TextAreaRenderer.js +1 -2
  261. package/src/sap/m/Tile.js +1 -1
  262. package/src/sap/m/TileContainer.js +1 -1
  263. package/src/sap/m/TileContent.js +8 -9
  264. package/src/sap/m/TileContentRenderer.js +3 -3
  265. package/src/sap/m/TimePicker.js +43 -6
  266. package/src/sap/m/TimePickerClock.js +2 -3
  267. package/src/sap/m/TimePickerClocks.js +5 -3
  268. package/src/sap/m/TimePickerClocksRenderer.js +1 -1
  269. package/src/sap/m/TimePickerInputs.js +1 -1
  270. package/src/sap/m/TimePickerInputsRenderer.js +1 -1
  271. package/src/sap/m/TimePickerInternals.js +1 -1
  272. package/src/sap/m/TimePickerSlider.js +1 -1
  273. package/src/sap/m/TimePickerSliders.js +3 -5
  274. package/src/sap/m/Title.js +1 -1
  275. package/src/sap/m/TitlePropagationSupport.js +1 -1
  276. package/src/sap/m/ToggleButton.js +2 -2
  277. package/src/sap/m/Token.js +1 -3
  278. package/src/sap/m/Tokenizer.js +1 -1
  279. package/src/sap/m/Toolbar.js +1 -1
  280. package/src/sap/m/ToolbarLayoutData.js +1 -1
  281. package/src/sap/m/ToolbarSeparator.js +1 -1
  282. package/src/sap/m/ToolbarSpacer.js +1 -1
  283. package/src/sap/m/Tree.js +8 -1
  284. package/src/sap/m/TreeItemBase.js +1 -1
  285. package/src/sap/m/TreeRenderer.js +0 -10
  286. package/src/sap/m/UploadCollection.js +2 -2
  287. package/src/sap/m/UploadCollectionItem.js +1 -1
  288. package/src/sap/m/UploadCollectionParameter.js +1 -1
  289. package/src/sap/m/UploadCollectionToolbarPlaceholder.js +1 -1
  290. package/src/sap/m/VBox.js +1 -1
  291. package/src/sap/m/ValueStateHeader.js +1 -1
  292. package/src/sap/m/VariantItem.js +160 -0
  293. package/src/sap/m/VariantManagement.js +665 -570
  294. package/src/sap/m/ViewSettingsCustomItem.js +1 -1
  295. package/src/sap/m/ViewSettingsCustomTab.js +1 -1
  296. package/src/sap/m/ViewSettingsDialog.js +1 -1
  297. package/src/sap/m/ViewSettingsFilterItem.js +1 -1
  298. package/src/sap/m/ViewSettingsItem.js +1 -1
  299. package/src/sap/m/VisibleItem.js +1 -1
  300. package/src/sap/m/WheelSlider.js +1 -1
  301. package/src/sap/m/WheelSliderContainer.js +1 -1
  302. package/src/sap/m/Wizard.js +1 -3
  303. package/src/sap/m/WizardProgressNavigator.js +1 -1
  304. package/src/sap/m/WizardStep.js +1 -1
  305. package/src/sap/m/changeHandler/AddTableColumn.js +12 -13
  306. package/src/sap/m/changeHandler/ChangeLinkTarget.js +2 -3
  307. package/src/sap/m/changeHandler/CombineButtons.js +19 -22
  308. package/src/sap/m/changeHandler/MoveTableColumns.js +6 -6
  309. package/src/sap/m/changeHandler/SelectIconTabBarFilter.js +5 -5
  310. package/src/sap/m/changeHandler/SplitMenuButton.js +7 -6
  311. package/src/sap/m/delegate/DateNavigation.js +0 -4
  312. package/src/sap/m/designtime/Link.designtime.js +19 -11
  313. package/src/sap/m/designtime/VariantManagement.designtime.js +36 -26
  314. package/src/sap/m/flexibility/EngineFlex.js +48 -0
  315. package/src/sap/m/inputUtils/selectionRange.js +1 -2
  316. package/src/sap/m/library.js +30 -6
  317. package/src/sap/m/messagebundle.properties +30 -3
  318. package/src/sap/m/messagebundle_ar.properties +26 -8
  319. package/src/sap/m/messagebundle_bg.properties +20 -2
  320. package/src/sap/m/messagebundle_ca.properties +19 -1
  321. package/src/sap/m/messagebundle_cs.properties +20 -2
  322. package/src/sap/m/messagebundle_cy.properties +21 -3
  323. package/src/sap/m/messagebundle_da.properties +19 -1
  324. package/src/sap/m/messagebundle_de.properties +19 -1
  325. package/src/sap/m/messagebundle_el.properties +22 -4
  326. package/src/sap/m/messagebundle_en.properties +21 -3
  327. package/src/sap/m/messagebundle_en_GB.properties +21 -3
  328. package/src/sap/m/messagebundle_en_US_sappsd.properties +20 -2
  329. package/src/sap/m/messagebundle_en_US_saprigi.properties +18 -2
  330. package/src/sap/m/messagebundle_en_US_saptrc.properties +20 -2
  331. package/src/sap/m/messagebundle_es.properties +20 -2
  332. package/src/sap/m/messagebundle_es_MX.properties +19 -1
  333. package/src/sap/m/messagebundle_et.properties +19 -1
  334. package/src/sap/m/messagebundle_fi.properties +23 -5
  335. package/src/sap/m/messagebundle_fr.properties +20 -2
  336. package/src/sap/m/messagebundle_fr_CA.properties +21 -3
  337. package/src/sap/m/messagebundle_hi.properties +21 -3
  338. package/src/sap/m/messagebundle_hr.properties +23 -5
  339. package/src/sap/m/messagebundle_hu.properties +21 -3
  340. package/src/sap/m/messagebundle_id.properties +21 -3
  341. package/src/sap/m/messagebundle_it.properties +20 -2
  342. package/src/sap/m/messagebundle_iw.properties +21 -3
  343. package/src/sap/m/messagebundle_ja.properties +20 -2
  344. package/src/sap/m/messagebundle_kk.properties +19 -1
  345. package/src/sap/m/messagebundle_ko.properties +27 -9
  346. package/src/sap/m/messagebundle_lt.properties +19 -1
  347. package/src/sap/m/messagebundle_lv.properties +19 -1
  348. package/src/sap/m/messagebundle_ms.properties +20 -2
  349. package/src/sap/m/messagebundle_nl.properties +33 -15
  350. package/src/sap/m/messagebundle_no.properties +21 -3
  351. package/src/sap/m/messagebundle_pl.properties +20 -2
  352. package/src/sap/m/messagebundle_pt.properties +24 -6
  353. package/src/sap/m/messagebundle_pt_PT.properties +19 -1
  354. package/src/sap/m/messagebundle_ro.properties +20 -2
  355. package/src/sap/m/messagebundle_ru.properties +20 -2
  356. package/src/sap/m/messagebundle_sh.properties +20 -2
  357. package/src/sap/m/messagebundle_sk.properties +19 -1
  358. package/src/sap/m/messagebundle_sl.properties +20 -2
  359. package/src/sap/m/messagebundle_sv.properties +19 -1
  360. package/src/sap/m/messagebundle_th.properties +52 -34
  361. package/src/sap/m/messagebundle_tr.properties +23 -5
  362. package/src/sap/m/messagebundle_uk.properties +20 -2
  363. package/src/sap/m/messagebundle_vi.properties +20 -2
  364. package/src/sap/m/messagebundle_zh_CN.properties +20 -2
  365. package/src/sap/m/messagebundle_zh_TW.properties +19 -1
  366. package/src/sap/m/p13n/AbstractContainer.js +7 -7
  367. package/src/sap/m/p13n/AbstractContainerItem.js +4 -4
  368. package/src/sap/m/p13n/BasePanel.js +8 -7
  369. package/src/sap/m/p13n/Container.js +3 -3
  370. package/src/sap/m/p13n/Engine.js +1254 -0
  371. package/src/sap/m/p13n/FlexUtil.js +161 -0
  372. package/src/sap/m/p13n/GroupController.js +145 -0
  373. package/src/sap/m/p13n/GroupPanel.js +12 -5
  374. package/src/sap/m/p13n/MetadataHelper.js +35 -0
  375. package/src/sap/m/p13n/PersistenceProvider.js +160 -0
  376. package/src/sap/m/p13n/Popup.js +49 -12
  377. package/src/sap/m/p13n/QueryPanel.js +3 -3
  378. package/src/sap/m/p13n/SelectionController.js +548 -0
  379. package/src/sap/m/p13n/SelectionPanel.js +15 -3
  380. package/src/sap/m/p13n/SortController.js +153 -0
  381. package/src/sap/m/p13n/SortPanel.js +13 -3
  382. package/src/sap/m/p13n/enum/PersistenceMode.js +43 -0
  383. package/src/sap/m/p13n/handler/xConfigHandler.js +166 -0
  384. package/src/sap/m/p13n/modification/FlexModificationHandler.js +90 -0
  385. package/src/sap/m/p13n/modification/LocalStorageModificationHandler.js +75 -0
  386. package/src/sap/m/p13n/modification/ModificationHandler.js +143 -0
  387. package/src/sap/m/p13n/modules/AdaptationProvider.js +67 -0
  388. package/src/sap/m/p13n/modules/DefaultProviderRegistry.js +147 -0
  389. package/src/sap/m/p13n/modules/StateHandlerRegistry.js +101 -0
  390. package/src/sap/m/p13n/modules/UIManager.js +230 -0
  391. package/src/sap/m/p13n/modules/xConfigAPI.js +288 -0
  392. package/src/sap/m/plugins/CellSelector.js +741 -0
  393. package/src/sap/m/plugins/ColumnResizer.js +15 -1
  394. package/src/sap/m/plugins/DataStateIndicator.js +2 -2
  395. package/src/sap/m/plugins/PasteProvider.js +1 -1
  396. package/src/sap/m/plugins/PluginBase.js +4 -3
  397. package/src/sap/m/semantic/AddAction.js +1 -1
  398. package/src/sap/m/semantic/CancelAction.js +1 -1
  399. package/src/sap/m/semantic/DeleteAction.js +1 -1
  400. package/src/sap/m/semantic/DetailPage.js +1 -1
  401. package/src/sap/m/semantic/DiscussInJamAction.js +1 -1
  402. package/src/sap/m/semantic/EditAction.js +1 -1
  403. package/src/sap/m/semantic/FavoriteAction.js +1 -1
  404. package/src/sap/m/semantic/FilterAction.js +1 -1
  405. package/src/sap/m/semantic/FilterSelect.js +1 -1
  406. package/src/sap/m/semantic/FlagAction.js +1 -1
  407. package/src/sap/m/semantic/ForwardAction.js +1 -1
  408. package/src/sap/m/semantic/FullscreenPage.js +1 -1
  409. package/src/sap/m/semantic/GroupAction.js +1 -1
  410. package/src/sap/m/semantic/GroupSelect.js +1 -1
  411. package/src/sap/m/semantic/MainAction.js +1 -1
  412. package/src/sap/m/semantic/MasterPage.js +1 -1
  413. package/src/sap/m/semantic/MessagesIndicator.js +1 -1
  414. package/src/sap/m/semantic/MultiSelectAction.js +1 -1
  415. package/src/sap/m/semantic/NegativeAction.js +1 -1
  416. package/src/sap/m/semantic/OpenInAction.js +1 -1
  417. package/src/sap/m/semantic/PositiveAction.js +1 -1
  418. package/src/sap/m/semantic/PrintAction.js +1 -1
  419. package/src/sap/m/semantic/SaveAction.js +1 -1
  420. package/src/sap/m/semantic/Segment.js +1 -1
  421. package/src/sap/m/semantic/SegmentedContainer.js +1 -1
  422. package/src/sap/m/semantic/SemanticButton.js +1 -1
  423. package/src/sap/m/semantic/SemanticConfiguration.js +3 -4
  424. package/src/sap/m/semantic/SemanticControl.js +1 -1
  425. package/src/sap/m/semantic/SemanticOverflowToolbarButton.js +1 -1
  426. package/src/sap/m/semantic/SemanticOverflowToolbarToggleButton.js +1 -1
  427. package/src/sap/m/semantic/SemanticPage.js +1 -1
  428. package/src/sap/m/semantic/SemanticSelect.js +1 -1
  429. package/src/sap/m/semantic/SemanticToggleButton.js +1 -3
  430. package/src/sap/m/semantic/SendEmailAction.js +1 -1
  431. package/src/sap/m/semantic/SendMessageAction.js +1 -1
  432. package/src/sap/m/semantic/ShareInJamAction.js +1 -1
  433. package/src/sap/m/semantic/ShareMenu.js +1 -1
  434. package/src/sap/m/semantic/ShareMenuPage.js +1 -1
  435. package/src/sap/m/semantic/SortAction.js +1 -1
  436. package/src/sap/m/semantic/SortSelect.js +1 -1
  437. package/src/sap/m/table/Util.js +14 -7
  438. package/src/sap/m/table/columnmenu/ActionItem.js +1 -1
  439. package/src/sap/m/table/columnmenu/Entry.js +1 -1
  440. package/src/sap/m/table/columnmenu/Item.js +1 -1
  441. package/src/sap/m/table/columnmenu/ItemBase.js +1 -1
  442. package/src/sap/m/table/columnmenu/Menu.js +8 -2
  443. package/src/sap/m/table/columnmenu/QuickAction.js +1 -1
  444. package/src/sap/m/table/columnmenu/QuickActionBase.js +1 -1
  445. package/src/sap/m/table/columnmenu/QuickActionItem.js +1 -1
  446. package/src/sap/m/table/columnmenu/QuickGroup.js +21 -3
  447. package/src/sap/m/table/columnmenu/QuickGroupItem.js +13 -1
  448. package/src/sap/m/table/columnmenu/QuickSort.js +1 -3
  449. package/src/sap/m/table/columnmenu/QuickSortItem.js +1 -3
  450. package/src/sap/m/table/columnmenu/QuickTotal.js +21 -3
  451. package/src/sap/m/table/columnmenu/QuickTotalItem.js +13 -1
  452. package/src/sap/m/themes/base/Breadcrumbs.less +6 -0
  453. package/src/sap/m/themes/base/Button.less +0 -1
  454. package/src/sap/m/themes/base/CellSelector.less +9 -0
  455. package/src/sap/m/themes/base/CheckBox.less +1 -0
  456. package/src/sap/m/themes/base/Dialog.less +1 -0
  457. package/src/sap/m/themes/base/DynamicDateRange.less +4 -0
  458. package/src/sap/m/themes/base/FeedContent.less +13 -5
  459. package/src/sap/m/themes/base/GenericTile.less +49 -9
  460. package/src/sap/m/themes/base/IllustratedMessage.less +7 -0
  461. package/src/sap/m/themes/base/NewsContent.less +6 -0
  462. package/src/sap/m/themes/base/NumericContent.less +1 -1
  463. package/src/sap/m/themes/base/ObjectStatus.less +2 -1
  464. package/src/sap/m/themes/base/OverflowToolbarAssociativePopover.less +5 -1
  465. package/src/sap/m/themes/base/SelectList.less +0 -5
  466. package/src/sap/m/themes/base/SinglePlanningCalendarGrid.less +7 -0
  467. package/src/sap/m/themes/base/SlideTile.less +35 -4
  468. package/src/sap/m/themes/base/Table.less +11 -2
  469. package/src/sap/m/themes/base/TileContent.less +17 -0
  470. package/src/sap/m/themes/base/library.source.less +1 -0
  471. package/src/sap/m/upload/UploadSet.js +110 -21
  472. package/src/sap/m/upload/UploadSetItem.js +18 -7
  473. package/src/sap/m/upload/UploadSetRenderer.js +8 -16
  474. package/src/sap/m/upload/UploadSetToolbarPlaceholder.js +1 -1
  475. package/src/sap/m/upload/Uploader.js +1 -2
package/src/sap/m/Link.js CHANGED
@@ -7,28 +7,30 @@
7
7
  // Provides control sap.m.Link.
8
8
  sap.ui.define([
9
9
  "./library",
10
+ "sap/ui/core/Core",
10
11
  "sap/ui/core/Control",
11
12
  "sap/ui/core/InvisibleText",
12
13
  "sap/ui/core/EnabledPropagator",
14
+ "sap/ui/core/AccessKeysEnablement",
13
15
  "sap/ui/core/LabelEnablement",
14
16
  "sap/ui/core/library",
15
17
  "sap/ui/Device",
16
18
  "./LinkRenderer",
17
19
  "sap/ui/events/KeyCodes",
18
- "sap/base/Log",
19
20
  "sap/base/security/URLListValidator"
20
21
  ],
21
22
  function(
22
23
  library,
24
+ Core,
23
25
  Control,
24
26
  InvisibleText,
25
27
  EnabledPropagator,
28
+ AccessKeysEnablement,
26
29
  LabelEnablement,
27
30
  coreLibrary,
28
31
  Device,
29
32
  LinkRenderer,
30
33
  KeyCodes,
31
- Log,
32
34
  URLListValidator
33
35
  ) {
34
36
  "use strict";
@@ -42,6 +44,9 @@ function(
42
44
  // shortcut for sap.ui.core.aria.HasPopup
43
45
  var AriaHasPopup = coreLibrary.aria.HasPopup;
44
46
 
47
+ // shortcut for sap.m.LinkAccessibleRole
48
+ var LinkAccessibleRole = library.LinkAccessibleRole;
49
+
45
50
  // shortcut for sap.m.EmptyIndicator
46
51
  var EmptyIndicatorMode = library.EmptyIndicatorMode;
47
52
 
@@ -78,10 +83,10 @@ function(
78
83
  * @see {@link fiori:https://experience.sap.com/fiori-design-web/link/ Link}
79
84
  *
80
85
  * @extends sap.ui.core.Control
81
- * @implements sap.ui.core.IShrinkable, sap.ui.core.IFormContent, sap.ui.core.ITitleContent
86
+ * @implements sap.ui.core.IShrinkable, sap.ui.core.IFormContent, sap.ui.core.ITitleContent, sap.ui.core.IAccessKeySupport
82
87
  *
83
88
  * @author SAP SE
84
- * @version 1.103.0
89
+ * @version 1.105.0
85
90
  *
86
91
  * @constructor
87
92
  * @public
@@ -94,7 +99,8 @@ function(
94
99
  interfaces : [
95
100
  "sap.ui.core.IShrinkable",
96
101
  "sap.ui.core.IFormContent",
97
- "sap.ui.core.ITitleContent"
102
+ "sap.ui.core.ITitleContent",
103
+ "sap.ui.core.IAccessKeySupport"
98
104
  ],
99
105
  library : "sap.m",
100
106
  designtime: "sap/m/designtime/Link.designtime",
@@ -135,8 +141,9 @@ function(
135
141
  width : {type : "sap.ui.core.CSSSize", group : "Dimension", defaultValue : null},
136
142
 
137
143
  /**
138
- * Defines the link target URI. Supports standard hyperlink behavior. If a JavaScript action should be triggered,
139
- * this should not be set, but instead an event handler for the <code>press</code> event should be registered.
144
+ * Defines the link target URI. Supports standard hyperlink behavior.
145
+ * <b>Note:</b> Don't set <code>href</code> property if an action should be triggered by the link. Instead set <code>accessibleRole</code>
146
+ * property to <code>LinkAccessibleRole.Button</code> and register a <code>press</code> event handler.
140
147
  */
141
148
  href : {type : "sap.ui.core.URI", group : "Data", defaultValue : null},
142
149
 
@@ -194,12 +201,38 @@ function(
194
201
  */
195
202
  ariaHasPopup : {type : "sap.ui.core.aria.HasPopup", group : "Accessibility", defaultValue : AriaHasPopup.None},
196
203
 
204
+ /**
205
+ * Describes the accessibility role of the link:<ul>
206
+ * <li><code>LinkAccessibleRole.Default</code> - a navagation is expected to the location given in <code>href</code> property</li>
207
+ * <li><code>LinkAccessibleRole.Button</code> - there will be <code>role</code> attribute with value "Button" rendered. In this scenario the <code>href</code>
208
+ * property value shouldn't be set as navigation isn't expected to occur.</li></ul>
209
+ *
210
+ * @since 1.104.0
211
+ */
212
+ accessibleRole : {type : "sap.m.LinkAccessibleRole", group : "Accessibility", defaultValue : LinkAccessibleRole.Default},
213
+
197
214
  /**
198
215
  * Specifies if an empty indicator should be displayed when there is no text.
199
216
  *
200
217
  * @since 1.89
201
218
  */
202
- emptyIndicatorMode: { type: "sap.m.EmptyIndicatorMode", group: "Appearance", defaultValue: EmptyIndicatorMode.Off }
219
+ emptyIndicatorMode: { type: "sap.m.EmptyIndicatorMode", group: "Appearance", defaultValue: EmptyIndicatorMode.Off },
220
+
221
+ /**
222
+ * Indicates whether the access keys ref of the control should be highlighted.
223
+ * NOTE: this property is used only when access keys feature is turned on.
224
+ *
225
+ * @private
226
+ */
227
+ highlightAccKeysRef: { type: "boolean", defaultValue: false, visibility: "hidden" },
228
+
229
+ /**
230
+ * Indicates which keyboard key should be pressed to focus the access key ref
231
+ * NOTE: this property is used only when access keys feature is turned on.
232
+ *
233
+ * @private
234
+ */
235
+ accesskey: { type: "string", defaultValue: "", visibility: "hidden" }
203
236
  },
204
237
  associations : {
205
238
 
@@ -245,6 +278,10 @@ function(
245
278
 
246
279
  EnabledPropagator.call(Link.prototype); // inherit "disabled" state from parent controls
247
280
 
281
+ Link.prototype.init = function () {
282
+ AccessKeysEnablement.registerControl(this);
283
+ };
284
+
248
285
  /**
249
286
  * Required adaptations before rendering.
250
287
  *
@@ -252,6 +289,39 @@ function(
252
289
  */
253
290
  Link.prototype.onBeforeRendering = function() {};
254
291
 
292
+ Link.prototype.onAfterRendering = function() {
293
+ var oLinkElement = this.getDomRef(),
294
+ oTextBinding = this.getBinding("text");
295
+
296
+ if (!oLinkElement) {
297
+ return;
298
+ }
299
+
300
+ // Update the default no-navigation href attribute value via JS,
301
+ // so we don't confuse the Chrome browser accessibility mappings,
302
+ // in case there is double rendering resulting from a "text" property binding.
303
+ // Remove the href if there's no text. Otherwise virtual cursor would stop on the empty link. BCP 2070055617
304
+ if (oTextBinding) {
305
+ if (!oTextBinding.bInitial && !oTextBinding.getValue()) {
306
+ this.getDomRef().removeAttribute("href");
307
+ }
308
+ } else if (!this.getText()) {
309
+ this.getDomRef().removeAttribute("href");
310
+ }
311
+ };
312
+
313
+ Link.prototype.getAccessKeysFocusTarget = function () {
314
+ return this.getFocusDomRef();
315
+ };
316
+
317
+ Link.prototype.onAccKeysHighlightStart = function () {
318
+ setRefLabelsHighlightAccKeysRef.call(this, true);
319
+ };
320
+
321
+ Link.prototype.onAccKeysHighlightEnd = function () {
322
+ setRefLabelsHighlightAccKeysRef.call(this, false);
323
+ };
324
+
255
325
  /**
256
326
  * Handle the key down event for SPACE
257
327
  * SHIFT or ESCAPE on pressed SPACE cancels the action
@@ -405,7 +475,8 @@ function(
405
475
  sEmphasizedInfo = this.getEmphasized() ? oResourceBundle.getText("LINK_EMPHASIZED") : "",
406
476
  sSubtleInfo = this.getSubtle() ? oResourceBundle.getText("LINK_SUBTLE") : "",
407
477
  sText = this.getText(),
408
- sDescription = sText;
478
+ sDescription = sText,
479
+ sAccessibleRole = this.getAccessibleRole();
409
480
 
410
481
  if (sText) {
411
482
  sEmphasizedInfo && (sDescription += " " + sEmphasizedInfo);
@@ -413,7 +484,7 @@ function(
413
484
  }
414
485
 
415
486
  return {
416
- role: "link",
487
+ role: sAccessibleRole === LinkAccessibleRole.Default ? "link" : sAccessibleRole,
417
488
  type: sText ? oResourceBundle.getText("ACC_CTR_TYPE_LINK") : undefined,
418
489
  description: sDescription,
419
490
  focusable: this.getEnabled(),
@@ -454,6 +525,20 @@ function(
454
525
  return !bAlreadyHasSelfReference && (aAriaLabelledBy.length > 0 || bHasReferencingLabels || bAllowEnhancingByParent);
455
526
  };
456
527
 
528
+ var setRefLabelsHighlightAccKeysRef = function (bHighlightAccKeysRef) {
529
+ var aLabels = this.getAriaLabelledBy();
530
+
531
+ if (aLabels.length) {
532
+ var oLabel = Core.byId(aLabels[0]);
533
+
534
+ oLabel.setProperty("highlightAccKeysRef", bHighlightAccKeysRef);
535
+
536
+ if (oLabel.getText && oLabel.getText()) {
537
+ this.setProperty("accesskey", oLabel.getText()[0].toLowerCase());
538
+ }
539
+ }
540
+ };
541
+
457
542
  return Link;
458
543
 
459
544
  });
@@ -7,11 +7,12 @@
7
7
  sap.ui.define([
8
8
  "sap/ui/core/Renderer",
9
9
  "sap/ui/core/library",
10
+ 'sap/ui/core/AccessKeysEnablement',
10
11
  "sap/ui/util/defaultLinkTypes",
11
12
  './library',
12
13
  'sap/ui/core/Core'
13
14
  ],
14
- function(Renderer, coreLibrary, defaultLinkTypes, mobileLibrary, Core) {
15
+ function(Renderer, coreLibrary, AccessKeysEnablement, defaultLinkTypes, mobileLibrary, Core) {
15
16
  "use strict";
16
17
 
17
18
  // shortcut for sap.ui.core.TextDirection
@@ -20,6 +21,9 @@
20
21
  // shortcut for sap.ui.core.aria.HasPopup
21
22
  var AriaHasPopup = coreLibrary.aria.HasPopup;
22
23
 
24
+ // shortcut for sap.m.LinkAccessibleRole
25
+ var LinkAccessibleRole = mobileLibrary.LinkAccessibleRole;
26
+
23
27
  /**
24
28
  * Link renderer
25
29
  * @namespace
@@ -46,15 +50,16 @@
46
50
  sTextAlign = Renderer.getTextAlign(oControl.getTextAlign(), sTextDir),
47
51
  bShouldHaveOwnLabelledBy = oControl._determineSelfReferencePresence(),
48
52
  sHasPopupType = oControl.getAriaHasPopup(),
49
- sHref = oControl.getHref(),
50
53
  sRel = defaultLinkTypes(oControl.getRel(), oControl.getTarget()),
54
+ sHref = oControl.getHref(),
55
+ sAccessibleRole = oControl.getAccessibleRole(),
51
56
  oAccAttributes = {
52
57
  labelledby: bShouldHaveOwnLabelledBy ? {value: oControl.getId(), append: true } : undefined,
53
58
  haspopup: (sHasPopupType === AriaHasPopup.None) ? null : sHasPopupType.toLowerCase()
54
59
  },
55
- bIsValid = sHref && oControl._isHrefValid(sHref),
56
60
  bEnabled = oControl.getEnabled(),
57
- sTypeSemanticInfo = "";
61
+ sTypeSemanticInfo = "",
62
+ sAcccessKey = oControl.getProperty("accesskey");
58
63
 
59
64
  // Link is rendered as a "<a>" element
60
65
  oRm.openStart("a", oControl);
@@ -70,6 +75,23 @@
70
75
  sTypeSemanticInfo += " " + oControl._sAriaLinkEmphasizedId;
71
76
  }
72
77
 
78
+ if (sAcccessKey) {
79
+ oRm.attr("data-ui5-accesskey", sAcccessKey);
80
+ }
81
+
82
+ switch (sAccessibleRole) {
83
+ case LinkAccessibleRole.Button:
84
+ oAccAttributes.role = LinkAccessibleRole.Button;
85
+ break;
86
+ default:
87
+ // Set a valid non empty value for the href attribute representing that there is no navigation,
88
+ // so we don't confuse the screen readers.
89
+ /*eslint-disable no-script-url */
90
+ sHref = sHref && oControl._isHrefValid(sHref) && oControl.getEnabled() ? sHref : "javascript:void(0)";
91
+ }
92
+
93
+ sHref && oRm.attr("href", sHref);
94
+
73
95
  oAccAttributes.describedby = sTypeSemanticInfo ? {value: sTypeSemanticInfo.trim(), append: true} : undefined;
74
96
 
75
97
  if (!bEnabled) {
@@ -86,14 +108,6 @@
86
108
  oRm.attr("title", oControl.getTooltip_AsString());
87
109
  }
88
110
 
89
- /* set href only if link is enabled - BCP incident 1570020625 */
90
- if (bIsValid && bEnabled) {
91
- oRm.attr("href", sHref);
92
- } else if (oControl.getText()) {
93
- // Add href only if there's text. Otherwise virtual cursor would stop on the empty link. BCP 2070055617
94
- oRm.attr("href", "");
95
- }
96
-
97
111
  if (oControl.getTarget()) {
98
112
  oRm.attr("target", oControl.getTarget());
99
113
  }
package/src/sap/m/List.js CHANGED
@@ -30,7 +30,7 @@ sap.ui.define(["./library", "./ListBase", "./ListRenderer"],
30
30
  * @extends sap.m.ListBase
31
31
  *
32
32
  * @author SAP SE
33
- * @version 1.103.0
33
+ * @version 1.105.0
34
34
  *
35
35
  * @constructor
36
36
  * @public
@@ -51,6 +51,43 @@ sap.ui.define(["./library", "./ListBase", "./ListRenderer"],
51
51
  }
52
52
  }});
53
53
 
54
+ List.prototype.getAriaRole = function() {
55
+ return this._sAriaRole || "list";
56
+ };
57
+
58
+ /**
59
+ * Applies the aria <code>role</code> attribute to the control.
60
+ *
61
+ * Supported values are:
62
+ * <ul>
63
+ * <li><code>list</code>: This is the default since version 1.105. The rendered items will have the <code>role="listitem"</code>.</li>
64
+ * <li><code>listbox</code>: Legacy support. The rendererd items will have the <code>role="option"</code>.</li>
65
+ * </ul>
66
+ * <b>Note:</b> This method must be called before the control renders.
67
+ * @param {string} sRole role attribute for the control
68
+ * @protected
69
+ * @ui5-restricted
70
+ * @since 1.105
71
+ */
72
+ List.prototype.applyAriaRole = function(sRole) {
73
+ this._sAriaRole = sRole;
74
+ };
75
+
76
+ List.prototype.enhanceAccessibilityState = function(oElement, mAriaProps) {
77
+ ListBase.prototype.enhanceAccessibilityState.apply(this, arguments);
78
+
79
+ // update listitem Accessibility state according to the list's role attribute
80
+ if (this.getAriaRole() === "listbox" && oElement.isA("sap.m.ListItemBase")) {
81
+ mAriaProps.roledescription = null;
82
+ mAriaProps.role = "option";
83
+ mAriaProps.owns = null;
84
+
85
+ if (oElement.isSelectable()) {
86
+ mAriaProps.selected = oElement.getSelected();
87
+ }
88
+ }
89
+ };
90
+
54
91
  return List;
55
92
 
56
93
  });
@@ -22,6 +22,7 @@ sap.ui.define([
22
22
  "sap/base/strings/capitalize",
23
23
  "sap/ui/thirdparty/jquery",
24
24
  "sap/base/Log",
25
+ "sap/ui/core/InvisibleMessage",
25
26
  "sap/ui/dom/jquery/control", // jQuery Plugin "control"
26
27
  "sap/ui/dom/jquery/Selectors", // jQuery custom selectors ":sapTabbable"
27
28
  "sap/ui/dom/jquery/Aria" // jQuery Plugin "addAriaLabelledBy", "removeAriaLabelledBy"
@@ -42,7 +43,8 @@ function(
42
43
  ListBaseRenderer,
43
44
  capitalize,
44
45
  jQuery,
45
- Log
46
+ Log,
47
+ InvisibleMessage
46
48
  ) {
47
49
  "use strict";
48
50
 
@@ -90,7 +92,7 @@ function(
90
92
  * @extends sap.ui.core.Control
91
93
  *
92
94
  * @author SAP SE
93
- * @version 1.103.0
95
+ * @version 1.105.0
94
96
  *
95
97
  * @constructor
96
98
  * @public
@@ -590,7 +592,6 @@ function(
590
592
  };
591
593
 
592
594
  ListBase.prototype.exit = function () {
593
- this._oSelectedItem = null;
594
595
  this._aNavSections = [];
595
596
  this._aSelectedPaths = [];
596
597
  this._destroyGrowingDelegate();
@@ -624,6 +625,9 @@ function(
624
625
  // Special handling for "AutoExpandSelect" of the V4 ODataModel.
625
626
  if (oEventInfo && oEventInfo.detailedReason === "AddVirtualContext") {
626
627
  createVirtualItem(this);
628
+ if (this._oGrowingDelegate) {
629
+ this._oGrowingDelegate.reset(true);
630
+ }
627
631
  return;
628
632
  } else if (oEventInfo && oEventInfo.detailedReason === "RemoveVirtualContext") {
629
633
  destroyVirtualItem(this);
@@ -759,9 +763,6 @@ function(
759
763
  return this;
760
764
  }
761
765
 
762
- // clean up the selection
763
- this._oSelectedItem = null;
764
-
765
766
  // suppress the synchronous DOM removal of the aggregation destroy
766
767
  this.destroyAggregation("items", "KeepDom");
767
768
 
@@ -777,20 +778,6 @@ function(
777
778
  return this;
778
779
  };
779
780
 
780
-
781
- ListBase.prototype.removeAllItems = function(sAggregationName) {
782
- this._oSelectedItem = null;
783
- return this.removeAllAggregation("items");
784
- };
785
-
786
- ListBase.prototype.removeItem = function(vItem) {
787
- var oItem = this.removeAggregation("items", vItem);
788
- if (oItem && oItem === this._oSelectedItem) {
789
- this._oSelectedItem = null;
790
- }
791
- return oItem;
792
- };
793
-
794
781
  ListBase.prototype.getItems = function(bReadOnly) {
795
782
  if (bReadOnly) {
796
783
  return this.mAggregations["items"] || [];
@@ -1085,7 +1072,7 @@ function(
1085
1072
  * Returns growing information as object with "actual" and "total" keys.
1086
1073
  * Note: This function returns "null" if "growing" feature is disabled.
1087
1074
  *
1088
- * @type object
1075
+ * @returns {{actual: int, total: int} | null}
1089
1076
  * @public
1090
1077
  * @since 1.16
1091
1078
  * @ui5-metamodel This method also will be described in the UI5 (legacy) designtime metamodel
@@ -1449,7 +1436,22 @@ function(
1449
1436
  }
1450
1437
  };
1451
1438
 
1439
+ ListBase.prototype.onItemRemoved = function(oItem) {
1440
+ oItem._bGroupHeader = false;
1441
+ if (this._oLastGroupHeader == oItem) {
1442
+ this._oLastGroupHeader = null;
1443
+ }
1444
+ if (this._oSelectedItem == oItem) {
1445
+ this._oSelectedItem = null;
1446
+ }
1447
+ };
1448
+
1452
1449
  ListBase.prototype.onItemInserted = function(oItem, bSelectedDelayed) {
1450
+ // trigger is also an item of the ListBase which should not me mapped to the groupHeaders
1451
+ if (this._oLastGroupHeader && !oItem.isGroupHeader()) {
1452
+ this._oLastGroupHeader.setGroupedItem(oItem);
1453
+ }
1454
+
1453
1455
  if (bSelectedDelayed) {
1454
1456
  // item was already selected before inserted to the list
1455
1457
  this.onItemSelectedChange(oItem, true);
@@ -1523,10 +1525,15 @@ function(
1523
1525
  return;
1524
1526
  }
1525
1527
 
1526
- if (sMode === ListMode.MultiSelect) {
1527
- this._fireSelectionChangeEvent([oListItem]);
1528
- } else if (this._bSelectionMode && bSelected) {
1528
+ if (sMode === ListMode.MultiSelect || (this._bSelectionMode && bSelected)) {
1529
1529
  this._fireSelectionChangeEvent([oListItem]);
1530
+
1531
+ // announce the selection state changes
1532
+ // but only announce if the document.activeElement is the listItem control, else selection control should announce the selection change
1533
+ if (this.getAriaRole() === "list" && document.activeElement === oListItem.getDomRef()) {
1534
+ var oResourceBundle = Core.getLibraryResourceBundle("sap.m");
1535
+ InvisibleMessage.getInstance().announce(bSelected ? oResourceBundle.getText("LIST_ITEM_SELECTED") : oResourceBundle.getText("LIST_ITEM_NOT_SELECTED"), "Assertive");
1536
+ }
1530
1537
  }
1531
1538
  };
1532
1539
 
@@ -1928,17 +1935,31 @@ function(
1928
1935
 
1929
1936
  ListBase.prototype.addItemGroup = function(oGroup, oHeader, bSuppressInvalidate) {
1930
1937
  if (!oHeader) {
1931
- oHeader = new GroupHeaderListItem();
1932
- // setter is used to avoid complex binding parser checks which happens when setting values in constructor (ManagedObject)
1933
- // i.e., to ignore binding strings "{" "[" from the value being set
1934
- oHeader.setTitle(oGroup.text || oGroup.key);
1938
+ oHeader = this.getGroupHeaderTemplate(oGroup);
1935
1939
  }
1936
1940
 
1937
1941
  oHeader._bGroupHeader = true;
1938
1942
  this.addAggregation("items", oHeader, bSuppressInvalidate);
1943
+ this.setLastGroupHeader(oHeader);
1944
+ return oHeader;
1945
+ };
1946
+
1947
+ ListBase.prototype.getGroupHeaderTemplate = function(oGroup) {
1948
+ var oHeader = new GroupHeaderListItem();
1949
+ // setter is used to avoid complex binding parser checks which happens when setting values in constructor (ManagedObject)
1950
+ // i.e., to ignore binding strings "{" "[" from the value being set
1951
+ oHeader.setTitle(oGroup.text || oGroup.key);
1939
1952
  return oHeader;
1940
1953
  };
1941
1954
 
1955
+ ListBase.prototype.setLastGroupHeader = function(oGroupHeader) {
1956
+ this._oLastGroupHeader = oGroupHeader;
1957
+ };
1958
+
1959
+ ListBase.prototype.getLastGroupHeader = function() {
1960
+ return this._oLastGroupHeader;
1961
+ };
1962
+
1942
1963
  ListBase.prototype.removeGroupHeaders = function(bSuppressInvalidate) {
1943
1964
  this.getItems(true).forEach(function(oItem) {
1944
1965
  if (oItem.isGroupHeader()) {
@@ -1990,15 +2011,25 @@ function(
1990
2011
  ListBase.prototype.getAccessbilityPosition = function(oItem) {
1991
2012
  var iSetSize = 0,
1992
2013
  aItems = this.getVisibleItems(),
1993
- iPosInset = aItems.indexOf(oItem) + 1,
2014
+ sAriaRole = this.getAriaRole(),
2015
+ // exclude group headers from item count for role="list" || role="listbox" only
2016
+ bExcludeGroupHeaderFromCount = sAriaRole === "list" || sAriaRole === "listbox";
2017
+
2018
+ if (bExcludeGroupHeaderFromCount) {
2019
+ aItems = aItems.filter(function(oItem) {
2020
+ return !oItem.isGroupHeader();
2021
+ });
2022
+ }
2023
+
2024
+ var iPosInset = aItems.indexOf(oItem) + 1,
1994
2025
  oBinding = this.getBinding("items");
1995
2026
 
1996
2027
  // use binding length if list is in scroll to load growing mode
1997
2028
  if (this.getGrowing() && this.getGrowingScrollToLoad() && oBinding && oBinding.isLengthFinal()) {
1998
2029
  iSetSize = oBinding.getLength();
1999
- if (oBinding.isGrouped()) {
2030
+ if (oBinding.isGrouped() && !bExcludeGroupHeaderFromCount) {
2000
2031
  iSetSize += aItems.filter(function(oItem) {
2001
- return oItem.isGroupHeader() && oItem.getVisible();
2032
+ return oItem.isGroupHeader();
2002
2033
  }).length;
2003
2034
  }
2004
2035
  } else {
@@ -2021,25 +2052,26 @@ function(
2021
2052
  return;
2022
2053
  }
2023
2054
 
2024
- var oItemDomRef = oItem.getDomRef(),
2025
- mPosition = this.getAccessbilityPosition(oItem);
2055
+ var oItemDomRef = oItem.getDomRef();
2026
2056
 
2027
2057
  if (!oItem.getContentAnnouncement) {
2028
2058
  // let the screen reader announce the whole content
2029
2059
  this.getNavigationRoot().setAttribute("aria-activedescendant", oItemDomRef.id);
2030
- oItemDomRef.setAttribute("aria-posinset", mPosition.posInset);
2031
- oItemDomRef.setAttribute("aria-setsize", mPosition.setSize);
2032
2060
  } else {
2033
2061
  // prepare the announcement for the screen reader
2034
2062
  var oAccInfo = oItem.getAccessibilityInfo(),
2035
2063
  oBundle = Core.getLibraryResourceBundle("sap.m"),
2036
- sDescription = oAccInfo.type + " . ";
2064
+ sDescription = "";
2065
+
2066
+ // when items have the role="listitem", aria-roledescription attribute containing the "type" info is already added to DOM,
2067
+ // hence there is no need to add this information again to the custom announcement
2068
+ if (this.getAriaRole() !== "list") {
2069
+ sDescription += oAccInfo.type + " . ";
2070
+ }
2037
2071
 
2038
- if (!Device.browser.chrome || this.isA("sap.m.Table")) {
2072
+ if (this.isA("sap.m.Table")) {
2073
+ var mPosition = this.getAccessbilityPosition(oItem);
2039
2074
  sDescription += oBundle.getText("LIST_ITEM_POSITION", [mPosition.posInset, mPosition.setSize]) + " . ";
2040
- } else {
2041
- oItemDomRef.setAttribute("aria-posinset", mPosition.posInset);
2042
- oItemDomRef.setAttribute("aria-setsize", mPosition.setSize);
2043
2075
  }
2044
2076
 
2045
2077
  sDescription += oAccInfo.description;
@@ -2860,6 +2892,38 @@ function(
2860
2892
  }
2861
2893
  };
2862
2894
 
2895
+ /**
2896
+ * Return the <code>role</code> attribute of the control.
2897
+ * @returns {string} the <code>role</code> attribute of the control
2898
+ * @protected
2899
+ * @ui5-restricted
2900
+ * @since 1.105
2901
+ */
2902
+ ListBase.prototype.getAriaRole = function() {
2903
+ return "list";
2904
+ };
2905
+
2906
+ /**
2907
+ * This method is a hook for the RenderManager that gets called
2908
+ * during the rendering of child Controls. It allows to add,
2909
+ * remove and update existing accessibility attributes (ARIA) of
2910
+ * those controls.
2911
+ *
2912
+ * @param {sap.ui.core.Control} oElement - The Control that gets rendered by the RenderManager
2913
+ * @param {object} mAriaProps - The mapping of "aria-" prefixed attributes
2914
+ * @protected
2915
+ */
2916
+ ListBase.prototype.enhanceAccessibilityState = function(oElement, mAriaProps) {
2917
+ if (!oElement.isA("sap.m.ListItemBase") || oElement.isGroupHeader()) {
2918
+ return;
2919
+ }
2920
+
2921
+ // add aria-posinset & aria-setsize attributes to listitem DOM (not for group headers)
2922
+ var mPosition = this.getAccessbilityPosition(oElement);
2923
+ mAriaProps.posinset = mPosition.posInset;
2924
+ mAriaProps.setsize = mPosition.setSize;
2925
+ };
2926
+
2863
2927
  return ListBase;
2864
2928
 
2865
2929
  });
@@ -236,22 +236,13 @@ sap.ui.define(["sap/m/library", "sap/ui/Device", "sap/ui/core/InvisibleText", ".
236
236
  rm.accessibilityState(oControl, this.getAccessibilityState(oControl));
237
237
  };
238
238
 
239
- /**
240
- * Returns aria accessibility role
241
- *
242
- * @param {sap.m.ListBase} oControl an object representation of the control
243
- * @returns {string}
244
- */
245
- ListBaseRenderer.getAriaRole = function(oControl) {
246
- return "listbox";
247
- };
248
-
249
239
  /**
250
240
  * Returns aria accessibility role for the no data entry.
241
+ * @param {sap.m.ListBase} oControl the control instance
251
242
  *
252
- * @returns {string}
243
+ * @returns {string|null} the no data role attribute
253
244
  */
254
- ListBaseRenderer.getNoDataAriaRole = function() {
245
+ ListBaseRenderer.getNoDataAriaRole = function(oControl) {
255
246
  return null;
256
247
  };
257
248
 
@@ -292,12 +283,13 @@ sap.ui.define(["sap/m/library", "sap/ui/Device", "sap/ui/core/InvisibleText", ".
292
283
  * Returns the accessibility state of the control
293
284
  *
294
285
  * @param {sap.m.ListBase} oControl an object representation of the control
286
+ * @returns {object} the accessibility state object
295
287
  */
296
288
  ListBaseRenderer.getAccessibilityState = function(oControl) {
297
- var sRole = this.getAriaRole(oControl);
289
+ var sRole = oControl.getAriaRole();
298
290
  return {
299
291
  role : sRole,
300
- multiselectable : (sRole && oControl._bSelectionMode) ? oControl.getMode() == "MultiSelect" : undefined,
292
+ multiselectable : (sRole === "listbox" && oControl._bSelectionMode) ? oControl.getMode() == "MultiSelect" : undefined,
301
293
  labelledby : {
302
294
  value : this.getAriaLabelledBy(oControl),
303
295
  append : true
@@ -328,7 +320,7 @@ sap.ui.define(["sap/m/library", "sap/ui/Device", "sap/ui/core/InvisibleText", ".
328
320
  ListBaseRenderer.renderNoData = function(rm, oControl) {
329
321
  rm.openStart("li", oControl.getId("nodata"));
330
322
  rm.attr("tabindex", oControl.getKeyboardMode() == ListKeyboardMode.Navigation ? -1 : 0);
331
- var sAriaRole = this.getNoDataAriaRole();
323
+ var sAriaRole = this.getNoDataAriaRole(oControl);
332
324
  if (sAriaRole) {
333
325
  rm.attr("role", sAriaRole);
334
326
  }