@siemens/element-ng 51.0.0-rc.8 → 51.0.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 (105) hide show
  1. package/fesm2022/siemens-element-ng-ag-grid.mjs +17 -25
  2. package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-application-header.mjs +2 -2
  4. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-avatar.mjs +3 -3
  6. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-chat-messages.mjs +123 -23
  8. package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
  9. package/fesm2022/siemens-element-ng-color-picker.mjs +18 -18
  10. package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +2 -2
  12. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
  13. package/fesm2022/siemens-element-ng-dashboard.mjs +4 -4
  14. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-date-range-filter.mjs +2 -2
  16. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-datepicker.mjs +4 -4
  18. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-file-uploader.mjs +2 -2
  20. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  21. package/fesm2022/siemens-element-ng-filtered-search.mjs +2 -2
  22. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  23. package/fesm2022/siemens-element-ng-form.mjs +19 -6
  24. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  25. package/fesm2022/siemens-element-ng-formly.mjs +4 -4
  26. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  27. package/fesm2022/siemens-element-ng-icon.mjs +1 -1
  28. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
  29. package/fesm2022/siemens-element-ng-info-page.mjs +2 -2
  30. package/fesm2022/siemens-element-ng-info-page.mjs.map +1 -1
  31. package/fesm2022/siemens-element-ng-landing-page.mjs +4 -4
  32. package/fesm2022/siemens-element-ng-landing-page.mjs.map +1 -1
  33. package/fesm2022/siemens-element-ng-list-details.mjs +62 -16
  34. package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
  35. package/fesm2022/siemens-element-ng-main-detail-container.mjs +72 -24
  36. package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
  37. package/fesm2022/siemens-element-ng-maplibre.mjs +282 -6
  38. package/fesm2022/siemens-element-ng-maplibre.mjs.map +1 -1
  39. package/fesm2022/siemens-element-ng-markdown-hightlighter-highlightjs.mjs +2 -2
  40. package/fesm2022/siemens-element-ng-markdown-hightlighter-highlightjs.mjs.map +1 -1
  41. package/fesm2022/siemens-element-ng-menu.mjs +6 -6
  42. package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
  43. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +6 -6
  44. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  45. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +4 -4
  46. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  47. package/fesm2022/siemens-element-ng-result-details-list.mjs +2 -2
  48. package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
  49. package/fesm2022/siemens-element-ng-select.mjs +44 -5
  50. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  51. package/fesm2022/siemens-element-ng-side-panel.mjs +48 -13
  52. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  53. package/fesm2022/siemens-element-ng-slider.mjs +2 -2
  54. package/fesm2022/siemens-element-ng-slider.mjs.map +1 -1
  55. package/fesm2022/siemens-element-ng-source-chip.mjs +2 -2
  56. package/fesm2022/siemens-element-ng-source-chip.mjs.map +1 -1
  57. package/fesm2022/siemens-element-ng-split.mjs +18 -16
  58. package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
  59. package/fesm2022/siemens-element-ng-status-bar.mjs +2 -2
  60. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  61. package/fesm2022/siemens-element-ng-status-toggle.mjs +2 -2
  62. package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
  63. package/fesm2022/siemens-element-ng-summary-chip.mjs +2 -2
  64. package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -1
  65. package/fesm2022/siemens-element-ng-summary-widget.mjs +2 -2
  66. package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -1
  67. package/fesm2022/siemens-element-ng-system-banner.mjs +5 -5
  68. package/fesm2022/siemens-element-ng-system-banner.mjs.map +1 -1
  69. package/fesm2022/siemens-element-ng-tabs.mjs +93 -71
  70. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  71. package/fesm2022/siemens-element-ng-toast-notification.mjs +2 -2
  72. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
  73. package/fesm2022/siemens-element-ng-tour.mjs +2 -2
  74. package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
  75. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  76. package/fesm2022/siemens-element-ng-tree-view.mjs +4 -4
  77. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  78. package/package.json +4 -4
  79. package/schematics/collection.json +5 -0
  80. package/schematics/migrate-tabs-legacy/index.js +5 -0
  81. package/schematics/migrate-tabs-legacy/migrate-tabs-legacy-rule.js +675 -0
  82. package/schematics/migrate-tabs-legacy/schema.json +14 -0
  83. package/schematics/migrations/data/css-custom-properties.js +67 -1
  84. package/schematics/migrations/data/element-class-changes.js +31 -12
  85. package/schematics/ng-update/migrate-list-details-units.js +86 -0
  86. package/schematics/ng-update/migrate-main-detail-units.js +89 -0
  87. package/schematics/ng-update/migrate-split-collapse.js +1 -32
  88. package/schematics/ng-update/migrate-split-scale.js +524 -0
  89. package/schematics/ng-update/migrate-split-sizes.js +5 -3
  90. package/schematics/ng-update/migrate-to-v51.js +6 -0
  91. package/schematics/utils/index.js +1 -0
  92. package/schematics/utils/template-edit-utils.js +35 -0
  93. package/schematics/utils/template-utils.js +31 -45
  94. package/template-i18n.json +1 -0
  95. package/types/siemens-element-ng-avatar.d.ts +1 -1
  96. package/types/siemens-element-ng-chat-messages.d.ts +81 -17
  97. package/types/siemens-element-ng-form.d.ts +3 -0
  98. package/types/siemens-element-ng-list-details.d.ts +25 -3
  99. package/types/siemens-element-ng-main-detail-container.d.ts +23 -3
  100. package/types/siemens-element-ng-maplibre.d.ts +131 -7
  101. package/types/siemens-element-ng-select.d.ts +31 -4
  102. package/types/siemens-element-ng-side-panel.d.ts +17 -3
  103. package/types/siemens-element-ng-split.d.ts +3 -10
  104. package/types/siemens-element-ng-system-banner.d.ts +2 -2
  105. package/types/siemens-element-ng-translate.d.ts +1 -0
