@openui5/sap.m 1.136.3 → 1.139.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 (559) hide show
  1. package/README.md +1 -1
  2. package/REUSE.toml +8 -29
  3. package/THIRDPARTY.txt +72 -90
  4. package/package.json +5 -5
  5. package/src/sap/m/.library +1 -1
  6. package/src/sap/m/AccButton.js +1 -1
  7. package/src/sap/m/ActionListItem.js +1 -1
  8. package/src/sap/m/ActionSelect.js +1 -1
  9. package/src/sap/m/ActionSheet.js +1 -1
  10. package/src/sap/m/ActionTile.js +3 -2
  11. package/src/sap/m/ActionTileContent.js +1 -1
  12. package/src/sap/m/AdditionalTextButton.js +1 -1
  13. package/src/sap/m/App.js +1 -1
  14. package/src/sap/m/AssociativeOverflowToolbar.js +1 -1
  15. package/src/sap/m/Avatar.js +3 -3
  16. package/src/sap/m/Bar.js +1 -1
  17. package/src/sap/m/BarInPageEnabler.js +5 -6
  18. package/src/sap/m/Breadcrumbs.js +1 -1
  19. package/src/sap/m/BusyDialog.js +1 -1
  20. package/src/sap/m/BusyIndicator.js +1 -1
  21. package/src/sap/m/Button.js +4 -3
  22. package/src/sap/m/Carousel.js +1 -1
  23. package/src/sap/m/CarouselLayout.js +1 -1
  24. package/src/sap/m/CheckBox.js +1 -1
  25. package/src/sap/m/ColorPalette.js +1 -1
  26. package/src/sap/m/ColorPalettePopover.js +1 -1
  27. package/src/sap/m/ColorPaletteRenderer.js +2 -1
  28. package/src/sap/m/Column.js +1 -1
  29. package/src/sap/m/ColumnHeaderPopover.js +1 -1
  30. package/src/sap/m/ColumnListItem.js +24 -10
  31. package/src/sap/m/ColumnListItemRenderer.js +10 -0
  32. package/src/sap/m/ColumnPopoverActionItem.js +1 -1
  33. package/src/sap/m/ColumnPopoverCustomItem.js +1 -1
  34. package/src/sap/m/ColumnPopoverItem.js +1 -1
  35. package/src/sap/m/ColumnPopoverSelectListItem.js +1 -1
  36. package/src/sap/m/ColumnPopoverSortItem.js +1 -1
  37. package/src/sap/m/ComboBox.js +1 -1
  38. package/src/sap/m/ComboBoxBase.js +1 -1
  39. package/src/sap/m/ComboBoxBaseRenderer.js +1 -9
  40. package/src/sap/m/ComboBoxTextField.js +1 -1
  41. package/src/sap/m/ContentConfig.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 +1 -1
  45. package/src/sap/m/DatePicker.js +1 -21
  46. package/src/sap/m/DateRangeSelection.js +4 -3
  47. package/src/sap/m/DateTimeField.js +1 -1
  48. package/src/sap/m/DateTimeInput.js +1 -1
  49. package/src/sap/m/DateTimePicker.js +1 -1
  50. package/src/sap/m/Dialog.js +5 -1
  51. package/src/sap/m/DialogRenderer.js +14 -6
  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/DynamicDateOption.js +1 -1
  56. package/src/sap/m/DynamicDateRange.js +1 -1
  57. package/src/sap/m/DynamicDateValueHelpUIType.js +1 -1
  58. package/src/sap/m/ExpandableText.js +1 -1
  59. package/src/sap/m/FacetFilter.js +1 -1
  60. package/src/sap/m/FacetFilterItem.js +1 -1
  61. package/src/sap/m/FacetFilterList.js +1 -1
  62. package/src/sap/m/FeedContent.js +1 -1
  63. package/src/sap/m/FeedInput.js +65 -16
  64. package/src/sap/m/FeedInputRenderer.js +7 -0
  65. package/src/sap/m/FeedListItem.js +11 -9
  66. package/src/sap/m/FeedListItemAction.js +5 -19
  67. package/src/sap/m/Fiori20Adapter.js +2 -2
  68. package/src/sap/m/FlexBox.js +1 -1
  69. package/src/sap/m/FlexItemData.js +1 -1
  70. package/src/sap/m/FormattedText.js +1 -1
  71. package/src/sap/m/GenericTag.js +1 -1
  72. package/src/sap/m/GenericTile.js +27 -10
  73. package/src/sap/m/GroupHeaderListItem.js +6 -2
  74. package/src/sap/m/GrowingList.js +1 -1
  75. package/src/sap/m/HBox.js +1 -1
  76. package/src/sap/m/HeaderContainer.js +1 -1
  77. package/src/sap/m/HeaderContainerItemNavigator.js +1 -1
  78. package/src/sap/m/IconTabBar.js +1 -1
  79. package/src/sap/m/IconTabBarSelectList.js +1 -1
  80. package/src/sap/m/IconTabFilter.js +9 -1
  81. package/src/sap/m/IconTabFilterExpandButtonBadge.js +1 -1
  82. package/src/sap/m/IconTabHeader.js +58 -54
  83. package/src/sap/m/IconTabSeparator.js +1 -1
  84. package/src/sap/m/IllustratedMessage.js +48 -10
  85. package/src/sap/m/Illustration.js +9 -2
  86. package/src/sap/m/IllustrationRenderer.js +14 -7
  87. package/src/sap/m/Image.js +1 -1
  88. package/src/sap/m/ImageContent.js +1 -1
  89. package/src/sap/m/Input.js +2 -2
  90. package/src/sap/m/InputBase.js +1 -1
  91. package/src/sap/m/InputListItem.js +1 -1
  92. package/src/sap/m/InputRenderer.js +1 -14
  93. package/src/sap/m/Label.js +1 -1
  94. package/src/sap/m/LightBox.js +1 -1
  95. package/src/sap/m/LightBoxItem.js +1 -1
  96. package/src/sap/m/Link.js +4 -27
  97. package/src/sap/m/LinkRenderer.js +4 -3
  98. package/src/sap/m/LinkTileContent.js +1 -1
  99. package/src/sap/m/List.js +2 -2
  100. package/src/sap/m/ListBase.js +43 -2
  101. package/src/sap/m/ListBaseRenderer.js +3 -1
  102. package/src/sap/m/ListItemAction.js +189 -0
  103. package/src/sap/m/ListItemActionBase.js +52 -0
  104. package/src/sap/m/ListItemBase.js +88 -17
  105. package/src/sap/m/ListItemBaseRenderer.js +34 -3
  106. package/src/sap/m/ListRenderer.js +1 -1
  107. package/src/sap/m/MaskEnabler.js +1 -1
  108. package/src/sap/m/MaskInput.js +1 -1
  109. package/src/sap/m/MaskInputRule.js +1 -1
  110. package/src/sap/m/Menu.js +422 -877
  111. package/src/sap/m/MenuButton.js +17 -78
  112. package/src/sap/m/MenuItem.js +459 -300
  113. package/src/sap/m/MenuItemGroup.js +9 -353
  114. package/src/sap/m/MenuItemRenderer.js +220 -0
  115. package/src/sap/m/MenuListItem.js +1 -1
  116. package/src/sap/m/MenuWrapper.js +720 -0
  117. package/src/sap/m/MenuWrapperRenderer.js +143 -0
  118. package/src/sap/m/MessageBox.js +2 -2
  119. package/src/sap/m/MessageItem.js +1 -1
  120. package/src/sap/m/MessageListItem.js +1 -1
  121. package/src/sap/m/MessagePage.js +1 -1
  122. package/src/sap/m/MessagePopover.js +1 -1
  123. package/src/sap/m/MessagePopoverItem.js +1 -1
  124. package/src/sap/m/MessageStrip.js +3 -2
  125. package/src/sap/m/MessageToast.js +8 -6
  126. package/src/sap/m/MessageView.js +1 -1
  127. package/src/sap/m/MultiComboBox.js +9 -8
  128. package/src/sap/m/MultiComboBoxRenderer.js +1 -9
  129. package/src/sap/m/MultiEditField.js +1 -1
  130. package/src/sap/m/MultiInput.js +18 -7
  131. package/src/sap/m/NavContainer.js +1 -1
  132. package/src/sap/m/NewsContent.js +1 -1
  133. package/src/sap/m/NotificationList.js +1 -1
  134. package/src/sap/m/NotificationListBase.js +1 -1
  135. package/src/sap/m/NotificationListGroup.js +1 -1
  136. package/src/sap/m/NotificationListItem.js +12 -1
  137. package/src/sap/m/NumericContent.js +1 -1
  138. package/src/sap/m/NumericInput.js +3 -3
  139. package/src/sap/m/ObjectAttribute.js +1 -1
  140. package/src/sap/m/ObjectHeader.js +1 -1
  141. package/src/sap/m/ObjectIdentifier.js +1 -1
  142. package/src/sap/m/ObjectListItem.js +1 -1
  143. package/src/sap/m/ObjectMarker.js +5 -2
  144. package/src/sap/m/ObjectNumber.js +13 -1
  145. package/src/sap/m/ObjectNumberRenderer.js +13 -4
  146. package/src/sap/m/ObjectStatus.js +1 -1
  147. package/src/sap/m/ObjectStatusRenderer.js +1 -1
  148. package/src/sap/m/OverflowToolbar.js +3 -2
  149. package/src/sap/m/OverflowToolbarAssociativePopover.js +1 -1
  150. package/src/sap/m/OverflowToolbarButton.js +1 -1
  151. package/src/sap/m/OverflowToolbarLayoutData.js +1 -1
  152. package/src/sap/m/OverflowToolbarMenuButton.js +1 -1
  153. package/src/sap/m/OverflowToolbarToggleButton.js +1 -1
  154. package/src/sap/m/OverflowToolbarTokenizer.js +315 -0
  155. package/src/sap/m/OverflowToolbarTokenizerRenderer.js +84 -0
  156. package/src/sap/m/P13nAnyFilterItem.js +1 -1
  157. package/src/sap/m/P13nColumnsItem.js +1 -1
  158. package/src/sap/m/P13nColumnsPanel.js +1 -1
  159. package/src/sap/m/P13nConditionPanel.js +1 -1
  160. package/src/sap/m/P13nDialog.js +1 -1
  161. package/src/sap/m/P13nDimMeasureItem.js +1 -1
  162. package/src/sap/m/P13nDimMeasurePanel.js +1 -1
  163. package/src/sap/m/P13nFilterItem.js +1 -1
  164. package/src/sap/m/P13nFilterPanel.js +1 -1
  165. package/src/sap/m/P13nGroupItem.js +1 -1
  166. package/src/sap/m/P13nGroupPanel.js +1 -1
  167. package/src/sap/m/P13nItem.js +1 -1
  168. package/src/sap/m/P13nPanel.js +1 -1
  169. package/src/sap/m/P13nSelectionItem.js +1 -1
  170. package/src/sap/m/P13nSelectionPanel.js +1 -1
  171. package/src/sap/m/P13nSortItem.js +1 -1
  172. package/src/sap/m/P13nSortPanel.js +1 -1
  173. package/src/sap/m/PDFViewer.js +2 -2
  174. package/src/sap/m/Page.js +6 -33
  175. package/src/sap/m/PageAccessibleLandmarkInfo.js +1 -1
  176. package/src/sap/m/PageRenderer.js +3 -1
  177. package/src/sap/m/PagingButton.js +1 -1
  178. package/src/sap/m/Panel.js +1 -1
  179. package/src/sap/m/PlanningCalendar.js +109 -234
  180. package/src/sap/m/PlanningCalendarHeader.js +37 -17
  181. package/src/sap/m/PlanningCalendarLegend.js +1 -1
  182. package/src/sap/m/PlanningCalendarRow.js +1 -1
  183. package/src/sap/m/PlanningCalendarView.js +1 -1
  184. package/src/sap/m/Popover.js +8 -1
  185. package/src/sap/m/PopoverRenderer.js +1 -1
  186. package/src/sap/m/ProgressIndicator.js +2 -4
  187. package/src/sap/m/PullToRefresh.js +1 -1
  188. package/src/sap/m/QuickView.js +1 -1
  189. package/src/sap/m/QuickViewBase.js +1 -1
  190. package/src/sap/m/QuickViewCard.js +1 -1
  191. package/src/sap/m/QuickViewGroup.js +1 -1
  192. package/src/sap/m/QuickViewGroupElement.js +1 -1
  193. package/src/sap/m/QuickViewPage.js +1 -1
  194. package/src/sap/m/RadioButton.js +1 -1
  195. package/src/sap/m/RadioButtonGroup.js +1 -1
  196. package/src/sap/m/RangeSlider.js +1 -1
  197. package/src/sap/m/RatingIndicator.js +1 -1
  198. package/src/sap/m/ResponsivePopover.js +1 -1
  199. package/src/sap/m/ResponsiveScale.js +1 -1
  200. package/src/sap/m/ScrollBar.js +1 -1
  201. package/src/sap/m/ScrollContainer.js +1 -1
  202. package/src/sap/m/SearchField.js +1 -1
  203. package/src/sap/m/SegmentedButton.js +1 -1
  204. package/src/sap/m/SegmentedButtonItem.js +1 -1
  205. package/src/sap/m/Select.js +1 -1
  206. package/src/sap/m/SelectDialog.js +1 -1
  207. package/src/sap/m/SelectDialogBase.js +22 -1
  208. package/src/sap/m/SelectList.js +1 -1
  209. package/src/sap/m/SelectionDetails.js +1 -1
  210. package/src/sap/m/SelectionDetailsFacade.js +2 -2
  211. package/src/sap/m/SelectionDetailsItem.js +1 -1
  212. package/src/sap/m/SelectionDetailsItemLine.js +1 -1
  213. package/src/sap/m/Shell.js +1 -1
  214. package/src/sap/m/SimpleFixFlex.js +1 -1
  215. package/src/sap/m/SinglePlanningCalendar.js +14 -3
  216. package/src/sap/m/SinglePlanningCalendarDayView.js +1 -1
  217. package/src/sap/m/SinglePlanningCalendarGrid.js +29 -2
  218. package/src/sap/m/SinglePlanningCalendarGridRenderer.js +17 -16
  219. package/src/sap/m/SinglePlanningCalendarMonthGrid.js +11 -2
  220. package/src/sap/m/SinglePlanningCalendarMonthView.js +1 -1
  221. package/src/sap/m/SinglePlanningCalendarView.js +1 -1
  222. package/src/sap/m/SinglePlanningCalendarWeekView.js +1 -1
  223. package/src/sap/m/SinglePlanningCalendarWorkWeekView.js +1 -1
  224. package/src/sap/m/SlideTile.js +1 -1
  225. package/src/sap/m/Slider.js +1 -1
  226. package/src/sap/m/SliderTooltip.js +1 -1
  227. package/src/sap/m/SliderTooltipBase.js +1 -1
  228. package/src/sap/m/SliderTooltipContainer.js +1 -1
  229. package/src/sap/m/SplitApp.js +6 -2
  230. package/src/sap/m/SplitButton.js +1 -1
  231. package/src/sap/m/SplitButtonRenderer.js +8 -6
  232. package/src/sap/m/SplitContainer.js +1 -1
  233. package/src/sap/m/StandardDynamicDateOption.js +1 -1
  234. package/src/sap/m/StandardListItem.js +1 -1
  235. package/src/sap/m/StandardTile.js +1 -1
  236. package/src/sap/m/StandardTreeItem.js +1 -1
  237. package/src/sap/m/StepInput.js +6 -1
  238. package/src/sap/m/Suggest.js +3 -1
  239. package/src/sap/m/SuggestionItem.js +1 -1
  240. package/src/sap/m/SuggestionsPopover.js +1 -2
  241. package/src/sap/m/Switch.js +19 -3
  242. package/src/sap/m/TabContainer.js +1 -1
  243. package/src/sap/m/TabContainerItem.js +1 -1
  244. package/src/sap/m/TabStrip.js +9 -3
  245. package/src/sap/m/TabStripItem.js +1 -1
  246. package/src/sap/m/Table.js +21 -27
  247. package/src/sap/m/TablePersoController.js +1 -1
  248. package/src/sap/m/TablePersoDialog.js +1 -1
  249. package/src/sap/m/TablePersoProvider.js +1 -1
  250. package/src/sap/m/TableRenderer.js +11 -3
  251. package/src/sap/m/TableSelectDialog.js +1 -1
  252. package/src/sap/m/Text.js +1 -1
  253. package/src/sap/m/TextArea.js +2 -2
  254. package/src/sap/m/Tile.js +1 -1
  255. package/src/sap/m/TileContainer.js +1 -1
  256. package/src/sap/m/TileContent.js +1 -1
  257. package/src/sap/m/TileInfo.js +1 -1
  258. package/src/sap/m/TileRenderer.js +2 -2
  259. package/src/sap/m/TimePicker.js +1 -1
  260. package/src/sap/m/TimePickerClock.js +1 -1
  261. package/src/sap/m/TimePickerClocks.js +1 -1
  262. package/src/sap/m/TimePickerInputs.js +1 -1
  263. package/src/sap/m/TimePickerInternals.js +1 -1
  264. package/src/sap/m/TimePickerSlider.js +1 -1
  265. package/src/sap/m/TimePickerSliders.js +1 -1
  266. package/src/sap/m/Title.js +1 -1
  267. package/src/sap/m/TitlePropagationSupport.js +1 -1
  268. package/src/sap/m/ToggleButton.js +1 -1
  269. package/src/sap/m/Token.js +1 -1
  270. package/src/sap/m/Tokenizer.js +88 -28
  271. package/src/sap/m/TokenizerRenderer.js +29 -15
  272. package/src/sap/m/Toolbar.js +14 -8
  273. package/src/sap/m/ToolbarLayoutData.js +1 -1
  274. package/src/sap/m/ToolbarSeparator.js +1 -1
  275. package/src/sap/m/ToolbarSpacer.js +1 -1
  276. package/src/sap/m/Tree.js +1 -1
  277. package/src/sap/m/TreeItemBase.js +1 -1
  278. package/src/sap/m/UploadCollection.js +1 -1
  279. package/src/sap/m/UploadCollectionItem.js +1 -1
  280. package/src/sap/m/UploadCollectionParameter.js +1 -1
  281. package/src/sap/m/UploadCollectionToolbarPlaceholder.js +1 -1
  282. package/src/sap/m/VBox.js +1 -1
  283. package/src/sap/m/ValueStateHeader.js +1 -1
  284. package/src/sap/m/VariantManagement.js +1 -1
  285. package/src/sap/m/ViewSettingsCustomItem.js +1 -1
  286. package/src/sap/m/ViewSettingsCustomTab.js +1 -1
  287. package/src/sap/m/ViewSettingsDialog.js +17 -3
  288. package/src/sap/m/ViewSettingsFilterItem.js +1 -1
  289. package/src/sap/m/ViewSettingsItem.js +1 -1
  290. package/src/sap/m/VisibleItem.js +1 -1
  291. package/src/sap/m/WheelSlider.js +1 -1
  292. package/src/sap/m/WheelSliderContainer.js +1 -1
  293. package/src/sap/m/Wizard.js +18 -2
  294. package/src/sap/m/WizardProgressNavigator.js +1 -1
  295. package/src/sap/m/WizardStep.js +9 -6
  296. package/src/sap/m/changeHandler/AddTableColumn.js +1 -1
  297. package/src/sap/m/changeHandler/ChangeLinkTarget.js +1 -1
  298. package/src/sap/m/changeHandler/CombineButtons.js +1 -1
  299. package/src/sap/m/changeHandler/MoveTableColumns.js +1 -1
  300. package/src/sap/m/changeHandler/SelectIconTabBarFilter.js +1 -1
  301. package/src/sap/m/changeHandler/SplitMenuButton.js +1 -1
  302. package/src/sap/m/designtime/ListItemBase.designtime.js +5 -0
  303. package/src/sap/m/designtime/Page.designtime.js +13 -1
  304. package/src/sap/m/i18n/interaction.xml +2 -2
  305. package/src/sap/m/library.js +111 -8
  306. package/src/sap/m/library.support.js +3 -0
  307. package/src/sap/m/messagebundle.properties +58 -16
  308. package/src/sap/m/messagebundle_ar.properties +37 -9
  309. package/src/sap/m/messagebundle_bg.properties +37 -9
  310. package/src/sap/m/messagebundle_ca.properties +37 -9
  311. package/src/sap/m/messagebundle_cnr.properties +38 -10
  312. package/src/sap/m/messagebundle_cs.properties +38 -10
  313. package/src/sap/m/messagebundle_cy.properties +37 -9
  314. package/src/sap/m/messagebundle_da.properties +37 -9
  315. package/src/sap/m/messagebundle_de.properties +37 -9
  316. package/src/sap/m/messagebundle_el.properties +38 -10
  317. package/src/sap/m/messagebundle_en.properties +38 -10
  318. package/src/sap/m/messagebundle_en_GB.properties +38 -10
  319. package/src/sap/m/messagebundle_en_US_saprigi.properties +38 -10
  320. package/src/sap/m/messagebundle_es.properties +37 -9
  321. package/src/sap/m/messagebundle_es_MX.properties +38 -10
  322. package/src/sap/m/messagebundle_et.properties +37 -9
  323. package/src/sap/m/messagebundle_fi.properties +39 -11
  324. package/src/sap/m/messagebundle_fr.properties +37 -9
  325. package/src/sap/m/messagebundle_fr_CA.properties +37 -9
  326. package/src/sap/m/messagebundle_hi.properties +38 -10
  327. package/src/sap/m/messagebundle_hr.properties +38 -10
  328. package/src/sap/m/messagebundle_hu.properties +36 -8
  329. package/src/sap/m/messagebundle_id.properties +38 -10
  330. package/src/sap/m/messagebundle_it.properties +36 -8
  331. package/src/sap/m/messagebundle_iw.properties +37 -9
  332. package/src/sap/m/messagebundle_ja.properties +38 -10
  333. package/src/sap/m/messagebundle_kk.properties +38 -10
  334. package/src/sap/m/messagebundle_ko.properties +38 -10
  335. package/src/sap/m/messagebundle_lt.properties +38 -10
  336. package/src/sap/m/messagebundle_lv.properties +38 -10
  337. package/src/sap/m/messagebundle_mk.properties +37 -9
  338. package/src/sap/m/messagebundle_ms.properties +38 -10
  339. package/src/sap/m/messagebundle_nl.properties +37 -9
  340. package/src/sap/m/messagebundle_no.properties +38 -10
  341. package/src/sap/m/messagebundle_pl.properties +38 -10
  342. package/src/sap/m/messagebundle_pt.properties +37 -9
  343. package/src/sap/m/messagebundle_pt_PT.properties +37 -9
  344. package/src/sap/m/messagebundle_ro.properties +37 -9
  345. package/src/sap/m/messagebundle_ru.properties +38 -10
  346. package/src/sap/m/messagebundle_sh.properties +38 -10
  347. package/src/sap/m/messagebundle_sk.properties +39 -11
  348. package/src/sap/m/messagebundle_sl.properties +38 -10
  349. package/src/sap/m/messagebundle_sr.properties +38 -10
  350. package/src/sap/m/messagebundle_sv.properties +37 -9
  351. package/src/sap/m/messagebundle_th.properties +37 -9
  352. package/src/sap/m/messagebundle_tr.properties +37 -9
  353. package/src/sap/m/messagebundle_uk.properties +37 -9
  354. package/src/sap/m/messagebundle_vi.properties +38 -10
  355. package/src/sap/m/messagebundle_zh_CN.properties +37 -9
  356. package/src/sap/m/messagebundle_zh_TW.properties +38 -10
  357. package/src/sap/m/p13n/AbstractContainer.js +2 -2
  358. package/src/sap/m/p13n/AbstractContainerItem.js +2 -2
  359. package/src/sap/m/p13n/BasePanel.js +1 -1
  360. package/src/sap/m/p13n/Container.js +1 -1
  361. package/src/sap/m/p13n/Engine.js +1 -1
  362. package/src/sap/m/p13n/FilterController.js +1 -1
  363. package/src/sap/m/p13n/FilterPanel.js +1 -1
  364. package/src/sap/m/p13n/GroupController.js +1 -1
  365. package/src/sap/m/p13n/GroupPanel.js +1 -1
  366. package/src/sap/m/p13n/MessageStrip.js +1 -1
  367. package/src/sap/m/p13n/Popup.js +3 -1
  368. package/src/sap/m/p13n/QueryPanel.js +10 -6
  369. package/src/sap/m/p13n/SelectionController.js +1 -1
  370. package/src/sap/m/p13n/SelectionPanel.js +32 -41
  371. package/src/sap/m/p13n/SortController.js +1 -1
  372. package/src/sap/m/p13n/SortPanel.js +1 -1
  373. package/src/sap/m/p13n/modules/DefaultProviderRegistry.js +3 -4
  374. package/src/sap/m/p13n/modules/StateHandlerRegistry.js +1 -1
  375. package/src/sap/m/p13n/modules/UIManager.js +1 -1
  376. package/src/sap/m/plugins/CellSelector.js +9 -7
  377. package/src/sap/m/plugins/ColumnAIAction.js +1 -1
  378. package/src/sap/m/plugins/ColumnResizer.js +28 -4
  379. package/src/sap/m/plugins/ContextMenuSetting.js +1 -1
  380. package/src/sap/m/plugins/CopyProvider.js +1 -1
  381. package/src/sap/m/plugins/DataStateIndicator.js +1 -1
  382. package/src/sap/m/plugins/PasteProvider.js +1 -1
  383. package/src/sap/m/plugins/PluginBase.js +1 -1
  384. package/src/sap/m/plugins/UploadSetwithTable.js +121 -2
  385. package/src/sap/m/routing/Target.js +52 -8
  386. package/src/sap/m/routing/Targets.js +58 -11
  387. package/src/sap/m/rules/IllustratedMessage.support.js +126 -0
  388. package/src/sap/m/semantic/AddAction.js +1 -1
  389. package/src/sap/m/semantic/CancelAction.js +1 -1
  390. package/src/sap/m/semantic/DeleteAction.js +1 -1
  391. package/src/sap/m/semantic/DetailPage.js +1 -1
  392. package/src/sap/m/semantic/DiscussInJamAction.js +1 -1
  393. package/src/sap/m/semantic/EditAction.js +1 -1
  394. package/src/sap/m/semantic/FavoriteAction.js +1 -1
  395. package/src/sap/m/semantic/FilterAction.js +1 -1
  396. package/src/sap/m/semantic/FilterSelect.js +1 -1
  397. package/src/sap/m/semantic/FlagAction.js +1 -1
  398. package/src/sap/m/semantic/ForwardAction.js +1 -1
  399. package/src/sap/m/semantic/FullscreenPage.js +1 -1
  400. package/src/sap/m/semantic/GroupAction.js +1 -1
  401. package/src/sap/m/semantic/GroupSelect.js +1 -1
  402. package/src/sap/m/semantic/MainAction.js +1 -1
  403. package/src/sap/m/semantic/MasterPage.js +1 -1
  404. package/src/sap/m/semantic/MessagesIndicator.js +1 -1
  405. package/src/sap/m/semantic/MultiSelectAction.js +1 -1
  406. package/src/sap/m/semantic/NegativeAction.js +1 -1
  407. package/src/sap/m/semantic/OpenInAction.js +1 -1
  408. package/src/sap/m/semantic/PositiveAction.js +1 -1
  409. package/src/sap/m/semantic/PrintAction.js +1 -1
  410. package/src/sap/m/semantic/SaveAction.js +1 -1
  411. package/src/sap/m/semantic/Segment.js +1 -1
  412. package/src/sap/m/semantic/SegmentedContainer.js +1 -1
  413. package/src/sap/m/semantic/SemanticButton.js +1 -1
  414. package/src/sap/m/semantic/SemanticConfiguration.js +1 -1
  415. package/src/sap/m/semantic/SemanticControl.js +1 -1
  416. package/src/sap/m/semantic/SemanticOverflowToolbarButton.js +1 -1
  417. package/src/sap/m/semantic/SemanticOverflowToolbarToggleButton.js +1 -1
  418. package/src/sap/m/semantic/SemanticPage.js +1 -1
  419. package/src/sap/m/semantic/SemanticSelect.js +1 -1
  420. package/src/sap/m/semantic/SemanticToggleButton.js +1 -1
  421. package/src/sap/m/semantic/SendEmailAction.js +1 -1
  422. package/src/sap/m/semantic/SendMessageAction.js +1 -1
  423. package/src/sap/m/semantic/ShareInJamAction.js +1 -1
  424. package/src/sap/m/semantic/ShareMenu.js +1 -1
  425. package/src/sap/m/semantic/ShareMenuPage.js +1 -1
  426. package/src/sap/m/semantic/SortAction.js +1 -1
  427. package/src/sap/m/semantic/SortSelect.js +1 -1
  428. package/src/sap/m/table/ColumnWidthController.js +1 -1
  429. package/src/sap/m/table/Util.js +1 -1
  430. package/src/sap/m/table/columnmenu/ActionItem.js +1 -1
  431. package/src/sap/m/table/columnmenu/Entry.js +1 -1
  432. package/src/sap/m/table/columnmenu/Item.js +1 -1
  433. package/src/sap/m/table/columnmenu/ItemBase.js +1 -1
  434. package/src/sap/m/table/columnmenu/Menu.js +8 -2
  435. package/src/sap/m/table/columnmenu/MenuBase.js +1 -1
  436. package/src/sap/m/table/columnmenu/QuickAction.js +1 -1
  437. package/src/sap/m/table/columnmenu/QuickActionBase.js +1 -1
  438. package/src/sap/m/table/columnmenu/QuickActionItem.js +1 -1
  439. package/src/sap/m/table/columnmenu/QuickGroup.js +1 -1
  440. package/src/sap/m/table/columnmenu/QuickGroupItem.js +10 -4
  441. package/src/sap/m/table/columnmenu/QuickResize.js +142 -0
  442. package/src/sap/m/table/columnmenu/QuickSort.js +1 -1
  443. package/src/sap/m/table/columnmenu/QuickSortItem.js +29 -19
  444. package/src/sap/m/table/columnmenu/QuickTotal.js +1 -1
  445. package/src/sap/m/table/columnmenu/QuickTotalItem.js +10 -4
  446. package/src/sap/m/themes/base/Button.less +36 -13
  447. package/src/sap/m/themes/base/CheckBox.less +4 -6
  448. package/src/sap/m/themes/base/ColumnListItem.less +11 -0
  449. package/src/sap/m/themes/base/DynamicDateRange.less +6 -2
  450. package/src/sap/m/themes/base/FeedInput.less +17 -0
  451. package/src/sap/m/themes/base/GenericTile.less +22 -7
  452. package/src/sap/m/themes/base/Illustration.less +4 -0
  453. package/src/sap/m/themes/base/Link.less +3 -0
  454. package/src/sap/m/themes/base/ListBase.less +1 -0
  455. package/src/sap/m/themes/base/ListItemBase.less +22 -10
  456. package/src/sap/m/themes/base/Menu.less +329 -12
  457. package/src/sap/m/themes/base/NumericContent.less +1 -2
  458. package/src/sap/m/themes/base/ObjectStatus.less +2 -0
  459. package/src/sap/m/themes/base/OverflowToolbarTokenizer.less +80 -0
  460. package/src/sap/m/themes/base/Page.less +5 -4
  461. package/src/sap/m/themes/base/Panel.less +7 -2
  462. package/src/sap/m/themes/base/PlanningCalendar.less +37 -0
  463. package/src/sap/m/themes/base/RatingIndicator.less +7 -2
  464. package/src/sap/m/themes/base/SinglePlanningCalendarMonthGrid.less +1 -0
  465. package/src/sap/m/themes/base/Table.less +42 -11
  466. package/src/sap/m/themes/base/Wizard.less +14 -43
  467. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-BalloonSky.svg +36 -36
  468. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-EmptyCalendar.svg +69 -69
  469. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-FilterTable.svg +52 -52
  470. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-NoDimensionsSet.svg +34 -34
  471. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-NoSearchResults.svg +2 -2
  472. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-NoTasks_v1.svg +48 -48
  473. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-ReloadScreen.svg +40 -40
  474. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-SearchFolder.svg +26 -26
  475. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-SuccessHighFive.svg +19 -19
  476. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-SuccessScreen.svg +39 -39
  477. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-Survey.svg +1 -1
  478. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-UploadCollection.svg +25 -25
  479. package/src/sap/m/themes/base/illustrations/sapIllus-Dialog-UserHasSignedUp.svg +1 -1
  480. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-AddColumn.svg +24 -24
  481. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-AddPeople.svg +6 -6
  482. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-BalloonSky.svg +4 -4
  483. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-BeforeSearch.svg +2 -2
  484. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-Connection.svg +7 -7
  485. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-EmptyCalendar.svg +34 -34
  486. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-EmptyList.svg +4 -4
  487. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-ErrorScreen.svg +6 -6
  488. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-FilterTable.svg +5 -5
  489. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-GroupTable.svg +33 -33
  490. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-NoDimensionsSet.svg +4 -4
  491. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-NoEntries.svg +2 -2
  492. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-NoMail_v1.svg +7 -7
  493. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-NoSavedItems_v1.svg +10 -10
  494. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-NoTasks_v1.svg +10 -10
  495. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-ReloadScreen.svg +6 -6
  496. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-ResizeColumn.svg +24 -24
  497. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SearchEarth.svg +4 -4
  498. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SearchFolder.svg +8 -8
  499. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SignOut.svg +10 -17
  500. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleBalloon.svg +4 -4
  501. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleBell.svg +5 -5
  502. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleCalendar.svg +34 -34
  503. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleCheckMark.svg +2 -2
  504. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleConnection.svg +7 -7
  505. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleEmptyDoc.svg +5 -5
  506. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleEmptyList.svg +4 -4
  507. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleError.svg +6 -6
  508. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleMagnifier.svg +4 -4
  509. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleMail.svg +7 -7
  510. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleNoSavedItems.svg +10 -10
  511. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleNotFoundMagnifier.svg +8 -8
  512. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleReload.svg +6 -6
  513. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SimpleTask.svg +10 -10
  514. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SleepingBell.svg +5 -5
  515. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SortColumn.svg +26 -26
  516. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SuccessHighFive.svg +4 -4
  517. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-SuccessScreen.svg +2 -2
  518. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-Tent.svg +5 -5
  519. package/src/sap/m/themes/base/illustrations/sapIllus-Dot-UploadCollection.svg +4 -4
  520. package/src/sap/m/themes/base/illustrations/sapIllus-Scene-BalloonSky.svg +44 -44
  521. package/src/sap/m/themes/base/illustrations/sapIllus-Scene-EmptyCalendar.svg +80 -80
  522. package/src/sap/m/themes/base/illustrations/sapIllus-Scene-FilterTable.svg +54 -54
  523. package/src/sap/m/themes/base/illustrations/sapIllus-Scene-NoDimensionsSet.svg +36 -36
  524. package/src/sap/m/themes/base/illustrations/sapIllus-Scene-NoSearchResults.svg +2 -2
  525. package/src/sap/m/themes/base/illustrations/sapIllus-Scene-NoTasks_v1.svg +70 -70
  526. package/src/sap/m/themes/base/illustrations/sapIllus-Scene-ReloadScreen.svg +52 -52
  527. package/src/sap/m/themes/base/illustrations/sapIllus-Scene-SearchFolder.svg +33 -33
  528. package/src/sap/m/themes/base/illustrations/sapIllus-Scene-SuccessHighFive.svg +20 -20
  529. package/src/sap/m/themes/base/illustrations/sapIllus-Scene-SuccessScreen.svg +51 -51
  530. package/src/sap/m/themes/base/illustrations/sapIllus-Scene-UploadCollection.svg +27 -27
  531. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-BalloonSky.svg +34 -34
  532. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-EmptyCalendar.svg +41 -41
  533. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-FilterTable.svg +49 -49
  534. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-GroupTable.svg +71 -71
  535. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-NoDimensionsSet.svg +37 -37
  536. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-NoSearchResults.svg +2 -2
  537. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-NoTasks_v1.svg +17 -17
  538. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-ReloadScreen.svg +28 -28
  539. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-ResizeColumn.svg +44 -44
  540. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-SearchFolder.svg +26 -26
  541. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-SuccessHighFive.svg +19 -19
  542. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-SuccessScreen.svg +27 -27
  543. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-Survey.svg +1 -1
  544. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-UploadCollection.svg +28 -28
  545. package/src/sap/m/themes/base/illustrations/sapIllus-Spot-UserHasSignedUp.svg +1 -1
  546. package/src/sap/m/themes/base/library.source.less +1 -0
  547. package/src/sap/m/upload/ActionsPlaceholder.js +1 -1
  548. package/src/sap/m/upload/Column.js +1 -1
  549. package/src/sap/m/upload/FilePreviewDialog.js +1 -1
  550. package/src/sap/m/upload/UploadItem.js +8 -2
  551. package/src/sap/m/upload/UploadItemConfiguration.js +34 -2
  552. package/src/sap/m/upload/UploadSet.js +1 -1
  553. package/src/sap/m/upload/UploadSetItem.js +1 -1
  554. package/src/sap/m/upload/UploadSetToolbarPlaceholder.js +1 -1
  555. package/src/sap/m/upload/Uploader.js +2 -2
  556. package/src/sap/m/upload/UploaderHttpRequestMethod.js +2 -2
  557. package/src/sap/m/upload/UploaderTableItem.js +3 -3
  558. package/src/sap/m/routing/async/Target.js +0 -60
  559. package/src/sap/m/routing/async/Targets.js +0 -60
