@sapudex/web-components 0.114.2 → 0.127.6

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 (456) hide show
  1. package/bundle.esm.js +6 -0
  2. package/config/wdio.conf.js +19 -8
  3. package/dist/AccordionItem.d.ts +2 -1
  4. package/dist/AccordionItem.js +3 -3
  5. package/dist/AccordionItem.js.map +1 -1
  6. package/dist/Avatar.d.ts +20 -1
  7. package/dist/Avatar.js +26 -2
  8. package/dist/Avatar.js.map +1 -1
  9. package/dist/AvatarGroup.d.ts +28 -0
  10. package/dist/AvatarGroup.js +126 -0
  11. package/dist/AvatarGroup.js.map +1 -0
  12. package/dist/CountrySelector.d.ts +1 -0
  13. package/dist/CountrySelector.js +3 -0
  14. package/dist/CountrySelector.js.map +1 -1
  15. package/dist/Dropdown.d.ts +11 -1
  16. package/dist/Dropdown.js +15 -3
  17. package/dist/Dropdown.js.map +1 -1
  18. package/dist/FilterMenu.d.ts +21 -5
  19. package/dist/FilterMenu.js +50 -8
  20. package/dist/FilterMenu.js.map +1 -1
  21. package/dist/Footer.d.ts +27 -0
  22. package/dist/Footer.js +27 -36
  23. package/dist/Footer.js.map +1 -1
  24. package/dist/HeroBanner.js +3 -0
  25. package/dist/HeroBanner.js.map +1 -1
  26. package/dist/InputGroup.js.map +1 -1
  27. package/dist/List.d.ts +7 -0
  28. package/dist/List.js +78 -18
  29. package/dist/List.js.map +1 -1
  30. package/dist/ListItem.d.ts +0 -1
  31. package/dist/ListItem.js +0 -6
  32. package/dist/ListItem.js.map +1 -1
  33. package/dist/ListItemBase.d.ts +3 -0
  34. package/dist/ListItemBase.js +12 -0
  35. package/dist/ListItemBase.js.map +1 -1
  36. package/dist/MastheadItem.d.ts +1 -0
  37. package/dist/MastheadItem.js +5 -11
  38. package/dist/MastheadItem.js.map +1 -1
  39. package/dist/MastheadShell.d.ts +8 -0
  40. package/dist/MastheadShell.js +10 -0
  41. package/dist/MastheadShell.js.map +1 -1
  42. package/dist/MessageStrip.js +1 -1
  43. package/dist/MessageStrip.js.map +1 -1
  44. package/dist/Pagination.d.ts +3 -0
  45. package/dist/Pagination.js +16 -4
  46. package/dist/Pagination.js.map +1 -1
  47. package/dist/PasswordField.d.ts +14 -4
  48. package/dist/PasswordField.js +24 -15
  49. package/dist/PasswordField.js.map +1 -1
  50. package/dist/PhoneNumberField.d.ts +6 -0
  51. package/dist/PhoneNumberField.js +6 -1
  52. package/dist/PhoneNumberField.js.map +1 -1
  53. package/dist/RatingBar.d.ts +53 -0
  54. package/dist/RatingBar.js +96 -0
  55. package/dist/RatingBar.js.map +1 -0
  56. package/dist/Review.d.ts +71 -0
  57. package/dist/Review.js +108 -0
  58. package/dist/Review.js.map +1 -0
  59. package/dist/Search.d.ts +51 -0
  60. package/dist/Search.js +65 -11
  61. package/dist/Search.js.map +1 -1
  62. package/dist/SearchableListBase.d.ts +1 -1
  63. package/dist/SearchableListBase.js +1 -1
  64. package/dist/SearchableListBase.js.map +1 -1
  65. package/dist/SecondaryNavigation.d.ts +35 -47
  66. package/dist/SecondaryNavigation.js +158 -167
  67. package/dist/SecondaryNavigation.js.map +1 -1
  68. package/dist/SecondaryNavigationItem.d.ts +101 -0
  69. package/dist/SecondaryNavigationItem.js +297 -0
  70. package/dist/SecondaryNavigationItem.js.map +1 -0
  71. package/dist/SecondaryNavigationItemBase.d.ts +82 -0
  72. package/dist/SecondaryNavigationItemBase.js +104 -0
  73. package/dist/SecondaryNavigationItemBase.js.map +1 -0
  74. package/dist/SecondaryNavigationSubItem.d.ts +53 -0
  75. package/dist/SecondaryNavigationSubItem.js +105 -0
  76. package/dist/SecondaryNavigationSubItem.js.map +1 -0
  77. package/dist/SelectBox.d.ts +1 -0
  78. package/dist/SelectBox.js +15 -1
  79. package/dist/SelectBox.js.map +1 -1
  80. package/dist/StatusBadge.d.ts +67 -0
  81. package/dist/StatusBadge.js +104 -0
  82. package/dist/StatusBadge.js.map +1 -0
  83. package/dist/Switch.d.ts +1 -0
  84. package/dist/Switch.js +3 -0
  85. package/dist/Switch.js.map +1 -1
  86. package/dist/Tab.d.ts +8 -0
  87. package/dist/Tab.js +4 -1
  88. package/dist/Tab.js.map +1 -1
  89. package/dist/TabNavigation.d.ts +20 -20
  90. package/dist/TabNavigation.js +82 -101
  91. package/dist/TabNavigation.js.map +1 -1
  92. package/dist/Tag.d.ts +13 -6
  93. package/dist/Tag.js +34 -20
  94. package/dist/Tag.js.map +1 -1
  95. package/dist/TextArea.d.ts +1 -1
  96. package/dist/TextArea.js +3 -0
  97. package/dist/TextArea.js.map +1 -1
  98. package/dist/TextField.d.ts +9 -0
  99. package/dist/TextField.js +16 -0
  100. package/dist/TextField.js.map +1 -1
  101. package/dist/Tooltip.d.ts +2 -2
  102. package/dist/Tooltip.js +3 -3
  103. package/dist/Tooltip.js.map +1 -1
  104. package/dist/assets/bundle.esm-7d53f4f2.js +314 -0
  105. package/dist/assets/messagebundle_en-6dcc9ab4.js +1 -0
  106. package/dist/assets/parameters-bundle.css-de55cf62.js +2 -0
  107. package/dist/css/themes/AccordionItem.css +1 -1
  108. package/dist/css/themes/Avatar.css +1 -1
  109. package/dist/css/themes/Badge.css +1 -1
  110. package/dist/css/themes/Checkbox.css +1 -1
  111. package/dist/css/themes/CountrySelector.css +1 -1
  112. package/dist/css/themes/Divider.css +1 -1
  113. package/dist/css/themes/Dropdown.css +1 -1
  114. package/dist/css/themes/FilterMenu.css +1 -1
  115. package/dist/css/themes/Footer.css +1 -1
  116. package/dist/css/themes/HeroBanner.css +1 -1
  117. package/dist/css/themes/MastheadShell.css +1 -1
  118. package/dist/css/themes/MediaPlayer.css +1 -1
  119. package/dist/css/themes/Modal.css +1 -1
  120. package/dist/css/themes/Pagination.css +1 -1
  121. package/dist/css/themes/PhoneNumberField.css +1 -1
  122. package/dist/css/themes/RatingBar.css +1 -0
  123. package/dist/css/themes/RatingIndicator.css +1 -1
  124. package/dist/css/themes/Review.css +1 -0
  125. package/dist/css/themes/Search.css +1 -1
  126. package/dist/css/themes/SecondaryNavigation.css +1 -1
  127. package/dist/css/themes/SecondaryNavigationItem.css +1 -0
  128. package/dist/css/themes/SecondaryNavigationSubItem.css +1 -0
  129. package/dist/css/themes/SelectBox.css +1 -1
  130. package/dist/css/themes/Slider.css +1 -1
  131. package/dist/css/themes/StatusBadge.css +1 -0
  132. package/dist/css/themes/StepInput.css +1 -1
  133. package/dist/css/themes/TabNavigation.css +1 -1
  134. package/dist/css/themes/Tag.css +1 -1
  135. package/dist/css/themes/TextField.css +1 -1
  136. package/dist/css/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css +1 -1
  137. package/dist/custom-elements-internal.json +1291 -119
  138. package/dist/custom-elements.json +1298 -199
  139. package/dist/data/CountryListISO3166.js +162 -162
  140. package/dist/data/CountryListISO3166.js.map +1 -1
  141. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  142. package/dist/generated/assets/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.json +1 -1
  143. package/dist/generated/i18n/i18n-defaults.d.ts +16 -1
  144. package/dist/generated/i18n/i18n-defaults.js +20 -5
  145. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  146. package/dist/generated/templates/AccordionItemTemplate.lit.js +1 -1
  147. package/dist/generated/templates/AccordionItemTemplate.lit.js.map +1 -1
  148. package/dist/generated/templates/CountrySelectorTemplate.lit.js +1 -1
  149. package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
  150. package/dist/generated/templates/DatePickerTemplate.lit.js +1 -1
  151. package/dist/generated/templates/DatePickerTemplate.lit.js.map +1 -1
  152. package/dist/generated/templates/DropdownTemplate.lit.js +2 -2
  153. package/dist/generated/templates/DropdownTemplate.lit.js.map +1 -1
  154. package/dist/generated/templates/FilterMenuTemplate.lit.js +3 -3
  155. package/dist/generated/templates/FilterMenuTemplate.lit.js.map +1 -1
  156. package/dist/generated/templates/FooterTemplate.lit.js +26 -28
  157. package/dist/generated/templates/FooterTemplate.lit.js.map +1 -1
  158. package/dist/generated/templates/HeroBannerTemplate.lit.js +9 -8
  159. package/dist/generated/templates/HeroBannerTemplate.lit.js.map +1 -1
  160. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +4 -4
  161. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +1 -1
  162. package/dist/generated/templates/ListItemTemplate.lit.js +1 -1
  163. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  164. package/dist/generated/templates/ListSelectAllTemplate.lit.js +1 -1
  165. package/dist/generated/templates/ListSelectAllTemplate.lit.js.map +1 -1
  166. package/dist/generated/templates/MastheadItemTemplate.lit.js +3 -3
  167. package/dist/generated/templates/MastheadItemTemplate.lit.js.map +1 -1
  168. package/dist/generated/templates/MastheadShellTemplate.lit.js +2 -2
  169. package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
  170. package/dist/generated/templates/PaginationTemplate.lit.js +1 -1
  171. package/dist/generated/templates/PaginationTemplate.lit.js.map +1 -1
  172. package/dist/generated/templates/PasswordFieldTemplate.lit.js +1 -2
  173. package/dist/generated/templates/PasswordFieldTemplate.lit.js.map +1 -1
  174. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js +3 -3
  175. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js.map +1 -1
  176. package/dist/generated/templates/RatingBarTemplate.lit.d.ts +4 -0
  177. package/dist/generated/templates/RatingBarTemplate.lit.js +6 -0
  178. package/dist/generated/templates/RatingBarTemplate.lit.js.map +1 -0
  179. package/dist/generated/templates/ReviewTemplate.lit.d.ts +4 -0
  180. package/dist/generated/templates/ReviewTemplate.lit.js +10 -0
  181. package/dist/generated/templates/ReviewTemplate.lit.js.map +1 -0
  182. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js +1 -1
  183. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js.map +1 -1
  184. package/dist/generated/templates/SearchTemplate.lit.js +7 -7
  185. package/dist/generated/templates/SearchTemplate.lit.js.map +1 -1
  186. package/dist/generated/templates/SearchableListBaseTemplate.lit.js +2 -2
  187. package/dist/generated/templates/SearchableListBaseTemplate.lit.js.map +1 -1
  188. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.d.ts +4 -0
  189. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js +11 -0
  190. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js.map +1 -0
  191. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.d.ts +4 -0
  192. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js +10 -0
  193. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js.map +1 -0
  194. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js +7 -10
  195. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js.map +1 -1
  196. package/dist/generated/templates/SelectBoxTemplate.lit.js +2 -2
  197. package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
  198. package/dist/generated/templates/StatusBadgeTemplate.lit.d.ts +4 -0
  199. package/dist/generated/templates/StatusBadgeTemplate.lit.js +5 -0
  200. package/dist/generated/templates/StatusBadgeTemplate.lit.js.map +1 -0
  201. package/dist/generated/templates/SwitchTemplate.lit.js +2 -2
  202. package/dist/generated/templates/SwitchTemplate.lit.js.map +1 -1
  203. package/dist/generated/templates/TabInOverflowTemplate.lit.js +2 -2
  204. package/dist/generated/templates/TabInOverflowTemplate.lit.js.map +1 -1
  205. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js +1 -1
  206. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js.map +1 -1
  207. package/dist/generated/templates/TabNavigationTemplate.lit.js +2 -2
  208. package/dist/generated/templates/TabNavigationTemplate.lit.js.map +1 -1
  209. package/dist/generated/templates/TagTemplate.lit.js +9 -3
  210. package/dist/generated/templates/TagTemplate.lit.js.map +1 -1
  211. package/dist/generated/templates/TextAreaTemplate.lit.js +1 -1
  212. package/dist/generated/templates/TextAreaTemplate.lit.js.map +1 -1
  213. package/dist/generated/templates/TextFieldTemplate.lit.js +2 -2
  214. package/dist/generated/templates/TextFieldTemplate.lit.js.map +1 -1
  215. package/dist/generated/templates/TooltipTemplate.lit.js +1 -1
  216. package/dist/generated/templates/TooltipTemplate.lit.js.map +1 -1
  217. package/dist/generated/themes/AccordionItem.css.js +1 -1
  218. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  219. package/dist/generated/themes/Avatar.css.js +1 -1
  220. package/dist/generated/themes/Avatar.css.js.map +1 -1
  221. package/dist/generated/themes/Badge.css.js +1 -1
  222. package/dist/generated/themes/Badge.css.js.map +1 -1
  223. package/dist/generated/themes/Checkbox.css.js +1 -1
  224. package/dist/generated/themes/Checkbox.css.js.map +1 -1
  225. package/dist/generated/themes/CountrySelector.css.js +1 -1
  226. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  227. package/dist/generated/themes/Divider.css.js +1 -1
  228. package/dist/generated/themes/Divider.css.js.map +1 -1
  229. package/dist/generated/themes/Dropdown.css.js +1 -1
  230. package/dist/generated/themes/Dropdown.css.js.map +1 -1
  231. package/dist/generated/themes/FilterMenu.css.js +1 -1
  232. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  233. package/dist/generated/themes/Footer.css.js +1 -1
  234. package/dist/generated/themes/Footer.css.js.map +1 -1
  235. package/dist/generated/themes/HeroBanner.css.js +1 -1
  236. package/dist/generated/themes/HeroBanner.css.js.map +1 -1
  237. package/dist/generated/themes/MastheadShell.css.js +1 -1
  238. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  239. package/dist/generated/themes/MediaPlayer.css.js +1 -1
  240. package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
  241. package/dist/generated/themes/Modal.css.js +1 -1
  242. package/dist/generated/themes/Modal.css.js.map +1 -1
  243. package/dist/generated/themes/Pagination.css.js +1 -1
  244. package/dist/generated/themes/Pagination.css.js.map +1 -1
  245. package/dist/generated/themes/PhoneNumberField.css.js +1 -1
  246. package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
  247. package/dist/generated/themes/RatingBar.css.js +9 -0
  248. package/dist/generated/themes/RatingBar.css.js.map +1 -0
  249. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  250. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  251. package/dist/generated/themes/Review.css.d.ts +3 -0
  252. package/dist/generated/themes/Review.css.js +9 -0
  253. package/dist/generated/themes/Review.css.js.map +1 -0
  254. package/dist/generated/themes/Search.css.js +1 -1
  255. package/dist/generated/themes/Search.css.js.map +1 -1
  256. package/dist/generated/themes/SecondaryNavigation.css.js +1 -1
  257. package/dist/generated/themes/SecondaryNavigation.css.js.map +1 -1
  258. package/dist/generated/themes/SecondaryNavigationItem.css.d.ts +3 -0
  259. package/dist/generated/themes/SecondaryNavigationItem.css.js +9 -0
  260. package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -0
  261. package/dist/generated/themes/SecondaryNavigationSubItem.css.d.ts +3 -0
  262. package/dist/generated/themes/SecondaryNavigationSubItem.css.js +9 -0
  263. package/dist/generated/themes/SecondaryNavigationSubItem.css.js.map +1 -0
  264. package/dist/generated/themes/SelectBox.css.js +1 -1
  265. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  266. package/dist/generated/themes/Slider.css.js +1 -1
  267. package/dist/generated/themes/Slider.css.js.map +1 -1
  268. package/dist/generated/themes/StatusBadge.css.d.ts +3 -0
  269. package/dist/generated/themes/StatusBadge.css.js +9 -0
  270. package/dist/generated/themes/StatusBadge.css.js.map +1 -0
  271. package/dist/generated/themes/StepInput.css.js +1 -1
  272. package/dist/generated/themes/StepInput.css.js.map +1 -1
  273. package/dist/generated/themes/TabNavigation.css.js +1 -1
  274. package/dist/generated/themes/TabNavigation.css.js.map +1 -1
  275. package/dist/generated/themes/Tag.css.js +1 -1
  276. package/dist/generated/themes/Tag.css.js.map +1 -1
  277. package/dist/generated/themes/TextField.css.js +1 -1
  278. package/dist/generated/themes/TextField.css.js.map +1 -1
  279. package/dist/generated/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.js +1 -1
  280. package/dist/generated/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.js.map +1 -1
  281. package/dist/i18n/messagebundle.properties +40 -5
  282. package/dist/i18n/messagebundle_en.properties +20 -5
  283. package/dist/vscode.html-custom-data.json +239 -16
  284. package/dist/web-types.json +405 -25
  285. package/package.json +8 -8
  286. package/src/AccordionItem.hbs +1 -4
  287. package/src/AccordionItem.ts +5 -4
  288. package/src/Avatar.ts +35 -3
  289. package/src/AvatarGroup.ts +135 -0
  290. package/src/CountrySelector.hbs +2 -1
  291. package/src/CountrySelector.ts +4 -1
  292. package/src/DatePicker.hbs +0 -1
  293. package/src/Dropdown.hbs +5 -3
  294. package/src/Dropdown.ts +24 -3
  295. package/src/FilterMenu.hbs +8 -1
  296. package/src/FilterMenu.ts +70 -12
  297. package/src/Footer.hbs +12 -37
  298. package/src/Footer.ts +64 -51
  299. package/src/HeroBanner.hbs +28 -21
  300. package/src/HeroBanner.ts +3 -0
  301. package/src/InputGroup.ts +6 -5
  302. package/src/List.ts +92 -21
  303. package/src/ListGroupHeader.hbs +9 -5
  304. package/src/ListItem.hbs +2 -1
  305. package/src/ListItem.ts +0 -7
  306. package/src/ListItemBase.ts +14 -0
  307. package/src/ListSelectAll.hbs +1 -0
  308. package/src/MastheadItem.hbs +3 -3
  309. package/src/MastheadItem.ts +10 -4
  310. package/src/MastheadShell.hbs +4 -0
  311. package/src/MastheadShell.ts +18 -0
  312. package/src/MessageStrip.ts +1 -1
  313. package/src/Pagination.hbs +4 -2
  314. package/src/Pagination.ts +19 -4
  315. package/src/PasswordField.hbs +6 -17
  316. package/src/PasswordField.ts +31 -23
  317. package/src/PhoneNumberField.hbs +8 -3
  318. package/src/PhoneNumberField.ts +12 -2
  319. package/src/RatingBar.hbs +11 -0
  320. package/src/RatingBar.ts +113 -0
  321. package/src/Review.hbs +44 -0
  322. package/src/Review.ts +140 -0
  323. package/src/Search.hbs +20 -14
  324. package/src/Search.ts +107 -10
  325. package/src/SearchSuggestions.hbs +2 -1
  326. package/src/SearchableListBase.hbs +2 -0
  327. package/src/SearchableListBase.ts +1 -1
  328. package/src/SecondaryNavigation.hbs +53 -71
  329. package/src/SecondaryNavigation.ts +192 -198
  330. package/src/SecondaryNavigationItem.hbs +64 -0
  331. package/src/SecondaryNavigationItem.ts +368 -0
  332. package/src/SecondaryNavigationItemBase.ts +153 -0
  333. package/src/SecondaryNavigationSubItem.hbs +44 -0
  334. package/src/SecondaryNavigationSubItem.ts +127 -0
  335. package/src/SelectBox.hbs +76 -76
  336. package/src/SelectBox.ts +18 -1
  337. package/src/StatusBadge.hbs +9 -0
  338. package/src/StatusBadge.ts +129 -0
  339. package/src/Switch.hbs +3 -3
  340. package/src/Switch.ts +4 -0
  341. package/src/Tab.ts +11 -1
  342. package/src/TabInOverflow.hbs +3 -2
  343. package/src/TabNavigation.hbs +12 -10
  344. package/src/TabNavigation.ts +92 -116
  345. package/src/TabNavigationPopover.hbs +1 -0
  346. package/src/Tag.hbs +60 -26
  347. package/src/Tag.ts +54 -34
  348. package/src/TextArea.hbs +3 -4
  349. package/src/TextArea.ts +3 -0
  350. package/src/TextField.hbs +40 -36
  351. package/src/TextField.ts +24 -0
  352. package/src/Tooltip.hbs +2 -2
  353. package/src/Tooltip.ts +4 -4
  354. package/src/data/CountryListISO3166.ts +162 -162
  355. package/src/generated/i18n/i18n-defaults.ts +2 -2
  356. package/src/generated/templates/AccordionItemTemplate.lit.ts +1 -1
  357. package/src/generated/templates/CountrySelectorTemplate.lit.ts +1 -1
  358. package/src/generated/templates/DatePickerTemplate.lit.ts +1 -1
  359. package/src/generated/templates/DropdownTemplate.lit.ts +2 -2
  360. package/src/generated/templates/FilterMenuTemplate.lit.ts +3 -3
  361. package/src/generated/templates/FooterTemplate.lit.ts +26 -28
  362. package/src/generated/templates/HeroBannerTemplate.lit.ts +9 -8
  363. package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +4 -4
  364. package/src/generated/templates/ListItemTemplate.lit.ts +1 -1
  365. package/src/generated/templates/ListSelectAllTemplate.lit.ts +1 -1
  366. package/src/generated/templates/MastheadItemTemplate.lit.ts +3 -3
  367. package/src/generated/templates/MastheadShellTemplate.lit.ts +2 -2
  368. package/src/generated/templates/PaginationTemplate.lit.ts +1 -1
  369. package/src/generated/templates/PasswordFieldTemplate.lit.ts +1 -2
  370. package/src/generated/templates/PhoneNumberFieldTemplate.lit.ts +3 -3
  371. package/src/generated/templates/RatingBarTemplate.lit.ts +11 -0
  372. package/src/generated/templates/ReviewTemplate.lit.ts +15 -0
  373. package/src/generated/templates/SearchSuggestionsTemplate.lit.ts +1 -1
  374. package/src/generated/templates/SearchTemplate.lit.ts +7 -7
  375. package/src/generated/templates/SearchableListBaseTemplate.lit.ts +2 -2
  376. package/src/generated/templates/SecondaryNavigationItemTemplate.lit.ts +16 -0
  377. package/src/generated/templates/SecondaryNavigationSubItemTemplate.lit.ts +15 -0
  378. package/src/generated/templates/SecondaryNavigationTemplate.lit.ts +7 -10
  379. package/src/generated/templates/SelectBoxTemplate.lit.ts +2 -2
  380. package/src/generated/templates/StatusBadgeTemplate.lit.ts +10 -0
  381. package/src/generated/templates/SwitchTemplate.lit.ts +2 -2
  382. package/src/generated/templates/TabInOverflowTemplate.lit.ts +2 -2
  383. package/src/generated/templates/TabNavigationPopoverTemplate.lit.ts +1 -1
  384. package/src/generated/templates/TabNavigationTemplate.lit.ts +2 -2
  385. package/src/generated/templates/TagTemplate.lit.ts +9 -3
  386. package/src/generated/templates/TextAreaTemplate.lit.ts +1 -1
  387. package/src/generated/templates/TextFieldTemplate.lit.ts +2 -2
  388. package/src/generated/templates/TooltipTemplate.lit.ts +1 -1
  389. package/src/generated/themes/AccordionItem.css.ts +1 -1
  390. package/src/generated/themes/Avatar.css.ts +1 -1
  391. package/src/generated/themes/Badge.css.ts +1 -1
  392. package/src/generated/themes/Checkbox.css.ts +1 -1
  393. package/src/generated/themes/CountrySelector.css.ts +1 -1
  394. package/src/generated/themes/Divider.css.ts +1 -1
  395. package/src/generated/themes/Dropdown.css.ts +1 -1
  396. package/src/generated/themes/FilterMenu.css.ts +1 -1
  397. package/src/generated/themes/Footer.css.ts +1 -1
  398. package/src/generated/themes/HeroBanner.css.ts +1 -1
  399. package/src/generated/themes/MastheadShell.css.ts +1 -1
  400. package/src/generated/themes/MediaPlayer.css.ts +1 -1
  401. package/src/generated/themes/Modal.css.ts +1 -1
  402. package/src/generated/themes/Pagination.css.ts +1 -1
  403. package/src/generated/themes/PhoneNumberField.css.ts +1 -1
  404. package/src/generated/themes/RatingBar.css.ts +13 -0
  405. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  406. package/src/generated/themes/Review.css.ts +13 -0
  407. package/src/generated/themes/Search.css.ts +1 -1
  408. package/src/generated/themes/SecondaryNavigation.css.ts +1 -1
  409. package/src/generated/themes/SecondaryNavigationItem.css.ts +13 -0
  410. package/src/generated/themes/SecondaryNavigationSubItem.css.ts +13 -0
  411. package/src/generated/themes/SelectBox.css.ts +1 -1
  412. package/src/generated/themes/Slider.css.ts +1 -1
  413. package/src/generated/themes/StatusBadge.css.ts +13 -0
  414. package/src/generated/themes/StepInput.css.ts +1 -1
  415. package/src/generated/themes/TabNavigation.css.ts +1 -1
  416. package/src/generated/themes/Tag.css.ts +1 -1
  417. package/src/generated/themes/TextField.css.ts +1 -1
  418. package/src/generated/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.ts +1 -1
  419. package/src/i18n/messagebundle.properties +40 -5
  420. package/src/i18n/messagebundle_en.properties +20 -5
  421. package/src/themes/AccordionItem.css +6 -4
  422. package/src/themes/Avatar.css +43 -6
  423. package/src/themes/Badge.css +1 -1
  424. package/src/themes/Checkbox.css +12 -0
  425. package/src/themes/CountrySelector.css +4 -0
  426. package/src/themes/Divider.css +6 -2
  427. package/src/themes/Dropdown.css +2 -0
  428. package/src/themes/FilterMenu.css +10 -0
  429. package/src/themes/Footer.css +93 -168
  430. package/src/themes/HeroBanner.css +84 -20
  431. package/src/themes/MastheadShell.css +25 -29
  432. package/src/themes/MediaPlayer.css +3 -2
  433. package/src/themes/Modal.css +6 -0
  434. package/src/themes/Pagination.css +7 -0
  435. package/src/themes/PhoneNumberField.css +5 -0
  436. package/src/themes/RatingBar.css +52 -0
  437. package/src/themes/Review.css +196 -0
  438. package/src/themes/Search.css +37 -21
  439. package/src/themes/SecondaryNavigation.css +64 -293
  440. package/src/themes/SecondaryNavigationItem.css +221 -0
  441. package/src/themes/SecondaryNavigationSubItem.css +118 -0
  442. package/src/themes/SelectBox.css +17 -24
  443. package/src/themes/StatusBadge.css +135 -0
  444. package/src/themes/StepInput.css +5 -2
  445. package/src/themes/TabNavigation.css +7 -1
  446. package/src/themes/Tag.css +180 -148
  447. package/src/themes/TextField.css +75 -55
  448. package/dist/assets/bundle.esm-ab45813e.js +0 -312
  449. package/dist/assets/messagebundle_en-26cd7a92.js +0 -1
  450. package/dist/assets/parameters-bundle.css-76ef62fa.js +0 -2
  451. package/dist/css/themes/PasswordField.css +0 -1
  452. package/dist/generated/themes/PasswordField.css.js +0 -9
  453. package/dist/generated/themes/PasswordField.css.js.map +0 -1
  454. package/src/generated/themes/PasswordField.css.ts +0 -13
  455. package/src/themes/PasswordField.css +0 -29
  456. /package/dist/generated/themes/{PasswordField.css.d.ts → RatingBar.css.d.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapudex/web-components",
3
- "version": "0.114.2",
3
+ "version": "0.127.6",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/"
6
6
  },
