@ui5/webcomponents 2.21.0-rc.4 → 2.22.0-rc.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 (127) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/Button.d.ts +11 -0
  4. package/dist/Button.js +3 -0
  5. package/dist/Button.js.map +1 -1
  6. package/dist/Calendar.d.ts +39 -0
  7. package/dist/Calendar.js +109 -3
  8. package/dist/Calendar.js.map +1 -1
  9. package/dist/CalendarHeaderTemplate.d.ts +13 -1
  10. package/dist/CalendarHeaderTemplate.js +48 -12
  11. package/dist/CalendarHeaderTemplate.js.map +1 -1
  12. package/dist/CalendarTemplate.js +58 -2
  13. package/dist/CalendarTemplate.js.map +1 -1
  14. package/dist/Carousel.js +1 -1
  15. package/dist/Carousel.js.map +1 -1
  16. package/dist/DateRangePicker.d.ts +27 -0
  17. package/dist/DateRangePicker.js +57 -3
  18. package/dist/DateRangePicker.js.map +1 -1
  19. package/dist/DateRangePickerTemplate.js +7 -3
  20. package/dist/DateRangePickerTemplate.js.map +1 -1
  21. package/dist/DateTimePicker.js +0 -3
  22. package/dist/DateTimePicker.js.map +1 -1
  23. package/dist/Popup.js +4 -0
  24. package/dist/Popup.js.map +1 -1
  25. package/dist/SliderHandle.d.ts +0 -8
  26. package/dist/SliderHandle.js +0 -11
  27. package/dist/SliderHandle.js.map +1 -1
  28. package/dist/SliderTemplate.js +1 -1
  29. package/dist/SliderTemplate.js.map +1 -1
  30. package/dist/TimePicker.d.ts +3 -2
  31. package/dist/TimePicker.js +1 -0
  32. package/dist/TimePicker.js.map +1 -1
  33. package/dist/css/themes/Breadcrumbs.css +1 -1
  34. package/dist/css/themes/Calendar.css +1 -1
  35. package/dist/css/themes/DatePickerPopover.css +1 -1
  36. package/dist/css/themes/Popup.css +1 -1
  37. package/dist/css/themes/ResponsivePopoverCommon.css +1 -1
  38. package/dist/css/themes/sap_fiori_3/parameters-bundle.css +1 -1
  39. package/dist/css/themes/sap_fiori_3_dark/parameters-bundle.css +1 -1
  40. package/dist/css/themes/sap_fiori_3_hcb/parameters-bundle.css +1 -1
  41. package/dist/css/themes/sap_fiori_3_hcw/parameters-bundle.css +1 -1
  42. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -1
  43. package/dist/css/themes/sap_horizon_auto/parameters-bundle.css +8 -0
  44. package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -1
  45. package/dist/css/themes/sap_horizon_hc_auto/parameters-bundle.css +13 -1
  46. package/dist/css/themes/sap_horizon_hcb/parameters-bundle.css +1 -1
  47. package/dist/css/themes/sap_horizon_hcw/parameters-bundle.css +1 -1
  48. package/dist/custom-elements-internal.json +84 -23
  49. package/dist/custom-elements.json +76 -19
  50. package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
  51. package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
  52. package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -1
  53. package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -1
  54. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  55. package/dist/generated/assets/themes/sap_horizon_auto/parameters-bundle.css.json +1 -1
  56. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  57. package/dist/generated/assets/themes/sap_horizon_hc_auto/parameters-bundle.css.json +1 -1
  58. package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
  59. package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
  60. package/dist/generated/i18n/i18n-defaults.d.ts +3 -1
  61. package/dist/generated/i18n/i18n-defaults.js +3 -1
  62. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  63. package/dist/generated/themes/Breadcrumbs.css.d.ts +1 -1
  64. package/dist/generated/themes/Breadcrumbs.css.js +1 -1
  65. package/dist/generated/themes/Breadcrumbs.css.js.map +1 -1
  66. package/dist/generated/themes/Calendar.css.d.ts +1 -1
  67. package/dist/generated/themes/Calendar.css.js +1 -1
  68. package/dist/generated/themes/Calendar.css.js.map +1 -1
  69. package/dist/generated/themes/DatePickerPopover.css.d.ts +1 -1
  70. package/dist/generated/themes/DatePickerPopover.css.js +1 -1
  71. package/dist/generated/themes/DatePickerPopover.css.js.map +1 -1
  72. package/dist/generated/themes/Popup.css.d.ts +1 -1
  73. package/dist/generated/themes/Popup.css.js +1 -1
  74. package/dist/generated/themes/Popup.css.js.map +1 -1
  75. package/dist/generated/themes/ResponsivePopoverCommon.css.d.ts +1 -1
  76. package/dist/generated/themes/ResponsivePopoverCommon.css.js +1 -1
  77. package/dist/generated/themes/ResponsivePopoverCommon.css.js.map +1 -1
  78. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.d.ts +1 -1
  79. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  80. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js.map +1 -1
  81. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.d.ts +1 -1
  82. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  83. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js.map +1 -1
  84. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.d.ts +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_hcb/parameters-bundle.css.js.map +1 -1
  87. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.d.ts +1 -1
  88. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -1
  89. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js.map +1 -1
  90. package/dist/generated/themes/sap_horizon/parameters-bundle.css.d.ts +1 -1
  91. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  92. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
  93. package/dist/generated/themes/sap_horizon_auto/parameters-bundle.css.d.ts +1 -1
  94. package/dist/generated/themes/sap_horizon_auto/parameters-bundle.css.js +8 -0
  95. package/dist/generated/themes/sap_horizon_auto/parameters-bundle.css.js.map +1 -1
  96. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.d.ts +1 -1
  97. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
  98. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js.map +1 -1
  99. package/dist/generated/themes/sap_horizon_hc_auto/parameters-bundle.css.d.ts +1 -1
  100. package/dist/generated/themes/sap_horizon_hc_auto/parameters-bundle.css.js +13 -1
  101. package/dist/generated/themes/sap_horizon_hc_auto/parameters-bundle.css.js.map +1 -1
  102. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.d.ts +1 -1
  103. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -1
  104. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js.map +1 -1
  105. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.d.ts +1 -1
  106. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -1
  107. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js.map +1 -1
  108. package/dist/vscode.html-custom-data.json +20 -5
  109. package/dist/web-types.json +41 -11
  110. package/package.json +9 -9
  111. package/src/CalendarHeaderTemplate.tsx +148 -77
  112. package/src/CalendarTemplate.tsx +203 -66
  113. package/src/DateRangePickerTemplate.tsx +29 -1
  114. package/src/SliderTemplate.tsx +0 -1
  115. package/src/i18n/messagebundle.properties +6 -0
  116. package/src/themes/Breadcrumbs.css +7 -6
  117. package/src/themes/Calendar.css +144 -0
  118. package/src/themes/DatePickerPopover.css +3 -2
  119. package/src/themes/Popup.css +4 -0
  120. package/src/themes/ResponsivePopoverCommon.css +6 -1
  121. package/src/themes/base/CalendarHeader-parameters.css +9 -0
  122. package/src/themes/base/TextArea-parameters.css +1 -1
  123. package/src/themes/base/sizes-parameters.css +12 -0
  124. package/src/themes/sap_horizon/TextArea-parameters.css +0 -1
  125. package/src/themes/sap_horizon_dark/TextArea-parameters.css +0 -1
  126. package/src/themes/sap_horizon_hcb/parameters-bundle.css +1 -0
  127. package/src/themes/sap_horizon_hcw/parameters-bundle.css +1 -0
