@siemens/element-ng 49.9.0 → 49.11.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 (45) hide show
  1. package/fesm2022/siemens-element-ng-about.mjs +13 -4
  2. package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-application-header.mjs +6 -6
  4. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-chat-messages.mjs +43 -19
  6. package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-color-picker.mjs +9 -4
  8. package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -1
  9. package/fesm2022/siemens-element-ng-dashboard.mjs +459 -8
  10. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-date-range-filter.mjs +12 -3
  12. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  13. package/fesm2022/siemens-element-ng-datepicker.mjs +1 -1
  14. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-filtered-search.mjs +2 -2
  16. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-form.mjs +6 -6
  18. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-landing-page.mjs +2 -2
  20. package/fesm2022/siemens-element-ng-landing-page.mjs.map +1 -1
  21. package/fesm2022/siemens-element-ng-main-detail-container.mjs +2 -2
  22. package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
  23. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +379 -264
  24. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  25. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +18 -2
  26. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  27. package/fesm2022/siemens-element-ng-notification-item.mjs +2 -2
  28. package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -1
  29. package/fesm2022/siemens-element-ng-photo-upload.mjs +2 -2
  30. package/fesm2022/siemens-element-ng-select.mjs +2 -2
  31. package/fesm2022/siemens-element-ng-side-panel.mjs +2 -2
  32. package/fesm2022/siemens-element-ng-toast-notification.mjs +2 -2
  33. package/fesm2022/siemens-element-ng-tour.mjs +2 -2
  34. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  35. package/fesm2022/siemens-element-ng-tree-view.mjs +2 -2
  36. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  37. package/package.json +3 -3
  38. package/template-i18n.json +12 -6
  39. package/types/siemens-element-ng-about.d.ts +11 -1
  40. package/types/siemens-element-ng-chat-messages.d.ts +6 -3
  41. package/types/siemens-element-ng-color-picker.d.ts +7 -2
  42. package/types/siemens-element-ng-dashboard.d.ts +358 -4
  43. package/types/siemens-element-ng-date-range-filter.d.ts +10 -1
  44. package/types/siemens-element-ng-navbar-vertical-next.d.ts +172 -87
  45. package/types/siemens-element-ng-translate.d.ts +6 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@siemens/element-ng",
3
3
  "description": "Element Angular component library, implementing the Siemens Design Language",
4
- "version": "49.9.0",
4
+ "version": "49.11.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -43,8 +43,8 @@
43
43
  "@ngx-formly/bootstrap": "^6.2.2",
44
44
  "@ngx-formly/core": "^6.2.2",
45
45
  "@siemens/element-icons": "1",
46
- "@siemens/element-translate-ng": "49.9.0",
47
- "@siemens/element-theme": "49.9.0",
46
+ "@siemens/element-translate-ng": "49.11.0",
47
+ "@siemens/element-theme": "49.11.0",
48
48
  "@siemens/ngx-datatable": "22 - 26",
49
49
  "ag-grid-community": "^34.3.1 || ^35.0.0",
50
50
  "flag-icons": "^7.3.2",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "SI_ABOUT.LOGO_ALT": "{{appName}} logo",
2
3
  "SI_AI_MESSAGE.SECONDARY_ACTIONS": "More actions",
3
4
  "SI_ALERT_DIALOG.OK": "OK",
4
5
  "SI_APPLICATION_HEADER.LAUNCHPAD": "Launchpad",
@@ -20,6 +21,7 @@
20
21
  "SI_CHAT_INPUT.PLACEHOLDER": "Enter a message…",
21
22
  "SI_CHAT_INPUT.SECONDARY_ACTIONS": "More actions",
22
23
  "SI_CHAT_INPUT.SEND": "Send",
24
+ "SI_COLOR_PICKER.SELECTED_LABEL": "Selected color {{color}}",
23
25
  "SI_COLUMN_SELECTION_DIALOG.CANCEL": "Cancel",
24
26
  "SI_COLUMN_SELECTION_DIALOG.HIDDEN": "Hidden",
25
27
  "SI_COLUMN_SELECTION_DIALOG.ITEM_MOVED": "Item is now at position {{targetPosition}}",
@@ -69,6 +71,7 @@
69
71
  "SI_DATE_RANGE_FILTER.REF_POINT": "Reference point",
70
72
  "SI_DATE_RANGE_FILTER.SEARCH": "Search",
71
73
  "SI_DATE_RANGE_FILTER.SELECT_RANGE_END": "Select end date",
74
+ "SI_DATE_RANGE_FILTER.SELECT_RANGE_LABEL": "Select date range",
72
75
  "SI_DATE_RANGE_FILTER.TO": "To",
73
76
  "SI_DATE_RANGE_FILTER.TODAY": "Today",
74
77
  "SI_DATE_RANGE_FILTER.UNIT": "Unit",
@@ -122,20 +125,20 @@
122
125
  "SI_FORM_CONTAINER.ERROR.IPV4": "Invalid IPv4 address",
123
126
  "SI_FORM_CONTAINER.ERROR.IPV6": "Invalid IPv6 address",
124
127
  "SI_FORM_CONTAINER.ERROR.MAX": "Max. {{max}}",
125
- "SI_FORM_CONTAINER.ERROR.MAX_DATE": "Date prior to {{maxString}} required",
128
+ "SI_FORM_CONTAINER.ERROR.MAX_DATE": "Date up to and including {{maxString}} required",
126
129
  "SI_FORM_CONTAINER.ERROR.MAX_LENGTH": "Max. {{requiredLength}} characters",
