@openui5/sap.ui.unified 1.147.1 → 1.149.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 (65) hide show
  1. package/THIRDPARTY.txt +3 -3
  2. package/package.json +2 -2
  3. package/src/sap/ui/unified/.library +1 -1
  4. package/src/sap/ui/unified/Calendar.js +9 -4
  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/CalendarRowRenderer.js +23 -18
  13. package/src/sap/ui/unified/CalendarTimeInterval.js +10 -13
  14. package/src/sap/ui/unified/CalendarWeekInterval.js +1 -1
  15. package/src/sap/ui/unified/ColorPicker.js +1 -1
  16. package/src/sap/ui/unified/ColorPickerPopover.js +1 -1
  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 +19 -6
  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 +1 -1
  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 +1 -1
  30. package/src/sap/ui/unified/MenuTextFieldItem.js +1 -1
  31. package/src/sap/ui/unified/MonthlyRecurrenceRule.js +58 -0
  32. package/src/sap/ui/unified/NonWorkingPeriod.js +1 -1
  33. package/src/sap/ui/unified/RecurrenceRule.js +112 -0
  34. package/src/sap/ui/unified/RecurringCalendarAppointment.js +222 -0
  35. package/src/sap/ui/unified/RecurringNonWorkingPeriod.js +112 -6
  36. package/src/sap/ui/unified/Shell.js +1 -1
  37. package/src/sap/ui/unified/ShellHeadItem.js +1 -1
  38. package/src/sap/ui/unified/ShellHeadUserItem.js +1 -1
  39. package/src/sap/ui/unified/ShellLayout.js +1 -1
  40. package/src/sap/ui/unified/ShellOverlay.js +1 -1
  41. package/src/sap/ui/unified/SplitContainer.js +1 -1
  42. package/src/sap/ui/unified/TimeRange.js +1 -1
  43. package/src/sap/ui/unified/WeeklyRecurrenceRule.js +39 -0
  44. package/src/sap/ui/unified/YearlyRecurrenceRule.js +53 -0
  45. package/src/sap/ui/unified/calendar/DatesRow.js +1 -1
  46. package/src/sap/ui/unified/calendar/Header.js +14 -2
  47. package/src/sap/ui/unified/calendar/HeaderRenderer.js +124 -50
  48. package/src/sap/ui/unified/calendar/IndexPicker.js +1 -1
  49. package/src/sap/ui/unified/calendar/Month.js +6 -7
  50. package/src/sap/ui/unified/calendar/MonthPicker.js +1 -1
  51. package/src/sap/ui/unified/calendar/MonthsRow.js +1 -1
  52. package/src/sap/ui/unified/calendar/OneMonthDatesRow.js +1 -1
  53. package/src/sap/ui/unified/calendar/RecurrenceUtils.js +653 -113
  54. package/src/sap/ui/unified/calendar/TimesRow.js +1 -1
  55. package/src/sap/ui/unified/calendar/WeeksRow.js +1 -1
  56. package/src/sap/ui/unified/calendar/YearPicker.js +1 -1
  57. package/src/sap/ui/unified/calendar/YearRangePicker.js +1 -1
  58. package/src/sap/ui/unified/library.js +73 -2
  59. package/src/sap/ui/unified/messagebundle_ko.properties +2 -2
  60. package/src/sap/ui/unified/messagebundle_zh_CN.properties +4 -4
  61. package/src/sap/ui/unified/messagebundle_zh_TW.properties +6 -6
  62. package/src/sap/ui/unified/themes/base/Calendar.less +76 -205
  63. package/src/sap/ui/unified/themes/base/FileUploader.less +2 -2
  64. package/src/sap/ui/unified/themes/sap_hcb/Calendar.less +3 -10
  65. package/src/sap/ui/unified/themes/sap_hcb/base_Calendar.less +54 -112
