@ui5/webcomponents 1.0.1 → 1.1.2

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 (474) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/dist/Breadcrumbs.js +8 -6
  3. package/dist/BreadcrumbsItem.js +1 -1
  4. package/dist/BusyIndicator.js +2 -3
  5. package/dist/Button.js +28 -1
  6. package/dist/Calendar.js +7 -0
  7. package/dist/Carousel.js +9 -0
  8. package/dist/CheckBox.js +34 -1
  9. package/dist/ColorPalette.js +5 -4
  10. package/dist/ColorPalettePopover.js +27 -2
  11. package/dist/ComboBox.js +91 -23
  12. package/dist/DateComponentBase.js +6 -8
  13. package/dist/DatePicker.js +10 -2
  14. package/dist/DateRangePicker.js +22 -0
  15. package/dist/Dialog.js +5 -22
  16. package/dist/Icon.js +11 -8
  17. package/dist/Input.js +107 -15
  18. package/dist/Link.js +32 -14
  19. package/dist/List.js +14 -4
  20. package/dist/MessageStrip.js +39 -2
  21. package/dist/MultiComboBox.js +7 -3
  22. package/dist/MultiComboBoxItem.js +1 -1
  23. package/dist/MultiInput.js +55 -8
  24. package/dist/Option.js +12 -1
  25. package/dist/Panel.js +9 -0
  26. package/dist/Popover.js +106 -57
  27. package/dist/Popup.js +16 -2
  28. package/dist/RadioButton.js +15 -3
  29. package/dist/RatingIndicator.js +37 -7
  30. package/dist/ResponsivePopover.js +1 -0
  31. package/dist/SegmentedButton.js +14 -1
  32. package/dist/Select.js +2 -1
  33. package/dist/SliderBase.js +4 -0
  34. package/dist/SplitButton.js +425 -0
  35. package/dist/Switch.js +18 -0
  36. package/dist/Tab.js +10 -6
  37. package/dist/TabContainer.js +480 -108
  38. package/dist/TabSeparator.js +42 -3
  39. package/dist/Table.js +15 -5
  40. package/dist/TextArea.js +9 -3
  41. package/dist/ToggleButton.js +5 -0
  42. package/dist/Tokenizer.js +134 -7
  43. package/dist/TreeItem.js +21 -0
  44. package/dist/TreeListItem.js +8 -0
  45. package/dist/api.json +299 -26
  46. package/dist/css/themes/Badge.css +1 -1
  47. package/dist/css/themes/Breadcrumbs.css +1 -1
  48. package/dist/css/themes/BrowserScrollbar.css +1 -1
  49. package/dist/css/themes/BusyIndicator.css +1 -1
  50. package/dist/css/themes/CardHeader.css +1 -1
  51. package/dist/css/themes/CheckBox.css +1 -1
  52. package/dist/css/themes/ComboBox.css +1 -1
  53. package/dist/css/themes/CustomListItem.css +1 -1
  54. package/dist/css/themes/Dialog.css +1 -1
  55. package/dist/css/themes/Input.css +1 -1
  56. package/dist/css/themes/List.css +1 -1
  57. package/dist/css/themes/MultiComboBox.css +1 -1
  58. package/dist/css/themes/Panel.css +1 -1
  59. package/dist/css/themes/Popover.css +1 -1
  60. package/dist/css/themes/PopupsCommon.css +1 -1
  61. package/dist/css/themes/RadioButton.css +1 -1
  62. package/dist/css/themes/RatingIndicator.css +1 -1
  63. package/dist/css/themes/Select.css +1 -1
  64. package/dist/css/themes/SliderBase.css +1 -1
  65. package/dist/css/themes/SplitButton.css +1 -0
  66. package/dist/css/themes/TabContainer.css +1 -1
  67. package/dist/css/themes/TabInOverflow.css +1 -1
  68. package/dist/css/themes/TabInStrip.css +1 -1
  69. package/dist/css/themes/TabSeparatorInOverflow.css +1 -0
  70. package/dist/css/themes/TabSeparatorInStrip.css +1 -0
  71. package/dist/css/themes/Table.css +1 -1
  72. package/dist/css/themes/TableColumn.css +1 -1
  73. package/dist/css/themes/TextArea.css +1 -1
  74. package/dist/css/themes/TimeSelection.css +1 -1
  75. package/dist/css/themes/Token.css +1 -1
  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 +88 -15
  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/BreadcrumbsPopoverTemplate.lit.js +1 -1
  145. package/dist/generated/templates/BreadcrumbsTemplate.lit.js +1 -1
  146. package/dist/generated/templates/BusyIndicatorTemplate.lit.js +1 -1
  147. package/dist/generated/templates/ButtonTemplate.lit.js +1 -1
  148. package/dist/generated/templates/CardHeaderTemplate.lit.js +1 -1
  149. package/dist/generated/templates/CarouselTemplate.lit.js +1 -1
  150. package/dist/generated/templates/CheckBoxTemplate.lit.js +1 -1
  151. package/dist/generated/templates/ColorPalettePopoverTemplate.lit.js +1 -1
  152. package/dist/generated/templates/ComboBoxPopoverTemplate.lit.js +1 -1
  153. package/dist/generated/templates/ComboBoxTemplate.lit.js +1 -1
  154. package/dist/generated/templates/CustomListItemTemplate.lit.js +2 -2
  155. package/dist/generated/templates/DialogTemplate.lit.js +1 -1
  156. package/dist/generated/templates/InputPopoverTemplate.lit.js +3 -3
  157. package/dist/generated/templates/InputTemplate.lit.js +1 -1
  158. package/dist/generated/templates/LinkTemplate.lit.js +1 -1
  159. package/dist/generated/templates/ListItemTemplate.lit.js +2 -2
  160. package/dist/generated/templates/MessageStripTemplate.lit.js +1 -1
  161. package/dist/generated/templates/MultiComboBoxPopoverTemplate.lit.js +1 -1
  162. package/dist/generated/templates/MultiInputTemplate.lit.js +1 -1
  163. package/dist/generated/templates/PanelTemplate.lit.js +1 -1
  164. package/dist/generated/templates/PopupBlockLayerTemplate.lit.js +1 -1
  165. package/dist/generated/templates/RangeSliderTemplate.lit.js +1 -1
  166. package/dist/generated/templates/ResponsivePopoverTemplate.lit.js +1 -1
  167. package/dist/generated/templates/SegmentedButtonTemplate.lit.js +1 -1
  168. package/dist/generated/templates/SelectPopoverTemplate.lit.js +2 -2
  169. package/dist/generated/templates/SliderBaseTemplate.lit.js +1 -1
  170. package/dist/generated/templates/SliderTemplate.lit.js +1 -1
  171. package/dist/generated/templates/SplitButtonTemplate.lit.js +7 -0
  172. package/dist/generated/templates/StandardListItemTemplate.lit.js +2 -2
  173. package/dist/generated/templates/SuggestionListItemTemplate.lit.js +2 -2
  174. package/dist/generated/templates/SwitchTemplate.lit.js +1 -1
  175. package/dist/generated/templates/TabContainerPopoverTemplate.lit.js +4 -2
  176. package/dist/generated/templates/TabContainerTemplate.lit.js +9 -10
  177. package/dist/generated/templates/TabInOverflowTemplate.lit.js +1 -1
  178. package/dist/generated/templates/TabInStripTemplate.lit.js +1 -1
  179. package/dist/generated/templates/TabSeparatorInOverflowTemplate.lit.js +7 -0
  180. package/dist/generated/templates/TabSeparatorInStripTemplate.lit.js +7 -0
  181. package/dist/generated/templates/TableTemplate.lit.js +1 -1
  182. package/dist/generated/templates/TextAreaPopoverTemplate.lit.js +1 -1
  183. package/dist/generated/templates/ToggleButtonTemplate.lit.js +1 -1
  184. package/dist/generated/templates/TreeListItemTemplate.lit.js +2 -2
  185. package/dist/generated/templates/TreeTemplate.lit.js +1 -1
  186. package/dist/generated/themes/Badge.css.js +1 -1
  187. package/dist/generated/themes/Breadcrumbs.css.js +1 -1
  188. package/dist/generated/themes/BrowserScrollbar.css.js +1 -1
  189. package/dist/generated/themes/BusyIndicator.css.js +1 -1
  190. package/dist/generated/themes/CardHeader.css.js +1 -1
  191. package/dist/generated/themes/CheckBox.css.js +1 -1
  192. package/dist/generated/themes/ComboBox.css.js +1 -1
  193. package/dist/generated/themes/CustomListItem.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/List.css.js +1 -1
  197. package/dist/generated/themes/MultiComboBox.css.js +1 -1
  198. package/dist/generated/themes/Panel.css.js +1 -1
  199. package/dist/generated/themes/Popover.css.js +1 -1
  200. package/dist/generated/themes/PopupsCommon.css.js +1 -1
  201. package/dist/generated/themes/RadioButton.css.js +1 -1
  202. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  203. package/dist/generated/themes/Select.css.js +1 -1
  204. package/dist/generated/themes/SliderBase.css.js +1 -1
  205. package/dist/generated/themes/SplitButton.css.js +8 -0
  206. package/dist/generated/themes/TabContainer.css.js +1 -1
  207. package/dist/generated/themes/TabInOverflow.css.js +1 -1
  208. package/dist/generated/themes/TabInStrip.css.js +1 -1
  209. package/dist/generated/themes/TabSeparatorInOverflow.css.js +8 -0
  210. package/dist/generated/themes/TabSeparatorInStrip.css.js +8 -0
  211. package/dist/generated/themes/Table.css.js +1 -1
  212. package/dist/generated/themes/TableColumn.css.js +1 -1
  213. package/dist/generated/themes/TextArea.css.js +1 -1
  214. package/dist/generated/themes/TimeSelection.css.js +1 -1
  215. package/dist/generated/themes/Token.css.js +1 -1
  216. package/dist/generated/themes/ValueStateMessage.css.js +1 -1
  217. package/dist/generated/themes/sap_belize/parameters-bundle.css.js +1 -1
  218. package/dist/generated/themes/sap_belize_hcb/parameters-bundle.css.js +1 -1
  219. package/dist/generated/themes/sap_belize_hcw/parameters-bundle.css.js +1 -1
  220. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  221. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  222. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -1
  223. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -1
  224. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  225. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js +1 -1
  226. package/dist/i18n/messagebundle.properties +26 -1
  227. package/dist/i18n/messagebundle_ar.properties +13 -1
  228. package/dist/i18n/messagebundle_bg.properties +13 -1
  229. package/dist/i18n/messagebundle_ca.properties +13 -1
  230. package/dist/i18n/messagebundle_cs.properties +13 -1
  231. package/dist/i18n/messagebundle_cy.properties +13 -1
  232. package/dist/i18n/messagebundle_da.properties +13 -1
  233. package/dist/i18n/messagebundle_de.properties +13 -1
  234. package/dist/i18n/messagebundle_el.properties +13 -1
  235. package/dist/i18n/messagebundle_en.properties +13 -1
  236. package/dist/i18n/messagebundle_en_GB.properties +13 -1
  237. package/dist/i18n/messagebundle_en_US_sappsd.properties +18 -1
  238. package/dist/i18n/messagebundle_en_US_saprigi.properties +18 -1
  239. package/dist/i18n/messagebundle_en_US_saptrc.properties +18 -1
  240. package/dist/i18n/messagebundle_es.properties +13 -1
  241. package/dist/i18n/messagebundle_es_MX.properties +13 -1
  242. package/dist/i18n/messagebundle_et.properties +13 -1
  243. package/dist/i18n/messagebundle_fi.properties +14 -2
  244. package/dist/i18n/messagebundle_fr.properties +13 -1
  245. package/dist/i18n/messagebundle_fr_CA.properties +13 -1
  246. package/dist/i18n/messagebundle_hi.properties +13 -1
  247. package/dist/i18n/messagebundle_hr.properties +13 -1
  248. package/dist/i18n/messagebundle_hu.properties +13 -1
  249. package/dist/i18n/messagebundle_id.properties +13 -1
  250. package/dist/i18n/messagebundle_it.properties +13 -1
  251. package/dist/i18n/messagebundle_iw.properties +13 -1
  252. package/dist/i18n/messagebundle_ja.properties +13 -1
  253. package/dist/i18n/messagebundle_kk.properties +13 -1
  254. package/dist/i18n/messagebundle_ko.properties +13 -1
  255. package/dist/i18n/messagebundle_lt.properties +13 -1
  256. package/dist/i18n/messagebundle_lv.properties +13 -1
  257. package/dist/i18n/messagebundle_ms.properties +13 -1
  258. package/dist/i18n/messagebundle_nl.properties +13 -1
  259. package/dist/i18n/messagebundle_no.properties +13 -1
  260. package/dist/i18n/messagebundle_pl.properties +13 -1
  261. package/dist/i18n/messagebundle_pt.properties +13 -1
  262. package/dist/i18n/messagebundle_pt_PT.properties +13 -1
  263. package/dist/i18n/messagebundle_ro.properties +13 -1
  264. package/dist/i18n/messagebundle_ru.properties +13 -1
  265. package/dist/i18n/messagebundle_sh.properties +13 -1
  266. package/dist/i18n/messagebundle_sk.properties +13 -1
  267. package/dist/i18n/messagebundle_sl.properties +13 -1
  268. package/dist/i18n/messagebundle_sv.properties +13 -1
  269. package/dist/i18n/messagebundle_th.properties +12 -0
  270. package/dist/i18n/messagebundle_tr.properties +13 -1
  271. package/dist/i18n/messagebundle_uk.properties +13 -1
  272. package/dist/i18n/messagebundle_vi.properties +13 -1
  273. package/dist/i18n/messagebundle_zh_CN.properties +13 -1
  274. package/dist/i18n/messagebundle_zh_TW.properties +12 -0
  275. package/dist/types/HasPopup.js +62 -0
  276. package/dist/types/TabsOverflowMode.js +40 -0
  277. package/package.json +9 -9
  278. package/src/Breadcrumbs.hbs +3 -2
  279. package/src/Breadcrumbs.js +8 -6
  280. package/src/BreadcrumbsItem.js +1 -1
  281. package/src/BreadcrumbsPopover.hbs +2 -2
  282. package/src/BusyIndicator.hbs +1 -1
  283. package/src/BusyIndicator.js +2 -3
  284. package/src/Button.hbs +1 -1
  285. package/src/Button.js +28 -1
  286. package/src/Calendar.js +7 -0
  287. package/src/CardHeader.hbs +12 -5
  288. package/src/Carousel.hbs +1 -0
  289. package/src/Carousel.js +9 -0
  290. package/src/CheckBox.hbs +1 -0
  291. package/src/CheckBox.js +34 -1
  292. package/src/ColorPalette.js +5 -4
  293. package/src/ColorPalettePopover.hbs +7 -5
  294. package/src/ColorPalettePopover.js +27 -2
  295. package/src/ComboBox.hbs +1 -0
  296. package/src/ComboBox.js +91 -23
  297. package/src/ComboBoxPopover.hbs +1 -0
  298. package/src/DateComponentBase.js +6 -8
  299. package/src/DatePicker.js +10 -2
  300. package/src/DateRangePicker.js +22 -0
  301. package/src/Dialog.hbs +1 -1
  302. package/src/Dialog.js +5 -22
  303. package/src/Icon.js +11 -8
  304. package/src/Input.hbs +1 -1
  305. package/src/Input.js +107 -15
  306. package/src/InputPopover.hbs +2 -3
  307. package/src/Link.hbs +2 -1
  308. package/src/Link.js +32 -14
  309. package/src/List.js +14 -4
  310. package/src/ListItem.hbs +1 -0
  311. package/src/MessageStrip.hbs +1 -1
  312. package/src/MessageStrip.js +39 -2
  313. package/src/MultiComboBox.js +7 -3
  314. package/src/MultiComboBoxItem.js +1 -1
  315. package/src/MultiComboBoxPopover.hbs +1 -1
  316. package/src/MultiInput.js +55 -8
  317. package/src/Option.js +12 -1
  318. package/src/Panel.hbs +1 -1
  319. package/src/Panel.js +9 -0
  320. package/src/Popover.js +106 -57
  321. package/src/Popup.js +16 -2
  322. package/src/PopupBlockLayer.hbs +1 -1
  323. package/src/RadioButton.js +15 -3
  324. package/src/RatingIndicator.js +37 -7
  325. package/src/ResponsivePopover.hbs +2 -0
  326. package/src/ResponsivePopover.js +1 -0
  327. package/src/SegmentedButton.hbs +1 -0
  328. package/src/SegmentedButton.js +14 -1
  329. package/src/Select.js +2 -1
  330. package/src/SelectPopover.hbs +2 -1
  331. package/src/SliderBase.hbs +1 -1
  332. package/src/SliderBase.js +4 -0
  333. package/src/SplitButton.hbs +53 -0
  334. package/src/SplitButton.js +425 -0
  335. package/src/Switch.hbs +1 -0
  336. package/src/Switch.js +18 -0
  337. package/src/Tab.js +10 -6
  338. package/src/TabContainer.hbs +48 -58
  339. package/src/TabContainer.js +480 -108
  340. package/src/TabContainerPopover.hbs +9 -6
  341. package/src/TabInOverflow.hbs +0 -1
  342. package/src/TabInStrip.hbs +3 -8
  343. package/src/TabSeparator.js +42 -3
  344. package/src/TabSeparatorInOverflow.hbs +8 -0
  345. package/src/TabSeparatorInStrip.hbs +6 -0
  346. package/src/Table.hbs +1 -1
  347. package/src/Table.js +15 -5
  348. package/src/TextArea.js +9 -3
  349. package/src/TextAreaPopover.hbs +1 -1
  350. package/src/ToggleButton.js +5 -0
  351. package/src/Tokenizer.js +134 -7
  352. package/src/Tree.hbs +1 -0
  353. package/src/TreeItem.js +21 -0
  354. package/src/TreeListItem.js +8 -0
  355. package/src/features/InputSuggestions.js +88 -15
  356. package/src/i18n/messagebundle.properties +26 -1
  357. package/src/i18n/messagebundle_ar.properties +13 -1
  358. package/src/i18n/messagebundle_bg.properties +13 -1
  359. package/src/i18n/messagebundle_ca.properties +13 -1
  360. package/src/i18n/messagebundle_cs.properties +13 -1
  361. package/src/i18n/messagebundle_cy.properties +13 -1
  362. package/src/i18n/messagebundle_da.properties +13 -1
  363. package/src/i18n/messagebundle_de.properties +13 -1
  364. package/src/i18n/messagebundle_el.properties +13 -1
  365. package/src/i18n/messagebundle_en.properties +13 -1
  366. package/src/i18n/messagebundle_en_GB.properties +13 -1
  367. package/src/i18n/messagebundle_en_US_sappsd.properties +18 -1
  368. package/src/i18n/messagebundle_en_US_saprigi.properties +18 -1
  369. package/src/i18n/messagebundle_en_US_saptrc.properties +18 -1
  370. package/src/i18n/messagebundle_es.properties +13 -1
  371. package/src/i18n/messagebundle_es_MX.properties +13 -1
  372. package/src/i18n/messagebundle_et.properties +13 -1
  373. package/src/i18n/messagebundle_fi.properties +14 -2
  374. package/src/i18n/messagebundle_fr.properties +13 -1
  375. package/src/i18n/messagebundle_fr_CA.properties +13 -1
  376. package/src/i18n/messagebundle_hi.properties +13 -1
  377. package/src/i18n/messagebundle_hr.properties +13 -1
  378. package/src/i18n/messagebundle_hu.properties +13 -1
  379. package/src/i18n/messagebundle_id.properties +13 -1
  380. package/src/i18n/messagebundle_it.properties +13 -1
  381. package/src/i18n/messagebundle_iw.properties +13 -1
  382. package/src/i18n/messagebundle_ja.properties +13 -1
  383. package/src/i18n/messagebundle_kk.properties +13 -1
  384. package/src/i18n/messagebundle_ko.properties +13 -1
  385. package/src/i18n/messagebundle_lt.properties +13 -1
  386. package/src/i18n/messagebundle_lv.properties +13 -1
  387. package/src/i18n/messagebundle_ms.properties +13 -1
  388. package/src/i18n/messagebundle_nl.properties +13 -1
  389. package/src/i18n/messagebundle_no.properties +13 -1
  390. package/src/i18n/messagebundle_pl.properties +13 -1
  391. package/src/i18n/messagebundle_pt.properties +13 -1
  392. package/src/i18n/messagebundle_pt_PT.properties +13 -1
  393. package/src/i18n/messagebundle_ro.properties +13 -1
  394. package/src/i18n/messagebundle_ru.properties +13 -1
  395. package/src/i18n/messagebundle_sh.properties +13 -1
  396. package/src/i18n/messagebundle_sk.properties +13 -1
  397. package/src/i18n/messagebundle_sl.properties +13 -1
  398. package/src/i18n/messagebundle_sv.properties +13 -1
  399. package/src/i18n/messagebundle_th.properties +12 -0
  400. package/src/i18n/messagebundle_tr.properties +13 -1
  401. package/src/i18n/messagebundle_uk.properties +13 -1
  402. package/src/i18n/messagebundle_vi.properties +13 -1
  403. package/src/i18n/messagebundle_zh_CN.properties +13 -1
  404. package/src/i18n/messagebundle_zh_TW.properties +12 -0
  405. package/src/themes/Badge.css +3 -1
  406. package/src/themes/Breadcrumbs.css +100 -99
  407. package/src/themes/BrowserScrollbar.css +2 -0
  408. package/src/themes/BusyIndicator.css +3 -3
  409. package/src/themes/CardHeader.css +7 -3
  410. package/src/themes/CheckBox.css +15 -7
  411. package/src/themes/CustomListItem.css +2 -1
  412. package/src/themes/Dialog.css +1 -0
  413. package/src/themes/Input.css +14 -0
  414. package/src/themes/List.css +1 -0
  415. package/src/themes/Panel.css +4 -0
  416. package/src/themes/Popover.css +4 -0
  417. package/src/themes/PopupsCommon.css +0 -1
  418. package/src/themes/RadioButton.css +4 -3
  419. package/src/themes/RatingIndicator.css +0 -1
  420. package/src/themes/SliderBase.css +3 -2
  421. package/src/themes/SplitButton.css +98 -0
  422. package/src/themes/TabContainer.css +17 -53
  423. package/src/themes/TabInOverflow.css +25 -21
  424. package/src/themes/TabInStrip.css +124 -100
  425. package/src/themes/TabSeparatorInOverflow.css +8 -0
  426. package/src/themes/TabSeparatorInStrip.css +5 -0
  427. package/src/themes/Table.css +1 -1
  428. package/src/themes/TableColumn.css +0 -1
  429. package/src/themes/TextArea.css +9 -1
  430. package/src/themes/TimeSelection.css +4 -0
  431. package/src/themes/Token.css +2 -1
  432. package/src/themes/Tokenizer.css +1 -1
  433. package/src/themes/ValueStateMessage.css +3 -3
  434. package/src/themes/base/BrowserScrollbar-parameters.css +4 -0
  435. package/src/themes/base/Card-parameters.css +1 -1
  436. package/src/themes/base/Input-parameters.css +5 -0
  437. package/src/themes/base/TabContainer-parameters.css +1 -1
  438. package/src/themes/base/TextArea-parameters.css +1 -0
  439. package/src/themes/base/Title-parameters.css +6 -6
  440. package/src/themes/base/Token-parameters.css +1 -0
  441. package/src/themes/base/sizes-parameters.css +2 -2
  442. package/src/themes/sap_belize/BrowserScrollbar-parameters.css +4 -0
  443. package/src/themes/sap_belize/Table-parameters.css +3 -0
  444. package/src/themes/sap_belize/parameters-bundle.css +1 -0
  445. package/src/themes/sap_belize_hcb/BrowserScrollbar-parameters.css +4 -0
  446. package/src/themes/sap_belize_hcb/Input-parameters.css +1 -0
  447. package/src/themes/sap_belize_hcb/Table-parameters.css +1 -0
  448. package/src/themes/sap_belize_hcb/Token-parameters.css +1 -0
  449. package/src/themes/sap_belize_hcb/parameters-bundle.css +1 -0
  450. package/src/themes/sap_belize_hcw/BrowserScrollbar-parameters.css +4 -0
  451. package/src/themes/sap_belize_hcw/Input-parameters.css +1 -0
  452. package/src/themes/sap_belize_hcw/Table-parameters.css +1 -0
  453. package/src/themes/sap_belize_hcw/Token-parameters.css +1 -0
  454. package/src/themes/sap_belize_hcw/parameters-bundle.css +1 -0
  455. package/src/themes/sap_fiori_3/TabContainer-parameters.css +1 -1
  456. package/src/themes/sap_fiori_3/parameters-bundle.css +1 -0
  457. package/src/themes/sap_fiori_3_dark/parameters-bundle.css +1 -0
  458. package/src/themes/sap_fiori_3_hcb/Input-parameters.css +7 -0
  459. package/src/themes/sap_fiori_3_hcb/TextArea-parameters.css +2 -0
  460. package/src/themes/sap_fiori_3_hcb/Token-parameters.css +2 -1
  461. package/src/themes/sap_fiori_3_hcb/parameters-bundle.css +1 -0
  462. package/src/themes/sap_fiori_3_hcw/Input-parameters.css +7 -0
  463. package/src/themes/sap_fiori_3_hcw/TextArea-parameters.css +2 -0
  464. package/src/themes/sap_fiori_3_hcw/Token-parameters.css +2 -1
  465. package/src/themes/sap_fiori_3_hcw/parameters-bundle.css +1 -0
  466. package/src/themes/sap_horizon/Card-parameters.css +0 -1
  467. package/src/themes/sap_horizon/Table-parameters.css +1 -0
  468. package/src/themes/sap_horizon/parameters-bundle.css +1 -0
  469. package/src/themes/sap_horizon_exp/parameters-bundle.css +1 -0
  470. package/src/types/HasPopup.js +62 -0
  471. package/src/types/TabsOverflowMode.js +40 -0
  472. package/csp.js +0 -7
  473. package/dist/generated/templates/TabSeparatorTemplate.lit.js +0 -7
  474. package/src/TabSeparator.hbs +0 -1