@@ -7,18 +7,148 @@ import CalendarHeaderTemplate from "./CalendarHeaderTemplate.js";
7
7
  import CalendarSelectionMode from "./types/CalendarSelectionMode.js";
8
8
 
9
9
  export default function CalendarTemplate(this: Calendar) {
10
+ const showMultipleMonths = this._monthsToShow > 1 && !this._isDayPickerHidden;
11
+ const shouldRenderSeparateHeaders = this._isDefaultHeaderModeInMultipleMonths && !this._portraitView && !this._isCompactMode;
12
+ const shouldRenderInlineHeaders = this._isDefaultHeaderModeInMultipleMonths && (this._portraitView || this._isCompactMode);
13
+
10
14
  return (
11
15
  <>
12
16
  <div
13
- class="ui5-cal-root"
17
+ class={{
18
+ "ui5-cal-root": true,
19
+ "ui5-dt-cal--mobile": this._phoneView,
20
+ "ui5-dt-cal--portrait": this._portraitView,
21
+ "ui5-dt-cal--multiple": showMultipleMonths,
22
+ }}
14
23
  onKeyDown={this._onkeydown}
15
24
  >
16
- <div class="ui5-calheader" exportparts="calendar-header-arrow-button, calendar-header-middle-button">
17
- { CalendarHeaderTemplate.call(this) }
25
+ {!showMultipleMonths && (
26
+ <div class="ui5-calheader" exportparts="calendar-header-arrow-button, calendar-header-middle-button">
27
+ { CalendarHeaderTemplate.call(this) }
28
+ </div>
29
+ )}
30
+ <div id={`${this._id}-content`} class={{
31
+ "ui5-cal-content": true,
32
+ "ui5-cal-content-multiple": showMultipleMonths,
33
+ }}>
34
+ {showMultipleMonths ? (
35
+ <>
36
+ {/* When pickers are active, show standard calendar header */}
37
+ {this._shouldShowOnePickerHeaderButtonInMultipleMonths && (
38
+ <div class="ui5-calheader ui5-calheader-multiple ui5-calheader-default-multiple" exportparts="calendar-header-arrow-button, calendar-header-middle-button">
39
+ { CalendarHeaderTemplate.call(this) }
40
+ </div>
41
+ )}
42
+
43
+ <div class="ui5-cal-daypicker-overlay"></div>
44
+
45
+ {/* Render headers in separate loop when in horizontal layout (cozy mode, not portrait, not compact) */}
46
+ {shouldRenderSeparateHeaders && (
47
+ <div class="ui5-cal-multiple-months-header-wrapper">
48
+ {renderMonthHeaders.call(this)}
49
+ </div>
50
+ )}
51
+
52
+ {/* Render day pickers (with inline headers in vertical layout) */}
53
+ <div class="ui5-cal-multiple-months-wrapper">
54
+ {renderMonthPickers.call(this, shouldRenderInlineHeaders)}
55
+ </div>
56
+ </>
57
+ ) : (
58
+ <>
59
+ <DayPicker
60
+ id={`${this._id}-daypicker`}
61
+ hidden={this._isDayPickerHidden}
62
+ formatPattern={this._formatPattern}
63
+ selectedDates={this._selectedDatesTimestamps}
64
+ specialCalendarDates={this._specialCalendarDates}
65
+ disabledDates={this._disabledDates}
66
+ _hidden={this._isDayPickerHidden}
67
+ primaryCalendarType={this._primaryCalendarType}
68
+ secondaryCalendarType={this._secondaryCalendarType}
69
+ selectionMode={this.selectionMode}
70
+ minDate={this.minDate}
71
+ maxDate={this.maxDate}
72
+ calendarWeekNumbering={this.calendarWeekNumbering}
73
+ timestamp={this._timestamp}
74
+ hideWeekNumbers={this.hideWeekNumbers}
75
+ onChange={this.onSelectedDatesChange}
76
+ onNavigate={this.onNavigate}
77
+ exportparts="day-cell, day-cell-selected, day-cell-selected-between"
78
+ />
79
+ {renderMonthPicker.call(this)}
80
+ {renderYearPicker.call(this)}
81
+ {renderYearRangePicker.call(this)}
82
+ </>
83
+ )}
18
84
  </div>
19
- <div id={`${this._id}-content`} class="ui5-cal-content">
85
+
86
+ {showMultipleMonths && (
87
+ <div class={{
88
+ "ui5-cal-overlay-container": true,
89
+ "ui5-cal-overlay-hidden": this._isMonthPickerHidden && this._isYearPickerHidden && this._isYearRangePickerHidden,
90
+ }}>
91
+ {renderMonthPicker.call(this)}
92
+ {renderYearPicker.call(this)}
93
+ {renderYearRangePicker.call(this)}
94
+ </div>
95
+ )}
96
+ </div>
97
+
98
+ <div
99
+ onui5-calendar-legend-selection-change={this._onCalendarLegendSelectionChange}
100
+ onui5-calendar-legend-focus-out={this._onLegendFocusOut}
101
+ >
102
+ <slot name="calendarLegend"></slot>
103
+ </div>
104
+ </>);
105
+ }
106
+
107
+ /**
108
+ * Renders month headers in a separate loop (horizontal layout)
109
+ */
110
+ function renderMonthHeaders(this: Calendar) {
111
+ return Array.from({ length: this._monthsToShow }, (_, index) => {
112
+ const monthTimestamp = this._getMonthTimestamp(index);
113
+ const isFirst = index === 0;
114
+ const isLast = index === this._monthsToShow - 1;
115
+
116
+ return (
117
+ <div key={`calendar-month-header-${index}`} class="ui5-cal-month-header-container">
118
+ {CalendarHeaderTemplate.call(this, {
119
+ headerText: this._getHeaderTextForMonth(monthTimestamp),
120
+ isFirst,
121
+ isLast,
122
+ isMultiple: true,
123
+ })}
124
+ </div>
125
+ );
126
+ });
127
+ }
128
+
129
+ /**
130
+ * Renders month pickers (with optional inline headers for vertical layout)
131
+ */
132
+ function renderMonthPickers(this: Calendar, shouldRenderInlineHeaders: boolean) {
133
+ return Array.from({ length: this._monthsToShow }, (_, index) => {
134
+ const monthTimestamp = this._getMonthTimestamp(index);
135
+ const isFirst = index === 0;
136
+ const isLast = index === this._monthsToShow - 1;
137
+
138
+ return (
139
+ <div key={`calendar-month-picker-${index}`} class="ui5-cal-month-container">
140
+ {/* Render header inline when in vertical layout (portrait OR compact) */}
141
+ {shouldRenderInlineHeaders &&
142
+ CalendarHeaderTemplate.call(this, {
143
+ headerText: this._getHeaderTextForMonth(monthTimestamp),
144
+ isFirst,
145
+ isLast,
146
+ isMultiple: true,
147
+ })
148
+ }
149
+ <div class="ui5-cal-daypicker-wrapper">
20
150
  <DayPicker
21
- id={`${this._id}-daypicker`}
151
+ id={`${this._id}-daypicker-${index}`}
22
152
  hidden={this._isDayPickerHidden}
23
153
  formatPattern={this._formatPattern}
24
154
  selectedDates={this._selectedDatesTimestamps}
@@ -31,73 +161,80 @@ export default function CalendarTemplate(this: Calendar) {
31
161
  minDate={this.minDate}
32
162
  maxDate={this.maxDate}
33
163
  calendarWeekNumbering={this.calendarWeekNumbering}
34
- timestamp={this._timestamp}
164
+ timestamp={monthTimestamp}
35
165
  hideWeekNumbers={this.hideWeekNumbers}
36
166
  onChange={this.onSelectedDatesChange}
37
167
  onNavigate={this.onNavigate}
38
168
  exportparts="day-cell, day-cell-selected, day-cell-selected-between"
39
- />
40
-
41
- <MonthPicker
42
- id={`${this._id}-MP`}
43
- hidden={this._isMonthPickerHidden}
44
- formatPattern={this._formatPattern}
45
- selectedDates={this._selectedDatesTimestamps}
46
- _hidden={this._isMonthPickerHidden}
47
- primaryCalendarType={this._primaryCalendarType}
48
- secondaryCalendarType={this._secondaryCalendarType}
49
- selectionMode={this.selectionMode}
50
- minDate={this.minDate}
51
- maxDate={this.maxDate}
52
- timestamp={this._timestamp}
53
- onChange={this.onSelectedMonthChange}
54
- onNavigate={this.onNavigate}
55
- exportparts="month-cell, month-cell-selected, month-cell-selected-between, month-picker-root"
56
- />
57
-
58
- <YearPicker
59
- id={`${this._id}-YP`}
60
- hidden={this._isYearPickerHidden}
61
- formatPattern={this._formatPattern}
62
- selectedDates={this._selectedDatesTimestamps}
63
- _hidden={this._isYearPickerHidden}
64
- primaryCalendarType={this._primaryCalendarType}
65
- secondaryCalendarType={this._secondaryCalendarType}
66
- selectionMode={this.selectionMode}
67
- minDate={this.minDate}
68
- maxDate={this.maxDate}
69
- timestamp={this._timestamp}
70
- _currentYearRange = {this._currentYearRange}
71
- onChange={this.onSelectedYearChange}
72
- onNavigate={this.onNavigate}
73
- exportparts="year-cell, year-cell-selected, year-cell-selected-between, year-picker-root"
74
- />
75
-
76
- <YearRangePicker
77
- id={`${this._id}-YRP`}
78
- hidden={this._isYearRangePickerHidden}
79
- formatPattern={this._formatPattern}
80
- selectedDates={this._selectedDatesTimestamps}
81
- _showRangeSelection={this.selectionMode === CalendarSelectionMode.Range}
82
- _hidden={this._isYearRangePickerHidden}
83
- primaryCalendarType={this._primaryCalendarType}
84
- secondaryCalendarType={this._secondaryCalendarType}
85
- minDate={this.minDate}
86
- maxDate={this.maxDate}
87
- timestamp={this._timestamp}
88
- _currentYearRange = {this._currentYearRange}
89
- onChange={this.onSelectedYearRangeChange}
90
- onNavigate={this.onNavigate}
91
- exportparts="year-range-cell, year-range-cell-selected, year-range-cell-selected-between, year-range-picker-root"
169
+ inert={this._inert}
92
170
  />
93
171
  </div>
94
172
  </div>
173
+ );
174
+ });
175
+ }
95
176
 
96
- <div
97
- onui5-calendar-legend-selection-change={this._onCalendarLegendSelectionChange}
98
- onui5-calendar-legend-focus-out={this._onLegendFocusOut}
99
- >
100
- <slot name="calendarLegend"></slot>
101
- </div>
102
- </>);
177
+ function renderMonthPicker(this: Calendar) {
178
+ return (
179
+ <MonthPicker
180
+ id={`${this._id}-MP`}
181
+ hidden={this._isMonthPickerHidden}
182
+ formatPattern={this._formatPattern}
183
+ selectedDates={this._selectedDatesTimestamps}
184
+ _hidden={this._isMonthPickerHidden}
185
+ primaryCalendarType={this._primaryCalendarType}
186
+ secondaryCalendarType={this._secondaryCalendarType}
187
+ selectionMode={this.selectionMode}
188
+ minDate={this.minDate}
189
+ maxDate={this.maxDate}
190
+ timestamp={this._timestamp}
191
+ onChange={this.onSelectedMonthChange}
192
+ onNavigate={this.onNavigate}
193
+ exportparts="month-cell, month-cell-selected, month-cell-selected-between, month-picker-root"
194
+ />
195
+ );
196
+ }
197
+
198
+ function renderYearPicker(this: Calendar) {
199
+ return (
200
+ <YearPicker
201
+ id={`${this._id}-YP`}
202
+ hidden={this._isYearPickerHidden}
203
+ formatPattern={this._formatPattern}
204
+ selectedDates={this._selectedDatesTimestamps}
205
+ _hidden={this._isYearPickerHidden}
206
+ primaryCalendarType={this._primaryCalendarType}
207
+ secondaryCalendarType={this._secondaryCalendarType}
208
+ selectionMode={this.selectionMode}
209
+ minDate={this.minDate}
210
+ maxDate={this.maxDate}
211
+ timestamp={this._timestamp}
212
+ _currentYearRange = {this._currentYearRange}
213
+ onChange={this.onSelectedYearChange}
214
+ onNavigate={this.onNavigate}
215
+ exportparts="year-cell, year-cell-selected, year-cell-selected-between, year-picker-root"
216
+ />
217
+ );
218
+ }
219
+
220
+ function renderYearRangePicker(this: Calendar) {
221
+ return (
222
+ <YearRangePicker
223
+ id={`${this._id}-YRP`}
224
+ hidden={this._isYearRangePickerHidden}
225
+ formatPattern={this._formatPattern}
226
+ selectedDates={this._selectedDatesTimestamps}
227
+ _showRangeSelection={this.selectionMode === CalendarSelectionMode.Range}
228
+ _hidden={this._isYearRangePickerHidden}
229
+ primaryCalendarType={this._primaryCalendarType}
230
+ secondaryCalendarType={this._secondaryCalendarType}
231
+ minDate={this.minDate}
232
+ maxDate={this.maxDate}
233
+ timestamp={this._timestamp}
234
+ _currentYearRange = {this._currentYearRange}
235
+ onChange={this.onSelectedYearRangeChange}
236
+ onNavigate={this.onNavigate}
237
+ exportparts="year-range-cell, year-range-cell-selected, year-range-cell-selected-between, year-range-picker-root"
238
+ />
239
+ );
103
240
  }