@@ -3,54 +3,40 @@
3
3
  * SPDX-License-Identifier: MIT
4
4
  */
5
5
  import ts from 'typescript';
6
- export const getInlineTemplates = (source) => {
7
- const templateNodes = [];
8
- const componentDecoratorVisitor = (node) => {
9
- if (ts.isDecorator(node) &&
10
- ts.isCallExpression(node.expression) &&
11
- ts.isIdentifier(node.expression.expression) &&
12
- node.expression.expression.text === 'Component') {
13
- const arg = node.expression.arguments[0];
14
- if (ts.isObjectLiteralExpression(arg)) {
15
- const template = arg.properties.find(property => ts.isPropertyAssignment(property) &&
16
- ts.isIdentifier(property.name) &&
17
- property.name.text === 'template');
18
- const initializer = template?.initializer;
19
- if (initializer &&
20
- (ts.isNoSubstitutionTemplateLiteral(initializer) || ts.isStringLiteral(initializer))) {
21
- templateNodes.push(initializer);
6
+ export const getComponentTemplates = (source) => {
7
+ const templates = [];
8
+ const visit = (node) => {
9
+ if (ts.isClassDeclaration(node)) {
10
+ for (const decorator of ts.getDecorators(node) ?? []) {
11
+ const call = decorator.expression;
12
+ if (!ts.isCallExpression(call) ||
13
+ !ts.isIdentifier(call.expression) ||
14
+ call.expression.text !== 'Component') {
15
+ continue;
22
16
  }
23
- }
24
- }
25
- else {
26
- node.forEachChild(componentDecoratorVisitor);
27
- }
28
- };
29
- source.forEachChild(componentDecoratorVisitor);
30
- return templateNodes;
31
- };
32
- export const getTemplateUrl = (source) => {
33
- const templateUrls = [];
34
- const componentDecoratorVisitor = (node) => {
35
- if (ts.isDecorator(node) &&
36
- ts.isCallExpression(node.expression) &&
37
- ts.isIdentifier(node.expression.expression) &&
38
- node.expression.expression.text === 'Component') {
39
- const arg = node.expression.arguments[0];
40
- if (ts.isObjectLiteralExpression(arg)) {
41
- const template = arg.properties.find(property => ts.isPropertyAssignment(property) &&
42
- ts.isIdentifier(property.name) &&
43
- property.name.text === 'templateUrl');
44
- const initializer = template?.initializer;
45
- if (initializer && ts.isStringLiteral(initializer)) {
46
- templateUrls.push(initializer.text);
17
+ const metadata = call.arguments[0];
18
+ if (!metadata || !ts.isObjectLiteralExpression(metadata)) {
19
+ continue;
20
+ }
21
+ for (const property of metadata.properties) {
22
+ if (!ts.isPropertyAssignment(property) || !ts.isIdentifier(property.name)) {
23
+ continue;
24
+ }
25
+ const value = property.initializer;
26
+ if (property.name.text === 'template' &&
27
+ (ts.isStringLiteral(value) || ts.isNoSubstitutionTemplateLiteral(value))) {
28
+ templates.push({ component: node, kind: 'inline', node: value });
29
+ }
30
+ else if (property.name.text === 'templateUrl' && ts.isStringLiteral(value)) {
31
+ templates.push({ component: node, kind: 'external', url: value.text });
32
+ }
47
33
  }
48
34
  }
49
35
  }
50
- else {
51
- node.forEachChild(componentDecoratorVisitor);
52
- }
36
+ ts.forEachChild(node, visit);
53
37
  };
54
- source.forEachChild(componentDecoratorVisitor);
55
- return templateUrls;
38
+ visit(source);
39
+ return templates;
56
40
  };
41
+ export const getInlineTemplates = (source) => getComponentTemplates(source).flatMap(template => template.kind === 'inline' ? [template.node] : []);
42
+ export const getTemplateUrl = (source) => getComponentTemplates(source).flatMap(template => template.kind === 'external' ? [template.url] : []);
@@ -205,6 +205,7 @@
205
205
  "SI_MAP.WINDOWS_HELP": "Use Ctrl + scroll to zoom the map",
206
206
  "SI_MAP.ZOOM_IN": "Zoom in",
207
207
  "SI_MAP.ZOOM_OUT": "Zoom out",
208
+ "SI_MAP_CLUSTER.LABEL": "Cluster with {{count}} locations",
208
209
  "SI_MARKDOWN.COPIED_CODE": "Copied",
209
210
  "SI_MARKDOWN.COPY_CODE": "Copy code",
210
211
  "SI_MARKDOWN.COPY_TABLE_AS_CSV": "Copy table as CSV",
@@ -9,7 +9,7 @@ import { TranslatableString } from '@siemens/element-translate-ng/translate';
9
9
  */
10
10
  declare class SiAvatarBackgroundColorDirective implements OnChanges {
11
11
  /**
12
- * The desired color index from $si-sys-data-categorial-* color tokens. This can be set to any kind of
12
+ * The desired color index from $si-sys-data-categorical-* color tokens. This can be set to any kind of
13
13
  * positive integer that is then mapped to a color index.
14
14
  * A better way to set a pseudo-random color is to set {@link autoColor} to `true`.
15
15
  *
@@ -1,10 +1,9 @@
1
1
  import * as _siemens_element_translate_ng_translate from '@siemens/element-translate-ng/translate';
2
- import { TranslatableString as TranslatableString$1 } from '@siemens/element-translate-ng/translate';
2
+ import { TranslatableString } from '@siemens/element-translate-ng/translate';
3
3
  import * as _angular_core from '@angular/core';
4
4
  import { TemplateRef, AfterContentInit, OnDestroy, AfterViewInit, ElementRef } from '@angular/core';
5
5
  import { MenuItem } from '@siemens/element-ng/menu';
6
6
  import { SourceReference } from '@siemens/element-ng/source-chip';
7
- import { TranslatableString } from '@siemens/element-translate-ng/translate-types';
8
7
  import { SiModalService } from '@siemens/element-ng/modal';
9
8
  import { FileUploadError, UploadFile } from '@siemens/element-ng/file-uploader';
10
9
  import * as i1 from '@siemens/element-ng/resize-observer';
@@ -99,6 +98,73 @@ declare class SiAiMessageComponent {
99
98
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiAiMessageComponent, "si-ai-message", never, { "content": { "alias": "content"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "secondaryActions": { "alias": "secondaryActions"; "required": false; "isSignal": true; }; "actionParam": { "alias": "actionParam"; "required": false; "isSignal": true; }; "sources": { "alias": "sources"; "required": false; "isSignal": true; }; "secondaryActionsLabel": { "alias": "secondaryActionsLabel"; "required": false; "isSignal": true; }; }, { "sourceClicked": "sourceClicked"; }, never, ["*"], true, never>;
100
99
  }
101
100
 
101
+ /**
102
+ * Collapsible activity message for displaying progress and intermediate steps in a chat.
103
+ *
104
+ * @experimental
105
+ */
106
+ declare class SiActivityMessageComponent {
107
+ /** Activity heading. */
108
+ readonly heading: _angular_core.InputSignal<TranslatableString>;
109
+ /** Activity icon. */
110
+ readonly icon: _angular_core.InputSignal<string | undefined>;
111
+ /** Current state of the activity. */
112
+ readonly state: _angular_core.InputSignal<"running" | "failed" | undefined>;
113
+ /**
114
+ * Whether the activity details are expanded.
115
+ *
116
+ * @defaultValue false
117
+ */
118
+ readonly expanded: _angular_core.ModelSignal<boolean>;
119
+ protected readonly icons: Record<"elementRight2" | "elementCircleFilled" | "elementIssue", string>;
120
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiActivityMessageComponent, never>;
121
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiActivityMessageComponent, "si-activity-message", never, { "heading": { "alias": "heading"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, ["*"], true, never>;
122
+ }
123
+
124
+ /**
125
+ * Titled content part for use inside an activity message.
126
+ *
127
+ * @experimental
128
+ */
129
+ declare class SiActivityMessagePartComponent {
130
+ /** Part heading. */
131
+ readonly heading: _angular_core.InputSignal<TranslatableString>;
132
+ /**
133
+ * Whether the part can be collapsed and expanded.
134
+ *
135
+ * @defaultValue false
136
+ */
137
+ readonly collapsible: _angular_core.InputSignalWithTransform<boolean, unknown>;
138
+ /**
139
+ * Whether collapsible content is expanded.
140
+ *
141
+ * @defaultValue true
142
+ */
143
+ readonly expanded: _angular_core.ModelSignal<boolean>;
144
+ protected readonly icons: Record<"elementRight2" | "elementCircleFilled", string>;
145
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiActivityMessagePartComponent, never>;
146
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiActivityMessagePartComponent, "si-activity-message-part", never, { "heading": { "alias": "heading"; "required": true; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, ["*"], true, never>;
147
+ }
148
+
149
+ /**
150
+ * Collapsible container for grouping multiple activity messages.
151
+ *
152
+ * @experimental
153
+ */
154
+ declare class SiActivityTraceComponent {
155
+ /** Trace heading. */
156
+ readonly heading: _angular_core.InputSignal<TranslatableString>;
157
+ /**
158
+ * Whether the trace content is expanded.
159
+ *
160
+ * @defaultValue false
161
+ */
162
+ readonly expanded: _angular_core.ModelSignal<boolean>;
163
+ protected readonly icons: Record<"elementRight2", string>;
164
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiActivityTraceComponent, never>;
165
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiActivityTraceComponent, "si-activity-trace", never, { "heading": { "alias": "heading"; "required": true; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, ["*"], true, never>;
166
+ }
167
+
102
168
  /**
103
169
  * Attachment item interface for file attachments in chat messages, used by {@link SiAttachmentListComponent} and inside {@link SiUserMessageComponent} as well as {@link SiChatInputComponent}.
104
170
  *
@@ -328,7 +394,7 @@ declare class SiChatInputComponent implements AfterViewInit {
328
394
  * t(() => $localize`:@@SI_CHAT_INPUT.PLACEHOLDER:Enter a message…`)
329
395
  * ```
330
396
  */
331
- readonly placeholder: _angular_core.InputSignal<TranslatableString$1>;
397
+ readonly placeholder: _angular_core.InputSignal<TranslatableString>;
332
398
  /**
333
399
  * Whether the input is disabled
334
400
  * @defaultValue false
@@ -356,10 +422,9 @@ declare class SiChatInputComponent implements AfterViewInit {
356
422
  * If not provided, the component will look for projected content with the `siChatInputDisclaimer` directive.
357
423
  * If both are empty, no disclaimer section will be shown (handled via CSS :empty).
358
424
  */
359
- readonly disclaimer: _angular_core.InputSignal<TranslatableString$1 | undefined>;
425
+ readonly disclaimer: _angular_core.InputSignal<TranslatableString | undefined>;
360
426
  /**
361
- * Primary actions available in the input (attach files, etc.)
362
- * All actions displayed inline
427
+ * Primary actions available in the input. Provide at most one action.
363
428
  * @defaultValue []
364
429
  */
365
430
  readonly actions: _angular_core.InputSignal<MessageAction[]>;
@@ -406,7 +471,7 @@ declare class SiChatInputComponent implements AfterViewInit {
406
471
  * t(() => $localize`:@@SI_CHAT_INPUT.SEND:Send`)
407
472
  * ```
408
473
  */
409
- readonly sendButtonLabel: _angular_core.InputSignal<TranslatableString$1>;
474
+ readonly sendButtonLabel: _angular_core.InputSignal<TranslatableString>;
410
475
  /**
411
476
  * Send button icon
412
477
  *
@@ -421,7 +486,7 @@ declare class SiChatInputComponent implements AfterViewInit {
421
486
  * t(() => $localize`:@@SI_CHAT_INPUT.INTERRUPT:Stop processing`)
422
487
  * ```
423
488
  */
424
- readonly interruptButtonLabel: _angular_core.InputSignal<TranslatableString$1>;
489
+ readonly interruptButtonLabel: _angular_core.InputSignal<TranslatableString>;
425
490
  /**
426
491
  * Auto-focus the input on component initialization
427
492
  * @defaultValue false
@@ -435,7 +500,7 @@ declare class SiChatInputComponent implements AfterViewInit {
435
500
  * t(() => $localize`:@@SI_CHAT_INPUT.ATTACH_FILE:Attach file`)
436
501
  * ```
437
502
  */
438
- readonly attachFileLabel: _angular_core.InputSignal<TranslatableString$1>;
503
+ readonly attachFileLabel: _angular_core.InputSignal<TranslatableString>;
439
504
  /**
440
505
  * Remove attachment aria label.
441
506
  * The attachment name is available with `{{attachment}}`.
@@ -445,7 +510,7 @@ declare class SiChatInputComponent implements AfterViewInit {
445
510
  * t(() => $localize`:@@SI_ATTACHMENT_LIST.REMOVE_ATTACHMENT:Remove {{attachment}}`)
446
511
  * ```
447
512
  */
448
- readonly removeAttachmentLabel: _angular_core.InputSignal<TranslatableString$1>;
513
+ readonly removeAttachmentLabel: _angular_core.InputSignal<TranslatableString>;
449
514
  /**
450
515
  * More actions button aria label
451
516
  *
@@ -454,7 +519,7 @@ declare class SiChatInputComponent implements AfterViewInit {
454
519
  * t(() => $localize`:@@SI_CHAT_INPUT.SECONDARY_ACTIONS:Additional actions`)
455
520
  * ```
456
521
  */
457
- readonly secondaryActionsLabel: _angular_core.InputSignal<TranslatableString$1>;
522
+ readonly secondaryActionsLabel: _angular_core.InputSignal<TranslatableString>;
458
523
  /**
459
524
  * Suggested follow-up prompts to display as pill buttons above the chat input.
460
525
  * Use `followUpPromptSelected` to handle selection and update the input value.
@@ -487,14 +552,14 @@ declare class SiChatInputComponent implements AfterViewInit {
487
552
  protected readonly hasAttachments: _angular_core.Signal<boolean>;
488
553
  protected readonly hasActions: _angular_core.Signal<boolean>;
489
554
  protected readonly hasSecondaryActions: _angular_core.Signal<boolean>;
490
- protected readonly allMenuActions: _angular_core.Signal<MenuItem[]>;
555
+ protected readonly combinedMenuActions: _angular_core.Signal<MenuItem[]>;
491
556
  protected readonly hasMenuActions: _angular_core.Signal<boolean>;
492
557
  protected triggerFileInput(): void;
493
558
  protected readonly canSend: _angular_core.Signal<boolean>;
494
559
  protected readonly showInterruptButton: _angular_core.Signal<boolean>;
495
560
  protected readonly buttonDisabled: _angular_core.Signal<boolean>;
496
561
  protected readonly buttonIcon: _angular_core.Signal<string>;
497
- protected readonly buttonLabel: _angular_core.Signal<TranslatableString$1>;
562
+ protected readonly buttonLabel: _angular_core.Signal<TranslatableString>;
498
563
  protected readonly dragOver: _angular_core.WritableSignal<boolean>;
499
564
  private readonly injector;
500
565
  protected onInputChange(value: string): void;
@@ -673,10 +738,10 @@ declare class SiUserMessageComponent {
673
738
  }
674
739
 
675
740
  interface PromptCategory {
676
- label: TranslatableString$1;
741
+ label: TranslatableString;
677
742
  }
678
743
  interface PromptSuggestion {
679
- text: TranslatableString$1;
744
+ text: TranslatableString;
680
745
  }
681
746
  /**
682
747
  * AI welcome screen component for displaying initial state in AI chat interfaces.
@@ -691,7 +756,6 @@ interface PromptSuggestion {
691
756
  * - Clickable prompt suggestion cards
692
757
  * - Optional refresh button to regenerate suggestions
693
758
  *
694
- * @see {@link SiAiChatContainerComponent} for the AI chat container which uses this component
695
759
  * @see {@link SiChatContainerComponent} for the base chat container
696
760
  *
697
761
  * @experimental
@@ -722,5 +786,5 @@ declare class SiAiWelcomeScreenComponent {
722
786
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiAiWelcomeScreenComponent, "si-ai-welcome-screen", never, { "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "selectedCategory": { "alias": "selectedCategory"; "required": false; "isSignal": true; }; "promptSuggestions": { "alias": "promptSuggestions"; "required": false; "isSignal": true; }; }, { "selectedCategory": "selectedCategoryChange"; "promptSelected": "promptSelected"; }, never, ["*"], true, never>;
723
787
  }
724
788
 
725
- export { SiAiMessageComponent, SiAiWelcomeScreenComponent, SiAttachmentListComponent, SiChatContainerComponent, SiChatContainerInputDirective, SiChatInputComponent, SiChatInputDisclaimerDirective, SiChatMessageActionDirective, SiChatMessageComponent, SiUserMessageComponent };
789
+ export { SiActivityMessageComponent, SiActivityMessagePartComponent, SiActivityTraceComponent, SiAiMessageComponent, SiAiWelcomeScreenComponent, SiAttachmentListComponent, SiChatContainerComponent, SiChatContainerInputDirective, SiChatInputComponent, SiChatInputDisclaimerDirective, SiChatMessageActionDirective, SiChatMessageComponent, SiUserMessageComponent };
726
790
  export type { Attachment, ChatInputAttachment, MessageAction, PromptCategory, PromptSuggestion };
@@ -340,6 +340,8 @@ declare class SiFormItemComponent implements AfterContentInit, AfterContentCheck
340
340
  readonly required: _angular_core.Signal<boolean>;
341
341
  /** @internal */
342
342
  readonly control: _angular_core.Signal<_angular_forms.AbstractControl<any, any, any> | null | undefined>;
343
+ /** @internal */
344
+ readonly radioGroupName: _angular_core.Signal<string | undefined>;
343
345
  ngOnChanges(changes: SimpleChanges<this>): void;
344
346
  ngOnInit(): void;
345
347
  ngAfterContentInit(): void;
@@ -358,6 +360,7 @@ declare class SiFormItemComponent implements AfterContentInit, AfterContentCheck
358
360
 
359
361
  interface SiFormFieldsetControl {
360
362
  readonly control: Signal<unknown>;
363
+ readonly radioGroupName?: Signal<string | undefined>;
361
364
  readonly required: Signal<boolean>;
362
365
  readonly touched: Signal<boolean>;
363
366
  readonly errors: Signal<readonly SiFormError[]>;
@@ -1,5 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { OnInit, OnChanges, OnDestroy, SimpleChanges, Signal } from '@angular/core';
3
+ import { SplitUnit } from '@siemens/element-ng/split';
3
4
  import { Subject, BehaviorSubject } from 'rxjs';
4
5
  import { TranslatableString } from '@siemens/element-translate-ng/translate';
5
6
 
@@ -8,6 +9,8 @@ declare class SiListDetailsComponent implements OnInit, OnChanges, OnDestroy {
8
9
  private elementRef;
9
10
  private resizeObserver;
10
11
  private readonly listDetailsContainer;
12
+ private readonly listPart;
13
+ private readonly split;
11
14
  protected readonly animationsGloballyDisabled: boolean;
12
15
  /**
13
16
  * A numeric value defining the minimum width in px, which the component needs
@@ -35,11 +38,22 @@ declare class SiListDetailsComponent implements OnInit, OnChanges, OnDestroy {
35
38
  */
36
39
  readonly disableResizing: _angular_core.InputSignalWithTransform<boolean, unknown>;
37
40
  /**
38
- * The percentage width of the list view of the overall component width.
41
+ * The list pane size, updated when the split is resized or restored.
42
+ * With resizing enabled, the value uses {@link listWidthUnit}: pixels for `px`,
43
+ * or a percentage-based fractional weight for `fr`. With resizing disabled,
44
+ * the value is always interpreted as a percentage.
45
+ * Percentage values must be in the inclusive range 0-100; values outside this
46
+ * range fall back to a 32/68 list/details split.
39
47
  *
40
- * @defaultValue 32
48
+ * @defaultValue 300
41
49
  */
42
50
  readonly listWidth: _angular_core.ModelSignal<number>;
51
+ /**
52
+ * Unit used for the list split part when resizing is enabled.
53
+ *
54
+ * @defaultValue 'px'
55
+ */
56
+ readonly listWidthUnit: _angular_core.InputSignal<SplitUnit>;
43
57
  /**
44
58
  * Sets the minimal width of the list component in pixel.
45
59
  *
@@ -57,6 +71,13 @@ declare class SiListDetailsComponent implements OnInit, OnChanges, OnDestroy {
57
71
  * Required for persistence of ui state.
58
72
  */
59
73
  readonly stateId: _angular_core.InputSignal<string | undefined>;
74
+ /**
75
+ * Percentage width shared by static and resizable `fr` layouts.
76
+ * The migration sets `listWidthUnit="fr"` without setting `listWidth`, so the default
77
+ * pixel width of 300 must fall back to 32 to preserve the legacy 32/68 split.
78
+ * @internal
79
+ */
80
+ readonly listWidthPercent: _angular_core.Signal<number>;
60
81
  protected readonly splitSizes: _angular_core.Signal<[number, number]>;
61
82
  protected readonly listStateId: _angular_core.Signal<string | undefined>;
62
83
  protected readonly detailsStateId: _angular_core.Signal<string | undefined>;
@@ -79,6 +100,7 @@ declare class SiListDetailsComponent implements OnInit, OnChanges, OnDestroy {
79
100
  ngOnDestroy(): void;
80
101
  private readonly resizeDimensions;
81
102
  protected onSplitSizesChange(sizes: number[]): void;
103
+ private getListSizePx;
82
104
  /** @internal */
83
105
  detailsBackClicked(options?: {
84
106
  animationDone?: () => void;
@@ -86,7 +108,7 @@ declare class SiListDetailsComponent implements OnInit, OnChanges, OnDestroy {
86
108
  protected detailsExpandedAnimationDone(event: TransitionEvent): void;
87
109
  private transferFocus;
88
110
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiListDetailsComponent, never>;
89
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiListDetailsComponent, "si-list-details", never, { "expandBreakpoint": { "alias": "expandBreakpoint"; "required": false; "isSignal": true; }; "detailsActive": { "alias": "detailsActive"; "required": false; "isSignal": true; }; "disableResizing": { "alias": "disableResizing"; "required": false; "isSignal": true; }; "listWidth": { "alias": "listWidth"; "required": false; "isSignal": true; }; "minListSize": { "alias": "minListSize"; "required": false; "isSignal": true; }; "minDetailsSize": { "alias": "minDetailsSize"; "required": false; "isSignal": true; }; "stateId": { "alias": "stateId"; "required": false; "isSignal": true; }; }, { "detailsActive": "detailsActiveChange"; "listWidth": "listWidthChange"; }, never, ["si-list-pane", "si-details-pane"], true, never>;
111
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiListDetailsComponent, "si-list-details", never, { "expandBreakpoint": { "alias": "expandBreakpoint"; "required": false; "isSignal": true; }; "detailsActive": { "alias": "detailsActive"; "required": false; "isSignal": true; }; "disableResizing": { "alias": "disableResizing"; "required": false; "isSignal": true; }; "listWidth": { "alias": "listWidth"; "required": false; "isSignal": true; }; "listWidthUnit": { "alias": "listWidthUnit"; "required": false; "isSignal": true; }; "minListSize": { "alias": "minListSize"; "required": false; "isSignal": true; }; "minDetailsSize": { "alias": "minDetailsSize"; "required": false; "isSignal": true; }; "stateId": { "alias": "stateId"; "required": false; "isSignal": true; }; }, { "detailsActive": "detailsActiveChange"; "listWidth": "listWidthChange"; }, never, ["si-list-pane", "si-details-pane"], true, never>;
90
112
  }
91
113
 
92
114
  declare class SiListPaneComponent {
@@ -1,5 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { OnInit, OnChanges, SimpleChanges } from '@angular/core';
3
+ import { SplitUnit } from '@siemens/element-ng/split';
3
4
  import { TranslatableString } from '@siemens/element-translate-ng/translate';
4
5
 
5
6
  declare class SiMainDetailContainerComponent implements OnInit, OnChanges {
@@ -9,6 +10,8 @@ declare class SiMainDetailContainerComponent implements OnInit, OnChanges {
9
10
  private readonly resizeObserver;
10
11
  private readonly changeDetectorRef;
11
12
  private readonly destroyRef;
13
+ private readonly splitElement;
14
+ private readonly mainSplitPart;
12
15
  /**
13
16
  * A numeric value defining the minimum width in px, which the container needs
14
17
  * to be displayed in its large layout. Whenever smaller than
@@ -101,8 +104,23 @@ declare class SiMainDetailContainerComponent implements OnInit, OnChanges {
101
104
  */
102
105
  readonly detailContainerClass: _angular_core.InputSignal<string>;
103
106
  /**
104
- * The percentage width of the main container from the overall component width.
105
- * Can be a number or `'default'`, which is 32% when {@link resizableParts} is active, otherwise 50%.
107
+ * Unit used for the main split part when {@link resizableParts} is enabled.
108
+ *
109
+ * @defaultValue 'px'
110
+ */
111
+ readonly mainContainerWidthUnit: _angular_core.InputSignal<SplitUnit>;
112
+ /**
113
+ * The size of the main container. When {@link resizableParts} is enabled,
114
+ * the value is interpreted using {@link mainContainerWidthUnit} and updates as the splitter is moved.
115
+ * With `mainContainerWidthUnit="fr"`, numeric values must be from `0` to `100` (inclusive).
116
+ * The main and detail fractional weights are the value and `100 - value`;
117
+ * out-of-range values fall back to `32` and `68`.
118
+ * In the static layout, numeric values represent a percentage from `0` to `100`
119
+ * (inclusive); out-of-range values leave both containers without max-size constraints.
120
+ * Pixel widths are not limited to the `0` to `100` range.
121
+ *
122
+ * With `'default'`, resizable pixel layouts use {@link minMainSize}, resizable fractional
123
+ * layouts use main and detail weights of `32` and `68`, and static layouts use `50%`.
106
124
  *
107
125
  * @defaultValue 'default'
108
126
  */
@@ -145,11 +163,13 @@ declare class SiMainDetailContainerComponent implements OnInit, OnChanges {
145
163
  * Get the max size to limit in the static flex layout (if less than 50%), otherwise not set
146
164
  */
147
165
  private getMaxSize;
166
+ private getSplitSizes;
167
+ private getMainSizePx;
148
168
  private determineLayout;
149
169
  private doAnimation;
150
170
  private updateDetailsFocusable;
151
171
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiMainDetailContainerComponent, never>;
152
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiMainDetailContainerComponent, "si-main-detail-container", never, { "largeLayoutBreakpoint": { "alias": "largeLayoutBreakpoint"; "required": false; "isSignal": true; }; "detailsActive": { "alias": "detailsActive"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "truncateHeading": { "alias": "truncateHeading"; "required": false; "isSignal": true; }; "detailsHeading": { "alias": "detailsHeading"; "required": false; "isSignal": true; }; "resizableParts": { "alias": "resizableParts"; "required": false; "isSignal": true; }; "hideBackButton": { "alias": "hideBackButton"; "required": false; "isSignal": true; }; "detailsBackButtonText": { "alias": "detailsBackButtonText"; "required": false; "isSignal": true; }; "containerClass": { "alias": "containerClass"; "required": false; "isSignal": true; }; "mainContainerClass": { "alias": "mainContainerClass"; "required": false; "isSignal": true; }; "detailContainerClass": { "alias": "detailContainerClass"; "required": false; "isSignal": true; }; "mainContainerWidth": { "alias": "mainContainerWidth"; "required": false; "isSignal": true; }; "minMainSize": { "alias": "minMainSize"; "required": false; "isSignal": true; }; "minDetailSize": { "alias": "minDetailSize"; "required": false; "isSignal": true; }; "stateId": { "alias": "stateId"; "required": false; "isSignal": true; }; }, { "hasLargeSizeChange": "hasLargeSizeChange"; "detailsActive": "detailsActiveChange"; "mainContainerWidth": "mainContainerWidthChange"; }, never, ["[slot=mainSearch]", "[slot=mainActions]", "[slot=mainData]", "[slot=detailActions]", "[slot=details]"], true, never>;
172
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiMainDetailContainerComponent, "si-main-detail-container", never, { "largeLayoutBreakpoint": { "alias": "largeLayoutBreakpoint"; "required": false; "isSignal": true; }; "detailsActive": { "alias": "detailsActive"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "truncateHeading": { "alias": "truncateHeading"; "required": false; "isSignal": true; }; "detailsHeading": { "alias": "detailsHeading"; "required": false; "isSignal": true; }; "resizableParts": { "alias": "resizableParts"; "required": false; "isSignal": true; }; "hideBackButton": { "alias": "hideBackButton"; "required": false; "isSignal": true; }; "detailsBackButtonText": { "alias": "detailsBackButtonText"; "required": false; "isSignal": true; }; "containerClass": { "alias": "containerClass"; "required": false; "isSignal": true; }; "mainContainerClass": { "alias": "mainContainerClass"; "required": false; "isSignal": true; }; "detailContainerClass": { "alias": "detailContainerClass"; "required": false; "isSignal": true; }; "mainContainerWidthUnit": { "alias": "mainContainerWidthUnit"; "required": false; "isSignal": true; }; "mainContainerWidth": { "alias": "mainContainerWidth"; "required": false; "isSignal": true; }; "minMainSize": { "alias": "minMainSize"; "required": false; "isSignal": true; }; "minDetailSize": { "alias": "minDetailSize"; "required": false; "isSignal": true; }; "stateId": { "alias": "stateId"; "required": false; "isSignal": true; }; }, { "hasLargeSizeChange": "hasLargeSizeChange"; "detailsActive": "detailsActiveChange"; "mainContainerWidth": "mainContainerWidthChange"; }, never, ["[slot=mainSearch]", "[slot=mainActions]", "[slot=mainData]", "[slot=detailActions]", "[slot=details]"], true, never>;
153
173
  }
154
174
 
155
175
  declare class SiMainDetailContainerModule {
@@ -1,6 +1,33 @@
1
- import * as i0 from '@angular/core';
1
+ import { ExtendedStatusType } from '@siemens/element-ng/common';
2
+ import * as _angular_core from '@angular/core';
2
3
  import { Signal } from '@angular/core';
3
4
  import { StyleSpecification } from 'maplibre-gl';
5
+ import * as geojson from 'geojson';
6
+
7
+ /**
8
+ * Copyright (c) Siemens 2016 - 2026
9
+ * SPDX-License-Identifier: MIT
10
+ */
11
+ /** A point feature consumed by the clustered MapLibre source. */
12
+ type ClusterPoint = GeoJSON.Feature<GeoJSON.Point, GeoJSON.GeoJsonProperties>;
13
+ /**
14
+ * Built-in group palette or exact colors indexed by positive group ID. The `'status'` palette is
15
+ * the four-color palette used for numeric groups; it is separate from status-based bucketing.
16
+ */
17
+ type ClusterColors = 'status' | 'element' | Record<number, string>;
18
+ /** A rendered color segment and its generated cluster-property name. */
19
+ interface ClusterSegment {
20
+ color: string;
21
+ property: string;
22
+ }
23
+
24
+ /**
25
+ * Copyright (c) Siemens 2016 - 2026
26
+ * SPDX-License-Identifier: MIT
27
+ */
28
+
29
+ /** Status values supported by status markers and cluster status segments. */
30
+ type MarkerStatus = ExtendedStatusType | 'default';
4
31
 
5
32
  /**
6
33
  * Copyright (c) Siemens 2016 - 2026
@@ -24,6 +51,104 @@ import { StyleSpecification } from 'maplibre-gl';
24
51
  */
25
52
  declare const injectSiMapStyle: (key: string) => Signal<StyleSpecification>;
26
53
 
54
+ /**
55
+ * Copyright (c) Siemens 2016 - 2026
56
+ * SPDX-License-Identifier: MIT
57
+ */
58
+
59
+ type ClusterProperties = Record<string, ['+', unknown]>;
60
+ /** @internal */
61
+ interface ClusterConfiguration {
62
+ clusterProperties: ClusterProperties;
63
+ segments: readonly ClusterSegment[];
64
+ }
65
+
66
+ /**
67
+ * Adds a clustered GeoJSON source to a MapLibre map and renders interactive cluster markers.
68
+ *
69
+ * Cluster markers display the number of contained points and their distribution by group. Status
70
+ * segments can be enabled for ungrouped points by providing `statusProperty`. Render individual,
71
+ * unclustered points separately with `mgl-markers-for-clusters` using the same source ID.
72
+ * Positive numeric groups always take precedence over status segments. Status segments apply only
73
+ * when the normalized group value is zero; points without a matching group or status use the
74
+ * ungrouped color.
75
+ *
76
+ * @example Basic usage
77
+ * ```html
78
+ * <mgl-map [mapStyle]="mapStyle()">
79
+ * <si-cluster-source
80
+ * sourceId="locations"
81
+ * statusProperty="status"
82
+ * [data]="locations"
83
+ * (clusterClick)="onClusterClick($event)"
84
+ * />
85
+ *
86
+ * <mgl-markers-for-clusters source="locations">
87
+ * <ng-template let-feature mglPoint>
88
+ * <si-status-marker
89
+ * [status]="feature.properties?.status"
90
+ * />
91
+ * </ng-template>
92
+ * </mgl-markers-for-clusters>
93
+ * </mgl-map>
94
+ * ```
95
+ *
96
+ * @experimental
97
+ */
98
+ declare class SiClusterSourceComponent {
99
+ /** ID used to register the generated GeoJSON source in MapLibre. */
100
+ readonly sourceId: _angular_core.InputSignal<string>;
101
+ /**
102
+ * Point feature collection to cluster.
103
+ * @defaultValue EMPTY_DATA
104
+ */
105
+ readonly data: _angular_core.InputSignal<geojson.FeatureCollection<geojson.Point, geojson.GeoJsonProperties>>;
106
+ /**
107
+ * Feature property containing the positive numeric group ID.
108
+ * @defaultValue 'group'
109
+ */
110
+ readonly groupProperty: _angular_core.InputSignal<string>;
111
+ /**
112
+ * Built-in palette or exact colors indexed by group ID. The built-in `'status'` palette contains
113
+ * four colors for numeric groups and is separate from status-based bucketing.
114
+ * @defaultValue 'status'
115
+ */
116
+ readonly groupColors: _angular_core.InputSignal<ClusterColors>;
117
+ /**
118
+ * Top-level feature property containing a {@link MarkerStatus} value. Status bucketing is
119
+ * disabled by default and only applies when the normalized group value is zero. Missing or
120
+ * unsupported status values, and groups that do not match a configured bucket, use the ungrouped
121
+ * color. Built-in colors match `SiStatusMarkerComponent`, with `default` using accent and
122
+ * `unknown` using neutral.
123
+ * @defaultValue undefined
124
+ * @see https://maplibre.org/maplibre-style-spec/sources/#clusterproperties
125
+ */
126
+ readonly statusProperty: _angular_core.InputSignal<string | undefined>;
127
+ /**
128
+ * Cluster radius in pixels.
129
+ * @defaultValue 50
130
+ */
131
+ readonly clusterRadius: _angular_core.InputSignal<number>;
132
+ /**
133
+ * Maximum zoom at which points are clustered.
134
+ * @defaultValue undefined
135
+ */
136
+ readonly clusterMaxZoom: _angular_core.InputSignal<number | undefined>;
137
+ /**
138
+ * Minimum number of points required to form a cluster.
139
+ * @defaultValue 2
140
+ */
141
+ readonly clusterMinPoints: _angular_core.InputSignal<number>;
142
+ /** Emits when a cluster marker is activated. */
143
+ readonly clusterClick: _angular_core.OutputEmitterRef<ClusterPoint>;
144
+ protected readonly clusterConfiguration: _angular_core.Signal<ClusterConfiguration>;
145
+ /** Stores selection for the projected cluster-popover integration. */
146
+ protected readonly selectedCluster: _angular_core.WritableSignal<ClusterPoint | undefined>;
147
+ protected selectCluster(feature: ClusterPoint): Promise<void>;
148
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiClusterSourceComponent, never>;
149
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiClusterSourceComponent, "si-cluster-source", never, { "sourceId": { "alias": "sourceId"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "groupProperty": { "alias": "groupProperty"; "required": false; "isSignal": true; }; "groupColors": { "alias": "groupColors"; "required": false; "isSignal": true; }; "statusProperty": { "alias": "statusProperty"; "required": false; "isSignal": true; }; "clusterRadius": { "alias": "clusterRadius"; "required": false; "isSignal": true; }; "clusterMaxZoom": { "alias": "clusterMaxZoom"; "required": false; "isSignal": true; }; "clusterMinPoints": { "alias": "clusterMinPoints"; "required": false; "isSignal": true; }; }, { "clusterClick": "clusterClick"; }, never, ["si-cluster-popover,[siClusterPopoverOutlet]"], true, never>;
150
+ }
151
+
27
152
  /**
28
153
  * Copyright (c) Siemens 2016 - 2026
29
154
  * SPDX-License-Identifier: MIT
@@ -51,16 +176,15 @@ declare const injectSiMapStyle: (key: string) => Signal<StyleSpecification>;
51
176
  */
52
177
  declare const injectSiMapTranslations: () => Signal<Record<string, string>>;
53
178
 
54
- type MarkerStatus = 'default' | 'unknown' | 'success' | 'info' | 'warning' | 'danger' | 'caution' | 'critical';
55
179
  declare class SiStatusMarkerComponent {
56
180
  /**
57
181
  * The status of the marker.
58
182
  * @defaultValue 'default'
59
183
  */
60
- readonly status: i0.InputSignal<MarkerStatus>;
61
- static ɵfac: i0.ɵɵFactoryDeclaration<SiStatusMarkerComponent, never>;
62
- static ɵcmp: i0.ɵɵComponentDeclaration<SiStatusMarkerComponent, "si-status-marker", never, { "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
184
+ readonly status: _angular_core.InputSignal<MarkerStatus>;
185
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiStatusMarkerComponent, never>;
186
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiStatusMarkerComponent, "si-status-marker", never, { "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
63
187
  }
64
188
 
65
- export { SiStatusMarkerComponent, injectSiMapStyle, injectSiMapTranslations };
66
- export type { MarkerStatus };
189
+ export { SiClusterSourceComponent, SiStatusMarkerComponent, injectSiMapStyle, injectSiMapTranslations };
190
+ export type { ClusterColors, ClusterPoint, ClusterSegment, MarkerStatus };