@sapudex/web-components 0.117.1 → 0.138.0

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 (536) hide show
  1. package/bundle.esm.js +5 -0
  2. package/config/wdio.conf.js +19 -8
  3. package/dist/Accordion.d.ts +1 -1
  4. package/dist/Accordion.js +1 -1
  5. package/dist/Accordion.js.map +1 -1
  6. package/dist/AccordionItem.d.ts +3 -2
  7. package/dist/AccordionItem.js +4 -4
  8. package/dist/AccordionItem.js.map +1 -1
  9. package/dist/Avatar.d.ts +12 -0
  10. package/dist/Avatar.js +22 -1
  11. package/dist/Avatar.js.map +1 -1
  12. package/dist/AvatarGroup.d.ts +28 -0
  13. package/dist/AvatarGroup.js +126 -0
  14. package/dist/AvatarGroup.js.map +1 -0
  15. package/dist/Checkbox.d.ts +1 -1
  16. package/dist/Checkbox.js +1 -1
  17. package/dist/Checkbox.js.map +1 -1
  18. package/dist/CountrySelector.d.ts +24 -6
  19. package/dist/CountrySelector.js +25 -7
  20. package/dist/CountrySelector.js.map +1 -1
  21. package/dist/DatePicker.d.ts +1 -0
  22. package/dist/DatePicker.js +4 -1
  23. package/dist/DatePicker.js.map +1 -1
  24. package/dist/Dropdown.d.ts +12 -2
  25. package/dist/Dropdown.js +18 -6
  26. package/dist/Dropdown.js.map +1 -1
  27. package/dist/FilterMenu.d.ts +26 -6
  28. package/dist/FilterMenu.js +61 -21
  29. package/dist/FilterMenu.js.map +1 -1
  30. package/dist/Footer.d.ts +36 -1
  31. package/dist/Footer.js +35 -37
  32. package/dist/Footer.js.map +1 -1
  33. package/dist/HeroBanner.js +3 -0
  34. package/dist/HeroBanner.js.map +1 -1
  35. package/dist/Link.d.ts +1 -1
  36. package/dist/Link.js +1 -1
  37. package/dist/Link.js.map +1 -1
  38. package/dist/List.d.ts +1 -1
  39. package/dist/List.js +17 -1
  40. package/dist/List.js.map +1 -1
  41. package/dist/ListGroupHeader.d.ts +2 -2
  42. package/dist/ListGroupHeader.js +2 -2
  43. package/dist/ListGroupHeader.js.map +1 -1
  44. package/dist/ListItem.d.ts +3 -3
  45. package/dist/ListItem.js +6 -7
  46. package/dist/ListItem.js.map +1 -1
  47. package/dist/ListSelectAll.d.ts +1 -1
  48. package/dist/ListSelectAll.js +1 -1
  49. package/dist/ListSelectAll.js.map +1 -1
  50. package/dist/MastheadItem.d.ts +10 -1
  51. package/dist/MastheadItem.js +29 -18
  52. package/dist/MastheadItem.js.map +1 -1
  53. package/dist/MastheadMenu.d.ts +5 -0
  54. package/dist/MastheadMenu.js +24 -0
  55. package/dist/MastheadMenu.js.map +1 -1
  56. package/dist/MastheadMenuItem.d.ts +2 -3
  57. package/dist/MastheadMenuItem.js +2 -17
  58. package/dist/MastheadMenuItem.js.map +1 -1
  59. package/dist/MastheadMobileMenu.d.ts +25 -5
  60. package/dist/MastheadMobileMenu.js +135 -21
  61. package/dist/MastheadMobileMenu.js.map +1 -1
  62. package/dist/MastheadProfileMenu.d.ts +13 -4
  63. package/dist/MastheadProfileMenu.js +40 -9
  64. package/dist/MastheadProfileMenu.js.map +1 -1
  65. package/dist/MastheadShell.d.ts +11 -0
  66. package/dist/MastheadShell.js +52 -8
  67. package/dist/MastheadShell.js.map +1 -1
  68. package/dist/MediaPlayer.d.ts +3 -3
  69. package/dist/MediaPlayer.js +115 -25
  70. package/dist/MediaPlayer.js.map +1 -1
  71. package/dist/MessageStrip.js +1 -1
  72. package/dist/MessageStrip.js.map +1 -1
  73. package/dist/Pagination.d.ts +3 -0
  74. package/dist/Pagination.js +16 -4
  75. package/dist/Pagination.js.map +1 -1
  76. package/dist/PasswordField.d.ts +14 -4
  77. package/dist/PasswordField.js +24 -15
  78. package/dist/PasswordField.js.map +1 -1
  79. package/dist/PhoneNumberField.d.ts +32 -0
  80. package/dist/PhoneNumberField.js +51 -2
  81. package/dist/PhoneNumberField.js.map +1 -1
  82. package/dist/RatingBar.d.ts +53 -0
  83. package/dist/RatingBar.js +96 -0
  84. package/dist/RatingBar.js.map +1 -0
  85. package/dist/Review.d.ts +71 -0
  86. package/dist/Review.js +108 -0
  87. package/dist/Review.js.map +1 -0
  88. package/dist/ReviewItem.d.ts +105 -0
  89. package/dist/ReviewItem.js +157 -0
  90. package/dist/ReviewItem.js.map +1 -0
  91. package/dist/Search.d.ts +64 -2
  92. package/dist/Search.js +62 -8
  93. package/dist/Search.js.map +1 -1
  94. package/dist/SearchableListBase.d.ts +1 -1
  95. package/dist/SearchableListBase.js +1 -1
  96. package/dist/SearchableListBase.js.map +1 -1
  97. package/dist/SecondaryNavigation.d.ts +9 -8
  98. package/dist/SecondaryNavigation.js +59 -46
  99. package/dist/SecondaryNavigation.js.map +1 -1
  100. package/dist/SecondaryNavigationItem.d.ts +1 -1
  101. package/dist/SecondaryNavigationItem.js +15 -5
  102. package/dist/SecondaryNavigationItem.js.map +1 -1
  103. package/dist/SecondaryNavigationItemBase.d.ts +16 -2
  104. package/dist/SecondaryNavigationItemBase.js +27 -1
  105. package/dist/SecondaryNavigationItemBase.js.map +1 -1
  106. package/dist/SecondaryNavigationSubItem.d.ts +2 -1
  107. package/dist/SecondaryNavigationSubItem.js +5 -2
  108. package/dist/SecondaryNavigationSubItem.js.map +1 -1
  109. package/dist/SelectBox.d.ts +33 -9
  110. package/dist/SelectBox.js +121 -60
  111. package/dist/SelectBox.js.map +1 -1
  112. package/dist/StatusBadge.d.ts +5 -5
  113. package/dist/StatusBadge.js.map +1 -1
  114. package/dist/Switch.d.ts +20 -0
  115. package/dist/Switch.js +22 -0
  116. package/dist/Switch.js.map +1 -1
  117. package/dist/Tab.d.ts +9 -1
  118. package/dist/Tab.js +4 -1
  119. package/dist/Tab.js.map +1 -1
  120. package/dist/TabNavigation.d.ts +21 -21
  121. package/dist/TabNavigation.js +83 -102
  122. package/dist/TabNavigation.js.map +1 -1
  123. package/dist/Tag.d.ts +22 -7
  124. package/dist/Tag.js +52 -21
  125. package/dist/Tag.js.map +1 -1
  126. package/dist/TagGroup.d.ts +94 -0
  127. package/dist/TagGroup.js +174 -0
  128. package/dist/TagGroup.js.map +1 -0
  129. package/dist/TextArea.d.ts +14 -1
  130. package/dist/TextArea.js +18 -0
  131. package/dist/TextArea.js.map +1 -1
  132. package/dist/TextField.d.ts +32 -13
  133. package/dist/TextField.js +32 -2
  134. package/dist/TextField.js.map +1 -1
  135. package/dist/Tooltip.d.ts +3 -3
  136. package/dist/Tooltip.js +4 -4
  137. package/dist/Tooltip.js.map +1 -1
  138. package/dist/assets/bundle.esm-bb1c7413.js +316 -0
  139. package/dist/assets/messagebundle_en-c677773a.js +1 -0
  140. package/dist/assets/parameters-bundle.css-c897ae23.js +2 -0
  141. package/dist/assets/video.es-60bfb78c.js +228 -0
  142. package/dist/css/themes/AccordionItem.css +1 -1
  143. package/dist/css/themes/Avatar.css +1 -1
  144. package/dist/css/themes/Badge.css +1 -1
  145. package/dist/css/themes/CountrySelector.css +1 -1
  146. package/dist/css/themes/Divider.css +1 -1
  147. package/dist/css/themes/FilterMenu.css +1 -1
  148. package/dist/css/themes/Footer.css +1 -1
  149. package/dist/css/themes/HeroBanner.css +1 -1
  150. package/dist/css/themes/ListItem.css +1 -1
  151. package/dist/css/themes/MastheadItem.css +1 -1
  152. package/dist/css/themes/MastheadMobileMenu.css +1 -1
  153. package/dist/css/themes/MastheadShell.css +1 -1
  154. package/dist/css/themes/Modal.css +1 -1
  155. package/dist/css/themes/Pagination.css +1 -1
  156. package/dist/css/themes/PhoneNumberField.css +1 -1
  157. package/dist/css/themes/RatingBar.css +1 -0
  158. package/dist/css/themes/RatingIndicator.css +1 -1
  159. package/dist/css/themes/Review.css +1 -0
  160. package/dist/css/themes/ReviewItem.css +1 -0
  161. package/dist/css/themes/Search.css +1 -1
  162. package/dist/css/themes/SecondaryNavigation.css +1 -1
  163. package/dist/css/themes/SecondaryNavigationItem.css +1 -1
  164. package/dist/css/themes/SecondaryNavigationSubItem.css +1 -1
  165. package/dist/css/themes/SelectBox.css +1 -1
  166. package/dist/css/themes/Slider.css +1 -1
  167. package/dist/css/themes/StepInput.css +1 -1
  168. package/dist/css/themes/TabNavigation.css +1 -1
  169. package/dist/css/themes/Tag.css +1 -1
  170. package/dist/css/themes/TagGroup.css +1 -0
  171. package/dist/css/themes/TextArea.css +1 -1
  172. package/dist/css/themes/TextField.css +1 -1
  173. package/dist/css/themes/Toast.css +1 -1
  174. package/dist/css/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css +1 -1
  175. package/dist/custom-elements-internal.json +1435 -444
  176. package/dist/custom-elements.json +1267 -358
  177. package/dist/data/CountryListISO3166.js +162 -162
  178. package/dist/data/CountryListISO3166.js.map +1 -1
  179. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  180. package/dist/generated/assets/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.json +1 -1
  181. package/dist/generated/i18n/i18n-defaults.d.ts +11 -1
  182. package/dist/generated/i18n/i18n-defaults.js +18 -8
  183. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  184. package/dist/generated/templates/AccordionItemTemplate.lit.js +1 -1
  185. package/dist/generated/templates/AccordionItemTemplate.lit.js.map +1 -1
  186. package/dist/generated/templates/CountrySelectorTemplate.lit.js +3 -3
  187. package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
  188. package/dist/generated/templates/DatePickerTemplate.lit.js +1 -1
  189. package/dist/generated/templates/DatePickerTemplate.lit.js.map +1 -1
  190. package/dist/generated/templates/DropdownTemplate.lit.js +2 -2
  191. package/dist/generated/templates/DropdownTemplate.lit.js.map +1 -1
  192. package/dist/generated/templates/FilterMenuTemplate.lit.js +1 -1
  193. package/dist/generated/templates/FilterMenuTemplate.lit.js.map +1 -1
  194. package/dist/generated/templates/FooterTemplate.lit.js +26 -28
  195. package/dist/generated/templates/FooterTemplate.lit.js.map +1 -1
  196. package/dist/generated/templates/HeroBannerTemplate.lit.js +7 -7
  197. package/dist/generated/templates/HeroBannerTemplate.lit.js.map +1 -1
  198. package/dist/generated/templates/ListItemTemplate.lit.js +6 -6
  199. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  200. package/dist/generated/templates/ListSelectAllTemplate.lit.js +1 -1
  201. package/dist/generated/templates/ListSelectAllTemplate.lit.js.map +1 -1
  202. package/dist/generated/templates/MastheadItemTemplate.lit.js +3 -3
  203. package/dist/generated/templates/MastheadItemTemplate.lit.js.map +1 -1
  204. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js +1 -1
  205. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js.map +1 -1
  206. package/dist/generated/templates/MastheadMenuTemplate.lit.js +2 -2
  207. package/dist/generated/templates/MastheadMenuTemplate.lit.js.map +1 -1
  208. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +16 -12
  209. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +1 -1
  210. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +2 -2
  211. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +1 -1
  212. package/dist/generated/templates/MastheadShellTemplate.lit.js +8 -8
  213. package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
  214. package/dist/generated/templates/MediaPlayerTemplate.lit.js +2 -2
  215. package/dist/generated/templates/MediaPlayerTemplate.lit.js.map +1 -1
  216. package/dist/generated/templates/PaginationTemplate.lit.js +1 -1
  217. package/dist/generated/templates/PaginationTemplate.lit.js.map +1 -1
  218. package/dist/generated/templates/PasswordFieldTemplate.lit.js +1 -2
  219. package/dist/generated/templates/PasswordFieldTemplate.lit.js.map +1 -1
  220. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js +6 -3
  221. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js.map +1 -1
  222. package/dist/generated/templates/RatingBarTemplate.lit.d.ts +4 -0
  223. package/dist/generated/templates/RatingBarTemplate.lit.js +6 -0
  224. package/dist/generated/templates/RatingBarTemplate.lit.js.map +1 -0
  225. package/dist/generated/templates/ReviewItemTemplate.lit.d.ts +4 -0
  226. package/dist/generated/templates/ReviewItemTemplate.lit.js +8 -0
  227. package/dist/generated/templates/ReviewItemTemplate.lit.js.map +1 -0
  228. package/dist/generated/templates/ReviewTemplate.lit.d.ts +4 -0
  229. package/dist/generated/templates/ReviewTemplate.lit.js +10 -0
  230. package/dist/generated/templates/ReviewTemplate.lit.js.map +1 -0
  231. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js +1 -1
  232. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js.map +1 -1
  233. package/dist/generated/templates/SearchTemplate.lit.js +7 -7
  234. package/dist/generated/templates/SearchTemplate.lit.js.map +1 -1
  235. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js +3 -3
  236. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js.map +1 -1
  237. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js +5 -4
  238. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js.map +1 -1
  239. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js +7 -6
  240. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js.map +1 -1
  241. package/dist/generated/templates/SelectBoxTemplate.lit.js +2 -2
  242. package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
  243. package/dist/generated/templates/SwitchTemplate.lit.js +2 -2
  244. package/dist/generated/templates/SwitchTemplate.lit.js.map +1 -1
  245. package/dist/generated/templates/TabHeaderTemplate.lit.js +2 -2
  246. package/dist/generated/templates/TabHeaderTemplate.lit.js.map +1 -1
  247. package/dist/generated/templates/TabInOverflowTemplate.lit.js +6 -6
  248. package/dist/generated/templates/TabInOverflowTemplate.lit.js.map +1 -1
  249. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js +1 -1
  250. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js.map +1 -1
  251. package/dist/generated/templates/TabNavigationTemplate.lit.js +4 -2
  252. package/dist/generated/templates/TabNavigationTemplate.lit.js.map +1 -1
  253. package/dist/generated/templates/TagGroupTemplate.lit.d.ts +4 -0
  254. package/dist/generated/templates/TagGroupTemplate.lit.js +8 -0
  255. package/dist/generated/templates/TagGroupTemplate.lit.js.map +1 -0
  256. package/dist/generated/templates/TagTemplate.lit.js +13 -3
  257. package/dist/generated/templates/TagTemplate.lit.js.map +1 -1
  258. package/dist/generated/templates/TextAreaTemplate.lit.js +1 -1
  259. package/dist/generated/templates/TextAreaTemplate.lit.js.map +1 -1
  260. package/dist/generated/templates/TextFieldTemplate.lit.js +2 -2
  261. package/dist/generated/templates/TextFieldTemplate.lit.js.map +1 -1
  262. package/dist/generated/templates/TooltipTemplate.lit.js +1 -1
  263. package/dist/generated/templates/TooltipTemplate.lit.js.map +1 -1
  264. package/dist/generated/themes/AccordionItem.css.js +1 -1
  265. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  266. package/dist/generated/themes/Avatar.css.js +1 -1
  267. package/dist/generated/themes/Avatar.css.js.map +1 -1
  268. package/dist/generated/themes/Badge.css.js +1 -1
  269. package/dist/generated/themes/Badge.css.js.map +1 -1
  270. package/dist/generated/themes/CountrySelector.css.js +1 -1
  271. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  272. package/dist/generated/themes/Divider.css.js +1 -1
  273. package/dist/generated/themes/Divider.css.js.map +1 -1
  274. package/dist/generated/themes/FilterMenu.css.js +1 -1
  275. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  276. package/dist/generated/themes/Footer.css.js +1 -1
  277. package/dist/generated/themes/Footer.css.js.map +1 -1
  278. package/dist/generated/themes/HeroBanner.css.js +1 -1
  279. package/dist/generated/themes/HeroBanner.css.js.map +1 -1
  280. package/dist/generated/themes/ListItem.css.js +1 -1
  281. package/dist/generated/themes/ListItem.css.js.map +1 -1
  282. package/dist/generated/themes/MastheadItem.css.js +1 -1
  283. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  284. package/dist/generated/themes/MastheadMobileMenu.css.js +1 -1
  285. package/dist/generated/themes/MastheadMobileMenu.css.js.map +1 -1
  286. package/dist/generated/themes/MastheadShell.css.js +1 -1
  287. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  288. package/dist/generated/themes/Modal.css.js +1 -1
  289. package/dist/generated/themes/Modal.css.js.map +1 -1
  290. package/dist/generated/themes/Pagination.css.js +1 -1
  291. package/dist/generated/themes/Pagination.css.js.map +1 -1
  292. package/dist/generated/themes/PhoneNumberField.css.js +1 -1
  293. package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
  294. package/dist/generated/themes/RatingBar.css.js +9 -0
  295. package/dist/generated/themes/RatingBar.css.js.map +1 -0
  296. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  297. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  298. package/dist/generated/themes/Review.css.d.ts +3 -0
  299. package/dist/generated/themes/Review.css.js +9 -0
  300. package/dist/generated/themes/Review.css.js.map +1 -0
  301. package/dist/generated/themes/ReviewItem.css.d.ts +3 -0
  302. package/dist/generated/themes/ReviewItem.css.js +9 -0
  303. package/dist/generated/themes/ReviewItem.css.js.map +1 -0
  304. package/dist/generated/themes/Search.css.js +1 -1
  305. package/dist/generated/themes/Search.css.js.map +1 -1
  306. package/dist/generated/themes/SecondaryNavigation.css.js +1 -1
  307. package/dist/generated/themes/SecondaryNavigation.css.js.map +1 -1
  308. package/dist/generated/themes/SecondaryNavigationItem.css.js +1 -1
  309. package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -1
  310. package/dist/generated/themes/SecondaryNavigationSubItem.css.js +1 -1
  311. package/dist/generated/themes/SecondaryNavigationSubItem.css.js.map +1 -1
  312. package/dist/generated/themes/SelectBox.css.js +1 -1
  313. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  314. package/dist/generated/themes/Slider.css.js +1 -1
  315. package/dist/generated/themes/Slider.css.js.map +1 -1
  316. package/dist/generated/themes/StepInput.css.js +1 -1
  317. package/dist/generated/themes/StepInput.css.js.map +1 -1
  318. package/dist/generated/themes/TabNavigation.css.js +1 -1
  319. package/dist/generated/themes/TabNavigation.css.js.map +1 -1
  320. package/dist/generated/themes/Tag.css.js +1 -1
  321. package/dist/generated/themes/Tag.css.js.map +1 -1
  322. package/dist/generated/themes/TagGroup.css.d.ts +3 -0
  323. package/dist/generated/themes/TagGroup.css.js +9 -0
  324. package/dist/generated/themes/TagGroup.css.js.map +1 -0
  325. package/dist/generated/themes/TextArea.css.js +1 -1
  326. package/dist/generated/themes/TextArea.css.js.map +1 -1
  327. package/dist/generated/themes/TextField.css.js +1 -1
  328. package/dist/generated/themes/TextField.css.js.map +1 -1
  329. package/dist/generated/themes/Toast.css.js +1 -1
  330. package/dist/generated/themes/Toast.css.js.map +1 -1
  331. package/dist/generated/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.js +1 -1
  332. package/dist/generated/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.js.map +1 -1
  333. package/dist/i18n/messagebundle.properties +35 -7
  334. package/dist/i18n/messagebundle_en.properties +17 -7
  335. package/dist/vscode.html-custom-data.json +260 -95
  336. package/dist/web-types.json +605 -183
  337. package/package.json +9 -9
  338. package/src/Accordion.ts +1 -1
  339. package/src/AccordionItem.hbs +1 -4
  340. package/src/AccordionItem.ts +6 -5
  341. package/src/Avatar.ts +24 -1
  342. package/src/AvatarGroup.ts +135 -0
  343. package/src/Checkbox.ts +1 -1
  344. package/src/CountrySelector.hbs +19 -15
  345. package/src/CountrySelector.ts +42 -9
  346. package/src/DatePicker.hbs +7 -9
  347. package/src/DatePicker.ts +14 -10
  348. package/src/Dropdown.hbs +8 -2
  349. package/src/Dropdown.ts +27 -6
  350. package/src/FilterMenu.hbs +58 -56
  351. package/src/FilterMenu.ts +101 -39
  352. package/src/Footer.hbs +21 -37
  353. package/src/Footer.ts +74 -52
  354. package/src/HeroBanner.hbs +22 -15
  355. package/src/HeroBanner.ts +3 -0
  356. package/src/Link.ts +1 -1
  357. package/src/List.ts +43 -23
  358. package/src/ListGroupHeader.ts +2 -2
  359. package/src/ListItem.hbs +4 -2
  360. package/src/ListItem.ts +8 -10
  361. package/src/ListSelectAll.hbs +1 -1
  362. package/src/ListSelectAll.ts +1 -1
  363. package/src/MastheadItem.hbs +7 -5
  364. package/src/MastheadItem.ts +44 -11
  365. package/src/MastheadMenu.hbs +4 -2
  366. package/src/MastheadMenu.ts +30 -0
  367. package/src/MastheadMenuItem.hbs +0 -2
  368. package/src/MastheadMenuItem.ts +2 -16
  369. package/src/MastheadMobileMenu.hbs +36 -10
  370. package/src/MastheadMobileMenu.ts +162 -22
  371. package/src/MastheadProfileMenu.hbs +6 -2
  372. package/src/MastheadProfileMenu.ts +66 -20
  373. package/src/MastheadShell.hbs +14 -4
  374. package/src/MastheadShell.ts +67 -8
  375. package/src/MediaPlayer.hbs +1 -3
  376. package/src/MediaPlayer.ts +122 -26
  377. package/src/MessageStrip.ts +1 -1
  378. package/src/Pagination.hbs +4 -2
  379. package/src/Pagination.ts +19 -4
  380. package/src/PasswordField.hbs +6 -17
  381. package/src/PasswordField.ts +31 -23
  382. package/src/PhoneNumberField.hbs +26 -6
  383. package/src/PhoneNumberField.ts +77 -2
  384. package/src/RatingBar.hbs +11 -0
  385. package/src/RatingBar.ts +113 -0
  386. package/src/Review.hbs +44 -0
  387. package/src/Review.ts +140 -0
  388. package/src/ReviewItem.hbs +20 -0
  389. package/src/ReviewItem.ts +227 -0
  390. package/src/Search.hbs +19 -14
  391. package/src/Search.ts +113 -6
  392. package/src/SearchSuggestions.hbs +1 -0
  393. package/src/SearchableListBase.ts +1 -1
  394. package/src/SecondaryNavigation.hbs +14 -8
  395. package/src/SecondaryNavigation.ts +76 -56
  396. package/src/SecondaryNavigationItem.hbs +3 -2
  397. package/src/SecondaryNavigationItem.ts +15 -5
  398. package/src/SecondaryNavigationItemBase.ts +41 -3
  399. package/src/SecondaryNavigationSubItem.hbs +13 -10
  400. package/src/SecondaryNavigationSubItem.ts +6 -2
  401. package/src/SelectBox.hbs +84 -83
  402. package/src/SelectBox.ts +155 -72
  403. package/src/StatusBadge.ts +2 -2
  404. package/src/Switch.hbs +3 -3
  405. package/src/Switch.ts +25 -0
  406. package/src/Tab.ts +11 -1
  407. package/src/TabHeader.hbs +3 -1
  408. package/src/TabInOverflow.hbs +19 -6
  409. package/src/TabNavigation.hbs +22 -12
  410. package/src/TabNavigation.ts +93 -117
  411. package/src/TabNavigationPopover.hbs +1 -0
  412. package/src/Tag.hbs +76 -26
  413. package/src/Tag.ts +77 -36
  414. package/src/TagGroup.hbs +48 -0
  415. package/src/TagGroup.ts +222 -0
  416. package/src/TextArea.hbs +36 -34
  417. package/src/TextArea.ts +28 -0
  418. package/src/TextField.hbs +45 -39
  419. package/src/TextField.ts +73 -17
  420. package/src/Tooltip.hbs +2 -2
  421. package/src/Tooltip.ts +5 -5
  422. package/src/data/CountryListISO3166.ts +162 -162
  423. package/src/generated/i18n/i18n-defaults.ts +2 -2
  424. package/src/generated/templates/AccordionItemTemplate.lit.ts +1 -1
  425. package/src/generated/templates/CountrySelectorTemplate.lit.ts +3 -3
  426. package/src/generated/templates/DatePickerTemplate.lit.ts +1 -1
  427. package/src/generated/templates/DropdownTemplate.lit.ts +2 -2
  428. package/src/generated/templates/FilterMenuTemplate.lit.ts +1 -1
  429. package/src/generated/templates/FooterTemplate.lit.ts +26 -28
  430. package/src/generated/templates/HeroBannerTemplate.lit.ts +7 -7
  431. package/src/generated/templates/ListItemTemplate.lit.ts +6 -6
  432. package/src/generated/templates/ListSelectAllTemplate.lit.ts +1 -1
  433. package/src/generated/templates/MastheadItemTemplate.lit.ts +3 -3
  434. package/src/generated/templates/MastheadMenuItemTemplate.lit.ts +1 -1
  435. package/src/generated/templates/MastheadMenuTemplate.lit.ts +2 -2
  436. package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +16 -12
  437. package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +2 -2
  438. package/src/generated/templates/MastheadShellTemplate.lit.ts +8 -8
  439. package/src/generated/templates/MediaPlayerTemplate.lit.ts +2 -2
  440. package/src/generated/templates/PaginationTemplate.lit.ts +1 -1
  441. package/src/generated/templates/PasswordFieldTemplate.lit.ts +1 -2
  442. package/src/generated/templates/PhoneNumberFieldTemplate.lit.ts +6 -3
  443. package/src/generated/templates/RatingBarTemplate.lit.ts +11 -0
  444. package/src/generated/templates/ReviewItemTemplate.lit.ts +13 -0
  445. package/src/generated/templates/ReviewTemplate.lit.ts +15 -0
  446. package/src/generated/templates/SearchSuggestionsTemplate.lit.ts +1 -1
  447. package/src/generated/templates/SearchTemplate.lit.ts +7 -7
  448. package/src/generated/templates/SecondaryNavigationItemTemplate.lit.ts +3 -3
  449. package/src/generated/templates/SecondaryNavigationSubItemTemplate.lit.ts +5 -4
  450. package/src/generated/templates/SecondaryNavigationTemplate.lit.ts +7 -6
  451. package/src/generated/templates/SelectBoxTemplate.lit.ts +2 -2
  452. package/src/generated/templates/SwitchTemplate.lit.ts +2 -2
  453. package/src/generated/templates/TabHeaderTemplate.lit.ts +2 -2
  454. package/src/generated/templates/TabInOverflowTemplate.lit.ts +6 -6
  455. package/src/generated/templates/TabNavigationPopoverTemplate.lit.ts +1 -1
  456. package/src/generated/templates/TabNavigationTemplate.lit.ts +4 -2
  457. package/src/generated/templates/TagGroupTemplate.lit.ts +13 -0
  458. package/src/generated/templates/TagTemplate.lit.ts +13 -3
  459. package/src/generated/templates/TextAreaTemplate.lit.ts +1 -1
  460. package/src/generated/templates/TextFieldTemplate.lit.ts +2 -2
  461. package/src/generated/templates/TooltipTemplate.lit.ts +1 -1
  462. package/src/generated/themes/AccordionItem.css.ts +1 -1
  463. package/src/generated/themes/Avatar.css.ts +1 -1
  464. package/src/generated/themes/Badge.css.ts +1 -1
  465. package/src/generated/themes/CountrySelector.css.ts +1 -1
  466. package/src/generated/themes/Divider.css.ts +1 -1
  467. package/src/generated/themes/FilterMenu.css.ts +1 -1
  468. package/src/generated/themes/Footer.css.ts +1 -1
  469. package/src/generated/themes/HeroBanner.css.ts +1 -1
  470. package/src/generated/themes/ListItem.css.ts +1 -1
  471. package/src/generated/themes/MastheadItem.css.ts +1 -1
  472. package/src/generated/themes/MastheadMobileMenu.css.ts +1 -1
  473. package/src/generated/themes/MastheadShell.css.ts +1 -1
  474. package/src/generated/themes/Modal.css.ts +1 -1
  475. package/src/generated/themes/Pagination.css.ts +1 -1
  476. package/src/generated/themes/PhoneNumberField.css.ts +1 -1
  477. package/src/generated/themes/RatingBar.css.ts +13 -0
  478. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  479. package/src/generated/themes/Review.css.ts +13 -0
  480. package/src/generated/themes/ReviewItem.css.ts +13 -0
  481. package/src/generated/themes/Search.css.ts +1 -1
  482. package/src/generated/themes/SecondaryNavigation.css.ts +1 -1
  483. package/src/generated/themes/SecondaryNavigationItem.css.ts +1 -1
  484. package/src/generated/themes/SecondaryNavigationSubItem.css.ts +1 -1
  485. package/src/generated/themes/SelectBox.css.ts +1 -1
  486. package/src/generated/themes/Slider.css.ts +1 -1
  487. package/src/generated/themes/StepInput.css.ts +1 -1
  488. package/src/generated/themes/TabNavigation.css.ts +1 -1
  489. package/src/generated/themes/Tag.css.ts +1 -1
  490. package/src/generated/themes/TagGroup.css.ts +13 -0
  491. package/src/generated/themes/TextArea.css.ts +1 -1
  492. package/src/generated/themes/TextField.css.ts +1 -1
  493. package/src/generated/themes/Toast.css.ts +1 -1
  494. package/src/generated/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.ts +1 -1
  495. package/src/i18n/messagebundle.properties +35 -7
  496. package/src/i18n/messagebundle_en.properties +17 -7
  497. package/src/themes/AccordionItem.css +6 -4
  498. package/src/themes/Avatar.css +24 -7
  499. package/src/themes/Badge.css +1 -1
  500. package/src/themes/CountrySelector.css +49 -26
  501. package/src/themes/Divider.css +6 -2
  502. package/src/themes/FilterMenu.css +52 -15
  503. package/src/themes/Footer.css +93 -168
  504. package/src/themes/HeroBanner.css +52 -24
  505. package/src/themes/ListItem.css +4 -0
  506. package/src/themes/MastheadItem.css +12 -2
  507. package/src/themes/MastheadMobileMenu.css +4 -0
  508. package/src/themes/MastheadShell.css +25 -29
  509. package/src/themes/Modal.css +6 -0
  510. package/src/themes/Pagination.css +7 -0
  511. package/src/themes/PhoneNumberField.css +15 -1
  512. package/src/themes/RatingBar.css +52 -0
  513. package/src/themes/Review.css +196 -0
  514. package/src/themes/ReviewItem.css +121 -0
  515. package/src/themes/Search.css +46 -25
  516. package/src/themes/SecondaryNavigation.css +41 -13
  517. package/src/themes/SecondaryNavigationItem.css +6 -4
  518. package/src/themes/SecondaryNavigationSubItem.css +5 -5
  519. package/src/themes/SelectBox.css +51 -24
  520. package/src/themes/StepInput.css +5 -2
  521. package/src/themes/TabNavigation.css +7 -1
  522. package/src/themes/Tag.css +200 -148
  523. package/src/themes/TagGroup.css +90 -0
  524. package/src/themes/TextArea.css +13 -0
  525. package/src/themes/TextField.css +97 -60
  526. package/src/themes/Toast.css +4 -0
  527. package/dist/assets/bundle.esm-f65ae7da.js +0 -315
  528. package/dist/assets/messagebundle_en-7249941b.js +0 -1
  529. package/dist/assets/parameters-bundle.css-76ef62fa.js +0 -2
  530. package/dist/assets/video.es-17aecf95.js +0 -219
  531. package/dist/css/themes/PasswordField.css +0 -1
  532. package/dist/generated/themes/PasswordField.css.js +0 -9
  533. package/dist/generated/themes/PasswordField.css.js.map +0 -1
  534. package/src/generated/themes/PasswordField.css.ts +0 -13
  535. package/src/themes/PasswordField.css +0 -29
  536. /package/dist/generated/themes/{PasswordField.css.d.ts → RatingBar.css.d.ts} +0 -0