@@ -4,11 +4,12 @@ import type DateRangePicker from "./DateRangePicker.js";
4
4
 
5
5
  import DatePickerInputTemplate from "./DatePickerInputTemplate.js";
6
6
  import DatePickerPopoverTemplate from "./DatePickerPopoverTemplate.js";
7
+ import Button from "./Button.js";
7
8
 
8
9
  export default function DateRangePickerTemplate(this: DateRangePicker) {
9
10
  return [
10
11
  DatePickerInputTemplate.call(this),
11
- DatePickerPopoverTemplate.call(this, { content, initialFocus: this.initialFocusId }),
12
+ DatePickerPopoverTemplate.call(this, { content, initialFocus: this.initialFocusId, footer: this._isPhone ? footer : undefined }),
12
13
  ];
13
14
  }
14
15
 
@@ -29,8 +30,35 @@ function content(this: DateRangePicker) {
29
30
  hideWeekNumbers={this.hideWeekNumbers}
30
31
  _currentPicker={this._calendarCurrentPicker}
31
32
  _pickersMode={this._calendarPickersMode}
33
+ _showTwoMonths={this.showTwoMonths}
32
34
  >
33
35
  <CalendarDateRange startValue={this.startValue} endValue={this.endValue} />
34
36
  </Calendar>
35
37
  );
