@sapudex/web-components 2.21.0 → 2.23.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 (319) hide show
  1. package/bundle.esm.js +2 -0
  2. package/cypress/specs/CountrySelector.cy.tsx +158 -144
  3. package/cypress/specs/EventRibbon.cy.tsx +3 -1
  4. package/cypress/specs/ImageGridCloud.cy.tsx +78 -0
  5. package/cypress/specs/ImageGridCloudItem.cy.tsx +29 -0
  6. package/cypress/specs/SelectBox.cy.tsx +173 -206
  7. package/cypress/specs/Tag.cy.tsx +1 -1
  8. package/cypress/specs/TextField.cy.tsx +15 -0
  9. package/cypress/specs/Textarea.cy.tsx +15 -33
  10. package/cypress/support/component-imports.instrumented.ts +4 -0
  11. package/cypress/support/component-imports.src.ts +4 -0
  12. package/dist/Accordion.js +1 -0
  13. package/dist/Accordion.js.map +1 -1
  14. package/dist/AccordionItem.js +2 -0
  15. package/dist/AccordionItem.js.map +1 -1
  16. package/dist/AssetsVariables.js +2 -1
  17. package/dist/AssetsVariables.js.map +1 -1
  18. package/dist/Breadcrumbs.js +5 -0
  19. package/dist/Breadcrumbs.js.map +1 -1
  20. package/dist/ContactItem.js +2 -0
  21. package/dist/ContactItem.js.map +1 -1
  22. package/dist/CountrySelector.d.ts +25 -142
  23. package/dist/CountrySelector.js +91 -267
  24. package/dist/CountrySelector.js.map +1 -1
  25. package/dist/DatePicker.js +2 -1
  26. package/dist/DatePicker.js.map +1 -1
  27. package/dist/FilterMenu.d.ts +14 -2
  28. package/dist/FilterMenu.js +13 -1
  29. package/dist/FilterMenu.js.map +1 -1
  30. package/dist/Footer.js +27 -0
  31. package/dist/Footer.js.map +1 -1
  32. package/dist/ImageGridCloud.d.ts +76 -0
  33. package/dist/ImageGridCloud.js +153 -0
  34. package/dist/ImageGridCloud.js.map +1 -0
  35. package/dist/ImageGridCloudItem.d.ts +35 -0
  36. package/dist/ImageGridCloudItem.js +49 -0
  37. package/dist/ImageGridCloudItem.js.map +1 -0
  38. package/dist/ImageGridCloudItemTemplate.d.ts +2 -0
  39. package/dist/ImageGridCloudItemTemplate.js +5 -0
  40. package/dist/ImageGridCloudItemTemplate.js.map +1 -0
  41. package/dist/ImageGridCloudTemplate.d.ts +2 -0
  42. package/dist/ImageGridCloudTemplate.js +6 -0
  43. package/dist/ImageGridCloudTemplate.js.map +1 -0
  44. package/dist/ImageGridTicker.d.ts +2 -2
  45. package/dist/ImageGridTicker.js +1 -8
  46. package/dist/ImageGridTicker.js.map +1 -1
  47. package/dist/LinkListItem.js +1 -0
  48. package/dist/LinkListItem.js.map +1 -1
  49. package/dist/List.js +5 -3
  50. package/dist/List.js.map +1 -1
  51. package/dist/ListGroupHeader.js +1 -0
  52. package/dist/ListGroupHeader.js.map +1 -1
  53. package/dist/ListGroupHeaderBase.d.ts +1 -0
  54. package/dist/ListGroupHeaderBase.js +3 -0
  55. package/dist/ListGroupHeaderBase.js.map +1 -1
  56. package/dist/ListItem.js +2 -0
  57. package/dist/ListItem.js.map +1 -1
  58. package/dist/ListItemBase.d.ts +12 -0
  59. package/dist/ListItemBase.js +21 -2
  60. package/dist/ListItemBase.js.map +1 -1
  61. package/dist/ListSelectAll.js +1 -0
  62. package/dist/ListSelectAll.js.map +1 -1
  63. package/dist/MastheadCountrySelector.js +15 -0
  64. package/dist/MastheadCountrySelector.js.map +1 -1
  65. package/dist/MastheadItem.js +10 -0
  66. package/dist/MastheadItem.js.map +1 -1
  67. package/dist/MastheadMenu.js +6 -0
  68. package/dist/MastheadMenu.js.map +1 -1
  69. package/dist/MastheadMobileMenu.js +11 -0
  70. package/dist/MastheadMobileMenu.js.map +1 -1
  71. package/dist/MastheadProfileMenu.js +11 -0
  72. package/dist/MastheadProfileMenu.js.map +1 -1
  73. package/dist/MastheadShell.js +41 -0
  74. package/dist/MastheadShell.js.map +1 -1
  75. package/dist/MediaPlayer.js +3 -0
  76. package/dist/MediaPlayer.js.map +1 -1
  77. package/dist/MediaPlayerTemplate.js +4 -4
  78. package/dist/MediaPlayerTemplate.js.map +1 -1
  79. package/dist/MediaPlayerVimeo.d.ts +3 -3
  80. package/dist/MediaPlayerVimeo.js +1 -0
  81. package/dist/MediaPlayerVimeo.js.map +1 -1
  82. package/dist/MediaPlayerYoutube.js +3 -0
  83. package/dist/MediaPlayerYoutube.js.map +1 -1
  84. package/dist/Pagination.js +1 -1
  85. package/dist/Pagination.js.map +1 -1
  86. package/dist/Search.d.ts +2 -1
  87. package/dist/Search.js +18 -3
  88. package/dist/Search.js.map +1 -1
  89. package/dist/SearchTemplate.d.ts +2 -0
  90. package/dist/SearchTemplate.js +48 -0
  91. package/dist/SearchTemplate.js.map +1 -0
  92. package/dist/SearchableListBase.d.ts +26 -16
  93. package/dist/SearchableListBase.js +58 -72
  94. package/dist/SearchableListBase.js.map +1 -1
  95. package/dist/SecondaryNavigation.js +19 -0
  96. package/dist/SecondaryNavigation.js.map +1 -1
  97. package/dist/SecondaryNavigationItem.js +6 -0
  98. package/dist/SecondaryNavigationItem.js.map +1 -1
  99. package/dist/SecondaryNavigationSubItem.js +3 -0
  100. package/dist/SecondaryNavigationSubItem.js.map +1 -1
  101. package/dist/SelectBase.d.ts +193 -0
  102. package/dist/SelectBase.js +428 -0
  103. package/dist/SelectBase.js.map +1 -0
  104. package/dist/SelectBox.d.ts +30 -152
  105. package/dist/SelectBox.js +140 -348
  106. package/dist/SelectBox.js.map +1 -1
  107. package/dist/SocialMediaButton.js +2 -0
  108. package/dist/SocialMediaButton.js.map +1 -1
  109. package/dist/StepInput.js +2 -0
  110. package/dist/StepInput.js.map +1 -1
  111. package/dist/TabNavigation.js +3 -0
  112. package/dist/TabNavigation.js.map +1 -1
  113. package/dist/Tag.js +1 -0
  114. package/dist/Tag.js.map +1 -1
  115. package/dist/TagGroup.d.ts +23 -5
  116. package/dist/TagGroup.js +40 -16
  117. package/dist/TagGroup.js.map +1 -1
  118. package/dist/TagTemplate.js +4 -2
  119. package/dist/TagTemplate.js.map +1 -1
  120. package/dist/TextArea.d.ts +1 -1
  121. package/dist/TextArea.js +5 -5
  122. package/dist/TextArea.js.map +1 -1
  123. package/dist/TextAreaTemplate.d.ts +2 -0
  124. package/dist/TextAreaTemplate.js +13 -0
  125. package/dist/TextAreaTemplate.js.map +1 -0
  126. package/dist/TextField.d.ts +29 -4
  127. package/dist/TextField.js +33 -16
  128. package/dist/TextField.js.map +1 -1
  129. package/dist/TextFieldTemplate.d.ts +2 -0
  130. package/dist/TextFieldTemplate.js +14 -0
  131. package/dist/TextFieldTemplate.js.map +1 -0
  132. package/dist/Tile.js +1 -0
  133. package/dist/Tile.js.map +1 -1
  134. package/dist/Upload.js +5 -0
  135. package/dist/Upload.js.map +1 -1
  136. package/dist/assets/{InputSuggestions-B0P5JAFd.js → InputSuggestions-C8m6N2-d.js} +1 -1
  137. package/dist/assets/{ListItemStandardExpandableTextTemplate-CFj3_UAT.js → ListItemStandardExpandableTextTemplate-BwD5bYhw.js} +1 -1
  138. package/dist/assets/{bundle.esm-BaPBMfCT.js → bundle.esm-hGsUwmUy.js} +222 -218
  139. package/dist/css/themes/CountrySelector.css +1 -1
  140. package/dist/css/themes/EventRibbon.css +1 -1
  141. package/dist/css/themes/ImageGridCloud.css +1 -0
  142. package/dist/css/themes/ImageGridCloudItem.css +1 -0
  143. package/dist/css/themes/ListItem.css +1 -1
  144. package/dist/css/themes/MastheadItem.css +1 -1
  145. package/dist/css/themes/MastheadMobileMenu.css +1 -1
  146. package/dist/css/themes/Pagination.css +1 -1
  147. package/dist/css/themes/RatingIndicator.css +1 -1
  148. package/dist/css/themes/Search.css +1 -1
  149. package/dist/css/themes/SelectBase.css +1 -0
  150. package/dist/css/themes/SelectBox.css +1 -1
  151. package/dist/css/themes/Slider.css +1 -1
  152. package/dist/css/themes/TagGroup.css +1 -1
  153. package/dist/css/themes/TextField.css +1 -1
  154. package/dist/custom-elements-internal.json +4627 -1311
  155. package/dist/custom-elements.json +1260 -1249
  156. package/dist/generated/templates/CountrySelectorTemplate.lit.js +3 -3
  157. package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
  158. package/dist/generated/templates/ListItemTemplate.lit.js +1 -1
  159. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  160. package/dist/generated/templates/SelectBoxTemplate.lit.js +10 -9
  161. package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
  162. package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
  163. package/dist/generated/themes/CountrySelector.css.js +1 -1
  164. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  165. package/dist/generated/themes/EventRibbon.css.d.ts +1 -1
  166. package/dist/generated/themes/EventRibbon.css.js +1 -1
  167. package/dist/generated/themes/EventRibbon.css.js.map +1 -1
  168. package/dist/generated/themes/ImageGridCloud.css.d.ts +2 -0
  169. package/dist/generated/themes/ImageGridCloud.css.js +8 -0
  170. package/dist/generated/themes/ImageGridCloud.css.js.map +1 -0
  171. package/dist/generated/themes/ImageGridCloudItem.css.d.ts +2 -0
  172. package/dist/generated/themes/ImageGridCloudItem.css.js +8 -0
  173. package/dist/generated/themes/ImageGridCloudItem.css.js.map +1 -0
  174. package/dist/generated/themes/ListItem.css.d.ts +1 -1
  175. package/dist/generated/themes/ListItem.css.js +1 -1
  176. package/dist/generated/themes/ListItem.css.js.map +1 -1
  177. package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
  178. package/dist/generated/themes/MastheadItem.css.js +1 -1
  179. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  180. package/dist/generated/themes/MastheadMobileMenu.css.d.ts +1 -1
  181. package/dist/generated/themes/MastheadMobileMenu.css.js +1 -1
  182. package/dist/generated/themes/MastheadMobileMenu.css.js.map +1 -1
  183. package/dist/generated/themes/Pagination.css.d.ts +1 -1
  184. package/dist/generated/themes/Pagination.css.js +1 -1
  185. package/dist/generated/themes/Pagination.css.js.map +1 -1
  186. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  187. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  188. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  189. package/dist/generated/themes/Search.css.d.ts +1 -1
  190. package/dist/generated/themes/Search.css.js +1 -1
  191. package/dist/generated/themes/Search.css.js.map +1 -1
  192. package/dist/generated/themes/SelectBase.css.d.ts +2 -0
  193. package/dist/generated/themes/SelectBase.css.js +8 -0
  194. package/dist/generated/themes/SelectBase.css.js.map +1 -0
  195. package/dist/generated/themes/SelectBox.css.d.ts +1 -1
  196. package/dist/generated/themes/SelectBox.css.js +1 -1
  197. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  198. package/dist/generated/themes/Slider.css.d.ts +1 -1
  199. package/dist/generated/themes/Slider.css.js +1 -1
  200. package/dist/generated/themes/Slider.css.js.map +1 -1
  201. package/dist/generated/themes/TagGroup.css.d.ts +1 -1
  202. package/dist/generated/themes/TagGroup.css.js +1 -1
  203. package/dist/generated/themes/TagGroup.css.js.map +1 -1
  204. package/dist/generated/themes/TextField.css.d.ts +1 -1
  205. package/dist/generated/themes/TextField.css.js +1 -1
  206. package/dist/generated/themes/TextField.css.js.map +1 -1
  207. package/dist/types/common.d.ts +1 -1
  208. package/dist/types/common.js +1 -1
  209. package/dist/types/common.js.map +1 -1
  210. package/dist/vscode.html-custom-data.json +49 -235
  211. package/dist/web-types.json +347 -832
  212. package/package.json +1 -1
  213. package/src/Accordion.ts +1 -0
  214. package/src/AccordionItem.ts +2 -0
  215. package/src/AssetsVariables.ts +2 -1
  216. package/src/Breadcrumbs.ts +5 -0
  217. package/src/ContactItem.ts +2 -0
  218. package/src/CountrySelector.hbs +6 -61
  219. package/src/CountrySelector.ts +93 -374
  220. package/src/DatePicker.ts +2 -1
  221. package/src/FilterMenu.ts +15 -3
  222. package/src/Footer.ts +27 -0
  223. package/src/ImageGridCloud.ts +188 -0
  224. package/src/ImageGridCloudItem.ts +57 -0
  225. package/src/ImageGridCloudItemTemplate.tsx +11 -0
  226. package/src/ImageGridCloudTemplate.tsx +16 -0
  227. package/src/ImageGridTicker.ts +3 -3
  228. package/src/LinkListItem.ts +1 -0
  229. package/src/List.ts +5 -3
  230. package/src/ListGroupHeader.ts +1 -0
  231. package/src/ListGroupHeaderBase.ts +4 -0
  232. package/src/ListItem.hbs +0 -1
  233. package/src/ListItem.ts +2 -0
  234. package/src/ListItemBase.ts +21 -3
  235. package/src/ListSelectAll.ts +1 -0
  236. package/src/MastheadCountrySelector.ts +15 -0
  237. package/src/MastheadItem.ts +10 -0
  238. package/src/MastheadMenu.ts +6 -0
  239. package/src/MastheadMobileMenu.ts +11 -0
  240. package/src/MastheadProfileMenu.ts +11 -0
  241. package/src/MastheadShell.ts +41 -0
  242. package/src/MediaPlayer.ts +3 -0
  243. package/src/MediaPlayerTemplate.tsx +0 -1
  244. package/src/MediaPlayerVimeo.ts +4 -3
  245. package/src/MediaPlayerYoutube.ts +3 -0
  246. package/src/Pagination.ts +1 -1
  247. package/src/Search.ts +20 -4
  248. package/src/SearchTemplate.tsx +353 -0
  249. package/src/SearchableListBase.ts +78 -83
  250. package/src/SecondaryNavigation.ts +19 -0
  251. package/src/SecondaryNavigationItem.ts +6 -0
  252. package/src/SecondaryNavigationSubItem.ts +3 -0
  253. package/src/SelectBase.ts +580 -0
  254. package/src/SelectBox.hbs +118 -107
  255. package/src/SelectBox.ts +156 -445
  256. package/src/SocialMediaButton.ts +2 -0
  257. package/src/StepInput.ts +2 -0
  258. package/src/TabNavigation.ts +3 -0
  259. package/src/Tag.ts +1 -0
  260. package/src/TagGroup.ts +56 -19
  261. package/src/TagTemplate.tsx +4 -2
  262. package/src/TextArea.ts +5 -5
  263. package/src/TextAreaTemplate.tsx +67 -0
  264. package/src/TextField.ts +58 -24
  265. package/src/TextFieldTemplate.tsx +90 -0
  266. package/src/Tile.ts +1 -0
  267. package/src/Upload.ts +5 -0
  268. package/src/generated/templates/CountrySelectorTemplate.lit.ts +2 -2
  269. package/src/generated/templates/ListItemTemplate.lit.ts +1 -1
  270. package/src/generated/templates/SelectBoxTemplate.lit.ts +10 -9
  271. package/src/generated/themes/CountrySelector.css.ts +1 -1
  272. package/src/generated/themes/EventRibbon.css.ts +1 -1
  273. package/src/generated/themes/ImageGridCloud.css.ts +9 -0
  274. package/src/generated/themes/ImageGridCloudItem.css.ts +9 -0
  275. package/src/generated/themes/ListItem.css.ts +1 -1
  276. package/src/generated/themes/MastheadItem.css.ts +1 -1
  277. package/src/generated/themes/MastheadMobileMenu.css.ts +1 -1
  278. package/src/generated/themes/Pagination.css.ts +1 -1
  279. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  280. package/src/generated/themes/Search.css.ts +1 -1
  281. package/src/generated/themes/SelectBase.css.ts +9 -0
  282. package/src/generated/themes/SelectBox.css.ts +1 -1
  283. package/src/generated/themes/Slider.css.ts +1 -1
  284. package/src/generated/themes/TagGroup.css.ts +1 -1
  285. package/src/generated/themes/TextField.css.ts +1 -1
  286. package/src/themes/CountrySelector.css +42 -115
  287. package/src/themes/EventRibbon.css +21 -13
  288. package/src/themes/ImageGridCloud.css +55 -0
  289. package/src/themes/ImageGridCloudItem.css +10 -0
  290. package/src/themes/ListItem.css +6 -0
  291. package/src/themes/MastheadItem.css +0 -2
  292. package/src/themes/MastheadMobileMenu.css +2 -0
  293. package/src/themes/Pagination.css +1 -1
  294. package/src/themes/Search.css +0 -1
  295. package/src/themes/SelectBase.css +239 -0
  296. package/src/themes/SelectBox.css +13 -195
  297. package/src/themes/TagGroup.css +0 -1
  298. package/src/themes/TextField.css +7 -7
  299. package/src/types/common.ts +1 -1
  300. package/dist/generated/templates/SearchSuggestionsTemplate.lit.d.ts +0 -3
  301. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js +0 -17
  302. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js.map +0 -1
  303. package/dist/generated/templates/SearchTemplate.lit.d.ts +0 -3
  304. package/dist/generated/templates/SearchTemplate.lit.js +0 -28
  305. package/dist/generated/templates/SearchTemplate.lit.js.map +0 -1
  306. package/dist/generated/templates/TextAreaTemplate.lit.d.ts +0 -3
  307. package/dist/generated/templates/TextAreaTemplate.lit.js +0 -13
  308. package/dist/generated/templates/TextAreaTemplate.lit.js.map +0 -1
  309. package/dist/generated/templates/TextFieldTemplate.lit.d.ts +0 -3
  310. package/dist/generated/templates/TextFieldTemplate.lit.js +0 -14
  311. package/dist/generated/templates/TextFieldTemplate.lit.js.map +0 -1
  312. package/src/Search.hbs +0 -155
  313. package/src/SearchSuggestions.hbs +0 -91
  314. package/src/TextArea.hbs +0 -54
  315. package/src/TextField.hbs +0 -78
  316. package/src/generated/templates/SearchSuggestionsTemplate.lit.ts +0 -21
  317. package/src/generated/templates/SearchTemplate.lit.ts +0 -32
  318. package/src/generated/templates/TextAreaTemplate.lit.ts +0 -17
  319. package/src/generated/templates/TextFieldTemplate.lit.ts +0 -18
