@sapudex/web-components 2.22.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 (170) hide show
  1. package/cypress/specs/CountrySelector.cy.tsx +158 -144
  2. package/cypress/specs/EventRibbon.cy.tsx +3 -1
  3. package/cypress/specs/SelectBox.cy.tsx +173 -206
  4. package/cypress/specs/Tag.cy.tsx +1 -1
  5. package/cypress/specs/TextField.cy.tsx +15 -0
  6. package/cypress/specs/Textarea.cy.tsx +15 -33
  7. package/dist/CountrySelector.d.ts +25 -142
  8. package/dist/CountrySelector.js +91 -268
  9. package/dist/CountrySelector.js.map +1 -1
  10. package/dist/FilterMenu.d.ts +14 -2
  11. package/dist/FilterMenu.js +11 -1
  12. package/dist/FilterMenu.js.map +1 -1
  13. package/dist/List.js +2 -3
  14. package/dist/List.js.map +1 -1
  15. package/dist/ListGroupHeaderBase.d.ts +1 -0
  16. package/dist/ListGroupHeaderBase.js +3 -0
  17. package/dist/ListGroupHeaderBase.js.map +1 -1
  18. package/dist/ListItemBase.d.ts +12 -0
  19. package/dist/ListItemBase.js +17 -2
  20. package/dist/ListItemBase.js.map +1 -1
  21. package/dist/MediaPlayer.js +2 -0
  22. package/dist/MediaPlayer.js.map +1 -1
  23. package/dist/MediaPlayerTemplate.js +4 -4
  24. package/dist/MediaPlayerTemplate.js.map +1 -1
  25. package/dist/SearchableListBase.d.ts +23 -16
  26. package/dist/SearchableListBase.js +48 -72
  27. package/dist/SearchableListBase.js.map +1 -1
  28. package/dist/SelectBase.d.ts +193 -0
  29. package/dist/SelectBase.js +428 -0
  30. package/dist/SelectBase.js.map +1 -0
  31. package/dist/SelectBox.d.ts +30 -152
  32. package/dist/SelectBox.js +139 -348
  33. package/dist/SelectBox.js.map +1 -1
  34. package/dist/TagGroup.d.ts +23 -5
  35. package/dist/TagGroup.js +37 -16
  36. package/dist/TagGroup.js.map +1 -1
  37. package/dist/TagTemplate.js +4 -2
  38. package/dist/TagTemplate.js.map +1 -1
  39. package/dist/TextArea.d.ts +1 -1
  40. package/dist/TextArea.js +5 -5
  41. package/dist/TextArea.js.map +1 -1
  42. package/dist/TextAreaTemplate.d.ts +2 -0
  43. package/dist/TextAreaTemplate.js +13 -0
  44. package/dist/TextAreaTemplate.js.map +1 -0
  45. package/dist/TextField.d.ts +29 -4
  46. package/dist/TextField.js +32 -16
  47. package/dist/TextField.js.map +1 -1
  48. package/dist/TextFieldTemplate.d.ts +2 -0
  49. package/dist/TextFieldTemplate.js +14 -0
  50. package/dist/TextFieldTemplate.js.map +1 -0
  51. package/dist/assets/{InputSuggestions-By00xQan.js → InputSuggestions-C8m6N2-d.js} +1 -1
  52. package/dist/assets/{ListItemStandardExpandableTextTemplate-BGtoxRbA.js → ListItemStandardExpandableTextTemplate-BwD5bYhw.js} +1 -1
  53. package/dist/assets/{bundle.esm-9yDdQqR5.js → bundle.esm-hGsUwmUy.js} +218 -217
  54. package/dist/css/themes/CountrySelector.css +1 -1
  55. package/dist/css/themes/EventRibbon.css +1 -1
  56. package/dist/css/themes/ListItem.css +1 -1
  57. package/dist/css/themes/MastheadItem.css +1 -1
  58. package/dist/css/themes/MastheadMobileMenu.css +1 -1
  59. package/dist/css/themes/RatingIndicator.css +1 -1
  60. package/dist/css/themes/Search.css +1 -1
  61. package/dist/css/themes/SelectBase.css +1 -0
  62. package/dist/css/themes/SelectBox.css +1 -1
  63. package/dist/css/themes/Slider.css +1 -1
  64. package/dist/css/themes/TagGroup.css +1 -1
  65. package/dist/css/themes/TextField.css +1 -1
  66. package/dist/custom-elements-internal.json +1088 -1284
  67. package/dist/custom-elements.json +284 -934
  68. package/dist/generated/templates/CountrySelectorTemplate.lit.js +3 -3
  69. package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
  70. package/dist/generated/templates/ListItemTemplate.lit.js +1 -1
  71. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  72. package/dist/generated/templates/SelectBoxTemplate.lit.js +10 -9
  73. package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
  74. package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
  75. package/dist/generated/themes/CountrySelector.css.js +1 -1
  76. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  77. package/dist/generated/themes/EventRibbon.css.d.ts +1 -1
  78. package/dist/generated/themes/EventRibbon.css.js +1 -1
  79. package/dist/generated/themes/EventRibbon.css.js.map +1 -1
  80. package/dist/generated/themes/ListItem.css.d.ts +1 -1
  81. package/dist/generated/themes/ListItem.css.js +1 -1
  82. package/dist/generated/themes/ListItem.css.js.map +1 -1
  83. package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
  84. package/dist/generated/themes/MastheadItem.css.js +1 -1
  85. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  86. package/dist/generated/themes/MastheadMobileMenu.css.d.ts +1 -1
  87. package/dist/generated/themes/MastheadMobileMenu.css.js +1 -1
  88. package/dist/generated/themes/MastheadMobileMenu.css.js.map +1 -1
  89. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  90. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  91. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  92. package/dist/generated/themes/Search.css.d.ts +1 -1
  93. package/dist/generated/themes/Search.css.js +1 -1
  94. package/dist/generated/themes/Search.css.js.map +1 -1
  95. package/dist/generated/themes/SelectBase.css.d.ts +2 -0
  96. package/dist/generated/themes/SelectBase.css.js +8 -0
  97. package/dist/generated/themes/SelectBase.css.js.map +1 -0
  98. package/dist/generated/themes/SelectBox.css.d.ts +1 -1
  99. package/dist/generated/themes/SelectBox.css.js +1 -1
  100. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  101. package/dist/generated/themes/Slider.css.d.ts +1 -1
  102. package/dist/generated/themes/Slider.css.js +1 -1
  103. package/dist/generated/themes/Slider.css.js.map +1 -1
  104. package/dist/generated/themes/TagGroup.css.d.ts +1 -1
  105. package/dist/generated/themes/TagGroup.css.js +1 -1
  106. package/dist/generated/themes/TagGroup.css.js.map +1 -1
  107. package/dist/generated/themes/TextField.css.d.ts +1 -1
  108. package/dist/generated/themes/TextField.css.js +1 -1
  109. package/dist/generated/themes/TextField.css.js.map +1 -1
  110. package/dist/types/common.d.ts +1 -1
  111. package/dist/types/common.js +1 -1
  112. package/dist/types/common.js.map +1 -1
  113. package/dist/vscode.html-custom-data.json +23 -234
  114. package/dist/web-types.json +256 -811
  115. package/package.json +1 -1
  116. package/src/CountrySelector.hbs +6 -61
  117. package/src/CountrySelector.ts +93 -375
  118. package/src/FilterMenu.ts +13 -3
  119. package/src/List.ts +2 -3
  120. package/src/ListGroupHeaderBase.ts +4 -0
  121. package/src/ListItem.hbs +0 -1
  122. package/src/ListItemBase.ts +17 -3
  123. package/src/MediaPlayer.ts +2 -0
  124. package/src/MediaPlayerTemplate.tsx +0 -1
  125. package/src/SearchableListBase.ts +68 -83
  126. package/src/SelectBase.ts +580 -0
  127. package/src/SelectBox.hbs +118 -107
  128. package/src/SelectBox.ts +155 -445
  129. package/src/TagGroup.ts +53 -19
  130. package/src/TagTemplate.tsx +4 -2
  131. package/src/TextArea.ts +5 -5
  132. package/src/TextAreaTemplate.tsx +67 -0
  133. package/src/TextField.ts +57 -24
  134. package/src/TextFieldTemplate.tsx +90 -0
  135. package/src/generated/templates/CountrySelectorTemplate.lit.ts +2 -2
  136. package/src/generated/templates/ListItemTemplate.lit.ts +1 -1
  137. package/src/generated/templates/SelectBoxTemplate.lit.ts +10 -9
  138. package/src/generated/themes/CountrySelector.css.ts +1 -1
  139. package/src/generated/themes/EventRibbon.css.ts +1 -1
  140. package/src/generated/themes/ListItem.css.ts +1 -1
  141. package/src/generated/themes/MastheadItem.css.ts +1 -1
  142. package/src/generated/themes/MastheadMobileMenu.css.ts +1 -1
  143. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  144. package/src/generated/themes/Search.css.ts +1 -1
  145. package/src/generated/themes/SelectBase.css.ts +9 -0
  146. package/src/generated/themes/SelectBox.css.ts +1 -1
  147. package/src/generated/themes/Slider.css.ts +1 -1
  148. package/src/generated/themes/TagGroup.css.ts +1 -1
  149. package/src/generated/themes/TextField.css.ts +1 -1
  150. package/src/themes/CountrySelector.css +42 -115
  151. package/src/themes/EventRibbon.css +21 -13
  152. package/src/themes/ListItem.css +6 -0
  153. package/src/themes/MastheadItem.css +0 -2
  154. package/src/themes/MastheadMobileMenu.css +2 -0
  155. package/src/themes/Search.css +0 -1
  156. package/src/themes/SelectBase.css +239 -0
  157. package/src/themes/SelectBox.css +13 -195
  158. package/src/themes/TagGroup.css +0 -1
  159. package/src/themes/TextField.css +7 -7
  160. package/src/types/common.ts +1 -1
  161. package/dist/generated/templates/TextAreaTemplate.lit.d.ts +0 -3
  162. package/dist/generated/templates/TextAreaTemplate.lit.js +0 -13
  163. package/dist/generated/templates/TextAreaTemplate.lit.js.map +0 -1
  164. package/dist/generated/templates/TextFieldTemplate.lit.d.ts +0 -3
  165. package/dist/generated/templates/TextFieldTemplate.lit.js +0 -14
  166. package/dist/generated/templates/TextFieldTemplate.lit.js.map +0 -1
  167. package/src/TextArea.hbs +0 -54
  168. package/src/TextField.hbs +0 -78
  169. package/src/generated/templates/TextAreaTemplate.lit.ts +0 -17
  170. package/src/generated/templates/TextFieldTemplate.lit.ts +0 -18