36
38
  }
39
+
40
+ function footer(this: DateRangePicker) {
41
+ return (
42
+ <div
43
+ slot="footer"
44
+ class="ui5-dt-picker-footer">
45
+ <Button
46
+ id="ok"
47
+ class="ui5-dt-picker-action"
48
+ design="Emphasized"
49
+ disabled={this._submitDisabled}
50
+ onClick={this._submitClick}
51
+ >
52
+ {this._okButtonText}
53
+ </Button>
54
+ <Button
55
+ id="cancel"
56
+ class="ui5-dt-picker-action"
57
+ design="Transparent"
58
+ onClick={this._cancelClick}
59
+ >
60
+ {this._cancelButtonText}
61
+ </Button>
62
+ </div>
63
+ );
64
+ }
@@ -20,7 +20,6 @@ const handle = (slider: Slider) => {
20
20
  min={slider.min}
21
21
  max={slider.max}
22
22
  tabIndex={slider.disabled ? -1 : 0}
23
- disabled={slider.disabled}
24
23
  aria-orientation="horizontal"
25
24
  part="handle"
26
25
  exportparts="icon: handle-icon"
@@ -706,6 +706,12 @@ CALENDAR_HEADER_YEAR_BUTTON = Year {0}
706
706
  #XACT: ARIA label for year range button in the Calendar Header
707
707
  CALENDAR_HEADER_YEAR_RANGE_BUTTON = Year range from {0} to {1}
708
708
 
709
+ #XACT: text that is used in the daterange calendar footer cancel button in mobile devices
710
+ CALENDAR_FOOTER_CANCEL_BUTTON = Cancel
711
+
712
+ #XACT: text that is used in the daterange calendar footer ok button in mobile devices
713
+ CALENDAR_FOOTER_OK_BUTTON = OK
714
+
709
715
  #XACT: Keyboard shortcut for month button in the Calendar Header
710
716
  CALENDAR_HEADER_MONTH_BUTTON_SHORTCUT = F4
711
717
 
@@ -51,7 +51,7 @@
51
51
  width: var(--sapFontSize);
52
52
  height: var(--sapFontSize);
53
53
  padding-left: .675rem;
54
- vertical-align: text-top;
54
+ vertical-align: middle;
55
55
  color: var(--sapLinkColor);
56
56
  }