@@ -30,17 +30,17 @@
30
30
  "dependencies": {
31
31
  "@types/vimeo__player": "^2.18.3",
32
32
  "@types/youtube": "^0.1.0",
33
- "@ui5/webcomponents": "1.24.12",
34
- "@ui5/webcomponents-base": "1.24.12",
35
- "@ui5/webcomponents-fiori": "1.24.12",
36
- "@ui5/webcomponents-icons": "1.24.12",
37
- "@ui5/webcomponents-theming": "1.24.12",
33
+ "@ui5/webcomponents": "1.24.15",
34
+ "@ui5/webcomponents-base": "1.24.15",
35
+ "@ui5/webcomponents-fiori": "1.24.15",
36
+ "@ui5/webcomponents-icons": "1.24.15",
37
+ "@ui5/webcomponents-theming": "1.24.15",
38
38
  "@vimeo/player": "^2.24.0",
39
39
  "video.js": "8.19.2"
40
40
  },
41
41
  "devDependencies": {
42
- "@ui5/webcomponents-tools": "1.24.12",
43
- "chromedriver": "^131.0.1",
42
+ "@ui5/webcomponents-tools": "1.24.15",
43
+ "chromedriver": "132.0.2",
44
44
  "cross-env": "^7.0.3",
45
45
  "typescript": "^4.9.4",
46
46
  "wdio-chromedriver-service": "^8.1.1",
@@ -2,15 +2,12 @@
2
2
  aria-expanded="{{expanded}}"
3
3
  role="listitem"
4
4
  @keydown={{keydownHandler}}>
5
- <div class="udex-accordion-item__header-wrapper"
6
- aria-level="2"
7
- role="heading">
5
+ <div class="udex-accordion-item__header-wrapper">
8
6
  <div role="button"
9
7
  class="udex-accordion-item__header"
10
8
  tabindex="0"
11
9
  aria-expanded="false"
12
10
  aria-controls="udex-accordion-item__{{_id}}-content"
13
- aria-labelledby="{{ariaLabelledby}}"
14
11
  @focus={{focusHandler}}
15
12
  @click={{itemClickHandler}}>
16
13
  <div class="udex-accordion-item__icon-wrapper">
@@ -62,6 +62,8 @@ class UDExAccordionItem extends UI5Element {
62
62
 
63
63
  /**
64
64
  * Defines the title of the accordion item component.
65
+ * TODO: With transition to UI5 2.x, change "title" attribute name.
66
+ * Title property is also valid HTML attribute that results in showing hover tooltip and is read by screen readers.
65
67
  *
66
68
  * @default ""
67
69
  * @public
@@ -167,10 +169,6 @@ class UDExAccordionItem extends UI5Element {
167
169
  return classes;
168
170
  }
169
171
 
170
- get ariaLabelledby() {
171
- return `${this._id}-header-title`;
172
- }
173
-
174
172
  onAfterRendering() {
175
173
  this._el = this.shadowRoot?.querySelector(".udex-accordion-item") || null;
176
174
  const accordion = this.shadowRoot?.querySelector<HTMLElement>(
@@ -193,6 +191,9 @@ class UDExAccordionItem extends UI5Element {
193
191
  }
194
192
 
195
193
  this?.parentElement?.addEventListener("ui5-toggle-items", this.toggleAllHandler.bind(this));
194
+ // TODO: this should be removed with transition to UI5 2.x, wne changed "title" attribute name.
195
+ // Fix was provided to avoid reading "title" property by screen readers, which results reading title twice.
196
+ this.setAttribute("aria-hidden", "true");
196
197
  }
197
198
  }
198
199
 
package/src/Avatar.ts CHANGED
@@ -5,7 +5,7 @@ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
5
5
  import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
6
6
  import Avatar from "@ui5/webcomponents/dist/Avatar.js";
7
7
  import I18nBundle, { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
8
- import { AVATAR_TEXT, DISABLED } from "./generated/i18n/i18n-defaults.js";
8
+ import { ATTENTION_BADGE, AVATAR_TEXT, DISABLED } from "./generated/i18n/i18n-defaults.js";
9
9
 
10
10
  // Template
11
11
  import AvatarTemplate from "./generated/templates/AvatarTemplate.lit.js";
@@ -152,7 +152,7 @@ class UDExAvatar extends UI5Element {
152
152
  shape!: `${AvatarShape}`;
153
153
 
154
154
  /**
155
- * Controls id of the element that label the component
155
+ * Defines predefined size of the component.
156
156
  *
157
157
  * @default "S"
158
158
  * @public
@@ -160,6 +160,15 @@ class UDExAvatar extends UI5Element {
160
160
  @property({ type: AvatarSize, defaultValue: AvatarSize.S })
161
161
  size!: `${AvatarSize}`;
162
162
 
163
+ /**
164
+ * Defines the displaying attention badge.
165
+ *
166
+ * @public
167
+ * @default false
168
+ */
169
+ @property({ type: Boolean })
170
+ showAttentionBadge!: boolean;
171
+
163
172
  /**
164
173
  * Receives the desired <img> tag
165
174
  *
@@ -191,6 +200,26 @@ class UDExAvatar extends UI5Element {
191
200
  }
192
201
  }
193
202
 
203
+ /**
204
+ * Returns the effective avatar size.
205
+ * @default "S"
206
+ * @private
207
+ */
208
+ get effectiveSize(): AvatarSize {
209
+ // we read the attribute, because the "size" property will always have a default value
210
+ return this.getAttribute("size") as AvatarSize || this.size;
211
+ }
212
+
213
+ /**
214
+ * Returns the effective background color.
215
+ * @default "Blue"
216
+ * @private
217
+ */
218
+ get еffectiveBackgroundColor(): AvatarColorScheme {
219
+ // we read the attribute, because the "background-color" property will always have a default value
220
+ return this.getAttribute("color-scheme") as AvatarColorScheme || this.colorScheme;
221
+ }
222
+
194
223
  get getUI5AvatarColorScheme(): string {
195
224
  return udexToUi5ColorSchemeMap[this.colorScheme];
196
225
  }
@@ -214,7 +243,10 @@ class UDExAvatar extends UI5Element {
214
243
  }
215
244
 
216
245
  get avatarAccessibleName(): string {
217
- return `${this.accessibleName ? this.accessibleName : UDExAvatar.i18nBundle.getText(AVATAR_TEXT)} ${this.disabled ? UDExAvatar.i18nBundle.getText(DISABLED) : ""}`;
246
+ let accName = `${this.accessibleName ? this.accessibleName : `${UDExAvatar.i18nBundle.getText(AVATAR_TEXT)} ${this.initials}`}`;
247
+ accName += ` ${this.disabled ? UDExAvatar.i18nBundle.getText(DISABLED) : ""}`;
248
+ accName += ` ${this.showAttentionBadge ? UDExAvatar.i18nBundle.getText(ATTENTION_BADGE) : ""}`;
249
+ return accName;
218
250
  }
219
251
  }
220
252
 
@@ -0,0 +1,135 @@
1
+ import AvatarGroup, { IAvatarGroupItem } from "@ui5/webcomponents/dist/AvatarGroup.js";
2
+ import AvatarGroupType from "@ui5/webcomponents/dist/types/AvatarGroupType.js";
3
+ import ItemNavigation from "@ui5/webcomponents-base/dist/delegate/ItemNavigation.js";
4
+ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
5
+ import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
6
+
7
+ // Styles
8
+ import UI5AvatarGroupCss from "@ui5/webcomponents/dist/generated/themes/AvatarGroup.css.js";
9
+
10
+ import UDExAvatar, { AvatarColorScheme, AvatarSize } from "./Avatar.js";
11
+
12
+ const avatarOffsets = {
13
+ [AvatarSize.XS]: {
14
+ [AvatarGroupType.Individual]: "0.0625rem",
15
+ [AvatarGroupType.Group]: "-0.75rem",
16
+ },
17
+ [AvatarSize.S]: {
18
+ [AvatarGroupType.Individual]: "0.125rem",
19
+ [AvatarGroupType.Group]: "-1.25rem",
20
+ },
21
+ [AvatarSize.M]: {
22
+ [AvatarGroupType.Individual]: "0.125rem",
23
+ [AvatarGroupType.Group]: "-1.625rem",
24
+ },
25
+ [AvatarSize.L]: {
26
+ [AvatarGroupType.Individual]: "0.125rem",
27
+ [AvatarGroupType.Group]: "-2rem",
28
+ },
29
+ [AvatarSize.XL]: {
30
+ [AvatarGroupType.Individual]: "0.25rem",
31
+ [AvatarGroupType.Group]: "-2.75rem",
32
+ },
33
+ };
34
+
35
+ /**
36
+ * @class
37
+ *
38
+ * <h3 class="comment-api-title">Overview</h3>
39
+ *
40
+ *
41
+ * <h3>Usage</h3>
42
+ *
43
+ * For the <code>udex-avatar-group</code>
44
+ * <h3>ES6 Module Import</h3>
45
+ *
46
+ * <code>import "@udex/web-components/dist/AvatarGroup.js";</code>
47
+ *
48
+ * @constructor
49
+ * @author SAP SE
50
+ * @extends AvatarGroup
51
+ * @public
52
+ */
53
+ @customElement({
54
+ tag: "udex-avatar-group",
55
+ renderer: litRender,
56
+ styles: [UI5AvatarGroupCss],
57
+ dependencies: [UDExAvatar],
58
+ })
59
+
60
+ class UDExAvatarGroup extends AvatarGroup {
61
+ constructor() {
62
+ super();
63
+
64
+ this._itemNavigation = new ItemNavigation(this, {
65
+ getItemsCallback: () => {
66
+ return this._isGroup
67
+ ? []
68
+ : this.items.slice(0, this._hiddenStartIndex).map(
69
+ item => item.shadowRoot?.firstElementChild as IAvatarGroupItem,
70
+ );
71
+ },
72
+ });
73
+ }
74
+ onEnterDOM(): void {
75
+ super.onEnterDOM();
76
+ const container: HTMLElement = this.shadowRoot?.querySelector(".ui5-avatar-group-items") as HTMLElement;
77
+ container?.addEventListener("mouseenter", this._onHover.bind(this, true));
78
+ container?.addEventListener("mouseleave", this._onHover.bind(this, false));
79
+ }
80
+
81
+ onExitDOM(): void {
82
+ super.onExitDOM();
83
+ const container: HTMLElement = this.shadowRoot?.querySelector(".ui5-avatar-group-items") as HTMLElement;
84
+ container?.removeEventListener("mouseenter", this._onHover.bind(this, true));
85
+ container?.removeEventListener("mouseleave", this._onHover.bind(this, false));
86
+ }
87
+
88
+ _onHover(hover: boolean) {
89
+ if (this._isGroup) {
90
+ this.items.every(avatar => {
91
+ avatar.toggleAttribute("hover", hover);
92
+ return !avatar.hidden;
93
+ });
94
+ }
95
+ }
96
+
97
+ _onfocusin(e: FocusEvent) {
98
+ const targetItem = this._isGroup
99
+ ? e.currentTarget
100
+ : (e.target as HTMLElement).shadowRoot?.firstElementChild;
101
+ this._itemNavigation.setCurrentItem(targetItem as IAvatarGroupItem);
102
+ }
103
+
104
+ _prepareAvatars() {
105
+ this._colorIndex = 0;
106
+ const visibleColors = Object.values(AvatarColorScheme);
107
+ let avatarInitials = "";
108
+
109
+ this.items.forEach((avatar, index) => {
110
+ if (++this._colorIndex > visibleColors.length - 3) {
111
+ this._colorIndex = 1;
112
+ }
113
+ avatar.interactive = !this._isGroup;
114
+ avatar.toggleAttribute("ui5-avatar", true);
115
+ avatarInitials += this._isGroup && avatar.hasAttribute("initials") && !avatar.shadowRoot?.firstElementChild?.hasAttribute("_has-image")
116
+ ? `${avatar.getAttribute("initials")} ` : "";
117
+
118
+ if (!avatar.getAttribute("color-scheme")) {
119
+ avatar.setAttribute("color-scheme", visibleColors[this._colorIndex]);
120
+ }
121
+
122
+ if (index !== this._itemsCount - 1 || this._customOverflowButton) {
123
+ avatar.style.marginInlineEnd = avatarOffsets[avatar.effectiveSize][this.type];
124
+ }
125
+ });
126
+
127
+ if (avatarInitials) {
128
+ this.shadowRoot?.querySelector(".ui5-avatar-group-items")?.setAttribute("aria-label", `${avatarInitials}${this._ariaLabelText}`);
129
+ }
130
+ }
131
+ }
132
+
133
+ UDExAvatarGroup.define();
134
+
135
+ export default UDExAvatarGroup;
@@ -11,7 +11,8 @@
11
11
  @click-trigger="{{handleTriggerClick}}"
12
12
  @ui5-submit-search-value="{{handleSubmitSearch}}"
13
13
  @ui5-handle-value-search="{{handleValueSearch}}"
14
- @ui5-handle-value-reset="{{handleResetSearch}}">
14
+ @ui5-handle-value-reset="{{handleResetSearch}}"
15
+ @ui5-handle-close-search="{{handleCloseSearch}}">
15
16
  {{> trigger}}
16
17
  {{searchableList}}
17
18
  </udex-dropdown>
@@ -378,6 +378,10 @@ class CountrySelector extends UDExSearchableListBase {
378
378
  return localName ? `${countryName} (${localName})` : countryName;
379
379
  }
380
380
 
381
+ handleCloseSearch() {
382
+ this._dropdown.onClose();
383
+ }
384
+
381
385
  handleItemPress(e: CustomEvent) {
382
386
  this.onItemPress(e);
383
387
  const target = e.target as HTMLElement;
@@ -393,7 +397,6 @@ class CountrySelector extends UDExSearchableListBase {
393
397
 
394
398
  const keyEvent = e.detail as KeyboardEvent;
395
399
  const key = keyEvent.key;
396
-
397
400
  if (isEnter(keyEvent) || isSpace(keyEvent)) {
398
401
  if (this._dropdown.open) {
399
402
  this._dropdown.onClose();
@@ -16,7 +16,6 @@
16
16
  ?readonly="{{readonly}}"
17
17
  value="{{value}}"
18
18
  icon="appointment-2"
19
- tabindex="0"
20
19
  value-state="{{valueState}}"
21
20
  >
22
21
  </udex-text-field>
package/src/Dropdown.hbs CHANGED
@@ -2,15 +2,17 @@
2
2
  {{#if hasTriggerSlot}}
3
3
  <div
4
4
  class="udex-dropdown__opener"
5
- aria-haspopup="true"
5
+ role="{{triggerAccessibleRole}}"
6
+ aria-label="{{triggerAccessibleName}}"
6
7
  aria-expanded="{{open}}"
7
- aria-controls="udex-dropdown"
8
+ aria-haspopup="true"
9
+ aria-controls="{{this._id}}_udex-dropdown"
8
10
  @click="{{onTriggerClick}}">
9
11
  <slot slot="trigger" name="trigger"></slot>
10
12
  </div>
11
13
  {{/if}}
12
14
  <ui5-popover
13
- id="udex-dropdown"
15
+ id="{{this._id}}_udex-dropdown"
14
16
  class="udex-dropdown__pane"
15
17
  ?allow-target-overlap="{{disableAllowTargetOverlap}}"
16
18
  hide-arrow
package/src/Dropdown.ts CHANGED
@@ -7,8 +7,11 @@ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
7
7
  import event from "@ui5/webcomponents-base/dist/decorators/event.js";
8
8
  import getEffectiveScrollbarStyle from "@ui5/webcomponents-base/dist/util/getEffectiveScrollbarStyle.js";
9
9
  import PopupAccessibleRole from "@ui5/webcomponents/dist/types/PopupAccessibleRole.js";
10
+ import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
11
+ import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
10
12
  import DropdownTemplate from "./generated/templates/DropdownTemplate.lit.js";
11
13
  import { PlacementType, HorizontalAlign } from "./types/Dropdown.js";
14
+ import { TRIGGER } from "./generated/i18n/i18n-defaults.js";
12
15
 
13
16
  // Styles
14
17
  import DropdownCss from "./generated/themes/Dropdown.css";
@@ -120,12 +123,20 @@ class UDExDropdown extends UI5Element {
120
123
 
121
124
  /**
122
125
  * Allows setting a custom role.
123
- * @default "Dialog"
126
+ * @default "None"
124
127
  * @public
125
128
  */
126
- @property({ type: PopupAccessibleRole, defaultValue: PopupAccessibleRole.Dialog })
129
+ @property({ type: PopupAccessibleRole, defaultValue: PopupAccessibleRole.None })
127
130
  accessibleRole!: `${PopupAccessibleRole}`;
128
131
 
132
+ /**
133
+ * Allows setting a custom role for dropdown trigger.
134
+ * @default "combobox"
135
+ * @public
136
+ */
137
+ @property({ type: String, defaultValue: "combobox" })
138
+ triggerAccessibleRole!: string;
139
+
129
140
  /**
130
141
  * Defines the content of the Dropdown.
131
142
  *
@@ -188,6 +199,12 @@ class UDExDropdown extends UI5Element {
188
199
  @property({ type: String })
189
200
  _direction?: string;
190
201
 
202
+ static i18nBundle: I18nBundle;
203
+
204
+ static async onDefine(): Promise<void> {
205
+ UDExDropdown.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
206
+ }
207
+
191
208
  onAfterRendering() {
192
209
  this.handleDirection();
193
210
  }
@@ -283,9 +300,13 @@ class UDExDropdown extends UI5Element {
283
300
  return !!this.footer.length;
284
301
  }
285
302
 
286
- get disableAllowTargetOverlap() {
303
+ get disableAllowTargetOverlap(): boolean {
287
304
  return this.disableTargetOverlap?.toString() !== "true";
288
305
  }
306
+
307
+ get triggerAccessibleName(): string {
308
+ return UDExDropdown.i18nBundle.getText(TRIGGER);
309
+ }
289
310
  }
290
311
 
291
312
  UDExDropdown.define();
@@ -1,4 +1,5 @@
1
1
  <udex-dropdown
2
+ id="{{this._id}}_dropdown-menu"
2
3
  class="udex-filter-menu"
3
4
  ?disable-target-overlap="{{disableTargetOverlap}}"
4
5
  placement-type="{{placementType}}"
@@ -12,7 +13,9 @@
12
13
  @ui5-after-open="{{_dropdownAfterOpen}}"
13
14
  @ui5-before-close="{{_dropdownBeforeClose}}"
14
15
  @ui5-after-close="{{_dropdownAfterClose}}"
15
- @click-trigger="{{handleTriggerClick}}"
16
+ @click-trigger="{{onDropdownClose}}"
17
+ @search-keydown="{{handleKeyDownSearch}}"
18
+ @keydown="{{handleKeyDownList}}"
16
19
  @ui5-submit-search-value="{{handleSubmitSearch}}"
17
20
  @ui5-handle-value-search="{{handleValueSearch}}"
18
21
  @ui5-handle-value-reset="{{handleResetSearch}}">
@@ -28,6 +31,8 @@
28
31
  aria-label="{{accessibleName}}"
29
32
  aria-expanded="{{_open}}"
30
33
  aria-haspopup="true"
34
+ role="{{triggerAccessibleRole}}"
35
+ aria-controls="{{this._id}}_dropdown-menu"
31
36
  ?disabled="{{disabled}}"
32
37
  class="udex-filter-menu__trigger"
33
38
  slot="trigger"
@@ -64,6 +69,7 @@
64
69
  size="Medium"
65
70
  design="Primary"
66
71
  ?disabled="{{disabledResultBtn}}"
72
+ @keydown="{{handleKeyDownResultBtn}}"
67
73
  @click="{{handleResult}}">
68
74
  {{getResultLabelText}}
69
75
  </udex-button>
@@ -73,6 +79,7 @@
73
79
  class="udex-filter-menu__reset-btn"
74
80
  size="Medium"
75
81
  design="Tertiary"
82
+ @keydown="{{handleKeyDownResetBtn}}"
76
83
  @click="{{handleReset}}">
77
84
  {{getResetLabelText}}
78
85
  </udex-button>
package/src/FilterMenu.ts CHANGED
@@ -7,6 +7,7 @@ import "@ui5/webcomponents/dist/Icon.js";
7
7
  import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
8
8
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
9
9
  import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
10
+ import { isTabPrevious, isTabNext, isEscape } from "@ui5/webcomponents-base/dist/Keys.js";
10
11
  import PopupAccessibleRole from "@ui5/webcomponents/dist/types/PopupAccessibleRole.js";
11
12
  import UDExDropdown from "./Dropdown.js";
12
13
  import UDExList from "./List.js";
@@ -14,14 +15,15 @@ import UDExListItem from "./ListItem.js";
14
15
  import UDExListGroupHeader from "./ListGroupHeader.js";
15
16
  import UDExFilterMenuItem from "./FilterMenuItem.js";
16
17
  import UDExFilterMenuGroupHeader from "./FilterMenuGroupHeader.js";
17
- import Search from "./Search.js";
18
- import Button from "./Button.js";
18
+ import UDExSearch from "./Search.js";
19
+ import UDEButton from "./Button.js";
19
20
  import UDExSearchableListBase from "./SearchableListBase.js";
20
21
  import { PlacementType, HorizontalAlign } from "./types/Dropdown.js";
21
22
  import { ListMode } from "./types/List.js";
22
23
  import UDExFilterMenuSelectAll from "./FilterMenuSelectAll.js";
23
24
  import UDExListSelectAll from "./ListSelectAll.js";
24
25
  import UDExBadge from "./Badge.js";
26
+ import UDExListItemBase from "./ListItemBase.js";
25
27
 
26
28
  import { RESET, SHOW_RESULTS, SELECT_OPTIONS } from "./generated/i18n/i18n-defaults.js";
27
29
  import FilterMenuTemplate from "./generated/templates/FilterMenuTemplate.lit.js";
@@ -64,8 +66,8 @@ import SearchableListCss from "./generated/themes/SearchableList.css.js";
64
66
  UDExListItem,
65
67
  UDExListGroupHeader,
66
68
  UDExBadge,
67
- Search,
68
- Button,
69
+ UDExSearch,
70
+ UDEButton,
69
71
  ],
70
72
  })
71
73
 
@@ -267,18 +269,28 @@ class UDExFilterMenu extends UDExSearchableListBase {
267
269
 
268
270
  /**
269
271
  * Allows setting a custom role.
270
- * @default "Dialog"
272
+ * @default "None"
271
273
  * @public
272
274
  */
273
- @property({ type: PopupAccessibleRole, defaultValue: PopupAccessibleRole.Dialog })
275
+ @property({ type: PopupAccessibleRole, defaultValue: PopupAccessibleRole.None })
274
276
  accessibleRole!: `${PopupAccessibleRole}`;
275
277
 
278
+ /**
279
+ * Allows setting a custom role for dropdown trigger.
280
+ * @default "combobox"
281
+ * @public
282
+ */
283
+ @property({ type: String, defaultValue: "combobox" })
284
+ triggerAccessibleRole!: string;
285
+
276
286
  _dropdown!: UDExDropdown;
277
- _search!: Search;
287
+ _search!: UDExSearch;
288
+ _hasFooterButtons!: boolean;
278
289
 
279
290
  onAfterRendering() {
280
291
  this._dropdown = this.getDropdown();
281
292
  this._search = this.getSearch();
293
+ this._hasFooterButtons = this.hasFooterButtons;
282
294
  }
283
295
 
284
296
  onEnterDOM(): void {
@@ -300,7 +312,7 @@ class UDExFilterMenu extends UDExSearchableListBase {
300
312
  this.onItemPress(e);
301
313
 
302
314
  if (this.modeSingleSelect) {
303
- this._dropdown.onClose();
315
+ this.onDropdownClose();
304
316
  }
305
317
  }
306
318
 
@@ -313,7 +325,7 @@ class UDExFilterMenu extends UDExSearchableListBase {
313
325
  }
314
326
 
315
327
  handleSubmitSearch() {
316
- this._dropdown.onClose();
328
+ this.onDropdownClose();
317
329
  this.onSubmitSearch();
318
330
  }
319
331
 
@@ -337,7 +349,37 @@ class UDExFilterMenu extends UDExSearchableListBase {
337
349
  }
338
350
  }
339
351
 
340
- handleTriggerClick() {
352
+ handleKeyDownList(e: KeyboardEvent) {
353
+ const isTabNextPress = isTabNext(e) && !this._hasFooterButtons;
354
+ const isTabPrevPress = isTabPrevious(e) && !this._search;
355
+
356
+ if (isTabNextPress || isTabPrevPress) {
357
+ this.onDropdownClose();
358
+ }
359
+ }
360
+
361
+ handleKeyDownSearch(e: CustomEvent) {
362
+ const keyEvent = e.detail as KeyboardEvent;
363
+ if (isTabPrevious(keyEvent) || isEscape(keyEvent)) {
364
+ this.onDropdownClose();
365
+ }
366
+ }
367
+
368
+ handleKeyDownResultBtn(e: KeyboardEvent) {
369
+ e.stopPropagation();
370
+ if (isTabNext(e) && !this.hasResetBtn) {
371
+ this.onDropdownClose();
372
+ }
373
+ }
374
+
375
+ handleKeyDownResetBtn(e: KeyboardEvent) {
376
+ e.stopPropagation();
377
+ if (isTabNext(e)) {
378
+ this.onDropdownClose();
379
+ }
380
+ }
381
+
382
+ onDropdownClose() {
341
383
  if (this._dropdown.open) {
342
384
  this._dropdown.onClose();
343
385
  }
@@ -347,8 +389,8 @@ class UDExFilterMenu extends UDExSearchableListBase {
347
389
  return this.shadowRoot!.querySelector<UDExDropdown>("udex-dropdown")!;
348
390
  }
349
391
 
350
- getSearch(): Search {
351
- return this.shadowRoot!.querySelector<Search>("udex-search")!;
392
+ getSearch(): UDExSearch {
393
+ return this.shadowRoot!.querySelector<UDExSearch>("udex-search")!;
352
394
  }
353
395
 
354
396
  _dropdownBeforeOpen() {
@@ -399,6 +441,22 @@ class UDExFilterMenu extends UDExSearchableListBase {
399
441
  return this.hideResultBtn && this.hideResetBtn;
400
442
  }
401
443
 
444
+ get hasFooterButtons(): boolean {
445
+ return (this.hasResultBtn || this.hasResetBtn) && this.modeMultiSelect;
446
+ }
447
+
448
+ get hasResultBtn(): boolean {
449
+ return !this.hideResultBtn && !this.disabledResultBtn;
450
+ }
451
+
452
+ get hasResetBtn(): boolean {
453
+ return !this.hideResetBtn;
454
+ }
455
+
456
+ getItems(): Array<UDExListItemBase> {
457
+ return this.getSlottedNodes<UDExListItemBase>("items");
458
+ }
459
+
402
460
  static get searchableListBaseTemplate() {
403
461
  return SearchableListBaseTemplate;
404
462
  }