@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
@@ -0,0 +1,137 @@
1
+ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
+ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
3
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
5
+ import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
6
+
7
+ import Icon from "@ui5/webcomponents/dist/Icon.js";
8
+ import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
9
+ import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
10
+ import UDExCheckbox from "./Checkbox.js";
11
+ import UDExRadioButton from "./RadioButton.js";
12
+ import UDExStatusMessage from "./StatusMessage.js";
13
+ import InputGroupTemplate from "./generated/templates/InputGroupTemplate.lit.js";
14
+ import {
15
+ VALUE_STATE_ERROR,
16
+ VALUE_STATE_SUCCESS,
17
+ } from "./generated/i18n/i18n-defaults.js";
18
+
19
+ // Styles
20
+ import InputGroupCss from "./generated/themes/InputGroup.css.js";
21
+
22
+ export enum GroupValueState {
23
+ Standard = "Standard",
24
+ Error = "Error",
25
+ Success = "Success",
26
+ }
27
+
28
+ export enum Orientation {
29
+ Vertical = "Vertical",
30
+ Horizontal = "Horizontal",
31
+ }
32
+
33
+ /**
34
+ * @class
35
+ *
36
+ * <h3 class="comment-api-title">Overview</h3>
37
+ *
38
+ *
39
+ * <h3>Usage</h3>
40
+ *
41
+ * For the <code>udex-input-group</code>
42
+ * <h3>ES6 Module Import</h3>
43
+ *
44
+ * <code>import "@udex/web-components/dist/InputGroup.js";</code>
45
+ *
46
+ * @constructor
47
+ * @extends UI5Element
48
+ * @public
49
+ */
50
+
51
+ @customElement({
52
+ tag: "udex-input-group",
53
+ renderer: litRender,
54
+ styles: InputGroupCss,
55
+ template: InputGroupTemplate,
56
+ dependencies: [Icon, UDExStatusMessage],
57
+ })
58
+
59
+ class UDExInputGroup extends UI5Element {
60
+ /**
61
+ * Defines the group name of the component.
62
+ *
63
+ * @public
64
+ */
65
+ @property({ type: String })
66
+ groupName?: string;
67
+
68
+ /**
69
+ * Defines the orientation of the component.
70
+ *
71
+ * @default "Vertical"
72
+ * @public
73
+ */
74
+ @property({ type: Orientation, defaultValue: Orientation.Vertical })
75
+ orientation!: `${Orientation}`;
76
+
77
+ /**
78
+ * Defines the value state of the component.
79
+ *
80
+ * @default "Standard"
81
+ * @public
82
+ */
83
+ @property({ type: GroupValueState, defaultValue: GroupValueState.Standard })
84
+ valueState!: `${GroupValueState}`;
85
+
86
+ /**
87
+ * Defines supporting text under the Input Group.
88
+ *
89
+ * @default ""
90
+ * @public
91
+ */
92
+ @property({ type: String })
93
+ supportingText!: string;
94
+
95
+ /**
96
+ * Slot for input elements items.
97
+ *
98
+ * @slot
99
+ * @public
100
+ */
101
+ @slot({ type: HTMLElement, "default": true, individualSlots: true })
102
+ items!: Array<UDExCheckbox | UDExRadioButton>;
103
+
104
+ static i18nBundle: I18nBundle;
105
+
106
+ static async onDefine() {
107
+ UDExInputGroup.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
108
+ }
109
+
110
+ get _items() {
111
+ return this.items.map(el => {
112
+ if (this.groupName) { el.name = this.groupName; }
113
+ return {
114
+ item: el,
115
+ };
116
+ });
117
+ }
118
+
119
+ get valueStateTypeMappings(): Record<string, string> {
120
+ return {
121
+ "Success": UDExInputGroup.i18nBundle.getText(VALUE_STATE_SUCCESS),
122
+ "Error": UDExInputGroup.i18nBundle.getText(VALUE_STATE_ERROR),
123
+ };
124
+ }
125
+
126
+ get hasValueState(): boolean {
127
+ return this.valueState !== GroupValueState.Standard;
128
+ }
129
+
130
+ get valueStateText(): string | undefined {
131
+ return this.supportingText || this.valueStateTypeMappings[this.valueState];
132
+ }
133
+ }
134
+
135
+ UDExInputGroup.define();
136
+
137
+ export default UDExInputGroup;
package/src/List.ts CHANGED
@@ -9,6 +9,8 @@ import {
9
9
  isDown,
10
10
  isHome,
11
11
  isEnd,
12
+ isEnter,
13
+ isSpace,
12
14
  } from "@ui5/webcomponents-base/dist/Keys.js";