57
57
 
@@ -61,10 +61,11 @@
61
61
 
62
62
  .ui5-breadcrumbs-dropdown-arrow-link-wrapper [ui5-icon]::before {
63
63
  content: "...";
64
- vertical-align: middle;
65
64
  position: absolute;
66
65
  left: 0;
67
- bottom: 0;
66
+ top: 0.1rem;
67
+ line-height: 1rem;
68
+ vertical-align: middle;
68
69
  }
69
70
 
70
71
  .ui5-breadcrumbs-dropdown-arrow-link-wrapper [ui5-link]::part(root),
@@ -78,11 +79,11 @@
78
79
  .ui5-breadcrumbs-dropdown-arrow-link-wrapper:hover [ui5-icon]::after {
79
80
  content: "";
80
81
  position: absolute;
81
- border-bottom: 0.0625rem solid;
82
- top: 0;
82
+ height: 0.0725rem;
83
+ background-color: currentColor;
83
84
  left: 0;
84
- bottom: 1px;
85
85
  right: 0;
86
+ bottom: 0.3475rem;
86
87
  }
87
88
 
88
89
  .ui5-breadcrumbs-popover {
@@ -17,8 +17,152 @@
17
17
  display: flex;
18
18
  flex-direction: column;
19
19
  overflow: hidden;
20
+ position: relative;
21
+ }
22
+
23
+ .ui5-dt-cal--multiple.ui5-cal-root {
24
+ width: var(--_ui5_calendar_multiple_width);
25
+ height: var(--_ui5_calendar_multiple_months_height);
26
+ }
27
+
28
+ .ui5-dt-cal--portrait.ui5-dt-cal--multiple {
29
+ height: calc(2 * var(--_ui5_calendar_height));
20
30
  }
