@openui5/sap.ui.unified 1.150.0 → 1.151.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 (64) hide show
  1. package/THIRDPARTY.txt +6 -6
  2. package/package.json +2 -2
  3. package/src/sap/ui/unified/.library +1 -1
  4. package/src/sap/ui/unified/Calendar.js +11 -1
  5. package/src/sap/ui/unified/CalendarAppointment.js +1 -1
  6. package/src/sap/ui/unified/CalendarDateInterval.js +1 -1
  7. package/src/sap/ui/unified/CalendarLegend.js +1 -1
  8. package/src/sap/ui/unified/CalendarLegendItem.js +1 -1
  9. package/src/sap/ui/unified/CalendarMonthInterval.js +1 -1
  10. package/src/sap/ui/unified/CalendarOneMonthInterval.js +1 -1
  11. package/src/sap/ui/unified/CalendarRow.js +1 -1
  12. package/src/sap/ui/unified/CalendarTimeInterval.js +1 -1
  13. package/src/sap/ui/unified/CalendarWeekInterval.js +1 -1
  14. package/src/sap/ui/unified/ColorPicker.js +46 -1
  15. package/src/sap/ui/unified/ColorPickerPopover.js +1 -1
  16. package/src/sap/ui/unified/ColorPickerRenderer.js +49 -15
  17. package/src/sap/ui/unified/ContentSwitcher.js +1 -1
  18. package/src/sap/ui/unified/Currency.js +1 -1
  19. package/src/sap/ui/unified/CurrencyRenderer.js +1 -1
  20. package/src/sap/ui/unified/DateRange.js +1 -1
  21. package/src/sap/ui/unified/DateTypeRange.js +1 -1
  22. package/src/sap/ui/unified/FileUploader.js +1 -1
  23. package/src/sap/ui/unified/FileUploaderParameter.js +1 -1
  24. package/src/sap/ui/unified/FileUploaderXHRSettings.js +1 -1
  25. package/src/sap/ui/unified/Menu.js +1 -1
  26. package/src/sap/ui/unified/MenuItem.js +2 -2
  27. package/src/sap/ui/unified/MenuItemBase.js +1 -1
  28. package/src/sap/ui/unified/MenuItemGroup.js +1 -1
  29. package/src/sap/ui/unified/MenuRenderer.js +4 -2
  30. package/src/sap/ui/unified/MenuTextFieldItem.js +7 -3
  31. package/src/sap/ui/unified/MonthlyRecurrenceRule.js +1 -1
  32. package/src/sap/ui/unified/NonWorkingPeriod.js +1 -1
  33. package/src/sap/ui/unified/RecurrenceRule.js +1 -1
  34. package/src/sap/ui/unified/RecurringCalendarAppointment.js +1 -1
  35. package/src/sap/ui/unified/RecurringNonWorkingPeriod.js +1 -1
  36. package/src/sap/ui/unified/Shell.js +1 -1
  37. package/src/sap/ui/unified/ShellHeadItem.js +2 -30
  38. package/src/sap/ui/unified/ShellHeadUserItem.js +3 -31
  39. package/src/sap/ui/unified/ShellHeader.js +29 -13
  40. package/src/sap/ui/unified/ShellLayout.js +1 -1
  41. package/src/sap/ui/unified/ShellOverlay.js +1 -1
  42. package/src/sap/ui/unified/SplitContainer.js +1 -1
  43. package/src/sap/ui/unified/TimeRange.js +1 -1
  44. package/src/sap/ui/unified/WeeklyRecurrenceRule.js +1 -1
  45. package/src/sap/ui/unified/YearlyRecurrenceRule.js +1 -1
  46. package/src/sap/ui/unified/calendar/DatesRow.js +1 -1
  47. package/src/sap/ui/unified/calendar/Header.js +1 -1
  48. package/src/sap/ui/unified/calendar/HeaderRenderer.js +1 -0
  49. package/src/sap/ui/unified/calendar/IndexPicker.js +1 -1
  50. package/src/sap/ui/unified/calendar/Month.js +59 -1
  51. package/src/sap/ui/unified/calendar/MonthPicker.js +1 -1
  52. package/src/sap/ui/unified/calendar/MonthRenderer.js +23 -10
  53. package/src/sap/ui/unified/calendar/MonthsRow.js +1 -1
  54. package/src/sap/ui/unified/calendar/OneMonthDatesRow.js +1 -1
  55. package/src/sap/ui/unified/calendar/TimesRow.js +1 -1
  56. package/src/sap/ui/unified/calendar/WeeksRow.js +1 -1
  57. package/src/sap/ui/unified/calendar/YearPicker.js +1 -1
  58. package/src/sap/ui/unified/calendar/YearRangePicker.js +1 -1
  59. package/src/sap/ui/unified/library.js +2 -2
  60. package/src/sap/ui/unified/themes/base/Calendar.less +39 -6
  61. package/src/sap/ui/unified/themes/base/ColorPicker.less +125 -3
  62. package/src/sap/ui/unified/themes/base/FileUploader.less +5 -0
  63. package/src/sap/ui/unified/themes/base/ShellHeader.less +2 -7
  64. package/src/sap/ui/unified/themes/sap_hcb/Calendar.less +2 -1
