@ui5/webcomponents 1.5.0 → 1.7.1

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 (579) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/dist/Avatar.js +29 -1
  3. package/dist/AvatarGroup.js +20 -2
  4. package/dist/BreadcrumbsItem.js +2 -2
  5. package/dist/Button.js +4 -4
  6. package/dist/Calendar.js +33 -45
  7. package/dist/CalendarHeader.js +5 -1
  8. package/dist/CardHeader.js +1 -0
  9. package/dist/Carousel.js +9 -0
  10. package/dist/CheckBox.js +2 -2
  11. package/dist/ComboBox.js +52 -6
  12. package/dist/DatePicker.js +17 -1
  13. package/dist/DateRangePicker.js +8 -2
  14. package/dist/DateTimePicker.js +1 -1
  15. package/dist/Dialog.js +41 -1
  16. package/dist/Icon.js +9 -9
  17. package/dist/Input.js +32 -13
  18. package/dist/Label.js +1 -3
  19. package/dist/Link.js +4 -2
  20. package/dist/List.js +17 -1
  21. package/dist/Menu.js +6 -4
  22. package/dist/MenuItem.js +20 -5
  23. package/dist/MessageStrip.js +1 -1
  24. package/dist/MonthPicker.js +9 -0
  25. package/dist/MultiComboBox.js +47 -6
  26. package/dist/MultiInput.js +9 -2
  27. package/dist/Option.js +2 -2
  28. package/dist/Panel.js +24 -4
  29. package/dist/Popover.js +5 -4
  30. package/dist/Popup.js +13 -2
  31. package/dist/RadioButton.js +7 -5
  32. package/dist/RangeSlider.js +1 -1
  33. package/dist/RatingIndicator.js +1 -1
  34. package/dist/SegmentedButton.js +1 -1
  35. package/dist/Select.js +34 -7
  36. package/dist/Slider.js +1 -1
  37. package/dist/SliderBase.js +4 -4
  38. package/dist/SplitButton.js +2 -2
  39. package/dist/StandardListItem.js +3 -3
  40. package/dist/StepInput.js +1 -1
  41. package/dist/SuggestionItem.js +2 -2
  42. package/dist/Switch.js +1 -1
  43. package/dist/Tab.js +17 -10
  44. package/dist/TabContainer.js +169 -148
  45. package/dist/TabSeparator.js +8 -1
  46. package/dist/Table.js +1 -1
  47. package/dist/TextArea.js +8 -3
  48. package/dist/TimePickerBase.js +8 -0
  49. package/dist/TimeSelection.js +1 -2
  50. package/dist/Tokenizer.js +74 -8
  51. package/dist/Tree.js +4 -0
  52. package/dist/TreeItem.js +2 -2
  53. package/dist/TreeListItem.js +1 -1
  54. package/dist/YearPicker.js +50 -25
  55. package/dist/api.json +1 -1
  56. package/dist/assets/SAP-icons-business-suite.7cff1fd8.js +1 -0
  57. package/dist/assets/SAP-icons.7f154911.js +1 -0
  58. package/dist/assets/SAP-icons.e76c8241.js +1 -0
  59. package/dist/assets/messagebundle_ar.f3e988df.js +1 -0
  60. package/dist/assets/messagebundle_bg.a3f6fdd8.js +1 -0
  61. package/dist/assets/messagebundle_ca.5e72bf09.js +1 -0
  62. package/dist/assets/messagebundle_cs.5720e069.js +1 -0
  63. package/dist/assets/messagebundle_cy.51ed6118.js +1 -0
  64. package/dist/assets/messagebundle_da.d83f1df6.js +1 -0
  65. package/dist/assets/messagebundle_de.00b8fac3.js +1 -0
  66. package/dist/assets/messagebundle_el.54337d1a.js +1 -0
  67. package/dist/assets/messagebundle_en.46c4c8b4.js +1 -0
  68. package/dist/assets/messagebundle_en_GB.d9037cba.js +1 -0
  69. package/dist/assets/messagebundle_en_US_sappsd.2f342e46.js +1 -0
  70. package/dist/assets/messagebundle_en_US_saprigi.9e3ec6ce.js +1 -0
  71. package/dist/assets/messagebundle_en_US_saptrc.a358bbc3.js +1 -0
  72. package/dist/assets/messagebundle_es.6edd9aac.js +1 -0
  73. package/dist/assets/messagebundle_es_MX.b9a235b1.js +1 -0
  74. package/dist/assets/messagebundle_et.2f95fbc0.js +1 -0
  75. package/dist/assets/messagebundle_fi.e408238f.js +1 -0
  76. package/dist/assets/messagebundle_fr.023ec658.js +1 -0
  77. package/dist/assets/messagebundle_fr_CA.700b3003.js +1 -0
  78. package/dist/assets/messagebundle_hi.e54398ec.js +1 -0
  79. package/dist/assets/messagebundle_hr.87a5cf12.js +1 -0
  80. package/dist/assets/messagebundle_hu.11f04021.js +1 -0
  81. package/dist/assets/messagebundle_it.aa33f57d.js +1 -0
  82. package/dist/assets/messagebundle_iw.876a2de2.js +1 -0
  83. package/dist/assets/messagebundle_ja.8e38b3b9.js +1 -0
  84. package/dist/assets/messagebundle_kk.16201d64.js +1 -0
  85. package/dist/assets/messagebundle_ko.efd3d190.js +1 -0
  86. package/dist/assets/messagebundle_lt.8df3235f.js +1 -0
  87. package/dist/assets/messagebundle_lv.1485b0dd.js +1 -0
  88. package/dist/assets/messagebundle_ms.2801cf14.js +1 -0
  89. package/dist/assets/messagebundle_nl.fbaa57e5.js +1 -0
  90. package/dist/assets/messagebundle_no.aed62d2d.js +1 -0
  91. package/dist/assets/messagebundle_pl.ec09771e.js +1 -0
  92. package/dist/assets/messagebundle_pt.2ba5f988.js +1 -0
  93. package/dist/assets/messagebundle_pt_PT.f26a67f1.js +1 -0
  94. package/dist/assets/messagebundle_ro.71197951.js +1 -0
  95. package/dist/assets/messagebundle_ru.0bc1939f.js +1 -0
  96. package/dist/assets/messagebundle_sh.097c2c2b.js +1 -0
  97. package/dist/assets/messagebundle_sk.79a87686.js +1 -0
  98. package/dist/assets/messagebundle_sl.9d602bfb.js +1 -0
  99. package/dist/assets/messagebundle_sv.efb6e0ef.js +1 -0
  100. package/dist/assets/messagebundle_th.94c0d1ab.js +1 -0
  101. package/dist/assets/messagebundle_tr.b3a571be.js +1 -0
  102. package/dist/assets/messagebundle_uk.8d0551a9.js +1 -0
  103. package/dist/assets/messagebundle_vi.6819ccf0.js +1 -0
  104. package/dist/assets/messagebundle_zh_CN.0c604a5d.js +1 -0
  105. package/dist/assets/messagebundle_zh_TW.4659173f.js +1 -0
  106. package/dist/assets/{parameters-bundle.css.d35c9c32.js → parameters-bundle.css.13aed676.js} +1 -1
  107. package/dist/assets/{parameters-bundle.css.95d13129.js → parameters-bundle.css.157592af.js} +1 -1
  108. package/dist/assets/parameters-bundle.css.18cb3350.js +1 -0
  109. package/dist/assets/{parameters-bundle.css.e9998509.js → parameters-bundle.css.25017933.js} +1 -1
  110. package/dist/assets/parameters-bundle.css.2be7f26d.js +1 -0
  111. package/dist/assets/parameters-bundle.css.31a66508.js +1 -0
  112. package/dist/assets/parameters-bundle.css.33915181.js +1 -0
  113. package/dist/assets/parameters-bundle.css.41e95390.js +1 -0
  114. package/dist/assets/parameters-bundle.css.4343d807.js +1 -0
  115. package/dist/assets/parameters-bundle.css.4438b4b3.js +1 -0
  116. package/dist/assets/parameters-bundle.css.54a888ff.js +1 -0
  117. package/dist/assets/{parameters-bundle.css.e9339a13.js → parameters-bundle.css.5550ceb2.js} +1 -1
  118. package/dist/assets/{parameters-bundle.css.c967e7ef.js → parameters-bundle.css.60956972.js} +1 -1
  119. package/dist/assets/{parameters-bundle.css.3db3a626.js → parameters-bundle.css.61a5fde8.js} +1 -1
  120. package/dist/assets/parameters-bundle.css.6d229ca8.js +1 -0
  121. package/dist/assets/parameters-bundle.css.7c26b98b.js +1 -0
  122. package/dist/assets/{parameters-bundle.css.780c6a0b.js → parameters-bundle.css.adc7c452.js} +1 -1
  123. package/dist/assets/{parameters-bundle.css.16d388d6.js → parameters-bundle.css.ba38c500.js} +1 -1
  124. package/dist/assets/{parameters-bundle.css.d4f504ed.js → parameters-bundle.css.c64ba63b.js} +1 -1
  125. package/dist/assets/{parameters-bundle.css.f0eeb6a4.js → parameters-bundle.css.cac9f3de.js} +1 -1
  126. package/dist/assets/parameters-bundle.css.cad0773b.js +1 -0
  127. package/dist/assets/parameters-bundle.css.d532d151.js +1 -0
  128. package/dist/assets/{parameters-bundle.css.7be18144.js → parameters-bundle.css.d5d27adb.js} +1 -1
  129. package/dist/assets/{parameters-bundle.css.f6aea851.js → parameters-bundle.css.fbd8d2ab.js} +1 -1
  130. package/dist/css/themes/Avatar.css +1 -1
  131. package/dist/css/themes/AvatarGroup.css +1 -1
  132. package/dist/css/themes/Badge.css +1 -1
  133. package/dist/css/themes/Breadcrumbs.css +1 -1
  134. package/dist/css/themes/BrowserScrollbar.css +1 -1
  135. package/dist/css/themes/Button.css +1 -1
  136. package/dist/css/themes/CalendarHeader.css +1 -1
  137. package/dist/css/themes/ComboBox.css +1 -1
  138. package/dist/css/themes/DatePicker.css +1 -1
  139. package/dist/css/themes/DayPicker.css +1 -1
  140. package/dist/css/themes/Dialog.css +1 -1
  141. package/dist/css/themes/GroupHeaderListItem.css +1 -1
  142. package/dist/css/themes/Input.css +1 -1
  143. package/dist/css/themes/Menu.css +1 -1
  144. package/dist/css/themes/MonthPicker.css +1 -1
  145. package/dist/css/themes/MultiComboBox.css +1 -1
  146. package/dist/css/themes/Panel.css +1 -1
  147. package/dist/css/themes/Select.css +1 -1
  148. package/dist/css/themes/TextArea.css +1 -1
  149. package/dist/css/themes/Title.css +1 -1
  150. package/dist/css/themes/Tokenizer.css +1 -1
  151. package/dist/css/themes/YearPicker.css +1 -1
  152. package/dist/css/themes/sap_belize/parameters-bundle.css +1 -1
  153. package/dist/css/themes/sap_belize_hcb/parameters-bundle.css +1 -1
  154. package/dist/css/themes/sap_belize_hcw/parameters-bundle.css +1 -1
  155. package/dist/css/themes/sap_fiori_3/parameters-bundle.css +1 -1
  156. package/dist/css/themes/sap_fiori_3_dark/parameters-bundle.css +1 -1
  157. package/dist/css/themes/sap_fiori_3_hcb/parameters-bundle.css +1 -1
  158. package/dist/css/themes/sap_fiori_3_hcw/parameters-bundle.css +1 -1
  159. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -1
  160. package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -1
  161. package/dist/css/themes/sap_horizon_exp/parameters-bundle.css +1 -1
  162. package/dist/css/themes/sap_horizon_hcb/parameters-bundle.css +1 -1
  163. package/dist/css/themes/sap_horizon_hcw/parameters-bundle.css +1 -1
  164. package/dist/features/InputElementsFormSupport.js +5 -1
  165. package/dist/features/InputSuggestions.js +21 -2
  166. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  167. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  168. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
  169. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  170. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -1
  171. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  172. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  173. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  174. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  175. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -1
  176. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -1
  177. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -1
  178. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -1
  179. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  180. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -1
  181. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  182. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  183. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  184. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -1
  185. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
  186. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  187. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  188. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  189. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
  190. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  191. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
  192. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  193. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  194. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  195. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
  196. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  197. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  198. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  199. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  200. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
  201. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  202. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  203. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
  204. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  205. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  206. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  207. package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
  208. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  209. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  210. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
  211. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  212. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  213. package/dist/generated/assets/themes/sap_belize/parameters-bundle.css.json +1 -1
  214. package/dist/generated/assets/themes/sap_belize_hcb/parameters-bundle.css.json +1 -1
  215. package/dist/generated/assets/themes/sap_belize_hcw/parameters-bundle.css.json +1 -1
  216. package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
  217. package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
  218. package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -1
  219. package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -1
  220. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  221. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  222. package/dist/generated/assets/themes/sap_horizon_exp/parameters-bundle.css.json +1 -1
  223. package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
  224. package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
  225. package/dist/generated/i18n/i18n-defaults.js +2 -2
  226. package/dist/generated/templates/AvatarTemplate.lit.js +1 -1
  227. package/dist/generated/templates/BreadcrumbsTemplate.lit.js +1 -1
  228. package/dist/generated/templates/CalendarHeaderTemplate.lit.js +2 -2
  229. package/dist/generated/templates/CalendarTemplate.lit.js +1 -1
  230. package/dist/generated/templates/CardHeaderTemplate.lit.js +2 -2
  231. package/dist/generated/templates/CarouselTemplate.lit.js +1 -1
  232. package/dist/generated/templates/ComboBoxPopoverTemplate.lit.js +3 -3
  233. package/dist/generated/templates/ComboBoxTemplate.lit.js +1 -1
  234. package/dist/generated/templates/CustomListItemTemplate.lit.js +2 -2
  235. package/dist/generated/templates/DatePickerTemplate.lit.js +1 -1
  236. package/dist/generated/templates/DialogTemplate.lit.js +7 -6
  237. package/dist/generated/templates/GroupHeaderListItemTemplate.lit.js +1 -1
  238. package/dist/generated/templates/IconTemplate.lit.js +2 -1
  239. package/dist/generated/templates/ListItemTemplate.lit.js +2 -2
  240. package/dist/generated/templates/ListTemplate.lit.js +1 -1
  241. package/dist/generated/templates/MenuTemplate.lit.js +1 -1
  242. package/dist/generated/templates/MonthPickerTemplate.lit.js +2 -1
  243. package/dist/generated/templates/MultiComboBoxPopoverTemplate.lit.js +3 -3
  244. package/dist/generated/templates/MultiComboBoxTemplate.lit.js +1 -1
  245. package/dist/generated/templates/PanelTemplate.lit.js +7 -6
  246. package/dist/generated/templates/PopoverTemplate.lit.js +1 -1
  247. package/dist/generated/templates/PopupTemplate.lit.js +1 -1
  248. package/dist/generated/templates/RangeSliderTemplate.lit.js +1 -1
  249. package/dist/generated/templates/ResponsivePopoverTemplate.lit.js +1 -1
  250. package/dist/generated/templates/SliderTemplate.lit.js +1 -1
  251. package/dist/generated/templates/StandardListItemTemplate.lit.js +2 -2
  252. package/dist/generated/templates/SuggestionListItemTemplate.lit.js +2 -2
  253. package/dist/generated/templates/TabContainerTemplate.lit.js +1 -1
  254. package/dist/generated/templates/TabInOverflowTemplate.lit.js +1 -1
  255. package/dist/generated/templates/TabInStripTemplate.lit.js +1 -1
  256. package/dist/generated/templates/TableTemplate.lit.js +9 -8
  257. package/dist/generated/templates/TextAreaTemplate.lit.js +1 -1
  258. package/dist/generated/templates/TreeListItemTemplate.lit.js +2 -2
  259. package/dist/generated/templates/YearPickerTemplate.lit.js +2 -1
  260. package/dist/generated/themes/Avatar.css.js +1 -1
  261. package/dist/generated/themes/AvatarGroup.css.js +1 -1
  262. package/dist/generated/themes/Badge.css.js +1 -1
  263. package/dist/generated/themes/Breadcrumbs.css.js +1 -1
  264. package/dist/generated/themes/BrowserScrollbar.css.js +1 -1
  265. package/dist/generated/themes/Button.css.js +1 -1
  266. package/dist/generated/themes/CalendarHeader.css.js +1 -1
  267. package/dist/generated/themes/ComboBox.css.js +1 -1
  268. package/dist/generated/themes/DatePicker.css.js +1 -1
  269. package/dist/generated/themes/DayPicker.css.js +1 -1
  270. package/dist/generated/themes/Dialog.css.js +1 -1
  271. package/dist/generated/themes/GroupHeaderListItem.css.js +1 -1
  272. package/dist/generated/themes/Input.css.js +1 -1
  273. package/dist/generated/themes/Menu.css.js +1 -1
  274. package/dist/generated/themes/MonthPicker.css.js +1 -1
  275. package/dist/generated/themes/MultiComboBox.css.js +1 -1
  276. package/dist/generated/themes/Panel.css.js +1 -1
  277. package/dist/generated/themes/Select.css.js +1 -1
  278. package/dist/generated/themes/TextArea.css.js +1 -1
  279. package/dist/generated/themes/Title.css.js +1 -1
  280. package/dist/generated/themes/Tokenizer.css.js +1 -1
  281. package/dist/generated/themes/YearPicker.css.js +1 -1
  282. package/dist/generated/themes/sap_belize/parameters-bundle.css.js +1 -1
  283. package/dist/generated/themes/sap_belize_hcb/parameters-bundle.css.js +1 -1
  284. package/dist/generated/themes/sap_belize_hcw/parameters-bundle.css.js +1 -1
  285. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  286. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  287. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -1
  288. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -1
  289. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  290. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
  291. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js +1 -1
  292. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -1
  293. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -1
  294. package/dist/i18n/messagebundle.properties +16 -4
  295. package/dist/i18n/messagebundle_ar.properties +10 -0
  296. package/dist/i18n/messagebundle_bg.properties +10 -0
  297. package/dist/i18n/messagebundle_ca.properties +10 -0
  298. package/dist/i18n/messagebundle_cs.properties +10 -0
  299. package/dist/i18n/messagebundle_cy.properties +10 -0
  300. package/dist/i18n/messagebundle_da.properties +10 -0
  301. package/dist/i18n/messagebundle_de.properties +11 -1
  302. package/dist/i18n/messagebundle_el.properties +10 -0
  303. package/dist/i18n/messagebundle_en.properties +10 -0
  304. package/dist/i18n/messagebundle_en_GB.properties +10 -0
  305. package/dist/i18n/messagebundle_en_US_sappsd.properties +10 -0
  306. package/dist/i18n/messagebundle_en_US_saprigi.properties +10 -2
  307. package/dist/i18n/messagebundle_en_US_saptrc.properties +11 -1
  308. package/dist/i18n/messagebundle_es.properties +10 -0
  309. package/dist/i18n/messagebundle_es_MX.properties +10 -0
  310. package/dist/i18n/messagebundle_et.properties +10 -0
  311. package/dist/i18n/messagebundle_fi.properties +10 -0
  312. package/dist/i18n/messagebundle_fr.properties +10 -0
  313. package/dist/i18n/messagebundle_fr_CA.properties +10 -0
  314. package/dist/i18n/messagebundle_hi.properties +10 -0
  315. package/dist/i18n/messagebundle_hr.properties +10 -0
  316. package/dist/i18n/messagebundle_hu.properties +10 -0
  317. package/dist/i18n/messagebundle_id.properties +10 -0
  318. package/dist/i18n/messagebundle_it.properties +12 -2
  319. package/dist/i18n/messagebundle_iw.properties +10 -0
  320. package/dist/i18n/messagebundle_ja.properties +10 -0
  321. package/dist/i18n/messagebundle_kk.properties +10 -0
  322. package/dist/i18n/messagebundle_ko.properties +10 -0
  323. package/dist/i18n/messagebundle_lt.properties +10 -0
  324. package/dist/i18n/messagebundle_lv.properties +10 -0
  325. package/dist/i18n/messagebundle_ms.properties +10 -0
  326. package/dist/i18n/messagebundle_nl.properties +10 -0
  327. package/dist/i18n/messagebundle_no.properties +10 -0
  328. package/dist/i18n/messagebundle_pl.properties +10 -0
  329. package/dist/i18n/messagebundle_pt.properties +10 -0
  330. package/dist/i18n/messagebundle_pt_PT.properties +10 -0
  331. package/dist/i18n/messagebundle_ro.properties +10 -0
  332. package/dist/i18n/messagebundle_ru.properties +10 -0
  333. package/dist/i18n/messagebundle_sh.properties +10 -0
  334. package/dist/i18n/messagebundle_sk.properties +10 -0
  335. package/dist/i18n/messagebundle_sl.properties +10 -0
  336. package/dist/i18n/messagebundle_sv.properties +10 -0
  337. package/dist/i18n/messagebundle_th.properties +13 -3
  338. package/dist/i18n/messagebundle_tr.properties +10 -0
  339. package/dist/i18n/messagebundle_uk.properties +11 -1
  340. package/dist/i18n/messagebundle_vi.properties +10 -0
  341. package/dist/i18n/messagebundle_zh_CN.properties +10 -0
  342. package/dist/i18n/messagebundle_zh_TW.properties +10 -0
  343. package/package.json +7 -7
  344. package/src/Avatar.hbs +2 -0
  345. package/src/Avatar.js +29 -1
  346. package/src/AvatarGroup.js +20 -2
  347. package/src/Breadcrumbs.hbs +1 -1
  348. package/src/BreadcrumbsItem.js +2 -2
  349. package/src/Button.js +4 -4
  350. package/src/Calendar.hbs +3 -0
  351. package/src/Calendar.js +33 -45
  352. package/src/CalendarHeader.hbs +5 -1
  353. package/src/CalendarHeader.js +5 -1
  354. package/src/CardHeader.hbs +2 -1
  355. package/src/CardHeader.js +1 -0
  356. package/src/Carousel.hbs +1 -1
  357. package/src/Carousel.js +9 -0
  358. package/src/CheckBox.js +2 -2
  359. package/src/ComboBox.hbs +1 -1
  360. package/src/ComboBox.js +52 -6
  361. package/src/ComboBoxPopover.hbs +1 -1
  362. package/src/DatePicker.hbs +2 -0
  363. package/src/DatePicker.js +17 -1
  364. package/src/DateRangePicker.js +8 -2
  365. package/src/DateTimePicker.js +1 -1
  366. package/src/Dialog.hbs +5 -1
  367. package/src/Dialog.js +41 -1
  368. package/src/GroupHeaderListItem.hbs +2 -2
  369. package/src/Icon.hbs +3 -1
  370. package/src/Icon.js +9 -9
  371. package/src/Input.js +32 -13
  372. package/src/Label.js +1 -3
  373. package/src/Link.js +4 -2
  374. package/src/List.hbs +1 -1
  375. package/src/List.js +17 -1
  376. package/src/ListItem.hbs +1 -1
  377. package/src/Menu.hbs +1 -0
  378. package/src/Menu.js +6 -4
  379. package/src/MenuItem.js +20 -5
  380. package/src/MessageStrip.js +1 -1
  381. package/src/MonthPicker.hbs +8 -1
  382. package/src/MonthPicker.js +9 -0
  383. package/src/MultiComboBox.hbs +1 -1
  384. package/src/MultiComboBox.js +47 -6
  385. package/src/MultiComboBoxPopover.hbs +1 -1
  386. package/src/MultiInput.js +9 -2
  387. package/src/Option.js +2 -2
  388. package/src/Panel.hbs +56 -46
  389. package/src/Panel.js +24 -4
  390. package/src/Popover.js +5 -4
  391. package/src/Popup.hbs +1 -1
  392. package/src/Popup.js +13 -2
  393. package/src/RadioButton.js +7 -5
  394. package/src/RangeSlider.hbs +2 -2
  395. package/src/RangeSlider.js +1 -1
  396. package/src/RatingIndicator.js +1 -1
  397. package/src/SegmentedButton.js +1 -1
  398. package/src/Select.js +34 -7
  399. package/src/Slider.hbs +1 -1
  400. package/src/Slider.js +1 -1
  401. package/src/SliderBase.js +4 -4
  402. package/src/SplitButton.js +2 -2
  403. package/src/StandardListItem.js +3 -3
  404. package/src/StepInput.js +1 -1
  405. package/src/SuggestionItem.js +2 -2
  406. package/src/Switch.js +1 -1
  407. package/src/Tab.js +17 -10
  408. package/src/TabContainer.hbs +5 -1
  409. package/src/TabContainer.js +169 -148
  410. package/src/TabInOverflow.hbs +1 -1
  411. package/src/TabInStrip.hbs +1 -1
  412. package/src/TabSeparator.js +8 -1
  413. package/src/Table.hbs +9 -7
  414. package/src/Table.js +1 -1
  415. package/src/TextArea.hbs +1 -1
  416. package/src/TextArea.js +8 -3
  417. package/src/TimePickerBase.js +8 -0
  418. package/src/TimeSelection.js +1 -2
  419. package/src/Tokenizer.js +74 -8
  420. package/src/Tree.js +4 -0
  421. package/src/TreeItem.js +2 -2
  422. package/src/TreeListItem.js +1 -1
  423. package/src/YearPicker.hbs +7 -0
  424. package/src/YearPicker.js +50 -25
  425. package/src/features/InputElementsFormSupport.js +5 -1
  426. package/src/features/InputSuggestions.js +21 -2
  427. package/src/i18n/messagebundle.properties +16 -4
  428. package/src/i18n/messagebundle_ar.properties +10 -0
  429. package/src/i18n/messagebundle_bg.properties +10 -0
  430. package/src/i18n/messagebundle_ca.properties +10 -0
  431. package/src/i18n/messagebundle_cs.properties +10 -0
  432. package/src/i18n/messagebundle_cy.properties +10 -0
  433. package/src/i18n/messagebundle_da.properties +10 -0
  434. package/src/i18n/messagebundle_de.properties +11 -1
  435. package/src/i18n/messagebundle_el.properties +10 -0
  436. package/src/i18n/messagebundle_en.properties +10 -0
  437. package/src/i18n/messagebundle_en_GB.properties +10 -0
  438. package/src/i18n/messagebundle_en_US_sappsd.properties +10 -0
  439. package/src/i18n/messagebundle_en_US_saprigi.properties +10 -2
  440. package/src/i18n/messagebundle_en_US_saptrc.properties +11 -1
  441. package/src/i18n/messagebundle_es.properties +10 -0
  442. package/src/i18n/messagebundle_es_MX.properties +10 -0
  443. package/src/i18n/messagebundle_et.properties +10 -0
  444. package/src/i18n/messagebundle_fi.properties +10 -0
  445. package/src/i18n/messagebundle_fr.properties +10 -0
  446. package/src/i18n/messagebundle_fr_CA.properties +10 -0
  447. package/src/i18n/messagebundle_hi.properties +10 -0
  448. package/src/i18n/messagebundle_hr.properties +10 -0
  449. package/src/i18n/messagebundle_hu.properties +10 -0
  450. package/src/i18n/messagebundle_id.properties +10 -0
  451. package/src/i18n/messagebundle_it.properties +12 -2
  452. package/src/i18n/messagebundle_iw.properties +10 -0
  453. package/src/i18n/messagebundle_ja.properties +10 -0
  454. package/src/i18n/messagebundle_kk.properties +10 -0
  455. package/src/i18n/messagebundle_ko.properties +10 -0
  456. package/src/i18n/messagebundle_lt.properties +10 -0
  457. package/src/i18n/messagebundle_lv.properties +10 -0
  458. package/src/i18n/messagebundle_ms.properties +10 -0
  459. package/src/i18n/messagebundle_nl.properties +10 -0
  460. package/src/i18n/messagebundle_no.properties +10 -0
  461. package/src/i18n/messagebundle_pl.properties +10 -0
  462. package/src/i18n/messagebundle_pt.properties +10 -0
  463. package/src/i18n/messagebundle_pt_PT.properties +10 -0
  464. package/src/i18n/messagebundle_ro.properties +10 -0
  465. package/src/i18n/messagebundle_ru.properties +10 -0
  466. package/src/i18n/messagebundle_sh.properties +10 -0
  467. package/src/i18n/messagebundle_sk.properties +10 -0
  468. package/src/i18n/messagebundle_sl.properties +10 -0
  469. package/src/i18n/messagebundle_sv.properties +10 -0
  470. package/src/i18n/messagebundle_th.properties +13 -3
  471. package/src/i18n/messagebundle_tr.properties +10 -0
  472. package/src/i18n/messagebundle_uk.properties +11 -1
  473. package/src/i18n/messagebundle_vi.properties +10 -0
  474. package/src/i18n/messagebundle_zh_CN.properties +10 -0
  475. package/src/i18n/messagebundle_zh_TW.properties +10 -0
  476. package/src/themes/Avatar.css +51 -0
  477. package/src/themes/AvatarGroup.css +1 -0
  478. package/src/themes/Badge.css +12 -0
  479. package/src/themes/Breadcrumbs.css +3 -0
  480. package/src/themes/BrowserScrollbar.css +6 -6
  481. package/src/themes/Button.css +5 -0
  482. package/src/themes/CalendarHeader.css +2 -2
  483. package/src/themes/DatePicker.css +13 -1
  484. package/src/themes/DayPicker.css +4 -4
  485. package/src/themes/Dialog.css +35 -0
  486. package/src/themes/GroupHeaderListItem.css +1 -0
  487. package/src/themes/Icon.css +1 -1
  488. package/src/themes/Input.css +34 -22
  489. package/src/themes/Menu.css +1 -0
  490. package/src/themes/MonthPicker.css +9 -2
  491. package/src/themes/Panel.css +0 -4
  492. package/src/themes/TextArea.css +7 -7
  493. package/src/themes/Title.css +1 -1
  494. package/src/themes/Tokenizer.css +1 -5
  495. package/src/themes/YearPicker.css +13 -2
  496. package/src/themes/base/DayPicker-parameters.css +3 -0
  497. package/src/themes/base/Dialog-parameters.css +8 -0
  498. package/src/themes/base/Input-parameters.css +2 -1
  499. package/src/themes/sap_belize/DayPicker-parameters.css +1 -1
  500. package/src/themes/sap_belize_hcb/Button-parameters.css +1 -0
  501. package/src/themes/sap_belize_hcb/DayPicker-parameters.css +7 -0
  502. package/src/themes/sap_belize_hcb/Input-parameters.css +3 -0
  503. package/src/themes/sap_belize_hcw/Button-parameters.css +1 -0
  504. package/src/themes/sap_belize_hcw/DayPicker-parameters.css +7 -0
  505. package/src/themes/sap_belize_hcw/Input-parameters.css +3 -0
  506. package/src/themes/sap_fiori_3_hcb/Button-parameters.css +1 -0
  507. package/src/themes/sap_fiori_3_hcb/Dialog-parameters.css +8 -0
  508. package/src/themes/sap_fiori_3_hcb/Input-parameters.css +2 -1
  509. package/src/themes/sap_fiori_3_hcw/Button-parameters.css +1 -0
  510. package/src/themes/sap_fiori_3_hcw/Dialog-parameters.css +8 -0
  511. package/src/themes/sap_fiori_3_hcw/Input-parameters.css +2 -1
  512. package/src/themes/sap_horizon/parameters-bundle.css +1 -1
  513. package/src/themes/sap_horizon_dark/parameters-bundle.css +1 -1
  514. package/src/themes/sap_horizon_hcb/Dialog-parameters.css +4 -0
  515. package/src/themes/sap_horizon_hcb/Input-parameters.css +1 -1
  516. package/src/themes/sap_horizon_hcw/Dialog-parameters.css +4 -0
  517. package/src/themes/sap_horizon_hcw/Input-parameters.css +1 -1
  518. package/dist/assets/SAP-icons-business-suite.60260cdf.js +0 -1
  519. package/dist/assets/SAP-icons.09567bd9.js +0 -1
  520. package/dist/assets/SAP-icons.1f482d05.js +0 -1
  521. package/dist/assets/messagebundle_ar.9c5ee5ed.js +0 -1
  522. package/dist/assets/messagebundle_bg.0e988870.js +0 -1
  523. package/dist/assets/messagebundle_ca.a127ab38.js +0 -1
  524. package/dist/assets/messagebundle_cs.629a9626.js +0 -1
  525. package/dist/assets/messagebundle_cy.9e45bbce.js +0 -1
  526. package/dist/assets/messagebundle_da.773ab830.js +0 -1
  527. package/dist/assets/messagebundle_de.e3b00529.js +0 -1
  528. package/dist/assets/messagebundle_el.40c4d9bd.js +0 -1
  529. package/dist/assets/messagebundle_en.8eab6481.js +0 -1
  530. package/dist/assets/messagebundle_en_GB.43ff6ad4.js +0 -1
  531. package/dist/assets/messagebundle_en_US_sappsd.3123c345.js +0 -1
  532. package/dist/assets/messagebundle_en_US_saprigi.ce3d7e4c.js +0 -1
  533. package/dist/assets/messagebundle_en_US_saptrc.09e99a05.js +0 -1
  534. package/dist/assets/messagebundle_es.827626df.js +0 -1
  535. package/dist/assets/messagebundle_es_MX.a36afbf1.js +0 -1
  536. package/dist/assets/messagebundle_et.ef5644ec.js +0 -1
  537. package/dist/assets/messagebundle_fi.51171aa3.js +0 -1
  538. package/dist/assets/messagebundle_fr.1534fb7f.js +0 -1
  539. package/dist/assets/messagebundle_fr_CA.3ec2f1d9.js +0 -1
  540. package/dist/assets/messagebundle_hi.df105d55.js +0 -1
  541. package/dist/assets/messagebundle_hr.99b625e3.js +0 -1
  542. package/dist/assets/messagebundle_hu.45d5a14f.js +0 -1
  543. package/dist/assets/messagebundle_it.baf6d99f.js +0 -1
  544. package/dist/assets/messagebundle_iw.50133cb0.js +0 -1
  545. package/dist/assets/messagebundle_ja.4684bb4f.js +0 -1
  546. package/dist/assets/messagebundle_kk.153a974f.js +0 -1
  547. package/dist/assets/messagebundle_ko.2cbd9a48.js +0 -1
  548. package/dist/assets/messagebundle_lt.4792b637.js +0 -1
  549. package/dist/assets/messagebundle_lv.1c982a41.js +0 -1
  550. package/dist/assets/messagebundle_ms.6de4a307.js +0 -1
  551. package/dist/assets/messagebundle_nl.346b5b0c.js +0 -1
  552. package/dist/assets/messagebundle_no.55c09a78.js +0 -1
  553. package/dist/assets/messagebundle_pl.24f1673c.js +0 -1
  554. package/dist/assets/messagebundle_pt.a0acef65.js +0 -1
  555. package/dist/assets/messagebundle_pt_PT.d5340844.js +0 -1
  556. package/dist/assets/messagebundle_ro.c47aa2e7.js +0 -1
  557. package/dist/assets/messagebundle_ru.9d147f84.js +0 -1
  558. package/dist/assets/messagebundle_sh.42d912a5.js +0 -1
  559. package/dist/assets/messagebundle_sk.66be6ecd.js +0 -1
  560. package/dist/assets/messagebundle_sl.7aef5bf8.js +0 -1
  561. package/dist/assets/messagebundle_sv.0e001a3d.js +0 -1
  562. package/dist/assets/messagebundle_th.a1ae28b0.js +0 -1
  563. package/dist/assets/messagebundle_tr.91751c7e.js +0 -1
  564. package/dist/assets/messagebundle_uk.3fff2ce5.js +0 -1
  565. package/dist/assets/messagebundle_vi.dcd6b37b.js +0 -1
  566. package/dist/assets/messagebundle_zh_CN.3447b7cf.js +0 -1
  567. package/dist/assets/messagebundle_zh_TW.a6d3c782.js +0 -1
  568. package/dist/assets/parameters-bundle.css.01f054a7.js +0 -1
  569. package/dist/assets/parameters-bundle.css.0a36e0eb.js +0 -1
  570. package/dist/assets/parameters-bundle.css.38e4d904.js +0 -1
  571. package/dist/assets/parameters-bundle.css.40bf20d0.js +0 -1
  572. package/dist/assets/parameters-bundle.css.4260a678.js +0 -1
  573. package/dist/assets/parameters-bundle.css.4cd19aca.js +0 -1
  574. package/dist/assets/parameters-bundle.css.4d47c982.js +0 -1
  575. package/dist/assets/parameters-bundle.css.6993a07a.js +0 -1
  576. package/dist/assets/parameters-bundle.css.6f186b45.js +0 -1
  577. package/dist/assets/parameters-bundle.css.9c6e589c.js +0 -1
  578. package/dist/assets/parameters-bundle.css.c35f092e.js +0 -1
  579. package/dist/assets/parameters-bundle.css.d09464d2.js +0 -1