21
31
 
22
32
  .ui5-cal-root .ui5-cal-content {
23
33
  padding: 0 var(--_ui5_calendar_left_right_padding) var(--_ui5_calendar_top_bottom_padding);
34
+ }
35
+
36
+ .ui5-cal-root .ui5-cal-content-multiple {
37
+ display: flex;
38
+ flex-direction: column;
39
+ gap: 0;
40
+ flex-wrap: nowrap;
41
+ overflow: visible;
42
+ }
43
+
44
+ .ui5-cal-multiple-months-wrapper, .ui5-cal-multiple-months-header-wrapper {
45
+ display: flex;
46
+ gap: var(--_ui5_calendar_multiple_gap);
47
+ flex-wrap: nowrap;
48
+ flex-direction: var(--_ui5_calendar_multiple_layout);
49
+ }
50
+
51
+ .ui5-cal-multiple-months-header-wrapper {
52
+ width: 100%;
53
+ }
54
+
55
+ .ui5-cal-month-container, .ui5-cal-month-header-container {
56
+ display: flex;
57
+ flex-direction: column;
58
+ flex: 1;
59
+ }
60
+
61
+ .ui5-cal-root .ui5-calheader.ui5-calheader-multiple {
62
+ display: flex;
63
+ justify-content: space-between;
64
+ align-items: center;
65
+ height: var(--_ui5_calendar_header_height);
66
+ padding: var(--_ui5_calendar_header_padding);
67
+ box-sizing: border-box;
68
+ }
69
+
70
+ .ui5-calheader-multiple .ui5-calheader-midcontainer {
71
+ display: flex;
72
+ gap: var(--_ui5_calendar_header_midcontainer_gap);
73
+ flex: 1;
74
+ justify-content: center;
75
+ padding: 0;
76
+ height: 100%;
77
+ }
78
+
79
+ .ui5-calheader-multiple .ui5-calheader-arrowbtn {
80
+ flex-shrink: var(--_ui5_calendar_header_arrow_button_flex_shrink);
81
+ height: 100%;
82
+ }
83
+
84
+ .ui5-calheader-spacer {
85
+ width: var(--_ui5_calendar_header_arrow_button_width);
86
+ flex-shrink: 0;
87
+ }
88
+
89
+ .ui5-cal-daypicker-wrapper {
90
+ position: relative;
91
+ }
92
+
93
+ .ui5-cal-daypicker-overlay {
94
+ background-color: var(--sapBlockLayer_Background);
95
+ opacity: var(--sapBlockLayer_Opacity);
96
+ top: calc(var(--_ui5_calendar_header_height) + var(--_ui5_calendar_top_bottom_padding));
97
+ left: 0;
98
+ right: 0;
99
+ bottom: 0;
100
+ position: absolute;
101
+ outline: 0 none;
102
+ z-index: 11;
103
+ pointer-events: all;
104
+ display: none;
105
+ }
106
+
107
+ .ui5-cal-content-multiple:has(~ .ui5-cal-overlay-container:not(.ui5-cal-overlay-hidden)) .ui5-cal-daypicker-overlay {
108
+ display: block;
109
+ }
110
+
111
+ .ui5-cal-overlay-container {
112
+ position: absolute;
113
+ width: var(--_ui5_calendar_overlay_width);
114
+ left: 50%;
115
+ top: var(--_ui5_calendar_overlay_top);
116
+ transform: translate(-50%, -50%);
117
+ display: flex;
118
+ align-items: center;
119
+ justify-content: center;
120
+ z-index: 13;
121
+ pointer-events: all;
122
+ background: var(--sapGroup_ContentBackground);
123
+ border-radius: var(--_ui5_popup_border_radius);
124
+ min-height: 2rem;
125
+ box-sizing: border-box;
126
+ }
127
+
128
+
129
+ .ui5-cal-overlay-container [ui5-monthpicker]::part(month-picker-root),
130
+ .ui5-cal-overlay-container [ui5-yearpicker]::part(year-picker-root),
131
+ .ui5-cal-overlay-container [ui5-yearrangepicker]::part(year-range-picker-root) {
132
+ padding: 0.5rem;
133
+ }
134
+
135
+ .ui5-cal-overlay-hidden {
136
+ display: none;
137
+ }
138
+
139
+ .ui5-calheader-default-multiple, .ui5-calheader-default-multiple .ui5-calheader-root {
140
+ width: 100%;
141
+ }
142
+
143
+ .ui5-calheader-multiple .ui5-calheader-middlebtn {
144
+ flex:none;
145
+ }
146
+
147
+ .ui5-cal-root.ui5-dt-cal--portrait .ui5-cal-content-multiple {
148
+ gap: 0;
149
+ }
150
+
151
+ .ui5-cal-root.ui5-dt-cal--portrait .ui5-cal-multiple-months-wrapper {
152
+ flex-direction: column;
153
+ gap: var(--_ui5_calendar_multiple_gap);
154
+ }
155
+
156
+ .ui5-dt-cal--portrait.ui5-cal-root:has(.ui5-cal-content-multiple) {
157
+ width: var(--_ui5_calendar_width);
158
+ }
159
+
160
+ .ui5-dt-cal--portrait .ui5-cal-content-multiple > * {
161
+ width: 100%;
162
+ min-width: auto;
163
+ max-width: 100%;
164
+ }
165
+
166
+ .ui5-dt-cal--portrait .ui5-cal-overlay-container {
167
+ width: 100%;
24
168
  }