package/THIRDPARTY.txt CHANGED
@@ -39,7 +39,7 @@ Contained in: src/sap.f/src/sap/f/thirdparty/**
39
39
 
40
40
  Library: sap.m:
41
41
 
42
- Component: purify.js, version: 3.2.4
42
+ Component: purify.js, version: 3.4.1
43
43
  Copyright: Mario Heiderich
44
44
  License: Apache-2.0
45
45
  License Text: https://github.com/UI5/openui5/blob/master/LICENSES/Apache-2.0.txt
@@ -309,7 +309,7 @@ License: MIT
309
309
  License Text: https://github.com/UI5/openui5/blob/master/LICENSES/MIT.txt
310
310
  Contained in: src/sap.ui.core/src/sap/ui/thirdparty/bignumber.js
311
311
 
312
- Component: lodash, version: 4.17.23
312
+ Component: lodash, version: 4.18.1
313
313
  Copyright: OpenJS Foundation and other contributors
314
314
  License: MIT
315
315
  License Text: https://github.com/UI5/openui5/blob/master/LICENSES/MIT.txt
@@ -454,7 +454,7 @@ License: Apache-2.0
454
454
  License Text: https://github.com/UI5/openui5/blob/master/LICENSES/Apache-2.0.txt
455
455
  Contained in: lib/jsdoc/ui5/plugin.js
456
456
 
457
- Component: SAP Theming Base Content, version: 11.34.0
457
+ Component: SAP Theming Base Content, version: 11.35.1
458
458
  Copyright: SAP SE or an SAP affiliate company and Theming Base Content contributors
459
459
  License: Apache-2.0
460
460
  License Text: https://github.com/UI5/openui5/blob/master/LICENSES/Apache-2.0.txt
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openui5/sap.ui.unified",
3
- "version": "1.147.1",
3
+ "version": "1.149.0",
4
4
  "description": "OpenUI5 UI Library sap.ui.unified",
5
5
  "author": "SAP SE (https://www.sap.com)",
6
6
  "license": "Apache-2.0",
@@ -14,6 +14,6 @@
14
14
  "url": "https://github.com/UI5/openui5.git"
15
15
  },
16
16
  "dependencies": {
17
- "@openui5/sap.ui.core": "1.147.1"
17
+ "@openui5/sap.ui.core": "1.149.0"
18
18
  }
19
19
  }
@@ -6,7 +6,7 @@
6
6
  <copyright>OpenUI5
7
7
  * (c) Copyright 2026 SAP SE or an SAP affiliate company.
8
8
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.</copyright>
9
- <version>1.147.1</version>
9
+ <version>1.149.0</version>
10
10
 
11
11
  <documentation>Unified controls intended for both, mobile and desktop scenarios</documentation>
12
12
 
@@ -80,7 +80,7 @@ sap.ui.define([
80
80
  * Basic Calendar.
81
81
  * This calendar is used for DatePickers
82
82
  * @extends sap.ui.core.Control
83
- * @version 1.147.1
83
+ * @version 1.149.0
84
84
  *
85
85
  * @constructor
86
86
  * @public
@@ -2534,13 +2534,15 @@ sap.ui.define([
2534
2534
  * @private
2535
2535
  */
