@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
@@ -6,17 +6,16 @@ import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
6
6
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
7
7
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
8
8
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
9
- import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
10
9
  import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
11
- import "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
12
10
  import {
13
11
  isLeft,
14
12
  isRight,
15
- isUp,
16
- isDown,
17
13
  isEscape,
18
14
  } from "@ui5/webcomponents-base/dist/Keys.js";
19
15
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
16
+ import UDExSecondaryNavigationItem from "./SecondaryNavigationItem.js";
17
+ import UDExSecondaryNavigationSubItem from "./SecondaryNavigationSubItem.js";
18
+ import UDExSecondaryNavigationItemBase, { NavItem } from "./SecondaryNavigationItemBase.js";
20
19
  import { MORE } from "./generated/i18n/i18n-defaults.js";
21
20
 
22
21
  import SecondaryNavigationTemplate from "./generated/templates/SecondaryNavigationTemplate.lit.js";
@@ -24,30 +23,15 @@ import SecondaryNavigationTemplate from "./generated/templates/SecondaryNavigati
24
23
  // Styles
25
24
  import SecondaryNavigationCss from "./generated/themes/SecondaryNavigation.css.js";
26
25
 
27
- const mobileMenuActiveClass = "udex-secondary-navigation__root_open";
26
+ const canvasContentFont: string = "16px / 17.6px '72 Brand Variable'";
28
27
  const rootClass = "udex-secondary-navigation__root";
29
- const breakpointSizeS: number = 979;
28
+ export const breakpointSizeS: number = 979;
30
29
 
31
- export enum Target {
32
- _blank = "_blank",
33
- _parent = "_parent",
34
- _self = "_self",
35
- _top = "_top",
36
- }
37
-
38
- export type NavItem = {
39
- path: string;
40
- mobileLinkTitle: string;
41
- target: Target;
42
- title: string;
43
- active?: boolean;
44
- }
45
-
46
- export type SecondaryNavigationItemClickDetail = {
30
+ export type ItemClickDetail = {
47
31
  originalEvent: Event,
48
- clickedItem: HTMLElement;
32
+ clickedItem: NavItem;
49
33
  clickedIndex: number;
50
- }
34
+ };
51
35
 
52
36
  /**
53
37
  * @class
@@ -71,7 +55,7 @@ export type SecondaryNavigationItemClickDetail = {
71
55
  renderer: litRender,
72
56
  styles: SecondaryNavigationCss,
73
57
  template: SecondaryNavigationTemplate,
74
- dependencies: [UI5Icon],
58
+ dependencies: [UDExSecondaryNavigationItem],
75
59
  })
76
60
 
77
61
  /**
@@ -80,13 +64,13 @@ export type SecondaryNavigationItemClickDetail = {
80
64
  * @allowPreventDefault
81
65
  * @public
82
66
  */