@@ -1,5 +1,6 @@
1
1
  .ui5-date-picker-popover {
2
- width: var(--_ui5_calendar_width);
2
+ width: auto;
3
+ min-width: var(--_ui5_calendar_width);
3
4
  .ui5-popover-header {
4
5
  width: 100%;
5
6
  }
@@ -13,7 +14,7 @@
13
14
  }
14
15
 
15
16
  [ui5-calendar] {
16
- width: 100%;
17
+ width: auto;
17
18
  display: flex;
18
19
  justify-content: center;
19
20
  }
@@ -9,4 +9,8 @@
9
9
 
10
10
  :host(:focus-visible) {
11
11
  outline: none;
12
+ }
13
+
14
+ :host(.ui5-popup-opening) {
15
+ opacity: 0.1;
12
16
  }
@@ -190,7 +190,8 @@
190
190
  width: 100%;
191
191
  }
192
192
 
193
- .ui5-responsive-popover-footer .ui5-responsive-popover-close-btn {
193
+ .ui5-responsive-popover-footer .ui5-responsive-popover-close-btn,
194
+ .ui5-responsive-popover-footer .ui5-responsive-popover-footer-btn {
194
195
  margin-left: 0.5rem;
195
196
  }
196
197
 
@@ -199,3 +200,7 @@
199
200
  right: 1rem;
200
201
  }
201
202
 
203
+ .ui5-responsive-popover-footer .ui5-responsive-popover-footer-btn {
204
+ width: 4.5rem;
205
+ }
206
+
@@ -16,4 +16,13 @@
16
16
  --_ui5_calendar_header_middle_button_focus_active_outline: none;
17
17
  --_ui5_calendar_header_middle_button_focus_active_background: var(--sapButton_Active_Background);
18
18
  --_ui5_calendar_header_middle_button_focus_after_border: 1px dotted var(--sapContent_FocusColor);
19
+ --_ui5_calendar_header_midcontainer_gap: 0.5rem;
20
+ --_ui5_calendar_header_arrow_button_flex_shrink: 0;
21
+ }
22
+
23
+ @container style(--ui5_content_density: compact) {
24
+ :host {
25
+ --_ui5_calendar_header_midcontainer_gap: 0;
26
+ --_ui5_calendar_header_arrow_button_flex_shrink: 1;
27
+ }
19
28
  }