127
- "SI_FORM_CONTAINER.ERROR.MAX_TIME": "Time prior to {{maxString}} required",
130
+ "SI_FORM_CONTAINER.ERROR.MAX_TIME": "Time up to and including {{maxString}} required",
128
131
  "SI_FORM_CONTAINER.ERROR.MILLISECONDS": "Integer between 0 and 999 required",
129
132
  "SI_FORM_CONTAINER.ERROR.MIN": "Min. {{min}}",
130
133
  "SI_FORM_CONTAINER.ERROR.MINUTES": "Integer between 0 and 59 required",
131
- "SI_FORM_CONTAINER.ERROR.MIN_DATE": "Date after {{minString}} required",
134
+ "SI_FORM_CONTAINER.ERROR.MIN_DATE": "Date from {{minString}} required",
132
135
  "SI_FORM_CONTAINER.ERROR.MIN_LENGTH": "Min. {{requiredLength}} characters",
133
- "SI_FORM_CONTAINER.ERROR.MIN_TIME": "Time after {{minString}} required",
136
+ "SI_FORM_CONTAINER.ERROR.MIN_TIME": "Time from {{minString}} required",
134
137
  "SI_FORM_CONTAINER.ERROR.NUMBER_FORMAT": "Number required",
135
138
  "SI_FORM_CONTAINER.ERROR.PATTERN": "The value does not match the predefined pattern.",
136
139
  "SI_FORM_CONTAINER.ERROR.PHONE_COUNTRY": "Unsupported country/region code",
137
- "SI_FORM_CONTAINER.ERROR.RANGE_AFTER_MAX_DATE": "Period prior to {{maxString}} required",
138
- "SI_FORM_CONTAINER.ERROR.RANGE_BEFORE_MIN_DATE": "Period after {{minString}} required",
140
+ "SI_FORM_CONTAINER.ERROR.RANGE_AFTER_MAX_DATE": "Period up to and including {{maxString}} required",
141
+ "SI_FORM_CONTAINER.ERROR.RANGE_BEFORE_MIN_DATE": "Period from {{minString}} required",
139
142
  "SI_FORM_CONTAINER.ERROR.REQUIRED": "Required",
140
143
  "SI_FORM_CONTAINER.ERROR.REQUIRED_TRUE": "Required",
141
144
  "SI_FORM_CONTAINER.ERROR.SECONDS": "Integer between 0 and 59 required",
@@ -231,6 +234,9 @@
231
234
  "SI_TREE_VIEW.EXPAND_ALL": "Expand all",
232
235
  "SI_TYPEAHEAD.AUTOCOMPLETE_LIST_LABEL": "Suggestions",
233
236
  "SI_USER_MESSAGE.SECONDARY_ACTIONS": "More actions",
237
+ "SI_WEATHER_WIDGET.FORECAST_LABEL": "Weather forecast",
238
+ "SI_WEATHER_WIDGET.ILLUSTRATION_ALT": "Weather illustration",
239
+ "SI_WEATHER_WIDGET.METRICS_LABEL": "Additional weather data",
234
240
  "SI_WIZARD.BACK": "Back",
235
241
  "SI_WIZARD.CANCEL": "Cancel",
236
242
  "SI_WIZARD.COMPLETED": "Wizard completed!",
@@ -1,6 +1,7 @@
1
1
  import * as _angular_platform_browser from '@angular/platform-browser';
2
2
  import * as _angular_core from '@angular/core';
3
3
  import { OnInit } from '@angular/core';
4
+ import * as _siemens_element_translate_ng_translate from '@siemens/element-translate-ng/translate';
4
5
  import { CopyrightDetails } from '@siemens/element-ng/copyright-notice';
5
6
  import { Link } from '@siemens/element-ng/link';
6
7
 
