@ui5/webcomponents 1.1.1 → 1.2.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 (448) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +1 -0
  3. package/dist/Avatar.js +1 -1
  4. package/dist/AvatarGroup.js +2 -2
  5. package/dist/Breadcrumbs.js +11 -4
  6. package/dist/BusyIndicator.js +1 -1
  7. package/dist/Button.js +44 -30
  8. package/dist/Calendar.js +1 -1
  9. package/dist/Card.js +2 -2
  10. package/dist/CheckBox.js +3 -3
  11. package/dist/ColorPalette.js +1 -1
  12. package/dist/ColorPaletteItem.js +2 -2
  13. package/dist/ColorPalettePopover.js +3 -3
  14. package/dist/ColorPicker.js +42 -4
  15. package/dist/ComboBox.js +10 -4
  16. package/dist/DatePicker.js +10 -8
  17. package/dist/DateRangePicker.js +7 -1
  18. package/dist/Dialog.js +35 -5
  19. package/dist/FileUploader.js +2 -1
  20. package/dist/Input.js +87 -19
  21. package/dist/Interfaces.js +1 -1
  22. package/dist/Label.js +7 -1
  23. package/dist/Link.js +16 -5
  24. package/dist/List.js +6 -16
  25. package/dist/ListItem.js +1 -1
  26. package/dist/MessageStrip.js +0 -8
  27. package/dist/MultiComboBox.js +186 -27
  28. package/dist/MultiInput.js +55 -8
  29. package/dist/Panel.js +7 -8
  30. package/dist/Popover.js +39 -9
  31. package/dist/Popup.js +61 -26
  32. package/dist/ProgressIndicator.js +5 -0
  33. package/dist/RadioButton.js +1 -1
  34. package/dist/RangeSlider.js +6 -1
  35. package/dist/RatingIndicator.js +2 -2
  36. package/dist/ResponsivePopover.js +15 -11
  37. package/dist/SegmentedButton.js +2 -2
  38. package/dist/SegmentedButtonItem.js +7 -2
  39. package/dist/Select.js +9 -5
  40. package/dist/Slider.js +5 -0
  41. package/dist/SliderBase.js +4 -3
  42. package/dist/SplitButton.js +11 -5
  43. package/dist/StepInput.js +4 -4
  44. package/dist/Switch.js +13 -1
  45. package/dist/TabContainer.js +44 -3
  46. package/dist/Table.js +243 -4
  47. package/dist/TableColumn.js +0 -7
  48. package/dist/TableGroupRow.js +4 -0
  49. package/dist/TableRow.js +87 -8
  50. package/dist/TextArea.js +9 -4
  51. package/dist/Tokenizer.js +196 -10
  52. package/dist/Tree.js +5 -1
  53. package/dist/TreeItem.js +2 -2
  54. package/dist/TreeListItem.js +5 -2
  55. package/dist/api.json +129 -68
  56. package/dist/css/themes/Avatar.css +1 -1
  57. package/dist/css/themes/Button.css +1 -1
  58. package/dist/css/themes/Calendar.css +1 -1
  59. package/dist/css/themes/ColorPalettePopover.css +1 -1
  60. package/dist/css/themes/ComboBox.css +1 -1
  61. package/dist/css/themes/DatePickerPopover.css +1 -1
  62. package/dist/css/themes/Dialog.css +1 -1
  63. package/dist/css/themes/Input.css +1 -1
  64. package/dist/css/themes/ListItemBase.css +1 -1
  65. package/dist/css/themes/MultiComboBox.css +1 -1
  66. package/dist/css/themes/PopupGlobal.css +1 -1
  67. package/dist/css/themes/PopupsCommon.css +1 -1
  68. package/dist/css/themes/ResponsivePopover.css +1 -1
  69. package/dist/css/themes/SelectPopover.css +1 -1
  70. package/dist/css/themes/SplitButton.css +1 -1
  71. package/dist/css/themes/Suggestions.css +1 -1
  72. package/dist/css/themes/TabInOverflow.css +1 -1
  73. package/dist/css/themes/TableRow.css +1 -1
  74. package/dist/css/themes/TimePickerPopover.css +1 -1
  75. package/dist/css/themes/TokenizerPopover.css +1 -0
  76. package/dist/css/themes/ValueStateMessage.css +1 -1
  77. package/dist/css/themes/sap_belize/parameters-bundle.css +1 -1
  78. package/dist/css/themes/sap_belize_hcb/parameters-bundle.css +1 -1
  79. package/dist/css/themes/sap_belize_hcw/parameters-bundle.css +1 -1
  80. package/dist/css/themes/sap_fiori_3/parameters-bundle.css +1 -1
  81. package/dist/css/themes/sap_fiori_3_dark/parameters-bundle.css +1 -1
  82. package/dist/css/themes/sap_fiori_3_hcb/parameters-bundle.css +1 -1
  83. package/dist/css/themes/sap_fiori_3_hcw/parameters-bundle.css +1 -1
  84. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -1
  85. package/dist/css/themes/sap_horizon_exp/parameters-bundle.css +1 -1
  86. package/dist/features/InputSuggestions.js +4 -0
  87. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  88. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  89. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
  90. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  91. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -1
  92. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  93. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  94. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  95. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  96. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -1
  97. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -1
  98. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -1
  99. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -1
  100. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  101. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -1
  102. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  103. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  104. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  105. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -1
  106. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
  107. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  108. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  109. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  110. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
  111. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  112. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
  113. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  114. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  115. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  116. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
  117. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  118. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  119. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  120. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  121. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
  122. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  123. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  124. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
  125. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  126. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  127. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  128. package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
  129. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  130. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  131. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
  132. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  133. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  134. package/dist/generated/assets/themes/sap_belize/parameters-bundle.css.json +1 -1
  135. package/dist/generated/assets/themes/sap_belize_hcb/parameters-bundle.css.json +1 -1
  136. package/dist/generated/assets/themes/sap_belize_hcw/parameters-bundle.css.json +1 -1
  137. package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
  138. package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
  139. package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -1
  140. package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -1
  141. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  142. package/dist/generated/assets/themes/sap_horizon_exp/parameters-bundle.css.json +1 -1
  143. package/dist/generated/i18n/i18n-defaults.js +2 -2
  144. package/dist/generated/templates/AvatarGroupTemplate.lit.js +1 -1
  145. package/dist/generated/templates/BreadcrumbsPopoverTemplate.lit.js +1 -1
  146. package/dist/generated/templates/BreadcrumbsTemplate.lit.js +1 -1
  147. package/dist/generated/templates/ButtonTemplate.lit.js +1 -1
  148. package/dist/generated/templates/CalendarTemplate.lit.js +1 -1
  149. package/dist/generated/templates/CarouselTemplate.lit.js +3 -3
  150. package/dist/generated/templates/ColorPalettePopoverTemplate.lit.js +1 -1
  151. package/dist/generated/templates/ColorPickerTemplate.lit.js +1 -1
  152. package/dist/generated/templates/ComboBoxPopoverTemplate.lit.js +1 -1
  153. package/dist/generated/templates/CustomListItemTemplate.lit.js +2 -2
  154. package/dist/generated/templates/DatePickerPopoverTemplate.lit.js +1 -1
  155. package/dist/generated/templates/DatePickerTemplate.lit.js +1 -1
  156. package/dist/generated/templates/DateTimePickerPopoverTemplate.lit.js +1 -1
  157. package/dist/generated/templates/DialogTemplate.lit.js +3 -3
  158. package/dist/generated/templates/FileUploaderPopoverTemplate.lit.js +5 -4
  159. package/dist/generated/templates/InputPopoverTemplate.lit.js +2 -2
  160. package/dist/generated/templates/InputTemplate.lit.js +6 -5
  161. package/dist/generated/templates/ListItemTemplate.lit.js +2 -2
  162. package/dist/generated/templates/ListTemplate.lit.js +1 -1
  163. package/dist/generated/templates/MessageStripTemplate.lit.js +1 -1
  164. package/dist/generated/templates/MultiComboBoxPopoverTemplate.lit.js +1 -1
  165. package/dist/generated/templates/MultiInputTemplate.lit.js +7 -6
  166. package/dist/generated/templates/PanelTemplate.lit.js +2 -2
  167. package/dist/generated/templates/PopoverTemplate.lit.js +3 -3
  168. package/dist/generated/templates/PopupTemplate.lit.js +1 -1
  169. package/dist/generated/templates/RatingIndicatorTemplate.lit.js +1 -1
  170. package/dist/generated/templates/ResponsivePopoverTemplate.lit.js +5 -5
  171. package/dist/generated/templates/SegmentedButtonItemTemplate.lit.js +1 -1
  172. package/dist/generated/templates/SelectPopoverTemplate.lit.js +1 -1
  173. package/dist/generated/templates/StandardListItemTemplate.lit.js +2 -2
  174. package/dist/generated/templates/StepInputTemplate.lit.js +1 -1
  175. package/dist/generated/templates/SuggestionListItemTemplate.lit.js +2 -2
  176. package/dist/generated/templates/SwitchTemplate.lit.js +1 -1
  177. package/dist/generated/templates/TabContainerPopoverTemplate.lit.js +1 -1
  178. package/dist/generated/templates/TabContainerTemplate.lit.js +4 -4
  179. package/dist/generated/templates/TableGroupRowTemplate.lit.js +1 -1
  180. package/dist/generated/templates/TableRowTemplate.lit.js +2 -2
  181. package/dist/generated/templates/TableTemplate.lit.js +3 -3
  182. package/dist/generated/templates/TextAreaPopoverTemplate.lit.js +1 -1
  183. package/dist/generated/templates/TextAreaTemplate.lit.js +1 -1
  184. package/dist/generated/templates/TimePickerPopoverTemplate.lit.js +1 -1
  185. package/dist/generated/templates/ToggleButtonTemplate.lit.js +1 -1
  186. package/dist/generated/templates/TokenizerTemplate.lit.js +1 -1
  187. package/dist/generated/templates/TreeListItemTemplate.lit.js +2 -2
  188. package/dist/generated/themes/Avatar.css.js +1 -1
  189. package/dist/generated/themes/Button.css.js +1 -1
  190. package/dist/generated/themes/Calendar.css.js +1 -1
  191. package/dist/generated/themes/ColorPalettePopover.css.js +1 -1
  192. package/dist/generated/themes/ComboBox.css.js +1 -1
  193. package/dist/generated/themes/DatePickerPopover.css.js +1 -1
  194. package/dist/generated/themes/Dialog.css.js +1 -1
  195. package/dist/generated/themes/Input.css.js +1 -1
  196. package/dist/generated/themes/ListItemBase.css.js +1 -1
  197. package/dist/generated/themes/MultiComboBox.css.js +1 -1
  198. package/dist/generated/themes/PopupGlobal.css.js +1 -1
  199. package/dist/generated/themes/PopupsCommon.css.js +1 -1
  200. package/dist/generated/themes/ResponsivePopover.css.js +1 -1
  201. package/dist/generated/themes/SelectPopover.css.js +1 -1
  202. package/dist/generated/themes/SplitButton.css.js +1 -1
  203. package/dist/generated/themes/Suggestions.css.js +1 -1
  204. package/dist/generated/themes/TabInOverflow.css.js +1 -1
  205. package/dist/generated/themes/TableRow.css.js +1 -1
  206. package/dist/generated/themes/TimePickerPopover.css.js +1 -1
  207. package/dist/generated/themes/TokenizerPopover.css.js +8 -0
  208. package/dist/generated/themes/ValueStateMessage.css.js +1 -1
  209. package/dist/generated/themes/sap_belize/parameters-bundle.css.js +1 -1
  210. package/dist/generated/themes/sap_belize_hcb/parameters-bundle.css.js +1 -1
  211. package/dist/generated/themes/sap_belize_hcw/parameters-bundle.css.js +1 -1
  212. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  213. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  214. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -1
  215. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -1
  216. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  217. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js +1 -1
  218. package/dist/i18n/messagebundle.properties +3 -0
  219. package/dist/i18n/messagebundle_ar.properties +5 -0
  220. package/dist/i18n/messagebundle_bg.properties +5 -0
  221. package/dist/i18n/messagebundle_ca.properties +5 -0
  222. package/dist/i18n/messagebundle_cs.properties +5 -0
  223. package/dist/i18n/messagebundle_cy.properties +5 -0
  224. package/dist/i18n/messagebundle_da.properties +5 -0
  225. package/dist/i18n/messagebundle_de.properties +5 -0
  226. package/dist/i18n/messagebundle_el.properties +5 -0
  227. package/dist/i18n/messagebundle_en.properties +5 -0
  228. package/dist/i18n/messagebundle_en_GB.properties +5 -0
  229. package/dist/i18n/messagebundle_en_US_sappsd.properties +5 -0
  230. package/dist/i18n/messagebundle_en_US_saprigi.properties +2 -0
  231. package/dist/i18n/messagebundle_en_US_saptrc.properties +5 -0
  232. package/dist/i18n/messagebundle_es.properties +5 -0
  233. package/dist/i18n/messagebundle_es_MX.properties +5 -0
  234. package/dist/i18n/messagebundle_et.properties +5 -0
  235. package/dist/i18n/messagebundle_fi.properties +5 -0
  236. package/dist/i18n/messagebundle_fr.properties +5 -0
  237. package/dist/i18n/messagebundle_fr_CA.properties +5 -0
  238. package/dist/i18n/messagebundle_hi.properties +5 -0
  239. package/dist/i18n/messagebundle_hr.properties +5 -0
  240. package/dist/i18n/messagebundle_hu.properties +5 -0
  241. package/dist/i18n/messagebundle_id.properties +5 -0
  242. package/dist/i18n/messagebundle_it.properties +5 -0
  243. package/dist/i18n/messagebundle_iw.properties +5 -0
  244. package/dist/i18n/messagebundle_ja.properties +7 -2
  245. package/dist/i18n/messagebundle_kk.properties +5 -0
  246. package/dist/i18n/messagebundle_ko.properties +5 -0
  247. package/dist/i18n/messagebundle_lt.properties +5 -0
  248. package/dist/i18n/messagebundle_lv.properties +5 -0
  249. package/dist/i18n/messagebundle_ms.properties +5 -0
  250. package/dist/i18n/messagebundle_nl.properties +5 -0
  251. package/dist/i18n/messagebundle_no.properties +5 -0
  252. package/dist/i18n/messagebundle_pl.properties +5 -0
  253. package/dist/i18n/messagebundle_pt.properties +5 -0
  254. package/dist/i18n/messagebundle_pt_PT.properties +5 -0
  255. package/dist/i18n/messagebundle_ro.properties +5 -0
  256. package/dist/i18n/messagebundle_ru.properties +5 -0
  257. package/dist/i18n/messagebundle_sh.properties +5 -0
  258. package/dist/i18n/messagebundle_sk.properties +5 -0
  259. package/dist/i18n/messagebundle_sl.properties +5 -0
  260. package/dist/i18n/messagebundle_sv.properties +5 -0
  261. package/dist/i18n/messagebundle_th.properties +5 -0
  262. package/dist/i18n/messagebundle_tr.properties +5 -0
  263. package/dist/i18n/messagebundle_uk.properties +5 -0
  264. package/dist/i18n/messagebundle_vi.properties +5 -0
  265. package/dist/i18n/messagebundle_zh_CN.properties +5 -0
  266. package/dist/i18n/messagebundle_zh_TW.properties +5 -0
  267. package/package.json +10 -8
  268. package/src/Avatar.js +1 -1
  269. package/src/AvatarGroup.hbs +1 -1
  270. package/src/AvatarGroup.js +2 -2
  271. package/src/Breadcrumbs.hbs +2 -2
  272. package/src/Breadcrumbs.js +11 -4
  273. package/src/BreadcrumbsPopover.hbs +0 -1
  274. package/src/BusyIndicator.js +1 -1
  275. package/src/Button.hbs +4 -4
  276. package/src/Button.js +44 -30
  277. package/src/Calendar.hbs +1 -1
  278. package/src/Calendar.js +1 -1
  279. package/src/Card.js +2 -2
  280. package/src/Carousel.hbs +2 -2
  281. package/src/CheckBox.js +3 -3
  282. package/src/ColorPalette.js +1 -1
  283. package/src/ColorPaletteItem.js +2 -2
  284. package/src/ColorPalettePopover.hbs +1 -1
  285. package/src/ColorPalettePopover.js +3 -3
  286. package/src/ColorPicker.hbs +1 -0
  287. package/src/ColorPicker.js +42 -4
  288. package/src/ComboBox.js +10 -4
  289. package/src/ComboBoxPopover.hbs +0 -1
  290. package/src/DatePicker.hbs +1 -1
  291. package/src/DatePicker.js +10 -8
  292. package/src/DatePickerPopover.hbs +0 -2
  293. package/src/DateRangePicker.js +7 -1
  294. package/src/Dialog.hbs +3 -2
  295. package/src/Dialog.js +35 -5
  296. package/src/FileUploader.js +2 -1
  297. package/src/FileUploaderPopover.hbs +3 -2
  298. package/src/Input.hbs +5 -1
  299. package/src/Input.js +87 -19
  300. package/src/InputPopover.hbs +3 -4
  301. package/src/Interfaces.js +1 -1
  302. package/src/Label.js +7 -1
  303. package/src/Link.js +16 -5
  304. package/src/List.hbs +1 -1
  305. package/src/List.js +6 -16
  306. package/src/ListItem.hbs +1 -1
  307. package/src/ListItem.js +1 -1
  308. package/src/MessageStrip.hbs +1 -1
  309. package/src/MessageStrip.js +0 -8
  310. package/src/MultiComboBox.js +186 -27
  311. package/src/MultiComboBoxPopover.hbs +0 -1
  312. package/src/MultiInput.js +55 -8
  313. package/src/Panel.hbs +4 -3
  314. package/src/Panel.js +7 -8
  315. package/src/Popover.hbs +2 -2
  316. package/src/Popover.js +39 -9
  317. package/src/Popup.hbs +1 -1
  318. package/src/Popup.js +61 -26
  319. package/src/ProgressIndicator.js +5 -0
  320. package/src/RadioButton.js +1 -1
  321. package/src/RangeSlider.js +6 -1
  322. package/src/RatingIndicator.hbs +2 -0
  323. package/src/RatingIndicator.js +2 -2
  324. package/src/ResponsivePopover.hbs +5 -5
  325. package/src/ResponsivePopover.js +15 -11
  326. package/src/SegmentedButton.js +2 -2
  327. package/src/SegmentedButtonItem.hbs +1 -1
  328. package/src/SegmentedButtonItem.js +7 -2
  329. package/src/Select.js +9 -5
  330. package/src/SelectPopover.hbs +0 -1
  331. package/src/Slider.js +5 -0
  332. package/src/SliderBase.js +4 -3
  333. package/src/SplitButton.js +11 -5
  334. package/src/StepInput.hbs +4 -3
  335. package/src/StepInput.js +4 -4
  336. package/src/Switch.hbs +1 -1
  337. package/src/Switch.js +13 -1
  338. package/src/TabContainer.hbs +3 -3
  339. package/src/TabContainer.js +44 -3
  340. package/src/TabContainerPopover.hbs +1 -1
  341. package/src/Table.hbs +11 -1
  342. package/src/Table.js +243 -4
  343. package/src/TableColumn.js +0 -7
  344. package/src/TableGroupRow.hbs +1 -0
  345. package/src/TableGroupRow.js +4 -0
  346. package/src/TableRow.hbs +2 -0
  347. package/src/TableRow.js +87 -8
  348. package/src/TextArea.hbs +1 -1
  349. package/src/TextArea.js +9 -4
  350. package/src/TextAreaPopover.hbs +0 -1
  351. package/src/TimePickerPopover.hbs +0 -1
  352. package/src/Tokenizer.hbs +2 -1
  353. package/src/Tokenizer.js +196 -10
  354. package/src/Tree.js +5 -1
  355. package/src/TreeItem.js +2 -2
  356. package/src/TreeListItem.js +5 -2
  357. package/src/features/InputSuggestions.js +4 -0
  358. package/src/i18n/messagebundle.properties +3 -0
  359. package/src/i18n/messagebundle_ar.properties +5 -0
  360. package/src/i18n/messagebundle_bg.properties +5 -0
  361. package/src/i18n/messagebundle_ca.properties +5 -0
  362. package/src/i18n/messagebundle_cs.properties +5 -0
  363. package/src/i18n/messagebundle_cy.properties +5 -0
  364. package/src/i18n/messagebundle_da.properties +5 -0
  365. package/src/i18n/messagebundle_de.properties +5 -0
  366. package/src/i18n/messagebundle_el.properties +5 -0
  367. package/src/i18n/messagebundle_en.properties +5 -0
  368. package/src/i18n/messagebundle_en_GB.properties +5 -0
  369. package/src/i18n/messagebundle_en_US_sappsd.properties +5 -0
  370. package/src/i18n/messagebundle_en_US_saprigi.properties +2 -0
  371. package/src/i18n/messagebundle_en_US_saptrc.properties +5 -0
  372. package/src/i18n/messagebundle_es.properties +5 -0
  373. package/src/i18n/messagebundle_es_MX.properties +5 -0
  374. package/src/i18n/messagebundle_et.properties +5 -0
  375. package/src/i18n/messagebundle_fi.properties +5 -0
  376. package/src/i18n/messagebundle_fr.properties +5 -0
  377. package/src/i18n/messagebundle_fr_CA.properties +5 -0
  378. package/src/i18n/messagebundle_hi.properties +5 -0
  379. package/src/i18n/messagebundle_hr.properties +5 -0
  380. package/src/i18n/messagebundle_hu.properties +5 -0
  381. package/src/i18n/messagebundle_id.properties +5 -0
  382. package/src/i18n/messagebundle_it.properties +5 -0
  383. package/src/i18n/messagebundle_iw.properties +5 -0
  384. package/src/i18n/messagebundle_ja.properties +7 -2
  385. package/src/i18n/messagebundle_kk.properties +5 -0
  386. package/src/i18n/messagebundle_ko.properties +5 -0
  387. package/src/i18n/messagebundle_lt.properties +5 -0
  388. package/src/i18n/messagebundle_lv.properties +5 -0
  389. package/src/i18n/messagebundle_ms.properties +5 -0
  390. package/src/i18n/messagebundle_nl.properties +5 -0
  391. package/src/i18n/messagebundle_no.properties +5 -0
  392. package/src/i18n/messagebundle_pl.properties +5 -0
  393. package/src/i18n/messagebundle_pt.properties +5 -0
  394. package/src/i18n/messagebundle_pt_PT.properties +5 -0
  395. package/src/i18n/messagebundle_ro.properties +5 -0
  396. package/src/i18n/messagebundle_ru.properties +5 -0
  397. package/src/i18n/messagebundle_sh.properties +5 -0
  398. package/src/i18n/messagebundle_sk.properties +5 -0
  399. package/src/i18n/messagebundle_sl.properties +5 -0
  400. package/src/i18n/messagebundle_sv.properties +5 -0
  401. package/src/i18n/messagebundle_th.properties +5 -0
  402. package/src/i18n/messagebundle_tr.properties +5 -0
  403. package/src/i18n/messagebundle_uk.properties +5 -0
  404. package/src/i18n/messagebundle_vi.properties +5 -0
  405. package/src/i18n/messagebundle_zh_CN.properties +5 -0
  406. package/src/i18n/messagebundle_zh_TW.properties +5 -0
  407. package/src/themes/Avatar.css +1 -0
  408. package/src/themes/Button.css +1 -1
  409. package/src/themes/Calendar.css +6 -1
  410. package/src/themes/ColorPalettePopover.css +6 -5
  411. package/src/themes/DatePickerPopover.css +4 -0
  412. package/src/themes/Dialog.css +1 -5
  413. package/src/themes/Input.css +1 -0
  414. package/src/themes/ListItemBase.css +11 -5
  415. package/src/themes/MultiComboBox.css +0 -1
  416. package/src/themes/Popover.css +1 -1
  417. package/src/themes/PopupGlobal.css +1 -4
  418. package/src/themes/PopupsCommon.css +44 -4
  419. package/src/themes/ResponsivePopover.css +2 -7
  420. package/src/themes/ResponsivePopoverCommon.css +1 -0
  421. package/src/themes/SelectPopover.css +11 -2
  422. package/src/themes/SplitButton.css +1 -1
  423. package/src/themes/Suggestions.css +15 -1
  424. package/src/themes/TabInOverflow.css +5 -1
  425. package/src/themes/TableRow.css +1 -0
  426. package/src/themes/TimePickerPopover.css +4 -0
  427. package/src/themes/Tokenizer.css +1 -0
  428. package/src/themes/TokenizerPopover.css +4 -0
  429. package/src/themes/ValueStateMessage.css +10 -0
  430. package/src/themes/base/Badge-parameters.css +10 -10
  431. package/src/themes/base/DayPicker-parameters.css +2 -2
  432. package/src/themes/base/Dialog-parameters.css +1 -1
  433. package/src/themes/base/ListItemBase-parameters.css +1 -0
  434. package/src/themes/base/PopupsCommon-parameters.css +6 -1
  435. package/src/themes/base/SliderBase-parameters.css +7 -0
  436. package/src/themes/base/Switch-parameters.css +2 -13
  437. package/src/themes/base/sizes-parameters.css +7 -7
  438. package/src/themes/sap_belize_hcb/Switch-parameters.css +2 -4
  439. package/src/themes/sap_belize_hcw/Switch-parameters.css +2 -4
  440. package/src/themes/sap_fiori_3_hcb/DayPicker-parameters.css +0 -2
  441. package/src/themes/sap_fiori_3_hcb/Switch-parameters.css +2 -4
  442. package/src/themes/sap_fiori_3_hcw/DayPicker-parameters.css +0 -2
  443. package/src/themes/sap_fiori_3_hcw/Switch-parameters.css +2 -4
  444. package/src/themes/sap_horizon/Dialog-parameters.css +1 -1
  445. package/src/themes/sap_horizon/ListItemBase-parameters.css +1 -2
  446. package/src/themes/sap_horizon/PopupsCommon-parameters.css +0 -1
  447. package/src/themes/sap_horizon/Switch-parameters.css +7 -7
  448. package/src/themes/sap_horizon_exp/Switch-parameters.css +1 -1
