@ui5/webcomponents 1.9.1 → 1.9.2

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 (162) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/List.js +9 -5
  3. package/dist/ListItemBase.js +2 -2
  4. package/dist/TabContainer.js +28 -1
  5. package/dist/Table.js +3 -1
  6. package/dist/TextArea.js +15 -22
  7. package/dist/Tree.js +61 -45
  8. package/dist/TreeItem.js +34 -131
  9. package/dist/{TreeListItem.js → TreeItemBase.js} +143 -70
  10. package/dist/TreeItemCustom.js +102 -0
  11. package/dist/TreeList.js +43 -0
  12. package/dist/api.json +1 -1
  13. package/dist/assets/parameters-bundle.css.06e5f6af.js +1 -0
  14. package/dist/assets/parameters-bundle.css.1024d408.js +1 -0
  15. package/dist/assets/parameters-bundle.css.12ef5553.js +1 -0
  16. package/dist/assets/parameters-bundle.css.1f15a001.js +1 -0
  17. package/dist/assets/parameters-bundle.css.2c92b83f.js +1 -0
  18. package/dist/assets/parameters-bundle.css.2ff57cb9.js +1 -0
  19. package/dist/assets/parameters-bundle.css.37d45e6a.js +1 -0
  20. package/dist/assets/parameters-bundle.css.43cfec9f.js +1 -0
  21. package/dist/assets/parameters-bundle.css.50f83b44.js +1 -0
  22. package/dist/assets/parameters-bundle.css.6ac2a3ec.js +1 -0
  23. package/dist/assets/parameters-bundle.css.76ee50df.js +1 -0
  24. package/dist/assets/parameters-bundle.css.8156fdfe.js +1 -0
  25. package/dist/assets/parameters-bundle.css.828caf0e.js +1 -0
  26. package/dist/assets/parameters-bundle.css.89d7ea85.js +1 -0
  27. package/dist/assets/parameters-bundle.css.9ff9d4cd.js +1 -0
  28. package/dist/assets/parameters-bundle.css.a1f2b381.js +1 -0
  29. package/dist/assets/parameters-bundle.css.a9042929.js +1 -0
  30. package/dist/assets/parameters-bundle.css.abcd1057.js +1 -0
  31. package/dist/assets/parameters-bundle.css.b58e1801.js +1 -0
  32. package/dist/assets/parameters-bundle.css.c3acfe91.js +1 -0
  33. package/dist/assets/parameters-bundle.css.d4817fb4.js +1 -0
  34. package/dist/assets/parameters-bundle.css.dd8f8072.js +1 -0
  35. package/dist/assets/parameters-bundle.css.fe4c8069.js +1 -0
  36. package/dist/assets/parameters-bundle.css.feee54fa.js +1 -0
  37. package/dist/css/themes/TabContainer.css +1 -1
  38. package/dist/css/themes/TextArea.css +1 -1
  39. package/dist/css/themes/TreeItem.css +1 -0
  40. package/dist/css/themes/ValueStateMessage.css +1 -1
  41. package/dist/css/themes/sap_belize/parameters-bundle.css +1 -1
  42. package/dist/css/themes/sap_belize_hcb/parameters-bundle.css +1 -1
  43. package/dist/css/themes/sap_belize_hcw/parameters-bundle.css +1 -1
  44. package/dist/css/themes/sap_fiori_3/parameters-bundle.css +1 -1
  45. package/dist/css/themes/sap_fiori_3_dark/parameters-bundle.css +1 -1
  46. package/dist/css/themes/sap_fiori_3_hcb/parameters-bundle.css +1 -1
  47. package/dist/css/themes/sap_fiori_3_hcw/parameters-bundle.css +1 -1
  48. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -1
  49. package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -1
  50. package/dist/css/themes/sap_horizon_exp/parameters-bundle.css +1 -1
  51. package/dist/css/themes/sap_horizon_hcb/parameters-bundle.css +1 -1
  52. package/dist/css/themes/sap_horizon_hcw/parameters-bundle.css +1 -1
  53. package/dist/generated/assets/themes/sap_belize/parameters-bundle.css.json +1 -1
  54. package/dist/generated/assets/themes/sap_belize_hcb/parameters-bundle.css.json +1 -1
  55. package/dist/generated/assets/themes/sap_belize_hcw/parameters-bundle.css.json +1 -1
  56. package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
  57. package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
  58. package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -1
  59. package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -1
  60. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  61. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  62. package/dist/generated/assets/themes/sap_horizon_exp/parameters-bundle.css.json +1 -1
  63. package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
  64. package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
  65. package/dist/generated/templates/CustomListItemTemplate.lit.js +1 -1
  66. package/dist/generated/templates/ListItemTemplate.lit.js +1 -1
  67. package/dist/generated/templates/StandardListItemTemplate.lit.js +1 -1
  68. package/dist/generated/templates/SuggestionListItemTemplate.lit.js +1 -1
  69. package/dist/generated/templates/TableRowTemplate.lit.js +2 -2
  70. package/dist/generated/templates/TableTemplate.lit.js +1 -1
  71. package/dist/generated/templates/TextAreaTemplate.lit.js +2 -2
  72. package/dist/generated/templates/TreeItemBaseTemplate.lit.js +24 -0
  73. package/dist/generated/templates/TreeItemCustomTemplate.lit.js +24 -0
  74. package/dist/generated/templates/{TreeListItemTemplate.lit.js → TreeItemTemplate.lit.js} +3 -2
  75. package/dist/generated/templates/TreeTemplate.lit.js +1 -2
  76. package/dist/generated/themes/TabContainer.css.js +1 -1
  77. package/dist/generated/themes/TextArea.css.js +1 -1
  78. package/dist/generated/themes/TreeItem.css.js +8 -0
  79. package/dist/generated/themes/ValueStateMessage.css.js +1 -1
  80. package/dist/generated/themes/sap_belize/parameters-bundle.css.js +1 -1
  81. package/dist/generated/themes/sap_belize_hcb/parameters-bundle.css.js +1 -1
  82. package/dist/generated/themes/sap_belize_hcw/parameters-bundle.css.js +1 -1
  83. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  84. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  85. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -1
  86. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -1
  87. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  88. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
  89. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js +1 -1
  90. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -1
  91. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -1
  92. package/dist/types/TabContainerBackgroundDesign.js +48 -0
  93. package/package.json +6 -6
  94. package/src/List.js +9 -5
  95. package/src/ListItem.hbs +5 -0
  96. package/src/ListItemBase.js +2 -2
  97. package/src/TabContainer.js +28 -1
  98. package/src/Table.hbs +1 -1
  99. package/src/Table.js +3 -1
  100. package/src/TableRow.hbs +2 -2
  101. package/src/TextArea.hbs +29 -28
  102. package/src/TextArea.js +15 -22
  103. package/src/Tree.hbs +8 -33
  104. package/src/Tree.js +61 -45
  105. package/src/TreeItem.hbs +13 -0
  106. package/src/TreeItem.js +34 -131
  107. package/src/{TreeListItem.hbs → TreeItemBase.hbs} +17 -10
  108. package/src/{TreeListItem.js → TreeItemBase.js} +143 -70
  109. package/src/TreeItemCustom.hbs +7 -0
  110. package/src/TreeItemCustom.js +102 -0
  111. package/src/TreeList.js +43 -0
  112. package/src/themes/TabContainer.css +19 -3
  113. package/src/themes/TextArea.css +236 -140
  114. package/src/themes/{TreeListItem.css → TreeItem.css} +49 -2
  115. package/src/themes/ValueStateMessage.css +1 -0
  116. package/src/themes/base/TabContainer-parameters.css +4 -0
  117. package/src/themes/base/TextArea-parameters.css +35 -17
  118. package/src/themes/base/ValueStateMessage-parameters.css +2 -1
  119. package/src/themes/base/sizes-parameters.css +8 -2
  120. package/src/themes/sap_belize/TabContainer-parameters.css +4 -0
  121. package/src/themes/sap_belize/TextArea-parameters.css +15 -0
  122. package/src/themes/sap_belize/parameters-bundle.css +2 -2
  123. package/src/themes/sap_belize/sizes-parameters.css +2 -0
  124. package/src/themes/sap_belize_hcb/TextArea-parameters.css +22 -4
  125. package/src/themes/sap_belize_hcw/TextArea-parameters.css +22 -4
  126. package/src/themes/sap_fiori_3_hcb/TextArea-parameters.css +18 -8
  127. package/src/themes/sap_fiori_3_hcw/TextArea-parameters.css +18 -8
  128. package/src/themes/sap_horizon/TextArea-parameters.css +31 -12
  129. package/src/themes/sap_horizon/ValueStateMessage-parameters.css +1 -0
  130. package/src/themes/sap_horizon/sizes-parameters.css +4 -0
  131. package/src/themes/sap_horizon_dark/TextArea-parameters.css +31 -12
  132. package/src/themes/sap_horizon_dark/ValueStateMessage-parameters.css +1 -0
  133. package/src/themes/sap_horizon_dark/sizes-parameters.css +6 -0
  134. package/src/themes/sap_horizon_hcb/TextArea-parameters.css +24 -10
  135. package/src/themes/sap_horizon_hcw/TextArea-parameters.css +25 -11
  136. package/src/types/TabContainerBackgroundDesign.js +48 -0
  137. package/dist/assets/parameters-bundle.css.04aa71c9.js +0 -1
  138. package/dist/assets/parameters-bundle.css.0e0c347c.js +0 -1
  139. package/dist/assets/parameters-bundle.css.13aed676.js +0 -1
  140. package/dist/assets/parameters-bundle.css.157592af.js +0 -1
  141. package/dist/assets/parameters-bundle.css.19703c05.js +0 -1
  142. package/dist/assets/parameters-bundle.css.25017933.js +0 -1
  143. package/dist/assets/parameters-bundle.css.39c4c6e3.js +0 -1
  144. package/dist/assets/parameters-bundle.css.5550ceb2.js +0 -1
  145. package/dist/assets/parameters-bundle.css.5abf669c.js +0 -1
  146. package/dist/assets/parameters-bundle.css.60956972.js +0 -1
  147. package/dist/assets/parameters-bundle.css.61a5fde8.js +0 -1
  148. package/dist/assets/parameters-bundle.css.a0a54b12.js +0 -1
  149. package/dist/assets/parameters-bundle.css.a9e84ff6.js +0 -1
  150. package/dist/assets/parameters-bundle.css.adc7c452.js +0 -1
  151. package/dist/assets/parameters-bundle.css.b0b8ad26.js +0 -1
  152. package/dist/assets/parameters-bundle.css.b6916ba6.js +0 -1
  153. package/dist/assets/parameters-bundle.css.b9f623cd.js +0 -1
  154. package/dist/assets/parameters-bundle.css.ba38c500.js +0 -1
  155. package/dist/assets/parameters-bundle.css.c64ba63b.js +0 -1
  156. package/dist/assets/parameters-bundle.css.cac9f3de.js +0 -1
  157. package/dist/assets/parameters-bundle.css.d5d27adb.js +0 -1
  158. package/dist/assets/parameters-bundle.css.ec7f0d6e.js +0 -1
  159. package/dist/assets/parameters-bundle.css.f280686f.js +0 -1
  160. package/dist/assets/parameters-bundle.css.fbd8d2ab.js +0 -1
  161. package/dist/css/themes/TreeListItem.css +0 -1
  162. package/dist/generated/themes/TreeListItem.css.js +0 -8