@@ -10,7 +10,14 @@ import MessageStripDesign from "./types/MessageStripDesign.js";
10
10
  import MessageStripTemplate from "./generated/templates/MessageStripTemplate.lit.js";
11
11
  import Icon from "./Icon.js";
12
12
  import Button from "./Button.js";
13
- import { MESSAGE_STRIP_CLOSE_BUTTON } from "./generated/i18n/i18n-defaults.js";
13
+ import {
14
+ MESSAGE_STRIP_CLOSE_BUTTON,
15
+ MESSAGE_STRIP_CLOSABLE,
16
+ MESSAGE_STRIP_ERROR,
17
+ MESSAGE_STRIP_WARNING,
18
+ MESSAGE_STRIP_SUCCESS,
19
+ MESSAGE_STRIP_INFORMATION,
20
+ } from "./generated/i18n/i18n-defaults.js";
14
21
 
15
22
  // Styles
16
23
  import messageStripCss from "./generated/themes/MessageStrip.css.js";
@@ -22,6 +29,7 @@ const metadata = {
22
29
  tag: "ui5-message-strip",
23
30
  altTag: "ui5-messagestrip",
24
31
  languageAware: true,
32
+ fastNavigation: true,
25
33
  properties: /** @lends sap.ui.webcomponents.main.MessageStrip.prototype */ {
26
34
 
27
35
  /**
@@ -124,6 +132,14 @@ const metadata = {
124
132
  * an icon in the beginning and a close button. Moreover, its size and background
125
133
  * can be controlled with CSS.
126
134
  *
135
+ * <h3>Keyboard Handling</h3>
136
+ *
137
+ * <h4>Fast Navigation</h4>
138
+ * This component provides a build in fast navigation group which can be used via <code>F6 / Shift + F6</code> or <code> Ctrl + Alt(Option) + Down / Ctrl + Alt(Option) + Up</code>.
139
+ * In order to use this functionality, you need to import the following module:
140
+ * <code>import "@ui5/webcomponents-base/dist/features/F6Navigation.js"</code>
141
+ * <br><br>
142
+ *
127
143
  * <h3>ES6 Module Import</h3>
128
144
  *
129
145
  * <code>import "@ui5/webcomponents/dist/MessageStrip";</code>
@@ -190,14 +206,27 @@ class MessageStrip extends UI5Element {
190
206
  };
191
207
  }
192
208
 
209
+ static designAnnouncementMappings() {
210
+ return {
211
+ "Information": MessageStrip.i18nBundle.getText(MESSAGE_STRIP_INFORMATION),
212
+ "Positive": MessageStrip.i18nBundle.getText(MESSAGE_STRIP_SUCCESS),
213
+ "Negative": MessageStrip.i18nBundle.getText(MESSAGE_STRIP_ERROR),
214
+ "Warning": MessageStrip.i18nBundle.getText(MESSAGE_STRIP_WARNING),
215
+ };
216
+ }
217
+
193
218
  get hiddenText() {
194
- return `Message Strip ${this.design} ${this.hideCloseButton ? "" : "closable"}`;
219
+ return `${MessageStrip.designAnnouncementMappings()[this.design]} ${this.hideCloseButton ? "" : this._closableText}`;
195
220
  }
196
221
 
197
222
  get _closeButtonText() {
198
223
  return MessageStrip.i18nBundle.getText(MESSAGE_STRIP_CLOSE_BUTTON);
199
224
  }
200
225
 
226
+ get _closableText() {
227
+ return MessageStrip.i18nBundle.getText(MESSAGE_STRIP_CLOSABLE);
228
+ }
229
+
201
230
  get classes() {
202
231
  return {
203
232
  root: {
@@ -220,6 +249,14 @@ class MessageStrip extends UI5Element {
220
249
  get designClasses() {
221
250
  return MessageStrip.designClassesMappings()[this.design];
222
251
  }
252
+
253
+ get accInfo() {
254
+ return {
255
+ "button": {
256
+ "title": this._closeButtonText,
257
+ },
258
+ };
259
+ }
223
260
  }
224
261
 
225
262
  MessageStrip.define();
@@ -537,7 +537,7 @@ class MultiComboBox extends UI5Element {
537
537
 
538
538
  const tokensCount = this._tokenizer.tokens.length - 1;
539
539
 
540
- if (!event.relatedTarget || event.relatedTarget.localName !== "ui5-token") {
540
+ if (!event.relatedTarget || !event.relatedTarget.hasAttribute("ui5-token")) {
541
541
  this._tokenizer.tokens.forEach(token => { token.selected = false; });
542
542
  this._tokenizer.scrollToStart();
543
543
  }
@@ -912,7 +912,7 @@ class MultiComboBox extends UI5Element {
912
912
  }
913
913
 
914
914
  inputFocusIn() {
915
- if (!isPhone()) {
915
+ if (!isPhone() || this.readonly) {
916
916
  this.focused = true;
917
917
  } else {
918
918
  this._innerInput.blur();
@@ -1012,7 +1012,7 @@ class MultiComboBox extends UI5Element {
1012
1012
  }
1013
1013
 
1014
1014
  get shouldDisplayOnlyValueStateMessage() {
1015
- return this.focused && this.hasValueStateMessage && !this._iconPressed;
1015
+ return this.focused && !this.readonly && this.hasValueStateMessage && !this._iconPressed;
1016
1016
  }
1017
1017
 
1018
1018
  get valueStateTextMappings() {
@@ -1051,6 +1051,10 @@ class MultiComboBox extends UI5Element {
1051
1051
  return (this._isFocusInside || this.open) && !this.readonly;
1052
1052
  }
1053
1053
 
1054
+ get _valueStatePopoverHorizontalAlign() {
1055
+ return this.effectiveDir !== "rtl" ? "Left" : "Right";
1056
+ }
1057
+
1054
1058
  get classes() {
1055
1059
  return {
1056
1060
  popover: {
@@ -34,7 +34,7 @@ class MultiComboBoxItem extends ComboBoxItem {
34
34
  }
35
35
 
36
36
  get stableDomRef() {
37
- return `${this._id}-stable-dom-ref`;
37
+ return this.getAttribute("stable-dom-ref") || `${this._id}-stable-dom-ref`;
38
38
  }
39
39
  }
40
40
 
@@ -100,7 +100,7 @@
100
100
  hide-arrow
101
101
  class="ui5-valuestatemessage-popover"
102
102
  placement-type="Bottom"
103
- horizontal-align="Left"
103
+ horizontal-align="{{_valueStatePopoverHorizontalAlign}}"
104
104
  >
105
105
  <div slot="header" class="{{classes.popoverValueState}}" style="{{styles.popoverHeader}}">
106
106
  <ui5-icon class="ui5-input-value-state-message-icon" name="{{_valueStateMessageIcon}}"></ui5-icon>
package/src/MultiInput.js CHANGED
@@ -4,6 +4,9 @@ import {
4
4
  isBackSpace,
5
5
  isLeft,
6
6
  isRight,
7
+ isRightCtrl,
8
+ isHome,
9
+ isEnd,
7
10
  } from "@ui5/webcomponents-base/dist/Keys.js";
8
11
  import { MULTIINPUT_ROLEDESCRIPTION_TEXT } from "./generated/i18n/i18n-defaults.js";
9
12
  import Input from "./Input.js";
@@ -136,8 +139,15 @@ class MultiInput extends Input {
136
139
  }
137
140
 
138
141
  tokenDelete(event) {
139
- this.fireEvent("token-delete", {
140
- token: event.detail.ref,
142
+ const focusedToken = event.detail.ref;
143
+ const selectedTokens = this.tokens.filter(token => token.selected);
144
+
145
+ if (selectedTokens.indexOf(focusedToken) === -1) {
146
+ selectedTokens.push(focusedToken);
147
+ }
148
+
149
+ selectedTokens.forEach(token => {
150
+ this.fireEvent("token-delete", { token });
141
151
  });
142
152
 
143
153
  this.focus();
@@ -170,7 +180,9 @@ class MultiInput extends Input {
170
180
  _onkeydown(event) {
171
181
  super._onkeydown(event);
172
182
 
173
- if (isLeft(event)) {
183
+ const isHomeInBeginning = isHome(event) && event.target.selectionStart === 0;
184
+
185
+ if (isLeft(event) || isHomeInBeginning) {
174
186
  this._skipOpenSuggestions = true; // Prevent input focus when navigating through the tokens.
175
187
 
176
188
  return this._handleLeft(event);
@@ -189,22 +201,57 @@ class MultiInput extends Input {
189
201
  }
190
202
 
191
203
  _onTokenizerKeydown(event) {
192
- if (isRight(event)) {
193
- const lastTokenIndex = this.tokenizer._tokens.length - 1;
204
+ const rightCtrl = isRightCtrl(event);
205
+ const isCtrl = !!(event.metaKey || event.ctrlKey);
206
+ const tokens = this.tokens;
194
207
 
195
- if (this.tokenizer._tokens[lastTokenIndex] === document.activeElement) {
208
+ if (isRight(event) || isEnd(event) || rightCtrl) {
209
+ event.preventDefault();
210
+ const lastTokenIndex = this.tokens.length - 1;
211
+
212
+ if (event.target === this.tokens[lastTokenIndex] && this.tokens[lastTokenIndex] === document.activeElement) {
196
213
  setTimeout(() => {
197
214
  this.focus();
198
215
  }, 0);
216
+ } else if (rightCtrl) {
217
+ event.preventDefault();
218
+ return this.tokenizer._handleArrowCtrl(event.target, this.tokens, true);
219
+ }
220
+ }
221
+
222
+ this.tokenizer._handleItemNavigation(event, tokens);
223
+
224
+ if (isCtrl && ["c", "x"].includes(event.key.toLowerCase())) {
225
+ event.preventDefault();
226
+
227
+ const isCut = event.key.toLowerCase() === "x";
228
+ const selectedTokens = tokens.filter(token => token.selected);
229
+
230
+ if (isCut) {
231
+ const cutResult = this.tokenizer._fillClipboard("cut", selectedTokens);
232
+
233
+ selectedTokens.forEach(token => {
234
+ this.fireEvent("token-delete", { token });
235
+ });
236
+
237
+ this.focus();
238
+
239
+ return cutResult;
199
240
  }
241
+
242
+ return this.tokenizer._fillClipboard("copy", selectedTokens);
200
243
  }
201
244
  }
202
245
 
203
246
  _handleLeft() {
204
247
  const cursorPosition = this.getDomRef().querySelector(`input`).selectionStart;
248
+ const tokens = this.tokens;
249
+ const lastToken = tokens.length && tokens[tokens.length - 1];
205
250
 
206
- if (cursorPosition === 0) {
207
- this.tokenizer._focusLastToken();
251
+ if (cursorPosition === 0 && lastToken) {
252
+ // this.tokenizer._focusLastToken(); won't work as the tokens in the MultiInput use different slot and are not resolved properly
253
+ lastToken.focus();
254
+ this.tokenizer._itemNav.setCurrentItem(lastToken);
208
255
  }
209
256
  }
210
257
 
package/src/Option.js CHANGED
@@ -31,6 +31,17 @@ const metadata = {
31
31
  type: Boolean,
32
32
  },
33
33
 
34
+ /**
35
+ * Defines the tooltip of the component.
36
+ * @type {string}
37
+ * @defaultvalue ""
38
+ * @private
39
+ * @since 1.1.0
40
+ */
41
+ title: {
42
+ type: String,
43
+ },
44
+
34
45
  /**
35
46
  * Defines the <code>icon</code> source URI.
36
47
  * <br><br>
@@ -106,7 +117,7 @@ class Option extends UI5Element {
106
117
  }
107
118
 
108
119
  get stableDomRef() {
109
- return `${this._id}-stable-dom-ref`;
120
+ return this.getAttribute("stable-dom-ref") || `${this._id}-stable-dom-ref`;
110
121
  }
111
122
  }
112
123
 
package/src/Panel.hbs CHANGED
@@ -1,8 +1,8 @@
1
1
  <div
2
- data-sap-ui-fastnavgroup="true"
3
2
  class="ui5-panel-root"
4
3
  role="{{accRole}}"
5
4
  aria-label="{{effectiveAccessibleName}}"
5
+ dir="{{effectiveDir}}"
6
6
  >
7
7
  <!-- header: either header or h1 with header text -->
8
8
  <div
package/src/Panel.js CHANGED
@@ -24,6 +24,7 @@ const metadata = {
24
24
  tag: "ui5-panel",
25
25
  languageAware: true,
26
26
  managedSlots: true,
27
+ fastNavigation: true,
27
28
  slots: /** @lends sap.ui.webcomponents.main.Panel.prototype */ {
28
29
 
29
30
  /**
@@ -240,6 +241,14 @@ const metadata = {
240
241
  * <li>content - Used to style the wrapper of the content</li>
241
242
  * </ul>
242
243
  *
244
+ * <h3>Keyboard Handling</h3>
245
+ *
246
+ * <h4>Fast Navigation</h4>
247
+ * This component provides a build in fast navigation group which can be used via <code>F6 / Shift + F6</code> or <code> Ctrl + Alt(Option) + Down / Ctrl + Alt(Option) + Up</code>.
248
+ * In order to use this functionality, you need to import the following module:
249
+ * <code>import "@ui5/webcomponents-base/dist/features/F6Navigation.js"</code>
250
+ * <br><br>
251
+ *
243
252
  * <h3>ES6 Module Import</h3>
244
253
  *
245
254
  * <code>import "@ui5/webcomponents/dist/Panel";</code>
package/src/Popover.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
2
+ import { isIOS } from "@ui5/webcomponents-base/dist/Device.js";
2
3
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
3
4
  import { getClosedPopupParent } from "@ui5/webcomponents-base/dist/util/PopupUtils.js";
4
5
  import clamp from "@ui5/webcomponents-base/dist/util/clamp.js";
@@ -187,11 +188,11 @@ const metadata = {
187
188
  defaultValue: PopoverPlacementType.Right,
188
189
  },
189
190
 
190
- _maxContentHeight: {
191
+ _maxHeight: {
191
192
  type: Integer,
192
193
  noAttribute: true,
193
194
  },
194
- _maxContentWidth: {
195
+ _maxWidth: {
195
196
  type: Integer,
196
197
  noAttribute: true,
197
198
  },
@@ -283,6 +284,10 @@ class Popover extends Popup {
283
284
  return 10; // px
284
285
  }
285
286
 
287
+ static get ARROW_MARGIN() {
288
+ return 6; // px
289
+ }
290
+
286
291
  onEnterDOM() {
287
292
  ResizeHandler.register(this, this._handleResize);
288
293
  }
@@ -421,41 +426,94 @@ class Popover extends Popup {
421
426
  top = Math.max(top, this._top);
422
427
  }
423
428
 
424
- let { arrowX, arrowY } = placement;
425
- const isVertical = this.actualPlacementType === PopoverPlacementType.Top
426
- || this.actualPlacementType === PopoverPlacementType.Bottom;
429
+ const isVertical = this.actualPlacementType === PopoverPlacementType.Top || this.actualPlacementType === PopoverPlacementType.Bottom;
430
+ const borderRadius = Number.parseInt(window.getComputedStyle(this).getPropertyValue("border-radius"));
431
+ const arrow = this._clampArrowPlacement(placement.arrow, isVertical, this._top, this._left, popoverSize, borderRadius);
432
+
433
+ this.arrowTranslateX = arrow.x;
434
+ this.arrowTranslateY = arrow.y;
435
+
436
+ top = this._adjustForIOSKeyboard(top);
437
+
438
+ Object.assign(this.style, {
439
+ top: `${top}px`,
440
+ left: `${left}px`,
441
+ });
442
+ super._show();
443
+
444
+ if (stretching && this._width) {
445
+ this.style.width = this._width;
446
+ }
447
+ }
448
+
449
+ /**
450
+ * Restricts the arrow's coordinates within the bounds of the popover.
451
+ * @private
452
+ * @param {{x: number, y: number}} arrow arrow's coordinates
453
+ * @param {boolean} isVertical if the popover is placed vertically relative to the opener
454
+ * @param {number} top popover's top
455
+ * @param {number} left popover's left
456
+ * @param {{width: number, height: number}} popoverSize popover's width and height
457
+ * @param {number} borderRadius value of the border-radius property
458
+ * @returns {{x: number, y: number}} Arrow's coordinates
459
+ */
460
+ _clampArrowPlacement({ x, y }, isVertical, top, left, { width, height }, borderRadius) {
461
+ const maxY = this._getArrowRange(height, borderRadius);
462
+ const maxX = this._getArrowRange(width, borderRadius);
427
463
 
428
464
  if (isVertical) {
429
- const popoverOnLeftBorderOffset = Popover.VIEWPORT_MARGIN - this._left;
430
- const popoverOnRightBorderOffset = this._left + popoverSize.width + Popover.VIEWPORT_MARGIN - document.documentElement.clientWidth;
465
+ const popoverOnLeftBorderOffset = Popover.VIEWPORT_MARGIN - left;
466
+ const popoverOnRightBorderOffset = left + width + Popover.VIEWPORT_MARGIN - document.documentElement.clientWidth;
467
+
431
468
  if (popoverOnLeftBorderOffset > 0) {
432
- arrowX -= popoverOnLeftBorderOffset;
469
+ x = Math.max(x - popoverOnLeftBorderOffset, -maxX);
433
470
  } else if (popoverOnRightBorderOffset > 0) {
434
- arrowX += popoverOnRightBorderOffset;
471
+ x = Math.min(x + popoverOnRightBorderOffset, maxX);
435
472
  }
436
473
  }
437
- this.arrowTranslateX = Math.round(arrowX);
438
474
 
439
475
  if (!isVertical) {
440
- const popoverOnTopBorderOffset = Popover.VIEWPORT_MARGIN - this._top;
441
- const popoverOnBottomBorderOffset = this._top + popoverSize.height + Popover.VIEWPORT_MARGIN - document.documentElement.clientHeight;
476
+ const popoverOnTopBorderOffset = Popover.VIEWPORT_MARGIN - top;
477
+ const popoverOnBottomBorderOffset = top + height + Popover.VIEWPORT_MARGIN - document.documentElement.clientHeight;
442
478
  if (popoverOnTopBorderOffset > 0) {
443
- arrowY -= popoverOnTopBorderOffset;
479
+ y = Math.max(y - popoverOnTopBorderOffset, -maxY);
444
480
  } else if (popoverOnBottomBorderOffset > 0) {
445
- arrowY += popoverOnBottomBorderOffset;
481
+ y = Math.min(y + popoverOnBottomBorderOffset, maxY);
446
482
  }
447
483
  }
448
- this.arrowTranslateY = Math.round(arrowY);
449
484
 
450
- Object.assign(this.style, {
451
- top: `${top}px`,
452
- left: `${left}px`,
453
- });
454
- super._show();
485
+ return {
486
+ x: Math.round(x),
487
+ y: Math.round(y),
488
+ };
489
+ }
455
490
 
456
- if (stretching && this._width) {
457
- this.style.width = this._width;
491
+ /**
492
+ * Returns the allowed range for the popover arrow based on its dimension.
493
+ * @private
494
+ * @param {number} dimension the height or width of the popover
495
+ * @param {number} borderRadius border radius of the popover
496
+ * @returns {number}
497
+ */
498
+ _getArrowRange(dimension, borderRadius) {
499
+ return Math.floor((dimension / 2) - (borderRadius + Popover.ARROW_MARGIN));
500
+ }
501
+
502
+ /**
503
+ * Adjust the desired top position to compensate for shift of the screen
504
+ * caused by opened keyboard on iOS which affects all elements with position:fixed.
505
+ * @private
506
+ * @param {int} top The target top in px.
507
+ * @returns {int} The adjusted top in px.
508
+ */
509
+ _adjustForIOSKeyboard(top) {
510
+ if (!isIOS()) {
511
+ return top;
458
512
  }
513
+
514
+ const actualTop = Math.ceil(this.getBoundingClientRect().top);
515
+
516
+ return top + (Number.parseInt(this.style.top || "0") - actualTop);
459
517
  }
460
518
 
461
519
  getPopoverSize() {
@@ -482,6 +540,9 @@ class Popover extends Popup {
482
540
  return this.shadowRoot.querySelector(".ui5-popover-arrow");
483
541
  }
484
542
 
543
+ /**
544
+ * @private
545
+ */
485
546
  calcPlacement(targetRect, popoverSize) {
486
547
  let left = 0;
487
548
  let top = 0;
@@ -493,9 +554,6 @@ class Popover extends Popup {
493
554
  let maxHeight = clientHeight;
494
555
  let maxWidth = clientWidth;
495
556
 
496
- let width = "";
497
- let height = "";
498
-
499
557
  const placementType = this.getActualPlacementType(targetRect, popoverSize);
500
558
 
501
559
  this._preventRepositionAndClose = this.shouldCloseDueToNoOpener(targetRect) || this.shouldCloseDueToOverflow(placementType, targetRect);
@@ -505,15 +563,11 @@ class Popover extends Popup {
505
563
 
506
564
  if (this.horizontalAlign === PopoverHorizontalAlign.Stretch && isVertical) {
507
565
  popoverSize.width = targetRect.width;
508
- width = `${targetRect.width}px`;
566
+ this._width = `${targetRect.width}px`;
509
567
  } else if (this.verticalAlign === PopoverVerticalAlign.Stretch && !isVertical) {
510
568
  popoverSize.height = targetRect.height;
511
- height = `${targetRect.height}px`;
512
569
  }
513
570
 
514
- this._width = width;
515
- this._height = height;
516
-
517
571
  const arrowOffset = this.hideArrow ? 0 : arrowSize;
518
572
 
519
573
  // calc popover positions
@@ -528,11 +582,11 @@ class Popover extends Popup {
528
582
  break;
529
583
  case PopoverPlacementType.Bottom:
530
584
  left = this.getVerticalLeft(targetRect, popoverSize);
585
+ top = targetRect.bottom + arrowOffset;
531
586
 
532
587
  if (allowTargetOverlap) {
533
- top = Math.max(Math.min(targetRect.bottom + arrowOffset, clientHeight - popoverSize.height), 0);
588
+ top = Math.max(Math.min(top, clientHeight - popoverSize.height), 0);
534
589
  } else {
535
- top = targetRect.bottom + arrowOffset;
536
590
  maxHeight = clientHeight - targetRect.bottom - arrowOffset;
537
591
  }
538
592
  break;
@@ -545,14 +599,14 @@ class Popover extends Popup {
545
599
  }
546
600
  break;
547
601
  case PopoverPlacementType.Right:
602
+ left = targetRect.left + targetRect.width + arrowOffset;
603
+ top = this.getHorizontalTop(targetRect, popoverSize);
604
+
548
605
  if (allowTargetOverlap) {
549
- left = Math.max(Math.min(targetRect.left + targetRect.width + arrowOffset, clientWidth - popoverSize.width), 0);
606
+ left = Math.max(Math.min(left, clientWidth - popoverSize.width), 0);
550
607
  } else {
551
- left = targetRect.left + targetRect.width + arrowOffset;
552
608
  maxWidth = clientWidth - targetRect.right - arrowOffset;
553
609
  }
554
-
555
- top = this.getHorizontalTop(targetRect, popoverSize);
556
610
  break;
557
611
  }
558
612
 
@@ -571,21 +625,8 @@ class Popover extends Popup {
571
625
  }
572
626
  }
573
627
 
574
- let maxContentHeight = maxHeight;
575
-
576
- if (this._displayHeader) {
577
- const headerDomRef = this.shadowRoot.querySelector(".ui5-popup-header-root")
578
- || this.shadowRoot.querySelector(".ui5-popup-header-text");
579
-
580
- if (headerDomRef) {
581
- maxContentHeight = maxHeight - headerDomRef.offsetHeight;
582
- }
583
- }
584
-
585
- this._maxContentHeight = Math.round(maxContentHeight - Popover.VIEWPORT_MARGIN);
586
- this._maxContentWidth = Math.round(maxWidth - Popover.VIEWPORT_MARGIN);
587
-
588
- const arrowPos = this.getArrowPosition(targetRect, popoverSize, left, top, isVertical);
628
+ this._maxHeight = Math.round(maxHeight - Popover.VIEWPORT_MARGIN);
629
+ this._maxWidth = Math.round(maxWidth - Popover.VIEWPORT_MARGIN);
589
630
 
590
631
  if (this._left === undefined || Math.abs(this._left - left) > 1.5) {
591
632
  this._left = Math.round(left);
@@ -595,9 +636,10 @@ class Popover extends Popup {
595
636
  this._top = Math.round(top);
596
637
  }
597
638
 
639
+ const arrowPos = this.getArrowPosition(targetRect, popoverSize, left, top, isVertical);
640
+
598
641
  return {
599
- arrowX: arrowPos.x,
600
- arrowY: arrowPos.y,
642
+ arrow: arrowPos,
601
643
  top: this._top,
602
644
  left: this._left,
603
645
  placementType,
@@ -746,7 +788,7 @@ class Popover extends Popup {
746
788
  }
747
789
 
748
790
  get _ariaLabelledBy() { // Required by Popup.js
749
- return this.accessibleName ? undefined : "ui5-popup-header";
791
+ return this._ariaLabel ? undefined : "ui5-popup-header";
750
792
  }
751
793
 
752
794
  get _ariaModal() { // Required by Popup.js
@@ -756,9 +798,9 @@ class Popover extends Popup {
756
798
  get styles() {
757
799
  return {
758
800
  ...super.styles,
759
- content: {
760
- "max-height": `${this._maxContentHeight}px`,
761
- "max-width": `${this._maxContentWidth}px`,
801
+ root: {
802
+ "max-height": `${this._maxHeight}px`,
803
+ "max-width": `${this._maxWidth}px`,
762
804
  },
763
805
  arrow: {
764
806
  transform: `translate(${this.arrowTranslateX}px, ${this.arrowTranslateY}px)`,
@@ -766,6 +808,13 @@ class Popover extends Popup {
766
808
  };
767
809
  }
768
810
 
811
+ get classes() {
812
+ const allClasses = super.classes;
813
+ allClasses.root["ui5-popover-root"] = true;
814
+
815
+ return allClasses;
816
+ }
817
+
769
818
  /**
770
819
  * Hook for descendants to hide header.
771
820
  */
package/src/Popup.js CHANGED
@@ -3,6 +3,7 @@ import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
3
3
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
4
4
  import { isChrome } from "@ui5/webcomponents-base/dist/Device.js";
5
5
  import { getFirstFocusableElement, getLastFocusableElement } from "@ui5/webcomponents-base/dist/util/FocusableElements.js";
6
+ import { getEffectiveAriaLabelText } from "@ui5/webcomponents-base/dist/util/AriaLabelHelper.js";
6
7
  import { hasStyle, createStyle } from "@ui5/webcomponents-base/dist/ManagedStyles.js";
7
8
  import { isTabPrevious } from "@ui5/webcomponents-base/dist/Keys.js";
8
9
  import { getNextZIndex, getFocusedElement, isFocusedElementWithinNode } from "@ui5/webcomponents-base/dist/util/PopupUtils.js";
@@ -68,7 +69,7 @@ const metadata = {
68
69
  },
69
70
 
70
71
  /**
71
- * Sets the accessible aria name of the component.
72
+ * Defines the accessible name of the component.
72
73
  *
73
74
  * @type {String}
74
75
  * @defaultvalue ""
@@ -80,6 +81,19 @@ const metadata = {
80
81
  defaultValue: undefined,
81
82
  },
82
83
 
84
+ /**
85
+ * Defines the IDs of the elements that label the component.
86
+ *
87
+ * @type {String}
88
+ * @defaultvalue ""
89
+ * @public
90
+ * @since 1.1.0
91
+ */
92
+ accessibleNameRef: {
93
+ type: String,
94
+ defaultValue: "",
95
+ },
96
+
83
97
  /**
84
98
  * @private
85
99
  */
@@ -535,7 +549,7 @@ class Popup extends UI5Element {
535
549
  * @protected
536
550
  */
537
551
  get _ariaLabel() {
538
- return this.accessibleName || undefined;
552
+ return getEffectiveAriaLabelText(this);
539
553
  }
540
554
 
541
555
  get _root() {
@@ -1,6 +1,6 @@
1
1
  <div class="ui5-block-layer"
2
2
  ?hidden={{_blockLayerHidden}}
3
- tabindex="1"
3
+ tabindex="0"
4
4
  style="{{styles.blockLayer}}"
5
5
  @keydown="{{_preventBlockLayerFocus}}"
6
6
  @mousedown="{{_preventBlockLayerFocus}}">
@@ -4,6 +4,7 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
4
4
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
5
5
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
6
6
  import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
7
+ import { getEffectiveAriaLabelText } from "@ui5/webcomponents-base/dist/util/AriaLabelHelper.js";
7
8
  import {
8
9
  isSpace,
9
10
  isEnter,
@@ -174,8 +175,7 @@ const metadata = {
174
175
  },
175
176
 
176
177
  /**
177
- * Defines the text alternative of the component.
178
- * If not provided a default text alternative will be set, if present.
178
+ * Defines the accessible name of the component.
179
179
  *
180
180
  * @type {string}
181
181
  * @defaultvalue ""
@@ -186,6 +186,18 @@ const metadata = {
186
186
  type: String,
187
187
  },
188
188
 
189
+ /**
190
+ * Defines the IDs of the elements that label the component.
191
+ *
192
+ * @type {String}
193
+ * @defaultvalue ""
194
+ * @public
195
+ * @since 1.1.0
196
+ */
197
+ accessibleNameRef: {
198
+ type: String,
199
+ },
200
+
189
201
  _tabIndex: {
190
202
  type: String,
191
203
  defaultValue: "-1",
@@ -455,7 +467,7 @@ class RadioButton extends UI5Element {
455
467
  }
456
468
 
457
469
  get ariaLabelText() {
458
- return [this.text, this.accessibleName].filter(Boolean).join(" ");
470
+ return [getEffectiveAriaLabelText(this), this.text].filter(Boolean).join(" ");
459
471
  }
460
472
 
461
473
  get ariaDescribedBy() {