@@ -23,7 +23,7 @@
23
23
  --_ui5_textarea_value_state_focus_offset: 1px;
24
24
  --_ui5_textarea_focus_outline_color: var(--sapContent_FocusColor);
25
25
  --_ui5_textarea_min_height: 2.25rem;
26
- --_ui5_textarea_wrapper_padding: 0;
26
+ --_ui5_textarea_wrapper_padding: 0.0625rem;
27
27
  --_ui5_textarea_success_wrapper_padding: 0;
28
28
  --_ui5_textarea_warning_error_wrapper_padding: 0;
29
29
  --_ui5_textarea_information_wrapper_padding: 0;
@@ -7,6 +7,11 @@
7
7
  --_ui5_calendar_header_height: 3rem;
8
8
  --_ui5_calendar_header_arrow_button_width: 2.5rem;
9
9
  --_ui5_calendar_header_padding: 0.25rem 0;
10
+ --_ui5_calendar_multiple_layout: row;
11
+ --_ui5_calendar_multiple_gap: 1rem;
12
+ --_ui5_calendar_multiple_width: calc((var(--_ui5_calendar_width) * 2) + (var(--_ui5_calendar_left_right_padding) * 2));
13
+ --_ui5_calendar_overlay_top: 57%;
14
+ --_ui5_calendar_overlay_width: 16rem;
10
15
 
11
16
  --_ui5_checkbox_root_side_padding: .6875rem;
12
17
  --_ui5_checkbox_icon_size: 1rem;
@@ -26,6 +31,7 @@
26
31
  --_ui5_daypicker_item_now_selected_two_calendar_focus_secondary_text_padding_block: 0 0.5rem;
27
32
  --_ui5_daypicker_two_calendar_item_selected_focus_margin_bottom: 0;
28
33
  --_ui5_daypicker_two_calendar_item_selected_focus_padding_right: 0.4375rem;
34
+ --_ui5_calendar_multiple_months_height: var(--_ui5_calendar_height);
29
35
 
30
36
  /* CalendarLegend */
31
37
  --_ui5-calendar-legend-item-root-focus-offset: -0.125rem;
@@ -177,6 +183,12 @@
177
183
  --_ui5_calendar_header_height: 2rem;
178
184
  --_ui5_calendar_header_arrow_button_width: 2rem;
179
185
  --_ui5_calendar_header_padding: 0;
186
+ --_ui5_calendar_multiple_layout: column;
187
+ --_ui5_calendar_multiple_gap: 0.5rem;
188
+ --_ui5_calendar_multiple_width: var(--_ui5_calendar_width);
189
+ --_ui5_calendar_overlay_top: 54%;
190
+ --_ui5_calendar_overlay_width: 100%;
191
+ --_ui5_calendar_multiple_months_height: calc(2 * var(--_ui5_calendar_height));
180
192
 
181
193
  /* Calendar Legend */
182
194
  --_ui5-calendar-legend-root-padding: 0.5rem;
@@ -16,7 +16,6 @@
16
16
  --_ui5_textarea_readonly_focus_offset: 1px;
17
17
  --_ui5_textarea_focus_outline_color: var(--sapField_Active_BorderColor);
18
18
  --_ui5_textarea_value_state_focus_offset: 1px;
19
- --_ui5_textarea_wrapper_padding: 0.0625rem;
20
19
  --_ui5_textarea_success_wrapper_padding: 0.0625rem;
21
20
  --_ui5_textarea_warning_error_wrapper_padding: 0.0625rem 0.0625rem 0.125rem 0.0625rem;
22
21
  --_ui5_textarea_information_wrapper_padding: 0.0625rem 0.0625rem 0.125rem 0.0625rem;
@@ -16,7 +16,6 @@
16
16
  --_ui5_textarea_readonly_focus_offset: 1px;
17
17
  --_ui5_textarea_focus_outline_color: var(--sapField_Active_BorderColor);
18
18
  --_ui5_textarea_value_state_focus_offset: 1px;
19
- --_ui5_textarea_wrapper_padding: 0.0625rem;
20
19
  --_ui5_textarea_success_wrapper_padding: 0.0625rem;
21
20
  --_ui5_textarea_warning_error_wrapper_padding: 0.0625rem 0.0625rem 0.125rem 0.0625rem;
22
21
  --_ui5_textarea_information_wrapper_padding: 0.0625rem 0.0625rem 0.125rem 0.0625rem;
@@ -43,6 +43,7 @@
43
43
  @import "./SplitButton-parameters.css";
44
44
  @import "./Switch-parameters.css";
45
45
  @import "./TabContainer-parameters.css";
46
+ @import "../base/Toolbar-parameters.css";
46
47
  @import "./GrowingButton-parameters.css";
47
48
  @import "../base/Text-parameters.css";
48
49
  @import "./TextArea-parameters.css";