@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,23 +1,17 @@
1
- import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
- import "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
3
- export declare enum Target {
4
- _blank = "_blank",
5
- _parent = "_parent",
6
- _self = "_self",
7
- _top = "_top"
8
- }
9
- export type NavItem = {
10
- path: string;
11
- mobileLinkTitle: string;
12
- target: Target;
13
- title: string;
14
- active?: boolean;
15
- };
1
+ import UI5Element, { ChangeInfo } from "@ui5/webcomponents-base/dist/UI5Element.js";
2
+ import UDExSecondaryNavigationItem from "./SecondaryNavigationItem.js";
3
+ import UDExSecondaryNavigationItemBase, { NavItem } from "./SecondaryNavigationItemBase.js";
16
4
  export type SecondaryNavigationItemClickDetail = {
17
5
  originalEvent: Event;
18
- clickedItem: HTMLElement;
6
+ clickedItem: UDExSecondaryNavigationItem;
19
7
  clickedIndex: number;
20
8
  };
9
+ export type SecondaryNavigationSubItemClickDetail = {
10
+ originalEvent: Event;
11
+ clickedItem: {
12
+ items: Array<NavItem>;
13
+ };
14
+ };
21
15
  /**
22
16
  * @class
23
17
  *
@@ -70,59 +64,57 @@ declare class UDExSecondaryNavigation extends UI5Element {
70
64
  * @public
71
65
  */
72
66
  title: string;
73
- _dropdownMoreIsOpen: boolean;
67
+ /**
68
+ * Defines the href of the title.
69
+ *
70
+ * @default ""
71
+ * @public
72
+ */
73
+ titleHref: string;
74
+ _selectedMore: boolean;
74
75
  _overflowItems: Array<NavItem>;
75
- _navItems: Array<NavItem>;
76
+ _visibleItems: Array<NavItem>;
76
77
  _requestRender: boolean;
77
78
  _mobileBtnExpanded: boolean;
78
- _navigationList: Array<NavItem> | undefined;
79
- _dropdown: HTMLElement | null | undefined;
79
+ _navItems: Array<NavItem>;
80
+ _showMoreButton: boolean;
80
81
  _rootHolder: HTMLElement | null | undefined;
82
+ _clickedNavItem: UDExSecondaryNavigationItem;
81
83
  _boundReflowItems: () => void;
82
84
  static i18nBundle: any;
83
85
  static onDefine(): Promise<void>;
84
86
  constructor();
85
87
  onEnterDOM(): void;
86
88
  onExitDOM(): void;
89
+ onInvalidation(changeInfo: ChangeInfo): void;
87
90
  onAfterRendering(): void;
88
91
  refreshRendering(): void;
89
92
  reflowItems(): void;
90
93
  handleKeyDown(e: KeyboardEvent): void;
91
- handleEscapeKey(e: KeyboardEvent): void;
92
- handleKeyDownDropdown(e: KeyboardEvent): void;
93
- handleLeftArrow(e: KeyboardEvent): void;
94
- handleRightArrow(e: KeyboardEvent): void;
95
- handleUpArrow(e: KeyboardEvent): void;
96
- handleDownArrow(e: KeyboardEvent): void;
97
- handleOutsideClick(): void;
98
- handleMobileOpen(): void;
99
- handleToggleDropdown(): void;
100
94
  focusPrevNavItem(e: KeyboardEvent): void;
101
95
  focusNextNavItem(e: KeyboardEvent): void;
102
- onCloseDropdown(): void;
103
96
  getItemWidth(item: NavItem): number;
104
- getCurrentIndex(item: HTMLElement): number;
105
- getListItemByIndex(index: number): HTMLElement | null;
106
- getDropdown(): HTMLElement;
107
- getMobileButtonMenu(): HTMLElement;
108
- getMoreButton(): HTMLElement;
109
97
  getMoreButtonWidth(): number;
98
+ getCurrentIndex(item: UDExSecondaryNavigationItem): number;
99
+ handleItemClick(e: CustomEvent): void;
100
+ handleSubItemClick(e: CustomEvent): void;
101
+ setActiveItem(navItems: Array<NavItem>, clickedItem: UDExSecondaryNavigationItemBase): void;
102
+ handleOutsideClick(): void;
103
+ closePrevDropdown(clickedItemId: string): void;
110
104
  parseArrayFromString<T>(string: string): T[];