package/src/TagGroup.ts CHANGED
@@ -10,12 +10,12 @@ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
10
10
  import Token from "@ui5/webcomponents/dist/Token.js";
11
11
  import UDExTag from "./Tag.js";
12
12
  import UDExTooltip from "./Tooltip.js";
13
+ import { Placement } from "./types/Dropdown.js";
13
14
 
14
15
  import TagGroupTemplate from "./TagGroupTemplate.js";
15
16
 
16
17
  // Styles
17
18
  import TagGroupCss from "./generated/themes/TagGroup.css.js";
18
- import { Placement } from "./types/Dropdown.js";
19
19
 
20
20
  type UDExTagClickEventDetail = {
21
21
  tag: UDExTag,
@@ -96,6 +96,7 @@ class UDExTagGroup extends UI5Element {
96
96
  */
97
97
  @property({ type: Boolean })
98
98
  tokenizerExpanded: boolean = false;
99
+
99
100
  /**
100
101
  * Defines whether the component is in disabled state.
101
102
  *
@@ -126,6 +127,7 @@ class UDExTagGroup extends UI5Element {
126
127
  /**
127
128
  * Defines the tags.
128
129
  *
130
+ * @default "[]"
129
131
  * @public
130
132
  */
131
133
  @slot({ type: HTMLElement, "default": true })
@@ -141,11 +143,32 @@ class UDExTagGroup extends UI5Element {
141
143
  tooltipPlacement: `${Placement}` = Placement.Bottom;
142
144
 
143
145
  /**
146
+ * Determines whether there are hidden tags in the component.
147
+ *
148
+ * @default false
144
149
  * @private
145
150
  */
146
151
  @property({ type: Boolean })
147
152
  _isHiddenTags!: boolean;
148
153
 
154
+ /**
155
+ * Determines whether the "More" button should skip focus.
156
+ *
157
+ * @default false
158
+ * @private
159
+ */
160
+ @property({ type: Boolean })
161
+ _skipMoreButtonFocus!: boolean;
162
+
163
+ /**
164
+ * Determines whether the tokenizer should scroll to the end.
165
+ *
166
+ * @default false
167
+ * @private
168
+ */
169
+ @property({ type: Boolean })
170
+ _scrollToEnd: boolean = false;
171
+
149
172
  _tokenizer!: Tokenizer;
150
173
  _nMoreBtn!: HTMLElement | null;
151
174
  _resizeHandler: () => void;
@@ -155,25 +178,33 @@ class UDExTagGroup extends UI5Element {
155
178
  this._resizeHandler = this._onResize.bind(this);
156
179
  }
157
180
 
158
- get hiddenTags(): Token[] {
159
- return this._tokenizer?.overflownTokens || [];
160
- }
161
-
162
- get isReadOrDisplayOnly(): boolean {
163
- return this.readonly || this.displayonly;
181
+ onEnterDOM(): void {
182
+ ResizeHandler.register(this, this._resizeHandler);
164
183
  }
165
184
 
166
- get tokenizer(): Tokenizer {
167
- return this.shadowRoot!.querySelector<Tokenizer>(`#${this._id}-tag-group-tokenizer`)!;
185
+ onExitDOM(): void {
186
+ ResizeHandler.deregister(this, this._resizeHandler);
187
+ this._nMoreBtn?.removeEventListener("keydown", this._nMoreKeyDownHandler.bind(this));
168
188
  }
169
189
 
170
190
  onAfterRendering(): void {
171
191
  this._tokenizer = this.tokenizer;
172
192
  this._nMoreBtn = this._tokenizer.moreLink || null;
193
+
173
194
  if (!this.readonly && !this.disabled && this._nMoreBtn && !this._nMoreBtn.hasAttribute("tabindex")) {
174
195
  this._nMoreBtn.setAttribute("tabindex", "0");
175
196
  this._nMoreBtn.addEventListener("keydown", this._nMoreKeyDownHandler.bind(this));
176
197
  }
198
+
199
+ if (!this.displayonly && this._skipMoreButtonFocus && this._nMoreBtn) {
200
+ this._nMoreBtn.setAttribute("tabindex", "-1");
201
+ }
202
+
203
+ if (this._scrollToEnd) {
204
+ setTimeout(() => {
205
+ this._tokenizer.scrollToEnd();
206
+ }, 50);
207
+ }
177
208
  }
178
209
 
179
210
  _nMoreKeyDownHandler(e: Event) {
@@ -182,15 +213,6 @@ class UDExTagGroup extends UI5Element {
182
213
  }
183
214
  }
184
215
 
185
- onEnterDOM(): void {
186
- ResizeHandler.register(this, this._resizeHandler);
187
- }
188
-
189
- onExitDOM(): void {
190
- ResizeHandler.deregister(this, this._resizeHandler);
191
- this._nMoreBtn?.removeEventListener("keydown", this._nMoreKeyDownHandler.bind(this));
192
- }
193
-
194
216
  _onResize(): void {
195
217
  this._isHiddenTags = false;
196
218
  this._isHiddenTags = this._tokenizer?._nMoreCount > 0;
@@ -213,7 +235,7 @@ class UDExTagGroup extends UI5Element {
213
235
  handleTagKeyDown(e: KeyboardEvent): void {
214
236
  e.stopPropagation();
215
237
 
216
- if (isEscape(e)) {
238
+ if (isEscape(e) && this.tooltip) {
217
239
  this.tooltip.open = false;
218
240
  this._nMoreBtn?.focus();
219
241
  return;
@@ -233,6 +255,18 @@ class UDExTagGroup extends UI5Element {
233
255
  }
234
256
  }
235
257
 
258
+ get hiddenTags(): Token[] {
259
+ return this._tokenizer?.overflownTokens || [];
260
+ }
261
+
262
+ get isReadOrDisplayOnly(): boolean {
263
+ return this.readonly || this.displayonly;
264
+ }
265
+
266
+ get tokenizer(): Tokenizer {
267
+ return this.shadowRoot!.querySelector<Tokenizer>(`#${this._id}-tag-group-tokenizer`)!;
268
+ }
269
+
236
270
  get tooltip(): UDExTooltip {
237
271
  return this.shadowRoot!.querySelector<UDExTooltip>(`#${this._id}-tag-group-tooltip`)!;
238
272
  }
@@ -1,6 +1,8 @@
1
1
  import type UDExTag from "./Tag.js";
2
2
  import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
3
3
  import type { AriaRole } from "@ui5/webcomponents-base/dist/types.js";
4
+ // Move it to SelectBox template after rewriting to TSX
5
+ import { cleanLabel } from "./utils/listItemLabelUtils.js";
4
6
 
5
7
  export default function TagTemplate(this: UDExTag) {
6
8
  const rootClass = "udex-tag";
@@ -8,7 +10,7 @@ export default function TagTemplate(this: UDExTag) {
8
10
  return (
9
11
  this.readOnly ? (
10
12
  <div class={this.tagClasses}>
11
- <span class={`${rootClass}__text`}>{this.text}</span>
13
+ <span class={`${rootClass}__text`}>{cleanLabel(this.text)}</span>
12
14
  </div>
13
15
  ) : this.href ? (
14
16
  <a class={this.tagClasses}
@@ -44,7 +46,7 @@ function tagContent(this: UDExTag, rootClass: string, isIconClickable: boolean =
44
46
  {this.startIcon && (
45
47
  isIconBtn ? tagBtnIcon.call(this, rootClass, "start")
46
48
  : tagIcon.call(this, rootClass, "start", isIconClickable))}
47
- <span class={`${rootClass}__text`}>{this.text}</span>
49
+ <span class={`${rootClass}__text`}>{cleanLabel(this.text)}</span>
48
50
  {this.endIcon && (
49
51
  isIconBtn ? tagBtnIcon.call(this, rootClass, "end")
50
52
  : tagIcon.call(this, rootClass, "end", isIconClickable))}
package/src/TextArea.ts CHANGED
@@ -1,7 +1,7 @@
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 { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
6
6
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
7
7
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
@@ -23,7 +23,7 @@ import "@ui5/webcomponents-icons/dist/alert.js";
23
23
 
24
24
  import UDExStatusMessage from "./StatusMessage.js";
25
25
  import UDExValueState from "./types/common.js";
26
- import TextAreaTemplate from "./generated/templates/TextAreaTemplate.lit.js";
26
+ import TextAreaTemplate from "./TextAreaTemplate.js";
27
27
 
28
28
  // Styles
29
29
  import TextAreaCss from "./generated/themes/TextArea.css.js";
@@ -39,7 +39,7 @@ import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
39
39
  */
40
40
  @customElement({
41
41
  tag: "udex-textarea",
42
- renderer: litRender,
42
+ renderer: jsxRenderer,
43
43
  styles: [TextAreaCss, getEffectiveScrollbarStyle()],
44
44
  template: TextAreaTemplate,
45
45
  dependencies: [UDExStatusMessage],
@@ -320,8 +320,8 @@ class UDExTextArea extends UI5Element {
320
320
  return this.getDomRef()!.querySelector<HTMLTextAreaElement>("textarea")!;
321
321
  }
322
322
 
323
- get ariaInvalid(): string | null {
324
- return this.valueState === UDExValueState.Error ? "true" : null;
323
+ get _ariaInvalid(): boolean {
324
+ return this.valueState === UDExValueState.Error;
325
325
  }
326
326
 
327
327
  get hasValueState(): boolean {
@@ -0,0 +1,67 @@
1
+ import type TextArea from "./TextArea.js";
2
+ import UDExStatusMessage from "./StatusMessage.js";
3
+
4
+ export default function TextAreaTemplate(this: TextArea) {
5
+ const rootClass = "udex-textarea";
6
+ const hiddenClass = "hidden-text";
7
+
8
+ return (
9
+ <div class={`${rootClass}`}>
10
+ <div class={`${rootClass}__wrapper`}>
11
+ {this.label
12
+ ? <label class={this.labelClasses} for="textarea" part="label">
13
+ {this.label}{this.required && " * "}
14
+ </label>
15
+ : <label class="hidden-label" for="textarea">
16
+ {this.textHiddenLabel}
17
+ </label>
18
+ }
19
+ <textarea
20
+ id="textarea"
21
+ class={`${rootClass}__field`}
22
+ part="textarea"
23
+ value={this.value}
24
+ maxlength={this.maxlength}
25
+ rows={this.rows}
26
+ disabled={this.disabled}
27
+ readonly={this.isInputReadonly}
28
+ required={this.required}
29
+ aria-label={this.accessibleName}
30
+ aria-describedby={this.ariaDescribedBy}
31
+ aria-labelledby={this.accessibleNameRef}
32
+ aria-required={this.required}
33
+ aria-readonly={this.isInputReadonly}
34
+ aria-invalid={this._ariaInvalid}
35
+ onInput={this.handleInput}
36
+ onFocus={this.handleFocus}
37
+ onClick={this.handleClick}
38
+ onBlur={this.handleBlur}
39
+ onChange={this.handleChange}>
40
+ </textarea>
41
+ </div>
42
+ {this._supportingText &&
43
+ <>
44
+ <UDExStatusMessage
45
+ supporting-text={this._supportingText}
46
+ supporting-text-alignment="Right"
47
+ value-state={this.valueState}
48
+ disabled={this.disabled ? "true" : undefined}>
49
+ </UDExStatusMessage>
50
+ <span id={`${this._id}-supportingTextDesc`} class={hiddenClass}>
51
+ {this._supportingText}
52
+ </span>
53
+ </>
54
+ }
55
+ {this.hasValueState &&
56
+ <span id={`${this._id}-valueStateDesc`} class={hiddenClass}>
57
+ {this.ariaValueStateHiddenText}
58
+ </span>
59
+ }
60
+ {this.readonly &&
61
+ <span id={`${this._id}-readonlyDesc`} class={hiddenClass}>
62
+ {this.readOnlyText}
63
+ </span>
64
+ }
65
+ </div>
66
+ );
67
+ }
package/src/TextField.ts CHANGED
@@ -1,7 +1,7 @@
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 Icon from "@ui5/webcomponents/dist/Icon.js";
7
7
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
@@ -9,18 +9,13 @@ import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
9
9
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
10
10
  import { getAllAccessibleNameRefTexts } from "@ui5/webcomponents-base/dist/util/AccessibilityTextsHelper.js";
11
11
  import {
12
- VALUE_STATE_SUCCESS,
13
- VALUE_STATE_INFORMATION,
14
- VALUE_STATE_WARNING,
15
- VALUE_STATE_ERROR,
16
- READ_ONLY,
12
+ VALUE_STATE_SUCCESS, VALUE_STATE_INFORMATION, VALUE_STATE_WARNING, VALUE_STATE_ERROR, READ_ONLY,
17
13
  } from "./generated/i18n/i18n-defaults.js";
18
14
  import UDExControlButton from "./ControlButton.js";
19
- import UDExValueState from "./types/common.js";
15
+ import UDExValueState, { valueStateToControlButtonDesign } from "./types/common.js";
16
+ import type UDExControlButtonDesign from "./types/ControlButtonDesign.js";
20
17
  import UDExStatusMessage from "./StatusMessage.js";
21
-
22
- // Template
23
- import TextFieldTemplate from "./generated/templates/TextFieldTemplate.lit.js";
18
+ import TextFieldTemplate from "./TextFieldTemplate.js";
24
19
 
25
20
  // Styles
26
21
  import TextFieldCss from "./generated/themes/TextField.css.js";
@@ -37,6 +32,14 @@ type UDExTextFieldKeydownEventDetail = {
37
32
  keyboardEvent: KeyboardEvent;
38
33
  }
39
34
 
35
+ type UDExTextFieldChangeEventDetail = {
36
+ originalEvent: Event,
37
+ }
38
+
39
+ type UDExTextFieldBlurEventDetail = {
40
+ originalEvent: FocusEvent,
41
+ }
42
+
40
43
  /**
41
44
  * @class
42
45
  *
@@ -47,24 +50,30 @@ type UDExTextFieldKeydownEventDetail = {
47
50
  */
48
51
  @customElement({
49
52
  tag: "udex-text-field",
50
- renderer: litRender,
53
+ renderer: jsxRenderer,
51
54
  styles: TextFieldCss,
52
55
  template: TextFieldTemplate,
53
56
  dependencies: [UDExControlButton, Icon, UDExStatusMessage],
54
57
  })
55
58
 
56
59
  /**
57
- * Fired when the value of the component changes at each keystroke.
58
- *
59
- * @public
60
- */
60
+ * Fired when the value of the component changes at each keystroke.
61
+ *
62
+ * @public
63
+ */
61
64
  @event("input", { bubbles: true })
62
65
  /**
63
- * Fired when the input operation has finished by pressing Enter or on focusout.
64
- *
65
- * @public
66
- */
66
+ * Fired when the input operation has finished by pressing Enter or on focusout.
67
+ *
68
+ * @public
69
+ */
67
70
  @event("change", { bubbles: true })
71
+ /**
72
+ * Fired on input focusout.
73
+ *
74
+ * @public
75
+ */
76
+ @event("blur", { bubbles: true })
68
77
  /**
69
78
  * Fired event when the user clicks the icon.
70
79
  *
@@ -83,7 +92,8 @@ class UDExTextField extends UI5Element {
83
92
  eventDetails!: {
84
93
  "keydown": UDExTextFieldKeydownEventDetail,
85
94
  "input": void,
86
- "change": void,
95
+ "change": UDExTextFieldChangeEventDetail,
96
+ "blur": UDExTextFieldBlurEventDetail,
87
97
  "click-icon": void,
88
98
  };
89
99
  _labelActiveClassName = "udex-text-field__label_active";
@@ -140,6 +150,15 @@ class UDExTextField extends UI5Element {
140
150
  @property()
141
151
  accessibleName!: string;
142
152
 
153
+ /**
154
+ * Defines the name of the input element.
155
+ *
156
+ * @default ""
157
+ * @public
158
+ */
159
+ @property()
160
+ name!: string;
161
+
143
162
  /**
144
163
  * Receives id (or many ids) of the elements that label the component.
145
164
  * @default ""
@@ -148,6 +167,15 @@ class UDExTextField extends UI5Element {
148
167
  @property()
149
168
  accessibleNameRef: string = "";
150
169
 
170
+ /**
171
+ * Defines the ref of the input element.
172
+ *
173
+ * @default undefined
174
+ * @public
175
+ */
176
+ @property()
177
+ fieldRef?: ((el: HTMLInputElement | null) => void) | { current: HTMLInputElement | null };
178
+
151
179
  /**
152
180
  * Defines the accessible ARIA name of the component.
153
181
  *
@@ -382,8 +410,8 @@ class UDExTextField extends UI5Element {
382
410
  this.fireDecoratorEvent("keydown", { keyboardEvent: e });
383
411
  }
384
412
 
385
- handleChange = (): void => {
386
- this.fireDecoratorEvent("change");
413
+ handleChange = (e: Event): void => {
414
+ this.fireDecoratorEvent("change", { originalEvent: e });
387
415
  };
388
416
 
389
417
  handleInput = (inputEvent: InputEvent) => {
@@ -403,7 +431,8 @@ class UDExTextField extends UI5Element {
403
431
  }
404
432
  };
405
433
 
406
- handleBlur = (): void => {
434
+ handleBlur = (e: FocusEvent): void => {
435
+ this.fireDecoratorEvent("blur", { originalEvent: e });
407
436
  this.active = false;
408
437
 
409
438
  if (this.value) {
@@ -488,9 +517,13 @@ class UDExTextField extends UI5Element {
488
517
  const label = this._isComboboxRole ? this.value : "";
489
518
  return `${label} ${this.supportingText || ""} ${this.valueStateText}`;
490
519
  }
520
+
521
+ get controlButtonDesign(): UDExControlButtonDesign {
522
+ return valueStateToControlButtonDesign[this.valueState];
523
+ }
491
524
  }
492
525
 
493
526
  UDExTextField.define();
494
527
 
495
528
  export default UDExTextField;
496
- export type { UDExTextFieldKeydownEventDetail };
529
+ export type { UDExTextFieldKeydownEventDetail, UDExTextFieldChangeEventDetail, UDExTextFieldBlurEventDetail };
@@ -0,0 +1,90 @@
1
+ import type TextField from "./TextField.js";
2
+ import type { AriaRole } from "@ui5/webcomponents-base/dist/types.js";
3
+ import type { Booleanish } from "@ui5/webcomponents-base/dist/thirdparty/preact/jsx.js";
4
+ import UDExControlButton from "./ControlButton.js";
5
+ import UDExStatusMessage from "./StatusMessage.js";
6
+
7
+ export default function TextFieldTemplate(this: TextField) {
8
+ const rootClass = "udex-text-field";
9
+ const hiddenClass = "hidden-text";
10
+
11
+ return (
12
+ <div class={`${rootClass}__container`}>
13
+ {this.label &&
14
+ <label for={`${this._id}-input`} class={this.labelClasses} part="label">
15
+ {this.label}{this.required && " * "}
16
+ </label>
17
+ }
18
+ <div class={`${rootClass}__wrap`}>
19
+ <input id={`${this._id}-input`} class={`${rootClass}__input`}
20
+ type={this.type}
21
+ value={this.value}
22
+ maxlength={this.maxlength}
23
+ disabled={this.disabled}
24
+ readonly={this.isInputReadonly}
25
+ required={this.required}
26
+ aria-required={this.required}
27
+ aria-readonly={this.isInputReadonly}
28
+ autocomplete={this.autocomplete}
29
+ role={this.inputRole as AriaRole}
30
+ name={this.name}
31
+ ref={this.fieldRef}
32
+ aria-disabled={this.readonlyNotDisabled}
33
+ aria-invalid={this.accInfo.ariaInvalid as Booleanish}
34
+ aria-describedby={this.accInfo.ariaDescribedBy}
35
+ aria-haspopup={this.accInfo.ariaHasPopup as Booleanish}
36
+ aria-label={this.accInfo.ariaLabel}
37
+ part="textfield-input"
38
+ min={this.min}
39
+ max={this.max}
40
+ step={this.step}
41
+ onChange={this.handleChange}
42
+ onInput={this.handleInput}
43
+ onFocus={this.handleFocus}
44
+ onBlur={this.handleBlur}
45
+ onClick={this.handleClick}
46
+ onKeyDown={this.handleKeydown} />
47
+ {this.icon &&
48
+ <UDExControlButton
49
+ part="textfield-control-btn"
50
+ class={`${rootClass}__icon-container`}
51
+ size="Large"
52
+ tooltip={this.showButtonTooltip}
53
+ active={this.active}
54
+ disabled={this.disabled}
55
+ readonly={this.readonly}
56
+ non-interactive={this.readonly}
57
+ design={this.controlButtonDesign}
58
+ icon={this.icon}
59
+ _is-combobox-role={this._isComboboxRole}
60
+ accessible-name={this.buttonAccessibleName}
61
+ accessible-description={this.buttonAccessibleDescription}
62
+ onClick={this.handleIconClick}>
63
+ </UDExControlButton>
64
+ }
65
+ </div>
66
+ {this.supportingText &&
67
+ <>
68
+ <UDExStatusMessage
69
+ supporting-text={this.supportingText}
70
+ value-state={this.valueState}
71
+ disabled={this.disabled ? "true" : undefined}>
72
+ </UDExStatusMessage>
73
+ <span id={`${this._id}-supportingTextDesc`} class={hiddenClass}>
74
+ {this.supportingText}
75
+ </span>
76
+ </>
77
+ }
78
+ {this.hasValueState &&
79
+ <span id={`${this._id}-valueStateDesc`} class={hiddenClass}>
80
+ {this.valueStateText}
81
+ </span>
82
+ }
83
+ {this.readonly &&
84
+ <span id={`${this._id}-stateReadOnlyDesc`} class={hiddenClass}>
85
+ {this.readOnlyStateText}
86
+ </span>
87
+ }
88
+ </div>
89
+ );
90
+ }
@@ -5,8 +5,8 @@ import type UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
5
5
  import type CountrySelector from "../../CountrySelector.js";
6
6
  import type { ClassMapValue } from "@ui5/webcomponents-base/dist/types.js";
7
7
 
8
- function block0 (this: CountrySelector, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<div class="${ifDefined(this.countrySelectorClasses)}"><div id="udex-${ifDefined(this._id)}-country-selector__opener" class="${ifDefined(this.countrySelectorTriggerClasses)}" ?disabled="${this.isOpenerDisabled}" @click="${this.handleTriggerClick}" slot="trigger">${ this.showFlagImages ? block1.call(this, context, tags, suffix) : undefined }<${scopeTag("udex-text-field", tags, suffix)} label="${ifDefined(this.effectiveAriaLabel)}" id="udexTextField" class="udex-country-selector__text" value="${ifDefined(this.selectedCountryName)}" value-state="${ifDefined(this.valueState)}" supporting-text="${ifDefined(this.supportingText)}" direction="left" aria-label="${ifDefined(this.effectiveAriaLabel)}" accessible-name="${ifDefined(this.supportingText)}" accessible-name-ref="${ifDefined(this.accessibleNameRef)}" aria-controls="${ifDefined(this.ariaControls)}" aria-haspopup="true" aria-expanded="${ifDefined(this._open)}" ?required="${this.required}" ?disabled="${this.disabled}" ?readonly="${this.readonly}" ?displayonly="${this.displayonly}" @ui5-click-icon="${ifDefined(this.handleTriggerClick)}" @mousedown="${this.handleInputMouseDown}" icon="${ifDefined(this.triggerIcon)}" accessible-icon-name="${ifDefined(this.effectiveAriaLabel)}" maxlength="0" _is-combobox-role></${scopeTag("udex-text-field", tags, suffix)}></div><${scopeTag("udex-dropdown", tags, suffix)} id="dropdown" opener="udex-${ifDefined(this._id)}-country-selector__opener" horizontal-align="Start" height="${ifDefined(this.height)}" @ui5-item-press="${ifDefined(this.handleItemPress)}" @ui5-before-open="${ifDefined(this._dropdownBeforeOpen)}" @ui5-open="${ifDefined(this._dropdownOpen)}" @ui5-before-close="${ifDefined(this._dropdownBeforeClose)}" @ui5-close="${ifDefined(this._dropdownClose)}" @ui5-submit-search-value="${ifDefined(this.handleSubmitSearch)}" @ui5-handle-value-search="${ifDefined(this.handleValueSearch)}" @ui5-handle-value-reset="${ifDefined(this.handleResetSearch)}" @ui5-search-keydown="${ifDefined(this.handleKeyDownSearch)}" @keydown="${this.handleKeyDownDropdown}">${ifDefined(this.searchableList)}</${scopeTag("udex-dropdown", tags, suffix)}></div> ` : html`<div class="${ifDefined(this.countrySelectorClasses)}"><div id="udex-${ifDefined(this._id)}-country-selector__opener" class="${ifDefined(this.countrySelectorTriggerClasses)}" ?disabled="${this.isOpenerDisabled}" @click="${this.handleTriggerClick}" slot="trigger">${ this.showFlagImages ? block1.call(this, context, tags, suffix) : undefined }<udex-text-field label="${ifDefined(this.effectiveAriaLabel)}" id="udexTextField" class="udex-country-selector__text" value="${ifDefined(this.selectedCountryName)}" value-state="${ifDefined(this.valueState)}" supporting-text="${ifDefined(this.supportingText)}" direction="left" aria-label="${ifDefined(this.effectiveAriaLabel)}" accessible-name="${ifDefined(this.supportingText)}" accessible-name-ref="${ifDefined(this.accessibleNameRef)}" aria-controls="${ifDefined(this.ariaControls)}" aria-haspopup="true" aria-expanded="${ifDefined(this._open)}" ?required="${this.required}" ?disabled="${this.disabled}" ?readonly="${this.readonly}" ?displayonly="${this.displayonly}" @ui5-click-icon="${ifDefined(this.handleTriggerClick)}" @mousedown="${this.handleInputMouseDown}" icon="${ifDefined(this.triggerIcon)}" accessible-icon-name="${ifDefined(this.effectiveAriaLabel)}" maxlength="0" _is-combobox-role></udex-text-field></div><udex-dropdown id="dropdown" opener="udex-${ifDefined(this._id)}-country-selector__opener" horizontal-align="Start" height="${ifDefined(this.height)}" @ui5-item-press="${ifDefined(this.handleItemPress)}" @ui5-before-open="${ifDefined(this._dropdownBeforeOpen)}" @ui5-open="${ifDefined(this._dropdownOpen)}" @ui5-before-close="${ifDefined(this._dropdownBeforeClose)}" @ui5-close="${ifDefined(this._dropdownClose)}" @ui5-submit-search-value="${ifDefined(this.handleSubmitSearch)}" @ui5-handle-value-search="${ifDefined(this.handleValueSearch)}" @ui5-handle-value-reset="${ifDefined(this.handleResetSearch)}" @ui5-search-keydown="${ifDefined(this.handleKeyDownSearch)}" @keydown="${this.handleKeyDownDropdown}">${ifDefined(this.searchableList)}</udex-dropdown></div> `;}
9
- function block1 (this: CountrySelector, context: UI5Element, tags: string[], suffix: string | undefined) { return html`<img class="udex-country-selector__image" aria-label="${ifDefined(this.flagAriaLabel)}" style="background-position-x: ${ifDefined(this.selectedCountryFlagX)}; background-position-y: ${ifDefined(this.selectedCountryFlagY)}">`;}
8
+ function block0 (this: CountrySelector, context: UI5Element, tags: string[], suffix: string | undefined) { return html`${ !this.hideFlagImages ? block1.call(this, context, tags, suffix) : undefined } `;}
9
+ function block1 (this: CountrySelector, context: UI5Element, tags: string[], suffix: string | undefined) { return html`<img class="udex-text-field__image" aria-label="${ifDefined(this.flagAriaLabel)}" style="background-position-x: ${ifDefined(this.selectedCountryFlagX)}; background-position-y: ${ifDefined(this.selectedCountryFlagY)}">`;}
10
10
 
11
11
  function template(this: CountrySelector) { return block0.call(this, this, (this.constructor as typeof UI5Element).tagsToScope, getCustomElementsScopingSuffix()); }
12
12
  export default template;
@@ -8,7 +8,7 @@ import type { ClassMapValue } from "@ui5/webcomponents-base/dist/types.js";
8
8
  function block0 (this: ListItem, context: UI5Element, tags: string[], suffix: string | undefined) { return html`${ this.modeSelected ? block1.call(this, context, tags, suffix) : undefined }${ this.modeSingleContent ? block20.call(this, context, tags, suffix) : undefined } `;}
9
9
  function block1 (this: ListItem, context: UI5Element, tags: string[], suffix: string | undefined) { return html`<div part="item" tabindex="${ifDefined(this._effectiveTabIndex)}" aria-disabled="${ifDefined(this._ariaDisabled)}" class="${ifDefined(this.className)}" role="${ifDefined(this.roleItem)}" @click="${this.handleItemClick}" @mousedown="${this.handleMouseDown}" @mouseup="${this.handleMouseUp}" @keyup="${this.handleKeyUp}" @keydown="${this.handleKeyDown}" @focusin="${this.handleFocusIn}" @focusout="${this.handleFocusOut}" ?divider="${this.divider}" _id="${ifDefined(this._id)}" data-selected="${ifDefined(this.selected)}" aria-describedby="${ifDefined(this.itemDescribedBy)}">${ this.modeMultiSelect ? block2.call(this, context, tags, suffix) : undefined }${ this.modeRadioGroup ? block3.call(this, context, tags, suffix) : undefined }<div class="udex-list__content-wrap" _id="${ifDefined(this._id)}" aria-labelledby="${ifDefined(this._id)}-invisibleText" aria-label="${ifDefined(this.accessibleListItemName)}">${ this.flag ? block4.call(this, context, tags, suffix) : undefined }${ this.typeNumber ? block5.call(this, context, tags, suffix) : undefined }${ this.typeCircle ? block6.call(this, context, tags, suffix) : undefined }${ this.typeIcon ? block7.call(this, context, tags, suffix) : undefined }${ this.image ? block8.call(this, context, tags, suffix) : undefined }<div class="udex-list__content" part="content">${ this.label ? block10.call(this, context, tags, suffix) : block15.call(this, context, tags, suffix) }</div><div class="hidden" id="${ifDefined(this._id)}-invisibleText">${ifDefined(this.accessibleListItemName)}</div><div class="hidden" id="${ifDefined(this._id)}-invisibleText-describedby">${ifDefined(this.itemState)}</div></div></div>`;}
10
10
  function block2 (this: ListItem, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<${scopeTag("udex-checkbox", tags, suffix)} class="udex-list__checkbox" part="checkbox" tabindex="-1" ?indeterminate="${this.indeterminate}" accessible-name="checkbox ${ifDefined(this.stateAccessibleName)}" ?checked="${this.selected}" ?disabled="${this.disabled}"></${scopeTag("udex-checkbox", tags, suffix)}>` : html`<udex-checkbox class="udex-list__checkbox" part="checkbox" tabindex="-1" ?indeterminate="${this.indeterminate}" accessible-name="checkbox ${ifDefined(this.stateAccessibleName)}" ?checked="${this.selected}" ?disabled="${this.disabled}"></udex-checkbox>`;}
11
- function block3 (this: ListItem, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<${scopeTag("udex-radio-button", tags, suffix)} class="udex-list__radio" part="radio" tabindex="-1" accessible-name="radio ${ifDefined(this.stateAccessibleName)}" ?aria-selected="${this.selected}" ?checked="${this.selected}" ?disabled="${this.disabled}"></${scopeTag("udex-radio-button", tags, suffix)}>` : html`<udex-radio-button class="udex-list__radio" part="radio" tabindex="-1" accessible-name="radio ${ifDefined(this.stateAccessibleName)}" ?aria-selected="${this.selected}" ?checked="${this.selected}" ?disabled="${this.disabled}"></udex-radio-button>`;}
11
+ function block3 (this: ListItem, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<${scopeTag("udex-radio-button", tags, suffix)} class="udex-list__radio" part="radio" tabindex="-1" accessible-name="radio ${ifDefined(this.stateAccessibleName)}" ?checked="${this.selected}" ?disabled="${this.disabled}"></${scopeTag("udex-radio-button", tags, suffix)}>` : html`<udex-radio-button class="udex-list__radio" part="radio" tabindex="-1" accessible-name="radio ${ifDefined(this.stateAccessibleName)}" ?checked="${this.selected}" ?disabled="${this.disabled}"></udex-radio-button>`;}
12
12
  function block4 (this: ListItem, context: UI5Element, tags: string[], suffix: string | undefined) { return html`<div class="udex-list__flag-wrap"><span class="udex-list__flag" style="background-position: ${ifDefined(this.flagPosition)}"></span></div>`;}
13
13
  function block5 (this: ListItem, context: UI5Element, tags: string[], suffix: string | undefined) { return html`<span class="udex-list__number">${ifDefined(this.numberOfItem)}.</span>`;}
14
14
  function block6 (this: ListItem, context: UI5Element, tags: string[], suffix: string | undefined) { return html`<span class="udex-list__circle">&#x2022;</span>`;}
@@ -5,17 +5,18 @@ import type UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
5
5
  import type SelectBox from "../../SelectBox.js";
6
6
  import type { ClassMapValue } from "@ui5/webcomponents-base/dist/types.js";
7
7
 
8
- function block0 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<div class="udex-select-box__root"><div class="udex-text-field__container"><div class="udex-text-field__wrap"><div role="combobox" @click="${this.getHandleSingleSelectOpen}" class="udex-text-field__input" @ui5-tag-icon-click="${ifDefined(this.handleRemoveTag)}" @keydown="${this.handleKeyDownTrigger}" ?open="${this._open}" tabindex="${ifDefined(this.effectiveTabIndex)}" @focusin="${this.handleFocusIn}" @focusout="${this.handleFocusOut}" ?disabled="${this.disabled}" ?displayonly="${this.displayonly}" ?readonly="${this.readonly}" aria-label="${ifDefined(this.accInfo.ariaLabel)}" aria-readonly="${ifDefined(this.isReadOrDisplayOnly)}" aria-disabled="${ifDefined(this.disabled)}" aria-haspopup="${ifDefined(this.listboxRole)}" aria-controls="${ifDefined(this.popoverId)}" aria-expanded="${ifDefined(this.tokenizerExpanded)}" aria-activedescendant>${ this.label ? block1.call(this, context, tags, suffix) : undefined }${ this.showSingleSelectedOption ? block3.call(this, context, tags, suffix) : undefined }${ this.showMultiSelectedOptions ? block4.call(this, context, tags, suffix) : undefined }${ this.showTrigger ? block7.call(this, context, tags, suffix) : undefined }</div></div>${ this.supportingText ? block8.call(this, context, tags, suffix) : undefined }</div><${scopeTag("ui5-popover", tags, suffix)} hide-arrow id="${ifDefined(this.popoverId)}" class="udex-select-box__dropdown" ?allow-target-overlap="${this.allowTargetOverlap}" @keydown="${this.handleKeyDownDropdown}" @ui5-select-all="${ifDefined(this.handleSelectAll)}" @ui5-item-press="${ifDefined(this.handleItemPress)}" @ui5-header-press="${ifDefined(this.handleHeaderPress)}" @ui5-submit-search-value="${ifDefined(this.handleSubmitSearch)}" @ui5-handle-value-search="${ifDefined(this.handleValueSearch)}" @ui5-handle-value-reset="${ifDefined(this.handleResetSearch)}" @ui5-before-open="${ifDefined(this.handleDropdownBeforeOpen)}" @ui5-after-close="${ifDefined(this.handleDropdownAfterClose)}" @search-keydown="${this.handleKeyDownSearch}" horizontal-align="Start" placement="Bottom">${ this._showTagsDropdownContent ? block9.call(this, context, tags, suffix) : block10.call(this, context, tags, suffix) }</${scopeTag("ui5-popover", tags, suffix)}></div>` : html`<div class="udex-select-box__root"><div class="udex-text-field__container"><div class="udex-text-field__wrap"><div role="combobox" @click="${this.getHandleSingleSelectOpen}" class="udex-text-field__input" @ui5-tag-icon-click="${ifDefined(this.handleRemoveTag)}" @keydown="${this.handleKeyDownTrigger}" ?open="${this._open}" tabindex="${ifDefined(this.effectiveTabIndex)}" @focusin="${this.handleFocusIn}" @focusout="${this.handleFocusOut}" ?disabled="${this.disabled}" ?displayonly="${this.displayonly}" ?readonly="${this.readonly}" aria-label="${ifDefined(this.accInfo.ariaLabel)}" aria-readonly="${ifDefined(this.isReadOrDisplayOnly)}" aria-disabled="${ifDefined(this.disabled)}" aria-haspopup="${ifDefined(this.listboxRole)}" aria-controls="${ifDefined(this.popoverId)}" aria-expanded="${ifDefined(this.tokenizerExpanded)}" aria-activedescendant>${ this.label ? block1.call(this, context, tags, suffix) : undefined }${ this.showSingleSelectedOption ? block3.call(this, context, tags, suffix) : undefined }${ this.showMultiSelectedOptions ? block4.call(this, context, tags, suffix) : undefined }${ this.showTrigger ? block7.call(this, context, tags, suffix) : undefined }</div></div>${ this.supportingText ? block8.call(this, context, tags, suffix) : undefined }</div><ui5-popover hide-arrow id="${ifDefined(this.popoverId)}" class="udex-select-box__dropdown" ?allow-target-overlap="${this.allowTargetOverlap}" @keydown="${this.handleKeyDownDropdown}" @ui5-select-all="${ifDefined(this.handleSelectAll)}" @ui5-item-press="${ifDefined(this.handleItemPress)}" @ui5-header-press="${ifDefined(this.handleHeaderPress)}" @ui5-submit-search-value="${ifDefined(this.handleSubmitSearch)}" @ui5-handle-value-search="${ifDefined(this.handleValueSearch)}" @ui5-handle-value-reset="${ifDefined(this.handleResetSearch)}" @ui5-before-open="${ifDefined(this.handleDropdownBeforeOpen)}" @ui5-after-close="${ifDefined(this.handleDropdownAfterClose)}" @search-keydown="${this.handleKeyDownSearch}" horizontal-align="Start" placement="Bottom">${ this._showTagsDropdownContent ? block9.call(this, context, tags, suffix) : block10.call(this, context, tags, suffix) }</ui5-popover></div>`;}
9
- function block1 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return html`<span class="${ifDefined(this.labelClass)}">${ifDefined(this.label)}${ this.required ? block2.call(this, context, tags, suffix) : undefined }</span><span class="hidden" id="${ifDefined(this._id)}-single-label">${ifDefined(this.accInfo.ariaLabel)}</span></span>`;}
10
- function block2 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return html` * `;}
11
- function block3 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return html`<div class="udex-text-field__text-holder"><span class="udex-text-field__single-label" aria-hidden="true">${unsafeHTML(this._singleSelectedOption)}</span></div>`;}
12
- function block4 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<${scopeTag("udex-tag-group", tags, suffix)} class="udex-tag-group" ?displayonly="${this.displayonly}" ?readonly="${this.readonly}" ?disabled="${this.disabled}" tooltip-placement="${ifDefined(this.tooltipPlacement)}" @ui5-tag-click="${ifDefined(this.handleTagClick)}" @ui5-show-more-tags="${ifDefined(this.getHandlerShowMoreItems)}" @ui5-tag-keydown="${ifDefined(this.handleKeyDownTag)}" ?expanded="${this.tokenizerExpanded}">${ repeat(this.selectedItems, (item, index) => (item as typeof item & {_id?: any})._id || index, (item, index: number) => block5.call(this, context, tags, suffix, item, index)) }</${scopeTag("udex-tag-group", tags, suffix)}>` : html`<udex-tag-group class="udex-tag-group" ?displayonly="${this.displayonly}" ?readonly="${this.readonly}" ?disabled="${this.disabled}" tooltip-placement="${ifDefined(this.tooltipPlacement)}" @ui5-tag-click="${ifDefined(this.handleTagClick)}" @ui5-show-more-tags="${ifDefined(this.getHandlerShowMoreItems)}" @ui5-tag-keydown="${ifDefined(this.handleKeyDownTag)}" ?expanded="${this.tokenizerExpanded}">${ repeat(this.selectedItems, (item, index) => (item as typeof item & {_id?: any})._id || index, (item, index: number) => block5.call(this, context, tags, suffix, item, index)) }</udex-tag-group>`;}
13
- function block5 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined, item: any, index: number) { return html`${ !item.isGroup ? block6.call(this, context, tags, suffix, item, index) : undefined }`;}
14
- function block6 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined, item: any, index: number) { return suffix ? html`<${scopeTag("udex-tag", tags, suffix)} text="${ifDefined(item.label)}" id="${ifDefined(item._id)}" icon="decline"></${scopeTag("udex-tag", tags, suffix)}>` : html`<udex-tag text="${ifDefined(item.label)}" id="${ifDefined(item._id)}" icon="decline"></udex-tag>`;}
15
- function block7 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<button role="combobox" aria-labelledby="${ifDefined(this._id)}-single-label" aria-expanded="${ifDefined(this.accessibilityAttributes.expanded)}" aria-controls="${ifDefined(this.accessibilityAttributes.controls)}" aria-haspopup="${ifDefined(this.accessibilityAttributes.hasPopup)}" class="udex-text-field__trigger" tabindex="${ifDefined(this.triggerTabIndex)}" @keydown="${this.handleKeyDownTrigger}" @click="${this.getHandleMultiSelectOpen}"><${scopeTag("ui5-icon", tags, suffix)} name="navigation-down-arrow"></${scopeTag("ui5-icon", tags, suffix)}><span class="hidden">${ifDefined(this.accessibilityAttributes.ariaLabel)}</span></button>` : html`<button role="combobox" aria-labelledby="${ifDefined(this._id)}-single-label" aria-expanded="${ifDefined(this.accessibilityAttributes.expanded)}" aria-controls="${ifDefined(this.accessibilityAttributes.controls)}" aria-haspopup="${ifDefined(this.accessibilityAttributes.hasPopup)}" class="udex-text-field__trigger" tabindex="${ifDefined(this.triggerTabIndex)}" @keydown="${this.handleKeyDownTrigger}" @click="${this.getHandleMultiSelectOpen}"><ui5-icon name="navigation-down-arrow"></ui5-icon><span class="hidden">${ifDefined(this.accessibilityAttributes.ariaLabel)}</span></button>`;}
16
- function block8 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<${scopeTag("udex-status-message", tags, suffix)} ?disabled="${this.disabled}" supporting-text="${ifDefined(this.supportingText)}" value-state="${ifDefined(this.valueState)}"></${scopeTag("udex-status-message", tags, suffix)}>` : html`<udex-status-message ?disabled="${this.disabled}" supporting-text="${ifDefined(this.supportingText)}" value-state="${ifDefined(this.valueState)}"></udex-status-message>`;}
8
+ function block0 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<div class="${ifDefined(this._rootClass)}"><div class="udex-text-field__container"><div class="udex-text-field__wrap" ?displayonly="${this.displayonly}">${ this.showMultiSelectedOptions ? block1.call(this, context, tags, suffix) : undefined }<div class="udex-text-field__input" @focusin="${this.handleInputFocusIn}" @focusout="${this.handleInputFocusOut}" ?readonly="${this.readonly}" ?disabled="${this.isDisabled}" ?open="${this._open}">${ this.label ? block4.call(this, context, tags, suffix) : undefined }${ this.showImageFlags ? block6.call(this, context, tags, suffix) : undefined }<div class="udex-text-field__holder"><input role="combobox" type="text" id="search-input" name="search" class="udex-text-field__search" .value="${ifDefined(this._inputValue)}" @input="${this.handleSearchChange}" @click="${this.handleInputClick}" @keydown="${this.handleKeyDownSearch}" ?disabled="${this.isDisabled}" ?readonly="${this.isReadOrDisplayOnly}" aria-label="${ifDefined(this.accInfo.ariaLabel)}" aria-readonly="${ifDefined(this.isReadOrDisplayOnly)}" aria-disabled="${ifDefined(this.disabled)}" aria-haspopup="${ifDefined(this.listboxRole)}" aria-controls="${ifDefined(this.popoverId)}" aria-expanded="${ifDefined(this._open)}" aria-autocomplete="${ifDefined(this._ariaAutoComplete)}" aria-describedby="${ifDefined(this._id)}-aria-describedby" autocomplete="off" />${ this._selectedOption ? block7.call(this, context, tags, suffix) : undefined }</div>${ !this.displayonly ? block8.call(this, context, tags, suffix) : undefined }<${scopeTag("ui5-popover", tags, suffix)} id="${ifDefined(this.popoverId)}" ?allow-target-overlap="${this.allowTargetOverlap}" @keydown="${this.handleKeyDownDropdown}" @ui5-select-all="${ifDefined(this.handleSelectAll)}" @ui5-item-press="${ifDefined(this.handleItemPress)}" @ui5-header-press="${ifDefined(this.handleHeaderPress)}" @ui5-before-open="${ifDefined(this.handleDropdownBeforeOpen)}" @ui5-open="${ifDefined(this.fireEventDropdownOpen)}" @ui5-before-close="${ifDefined(this.handleDropdownBeforeClose)}" @ui5-close="${ifDefined(this.handleDropdownClose)}" class="udex-select-box__dropdown" horizontal-align="Start" placement="Bottom" prevent-focus-restore prevent-initial-focus hide-arrow>${ this._showTagsDropdownContent ? block9.call(this, context, tags, suffix) : block10.call(this, context, tags, suffix) }</${scopeTag("ui5-popover", tags, suffix)}><span aria-live="polite" aria-atomic="true" class="hidden">${ifDefined(this._accSearchResultInfo)}</span></div></div>${ this.supportingText ? block11.call(this, context, tags, suffix) : undefined }</div></div>` : html`<div class="${ifDefined(this._rootClass)}"><div class="udex-text-field__container"><div class="udex-text-field__wrap" ?displayonly="${this.displayonly}">${ this.showMultiSelectedOptions ? block1.call(this, context, tags, suffix) : undefined }<div class="udex-text-field__input" @focusin="${this.handleInputFocusIn}" @focusout="${this.handleInputFocusOut}" ?readonly="${this.readonly}" ?disabled="${this.isDisabled}" ?open="${this._open}">${ this.label ? block4.call(this, context, tags, suffix) : undefined }${ this.showImageFlags ? block6.call(this, context, tags, suffix) : undefined }<div class="udex-text-field__holder"><input role="combobox" type="text" id="search-input" name="search" class="udex-text-field__search" .value="${ifDefined(this._inputValue)}" @input="${this.handleSearchChange}" @click="${this.handleInputClick}" @keydown="${this.handleKeyDownSearch}" ?disabled="${this.isDisabled}" ?readonly="${this.isReadOrDisplayOnly}" aria-label="${ifDefined(this.accInfo.ariaLabel)}" aria-readonly="${ifDefined(this.isReadOrDisplayOnly)}" aria-disabled="${ifDefined(this.disabled)}" aria-haspopup="${ifDefined(this.listboxRole)}" aria-controls="${ifDefined(this.popoverId)}" aria-expanded="${ifDefined(this._open)}" aria-autocomplete="${ifDefined(this._ariaAutoComplete)}" aria-describedby="${ifDefined(this._id)}-aria-describedby" autocomplete="off" />${ this._selectedOption ? block7.call(this, context, tags, suffix) : undefined }</div>${ !this.displayonly ? block8.call(this, context, tags, suffix) : undefined }<ui5-popover id="${ifDefined(this.popoverId)}" ?allow-target-overlap="${this.allowTargetOverlap}" @keydown="${this.handleKeyDownDropdown}" @ui5-select-all="${ifDefined(this.handleSelectAll)}" @ui5-item-press="${ifDefined(this.handleItemPress)}" @ui5-header-press="${ifDefined(this.handleHeaderPress)}" @ui5-before-open="${ifDefined(this.handleDropdownBeforeOpen)}" @ui5-open="${ifDefined(this.fireEventDropdownOpen)}" @ui5-before-close="${ifDefined(this.handleDropdownBeforeClose)}" @ui5-close="${ifDefined(this.handleDropdownClose)}" class="udex-select-box__dropdown" horizontal-align="Start" placement="Bottom" prevent-focus-restore prevent-initial-focus hide-arrow>${ this._showTagsDropdownContent ? block9.call(this, context, tags, suffix) : block10.call(this, context, tags, suffix) }</ui5-popover><span aria-live="polite" aria-atomic="true" class="hidden">${ifDefined(this._accSearchResultInfo)}</span></div></div>${ this.supportingText ? block11.call(this, context, tags, suffix) : undefined }</div></div>`;}
9
+ function block1 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<${scopeTag("udex-tag-group", tags, suffix)} class="udex-tag-group" ?displayonly="${this.displayonly}" ?readonly="${this.readonly}" ?disabled="${this.disabled}" @focusout="${this.resetTagsTabIndexes}" tooltip-placement="${ifDefined(this.tooltipPlacement)}" @ui5-tag-icon-click="${ifDefined(this.handleRemoveTag)}" @ui5-tag-click="${ifDefined(this.handleTagClick)}" @ui5-show-more-tags="${ifDefined(this.handlerShowMoreItems)}" @ui5-tag-keydown="${ifDefined(this.handleKeyDownTag)}" ?tokenizer-expanded="${this.tokenizerExpanded}" _skip-more-button-focus>${ repeat(this.selectedItems, (item, index) => (item as typeof item & {_id?: any})._id || index, (item, index: number) => block2.call(this, context, tags, suffix, item, index)) }</${scopeTag("udex-tag-group", tags, suffix)}>` : html`<udex-tag-group class="udex-tag-group" ?displayonly="${this.displayonly}" ?readonly="${this.readonly}" ?disabled="${this.disabled}" @focusout="${this.resetTagsTabIndexes}" tooltip-placement="${ifDefined(this.tooltipPlacement)}" @ui5-tag-icon-click="${ifDefined(this.handleRemoveTag)}" @ui5-tag-click="${ifDefined(this.handleTagClick)}" @ui5-show-more-tags="${ifDefined(this.handlerShowMoreItems)}" @ui5-tag-keydown="${ifDefined(this.handleKeyDownTag)}" ?tokenizer-expanded="${this.tokenizerExpanded}" _skip-more-button-focus>${ repeat(this.selectedItems, (item, index) => (item as typeof item & {_id?: any})._id || index, (item, index: number) => block2.call(this, context, tags, suffix, item, index)) }</udex-tag-group>`;}
10
+ function block2 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined, item: any, index: number) { return html`${ !item.isGroup ? block3.call(this, context, tags, suffix, item, index) : undefined }`;}
11
+ function block3 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined, item: any, index: number) { return suffix ? html`<${scopeTag("udex-tag", tags, suffix)} text="${ifDefined(item.label)}" id="${ifDefined(item._id)}" icon="decline"></${scopeTag("udex-tag", tags, suffix)}>` : html`<udex-tag text="${ifDefined(item.label)}" id="${ifDefined(item._id)}" icon="decline"></udex-tag>`;}
12
+ function block4 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return html`<label for="search-input" class="${ifDefined(this.labelClass)}">${ifDefined(this.label)}${ this.required ? block5.call(this, context, tags, suffix) : undefined }</label><span class="hidden" id="${ifDefined(this._id)}-aria-describedby">${ifDefined(this.ariaDescribedbyText)}</span>`;}
13
+ function block5 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return html`*`;}
14
+ function block6 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return html`${ifDefined(this.countryFlag)}`;}
15
+ function block7 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return html`<div class="udex-text-field__text-holder"><span class="udex-text-field__single-label" aria-hidden="true">${unsafeHTML(this._selectedOption)}</span></div>`;}
16
+ function block8 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<button @click="${this.handleButtonClick}" ?disabled="${this.isDisabled}" aria-label="${ifDefined(this.accInfo.ariaLabel)}" class="udex-text-field__trigger" tabindex="-1"><${scopeTag("ui5-icon", tags, suffix)} mode="Decorative" name="navigation-down-arrow"></${scopeTag("ui5-icon", tags, suffix)}></button>` : html`<button @click="${this.handleButtonClick}" ?disabled="${this.isDisabled}" aria-label="${ifDefined(this.accInfo.ariaLabel)}" class="udex-text-field__trigger" tabindex="-1"><ui5-icon mode="Decorative" name="navigation-down-arrow"></ui5-icon></button>`;}
17
17
  function block9 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<div class="udex-truncatable-tag-content"><span class="udex-truncatable-tag-content__label">${ifDefined(this.truncatableTagLabel)}</span><${scopeTag("ui5-icon", tags, suffix)} @click="${this.handleRemoveTruncatableTag}" class="udex-truncatable-tag-content__icon" mode="Decorative" name="decline"></${scopeTag("ui5-icon", tags, suffix)}></div>` : html`<div class="udex-truncatable-tag-content"><span class="udex-truncatable-tag-content__label">${ifDefined(this.truncatableTagLabel)}</span><ui5-icon @click="${this.handleRemoveTruncatableTag}" class="udex-truncatable-tag-content__icon" mode="Decorative" name="decline"></ui5-icon></div>`;}
18
18
  function block10 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return html`${ifDefined(this.searchableList)}`;}
19
+ function block11 (this: SelectBox, context: UI5Element, tags: string[], suffix: string | undefined) { return suffix ? html`<${scopeTag("udex-status-message", tags, suffix)} ?disabled="${this.disabled}" supporting-text="${ifDefined(this.supportingText)}" value-state="${ifDefined(this.valueState)}"></${scopeTag("udex-status-message", tags, suffix)}>` : html`<udex-status-message ?disabled="${this.disabled}" supporting-text="${ifDefined(this.supportingText)}" value-state="${ifDefined(this.valueState)}"></udex-status-message>`;}
19
20
 
20
21
  function template(this: SelectBox) { return block0.call(this, this, (this.constructor as typeof UI5Element).tagsToScope, getCustomElementsScopingSuffix()); }
21
22
  export default template;