2536
2536
  Calendar.prototype._updateHeadersButtons = function () {
2537
- var oSecondMonthHeader = this.getAggregation("secondMonthHeader");
2537
+ var oSecondMonthHeader = this.getAggregation("secondMonthHeader"),
2538
+ oHeader = this.getAggregation("header");
2538
2539
 
2539
2540
  if (this._isTwoMonthsInOneColumn()) {
2540
2541
  // Two months displayed in one column
2541
2542
  // Than we need the second header
2542
2543
  // and hide the third and fourth buttons of the first header
2543
2544
  oSecondMonthHeader.setVisible(true);
2545
+ oHeader.setProperty("_alignRight", "Center");
2544
2546
 
2545
2547
  if (this._iMode === 2) {
2546
2548
  this._updateHeadersButtonsHelper(false, true, false, false);
@@ -2554,6 +2556,8 @@ sap.ui.define([
2554
2556
  // Than we need to hide the second header
2555
2557
  // and show third and fourth buttons of the first
2556
2558
  oSecondMonthHeader.setVisible(false);
2559
+ oHeader.setProperty("_alignRight", "End");
2560
+
2557
2561
  if (this._iMode === 2) {
2558
2562
  this._bActionTriggeredFromSecondHeader ?
2559
2563
  this._updateHeadersButtonsHelper(true, true, false, true) :
@@ -2572,6 +2576,7 @@ sap.ui.define([
2572
2576
  // No second header
2573
2577
  // No third and fourth button
2574
2578
  oSecondMonthHeader.setVisible(false);
2579
+ oHeader.setProperty("_alignRight", "Center");
2575
2580
  if (this._iMode === 1) {
2576
2581
  this._updateHeadersButtonsHelper(false, true, false, false);
2577
2582
  } else if (this._iMode === 2) {
@@ -2629,7 +2634,7 @@ sap.ui.define([
2629
2634
 
2630
2635
  /**
2631
2636
  *
2632
- * @returns {boolean} if there are two months in one column
2637
+ * @returns {boolean} if there are two (or more) months in one column
2633
2638
  * @private
2634
2639
  */
2635
2640
  Calendar.prototype._isTwoMonthsInOneColumn = function () {
@@ -2640,7 +2645,7 @@ sap.ui.define([
2640
2645
 
2641
2646
  /**
2642
2647
  *
2643
- * @returns {boolean} if there are two months in two columns
2648
+ * @returns {boolean} if there are two (or more) months in two columns
2644
2649
  * @private
2645
2650
  */
2646
2651
  Calendar.prototype._isTwoMonthsInTwoColumns = function () {
@@ -43,7 +43,7 @@ sap.ui.define([
43
43
  *
44
44
  * Applications could inherit from this element to add own fields.
45
45
  * @extends sap.ui.unified.DateTypeRange
46
- * @version 1.147.1
46
+ * @version 1.149.0
47
47
  *
48
48
  * @constructor
49
49
  * @public
@@ -64,7 +64,7 @@ sap.ui.define([
64
64
  * @class
65
65
  * <code>CalendarDateInterval</code> only visualizes the dates in a one-line interval and allows the selection of a single day.
66
66
  * @extends sap.ui.unified.Calendar
67
- * @version 1.147.1
67
+ * @version 1.149.0
68
68
  *
69
69
  * @constructor
70
70
  * @public
@@ -57,7 +57,7 @@ sap.ui.define([
57
57
  * @extends sap.ui.core.Control
58
58
  *
59
59
  * @author SAP SE
60
- * @version 1.147.1
60
+ * @version 1.149.0
61
61
  *
62
62
  * @constructor
63
63
  * @public
@@ -21,7 +21,7 @@ sap.ui.define(['sap/ui/core/Element', './library'],
21
21
  * @class
22
22
  * Item to be displayed in a CalendarLegend.
23
23
  * @extends sap.ui.core.Element
24
- * @version 1.147.1
24
+ * @version 1.149.0
25
25
  *
26
26
  * @constructor
27
27
  * @public
@@ -65,7 +65,7 @@ sap.ui.define([
65
65
  * <b>Note:</b> UI5Date or JavaScript Date objects are used to set and return the months, mark them as selected or as a special type.
66
66
  * But the date part of the Date object is not used. If a Date object is returned the date will be set to the 1st of the corresponding month.
67
67
  * @extends sap.ui.core.Control
68
- * @version 1.147.1
68
+ * @version 1.149.0
69
69
  *
70
70
  * @constructor
71
71
  * @public
@@ -57,7 +57,7 @@ sap.ui.define([
57
57
  * Navigation via year picker switches to the corresponding year and the same month as before the navigation.
58
58
  *
59
59
  * @extends sap.ui.unified.CalendarDateInterval
60
- * @version 1.147.1
60
+ * @version 1.149.0
61
61
  *
62
62
  * @constructor
63
63
  * @private
@@ -84,7 +84,7 @@ sap.ui.define([
84
84
  * @class
85
85
  * A calendar row with a header and appointments. The Appointments will be placed in the defined interval.
86
86
  * @extends sap.ui.core.Control
87
- * @version 1.147.1
87
+ * @version 1.149.0
88
88
  *
89
89
  * @constructor
90
90
  * @public
@@ -547,30 +547,34 @@ sap.ui.define([
547
547
  var sId = oAppointment.getId();
548
548
  var bReducedHeight = oRow._getAppointmentReducedHeight(oAppointmentInfo);
549
549
  var bAppointmentSelected = oAppointment.getSelected();
550
- var mAccProps = {
551
- role: "listitem",
552
- labelledby: {
553
- value: `${InvisibleText.getStaticId("sap.m", "ACC_CTR_TYPE_LISTITEM")} ${InvisibleText.getStaticId("sap.ui.unified", "APPOINTMENT")} ${sId.concat("-Descr")}`,
554
- append: true
555
- },
556
- describedby: {value: bAppointmentSelected ? InvisibleText.getStaticId("sap.ui.unified", "APPOINTMENT_SELECTED") : "", append: true},
557
- selected: null
558
- };
550
+ var bHasCustomContent = !!oAppointment.getCustomContent().length;
551
+
552
+ var aLabelledByIds = [InvisibleText.getStaticId("sap.m", "ACC_CTR_TYPE_LISTITEM"), InvisibleText.getStaticId("sap.ui.unified", "APPOINTMENT")];
553
+
554
+ if (sTitle && !bHasCustomContent) {
555
+ aLabelledByIds.push(`${sId}-Title`);
556
+ }
557
+
558
+ aLabelledByIds.push(`${sId}-Descr`);
559
+
560
+ if (sText && !bHasCustomContent) {
561
+ aLabelledByIds.push(`${sId}-Text`);
562
+ }
563
+
559
564
  var iRowCount = oRow._getAppointmentRowCount(oAppointmentInfo, bReducedHeight);
560
565
  var aAriaLabels = oRow.getAriaLabelledBy();
561
566
 
562
567
  var oArrowValues = oRow._calculateAppoitnmentVisualCue(oAppointment);
563
568
  if (aAriaLabels.length > 0) {
564
- mAccProps["labelledby"].value = mAccProps["labelledby"].value + " " + aAriaLabels.join(" ");
569
+ aLabelledByIds = aLabelledByIds.concat(aAriaLabels);
565
570
  }
566
571
 
567
- if (sTitle && !oAppointment.getCustomContent().length) {
568
- mAccProps["labelledby"].value = mAccProps["labelledby"].value + " " + sId + "-Title";
569
- }
570
-
571
- if (sText && !oAppointment.getCustomContent().length) {
572
- mAccProps["labelledby"].value = mAccProps["labelledby"].value + " " + sId + "-Text";
573
- }
572
+ var mAccProps = {
573
+ role: "listitem",
574
+ labelledby: { value: aLabelledByIds.join(" "), append: true },
575
+ describedby: { value: bAppointmentSelected ? InvisibleText.getStaticId("sap.ui.unified", "APPOINTMENT_SELECTED") : "", append: true },
576
+ selected: null
577
+ };
574
578
 
575
579
  oRm.openStart("div", oAppointment);
576
580
  oRm.class("sapUiCalendarApp");
@@ -582,7 +586,8 @@ sap.ui.define([
582
586
 
583
587
  if (oAppointment.getTentative()) {
584
588
  oRm.class("sapUiCalendarAppTent");
585
- mAccProps["labelledby"].value = mAccProps["labelledby"].value + " " + InvisibleText.getStaticId("sap.ui.unified", "APPOINTMENT_TENTATIVE");
589
+ aLabelledByIds.push(InvisibleText.getStaticId("sap.ui.unified", "APPOINTMENT_TENTATIVE"));
590
+ mAccProps["labelledby"].value = aLabelledByIds.join(" ");
586
591
  }
587
592
 
588
593
  if (iRowCount === 1) {
@@ -78,7 +78,7 @@ sap.ui.define([
78
78
  * @class
79
79
  * Calendar with granularity of time items displayed in one line.
80
80
  * @extends sap.ui.core.Control
81
- * @version 1.147.1
81
+ * @version 1.149.0
82
82
  *
83
83
  * @constructor
84
84
  * @public
@@ -269,17 +269,10 @@ sap.ui.define([
269
269
  };
270
270
 
271
271
  CalendarTimeInterval.prototype._initializeHeader = function() {
272
- var oHeader = new Header(this.getId() + "--Head"),
273
- oResourceBundle = Library.getResourceBundleFor("sap.m");
272
+ var oHeader = new Header(this.getId() + "--Head");
274
273
  oHeader.attachEvent("pressPrevious", this._handlePrevious, this);
275
274
  oHeader.attachEvent("pressNext", this._handleNext, this);
276
275
  this.setAggregation("header", oHeader);
277
-
278
- if (oHeader) {
279
- oHeader.setAriaLabelButton0(oResourceBundle.getText("DATETIMEPICKER_DATE"));
280
- oHeader.setAriaLabelButton1(oResourceBundle.getText("MOBISCROLL_MONTH"));
281
- oHeader.setAriaLabelButton2(oResourceBundle.getText("MOBISCROLL_YEAR"));
282
- }
283
276
  };
284
277
 
285
278
  CalendarTimeInterval.prototype._initializeTimesRow = function() {
@@ -1575,21 +1568,25 @@ sap.ui.define([
1575
1568
 
1576
1569
  var iMonth = oStartDate.getUTCMonth();
1577
1570
  sText = aMonthNames[iMonth];
1578
- if (bShort) {
1579
- sAriaLabel = aMonthNamesWide[aMonthNames[iMonth]];
1580
- }
1581
1571
 
1572
+ var oResourceBundle = Library.getResourceBundleFor("sap.m");
1582
1573
  if (!this.getPickerPopup()) {
1574
+ var iYear = this._oYearFormat.format(oStartDate, true);
1583
1575
  oHeader.setTextButton0(aDay);
1584
1576
  oHeader.setTextButton1(sText);
1585
- oHeader.setTextButton2(this._oYearFormat.format(oStartDate, true));
1577
+ oHeader.setTextButton2(iYear);
1578
+ oHeader.setAriaLabelButton0(`${oResourceBundle.getText("DATETIMEPICKER_DATE")} ${aDay}`);
1579
+ oHeader.setAriaLabelButton1(`${oResourceBundle.getText("MOBISCROLL_MONTH")} ${sText}`);
1580
+ oHeader.setAriaLabelButton2(`${oResourceBundle.getText("MOBISCROLL_YEAR")} ${iYear}`);
1586
1581
  } else {
1587
1582
  oDateFormat = DateFormat.getInstance({style: "long", strictParsing: true, relative: bRelative}, oLocaleData.oLocale);
1588
1583
  sAriaLabel = aDay = oDateFormat.format(CalendarUtils._createLocalDate(oStartDate, true));
1589
1584
  oHeader.setTextButton1(aDay);
1585
+ oHeader.setAriaLabelButton1(sAriaLabel);
1590
1586
  }
1591
1587
 
1592
1588
  if (bShort) {
1589
+ sAriaLabel = aMonthNamesWide[aMonthNames[iMonth]];
1593
1590
  oHeader.setAriaLabelButton1(sAriaLabel);
1594
1591
  }
1595
1592
  }
@@ -39,7 +39,7 @@ sap.ui.define(['sap/ui/unified/calendar/CalendarUtils', 'sap/ui/unified/calendar
39
39
  * its start date to the first date of the same week as the date the user chose.
40
40
  *
41
41
  * @extends sap.ui.unified.CalendarDateInterval
42
- * @version 1.147.1
42
+ * @version 1.149.0
43
43
  *
44
44
  * @constructor
45
45
  * @private
@@ -72,7 +72,7 @@ sap.ui.define([
72
72
  * @extends sap.ui.core.Control
73
73
  *
74
74
  * @author SAP SE
75
- * @version 1.147.1
75
+ * @version 1.149.0
76
76
  *
77
77
  * @constructor
78
78
  * @public
@@ -49,7 +49,7 @@ sap.ui.define([
49
49
  * A thin wrapper over {@link sap.ui.unified.ColorPicker} allowing the latter to be used in a popover.
50
50
  *
51
51
  * @extends sap.ui.core.Control
52
- * @version 1.147.1
52
+ * @version 1.149.0
53
53
  *
54
54
  * @constructor
55
55
  * @public
@@ -31,7 +31,7 @@ sap.ui.define([
31
31
  * @extends sap.ui.core.Control
32
32
  *
33
33
  * @author SAP SE
34
- * @version 1.147.1
34
+ * @version 1.149.0
35
35
  *
36
36
  * @constructor
37
37
  * @public
@@ -58,7 +58,7 @@ sap.ui.define([
58
58
  * @extends sap.ui.core.Control
59
59
  *
60
60
  * @author SAP SE
61
- * @version 1.147.1
61
+ * @version 1.149.0
62
62
  *
63
63
  * @constructor
64
64
  * @public
@@ -14,7 +14,7 @@ sap.ui.define(["sap/m/library", "sap/ui/core/Lib"],
14
14
  /**
15
15
  * Currency renderer.
16
16
  *
17
- * @version 1.147.1
17
+ * @version 1.149.0
18
18
  * @namespace
19
19
  */
20
20
  var CurrencyRenderer = {
@@ -20,7 +20,7 @@ sap.ui.define(['sap/ui/core/Element', './library', 'sap/ui/unified/calendar/Cale
20
20
  * @class
21
21
  * Date range for use in DatePicker
22
22
  * @extends sap.ui.core.Element
23
- * @version 1.147.1
23
+ * @version 1.149.0
24
24
  *
25
25
  * @constructor
26
26
  * @public
@@ -25,7 +25,7 @@ sap.ui.define(['./DateRange', './library'],
25
25
  * @class
26
26
  * Date range with calendar day type information. Used to visualize special days in the Calendar.
27
27
  * @extends sap.ui.unified.DateRange
28
- * @version 1.147.1
28
+ * @version 1.149.0
29
29
  *
30
30
  * @constructor
31
31
  * @public
@@ -79,7 +79,7 @@ sap.ui.define([
79
79
  * @implements sap.ui.core.IFormContent, sap.ui.unified.IProcessableBlobs
80
80
  *
81
81
  * @author SAP SE
82
- * @version 1.147.1
82
+ * @version 1.149.0
83
83
  *
84
84
  * @constructor
85
85
  * @public
@@ -889,9 +889,10 @@ sap.ui.define([
889
889
 
890
890
  /**
891
891
  * Synchronizes tokenizer content with the list of selected file names.
892
+ * @param {boolean} [bFocus] Set to true to focus the file uploader after the next rendering
892
893
  * @private
893
894
  */
894
- FileUploader.prototype._updateTokenizer = function() {
895
+ FileUploader.prototype._updateTokenizer = function(bFocus) {
895
896
  const oTokenizer = this._getTokenizer();
896
897
 
897
898
  // Remove all existing tokens
@@ -906,7 +907,9 @@ sap.ui.define([
906
907
  }));
907
908
  });
908
909
 
909
- this._bFocusFileUploader = true;
910
+ if (bFocus) {
911
+ this._bFocusFileUploader = true;
912
+ }
910
913
  };
911
914
 
912
915
  /**
@@ -1304,8 +1307,18 @@ sap.ui.define([
1304
1307
  this.oBrowse.setType(sButtonType);
1305
1308
  };
1306
1309
 
1310
+ /**
1311
+ * Checks whether the control is currently focused.
1312
+
1313
+ * @returns {boolean} true if <code>this</code> is focused
1314
+ * @private
1315
+ */
1316
+ FileUploader.prototype._isFocused = function() {
1317
+ return containsOrEquals(this.getDomRef(), document.activeElement);
1318
+ };
1319
+
1307
1320
  FileUploader.prototype.setValueState = function(sValueState) {
1308
- const bControlFocused = containsOrEquals(this.getDomRef(), document.activeElement);
1321
+ const bControlFocused = this._isFocused();
1309
1322
 
1310
1323
  this.setProperty("valueState", sValueState, false);
1311
1324
 
@@ -1396,7 +1409,7 @@ sap.ui.define([
1396
1409
  if (bUpload) {
1397
1410
  this.upload();
1398
1411
  }
1399
- this._updateTokenizer();
1412
+ this._updateTokenizer(this._isFocused());
1400
1413
  }
1401
1414
  return this;
1402
1415
  };
@@ -1915,7 +1928,7 @@ sap.ui.define([
1915
1928
 
1916
1929
  // Update Tokenizer with selected file names
1917
1930
  this._selectedFileNames = aFileNames;
1918
- this._updateTokenizer();
1931
+ this._updateTokenizer(true);
1919
1932
  }
1920
1933
  };
1921
1934
 
@@ -22,7 +22,7 @@ sap.ui.define(['sap/ui/core/Element', './library'],
22
22
  * @extends sap.ui.core.Element
23
23
  *
24
24
  * @author SAP SE
25
- * @version 1.147.1
25
+ * @version 1.149.0
26
26
  *
27
27
  * @constructor
28
28
  * @public
@@ -20,7 +20,7 @@ sap.ui.define(['sap/ui/core/Element', './library'],
20
20
  * @extends sap.ui.core.Element
21
21
  *
22
22
  * @author SAP SE
23
- * @version 1.147.1
23
+ * @version 1.149.0
24
24
  *
25
25
  * @constructor
26
26
  * @since 1.52
@@ -70,7 +70,7 @@ sap.ui.define([
70
70
  * @implements sap.ui.core.IContextMenu
71
71
  *
72
72
  * @author SAP SE
73
- * @version 1.147.1
73
+ * @version 1.149.0
74
74
  * @since 1.21.0
75
75
  *
76
76
  * @constructor
@@ -39,7 +39,7 @@ sap.ui.define([
39
39
  * @implements sap.ui.unified.IMenuItem
40
40
  *
41
41
  * @author SAP SE
42
- * @version 1.147.1
42
+ * @version 1.149.0
43
43
  * @since 1.21.0
44
44
  *
45
45
  * @constructor
@@ -23,7 +23,7 @@ sap.ui.define(['sap/ui/core/Element', './library', 'sap/ui/core/IconPool', 'sap/
23
23
  * @extends sap.ui.core.Element
24
24
  *
25
25
  * @author SAP SE
26
- * @version 1.147.1
26
+ * @version 1.149.0
27
27
  * @since 1.21.0
28
28
  *
29
29
  * @constructor
@@ -30,7 +30,7 @@ sap.ui.define([
30
30
  * @implements sap.ui.unified.IMenuItem
31
31
  *
32
32
  * @author SAP SE
33
- * @version 1.147.1
33
+ * @version 1.149.0
34
34
  * @since 1.127.0
35
35
  *
36
36
  * @constructor
@@ -15,7 +15,7 @@ sap.ui.define(["sap/ui/core/ControlBehavior"],
15
15
  * Menu renderer.
16
16
  * @author SAP - TD Core UI&AM UI Infra
17
17
  *
18
- * @version 1.147.1
18
+ * @version 1.149.0
19
19
  * @namespace
20
20
  */
21
21
  var MenuRenderer = {
@@ -53,7 +53,7 @@ sap.ui.define([
53
53
  * @implements sap.ui.unified.IMenuItem
54
54
  *
55
55
  * @author SAP SE
56
- * @version 1.147.1
56
+ * @version 1.149.0
57
57
  * @since 1.21.0
58
58
  *
59
59
  * @constructor
@@ -0,0 +1,58 @@
1
+ /*!
2
+ * OpenUI5
3
+ * (c) Copyright 2026 SAP SE or an SAP affiliate company.
4
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
+ */
6
+
7
+ // Provides control sap.ui.unified.MonthlyRecurrenceRule.
8
+ sap.ui.define([
9
+ "./RecurrenceRule"
10
+ ], function(RecurrenceRule) {
11
+ "use strict";
12
+
13
+ /**
14
+ * Constructor for a new <code>MonthlyRecurrenceRule</code>.
15
+ *
16
+ * @param {string} [sId] ID for the new element, generated automatically if no ID is given
17
+ * @param {object} [mSettings] Initial settings for the new element
18
+ *
19
+ * @class
20
+ * Concrete recurrence rule for <code>Monthly</code> recurrence.
21
+ * Created internally by the parent when a {@link sap.ui.unified.RecurrenceRule} DTO
22
+ * with <code>recurrenceType</code> set to <code>Monthly</code> is provided.
23
+ *
24
+ * Supports two patterns:
25
+ * <ul>
26
+ * <li><code>DayOfMonth</code> — e.g. "the 15th of each month"</li>
27
+ * <li><code>DayOfWeek</code> — e.g. "second Tuesday of each month"</li>
28
+ * </ul>
29
+ *
30
+ * @extends sap.ui.unified.RecurrenceRule
31
+ * @version 1.149.0
32
+ *
33
+ * @constructor
34
+ * @private
35
+ * @ui5-experimental-since 1.149
36
+ * @alias sap.ui.unified.MonthlyRecurrenceRule
37
+ */
38
+ const MonthlyRecurrenceRule = RecurrenceRule.extend("sap.ui.unified.MonthlyRecurrenceRule", {
39
+ metadata: {
40
+ library: "sap.ui.unified"
41
+ }
42
+ });
43
+
44
+ /**
45
+ * Sets the day of week with validation.
46
+ * @param {int} iDay - Day of week (0-6, 0=Sunday)
47
+ * @returns {this}
48
+ * @private
49
+ */
50
+ MonthlyRecurrenceRule.prototype.setDayOfWeek = function(iDay) {
51
+ if (iDay < 0 || iDay > 6) {
52
+ throw new Error("dayOfWeek must be between 0 (Sunday) and 6 (Saturday)");
53
+ }
54
+ return this.setProperty("dayOfWeek", iDay);
55
+ };
56
+
57
+ return MonthlyRecurrenceRule;
58
+ });
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @class
25
25
  * NonWorkingPeriod
26
26
  * @extends sap.ui.core.Element
27
- * @version 1.147.1
27
+ * @version 1.149.0
28
28
  *
29
29
  * @constructor
30
30
  * @public