@siemens/element-ng 49.14.0 → 49.16.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 (135) hide show
  1. package/fesm2022/siemens-element-ng-about.mjs +2 -2
  2. package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-accordion.mjs +12 -3
  4. package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-action-modal.mjs +64 -11
  6. package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-ag-grid.mjs +7 -0
  8. package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
  9. package/fesm2022/siemens-element-ng-application-header.mjs +76 -32
  10. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs +14 -8
  12. package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -1
  13. package/fesm2022/siemens-element-ng-autocomplete.mjs +17 -3
  14. package/fesm2022/siemens-element-ng-autocomplete.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-breadcrumb.mjs +2 -2
  16. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-card.mjs +21 -4
  18. package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-color-picker.mjs +11 -5
  20. package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -1
  21. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +29 -2
  22. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
  23. package/fesm2022/siemens-element-ng-common.mjs +20 -2
  24. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  25. package/fesm2022/siemens-element-ng-content-action-bar.mjs +1 -0
  26. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
  27. package/fesm2022/siemens-element-ng-dashboard.mjs +20 -2
  28. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  29. package/fesm2022/siemens-element-ng-date-range-filter.mjs +36 -12
  30. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  31. package/fesm2022/siemens-element-ng-datepicker.mjs +89 -24
  32. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  33. package/fesm2022/siemens-element-ng-empty-state.mjs +2 -2
  34. package/fesm2022/siemens-element-ng-filter-bar.mjs +11 -4
  35. package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
  36. package/fesm2022/siemens-element-ng-filtered-search.mjs +95 -38
  37. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  38. package/fesm2022/siemens-element-ng-form.mjs +2 -0
  39. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  40. package/fesm2022/siemens-element-ng-formly.mjs +10 -7
  41. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  42. package/fesm2022/siemens-element-ng-header-dropdown.mjs +5 -3
  43. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  44. package/fesm2022/siemens-element-ng-icon.mjs +1 -0
  45. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
  46. package/fesm2022/siemens-element-ng-ip-input.mjs +7 -11
  47. package/fesm2022/siemens-element-ng-ip-input.mjs.map +1 -1
  48. package/fesm2022/siemens-element-ng-link.mjs +10 -1
  49. package/fesm2022/siemens-element-ng-link.mjs.map +1 -1
  50. package/fesm2022/siemens-element-ng-menu.mjs +30 -4
  51. package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
  52. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +3 -0
  53. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  54. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +11 -0
  55. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  56. package/fesm2022/siemens-element-ng-navbar.mjs +1 -0
  57. package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
  58. package/fesm2022/siemens-element-ng-number-input.mjs +11 -2
  59. package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
  60. package/fesm2022/siemens-element-ng-phone-number.mjs +14 -14
  61. package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -1
  62. package/fesm2022/siemens-element-ng-pills-input.mjs +14 -19
  63. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
  64. package/fesm2022/siemens-element-ng-popover-legacy.mjs +13 -2
  65. package/fesm2022/siemens-element-ng-popover-legacy.mjs.map +1 -1
  66. package/fesm2022/siemens-element-ng-popover.mjs +35 -26
  67. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
  68. package/fesm2022/siemens-element-ng-resize-observer.mjs +21 -3
  69. package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
  70. package/fesm2022/siemens-element-ng-result-details-list.mjs +2 -2
  71. package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
  72. package/fesm2022/siemens-element-ng-search-bar.mjs +14 -8
  73. package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
  74. package/fesm2022/siemens-element-ng-select.mjs +80 -8
  75. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  76. package/fesm2022/siemens-element-ng-shadow-root.mjs +31 -4
  77. package/fesm2022/siemens-element-ng-shadow-root.mjs.map +1 -1
  78. package/fesm2022/siemens-element-ng-skip-links.mjs +5 -1
  79. package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -1
  80. package/fesm2022/siemens-element-ng-split.mjs +10 -8
  81. package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
  82. package/fesm2022/siemens-element-ng-status-bar.mjs +30 -3
  83. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  84. package/fesm2022/siemens-element-ng-tabs.mjs +8 -2
  85. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  86. package/fesm2022/siemens-element-ng-threshold.mjs +12 -3
  87. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
  88. package/fesm2022/siemens-element-ng-toast-notification.mjs +6 -2
  89. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
  90. package/fesm2022/siemens-element-ng-tooltip.mjs +9 -4
  91. package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
  92. package/fesm2022/siemens-element-ng-tree-view.mjs +5 -1
  93. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  94. package/fesm2022/siemens-element-ng-typeahead.mjs +15 -27
  95. package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
  96. package/fesm2022/siemens-element-ng-wizard.mjs +45 -5
  97. package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
  98. package/package.json +3 -3
  99. package/template-i18n.json +1 -1
  100. package/types/siemens-element-ng-accordion.d.ts +12 -3
  101. package/types/siemens-element-ng-application-header.d.ts +10 -9
  102. package/types/siemens-element-ng-auto-collapsable-list.d.ts +6 -1
  103. package/types/siemens-element-ng-autocomplete.d.ts +17 -3
  104. package/types/siemens-element-ng-card.d.ts +21 -4
  105. package/types/siemens-element-ng-color-picker.d.ts +8 -1
  106. package/types/siemens-element-ng-common.d.ts +12 -2
  107. package/types/siemens-element-ng-dashboard.d.ts +5 -0
  108. package/types/siemens-element-ng-date-range-filter.d.ts +13 -1
  109. package/types/siemens-element-ng-datepicker.d.ts +62 -9
  110. package/types/siemens-element-ng-filter-bar.d.ts +11 -4
  111. package/types/siemens-element-ng-filtered-search.d.ts +8 -1
  112. package/types/siemens-element-ng-form.d.ts +2 -0
  113. package/types/siemens-element-ng-formly.d.ts +3 -1
  114. package/types/siemens-element-ng-header-dropdown.d.ts +5 -3
  115. package/types/siemens-element-ng-icon.d.ts +1 -0
  116. package/types/siemens-element-ng-ip-input.d.ts +1 -1
  117. package/types/siemens-element-ng-link.d.ts +10 -1
  118. package/types/siemens-element-ng-menu.d.ts +17 -2
  119. package/types/siemens-element-ng-navbar-vertical-next.d.ts +2 -0
  120. package/types/siemens-element-ng-navbar.d.ts +1 -0
  121. package/types/siemens-element-ng-number-input.d.ts +11 -2
  122. package/types/siemens-element-ng-phone-number.d.ts +1 -2
  123. package/types/siemens-element-ng-popover.d.ts +8 -5
  124. package/types/siemens-element-ng-resize-observer.d.ts +21 -3
  125. package/types/siemens-element-ng-search-bar.d.ts +10 -2
  126. package/types/siemens-element-ng-select.d.ts +34 -2
  127. package/types/siemens-element-ng-shadow-root.d.ts +1 -0
  128. package/types/siemens-element-ng-split.d.ts +11 -8
  129. package/types/siemens-element-ng-status-bar.d.ts +30 -3
  130. package/types/siemens-element-ng-threshold.d.ts +8 -1
  131. package/types/siemens-element-ng-toast-notification.d.ts +3 -1
  132. package/types/siemens-element-ng-tooltip.d.ts +6 -4
  133. package/types/siemens-element-ng-tree-view.d.ts +5 -1
  134. package/types/siemens-element-ng-typeahead.d.ts +6 -4
  135. package/types/siemens-element-ng-wizard.d.ts +13 -1