13
15
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
14
16
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
@@ -154,25 +156,7 @@ class UDExList extends UI5Element {
154
156
 
155
157
  handleItemPress(e: CustomEvent) {
156
158
  const clickedItem: UDExListItemBase = e.detail.item;
157
-
158
- if (this.modeSingleSelect && !this.controlled) {
159
- this.revertSelectedItems(this.getSelectedItems());
160
- clickedItem.selected = true;
161
- }
162
-
163
- if (this.modeRadioGroup && !this.controlled) {
164
- const groupHeader = clickedItem.parentElement as UDExListGroupHeaderBase;
165
- const groupItems = groupHeader.getItems() as Array<UDExListItemBase>;
166
- this.revertSelectedItems(groupItems);
167
-
168
- clickedItem.selected = true;
169
- }
170
-
171
- this.fireEvent("selection-change", {
172
- listItems: this.getItemsFromList(),
173
- selectedItems: this.getSelectedItems(),
174
- item: clickedItem,
175
- });
159
+ this.onItemPress(clickedItem);
176
160
  }
177
161
 
178
162
  handleKeyDown(e: KeyboardEvent) {
@@ -180,6 +164,15 @@ class UDExList extends UI5Element {
180
164
  this.handleDownArrow(e);
181
165
  this.handleHomeKey(e);
182
166
  this.handleEndKey(e);
167
+ this.handleEnterOrSpace(e);
168
+ }
169
+
170
+ handleEnterOrSpace(e: KeyboardEvent) {
171
+ if (isEnter(e) || isSpace(e)) {
172
+ e.preventDefault();
173
+ const clickedItem = e.target as UDExListItemBase;
174
+ this.onItemPress(clickedItem);
175
+ }
183
176
  }
184
177
 
185
178
  handleUpArrow(e: KeyboardEvent) {
@@ -193,20 +186,28 @@ class UDExList extends UI5Element {
193
186
  const nonInteractiveHeader = items[previousSelectIndex].nonInteractive;
194
187
 
195
188
  if (nonInteractiveHeader && previousSelectIndex === 0) {
189
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
190
+ this.setTabIndexByIndex(items, lastItemIndex);
196
191
  items[lastItemIndex].focus();
197
192
  return;
198
193
  }
199
194
 
200
195
  if (nonInteractiveHeader) {
196
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
197
+ this.setTabIndexByIndex(items, previousSelectIndex - 1);
201
198
  items[previousSelectIndex - 1].focus();
202
199
  return;
203
200
  }
204
201
 
205
202
  if (isHeaderItem) {
203
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
204
+ this.setTabIndexByIndex(items, previousSelectIndex);
206
205
  this.focusHeader(items[previousSelectIndex]);
207
206
  return;
208
207
  }
209
208
 
209
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
210
+ this.setTabIndexByIndex(items, previousSelectIndex);
210
211
  items[previousSelectIndex].focus();
211
212
  }
212
213
  }
@@ -221,15 +222,21 @@ class UDExList extends UI5Element {
221
222
  const nonInteractiveHeader = items[nextSelectIndex].nonInteractive;
222
223
 
223
224
  if (nonInteractiveHeader) {
225
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
226
+ this.setTabIndexByIndex(items, nextSelectIndex + 1);
224
227
  items[nextSelectIndex + 1].focus();
225
228
  return;
226
229
  }
227
230
 
228
231
  if (isHeaderItem) {
232
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
233
+ this.setTabIndexByIndex(items, nextSelectIndex);
229
234
  this.focusHeader(items[nextSelectIndex]);
230
235
  return;
231
236
  }
232
237
 
238
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
239
+ this.setTabIndexByIndex(items, nextSelectIndex);
233
240
  items[nextSelectIndex].focus();
234
241
  }
235
242
  }
@@ -238,20 +245,27 @@ class UDExList extends UI5Element {
238
245
  if (isHome(e)) {
239
246
  e.preventDefault();
240
247
  const items = this.getKeyboardNavigationItems();
248
+ const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
241
249
  const firstItem = items[0];
242
250
  const isHeaderItem = firstItem.isGroup;
243
251
  const nonInteractiveItem = firstItem.nonInteractive;
244
252
 
245
253
  if (nonInteractiveItem) {
254
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
255
+ this.setTabIndexByIndex(items, 1);
246
256
  items[1].focus();
247
257
  return;
248
258
  }
249
259
 
250
260
  if (isHeaderItem) {
261
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
262
+ this.setTabIndexByIndex(items, 0);
251
263
  this.focusHeader(items[0]);
252
264
  return;
253
265
  }
254
266
 
267
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
268
+ this.setTabIndexByIndex(items, 0);
255
269
  items[0].focus();
256
270
  }
257
271
  }
@@ -260,10 +274,37 @@ class UDExList extends UI5Element {
260
274
  if (isEnd(e)) {
261
275
  e.preventDefault();
262
276
  const items = this.getKeyboardNavigationItems();
277
+ const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
278
+
279
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
280
+ this.setTabIndexByIndex(items, items.length - 1);
263
281
  items[items.length - 1].focus();
264
282
  }
265
283
  }
266
284
 
285
+ onItemPress(clickedItem :UDExListItemBase) {
286
+ if (this.modeSingleSelect && !this.controlled) {
287
+ this.revertSelectedItems(this.getSelectedItems());
288
+ clickedItem.selected = true;
289
+ }
290
+
291
+ if (this.modeRadioGroup && !this.controlled) {
292
+ const groupHeader = clickedItem.parentElement as UDExListGroupHeaderBase;
293
+ const groupItems = groupHeader.getItems() as Array<UDExListItemBase>;
294
+ this.revertSelectedItems(groupItems);
295
+ clickedItem.selected = true;
296
+ }
297
+
298
+ this.resetTabIndexes();
299
+ clickedItem._tabIndex = "0";
300
+
301
+ this.fireEvent("selection-change", {
302
+ listItems: this.getItemsFromList(),
303
+ selectedItems: this.getSelectedItems(),
304
+ item: clickedItem,
305
+ });
306
+ }
307
+
267
308
  revertSelectedItems(items: Array<UDExListItemBase>) {
268
309
  items.forEach((item: UDExListItemBase) => {
269
310
  if (!item.disabled) {
@@ -277,6 +318,14 @@ class UDExList extends UI5Element {
277
318
  header.focus();
278
319
  }
279
320
 
321
+ unsetTabIndexByIndex(items: UDExListItemBase[], index: number) {
322
+ items[index]._tabIndex = "-1";
323
+ }
324
+
325
+ setTabIndexByIndex(items: UDExListItemBase[], index: number) {
326
+ items[index]._tabIndex = "0";
327
+ }
328
+
280
329
  getItems(): Array<UDExListItemBase> {
281
330
  return this.getSlottedNodes<UDExListItemBase>("items");
282
331
  }
@@ -311,15 +360,37 @@ class UDExList extends UI5Element {
311
360
  }
312
361
 
313
362
  prepareListItemsMode() {
314
- const slottedItems = this.getItemsFromList();
315
- slottedItems.forEach(item => {
363
+ this.getItemsFromList().forEach((item, index) => {
316
364
  item.mode = this.mode;
317
365
  item.controlled = this.controlled;
318
366
  item.type = this.type;
319
367
  item._icon = this.itemIcon;
368
+ item._tabIndex = this.getTabIndex(index, item);
320
369
  });
321
370
  }
322
371
 
372
+ getTabIndex(index: number, item: UDExListItemBase): string {
373
+ if ((item.modeSingleSelect || this.modeRadioGroup) && this.isGroupList && index === 1) {
374
+ return "0";
375
+ }
376
+
377
+ if (this.modeSelected && index === 0) {
378
+ return "0";
379
+ }
380
+
381
+ return "-1";
382
+ }
383
+
384
+ resetTabIndexes() {
385
+ this.getItemsFromList().forEach(item => {
386
+ item._tabIndex = "-1";
387
+ });
388
+ }
389
+
390
+ get isGroupList(): boolean {
391
+ return this.getItemsFromList().some(item => item.isGroup);
392
+ }
393
+
323
394
  get ariaLabelModeText(): string {
324
395
  if (this.modeSingleSelect || this.modeRadioGroup) {
325
396
  return UDExList.i18nBundle.getText(ARIA_LABEL_LIST_SELECTABLE);
@@ -1,6 +1,8 @@
1
1
  <li
2
2
  part="item"
3
- class="udex-list__group">
3
+ class="udex-list__group"
4
+ role="group"
5
+ aria-labelledby="group-heading">
4
6
  <ul
5
7
  class="udex-list__group-list"
6
8
  @ui5-item-press="{{getHandleGroupItemsClick}}">
@@ -15,7 +17,7 @@
15
17
 
16
18
  {{#*inline "multi-or-radio-group-header"}}
17
19
  {{#if isNonActiveHeader}}
18
- <header class="udex-list__inactive-header" role="presentation">
20
+ <header id="group-heading" class="udex-list__inactive-header">
19
21
  <span class="udex-list__header-title">{{label}}</span>
20
22
  {{#if supportingText}}
21
23
  <span class="udex-list__supporting-text ">{{supportingText}}</span>
@@ -23,11 +25,13 @@
23
25
  </header>
24
26
  {{else}}
25
27
  <udex-list-item
28
+ id="group-heading"
26
29
  _additional-class-name="{{_additionalClassName}}"
27
30
  ?selected="{{selected}}"
31
+ _tab-index="{{_effectiveTabIndex}}"
28
32
  ?indeterminate="{{indeterminate}}"
29
33
  part="group-item"
30
- role="listitem"
34
+ role="none"
31
35
  class="{{className}}"
32
36
  mode="{{mode}}"
33
37
  ?controlled="{{controlled}}"
@@ -55,8 +59,8 @@
55
59
  part="icon">
56
60
  </ui5-icon>
57
61
  {{/if}}
58
- <div class="udex-list__header" role="presentation">
59
- <span class="udex-list__header-title">{{label}}</span>
62
+ <div class="udex-list__header">
63
+ <span id="group-heading" class="udex-list__header-title">{{label}}</span>
60
64
  {{#if supportingText}}
61
65
  <span class="udex-list__supporting-text {{sizeClass}}">{{supportingText}}</span>
62
66
  {{/if}}
package/src/ListItem.hbs CHANGED
@@ -2,7 +2,7 @@
2
2
  <li
3
3
  part="item"
4
4
  role="{{roleItem}}"
5
- tabindex="{{_tabIndex}}"
5
+ tabindex="{{_effectiveTabIndex}}"
6
6
  aria-disabled="{{_ariaDisabled}}"
7
7
  aria-labelledby="{{_accessibleNameRef}}"
8
8
  class="{{className}}"
@@ -14,6 +14,7 @@
14
14
  @focusin="{{handleFocusIn}}"
15
15
  @focusout="{{handleFocusOut}}"
16
16
  aria-selected="{{selected}}"
17
+ aria-current="{{selected}}"
17
18
  ?divider="{{divider}}"
18
19
  _id="{{this._id}}">
19
20
  {{#if modeMultiSelect}}
package/src/ListItem.ts CHANGED
@@ -371,13 +371,6 @@ class UDExListItem extends UDExListItemBase {
371
371
  return this.disabled ? true : undefined;
372
372
  }
373
373
 
374
- get _tabIndex() {
375
- if (this.disabled) {
376
- return -1;
377
- }
378
- return 0;
379
- }
380
-
381
374
  get modeSingleContent() {
382
375
  return this.mode === ListMode.SingleContent;
383
376
  }
@@ -111,6 +111,16 @@ class UDExListItemBase extends UI5Element {
111
111
  @property({ type: String, defaultValue: "" })
112
112
  _icon?: string;
113
113
 
114
+ @property({ type: String })
115
+ _tabIndex!: number | string;
116
+
117
+ get _effectiveTabIndex() {
118
+ if (this.disabled) {
119
+ return -1;
120
+ }
121
+ return this._tabIndex;
122
+ }
123
+
114
124
  get numberOfItem() {
115
125
  return [...this.parentNode!.children].indexOf(this) + 1;
116
126
  }
@@ -127,6 +137,10 @@ class UDExListItemBase extends UI5Element {
127
137
  return this.mode === ListMode.MultiSelect;
128
138
  }
129
139
 
140
+ get modeSingleSelect() {
141
+ return this.mode === ListMode.SingleSelect;
142
+ }
143
+
130
144
  get modeMultiSelectOrRadioGroup() {
131
145
  return this.modeMultiSelect || this.modeRadioGroup;
132
146
  }
@@ -6,6 +6,7 @@
6
6
  class="{{groupListClassName}}"
7
7
  @ui5-item-press="{{handleSelectAllGroupItemsPress}}">
8
8
  <udex-list-item
9
+ _tab-index="{{_effectiveTabIndex}}"
9
10
  role="list"
10
11
  _additional-class-name="{{additionalClassName}}"
11
12
  class="{{className}}"
@@ -1,8 +1,10 @@
1
1
  <nav class="udex-masthead-mobile-menu" @keydown="{{handleKeyDown}}">
2
2
  <div class="udex-masthead-mobile-menu__nav-holder">
3
- <div class="udex-masthead-mobile-menu__list-search">
4
- <slot name="search"></slot>
5
- </div>
3
+ {{#if hasSearchSlot}}
4
+ <div class="udex-masthead-mobile-menu__list-search">
5
+ <slot name="search"></slot>
6
+ </div>
7
+ {{/if}}
6
8
  <ul class="udex-masthead-mobile-menu__list" role="menu">
7
9
  {{#if showNavigation}}
8
10
  {{>nav-items}}
@@ -33,15 +35,6 @@
33
35
  back-to-categories>
34
36
  </udex-masthead-menu-item>
35
37
  </li>
36
- {{#if _category.url}}
37
- <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
38
- <udex-masthead-menu-item
39
- url="{{this._category.url}}"
40
- label="{{categoryLinkText}}"
41
- has-border>
42
- </udex-masthead-menu-item>
43
- </li>
44
- {{/if}}
45
38
  {{>category-items}}
46
39
  {{/if}}
47
40
  </ul>
@@ -64,13 +57,7 @@
64
57
  {{#*inline "nav-items"}}
65
58
  {{#each items}}
66
59
  <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
67
- {{#if this.href}}
68
- <udex-masthead-menu-item
69
- url="{{this.href}}"
70
- label="{{this.innerText}}"
71
- has-border>
72
- </udex-masthead-menu-item>
73
- {{else}}
60
+ {{#if this.subItems}}
74
61
  <udex-masthead-menu-item
75
62
  @click="{{../handleMenuItemClick}}"
76
63
  label="{{this.innerText}}"
@@ -80,29 +67,65 @@
80
67
  icon-end
81
68
  first-level>
82
69
  </udex-masthead-menu-item>
70
+ {{else}}
71
+ <udex-masthead-menu-item
72
+ url="{{this.href}}"
73
+ label="{{this.innerText}}"
74
+ has-border>
75
+ </udex-masthead-menu-item>
83
76
  {{/if}}
84
77
  </li>
85
78
  {{/each}}
86
79
  {{/inline}}
87
80
 
88
81
  {{#*inline "categories"}}
89
- {{#each _categories}}
82
+ {{#if _clickedItem.href}}
90
83
  <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
91
84
  <udex-masthead-menu-item
92
- @click="{{../handleMenuCategoryClick}}"
93
- url="{{this.url}}"
94
- id="{{@index}}"
95
- label="{{this.category}}"
96
- type="Button"
97
- second-level
98
- has-border
99
- icon-end>
85
+ url="{{_clickedItem.href}}"
86
+ label="{{overviewLinkText}}"
87
+ has-border>
100
88
  </udex-masthead-menu-item>
101
89
  </li>
90
+ {{/if}}
91
+ {{#each _categories}}
92
+ {{#if this.category}}
93
+ <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
94
+ <udex-masthead-menu-item
95
+ @click="{{../handleMenuCategoryClick}}"
96
+ url="{{this.url}}"
97
+ id="{{@index}}"
98
+ label="{{this.category}}"
99
+ type="Button"
100
+ second-level
101
+ has-border
102
+ icon-end>
103
+ </udex-masthead-menu-item>
104
+ </li>
105
+ {{else}}
106
+ {{#each this.items}}
107
+ <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
108
+ <udex-masthead-menu-item
109
+ url="{{this.url}}"
110
+ label="{{this.title}}"
111
+ has-border>
112
+ </udex-masthead-menu-item>
113
+ </li>
114
+ {{/each}}
115
+ {{/if}}
102
116
  {{/each}}
103
117
  {{/inline}}
104
118
 
105
119
  {{#*inline "category-items"}}
120
+ {{#if _category.url}}
121
+ <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
122
+ <udex-masthead-menu-item
123
+ url="{{this._category.url}}"
124
+ label="{{overviewLinkText}}"
125
+ has-border>
126
+ </udex-masthead-menu-item>
127
+ </li>
128
+ {{/if}}
106
129
  {{#each _category.items}}
107
130
  <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
108
131
  <udex-masthead-menu-item
@@ -230,13 +230,13 @@ class UDExMastheadMobileMenu extends UI5Element {
230
230
  const item = this.getItemByList(e.target as UDExMastheadItem);
231
231
  this._clickedItem = item;
232
232
  this._categories = this.getCategories(item.getSubItems());
233
+ this.setCategoryByItem(item);
233
234
  this._showCategories = true;
234
235
  }
235
236
 
236
237
  openCategoryItems(e: Event) {
237
238
  const item = e.target as UDExMastheadMenuItem;
238
- const index = Number(item.getAttribute("id"));
239
- this._category = this._categories[index];
239
+ this.setCategoryByItem(item);
240
240
  this._showCategories = false;
241
241
  this._showCategoryItems = true;
242
242
  }
@@ -252,6 +252,11 @@ class UDExMastheadMobileMenu extends UI5Element {
252
252
  this._showCategoryItems = false;
253
253
  }
254
254
 
255
+ setCategoryByItem(item: UDExMastheadMenuItem | UDExMastheadItem) {
256
+ const index = Number(item.getAttribute("id"));
257
+ this._category = this._categories[index];
258
+ }
259
+
255
260
  getItemByList(el: UDExMastheadItem): UDExMastheadItem {
256
261
  const items = [
257
262
  ...this.items,
@@ -291,7 +296,7 @@ class UDExMastheadMobileMenu extends UI5Element {
291
296
  return !this._showCategories && !this._showCategoryItems;
292
297
  }
293
298
 
294
- get categoryLinkText(): string {
299
+ get overviewLinkText(): string {
295
300
  return UDExMastheadMobileMenu.i18nBundle.getText(OVERVIEW);
296
301
  }
297
302
 
@@ -306,6 +311,10 @@ class UDExMastheadMobileMenu extends UI5Element {
306
311
  get hasExploreBtnSlot(): boolean {
307
312
  return !!this.getSlottedNodes("exploreSapMobileButton").length;
308
313
  }
314
+
315
+ get hasSearchSlot(): boolean {
316
+ return !!this.search.length;
317
+ }
309
318
  }
310
319
 
311
320
  UDExMastheadMobileMenu.define();
@@ -24,7 +24,7 @@
24
24
  {{#if logoutLink}}
25
25
  <div class="udex-masthead-profile-menu__actions" @click={{userLogout}}>
26
26
  <udex-masthead-menu-item
27
- url="#"
27
+ url="{{logoutUrl}}"
28
28
  label="{{logoutText}}">
29
29
  </udex-masthead-menu-item>
30
30
  </div>