package/src/Tab.js CHANGED
@@ -99,7 +99,7 @@ const metadata = {
99
99
  /**
100
100
  * Defines the icon source URI to be displayed as graphical element within the component.
101
101
  * The SAP-icons font provides numerous built-in icons.
102
- * See all the available icons in the <ui5-link target="_blank" href="https://openui5.hana.ondemand.com/test-resources/sap/m/demokit/iconExplorer/webapp/index.html" class="api-table-content-cell-link">Icon Explorer</ui5-link>.
102
+ * See all the available icons in the <ui5-link target="_blank" href="https://sdk.openui5.org/test-resources/sap/m/demokit/iconExplorer/webapp/index.html" class="api-table-content-cell-link">Icon Explorer</ui5-link>.
103
103
  *
104
104
  * @type {string}
105
105
  * @defaultvalue ""
@@ -144,12 +144,6 @@ const metadata = {
144
144
  type: Boolean,
145
145
  },
146
146
 
147
- _tabIndex: {
148
- type: String,
149
- defaultValue: "-1",
150
- noAttribute: true,
151
- },
152
-
153
147
  _selected: {
154
148
  type: Boolean,
155
149
  },
@@ -205,6 +199,14 @@ class Tab extends UI5Element {
205
199
  return css;
206
200
  }
207
201
 
202
+ set _tabIndex(val) {
203
+ this.getTabInStripDomRef().setAttribute("tabindex", val);
204
+ }
205
+
206
+ get _tabIndex() {
207
+ return this.getTabInStripDomRef().getAttribute("tabindex");
208
+ }
209
+
208
210
  static get dependencies() {
209
211
  return [
210
212
  Icon,
@@ -266,6 +268,7 @@ class Tab extends UI5Element {
266
268
 
267
269
  /**
268
270
  * Returns the DOM reference of the tab that is placed in the header.
271
+ * <b>Note:</b> Tabs, placed in the <code>subTabs</code> slot of other tabs are not shown in the header. Calling this method on such tabs will return <code>null</code>.
269
272
  * <b>Note:</b> If you need a DOM ref to the tab content please use the <code>getDomRef</code> method.
270
273
  *
271
274
  * @function
@@ -273,14 +276,18 @@ class Tab extends UI5Element {
273
276
  * @since 1.0.0-rc.16
274
277
  */
275
278
  getTabInStripDomRef() {
276
- return this._tabInStripDomRef;
279
+ if (this._getElementInStrip) {
280
+ return this._getElementInStrip();
281
+ }
282
+
283
+ return null;
277
284
  }
278
285
 
279
286
  getFocusDomRef() {
280
287
  let focusedDomRef = super.getFocusDomRef();
281
288
 
282
- if (this._getTabContainerHeaderItemCallback) {
283
- focusedDomRef = this._getTabContainerHeaderItemCallback();
289
+ if (this._getElementInStrip) {
290
+ focusedDomRef = this._getElementInStrip();
284
291
  }
285
292
 
286
293
  return focusedDomRef;
@@ -2,7 +2,11 @@
2
2
  {{#if tabsAtTheBottom}}
3
3
  {{> contentArea}}
4
4
  {{/if}}
5
- <div class="{{classes.header}}" id="{{_id}}-header">
5
+ <div
6
+ class="{{classes.header}}"
7
+ id="{{_id}}-header"
8
+ @focusin="{{_onHeaderFocusin}}"
9
+ >
6
10
  <div
7
11
  class="ui5-tc__overflow ui5-tc__overflow--start"
8
12
  @click="{{_onOverflowClick}}"
@@ -13,6 +13,7 @@ import {
13
13
  isDown,
14
14
  isRight,
15
15
  isLeft,
16
+ isUp,
16
17
  } from "@ui5/webcomponents-base/dist/Keys.js";
17
18
  import MediaRange from "@ui5/webcomponents-base/dist/MediaRange.js";
18
19
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
@@ -45,6 +46,8 @@ import TabsOverflowMode from "./types/TabsOverflowMode.js";
45
46
  const tabStyles = [];
46
47
  const staticAreaTabStyles = [];
47
48
 
49
+ const PAGE_UP_DOWN_SIZE = 5;
50
+
48
51
  /**
49
52
  * @public
50
53
  */
@@ -156,8 +159,8 @@ const metadata = {
156
159
  * @type {boolean}
157
160
  * @defaultvalue false
158
161
  * @public
159
- * @deprecated Since the introduction of TabsOverflowMode overflows will always be visible if there is not enough space for all tabs,
160
- * all hidden tabs are moved to a select list in the respective overflows and are accessible via the overflowButton and / or startOverflowButton
162
+ * @deprecated Since the introduction of TabsOverflowMode, overflows will always be visible if there is not enough space for all tabs,
163
+ * all hidden tabs are moved to a select list in the respective overflows and are accessible via the <code>overflowButton</code> and / or <code>startOverflowButton</code> slots.
161
164
  */
162
165
  showOverflow: {
163
166
  type: Boolean,
@@ -261,8 +264,9 @@ const metadata = {
261
264
  *
262
265
  * @event sap.ui.webcomponents.main.TabContainer#tab-select
263
266
  * @param {HTMLElement} tab The selected <code>tab</code>.
264
- * @param {Integer} tabIndex The selected <code>tab</code> index.
267
+ * @param {Integer} tabIndex The selected <code>tab</code> index in the flattened array of all tabs and their subTabs, provided by the <code>allItems</code> getter.
265
268
  * @public
269
+ * @allowPreventDefault
266
270
  */
267
271
  "tab-select": {
268
272
  detail: {
@@ -368,24 +372,27 @@ class TabContainer extends UI5Element {
368
372
 
369
373
  // Init ItemNavigation
370
374
  this._itemNavigation = new ItemNavigation(this, {
371
- getItemsCallback: () => this._getFocusableTabs(),
375
+ getItemsCallback: () => this._getFocusableRefs(),
376
+ skipItemsSize: PAGE_UP_DOWN_SIZE,
372
377
  });
373
378
  }
374
379
 
375
380
  onBeforeRendering() {
376
- // update selected tab
377
381
  this._allItemsAndSubItems = this._getAllSubItems(this.items);
378
- if (this._allItemsAndSubItems.length) {
379
- const selectedTabs = this._allItemsAndSubItems.filter(tab => tab.selected);
380
- if (selectedTabs.length) {
381
- this._selectedTab = selectedTabs[0];
382
- } else {
383
- this._selectedTab = this._allItemsAndSubItems[0];
384
- this._selectedTab._selected = true;
385
- }
382
+ if (!this._allItemsAndSubItems.length) {
383
+ return;
386
384
  }
387
385
 
388
- this._setItemsExternalProperties(this.items);
386
+ // update selected tab
387
+ const selectedTabs = this._allItemsAndSubItems.filter(tab => tab.selected);
388
+ if (selectedTabs.length) {
389
+ this._selectedTab = selectedTabs[0];
390
+ } else {
391
+ this._selectedTab = this._allItemsAndSubItems[0];
392
+ this._selectedTab._selected = true;
393
+ }
394
+
395
+ this._setItemsPrivateProperties(this.items);
389
396
 
390
397
  if (!this._animationRunning) {
391
398
  this._contentCollapsed = this.collapsed;
@@ -397,9 +404,16 @@ class TabContainer extends UI5Element {
397
404
  }
398
405
 
399
406
  onAfterRendering() {
400
- this.items.forEach(item => {
401
- item._tabInStripDomRef = this.getDomRef().querySelector(`*[data-ui5-stable="${item.stableDomRef}"]`);
402
- });
407
+ if (!this.items.length) {
408
+ return;
409
+ }
410
+
411
+ this._setItemsForStrip();
412
+
413
+ if (!this.shadowRoot.contains(document.activeElement)) {
414
+ const focusStart = this._getRootTab(this._selectedTab);
415
+ this._itemNavigation.setCurrentItem(focusStart);
416
+ }
403
417
  }
404
418
 
405
419
  onEnterDOM() {
@@ -424,31 +438,45 @@ class TabContainer extends UI5Element {
424
438
  this.mediaRange = MediaRange.getCurrentRange(MediaRange.RANGESETS.RANGE_4STEPS, this.getDomRef().offsetWidth);
425
439
  }
426
440
 
427
- _setItemsExternalProperties(items) {
428
- items.filter(item => !item.isSeparator).forEach((item, index, arr) => {
429
- item._isInline = this.tabLayout === TabLayout.Inline;
430
- item._mixedMode = this.mixedMode;
431
- item._posinset = index + 1;
432
- item._setsize = arr.length;
433
- item._getTabContainerHeaderItemCallback = _ => this.getDomRef().querySelector(`#${item._id}`);
434
- item._itemSelectCallback = this._onItemSelect.bind(this);
435
- item._getRealDomRef = () => this.getDomRef().querySelector(`*[data-ui5-stable=${item.stableDomRef}]`);
436
- item._realTab = this._selectedTab;
437
- item._isTopLevelTab = this.items.some(i => i === item);
438
- walk(items, tab => {
439
- tab._realTab = item._realTab;
441
+ _setItemsPrivateProperties(items) {
442
+ // set real dom ref to all items, then return only the tabs for further processing
443
+ const allTabs = items.filter(item => {
444
+ item._getElementInStrip = () => this.getDomRef().querySelector(`*[data-ui5-stable=${item.stableDomRef}]`);
445
+ return !item.isSeparator;
446
+ });
447
+
448
+ allTabs.forEach((tab, index, arr) => {
449
+ tab._isInline = this.tabLayout === TabLayout.Inline;
450
+ tab._mixedMode = this.mixedMode;
451
+ tab._posinset = index + 1;
452
+ tab._setsize = arr.length;
453
+ tab._realTab = this._selectedTab;
454
+ tab._isTopLevelTab = items.some(i => i === tab);
455
+ walk(items, _tab => {
456
+ _tab._realTab = tab._realTab;
440
457
  });
441
458
  });
442
459
  }
443
460
 
461
+ _onHeaderFocusin(event) {
462
+ let target = event.target;
463
+
464
+ const tab = getTab(target);
465
+ if (tab) {
466
+ target = tab._realTab;
467
+ }
468
+
469
+ this._itemNavigation.setCurrentItem(target);
470
+ }
471
+
444
472
  async _onTabStripClick(event) {
445
473
  const tab = getTab(event.target);
446
474
  if (!tab || tab._realTab.disabled) {
447
475
  return;
448
476
  }
449
477
 
450
- event.preventDefault();
451
478
  event.stopPropagation();
479
+ event.preventDefault();
452
480
  if (event.target.hasAttribute("ui5-button")) {
453
481
  this._onTabExpandButtonClick(event);
454
482
  return;
@@ -462,10 +490,10 @@ class TabContainer extends UI5Element {
462
490
  if (this.responsivePopover.opened) {
463
491
  this.responsivePopover.close();
464
492
  } else {
465
- this._setInitialFocus(this._getSelectedInPopover());
493
+ this._setPopoverInitialFocus();
466
494
  }
467
495
 
468
- this.responsivePopover.showAt(tab);
496
+ this.responsivePopover.showAt(tab._realTab.getTabInStripDomRef());
469
497
  return;
470
498
  }
471
499
  this._onHeaderItemSelect(tab);
@@ -496,20 +524,27 @@ class TabContainer extends UI5Element {
496
524
  this._addStyleIndent(this._overflowItems);
497
525
 
498
526
  this.responsivePopover = await this._respPopover();
499
- if (this.responsivePopover.opened) {
527
+ if (this.responsivePopover.isOpen()) {
500
528
  this.responsivePopover.close();
501
529
  } else {
502
- this._setInitialFocus(this._getSelectedInPopover());
530
+ this._setPopoverInitialFocus();
503
531
  }
504
532
  this.responsivePopover.showAt(button);
505
533
  }
506
534
 
507
- _setInitialFocus(selectedInPopover) {
508
- if (selectedInPopover.length) {
509
- this.responsivePopover.initialFocus = selectedInPopover[0].id;
510
- } else {
511
- this.responsivePopover.initialFocus = this.responsivePopover.content[0].items.filter(item => item.classList.contains("ui5-tab-overflow-item"))[0].id;
512
- }
535
+ async _setPopoverInitialFocus() {
536
+ const selectedTabInOverflow = this._getSelectedTabInOverflow();
537
+ const tab = selectedTabInOverflow || this._getFirstFocusableItemInOverflow();
538
+
539
+ this.responsivePopover.initialFocus = `${tab._realTab._id}-li`;
540
+ }
541
+
542
+ _getSelectedTabInOverflow() {
543
+ return this.responsivePopover.content[0].items.find(item => (item._realTab && item._realTab.selected));
544
+ }
545
+
546
+ _getFirstFocusableItemInOverflow() {
547
+ return this.responsivePopover.content[0].items.find(item => item.classList.contains("ui5-tab-overflow-item"));
513
548
  }
514
549
 
515
550
  _onTabStripKeyDown(event) {
@@ -530,7 +565,7 @@ class TabContainer extends UI5Element {
530
565
  event.preventDefault(); // prevent scrolling
531
566
  }
532
567
 
533
- if (isDown(event)) {
568
+ if (isDown(event) || isUp(event)) {
534
569
  if (tab._realTab.requiresExpandButton) {
535
570
  this._onTabExpandButtonClick(event);
536
571
  }
@@ -558,26 +593,44 @@ class TabContainer extends UI5Element {
558
593
 
559
594
  _onHeaderItemSelect(tab) {
560
595
  if (!tab.hasAttribute("disabled")) {
561
- this._onItemSelect(tab);
562
-
563
- if (!this.isModeStartAndEnd) {
564
- this._setItemsForStrip();
565
- }
596
+ this._onItemSelect(tab.id);
566
597
  }
567
598
  }
568
599
 
569
600
  async _onOverflowListItemClick(event) {
570
601
  event.preventDefault(); // cancel the item selection
571
- const { item } = event.detail;
572
602
 
573
- this._onItemSelect(item);
574
- await this.responsivePopover.close();
603
+ this._onItemSelect(event.detail.item.id.slice(0, -3)); // strip "-li" from end of id
575
604
 
576
- this._setItemsForStrip();
605
+ this.responsivePopover.close();
606
+ await renderFinished();
577
607
 
578
608
  const selectedTopLevel = this._getRootTab(this._selectedTab);
579
-
580
- selectedTopLevel.focus();
609
+ selectedTopLevel.getTabInStripDomRef().focus();
610
+ }
611
+
612
+ /**
613
+ * Returns all slotted tabs and their subTabs in a flattened array.
614
+ * The order of tabs is depth-first. For example, given the following slotted elements:
615
+ * <code>
616
+ * <ui5-tabcontainer>
617
+ * <ui5-tab id="First">
618
+ * ...
619
+ * <ui5-tab slot="subTabs" id="Nested">...</ui5-tab>
620
+ * </ui5-tab>
621
+ * <ui5-tab id="Second">...</ui5-tab>
622
+ * <ui5-tab-separator id="sep"></ui5-tab-separator>
623
+ * <ui5-tab id="Third">...</ui5-tab>
624
+ * </ui5-tabcontainer>
625
+ * </code>
626
+ * Calling <code>allItems</code> on this TabContainer will return the instances in the following order:
627
+ * <code>[ ui5-tab#First, ui5-tab#Nested, ui5-tab#Second, ui5-tab-separator#sep, ui5-tab#Third ]</code>
628
+ * @public
629
+ *
630
+ * @returns {sap.ui.webcomponents.main.ITab[]}
631
+ */
632
+ get allItems() {
633
+ return this._getAllSubItems(this.items);
581
634
  }
582
635
 
583
636
  _getAllSubItems(items, result = [], level = 1) {
@@ -593,44 +646,44 @@ class TabContainer extends UI5Element {
593
646
  return result;
594
647
  }
595
648
 
596
- _onItemSelect(target) {
597
- const selectedIndex = findIndex(this._allItemsAndSubItems, item => item.__id === target.id);
598
- const selectedTabIndex = findIndex(this._allItemsAndSubItems, item => item.__id === target.id);
599
- const selectedTab = this._allItemsAndSubItems[selectedIndex];
649
+ _onItemSelect(selectedTabId) {
650
+ const previousTab = this._selectedTab;
651
+ const selectedTabIndex = this._allItemsAndSubItems.findIndex(item => item.__id === selectedTabId);
652
+ const selectedTab = this._allItemsAndSubItems[selectedTabIndex];
600
653
 
601
- // update selected items
602
- this._allItemsAndSubItems
603
- .forEach((item, index) => {
604
- const selected = selectedIndex === index;
605
- item.selected = selected;
654
+ const selectionSuccessful = this.selectTab(selectedTab, selectedTabIndex);
655
+ if (!selectionSuccessful) {
656
+ return;
657
+ }
606
658
 
607
- if (item._selected) {
608
- item._selected = false;
609
- }
610
- });
659
+ // update selected property on all items
660
+ this._allItemsAndSubItems.forEach((item, index) => {
661
+ const selected = selectedTabIndex === index;
662
+ item.selected = selected;
663
+
664
+ if (item._selected) {
665
+ item._selected = false;
666
+ }
667
+ });
611
668
 
612
669
  if (this.fixed) {
613
- this.selectTab(selectedTab, selectedTabIndex);
614
670
  return;
615
671
  }
616
672
 
617
673
  if (!this.animate) {
618
- this.toggle(selectedTab);
619
- this.selectTab(selectedTab, selectedTabIndex);
620
- return;
674
+ this.toggle(selectedTab, previousTab);
675
+ } else {
676
+ this.toggleAnimated(selectedTab, previousTab);
621
677
  }
622
-
623
- this.toggleAnimated(selectedTab);
624
- this.selectTab(selectedTab, selectedTabIndex);
625
678
  }
626
679
 
627
- async toggleAnimated(selectedTab) {
680
+ async toggleAnimated(selectedTab, previousTab) {
628
681
  const content = this.shadowRoot.querySelector(".ui5-tc__content");
629
682
  let animationPromise = null;
630
683
 
631
684
  this._animationRunning = true;
632
685
 
633
- if (selectedTab === this._selectedTab) {
686
+ if (selectedTab === previousTab) {
634
687
  // click on already selected tab - animate both directions
635
688
  this.collapsed = !this.collapsed;
636
689
  animationPromise = this.collapsed ? this.slideContentUp(content) : this.slideContentDown(content);
@@ -645,21 +698,31 @@ class TabContainer extends UI5Element {
645
698
  this._animationRunning = false;
646
699
  }
647
700
 
648
- toggle(selectedTab) {
649
- if (selectedTab === this._selectedTab) {
701
+ toggle(selectedTab, previousTab) {
702
+ if (selectedTab === previousTab) {
650
703
  this.collapsed = !this.collapsed;
651
704
  } else {
652
705
  this.collapsed = false;
653
706
  }
654
707
  }
655
708
 
709
+ /**
710
+ * Fires the <code>tab-select</code> event and changes the internal reference for the currently selected tab.
711
+ * If the event is prevented, the current tab is not changed.
712
+ * @private
713
+ *
714
+ * @param {object} selectedTab selected tab instance
715
+ * @param {number} selectedTabIndex selected tab index for an array containing all tabs and sub tabs. <b>Note:</b> Use the method <code>allTabs</code> to get this array.
716
+ * @returns {boolean} true if the tab selection is successful, false if it was prevented
717
+ */
656
718
  selectTab(selectedTab, selectedTabIndex) {
719
+ if (!this.fireEvent("tab-select", { tab: selectedTab, tabIndex: selectedTabIndex }, true)) {
720
+ return false;
721
+ }
722
+
657
723
  // select the tab
658
724
  this._selectedTab = selectedTab;
659
- this.fireEvent("tab-select", {
660
- tab: selectedTab,
661
- tabIndex: selectedTabIndex,
662
- });
725
+ return true;
663
726
  }
664
727
 
665
728
  slideContentDown(element) {
@@ -679,44 +742,34 @@ class TabContainer extends UI5Element {
679
742
  const overflow = event.currentTarget;
680
743
  const isEndOverflow = overflow.classList.contains("ui5-tc__overflow--end");
681
744
  const isStartOverflow = overflow.classList.contains("ui5-tc__overflow--start");
682
- const items = [];
683
-
684
745
  const overflowAttr = isEndOverflow ? "end-overflow" : "start-overflow";
685
746
 
686
- this._overflowItems = [];
747
+ this._overflowItems = this.items.filter(item => {
748
+ const stripRef = item.getTabInStripDomRef();
687
749
 
688
- this.items.forEach(item => {
689
- if (item.getTabInStripDomRef() && item.getTabInStripDomRef().hasAttribute(overflowAttr)) {
690
- items.push(item);
691
- }
750
+ return stripRef && stripRef.hasAttribute(overflowAttr);
692
751
  });
693
752
 
694
- let button;
753
+ this._addStyleIndent(this._overflowItems);
754
+
755
+ let opener;
695
756
  if (isEndOverflow) {
696
- button = this.overflowButton[0] || overflow.querySelector("[ui5-button]");
697
- this._overflowItems = items;
698
- this._addStyleIndent(this._overflowItems);
757
+ opener = this.overflowButton[0] || this._getEndOverflowBtnDOM();
699
758
  }
700
759
 
701
760
  if (isStartOverflow) {
702
- button = this.startOverflowButton[0] || overflow.querySelector("[ui5-button]");
703
- this._overflowItems = items;
704
- this._addStyleIndent(this._overflowItems);
761
+ opener = this.startOverflowButton[0] || this._getStartOverflowBtnDOM();
705
762
  }
706
763
 
707
764
  this.responsivePopover = await this._respPopover();
708
765
  if (this.responsivePopover.opened) {
709
766
  this.responsivePopover.close();
710
767
  } else {
711
- this.responsivePopover.initialFocus = this.responsivePopover.content[0].items.filter(item => item.classList.contains("ui5-tab-overflow-item"))[0].id;
712
- await this.responsivePopover.showAt(button);
768
+ this._setPopoverInitialFocus();
769
+ this.responsivePopover.showAt(opener);
713
770
  }
714
771
  }
715
772
 
716
- _getSelectedInPopover() {
717
- return this.responsivePopover.content[0].items.filter(item => (item._realTab && item._realTab.selected));
718
- }
719
-
720
773
  _addStyleIndent(tabs) {
721
774
  const extraIndent = this._getAllSubItems(tabs)
722
775
  .filter(tab => !tab.isSeparator)
@@ -737,10 +790,13 @@ class TabContainer extends UI5Element {
737
790
  }
738
791
 
739
792
  async _onOverflowKeyDown(event) {
740
- const isEndOverflow = event.currentTarget.classList.contains("ui5-tc__overflow--end");
741
- const isStartOverflow = event.currentTarget.classList.contains("ui5-tc__overflow--start");
793
+ const overflow = event.currentTarget;
794
+ const isEndOverflow = overflow.classList.contains("ui5-tc__overflow--end");
795
+ const isStartOverflow = overflow.classList.contains("ui5-tc__overflow--start");
742
796
 
743
797
  if (isDown(event) || (isStartOverflow && isLeft(event)) || (isEndOverflow && isRight(event))) {
798
+ event.stopPropagation();
799
+ event.preventDefault();
744
800
  await this._onOverflowClick(event);
745
801
  }
746
802
  }
@@ -771,9 +827,7 @@ class TabContainer extends UI5Element {
771
827
  });
772
828
 
773
829
  const hasOverflow = tabStrip.offsetWidth < allItemsWidth;
774
-
775
830
  if (!hasOverflow) {
776
- this._closeRespPopover();
777
831
  return;
778
832
  }
779
833
 
@@ -783,9 +837,6 @@ class TabContainer extends UI5Element {
783
837
  } else {
784
838
  this._updateEndOverflow(itemsDomRefs);
785
839
  }
786
-
787
- this._itemNavigation._init();
788
- this._itemNavigation.setCurrentItem(this._getRootTab(this._selectedTab));
789
840
  }
790
841
 
791
842
  _getRootTab(tab) {
@@ -1033,41 +1084,31 @@ class TabContainer extends UI5Element {
1033
1084
  this._endOverflowText = `+${endOverflowItemsCount}`;
1034
1085
  }
1035
1086
 
1036
- async _closeRespPopover() {
1037
- this.responsivePopover = await this._respPopover();
1038
- this.responsivePopover.close();
1039
- }
1040
-
1041
- _getFocusableTabs() {
1087
+ _getFocusableRefs() {
1042
1088
  if (!this.getDomRef()) {
1043
1089
  return [];
1044
1090
  }
1045
1091
 
1046
- const focusableTabs = [];
1092
+ const focusableRefs = [];
1047
1093
 
1048
1094
  if (!this._getStartOverflow().hasAttribute("hidden")) {
1049
- if (this._getCustomStartOverflowBtnDOM()) {
1050
- focusableTabs.push(this._getCustomStartOverflowBtnDOM());
1051
- } else {
1052
- focusableTabs.push(this._getStartOverflowBtnDOM());
1053
- }
1095
+ focusableRefs.push(this.startOverflowButton[0] || this._getStartOverflowBtnDOM());
1054
1096
  }
1055
1097
 
1056
1098
  this._getTabs().forEach(tab => {
1057
- if (tab.getTabInStripDomRef() && !tab.getTabInStripDomRef().hasAttribute("hidden")) {
1058
- focusableTabs.push(tab);
1099
+ const ref = tab.getTabInStripDomRef();
1100
+ const focusable = ref && !ref.hasAttribute("hidden");
1101
+
1102
+ if (focusable) {
1103
+ focusableRefs.push(tab);
1059
1104
  }
1060
1105
  });
1061
1106
 
1062
1107
  if (!this._getEndOverflow().hasAttribute("hidden")) {
1063
- if (this._getCustomEndOverflowBtnDOM()) {
1064
- focusableTabs.push(this._getCustomEndOverflowBtnDOM());
1065
- } else {
1066
- focusableTabs.push(this._getEndOverflowBtnDOM());
1067
- }
1108
+ focusableRefs.push(this.overflowButton[0] || this._getEndOverflowBtnDOM());
1068
1109
  }
1069
1110
 
1070
- return focusableTabs;
1111
+ return focusableRefs;
1071
1112
  }
1072
1113
 
1073
1114
  _getHeader() {
@@ -1090,18 +1131,10 @@ class TabContainer extends UI5Element {
1090
1131
  return this.shadowRoot.querySelector(".ui5-tc__overflow--end");
1091
1132
  }
1092
1133
 
1093
- _getCustomStartOverflowBtnDOM() {
1094
- return this.shadowRoot.querySelector("slot[name=startOverflowButton]");
1095
- }
1096
-
1097
1134
  _getStartOverflowBtnDOM() {
1098
1135
  return this._getStartOverflow().querySelector("[ui5-button]");
1099
1136
  }
1100
1137
 
1101
- _getCustomEndOverflowBtnDOM() {
1102
- return this.shadowRoot.querySelector("slot[name=overflowButton]");
1103
- }
1104
-
1105
1138
  _getEndOverflowBtnDOM() {
1106
1139
  return this._getEndOverflow().querySelector("[ui5-button]");
1107
1140
  }
@@ -1211,18 +1244,6 @@ const getTab = el => {
1211
1244
  return false;
1212
1245
  };
1213
1246
 
1214
- const findIndex = (arr, predicate) => {
1215
- for (let i = 0; i < arr.length; i++) {
1216
- const result = predicate(arr[i]);
1217
-
1218
- if (result) {
1219
- return i;
1220
- }
1221
- }
1222
-
1223
- return -1;
1224
- };
1225
-
1226
1247
  const walk = (tabs, callback) => {
1227
1248
  [...tabs].forEach(tab => {
1228
1249
  callback(tab);
@@ -1,5 +1,5 @@
1
1
  <ui5-li-custom
2
- id="{{this._id}}"
2
+ id="{{this._id}}-li"
3
3
  class="{{this.overflowClasses}}"
4
4
  type="{{this.overflowState}}"
5
5
  aria-disabled="{{this.effectiveDisabled}}"
@@ -1,6 +1,6 @@
1
1
  <div id="{{this._id}}"
2
2
  class="{{this.stripClasses}}"
3
- tabindex="{{this._tabIndex}}"
3
+ tabindex="-1"
4
4
  role="tab"
5
5
  aria-posinset="{{this._posinset}}"
6
6
  aria-setsize="{{this._setsize}}"
@@ -58,8 +58,15 @@ class TabSeparator extends UI5Element {
58
58
  return true;
59
59
  }
60
60
 
61
+ /**
62
+ * Returns the DOM reference of the separator that is placed in the header.
63
+ * <b>Note:</b> Tabs and separators, placed in the <code>subTabs</code> slot of other tabs are not shown in the header. Calling this method on such tabs or separators will return <code>null</code>.
64
+ *
65
+ * @function
66
+ * @public
67
+ */
61
68
  getTabInStripDomRef() {
62
- return this._tabInStripDomRef;
69
+ return this._getElementInStrip();
63
70
  }
64
71
 
65
72
  get stableDomRef() {