83
- @event<SecondaryNavigationItemClickDetail>("item-click", {
67
+ @event<ItemClickDetail>("item-click", {
84
68
  detail: {
85
69
  originalEvent: {
86
70
  type: Event,
87
71
  },
88
72
  clickedItem: {
89
- type: HTMLElement,
73
+ type: Object,
90
74
  },
91
75
  clickedIndex: {
92
76
  type: Integer,
@@ -139,14 +123,23 @@ class UDExSecondaryNavigation extends UI5Element {
139
123
  @property()
140
124
  title!: string;
141
125
 
126
+ /**
127
+ * Defines the href of the title.
128
+ *
129
+ * @default ""
130
+ * @public
131
+ */
132
+ @property()
133
+ titleHref!: string;
134
+
142
135
  @property({ type: Boolean, noAttribute: true })
143
- _dropdownMoreIsOpen!: boolean;
136
+ _selectedMore!: boolean;
144
137
 
145
- @property({ type: HTMLElement, defaultValue: [], noAttribute: true })
138
+ @property({ type: Object, multiple: true, noAttribute: true })
146
139
  _overflowItems!: Array<NavItem>;
147
140
 
148
- @property({ type: HTMLElement, defaultValue: [], noAttribute: true })
149
- _navItems!: Array<NavItem>;
141
+ @property({ type: Object, multiple: true, noAttribute: true })
142
+ _visibleItems!: Array<NavItem>;
150
143
 
151
144
  @property({ type: Boolean, noAttribute: true })
152
145
  _requestRender = false;
@@ -154,10 +147,10 @@ class UDExSecondaryNavigation extends UI5Element {
154
147
  @property({ type: Boolean, noAttribute: true })
155
148
  _mobileBtnExpanded = false;
156
149
 
150
+ _navItems!: Array<NavItem>;
157
151
  _showMoreButton: boolean;
158
- _navigationList: Array<NavItem> | undefined;
159
- _dropdown!: HTMLElement | null | undefined;
160
152
  _rootHolder!: HTMLElement | null | undefined;
153
+ _clickedNavItem!: UDExSecondaryNavigationItem;
161
154
  _boundReflowItems: () => void;
162
155
 
163
156
  static i18nBundle: any;
@@ -177,28 +170,21 @@ class UDExSecondaryNavigation extends UI5Element {
177
170
  this.setAttribute("desktop", "");
178
171
  }
179
172
 
180
- if (this.isDesktopScreen) {
181
- this.reflowItems();
182
- }
183
-
184
- ResizeHandler.register(this.rootHolder, this._boundReflowItems);
173
+ ResizeHandler.register(this, this._boundReflowItems);
185
174
  }
186
175
 
187
176
  onExitDOM(): void {
188
- ResizeHandler.deregister(this.rootHolder, this._boundReflowItems);
177
+ ResizeHandler.deregister(this, this._boundReflowItems);
189
178
  }
190
179
 
191
180
  onInvalidation(changeInfo: ChangeInfo): void {
192
181
  if (changeInfo.name === "navItems") {
193
- this._navigationList = undefined;
194
182
  this.reflowItems();
195
183
  }
196
184
  }
197
185
 
198
186
  onAfterRendering(): void {
199
187
  this._rootHolder = this.rootHolder;
200
- this._dropdown = this.getDropdown();
201
-
202
188
  this.handleOutsideClick();
203
189
  }
204
190
 
@@ -207,196 +193,210 @@ class UDExSecondaryNavigation extends UI5Element {
207
193
  }
208
194
 
209
195
  reflowItems(): void {
210
- const availableWidth = this.rootHolder.offsetWidth - this.heading.offsetWidth - (this.optionalButtons?.offsetWidth || 0);
196
+ const availableWidth = this.rootHolder.offsetWidth - this.heading?.offsetWidth - (this.optionalButtons?.offsetWidth || 0);
211
197
  const moreButtonWidth = this.getMoreButtonWidth();
212
198
  const itemsGap = 20;
213
-
214
- const widths = this.navigationList.map(item => this.getItemWidth(item));
215
-
199
+ const widths = this.parsedItems.map(item => this.getItemWidth(item));
216
200
  const steps: Array<number> = [];
217
- widths.forEach((itemWidth, index) => {
201
+
202
+ widths?.forEach((itemWidth, index) => {
218
203
  steps.push((steps.at(-1) || 0) + itemWidth + (index && itemsGap));
219
204
  });
220
205
 
221
206
  if ((steps.at(-1) || 0) <= availableWidth) {
222
- this._navItems.splice(0, Infinity, ...this.navigationList);
207
+ this._visibleItems.splice(0, Infinity, ...this.parsedItems);
223
208
  this._showMoreButton = false;
224
209
  this.refreshRendering();
225
210
  return;
226
211
  }
227
212
 
228
- // @ts-ignore
229
- const lastVisibleIndex: number = steps.findLastIndex((size: number) => size < (availableWidth - moreButtonWidth - itemsGap));
230
- this._navItems.splice(0, Infinity, ...this.navigationList.slice(0, lastVisibleIndex + 1));
231
- this._overflowItems.splice(0, Infinity, ...this.navigationList.slice(lastVisibleIndex + 1));
232
- this._showMoreButton = true;
233
- this.refreshRendering();
234
- }
235
-
236
- handleKeyDown(e: KeyboardEvent) {
237
- e.stopPropagation();
238
- this.handleLeftArrow(e);
239
- this.handleRightArrow(e);
240
- this.handleEscapeKey(e);
241
- }
242
-
243
- handleEscapeKey(e: KeyboardEvent) {
244
- if (isEscape(e)) {
245
- if (!this.isDesktopScreen) {
246
- this._rootHolder?.classList.remove(mobileMenuActiveClass);
247
- this.getMobileButtonMenu().focus();
248
- } else {
249
- this.onCloseDropdown();
250
- this.getMoreButton().focus();
251
- }
213
+ if (this.parsedItems) {
214
+ // @ts-ignore
215
+ const lastVisibleIndex: number = steps.findLastIndex((size: number) => size < (availableWidth - moreButtonWidth - itemsGap));
216
+ this._visibleItems.splice(0, Infinity, ...this.parsedItems.slice(0, lastVisibleIndex + 1));
217
+ this._overflowItems.splice(0, Infinity, ...this.parsedItems.slice(lastVisibleIndex + 1));
218
+ this._showMoreButton = true;
219
+ this.refreshRendering();
252
220
  }
253
221
  }
254
222
 
255
- handleKeyDownDropdown(e: KeyboardEvent) {
223
+ handleKeyDown(e: KeyboardEvent): void {
256
224
  e.stopPropagation();
257
- this.handleUpArrow(e);
258
- this.handleDownArrow(e);
259
- this.handleEscapeKey(e);
260
- }
261
-
262
- handleLeftArrow(e: KeyboardEvent): void {
263
225
  if (isLeft(e)) {
264
226
  this.focusPrevNavItem(e);
265
227
  }
266
- }
267
-
268
- handleRightArrow(e: KeyboardEvent): void {
269
228
  if (isRight(e)) {
270
229
  this.focusNextNavItem(e);
271
230
  }
272
- }
273
-
274
- handleUpArrow(e: KeyboardEvent): void {
275
- if (isUp(e)) {
276
- this.focusPrevNavItem(e);
231
+ if (isEscape(e)) {
232
+ (e.target as UDExSecondaryNavigationItem).closeDropdown();
277
233
  }
278
234
  }
279
235
 
280
- handleDownArrow(e: KeyboardEvent): void {
281
- if (isDown(e)) {
282
- this.focusNextNavItem(e);
283
- }
236
+ focusPrevNavItem(e: KeyboardEvent): void {
237
+ const item = e.target as UDExSecondaryNavigationItem;
238
+ const currentSelectedIndex = this.getCurrentIndex(item);
239
+ const lastItemIndex = this.domNavItems.length - 1;
240
+ const previousSelectIndex = currentSelectedIndex - 1 < 0 ? lastItemIndex : currentSelectedIndex - 1;
241
+ this.domNavItems[previousSelectIndex]?.focus();
284
242
  }
285
243
 
286
- handleOutsideClick(): void {
287
- document.addEventListener("click", () => {
288
- if (this._dropdown) {
289
- this.onCloseDropdown();
290
- }
291
- });
244
+ focusNextNavItem(e: KeyboardEvent): void {
245
+ const item = e.target as UDExSecondaryNavigationItem;
246
+ const currentSelectedIndex = this.getCurrentIndex(item);
247
+ const nextSelectIndex = currentSelectedIndex + 1 > this.domNavItems.length - 1 ? 0 : currentSelectedIndex + 1;
248
+ this.domNavItems[nextSelectIndex].focus();
292
249
  }
293
250
 
294
- handleMobileOpen(): void {
295
- this.toggleActiveClass();
296
- this._mobileBtnExpanded = !this._mobileBtnExpanded;
297
- }
251
+ getItemWidth(item: NavItem): number {
252
+ const context = this.getCanvasContext();
253
+ context.font = canvasContentFont;
298
254
 
299
- handleToggleDropdown(): void {
300
- this._dropdownMoreIsOpen = !this._dropdownMoreIsOpen;
255
+ return Math.ceil(context.measureText(item.title).width);
301
256
  }
302
257
 
303
- toggleActiveClass() {
304
- this._rootHolder?.classList.toggle(mobileMenuActiveClass);
305
- }
258
+ getMoreButtonWidth(): number {
259
+ const context = this.getCanvasContext();
260
+ context.font = canvasContentFont;
306
261
 
307
- focusPrevNavItem(e: KeyboardEvent): void {
308
- const el = e.target as HTMLElement;
309
- const currentItem = el.parentElement as HTMLElement;
310
- const currentSelectedIndex = this.getCurrentIndex(currentItem);
311
- const lastItemIndex = this.navigationItems.length - 1;
312
- const previousSelectIndex = currentSelectedIndex - 1 < 0 ? lastItemIndex : currentSelectedIndex - 1;
313
- const listItem = this.getListItemByIndex(previousSelectIndex);
314
- listItem?.focus();
262
+ return Math.ceil(context.measureText(this.moreButtonText).width);
315
263
  }
316
264
 
317
- focusNextNavItem(e: KeyboardEvent): void {
318
- const el = e.target as HTMLElement;
319
- const currentItem = el.parentElement as HTMLElement;
320
- const currentSelectedIndex = this.getCurrentIndex(currentItem);
321
- const nextSelectIndex = currentSelectedIndex + 1 > this.navigationItems.length - 1 ? 0 : currentSelectedIndex + 1;
322
- const listItem = this.getListItemByIndex(nextSelectIndex);
323
- listItem?.focus();
265
+ getCanvasContext(): CanvasRenderingContext2D {
266
+ const canvas = document.createElement("canvas");
267
+ return canvas.getContext("2d")!;
324
268
  }
325
269
 
326
- onCloseDropdown(): void {
327
- this._dropdownMoreIsOpen = false;
270
+ getCurrentIndex(item: UDExSecondaryNavigationItem): number {
271
+ return this.domNavItems.indexOf(item);
328
272
  }
329
273
 
330
- getItemWidth(item: NavItem): number {
331
- const canvas = document.createElement("canvas");
332
- const context = canvas.getContext("2d")!;
333
- context.font = "16px / 17.6px '72 Brand Variable'";
274
+ handleItemClick(e: CustomEvent): void {
275
+ const clickedItem = e.detail.item as UDExSecondaryNavigationItem;
276
+ const {
277
+ path, target, title, active, subItems, _id, mobileLinkTitle,
278
+ } = clickedItem;
334
279
 
335
- return Math.ceil(context.measureText(item.title).width);
336
- }
280
+ const prevented = !this.fireEventItemClick(e, {
281
+ path,
282
+ target,
283
+ title,
284
+ active,
285
+ mobileLinkTitle,
286
+ items: subItems,
287
+ });
337
288
 
338
- getCurrentIndex(item: HTMLElement): number {
339
- return this.navigationItems.indexOf(item);
340
- }
289
+ if (prevented) {
290
+ e.preventDefault();
291
+ return;
292
+ }
341
293
 
342
- getListItemByIndex(index: number): HTMLElement | null {
343
- return this.navigationItems[index].querySelector(".udex-secondary-navigation__link-btn");
344
- }
294
+ this._clickedNavItem = clickedItem;
295
+ this.closePrevDropdown(_id);
345
296
 
346
- getDropdown(): HTMLElement {
347
- return this.shadowRoot!.querySelector(".udex-secondary-navigation__dropdown")!;
297
+ if (!subItems.length) {
298
+ this.setActiveItem(this.parsedItems, clickedItem);
299
+ }
348
300
  }
349
301
 
350
- getMobileButtonMenu(): HTMLElement {
351
- return this.shadowRoot?.querySelector(".udex-secondary-navigation__mobile-opener") as HTMLElement;
302
+ handleSubItemClick(e: CustomEvent): void {
303
+ const item = e.detail.item as UDExSecondaryNavigationSubItem;
304
+ const { items } = item as NavItem;
305
+ const prevented = !this.fireEventItemClick(e, item);
306
+
307
+ if (prevented) {
308
+ e.preventDefault();
309
+ return;
310
+ }
311
+
312
+ if (this.isMobileScreen && !items) {
313
+ this.mobileNav.closeDropdown();
314
+ }
315
+
316
+ if (!items) {
317
+ this.setActiveItem(this.parsedItems, item);
318
+ this._clickedNavItem?.closeDropdown();
319
+ }
352
320
  }
353
321
 
354
- getMoreButton(): HTMLElement {
355
- return this.shadowRoot!.querySelector(".udex-secondary-navigation__list-item_more > button")!;
322
+ fireEventItemClick(
323
+ e: CustomEvent,
324
+ {
325
+ items, target, path, title, active, mobileLinkTitle,
326
+ }: NavItem,
327
+ ): boolean {
328
+ return this.fireEvent("item-click", {
329
+ originalEvent: e,
330
+ clickedItem: {
331
+ mobileLinkTitle: mobileLinkTitle || "",
332
+ path: path || "",
333
+ active: active || false,
334
+ items: items || [],
335
+ target,
336
+ title,
337
+ },
338
+ clickedIndex: e.detail.index,
339
+ }, true);
356
340
  }
357
341
 
358
- getMoreButtonWidth(): number {
359
- const canvas = document.createElement("canvas");
360
- const context = canvas.getContext("2d")!;
361
- context.font = "16px / 17.6px '72 Brand Variable'";
342
+ setActiveItem(navItems: Array<NavItem>, clickedItem: UDExSecondaryNavigationItemBase): void {
343
+ const updateNav = (items: Array<NavItem>, { title, path }: UDExSecondaryNavigationItemBase) => {
344
+ items.forEach(item => {
345
+ if (item.title === title && (item.path === path || !item.path)) {
346
+ item.active = true;
347
+ return;
348
+ }
349
+ delete item.active;
362
350
 
363
- return Math.ceil(context.measureText("More").width) + 4 + 16;
351
+ if (item.items) {
352
+ updateNav(item.items, clickedItem);
353
+ }
354
+ });
355
+ };
356
+
357
+ updateNav(navItems, clickedItem);
358
+ this.navItems = JSON.stringify(navItems);
364
359
  }
365
360
 
366
- parseArrayFromString<T>(string: string): T[] {
367
- return string ? JSON.parse(string) as T[] : [];
361
+ handleOutsideClick(): void {
362
+ document.addEventListener("click", (e: MouseEvent) => {
363
+ if (this.isMobileScreen && e.target !== this) {
364
+ this.closeMobileDropdown();
365
+ return;
366
+ }
367
+
368
+ if (this.isDesktopScreen) {
369
+ this.handleDesktopDropdown(e);
370
+ }
371
+ });
368
372
  }
369
373
 
370
- handleNavigationClick(e: MouseEvent) {
371
- const target = e.target as HTMLElement;
372
- const clickedIndex = this.domNavItems.indexOf(target);
373
- const prevented = !this.fireEvent("item-click", {
374
- originalEvent: e,
375
- clickedItem: target,
376
- clickedIndex,
377
- }, true);
374
+ closeMobileDropdown(): void {
375
+ this.mobileNav?.closeDropdown();
376
+ }
378
377
 
379
- if (prevented) {
380
- e.preventDefault();
381
- return;
378
+ handleDesktopDropdown(e: MouseEvent): void {
379
+ const isClickedNavItem = e.composedPath().includes(this._clickedNavItem);
380
+ if (!isClickedNavItem && this._clickedNavItem) {
381
+ this._clickedNavItem.closeDropdown();
382
382
  }
383
+ }
383
384
 
384
- if (this.domNavItems.length > 0) {
385
- this.navigationList.forEach(item => delete item.active);
386
- this.navigationList[clickedIndex].active = true;
387
- this.refreshRendering();
388
- this.toggleActiveClass();
389
- }
385
+ closePrevDropdown(clickedItemId: string): void {
386
+ this.domNavItems.forEach(item => {
387
+ if (clickedItemId !== item._id) {
388
+ item.closeDropdown();
389
+ }
390
+ });
390
391
  }
391
392
 
392
- get navigationItems(): Array<HTMLElement> {
393
- return Array.from(this.shadowRoot!.querySelectorAll(".udex-secondary-navigation__link-btn-wrap"));
393
+ parseArrayFromString<T>(string: string): T[] {
394
+ return string ? JSON.parse(string) as T[] : [];
394
395
  }
395
396
 
396
- get domNavItems(): Array<HTMLElement> {
397
- const navigationItemsSelector = ".udex-secondary-navigation__item:not(.udex-secondary-navigation__link-btn-more), .udex-secondary-navigation__dropdown-item";
398
- const domNavItems = this.shadowRoot?.querySelectorAll<HTMLElement>(navigationItemsSelector);
399
- return domNavItems ? Array.from(domNavItems) : [];
397
+ get domNavItems(): Array<UDExSecondaryNavigationItem> {
398
+ const items = this.shadowRoot?.querySelectorAll<UDExSecondaryNavigationItem>("udex-secondary-navigation-item");
399
+ return items ? Array.from(items) : [];
400
400
  }
401
401
 
402
402
  get rootHolder(): HTMLElement {
@@ -407,59 +407,53 @@ class UDExSecondaryNavigation extends UI5Element {
407
407
  return (this.shadowRoot ? this.shadowRoot.querySelector<HTMLElement>(".udex-secondary-navigation__heading") : undefined)!;
408
408
  }
409
409
 
410
- get optionalButtons() {
411
- return this.shadowRoot?.querySelector<HTMLElement>(".udex-secondary-navigation__buttons");
410
+ get mobileNav(): UDExSecondaryNavigationItem {
411
+ return (this.shadowRoot ? this.shadowRoot.querySelector<UDExSecondaryNavigationItem>(".udex-secondary-navigation__mobile-nav") : undefined)!;
412
412
  }
413
413
 
414
- get linksList() {
415
- return this.shadowRoot?.querySelector<HTMLElement>(".udex-secondary-navigation__list");
414
+ get optionalButtons(): HTMLElement | null | undefined {
415
+ return this.shadowRoot?.querySelector<HTMLElement>(".udex-secondary-navigation__buttons");
416
416
  }
417
417
 
418
418
  get moreButtonText(): string {
419
419
  return UDExSecondaryNavigation.i18nBundle.getText(MORE) as string;
420
420
  }
421
421
 
422
- get activeItemText(): string {
423
- const activeItem = this.navigationList.find(item => item.active);
424
- return activeItem ? activeItem?.title : "";
422
+ get parsedItems(): Array<NavItem> {
423
+ return this.parseArrayFromString<NavItem>(this.navItems);
425
424
  }
426
425
 
427
- get moreClass(): string {
428
- const rootClasses = "udex-secondary-navigation__list-item udex-secondary-navigation__list-item_more";
429
- return this._dropdownMoreIsOpen ? `${rootClasses} udex-secondary-navigation__list-item_open` : `${rootClasses}`;
430
- }
431
-
432
- get navigationList(): Array<NavItem> {
433
- if (!this._navigationList) {
434
- this._navigationList = this.parseArrayFromString<NavItem>(this.navItems);
435
- }
436
- return this._navigationList;
426
+ get visibleItems(): Array<NavItem> {
427
+ return this.isDesktopScreen ? this._visibleItems : this.parsedItems;
437
428
  }
438
429
 
439
- get items(): Array<NavItem> {
440
- return this.isDesktopScreen ? this._navItems : this.navigationList;
430
+ get hasBreadcrumbsSlot(): boolean {
431
+ return !!this.getSlottedNodes("breadcrumbs").length && this.isDesktopScreen;
441
432
  }
442
433
 
443
- get moreIsActive(): boolean {
444
- return this._overflowItems.some(item => item.active);
434
+ get rootClass(): string {
435
+ return `${rootClass} ${this.hasBreadcrumbsSlot ? "" : `${rootClass}_centered`}`.trim();
445
436
  }
446
437
 
447
- get rootClass(): string {
448
- const centeredClass = this.hasBreadcrumbsSlot ? "" : `${rootClass}_centered`;
449
- return `${rootClass} ${centeredClass}`;
438
+ get hasDesktopButtonsSlot(): boolean {
439
+ return this.hasButtons && this.isDesktopScreen;
450
440
  }
451
441
 
452
- get hasBreadcrumbsSlot(): boolean {
453
- return !!this.getSlottedNodes("breadcrumbs").length;
442
+ get hasMobileButtonsSlot(): boolean {
443
+ return this.hasButtons && this.isMobileScreen;
454
444
  }
455
445
 
456
- get hasButtonsSlot(): boolean {
446
+ get hasButtons(): boolean {
457
447
  return !!this.getSlottedNodes("buttons").length;
458
448
  }
459
449
 
460
450
  get isDesktopScreen(): boolean {
461
451
  return window.innerWidth > breakpointSizeS;
462
452
  }
453
+
454
+ get isMobileScreen(): boolean {
455
+ return window.innerWidth <= breakpointSizeS;
456
+ }
463
457
  }
464
458
 
465
459
  UDExSecondaryNavigation.define();
@@ -0,0 +1,64 @@
1
+ {{#if isLink}}
2
+ <a
3
+ class="udex-secondary-navigation__item"
4
+ role="{{menuItemRole}}"
5
+ ?active="{{isActive}}"
6
+ href="{{path}}"
7
+ target="{{target}}"
8
+ @keydown="{{handleItemLinkKeyDown}}"
9
+ @click="{{onItemClick}}">
10
+ {{itemLabel}}
11
+ </a>
12
+ {{else}}
13
+ <button
14
+ class="udex-secondary-navigation__item"
15
+ role="{{itemRole}}"
16
+ ?active="{{isActive}}"
17
+ aria-haspopup="{{hasNestedItems}}"
18
+ aria-expanded="{{isOpen}}"
19
+ aria-label="{{ariaLabel}}"
20
+ @keydown="{{handleItemButtonKeyDown}}"
21
+ @click="{{onItemClick}}">
22
+ <span class="udex-secondary-navigation__item-text-wrap">
23
+ {{itemLabel}}
24
+ {{#if _subTitle}}
25
+ <span
26
+ class="udex-secondary-navigation__item-sub-title">
27
+ {{_subTitle}}
28
+ </span>
29
+ {{/if}}
30
+ {{#if hasNestedItems}}
31
+ <ui5-icon
32
+ class="udex-secondary-navigation__item-icon"
33
+ name="slim-arrow-down">
34
+ </ui5-icon>
35
+ {{/if}}
36
+ </span>
37
+ </button>
38
+ {{#if isOpen}}
39
+ <div
40
+ class="udex-secondary-navigation__dropdown"
41
+ @keydown="{{handleSubItemKeyDown}}">
42
+ <ul role="menu"
43
+ class="udex-secondary-navigation__dropdown-list">
44
+ {{#each _processedItems}}
45
+ <li role="none">
46
+ <udex-secondary-navigation-sub-item
47
+ index="{{@index}}"
48
+ @ui5-sub-item-click="{{../onSubItemClick}}"
49
+ @ui5-back-item-click="{{../onBackClick}}"
50
+ is-back="{{this.isBack}}"
51
+ label="{{this.title}}"
52
+ mobile-link-title="{{this.mobileLinkTitle}}"
53
+ .nestedItems="{{this.items}}"
54
+ path="{{this.path}}"
55
+ target="{{this.target}}"
56
+ ?is-active="{{this.active}}">
57
+ </udex-secondary-navigation-sub-item>
58
+ </li>
59
+ {{/each}}
60
+ </ul>
61
+ <slot></slot>
62
+ </div>
63
+ {{/if}}
64
+ {{/if}}