111
- handleNavigationClick(e: MouseEvent): void;
112
- get navigationItems(): Array<HTMLElement>;
113
- get domNavItems(): Array<HTMLElement>;
105
+ get domNavItems(): Array<UDExSecondaryNavigationItem>;
114
106
  get rootHolder(): HTMLElement;
115
107
  get heading(): HTMLElement;
108
+ get mobileNav(): UDExSecondaryNavigationItem;
116
109
  get optionalButtons(): HTMLElement | null | undefined;
117
- get linksList(): HTMLElement | null | undefined;
118
110
  get moreButtonText(): string;
119
- get activeItemText(): string;
120
- get moreClass(): string;
121
- get navigationList(): Array<NavItem>;
122
- get items(): Array<NavItem>;
123
- get moreIsActive(): boolean;
124
- get rootClass(): string;
111
+ get parsedItems(): Array<NavItem>;
112
+ get visibleItems(): Array<NavItem>;
125
113
  get hasBreadcrumbsSlot(): boolean;
114
+ get hasDesktopButtonsSlot(): boolean;
115
+ get hasMobileButtonsSlot(): boolean;
116
+ get hasButtons(): boolean;
126
117
  get isDesktopScreen(): boolean;
118
+ get isMobileScreen(): boolean;
127
119
  }
128
120
  export default UDExSecondaryNavigation;
@@ -13,25 +13,16 @@ import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
13
13
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
14
14
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
15
15
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
16
- import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
17
16
  import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
18
- import "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
19
- import { isLeft, isRight, isUp, isDown, isEscape, } from "@ui5/webcomponents-base/dist/Keys.js";
17
+ import { isLeft, isRight, isEscape, } from "@ui5/webcomponents-base/dist/Keys.js";
20
18
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
19
+ import UDExSecondaryNavigationItem from "./SecondaryNavigationItem.js";
21
20
  import { MORE } from "./generated/i18n/i18n-defaults.js";
22
21
  import SecondaryNavigationTemplate from "./generated/templates/SecondaryNavigationTemplate.lit.js";
23
22
  // Styles
24
23
  import SecondaryNavigationCss from "./generated/themes/SecondaryNavigation.css.js";
25
- const mobileMenuActiveClass = "udex-secondary-navigation__root_open";
26
- const rootClass = "udex-secondary-navigation__root";
24
+ const canvasContentFont = "16px / 17.6px '72 Brand Variable'";
27
25
  const breakpointSizeS = 979;