@@ -1,6 +1,6 @@
1
1
  import { getLocaleDayPeriods, FormStyle, TranslationWidth, getLocaleId, getLocaleDateTimeFormat, FormatWidth, getLocaleTimeFormat, getLocaleDateFormat, formatDate, DatePipe, NgTemplateOutlet, getLocaleFirstDayOfWeek, WeekDay } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { input, model, output, booleanAttribute, computed, signal, inject, LOCALE_ID, HostListener, Directive, ElementRef, viewChildren, ChangeDetectionStrategy, Component, viewChild, HostAttributeToken, effect, ChangeDetectorRef, SimpleChange, DOCUMENT, DestroyRef, contentChild, NgModule } from '@angular/core';
3
+ import { input, model, output, booleanAttribute, computed, signal, inject, LOCALE_ID, Directive, ElementRef, viewChildren, ChangeDetectionStrategy, Component, viewChild, HostListener, HostAttributeToken, effect, ChangeDetectorRef, SimpleChange, DOCUMENT, DestroyRef, contentChild, NgModule } from '@angular/core';
4
4
  import * as i2 from '@angular/forms';
5
5
  import { Validators, NG_VALUE_ACCESSOR, NG_VALIDATORS, FormBuilder, ReactiveFormsModule, FormControl, FormsModule, NgControl } from '@angular/forms';
