@sapudex/web-components 2.55.0 → 2.56.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 (275) hide show
  1. package/cypress/specs/HeroBanner.cy.tsx +35 -1
  2. package/cypress/specs/List.cy.tsx +63 -1
  3. package/cypress/specs/ListItem.cy.tsx +44 -0
  4. package/cypress/specs/MastheadShell.cy.tsx +39 -0
  5. package/cypress/specs/PhoneNumberField.cy.tsx +29 -1
  6. package/cypress/specs/SelectBox.cy.tsx +99 -0
  7. package/dist/CountrySelectorTemplate.js +1 -1
  8. package/dist/CountrySelectorTemplate.js.map +1 -1
  9. package/dist/FilterMenu.js +5 -1
  10. package/dist/FilterMenu.js.map +1 -1
  11. package/dist/HeroBanner.d.ts +12 -0
  12. package/dist/HeroBanner.js +54 -0
  13. package/dist/HeroBanner.js.map +1 -1
  14. package/dist/List.d.ts +5 -0
  15. package/dist/List.js +7 -0
  16. package/dist/List.js.map +1 -1
  17. package/dist/ListItem.js +5 -1
  18. package/dist/ListItem.js.map +1 -1
  19. package/dist/ListTemplate.js +1 -1
  20. package/dist/ListTemplate.js.map +1 -1
  21. package/dist/MastheadShell.d.ts +7 -0
  22. package/dist/MastheadShell.js +38 -0
  23. package/dist/MastheadShell.js.map +1 -1
  24. package/dist/PhoneNumberField.d.ts +3 -3
  25. package/dist/PhoneNumberField.js +18 -21
  26. package/dist/PhoneNumberField.js.map +1 -1
  27. package/dist/PhoneNumberFieldTemplate.d.ts +2 -0
  28. package/dist/PhoneNumberFieldTemplate.js +12 -0
  29. package/dist/PhoneNumberFieldTemplate.js.map +1 -0
  30. package/dist/Search.d.ts +2 -0
  31. package/dist/Search.js +21 -0
  32. package/dist/Search.js.map +1 -1
  33. package/dist/SearchableListBase.d.ts +4 -0
  34. package/dist/SearchableListBase.js +66 -6
  35. package/dist/SearchableListBase.js.map +1 -1
  36. package/dist/SearchableListBaseTemplate.js +1 -1
  37. package/dist/SearchableListBaseTemplate.js.map +1 -1
  38. package/dist/SelectBase.js +14 -22
  39. package/dist/SelectBase.js.map +1 -1
  40. package/dist/SelectBoxTemplate.js +1 -1
  41. package/dist/SelectBoxTemplate.js.map +1 -1
  42. package/dist/StatusMessage.d.ts +2 -2
  43. package/dist/StatusMessage.js +1 -1
  44. package/dist/StatusMessage.js.map +1 -1
  45. package/dist/TextAreaTemplate.js +1 -1
  46. package/dist/TextAreaTemplate.js.map +1 -1
  47. package/dist/TextFieldTemplate.js +1 -1
  48. package/dist/TextFieldTemplate.js.map +1 -1
  49. package/dist/Upload.js +6 -9
  50. package/dist/Upload.js.map +1 -1
  51. package/dist/UploadItem.d.ts +2 -2
  52. package/dist/UploadItem.js +6 -9
  53. package/dist/UploadItem.js.map +1 -1
  54. package/dist/UploadItemTemplate.d.ts +2 -0
  55. package/dist/UploadItemTemplate.js +14 -0
  56. package/dist/UploadItemTemplate.js.map +1 -0
  57. package/dist/UploadTemplate.d.ts +2 -0
  58. package/dist/UploadTemplate.js +11 -0
  59. package/dist/UploadTemplate.js.map +1 -0
  60. package/dist/assets/{InputSuggestions-DPiJnNLn.js → InputSuggestions-ChhTxYh4.js} +1 -1
  61. package/dist/assets/{ListItemStandardExpandableTextTemplate-B-v72jL6.js → ListItemStandardExpandableTextTemplate-Bh1HxZfH.js} +1 -1
  62. package/dist/assets/{bundle-C7Yft7IG.css → bundle-CdO3MnjQ.css} +1 -1
  63. package/dist/assets/{bundle.esm-DPppjwN7.js → bundle.esm-DCX_ohoZ.js} +253 -241
  64. package/dist/assets/messagebundle_uk-CCv57GhV.js +1 -0
  65. package/dist/css/themes/AccordionItem.css +1 -1
  66. package/dist/css/themes/AccordionSpotlight.css +1 -1
  67. package/dist/css/themes/Avatar.css +1 -1
  68. package/dist/css/themes/CountrySelector.css +1 -1
  69. package/dist/css/themes/EventRibbon.css +1 -1
  70. package/dist/css/themes/FilterMenu.css +1 -1
  71. package/dist/css/themes/HeroBanner.css +1 -1
  72. package/dist/css/themes/ImageGridTicker.css +1 -1
  73. package/dist/css/themes/ListItem.css +1 -1
  74. package/dist/css/themes/MastheadCountrySelector.css +1 -1
  75. package/dist/css/themes/MastheadItem.css +1 -1
  76. package/dist/css/themes/MastheadProfileMenu.css +1 -1
  77. package/dist/css/themes/MastheadShell.css +1 -1
  78. package/dist/css/themes/MediaPlayer.css +1 -1
  79. package/dist/css/themes/Modal.css +1 -1
  80. package/dist/css/themes/PhoneNumberField.css +1 -1
  81. package/dist/css/themes/Search.css +1 -1
  82. package/dist/css/themes/SecondaryNavigationItem.css +1 -1
  83. package/dist/css/themes/SelectBase.css +1 -1
  84. package/dist/css/themes/StepInput.css +1 -1
  85. package/dist/css/themes/TabInOverflow.css +1 -1
  86. package/dist/css/themes/TabNavigation.css +1 -1
  87. package/dist/css/themes/TableCellBase.css +1 -1
  88. package/dist/css/themes/TagGroup.css +1 -1
  89. package/dist/css/themes/TextArea.css +1 -1
  90. package/dist/css/themes/TextField.css +1 -1
  91. package/dist/css/themes/Wizard.css +1 -1
  92. package/dist/custom-elements-internal.json +1138 -117
  93. package/dist/custom-elements.json +740 -123
  94. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  95. package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
  96. package/dist/generated/themes/AccordionItem.css.js +1 -1
  97. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  98. package/dist/generated/themes/AccordionSpotlight.css.d.ts +1 -1
  99. package/dist/generated/themes/AccordionSpotlight.css.js +1 -1
  100. package/dist/generated/themes/AccordionSpotlight.css.js.map +1 -1
  101. package/dist/generated/themes/Avatar.css.d.ts +1 -1
  102. package/dist/generated/themes/Avatar.css.js +1 -1
  103. package/dist/generated/themes/Avatar.css.js.map +1 -1
  104. package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
  105. package/dist/generated/themes/CountrySelector.css.js +1 -1
  106. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  107. package/dist/generated/themes/EventRibbon.css.d.ts +1 -1
  108. package/dist/generated/themes/EventRibbon.css.js +1 -1
  109. package/dist/generated/themes/EventRibbon.css.js.map +1 -1
  110. package/dist/generated/themes/FilterMenu.css.d.ts +1 -1
  111. package/dist/generated/themes/FilterMenu.css.js +1 -1
  112. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  113. package/dist/generated/themes/HeroBanner.css.d.ts +1 -1
  114. package/dist/generated/themes/HeroBanner.css.js +1 -1
  115. package/dist/generated/themes/HeroBanner.css.js.map +1 -1
  116. package/dist/generated/themes/ImageGridTicker.css.d.ts +1 -1
  117. package/dist/generated/themes/ImageGridTicker.css.js +1 -1
  118. package/dist/generated/themes/ImageGridTicker.css.js.map +1 -1
  119. package/dist/generated/themes/ListItem.css.d.ts +1 -1
  120. package/dist/generated/themes/ListItem.css.js +1 -1
  121. package/dist/generated/themes/ListItem.css.js.map +1 -1
  122. package/dist/generated/themes/MastheadCountrySelector.css.d.ts +1 -1
  123. package/dist/generated/themes/MastheadCountrySelector.css.js +1 -1
  124. package/dist/generated/themes/MastheadCountrySelector.css.js.map +1 -1
  125. package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
  126. package/dist/generated/themes/MastheadItem.css.js +1 -1
  127. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  128. package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
  129. package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
  130. package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
  131. package/dist/generated/themes/MastheadShell.css.d.ts +1 -1
  132. package/dist/generated/themes/MastheadShell.css.js +1 -1
  133. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  134. package/dist/generated/themes/MediaPlayer.css.d.ts +1 -1
  135. package/dist/generated/themes/MediaPlayer.css.js +1 -1
  136. package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
  137. package/dist/generated/themes/Modal.css.d.ts +1 -1
  138. package/dist/generated/themes/Modal.css.js +1 -1
  139. package/dist/generated/themes/Modal.css.js.map +1 -1
  140. package/dist/generated/themes/PhoneNumberField.css.d.ts +1 -1
  141. package/dist/generated/themes/PhoneNumberField.css.js +1 -1
  142. package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
  143. package/dist/generated/themes/Search.css.d.ts +1 -1
  144. package/dist/generated/themes/Search.css.js +1 -1
  145. package/dist/generated/themes/Search.css.js.map +1 -1
  146. package/dist/generated/themes/SecondaryNavigationItem.css.d.ts +1 -1
  147. package/dist/generated/themes/SecondaryNavigationItem.css.js +1 -1
  148. package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -1
  149. package/dist/generated/themes/SelectBase.css.d.ts +1 -1
  150. package/dist/generated/themes/SelectBase.css.js +1 -1
  151. package/dist/generated/themes/SelectBase.css.js.map +1 -1
  152. package/dist/generated/themes/StepInput.css.d.ts +1 -1
  153. package/dist/generated/themes/StepInput.css.js +1 -1
  154. package/dist/generated/themes/StepInput.css.js.map +1 -1
  155. package/dist/generated/themes/TabInOverflow.css.d.ts +1 -1
  156. package/dist/generated/themes/TabInOverflow.css.js +1 -1
  157. package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
  158. package/dist/generated/themes/TabNavigation.css.d.ts +1 -1
  159. package/dist/generated/themes/TabNavigation.css.js +1 -1
  160. package/dist/generated/themes/TabNavigation.css.js.map +1 -1
  161. package/dist/generated/themes/TableCellBase.css.d.ts +1 -1
  162. package/dist/generated/themes/TableCellBase.css.js +1 -1
  163. package/dist/generated/themes/TableCellBase.css.js.map +1 -1
  164. package/dist/generated/themes/TagGroup.css.d.ts +1 -1
  165. package/dist/generated/themes/TagGroup.css.js +1 -1
  166. package/dist/generated/themes/TagGroup.css.js.map +1 -1
  167. package/dist/generated/themes/TextArea.css.d.ts +1 -1
  168. package/dist/generated/themes/TextArea.css.js +1 -1
  169. package/dist/generated/themes/TextArea.css.js.map +1 -1
  170. package/dist/generated/themes/TextField.css.d.ts +1 -1
  171. package/dist/generated/themes/TextField.css.js +1 -1
  172. package/dist/generated/themes/TextField.css.js.map +1 -1
  173. package/dist/generated/themes/Wizard.css.d.ts +1 -1
  174. package/dist/generated/themes/Wizard.css.js +1 -1
  175. package/dist/generated/themes/Wizard.css.js.map +1 -1
  176. package/dist/messagebundle_uk.properties +8 -0
  177. package/dist/utils/searchBackdrop.d.ts +1 -0
  178. package/dist/utils/searchBackdrop.js +23 -0
  179. package/dist/utils/searchBackdrop.js.map +1 -0
  180. package/dist/vscode.html-custom-data.json +165 -2
  181. package/dist/web-types.json +363 -6
  182. package/package.json +1 -1
  183. package/src/CountrySelectorTemplate.tsx +2 -2
  184. package/src/FilterMenu.ts +5 -1
  185. package/src/HeroBanner.ts +66 -0
  186. package/src/List.ts +8 -0
  187. package/src/ListItem.ts +5 -1
  188. package/src/ListTemplate.tsx +1 -1
  189. package/src/MastheadShell.ts +44 -0
  190. package/src/PhoneNumberField.ts +23 -22
  191. package/src/PhoneNumberFieldTemplate.tsx +128 -0
  192. package/src/Search.ts +21 -1
  193. package/src/SearchableListBase.ts +62 -7
  194. package/src/SearchableListBaseTemplate.tsx +1 -0
  195. package/src/SelectBase.ts +14 -21
  196. package/src/SelectBoxTemplate.tsx +1 -1
  197. package/src/StatusMessage.ts +4 -3
  198. package/src/TextAreaTemplate.tsx +1 -1
  199. package/src/TextFieldTemplate.tsx +1 -1
  200. package/src/Upload.ts +7 -10
  201. package/src/UploadItem.ts +7 -9
  202. package/src/UploadItemTemplate.tsx +62 -0
  203. package/src/UploadTemplate.tsx +53 -0
  204. package/src/generated/themes/AccordionItem.css.ts +1 -1
  205. package/src/generated/themes/AccordionSpotlight.css.ts +1 -1
  206. package/src/generated/themes/Avatar.css.ts +1 -1
  207. package/src/generated/themes/CountrySelector.css.ts +1 -1
  208. package/src/generated/themes/EventRibbon.css.ts +1 -1
  209. package/src/generated/themes/FilterMenu.css.ts +1 -1
  210. package/src/generated/themes/HeroBanner.css.ts +1 -1
  211. package/src/generated/themes/ImageGridTicker.css.ts +1 -1
  212. package/src/generated/themes/ListItem.css.ts +1 -1
  213. package/src/generated/themes/MastheadCountrySelector.css.ts +1 -1
  214. package/src/generated/themes/MastheadItem.css.ts +1 -1
  215. package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
  216. package/src/generated/themes/MastheadShell.css.ts +1 -1
  217. package/src/generated/themes/MediaPlayer.css.ts +1 -1
  218. package/src/generated/themes/Modal.css.ts +1 -1
  219. package/src/generated/themes/PhoneNumberField.css.ts +1 -1
  220. package/src/generated/themes/Search.css.ts +1 -1
  221. package/src/generated/themes/SecondaryNavigationItem.css.ts +1 -1
  222. package/src/generated/themes/SelectBase.css.ts +1 -1
  223. package/src/generated/themes/StepInput.css.ts +1 -1
  224. package/src/generated/themes/TabInOverflow.css.ts +1 -1
  225. package/src/generated/themes/TabNavigation.css.ts +1 -1
  226. package/src/generated/themes/TableCellBase.css.ts +1 -1
  227. package/src/generated/themes/TagGroup.css.ts +1 -1
  228. package/src/generated/themes/TextArea.css.ts +1 -1
  229. package/src/generated/themes/TextField.css.ts +1 -1
  230. package/src/generated/themes/Wizard.css.ts +1 -1
  231. package/src/i18n/messagebundle_uk.properties +8 -0
  232. package/src/themes/AccordionItem.css +1 -1
  233. package/src/themes/AccordionSpotlight.css +1 -1
  234. package/src/themes/Avatar.css +1 -1
  235. package/src/themes/CountrySelector.css +12 -2
  236. package/src/themes/EventRibbon.css +1 -1
  237. package/src/themes/FilterMenu.css +3 -2
  238. package/src/themes/HeroBanner.css +1 -1
  239. package/src/themes/ImageGridTicker.css +1 -1
  240. package/src/themes/ListItem.css +10 -2
  241. package/src/themes/MastheadCountrySelector.css +1 -1
  242. package/src/themes/MastheadItem.css +1 -1
  243. package/src/themes/MastheadProfileMenu.css +1 -1
  244. package/src/themes/MastheadShell.css +1 -1
  245. package/src/themes/MediaPlayer.css +10 -10
  246. package/src/themes/Modal.css +5 -3
  247. package/src/themes/PhoneNumberField.css +16 -6
  248. package/src/themes/Search.css +9 -9
  249. package/src/themes/SecondaryNavigationItem.css +1 -1
  250. package/src/themes/SelectBase.css +2 -2
  251. package/src/themes/StepInput.css +1 -1
  252. package/src/themes/TabInOverflow.css +2 -2
  253. package/src/themes/TabNavigation.css +7 -7
  254. package/src/themes/TableCellBase.css +1 -1
  255. package/src/themes/TagGroup.css +1 -1
  256. package/src/themes/TextArea.css +1 -1
  257. package/src/themes/TextField.css +1 -1
  258. package/src/themes/Wizard.css +1 -1
  259. package/src/utils/searchBackdrop.ts +23 -0
  260. package/dist/assets/messagebundle_uk-GmdhsMsP.js +0 -1
  261. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.d.ts +0 -3
  262. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js +0 -16
  263. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js.map +0 -1
  264. package/dist/generated/templates/UploadItemTemplate.lit.d.ts +0 -3
  265. package/dist/generated/templates/UploadItemTemplate.lit.js +0 -12
  266. package/dist/generated/templates/UploadItemTemplate.lit.js.map +0 -1
  267. package/dist/generated/templates/UploadTemplate.lit.d.ts +0 -3
  268. package/dist/generated/templates/UploadTemplate.lit.js +0 -10
  269. package/dist/generated/templates/UploadTemplate.lit.js.map +0 -1
  270. package/src/PhoneNumberField.hbs +0 -119
  271. package/src/Upload.hbs +0 -21
  272. package/src/UploadItem.hbs +0 -32
  273. package/src/generated/templates/PhoneNumberFieldTemplate.lit.ts +0 -20
  274. package/src/generated/templates/UploadItemTemplate.lit.ts +0 -16
  275. package/src/generated/templates/UploadTemplate.lit.ts +0 -14
