@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
package/src/SelectBox.ts CHANGED
@@ -1,18 +1,21 @@
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
- import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
3
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
5
- import executeTemplate from "@ui5/webcomponents-base/dist/renderer/executeTemplate.js";
4
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
6
5
  import {
7
- isEnter, isSpace, isDelete, isTabPrevious, isTabNext, isLeft, isRight, isDown, isUp, isEscape, isBackSpace, isShift,
6
+ isEnter, isSpace, isDelete, isTabPrevious, isTabNext, isLeft, isRight, isDown, isUp, isBackSpace, isShift,
8
7
  } from "@ui5/webcomponents-base/dist/Keys.js";
8
+ import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
9
+ import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
9
10
  import type UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
10
- import Tokenizer from "@ui5/webcomponents/dist/Tokenizer.js";
11
+ import type { UDExItemFromList } from "./SearchableListBase.js";
12
+ import { UDExPopoverPart } from "./types/SearchableListBase.js";
13
+ import { Placement } from "./types/Dropdown.js";
14
+ import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
15
+ import "@ui5/webcomponents-icons/dist/decline.js";
11
16
  import Icon from "@ui5/webcomponents/dist/Icon.js";
17
+ import Tokenizer from "@ui5/webcomponents/dist/Tokenizer.js";
12
18
  import Token from "@ui5/webcomponents/dist/Token.js";
13
- import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
14
- import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
15
- import { getAllAccessibleNameRefTexts } from "@ui5/webcomponents-base/dist/util/AccessibilityTextsHelper.js";
16
19
  import Popover from "@ui5/webcomponents/dist/Popover.js";
17
20
  import UDExList from "./List.js";
18
21
  import UDExListItem from "./ListItem.js";
@@ -20,30 +23,20 @@ import UDExListGroupHeader from "./ListGroupHeader.js";
20
23
  import UDExListSelectAll from "./ListSelectAll.js";
21
24
  import UDExSelectBoxItem from "./SelectBoxItem.js";
22
25
  import UDExSelectBoxGroupHeader from "./SelectBoxGroupHeader.js";
23
- import type { UDExItemFromList, UDExSearchableListBaseEvents } from "./SearchableListBase.js";
24
- import UDExSearchableListBase from "./SearchableListBase.js";
25
- import type { UDExSearchKeydownEventDetail } from "./Search.js";
26
- import UDExSearch from "./Search.js";
27
26
  import UDExTag from "./Tag.js";
28
- import UDExButton from "./Button.js";
29
- import UDExValueState from "./types/common.js";
30
27
  import UDExStatusMessage from "./StatusMessage.js";
31
- import UDExControlButton from "./ControlButton.js";
32
28
  import UDExBusyIndicator from "./BusyIndicator.js";
33
- import { Placement } from "./types/Dropdown.js";
34
- import { UDExPopoverPart } from "./types/SearchableListBase.js";
35
29
  import UDExTagGroup from "./TagGroup.js";
36
- import "@ui5/webcomponents-icons/dist/decline.js";
37
- import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
38
- import { SELECT_OPTIONS } from "./generated/i18n/i18n-defaults.js";
30
+ import UDExSelectBase from "./SelectBase.js";
39
31
  import SelectBoxTemplate from "./generated/templates/SelectBoxTemplate.lit.js";
40
- import SearchableListBaseTemplate from "./generated/templates/SearchableListBaseTemplate.lit.js";
32
+ import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
33
+ import type { UDExSelectBaseEvents } from "./SelectBase.js";
41
34
 
42
35
  // Styles
43
- import SelectBoxCss from "./generated/themes/SelectBox.css.js";
44
36
  import TextFieldCss from "./generated/themes/TextField.css.js";
45
37
  import SearchableListCss from "./generated/themes/SearchableList.css.js";
46
- import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
38
+ import SelectBoxCss from "./generated/themes/SelectBox.css.js";
39
+ import SelectBaseCss from "./generated/themes/SelectBase.css.js";
47
40
 