6
6
  import { SI_FORM_ITEM_CONTROL } from '@siemens/element-ng/form';
@@ -8,7 +8,7 @@ import { MediaMatcher, BreakpointObserver } from '@angular/cdk/layout';
8
8
  import { Overlay } from '@angular/cdk/overlay';
9
9
  import { ComponentPortal } from '@angular/cdk/portal';
10
10
  import { takeUntilDestroyed, outputToObservable } from '@angular/core/rxjs-interop';
11
- import { isRTL, positionBottomCenter, positionBottomStart, positionBottomEnd, positionTopCenter, positionTopStart, positionTopEnd } from '@siemens/element-ng/common';
11
+ import { isRTL, defaultConnectedOverlayScrollStrategy, positionBottomCenter, positionBottomStart, positionBottomEnd, positionTopCenter, positionTopStart, positionTopEnd } from '@siemens/element-ng/common';
12
12
  import { BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';
13
13
  import { Subject, merge, asapScheduler, filter as filter$1 } from 'rxjs';
14
14
  import { takeUntil, skip, observeOn, map, filter, tap } from 'rxjs/operators';
@@ -882,6 +882,10 @@ class SiDateInputDirective {
882
882
  onInput(event) {
883
883
  const value = event.target.value;
884
884
  const parsedDate = parseDate(value, this.getFormat(), this.locale);
885
+ // Keep dateString in sync with the raw DOM value so that a subsequent
886
+ // writeValue() with the same formatted string still triggers the host
887
+ // [value] binding and overwrites any manually entered text.
888
+ this.dateString.set(value);
885
889
  // Is same date
886
890
  const hasChanged = !(parsedDate === this.date);
887
891
  if (hasChanged) {
@@ -1009,24 +1013,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
1009
1013
  '[attr.readonly]': 'readonly() || null',
1010
1014
  '[class.readonly]': 'readonly()',
1011
1015
  '[attr.aria-describedby]': 'errormessageId()',
1012
- '[value]': 'dateString()'
1016
+ '[value]': 'dateString()',
1017
+ '(input)': 'onInput($event)',
1018
+ '(blur)': 'onBlur($event)'
1013
1019
  },
1014
1020
  exportAs: 'siDateInput'
1015
1021
  }]
1016
- }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], siDatepickerConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "siDatepickerConfig", required: false }] }, { type: i0.Output, args: ["siDatepickerConfigChange"] }], siDatepickerDisabledTime: [{ type: i0.Output, args: ["siDatepickerDisabledTime"] }], stateChange: [{ type: i0.Output, args: ["stateChange"] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], errormessageId: [{ type: i0.Input, args: [{ isSignal: true, alias: "errormessageId", required: false }] }], dateChange: [{ type: i0.Output, args: ["dateChange"] }], onInput: [{
1017
- type: HostListener,
1018
- args: ['input', ['$event']]
1019
- }], onBlur: [{
1020
- type: HostListener,
1021
- args: ['blur', ['$event']]
1022
- }] } });
1022
+ }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], siDatepickerConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "siDatepickerConfig", required: false }] }, { type: i0.Output, args: ["siDatepickerConfigChange"] }], siDatepickerDisabledTime: [{ type: i0.Output, args: ["siDatepickerDisabledTime"] }], stateChange: [{ type: i0.Output, args: ["stateChange"] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], errormessageId: [{ type: i0.Input, args: [{ isSignal: true, alias: "errormessageId", required: false }] }], dateChange: [{ type: i0.Output, args: ["dateChange"] }] } });
1023
1023
 
1024
1024
  /**
1025
1025
  * Copyright (c) Siemens 2016 - 2026
1026
1026
  * SPDX-License-Identifier: MIT
1027
1027
  */