28
- export var Target;
29
- (function (Target) {
30
- Target["_blank"] = "_blank";
31
- Target["_parent"] = "_parent";
32
- Target["_self"] = "_self";
33
- Target["_top"] = "_top";
34
- })(Target || (Target = {}));
35
26
  /**
36
27
  * @class
37
28
  *
@@ -57,181 +48,171 @@ let UDExSecondaryNavigation = UDExSecondaryNavigation_1 = class UDExSecondaryNav
57
48
  super();
58
49
  this._requestRender = false;
59
50
  this._mobileBtnExpanded = false;
51
+ this._showMoreButton = true;
60
52
  this._boundReflowItems = this.reflowItems.bind(this);
61
53
  }
62
54
  onEnterDOM() {
63
55
  if (isDesktop()) {
64
56
  this.setAttribute("desktop", "");
65
57
  }
66
- if (this.isDesktopScreen) {
67
- this.reflowItems();
68
- }
69
- ResizeHandler.register(this.rootHolder, this._boundReflowItems);
58
+ ResizeHandler.register(this, this._boundReflowItems);
70
59
  }
71
60
  onExitDOM() {
72
- ResizeHandler.deregister(this.rootHolder, this._boundReflowItems);
61
+ ResizeHandler.deregister(this, this._boundReflowItems);
62
+ }
63
+ onInvalidation(changeInfo) {
64
+ if (changeInfo.name === "navItems") {
65
+ this.reflowItems();
66
+ }
73
67
  }
74
68
  onAfterRendering() {
75
69
  this._rootHolder = this.rootHolder;
76
- this._dropdown = this.getDropdown();
77
70
  this.handleOutsideClick();
78
71
  }
79
72
  refreshRendering() {
80
73
  this._requestRender = !this._requestRender;
81
74
  }
82
75
  reflowItems() {
83
- const availableWidth = this.rootHolder.offsetWidth - this.heading.offsetWidth - (this.optionalButtons?.offsetWidth || 0);
76
+ const availableWidth = this.rootHolder.offsetWidth - this.heading?.offsetWidth - (this.optionalButtons?.offsetWidth || 0);
84
77
  const moreButtonWidth = this.getMoreButtonWidth();
85
78
  const itemsGap = 20;
86
- const widths = this.navigationList.map(item => this.getItemWidth(item));
79
+ const widths = this.parsedItems.map(item => this.getItemWidth(item));
87
80
  const steps = [];
88
- widths.forEach((itemWidth, index) => {
81
+ widths?.forEach((itemWidth, index) => {
89
82
  steps.push((steps.at(-1) || 0) + itemWidth + (index && itemsGap));
90
83
  });
91
84
  if ((steps.at(-1) || 0) <= availableWidth) {
92
- this._navItems.splice(0, Infinity, ...this.navigationList);
85
+ this._visibleItems.splice(0, Infinity, ...this.parsedItems);
86
+ this._showMoreButton = false;
93
87
  this.refreshRendering();
94
88
  return;
95
89
  }
96
- // @ts-ignore
97
- const lastVisibleIndex = steps.findLastIndex((size) => size < (availableWidth - moreButtonWidth - 20));
98
- this._navItems.splice(0, Infinity, ...this.navigationList.slice(0, lastVisibleIndex + 1));
99
- this._overflowItems.splice(0, Infinity, ...this.navigationList.slice(lastVisibleIndex + 1));
100
- this.refreshRendering();
101
- }
102
- handleKeyDown(e) {
103
- e.stopPropagation();
104
- this.handleLeftArrow(e);
105
- this.handleRightArrow(e);
106
- this.handleEscapeKey(e);
107
- }
108
- handleEscapeKey(e) {
109
- if (isEscape(e)) {
110
- if (!this.isDesktopScreen) {
111
- this._rootHolder?.classList.remove(mobileMenuActiveClass);
112
- this.getMobileButtonMenu().focus();
113
- }
114
- else {
115
- this.onCloseDropdown();
116
- this.getMoreButton().focus();
117
- }
90
+ if (this.parsedItems) {
91
+ // @ts-ignore
92
+ const lastVisibleIndex = steps.findLastIndex((size) => size < (availableWidth - moreButtonWidth - itemsGap));
93
+ this._visibleItems.splice(0, Infinity, ...this.parsedItems.slice(0, lastVisibleIndex + 1));
94
+ this._overflowItems.splice(0, Infinity, ...this.parsedItems.slice(lastVisibleIndex + 1));
95
+ this._showMoreButton = true;
96
+ this.refreshRendering();
118
97
  }
119
98
  }
120
- handleKeyDownDropdown(e) {
99
+ handleKeyDown(e) {
121
100
  e.stopPropagation();
122
- this.handleUpArrow(e);
123
- this.handleDownArrow(e);
124
- this.handleEscapeKey(e);
125
- }
126
- handleLeftArrow(e) {
127
101
  if (isLeft(e)) {
128
102
  this.focusPrevNavItem(e);
129
103
  }
130
- }
131
- handleRightArrow(e) {
132
104
  if (isRight(e)) {
133
105
  this.focusNextNavItem(e);
134
106
  }
135
- }
136
- handleUpArrow(e) {
137
- if (isUp(e)) {
138
- this.focusPrevNavItem(e);
139
- }
140
- }
141
- handleDownArrow(e) {
142
- if (isDown(e)) {
143
- this.focusNextNavItem(e);
107
+ if (isEscape(e)) {
108
+ e.target.closeDropdown();
144
109
  }
145
110
  }
146
- handleOutsideClick() {
147
- document.addEventListener("click", () => {
148
- if (this._dropdown) {
149
- this.onCloseDropdown();
150
- }
151
- });
152
- }
153
- handleMobileOpen() {
154
- this._rootHolder?.classList.toggle(mobileMenuActiveClass);
155
- this._mobileBtnExpanded = !this._mobileBtnExpanded;
156
- }
157
- handleToggleDropdown() {
158
- this._dropdownMoreIsOpen = !this._dropdownMoreIsOpen;
159
- }
160
111
  focusPrevNavItem(e) {
161
- const el = e.target;
162
- const currentItem = el.parentElement;
163
- const currentSelectedIndex = this.getCurrentIndex(currentItem);
164
- const lastItemIndex = this.navigationItems.length - 1;
112
+ const item = e.target;
113
+ const currentSelectedIndex = this.getCurrentIndex(item);
114
+ const lastItemIndex = this.domNavItems.length - 1;
165
115
  const previousSelectIndex = currentSelectedIndex - 1 < 0 ? lastItemIndex : currentSelectedIndex - 1;
166
- const listItem = this.getListItemByIndex(previousSelectIndex);
167
- listItem?.focus();
116
+ this.domNavItems[previousSelectIndex]?.focus();
168
117
  }
169
118
  focusNextNavItem(e) {
170
- const el = e.target;
171
- const currentItem = el.parentElement;
172
- const currentSelectedIndex = this.getCurrentIndex(currentItem);
173
- const nextSelectIndex = currentSelectedIndex + 1 > this.navigationItems.length - 1 ? 0 : currentSelectedIndex + 1;
174
- const listItem = this.getListItemByIndex(nextSelectIndex);
175
- listItem?.focus();
176
- }
177
- onCloseDropdown() {
178
- this._dropdownMoreIsOpen = false;
119
+ const item = e.target;
120
+ const currentSelectedIndex = this.getCurrentIndex(item);
121
+ const nextSelectIndex = currentSelectedIndex + 1 > this.domNavItems.length - 1 ? 0 : currentSelectedIndex + 1;
122
+ this.domNavItems[nextSelectIndex].focus();
179
123
  }
180
124
  getItemWidth(item) {
181
125
  const canvas = document.createElement("canvas");
182
126
  const context = canvas.getContext("2d");
183
- context.font = "16px / 17.6px '72 Brand Variable'";
127
+ context.font = canvasContentFont;
184
128
  return Math.ceil(context.measureText(item.title).width);
185
129
  }
186
- getCurrentIndex(item) {
187
- return this.navigationItems.indexOf(item);
188
- }
189
- getListItemByIndex(index) {
190
- return this.navigationItems[index].querySelector(".udex-secondary-navigation__link-btn");
191
- }
192
- getDropdown() {
193
- return this.shadowRoot.querySelector(".udex-secondary-navigation__dropdown");
194
- }
195
- getMobileButtonMenu() {
196
- return this.shadowRoot?.querySelector(".udex-secondary-navigation__mobile-opener");
197
- }
198
- getMoreButton() {
199
- return this.shadowRoot.querySelector(".udex-secondary-navigation__list-item_more > button");
200
- }
201
130
  getMoreButtonWidth() {
202
131
  const canvas = document.createElement("canvas");
203
132
  const context = canvas.getContext("2d");
204
- context.font = "16px / 17.6px '72 Brand Variable'";
205
- return Math.ceil(context.measureText("More").width) + 4 + 16;
133
+ context.font = canvasContentFont;
134
+ return Math.ceil(context.measureText(this.moreButtonText).width);
206
135
  }
207
- parseArrayFromString(string) {
208
- return string ? JSON.parse(string) : [];
136
+ getCurrentIndex(item) {
137
+ return this.domNavItems.indexOf(item);
209
138
  }
210
- handleNavigationClick(e) {
211
- const target = e.target;
212
- const clickedIndex = this.domNavItems.indexOf(target);
139
+ handleItemClick(e) {
140
+ const clickedItem = e.detail.item;
213
141
  const prevented = !this.fireEvent("item-click", {
214
142
  originalEvent: e,
215
- clickedItem: target,
216
- clickedIndex,
143
+ clickedItem,
144
+ clickedIndex: this.getCurrentIndex(clickedItem),
217
145
  }, true);
218
146
  if (prevented) {
219
147
  e.preventDefault();
220
148
  return;
221
149
  }
222
- if (this.domNavItems.length > 0) {
223
- this.navigationList.forEach(item => delete item.active);
224
- this.navigationList[clickedIndex].active = true;
225
- this.refreshRendering();
150
+ this._clickedNavItem = clickedItem;
151
+ this.closePrevDropdown(clickedItem._id);
152
+ if (!clickedItem.hasNestedItems) {
153
+ this.setActiveItem(this.parsedItems, clickedItem);
226
154
  }
227
155
  }
228
- get navigationItems() {
229
- return Array.from(this.shadowRoot.querySelectorAll(".udex-secondary-navigation__link-btn-wrap"));
156
+ handleSubItemClick(e) {
157
+ const item = e.detail.item;
158
+ const { items } = item;
159
+ const prevented = !this.fireEvent("sub-item-click", {
160
+ originalEvent: e,
161
+ clickedItem: item,
162
+ }, true);
163
+ if (prevented) {
164
+ e.preventDefault();
165
+ return;
166
+ }
167
+ if (this.isMobileScreen && !items) {
168
+ this.mobileNav.closeDropdown();
169
+ }
170
+ if (!items) {
171
+ this.setActiveItem(this.parsedItems, item);
172
+ this._clickedNavItem?.closeDropdown();
173
+ }
174
+ }
175
+ setActiveItem(navItems, clickedItem) {
176
+ const updateNav = (items, { title, path }) => {
177
+ items.forEach(item => {
178
+ if (item.title === title && item.path === path) {
179
+ item.active = true;
180
+ return;
181
+ }
182
+ delete item.active;
183
+ if (item.items) {
184
+ updateNav(item.items, clickedItem);
185
+ }
186
+ });
187
+ };
188
+ updateNav(navItems, clickedItem);
189
+ this.navItems = JSON.stringify(navItems);
190
+ }
191
+ handleOutsideClick() {
192
+ document.addEventListener("click", (e) => {
193
+ if (this.isMobileScreen && e.target !== this) {
194
+ this.mobileNav?.closeDropdown();
195
+ return;
196
+ }
197
+ const isClickedNavItem = e.composedPath().includes(this._clickedNavItem);
198
+ if (this.isDesktopScreen && !isClickedNavItem && this._clickedNavItem) {
199
+ this._clickedNavItem.closeDropdown();
200
+ }
201
+ });
202
+ }
203
+ closePrevDropdown(clickedItemId) {
204
+ this.domNavItems.forEach(item => {
205
+ if (clickedItemId !== item._id) {
206
+ item.closeDropdown();
207
+ }
208
+ });
209
+ }
210
+ parseArrayFromString(string) {
211
+ return string ? JSON.parse(string) : [];
230
212
  }
231
213
  get domNavItems() {
232
- const navigationItemsSelector = ".udex-secondary-navigation__item:not(.udex-secondary-navigation__link-btn-more), .udex-secondary-navigation__dropdown-item";
233
- const domNavItems = this.shadowRoot?.querySelectorAll(navigationItemsSelector);
234
- return domNavItems ? Array.from(domNavItems) : [];
214
+ const items = this.shadowRoot?.querySelectorAll("udex-secondary-navigation-item");
215
+ return items ? Array.from(items) : [];
235
216
  }
236
217
  get rootHolder() {
237
218
  return (this.shadowRoot ? this.shadowRoot.querySelector(".udex-secondary-navigation__root") : undefined);
@@ -239,45 +220,39 @@ let UDExSecondaryNavigation = UDExSecondaryNavigation_1 = class UDExSecondaryNav
239
220
  get heading() {
240
221
  return (this.shadowRoot ? this.shadowRoot.querySelector(".udex-secondary-navigation__heading") : undefined);
241
222
  }
223
+ get mobileNav() {
224
+ return (this.shadowRoot ? this.shadowRoot.querySelector(".udex-secondary-navigation__mobile-nav") : undefined);
225
+ }
242
226
  get optionalButtons() {
243
227
  return this.shadowRoot?.querySelector(".udex-secondary-navigation__buttons");
244
228
  }
245
- get linksList() {
246
- return this.shadowRoot?.querySelector(".udex-secondary-navigation__list");
247
- }
248
229
  get moreButtonText() {
249
230
  return UDExSecondaryNavigation_1.i18nBundle.getText(MORE);
250
231
  }
251
- get activeItemText() {
252
- const activeItem = this.navigationList.find(item => item.active);
253
- return activeItem ? activeItem?.title : "";
232
+ get parsedItems() {
233
+ return this.parseArrayFromString(this.navItems);
254
234
  }
255
- get moreClass() {
256
- const rootClasses = "udex-secondary-navigation__list-item udex-secondary-navigation__list-item_more";
257
- return this._dropdownMoreIsOpen ? `${rootClasses} udex-secondary-navigation__list-item_open` : `${rootClasses}`;
258
- }
259
- get navigationList() {
260
- if (!this._navigationList) {
261
- this._navigationList = this.parseArrayFromString(this.navItems);
262
- }
263
- return this._navigationList;
235
+ get visibleItems() {
236
+ return this.isDesktopScreen ? this._visibleItems : this.parsedItems;
264
237
  }
265
- get items() {
266
- return this.isDesktopScreen ? this._navItems : this.navigationList;
238
+ get hasBreadcrumbsSlot() {
239
+ return !!this.getSlottedNodes("breadcrumbs").length && this.isDesktopScreen;
267
240
  }
268
- get moreIsActive() {
269
- return this._overflowItems.some(item => item.active);
241
+ get hasDesktopButtonsSlot() {
242
+ return this.hasButtons && this.isDesktopScreen;
270
243
  }
271
- get rootClass() {
272
- const centeredClass = this.hasBreadcrumbsSlot ? "" : `${rootClass}_centered`;
273
- return `${rootClass} ${centeredClass}`;
244
+ get hasMobileButtonsSlot() {
245
+ return this.hasButtons && this.isMobileScreen;
274
246
  }
275
- get hasBreadcrumbsSlot() {
276
- return !!this.getSlottedNodes("breadcrumbs").length;
247
+ get hasButtons() {
248
+ return !!this.getSlottedNodes("buttons").length;
277
249
  }
278
250
  get isDesktopScreen() {
279
251
  return window.innerWidth > breakpointSizeS;
280
252
  }
253
+ get isMobileScreen() {
254
+ return window.innerWidth <= breakpointSizeS;
255
+ }
281
256
  };
282
257
  __decorate([
283
258
  property({ type: String })
@@ -294,15 +269,18 @@ __decorate([
294
269
  __decorate([
295
270
  property()
296
271
  ], UDExSecondaryNavigation.prototype, "title", void 0);
272
+ __decorate([
273
+ property()
274
+ ], UDExSecondaryNavigation.prototype, "titleHref", void 0);
297
275
  __decorate([
298
276
  property({ type: Boolean, noAttribute: true })
299
- ], UDExSecondaryNavigation.prototype, "_dropdownMoreIsOpen", void 0);
277
+ ], UDExSecondaryNavigation.prototype, "_selectedMore", void 0);
300
278
  __decorate([
301
- property({ type: HTMLElement, defaultValue: [], noAttribute: true })
279
+ property({ type: Object, multiple: true, noAttribute: true })
302
280
  ], UDExSecondaryNavigation.prototype, "_overflowItems", void 0);
303
281
  __decorate([
304
- property({ type: HTMLElement, defaultValue: [], noAttribute: true })
305
- ], UDExSecondaryNavigation.prototype, "_navItems", void 0);
282
+ property({ type: Object, multiple: true, noAttribute: true })
283
+ ], UDExSecondaryNavigation.prototype, "_visibleItems", void 0);
306
284
  __decorate([
307
285
  property({ type: Boolean, noAttribute: true })
308
286
  ], UDExSecondaryNavigation.prototype, "_requestRender", void 0);
@@ -315,7 +293,7 @@ UDExSecondaryNavigation = UDExSecondaryNavigation_1 = __decorate([
315
293
  renderer: litRender,
316
294
  styles: SecondaryNavigationCss,
317
295
  template: SecondaryNavigationTemplate,
318
- dependencies: [UI5Icon],
296
+ dependencies: [UDExSecondaryNavigationItem],
319
297
  })
320
298
  /**
321
299
  * Fires when item is clicked
@@ -337,6 +315,23 @@ UDExSecondaryNavigation = UDExSecondaryNavigation_1 = __decorate([
337
315
  },
338
316
  },
339
317
  })
318
+ /**
319
+ * Fires when sub item is clicked
320
+ *
321
+ * @allowPreventDefault
322
+ * @public
323
+ */
324
+ ,
325
+ event("sub-item-click", {
326
+ detail: {
327
+ originalEvent: {
328
+ type: Event,
329
+ },
330
+ clickedItem: {
331
+ type: HTMLElement,
332
+ },
333
+ },
334
+ })
340
335
  ], UDExSecondaryNavigation);
341
336
  UDExSecondaryNavigation.define();
342
337
  export default UDExSecondaryNavigation;