48
41
  export type SelectBoxAccessibilityAttributes = {
49
42
  controls?: string,
@@ -77,7 +70,13 @@ type UDExSelectBoxRemoveEventDetail = {
77
70
  @customElement({
78
71
  tag: "udex-select-box",
79
72
  renderer: litRender,
80
- styles: [TextFieldCss, SelectBoxCss, SearchableListCss, getEffectiveScrollbarStyle()],
73
+ styles: [
74
+ TextFieldCss,
75
+ SelectBoxCss,
76
+ SelectBaseCss,
77
+ SearchableListCss,
78
+ getEffectiveScrollbarStyle(),
79
+ ],
81
80
  template: SelectBoxTemplate,
82
81
  dependencies: [
83
82
  UDExSelectBoxGroupHeader,
@@ -85,25 +84,23 @@ type UDExSelectBoxRemoveEventDetail = {
85
84
  UDExListSelectAll,
86
85
  UDExSelectBoxItem,
87
86
  UDExStatusMessage,
88
- UDExControlButton,
89
- UDExTagGroup,
90
87
  UDExBusyIndicator,
88
+ UDExTagGroup,
91
89
  UDExListItem,
92
90
  UDExList,
93
- UDExSearch,
94
- UDExButton,
95
91
  UDExTag,
96
92
  Tokenizer,
93
+ Popover,
97
94
  Token,
98
95
  Icon,
99
- Popover,
100
96
  ],
101
97
  })
102
98
 
103
99
  /**
104
- * Fired event when the user clicks on the reset button in the search.
100
+ * Fired event when the user remove tag.
105
101
  *
106
102
  * @public
103
+ * @param {UDExItemFromList} item The removed item
107
104
  */
108
105
  @event("remove", { bubbles: true })
109
106
 
@@ -114,19 +111,12 @@ type UDExSelectBoxRemoveEventDetail = {
114
111
  */
115
112
  @event("show-more", { bubbles: true })
116
113
 
117
- /**
118
- * Fired before the dropdown pane is opened.
119
- *
120
- * @public
121
- */
122
- @event("before-open", { bubbles: true })
123
-
124
- class UDExSelectBox extends UDExSearchableListBase {
114
+ class UDExSelectBox extends UDExSelectBase {
125
115
  eventDetails!: {
126
116
  "remove": UDExSelectBoxRemoveEventDetail,
127
117
  "show-more": void,
128
- "before-open": void,
129
- } & UDExSearchableListBaseEvents;
118
+ } & UDExSelectBaseEvents;
119
+
130
120
  /**
131
121
  * Determines if there is no enough space, the component can be placed
132
122
  * over the target.
@@ -137,86 +127,6 @@ class UDExSelectBox extends UDExSearchableListBase {
137
127
  @property({ type: Boolean })
138
128
  disableTargetOverlap?: boolean;
139
129
 
140
- /**
141
- * Defines whether the component is required.
142
- *
143
- * @default false
144
- * @public
145
- */
146
- @property({ type: Boolean })
147
- required!: boolean;
148
-
149
- /**
150
- * Defines whether the component is in disabled state.
151
- *
152
- * @default false
153
- * @public
154
- */
155
- @property({ type: Boolean })
156
- disabled!: boolean;
157
-
158
- /**
159
- * Defines label text for field container.
160
- *
161
- * @default ""
162
- * @public
163
- */
164
- @property({ type: String })
165
- label!: string;
166
-
167
- /**
168
- * Defines the accessible ARIA name of the component.
169
- *
170
- * @default undefined
171
- * @public
172
- */
173
- @property()
174
- accessibleName?: string;
175
-
176
- /**
177
- * Receives id (or many ids) of the elements that label the component.
178
- * @default undefined
179
- * @public
180
- */
181
- @property()
182
- accessibleNameRef?: string;
183
-
184
- /**
185
- * Defines whether the component is read-only.
186
- *
187
- * @default false
188
- * @public
189
- */
190
- @property({ type: Boolean })
191
- readonly!: boolean;
192
-
193
- /**
194
- * Defines whether the component is display-only.
195
- *
196
- * @default false
197
- * @public
198
- */
199
- @property({ type: Boolean })
200
- displayonly!: boolean;
201
-
202
- /**
203
- * Defines the value state of the trigger container.
204
- *
205
- * @default "Standard"
206
- * @public
207
- */
208
- @property()
209
- valueState: `${UDExValueState}` = UDExValueState.Standard;
210
-
211
- /**
212
- * Defines supporting text under the trigger container.
213
- *
214
- * @default undefined
215
- * @public
216
- */
217
- @property({ type: String })
218
- supportingText?: string;
219
-
220
130
  /**
221
131
  * Determines on which side of the component the Tooltip is displayed.
222
132
  *
@@ -226,26 +136,6 @@ class UDExSelectBox extends UDExSearchableListBase {
226
136
  @property()
227
137
  tooltipPlacement: `${Placement}` = Placement.Bottom;
228
138
 
229
- /**
230
- * @private
231
- */
232
- @property({ type: String, noAttribute: true })
233
- _direction?: string;
234
-
235
- /**
236
- * @default false
237
- * @private
238
- */
239
- @property({ type: Boolean })
240
- _focused!: boolean;
241
-
242
- /**
243
- * @default false
244
- * @private
245
- */
246
- @property({ type: Boolean })
247
- _open: boolean = false;
248
-
249
139
  /**
250
140
  * @default false
251
141
  * @private
@@ -253,78 +143,35 @@ class UDExSelectBox extends UDExSearchableListBase {
253
143
  @property({ type: Boolean })
254
144
  _showTagsDropdownContent!: boolean;
255
145
 
256
- _trigger!: HTMLElement;
257
- _triggerWrapper!: HTMLElement;
258
- _popover!: Popover;
259
- _tokenizer!: Tokenizer;
260
- _search!: UDExSearch;
261
- _singleSelectedOption!: string;
262
146
  _truncatableTag!: UDExTag;
263
- _tags!: Array<UDExTag>;
264
147
  _inactiveTabIndex: number = -1;
265
- _activeTabIndex: number = 0;
266
- _openedByTrigger: boolean = true;
267
- _shouldScrollToEnd: boolean = false;
268
- _handleResizeBound: ResizeObserverCallback;
148
+ _handleResizeTokenizerBound: ResizeObserverCallback;
269
149
 
270
150
  constructor() {
271
151
  super();
272
- this._shouldFilterItems = false;
273
- this._handleResizeBound = this._handleResize.bind(this);
274
- this._filteredItems = [];
152
+ this._handleResizeTokenizerBound = this.handleResizeTokenizer.bind(this);
275
153
  }
276
154
 
277
155
  onEnterDOM() {
278
- ResizeHandler.register(this, this._handleResizeBound);
156
+ super.onEnterDOM();
157
+ ResizeHandler.register(this, this._handleResizeTokenizerBound);
279
158
  }
280
159
 
281
160
  onExitDOM() {
282
- ResizeHandler.deregister(this, this._handleResizeBound);
161
+ super.onExitDOM();
162
+ ResizeHandler.deregister(this, this._handleResizeTokenizerBound);
283
163
  }
284
164
 
285
165
  onAfterRendering() {
286
- this._tokenizer = this.getTagGroup()?._tokenizer;
287
- this._popover = this.getPopover();
288
- this._search = this.getSearch();
289
- this._trigger = this.getTrigger();
290
- this._triggerWrapper = this.getTriggerWrapper();
291
- this._tags = this.getTags();
292
- this.handleDirection();
293
- if (this._tokenizer?.tokens.length > 0) {
294
- if (!this.displayonly) {
295
- this._tokenizer.moreLink?.setAttribute("tabindex", "-1");
296
- }
297
- if (this._shouldScrollToEnd) {
298
- this._tokenizer.scrollToEnd();
299
- }
300
- this.resetTagsTabIndexes();
301
- }
302
- this.handleOutsideClick();
303
- }
304
-
305
- onBeforeRendering() {
306
- super.onBeforeRendering();
307
-
308
- if (this.modeSingleSelect && this.hasSelectedItems) {
309
- this.handleSingleSelectMode();
166
+ super.onAfterRendering();
167
+ this.handleSelectBoxOutsideClick();
168
+ if (this.tagGroup) {
169
+ this.configureTokenizer();
310
170
  }
311
171
  }
312
172
 
313
- _handleResize() {
314
- this._popover.style.setProperty("--udex-dropdown-pane-width", `${this._triggerWrapper.offsetWidth}px`);
315
- }
316
-
317
- handleItemPress(e:CustomEvent) {
318
- this.onItemPress(e);
319
-
320
- if (this.modeSingleSelect) {
321
- this.handleSingleSelectMode();
322
- this.closeDropdown();
323
- }
324
- }
325
-
326
- handleSingleSelectMode() {
327
- this._singleSelectedOption = this.selectedItems[0]?.label;
173
+ handleResizeTokenizer() {
174
+ this.resizeTokenizer();
328
175
  }
329
176
 
330
177
  handleSelectAll(e:CustomEvent) {
@@ -332,33 +179,46 @@ class UDExSelectBox extends UDExSearchableListBase {
332
179
  }
333
180
 
334
181
  handleHeaderPress(e:CustomEvent) {
182
+ this._search.focus();
335
183
  this.onHeaderPress(e);
336
184
  }
337
185
 
338
- handleValueSearch(e:CustomEvent) {
339
- this.onSearch(e);
186
+ handleItemPress(e:CustomEvent) {
187
+ this.handleItemSelection(e);
340
188
  }
341
189
 
342
- handleSubmitSearch() {
343
- this.closeDropdown();
344
- this.onSubmitSearch();
190
+ handlerShowMoreItems(e: CustomEvent) {
191
+ if (!this.displayonly) {
192
+ this.showMoreItems(e);
193
+ this.handleUnselectTruncatableTag();
194
+ this.openDropdown();
195
+ }
196
+ this.fireDecoratorEvent("show-more");
345
197
  }
346
198
 
347
- handleResetSearch() {
348
- this.onResetSearch();
349
- }
199
+ handleInputFocusIn() {
200
+ this.inputFocusIn();
350
201
 
351
- handleFocusIn() {
352
- if (this.isDisabled) {
353
- return;
354
- }
355
- this._focused = true;
356
- if (this._tokenizer) {
357
- this._tokenizer.expanded = false;
202
+ if (this.tokenizer) {
203
+ this.tokenizer.expanded = true;
204
+ this._requestRender = true;
358
205
  }
359
206
  }
360
207
 
361
- handleFocusOut() {
208
+ handleInputFocusOut(e: FocusEvent) {
209
+ const relatedTarget = e.relatedTarget as HTMLElement;
210
+ const isInsideComponent = relatedTarget?.closest(`.${this._rootClass}`);
211
+ const hasTags = this.tokenizer?.tokens.length > 0;
212
+
213
+ if (!isInsideComponent) {
214
+ this.closeDropdown();
215
+ this.resetSearchState();
216
+
217
+ if (hasTags) {
218
+ this.collapseTokenizer();
219
+ }
220
+ }
221
+
362
222
  this._focused = false;
363
223
  }
364
224
 
@@ -367,35 +227,26 @@ class UDExSelectBox extends UDExSearchableListBase {
367
227
  this._managePopupListeners(UDExPopoverPart.Header, "addEventListener");
368
228
  }
369
229
 
370
- if (this.height) {
371
- this._setContentHeight();
372
- }
373
-
374
- this.fireDecoratorEvent("before-open");
230
+ this.dropdownBeforeOpen();
375
231
  }
376
232
 
377
- handleDropdownAfterClose() {
233
+ handleDropdownClose() {
378
234
  if (this.preventPageScroll) {
379
235
  this._managePopupListeners(UDExPopoverPart.Header, "removeEventListener");
380
236
  }
381
237
 
382
- if (this._tokenizer?._tokensCount > 0) {
383
- this._tokenizer.expanded = false;
238
+ if (this.modeMultiSelect) {
239
+ this.handleUnselectTruncatableTag();
384
240
  }
385
- this.handleUnselectTruncatableTag();
386
- this._open = false;
387
- }
388
241
 
389
- showMoreItems() {
390
- this._shouldScrollToEnd = true;
391
- this._showTagsDropdownContent = false;
392
- this.openDropdown();
393
- this.handleUnselectTruncatableTag();
242
+ this._open = false;
243
+ this.fireEventDropdownClose();
394
244
  }
395
245
 
396
246
  handleRemoveTag(e: CustomEvent | null, tag?: UI5Element) {
397
247
  tag = tag ?? (e?.detail.tag as UI5Element);
398
248
  const tagId: string = tag.getAttribute("data-id")!;
249
+ this.tokenizer.deleteToken(tag as Token, true);
399
250
  this.handleDropdownItemPress(tagId);
400
251
  this.fireDecoratorEventRemove(tagId);
401
252
  }
@@ -415,16 +266,7 @@ class UDExSelectBox extends UDExSearchableListBase {
415
266
  handleUnselectTruncatableTag() {
416
267
  if (this._truncatableTag?.selected) {
417
268
  this._truncatableTag.selected = false;
418
- }
419
- }
420
-
421
- handleKeyDownTrigger(e: KeyboardEvent) {
422
- if (!this.isDisabled && (isSpace(e) || isEnter(e))) {
423
- e.preventDefault();
424
- e.stopPropagation();
425
269
  this._showTagsDropdownContent = false;
426
- this._openedByTrigger = true;
427
- this.openDropdown();
428
270
  }
429
271
  }
430
272
 
@@ -433,18 +275,17 @@ class UDExSelectBox extends UDExSearchableListBase {
433
275
  const originalEvent: KeyboardEvent = e.detail.originalEvent;
434
276
  const tag = originalEvent.target as UDExTag;
435
277
  const token = originalEvent.target as Token;
436
- this.getTagContent(this._tags[0]).tabIndex = this._inactiveTabIndex;
437
- const tagsCount = this._tokenizer._tokensCount;
438
- this._tokenizer.expanded = (isLeft(originalEvent) || isRight(originalEvent) || isBackSpace(originalEvent) || isDelete(originalEvent)) && tagsCount > 0;
278
+ this.tokenizer.expanded = (isLeft(originalEvent) || isRight(originalEvent) || isBackSpace(originalEvent) || isDelete(originalEvent)) && this.tokenizer.tokens.length > 0;
279
+
439
280
  if (isTabNext(originalEvent)) {
440
- this._trigger.focus();
281
+ originalEvent.preventDefault();
282
+ this._search.focus();
441
283
  return;
442
284
  }
443
285
 
444
286
  if ((isDown(originalEvent) || isUp(originalEvent))) {
445
- this._tokenizer._preventCollapse = true;
446
- this._openedByTrigger = false;
447
- this.showMoreItems();
287
+ this._search.focus();
288
+ this.openDropdown();
448
289
  }
449
290
 
450
291
  if (isSpace(originalEvent) || isShift(originalEvent) || isEnter(originalEvent)) {
@@ -454,9 +295,9 @@ class UDExSelectBox extends UDExSearchableListBase {
454
295
  }
455
296
 
456
297
  if (isLeft(originalEvent) || isRight(originalEvent)) {
457
- const nextTokenIndex = this._tokenizer._calcNextTokenIndex(token, this._tokenizer.tokens, isRight(originalEvent));
458
- this.focusTag(nextTokenIndex);
459
- this.scrollToTag(nextTokenIndex);
298
+ const nextTokenIndex = this.tokenizer._calcNextTokenIndex(token, this.tokenizer.tokens, isRight(originalEvent));
299
+ this.focusTagByIndex(nextTokenIndex);
300
+ this.tokenizer._scrollToToken(this.tokenizer.tokens[nextTokenIndex]);
460
301
  return;
461
302
  }
462
303
 
@@ -468,70 +309,73 @@ class UDExSelectBox extends UDExSearchableListBase {
468
309
 
469
310
  if (isDelete(originalEvent) || isBackSpace(originalEvent)) {
470
311
  this.handleRemoveTag(null, tag);
471
- if (this._tokenizer.tokens.length === 1) {
472
- this._trigger.focus();
312
+ if (this.tokenizer.tokens.length === 1) {
313
+ this._search.focus();
473
314
  } else {
474
- this._tokenizer.deleteToken(token);
315
+ this.tokenizer.deleteToken(token, true);
475
316
  }
476
317
  }
477
318
  }
478
319
 
479
- handleKeyDownDropdown(e: KeyboardEvent) {
480
- if (this.tabNavigationEnabled) {
320
+ handleKeyDownSearch(e: KeyboardEvent) {
321
+ const tokenizer = this.tokenizer;
322
+ const hasTags = tokenizer?.tokens.length > 0;
323
+ const lastTagIndex = tokenizer?.tokens.length - 1;
324
+
325
+ if (isTabPrevious(e)) {
326
+ this.resetTagsTabIndexes();
481
327
  return;
482
328
  }
483
329
 
484
- const isTabPrevPress = isTabPrevious(e) && !this._search;
485
- const isTabNextPress = isTabNext(e);
486
- const isEscapePress = isEscape(e);
487
- const isSearchResetTrigger = e.target === this._search;
488
- if ((isTabNextPress && (!isSearchResetTrigger || this.isListEmpty)) || isTabPrevPress || isEscapePress) {
489
- this.closeDropdown(e);
330
+ if (isLeft(e) && hasTags) {
331
+ e.preventDefault();
332
+ this.focusTagByIndex(lastTagIndex);
333
+ return;
490
334
  }
491
- }
492
-
493
- handleKeyDownSearch(keyEvent: CustomEvent<UDExSearchKeydownEventDetail>) {
494
- const { detail: { e } } = keyEvent;
495
335
 
496
- if (isTabPrevious(e) || isEscape(e)) {
497
- this.closeDropdown(e);
336
+ if (isBackSpace(e) && this._inputValue === "" && hasTags) {
337
+ this.focusTagByIndex(lastTagIndex);
338
+ return;
498
339
  }
340
+
341
+ this.onKeyDownSearch(e);
499
342
  }
500
343
 
501
- handleOutsideClick(): void {
502
- document.addEventListener("click", (e: MouseEvent) => {
503
- if (this._tokenizer?.tokens.length > 0 && e.target !== this) {
504
- this._tokenizer.expanded = false;
344
+ handleSelectBoxOutsideClick() {
345
+ document.addEventListener("click", (e: Event) => {
346
+ if (e.target !== this) {
347
+ this._open = this._popover.open;
348
+ if (this.tokenizer?.tokens.length > 0) {
349
+ this.collapseTokenizer();
350
+ }
505
351
  }
506
- this._open = this._popover.open;
507
352
  });
508
353
  }
509
354
 
510
- openDropdown() {
511
- this._popover.opener = this._trigger;
512
- this._popover.open = true;
513
- this._open = true;
514
- if (this.showMultiSelectedOptions) {
515
- this._tokenizer.expanded = true;
355
+ focusTagByIndex(index: number) {
356
+ const token = this.tokenizer.tokens[index];
357
+ if (token) {
358
+ token.focus();
359
+ token.forcedTabIndex = "0";
516
360
  }
517
361
  }
518
362
 
519
- closeDropdown(e?: KeyboardEvent) {
520
- if (this._popover.open) {
521
- if (this._tokenizer) {
522
- this._tokenizer._preventCollapse = false;
523
- this._tokenizer.expanded = false;
524
- }
363
+ fireDecoratorEventRemove(id: string) {
364
+ this.fireDecoratorEvent("remove", {
365
+ item: this.getItemFromList(id),
366
+ });
367
+ }
525
368
 
526
- if (e && (isEscape(e) || isTabPrevious(e))) {
527
- e.preventDefault();
528
- if (this._openedByTrigger) {
529
- this._trigger.focus();
530
- }
531
- }
532
- this._open = false;
533
- this._popover.open = false;
534
- }
369
+ collapseTokenizer() {
370
+ this.tokenizer.expanded = false;
371
+ this._selectedOption = "";
372
+ }
373
+
374
+ showMoreItems(e: CustomEvent) {
375
+ e.preventDefault();
376
+ this._focused = true;
377
+ this._search.focus();
378
+ this._showTagsDropdownContent = false;
535
379
  }
536
380
 
537
381
  toggleTruncatedPopover(tag: UDExTag) {
@@ -548,86 +392,20 @@ class UDExSelectBox extends UDExSearchableListBase {
548
392
  }
549
393
  }
550
394
 
551
- scrollToTag(index: number) {
552
- this._tokenizer._scrollToToken(this._tokenizer.tokens[index]);
553
- }
554
-
555
- focusTag(index: number) {
556
- this._tokenizer.tokens[index].focus();
557
- this._tokenizer.tokens[index].forcedTabIndex = "0";
395
+ configureTokenizer() {
396
+ this.tagGroup._scrollToEnd = true;
397
+ this.resetTagsTabIndexes();
558
398
  }
559
399
 
560
- fireDecoratorEventRemove(id: string) {
561
- this.fireDecoratorEvent("remove", {
562
- item: this.getItemFromList(id),
400
+ resetTagsTabIndexes() {
401
+ this.tags.forEach(tag => {
402
+ this.getTagContent(tag).tabIndex = this._inactiveTabIndex;
563
403
  });
564
404
  }
565
405
 
566
- handleOpenMultiSelect() {
567
- if (this._popover.open) {
568
- this.closeDropdown();
569
- } else {
570
- this._showTagsDropdownContent = false;
571
- this.openDropdown();
572
- }
573
- }
574
-
575
- handleOpenSingleSelect() {
576
- if (this._popover.open) {
577
- this.closeDropdown();
578
- } else {
579
- this.openDropdown();
580
- }
581
- }
582
-
583
- getHandleMultiSelectOpen() {
584
- return !this.isDisabled && this.modeMultiSelect ? this.handleOpenMultiSelect() : undefined;
585
- }
586
-
587
- getHandleSingleSelectOpen() {
588
- return !this.isDisabled && this.modeSingleSelect ? this.handleOpenSingleSelect() : undefined;
589
- }
590
-
591
- getHandlerShowMoreItems(e: CustomEvent) {
592
- if (!this.displayonly) {
593
- e.preventDefault();
594
- this.showMoreItems();
595
- }
596
- this.fireDecoratorEvent("show-more");
597
- }
598
-
599
- getTrigger(): HTMLElement {
600
- return this.shadowRoot!.querySelector(".udex-text-field__input")!;
601
- }
602
-
603
- getTriggerWrapper(): HTMLElement {
604
- return this.shadowRoot!.querySelector(".udex-text-field__wrap")!;
605
- }
606
-
607
- getTagGroup(): UDExTagGroup {
608
- return this.shadowRoot!.querySelector<UDExTagGroup>("[udex-tag-group]")!;
609
- }
610
-
611
- getTags(): Array<UDExTag> {
612
- if (this.getTagGroup()) {
613
- return Array.from(this.getTagGroup().shadowRoot!.querySelectorAll<UDExTag>("[udex-tag]"));
614
- }
615
- return [];
616
- }
617
-
618
- getTagContent(tag: UDExTag): HTMLElement {
619
- return tag.shadowRoot!.querySelector(".udex-tag")!;
620
- }
621
-
622
- handleDirection() {
623
- const directionStyles: string = window
624
- .getComputedStyle(this)
625
- .getPropertyValue("direction");
626
-
627
- if (!directionStyles) {
628
- this._direction = "ltr";
629
- } else {
630
- this._direction = directionStyles;
406
+ resizeTokenizer() {
407
+ if (this.tokenizer) {
408
+ this.tokenizer._handleResize();
631
409
  }
632
410
  }
633
411
 
@@ -635,8 +413,8 @@ class UDExSelectBox extends UDExSearchableListBase {
635
413
  return isSpace(e) || isEnter(e);
636
414
  }
637
415
 
638
- resetTagsTabIndexes() {
639
- this._tags.forEach((tag, i) => { this.getTagContent(tag).tabIndex = (i === 0 && !this.isDisabled) ? this._activeTabIndex : this._inactiveTabIndex; });
416
+ getTagContent(tag: UDExTag): HTMLElement {
417
+ return tag.shadowRoot!.querySelector(".udex-tag")!;
640
418
  }
641
419
 
642
420
  /**
@@ -647,105 +425,38 @@ class UDExSelectBox extends UDExSearchableListBase {
647
425
  this.closeDropdown();
648
426
  }
649
427
 
650
- get allowTargetOverlap(): boolean {
651
- return !this.disableTargetOverlap;
428
+ get tokenizer(): Tokenizer {
429
+ return this.tagGroup?.tokenizer;
652
430
  }
653
431
 
654
- get isDisabled(): boolean {
655
- return this.readonly || this.displayonly || this.disabled;
432
+ get tagGroup(): UDExTagGroup {
433
+ return this.shadowRoot!.querySelector<UDExTagGroup>("[udex-tag-group]")!;
656
434
  }
657
435
 
658
- get truncatableTagLabel(): string {
659
- return this._truncatableTag.text.replace(/<\/?b>/gi, "");
436
+ get tags(): Array<UDExTag> {
437
+ return this.tagGroup ? Array.from(this.tagGroup.shadowRoot!.querySelectorAll<UDExTag>("[udex-tag]")) : [];
660
438
  }
661
439
 
662
- get showSingleSelectedOption(): boolean {
663
- return this._singleSelectedOption?.length > 0 && this.modeSingleSelect;
440
+ get truncatableTagLabel(): string {
441
+ return this._truncatableTag.text.replace(/<\/?b>/gi, "");
664
442
  }
665
443
 
666
444
  get showMultiSelectedOptions(): boolean {
667
445
  return this.hasSelectedItems && this.modeMultiSelect;
668
446
  }
669
447
 
670
- get labelClass(): string {
671
- const baseClass = "udex-text-field__label";
672
- const isActive = this._open || this._singleSelectedOption || this.hasSelectedItems;
673
- return isActive ? `${baseClass} ${baseClass}_active` : `${baseClass}`;
674
- }
675
-
676
- get isReadOrDisplayOnly(): boolean {
677
- return this.readonly || this.displayonly;
448
+ get allowTargetOverlap(): boolean {
449
+ return !this.disableTargetOverlap;
678
450
  }
679
451
 
680
- get tokenizerExpanded() {
452
+ get tokenizerExpanded(): boolean {
681
453
  if (this._showTagsDropdownContent && this._truncatableTag) {
682
454
  return false;
683
455
  }
684
456
 
685
- if (this._tokenizer) {
686
- return this._tokenizer.expanded;
687
- }
688
-
689
- return this._open;
690
- }
691
-
692
- get showTrigger(): boolean {
693
- return !this.displayonly;
694
- }
695
-
696
- get hasSelectedItems(): boolean {
697
- return this.selectedItems.length > 0;
698
- }
699
-
700
- get effectiveTabIndex(): string {
701
- const tabindex = this.getAttribute("tabindex");
702
- return this.disabled ? `${this._inactiveTabIndex}` : tabindex || `${this._inactiveTabIndex}`;
703
- }
704
-
705
- get triggerTabIndex(): string {
706
- return this.disabled || this.readonly ? `${this._inactiveTabIndex}` : "";
707
- }
708
-
709
- get iconAccessibleNameText(): string {
710
- const selectOptionsText = UDExSelectBox.i18nBundle.getText(SELECT_OPTIONS);
711
- const iconAccessibleNameTextSingleMode = this._singleSelectedOption || selectOptionsText;
712
- return this.modeMultiSelect ? selectOptionsText : iconAccessibleNameTextSingleMode;
713
- }
714
-
715
- get additionalClassName(): string {
716
- return `udex-list__sticky`;
717
- }
718
-
719
- get searchableList() {
720
- this.defaultAccessibleRole = "listbox";
721
- return executeTemplate(UDExSelectBox.searchableListBaseTemplate, this);
722
- }
723
-
724
- get accInfo() {
725
- return {
726
- "ariaLabel": getAllAccessibleNameRefTexts(this) || this.accessibleName || this.label || undefined,
727
- };
728
- }
729
-
730
- get accessibilityAttributes(): SelectBoxAccessibilityAttributes {
731
- return {
732
- expanded: `${this._open}`,
733
- controls: this.popoverId,
734
- hasPopup: this.listboxRole,
735
- ariaLabel: this.iconAccessibleNameText,
736
- };
737
- }
738
-
739
- get popoverId(): string {
740
- return `${this._id}_udex-select-box__dropdown`;
741
- }
742
-
743
- get listboxRole(): string {
744
- return "listbox";
745
- }
457
+ const isCurrentlyExpanded = this.tokenizer?.expanded;
746
458
 
747
- static get searchableListBaseTemplate() {
748
- return SearchableListBaseTemplate;
459
+ return this._focused || this._open || isCurrentlyExpanded;
749
460
  }
750
461
  }
751
462