@@ -1,33 +1,26 @@
1
1
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
2
2
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
3
3
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
- import executeTemplate from "@ui5/webcomponents-base/dist/renderer/executeTemplate.js";
5
- import { isEscape, isTabPrevious, isTabNext } from "@ui5/webcomponents-base/dist/Keys.js";
6
- import type Popover from "@ui5/webcomponents/dist/Popover.js";
7
- import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
8
- import Button from "@ui5/webcomponents/dist/Button.js";
9
- import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
10
- import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
4
+ import UI5Button from "@ui5/webcomponents/dist/Button.js";
11
5
  import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
12
6
  import "@ui5/webcomponents-icons/dist/navigation-up-arrow.js";
13
7
  import type { Country } from "./data/CountryListISO3166.js";
14
8
  import { CountryListDB } from "./data/CountryListISO3166.js";
15
- import { COUNTRY_SELECT } from "./generated/i18n/i18n-defaults.js";
16
- import Search from "./Search.js";
9
+ import UDExSearch from "./Search.js";
17
10
  import UDExDropdown from "./Dropdown.js";
18
11
  import UDExList from "./List.js";
19
- import UDExSearchableListBase from "./SearchableListBase.js";
12
+ import UDExSelectBase from "./SelectBase.js";
20
13
  import UDExListItem from "./ListItem.js";