@@ -29,6 +29,7 @@ import { BreakpointUtils } from "./utils/Breakpoints.js";
29
29
  import AnalyticsName from "./types/AnalyticsName.js";
30
30
  import MastheadShellTemplate from "./generated/templates/MastheadShellTemplate.lit.js";
31
31
  import translate from "./utils/translate.js";
32
+ import ensureSearchBackdropStyles from "./utils/searchBackdrop.js";
32
33
 
33
34
  // Styles
34
35
  import MastheadShellCss from "./generated/themes/MastheadShell.css.js";
@@ -550,11 +551,16 @@ class UDExMastheadShell extends UI5Element {
550
551
  _rootHolder!: HTMLElement | null | undefined;
551
552
  _shouldHandleResize!: boolean;
552
553
  _isVisible!: boolean;
554
+ _handleSuggestionOpenedBound!: () => void;
555
+ _handleSuggestionClosedBound!: () => void;
556
+ _bodyBackdropEl: HTMLElement | null = null;
553
557
 
554
558
  constructor() {
555
559
  super();
556
560
  this._handleResizeBound = this._handleResize.bind(this);
557
561
  this._handleWindowResizeBound = this._handleWindowResize.bind(this);
562
+ this._handleSuggestionOpenedBound = this._showSearchBackdrop.bind(this);
563
+ this._handleSuggestionClosedBound = this._hideSearchBackdrop.bind(this);
558
564
  }
559
565
 
560
566
  onBeforeRendering() {
@@ -585,6 +591,8 @@ class UDExMastheadShell extends UI5Element {
585
591
  onEnterDOM(): void {
586
592
  ResizeHandler.register(this, this._handleResizeBound);
587
593
  window.addEventListener("resize", this._handleWindowResizeBound);
594
+ this.addEventListener("suggestion-popover-opened", this._handleSuggestionOpenedBound);
595
+ this.addEventListener("suggestion-popover-closed", this._handleSuggestionClosedBound);
588
596
  if (isDesktop()) {
589
597
  this.setAttribute("desktop", "");
590
598
  }
@@ -593,6 +601,10 @@ class UDExMastheadShell extends UI5Element {
593
601
  onExitDOM(): void {
594
602
  ResizeHandler.deregister(this, this._handleResizeBound);
595
603
  window.removeEventListener("resize", this._handleWindowResizeBound);
604
+ this.removeEventListener("suggestion-popover-opened", this._handleSuggestionOpenedBound);
605
+ this.removeEventListener("suggestion-popover-closed", this._handleSuggestionClosedBound);
606
+ this._bodyBackdropEl?.remove();
607
+ this._bodyBackdropEl = null;
596
608
  }
597
609
 
598
610
  _handleWindowResize(): void {
@@ -985,6 +997,38 @@ class UDExMastheadShell extends UI5Element {
985
997
  this.fireMastheadEvent("search-opened");
986
998
  }
987
999
 
1000
+ private _getBackdropEl(): HTMLElement {
1001
+ if (!this._bodyBackdropEl) {
1002
+ ensureSearchBackdropStyles(this.ownerDocument);
1003
+ const el = this.ownerDocument.createElement("div");
1004
+ el.className = "udex-search-backdrop";
1005
+ el.addEventListener("click", () => this.handleBackdropClick());
1006
+ this.ownerDocument.body.appendChild(el);
1007
+ this._bodyBackdropEl = el;
1008
+ }
1009
+ return this._bodyBackdropEl;
1010
+ }
1011
+
1012
+ private _showSearchBackdrop(): void {
1013
+ if (!this.showSearchByDefault && this.isMobileMenuMode) {
1014
+ return;
1015
+ }
1016
+ const backdrop = this._getBackdropEl();
1017
+ const top = this.getBoundingClientRect().bottom;
1018
+ backdrop.style.top = `${top}px`;
1019
+ backdrop.style.display = "block";
1020
+ }
1021
+
1022
+ private _hideSearchBackdrop(): void {
1023
+ if (this._bodyBackdropEl) {
1024
+ this._bodyBackdropEl.style.display = "none";
1025
+ }
1026
+ }
1027
+
1028
+ handleBackdropClick(): void {
1029
+ this._desktopSearch?.onClosePopover();
1030
+ }
1031
+
988
1032
  /**
989
1033
  * Open the mobile menu panel.
990
1034
  * @public
@@ -1,34 +1,32 @@
1
1
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
3
3
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
4
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
5
5
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
6
6
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
7
7
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
8
8
  import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
9
9
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
10
10
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
11
+ import { isEnter } from "@ui5/webcomponents-base/dist/Keys.js";
11
12
  import {
12
13
  COUNTRY_SELECT, READ_ONLY, VALUE_STATE_ERROR, VALUE_STATE_SUCCESS,
13
14
  } from "./generated/i18n/i18n-defaults.js";
14
15
  import type { Country } from "./data/CountryListISO3166.js";
15
16
  import { CountryListDB } from "./data/CountryListISO3166.js";
16
- import UDExDropdown from "./Dropdown.js";
17
- import UDExList from "./List.js";
18
- import UDExListItem from "./ListItem.js";
19
- import UDExButton from "./Button.js";
20
- import UDExStatusMessage from "./StatusMessage.js";
17
+ import type UDExDropdown from "./Dropdown.js";
18
+ import type UDExList from "./List.js";
19
+ import type UDExButton from "./Button.js";
21
20
  import translate from "./utils/translate.js";
22
21
 
23
22
  import "@ui5/webcomponents/dist/Icon.js";
24
23
  import "@ui5/webcomponents-icons/dist/slim-arrow-up.js";
25
24
  import "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
26
25
 
27
- import PhoneNumberFieldTemplate from "./generated/templates/PhoneNumberFieldTemplate.lit.js";
26
+ import PhoneNumberFieldTemplate from "./PhoneNumberFieldTemplate.js";
28
27
 
29
28
  // Styles
30
29
  import PhoneNumberFieldCss from "./generated/themes/PhoneNumberField.css.js";
31
- import { isEnter } from "@ui5/webcomponents-base/dist/Keys.js";
32
30
 
33
31
  export interface ExtendedCountriesListPhoneNumberData extends Country {
34
32
  selected?: boolean;
@@ -66,16 +64,9 @@ const digitsLimit: number = 15;
66
64
  */
67
65
  @customElement({
68
66
  tag: "udex-phone-number-field",
69
- renderer: litRender,
67
+ renderer: jsxRenderer,
70
68
  styles: PhoneNumberFieldCss,
71
69
  template: PhoneNumberFieldTemplate,
72
- dependencies: [
73
- UDExDropdown,
74
- UDExList,
75
- UDExListItem,
76
- UDExButton,
77
- UDExStatusMessage,
78
- ],
79
70
  })
80
71
  /**
81
72
  * Fired when the value of the component changes at each keystroke.
@@ -323,13 +314,22 @@ class UDExPhoneNumberField extends UI5Element {
323
314
  }
324
315
 
325
316
  onBeforeRendering() {
326
- this.applyPlaceholder();
327
-
328
317
  if (this.blockedCountryCodes?.length) {
329
318
  const blockedCountryCodesArray = this.blockedCountryCodes.split(",").map(code => code.trim().toUpperCase());
330
319
  this.countriesList = this.countriesList
331
320
  .filter(country => !blockedCountryCodesArray?.includes(country.iso.toUpperCase()));
332
321
  }
322
+
323
+ if (this.value) {
324
+ if (this.selectedIso && !this.value.startsWith(this.selectedPhonePrefix)) {
325
+ this.selectedIso = "";
326
+ }
327
+ if (!this.selectedIso) {
328
+ this.autoSelectCountry(this.value);
329
+ }
330
+ }
331
+
332
+ this.applyPlaceholder();
333
333
  }
334
334
 
335
335
  onAfterRendering() {
@@ -430,7 +430,8 @@ class UDExPhoneNumberField extends UI5Element {
430
430
  handleSelect(e: CustomEvent) {
431
431
  this._dropdown.open = false;
432
432
  this.selectedIso = e.detail.item.id;
433
- this.applyPhoneMask();
433
+ this.value = this.selectedPhonePrefix;
434
+ this.maxlength = this.calculateMaxLength(this.selectedPhonePrefix, this.selectedPlaceholder);
434
435
  this.getInputField().focus();
435
436
  this.fireDecoratorEvent("change");
436
437
  }
@@ -585,7 +586,7 @@ class UDExPhoneNumberField extends UI5Element {
585
586
  }
586
587
 
587
588
  get ariaInvalid(): string | null {
588
- return this.valueState === "Error" ? "true" : null;
589
+ return this.valueState === UDExPhoneNumberFieldValueState.Error ? "true" : null;
589
590
  }
590
591
 
591
592
  get isInputReadonly(): boolean {
@@ -619,11 +620,11 @@ class UDExPhoneNumberField extends UI5Element {
619
620
  }
620
621
 
621
622
  get hasValueState(): boolean {
622
- return this.valueState !== "Standard";
623
+ return this.valueState !== UDExPhoneNumberFieldValueState.Standard;
623
624
  }
624
625
 
625
626
  get valueStateText(): string | undefined {
626
- return this.valueState !== "Standard" ? this.valueStateTypeMappings[this.valueState] : undefined;
627
+ return this.valueState !== UDExPhoneNumberFieldValueState.Standard ? this.valueStateTypeMappings[this.valueState] : undefined;
627
628
  }
628
629
 
629
630
  get readOnlyStateText() {
@@ -0,0 +1,128 @@
1
+ import type UDExPhoneNumberField from "./PhoneNumberField.js";
2
+ import UDExDropdown from "./Dropdown.js";
3
+ import UDExList from "./List.js";
4
+ import UDExListItem from "./ListItem.js";
5
+ import UDExButton from "./Button.js";
6
+ import UDExStatusMessage from "./StatusMessage.js";
7
+ import UDExButtonDesign from "./types/ButtonDesign.js";
8
+ import UDExButtonSize from "./types/ButtonSize.js";
9
+
10
+ export default function PhoneNumberFieldTemplate(this: UDExPhoneNumberField) {
11
+ return (
12
+ <>
13
+ <div
14
+ class="udex-phone-number-field"
15
+ onui5-selection-change={this.handleSelect}>
16
+ {this.label && (
17
+ <label
18
+ id="udex-phone-number-field__label"
19
+ class="udex-phone-number-field__label"
20
+ htmlFor={`${this._id}-phone`}>
21
+ {this.label}
22
+ {this.required && " *"}
23
+ </label>
24
+ )}
25
+ <UDExDropdown
26
+ class="udex-phone-number-field__dropdown"
27
+ opener={`udex-${this._id}-phone-number__opener`}
28
+ id={`${this._id}_dropdown-menu`}
29
+ onui5-before-open={this.dropdownBeforeOpen}
30
+ onui5-before-close={this.dropdownBeforeClose}
31
+ horizontalAlign="Start"
32
+ height={this.height}>
33
+ <UDExList>
34
+ {this.countriesList.map(country => (
35
+ <UDExListItem
36
+ id={country.iso}
37
+ selected={country.selected}>
38
+ <div class="udex-phone-number-field__dropdown-list-item">
39
+ <div
40
+ class="udex-phone-number-field__flag"
41
+ style={{ backgroundPositionX: country.flagX, backgroundPositionY: country.flagY }}
42
+ ></div>
43
+ <span class="udex-phone-number-field__country-name">
44
+ {country.countryName}
45
+ {country.localName && ` (${country.localName})`}
46
+ {" "}{country.phonePrefix}
47
+ </span>
48
+ </div>
49
+ </UDExListItem>
50
+ ))}
51
+ </UDExList>
52
+ </UDExDropdown>
53
+ <div class="udex-phone-number-field__input-wrapper">
54
+ {!this.displayonly && (
55
+ <UDExButton
56
+ id={`udex-${this._id}-phone-number__opener`}
57
+ class="udex-phone-number-field__open-button"
58
+ role="combobox"
59
+ aria-haspopup="true"
60
+ design={UDExButtonDesign.Tertiary}
61
+ size={UDExButtonSize.Large}
62
+ endIcon={this.buttonIcon}
63
+ disabled={this.isButtonDisabled}
64
+ accessibleNameRef={`${this._id}-countrySelectorAriaLabel ${this.ariaDescribedById}`}
65
+ aria-label={this.countrySelectorAriaLabel}
66
+ aria-expanded={this._dropdownExpanded}
67
+ aria-controls={`${this._id}_dropdown-menu`}
68
+ onClick={this.openDropdown}>
69
+ <div class="udex-phone-number-field__open-button-text">
70
+ {this.selectedCountryName} {this.selectedPhonePrefix}
71
+ </div>
72
+ <div class="udex-phone-number-field__button-content">
73
+ <span
74
+ class="udex-phone-number-field__flag"
75
+ aria-label={this.selectedCountryName}
76
+ style={{ backgroundPositionX: this.selectedFlagBackgroundPosition.x, backgroundPositionY: this.selectedFlagBackgroundPosition.y }}
77
+ />
78
+ </div>
79
+ </UDExButton>
80
+ )}
81
+ <input
82
+ id={`${this._id}-phone`}
83
+ class="udex-phone-number-field__input"
84
+ type="tel"
85
+ value={this.value}
86
+ placeholder={this.phoneFormat}
87
+ maxLength={this.maxlength}
88
+ disabled={this.disabled}
89
+ readonly={this.isInputReadonly}
90
+ required={this.required}
91
+ autoComplete="tel"
92
+ aria-label={this.accessibleName}
93
+ aria-labelledby={this.accessibleName}
94
+ aria-required={this.required}
95
+ aria-readonly={this.isInputReadonly}
96
+ aria-disabled={this.disabled}
97
+ aria-invalid={(this.ariaInvalid ?? undefined) as "true" | undefined}
98
+ aria-describedby={this.ariaDescribedById}
99
+ onInput={this.handleInput}
100
+ onClick={this.handleClick}
101
+ onFocus={this.handleFocus}
102
+ onBlur={this.handleBlur}
103
+ onKeyDown={this.handleKeyDown}
104
+ onKeyUp={this.handleKeyUp}
105
+ tabIndex={this.inputTabIndex}
106
+ />
107
+ </div>
108
+ </div>
109
+ {this.supportingText && (
110
+ <UDExStatusMessage
111
+ disabled={this.disabled}
112
+ supportingText={this.supportingText}
113
+ valueState={this.valueState}>
114
+ </UDExStatusMessage>
115
+ )}
116
+ {this.supportingText && (
117
+ <span id={`${this._id}-supportingTextDesc`} class="hidden-text">{this.supportingText}</span>
118
+ )}
119
+ {this.hasValueState && (
120
+ <span id={`${this._id}-valueStateDesc`} class="hidden-text">{this.valueStateText}</span>
121
+ )}
122
+ {this.readonly && (
123
+ <span id={`${this._id}-stateReadOnlyDesc`} class="hidden-text">{this.readOnlyStateText}</span>
124
+ )}
125
+ <span id={`${this._id}-countrySelectorAriaLabel`} class="hidden-text">{this.countrySelectorAriaLabel}</span>
126
+ </>
127
+ );
128
+ }
package/src/Search.ts CHANGED
@@ -188,6 +188,18 @@ type UDExSearchKeydownEventDetail = {
188
188
  * @param {KeyboardEvent} e The keyboard event object
189
189
  */
190
190
  @event("search-keydown", { bubbles: true })
191
+ /**
192
+ * Fired when the suggestions popover opens.
193
+ *
194
+ * @public
195
+ */
196
+ @event("suggestion-popover-opened", { bubbles: true })
197
+ /**
198
+ * Fired when the suggestions popover closes.
199
+ *
200
+ * @public
201
+ */
202
+ @event("suggestion-popover-closed", { bubbles: true })
191
203
  class UDExSearch extends UI5Element {
192
204
  eventDetails!: {
193
205
  "submit-search-value": UDExSearchBaseEventDetail,
@@ -196,7 +208,8 @@ class UDExSearch extends UI5Element {
196
208
  "search-keydown": UDExSearchKeydownEventDetail,
197
209
  "dropdown-item-click": UDExSearchBaseEventDetail,
198
210
  "prefix-item-click": UDExSearchPrefixItemClickEventDetail,
199
-
211
+ "suggestion-popover-opened": void,
212
+ "suggestion-popover-closed": void,
200
213
  };
201
214
  _labelActiveClassName = "udex-search__label--active";
202
215
  _labelAnimationClassName = "udex-search__label--animation-enabled";
@@ -856,6 +869,7 @@ class UDExSearch extends UI5Element {
856
869
  retryUntilSuccessful(() => this.Suggestion, this.retryDelay, this.maxRetryAttempts, this.unsuccessfulRetryMessage)
857
870
  .then(() => {
858
871
  this.Suggestion!.open();
872
+ this.fireDecoratorEvent("suggestion-popover-opened");
859
873
  })
860
874
  .catch(error => {
861
875
  console.warn(error.message);
@@ -863,6 +877,7 @@ class UDExSearch extends UI5Element {
863
877
  } else {
864
878
  this.open = true;
865
879
  this.Suggestion.open();
880
+ this.fireDecoratorEvent("suggestion-popover-opened");
866
881
  }
867
882
  this.handleAriaExpanded();
868
883
  }
@@ -873,6 +888,7 @@ class UDExSearch extends UI5Element {
873
888
  this.Suggestion!.close();
874
889
  this.handleAriaExpanded();
875
890
  this.open = false;
891
+ this.fireDecoratorEvent("suggestion-popover-closed");
876
892
  }
877
893
  }
878
894
 
@@ -951,6 +967,9 @@ class UDExSearch extends UI5Element {
951
967
 
952
968
  if (mutation.attributeName === "open" && newValue !== oldValue && !ingoreOpenState) {
953
969
  this.open = popover?.open || false;
970
+ if (!popover?.open) {
971
+ this.fireDecoratorEvent("suggestion-popover-closed");
972
+ }
954
973
  }
955
974
  });
956
975
  });
@@ -1053,6 +1072,7 @@ class UDExSearch extends UI5Element {
1053
1072
  if (isEscape(e)) {
1054
1073
  if (this.open) {
1055
1074
  this.Suggestion?.onEscape(e);
1075
+ this.fireDecoratorEvent("suggestion-popover-closed");
1056
1076
  }
1057
1077
  }
1058
1078
  }
@@ -345,6 +345,14 @@ class UDExSearchableListBase extends UI5Element {
345
345
  this.fireSelectionChange(id);
346
346
  }
347
347
 
348
+ handleAccordionIconClick(e: CustomEvent<{ collapsed: boolean }>): void {
349
+ const target = e.target as HTMLElement;
350
+ const originalItem = this._validItems.find(item => item._id === target.id) as (UDExListGroupHeaderBase & { setCollapsedItems?(): void }) | undefined;
351
+ if (!originalItem) { return; }
352
+ originalItem.collapsed = e.detail.collapsed;
353
+ originalItem.setCollapsedItems?.();
354
+ }
355
+
348
356
  onSelectAllHeaderPress(e:CustomEvent) {
349
357
  const item = e.detail.item as UDExListItemBase;
350
358
  const id = this.getDataTokenId(item);
@@ -570,20 +578,67 @@ class UDExSearchableListBase extends UI5Element {
570
578
  this.getPopoverPart(UDExPopoverPart.Content)?.scrollTo({ top: 0 });
571
579
  }
572
580
 
581
+ _expandCollapsedGroupsWithSelection() {
582
+ this._validItems
583
+ .filter(item => item.isGroup)
584
+ .forEach(group => {
585
+ const header = group as UDExListGroupHeaderBase & { setCollapsedItems?(): void };
586
+ if (!header.collapsible) { return; }
587
+ // The rendered element may have been manually collapsed by the user, which
588
+ // only updates the rendered copy. handleAccordionIconClick syncs the original
589
+ // going forward, but we also check the rendered element as a safety net
590
+ // (e.g. if the event wasn't caught, or for the current open cycle).
591
+ const rendered = this.shadowRoot?.querySelector<HTMLElement & { collapsed?: boolean; setCollapsedItems?(): void }>(`[udex-list-group-header][id="${header._id}"]`);
592
+ const isCollapsed = header.collapsed || !!rendered?.hasAttribute("collapsed");
593
+ if (!isCollapsed) { return; }
594
+ const hasSelectedChild = (header.items as UDExListItemBase[]).some(child => child.selected);
595
+ if (hasSelectedChild) {
596
+ header.collapsed = false;
597
+ header.setCollapsedItems?.();
598
+ // Also reset the rendered element directly so it takes effect
599
+ // immediately, regardless of whether a template re-render is pending.
600
+ if (rendered) {
601
+ rendered.collapsed = false;
602
+ rendered.setCollapsedItems?.();
603
+ }
604
+ }
605
+ });
606
+ }
607
+
573
608
  _dropdownScrollToSelectedItem() {
574
609
  const content = this.getPopoverPart(UDExPopoverPart.Content);
610
+ if (!content) { return; }
575
611
  const activeItem = this.activeItem;
576
- if (!content || !activeItem) { return; }
577
- const itemRect = activeItem.getBoundingClientRect();
578
- const contentRect = content.getBoundingClientRect();
579
- content.scrollTop += itemRect.top - contentRect.top + itemRect.height / 2 - content.clientHeight / 2;
612
+ if (!activeItem) {
613
+ this._dropdownScrollToTop();
614
+ return;
615
+ }
616
+ // Refresh max-height on expanded collapsible groups before measuring.
617
+ // setContentHeight() may have run while the popup was closed (scrollHeight=0
618
+ // for hidden elements), leaving --udex-list-content-max-height at 0px.
619
+ // With that stale 0px value, getBoundingClientRect on slotted items inside
620
+ // the overflow:hidden container returns the container top rather than the
621
+ // item's natural position, producing an incorrect scroll delta.
622
+ // removeProperty → setContentHeight() avoids the CSS transition because
623
+ // browsers do not interpolate to/from the `none` fallback value.
624
+ this.shadowRoot?.querySelectorAll<HTMLElement & { setContentHeight(): void }>("[udex-list-group-header]")
625
+ .forEach(header => {
626
+ if (header.hasAttribute("collapsible") && !header.hasAttribute("collapsed")) {
627
+ header.style.removeProperty("--udex-list-content-max-height");
628
+ header.setContentHeight();
629
+ }
630
+ });
631
+ // Reset to top before measuring so getBoundingClientRect reads from a stable
632
+ // baseline regardless of the scroll state left by previous open/close cycles.
633
+ content.scrollTop = 0;
634
+ const delta = activeItem.getBoundingClientRect().top - content.getBoundingClientRect().top;
635
+ content.scrollTop = delta;
580
636
  }
581
637
 
582
638
  _handleDropdownScroll() {
583
- if (this.modeMultiSelect) {
639
+ if (this.modeMultiSelect || !this.activeItem) {
584
640
  this._dropdownScrollToTop();
585
- }
586
- if (this.modeSingleSelect) {
641
+ } else if (this.modeSingleSelect) {
587
642
  this._dropdownScrollToSelectedItem();
588
643
  }
589
644
  }
@@ -132,6 +132,7 @@ function renderGroupHeader(this: UDExSearchableListBase, processedItem: UDExProc
132
132
  selected={item.selected}
133
133
  onFirstIconClick={this.fireFirstIconClickEvent}
134
134
  onSecondIconClick={this.fireSecondIconClickEvent}
135
+ onAccordionIconClick={this.handleAccordionIconClick}
135
136
  indeterminate={header.indeterminate}>
136
137
  {groupItems.map((child, i) =>
137
138
  renderListItem(child as UDExListItem, i, "none", childAccessibleRole, this.fireFirstIconClickEvent, this.fireSecondIconClickEvent, this._activeDescendantMode, this.isTreeStructure, this.modeMultiSelect)
package/src/SelectBase.ts CHANGED
@@ -781,28 +781,21 @@ class UDExSelectBase extends UDExSearchableListBase {
781
781
  }
782
782
 
783
783
  handleDropdownOpen() {
784
- // Scroll to the previously selected/active item if there is one,
785
- // otherwise scroll to top. Do NOT pre-activate any item — that is done
786
- // by the first ArrowDown so that ArrowDown[1]=item[0], ArrowDown[2]=item[1].
787
- if (this.activeItem) {
788
- const items = this._list?.getKeyboardNavigationItems();
789
- const active = items?.find(i => !i.isGroup && (i as any).selected);
790
- if (active && this._list?._scrollIntoView) {
791
- this._list.scrollToItem(active);
792
- } else {
793
- this._dropdownScrollToTop();
794
- }
795
- } else {
796
- this._dropdownScrollToTop();
797
- }
798
-
799
- // Announce the visually focused item (fake focus outline on first item).
800
- // Using polite politeness — it waits for the AT to finish announcing
801
- // "expanded" before reading the item, so no timeout is needed.
802
- // Clear first so the mutation fires even if the text is unchanged from
803
- // the previous open, then populate after render completes.
784
+ // Clear first so the live-region mutation fires even if text is unchanged.
804
785
  this._liveRegionText = "";
805
- renderFinished().then(() => this._announceCurrentOrFirst()).catch(() => {});
786
+ // Defer scroll and announcement until rendering settles.
787
+ // Calling _handleDropdownScroll synchronously causes getBoundingClientRect
788
+ // to read mid-transition positions (e.g. the max-height animation on
789
+ // collapsible group headers), producing an incorrect scroll offset.
790
+ // The expand step modifies reactive properties that trigger a new render,
791
+ // so a second renderFinished is needed before measuring scroll positions.
792
+ renderFinished().then(() => {
793
+ this._expandCollapsedGroupsWithSelection();
794
+ return renderFinished();
795
+ }).then(() => {
796
+ this._handleDropdownScroll();
797
+ this._announceCurrentOrFirst();
798
+ }).catch(() => {});
806
799
 
807
800
  this.fireEventDropdownOpen();
808
801
  }
@@ -106,7 +106,7 @@ export default function SelectBoxTemplate(this: UDExSelectBox) {
106
106
  </div>
107
107
  {this.supportingText && (
108
108
  <UDExStatusMessage
109
- disabled={this.disabled ? "true" : undefined}
109
+ disabled={this.disabled}
110
110
  supporting-text={this.supportingText}
111
111
  value-state={this.valueState}>
112
112
  </UDExStatusMessage>
@@ -67,11 +67,12 @@ class UDExStatusMessage extends UI5Element {
67
67
  /**
68
68
  * Defines if component should have disabled styles.
69
69
  *
70
- * @default ""
70
+ * @default false
71
71
  * @public
72
72
  */
73
- @property({ type: String })
74
- disabled!: string;
73
+ @property({ type: Boolean })
74
+ disabled!: boolean;
75
+
75
76
  /**
76
77
  * Defines the value state of the component.
77
78
  *
@@ -45,7 +45,7 @@ export default function TextAreaTemplate(this: TextArea) {
45
45
  supporting-text={this._supportingText}
46
46
  supporting-text-alignment="Right"
47
47
  value-state={this.valueState}
48
- disabled={this.disabled ? "true" : undefined}>
48
+ disabled={this.disabled}>
49
49
  </UDExStatusMessage>
50
50
  <span id={`${this._id}-supportingTextDesc`} class={hiddenClass}>
51
51
  {this._supportingText}
@@ -70,7 +70,7 @@ export default function TextFieldTemplate(this: TextField) {
70
70
  <UDExStatusMessage
71
71
  supporting-text={this.supportingText}
72
72
  value-state={this.valueState}
73
- disabled={this.disabled ? "true" : undefined}>
73
+ disabled={this.disabled}>
74
74
  </UDExStatusMessage>
75
75
  <span id={`${this._id}-supportingTextDesc`} class={hiddenClass}>
76
76
  {this.supportingText}
package/src/Upload.ts CHANGED
@@ -1,29 +1,26 @@
1
1
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
3
-
4
3
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
5
4
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
6
- import { slot } from "@ui5/webcomponents-base/dist/decorators.js";
5
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
7
6
  import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
8
7
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
9
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
8
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
10
9
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
11
- import FileUploader from "@ui5/webcomponents/dist/FileUploader.js";
10
+ import type FileUploader from "@ui5/webcomponents/dist/FileUploader.js";
12
11
  import type { FileUploaderChangeEventDetail } from "@ui5/webcomponents/dist/FileUploader.js";
13
12
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
14
13
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
15
14
  import { UPLOAD_BUTTON_LABEL } from "./generated/i18n/i18n-defaults.js";
16
- import UDExButton from "./Button.js";
17
15
  import UDExButtonSize from "./types/ButtonSize.js";
18
- import UDExList from "./List.js";
19
16
  import UDExUploadItem from "./UploadItem.js";
20
- import UploadTemplate from "./generated/templates/UploadTemplate.lit.js";
17
+ import UploadTemplate from "./UploadTemplate.js";
21
18
  import type FileData from "./types/FileData.js";
22
19
  import translate from "./utils/translate.js";
20
+ import { BreakpointUtils } from "./utils/Breakpoints.js";
23
21
 
24
22
  // Styles
25
23
  import UploadCss from "./generated/themes/Upload.css.js";
26
- import { BreakpointUtils } from "./utils/Breakpoints.js";
27
24
 
28
25
  const convertBytesToMegabytes = (bytes: number) => (bytes / 1024) / 1024;
29
26
 
@@ -58,10 +55,10 @@ type UDExUploadFileChangeEventDetail = {
58
55
  */
59
56
  @customElement({
60
57
  tag: "udex-upload",
61
- renderer: litRender,
58
+ renderer: jsxRenderer,
62
59
  styles: UploadCss,
63
60
  template: UploadTemplate,
64
- dependencies: [FileUploader, UDExList, UDExButton, UDExUploadItem],
61
+ dependencies: [UDExUploadItem],
65
62
  })
66
63
 
67
64
  /**