package/src/List.js CHANGED
@@ -535,7 +535,7 @@ class List extends UI5Element {
535
535
  }
536
536
 
537
537
  get hasData() {
538
- return this.getSlottedNodes("items").length !== 0;
538
+ return this.getItems().length !== 0;
539
539
  }
540
540
 
541
541
  get showNoDataText() {
@@ -644,7 +644,7 @@ class List extends UI5Element {
644
644
  }
645
645
 
646
646
  prepareListItems() {
647
- const slottedItems = this.getSlottedNodes("items");
647
+ const slottedItems = this.getItems();
648
648
 
649
649
  slottedItems.forEach((item, key) => {
650
650
  const isLastChild = key === slottedItems.length - 1;
@@ -746,11 +746,15 @@ class List extends UI5Element {
746
746
  }
747
747
 
748
748
  getSelectedItems() {
749
- return this.getSlottedNodes("items").filter(item => item.selected);
749
+ return this.getItems().filter(item => item.selected);
750
750
  }
751
751
 
752
752
  getEnabledItems() {
753
- return this.getSlottedNodes("items").filter(item => !item.disabled);
753
+ return this.getItems().filter(item => !item.disabled);
754
+ }
755
+
756
+ getItems() {
757
+ return this.getSlottedNodes("items");
754
758
  }
755
759
 
756
760
  _onkeydown(event) {
@@ -1053,7 +1057,7 @@ class List extends UI5Element {
1053
1057
  }
1054
1058
 
1055
1059
  getFirstItem(filter) {
1056
- const slottedItems = this.getSlottedNodes("items");
1060
+ const slottedItems = this.getItems();
1057
1061
  let firstItem = null;
1058
1062
 
1059
1063
  if (!filter) {
package/src/ListItem.hbs CHANGED
@@ -1,5 +1,6 @@
1
1
  <li
2
2
  part="native-li"
3
+ data-sap-focus-ref
3
4
  tabindex="{{tabIndex}}"
4
5
  class="{{classes.main}}"
5
6
  @focusin="{{_onfocusin}}"
@@ -21,6 +22,9 @@
21
22
  aria-describedby="{{_id}}-invisibleText-describedby"
22
23
  aria-labelledby="{{_accessibleNameRef}}"
23
24
  aria-disabled="{{ariaDisabled}}"
25
+ aria-selected="{{_accInfo.ariaSelected}}"
26
+ aria-checked="{{_accInfo.ariaChecked}}"
27
+ aria-owns="{{_accInfo.ariaOwns}}"
24
28
  >
25
29
  {{> listItemPreContent}}
26
30
 
@@ -53,6 +57,7 @@
53
57
  <span id="{{_id}}-invisibleText-describedby" class="ui5-hidden-text">{{_accInfo.ariaSelectedText}}</span>
54
58
  </li>
55
59
 
60
+
56
61
  {{#*inline "listItemPreContent"}}{{/inline}}
57
62
  {{#*inline "listItemContent"}}{{/inline}}
58
63
  {{#*inline "imageBegin"}}{{/inline}}
@@ -138,7 +138,7 @@ class ListItemBase extends UI5Element {
138
138
  * [TAB] is performed onto the last tabbale content item.
139
139
  */
140
140
  shouldForwardTabAfter(target) {
141
- const aContent = getTabbableElements(this.getDomRef());
141
+ const aContent = getTabbableElements(this.getFocusDomRef());
142
142
 
143
143
  if (target.getFocusDomRef) {
144
144
  target = target.getFocusDomRef();
@@ -151,7 +151,7 @@ class ListItemBase extends UI5Element {
151
151
  * Determines if the current list item is target of [SHIFT+TAB].
152
152
  */
153
153
  shouldForwardTabBefore(target) {
154
- return this.getDomRef() === target;
154
+ return this.getFocusDomRef() === target;
155
155
  }
156
156
 
157
157
  get classes() {
@@ -32,6 +32,7 @@ import List from "./List.js";
32
32
  import ResponsivePopover from "./ResponsivePopover.js";
33
33
  import TabContainerTabsPlacement from "./types/TabContainerTabsPlacement.js";
34
34
  import SemanticColor from "./types/SemanticColor.js";
35
+ import TabContainerBackgroundDesign from "./types/TabContainerBackgroundDesign.js";
35
36
 
36
37
  // Templates
37
38
  import TabContainerTemplate from "./generated/templates/TabContainerTemplate.lit.js";
@@ -191,7 +192,7 @@ const metadata = {
191
192
  },
192
193
 
193
194
  /**
194
- * Defines the overflow mode of the tab strip. If you have a large number of tabs, only the tabs that can fit on screen will be visible.
195
+ * Defines the overflow mode of the header (the tab strip). If you have a large number of tabs, only the tabs that can fit on screen will be visible.
195
196
  * All other tabs that can 't fit on the screen are available in an overflow tab "More".
196
197
  *
197
198
  * <br><br>
@@ -226,6 +227,32 @@ const metadata = {
226
227
  type: String,
227
228
  },
228
229
 
230
+ /**
231
+ * Sets the background color of the Tab Container's header as <code>Solid</code>, <code>Transparent</code>, or <code>Translucent</code>.
232
+ *
233
+ * @type {sap.ui.webcomponents.main.types.TabContainerBackgroundDesign.prototype}
234
+ * @defaultvalue "Solid"
235
+ * @since 1.10.0
236
+ * @public
237
+ */
238
+ headerBackgroundDesign: {
239
+ type: TabContainerBackgroundDesign,
240
+ defaultValue: TabContainerBackgroundDesign.Solid,
241
+ },
242
+
243
+ /**
244
+ * Sets the background color of the Tab Container's content as <code>Solid</code>, <code>Transparent</code>, or <code>Translucent</code>.
245
+ *
246
+ * @type {sap.ui.webcomponents.main.types.TabContainerBackgroundDesign.prototype}
247
+ * @defaultvalue "Solid"
248
+ * @since 1.10.0
249
+ * @public
250
+ */
251
+ contentBackgroundDesign: {
252
+ type: TabContainerBackgroundDesign,
253
+ defaultValue: TabContainerBackgroundDesign.Solid,
254
+ },
255
+
229
256
  _selectedTab: {
230
257
  type: Object,
231
258
  },
package/src/Table.hbs CHANGED
@@ -33,7 +33,7 @@
33
33
  {{#each visibleColumns}}
34
34
  <slot name="{{this._individualSlot}}"></slot>
35
35
  {{/each}}
36
- <th class="ui5-table-header-row-navigated"></th>
36
+ <th class="ui5-table-header-row-navigated" aria-hidden="true"></th>
37
37
  </tr>
38
38
  </thead>
39
39
 
package/src/Table.js CHANGED
@@ -1068,8 +1068,10 @@ class Table extends UI5Element {
1068
1068
  this.columns[visibleColumnsIndexes[visibleColumnsIndexes.length - 1]].last = true;
1069
1069
  }
1070
1070
 
1071
+ const hiddenColumnsChange = (this._hiddenColumns.length !== hiddenColumns.length) || this._hiddenColumns.some((column, index) => column !== hiddenColumns[index]);
1072
+
1071
1073
  // invalidate only if hidden columns count has changed
1072
- if (this._hiddenColumns.length !== hiddenColumns.length) {
1074
+ if (hiddenColumnsChange) {
1073
1075
  this._hiddenColumns = hiddenColumns;
1074
1076
  if (hiddenColumns.length) {
1075
1077
  this.fireEvent("popin-change", {
package/src/TableRow.hbs CHANGED
@@ -44,7 +44,7 @@
44
44
  {{/each}}
45
45
  {{/if}}
46
46
 
47
- <td class="ui5-table-row-navigated">
47
+ <td class="ui5-table-row-navigated" aria-hidden="true">
48
48
  <div class="ui5-table-div-navigated"></div>
49
49
  </td>
50
50
  </tr>
@@ -64,7 +64,7 @@
64
64
  </div>
65
65
  </td>
66
66
 
67
- <td class="ui5-table-row-navigated">
67
+ <td class="ui5-table-row-navigated" aria-hidden="true">
68
68
  <div class="ui5-table-div-navigated"></div>
69
69
  </td>
70
70
  </tr>
package/src/TextArea.hbs CHANGED
@@ -1,38 +1,39 @@
1
1
  <div
2
2
  class="{{classes.root}}"
3
- style="{{styles.main}}"
4
3
  @focusin="{{_onfocusin}}"
5
4
  @focusout="{{_onfocusout}}"
6
5
  >
7
- {{#if growing}}
8
- <div id="{{_id}}-mirror" style="{{styles.mirror}}" class="ui5-textarea-mirror" aria-hidden="true">
9
- {{#each _mirrorText}}
10
- {{this.text}}
11
6
 
12
- <br />
13
- {{/each}}
14
- </div>
15
- {{/if}}
16
7
 
17
- <textarea
18
- id="{{_id}}-inner"
19
- class="ui5-textarea-inner"
20
- placeholder="{{placeholder}}"
21
- ?disabled="{{disabled}}"
22
- ?readonly="{{readonly}}"
23
- aria-label="{{ariaLabelText}}"
24
- aria-describedby="{{ariaDescribedBy}}"
25
- aria-invalid="{{ariaInvalid}}"
26
- aria-required="{{required}}"
27
- maxlength="{{_exceededTextProps.calcedMaxLength}}"
28
- .value="{{value}}"
29
- @input="{{_oninput}}"
30
- @change="{{_onchange}}"
31
- @keyup="{{_onkeyup}}"
32
- @keydown="{{_onkeydown}}"
33
- data-sap-focus-ref
34
- part="textarea">
35
- </textarea>
8
+ <div class="ui5-textarea-wrapper">
9
+ {{#if growing}}
10
+ <div id="{{_id}}-mirror" class="ui5-textarea-mirror" aria-hidden="true" >
11
+ {{#each _mirrorText}}
12
+ {{this.text}}
13
+ <br />
14
+ {{/each}}
15
+ </div>
16
+ {{/if}}
17
+ <textarea
18
+ id="{{_id}}-inner"
19
+ class="ui5-textarea-inner"
20
+ placeholder="{{placeholder}}"
21
+ ?disabled="{{disabled}}"
22
+ ?readonly="{{readonly}}"
23
+ aria-label="{{ariaLabelText}}"
24
+ aria-describedby="{{ariaDescribedBy}}"
25
+ aria-invalid="{{ariaInvalid}}"
26
+ aria-required="{{required}}"
27
+ maxlength="{{_exceededTextProps.calcedMaxLength}}"
28
+ .value="{{value}}"
29
+ @input="{{_oninput}}"
30
+ @change="{{_onchange}}"
31
+ @keyup="{{_onkeyup}}"
32
+ @keydown="{{_onkeydown}}"
33
+ data-sap-focus-ref
34
+ part="textarea">
35
+ </textarea>
36
+ </div>
36
37
 
37
38
  {{> afterTextarea}}
38
39
 
package/src/TextArea.js CHANGED
@@ -181,7 +181,6 @@ const metadata = {
181
181
  /**
182
182
  * Enables the component to automatically grow and shrink dynamically with its content.
183
183
  * <br><br>
184
- * <b>Note:</b> If set to <code>true</code>, the CSS <code>height</code> property is ignored.
185
184
  * @type {boolean}
186
185
  * @defaultvalue false
187
186
  * @public
@@ -411,12 +410,7 @@ class TextArea extends UI5Element {
411
410
  this._mirrorText = this._tokenizeText(this.value);
412
411
 
413
412
  this.exceeding = this._exceededTextProps.leftCharactersCount < 0;
414
-
415
- if (this.growingMaxLines) {
416
- // this should be complex calc between line height and paddings - TODO: make it stable
417
- this._maxHeight = `${this.growingMaxLines * 1.4 * 14 + 9}px`;
418
- }
419
-
413
+ this._setCSSParams();
420
414
  const FormSupport = getFeature("FormSupport");
421
415
  if (FormSupport) {
422
416
  FormSupport.syncNativeHiddenInput(this);
@@ -426,6 +420,14 @@ class TextArea extends UI5Element {
426
420
  }
427
421
 
428
422
  onAfterRendering() {
423
+ const nativeTextArea = this.getInputDomRef();
424
+
425
+ if (this.rows === 1) {
426
+ nativeTextArea.setAttribute("rows", 1);
427
+ } else {
428
+ nativeTextArea.removeAttribute("rows");
429
+ }
430
+
429
431
  this.toggleValueStateMessage(this.openValueStateMsgPopover);
430
432
  this._firstRendering = false;
431
433
  }
@@ -490,6 +492,11 @@ class TextArea extends UI5Element {
490
492
  }
491
493
  }
492
494
 
495
+ _setCSSParams() {
496
+ this.style.setProperty("--_textarea_rows", this.rows || "2");
497
+ this.style.setProperty("--_textarea_growing_max_lines", this.growingMaxLines);
498
+ }
499
+
493
500
  toggleValueStateMessage(toggle) {
494
501
  if (toggle) {
495
502
  this.openPopover();
@@ -500,7 +507,7 @@ class TextArea extends UI5Element {
500
507
 
501
508
  async openPopover() {
502
509
  this.popover = await this._getPopover();
503
- this.popover && this.popover.showAt(this.shadowRoot.querySelector(".ui5-textarea-inner"));
510
+ this.popover && this.popover.showAt(this.shadowRoot.querySelector(".ui5-textarea-root .ui5-textarea-wrapper"));
504
511
  }
505
512
 
506
513
  async closePopover() {
@@ -575,21 +582,7 @@ class TextArea extends UI5Element {
575
582
  }
576
583
 
577
584
  get styles() {
578
- const lineHeight = 1.4 * 16;
579
- const mainHeight = (this.rows * lineHeight) + (this.showExceededText ? 32 : 0);
580
-
581
585
  return {
582
- mirror: {
583
- "max-height": this._maxHeight,
584
- },
585
- main: {
586
- width: "100%",
587
- height: (this.rows && !this.growing) ? `${mainHeight}px` : "100%",
588
- },
589
- focusDiv: {
590
- "height": (this.showExceededText ? "calc(100% - 26px)" : "100%"),
591
- "max-height": (this._maxHeight),
592
- },
593
586
  valueStateMsgPopover: {
594
587
  "max-width": `${this._width}px`,
595
588
  },
package/src/Tree.hbs CHANGED
@@ -1,4 +1,4 @@
1
- <ui5-list
1
+ <ui5-tree-list
2
2
  .mode="{{mode}}"
3
3
  .headerText="{{headerText}}"
4
4
  .footerText="{{footerText}}"
@@ -8,39 +8,14 @@
8
8
  @ui5-item-click="{{_onListItemClick}}"
9
9
  @ui5-item-delete="{{_onListItemDelete}}"
10
10
  @ui5-selection-change="{{_onListSelectionChange}}"
11
+ @ui5-toggle="{{_onListItemToggle}}"
12
+ @ui5-step-in="{{_onListItemStepIn}}"
13
+ @ui5-step-out="{{_onListItemStepOut}}"
14
+ @mouseover="{{_onListItemMouseOver}}"
15
+ @mouseout="{{_onListItemMouseOut}}"
11
16
  class="ui5-tree-root"
12
17
  >
13
18
  <slot name="header" slot="header"></slot>
14
- {{#each _listItems}}
15
- <ui5-li-tree
16
- type="Active"
17
- level="{{this.level}}"
18
- icon="{{this.treeItem.icon}}"
19
- ?indeterminate="{{this.treeItem.indeterminate}}"
20
- additional-text="{{this.treeItem.additionalText}}"
21
- additional-text-state="{{this.treeItem.additionalTextState}}"
22
- title="{{this.treeItem.title}}"
23
- accessible-name="{{this.treeItem.accessibleName}}"
24
- ?_toggle-button-end="{{ ../_toggleButtonEnd}}"
25
- ?_minimal="{{../_minimal}}"
26
- .treeItem="{{this.treeItem}}"
27
- .expanded="{{this.treeItem.expanded}}"
28
- .selected="{{this.treeItem.selected}}"
29
- .showToggleButton="{{this.treeItem.requiresToggleButton}}"
30
- ._posinset="{{this.posinset}}"
31
- ._setsize="{{this.size}}"
32
- @ui5-toggle="{{../_onListItemToggle}}"
33
- @ui5-step-in="{{../_onListItemStepIn}}"
34
- @ui5-step-out="{{../_onListItemStepOut}}"
35
- @mouseover="{{../_onListItemMouseOver}}"
36
- @mouseout="{{../_onListItemMouseOut}}"
37
- exportparts="icon, toggle-icon"
38
- >
39
- {{> treeListItemContent}}
40
- </ui5-li-tree>
41
- {{/each}}
42
- </ui5-list>
43
19
 
44
- {{#*inline "treeListItemContent"}}
45
- {{this.treeItem.text}}
46
- {{/inline}}
20
+ <slot></slot>
21
+ </ui5-tree-list>
package/src/Tree.js CHANGED
@@ -2,8 +2,8 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
3
3
  import { getEffectiveAriaLabelText } from "@ui5/webcomponents-base/dist/util/AriaLabelHelper.js";
4
4
  import TreeItem from "./TreeItem.js";
5
- import List from "./List.js";
6
- import TreeListItem from "./TreeListItem.js";
5
+ import TreeItemCustom from "./TreeItemCustom.js";
6
+ import TreeList from "./TreeList.js";
7
7
  import ListMode from "./types/ListMode.js";
8
8
 
9
9
  // Template
@@ -332,15 +332,14 @@ class Tree extends UI5Element {
332
332
 
333
333
  static get dependencies() {
334
334
  return [
335
- List,
336
- TreeListItem,
335
+ TreeList,
337
336
  TreeItem,
337
+ TreeItemCustom,
338
338
  ];
339
339
  }
340
340
 
341
341
  onBeforeRendering() {
342
- this._listItems = [];
343
- buildTree(this, 1, this._listItems);
342
+ this._prepareTreeItems();
344
343
  }
345
344
 
346
345
  get list() {
@@ -356,28 +355,25 @@ class Tree extends UI5Element {
356
355
  }
357
356
 
358
357
  _onListItemStepIn(event) {
359
- const listItem = event.detail.item;
360
- const treeItem = listItem.treeItem;
358
+ const treeItem = event.detail.item;
361
359
  if (treeItem.items.length > 0) {
362
360
  const firstChild = treeItem.items[0];
363
- const firstChildListItem = this.list.getSlottedNodes("items").find(li => li.treeItem === firstChild);
361
+ const firstChildListItem = this._getListItemForTreeItem(firstChild);
364
362
  firstChildListItem && this.list.focusItem(firstChildListItem);
365
363
  }
366
364
  }
367
365
 
368
366
  _onListItemStepOut(event) {
369
- const listItem = event.detail.item;
370
- const treeItem = listItem.treeItem;
367
+ const treeItem = event.detail.item;
371
368
  if (treeItem.parentElement !== this) {
372
369
  const parent = treeItem.parentElement;
373
- const parentListItem = this.list.getSlottedNodes("items").find(li => li.treeItem === parent);
370
+ const parentListItem = this._getListItemForTreeItem(parent);
374
371
  parentListItem && this.list.focusItem(parentListItem);
375
372
  }
376
373
  }
377
374
 
378
375
  _onListItemToggle(event) {
379
- const listItem = event.detail.item;
380
- const treeItem = listItem.treeItem;
376
+ const treeItem = event.detail.item;
381
377
  const defaultPrevented = !this.fireEvent("item-toggle", { item: treeItem }, true);
382
378
  if (!defaultPrevented) {
383
379
  treeItem.toggle();
@@ -385,8 +381,7 @@ class Tree extends UI5Element {
385
381
  }
386
382
 
387
383
  _onListItemClick(event) {
388
- const listItem = event.detail.item;
389
- const treeItem = listItem.treeItem;
384
+ const treeItem = event.detail.item;
390
385
 
391
386
  if (!this.fireEvent("item-click", { item: treeItem }, true)) {
392
387
  event.preventDefault();
@@ -394,27 +389,30 @@ class Tree extends UI5Element {
394
389
  }
395
390
 
396
391
  _onListItemDelete(event) {
397
- const listItem = event.detail.item;
398
- const treeItem = listItem.treeItem;
392
+ const treeItem = event.detail.item;
399
393
  this.fireEvent("item-delete", { item: treeItem });
400
394
  }
401
395
 
402
396
  _onListItemMouseOver(event) {
403
- const treeItem = event.target.treeItem;
397
+ const target = event.target;
404
398
 
405
- this.fireEvent("item-mouseover", { item: treeItem });
399
+ if (target.isTreeItem) {
400
+ this.fireEvent("item-mouseover", { item: target });
401
+ }
406
402
  }
407
403
 
408
404
  _onListItemMouseOut(event) {
409
- const treeItem = event.target.treeItem;
405
+ const target = event.target;
410
406
 
411
- this.fireEvent("item-mouseout", { item: treeItem });
407
+ if (target.isTreeItem) {
408
+ this.fireEvent("item-mouseout", { item: target });
409
+ }
412
410
  }
413
411
 
414
412
  _onListSelectionChange(event) {
415
- const previouslySelectedItems = event.detail.previouslySelectedItems.map(item => item.treeItem);
416
- const selectedItems = event.detail.selectedItems.map(item => item.treeItem);
417
- const targetItem = event.detail.targetItem.treeItem;
413
+ const previouslySelectedItems = event.detail.previouslySelectedItems;
414
+ const selectedItems = event.detail.selectedItems;
415
+ const targetItem = event.detail.targetItem;
418
416
 
419
417
  previouslySelectedItems.forEach(item => {
420
418
  item.selected = false;
@@ -430,6 +428,21 @@ class Tree extends UI5Element {
430
428
  });
431
429
  }
432
430
 
431
+ _prepareTreeItems() {
432
+ // set level to tree items
433
+ this.walk((item, level, index) => {
434
+ const parent = item.parentNode;
435
+ const ariaSetSize = (parent && parent.children.length) || this.items.length;
436
+
437
+ item.setAttribute("level", level);
438
+
439
+ item._toggleButtonEnd = this._toggleButtonEnd;
440
+ item._minimal = this._minimal;
441
+ item._setsize = ariaSetSize;
442
+ item._posinset = index + 1;
443
+ });
444
+ }
445
+
433
446
  /**
434
447
  * Returns the corresponding list item for a given tree item
435
448
  *
@@ -437,14 +450,33 @@ class Tree extends UI5Element {
437
450
  * @protected
438
451
  */
439
452
  _getListItemForTreeItem(item) {
440
- return this.list.items.find(listItem => listItem.treeItem === item);
453
+ return this.getItems().find(listItem => listItem === item);
454
+ }
455
+
456
+ /**
457
+ * Returns the a flat array of all tree items
458
+ * @protected
459
+ * @returns {Array}
460
+ */
461
+ getItems() {
462
+ return this.list.getItems();
463
+ }
464
+
465
+ /**
466
+ * Focus a tree item by its index in the flat array of all tree items
467
+ * @protected
468
+ * @param index
469
+ */
470
+ focusItemByIndex(index) {
471
+ const item = this.getItems()[index];
472
+ item && this.list.focusItem(item);
441
473
  }
442
474
 
443
475
  /**
444
476
  * Perform Depth-First-Search walk on the tree and run a callback on each node
445
477
  *
446
478
  * @public
447
- * @param {function} callback function to execute on each node of the tree with 2 arguments: the node and the level
479
+ * @param {function} callback function to execute on each node of the tree with 3 arguments: the node, the level and the index
448
480
  */
449
481
  walk(callback) {
450
482
  walkTree(this, 1, callback);
@@ -452,30 +484,14 @@ class Tree extends UI5Element {
452
484
  }
453
485
 
454
486
  const walkTree = (el, level, callback) => {
455
- el.items.forEach(item => {
456
- callback(item, level);
487
+ el.items.forEach((item, index) => {
488
+ callback(item, level, index);
457
489
  if (item.items.length > 0) {
458
490
  walkTree(item, level + 1, callback);
459
491
  }
460
492
  });
461
493
  };
462
494
 
463
- const buildTree = (el, level, result) => {
464
- el.items.forEach((item, index) => {
465
- const listItem = {
466
- treeItem: item,
467
- size: el.items.length,
468
- posinset: index + 1,
469
- level,
470
- };
471
-
472
- result.push(listItem);
473
- if (item.expanded && item.items.length > 0) {
474
- buildTree(item, level + 1, result);
475
- }
476
- });
477
- };
478
-
479
495
  Tree.define();
480
496
 
481
497
  export default Tree;
@@ -0,0 +1,13 @@
1
+ {{>include "./TreeItemBase.hbs"}}
2
+
3
+ {{#*inline "listItemContent"}}
4
+ <div class="ui5-li-tree-text-wrapper">
5
+ {{#if _showTitle}}
6
+ <div part="title" class="ui5-li-title">{{text}}</div>
7
+ {{/if}}
8
+
9
+ {{#if additionalText}}
10
+ <span part="additional-text" class="ui5-li-additional-text">{{additionalText}}</span>
11
+ {{/if}}
12
+ </div>
13
+ {{/inline}}