21
14
  import UDExTextField from "./TextField.js";
22
- import UDExValueState from "./types/common.js";
23
- import StatusMessage from "./StatusMessage.js";
24
- import type { UDExSearchKeydownEventDetail } from "./Search.js";
25
- import type { UDExSearchableListBaseEvents } from "./SearchableListBase.js";
26
- import CountrySelectorTemplate from "./generated/templates/CountrySelectorTemplate.lit.js";
27
- import SearchableListBaseTemplate from "./generated/templates/SearchableListBaseTemplate.lit.js";
15
+ import UDExStatusMessage from "./StatusMessage.js";
16
+ import SelectBoxTemplate from "./generated/templates/SelectBoxTemplate.lit.js";
28
17
 
29
18
  // Styles
30
19
  import CountrySelectorCss from "./generated/themes/CountrySelector.css.js";
20
+ import TextFieldCss from "./generated/themes/TextField.css.js";
21
+ import SelectBaseCss from "./generated/themes/SelectBase.css.js";
22
+ import SearchableListCss from "./generated/themes/SearchableList.css.js";
23
+ import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
31
24
 
32
25
  type UDExCountrySelectorChangeSearchEventDetail = {
33
26
  value: string,
@@ -54,156 +47,26 @@ type UDExCountrySelectorChangeSearchEventDetail = {
54
47
  @customElement({
55
48
  tag: "udex-country-selector",
56
49
  renderer: litRender,
57
- styles: CountrySelectorCss,
58
- template: CountrySelectorTemplate,
50
+ styles: [
51
+ TextFieldCss,
52
+ SelectBaseCss,
53
+ CountrySelectorCss,
54
+ SearchableListCss,
55
+ getEffectiveScrollbarStyle(),
56
+ ],
57
+ template: SelectBoxTemplate,
59
58
  dependencies: [
60
- Search,
61
- Button,
59
+ UI5Button,
62
60
  UDExList,
61
+ UDExSearch,
63
62
  UDExListItem,
64
63
  UDExDropdown,
65
64
  UDExTextField,
66
- StatusMessage,
65
+ UDExStatusMessage,
67
66
  ],
68
67
  })
69
68
 
70
- /**
71
- * Fired before the dropdown pane is opened.
72
- *
73
- * @public
74
- */
75
- @event("before-open", { bubbles: true })
76
-
77
- /**
78
- * Fired after the dropdown pane is opened.
79
- *
80
- * @public
81
- */
82
- @event("open", { bubbles: true })
83
-
84
- /**
85
- * Fired before the dropdown pane is closed.
86
- *
87
- * @public
88
- */
89
- @event("before-close", { bubbles: true })
90
-
91
- /**
92
- * Fired after the dropdown pane is closed.
93
- *
94
- * @public
95
- */
96
- @event("close", { bubbles: true })
97
-
98
- /**
99
- * Fired event when the user submitted the value in the search.
100
- *
101
- * @public
102
- */
103
- @event("change-search", { bubbles: true })
104
-
105
- /**
106
- * Fired event when the user clicks on the reset button in the search.
107
- *
108
- * @public
109
- */
110
- @event("reset-search", { bubbles: true })
111
-
112
- /**
113
- * Fired event when the user clicks on the submitted icon in the search.
114
- *
115
- * @public
116
- */
117
- @event("submit-search", { bubbles: true })
118
-
119
- class UDExCountrySelector extends UDExSearchableListBase {
120
- eventDetails!: {
121
- "open": void,
122
- "close": void,
123
- "before-close": void,
124
- "before-open": void,
125
- "change-search": UDExCountrySelectorChangeSearchEventDetail,
126
- } & Omit<UDExSearchableListBaseEvents, "change-search">;
127
-
128
- /**
129
- * Defines label text for the input field.
130
- *
131
- * @default undefined
132
- * @public
133
- */
134
- @property({ type: String })
135
- label?: string;
136
-
137
- /**
138
- * Defines the accessible ARIA name of the component.
139
- *
140
- * @default undefined
141
- * @public
142
- */
143
- @property()
144
- accessibleName?: string;
145
-
146
- /**
147
- * Receives id (or many ids) of the elements that label the component.
148
- * @default ""
149
- * @public
150
- */
151
- @property()
152
- accessibleNameRef: string = "";
153
-
154
- /**
155
- * Defines whether the component is required.
156
- *
157
- * @default false
158
- * @public
159
- */
160
- @property({ type: Boolean })
161
- required!: boolean;
162
-
163
- /**
164
- * Allows control over the height.
165
- *
166
- * @public
167
- */
168
- @property({ type: String })
169
- height?: string;
170
-
171
- /**
172
- * Defines whether the component is in disabled state.
173
- * <br><br>
174
- * <b>Note:</b> A disabled component is completely noninteractive.
175
- *
176
- * @default false
177
- * @public
178
- */
179
- @property({ type: Boolean })
180
- disabled!: boolean;
181
-
182
- /**
183
- * Defines whether the component is read-only.
184
- * <br><br>
185
- * <b>Note:</b> A read-only component is not editable,
186
- * but still provides visual feedback upon user interaction.
187
- *
188
- * @default false
189
- * @public
190
- */
191
- @property({ type: Boolean })
192
- readonly!: boolean;
193
-
194
- /**
195
- * Defines whether the component is display-only.
196
- * <br><br>
197
- * <b>Note:</b> A display-only component is not editable,
198
- * but still provides visual feedback upon user interaction, input border is not visible.
199
- *
200
- * @default false
201
- * @public
202
- */
203
-
204
- @property({ type: Boolean })
205
- displayonly!: boolean;
206
-
69
+ class UDExCountrySelector extends UDExSelectBase {
207
70
  /**
208
71
  * Allows to define the initially preselected country.
209
72
  *
@@ -223,194 +86,113 @@ class UDExCountrySelector extends UDExSearchableListBase {
223
86
  blockedCountryCodes?: string;
224
87
 
225
88
  /**
226
- * Defines the placeholder of the search.
227
- *
228
- * @default ""
229
- * @public
230
- */
231
- @property({ type: String })
232
- searchPlaceholder!: string;
233
-
234
- /**
235
- * Defines the value state of the component.
89
+ * Allows to hide the flag images in the country selector.
236
90
  *
237
- * @default "Standard"
238
- * @public
239
- */
240
- @property()
241
- valueState: `${UDExValueState}` = UDExValueState.Standard;
242
-
243
- /**
244
- * Defines supporting text under the country selector.
245
- *
246
- * @default undefined
91
+ * @default false
247
92
  * @public
248
93
  */
249
- @property({ type: String })
250
- supportingText?: string;
94
+ @property({ type: Boolean })
95
+ hideFlagImages?: boolean;
251
96
 
252
97
  /**
98
+ * Indicates whether the country selector is enabled.
253
99
  *
254
- * @public
100
+ * @default true
101
+ * @private
255
102
  */
256
103
  @property({ type: Boolean })
257
- hideFlagImages?: boolean;
104
+ _countrySelector: boolean = true;
258
105
 
259
- @property({ type: Boolean })
260
- _open?: boolean = false;
106
+ _countryList: Country[] = CountryListDB;
107
+ _selectedCountry!: Country | undefined;
261
108
 
262
- countryList: Country[] = CountryListDB;
263
- selectedCountry!: Country | undefined;
264
- _trigger!: UDExTextField;
265
-
266
- _dropdown!: UDExDropdown;
267
- _search!: Search;
268
- _handleResizeBound: ResizeObserverCallback;
269
-
270
- constructor() {
271
- super();
272
- this._shouldFilterItems = false;
273
- this._handleResizeBound = this._handleResize.bind(this);
274
- this._filteredItems = [];
275
- }
276
-
277
- onEnterDOM(): void {
278
- ResizeHandler.register(this, this._handleResizeBound);
279
- }
280
-
281
- onExitDOM(): void {
282
- ResizeHandler.deregister(this, this._handleResizeBound);
109
+ onAfterRendering(): void {
110
+ super.onAfterRendering();
111
+ this.handleOutsideClick();
283
112
  }
284
113
 
285
114
  onBeforeRendering(): void {
286
- if (this.blockedCountryCodes?.length) {
287
- const blockedCountryCodesArray = this.blockedCountryCodes.split(",").map(code => code.trim().toUpperCase());
288
- this.countryList = this.countryList.filter(country => !blockedCountryCodesArray?.includes(country.iso.toUpperCase()));
289
- }
290
-
291
- if (!this.selectedCountry) {
292
- this.selectedCountry = this.countryList.find(country => country.iso.toUpperCase() === this.preselectedCountry?.toUpperCase());
293
- }
294
-
115
+ super.onBeforeRendering();
116
+ this.filterBlockedCountries();
117
+ this.setPreselectedCountry();
295
118
  this.prepareCountrySelectorItems();
296
-
297
- if (!this._shouldFilterItems) {
298
- this._filteredItems = this.getProcessedItems();
299
- }
300
- }
301
-
302
- onAfterRendering() {
303
- this._dropdown = this.getDropdown();
304
- this._search = this.getSearch();
305
- this._trigger = this.getTrigger();
306
119
  }
307
120
 
308
- getTrigger(): UDExTextField {
309
- return this.shadowRoot!.querySelector<UDExTextField>("[udex-text-field]")!;
121
+ handleItemPress(e: CustomEvent): void {
122
+ this.handleItemSelection(e);
123
+ this.selectCountryByElement(e.target as HTMLElement);
310
124
  }
311
125
 
312
- _dropdownClose() {
313
- this.fireDecoratorEvent("close");
314
- this._trigger.iconActive = false;
126
+ handleInputFocusIn(): void {
127
+ this.inputFocusIn();
315
128
  }
316
129
 
317
- _dropdownOpen() {
318
- this.fireDecoratorEvent("open");
319
- this._trigger.iconActive = true;
320
- }
321
-
322
- _dropdownBeforeOpen() {
323
- this._open = true;
324
- this.onResetSearch();
325
- this.fireDecoratorEvent("before-open");
326
- }
327
-
328
- _dropdownBeforeClose() {
329
- this._open = false;
330
- this.fireDecoratorEvent("before-close");
331
- }
130
+ handleInputFocusOut(e: FocusEvent): void {
131
+ const relatedTarget = e.relatedTarget as HTMLElement;
132
+ const isInsideComponent = relatedTarget?.closest(`.${this._rootClass}`);
332
133
 
333
- get searchableList() {
334
- this.defaultAccessibleRole = "listbox";
335
- return executeTemplate(UDExCountrySelector.searchableListBaseTemplate, this);
336
- }
337
-
338
- static get searchableListBaseTemplate() {
339
- return SearchableListBaseTemplate;
340
- }
134
+ if (!isInsideComponent) {
135
+ this.closeDropdown();
136
+ this.resetSearchState();
137
+ this.updateImagePosition();
138
+ }
341
139
 
342
- _handleResize() {
343
- this._dropdown.style.setProperty("--udex-dropdown-pane-width", `${this._trigger.offsetWidth}px`);
140
+ this._focused = false;
344
141
  }
345
142
 
346
- handleCloseSearch() {
347
- this.getTextField()?.shadowRoot!.querySelector<Button>("[udex-control-button]")?.focus();
143
+ handleKeyDownSearch(e: KeyboardEvent): void {
144
+ this.onKeyDownSearch(e);
348
145
  }
349
146
 
350
- handleItemPress(e: CustomEvent) {
351
- this.onItemPress(e);
352
- const target = e.target as HTMLElement;
353
- const item: any = this.getItemFromList(target?.getAttribute("data-token-id") as string);
354
- this.selectedCountry = this.countryList.find(country => country.iso === item._id);
355
- this.dropDownClose();
147
+ handleDropdownBeforeOpen(): void {
148
+ this.dropdownBeforeOpen();
356
149
  }
357
150
 
358
- handleKeyPress(keyEvent: KeyboardEvent) {
359
- const key = keyEvent.key;
360
- this._dropdown.open = true;
361
- this._search.focus();
362
- this._search.value = key;
363
- this.fireChangeSearch();
151
+ handleDropdownClose(): void {
152
+ this._open = false;
153
+ this.fireEventDropdownClose();
364
154
  }
365
155
 
366
- handleInputMouseDown(e: CustomEvent): void {
367
- e.preventDefault();
156
+ handleOutsideClick(): void {
157
+ document.addEventListener("click", (e: Event) => {
158
+ if (e.target !== this) {
159
+ this._open = this._popover.open;
160
+ }
161
+ });
368
162
  }
369
163
 
370
- handleTriggerClick() {
371
- if (!this.isOpenerDisabled) {
372
- this._dropdown.opener = this.getTextField()._inputHolder;
373
- this._dropdown.open = !this._dropdown.open;
164
+ updateImagePosition(): void {
165
+ const imagePlaceholder = this.shadowRoot!.querySelector<HTMLElement>(".udex-text-field__input > .udex-text-field__image");
166
+ if (imagePlaceholder) {
167
+ imagePlaceholder.style.backgroundPosition = this.selectedCountryFlagX || "";
374
168
  }
375
169
  }
376
170
 
377
- handleValueSearch(e: CustomEvent): void {
378
- this.onSearch(e);
379
- this.fireChangeSearch();
380
- }
381
-
382
- handleSubmitSearch(): void {
383
- this.onSubmitSearch();
384
- }
385
-
386
- handleKeyDownSearch(keyEvent: CustomEvent<UDExSearchKeydownEventDetail>) {
387
- const { detail: { e } } = keyEvent;
388
-
389
- if (isTabPrevious(e) || isEscape(e)) {
390
- e.preventDefault();
391
- this.dropDownClose();
392
- this.handleCloseSearch();
171
+ filterBlockedCountries(): void {
172
+ if (this.blockedCountryCodes?.length) {
173
+ const blockedCountryCodesArray = this.blockedCountryCodes.split(",").map(code => code.trim().toUpperCase());
174
+ this._countryList = this._countryList.filter(country => !blockedCountryCodesArray.includes(country.iso.toUpperCase()));
393
175
  }
394
176
  }
395
177
 
396
- handleKeyDownDropdown(e: KeyboardEvent) {
397
- if ((isTabNext(e) && (e.target !== this._search || this.isListEmpty))) {
398
- this.dropDownClose();
178
+ setPreselectedCountry(): void {
179
+ if (!this._selectedCountry && this.preselectedCountry) {
180
+ const preselectedISO = this.preselectedCountry.toUpperCase();
181
+ this._selectedCountry = this._countryList.find(({ iso }) => iso.toUpperCase() === preselectedISO);
399
182
  }
400
183
  }
401
184
 
402
- dropDownClose(): void {
403
- this._dropdown.open = false;
404
- }
405
-
406
- handleResetSearch() {
407
- this.onResetSearch();
185
+ selectCountryByElement(el: HTMLElement): void {
186
+ const tokenId = el?.getAttribute("data-token-id") || "";
187
+ const itemObj = this.getItemFromList(tokenId);
188
+ this._selectedCountry = this._countryList.find(country => country.iso === itemObj?._id);
189
+ this._selectedOption = this.selectedCountryName || "";
408
190
  }
409
191
 
410
192
  prepareCountrySelectorItems(): void {
411
193
  this.items.length = 0;
412
- this.countryList.forEach(country => {
413
- const selected = country.iso.toUpperCase() === this.selectedCountry?.iso.toUpperCase();
194
+ this._countryList.forEach(country => {
195
+ const selected = country.iso.toUpperCase() === this._selectedCountry?.iso.toUpperCase();
414
196
  this.items.push({
415
197
  label: this.getCountryLabel(country.countryName, country.localName),
416
198
  innerHTML: this.getItemTemplate(country),
@@ -420,95 +202,32 @@ class UDExCountrySelector extends UDExSearchableListBase {
420
202
  });
421
203
  }
422
204
 
423
- fireChangeSearch(): void {
424
- this.fireDecoratorEvent("change-search", { value: this._search.value });
425
- }
426
-
427
- getItemTemplate(country: Country) {
428
- return this.hideFlagImages ? undefined : `<span class="udex-country-selector-item__image" style="background-position:${country.flagX}">`;
205
+ getItemTemplate(country: Country) :string | undefined {
206
+ return this.hideFlagImages ? undefined : `<span class="udex-text-field__image" style="background-position:${country.flagX}">`;
429
207
  }
430
208
 
431
209
  getCountryLabel(countryName?: string, localName?: string): string | null {
432
210
  return localName ? `${countryName} (${localName})` : countryName || null;
433
211
  }
434
212
 
435
- get ariaControls(): string | null | undefined {
436
- const list = this.shadowRoot!.querySelector<UDExList>("[udex-list]");
437
- return list?.getAttribute("id");
438
- }
439
-
440
- get selectedCountryFlagX(): string | undefined {
441
- return this.selectedCountry?.flagX;
442
- }
443
-
444
- get selectedCountryFlagY(): string | undefined {
445
- return this.selectedCountry?.flagY;
446
- }
447
-
448
213
  get selectedCountryName(): string | null {
449
- return this.selectedCountry ? this.getCountryLabel(this.selectedCountry.countryName, this.selectedCountry.localName) : "";
214
+ return this._selectedCountry ? this.getCountryLabel(this._selectedCountry.countryName, this._selectedCountry.localName) : "";
450
215
  }
451
216
 
452
217
  get flagAriaLabel(): string {
453
- return this.getCountryLabel(this.selectedCountry?.countryName, this.selectedCountry?.localName) || "None";
454
- }
455
-
456
- get triggerIcon(): string | undefined {
457
- if (!this.displayonly) {
458
- return this._open ? "navigation-up-arrow" : "navigation-down-arrow";
459
- }
460
- }
461
-
462
- get countrySelectorClasses(): string {
463
- const baseClass = "udex-country-selector__dropdown";
464
- return this.hideFlagImages ? `${baseClass} ${baseClass}--hide-flag` : baseClass;
465
- }
466
-
467
- get countrySelectorTriggerClasses(): string {
468
- const baseClass = "udex-country-selector__trigger";
469
- const classes = [baseClass];
470
-
471
- if (this.disabled) {
472
- classes.push(`${baseClass}--disabled`);
473
- }
474
-
475
- if (this.readonly) {
476
- classes.push(`${baseClass}--readonly`);
477
- }
478
-
479
- if (this.displayonly) {
480
- classes.push(`${baseClass}--displayonly`);
481
- }
482
-
483
- return classes.join(" ");
484
- }
485
-
486
- get showFlagImages(): boolean {
487
- return !this.hideFlagImages;
218
+ return this.getCountryLabel(this._selectedCountry?.countryName, this._selectedCountry?.localName) || "None";
488
219
  }
489
220
 
490
- get isOpenerDisabled(): boolean {
491
- return this.readonly || this.displayonly || this.disabled;
492
- }
493
-
494
- getSearch(): Search {
495
- return this.shadowRoot!.querySelector<Search>("[udex-search]")!;
496
- }
497
-
498
- getDropdownPopover(): Popover {
499
- return this._dropdown.shadowRoot!.querySelector<Popover>("[ui5-popover]")!;
500
- }
501
-
502
- getDropdown(): UDExDropdown {
503
- return this.shadowRoot!.querySelector<UDExDropdown>("[udex-dropdown]")!;
221
+ get selectedCountryFlagX(): string | undefined {
222
+ return this._selectedCountry?.flagX;
504
223
  }
505
224
 
506
- getTextField(): UDExTextField {
507
- return this.shadowRoot!.querySelector<UDExTextField>("[udex-text-field]")!;
225
+ get selectedCountryFlagY(): string | undefined {
226
+ return this._selectedCountry?.flagY;
508
227
  }
509
228
 
510
- get effectiveAriaLabel(): string {
511
- return this.label || this.accessibleName || UDExCountrySelector.i18nBundle.getText(COUNTRY_SELECT);
229
+ get showImageFlags(): boolean {
230
+ return true;
512
231
  }
513
232
  }
514
233
 
package/src/DatePicker.ts CHANGED
@@ -67,6 +67,7 @@ type UDExDatePickerValueStateChangeEventDetail = {
67
67
  * @allowPreventDefault
68
68
  * @param {Array<string>} selectedValues The selected dates
69
69
  * @param {Array<number>} selectedDates The selected dates as UTC timestamps
70
+ * @param {number} timestamp The last selected date as UTC timestamp
70
71
  * @public
71
72
  */
72
73
  @event("selection-change", { cancelable: true, bubbles: true })
@@ -77,7 +78,7 @@ type UDExDatePickerValueStateChangeEventDetail = {
77
78
  * prevented, the component will not update the value state.
78
79
  * @allowPreventDefault
79
80
  * @public
80
- * @param {string} UDExValueState The new `UDExValueState` that will be set.
81
+ * @param {UDExValueState} valueState The new `UDExValueState` that will be set.
81
82
  * @param {boolean} valid Indicator if the value is in between the min and max value.
82
83
  */
83
84
  @event("value-state-change", { bubbles: true })
package/src/FilterMenu.ts CHANGED
@@ -97,6 +97,7 @@ type UDExFilterMenuResetClickEventDetail = {
97
97
  * Fired event when the user click on a reset button on the footer.
98
98
  *
99
99
  * @public
100
+ * @param {Array<UDExListItemBase>} restoredItems
100
101
  */
101
102
  @event("reset-click", { bubbles: true })
102
103
 
@@ -104,6 +105,7 @@ type UDExFilterMenuResetClickEventDetail = {
104
105
  * Fired event when the user click on a result button on the footer.
105
106
  *
106
107
  * @public
108
+ * @param {Array<UDExListItemBase>} selectedItems
107
109
  */
108
110
  @event("result-click", { bubbles: true })
109
111
 
@@ -303,14 +305,24 @@ class UDExFilterMenu extends UDExSearchableListBase {
303
305
  @property({ type: String })
304
306
  triggerAccessibleRole: string = "combobox";
305
307
 
308
+ /**
309
+ * Determines whether the filter should be applied.
310
+ * @default false
311
+ * @private
312
+ */
306
313
  @property({ type: Boolean })
307
314
  _shouldApplyFilter: boolean = false;
308
315
 
316
+ /**
317
+ * Determines whether the component should be re-rendered.
318
+ * @default false
319
+ * @private
320
+ */
309
321
  @property({ type: Boolean, noAttribute: true })
310
322
  _requestRender = false;
311
323
 
312
324
  _trigger!: UDExButton;
313
- _search!: UDExSearch;
325
+ _search!: UDExSearch | HTMLInputElement;
314
326
  _popover!: Popover;
315
327
  _breakpointSizeXS = 640;
316
328
  _initialState: Array<initialItemState> = [];
@@ -347,8 +359,8 @@ class UDExFilterMenu extends UDExSearchableListBase {
347
359
  this.onHeaderPress(e);
348
360
  }
349
361
 
350
- handleValueSearch(e:CustomEvent): void {
351
- this.onSearch(e);
362
+ handleValueSearch(e:CustomEvent<{ value: string }>): void {
363
+ this.onSearch(e.detail.value);
352
364
  }
353
365
 
354
366
  handleSubmitSearch(): void {