@sapudex/web-components 0.111.0 → 0.117.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/.npmrc +1 -2
  2. package/bundle.esm.js +4 -0
  3. package/dist/AccordionItem.d.ts +7 -0
  4. package/dist/AccordionItem.js +6 -2
  5. package/dist/AccordionItem.js.map +1 -1
  6. package/dist/Avatar.d.ts +8 -1
  7. package/dist/Avatar.js +5 -2
  8. package/dist/Avatar.js.map +1 -1
  9. package/dist/CountrySelector.d.ts +6 -7
  10. package/dist/CountrySelector.js +15 -7
  11. package/dist/CountrySelector.js.map +1 -1
  12. package/dist/Dropdown.d.ts +10 -0
  13. package/dist/Dropdown.js +10 -0
  14. package/dist/Dropdown.js.map +1 -1
  15. package/dist/FilterMenu.d.ts +14 -4
  16. package/dist/FilterMenu.js +46 -7
  17. package/dist/FilterMenu.js.map +1 -1
  18. package/dist/Footer.d.ts +40 -1
  19. package/dist/Footer.js +151 -1
  20. package/dist/Footer.js.map +1 -1
  21. package/dist/InputGroup.d.ts +75 -0
  22. package/dist/InputGroup.js +101 -0
  23. package/dist/InputGroup.js.map +1 -0
  24. package/dist/List.d.ts +7 -0
  25. package/dist/List.js +78 -18
  26. package/dist/List.js.map +1 -1
  27. package/dist/ListItem.d.ts +0 -1
  28. package/dist/ListItem.js +0 -6
  29. package/dist/ListItem.js.map +1 -1
  30. package/dist/ListItemBase.d.ts +3 -0
  31. package/dist/ListItemBase.js +12 -0
  32. package/dist/ListItemBase.js.map +1 -1
  33. package/dist/MastheadMobileMenu.d.ts +4 -1
  34. package/dist/MastheadMobileMenu.js +10 -3
  35. package/dist/MastheadMobileMenu.js.map +1 -1
  36. package/dist/PhoneNumberField.d.ts +8 -0
  37. package/dist/PhoneNumberField.js +23 -10
  38. package/dist/PhoneNumberField.js.map +1 -1
  39. package/dist/Search.d.ts +60 -1
  40. package/dist/Search.js +191 -19
  41. package/dist/Search.js.map +1 -1
  42. package/dist/SecondaryNavigation.d.ts +37 -45
  43. package/dist/SecondaryNavigation.js +148 -153
  44. package/dist/SecondaryNavigation.js.map +1 -1
  45. package/dist/SecondaryNavigationItem.d.ts +101 -0
  46. package/dist/SecondaryNavigationItem.js +287 -0
  47. package/dist/SecondaryNavigationItem.js.map +1 -0
  48. package/dist/SecondaryNavigationItemBase.d.ts +68 -0
  49. package/dist/SecondaryNavigationItemBase.js +78 -0
  50. package/dist/SecondaryNavigationItemBase.js.map +1 -0
  51. package/dist/SecondaryNavigationSubItem.d.ts +52 -0
  52. package/dist/SecondaryNavigationSubItem.js +102 -0
  53. package/dist/SecondaryNavigationSubItem.js.map +1 -0
  54. package/dist/SelectBox.d.ts +7 -0
  55. package/dist/SelectBox.js +27 -2
  56. package/dist/SelectBox.js.map +1 -1
  57. package/dist/StatusBadge.d.ts +67 -0
  58. package/dist/StatusBadge.js +104 -0
  59. package/dist/StatusBadge.js.map +1 -0
  60. package/dist/Tab.js +1 -1
  61. package/dist/Tab.js.map +1 -1
  62. package/dist/Table.d.ts +5 -5
  63. package/dist/Table.js +5 -5
  64. package/dist/Table.js.map +1 -1
  65. package/dist/Tag.d.ts +7 -1
  66. package/dist/Tag.js +6 -2
  67. package/dist/Tag.js.map +1 -1
  68. package/dist/TextArea.js.map +1 -1
  69. package/dist/assets/{bundle.esm-b7920968.js → bundle.esm-f65ae7da.js} +189 -184
  70. package/dist/assets/messagebundle_en-7249941b.js +1 -0
  71. package/dist/css/themes/AccordionItem.css +1 -1
  72. package/dist/css/themes/Avatar.css +1 -1
  73. package/dist/css/themes/Breadcrumbs.css +1 -1
  74. package/dist/css/themes/Checkbox.css +1 -1
  75. package/dist/css/themes/CountrySelector.css +1 -1
  76. package/dist/css/themes/DatePicker.css +1 -1
  77. package/dist/css/themes/Dropdown.css +1 -1
  78. package/dist/css/themes/FilterMenu.css +1 -1
  79. package/dist/css/themes/HeroBanner.css +1 -1
  80. package/dist/css/themes/InputGroup.css +1 -0
  81. package/dist/css/themes/MastheadItem.css +1 -1
  82. package/dist/css/themes/MastheadMenuItem.css +1 -1
  83. package/dist/css/themes/MastheadShell.css +1 -1
  84. package/dist/css/themes/MediaPlayer.css +1 -1
  85. package/dist/css/themes/PhoneNumberField.css +1 -1
  86. package/dist/css/themes/RatingIndicator.css +1 -1
  87. package/dist/css/themes/Search.css +1 -1
  88. package/dist/css/themes/SearchSuggestions.css +1 -1
  89. package/dist/css/themes/SecondaryNavigation.css +1 -1
  90. package/dist/css/themes/SecondaryNavigationItem.css +1 -0
  91. package/dist/css/themes/SecondaryNavigationSubItem.css +1 -0
  92. package/dist/css/themes/Slider.css +1 -1
  93. package/dist/css/themes/StatusBadge.css +1 -0
  94. package/dist/css/themes/Tag.css +1 -1
  95. package/dist/css/themes/TextField.css +1 -1
  96. package/dist/custom-elements-internal.json +1070 -116
  97. package/dist/custom-elements.json +1047 -169
  98. package/dist/features/SearchSuggestionsPopover.d.ts +3 -3
  99. package/dist/features/SearchSuggestionsPopover.js +16 -18
  100. package/dist/features/SearchSuggestionsPopover.js.map +1 -1
  101. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  102. package/dist/generated/i18n/i18n-defaults.d.ts +8 -1
  103. package/dist/generated/i18n/i18n-defaults.js +8 -1
  104. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  105. package/dist/generated/templates/AccordionItemTemplate.lit.js +2 -1
  106. package/dist/generated/templates/AccordionItemTemplate.lit.js.map +1 -1
  107. package/dist/generated/templates/CountrySelectorTemplate.lit.js +1 -1
  108. package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
  109. package/dist/generated/templates/DropdownTemplate.lit.js +1 -1
  110. package/dist/generated/templates/DropdownTemplate.lit.js.map +1 -1
  111. package/dist/generated/templates/FilterMenuTemplate.lit.js +3 -3
  112. package/dist/generated/templates/FilterMenuTemplate.lit.js.map +1 -1
  113. package/dist/generated/templates/FooterTemplate.lit.js +15 -15
  114. package/dist/generated/templates/FooterTemplate.lit.js.map +1 -1
  115. package/dist/generated/templates/HeroBannerTemplate.lit.js +2 -2
  116. package/dist/generated/templates/HeroBannerTemplate.lit.js.map +1 -1
  117. package/dist/generated/templates/InputGroupTemplate.lit.d.ts +4 -0
  118. package/dist/generated/templates/InputGroupTemplate.lit.js +7 -0
  119. package/dist/generated/templates/InputGroupTemplate.lit.js.map +1 -0
  120. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +4 -4
  121. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +1 -1
  122. package/dist/generated/templates/ListItemTemplate.lit.js +1 -1
  123. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  124. package/dist/generated/templates/ListSelectAllTemplate.lit.js +1 -1
  125. package/dist/generated/templates/ListSelectAllTemplate.lit.js.map +1 -1
  126. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +15 -10
  127. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +1 -1
  128. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +1 -1
  129. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +1 -1
  130. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js +11 -10
  131. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js.map +1 -1
  132. package/dist/generated/templates/SearchTemplate.lit.js +11 -10
  133. package/dist/generated/templates/SearchTemplate.lit.js.map +1 -1
  134. package/dist/generated/templates/SearchableListBaseTemplate.lit.js +2 -2
  135. package/dist/generated/templates/SearchableListBaseTemplate.lit.js.map +1 -1
  136. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.d.ts +4 -0
  137. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js +11 -0
  138. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js.map +1 -0
  139. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.d.ts +4 -0
  140. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js +9 -0
  141. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js.map +1 -0
  142. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js +7 -9
  143. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js.map +1 -1
  144. package/dist/generated/templates/SelectBoxTemplate.lit.js +1 -1
  145. package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
  146. package/dist/generated/templates/StatusBadgeTemplate.lit.d.ts +4 -0
  147. package/dist/generated/templates/StatusBadgeTemplate.lit.js +5 -0
  148. package/dist/generated/templates/StatusBadgeTemplate.lit.js.map +1 -0
  149. package/dist/generated/themes/AccordionItem.css.js +1 -1
  150. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  151. package/dist/generated/themes/Avatar.css.js +1 -1
  152. package/dist/generated/themes/Avatar.css.js.map +1 -1
  153. package/dist/generated/themes/Breadcrumbs.css.js +1 -1
  154. package/dist/generated/themes/Breadcrumbs.css.js.map +1 -1
  155. package/dist/generated/themes/Checkbox.css.js +1 -1
  156. package/dist/generated/themes/Checkbox.css.js.map +1 -1
  157. package/dist/generated/themes/CountrySelector.css.js +1 -1
  158. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  159. package/dist/generated/themes/DatePicker.css.js +1 -1
  160. package/dist/generated/themes/DatePicker.css.js.map +1 -1
  161. package/dist/generated/themes/Dropdown.css.js +1 -1
  162. package/dist/generated/themes/Dropdown.css.js.map +1 -1
  163. package/dist/generated/themes/FilterMenu.css.js +1 -1
  164. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  165. package/dist/generated/themes/HeroBanner.css.js +1 -1
  166. package/dist/generated/themes/HeroBanner.css.js.map +1 -1
  167. package/dist/generated/themes/InputGroup.css.d.ts +3 -0
  168. package/dist/generated/themes/InputGroup.css.js +9 -0
  169. package/dist/generated/themes/InputGroup.css.js.map +1 -0
  170. package/dist/generated/themes/MastheadItem.css.js +1 -1
  171. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  172. package/dist/generated/themes/MastheadMenuItem.css.js +1 -1
  173. package/dist/generated/themes/MastheadMenuItem.css.js.map +1 -1
  174. package/dist/generated/themes/MastheadShell.css.js +1 -1
  175. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  176. package/dist/generated/themes/MediaPlayer.css.js +1 -1
  177. package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
  178. package/dist/generated/themes/PhoneNumberField.css.js +1 -1
  179. package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
  180. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  181. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  182. package/dist/generated/themes/Search.css.js +1 -1
  183. package/dist/generated/themes/Search.css.js.map +1 -1
  184. package/dist/generated/themes/SearchSuggestions.css.js +1 -1
  185. package/dist/generated/themes/SearchSuggestions.css.js.map +1 -1
  186. package/dist/generated/themes/SecondaryNavigation.css.js +1 -1
  187. package/dist/generated/themes/SecondaryNavigation.css.js.map +1 -1
  188. package/dist/generated/themes/SecondaryNavigationItem.css.d.ts +3 -0
  189. package/dist/generated/themes/SecondaryNavigationItem.css.js +9 -0
  190. package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -0
  191. package/dist/generated/themes/SecondaryNavigationSubItem.css.d.ts +3 -0
  192. package/dist/generated/themes/SecondaryNavigationSubItem.css.js +9 -0
  193. package/dist/generated/themes/SecondaryNavigationSubItem.css.js.map +1 -0
  194. package/dist/generated/themes/Slider.css.js +1 -1
  195. package/dist/generated/themes/Slider.css.js.map +1 -1
  196. package/dist/generated/themes/StatusBadge.css.d.ts +3 -0
  197. package/dist/generated/themes/StatusBadge.css.js +9 -0
  198. package/dist/generated/themes/StatusBadge.css.js.map +1 -0
  199. package/dist/generated/themes/Tag.css.js +1 -1
  200. package/dist/generated/themes/Tag.css.js.map +1 -1
  201. package/dist/generated/themes/TextField.css.js +1 -1
  202. package/dist/generated/themes/TextField.css.js.map +1 -1
  203. package/dist/i18n/messagebundle.properties +12 -1
  204. package/dist/i18n/messagebundle_en.properties +8 -1
  205. package/dist/types/callback.d.ts +2 -0
  206. package/dist/types/callback.js +2 -0
  207. package/dist/types/callback.js.map +1 -0
  208. package/dist/utils/debounce.d.ts +2 -2
  209. package/dist/utils/debounce.js.map +1 -1
  210. package/dist/utils/retryUntilSuccessful.d.ts +3 -0
  211. package/dist/utils/retryUntilSuccessful.js +21 -0
  212. package/dist/utils/retryUntilSuccessful.js.map +1 -0
  213. package/dist/vscode.html-custom-data.json +178 -14
  214. package/dist/web-types.json +406 -32
  215. package/package.json +1 -1
  216. package/src/AccordionItem.hbs +12 -1
  217. package/src/AccordionItem.ts +11 -2
  218. package/src/Avatar.ts +12 -3
  219. package/src/CountrySelector.hbs +3 -3
  220. package/src/CountrySelector.ts +22 -21
  221. package/src/Dropdown.hbs +0 -1
  222. package/src/Dropdown.ts +10 -0
  223. package/src/FilterMenu.hbs +5 -1
  224. package/src/FilterMenu.ts +60 -10
  225. package/src/Footer.hbs +154 -91
  226. package/src/Footer.ts +158 -1
  227. package/src/HeroBanner.hbs +24 -21
  228. package/src/InputGroup.hbs +20 -0
  229. package/src/InputGroup.ts +137 -0
  230. package/src/List.ts +92 -21
  231. package/src/ListGroupHeader.hbs +9 -5
  232. package/src/ListItem.hbs +2 -1
  233. package/src/ListItem.ts +0 -7
  234. package/src/ListItemBase.ts +14 -0
  235. package/src/ListSelectAll.hbs +1 -0
  236. package/src/MastheadMobileMenu.hbs +51 -28
  237. package/src/MastheadMobileMenu.ts +12 -3
  238. package/src/MastheadProfileMenu.hbs +1 -1
  239. package/src/PhoneNumberField.ts +27 -3
  240. package/src/Search.hbs +26 -3
  241. package/src/Search.ts +236 -21
  242. package/src/SearchSuggestions.hbs +47 -49
  243. package/src/SearchableListBase.hbs +2 -0
  244. package/src/SecondaryNavigation.hbs +52 -72
  245. package/src/SecondaryNavigation.ts +182 -186
  246. package/src/SecondaryNavigationItem.hbs +63 -0
  247. package/src/SecondaryNavigationItem.ts +358 -0
  248. package/src/SecondaryNavigationItemBase.ts +115 -0
  249. package/src/SecondaryNavigationSubItem.hbs +41 -0
  250. package/src/SecondaryNavigationSubItem.ts +123 -0
  251. package/src/SelectBox.hbs +1 -0
  252. package/src/SelectBox.ts +38 -1
  253. package/src/StatusBadge.hbs +9 -0
  254. package/src/StatusBadge.ts +129 -0
  255. package/src/Tab.ts +1 -1
  256. package/src/Table.ts +7 -7
  257. package/src/Tag.ts +12 -3
  258. package/src/TextArea.ts +1 -1
  259. package/src/features/SearchSuggestionsPopover.ts +18 -20
  260. package/src/generated/i18n/i18n-defaults.ts +2 -2
  261. package/src/generated/templates/AccordionItemTemplate.lit.ts +2 -1
  262. package/src/generated/templates/CountrySelectorTemplate.lit.ts +1 -1
  263. package/src/generated/templates/DropdownTemplate.lit.ts +1 -1
  264. package/src/generated/templates/FilterMenuTemplate.lit.ts +3 -3
  265. package/src/generated/templates/FooterTemplate.lit.ts +15 -15
  266. package/src/generated/templates/HeroBannerTemplate.lit.ts +2 -2
  267. package/src/generated/templates/InputGroupTemplate.lit.ts +12 -0
  268. package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +4 -4
  269. package/src/generated/templates/ListItemTemplate.lit.ts +1 -1
  270. package/src/generated/templates/ListSelectAllTemplate.lit.ts +1 -1
  271. package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +15 -10
  272. package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +1 -1
  273. package/src/generated/templates/SearchSuggestionsTemplate.lit.ts +11 -10
  274. package/src/generated/templates/SearchTemplate.lit.ts +10 -9
  275. package/src/generated/templates/SearchableListBaseTemplate.lit.ts +2 -2
  276. package/src/generated/templates/SecondaryNavigationItemTemplate.lit.ts +16 -0
  277. package/src/generated/templates/SecondaryNavigationSubItemTemplate.lit.ts +14 -0
  278. package/src/generated/templates/SecondaryNavigationTemplate.lit.ts +7 -9
  279. package/src/generated/templates/SelectBoxTemplate.lit.ts +1 -1
  280. package/src/generated/templates/StatusBadgeTemplate.lit.ts +10 -0
  281. package/src/generated/themes/AccordionItem.css.ts +1 -1
  282. package/src/generated/themes/Avatar.css.ts +1 -1
  283. package/src/generated/themes/Breadcrumbs.css.ts +1 -1
  284. package/src/generated/themes/Checkbox.css.ts +1 -1
  285. package/src/generated/themes/CountrySelector.css.ts +1 -1
  286. package/src/generated/themes/DatePicker.css.ts +1 -1
  287. package/src/generated/themes/Dropdown.css.ts +1 -1
  288. package/src/generated/themes/FilterMenu.css.ts +1 -1
  289. package/src/generated/themes/HeroBanner.css.ts +1 -1
  290. package/src/generated/themes/InputGroup.css.ts +13 -0
  291. package/src/generated/themes/MastheadItem.css.ts +1 -1
  292. package/src/generated/themes/MastheadMenuItem.css.ts +1 -1
  293. package/src/generated/themes/MastheadShell.css.ts +1 -1
  294. package/src/generated/themes/MediaPlayer.css.ts +1 -1
  295. package/src/generated/themes/PhoneNumberField.css.ts +1 -1
  296. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  297. package/src/generated/themes/Search.css.ts +1 -1
  298. package/src/generated/themes/SearchSuggestions.css.ts +1 -1
  299. package/src/generated/themes/SecondaryNavigation.css.ts +1 -1
  300. package/src/generated/themes/SecondaryNavigationItem.css.ts +13 -0
  301. package/src/generated/themes/SecondaryNavigationSubItem.css.ts +13 -0
  302. package/src/generated/themes/Slider.css.ts +1 -1
  303. package/src/generated/themes/StatusBadge.css.ts +13 -0
  304. package/src/generated/themes/Tag.css.ts +1 -1
  305. package/src/generated/themes/TextField.css.ts +1 -1
  306. package/src/i18n/messagebundle.properties +12 -1
  307. package/src/i18n/messagebundle_en.properties +8 -1
  308. package/src/themes/AccordionItem.css +20 -15
  309. package/src/themes/Avatar.css +20 -0
  310. package/src/themes/Breadcrumbs.css +4 -2
  311. package/src/themes/Checkbox.css +12 -0
  312. package/src/themes/CountrySelector.css +16 -1
  313. package/src/themes/DatePicker.css +1 -1
  314. package/src/themes/Dropdown.css +3 -1
  315. package/src/themes/FilterMenu.css +10 -0
  316. package/src/themes/HeroBanner.css +42 -6
  317. package/src/themes/InputGroup.css +19 -0
  318. package/src/themes/MastheadItem.css +2 -7
  319. package/src/themes/MastheadMenuItem.css +0 -4
  320. package/src/themes/MastheadShell.css +9 -10
  321. package/src/themes/MediaPlayer.css +3 -2
  322. package/src/themes/PhoneNumberField.css +17 -3
  323. package/src/themes/Search.css +168 -21
  324. package/src/themes/SearchSuggestions.css +7 -1
  325. package/src/themes/SecondaryNavigation.css +44 -302
  326. package/src/themes/SecondaryNavigationItem.css +220 -0
  327. package/src/themes/SecondaryNavigationSubItem.css +118 -0
  328. package/src/themes/StatusBadge.css +135 -0
  329. package/src/themes/Tag.css +6 -1
  330. package/src/themes/TextField.css +10 -1
  331. package/src/types/callback.ts +3 -0
  332. package/src/utils/debounce.ts +1 -1
  333. package/src/utils/retryUntilSuccessful.ts +23 -0
  334. package/dist/assets/messagebundle_en-26cd7a92.js +0 -1