@@ -0,0 +1,720 @@
1
+ /*!
2
+ * OpenUI5
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
+ */
6
+
7
+ // Provides control sap.m.MenuWrapper
8
+ sap.ui.define([
9
+ 'sap/ui/core/library',
10
+ 'sap/ui/core/Control',
11
+ 'sap/m/MenuWrapperRenderer',
12
+ 'sap/ui/dom/containsOrEquals',
13
+ 'sap/ui/events/KeyCodes',
14
+ 'sap/ui/Device',
15
+ 'sap/ui/core/Lib',
16
+ 'sap/base/i18n/Localization',
17
+ 'sap/ui/events/PseudoEvents'
18
+ ], function(
19
+ coreLibrary,
20
+ Control,
21
+ MenuWraperRenderer,
22
+ containsOrEquals,
23
+ KeyCodes,
24
+ Device,
25
+ Library,
26
+ Localization,
27
+ PseudoEvents
28
+ ) {
29
+ "use strict";
30
+
31
+ // shortcut for sap.ui.core.ItemSelectionMode
32
+ const ItemSelectionMode = coreLibrary.ItemSelectionMode;
33
+
34
+ const DELAY_SUBMENU_TIMER = 300;
35
+
36
+ /**
37
+ * Constructor for a new MenuWrapper.
38
+ *
39
+ * @param {string} [sId] ID for the new control, generated automatically if no ID is given
40
+ * @param {object} [mSettings] Initial settings for the new control
41
+ *
42
+ * @class
43
+ * The <code>sap.m.MenuWrapper</code> control represents a single-level menu with menu items.
44
+ *
45
+ * @extends sap.ui.core.Control
46
+ *
47
+ * @author SAP SE
48
+ * @version 1.139.0
49
+ *
50
+ * @constructor
51
+ * @private
52
+ * @since 1.136.0
53
+ * @alias sap.m.MenuWrapper
54
+ */
55
+ const MenuWrapper = Control.extend("sap.m.MenuWrapper", /** @lends sap.m.MenuWrapper.prototype */ {
56
+ metadata : {
57
+ library : "sap.m",
58
+ properties: {
59
+
60
+ /**
61
+ * Specifies the title to be displayed when the menu is viewed on mobile devices within this wrapper.
62
+ * <b>Note:</b> This property is only used when the menu is opened on mobile devices.
63
+ */
64
+ title: { type: "string", defaultValue: "" },
65
+
66
+ /**
67
+ * Defines whether the menu in this wrapper is a sub-menu or not.
68
+ */
69
+ isSubmenu: { type: "boolean", defaultValue: false }
70
+
71
+ },
72
+ aggregations: {
73
+
74
+ /**
75
+ * Defines the items contained within this control.
76
+ */
77
+ items: { type: "sap.m.IMenuItem", multiple: true, singularName: "item", bindable: "bindable" }
78
+
79
+ },
80
+ events: {
81
+ /**
82
+ * Fired when a <code>MenuItem</code> is selected.
83
+ */
84
+ itemSelected: {
85
+ enableEventBubbling: true,
86
+ parameters: {
87
+ /**
88
+ * The <code>MenuItem</code> which was selected.
89
+ */
90
+ item : {type : "sap.m.IMenuItem" }
91
+ }
92
+ },
93
+ /**
94
+ * Fired when the menu popover must be closed.
95
+ *
96
+ * @since 1.136.0
97
+ */
98
+ closePopover: {
99
+ enableEventBubbling: true,
100
+ parameters: {
101
+ /**
102
+ * Whether to bubble the event to the root <code>Menu</code>.
103
+ */
104
+ bubbleToRoot : {type : "boolean" },
105
+ /**
106
+ * The menu item that triggered the submenu close (if any).
107
+ */
108
+ origin: {type: "sap.m.IMenuItem"}
109
+ }
110
+ },
111
+
112
+ /**
113
+ * Fired when the submenu must be closed.
114
+ * Because of possible top menu beforeClose prevention, the submenu close should be done by the top menu.
115
+ * That's why this event is fired to propagate the item to the top menu.
116
+ *
117
+ * @since 1.136.0
118
+ */
119
+ closeItemSubmenu: {
120
+ enableEventBubbling: true,
121
+ parameters: {
122
+ /**
123
+ * Item to be propagated to the top menu.
124
+ */
125
+ item: {type: "sap.m.IMenuItem"}
126
+ }
127
+ }
128
+ },
129
+ renderer: MenuWraperRenderer
130
+ }
131
+ });
132
+
133
+ MenuWrapper.prototype.init = function() {
134
+ this._aStyleClasses = [];
135
+ this._oRb = Library.getResourceBundleFor("sap.m");
136
+ };
137
+
138
+ MenuWrapper.prototype.onBeforeRendering = function() {
139
+ const aGroups = this.getItems().filter(function(oItem) {
140
+ return oItem.isA("sap.m.MenuItemGroup");
141
+ });
142
+
143
+ // associate menu items with their respective group and ensure single selection for menu items in groups configured with single selection mode
144
+ aGroups.forEach(function(oGroup) {
145
+ const aItems = oGroup.getItems();
146
+ aItems.forEach(function(oItem) {
147
+ oItem.setAssociation("_group", oGroup);
148
+ oItem._itemSelectionMode = oGroup.getItemSelectionMode();
149
+ });
150
+ if (oGroup.getItemSelectionMode() === ItemSelectionMode.SingleSelect) {
151
+ oGroup._ensureSingleSelection();
152
+ }
153
+ });
154
+ };
155
+
156
+ MenuWrapper.prototype.onmouseover = function(oEvent) {
157
+ const oItem = this.getItemByDomRef(oEvent.target);
158
+
159
+ if (!oItem) {
160
+ return;
161
+ }
162
+
163
+ if (oItem !== this.oHoveredItem) {
164
+ this._setHoveredItem(oItem);
165
+ }
166
+ this._handleSubmenusAppearance(oItem, false/*, true*/);
167
+ };
168
+
169
+ MenuWrapper.prototype.onclick = function(oEvent) {
170
+ const oItem = this.getItemByDomRef(oEvent.target);
171
+ if (!oItem) {
172
+ return;
173
+ }
174
+
175
+ if (oEvent.target.closest(`#${CSS.escape(oItem.getId())}-endContent`)) {
176
+ this.fireClosePopover({ bubbleToRoot: true });
177
+ return;
178
+ }
179
+
180
+
181
+ // If Shift is pressed, and the item is in Single- or Multi- selectable group,
182
+ // the menu popover should not be closed.
183
+ this._bPreventPopoverClose = this._isShiftKeyPressed(oEvent);
184
+
185
+ this._selectItem(oItem, true);
186
+ oEvent.preventDefault();
187
+ oEvent.stopPropagation();
188
+ };
189
+
190
+ MenuWrapper.prototype.onsapselect = function(oEvent) {
191
+ this._sapSelectOnKeyDown = true;
192
+ oEvent.preventDefault();
193
+ oEvent.stopPropagation();
194
+ };
195
+
196
+ MenuWrapper.prototype.onsapselectmodifiers = function(oEvent) {
197
+ this._sapSelectOnKeyDown = true;
198
+
199
+ // If Shift is pressed, and the item is in Single- or Multi- selectable group,
200
+ // the menu popover should not be closed.
201
+ this._bPreventPopoverClose = this._isShiftKeyPressed(oEvent);
202
+
203
+ oEvent.preventDefault();
204
+ oEvent.stopPropagation();
205
+ };
206
+
207
+ MenuWrapper.prototype.onkeydown = function(oEvent) {
208
+ const iIdx = this.oHoveredItem ? this._getVisibleItems().indexOf(this.oHoveredItem) : -1,
209
+ bRtl = Localization.getRTL(),
210
+ iLeftArrow = bRtl ? KeyCodes.ARROW_RIGHT : KeyCodes.ARROW_LEFT,
211
+ iRightArrow = bRtl ? KeyCodes.ARROW_LEFT : KeyCodes.ARROW_RIGHT;
212
+ let bPreventDefault = true;
213
+
214
+ if (iIdx === -1) {
215
+ return;
216
+ }
217
+
218
+ if (oEvent.keyCode === KeyCodes.ARROW_DOWN) {
219
+ // Go to the next selectable item
220
+ this._setHoveredItem(this._getNextFocusableItem(iIdx, 1), true);
221
+ } else if (oEvent.keyCode === KeyCodes.ARROW_UP) {
222
+ // Go to the previous selectable item
223
+ this._setHoveredItem(this._getPrevFocusableItem(iIdx, 1), true);
224
+ } else if (oEvent.keyCode === iLeftArrow) {
225
+ // Close submenu (if opened) or go to the previous end content control (if any)
226
+ const aEndContent = this.oHoveredItem ? this.oHoveredItem.getEndContent() : [];
227
+ if (aEndContent.length) {
228
+ this._handleEndContentNavigation(oEvent, aEndContent);
229
+ } else if (this.getIsSubmenu()) {
230
+ this.fireClosePopover();
231
+ }
232
+ } else if (oEvent.keyCode === iRightArrow) {
233
+ // Open submenu (if any) or go to the next end content control (if any)
234
+ const aEndContent = this.oHoveredItem ? this.oHoveredItem.getEndContent() : [];
235
+ if (this.oHoveredItem && this.oHoveredItem._hasSubmenu()) {
236
+ this._handleSubmenusAppearance(this.oHoveredItem, true);
237
+ } else if (aEndContent.length) {
238
+ this._handleEndContentNavigation(oEvent, aEndContent);
239
+ }
240
+ } else if (oEvent.keyCode === KeyCodes.ESCAPE) {
241
+ this.fireClosePopover();
242
+ } else if (oEvent.keyCode === KeyCodes.HOME) {
243
+ // Go to the first selectable item
244
+ this._setHoveredItem(this._getNextFocusableItem(-1, 1), true);
245
+ } else if (oEvent.keyCode === KeyCodes.END) {
246
+ // Go to the last selectable item
247
+ this._setHoveredItem(this._getPrevFocusableItem(this._getItems().length, 1), true);
248
+ } else if (oEvent.keyCode === KeyCodes.PAGE_UP) {
249
+ // Go to the previous page of items
250
+ this._setHoveredItem(this._getPrevFocusableItem(iIdx, this._getPageSize()), true);
251
+ } else if (oEvent.keyCode === KeyCodes.PAGE_DOWN) {
252
+ // Go to the next page of items
253
+ this._setHoveredItem(this._getNextFocusableItem(iIdx, this._getPageSize()), true);
254
+ } else if (oEvent.keyCode === KeyCodes.TAB) {
255
+ // Close the popover and focus the next/previous element
256
+ if (this.getIsSubmenu()){
257
+ oEvent.preventDefault();
258
+ }
259
+ this.fireClosePopover();
260
+ } else if (oEvent.keyCode === KeyCodes.F6 && this.oFocusedEndContentItem) {
261
+ this.oHoveredItem.focus();
262
+ this.oFocusedEndContentItem = null;
263
+ } else {
264
+ // Do not prevent default for keys that are not handled by the menu
265
+ bPreventDefault = false;
266
+ }
267
+
268
+ if (bPreventDefault && !oEvent.metaKey && !oEvent.altKey) {
269
+ oEvent.preventDefault();
270
+ oEvent.stopPropagation();
271
+ }
272
+ };
273
+
274
+ MenuWrapper.prototype.onkeyup = function(oEvent) {
275
+ // Similar to sapselect, but executed on keyup:
276
+ // Using keydown causes side effects such as:
277
+ // If the selection results in closing the menu and the focus returns to the initiating element (e.g., a button),
278
+ // the keyup event may trigger on the caller. In Firefox, this can fire a click event on the button — undesirable behavior.
279
+ // The attribute _sapSelectOnKeyDown helps prevent issues in the reverse scenario. For example, when the spacebar is pressed
280
+ // on a Button, opening the menu may cause the space keyup event to select the first item immediately.
281
+ // Device checks are in place due to new functionality in iOS 13, which introduces desktop view functionality for tablets.
282
+ if (!this._sapSelectOnKeyDown && !this._bPreventPopoverClose) {
283
+ return;
284
+ } else {
285
+ this._sapSelectOnKeyDown = false;
286
+ }
287
+ if (!PseudoEvents.events.sapselect.fnCheck(oEvent) && oEvent.keyCode !== KeyCodes.ENTER && !this._bPreventPopoverClose) {
288
+ return;
289
+ }
290
+
291
+ this._selectItem(this.oHoveredItem, false, true);
292
+
293
+ oEvent.preventDefault();
294
+ oEvent.stopPropagation();
295
+ };
296
+
297
+ MenuWrapper.prototype.onsapbackspacemodifiers = MenuWrapper.prototype.onsapbackspace;
298
+
299
+ MenuWrapper.prototype.onfocusin = function(oEvent) {
300
+ const oTarget = this.getItemByDomRef(oEvent.target);
301
+
302
+ if (oTarget) {
303
+ this.oHoveredItem = oTarget;
304
+ }
305
+ };
306
+
307
+ /**
308
+ * Returns the menu item that corresponds to the given DOM reference.
309
+ *
310
+ * @param {HTMLElement} oDomRef The DOM reference
311
+ * @returns {sap.m.IMenuItem | null} The menu item that corresponds to the given DOM reference
312
+ */
313
+ MenuWrapper.prototype.getItemByDomRef = function(oDomRef) {
314
+ const oItems = this._getItems();
315
+
316
+ for (let i = 0; i < oItems.length; i++) {
317
+ const oItem = oItems[i],
318
+ oItemRef = oItem.getDomRef();
319
+ if (containsOrEquals(oItemRef, oDomRef)) {
320
+ return oItem;
321
+ }
322
+ }
323
+ return null;
324
+ };
325
+
326
+ /**
327
+ * Determines whether only the Shift key is pressed during the event.
328
+ * @param {jQuery.Event} oEvent Keyboard event.
329
+ * @private
330
+ * @returns {boolean} True if only the Shift key is pressed, false otherwise
331
+ */
332
+ MenuWrapper.prototype._isShiftKeyPressed = function(oEvent) {
333
+ return oEvent.shiftKey && !oEvent.metaKey && !oEvent.altKey && !oEvent.ctrlKey;
334
+ };
335
+
336
+ /**
337
+ * Adds, removes, toggles, or sets class name(s) in the internal _aStyleClasses array.
338
+ * <b>Note: </b> Later these classes should be applied when menu item open its submenu popover.
339
+ * @param {string} sClassNames - Class name(s) as a string (space-separated for multiple)
340
+ * @param {"addStyleClass"|"removeStyleClass"|"toggleStyleClass"|"setStyleClass"} sMethod - Operation mode: add, remove, toggle, or set a class name(s)
341
+ * @private
342
+ */
343
+ MenuWrapper.prototype._processStyleClasses = function(sClassNames, sMethod) {
344
+ if (sMethod === "setStyleClass") {
345
+ this._aStyleClasses = [];
346
+ sMethod = "addStyleClass";
347
+ }
348
+
349
+ if (sClassNames === "") {
350
+ return;
351
+ }
352
+
353
+ const aClassNames = sClassNames.split(/\s+/).filter(Boolean);
354
+ const sCurrentStyleClasses = this._aStyleClasses.join(" ");
355
+
356
+ aClassNames.forEach((sClass) => {
357
+ const iIdx = this._aStyleClasses.indexOf(sClass);
358
+ const bAddOperation = (sMethod === "addStyleClass" || sMethod === "toggleStyleClass") && iIdx === -1;
359
+ const bRemoveOperation = (sMethod === "removeStyleClass" || sMethod === "toggleStyleClass") && iIdx !== -1;
360
+ if (bAddOperation) {
361
+ this._aStyleClasses.push(sClass);
362
+ } else if (bRemoveOperation) {
363
+ this._aStyleClasses.splice(iIdx, 1);
364
+ }
365
+ });
366
+
367
+ if (this.oOpenedSubmenuParent) {
368
+ const sNewStyleClasses = this._aStyleClasses.join(" ");
369
+ const oPopover = this.oOpenedSubmenuParent._getPopover();
370
+ this.oOpenedSubmenuParent._getMenuWrapper()._processStyleClasses(sCurrentStyleClasses, "removeStyleClass");
371
+ this.oOpenedSubmenuParent._getMenuWrapper()._processStyleClasses(this._aStyleClasses.join(" "), "addStyleClass");
372
+ if (oPopover) {
373
+ oPopover.removeStyleClass(sCurrentStyleClasses);
374
+ oPopover.addStyleClass(sNewStyleClasses);
375
+ }
376
+ }
377
+ };
378
+
379
+ /**
380
+ * Menu item selection handler.
381
+ *
382
+ * @param {sap.m.IMenuItem} oItem The selected menu item
383
+ * @param {boolean} bWithClick Whether the selection is done with click or not
384
+ * @param {boolean} bSkipDelay Whether the submenu opening delay should be skipped or not
385
+ * @private
386
+ */
387
+ MenuWrapper.prototype._selectItem = function(oItem, bWithClick, bSkipDelay) {
388
+ if (this.oFocusedEndContentItem) { // selected end content item
389
+ this.fireClosePopover({ bubbleToRoot: true });
390
+ return;
391
+ }
392
+
393
+ if (!oItem || !oItem.getEnabled()) { // item is disabled
394
+ return;
395
+ }
396
+
397
+ if (oItem._hasSubmenu()) { // item has submenu
398
+ this._handleSubmenusAppearance(oItem, !bWithClick/*, !bSkipDelay*/);
399
+ } else if (oItem.isInteractive && oItem.isInteractive()) { // item is allowed to be pressed
400
+
401
+ if (oItem._getItemSelectionMode && oItem._getItemSelectionMode() !== ItemSelectionMode.None) {
402
+ oItem.setSelected(!oItem.getSelected());
403
+ } else {
404
+ this._bPreventPopoverClose = false;
405
+ }
406
+
407
+ this.fireItemSelected({item: oItem});
408
+ oItem.firePress({item: oItem});
409
+
410
+ if (!this._bPreventPopoverClose) {
411
+ this.fireClosePopover({ bubbleToRoot: true, origin: oItem });
412
+ }
413
+ this._bPreventPopoverClose = false;
414
+ }
415
+ };
416
+
417
+ MenuWrapper.prototype._handleEndContentNavigation = function(oEvent, aEndContent) {
418
+ const iIdx = this.oFocusedEndContentItem ? aEndContent.indexOf(this.oFocusedEndContentItem) : -1,
419
+ bRtl = Localization.getRTL(),
420
+ iRightArrow = bRtl ? KeyCodes.ARROW_LEFT : KeyCodes.ARROW_RIGHT;
421
+ let iNewIdx;
422
+
423
+ if (oEvent.keyCode === iRightArrow) {
424
+ iNewIdx = iIdx + 1 >= aEndContent.length ? aEndContent.length - 1 : iIdx + 1;
425
+ } else {
426
+ iNewIdx = iIdx - 1 < 0 ? 0 : iIdx - 1;
427
+ }
428
+
429
+ const oFocusableItem = aEndContent[iNewIdx];
430
+
431
+ if (!oFocusableItem) {
432
+ this.oFocusedEndContentItem = null;
433
+ return;
434
+ }
435
+
436
+ if (oFocusableItem && oFocusableItem !== this.oFocusedEndContentItem && oFocusableItem.isFocusable()) {
437
+ this.oFocusedEndContentItem = oFocusableItem;
438
+ oFocusableItem.focus();
439
+ }
440
+ };
441
+
442
+ /**
443
+ * Closes any opened submenu (if any) and afterwards opens submenu for the given item (if any).
444
+ *
445
+ * @param {sap.m.IMenuItem} oItem the item which submenu should be opened
446
+ * @param {boolean} bWithKeyboard Whether the submenu is opened via keyboard
447
+ * @param {boolean } bDelayed whether the submenu is opened with delay or not
448
+ * @private
449
+ */
450
+ MenuWrapper.prototype._handleSubmenusAppearance = function(oItem, bWithKeyboard, bDelayed) {
451
+ if (this.oOpenedSubmenuParent && this.oOpenedSubmenuParent._hasSubmenu() && !this.oOpenedSubmenuParent._getPopover().isOpen()) {
452
+ this.oOpenedSubmenuParent.removeStyleClass("sapMMenuItemSubMenuOpen");
453
+ this.oOpenedSubmenuParent = null;
454
+ }
455
+
456
+ if (!bWithKeyboard && !Device.system.phone && oItem === this.oOpenedSubmenuParent) {
457
+ return;
458
+ }
459
+
460
+ const bHasSubmenu = oItem._hasSubmenu();
461
+ this._closeOpenedSubmenu(/*!bWithKeyboard && bHasSubmenu*/);
462
+
463
+ this._discardOpenSubmenuDelayed();
464
+ if (!bHasSubmenu || !oItem.getEnabled()) {
465
+ return;
466
+ }
467
+
468
+ if (bDelayed) {
469
+ this._openSubmenuDelayed(oItem, bWithKeyboard);
470
+ } else {
471
+ this._openSubmenu(oItem, bWithKeyboard);
472
+ }
473
+ };
474
+
475
+ /**
476
+ * Returns list of items stored in <code>items</code> aggregation. If any items are part of a group,
477
+ * it returns the individual items within the group instead of the group item itself.
478
+ *
479
+ * @returns {sap.m.MenuItem} List of all menu items
480
+ * @private
481
+ */
482
+ MenuWrapper.prototype._getItems = function() {
483
+ const aItems = [];
484
+
485
+ const findItems = (aItemItems) => {
486
+ aItemItems.forEach((oItem) => {
487
+ if (!this._isMenuItemGroup(oItem)) {
488
+ aItems.push(oItem);
489
+ } else {
490
+ findItems(oItem.getItems());
491
+ }
492
+ });
493
+ };
494
+
495
+ findItems(this.getItems());
496
+
497
+ return aItems;
498
+ };
499
+
500
+ /**
501
+ * Returns the list of visible menu items.
502
+ *
503
+ * @returns {sap.m.MenuItem} List of visible menu items
504
+ * @private
505
+ */
506
+ MenuWrapper.prototype._getVisibleItems = function() {
507
+ return this._getItems().filter((oItem) => oItem.getVisible());
508
+ };
509
+
510
+ /**
511
+ * Returns the previous focusable menu item in this menu (if any).
512
+ *
513
+ * @param {number} iIdx The index of currently selectable menu item.
514
+ * @param {number} iStep The step to decrease index with
515
+ * @returns {sap.m.IMenuItem} the previous selectable menu item
516
+ * @private
517
+ */
518
+ MenuWrapper.prototype._getPrevFocusableItem = function(iIdx, iStep) {
519
+ const aItems = this._getVisibleItems();
520
+ let iPrevIdx = iIdx,
521
+ iCurrentIdx = iIdx;
522
+
523
+ if (!aItems.length) {
524
+ return undefined;
525
+ }
526
+
527
+ while (iCurrentIdx > 0 && iStep > 0) {
528
+ iCurrentIdx--;
529
+ if (aItems[iCurrentIdx].isFocusable && aItems[iCurrentIdx].isFocusable()) {
530
+ iStep--;
531
+ iPrevIdx = iCurrentIdx;
532
+ }
533
+ }
534
+
535
+ return iPrevIdx !== iIdx ? aItems[iPrevIdx] : undefined;
536
+ };
537
+
538
+ /**
539
+ * Returns the next focusable menu item in this menu (if any).
540
+ *
541
+ * @param {number} iIdx The index of currently selectable menu item
542
+ * @param {number} iStep The increment value used to increase the index
543
+ * @returns {sap.m.IMenuItem} The next selectable menu item located at the resulting index after applying the increment value
544
+ * @private
545
+ */
546
+ MenuWrapper.prototype._getNextFocusableItem = function(iIdx, iStep) {
547
+ const aItems = this._getVisibleItems();
548
+ let iNextIdx = iIdx,
549
+ iCurrentIdx = iIdx;
550
+
551
+ if (!aItems.length) {
552
+ return undefined;
553
+ }
554
+
555
+ while (iCurrentIdx < aItems.length - 1 && iStep > 0) {
556
+ iCurrentIdx++;
557
+ if (aItems[iCurrentIdx].isFocusable && aItems[iCurrentIdx].isFocusable()) {
558
+ iStep--;
559
+ iNextIdx = iCurrentIdx;
560
+ }
561
+ }
562
+
563
+ return iNextIdx !== iIdx ? aItems[iNextIdx] : undefined;
564
+ };
565
+
566
+ /**
567
+ * Sets the hovered menu item.
568
+ *
569
+ * @param {sap.m.IMenuItem} oItem the menu item to be set as hovered
570
+ * @param {boolean} bCloseOpenedSubmenu whether the opened submenu should be closed or not
571
+ * @private
572
+ */
573
+ MenuWrapper.prototype._setHoveredItem = function(oItem, bCloseOpenedSubmenu) {
574
+ if (!oItem || oItem === this.oHoveredItem) {
575
+ return;
576
+ }
577
+
578
+ if (oItem) {
579
+ bCloseOpenedSubmenu && this._closeOpenedSubmenu();
580
+ this.oHoveredItem = oItem;
581
+ oItem.focus();
582
+ this.oFocusedEndContentItem = null;
583
+ }
584
+ };
585
+
586
+ /**
587
+ * Checks if an item is a MenuItemGroup or not.
588
+ *
589
+ * @param {sap.m.IMenuItem} oItem The item to be checked
590
+ * @returns {boolean} Whether the item is a MenuItemGroup or not
591
+ * @private
592
+ */
593
+ MenuWrapper.prototype._isMenuItemGroup = function(oItem) {
594
+ return !!oItem.getItemSelectionMode;
595
+ };
596
+
597
+ /**
598
+ * Returns the page size for the menu.
599
+ *
600
+ * @returns {number} The page size for the menu
601
+ * @private
602
+ */
603
+ MenuWrapper.prototype._getPageSize = function() {
604
+ return 5;
605
+ };
606
+
607
+ /**
608
+ * Closes already opened submenu (if any).
609
+ *
610
+ * @param {boolean} bDelayed Whether the submenu is closed with delay or not
611
+ * @private
612
+ */
613
+ MenuWrapper.prototype._closeOpenedSubmenu = function(bDelayed) {
614
+ if (this.oOpenedSubmenuParent) {
615
+ const oSubmenuPopover = this.oOpenedSubmenuParent._getPopover(),
616
+ oMenuWrapper = this.getItems().includes(this.oOpenedSubmenuParent) ? this.oOpenedSubmenuParent._getMenuWrapper() : null;
617
+
618
+ if (oSubmenuPopover && oSubmenuPopover._oControl) {
619
+ oSubmenuPopover._oControl._oPreviousFocus = undefined;
620
+ }
621
+
622
+ this.oOpenedSubmenuParent = null;
623
+ if (!oMenuWrapper) {
624
+ return;
625
+ }
626
+
627
+ if (bDelayed) {
628
+ setTimeout(() => {
629
+ oMenuWrapper.fireClosePopover();
630
+ }, DELAY_SUBMENU_TIMER);
631
+ } else {
632
+ oMenuWrapper.fireClosePopover();
633
+ }
634
+ }
635
+ };
636
+
637
+ /**
638
+ * Opens the submenu of the given item (if any).
639
+ *
640
+ * @param {Object} oItem The item opener
641
+ * @param {boolean} bWithKeyboard Whether the submenu is opened via keyboard
642
+ *
643
+ * @private
644
+ */
645
+ MenuWrapper.prototype._openSubmenu = function(oItem, bWithKeyboard) {
646
+ if (!oItem) {
647
+ return;
648
+ }
649
+
650
+ const oPopover = oItem._getPopover();
651
+
652
+ oItem._getMenuWrapper()._processStyleClasses(this._aStyleClasses.join(" "), "setStyleClass");
653
+
654
+ oPopover.setInitialFocus(bWithKeyboard ? null : oItem);
655
+ oItem._openSubmenu();
656
+ oItem._setExtraContent(this.getDomRef());
657
+ this.oOpenedSubmenuParent = oItem;
658
+ oItem.oParentWrapper = this;
659
+ };
660
+
661
+ /**
662
+ * Opens the submenu of the given item with a delay.
663
+ *
664
+ * @param {sap.m.IMenuItem} oItem The item that have submenu
665
+ * @param {boolean} bWithKeyboard Whether the submenu is opened via keyboard
666
+ */
667
+ MenuWrapper.prototype._openSubmenuDelayed = function(oItem, bWithKeyboard) {
668
+ this._delayedSubmenuTimer = setTimeout(() => this._openSubmenu(oItem, bWithKeyboard) , DELAY_SUBMENU_TIMER);
669
+ };
670
+
671
+ /**
672
+ * Discards the delayed submenu opening.
673
+ *
674
+ * @private
675
+ */
676
+ MenuWrapper.prototype._discardOpenSubmenuDelayed = function() {
677
+ if (this._delayedSubmenuTimer) {
678
+ clearTimeout(this._delayedSubmenuTimer);
679
+ this._delayedSubmenuTimer = null;
680
+ }
681
+ };
682
+
683
+ /**
684
+ * Returns the number of items with icon in the menu.
685
+ *
686
+ * @returns {number} The number of items with icon
687
+ * @private
688
+ */
689
+ MenuWrapper.prototype._getItemsWithIconCount = function() {
690
+ return this._getVisibleItems().filter((oItem) => oItem.getIcon && oItem.getIcon()).length;
691
+ };
692
+
693
+ MenuWrapper.prototype._getAccessibilityEnabled = function() {
694
+ };
695
+
696
+ /**
697
+ * Configures the accessibility information necessary for rendering the menu items.
698
+ *
699
+ * @private
700
+ */
701
+ MenuWrapper.prototype._prepareItemsAccessibilityInfo = function() {
702
+ const aItems = this._getVisibleItems(),
703
+ iFocusableItemsCount = aItems.filter((oItem) => oItem.isCountable && oItem.isCountable()).length;
704
+ let iIndex = 1;
705
+
706
+ aItems.forEach((oItem) => {
707
+ const oAccInfo = {
708
+ bAccessible: true
709
+ };
710
+ if (oItem.isCountable && oItem.isCountable()) {
711
+ oAccInfo["posinset"] = iIndex;
712
+ oAccInfo["setsize"] = iFocusableItemsCount;
713
+ iIndex++;
714
+ }
715
+ oItem._oAccInfo = oAccInfo;
716
+ });
717
+ };
718
+
719
+ return MenuWrapper;
720
+ });