@@ -7,7 +7,10 @@ import event from "@ui5/webcomponents-base/dist/decorators/event.js";
7
7
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
8
8
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
9
9
  import ResizeHandler, { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
10
- import { COUNTRY_SELECT } from "./generated/i18n/i18n-defaults.js";
10
+ import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
11
+ import {
12
+ COUNTRY_SELECT, READ_ONLY, VALUE_STATE_ERROR, VALUE_STATE_INFORMATION, VALUE_STATE_SUCCESS, VALUE_STATE_WARNING,
13
+ } from "./generated/i18n/i18n-defaults.js";
11
14
  import { Country, CountryListDB } from "./data/CountryListISO3166.js";
12
15
  import UDExDropdown from "./Dropdown.js";
13
16
  import UDExList from "./List.js";
@@ -199,6 +202,14 @@ class UDExPhoneNumberField extends UI5Element {
199
202
  @property({ type: String, noAttribute: true, defaultValue: OpenButtonIcon.iconDown })
200
203
  buttonIcon!: string;
201
204
 
205
+ /**
206
+ * Defines the open button icon
207
+ *
208
+ * @private
209
+ */
210
+ @property({ type: Boolean, noAttribute: true })
211
+ _dropdownExpanded!: boolean;
212
+
202
213
  /**
203
214
  * Defines the phone format of the input
204
215
  *
@@ -258,6 +269,22 @@ class UDExPhoneNumberField extends UI5Element {
258
269
  @property({ type: String, multiple: false, noAttribute: true })
259
270
  previousKey!: string;
260
271
 
272
+ /**
273
+ * Defines the active (focus)
274
+ * @default false
275
+ * @private
276
+ */
277
+ @property({ type: Boolean })
278
+ active!: boolean;
279
+
280
+ /**
281
+ * Defines is it the touch of the input field (only for mobile devices).
282
+ * @default false
283
+ * @private
284
+ */
285
+ @property({ type: Boolean })
286
+ _isTouched!: boolean;
287
+
261
288
  static i18nBundle: I18nBundle;
262
289
  _dropdown!: UDExDropdown;
263
290
  _handleResizeBound: ResizeObserverCallback;
@@ -267,7 +294,7 @@ class UDExPhoneNumberField extends UI5Element {
267
294
  }
268
295
 
269
296
  get countrySelectorAriaLabel() {
270
- return this.accessibleName || UDExPhoneNumberField.i18nBundle.getText(COUNTRY_SELECT);
297
+ return this.accessibleName || `${UDExPhoneNumberField.i18nBundle.getText(COUNTRY_SELECT)} ${this.label}`.trim();
271
298
  }
272
299
 
273
300
  get countryIso() {
@@ -352,6 +379,7 @@ class UDExPhoneNumberField extends UI5Element {
352
379
  }
353
380
 
354
381
  handleFocus() {
382
+ this.active = true;
355
383
  if (this.countryIso.length === 0) {
356
384
  this.phoneFormat = initialPlaceholder;
357
385
  }
@@ -361,7 +389,15 @@ class UDExPhoneNumberField extends UI5Element {
361
389
  }
362
390
  }
363
391
 
392
+ handleClick(): void {
393
+ if (!isDesktop()) {
394
+ this._isTouched = true;
395
+ }
396
+ }
397
+
364
398
  handleBlur() {
399
+ this.active = false;
400
+ this._isTouched = false;
365
401
  this.applyPlaceholder();
366
402
 
367
403
  const prefixLength = this.selectedPhonePrefix.length;
@@ -391,9 +427,11 @@ class UDExPhoneNumberField extends UI5Element {
391
427
 
392
428
  handleDropdownOpen() {
393
429
  this.buttonIcon = OpenButtonIcon.iconUp;
430
+ this._dropdownExpanded = true;
394
431
  }
395
432
  handleDropdownClose() {
396
433
  this.buttonIcon = OpenButtonIcon.iconDown;
434
+ this._dropdownExpanded = false;
397
435
  }
398
436
 
399
437
  autoSelectCountry(value: string) {
@@ -537,6 +575,43 @@ class UDExPhoneNumberField extends UI5Element {
537
575
  });
538
576
  }
539
577
 
578
+ get valueStateTypeMappings() {
579
+ return {
580
+ "Success": UDExPhoneNumberField.i18nBundle.getText(VALUE_STATE_SUCCESS),
581
+ "Standard": UDExPhoneNumberField.i18nBundle.getText(VALUE_STATE_INFORMATION),
582
+ "Error": UDExPhoneNumberField.i18nBundle.getText(VALUE_STATE_ERROR),
583
+ "Warning": UDExPhoneNumberField.i18nBundle.getText(VALUE_STATE_WARNING),
584
+ };
585
+ }
586
+
587
+ get hasValueState() {
588
+ return this.fieldState !== FieldState.Standard;
589
+ }
590
+
591
+ get valueStateText() {
592
+ return this.fieldState !== FieldState.Standard ? this.valueStateTypeMappings[this.fieldState] : undefined;
593
+ }
594
+
595
+ get readOnlyStateText() {
596
+ return UDExPhoneNumberField.i18nBundle.getText(READ_ONLY);
597
+ }
598
+
599
+ get ariaDescribedById(): string {
600
+ return `${this.supportingTextId} ${this.valueStateTextId} ${this.readOnlyStateTextId}`.trim();
601
+ }
602
+
603
+ get supportingTextId():string {
604
+ return this.supportingText ? `${this._id}-supportingTextDesc` : "";
605
+ }
606
+
607
+ get valueStateTextId():string {
608
+ return this.hasValueState ? `${this._id}-valueStateDesc` : "";
609
+ }
610
+
611
+ get readOnlyStateTextId():string {
612
+ return this.readonly ? `${this._id}-stateReadOnlyDesc` : "";
613
+ }
614
+
540
615
  onBeforeRendering() {
541
616
  this.applyPlaceholder();
542
617
 
@@ -0,0 +1,11 @@
1
+ <div class="udex-rating-bar__container">
2
+ <div aria-hidden="true" class="udex-rating-bar__rating">{{validatedRating}}</div>
3
+ <ui5-icon role="img" aria-labelledby="ratingDescription" name="favorite" class="udex-rating__icon"></ui5-icon>
4
+ <div class="udex-rating-bar__track">
5
+ <div class="udex-rating-bar__progress"></div>
6
+ </div>
7
+ {{#if showPercentage}}
8
+ <div role="note" class="udex-rating-bar__percentage">{{validatedPercentage}}</div>
9
+ {{/if}}
10
+ <span id="ratingDescription" class="hidden-text">{{_ratingDescription}}</span>
11
+ </div>
@@ -0,0 +1,113 @@
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 litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
5
+ import I18nBundle, { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
6
+ import Icon from "@ui5/webcomponents/dist/Icon.js";
7
+ import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
8
+ import { STARS } from "./generated/i18n/i18n-defaults.js";
9
+ import RatingBarTemplate from "./generated/templates/RatingBarTemplate.lit.js";
10
+
11
+ // Styles
12
+ import RatingBarCss from "./generated/themes/RatingBar.css.js";
13
+
14
+ /**
15
+ * @class
16
+ *
17
+ * <h3 class="comment-api-title">Overview</h3>
18
+ *
19
+ *
20
+ * <h3>Usage</h3>
21
+ *
22
+ * For the <code>udex-rating-bar</code>
23
+ * <h3>ES6 Module Import</h3>
24
+ *
25
+ * <code>import "@udex/web-components/dist/RatingBar.js";</code>
26
+ *
27
+ * @constructor
28
+ * @extends UI5Element
29
+ * @public
30
+ */
31
+ @customElement({
32
+ tag: "udex-rating-bar",
33
+ renderer: litRender,
34
+ styles: RatingBarCss,
35
+ template: RatingBarTemplate,
36
+ dependencies: [Icon],
37
+ })
38
+
39
+ class UDExRatingBar extends UI5Element {
40
+ /**
41
+ * Defines the associated rating.
42
+ *
43
+ * @default 0
44
+ * @public
45
+ */
46
+ @property({ type: Number, defaultValue: 0, validator: Integer })
47
+ rating!: number;
48
+
49
+ /**
50
+ * Defines the percentage.
51
+ *
52
+ * @default 0
53
+ * @public
54
+ */
55
+ @property({ type: Number, defaultValue: 0, validator: Integer })
56
+ percentage!: number;
57
+
58
+ /**
59
+ * Defines wether the percentage is shown or not.
60
+ *
61
+ * @default false
62
+ * @public
63
+ */
64
+ @property({ type: Boolean })
65
+ showPercentage!: boolean;
66
+
67
+ static i18nBundle: I18nBundle;
68
+
69
+ _minRating: number = 0;
70
+ _maxRating: number = 5;
71
+ _minPercentage: number = 0;
72
+ _maxPercentage: number = 100;
73
+
74
+ static async onDefine() {
75
+ UDExRatingBar.i18nBundle = await getI18nBundle("@ui5/webcomponents");
76
+ }
77
+
78
+ onBeforeRendering(): void {
79
+ this.style.setProperty("--udex-rating-bar-progress", `${this.percentage}%`);
80
+ }
81
+
82
+ get validatedRating(): number {
83
+ if (this.rating > this._maxRating) {
84
+ console.warn("UDEx RatingBar: The rating shouldn't be more than 5.");
85
+ return this._maxRating;
86
+ }
87
+ if (this.rating < this._minRating) {
88
+ console.warn("UDEx RatingBar: The rating shouldn't be less than 0.");
89
+ return this._minRating;
90
+ }
91
+ return this.rating;
92
+ }
93
+
94
+ get validatedPercentage(): string {
95
+ if (this.percentage > this._maxPercentage) {
96
+ console.warn("UDEx RatingBar: The percentage shouldn't be more than 100.");
97
+ return `${this._maxPercentage}%`;
98
+ }
99
+ if (this.percentage < this._minPercentage) {
100
+ console.warn("UDEx RatingBar: The percentage shouldn't be less than 0.");
101
+ return `${this._minPercentage}%`;
102
+ }
103
+ return `${this.percentage}%`;
104
+ }
105
+
106
+ get _ratingDescription(): string {
107
+ return `${this.validatedRating} ${UDExRatingBar.i18nBundle.getText(STARS)}`;
108
+ }
109
+ }
110
+
111
+ UDExRatingBar.define();
112
+
113
+ export default UDExRatingBar;
package/src/Review.hbs ADDED
@@ -0,0 +1,44 @@
1
+ {{#if isEmpty}}
2
+ <div class="udex-review__empty-container">
3
+ <slot class="udex-review__default-text" name="defaultText"></slot>
4
+ <slot name="reviewButton"></slot>
5
+ </div>
6
+ {{else}}
7
+ {{#if withoutBreakdown}}
8
+ <div class="udex-review__container-without-breakdown">
9
+ {{> noBreakdown}}
10
+ </div>
11
+ {{else}}
12
+ <div class="udex-review__container">
13
+ <div class="udex-review__content">
14
+ <div class="udex-review__rating-info">
15
+ <div aria-level="2" role="heading" aria-hidden="true" class="udex-review__rating">{{validatedRating}}</div>
16
+ <ui5-icon aria-labelledby="ratingDescription" role="img" name="favorite" class="udex-review__icon"></ui5-icon>
17
+ </div>
18
+ <div class="udex-review__reviews-text">{{reviewsText}}</div>
19
+ <slot name="reviewButton"></slot>
20
+ </div>
21
+ <div class="udex-review__additional-content">
22
+ {{#each validatedRatingBars}}
23
+ <slot name="{{this._individualSlot}}"></slot>
24
+ {{/each}}
25
+ </div>
26
+ </div>
27
+ <span id="ratingDescription" class="hidden-text">{{_ratingDescription}}</span>
28
+ {{/if}}
29
+ {{/if}}
30
+
31
+
32
+ {{#*inline "noBreakdown"}}
33
+ <div class="udex-review__content-without-breakdown">
34
+ <div aria-level="2" role="heading" aria-hidden="true" class="udex-review__rating">{{validatedRating}}</div>
35
+ <div class="udex-review__rating-info-without-breakdown">
36
+ <udex-rating-indicator readonly value="{{validatedRating}}" max="{{_maxRating}}"></udex-rating-indicator>
37
+ <div class="udex-review__reviews-text">{{reviewsText}}</div>
38
+ </div>
39
+ </div>
40
+ <div class="udex-review__additional-content-without-breakdown">
41
+ <slot class="udex-review__default-text" name="defaultText"></slot>
42
+ <slot name="reviewButton"></slot>
43
+ </div>
44
+ {{/inline}}
package/src/Review.ts ADDED
@@ -0,0 +1,140 @@
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
+ import Icon from "@ui5/webcomponents/dist/Icon.js";
7
+ import I18nBundle, { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
8
+ import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
9
+ import Float from "@ui5/webcomponents-base/dist/types/Float.js";
10
+ import { REVIEWS, STARS } from "./generated/i18n/i18n-defaults.js";
11
+ import UDExRatingBar from "./RatingBar.js";
12
+ import UDExRatingIndicator from "./RatingIndicator.js";
13
+ import UDExButton from "./Button.js";
14
+ import "@ui5/webcomponents-icons/dist/favorite.js";
15
+ import ReviewTemplate from "./generated/templates/ReviewTemplate.lit.js";
16
+
17
+ // Styles
18
+ import ReviewCss from "./generated/themes/Review.css.js";
19
+
20
+ /**
21
+ * @class
22
+ *
23
+ * <h3 class="comment-api-title">Overview</h3>
24
+ *
25
+ *
26
+ * <h3>Usage</h3>
27
+ *
28
+ * For the <code>udex-review</code>
29
+ * <h3>ES6 Module Import</h3>
30
+ *
31
+ * <code>import "@udex/web-components/dist/Review.js";</code>
32
+ *
33
+ * @constructor
34
+ * @extends UI5Element
35
+ * @public
36
+ */
37
+ @customElement({
38
+ tag: "udex-review",
39
+ renderer: litRender,
40
+ styles: ReviewCss,
41
+ template: ReviewTemplate,
42
+ dependencies: [UDExRatingBar, UDExRatingIndicator, Icon],
43
+ })
44
+
45
+ class UDExReview extends UI5Element {
46
+ /**
47
+ * Defines the rating.
48
+ *
49
+ * @default 0
50
+ * @public
51
+ */
52
+ @property({ type: Number, defaultValue: 0, validator: Float })
53
+ rating!: number;
54
+
55
+ /**
56
+ * Defines the total number of reviews.
57
+ *
58
+ * @default 0
59
+ * @public
60
+ */
61
+ @property({ type: Number, defaultValue: 0, validator: Integer })
62
+ reviews!: number;
63
+
64
+ /**
65
+ * Slot for a button for writing a review.
66
+ *
67
+ * @slot
68
+ * @public
69
+ */
70
+ @slot({ type: HTMLElement })
71
+ reviewButton!: UDExButton;
72
+
73
+ /**
74
+ * Slot for the default text when there are no reviews or rating.
75
+ *
76
+ * @slot
77
+ * @public
78
+ */
79
+ @slot({ type: HTMLElement })
80
+ defaultText!: HTMLElement;
81
+
82
+ /**
83
+ * Slot for rating bars.
84
+ *
85
+ * @slot
86
+ * @public
87
+ */
88
+ @slot({ type: HTMLElement, "default": true, individualSlots: true })
89
+ bars!: Array<UDExRatingBar>;
90
+
91
+ static i18nBundle: I18nBundle;
92
+ _minRating: number = 0;
93
+ _maxRating: number = 5;
94
+ _maxRatingBars: number = 5;
95
+
96
+ static async onDefine() {
97
+ UDExReview.i18nBundle = await getI18nBundle("@ui5/webcomponents");
98
+ }
99
+
100
+ get reviewsText(): string {
101
+ return `${this.reviews} ${UDExReview.i18nBundle.getText(REVIEWS)}`;
102
+ }
103
+
104
+ get withoutBreakdown(): boolean {
105
+ return this.bars.length === 0;
106
+ }
107
+
108
+ get isEmpty(): boolean {
109
+ return this.reviews === 0 && this.rating === 0;
110
+ }
111
+
112
+ get validatedRating(): number {
113
+ if (this.rating > this._maxRating) {
114
+ console.warn("UDEx Review: The rating shouldn't be more than 5.");
115
+ return this._maxRating;
116
+ }
117
+ if (this.rating < this._minRating) {
118
+ console.warn("UDEx Review: The rating shouldn't be less than 0.");
119
+ return this._minRating;
120
+ }
121
+ return this.rating;
122
+ }
123
+
124
+ get validatedRatingBars(): Array<UDExRatingBar> {
125
+ if (this.bars.length > this._maxRatingBars) {
126
+ console.warn("UDEx Review: There shouldn't be more than 5 RatingBars.");
127
+ return this.bars.slice(-this._maxRatingBars);
128
+ }
129
+
130
+ return this.bars;
131
+ }
132
+
133
+ get _ratingDescription(): string {
134
+ return `${this.validatedRating} ${UDExRatingBar.i18nBundle.getText(STARS)}`;
135
+ }
136
+ }
137
+
138
+ UDExReview.define();
139
+
140
+ export default UDExReview;
@@ -0,0 +1,20 @@
1
+ <div class="{{reviewItemClasses}}">
2
+ <div class="udex-review-item__rating-container">
3
+ <udex-rating-indicator value="{{validatedRating}}" max="{{_maxRating}}" readonly></udex-rating-indicator>
4
+ {{#if date}}
5
+ <slot slot="date" name="date" class="udex-review-item__date"></slot>
6
+ {{/if}}
7
+ </div>
8
+ <div class="udex-review-item__text-container">
9
+ <div class="udex-review-item__title">{{reviewTitle}}</div>
10
+ <div class="udex-review-item__text-wrapper">
11
+ <p class="udex-review-item__text" id="udex-review-item__text">{{_completeText}}</p>
12
+ {{#if _showTextExpander}}
13
+ <udex-button id="reviewExpander" class="udex-review-item__text-expander" design="Invisible" size="Small" @click="{{_toggleText}}">{{buttonText}}</udex-button>
14
+ {{/if}}
15
+ </div>
16
+ {{#if author}}
17
+ <slot slot="author" name="author" class="udex-review-item__author"></slot>
18
+ {{/if}}
19
+ </div>
20
+ </div>
@@ -0,0 +1,227 @@
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 litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
5
+
6
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
7
+ import I18nBundle, { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
8
+ import ResizeHandler, { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
9
+ import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
10
+ import UDExRatingIndicator from "./RatingIndicator.js";
11
+ import UDExButton from "./Button.js";
12
+ import ReviewItemTemplate from "./generated/templates/ReviewItemTemplate.lit.js";
13
+
14
+ // Styles
15
+ import ReviewItemCss from "./generated/themes/ReviewItem.css.js";
16
+ import { READ_LESS, READ_MORE } from "./generated/i18n/i18n-defaults.js";
17
+
18
+ /**
19
+ * @class
20
+ *
21
+ * <h3 class="comment-api-title">Overview</h3>
22
+ *
23
+ *
24
+ * <h3>Usage</h3>
25
+ *
26
+ * For the <code>udex-review-item</code>
27
+ * <h3>ES6 Module Import</h3>
28
+ *
29
+ * <code>import "@udex/web-components/dist/ReviewItem.js";</code>
30
+ *
31
+ * @constructor
32
+ * @extends UI5Element
33
+ * @public
34
+ */
35
+ @customElement({
36
+ tag: "udex-review-item",
37
+ renderer: litRender,
38
+ styles: ReviewItemCss,
39
+ template: ReviewItemTemplate,
40
+ dependencies: [UDExRatingIndicator, UDExButton],
41
+ })
42
+
43
+ class UDExReviewItem extends UI5Element {
44
+ /**
45
+ * Defines the position of the rating in review.
46
+ * @default false
47
+ * @public
48
+ */
49
+ @property({ type: Boolean })
50
+ showRatingTop!: boolean;
51
+
52
+ /**
53
+ * Defines the rating in the review.
54
+ *
55
+ * @default 0
56
+ * @public
57
+ */
58
+ @property({ type: Number, defaultValue: 0, validator: Integer })
59
+ rating!: number;
60
+
61
+ /**
62
+ * Defines the title of the review.
63
+ *
64
+ * @default ""
65
+ * @public
66
+ */
67
+ @property({ type: String })
68
+ reviewTitle!: string;
69
+
70
+ /**
71
+ * Defines the text of the review.
72
+ * @default ""
73
+ * @public
74
+ */
75
+ @property({ type: String })
76
+ text!: string;
77
+
78
+ /**
79
+ * Defines whether button for showing truncated text is shown.
80
+ * @default 2
81
+ * @private
82
+ */
83
+ @property({ type: Number, defaultValue: 2, validator: Integer })
84
+ _textLineLimit!: number;
85
+
86
+ /**
87
+ * Defines whether the text is expanded.
88
+ * @default false
89
+ * @private
90
+ */
91
+ @property({ type: Boolean })
92
+ _textExpanded!: boolean;
93
+
94
+ /**
95
+ * Defines whether button for showing truncated text is shown.
96
+ * @default false
97
+ * @private
98
+ */
99
+ @property({ type: Boolean })
100
+ _showTextExpander!: boolean;
101
+
102
+ /**
103
+ * Defines the text, consisting of visible and invisible parts of the original text.
104
+ * @default ""
105
+ * @private
106
+ */
107
+ @property({ type: String })
108
+ _completeText!: string;
109
+
110
+ /**
111
+ * Defines the author's name and company.
112
+ *
113
+ * @default ""
114
+ * @slot
115
+ */
116
+ @slot()
117
+ author!: Array<HTMLElement>;
118
+
119
+ /**
120
+ * Defines the date of the review.
121
+ *
122
+ * @default ""
123
+ * @slot
124
+ */
125
+ @slot()
126
+ date!: Array<HTMLElement>;
127
+
128
+ _toggleText() {
129
+ this._textExpanded = !this._textExpanded;
130
+ if (this._textExpanded) {
131
+ this._completeText = this.text;
132
+ this._textElement.classList.add("udex-review-item__text-expanded");
133
+ } else {
134
+ this._textElement.classList.remove("udex-review-item__text-expanded");
135
+ this._completeText = this._visibleText;
136
+ }
137
+ }
138
+
139
+ _handleResizeBound: ResizeObserverCallback;
140
+ _textElement!: HTMLElement;
141
+ _visibleText!: string;
142
+ _maxHeight: number = 48;
143
+ _maxRating: number = 5;
144
+ _minRating: number = 0;
145
+
146
+ static i18nBundle: I18nBundle;
147
+
148
+ static async onDefine() {
149
+ UDExReviewItem.i18nBundle = await getI18nBundle("@ui5/webcomponents");
150
+ }
151
+
152
+ constructor() {
153
+ super();
154
+ this._handleResizeBound = this._checkTextOverflow.bind(this);
155
+ }
156
+
157
+ onEnterDOM(): void {
158
+ this._maxHeight = 48;
159
+ this._completeText = this.text;
160
+ ResizeHandler.register(this, this._handleResizeBound);
161
+ }
162
+
163
+ onExitDOM(): void {
164
+ ResizeHandler.deregister(this, this._handleResizeBound);
165
+ }
166
+
167
+ onAfterRendering(): void {
168
+ this._textElement = this.getTextElement();
169
+ this._checkTextOverflow();
170
+ }
171
+
172
+ _checkTextOverflow() {
173
+ const words = this.text.split(" ");
174
+
175
+ const canvas = document.createElement("canvas");
176
+ const context = canvas.getContext("2d")!;
177
+ context.font = `16px sans-serif`;
178
+
179
+ let currentLineWidth = 0;
180
+ let visibleText = "";
181
+
182
+ words.forEach(word => {
183
+ const wordWidth = context.measureText(`${word} `).width;
184
+ if (currentLineWidth + wordWidth <= 2 * this._textElement.offsetWidth) {
185
+ visibleText += `${word} `;
186
+ currentLineWidth += wordWidth;
187
+ }
188
+ });
189
+
190
+ this._visibleText = visibleText;
191
+ if (!this._textExpanded) {
192
+ this._completeText = visibleText;
193
+ }
194
+
195
+ this._showTextExpander = (!this._textExpanded && this._completeText.length < this.text.length) || (this._textExpanded && visibleText.length < this.text.length);
196
+ }
197
+
198
+ get buttonText(): string {
199
+ return this._textExpanded ? UDExReviewItem.i18nBundle.getText(READ_LESS) : UDExReviewItem.i18nBundle.getText(READ_MORE);
200
+ }
201
+
202
+ get reviewItemClasses(): string {
203
+ const ratingTop = this.showRatingTop ? " udex-review-item__rating-top" : "";
204
+ return `udex-review-item${ratingTop}`;
205
+ }
206
+
207
+ get validatedRating(): number {
208
+ if (this.rating > this._maxRating) {
209
+ console.warn("UDEx Review: The rating shouldn't be more than 5.");
210
+ return this._maxRating;
211
+ }
212
+ if (this.rating < this._minRating) {
213
+ console.warn("UDEx Review: The rating shouldn't be less than 0.");
214
+ return this._minRating;
215
+ }
216
+ return this.rating;
217
+ }
218
+
219
+ getTextElement(): HTMLElement {
220
+ const textElement = this.shadowRoot?.getElementById("udex-review-item__text");
221
+ return textElement!;
222
+ }
223
+ }
224
+
225
+ UDExReviewItem.define();
226
+
227
+ export default UDExReviewItem;