package/src/StepInput.js CHANGED
@@ -187,9 +187,9 @@ const metadata = {
187
187
  },
188
188
 
189
189
  /**
190
- * Sets the accessible aria name of the component.
190
+ * Defines the accessible aria name of the component.
191
191
  *
192
- * @type {String}
192
+ * @type {string}
193
193
  * @public
194
194
  * @since 1.0.0-rc.15
195
195
  */
@@ -200,7 +200,7 @@ const metadata = {
200
200
  /**
201
201
  * Receives id(or many ids) of the elements that label the component.
202
202
  *
203
- * @type {String}
203
+ * @type {string}
204
204
  * @defaultvalue ""
205
205
  * @public
206
206
  * @since 1.0.0-rc.15
@@ -221,7 +221,7 @@ const metadata = {
221
221
  },
222
222
 
223
223
  /**
224
- * @type {Boolean}
224
+ * @type {boolean}
225
225
  * @private
226
226
  */
227
227
  focused: {
package/src/Switch.hbs CHANGED
@@ -1,6 +1,6 @@
1
1
  <div
2
2
  class="ui5-switch-root {{classes.main}}"
3
- role="checkbox"
3
+ role="switch"
4
4
  aria-label="{{ariaLabelText}}"
5
5
  aria-checked="{{checked}}"
6
6
  aria-disabled="{{ariaDisabled}}"
package/src/Switch.js CHANGED
@@ -97,10 +97,22 @@ const metadata = {
97
97
  type: String,
98
98
  },
99
99
 
100
+ /**
101
+ * Sets the accessible aria name of the component.
102
+ *
103
+ * @type {string}
104
+ * @defaultvalue: ""
105
+ * @public
106
+ * @since 1.2.0
107
+ */
108
+ accessibleName: {
109
+ type: String,
110
+ },
111
+
100
112
  /**
101
113
  * Receives id(or many ids) of the elements that label the component.
102
114
  *
103
- * @type {String}
115
+ * @type {string}
104
116
  * @defaultvalue ""
105
117
  * @public
106
118
  * @since 1.1.0
@@ -19,7 +19,7 @@
19
19
  icon="{{overflowMenuIcon}}"
20
20
  data-ui5-stable="overflow-start"
21
21
  tabindex="-1"
22
- title="{{overflowMenuTitle}}"
22
+ tooltip="{{overflowMenuTitle}}"
23
23
  aria-haspopup="true"
24
24
  icon-end>{{this._startOverflowText}}</ui5-button>
25
25
  {{/if}}
@@ -51,7 +51,7 @@
51
51
  icon="{{overflowMenuIcon}}"
52
52
  data-ui5-stable="overflow-end"
53
53
  tabindex="-1"
54
- title="{{overflowMenuTitle}}"
54
+ tooltip="{{overflowMenuTitle}}"
55
55
  aria-haspopup="true"
56
56
  icon-end>{{this._endOverflowText}}</ui5-button>
57
57
  {{/if}}
@@ -65,7 +65,7 @@
65
65
  </div>
66
66
 
67
67
  {{#*inline "contentArea"}}
68
- <div class="{{classes.content}}">
68
+ <div class="{{classes.content}}" part="content">
69
69
  {{#each items}}
70
70
  {{#unless this.isSeparator}}
71
71
  <div
@@ -1,6 +1,7 @@
1
1
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
3
3
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
4
+ import { renderFinished } from "@ui5/webcomponents-base/dist/Render.js";
4
5
  import slideDown from "@ui5/webcomponents-base/dist/animations/slideDown.js";
5
6
  import slideUp from "@ui5/webcomponents-base/dist/animations/slideUp.js";
6
7
  import AnimationMode from "@ui5/webcomponents-base/dist/types/AnimationMode.js";
@@ -22,6 +23,7 @@ import {
22
23
  TABCONTAINER_NEXT_ICON_ACC_NAME,
23
24
  TABCONTAINER_OVERFLOW_MENU_TITLE,
24
25
  TABCONTAINER_END_OVERFLOW,
26
+ TABCONTAINER_POPOVER_CANCEL_BUTTON,
25
27
  } from "./generated/i18n/i18n-defaults.js";
26
28
  import Button from "./Button.js";
27
29
  import Icon from "./Icon.js";
@@ -291,6 +293,15 @@ const metadata = {
291
293
  * <li><code>ui5-tab-separator</code> - used to separate tabs with a vertical line</li>
292
294
  * </ul>
293
295
  *
296
+ * <h3>CSS Shadow Parts</h3>
297
+ *
298
+ * <ui5-link target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/::part">CSS Shadow Parts</ui5-link> allow developers to style elements inside the Shadow DOM.
299
+ * <br>
300
+ * The <code>ui5-tabcontainer</code> exposes the following CSS Shadow Parts:
301
+ * <ul>
302
+ * <li>content - Used to style the content of the component</li>
303
+ * </ul>
304
+ *
294
305
  * <h3>Keyboard Handling</h3>
295
306
  *
296
307
  * <h4>Fast Navigation</h4>
@@ -595,11 +606,13 @@ class TabContainer extends UI5Element {
595
606
  }
596
607
  }
597
608
 
598
- _handleResize() {
609
+ async _handleResize() {
599
610
  if (this.responsivePopover && this.responsivePopover.opened) {
600
611
  this.responsivePopover.close();
601
612
  }
602
613
  this._updateMediaRange();
614
+
615
+ await renderFinished(); // await the tab container to have rendered its representation of tabs
603
616
  this._setItemsForStrip();
604
617
  }
605
618
 
@@ -893,7 +906,11 @@ class TabContainer extends UI5Element {
893
906
  const focusableTabs = [];
894
907
 
895
908
  if (!this._getStartOverflow().hasAttribute("hidden")) {
896
- focusableTabs.push(this._getStartOverflow().querySelector("[ui5-button]"));
909
+ if (this._getCustomStartOverflowBtnDOM()) {
910
+ focusableTabs.push(this._getCustomStartOverflowBtnDOM());
911
+ } else {
912
+ focusableTabs.push(this._getStartOverflowBtnDOM());
913
+ }
897
914
  }
898
915
 
899
916
  this._getTabs().forEach(tab => {
@@ -903,7 +920,11 @@ class TabContainer extends UI5Element {
903
920
  });
904
921
 
905
922
  if (!this._getEndOverflow().hasAttribute("hidden")) {
906
- focusableTabs.push(this._getEndOverflow().querySelector("[ui5-button]"));
923
+ if (this._getCustomEndOverflowBtnDOM()) {
924
+ focusableTabs.push(this._getCustomEndOverflowBtnDOM());
925
+ } else {
926
+ focusableTabs.push(this._getEndOverflowBtnDOM());
927
+ }
907
928
  }
908
929
 
909
930
  return focusableTabs;
@@ -933,6 +954,22 @@ class TabContainer extends UI5Element {
933
954
  return this.shadowRoot.querySelector(".ui5-tc__overflow--end");
934
955
  }
935
956
 
957
+ _getCustomStartOverflowBtnDOM() {
958
+ return this.shadowRoot.querySelector("slot[name=startOverflowButton]");
959
+ }
960
+
961
+ _getStartOverflowBtnDOM() {
962
+ return this._getStartOverflow().querySelector("[ui5-button]");
963
+ }
964
+
965
+ _getCustomEndOverflowBtnDOM() {
966
+ return this.shadowRoot.querySelector("slot[name=overflowButton]");
967
+ }
968
+
969
+ _getEndOverflowBtnDOM() {
970
+ return this._getEndOverflow().querySelector("[ui5-button]");
971
+ }
972
+
936
973
  async _respPopover() {
937
974
  const staticAreaItem = await this.getStaticAreaItemDomRef();
938
975
  return staticAreaItem.querySelector(`#${this._id}-overflowMenu`);
@@ -1002,6 +1039,10 @@ class TabContainer extends UI5Element {
1002
1039
  return TabContainer.i18nBundle.getText(TABCONTAINER_END_OVERFLOW);
1003
1040
  }
1004
1041
 
1042
+ get popoverCancelButtonText() {
1043
+ return TabContainer.i18nBundle.getText(TABCONTAINER_POPOVER_CANCEL_BUTTON);
1044
+ }
1045
+
1005
1046
  get animate() {
1006
1047
  return getAnimationMode() !== AnimationMode.None;
1007
1048
  }
@@ -22,6 +22,6 @@
22
22
  <ui5-button
23
23
  design="Transparent"
24
24
  @click="{{_closeRespPopover}}"
25
- >Cancel</ui5-button>
25
+ >{{popoverCancelButtonText}}</ui5-button>
26
26
  </div>
27
27
  </ui5-responsive-popover>
package/src/Table.hbs CHANGED
@@ -5,13 +5,22 @@
5
5
 
6
6
  <table border="0" cellspacing="0" cellpadding="0" @keydown="{{_onkeydown}}" role="table">
7
7
  <thead>
8
- <tr id="{{_columnHeader.id}}" role="row" class="ui5-table-header-row" aria-label="{{ariaLabelText}}" tabindex="{{_columnHeader._tabIndex}}" @click="{{_onColumnHeaderClick}}">
8
+ <tr
9
+ id="{{_columnHeader.id}}"
10
+ role="row"
11
+ class="ui5-table-header-row"
12
+ aria-label="{{ariaLabelText}}"
13
+ tabindex="{{_columnHeader._tabIndex}}"
14
+ @click="{{_onColumnHeaderClick}}"
15
+ @keydown="{{_onColumnHeaderKeydown}}"
16
+ >
9
17
  {{#if isMultiSelect}}
10
18
  <th class="ui5-table-select-all-column" role="presentation" aria-hidden="true">
11
19
  <ui5-checkbox class="ui5-table-select-all-checkbox"
12
20
  ?checked="{{_allRowsSelected}}"
13
21
  @ui5-change="{{_selectAll}}"
14
22
  aria-label="{{ariaLabelSelectAllText}}"
23
+ tabindex="-1"
15
24
  >
16
25
  </ui5-checkbox>
17
26
  </th>
@@ -57,6 +66,7 @@
57
66
  <td colspan="{{visibleColumnsCount}}">
58
67
  <div growing-button>
59
68
  <div
69
+ id="{{_id}}-growingButton"
60
70
  tabindex="0"
61
71
  role="button"
62
72
  aria-labelledby="{{loadMoreAriaLabelledBy}}"
package/src/Table.js CHANGED
@@ -5,7 +5,20 @@ import ItemNavigation from "@ui5/webcomponents-base/dist/delegate/ItemNavigation
5
5
  import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
6
6
  import NavigationMode from "@ui5/webcomponents-base/dist/types/NavigationMode.js";
7
7
  import { isIE } from "@ui5/webcomponents-base/dist/Device.js";
8
- import { isSpace, isEnter } from "@ui5/webcomponents-base/dist/Keys.js";
8
+ import {
9
+ isSpace,
10
+ isEnter,
11
+ isCtrlA,
12
+ isUpAlt,
13
+ isDownAlt,
14
+ isUpShift,
15
+ isDownShift,
16
+ isHomeCtrl,
17
+ isEndCtrl,
18
+ isHomeShift,
19
+ isEndShift,
20
+ } from "@ui5/webcomponents-base/dist/Keys.js";
21
+ import { getTabbableElements } from "@ui5/webcomponents-base/dist/util/TabbableElements.js";
9
22
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
10
23
  import debounce from "@ui5/webcomponents-base/dist/util/debounce.js";
11
24
  import isElementInView from "@ui5/webcomponents-base/dist/util/isElementInView.js";
@@ -268,7 +281,7 @@ const metadata = {
268
281
 
269
282
  /**
270
283
  * Defines whether all rows are selected or not when table is in MultiSelect mode.
271
- * @type {Boolean}
284
+ * @type {boolean}
272
285
  * @defaultvalue false
273
286
  * @since 1.0.0-rc.15
274
287
  * @private
@@ -373,6 +386,18 @@ const metadata = {
373
386
  * In order to use this functionality, you need to import the following module:
374
387
  * <code>import "@ui5/webcomponents-base/dist/features/F6Navigation.js"</code>
375
388
  * <br><br>
389
+ * Furthermore, you can interact with <code>ui5-table</code> via the following keys.
390
+ * <br>
391
+ *
392
+ * <ul>
393
+ * <li>[F7] - If focus is on an interactive control inside an item, moves focus to the corresponding item.</li>
394
+ * <li>[CTRL]+[A] - Selects all items, if MultiSelect mode is enabled.</li>
395
+ * <li>[HOME]/[END] - Focuses the first/last item.</li>
396
+ * <li>[PAGEUP]/[PAGEDOWN] - Moves focus up/down by page size (20 items by default).</li>
397
+ * <li>[ALT]+[DOWN]/[UP] - Switches focus between header, last focused item, and More button (if applies) in either direction.</li>
398
+ * <li>[SHIFT]+[DOWN]/[UP] - Selects the next/previous item in a MultiSelect table, if the current item is selected (Range selection). Otherwise, deselects them (Range deselection).</li>
399
+ * <li>[SHIFT]+[HOME]/[END] - Range selection to the first/last item of the List.</li>
400
+ * <li>[CTRL]+[HOME]/[END] - Same behavior as HOME & END.</li> * </ul>
376
401
  *
377
402
  * <h3>ES6 Module Import</h3>
378
403
  *
@@ -430,6 +455,7 @@ class Table extends UI5Element {
430
455
  navigationMode: NavigationMode.Vertical,
431
456
  affectedPropertiesNames: ["_columnHeader"],
432
457
  getItemsCallback: () => [this._columnHeader, ...this.rows],
458
+ skipItemsSize: 20,
433
459
  });
434
460
 
435
461
  this.fnOnRowFocused = this.onRowFocused.bind(this);
@@ -437,7 +463,10 @@ class Table extends UI5Element {
437
463
  this._handleResize = this.popinContent.bind(this);
438
464
 
439
465
  this.tableEndObserved = false;
466
+
440
467
  this.addEventListener("ui5-selection-requested", this._handleSelect.bind(this));
468
+
469
+ this._prevNestedElementIndex = 0;
441
470
  }
442
471
 
443
472
  onBeforeRendering() {
@@ -460,7 +489,6 @@ class Table extends UI5Element {
460
489
  });
461
490
 
462
491
  this.visibleColumns = this.columns.filter((column, index) => {
463
- column.sticky = this.stickyColumnHeader;
464
492
  return !this._hiddenColumns[index];
465
493
  });
466
494
 
@@ -468,6 +496,8 @@ class Table extends UI5Element {
468
496
  this.visibleColumnsCount = this.visibleColumns.length;
469
497
 
470
498
  this._allRowsSelected = selectedRows.length === this.rows.length;
499
+
500
+ this._previousFocusedRow = this._previousFocusedRow || this.rows[0] || null;
471
501
  }
472
502
 
473
503
  onAfterRendering() {
@@ -484,6 +514,16 @@ class Table extends UI5Element {
484
514
  }
485
515
 
486
516
  ResizeHandler.register(this.getDomRef(), this._handleResize);
517
+
518
+ this._itemNavigation.setCurrentItem(this.rows.length ? this.rows[0] : this._columnHeader);
519
+
520
+ this.rows.forEach((row, index) => {
521
+ row._tabbableElements = getTabbableElements(row);
522
+
523
+ if (index > 0) {
524
+ row._tabbableElements.forEach(el => el.setAttribute("tabindex", "-1"));
525
+ }
526
+ });
487
527
  }
488
528
 
489
529
  onExitDOM() {
@@ -496,6 +536,182 @@ class Table extends UI5Element {
496
536
  }
497
537
  }
498
538
 
539
+ _onkeydown(event) {
540
+ if (isCtrlA(event)) {
541
+ event.preventDefault();
542
+ this.isMultiSelect && this._selectAll(event);
543
+ return;
544
+ }
545
+
546
+ const isAltUp = isUpAlt(event);
547
+
548
+ if (isAltUp || isDownAlt(event)) {
549
+ return this._handleArrowAlt(isAltUp, event.target);
550
+ }
551
+
552
+ if ((isUpShift(event) || isDownShift(event)) && this.isMultiSelect) {
553
+ this._handleArrowNav(event);
554
+ }
555
+
556
+ if (isHomeCtrl(event)) {
557
+ event.preventDefault();
558
+
559
+ this._itemNavigation._handleHome(event);
560
+ this._itemNavigation._applyTabIndex();
561
+ this._itemNavigation._focusCurrentItem();
562
+ }
563
+
564
+ if (isEndCtrl(event)) {
565
+ event.preventDefault();
566
+
567
+ this._itemNavigation._handleEnd(event);
568
+ this._itemNavigation._applyTabIndex();
569
+ this._itemNavigation._focusCurrentItem();
570
+ }
571
+
572
+ if ((isHomeShift(event) || isEndShift(event)) && this.isMultiSelect) {
573
+ this._handleHomeEndSelection(event);
574
+ }
575
+ }
576
+
577
+ _handleArrowNav(event) {
578
+ const isRowFocused = this.currentElement.localName === "tr";
579
+
580
+ if (!isRowFocused) {
581
+ return;
582
+ }
583
+
584
+ const previouslySelectedRows = this.selectedRows;
585
+ const currentItem = this.currentItem;
586
+ const currentItemIdx = this.currentItemIdx;
587
+
588
+ const prevItemIdx = currentItemIdx - 1;
589
+ const nextItemIdx = currentItemIdx + 1;
590
+
591
+ const prevItem = this.rows[prevItemIdx];
592
+ const nextItem = this.rows[nextItemIdx];
593
+ const wasSelected = currentItem.selected;
594
+
595
+ if ((isUpShift(event) && !prevItem) || (isDownShift(event) && !nextItem)) {
596
+ return;
597
+ }
598
+
599
+ if (isUpShift(event)) {
600
+ currentItem.selected = currentItem.selected && !prevItem.selected;
601
+ prevItem.selected = currentItem.selected || (wasSelected && !currentItem.selected);
602
+
603
+ prevItem.focus();
604
+ }
605
+
606
+ if (isDownShift(event)) {
607
+ currentItem.selected = currentItem.selected && !nextItem.selected;
608
+ nextItem.selected = currentItem.selected || (wasSelected && !currentItem.selected);
609
+
610
+ nextItem.focus();
611
+ }
612
+
613
+ const selectedRows = this.selectedRows;
614
+
615
+ this.fireEvent("selection-change", {
616
+ selectedRows,
617
+ previouslySelectedRows,
618
+ });
619
+ }
620
+
621
+ _handleHomeEndSelection(event) {
622
+ const isRowFocused = this.currentElement.localName === "tr";
623
+
624
+ if (!isRowFocused) {
625
+ return;
626
+ }
627
+ const rows = this.rows;
628
+ const previouslySelectedRows = this.selectedRows;
629
+ const currentItemIdx = this.currentItemIdx;
630
+
631
+ if (isHomeShift(event)) {
632
+ rows.slice(0, currentItemIdx + 1).forEach(item => {
633
+ item.selected = true;
634
+ });
635
+ rows[0].focus();
636
+ }
637
+
638
+ if (isEndShift(event)) {
639
+ rows.slice(currentItemIdx).forEach(item => {
640
+ item.selected = true;
641
+ });
642
+ rows[rows.length - 1].focus();
643
+ }
644
+
645
+ const selectedRows = this.selectedRows;
646
+
647
+ this.fireEvent("selection-change", {
648
+ selectedRows,
649
+ previouslySelectedRows,
650
+ });
651
+ }
652
+
653
+ /**
654
+ * Handles Alt + Up/Down.
655
+ * Switches focus between column header, last focused item, and "More" button (if applicable).
656
+ * @private
657
+ * @param {boolean} shouldMoveUp Whether to move focus upward
658
+ * @param {object} focusedElement The element currently in focus
659
+ */
660
+ _handleArrowAlt(shouldMoveUp, focusedElement) {
661
+ const focusedElementType = this.getFocusedElementType(focusedElement);
662
+ const moreButton = this.getMoreButton();
663
+
664
+ if (shouldMoveUp) {
665
+ switch (focusedElementType) {
666
+ case "tableRow":
667
+ this._previousFocusedRow = focusedElement;
668
+ return this._onColumnHeaderClick();
669
+ case "columnHeader":
670
+ return moreButton ? moreButton.focus() : this._previousFocusedRow.focus();
671
+ case "moreButton":
672
+ return this._previousFocusedRow ? this._previousFocusedRow.focus() : this._onColumnHeaderClick();
673
+ }
674
+ } else {
675
+ switch (focusedElementType) {
676
+ case "tableRow":
677
+ this._previousFocusedRow = focusedElement;
678
+ return moreButton ? moreButton.focus() : this._onColumnHeaderClick();
679
+ case "columnHeader":
680
+ if (this._previousFocusedRow) {
681
+ return this._previousFocusedRow.focus();
682
+ }
683
+
684
+ if (moreButton) {
685
+ return moreButton.focus();
686
+ }
687
+
688
+ return;
689
+ case "moreButton":
690
+ return this._onColumnHeaderClick();
691
+ }
692
+ }
693
+ }
694
+
695
+ /**
696
+ * Determines the type of the currently focused element.
697
+ * @private
698
+ * @param {object} element The object representation of the DOM element
699
+ * @returns {("columnHeader"|"tableRow"|"moreButton")} A string identifier
700
+ */
701
+ getFocusedElementType(element) {
702
+ if (element === this.getColumnHeader()) {
703
+ return "columnHeader";
704
+ }
705
+
706
+ if (element === this.getMoreButton()) {
707
+ return "moreButton";
708
+ }
709
+
710
+ if (this.rows.includes(element)) {
711
+ return "tableRow";
712
+ }
713
+ }
714
+
499
715
  onRowFocused(event) {
500
716
  this._itemNavigation.setCurrentItem(event.target);
501
717
  }
@@ -505,6 +721,13 @@ class Table extends UI5Element {
505
721
  this._itemNavigation.setCurrentItem(this._columnHeader);
506
722
  }
507
723
 
724
+ _onColumnHeaderKeydown(event) {
725
+ if (isSpace(event)) {
726
+ event.preventDefault();
727
+ this.isMultiSelect && this._selectAll();
728
+ }
729
+ }
730
+
508
731
  _onLoadMoreKeydown(event) {
509
732
  if (isSpace(event)) {
510
733
  event.preventDefault();
@@ -587,7 +810,7 @@ class Table extends UI5Element {
587
810
  }
588
811
 
589
812
  _selectAll(event) {
590
- const bAllSelected = event.target.checked;
813
+ const bAllSelected = !this._allRowsSelected;
591
814
  const previouslySelectedRows = this.rows.filter(row => row.selected);
592
815
 
593
816
  this._allRowsSelected = bAllSelected;
@@ -622,6 +845,10 @@ class Table extends UI5Element {
622
845
  return this.getDomRef() && this.getDomRef().querySelector(`#${this._id}-columnHeader`);
623
846
  }
624
847
 
848
+ getMoreButton() {
849
+ return this.growsWithButton && this.getDomRef() && this.getDomRef().querySelector(`#${this._id}-growingButton`);
850
+ }
851
+
625
852
  handleResize(event) {
626
853
  this.checkTableInViewport();
627
854
  this.popinContent(event);
@@ -764,6 +991,18 @@ class Table extends UI5Element {
764
991
  get selectedRows() {
765
992
  return this.rows.filter(row => row.selected);
766
993
  }
994
+
995
+ get currentItemIdx() {
996
+ return this.rows.indexOf(this.currentItem);
997
+ }
998
+
999
+ get currentItem() {
1000
+ return this.getRootNode().activeElement;
1001
+ }
1002
+
1003
+ get currentElement() {
1004
+ return this._itemNavigation._getCurrentItem();
1005
+ }
767
1006
  }
768
1007
 
769
1008
  Table.define();
@@ -78,13 +78,6 @@ const metadata = {
78
78
  last: {
79
79
  type: Boolean,
80
80
  },
81
-
82
- /**
83
- * @private
84
- */
85
- sticky: {
86
- type: Boolean,
87
- },
88
81
  },
89
82
  };
90
83
 
@@ -5,6 +5,7 @@
5
5
  aria-label={{ariaLabelText}}
6
6
  tabindex="{{_tabIndex}}"
7
7
  dir="{{effectiveDir}}"
8
+ @focusin="{{_onfocusin}}"
8
9
  >
9
10
  <td colspan={{colSpan}}>
10
11
  <slot></slot>
@@ -150,6 +150,10 @@ class TableGroupRow extends UI5Element {
150
150
  this._colSpan = this.visibleColCount();
151
151
  }
152
152
 
153
+ _onfocusin(event) {
154
+ this.parentElement._itemNavigation.setCurrentItem(this);
155
+ }
156
+
153
157
  static async onDefine() {
154
158
  TableGroupRow.i18nBundle = await getI18nBundle("@ui5/webcomponents");
155
159
  }
package/src/TableRow.hbs CHANGED
@@ -2,6 +2,7 @@
2
2
  class="ui5-table-row-root"
3
3
  tabindex="{{_tabIndex}}"
4
4
  @focusin="{{_onfocusin}}"
5
+ @focusout="{{_onfocusout}}"
5
6
  @click="{{_onrowclick}}"
6
7
  @keydown="{{_onkeydown}}"
7
8
  @keyup="{{_onkeyup}}"
@@ -26,6 +27,7 @@
26
27
  ?checked="{{this.selected}}"
27
28
  aria-label="{{ariaLabelRowSelection}}"
28
29
  @ui5-change="{{_handleSelection}}"
30
+ tabindex="-1"
29
31
  >
30
32
  </ui5-checkbox>
31
33
  </td>