1028
1028
  class SiCalendarDateCellDirective {
1029
+ /** Calendar cell data used to render its state and accessible label. */
1029
1030
  cell = input.required(...(ngDevMode ? [{ debugName: "cell" }] : []));
1031
+ /** Date comparison strategy used by the containing calendar view. */
1030
1032
  compareAdapter = input.required(...(ngDevMode ? [{ debugName: "compareAdapter" }] : []));
1031
1033
  /** @defaultValue inject(ElementRef) */
1032
1034
  ref = inject(ElementRef);
@@ -1305,13 +1307,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
1305
1307
  * SPDX-License-Identifier: MIT
1306
1308
  */
1307
1309
  class SiCalendarDirectionButtonComponent {
1310
+ /** Accessible label for the button. */
1308
1311
  ariaLabel = input.required(...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
1309
- /** @defaultValue false */
1310
- disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
1311
- direction = input(...(ngDevMode ? [undefined, { debugName: "direction" }] : []));
1312
1312
  /**
1313
- * Emit on button click.
1313
+ * Whether the button is disabled.
1314
+ *
1315
+ * @defaultValue false
1314
1316
  */
1317
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
1318
+ /** Direction in which the button navigates. */
1319
+ direction = input(...(ngDevMode ? [undefined, { debugName: "direction" }] : []));
1320
+ /** Emits when the button is clicked. */
1315
1321
  clicked = output();
1316
1322
  icon = computed(() => this.direction() === 'left' ? this.icons.elementLeft2 : this.icons.elementRight2, ...(ngDevMode ? [{ debugName: "icon" }] : []));
1317
1323
  buttonClass = computed(() => this.direction() === 'left' ? 'previous-button' : 'next-button', ...(ngDevMode ? [{ debugName: "buttonClass" }] : []));
@@ -2016,18 +2022,26 @@ class SiTimepickerComponent {
2016
2022
  // eslint-disable-next-line @angular-eslint/no-input-rename
2017
2023
  disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : {}), alias: 'disabled' });
2018
2024
  /**
2025
+ * Visible label for the hours input.
2026
+ *
2019
2027
  * @defaultValue 'hh'
2020
2028
  */
2021
2029
  hoursLabel = input('hh', ...(ngDevMode ? [{ debugName: "hoursLabel" }] : []));
2022
2030
  /**
2031
+ * Visible label for the minutes input.
2032
+ *
2023
2033
  * @defaultValue 'mm'
2024
2034
  */
2025
2035
  minutesLabel = input('mm', ...(ngDevMode ? [{ debugName: "minutesLabel" }] : []));
2026
2036
  /**
2037
+ * Visible label for the seconds input.
2038
+ *
2027
2039
  * @defaultValue 'ss'
2028
2040
  */
2029
2041
  secondsLabel = input('ss', ...(ngDevMode ? [{ debugName: "secondsLabel" }] : []));
2030
2042
  /**
2043
+ * Visible label for the milliseconds input.
2044
+ *
2031
2045
  * @defaultValue 'ms'
2032
2046
  */
2033
2047
  millisecondsLabel = input('ms', ...(ngDevMode ? [{ debugName: "millisecondsLabel" }] : []));
@@ -2065,23 +2079,34 @@ class SiTimepickerComponent {
2065
2079
  */
2066
2080
  millisecondsAriaLabel = input(t(() => $localize `:@@SI_DATEPICKER.MILLISECONDS:Milliseconds`), ...(ngDevMode ? [{ debugName: "millisecondsAriaLabel" }] : []));
2067
2081
  /**
2082
+ * Placeholder for the hours input.
2083
+ *
2068
2084
  * @defaultValue 'hh'
2069
2085
  */
2070
2086
  hoursPlaceholder = input('hh', ...(ngDevMode ? [{ debugName: "hoursPlaceholder" }] : []));
2071
2087
  /**
2088
+ * Placeholder for the minutes input.
2089
+ *
2072
2090
  * @defaultValue 'mm'
2073
2091
  */
2074
2092
  minutesPlaceholder = input('mm', ...(ngDevMode ? [{ debugName: "minutesPlaceholder" }] : []));
2075
2093
  /**
2094
+ * Placeholder for the seconds input.
2095
+ *
2076
2096
  * @defaultValue 'ss'
2077
2097
  */
2078
2098
  secondsPlaceholder = input('ss', ...(ngDevMode ? [{ debugName: "secondsPlaceholder" }] : []));
2079
2099
  /**
2100
+ * Placeholder for the milliseconds input.
2101
+ *
2080
2102
  * @defaultValue 'ms'
2081
2103
  */
2082
2104
  millisecondsPlaceholder = input('ms', ...(ngDevMode ? [{ debugName: "millisecondsPlaceholder" }] : []));
2105
+ /** Custom labels for the AM and PM options. */
2083
2106
  meridians = input(...(ngDevMode ? [undefined, { debugName: "meridians" }] : []));
2084
2107
  /**
2108
+ * Visible label for the AM/PM selector.
2109
+ *
2085
2110
  * @defaultValue 'am/pm'
2086
2111
  */
2087
2112
  meridiansLabel = input('am/pm', ...(ngDevMode ? [{ debugName: "meridiansLabel" }] : []));
@@ -2092,11 +2117,23 @@ class SiTimepickerComponent {
2092
2117
  * ```
2093
2118
  */
2094
2119
  meridiansAriaLabel = input(t(() => $localize `:@@SI_DATEPICKER.PERIOD:Period`), ...(ngDevMode ? [{ debugName: "meridiansAriaLabel" }] : []));
2095
- /** @defaultValue true */
2120
+ /**
2121
+ * Whether the minutes input is displayed.
2122
+ *
2123
+ * @defaultValue true
2124
+ */
2096
2125
  showMinutes = input(true, { ...(ngDevMode ? { debugName: "showMinutes" } : {}), transform: booleanAttribute });
2097
- /** @defaultValue false */
2126
+ /**
2127
+ * Whether the seconds input is displayed.
2128
+ *
2129
+ * @defaultValue false
2130
+ */
2098
2131
  showSeconds = input(false, { ...(ngDevMode ? { debugName: "showSeconds" } : {}), transform: booleanAttribute });
2099
- /** @defaultValue false */
2132
+ /**
2133
+ * Whether the milliseconds input is displayed.
2134
+ *
2135
+ * @defaultValue false
2136
+ */
2100
2137
  showMilliseconds = input(false, { ...(ngDevMode ? { debugName: "showMilliseconds" } : {}), transform: booleanAttribute });
2101
2138
  /**
2102
2139
  * Show time in 12-hour period including the select to toggle between AM/PM.
@@ -2110,10 +2147,17 @@ class SiTimepickerComponent {
2110
2147
  * A maximum time limit. The date part of the date object will be ignored.
2111
2148
  */
2112
2149
  max = input(...(ngDevMode ? [undefined, { debugName: "max" }] : []));
2113
- /** @defaultValue false */
2150
+ /**
2151
+ * Whether the time inputs are read-only.
2152
+ *
2153
+ * @defaultValue false
2154
+ */
2114
2155
  readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : {}), transform: booleanAttribute });
2156
+ /** Emits whether the entered time components form a valid time. */
2115
2157
  isValid = output();
2158
+ /** Emits the selected meridian when it changes. */
2116
2159
  meridianChange = output();
2160
+ /** Emits when the user presses Enter in the final time input. */
2117
2161
  inputCompleted = output();
2118
2162
  inputParts = viewChildren('inputPart', ...(ngDevMode ? [{ debugName: "inputParts" }] : []));
2119
2163
  /**
@@ -2617,7 +2661,11 @@ class SiDatepickerComponent {
2617
2661
  * initialization and for bidirectional binding.
2618
2662
  */
2619
2663
  dateRange = model(...(ngDevMode ? [undefined, { debugName: "dateRange" }] : []));
2620
- /** @internal */
2664
+ /**
2665
+ * Role of this calendar when a date range is displayed across two calendars.
2666
+ *
2667
+ * @internal
2668
+ */
2621
2669
  dateRangeRole = input(...(ngDevMode ? [undefined, { debugName: "dateRangeRole" }] : []));
2622
2670
  /**
2623
2671
  * Set initial focus to calendar body.
@@ -2712,7 +2760,11 @@ class SiDatepickerComponent {
2712
2760
  * @defaultValue false
2713
2761
  */
2714
2762
  hideTimeToggle = input(false, ...(ngDevMode ? [{ debugName: "hideTimeToggle" }] : []));
2715
- /** @internal */
2763
+ /**
2764
+ * Whether the calendar is hidden while retaining the optional timepicker.
2765
+ *
2766
+ * @internal
2767
+ */
2716
2768
  hideCalendar = input(false, ...(ngDevMode ? [{ debugName: "hideCalendar" }] : []));
2717
2769
  /**
2718
2770
  * Optional timepicker label.
@@ -3395,6 +3447,15 @@ class SiDatepickerOverlayDirective {
3395
3447
  originY: 'top'
3396
3448
  }
3397
3449
  ], ...(ngDevMode ? [{ debugName: "placement" }] : []));
3450
+ /**
3451
+ * Optional CDK scroll strategy used for the datepicker overlay.
3452
+ *
3453
+ * @defaultValue defaultConnectedOverlayScrollStrategy()
3454
+ */
3455
+ scrollStrategy = input(defaultConnectedOverlayScrollStrategy(), { ...(ngDevMode ? { debugName: "scrollStrategy" } : {}),
3456
+ // eslint-disable-next-line @angular-eslint/no-input-rename
3457
+ alias: 'siDatepickerScrollStrategy' // to be aligned with the `siDatepickerClose` output
3458
+ });
3398
3459
  /**
3399
3460
  * Output event on closing datepicker e.g. by clicking backdrop or escape key.
3400
3461
  */
@@ -3522,6 +3583,7 @@ class SiDatepickerOverlayDirective {
3522
3583
  positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),
3523
3584
  direction: isRTL() ? 'rtl' : 'ltr',
3524
3585
  hasBackdrop: true,
3586
+ scrollStrategy: this.scrollStrategy(),
3525
3587
  backdropClass: 'modal-backdrop'
3526
3588
  });
3527
3589
  }
@@ -3537,6 +3599,7 @@ class SiDatepickerOverlayDirective {
3537
3599
  .withViewportMargin(4),
3538
3600
  direction: isRTL() ? 'rtl' : 'ltr',
3539
3601
  hasBackdrop: true,
3602
+ scrollStrategy: this.scrollStrategy(),
3540
3603
  backdropClass: 'cdk-overlay-transparent-backdrop'
3541
3604
  });
3542
3605
  }
@@ -3553,7 +3616,7 @@ class SiDatepickerOverlayDirective {
3553
3616
  map(() => CloseCause.Escape)));
3554
3617
  }
3555
3618
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiDatepickerOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3556
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.8", type: SiDatepickerOverlayDirective, isStandalone: true, selector: "[siDatepickerOverlay]", outputs: { siDatepickerClose: "siDatepickerClose" }, exportAs: ["siDatepickerOverlay"], ngImport: i0 });
3619
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.8", type: SiDatepickerOverlayDirective, isStandalone: true, selector: "[siDatepickerOverlay]", inputs: { scrollStrategy: { classPropertyName: "scrollStrategy", publicName: "siDatepickerScrollStrategy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { siDatepickerClose: "siDatepickerClose" }, exportAs: ["siDatepickerOverlay"], ngImport: i0 });
3557
3620
  }
3558
3621
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiDatepickerOverlayDirective, decorators: [{
3559
3622
  type: Directive,
@@ -3561,7 +3624,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
3561
3624
  selector: '[siDatepickerOverlay]',
3562
3625
  exportAs: 'siDatepickerOverlay'
3563
3626
  }]
3564
- }], propDecorators: { siDatepickerClose: [{ type: i0.Output, args: ["siDatepickerClose"] }] } });
3627
+ }], propDecorators: { scrollStrategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "siDatepickerScrollStrategy", required: false }] }], siDatepickerClose: [{ type: i0.Output, args: ["siDatepickerClose"] }] } });
3565
3628
 
3566
3629
  /**
3567
3630
  * Copyright (c) Siemens 2016 - 2026
@@ -3675,7 +3738,7 @@ class SiDatepickerDirective extends SiDateInputDirective {
3675
3738
  provide: SI_FORM_ITEM_CONTROL,
3676
3739
  useExisting: SiDatepickerDirective
3677
3740
  }
3678
- ], exportAs: ["siDatepicker"], usesInheritance: true, hostDirectives: [{ directive: SiDatepickerOverlayDirective, outputs: ["siDatepickerClose", "siDatepickerClose"] }], ngImport: i0 });
3741
+ ], exportAs: ["siDatepicker"], usesInheritance: true, hostDirectives: [{ directive: SiDatepickerOverlayDirective, inputs: ["siDatepickerScrollStrategy", "siDatepickerScrollStrategy"], outputs: ["siDatepickerClose", "siDatepickerClose"] }], ngImport: i0 });
3679
3742
  }
3680
3743
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiDatepickerDirective, decorators: [{
3681
3744
  type: Directive,
@@ -3700,6 +3763,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
3700
3763
  hostDirectives: [
3701
3764
  {
3702
3765
  directive: SiDatepickerOverlayDirective,
3766
+ inputs: ['siDatepickerScrollStrategy'],
3703
3767
  outputs: ['siDatepickerClose']
3704
3768
  }
3705
3769
  ],
@@ -4020,7 +4084,7 @@ class SiDateRangeComponent {
4020
4084
  provide: SI_FORM_ITEM_CONTROL,
4021
4085
  useExisting: SiDateRangeComponent
4022
4086
  }
4023
- ], viewQueries: [{ propertyName: "inputDirectives", predicate: SiDateInputDirective, descendants: true, isSignal: true }, { propertyName: "startInput", first: true, predicate: ["startInput"], descendants: true, isSignal: true }, { propertyName: "endInput", first: true, predicate: ["endInput"], descendants: true, isSignal: true }, { propertyName: "button", first: true, predicate: ["button"], descendants: true, isSignal: true }], usesOnChanges: true, hostDirectives: [{ directive: SiDatepickerOverlayDirective, outputs: ["siDatepickerClose", "siDatepickerClose"] }], ngImport: i0, template: "<input\n #startInput=\"ngModel\"\n type=\"text\"\n class=\"border-0 p-0 focus-none\"\n siDateInput\n [ngModel]=\"value()?.start ?? null\"\n [siDatepickerConfig]=\"siDatepickerConfig()\"\n [placeholder]=\"startDatePlaceholder() | translate\"\n [attr.aria-label]=\"startDatePlaceholder() | translate\"\n [errormessageId]=\"errormessageId()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (ngModelChange)=\"onInputChanged({ start: $event, end: value()?.end })\"\n/>\n<span class=\"mx-3\">-</span>\n<input\n #endInput=\"ngModel\"\n type=\"text\"\n class=\"border-0 p-0 focus-none text-end\"\n siDateInput\n [ngModel]=\"value()?.end ?? null\"\n [siDatepickerConfig]=\"siDatepickerConfig()\"\n [placeholder]=\"endDatePlaceholder() | translate\"\n [attr.aria-label]=\"endDatePlaceholder() | translate\"\n [errormessageId]=\"errormessageId()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (ngModelChange)=\"onInputChanged({ start: value()?.start, end: $event })\"\n/>\n<div class=\"form-control-actions\">\n <button\n #button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary btn-sm\"\n [attr.aria-label]=\"ariaLabelCalendarButton() | translate\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"show()\"\n >\n <si-icon [icon]=\"icons.elementCalendar\" />\n </button>\n</div>\n", styles: [":host{display:block;min-inline-size:237px}:host(:focus-within:has(input:focus)){outline:var(--element-button-focus-width) solid var(--element-focus-default);outline-offset:var(--element-button-focus-overlay-width)}input{flex-grow:1;background-color:transparent;min-inline-size:80px}input::placeholder{opacity:1;color:var(--element-text-secondary)}input:disabled,input[readonly]{background-color:var(--element-base-1);opacity:1}input:not([readonly]):focus::placeholder,input:focus:not([readonly]):focus::placeholder{color:transparent}.disabled,.disabled:hover,.disabled:focus{--border-color: var(--element-ui-3);color:var(--element-text-disabled)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: SiDateInputDirective, selector: "input[siDateInput]", inputs: ["id", "siDatepickerConfig", "disabled", "readonly", "errormessageId"], outputs: ["siDatepickerConfigChange", "siDatepickerDisabledTime", "stateChange", "dateChange"], exportAs: ["siDateInput"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "ngmodule", type: A11yModule }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Default });
4087
+ ], viewQueries: [{ propertyName: "inputDirectives", predicate: SiDateInputDirective, descendants: true, isSignal: true }, { propertyName: "startInput", first: true, predicate: ["startInput"], descendants: true, isSignal: true }, { propertyName: "endInput", first: true, predicate: ["endInput"], descendants: true, isSignal: true }, { propertyName: "button", first: true, predicate: ["button"], descendants: true, isSignal: true }], usesOnChanges: true, hostDirectives: [{ directive: SiDatepickerOverlayDirective, inputs: ["siDatepickerScrollStrategy", "scrollStrategy"], outputs: ["siDatepickerClose", "siDatepickerClose"] }], ngImport: i0, template: "<input\n #startInput=\"ngModel\"\n type=\"text\"\n class=\"border-0 p-0 focus-none\"\n siDateInput\n [ngModel]=\"value()?.start ?? null\"\n [siDatepickerConfig]=\"siDatepickerConfig()\"\n [placeholder]=\"startDatePlaceholder() | translate\"\n [attr.aria-label]=\"startDatePlaceholder() | translate\"\n [errormessageId]=\"errormessageId()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (ngModelChange)=\"onInputChanged({ start: $event, end: value()?.end })\"\n/>\n<span class=\"mx-3\">-</span>\n<input\n #endInput=\"ngModel\"\n type=\"text\"\n class=\"border-0 p-0 focus-none text-end\"\n siDateInput\n [ngModel]=\"value()?.end ?? null\"\n [siDatepickerConfig]=\"siDatepickerConfig()\"\n [placeholder]=\"endDatePlaceholder() | translate\"\n [attr.aria-label]=\"endDatePlaceholder() | translate\"\n [errormessageId]=\"errormessageId()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (ngModelChange)=\"onInputChanged({ start: value()?.start, end: $event })\"\n/>\n<div class=\"form-control-actions\">\n <button\n #button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary btn-sm\"\n [attr.aria-label]=\"ariaLabelCalendarButton() | translate\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"show()\"\n >\n <si-icon [icon]=\"icons.elementCalendar\" />\n </button>\n</div>\n", styles: [":host{display:block;min-inline-size:237px}:host(:focus-within:has(input:focus)){outline:var(--element-button-focus-width) solid var(--element-focus-default);outline-offset:var(--element-button-focus-overlay-width)}input{flex-grow:1;background-color:transparent;min-inline-size:80px}input::placeholder{opacity:1;color:var(--element-text-secondary)}input:disabled,input[readonly]{background-color:var(--element-base-1);opacity:1}input:not([readonly]):focus::placeholder,input:focus:not([readonly]):focus::placeholder{color:transparent}.disabled,.disabled:hover,.disabled:focus{--border-color: var(--element-ui-3);color:var(--element-text-disabled)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: SiDateInputDirective, selector: "input[siDateInput]", inputs: ["id", "siDatepickerConfig", "disabled", "readonly", "errormessageId"], outputs: ["siDatepickerConfigChange", "siDatepickerDisabledTime", "stateChange", "dateChange"], exportAs: ["siDateInput"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "ngmodule", type: A11yModule }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Default });
4024
4088
  }
4025
4089
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiDateRangeComponent, decorators: [{
4026
4090
  type: Component,
@@ -4048,6 +4112,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
4048
4112
  }, hostDirectives: [
4049
4113
  {
4050
4114
  directive: SiDatepickerOverlayDirective,
4115
+ inputs: ['siDatepickerScrollStrategy: scrollStrategy'],
4051
4116
  outputs: ['siDatepickerClose']
4052
4117
  }
4053
4118
  ], template: "<input\n #startInput=\"ngModel\"\n type=\"text\"\n class=\"border-0 p-0 focus-none\"\n siDateInput\n [ngModel]=\"value()?.start ?? null\"\n [siDatepickerConfig]=\"siDatepickerConfig()\"\n [placeholder]=\"startDatePlaceholder() | translate\"\n [attr.aria-label]=\"startDatePlaceholder() | translate\"\n [errormessageId]=\"errormessageId()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (ngModelChange)=\"onInputChanged({ start: $event, end: value()?.end })\"\n/>\n<span class=\"mx-3\">-</span>\n<input\n #endInput=\"ngModel\"\n type=\"text\"\n class=\"border-0 p-0 focus-none text-end\"\n siDateInput\n [ngModel]=\"value()?.end ?? null\"\n [siDatepickerConfig]=\"siDatepickerConfig()\"\n [placeholder]=\"endDatePlaceholder() | translate\"\n [attr.aria-label]=\"endDatePlaceholder() | translate\"\n [errormessageId]=\"errormessageId()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (ngModelChange)=\"onInputChanged({ start: value()?.start, end: $event })\"\n/>\n<div class=\"form-control-actions\">\n <button\n #button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary btn-sm\"\n [attr.aria-label]=\"ariaLabelCalendarButton() | translate\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"show()\"\n >\n <si-icon [icon]=\"icons.elementCalendar\" />\n </button>\n</div>\n", styles: [":host{display:block;min-inline-size:237px}:host(:focus-within:has(input:focus)){outline:var(--element-button-focus-width) solid var(--element-focus-default);outline-offset:var(--element-button-focus-overlay-width)}input{flex-grow:1;background-color:transparent;min-inline-size:80px}input::placeholder{opacity:1;color:var(--element-text-secondary)}input:disabled,input[readonly]{background-color:var(--element-base-1);opacity:1}input:not([readonly]):focus::placeholder,input:focus:not([readonly]):focus::placeholder{color:transparent}.disabled,.disabled:hover,.disabled:focus{--border-color: var(--element-ui-3);color:var(--element-text-disabled)}\n"] }]