@@ -1,4 +1,4 @@
1
- import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
1
+ import UI5Element, { ChangeInfo } from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
3
3
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
4
  import event from "@ui5/webcomponents-base/dist/decorators/event.js";
@@ -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,29 +23,20 @@ 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";
28
- const rootClass = "udex-secondary-navigation__root";
26
+ const canvasContentFont: string = "16px / 17.6px '72 Brand Variable'";
29
27
  const breakpointSizeS: number = 979;
30
28
 
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
29
  export type SecondaryNavigationItemClickDetail = {
47
30
  originalEvent: Event,
48
- clickedItem: HTMLElement;
31
+ clickedItem: UDExSecondaryNavigationItem;
49
32
  clickedIndex: number;
33
+ };
34
+
35
+ export type SecondaryNavigationSubItemClickDetail = {
36
+ originalEvent: Event,
37
+ clickedItem: {
38
+ items: Array<NavItem>
39
+ };
50
40
  }
51
41
 
52
42
  /**
@@ -71,7 +61,7 @@ export type SecondaryNavigationItemClickDetail = {
71
61
  renderer: litRender,
72
62
  styles: SecondaryNavigationCss,
73
63
  template: SecondaryNavigationTemplate,
74
- dependencies: [UI5Icon],
64
+ dependencies: [UDExSecondaryNavigationItem],
75
65
  })
76
66
 
77
67
  /**
@@ -94,6 +84,23 @@ export type SecondaryNavigationItemClickDetail = {
94
84
  },
95
85
  })
96
86
 
87
+ /**
88
+ * Fires when sub item is clicked
89
+ *
90
+ * @allowPreventDefault
91
+ * @public
92
+ */
93
+ @event<SecondaryNavigationSubItemClickDetail>("sub-item-click", {
94
+ detail: {
95
+ originalEvent: {
96
+ type: Event,
97
+ },
98
+ clickedItem: {
99
+ type: HTMLElement,
100
+ },
101
+ },
102
+ })
103
+
97
104
  class UDExSecondaryNavigation extends UI5Element {
98
105
  /**
99
106
  * Defines an aria label for the mobile menu opener
@@ -139,14 +146,23 @@ class UDExSecondaryNavigation extends UI5Element {
139
146
  @property()
140
147
  title!: string;
141
148
 
149
+ /**
150
+ * Defines the href of the title.
151
+ *
152
+ * @default ""
153
+ * @public
154
+ */
155
+ @property()
156
+ titleHref!: string;
157
+
142
158
  @property({ type: Boolean, noAttribute: true })
143
- _dropdownMoreIsOpen!: boolean;
159
+ _selectedMore!: boolean;
144
160
 
145
- @property({ type: HTMLElement, defaultValue: [], noAttribute: true })
161
+ @property({ type: Object, multiple: true, noAttribute: true })
146
162
  _overflowItems!: Array<NavItem>;
147
163
 
148
- @property({ type: HTMLElement, defaultValue: [], noAttribute: true })
149
- _navItems!: Array<NavItem>;
164
+ @property({ type: Object, multiple: true, noAttribute: true })
165
+ _visibleItems!: Array<NavItem>;
150
166
 
151
167
  @property({ type: Boolean, noAttribute: true })
152
168
  _requestRender = false;
@@ -154,9 +170,10 @@ class UDExSecondaryNavigation extends UI5Element {
154
170
  @property({ type: Boolean, noAttribute: true })
155
171
  _mobileBtnExpanded = false;
156
172
 
157
- _navigationList: Array<NavItem> | undefined;
158
- _dropdown!: HTMLElement | null | undefined;
173
+ _navItems!: Array<NavItem>;
174
+ _showMoreButton: boolean;
159
175
  _rootHolder!: HTMLElement | null | undefined;
176
+ _clickedNavItem!: UDExSecondaryNavigationItem;
160
177
  _boundReflowItems: () => void;
161
178
 
162
179
  static i18nBundle: any;
@@ -167,6 +184,7 @@ class UDExSecondaryNavigation extends UI5Element {
167
184
 
168
185
  constructor() {
169
186
  super();
187
+ this._showMoreButton = true;
170
188
  this._boundReflowItems = this.reflowItems.bind(this);
171
189
  }
172
190
 
@@ -175,21 +193,21 @@ class UDExSecondaryNavigation extends UI5Element {
175
193
  this.setAttribute("desktop", "");
176
194
  }
177
195
 
178
- if (this.isDesktopScreen) {
179
- this.reflowItems();
180
- }
181
-
182
- ResizeHandler.register(this.rootHolder, this._boundReflowItems);
196
+ ResizeHandler.register(this, this._boundReflowItems);
183
197
  }
184
198
 
185
199
  onExitDOM(): void {
186
- ResizeHandler.deregister(this.rootHolder, this._boundReflowItems);
200
+ ResizeHandler.deregister(this, this._boundReflowItems);
201
+ }
202
+
203
+ onInvalidation(changeInfo: ChangeInfo): void {
204
+ if (changeInfo.name === "navItems") {
205
+ this.reflowItems();
206
+ }
187
207
  }
188
208
 
189
209
  onAfterRendering(): void {
190
210
  this._rootHolder = this.rootHolder;
191
- this._dropdown = this.getDropdown();
192
-
193
211
  this.handleOutsideClick();
194
212
  }
195
213
 
@@ -198,167 +216,108 @@ class UDExSecondaryNavigation extends UI5Element {
198
216
  }
199
217
 
200
218
  reflowItems(): void {
201
- const availableWidth = this.rootHolder.offsetWidth - this.heading.offsetWidth - (this.optionalButtons?.offsetWidth || 0);
219
+ const availableWidth = this.rootHolder.offsetWidth - this.heading?.offsetWidth - (this.optionalButtons?.offsetWidth || 0);
202
220
  const moreButtonWidth = this.getMoreButtonWidth();
203
221
  const itemsGap = 20;
204
-
205
- const widths = this.navigationList.map(item => this.getItemWidth(item));
206
-
222
+ const widths = this.parsedItems.map(item => this.getItemWidth(item));
207
223
  const steps: Array<number> = [];
208
- widths.forEach((itemWidth, index) => {
224
+
225
+ widths?.forEach((itemWidth, index) => {
209
226
  steps.push((steps.at(-1) || 0) + itemWidth + (index && itemsGap));
210
227
  });
211
228
 
212
229
  if ((steps.at(-1) || 0) <= availableWidth) {
213
- this._navItems.splice(0, Infinity, ...this.navigationList);
230
+ this._visibleItems.splice(0, Infinity, ...this.parsedItems);
231
+ this._showMoreButton = false;
214
232
  this.refreshRendering();
215
233
  return;
216
234
  }
217
235
 
218
- // @ts-ignore
219
- const lastVisibleIndex: number = steps.findLastIndex((size: number) => size < (availableWidth - moreButtonWidth - 20));
220
- this._navItems.splice(0, Infinity, ...this.navigationList.slice(0, lastVisibleIndex + 1));
221
- this._overflowItems.splice(0, Infinity, ...this.navigationList.slice(lastVisibleIndex + 1));
222
- this.refreshRendering();
223
- }
224
-
225
- handleKeyDown(e: KeyboardEvent) {
226
- e.stopPropagation();
227
- this.handleLeftArrow(e);
228
- this.handleRightArrow(e);
229
- this.handleEscapeKey(e);
230
- }
231
-
232
- handleEscapeKey(e: KeyboardEvent) {
233
- if (isEscape(e)) {
234
- if (!this.isDesktopScreen) {
235
- this._rootHolder?.classList.remove(mobileMenuActiveClass);
236
- this.getMobileButtonMenu().focus();
237
- } else {
238
- this.onCloseDropdown();
239
- this.getMoreButton().focus();
240
- }
236
+ if (this.parsedItems) {
237
+ // @ts-ignore
238
+ const lastVisibleIndex: number = steps.findLastIndex((size: number) => size < (availableWidth - moreButtonWidth - itemsGap));
239
+ this._visibleItems.splice(0, Infinity, ...this.parsedItems.slice(0, lastVisibleIndex + 1));
240
+ this._overflowItems.splice(0, Infinity, ...this.parsedItems.slice(lastVisibleIndex + 1));
241
+ this._showMoreButton = true;
242
+ this.refreshRendering();
241
243
  }
242
244
  }
243
245
 
244
- handleKeyDownDropdown(e: KeyboardEvent) {
246
+ handleKeyDown(e: KeyboardEvent): void {
245
247
  e.stopPropagation();
246
- this.handleUpArrow(e);
247
- this.handleDownArrow(e);
248
- this.handleEscapeKey(e);
249
- }
250
-
251
- handleLeftArrow(e: KeyboardEvent): void {
252
248
  if (isLeft(e)) {
253
249
  this.focusPrevNavItem(e);
254
250
  }
255
- }
256
-
257
- handleRightArrow(e: KeyboardEvent): void {
258
251
  if (isRight(e)) {
259
252
  this.focusNextNavItem(e);
260
253
  }
261
- }
262
-
263
- handleUpArrow(e: KeyboardEvent): void {
264
- if (isUp(e)) {
265
- this.focusPrevNavItem(e);
266
- }
267
- }
268
-
269
- handleDownArrow(e: KeyboardEvent): void {
270
- if (isDown(e)) {
271
- this.focusNextNavItem(e);
254
+ if (isEscape(e)) {
255
+ (e.target as UDExSecondaryNavigationItem).closeDropdown();
272
256
  }
273
257
  }
274
258
 
275
- handleOutsideClick(): void {
276
- document.addEventListener("click", () => {
277
- if (this._dropdown) {
278
- this.onCloseDropdown();
279
- }
280
- });
281
- }
282
-
283
- handleMobileOpen(): void {
284
- this._rootHolder?.classList.toggle(mobileMenuActiveClass);
285
- this._mobileBtnExpanded = !this._mobileBtnExpanded;
286
- }
287
-
288
- handleToggleDropdown(): void {
289
- this._dropdownMoreIsOpen = !this._dropdownMoreIsOpen;
290
- }
291
-
292
259
  focusPrevNavItem(e: KeyboardEvent): void {
293
- const el = e.target as HTMLElement;
294
- const currentItem = el.parentElement as HTMLElement;
295
- const currentSelectedIndex = this.getCurrentIndex(currentItem);
296
- const lastItemIndex = this.navigationItems.length - 1;
260
+ const item = e.target as UDExSecondaryNavigationItem;
261
+ const currentSelectedIndex = this.getCurrentIndex(item);
262
+ const lastItemIndex = this.domNavItems.length - 1;
297
263
  const previousSelectIndex = currentSelectedIndex - 1 < 0 ? lastItemIndex : currentSelectedIndex - 1;
298
- const listItem = this.getListItemByIndex(previousSelectIndex);
299
- listItem?.focus();
264
+ this.domNavItems[previousSelectIndex]?.focus();
300
265
  }
301
266
 
302
267
  focusNextNavItem(e: KeyboardEvent): void {
303
- const el = e.target as HTMLElement;
304
- const currentItem = el.parentElement as HTMLElement;
305
- const currentSelectedIndex = this.getCurrentIndex(currentItem);
306
- const nextSelectIndex = currentSelectedIndex + 1 > this.navigationItems.length - 1 ? 0 : currentSelectedIndex + 1;
307
- const listItem = this.getListItemByIndex(nextSelectIndex);
308
- listItem?.focus();
309
- }
310
-
311
- onCloseDropdown(): void {
312
- this._dropdownMoreIsOpen = false;
268
+ const item = e.target as UDExSecondaryNavigationItem;
269
+ const currentSelectedIndex = this.getCurrentIndex(item);
270
+ const nextSelectIndex = currentSelectedIndex + 1 > this.domNavItems.length - 1 ? 0 : currentSelectedIndex + 1;
271
+ this.domNavItems[nextSelectIndex].focus();
313
272
  }
314
273
 
315
274
  getItemWidth(item: NavItem): number {
316
275
  const canvas = document.createElement("canvas");
317
276
  const context = canvas.getContext("2d")!;
318
- context.font = "16px / 17.6px '72 Brand Variable'";
277
+ context.font = canvasContentFont;
319
278
 
320
279
  return Math.ceil(context.measureText(item.title).width);
321
280
  }
322
281
 
323
- getCurrentIndex(item: HTMLElement): number {
324
- return this.navigationItems.indexOf(item);
325
- }
326
-
327
- getListItemByIndex(index: number): HTMLElement | null {
328
- return this.navigationItems[index].querySelector(".udex-secondary-navigation__link-btn");
329
- }
282
+ getMoreButtonWidth(): number {
283
+ const canvas = document.createElement("canvas");
284
+ const context = canvas.getContext("2d")!;
285
+ context.font = canvasContentFont;
330
286
 
331
- getDropdown(): HTMLElement {
332
- return this.shadowRoot!.querySelector(".udex-secondary-navigation__dropdown")!;
287
+ return Math.ceil(context.measureText(this.moreButtonText).width);
333
288
  }
334
289
 
335
- getMobileButtonMenu(): HTMLElement {
336
- return this.shadowRoot?.querySelector(".udex-secondary-navigation__mobile-opener") as HTMLElement;
290
+ getCurrentIndex(item: UDExSecondaryNavigationItem): number {
291
+ return this.domNavItems.indexOf(item);
337
292
  }
338
293
 
339
- getMoreButton(): HTMLElement {
340
- return this.shadowRoot!.querySelector(".udex-secondary-navigation__list-item_more > button")!;
341
- }
294
+ handleItemClick(e: CustomEvent): void {
295
+ const clickedItem = e.detail.item as UDExSecondaryNavigationItem;
296
+ const prevented = !this.fireEvent("item-click", {
297
+ originalEvent: e,
298
+ clickedItem,
299
+ clickedIndex: this.getCurrentIndex(clickedItem),
300
+ }, true);
342
301
 
343
- getMoreButtonWidth(): number {
344
- const canvas = document.createElement("canvas");
345
- const context = canvas.getContext("2d")!;
346
- context.font = "16px / 17.6px '72 Brand Variable'";
302
+ if (prevented) {
303
+ e.preventDefault();
304
+ return;
305
+ }
347
306
 
348
- return Math.ceil(context.measureText("More").width) + 4 + 16;
349
- }
307
+ this._clickedNavItem = clickedItem;
308
+ this.closePrevDropdown(clickedItem._id);
350
309
 
351
- parseArrayFromString<T>(string: string): T[] {
352
- return string ? JSON.parse(string) as T[] : [];
310
+ if (!clickedItem.hasNestedItems) {
311
+ this.setActiveItem(this.parsedItems, clickedItem);
312
+ }
353
313
  }
354
314
 
355
- handleNavigationClick(e: MouseEvent) {
356
- const target = e.target as HTMLElement;
357
- const clickedIndex = this.domNavItems.indexOf(target);
358
- const prevented = !this.fireEvent("item-click", {
315
+ handleSubItemClick(e: CustomEvent): void {
316
+ const item = e.detail.item as UDExSecondaryNavigationSubItem;
317
+ const { items } = item as NavItem;
318
+ const prevented = !this.fireEvent("sub-item-click", {
359
319
  originalEvent: e,
360
- clickedItem: target,
361
- clickedIndex,
320
+ clickedItem: item,
362
321
  }, true);
363
322
 
364
323
  if (prevented) {
@@ -366,21 +325,64 @@ class UDExSecondaryNavigation extends UI5Element {
366
325
  return;
367
326
  }
368
327
 
369
- if (this.domNavItems.length > 0) {
370
- this.navigationList.forEach(item => delete item.active);
371
- this.navigationList[clickedIndex].active = true;
372
- this.refreshRendering();
328
+ if (this.isMobileScreen && !items) {
329
+ this.mobileNav.closeDropdown();
330
+ }
331
+
332
+ if (!items) {
333
+ this.setActiveItem(this.parsedItems, item);
334
+ this._clickedNavItem?.closeDropdown();
373
335
  }
374
336
  }
375
337
 
376
- get navigationItems(): Array<HTMLElement> {
377
- return Array.from(this.shadowRoot!.querySelectorAll(".udex-secondary-navigation__link-btn-wrap"));
338
+ setActiveItem(navItems: Array<NavItem>, clickedItem: UDExSecondaryNavigationItemBase): void {
339
+ const updateNav = (items: Array<NavItem>, { title, path }: UDExSecondaryNavigationItemBase) => {
340
+ items.forEach(item => {
341
+ if (item.title === title && item.path === path) {
342
+ item.active = true;
343
+ return;
344
+ }
345
+ delete item.active;
346
+
347
+ if (item.items) {
348
+ updateNav(item.items, clickedItem);
349
+ }
350
+ });
351
+ };
352
+
353
+ updateNav(navItems, clickedItem);
354
+ this.navItems = JSON.stringify(navItems);
355
+ }
356
+
357
+ handleOutsideClick(): void {
358
+ document.addEventListener("click", (e: MouseEvent) => {
359
+ if (this.isMobileScreen && e.target !== this) {
360
+ this.mobileNav?.closeDropdown();
361
+ return;
362
+ }
363
+
364
+ const isClickedNavItem = e.composedPath().includes(this._clickedNavItem);
365
+ if (this.isDesktopScreen && !isClickedNavItem && this._clickedNavItem) {
366
+ this._clickedNavItem.closeDropdown();
367
+ }
368
+ });
369
+ }
370
+
371
+ closePrevDropdown(clickedItemId: string): void {
372
+ this.domNavItems.forEach(item => {
373
+ if (clickedItemId !== item._id) {
374
+ item.closeDropdown();
375
+ }
376
+ });
377
+ }
378
+
379
+ parseArrayFromString<T>(string: string): T[] {
380
+ return string ? JSON.parse(string) as T[] : [];
378
381
  }
379
382
 
380
- get domNavItems(): Array<HTMLElement> {
381
- const navigationItemsSelector = ".udex-secondary-navigation__item:not(.udex-secondary-navigation__link-btn-more), .udex-secondary-navigation__dropdown-item";
382
- const domNavItems = this.shadowRoot?.querySelectorAll<HTMLElement>(navigationItemsSelector);
383
- return domNavItems ? Array.from(domNavItems) : [];
383
+ get domNavItems(): Array<UDExSecondaryNavigationItem> {
384
+ const items = this.shadowRoot?.querySelectorAll<UDExSecondaryNavigationItem>("udex-secondary-navigation-item");
385
+ return items ? Array.from(items) : [];
384
386
  }
385
387
 
386
388
  get rootHolder(): HTMLElement {
@@ -391,55 +393,49 @@ class UDExSecondaryNavigation extends UI5Element {
391
393
  return (this.shadowRoot ? this.shadowRoot.querySelector<HTMLElement>(".udex-secondary-navigation__heading") : undefined)!;
392
394
  }
393
395
 
394
- get optionalButtons() {
395
- return this.shadowRoot?.querySelector<HTMLElement>(".udex-secondary-navigation__buttons");
396
+ get mobileNav(): UDExSecondaryNavigationItem {
397
+ return (this.shadowRoot ? this.shadowRoot.querySelector<UDExSecondaryNavigationItem>(".udex-secondary-navigation__mobile-nav") : undefined)!;
396
398
  }
397
399
 
398
- get linksList() {
399
- return this.shadowRoot?.querySelector<HTMLElement>(".udex-secondary-navigation__list");
400
+ get optionalButtons(): HTMLElement | null | undefined {
401
+ return this.shadowRoot?.querySelector<HTMLElement>(".udex-secondary-navigation__buttons");
400
402
  }
401
403
 
402
404
  get moreButtonText(): string {
403
405
  return UDExSecondaryNavigation.i18nBundle.getText(MORE) as string;
404
406
  }
405
407
 
406
- get activeItemText(): string {
407
- const activeItem = this.navigationList.find(item => item.active);
408
- return activeItem ? activeItem?.title : "";
408
+ get parsedItems(): Array<NavItem> {
409
+ return this.parseArrayFromString<NavItem>(this.navItems);
409
410
  }
410
411
 
411
- get moreClass(): string {
412
- const rootClasses = "udex-secondary-navigation__list-item udex-secondary-navigation__list-item_more";
413
- return this._dropdownMoreIsOpen ? `${rootClasses} udex-secondary-navigation__list-item_open` : `${rootClasses}`;
412
+ get visibleItems(): Array<NavItem> {
413
+ return this.isDesktopScreen ? this._visibleItems : this.parsedItems;
414
414
  }
415
415
 
416
- get navigationList(): Array<NavItem> {
417
- if (!this._navigationList) {
418
- this._navigationList = this.parseArrayFromString<NavItem>(this.navItems);
419
- }
420
- return this._navigationList;
416
+ get hasBreadcrumbsSlot(): boolean {
417
+ return !!this.getSlottedNodes("breadcrumbs").length && this.isDesktopScreen;
421
418
  }
422
419
 
423
- get items(): Array<NavItem> {
424
- return this.isDesktopScreen ? this._navItems : this.navigationList;
420
+ get hasDesktopButtonsSlot(): boolean {
421
+ return this.hasButtons && this.isDesktopScreen;
425
422
  }
426
423
 
427
- get moreIsActive(): boolean {
428
- return this._overflowItems.some(item => item.active);
424
+ get hasMobileButtonsSlot(): boolean {
425
+ return this.hasButtons && this.isMobileScreen;
429
426
  }
430
427
 
431
- get rootClass(): string {
432
- const centeredClass = this.hasBreadcrumbsSlot ? "" : `${rootClass}_centered`;
433
- return `${rootClass} ${centeredClass}`;
434
- }
435
-
436
- get hasBreadcrumbsSlot(): boolean {
437
- return !!this.getSlottedNodes("breadcrumbs").length;
428
+ get hasButtons(): boolean {
429
+ return !!this.getSlottedNodes("buttons").length;
438
430
  }
439
431
 
440
432
  get isDesktopScreen(): boolean {
441
433
  return window.innerWidth > breakpointSizeS;
442
434
  }
435
+
436
+ get isMobileScreen(): boolean {
437
+ return window.innerWidth <= breakpointSizeS;
438
+ }
443
439
  }
444
440
 
445
441
  UDExSecondaryNavigation.define();
@@ -0,0 +1,63 @@
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
+ {{label}}
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
+ {{label}}
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
+ .nestedItems="{{this.items}}"
53
+ path="{{this.path}}"
54
+ target="{{this.target}}"
55
+ ?is-active="{{this.active}}">
56
+ </udex-secondary-navigation-sub-item>
57
+ </li>
58
+ {{/each}}
59
+ </ul>
60
+ <slot></slot>
61
+ </div>
62
+ {{/if}}
63
+ {{/if}}