@@ -7,12 +7,10 @@
7
7
  // Provides control sap.ui.unified.ShellHeadItem.
8
8
  sap.ui.define([
9
9
  'sap/ui/core/Element',
10
- 'sap/ui/core/IconPool',
11
10
  './library',
12
- "sap/base/security/encodeXML",
13
11
  "sap/ui/thirdparty/jquery"
14
12
  ],
15
- function(Element, IconPool, library, encodeXML, jQuery) {
13
+ function(Element, library, jQuery) {
16
14
  "use strict";
17
15
 
18
16
 
@@ -28,7 +26,7 @@ sap.ui.define([
28
26
  * @extends sap.ui.core.Element
29
27
  *
30
28
  * @author SAP SE
31
- * @version 1.150.0
29
+ * @version 1.151.0
32
30
  *
33
31
  * @constructor
34
32
  * @public
@@ -174,32 +172,6 @@ sap.ui.define([
174
172
  };
175
173
 
176
174
 
177
- ShellHeadItem.prototype.setIcon = function(sIcon){
178
- this.setProperty("icon", sIcon, true);
179
- if (this.getDomRef()) {
180
- this._refreshIcon();
181
- }
182
- return this;
183
- };
184
-
185
-
186
- ShellHeadItem.prototype._refreshIcon = function(){
187
- var $Ico = jQuery(this.$().children()[0]);
188
- var sIco = this.getIcon();
189
- if (IconPool.isIconURI(sIco)) {
190
- var oIconInfo = IconPool.getIconInfo(sIco);
191
- $Ico.html("").attr("style", "");
192
- if (oIconInfo) {
193
- $Ico.text(oIconInfo.content).attr("role", "presentation").attr("aria-label", oIconInfo.text || oIconInfo.name).css("font-family", "'" + oIconInfo.fontFamily + "'");
194
- }
195
- } else {
196
- var $Image = this.$("img-inner");
197
- if ($Image.length == 0 || $Image.attr("src") != sIco) {
198
- $Ico.attr("style", "").attr("aria-label", null).html("<img role='presentation' id='" + this.getId() + "-img-inner' src='" + encodeXML(sIco) + "'>");
199
- }
200
- }
201
- };
202
-
203
175
  return ShellHeadItem;
204
176
 
205
177
  });
@@ -8,10 +8,9 @@
8
8
  sap.ui.define([
9
9
  'sap/ui/core/Element',
10
10
  'sap/ui/core/IconPool',
11
- './library',
12
- "sap/base/security/encodeXML"
11
+ './library'
13
12
  ],
14
- function(Element, IconPool, library, encodeXML) {
13
+ function(Element, IconPool, library) {
15
14
  "use strict";
16
15
 
17
16
 
@@ -27,7 +26,7 @@ sap.ui.define([
27
26
  * @extends sap.ui.core.Element
28
27
  *
29
28
  * @author SAP SE
30
- * @version 1.150.0
29
+ * @version 1.151.0
31
30
  *
32
31
  * @constructor
33
32
  * @public
@@ -86,33 +85,6 @@ sap.ui.define([
86
85
  ShellHeadUserItem.prototype.onsapspace = ShellHeadUserItem.prototype.onclick;
87
86
  ShellHeadUserItem.prototype.onsapenter = ShellHeadUserItem.prototype.onclick;
88
87
 
89
- ShellHeadUserItem.prototype.setImage = function(sImage){
90
- this.setProperty("image", sImage, true);
91
- if (this.getDomRef()) {
92
- this._refreshImage();
93
- }
94
- return this;
95
- };
96
-
97
- ShellHeadUserItem.prototype._refreshImage = function(){
98
- var $Ico = this.$("img");
99
- var sImage = this.getImage();
100
- if (!sImage) {
101
- $Ico.html("").attr("style", "").css("display", "none");
102
- } else if (IconPool.isIconURI(sImage)) {
103
- var oIconInfo = IconPool.getIconInfo(sImage);
104
- $Ico.html("").attr("style", "");
105
- if (oIconInfo) {
106
- $Ico.text(oIconInfo.content).attr("role", "presentation").attr("aria-label", oIconInfo.text || oIconInfo.name).css("font-family", "'" + oIconInfo.fontFamily + "'");
107
- }
108
- } else {
109
- var $Image = this.$("img-inner");
110
- if ($Image.length == 0 || $Image.attr("src") != sImage) {
111
- $Ico.attr("style", "").attr("aria-label", null).html("<img role='presentation' id='" + this.getId() + "-img-inner' src='" + encodeXML(sImage) + "'>");
112
- }
113
- }
114
- };
115
-
116
88
  ShellHeadUserItem.prototype._checkAndAdaptWidth = function(bShellSearchVisible){
117
89
  if (!this.getDomRef()) {
118
90
  return false;
@@ -8,13 +8,14 @@ sap.ui.define([
8
8
  './library',
9
9
  "sap/base/i18n/Localization",
10
10
  'sap/ui/core/Control',
11
+ 'sap/ui/core/IconPool',
11
12
  'sap/ui/Device',
12
13
  "sap/ui/core/ControlBehavior",
13
14
  "sap/ui/core/Lib",
14
15
  'sap/ui/core/theming/Parameters',
15
16
  "sap/ui/thirdparty/jquery"
16
17
  ],
17
- function(library, Localization, Control, Device, ControlBehavior, Library, Parameters, jQuery) {
18
+ function(library, Localization, Control, _IconPool, Device, ControlBehavior, Library, Parameters, jQuery) {
18
19
  "use strict";
19
20
 
20
21
 
@@ -116,7 +117,18 @@ sap.ui.define([
116
117
  pressed: aItems[i].getToggleEnabled() ? aItems[i].getSelected() : null
117
118
  });
118
119
  }
119
- rm.write("><span></span><div class='sapUiUfdShellHeadItmMarker'><div></div></div></div>");
120
+ rm.write(">");
121
+ var sIcon = aItems[i].getIcon();
122
+ if (sIcon) {
123
+ if (_IconPool.isIconURI(sIcon)) {
124
+ rm.writeIcon(sIcon, null, {role: "presentation"});
125
+ } else {
126
+ rm.write("<span><img role='presentation' src='");
127
+ rm.writeEscaped(sIcon);
128
+ rm.write("'></span>");
129
+ }
130
+ }
131
+ rm.write("<div class='sapUiUfdShellHeadItmMarker'><div></div></div></div>");
120
132
  }
121
133
 
122
134
  var oUser = oHeader.getUser();
@@ -141,7 +153,21 @@ sap.ui.define([
141
153
  }
142
154
  }
143
155
 
144
- rm.write("><span id='", oUser.getId(), "-img' aria-hidden='true' class='sapUiUfdShellHeadUsrItmImg'></span>");
156
+ rm.write(">");
157
+ var sImage = oUser.getImage();
158
+ if (sImage) {
159
+ if (_IconPool.isIconURI(sImage)) {
160
+ rm.writeIcon(sImage, ["sapUiUfdShellHeadUsrItmImg"], {id: oUser.getId() + "-img", "aria-hidden": "true"});
161
+ } else {
162
+ rm.write("<span id='", oUser.getId(), "-img' aria-hidden='true' class='sapUiUfdShellHeadUsrItmImg'>");
163
+ rm.write("<img role='presentation' src='");
164
+ rm.writeEscaped(sImage);
165
+ rm.write("'>");
166
+ rm.write("</span>");
167
+ }
168
+ } else {
169
+ rm.write("<span id='", oUser.getId(), "-img' aria-hidden='true' class='sapUiUfdShellHeadUsrItmImg'></span>");
170
+ }
145
171
  rm.write("<span id='" + oUser.getId() + "-name' class='sapUiUfdShellHeadUsrItmName'");
146
172
  var sUserName = oUser.getUsername() || "";
147
173
  rm.writeAttributeEscaped("title", sUserName);
@@ -237,22 +263,12 @@ sap.ui.define([
237
263
  };
238
264
 
239
265
  ShellHeader.prototype._refresh = function(){
240
- function updateItems(aItems){
241
- for (var i = 0; i < aItems.length; i++) {
242
- aItems[i]._refreshIcon();
243
- }
244
- }
245
-
246
- updateItems(this.getHeadItems());
247
- updateItems(this.getHeadEndItems());
248
-
249
266
  var oUser = this.getUser(),
250
267
  isPhoneSize = jQuery("html").hasClass("sapUiMedia-Std-Phone"),
251
268
  searchVisible = !this.$("hdr-search").hasClass("sapUiUfdShellHidden"),
252
269
  $logo = this.$("icon");
253
270
 
254
271
  if (oUser) {
255
- oUser._refreshImage();
256
272
  oUser._checkAndAdaptWidth(searchVisible && !!this.getSearch());
257
273
  }
258
274
 
@@ -56,7 +56,7 @@ sap.ui.define([
56
56
  * @extends sap.ui.core.Control
57
57
  *
58
58
  * @author SAP SE
59
- * @version 1.150.0
59
+ * @version 1.151.0
60
60
  *
61
61
  * @constructor
62
62
  * @public
@@ -46,7 +46,7 @@ sap.ui.define([
46
46
  * @extends sap.ui.core.Control
47
47
  *
48
48
  * @author SAP SE
49
- * @version 1.150.0
49
+ * @version 1.151.0
50
50
  *
51
51
  * @constructor
52
52
  * @public
@@ -34,7 +34,7 @@ sap.ui.define([
34
34
  * @extends sap.ui.core.Control
35
35
  *
36
36
  * @author SAP SE
37
- * @version 1.150.0
37
+ * @version 1.151.0
38
38
  *
39
39
  * @constructor
40
40
  * @public
@@ -23,7 +23,7 @@ sap.ui.define([
23
23
  * @class
24
24
  * Time range for use in <code>NonWorkingPeriod</code>
25
25
  * @extends sap.ui.core.Element
26
- * @version 1.150.0
26
+ * @version 1.151.0
27
27
  *
28
28
  * @constructor
29
29
  * @public
@@ -22,7 +22,7 @@ sap.ui.define([
22
22
  * with <code>recurrenceType</code> set to <code>Weekly</code> is provided.
23
23
  *
24
24
  * @extends sap.ui.unified.RecurrenceRule
25
- * @version 1.150.0
25
+ * @version 1.151.0
26
26
  *
27
27
  * @constructor
28
28
  * @private
@@ -23,7 +23,7 @@ sap.ui.define([
23
23
  * with <code>recurrenceType</code> set to <code>Yearly</code> is provided.
24
24
  *
25
25
  * @extends sap.ui.unified.MonthlyRecurrenceRule
26
- * @version 1.150.0
26
+ * @version 1.151.0
27
27
  *
28
28
  * @constructor
29
29
  * @private
@@ -39,7 +39,7 @@ sap.ui.define([
39
39
  * If used inside the calendar the properties and aggregation are directly taken from the parent
40
40
  * (To not duplicate and sync DateRanges and so on...)
41
41
  * @extends sap.ui.unified.calendar.Month
42
- * @version 1.150.0
42
+ * @version 1.151.0
43
43
  *
44
44
  * @constructor
45
45
  * @public
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  *
28
28
  * <b>Note:</b> This is used inside the calendar. Not for standalone usage
29
29
  * @extends sap.ui.core.Control
30
- * @version 1.150.0
30
+ * @version 1.151.0
31
31
  *
32
32
  * @constructor
33
33
  * @public
@@ -277,6 +277,7 @@ sap.ui.define([
277
277
  if (this.getTooltipButton(oHead, i)) {
278
278
  oRm.attr("title", this.getTooltipButton(oHead, i));
279
279
  }
280
+ oRm.attr("tabindex", "0");
280
281
  oRm.accessibilityState(null, mAccProps);
281
282
  mAccProps = {};
282
283
  oRm.openEnd(); // button element
@@ -32,7 +32,7 @@ sap.ui.define([
32
32
  * This control serves for picking an item from a grid with items which are relative periods in Plannig Calendar.
33
33
  * This is used inside the sap.m.PlanningCalendar relative views. Not for stand alone usage.
34
34
  * @extends sap.ui.core.Control
35
- * @version 1.150.0
35
+ * @version 1.151.0
36
36
  *
37
37
  * @constructor
38
38
  * @private
@@ -78,7 +78,7 @@ sap.ui.define([
78
78
  * If used inside the calendar the properties and aggregation are directly taken from the parent
79
79
  * (To not duplicate and sync DateRanges and so on...)
80
80
  * @extends sap.ui.core.Control
81
- * @version 1.150.0
81
+ * @version 1.151.0
82
82
  *
83
83
  * @constructor
84
84
  * @public
@@ -155,6 +155,15 @@ sap.ui.define([
155
155
  */
156
156
  showWeekNumbers : {type : "boolean", group : "Appearance", defaultValue : true},
157
157
 
158
+ /**
159
+ * Determines whether the header of the week numbers column is displayed.
160
+ * The column header text is translated according to the active language.
161
+ *
162
+ * <b>Note:</b> Takes effect only when <code>showWeekNumbers</code> is set to <code>true</code>.
163
+ * @since 1.151
164
+ */
165
+ showWeekNumbersHeader : {type : "boolean", group : "Appearance", defaultValue : false},
166
+
158
167
  /**
159
168
  * The value of this property is set trough the sap.ui.unified.Calendar control,
160
169
  * in order for the current sap.ui.unified.calendar.Month control to know which
@@ -326,6 +335,30 @@ sap.ui.define([
326
335
  return "";
327
336
  };
328
337
 
338
+ /**
339
+ * Returns the text to display in the week numbers column header.
340
+ * Returns an empty string when the header should not be shown.
341
+ * @returns {string} The week numbers column header text, or empty string
342
+ * @private
343
+ */
344
+ Month.prototype._getWeekNumbersHeaderText = function() {
345
+ if (!this.getShowWeekNumbersHeader()) {
346
+ return "";
347
+ }
348
+
349
+ // Locales where the calendar week abbreviation (sap-calendarWeek narrow) is too long
350
+ // to fit in the week number column header cell — verified manually.
351
+ // These fall back to the "week" narrow display name from CLDR (week-narrow.displayName).
352
+ const _oLongCWLocales = new Set(["ar", "ar-EG", "ar-SA", "he", "vi", "zh-CN", "zh-HK", "zh-TW"]),
353
+ oLocaleData = this._getLocaleData();
354
+
355
+ if (_oLongCWLocales.has(this._getLocale())) {
356
+ return oLocaleData.getDisplayName("week", "narrow");
357
+ }
358
+
359
+ return oLocaleData.getCalendarWeek("narrow").replace("{0}", "").trim();
360
+ };
361
+
329
362
  Month.prototype.exit = function(){
330
363
 
331
364
  if (this._oItemNavigation) {
@@ -364,6 +397,14 @@ sap.ui.define([
364
397
 
365
398
  // check if day names are too big -> use smaller ones
366
399
  _checkNamesLength.call(this);
400
+
401
+ if (this._bFocusFromTouch) {
402
+ const iFocusedIndex = this._oItemNavigation.getFocusedIndex();
403
+ const oDomRef = this._oItemNavigation.getItemDomRefs()[iFocusedIndex];
404
+ if (oDomRef) {
405
+ oDomRef.classList.add("sapUiCalItemFocusFromTouch");
406
+ }
407
+ }
367
408
  };
368
409
 
369
410
  Month.prototype.onmouseover = function(oEvent) {
@@ -1084,6 +1125,10 @@ sap.ui.define([
1084
1125
  clientY: oEvent.clientY
1085
1126
  };
1086
1127
 
1128
+ if (oEvent.target.closest(".sapUiCalItem")) {
1129
+ this._bFocusFromTouch = true;
1130
+ }
1131
+
1087
1132
  // handle only mouse down on a week number
1088
1133
  if (oEvent.button
1089
1134
  || Device.support.touch
@@ -1102,6 +1147,12 @@ sap.ui.define([
1102
1147
  this._handleWeekSelection(oFirstDayOfWeekCalendarDate, bFocusStartDate);
1103
1148
  };
1104
1149
 
1150
+ Month.prototype.ontouchstart = function(oEvent) {
1151
+ if (oEvent.target.closest(".sapUiCalItem")) {
1152
+ this._bFocusFromTouch = true;
1153
+ }
1154
+ };
1155
+
1105
1156
  Month.prototype.onmouseup = function(oEvent){
1106
1157
  // BCP: 1980116734
1107
1158
  // on a combi device right mouse button resulted in a selection (both a week or a single day)
@@ -1188,6 +1239,7 @@ sap.ui.define([
1188
1239
  if (oEvent.which === KeyCodes.SPACE){
1189
1240
  this.bSpaceButtonPressed = true;
1190
1241
  }
1242
+ this._bFocusFromTouch = false;
1191
1243
  };
1192
1244
  Month.prototype.onkeyup = function(oEvent){
1193
1245
  if (oEvent.which === KeyCodes.SPACE){
@@ -2164,6 +2216,12 @@ sap.ui.define([
2164
2216
  this._selectedWithMouse = true;
2165
2217
  }
2166
2218
 
2219
+ if (this._bFocusFromTouch) {
2220
+ oDomRef.classList.add("sapUiCalItemFocusFromTouch");
2221
+ } else {
2222
+ oDomRef.classList.remove("sapUiCalItemFocusFromTouch");
2223
+ }
2224
+
2167
2225
  if (bFireFocus) {
2168
2226
  this.fireFocus({date: oFocusedDate.toLocalJSDate(), otherMonth: bOtherMonth});
2169
2227
  }
@@ -57,7 +57,7 @@ sap.ui.define([
57
57
  * renders a MonthPicker with ItemNavigation
58
58
  * This is used inside the calendar. Not for stand alone usage
59
59
  * @extends sap.ui.core.Control
60
- * @version 1.150.0
60
+ * @version 1.151.0
61
61
  *
62
62
  * @constructor
63
63
  * @public
@@ -197,10 +197,10 @@ sap.ui.define([
197
197
 
198
198
  MonthRenderer.renderDayNames = function(oRm, oMonth, oLocaleData, iStartDay, iDays, bDayNumberAsId, sWidth){
199
199
 
200
- var iFirstDayOfWeek = oMonth._getFirstDayOfWeek();
201
- var sId = oMonth.getId();
202
- var sDayId = "";
203
- var sCalendarType = oMonth.getPrimaryCalendarType();
200
+ var iFirstDayOfWeek = oMonth._getFirstDayOfWeek(),
201
+ sId = oMonth.getId(),
202
+ sCalendarType = oMonth.getPrimaryCalendarType(),
203
+ sDayId = "";
204
204
 
205
205
  var aWeekDays = [];
206
206
  if (oMonth._bLongWeekDays || !oMonth._bNamesLengthChecked) {
@@ -211,7 +211,7 @@ sap.ui.define([
211
211
  var aWeekDaysWide = oLocaleData.getDaysStandAlone("wide", sCalendarType);
212
212
 
213
213
  if (oMonth.getShowWeekNumbers() && sCalendarType !== CalendarType.Islamic) { // on Islamic primary calendar week numbers are not shown, do not add dummy cell
214
- this.renderDummyCell(oRm, "sapUiCalWH", true, "columnheader");
214
+ this.renderDummyCell(oRm, "sapUiCalWH", true, oMonth._getWeekNumbersHeaderText(), "columnheader");
215
215
  }
216
216
 
217
217
  for ( var i = 0; i < iDays; i++) {
@@ -308,7 +308,7 @@ sap.ui.define([
308
308
 
309
309
  if (iLength === 28) {
310
310
  // there are only 4 full weeks (28 days), add one hidden 'day' div in order to open space for 5-th week
311
- this.renderDummyCell(oRm, "sapUiCalItem", false, "");
311
+ this.renderDummyCell(oRm, "sapUiCalItem", false, "", "");
312
312
  }
313
313
  };
314
314
 
@@ -316,22 +316,35 @@ sap.ui.define([
316
316
  * Generates empty 'day' div that adds space for one more week in the calendar, in case of 4 full weeks only (28 days)
317
317
  * @param {sap.ui.core.RenderManager} oRm The RenderManager that can be used for writing to the render output buffer
318
318
  * @param {string} sClassName css class that will be added to the dummy element styles
319
- * @param {boolean} bVisible if set to true the dummy element will be visible
319
+ * @param {boolean} bShowColumn if set to true the dummy element will be visible
320
+ * @param {string} sCellText text to render inside the dummy element; if empty, no text span is rendered
320
321
  * @param {string} sRole aria role attribute
321
322
  * @private
322
323
  */
323
- MonthRenderer.renderDummyCell = function(oRm, sClassName, bVisible, sRole) {
324
+ MonthRenderer.renderDummyCell = function(oRm, sClassName, bShowColumn, sCellText, sRole) {
325
+ var sFullText = Library.getResourceBundleFor("sap.ui.unified").getText("CALENDAR_WEEK");
324
326
  oRm.openStart("div");
325
327
  oRm.class(sClassName);
326
328
  oRm.class("sapUiCalDummy");
327
- oRm.style("visibility", bVisible ? "visible" : "hidden");
329
+ oRm.style("visibility", bShowColumn ? "visible" : "hidden");
328
330
  oRm.attr("role", sRole);
331
+ if (sCellText) {
332
+ oRm.attr("title", sFullText);
333
+ }
329
334
  oRm.openEnd();
330
335
 
336
+ if (sCellText) {
337
+ oRm.openStart("span");
338
+ oRm.attr("aria-hidden", "true");
339
+ oRm.openEnd();
340
+ oRm.text(sCellText);
341
+ oRm.close("span");
342
+ }
343
+
331
344
  oRm.openStart("span");
332
345
  oRm.class("sapUiPseudoInvisibleText");
333
346
  oRm.openEnd();
334
- oRm.text(Library.getResourceBundleFor("sap.ui.unified").getText("CALENDAR_WEEK"));
347
+ oRm.text(sFullText);
335
348
  oRm.close("span");
336
349
 
337
350
  oRm.close('div');
@@ -70,7 +70,7 @@ sap.ui.define([
70
70
  * The MontsRow works with UI5Date or JavaScript Date objects, but only the month and the year are used to display and interact.
71
71
  * As representation for a month, the 1st of the month will always be returned in the API.
72
72
  * @extends sap.ui.core.Control
73
- * @version 1.150.0
73
+ * @version 1.151.0
74
74
  *
75
75
  * @constructor
76
76
  * @public
@@ -34,7 +34,7 @@ sap.ui.define([
34
34
  * Other usages are not supported.
35
35
  *
36
36
  * @extends sap.ui.unified.calendar.DatesRow
37
- * @version 1.150.0
37
+ * @version 1.151.0
38
38
  *
39
39
  * @constructor
40
40
  * @private
@@ -69,7 +69,7 @@ sap.ui.define([
69
69
  *
70
70
  * The TimesRow works with UI5Date or JavaScript Date objects.
71
71
  * @extends sap.ui.core.Control
72
- * @version 1.150.0
72
+ * @version 1.151.0
73
73
  *
74
74
  * @constructor
75
75
  * @public
@@ -41,7 +41,7 @@ sap.ui.define([
41
41
  * The WeeksRow works with UI5Date or JavaScript Date objects for its API, but internally uses CalendarDate objects for calculations.
42
42
  *
43
43
  * @extends sap.ui.core.Control
44
- * @version 1.150.0
44
+ * @version 1.151.0
45
45
  *
46
46
  * @constructor
47
47
  * @private
@@ -61,7 +61,7 @@ sap.ui.define([
61
61
  * As in all date-time controls, all pubic JS Date objects that are given (e.g. <code>setDate()</code>) or read
62
62
  * (e.g. <code>getFirstRenderedDate</code>) with values which are considered as date objects in browser(local) timezone.
63
63
  * @extends sap.ui.core.Control
64
- * @version 1.150.0
64
+ * @version 1.151.0
65
65
  *
66
66
  * @constructor
67
67
  * @public
@@ -45,7 +45,7 @@ sap.ui.define([
45
45
  * @extends sap.ui.unified.calendar.YearPicker
46
46
  *
47
47
  * @author SAP SE
48
- * @version 1.150.0
48
+ * @version 1.151.0
49
49
  *
50
50
  * @constructor
51
51
  * @private
@@ -32,14 +32,14 @@ sap.ui.define([
32
32
  * @namespace
33
33
  * @alias sap.ui.unified
34
34
  * @author SAP SE
35
- * @version 1.150.0
35
+ * @version 1.151.0
36
36
  * @since 1.28
37
37
  * @public
38
38
  */
39
39
  var thisLib = Library.init({
40
40
  name : "sap.ui.unified",
41
41
  apiVersion: 2,
42
- version: "1.150.0",
42
+ version: "1.151.0",
43
43
  dependencies : ["sap.ui.core"],
44
44
  designtime: "sap/ui/unified/designtime/library.designtime",
45
45
  types: [
@@ -151,14 +151,18 @@
151
151
  }
152
152
 
153
153
  /* no default (browser) outline, if device needs focus visualization its defined later */
154
- .sapUiCalHead button:focus,
155
- .sapUiCalCancel:focus {
154
+ html.sap-desktop .sapUiCalHead button:focus,
155
+ html.sap-desktop .sapUiCalCancel:focus,
156
+ .sapUiCalHead button:focus-visible,
157
+ .sapUiCalCancel:focus-visible {
156
158
  outline: none;
157
159
  }
158
160
 
159
161
  /* hover and focus makes only sense on desktops. On mobile devices it's not needed */
160
162
  html.sap-desktop .sapUiCalHead button:focus,
161
- html.sap-desktop .sapUiCalCancel:focus {
163
+ html.sap-desktop .sapUiCalCancel:focus,
164
+ .sapUiCalHead button:focus-visible,
165
+ .sapUiCalCancel:focus-visible {
162
166
  background-color: var(--sapButton_Hover_Background);
163
167
  color: var(--sapButton_Hover_TextColor);
164
168
  }
@@ -498,7 +502,7 @@ html.sap-desktop .sapUiCalHead button.sapUiCalDsbl:focus,
498
502
  .sapUiCalItem {
499
503
  line-height: 1.875rem;
500
504
 
501
- &:focus {
505
+ &:focus-visible {
502
506
  line-height: 1.75rem;
503
507
  }
504
508
 
@@ -510,6 +514,13 @@ html.sap-desktop .sapUiCalHead button.sapUiCalDsbl:focus,
510
514
  }
511
515
  }
512
516
 
517
+ html.sap-desktop .sapUiCalMonthPicker.sapUiCalMonthSecType .sapUiCalItem:focus,
518
+ html.sap-desktop .sapUiCalYearPicker.sapUiCalMonthSecType .sapUiCalItem:focus,
519
+ .sapUiCalMonthPicker.sapUiCalMonthSecType .sapUiCalItem:focus-visible,
520
+ .sapUiCalYearPicker.sapUiCalMonthSecType .sapUiCalItem:focus-visible {
521
+ line-height: 1.75rem;
522
+ }
523
+
513
524
  .sapUiSizeCozy {
514
525
 
515
526
  .sapUiCal:not(.sapUiCalDateInt) {
@@ -547,7 +558,7 @@ html.sap-desktop .sapUiCalHead button.sapUiCalDsbl:focus,
547
558
  .sapUiCalItem {
548
559
  line-height: 1rem;
549
560
 
550
- &:focus {
561
+ &:focus-visible {
551
562
  line-height: 0.875rem;
552
563
 
553
564
  .sapUiCalItemSecText {
@@ -557,6 +568,17 @@ html.sap-desktop .sapUiCalHead button.sapUiCalDsbl:focus,
557
568
  }
558
569
  }
559
570
 
571
+ html.sap-desktop .sapUiSizeCompact .sapUiCalMonthPicker.sapUiCalMonthSecType .sapUiCalItem:focus,
572
+ html.sap-desktop .sapUiSizeCompact .sapUiCalYearPicker.sapUiCalMonthSecType .sapUiCalItem:focus,
573
+ .sapUiSizeCompact .sapUiCalMonthPicker.sapUiCalMonthSecType .sapUiCalItem:focus-visible,
574
+ .sapUiSizeCompact .sapUiCalYearPicker.sapUiCalMonthSecType .sapUiCalItem:focus-visible {
575
+ line-height: 0.875rem;
576
+
577
+ .sapUiCalItemSecText {
578
+ line-height: 0.875rem;
579
+ }
580
+ }
581
+
560
582
  /* Day, Month and YearPicker on popup */
561
583
  .sapUiCalMonthView[data-sap-ui-popup],
562
584
  .sapUiCalMonthPicker[data-sap-ui-popup],
@@ -766,7 +788,14 @@ html.sapUiMedia-Std-Phone .sapUiCalHeadB0 {
766
788
  box-sizing: border-box;
767
789
  }
768
790
 
769
- .sapUiCalMonthSecType .sapUiCalItem:focus > .sapUiCalItemSecText {
791
+ .sapUiCalItem:focus-visible {
792
+ outline-width: none;
793
+ outline-style: none;
794
+ outline-color: none;
795
+ }
796
+
797
+ html.sap-desktop .sapUiCalMonthSecType .sapUiCalItem:focus > .sapUiCalItemSecText,
798
+ .sapUiCalMonthSecType .sapUiCalItem:focus-visible > .sapUiCalItemSecText {
770
799
  line-height: 0.75rem;
771
800
  }
772
801
 
@@ -1012,6 +1041,10 @@ html.sapUiMedia-Std-Phone .sapUiCalHeadB0 {
1012
1041
  height: 2rem;
1013
1042
  }
1014
1043
 
1044
+ .sapUiSizeCompact .sapUiCalWH {
1045
+ overflow: visible;
1046
+ }
1047
+
1015
1048
  .sapUiSizeCompact .sapUiCal:not(.sapUiCalInt) {
1016
1049
 
1017
1050
  .sapUiCalContent {