@@ -58,6 +59,15 @@ interface ApiInfo {
58
59
  declare class SiAboutComponent implements OnInit {
59
60
  private http;
60
61
  private sanitizer;
62
+ /**
63
+ * Alt text for the application logo. Supports `{{appName}}` placeholder for interpolation.
64
+ *
65
+ * @defaultValue
66
+ * ```
67
+ * t(() => $localize`:@@SI_ABOUT.LOGO_ALT:{{appName}} logo`)
68
+ * ```
69
+ */
70
+ readonly logoAlt: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
61
71
  /**
62
72
  * Title shown above the about information.
63
73
  */
@@ -119,7 +129,7 @@ declare class SiAboutComponent implements OnInit {
119
129
  protected toggleLoadLicenseApi(apiInfo: ApiInfo): void;
120
130
  protected toggleLoadLicenseContent(apiInfo: ApiInfo): void;
121
131
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiAboutComponent, never>;
122
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiAboutComponent, "si-about", never, { "aboutTitle": { "alias": "aboutTitle"; "required": true; "isSignal": true; }; "licenseInfo": { "alias": "licenseInfo"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "appName": { "alias": "appName"; "required": true; "isSignal": true; }; "subheading": { "alias": "subheading"; "required": false; "isSignal": true; }; "acceptableUsePolicyLink": { "alias": "acceptableUsePolicyLink"; "required": false; "isSignal": true; }; "imprintLink": { "alias": "imprintLink"; "required": false; "isSignal": true; }; "privacyLink": { "alias": "privacyLink"; "required": false; "isSignal": true; }; "cookieNoticeLink": { "alias": "cookieNoticeLink"; "required": false; "isSignal": true; }; "termsLink": { "alias": "termsLink"; "required": false; "isSignal": true; }; "links": { "alias": "links"; "required": false; "isSignal": true; }; "copyrightDetails": { "alias": "copyrightDetails"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
132
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiAboutComponent, "si-about", never, { "logoAlt": { "alias": "logoAlt"; "required": false; "isSignal": true; }; "aboutTitle": { "alias": "aboutTitle"; "required": true; "isSignal": true; }; "licenseInfo": { "alias": "licenseInfo"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "appName": { "alias": "appName"; "required": true; "isSignal": true; }; "subheading": { "alias": "subheading"; "required": false; "isSignal": true; }; "acceptableUsePolicyLink": { "alias": "acceptableUsePolicyLink"; "required": false; "isSignal": true; }; "imprintLink": { "alias": "imprintLink"; "required": false; "isSignal": true; }; "privacyLink": { "alias": "privacyLink"; "required": false; "isSignal": true; }; "cookieNoticeLink": { "alias": "cookieNoticeLink"; "required": false; "isSignal": true; }; "termsLink": { "alias": "termsLink"; "required": false; "isSignal": true; }; "links": { "alias": "links"; "required": false; "isSignal": true; }; "copyrightDetails": { "alias": "copyrightDetails"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
123
133
  }
124
134
 
125
135
  declare class SiAboutModule {
@@ -151,7 +151,7 @@ interface Attachment {
151
151
  */
152
152
  declare class SiAttachmentListComponent {
153
153
  protected modalService: SiModalService;
154
- protected readonly icons: Record<"elementDelete" | "elementDocument", string>;
154
+ protected readonly icons: Record<"elementStateClose" | "elementDocument", string>;
155
155
  /**
156
156
  * List of attachments to display
157
157
  * @defaultValue []
@@ -324,9 +324,9 @@ interface ChatInputAttachment extends Attachment {
324
324
  declare class SiChatInputComponent implements AfterViewInit {
325
325
  private static idCounter;
326
326
  private readonly textInput;
327
- private readonly projectedContent;
328
327
  private readonly fileUploadDirective;
329
- protected readonly icons: Record<"elementOptionsVertical" | "elementAttachment" | "elementSendFilled" | "elementStopFilled", string>;
328
+ protected readonly fileInput: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
329
+ protected readonly icons: Record<"elementAttachment" | "elementPlus" | "elementSendFilled" | "elementStopFilled", string>;
330
330
  /**
331
331
  * Current input value
332
332
  * @defaultValue ''
@@ -486,6 +486,9 @@ declare class SiChatInputComponent implements AfterViewInit {
486
486
  protected readonly hasAttachments: _angular_core.Signal<boolean>;
487
487
  protected readonly hasActions: _angular_core.Signal<boolean>;
488
488
  protected readonly hasSecondaryActions: _angular_core.Signal<boolean>;
489
+ protected readonly allMenuActions: _angular_core.Signal<MenuItem[]>;
490
+ protected readonly hasMenuActions: _angular_core.Signal<boolean>;
491
+ protected triggerFileInput(): void;
489
492
  protected readonly canSend: _angular_core.Signal<boolean>;
490
493
  protected readonly showInterruptButton: _angular_core.Signal<boolean>;
491
494
  protected readonly buttonDisabled: _angular_core.Signal<boolean>;
@@ -1,6 +1,6 @@
1
+ import * as _siemens_element_translate_ng_translate from '@siemens/element-translate-ng/translate';
1
2
  import * as _angular_core from '@angular/core';
2
3
  import { ControlValueAccessor } from '@angular/forms';
3
- import { TranslatableString } from '@siemens/element-translate-ng/translate';
4
4
 
5
5
  declare class SiColorPickerComponent implements ControlValueAccessor {
6
6
  /**
@@ -32,8 +32,13 @@ declare class SiColorPickerComponent implements ControlValueAccessor {
32
32
  readonly disabledInput: _angular_core.InputSignal<boolean>;
33
33
  /**
34
34
  * Aria label for the color input button.
35
+ *
36
+ * @defaultValue
37
+ * ```
38
+ * t(() => $localize`:@@SI_COLOR_PICKER.SELECTED_LABEL:Selected color {{color}}`)
39
+ * ```
35
40
  */
36
- readonly ariaLabel: _angular_core.InputSignal<TranslatableString | undefined>;
41
+ readonly ariaLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
37
42
  private onChange;
38
43
  private onTouched;
39
44
  private readonly colorInputRef;
@@ -221,7 +221,7 @@ declare abstract class SiWidgetBaseDirective<T> implements OnInit, OnChanges {
221
221
  */
222
222
  readonly initialLoadingIndicatorDebounceTime: _angular_core.InputSignal<number>;
223
223
  protected loadingTimer?: ReturnType<typeof setTimeout>;
224
- ngOnChanges(changes: SimpleChanges<this>): void;
224
+ ngOnChanges(): void;
225
225
  ngOnInit(): void;
226
226
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiWidgetBaseDirective<any>, never>;
227
227
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiWidgetBaseDirective<any>, never, never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disableAutoLoadingIndicator": { "alias": "disableAutoLoadingIndicator"; "required": false; "isSignal": true; }; "showLoadingIndicatorInput": { "alias": "showLoadingIndicator"; "required": false; "isSignal": true; }; "initialLoadingIndicatorDebounceTime": { "alias": "initialLoadingIndicatorDebounceTime"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -761,7 +761,7 @@ declare class SiValueWidgetComponent {
761
761
  /**
762
762
  * Alt text for a provided image.
763
763
  */
764
- readonly imgAlt: _angular_core.InputSignal<string | undefined>;
764
+ readonly imgAlt: _angular_core.InputSignal<TranslatableString | undefined>;
765
765
  /**
766
766
  * Defines if an image is placed on top or start (left) of the card.
767
767
  *
@@ -787,5 +787,359 @@ declare class SiValueWidgetComponent {
787
787
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiValueWidgetComponent, "si-value-widget", never, { "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "primaryActions": { "alias": "primaryActions"; "required": false; "isSignal": true; }; "secondaryActions": { "alias": "secondaryActions"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "unit": { "alias": "unit"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "link": { "alias": "link"; "required": false; "isSignal": true; }; "disableAutoLoadingIndicator": { "alias": "disableAutoLoadingIndicator"; "required": false; "isSignal": true; }; "showLoadingIndicator": { "alias": "showLoadingIndicator"; "required": false; "isSignal": true; }; "initialLoadingIndicatorDebounceTime": { "alias": "initialLoadingIndicatorDebounceTime"; "required": false; "isSignal": true; }; "imgSrc": { "alias": "imgSrc"; "required": false; "isSignal": true; }; "imgAlt": { "alias": "imgAlt"; "required": false; "isSignal": true; }; "imgDir": { "alias": "imgDir"; "required": false; "isSignal": true; }; "imgObjectFit": { "alias": "imgObjectFit"; "required": false; "isSignal": true; }; "imgObjectPosition": { "alias": "imgObjectPosition"; "required": false; "isSignal": true; }; "accentLine": { "alias": "accentLine"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
788
788
  }
789
789
 
790
- export { SiDashboardCardComponent, SiDashboardComponent, SiDashboardModule, SiDashboardService, SiLinkWidgetComponent, SiListWidgetBodyComponent, SiListWidgetComponent, SiListWidgetItemComponent, SiTimelineWidgetBodyComponent, SiTimelineWidgetComponent, SiTimelineWidgetItemComponent, SiValueWidgetBodyComponent, SiValueWidgetComponent };
791
- export type { SiListWidgetItem, SiTimelineWidgetItem, SortOrder, TimeLineWidgetLink, TimeLineWidgetRouterLink, TimelineWidgetActionBase, TimelineWidgetActionButton, TimelineWidgetItemAction, TimelineWidgetMenu };
790
+ /**
791
+ * Copyright (c) Siemens 2016 - 2026
792
+ * SPDX-License-Identifier: MIT
793
+ */
794
+
795
+ /**
796
+ * Visual layout of the {@link SiWeatherWidgetComponent}.
797
+ *
798
+ * - `vertical`: full vertical card layout with header, today block, optional
799
+ * additional data and an optional vertical forecast table.
800
+ * - `horizontal`: wider card with the today block laid out side by side and a
801
+ * horizontal forecast strip below.
802
+ * - `compact`: condensed card without a card header. Location and min/max
803
+ * temperature are rendered next to the illustration. Does not show a forecast.
804
+ */
805
+ type SiWeatherWidgetLayout = 'vertical' | 'horizontal' | 'compact';
806
+ /**
807
+ * Built-in weather condition vocabulary. Mapped 1:1 by the library's default
808
+ * {@link SiWeatherIconResolver} to Element icons. Applications that need
809
+ * provider-specific vocabularies (Xweather, OpenWeather, …) should register
810
+ * their own resolver and may accept any string in their public APIs.
811
+ */
812
+ type SiWeatherCondition = 'clear' | 'clouds' | 'rain' | 'storm' | 'wind' | 'unknown';
813
+ /**
814
+ * Describes how a weather illustration should be resolved. Callers can either
815
+ * provide a direct {@link SiWeatherIcon.src} or a semantic
816
+ * {@link SiWeatherIcon.condition} token resolved by a
817
+ * {@link SiWeatherIconResolver}.
818
+ */
819
+ interface SiWeatherIcon {
820
+ /** Semantic condition token, used by the resolver. Apps with custom resolvers may pass any string. */
821
+ condition?: SiWeatherCondition | string;
822
+ /** Direct URL/path. Wins over {@link condition}. */
823
+ src?: string;
824
+ /** Translatable alt text for accessibility. */
825
+ alt?: TranslatableString;
826
+ }
827
+ /**
828
+ * Today block of the weather widget.
829
+ */
830
+ interface SiWeatherWidgetCurrent {
831
+ /** Current temperature, pre-formatted by the caller (e.g. `"26°"` or `26`). */
832
+ temperature: string | number;
833
+ /** Translatable condition label, e.g. `"Sunny"`. */
834
+ condition?: TranslatableString;
835
+ /** Weather illustration. A string is shorthand for `{ src }`. */
836
+ illustration?: SiWeatherIcon | string;
837
+ /** Optional alt text used when {@link illustration} is given as a string. */
838
+ illustrationAlt?: TranslatableString;
839
+ /** Today's minimum temperature, pre-formatted by the caller. */
840
+ minTemperature?: string | number;
841
+ /** Today's maximum temperature, pre-formatted by the caller. */
842
+ maxTemperature?: string | number;
843
+ }
844
+ /**
845
+ * A single metric row in the additional-data block (e.g. wind, precipitation).
846
+ */
847
+ interface SiWeatherWidgetMetric {
848
+ /** Translatable label, e.g. `"Wind"`. */
849
+ label: TranslatableString;
850
+ /** Pre-formatted value, e.g. `"7km/h"`. */
851
+ value: string | number;
852
+ }
853
+ /**
854
+ * An optional forecast column shown left of the temperature column in vertical
855
+ * layouts. The widget supports up to five of these columns; additional columns
856
+ * are ignored. The temperature column is mandatory and always rendered on the
857
+ * right; it does not need to be modelled as a column here.
858
+ */
859
+ interface SiWeatherWidgetForecastColumn {
860
+ /** Translatable column label, used as `aria-label` for the column. */
861
+ label?: TranslatableString;
862
+ /** element-icons icon name shown next to each row value. */
863
+ icon?: string;
864
+ /**
865
+ * Per-day values, aligned by index with {@link SiWeatherWidgetForecast.days}.
866
+ * Missing entries are rendered as empty cells.
867
+ */
868
+ values: readonly (string | number | undefined)[];
869
+ }
870
+ /**
871
+ * A single day in the forecast block.
872
+ */
873
+ interface SiWeatherWidgetForecastDay {
874
+ /** Translatable day label, e.g. `"Mon"`. */
875
+ label: TranslatableString;
876
+ /** Weather illustration for the day. A string is shorthand for `{ src }`. */
877
+ illustration?: SiWeatherIcon | string;
878
+ /** Minimum temperature, pre-formatted by the caller. */
879
+ minTemperature: string | number;
880
+ /** Maximum temperature, pre-formatted by the caller. */
881
+ maxTemperature: string | number;
882
+ }
883
+ /**
884
+ * Forecast block of the weather widget.
885
+ *
886
+ * The vertical layout supports up to five optional {@link columns} in addition
887
+ * to the mandatory rightmost min/max temperature column. The horizontal layout
888
+ * ignores {@link columns} and renders only day label, illustration and min/max
889
+ * temperature per column. A horizontal forecast should provide at least three
890
+ * days for a visually balanced layout.
891
+ */
892
+ interface SiWeatherWidgetForecast {
893
+ /** The forecast days in display order. */
894
+ days: readonly SiWeatherWidgetForecastDay[];
895
+ /** Optional extra columns (vertical layout only). At most five are rendered. */
896
+ columns?: readonly SiWeatherWidgetForecastColumn[];
897
+ }
898
+ /**
899
+ * Composite payload accepted by the body component. Granular widget/body inputs
900
+ * (`current`, `metrics`, `forecast`) take precedence when set.
901
+ */
902
+ interface SiWeatherWidgetData {
903
+ current: SiWeatherWidgetCurrent;
904
+ metrics?: readonly SiWeatherWidgetMetric[];
905
+ forecast?: SiWeatherWidgetForecast;
906
+ }
907
+
908
+ /**
909
+ * Result returned by a {@link SiWeatherIconResolver}. Implementations should
910
+ * return either {@link icon} (rendered via `<si-icon>`) or {@link src}
911
+ * (rendered as a plain `<img>`). When both are present, {@link icon} wins.
912
+ */
913
+ interface SiWeatherIconResolution {
914
+ /** Resolved Element icon name (e.g. `"element-sun"`). Rendered via `<si-icon>`. */
915
+ icon?: string;
916
+ /** Resolved image URL. Rendered as a plain `<img>`. */
917
+ src?: string;
918
+ /** Resolved alt text. The widget falls back to a sensible default. */
919
+ alt?: TranslatableString;
920
+ }
921
+ /**
922
+ * Maps a semantic {@link SiWeatherIcon} to a renderable illustration. The
923
+ * library ships a {@link SiDefaultWeatherIconResolver} that maps the built-in
924
+ * {@link SiWeatherCondition} vocabulary to Element icons, so the widget renders
925
+ * a reasonable illustration out of the box. Applications can override the
926
+ * mapping or add provider-specific vocabularies by registering their own
927
+ * resolver:
928
+ *
929
+ * @example
930
+ * ```ts
931
+ * @Injectable({ providedIn: 'root' })
932
+ * export class MyWeatherIconResolver extends SiWeatherIconResolver {
933
+ * override resolve(icon: SiWeatherIcon): SiWeatherIconResolution | null {
934
+ * // ...
935
+ * }
936
+ * }
937
+ * ```
938
+ *
939
+ * Resolvers SHOULD return `null` for unknown or `'unknown'` conditions so the
940
+ * widget can skip the illustration.
941
+ */
942
+ declare abstract class SiWeatherIconResolver {
943
+ abstract resolve(icon: SiWeatherIcon): SiWeatherIconResolution | null;
944
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiWeatherIconResolver, never>;
945
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SiWeatherIconResolver>;
946
+ }
947
+ /**
948
+ * Built-in resolver that maps the library's minimal
949
+ * {@link SiWeatherCondition} vocabulary to Element icons:
950
+ *
951
+ * - `clear` → `element-sun`
952
+ * - `clouds` → `element-cloudy`
953
+ * - `rain` → `element-rain`
954
+ * - `storm` → `element-storm`
955
+ * - `wind` → `element-wind`
956
+ * - `unknown` → no illustration
957
+ *
958
+ * Unknown tokens fall through to `null` so callers can register a more
959
+ * capable resolver without losing the built-in fallback.
960
+ */
961
+ declare class SiDefaultWeatherIconResolver extends SiWeatherIconResolver {
962
+ resolve(icon: SiWeatherIcon): SiWeatherIconResolution | null;
963
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiDefaultWeatherIconResolver, never>;
964
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SiDefaultWeatherIconResolver>;
965
+ }
966
+
967
+ /**
968
+ * Marker directive that types the `let-` context of the shared range
969
+ * `<ng-template>` so its body gets full type checking instead of `any`.
970
+ *
971
+ * @internal
972
+ */
973
+ declare class SiWeatherRangeDefDirective {
974
+ static ngTemplateContextGuard(_dir: SiWeatherRangeDefDirective, ctx: unknown): ctx is {
975
+ $implicit: SiWeatherWidgetCurrent;
976
+ };
977
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiWeatherRangeDefDirective, never>;
978
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiWeatherRangeDefDirective, "[siWeatherRangeDef]", never, {}, {}, never, never, true, never>;
979
+ }
980
+ /**
981
+ * Body of the `<si-weather-widget>`. Useful for compositions that do not need
982
+ * the surrounding `<si-card>` chrome (e.g. embedding the weather inside a
983
+ * custom container).
984
+ *
985
+ * Data is supplied as a composite {@link value} payload of type
986
+ * {@link SiWeatherWidgetData}.
987
+ *
988
+ * The body delegates illustration resolution to the injected
989
+ * {@link SiWeatherIconResolver}. The library ships a default resolver that
990
+ * maps the built-in {@link SiWeatherCondition} vocabulary to Element icons.
991
+ *
992
+ * In the `vertical` layout the forecast list responsively hides additional
993
+ * data columns (wind, humidity, …) via pure CSS container queries when the
994
+ * widget becomes too narrow. See `si-weather-widget-body.component.scss` for
995
+ * the thresholds.
996
+ */
997
+ declare class SiWeatherWidgetBodyComponent extends SiWidgetBaseDirective<SiWeatherWidgetData> {
998
+ /**
999
+ * Visual layout. {@link SiWeatherWidgetLayout}.
1000
+ *
1001
+ * @defaultValue 'vertical'
1002
+ */
1003
+ readonly layout: _angular_core.InputSignal<SiWeatherWidgetLayout>;
1004
+ /**
1005
+ * Optional location label, shown inside the body in the compact layout only.
1006
+ * The non-compact layouts render the location via the `<si-card>` heading
1007
+ * managed by `SiWeatherWidgetComponent`.
1008
+ */
1009
+ readonly location: _angular_core.InputSignal<TranslatableString | undefined>;
1010
+ /**
1011
+ * Accessible label for the additional data list.
1012
+ *
1013
+ * @defaultValue
1014
+ * ```
1015
+ * t(() => $localize`:@@SI_WEATHER_WIDGET.METRICS_LABEL:Additional weather data`)
1016
+ * ```
1017
+ */
1018
+ readonly metricsLabel: _angular_core.InputSignal<TranslatableString>;
1019
+ /**
1020
+ * Accessible label for the forecast section.
1021
+ *
1022
+ * @defaultValue
1023
+ * ```
1024
+ * t(() => $localize`:@@SI_WEATHER_WIDGET.FORECAST_LABEL:Weather forecast`)
1025
+ * ```
1026
+ */
1027
+ readonly forecastLabel: _angular_core.InputSignal<TranslatableString>;
1028
+ protected readonly layoutClass: _angular_core.Signal<string>;
1029
+ protected readonly isCompact: _angular_core.Signal<boolean>;
1030
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiWeatherWidgetBodyComponent, never>;
1031
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiWeatherWidgetBodyComponent, "si-weather-widget-body", never, { "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "location": { "alias": "location"; "required": false; "isSignal": true; }; "metricsLabel": { "alias": "metricsLabel"; "required": false; "isSignal": true; }; "forecastLabel": { "alias": "forecastLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1032
+ }
1033
+
1034
+ /**
1035
+ * Dashboard widget for current weather conditions, additional metrics and an
1036
+ * optional multi-day forecast.
1037
+ *
1038
+ * The widget supports three layouts (see {@link SiWeatherWidgetLayout}):
1039
+ *
1040
+ * - `vertical` (default): full vertical card with `<si-card>` heading,
1041
+ * illustration, today block, optional additional data and an optional
1042
+ * forecast table with up to five extra columns.
1043
+ * - `horizontal`: wider card with the today block laid out side by side and a
1044
+ * horizontal forecast strip below. The forecast SHOULD contain at least three
1045
+ * days for a visually balanced layout.
1046
+ * - `compact`: condensed variant without a card header. The {@link location} is
1047
+ * rendered next to the illustration. The forecast is not shown.
1048
+ *
1049
+ * Data is supplied as a composite {@link value} payload of type
1050
+ * {@link SiWeatherWidgetData}.
1051
+ *
1052
+ * Weather illustrations are resolved by an optional `SiWeatherIconResolver`
1053
+ * that application developers register. Without a resolver the widget only
1054
+ * renders illustrations when callers pass a direct `illustration.src`.
1055
+ */
1056
+ declare class SiWeatherWidgetComponent {
1057
+ /**
1058
+ * Card heading text. Used as the card header in `vertical` and `horizontal`
1059
+ * layouts. In the `compact` layout, the location is rendered inside the body
1060
+ * instead and this input is ignored.
1061
+ */
1062
+ readonly heading: _angular_core.InputSignal<TranslatableString | undefined>;
1063
+ /**
1064
+ * Location displayed next to the illustration in the `compact` layout. Has
1065
+ * no effect in `vertical` or `horizontal` layouts; use {@link heading} there.
1066
+ */
1067
+ readonly location: _angular_core.InputSignal<TranslatableString | undefined>;
1068
+ /**
1069
+ * Visual layout. {@link SiWeatherWidgetLayout}.
1070
+ *
1071
+ * @defaultValue 'vertical'
1072
+ */
1073
+ readonly layout: _angular_core.InputSignal<SiWeatherWidgetLayout>;
1074
+ /**
1075
+ * Composite weather payload of type {@link SiWeatherWidgetData}.
1076
+ */
1077
+ readonly value: _angular_core.InputSignal<SiWeatherWidgetData | undefined>;
1078
+ /**
1079
+ * Input list of primary action items. Supports up to **4** actions and omits additional ones.
1080
+ *
1081
+ * @defaultValue []
1082
+ */
1083
+ readonly primaryActions: _angular_core.InputSignal<ContentActionBarMainItem[]>;
1084
+ /**
1085
+ * Input list of secondary action items.
1086
+ *
1087
+ * @defaultValue []
1088
+ */
1089
+ readonly secondaryActions: _angular_core.InputSignal<MenuItem$1[]>;
1090
+ /**
1091
+ * Option to disable automatic start of skeleton loading indication.
1092
+ *
1093
+ * @defaultValue false
1094
+ */
1095
+ readonly disableAutoLoadingIndicator: _angular_core.InputSignalWithTransform<boolean, unknown>;
1096
+ /**
1097
+ * Input to start and stop the skeleton loading indication.
1098
+ *
1099
+ * @defaultValue false
1100
+ */
1101
+ readonly showLoadingIndicator: _angular_core.InputSignalWithTransform<boolean, unknown>;
1102
+ /**
1103
+ * Initial delay time in milliseconds before enabling loading indicator.
1104
+ * Only used once initially during construction.
1105
+ *
1106
+ * @defaultValue 300
1107
+ */
1108
+ readonly initialLoadingIndicatorDebounceTime: _angular_core.InputSignal<number>;
1109
+ /**
1110
+ * Image source for the card.
1111
+ */
1112
+ readonly imgSrc: _angular_core.InputSignal<string | undefined>;
1113
+ /**
1114
+ * Alt text for a provided image.
1115
+ */
1116
+ readonly imgAlt: _angular_core.InputSignal<TranslatableString | undefined>;
1117
+ /**
1118
+ * Defines if an image is placed on top or start (left) of the card.
1119
+ *
1120
+ * @defaultValue 'vertical'
1121
+ */
1122
+ readonly imgDir: _angular_core.InputSignal<"horizontal" | "vertical">;
1123
+ /**
1124
+ * Sets the image [object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) CSS property.
1125
+ *
1126
+ * @defaultValue 'scale-down'
1127
+ */
1128
+ readonly imgObjectFit: _angular_core.InputSignal<"fill" | "contain" | "cover" | "none" | "scale-down">;
1129
+ /**
1130
+ * Sets the image [object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) CSS property.
1131
+ */
1132
+ readonly imgObjectPosition: _angular_core.InputSignal<string | undefined>;
1133
+ /**
1134
+ * Optional accent line.
1135
+ */
1136
+ readonly accentLine: _angular_core.InputSignal<AccentLineType | undefined>;
1137
+ protected readonly accentClass: _angular_core.Signal<string>;
1138
+ protected readonly cardHeading: _angular_core.Signal<TranslatableString | undefined>;
1139
+ protected readonly bodyLocation: _angular_core.Signal<TranslatableString | undefined>;
1140
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiWeatherWidgetComponent, never>;
1141
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiWeatherWidgetComponent, "si-weather-widget", never, { "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "location": { "alias": "location"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "primaryActions": { "alias": "primaryActions"; "required": false; "isSignal": true; }; "secondaryActions": { "alias": "secondaryActions"; "required": false; "isSignal": true; }; "disableAutoLoadingIndicator": { "alias": "disableAutoLoadingIndicator"; "required": false; "isSignal": true; }; "showLoadingIndicator": { "alias": "showLoadingIndicator"; "required": false; "isSignal": true; }; "initialLoadingIndicatorDebounceTime": { "alias": "initialLoadingIndicatorDebounceTime"; "required": false; "isSignal": true; }; "imgSrc": { "alias": "imgSrc"; "required": false; "isSignal": true; }; "imgAlt": { "alias": "imgAlt"; "required": false; "isSignal": true; }; "imgDir": { "alias": "imgDir"; "required": false; "isSignal": true; }; "imgObjectFit": { "alias": "imgObjectFit"; "required": false; "isSignal": true; }; "imgObjectPosition": { "alias": "imgObjectPosition"; "required": false; "isSignal": true; }; "accentLine": { "alias": "accentLine"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1142
+ }
1143
+
1144
+ export { SiDashboardCardComponent, SiDashboardComponent, SiDashboardModule, SiDashboardService, SiDefaultWeatherIconResolver, SiLinkWidgetComponent, SiListWidgetBodyComponent, SiListWidgetComponent, SiListWidgetItemComponent, SiTimelineWidgetBodyComponent, SiTimelineWidgetComponent, SiTimelineWidgetItemComponent, SiValueWidgetBodyComponent, SiValueWidgetComponent, SiWeatherIconResolver, SiWeatherRangeDefDirective, SiWeatherWidgetBodyComponent, SiWeatherWidgetComponent };
1145
+ export type { SiListWidgetItem, SiTimelineWidgetItem, SiWeatherCondition, SiWeatherIcon, SiWeatherIconResolution, SiWeatherWidgetCurrent, SiWeatherWidgetData, SiWeatherWidgetForecast, SiWeatherWidgetForecastColumn, SiWeatherWidgetForecastDay, SiWeatherWidgetLayout, SiWeatherWidgetMetric, SortOrder, TimeLineWidgetLink, TimeLineWidgetRouterLink, TimelineWidgetActionBase, TimelineWidgetActionButton, TimelineWidgetItemAction, TimelineWidgetMenu };
@@ -266,6 +266,15 @@ declare class SiDateRangeFilterComponent implements OnChanges {
266
266
  * ```
267
267
  */
268
268
  readonly rangeEndDateMissingLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
269
+ /**
270
+ * label when range is not defined in the preview
271
+ *
272
+ * @defaultValue
273
+ * ```
274
+ * t(() => $localize`:@@SI_DATE_RANGE_FILTER.SELECT_RANGE_LABEL:Select date range`)
275
+ * ```
276
+ */
277
+ readonly selectRangeLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
269
278
  /** Event fired when the apply button has been clicked */
270
279
  readonly applyClicked: _angular_core.OutputEmitterRef<void>;
271
280
  /** Base configuration on how the dates should be displayed, parts of it may be overwritten internally. */
@@ -302,7 +311,7 @@ declare class SiDateRangeFilterComponent implements OnChanges {
302
311
  protected point2Changed(): void;
303
312
  protected selectPresetItem(event: Event, item: DateRangePreset): void;
304
313
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiDateRangeFilterComponent, never>;
305
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiDateRangeFilterComponent, "si-date-range-filter", never, { "range": { "alias": "range"; "required": true; "isSignal": true; }; "presetList": { "alias": "presetList"; "required": false; "isSignal": true; }; "presetSearch": { "alias": "presetSearch"; "required": false; "isSignal": true; }; "enableTimeSelection": { "alias": "enableTimeSelection"; "required": false; "isSignal": true; }; "basicMode": { "alias": "basicMode"; "required": false; "isSignal": true; }; "reverseInputFields": { "alias": "reverseInputFields"; "required": false; "isSignal": true; }; "showApplyButton": { "alias": "showApplyButton"; "required": false; "isSignal": true; }; "hideAdvancedMode": { "alias": "hideAdvancedMode"; "required": false; "isSignal": true; }; "refLabel": { "alias": "refLabel"; "required": false; "isSignal": true; }; "fromLabel": { "alias": "fromLabel"; "required": false; "isSignal": true; }; "toLabel": { "alias": "toLabel"; "required": false; "isSignal": true; }; "rangeLabel": { "alias": "rangeLabel"; "required": false; "isSignal": true; }; "todayLabel": { "alias": "todayLabel"; "required": false; "isSignal": true; }; "nowLabel": { "alias": "nowLabel"; "required": false; "isSignal": true; }; "dateLabel": { "alias": "dateLabel"; "required": false; "isSignal": true; }; "previewLabel": { "alias": "previewLabel"; "required": false; "isSignal": true; }; "datePlaceholder": { "alias": "datePlaceholder"; "required": false; "isSignal": true; }; "beforeLabel": { "alias": "beforeLabel"; "required": false; "isSignal": true; }; "afterLabel": { "alias": "afterLabel"; "required": false; "isSignal": true; }; "withinLabel": { "alias": "withinLabel"; "required": false; "isSignal": true; }; "valueLabel": { "alias": "valueLabel"; "required": false; "isSignal": true; }; "unitLabel": { "alias": "unitLabel"; "required": false; "isSignal": true; }; "searchLabel": { "alias": "searchLabel"; "required": false; "isSignal": true; }; "presetLabel": { "alias": "presetLabel"; "required": false; "isSignal": true; }; "advancedLabel": { "alias": "advancedLabel"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "rangeEndDateMissingLabel": { "alias": "rangeEndDateMissingLabel"; "required": false; "isSignal": true; }; "datepickerConfig": { "alias": "datepickerConfig"; "required": false; "isSignal": true; }; }, { "range": "rangeChange"; "applyClicked": "applyClicked"; }, never, never, true, never>;
314
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiDateRangeFilterComponent, "si-date-range-filter", never, { "range": { "alias": "range"; "required": true; "isSignal": true; }; "presetList": { "alias": "presetList"; "required": false; "isSignal": true; }; "presetSearch": { "alias": "presetSearch"; "required": false; "isSignal": true; }; "enableTimeSelection": { "alias": "enableTimeSelection"; "required": false; "isSignal": true; }; "basicMode": { "alias": "basicMode"; "required": false; "isSignal": true; }; "reverseInputFields": { "alias": "reverseInputFields"; "required": false; "isSignal": true; }; "showApplyButton": { "alias": "showApplyButton"; "required": false; "isSignal": true; }; "hideAdvancedMode": { "alias": "hideAdvancedMode"; "required": false; "isSignal": true; }; "refLabel": { "alias": "refLabel"; "required": false; "isSignal": true; }; "fromLabel": { "alias": "fromLabel"; "required": false; "isSignal": true; }; "toLabel": { "alias": "toLabel"; "required": false; "isSignal": true; }; "rangeLabel": { "alias": "rangeLabel"; "required": false; "isSignal": true; }; "todayLabel": { "alias": "todayLabel"; "required": false; "isSignal": true; }; "nowLabel": { "alias": "nowLabel"; "required": false; "isSignal": true; }; "dateLabel": { "alias": "dateLabel"; "required": false; "isSignal": true; }; "previewLabel": { "alias": "previewLabel"; "required": false; "isSignal": true; }; "datePlaceholder": { "alias": "datePlaceholder"; "required": false; "isSignal": true; }; "beforeLabel": { "alias": "beforeLabel"; "required": false; "isSignal": true; }; "afterLabel": { "alias": "afterLabel"; "required": false; "isSignal": true; }; "withinLabel": { "alias": "withinLabel"; "required": false; "isSignal": true; }; "valueLabel": { "alias": "valueLabel"; "required": false; "isSignal": true; }; "unitLabel": { "alias": "unitLabel"; "required": false; "isSignal": true; }; "searchLabel": { "alias": "searchLabel"; "required": false; "isSignal": true; }; "presetLabel": { "alias": "presetLabel"; "required": false; "isSignal": true; }; "advancedLabel": { "alias": "advancedLabel"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "rangeEndDateMissingLabel": { "alias": "rangeEndDateMissingLabel"; "required": false; "isSignal": true; }; "selectRangeLabel": { "alias": "selectRangeLabel"; "required": false; "isSignal": true; }; "datepickerConfig": { "alias": "datepickerConfig"; "required": false; "isSignal": true; }; }, { "range": "rangeChange"; "applyClicked": "applyClicked"; }, never, never, true, never>;
306
315
  }
307
316
 
308
317
  declare class SiDateRangeFilterModule {