@siemens/element-ng 48.3.0 → 48.4.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.
- package/accordion/index.d.ts +0 -1
- package/chat-messages/index.d.ts +172 -156
- package/dashboard/index.d.ts +2 -3
- package/fesm2022/siemens-element-ng-accordion.mjs +2 -3
- package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-chat-messages.mjs +259 -163
- package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-dashboard.mjs +7 -11
- package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datepicker.mjs +5 -3
- package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filtered-search.mjs +4 -8
- package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs +2 -9
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-select.mjs +4 -0
- package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-side-panel.mjs +3 -5
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-bar.mjs +3 -4
- package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tour.mjs +58 -21
- package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +4 -4
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/filtered-search/index.d.ts +6 -7
- package/navbar-vertical/index.d.ts +2 -4
- package/package.json +7 -7
- package/schematics/migrations/action-modal-migration/action-modal-migration.js +45 -4
- package/schematics/migrations/data/output-names.js +0 -1
- package/schematics/migrations/data/symbol-removals.js +0 -9
- package/schematics/migrations/element-migration/element-migration.js +1 -9
- package/schematics/migrations/wizard-migration/index.js +1 -9
- package/select/index.d.ts +5 -0
- package/status-bar/index.d.ts +0 -1
- package/template-i18n.json +1 -0
- package/tour/index.d.ts +4 -2
- package/translate/index.d.ts +1 -0
package/accordion/index.d.ts
CHANGED
|
@@ -69,7 +69,6 @@ declare class SiCollapsiblePanelComponent {
|
|
|
69
69
|
protected headerId: string;
|
|
70
70
|
protected isHCollapsible: boolean;
|
|
71
71
|
protected readonly icons: Record<"elementDown2", string>;
|
|
72
|
-
private readonly destroyRef;
|
|
73
72
|
private readonly accordionService;
|
|
74
73
|
private readonly accordionHCollapseService;
|
|
75
74
|
private enableAnimation;
|
package/chat-messages/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _siemens_element_translate_ng_translate_types from '@siemens/element-translate-ng/translate-types';
|
|
2
2
|
import { TranslatableString } from '@siemens/element-translate-ng/translate-types';
|
|
3
3
|
import * as _angular_core from '@angular/core';
|
|
4
|
-
import { ElementRef, TemplateRef, AfterViewInit } from '@angular/core';
|
|
4
|
+
import { ElementRef, TemplateRef, AfterContentInit, OnDestroy, AfterViewInit } from '@angular/core';
|
|
5
5
|
import { MenuItem } from '@siemens/element-ng/menu';
|
|
6
6
|
import { SiModalService } from '@siemens/element-ng/modal';
|
|
7
7
|
import { FileUploadError, UploadFile } from '@siemens/element-ng/file-uploader';
|
|
@@ -14,8 +14,12 @@ import * as i1 from '@siemens/element-ng/resize-observer';
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
* Actions for messages representing an action with icon, label (for accessibility), and handler.
|
|
17
|
+
* Actions for messages representing an action with icon, label (for accessibility), and handler, for use within {@link SiAiMessageComponent} and {@link SiUserMessageComponent}.
|
|
18
18
|
* Only the icon will be displayed.
|
|
19
|
+
*
|
|
20
|
+
* @see {@link SiAiMessageComponent} for the AI message
|
|
21
|
+
* @see {@link SiUserMessageComponent} for thee user message
|
|
22
|
+
*
|
|
19
23
|
* @experimental
|
|
20
24
|
*/
|
|
21
25
|
interface MessageAction {
|
|
@@ -39,63 +43,18 @@ interface MessageAction {
|
|
|
39
43
|
* The AI message component renders AI-generated content in chat interfaces,
|
|
40
44
|
* supporting text formatting, markdown, loading states, and contextual actions.
|
|
41
45
|
* It appears as text (no bubble) aligned to the left side without any avatar/icon slot.
|
|
42
|
-
*
|
|
43
|
-
* @remarks
|
|
44
|
-
* This component is designed for use in:
|
|
45
|
-
* - AI chat interfaces where model responses need to be displayed
|
|
46
|
-
* - Chatbot implementations
|
|
47
|
-
* - Conversational AI applications
|
|
48
|
-
* - AI assistant interfaces
|
|
46
|
+
* Can be used within {@link SiChatContainerComponent}.
|
|
49
47
|
*
|
|
50
48
|
* The component automatically handles:
|
|
51
|
-
* -
|
|
49
|
+
* - Styling for AI messages distinct from user or generic chat messages
|
|
50
|
+
* - Option to render markdown content, provide via `contentFormatter` input with a markdown renderer function (e.g., from {@link getMarkdownRenderer})
|
|
52
51
|
* - Showing loading states with skeleton UI during generation
|
|
53
|
-
* - Displaying primary and secondary actions
|
|
54
|
-
* - Proper alignment and styling for AI messages
|
|
55
|
-
* - Content sanitization for security
|
|
56
|
-
*
|
|
57
|
-
* @example
|
|
58
|
-
* Basic usage with content only:
|
|
59
|
-
* ```html
|
|
60
|
-
* <si-ai-message [content]="'I can help you with that.'" />
|
|
61
|
-
* ```
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* With loading state and actions:
|
|
65
|
-
* ```typescript
|
|
66
|
-
* import { Component } from '@angular/core';
|
|
67
|
-
* import { SiAiMessageComponent } from '@siemens/element-ng/chat-messages';
|
|
68
|
-
*
|
|
69
|
-
* @Component({
|
|
70
|
-
* selector: 'app-chat',
|
|
71
|
-
* imports: [SiAiMessageComponent],
|
|
72
|
-
* template: `
|
|
73
|
-
* <si-ai-message
|
|
74
|
-
* [content]="message.text"
|
|
75
|
-
* [loading]="message.isGenerating"
|
|
76
|
-
* [actions]="messageActions"
|
|
77
|
-
* [secondaryActions]="menuActions"
|
|
78
|
-
* [actionParam]="message"
|
|
79
|
-
* />
|
|
80
|
-
* `
|
|
81
|
-
* })
|
|
82
|
-
* export class ChatComponent {
|
|
83
|
-
* messageActions = [
|
|
84
|
-
* { icon: 'thumbs-up', label: 'Good response', action: (id) => this.ratePositive(id) },
|
|
85
|
-
* { icon: 'thumbs-down', label: 'Bad response', action: (id) => this.rateNegative(id) },
|
|
86
|
-
* { icon: 'copy', label: 'Copy', action: (id) => this.copyMessage(id) }
|
|
87
|
-
* ];
|
|
88
|
-
*
|
|
89
|
-
* menuActions = [
|
|
90
|
-
* { label: 'Regenerate', action: (id) => this.regenerate(id) },
|
|
91
|
-
* { label: 'Report', action: (id) => this.reportMessage(id) }
|
|
92
|
-
* ];
|
|
93
|
-
* }
|
|
94
|
-
* ```
|
|
52
|
+
* - Displaying primary and secondary actions
|
|
95
53
|
*
|
|
96
54
|
* @see {@link SiChatMessageComponent} for the base message wrapper component
|
|
97
|
-
* @see {@link SiUserMessageComponent} for the
|
|
55
|
+
* @see {@link SiUserMessageComponent} for the user message component
|
|
98
56
|
* @see {@link getMarkdownRenderer} for markdown formatting support
|
|
57
|
+
* @see {@link SiChatContainerComponent} for the chat container to use this within
|
|
99
58
|
*
|
|
100
59
|
* @experimental
|
|
101
60
|
*/
|
|
@@ -153,7 +112,11 @@ declare class SiAiMessageComponent {
|
|
|
153
112
|
}
|
|
154
113
|
|
|
155
114
|
/**
|
|
156
|
-
* Attachment item interface for file attachments in chat messages.
|
|
115
|
+
* Attachment item interface for file attachments in chat messages, used by {@link SiAttachmentListComponent} and inside {@link SiUserMessageComponent} as well as {@link SiChatInputComponent}.
|
|
116
|
+
*
|
|
117
|
+
* @see {@link SiAttachmentListComponent} for the attachment list component
|
|
118
|
+
* @see {@link SiUserMessageComponent} for the user message
|
|
119
|
+
* @see {@link SiChatInputComponent} for the chat input component
|
|
157
120
|
*
|
|
158
121
|
* @experimental
|
|
159
122
|
*/
|
|
@@ -170,55 +133,17 @@ interface Attachment {
|
|
|
170
133
|
* preview and remove functionality. It's designed to work with chat message components
|
|
171
134
|
* to show files that have been uploaded or shared in conversations.
|
|
172
135
|
*
|
|
173
|
-
* @remarks
|
|
174
136
|
* This component provides:
|
|
175
|
-
* -
|
|
137
|
+
* - A list of pills showing each attachment's name and an icon
|
|
176
138
|
* - Optional preview modal for attachments
|
|
177
139
|
* - Optional remove functionality for editable messages
|
|
178
|
-
* - Flexible alignment (start/end) to match message alignment
|
|
179
|
-
* - Support for various file types (images, videos, audio, documents, archives)
|
|
180
140
|
*
|
|
181
|
-
* The component is
|
|
182
|
-
* to display uploaded files, but can also be used standalone.
|
|
183
|
-
*
|
|
184
|
-
* @example
|
|
185
|
-
* Basic usage with attachments:
|
|
186
|
-
* ```html
|
|
187
|
-
* <si-attachment-list [attachments]="files" />
|
|
188
|
-
* ```
|
|
189
|
-
*
|
|
190
|
-
* @example
|
|
191
|
-
* With remove functionality and custom alignment:
|
|
192
|
-
* ```typescript
|
|
193
|
-
* import { Component } from '@angular/core';
|
|
194
|
-
* import { SiAttachmentListComponent, Attachment } from '@siemens/element-ng/chat-messages';
|
|
195
|
-
*
|
|
196
|
-
* @Component({
|
|
197
|
-
* selector: 'app-chat',
|
|
198
|
-
* imports: [SiAttachmentListComponent],
|
|
199
|
-
* template: `
|
|
200
|
-
* <si-attachment-list
|
|
201
|
-
* [attachments]="attachments"
|
|
202
|
-
* [alignment]="'end'"
|
|
203
|
-
* [removable]="true"
|
|
204
|
-
* (remove)="handleRemove($event)"
|
|
205
|
-
* />
|
|
206
|
-
* `
|
|
207
|
-
* })
|
|
208
|
-
* export class ChatComponent {
|
|
209
|
-
* attachments: Attachment[] = [
|
|
210
|
-
* { id: '1', name: 'report.pdf' },
|
|
211
|
-
* { id: '2', name: 'image.png', previewTemplate: this.imagePreview }
|
|
212
|
-
* ];
|
|
213
|
-
*
|
|
214
|
-
* handleRemove(attachment: Attachment) {
|
|
215
|
-
* this.attachments = this.attachments.filter(a => a !== attachment);
|
|
216
|
-
* }
|
|
217
|
-
* }
|
|
218
|
-
* ```
|
|
141
|
+
* The component is included within {@link SiUserMessageComponent}, {@link SiAiMessageComponent} and {@link SiChatInputComponent} but can also be used inside custom chat messages with {@link SiChatMessageComponent}
|
|
219
142
|
*
|
|
220
143
|
* @see {@link SiUserMessageComponent} for user message display
|
|
221
144
|
* @see {@link SiAiMessageComponent} for AI message display
|
|
145
|
+
* @see {@link SiChatMessageComponent} for custom chat message display
|
|
146
|
+
* @see {@link SiChatInputComponent} for chat input with attachment support
|
|
222
147
|
* @see {@link Attachment} for attachment data structure
|
|
223
148
|
*
|
|
224
149
|
* @experimental
|
|
@@ -260,6 +185,98 @@ declare class SiAttachmentListComponent {
|
|
|
260
185
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiAttachmentListComponent, "si-attachment-list", never, { "attachments": { "alias": "attachments"; "required": false; "isSignal": true; }; "alignment": { "alias": "alignment"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; }, { "remove": "remove"; }, never, never, true, never>;
|
|
261
186
|
}
|
|
262
187
|
|
|
188
|
+
/**
|
|
189
|
+
* A declarative container component for displaying a chat interface with automatic scroll-to-bottom behavior.
|
|
190
|
+
*
|
|
191
|
+
* This component provides the layout and styling for a chat interface, managing scrolling behavior
|
|
192
|
+
* to keep the newest messages visible while respecting user scrolling actions. It automatically
|
|
193
|
+
* scrolls to the bottom when new content is added, unless the user has scrolled up to view older messages.
|
|
194
|
+
*
|
|
195
|
+
* Use via content projection:
|
|
196
|
+
* - Default content: Chat messages displayed in the scrollable messages container or something like an empty state.
|
|
197
|
+
* - `si-inline-notification` selector: Notification component displayed above the input area
|
|
198
|
+
* - `si-chat-input` or `[siChatContainerInput]` selector: Input controls for composing messages
|
|
199
|
+
*
|
|
200
|
+
* @see {@link SiChatInputComponent} for the chat input wrapper component
|
|
201
|
+
* @see {@link SiChatContainerInputDirective} for other input controls to slot in
|
|
202
|
+
* @see {@link SiAiMessageComponent} for AI messages to slot in
|
|
203
|
+
* @see {@link SiUserMessageComponent} for user messages (in AI chats) to slot in
|
|
204
|
+
* @see {@link SiChatMessageComponent} for the chat message wrapper component to slot in other messages
|
|
205
|
+
*
|
|
206
|
+
* @experimental
|
|
207
|
+
*/
|
|
208
|
+
declare class SiChatContainerComponent implements AfterContentInit, OnDestroy {
|
|
209
|
+
private readonly messagesContainer;
|
|
210
|
+
private readonly platformId;
|
|
211
|
+
private isUserAtBottom;
|
|
212
|
+
private scrollTimeout;
|
|
213
|
+
private resizeObserver;
|
|
214
|
+
private contentObserver;
|
|
215
|
+
/**
|
|
216
|
+
* The color variant to apply to the container.
|
|
217
|
+
* @defaultValue 'base-0'
|
|
218
|
+
*/
|
|
219
|
+
readonly colorVariant: _angular_core.InputSignal<string>;
|
|
220
|
+
/**
|
|
221
|
+
* Disables automatic scrolling to the bottom when new content is added.
|
|
222
|
+
* @defaultValue false
|
|
223
|
+
*/
|
|
224
|
+
readonly noAutoScroll: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
|
|
225
|
+
constructor();
|
|
226
|
+
ngAfterContentInit(): void;
|
|
227
|
+
ngOnDestroy(): void;
|
|
228
|
+
private scrollToBottom;
|
|
229
|
+
private debouncedScrollToBottom;
|
|
230
|
+
private setupResizeObserver;
|
|
231
|
+
private setupContentObserver;
|
|
232
|
+
private checkIfUserAtBottom;
|
|
233
|
+
protected onScroll(): void;
|
|
234
|
+
/**
|
|
235
|
+
* Focuses the messages container element.
|
|
236
|
+
*/
|
|
237
|
+
focus(): void;
|
|
238
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiChatContainerComponent, never>;
|
|
239
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiChatContainerComponent, "si-chat-container", never, { "colorVariant": { "alias": "colorVariant"; "required": false; "isSignal": true; }; "noAutoScroll": { "alias": "noAutoScroll"; "required": false; "isSignal": true; }; }, {}, never, ["*", "si-inline-notification", "si-chat-input,[siChatContainerInput]"], true, never>;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* A directive to mark elements as input controls within a {@link SiChatContainerComponent}.
|
|
244
|
+
*
|
|
245
|
+
* This directive is used to identify and style input elements that belong to
|
|
246
|
+
* the chat container component, typically applied to form inputs or textareas
|
|
247
|
+
* used for composing chat messages.
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ```html
|
|
251
|
+
* <si-chat-container>
|
|
252
|
+
* <si-chat-message>Hello!</si-chat-message>
|
|
253
|
+
* <si-chat-message>How are you?</si-chat-message>
|
|
254
|
+
*
|
|
255
|
+
* <input siChatContainerInput type="text" placeholder="Type a message..." />
|
|
256
|
+
* </si-chat-container>
|
|
257
|
+
* ```
|
|
258
|
+
*
|
|
259
|
+
* @see {@link SiChatContainerComponent} for the chat container wrapper component
|
|
260
|
+
*
|
|
261
|
+
* @experimental
|
|
262
|
+
*/
|
|
263
|
+
declare class SiChatContainerInputDirective {
|
|
264
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiChatContainerInputDirective, never>;
|
|
265
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiChatContainerInputDirective, "[siChatContainerInput]", never, {}, {}, never, never, true, never>;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Attachment item interface for file attachments in chat messages, extension of {@link Attachment} for {@link SiAttachmentListComponent} to use within {@link SiChatInputComponent}.
|
|
270
|
+
* Adds the action file information.
|
|
271
|
+
* Can be used within {@link SiChatContainerComponent}.
|
|
272
|
+
*
|
|
273
|
+
* @see {@link Attachment} for base attachment interface
|
|
274
|
+
* @see {@link SiAttachmentListComponent} for the attachment list component
|
|
275
|
+
* @see {@link SiChatInputComponent} for the chat input component
|
|
276
|
+
* @see {@link SiChatContainerComponent} for the chat container component
|
|
277
|
+
*
|
|
278
|
+
* @experimental
|
|
279
|
+
*/
|
|
263
280
|
interface ChatInputAttachment extends Attachment {
|
|
264
281
|
/** File object */
|
|
265
282
|
file: File;
|
|
@@ -268,6 +285,28 @@ interface ChatInputAttachment extends Attachment {
|
|
|
268
285
|
/** MIME type */
|
|
269
286
|
type: string;
|
|
270
287
|
}
|
|
288
|
+
/**
|
|
289
|
+
* Chat input component for composing and sending messages in conversational interfaces.
|
|
290
|
+
*
|
|
291
|
+
* The chat input component provides a text area for users to compose messages,
|
|
292
|
+
* supporting text, attachments, and contextual actions. It appears as a textarea
|
|
293
|
+
* with buttons for adding attachments and sending messages, as well as an optional disclaimer.
|
|
294
|
+
*
|
|
295
|
+
* The component automatically handles:
|
|
296
|
+
* - Styling for chat input and actions.
|
|
297
|
+
* - Dynamic resizing of the textarea based on content.
|
|
298
|
+
* - Uploading of and displaying of attachments above the input area.
|
|
299
|
+
* - Displaying primary and secondary actions.
|
|
300
|
+
*
|
|
301
|
+
* Additionally to the inputs and outputs documented here, the component supports content projection via the following slots:
|
|
302
|
+
* - Default content: Custom action buttons to display inline, prefer using the `actions` input for buttons, can be used in addition.
|
|
303
|
+
* - `siChatInputDisclaimer` selector: Custom disclaimer content to display below the input area, prefer using the `disclaimer` input for simple text disclaimers.
|
|
304
|
+
*
|
|
305
|
+
* @see {@link SiAttachmentListComponent} for the base attachment component
|
|
306
|
+
* @see {@link SiChatInputDisclaimerDirective} to slot in custom disclaimer content
|
|
307
|
+
*
|
|
308
|
+
* @experimental
|
|
309
|
+
*/
|
|
271
310
|
declare class SiChatInputComponent implements AfterViewInit {
|
|
272
311
|
private static idCounter;
|
|
273
312
|
private readonly textInput;
|
|
@@ -457,7 +496,7 @@ declare class SiChatInputComponent implements AfterViewInit {
|
|
|
457
496
|
}
|
|
458
497
|
|
|
459
498
|
/**
|
|
460
|
-
* Directive to mark content as chat input disclaimer.
|
|
499
|
+
* Directive to mark content as chat input disclaimer into {@link SiChatInputComponent}.
|
|
461
500
|
* Apply this directive to content that should be slotted into the disclaimer area.
|
|
462
501
|
*
|
|
463
502
|
* @example
|
|
@@ -468,6 +507,10 @@ declare class SiChatInputComponent implements AfterViewInit {
|
|
|
468
507
|
* </div>
|
|
469
508
|
* </si-chat-input>
|
|
470
509
|
* ```
|
|
510
|
+
*
|
|
511
|
+
* @see {@link SiChatInputComponent} for the chat input wrapper component
|
|
512
|
+
*
|
|
513
|
+
* @experimental
|
|
471
514
|
*/
|
|
472
515
|
declare class SiChatInputDisclaimerDirective {
|
|
473
516
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiChatInputDisclaimerDirective, never>;
|
|
@@ -475,10 +518,9 @@ declare class SiChatInputDisclaimerDirective {
|
|
|
475
518
|
}
|
|
476
519
|
|
|
477
520
|
/**
|
|
478
|
-
* Directive to mark content as chat message actions.
|
|
521
|
+
* Directive to mark content as chat message actions into {@link SiChatMessageComponent}.
|
|
479
522
|
* Apply this directive to e.g. buttons that should be slotted into the message actions area.
|
|
480
523
|
*
|
|
481
|
-
* @experimental
|
|
482
524
|
* @example
|
|
483
525
|
* ```html
|
|
484
526
|
* <si-chat-message>
|
|
@@ -487,6 +529,10 @@ declare class SiChatInputDisclaimerDirective {
|
|
|
487
529
|
* <button siChatMessageAction>Share</button>
|
|
488
530
|
* </si-chat-message>
|
|
489
531
|
* ```
|
|
532
|
+
*
|
|
533
|
+
* @see {@link SiChatMessageComponent} for the chat message wrapper component
|
|
534
|
+
*
|
|
535
|
+
* @experimental
|
|
490
536
|
*/
|
|
491
537
|
declare class SiChatMessageActionDirective {
|
|
492
538
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiChatMessageActionDirective, never>;
|
|
@@ -494,23 +540,33 @@ declare class SiChatMessageActionDirective {
|
|
|
494
540
|
}
|
|
495
541
|
|
|
496
542
|
/**
|
|
497
|
-
* Base chat message component that provides the layout structure for
|
|
543
|
+
* Base declarative chat message component that provides the layout structure for chat messages.
|
|
498
544
|
*
|
|
499
545
|
* This component handles the core message layout including avatar positioning, loading states,
|
|
500
|
-
* and action button placement. It serves as the foundation for more specialized message components
|
|
546
|
+
* and action button as well as attachment list placement. It serves as the foundation for more specialized message components
|
|
501
547
|
* like {@link SiUserMessageComponent} and {@link SiAiMessageComponent}.
|
|
548
|
+
* Can be used within {@link SiChatContainerComponent}.
|
|
502
549
|
*
|
|
503
|
-
* @remarks
|
|
504
550
|
* The component provides:
|
|
505
551
|
* - Flexible alignment (start/end) for different message types
|
|
506
552
|
* - Avatar/icon slot for message attribution
|
|
507
553
|
* - Loading state with skeleton UI
|
|
508
554
|
* - Action buttons positioned on the side or bottom
|
|
555
|
+
* - Attachment list display slot
|
|
509
556
|
* - Responsive behavior that adapts to container size
|
|
510
|
-
* - Attachment display slot
|
|
511
557
|
*
|
|
512
|
-
* This is a low-level component
|
|
513
|
-
* message
|
|
558
|
+
* This is a low-level component designed for slotting in custom content, it provides slots via content projection:
|
|
559
|
+
* - Default content: Main message content area (consider using {@link SiMarkdownRendererComponent} for markdown support)
|
|
560
|
+
* - `si-avatar/si-icon/img` selector: Avatar or icon representing the message sender
|
|
561
|
+
* - `si-chat-message-action` selector: Action buttons related to the message
|
|
562
|
+
* - `si-attachment-list` selector: Attachment list component for displaying file attachments
|
|
563
|
+
*
|
|
564
|
+
* @see {@link SiUserMessageComponent} for user message display
|
|
565
|
+
* @see {@link SiAiMessageComponent} for AI message display
|
|
566
|
+
* @see {@link SiAttachmentListComponent} for attachment list to slot in
|
|
567
|
+
* @see {@link SiChatMessageActionDirective} for action buttons to slot in
|
|
568
|
+
* @see {@link SiMarkdownRendererComponent} for markdown content rendering
|
|
569
|
+
* @see {@link SiChatContainerComponent} for the chat container to use this within
|
|
514
570
|
*
|
|
515
571
|
* @experimental
|
|
516
572
|
*/
|
|
@@ -535,64 +591,24 @@ declare class SiChatMessageComponent {
|
|
|
535
591
|
}
|
|
536
592
|
|
|
537
593
|
/**
|
|
538
|
-
* User message component for displaying user
|
|
594
|
+
* User message component for displaying the user's messages in conversational interfaces.
|
|
539
595
|
*
|
|
540
|
-
* The user message component renders user-submitted content in chat interfaces,
|
|
596
|
+
* The user message component renders user-submitted content in (AI) chat interfaces,
|
|
541
597
|
* supporting text, attachments, and contextual actions. It appears as a text bubble
|
|
542
598
|
* aligned to the right side and supports markdown formatting for rich content.
|
|
543
|
-
*
|
|
544
|
-
* @remarks
|
|
545
|
-
* This component is designed for use in:
|
|
546
|
-
* - AI chat interfaces where user input needs to be displayed
|
|
547
|
-
* - Peer-to-peer conversation interfaces
|
|
548
|
-
* - Conversation histories or chat transcripts
|
|
599
|
+
* Can be used within {@link SiChatContainerComponent}.
|
|
549
600
|
*
|
|
550
601
|
* The component automatically handles:
|
|
551
|
-
* -
|
|
602
|
+
* - Styling for user messages distinct from AI or generic chat messages
|
|
603
|
+
* - Option to render markdown content, provide via `contentFormatter` input with a markdown renderer function (e.g., from {@link getMarkdownRenderer})
|
|
552
604
|
* - Displaying attachments above the message bubble
|
|
553
|
-
* -
|
|
554
|
-
* - Proper alignment and styling for user messages
|
|
555
|
-
*
|
|
556
|
-
* @example
|
|
557
|
-
* Basic usage with content only:
|
|
558
|
-
* ```html
|
|
559
|
-
* <si-user-message [content]="'Hello, how can I help you?'" />
|
|
560
|
-
* ```
|
|
561
|
-
*
|
|
562
|
-
* @example
|
|
563
|
-
* With actions and attachments:
|
|
564
|
-
* ```typescript
|
|
565
|
-
* import { Component } from '@angular/core';
|
|
566
|
-
* import { SiUserMessageComponent } from '@siemens/element-ng/chat-messages';
|
|
567
|
-
*
|
|
568
|
-
* @Component({
|
|
569
|
-
* selector: 'app-chat',
|
|
570
|
-
* imports: [SiUserMessageComponent],
|
|
571
|
-
* template: `
|
|
572
|
-
* <si-user-message
|
|
573
|
-
* [content]="message.text"
|
|
574
|
-
* [actions]="messageActions"
|
|
575
|
-
* [secondaryActions]="menuActions"
|
|
576
|
-
* [attachments]="message.attachments"
|
|
577
|
-
* [actionParam]="message"
|
|
578
|
-
* />
|
|
579
|
-
* `
|
|
580
|
-
* })
|
|
581
|
-
* export class ChatComponent {
|
|
582
|
-
* messageActions = [
|
|
583
|
-
* { icon: 'copy', label: 'Copy', action: (id) => this.copyMessage(id) },
|
|
584
|
-
* { icon: 'edit', label: 'Edit', action: (id) => this.editMessage(id) }
|
|
585
|
-
* ];
|
|
586
|
-
*
|
|
587
|
-
* menuActions = [
|
|
588
|
-
* { label: 'Delete', action: (id) => this.deleteMessage(id) }
|
|
589
|
-
* ];
|
|
590
|
-
* }
|
|
591
|
-
* ```
|
|
605
|
+
* - Displaying primary and secondary actions
|
|
592
606
|
*
|
|
593
607
|
* @see {@link SiChatMessageComponent} for the base message wrapper component
|
|
594
|
-
* @see {@link
|
|
595
|
-
* @see {@link
|
|
608
|
+
* @see {@link SiAiMessageComponent} for the AI message component
|
|
609
|
+
* @see {@link SiAttachmentListComponent} for the base attachment component
|
|
610
|
+
* @see {@link getMarkdownRenderer} for markdown formatting support
|
|
611
|
+
* @see {@link SiChatContainerComponent} for the chat container to use this within
|
|
596
612
|
*
|
|
597
613
|
* @experimental
|
|
598
614
|
*/
|
|
@@ -650,5 +666,5 @@ declare class SiUserMessageComponent {
|
|
|
650
666
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiUserMessageComponent, "si-user-message", never, { "content": { "alias": "content"; "required": false; "isSignal": true; }; "contentFormatter": { "alias": "contentFormatter"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "secondaryActions": { "alias": "secondaryActions"; "required": false; "isSignal": true; }; "attachments": { "alias": "attachments"; "required": false; "isSignal": true; }; "actionParam": { "alias": "actionParam"; "required": false; "isSignal": true; }; "secondaryActionsLabel": { "alias": "secondaryActionsLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
651
667
|
}
|
|
652
668
|
|
|
653
|
-
export { SiAiMessageComponent, SiAttachmentListComponent, SiChatInputComponent, SiChatInputDisclaimerDirective, SiChatMessageActionDirective, SiChatMessageComponent, SiUserMessageComponent };
|
|
669
|
+
export { SiAiMessageComponent, SiAttachmentListComponent, SiChatContainerComponent, SiChatContainerInputDirective, SiChatInputComponent, SiChatInputDisclaimerDirective, SiChatMessageActionDirective, SiChatMessageComponent, SiUserMessageComponent };
|
|
654
670
|
export type { Attachment, ChatInputAttachment, MessageAction };
|
package/dashboard/index.d.ts
CHANGED
|
@@ -86,7 +86,8 @@ declare class SiDashboardCardComponent extends SiCardComponent implements OnDest
|
|
|
86
86
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiDashboardCardComponent, "si-dashboard-card", never, { "restoreText": { "alias": "restoreText"; "required": false; "isSignal": true; }; "expandText": { "alias": "expandText"; "required": false; "isSignal": true; }; "enableExpandInteraction": { "alias": "enableExpandInteraction"; "required": false; "isSignal": true; }; "showMenubar": { "alias": "showMenubar"; "required": false; "isSignal": true; }; }, { "expandChange": "expandChange"; }, never, ["[headerIcon]", "[body]", "[footer]"], true, never>;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
declare class SiDashboardComponent implements OnChanges,
|
|
89
|
+
declare class SiDashboardComponent implements OnChanges, AfterViewInit {
|
|
90
|
+
private readonly destroyRef;
|
|
90
91
|
/**
|
|
91
92
|
* Heading for the dashboard page.
|
|
92
93
|
*/
|
|
@@ -117,7 +118,6 @@ declare class SiDashboardComponent implements OnChanges, OnDestroy, AfterViewIni
|
|
|
117
118
|
protected dashboardFrameEndPadding: number | null;
|
|
118
119
|
protected readonly hideMenubarComputed: _angular_core.Signal<boolean>;
|
|
119
120
|
private _isExpanded;
|
|
120
|
-
private unsubscribe;
|
|
121
121
|
private scrollPosition;
|
|
122
122
|
private cards;
|
|
123
123
|
private readonly expandedPortalOutlet;
|
|
@@ -135,7 +135,6 @@ declare class SiDashboardComponent implements OnChanges, OnDestroy, AfterViewIni
|
|
|
135
135
|
constructor();
|
|
136
136
|
ngOnChanges(changes: SimpleChanges): void;
|
|
137
137
|
ngAfterViewInit(): void;
|
|
138
|
-
ngOnDestroy(): void;
|
|
139
138
|
private subscribeToCards;
|
|
140
139
|
private initCards;
|
|
141
140
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { trigger, transition, style, query, animate } from '@angular/animations';
|
|
2
2
|
import { NgClass } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { signal, Injectable, input, model, booleanAttribute, output, computed, inject,
|
|
4
|
+
import { signal, Injectable, input, model, booleanAttribute, output, computed, inject, viewChild, ChangeDetectionStrategy, Component, contentChildren, DestroyRef, ElementRef, NgModule } from '@angular/core';
|
|
5
5
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
6
|
import { areAnimationsDisabled } from '@siemens/element-ng/common';
|
|
7
7
|
import { addIcons, elementDown2, SiIconComponent } from '@siemens/element-ng/icon';
|
|
@@ -131,7 +131,6 @@ class SiCollapsiblePanelComponent {
|
|
|
131
131
|
headerId = this.controlId + '-header';
|
|
132
132
|
isHCollapsible = false;
|
|
133
133
|
icons = addIcons({ elementDown2 });
|
|
134
|
-
destroyRef = inject(DestroyRef);
|
|
135
134
|
accordionService = inject(SiAccordionService, { optional: true });
|
|
136
135
|
accordionHCollapseService = inject(SiAccordionHCollapseService, {
|
|
137
136
|
optional: true
|
|
@@ -143,7 +142,7 @@ class SiCollapsiblePanelComponent {
|
|
|
143
142
|
constructor() {
|
|
144
143
|
this.isHCollapsible = !!this.accordionHCollapseService;
|
|
145
144
|
this.accordionService?.toggle$
|
|
146
|
-
.pipe(takeUntilDestroyed(
|
|
145
|
+
.pipe(takeUntilDestroyed(), filter(item => item !== this))
|
|
147
146
|
.subscribe(() => this.openClose(false));
|
|
148
147
|
}
|
|
149
148
|
get showHide() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-accordion.mjs","sources":["../../../../projects/element-ng/accordion/si-accordion-hcollapse.service.ts","../../../../projects/element-ng/accordion/si-accordion.service.ts","../../../../projects/element-ng/accordion/si-collapsible-panel.component.ts","../../../../projects/element-ng/accordion/si-collapsible-panel.component.html","../../../../projects/element-ng/accordion/si-accordion.component.ts","../../../../projects/element-ng/accordion/si-accordion.module.ts","../../../../projects/element-ng/accordion/index.ts","../../../../projects/element-ng/accordion/siemens-element-ng-accordion.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable, signal } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/** @internal */\n@Injectable({\n providedIn: null\n})\nexport class SiAccordionHCollapseService {\n /**\n * Emitting the current horizontal collapsed state.\n *\n * @defaultValue undefined\n */\n readonly hcollapsed = signal<boolean | undefined>(undefined);\n /**\n * Subject to emit to open the accordion.\n */\n readonly open$ = new Subject();\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable, signal } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/** @internal */\n@Injectable({\n providedIn: null\n})\nexport class SiAccordionService {\n /**\n * Emit an item in the accordion which should be toggled.\n */\n readonly toggle$ = new Subject<any>();\n /**\n * Subject to emit when the items should be expanded to their full height or restored to normal height.\n *\n * @defaultValue null\n */\n readonly fullHeight = signal<boolean | null>(null);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { animate, query, style, transition, trigger } from '@angular/animations';\nimport { NgClass } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { areAnimationsDisabled, BackgroundColorVariant } from '@siemens/element-ng/common';\nimport { addIcons, elementDown2, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { filter } from 'rxjs';\n\nimport { SiAccordionHCollapseService } from './si-accordion-hcollapse.service';\nimport { SiAccordionService } from './si-accordion.service';\n\nlet controlIdCounter = 1;\n\n@Component({\n selector: 'si-collapsible-panel',\n imports: [NgClass, SiIconComponent, SiTranslatePipe],\n templateUrl: './si-collapsible-panel.component.html',\n styleUrl: './si-collapsible-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'colorVariant()',\n '[class.opened]': 'opened()',\n '[class.hcollapsed]': 'hcollapsed()',\n '[class.full-height]': 'fullHeight()'\n },\n animations: [\n trigger('showHide', [\n transition('*=>hide', [\n style({ overflow: 'hidden' }),\n query(\n ':leave',\n [style({ blockSize: '*' }), animate('0.5s ease', style({ blockSize: '0' }))],\n { optional: true }\n )\n ]),\n transition('*=>show', [\n style({ overflow: 'hidden' }),\n query(\n ':enter',\n [style({ blockSize: '0' }), animate('0.5s ease', style({ blockSize: '*' }))],\n { optional: true }\n )\n ])\n ])\n ]\n})\nexport class SiCollapsiblePanelComponent {\n /**\n * Heading for the collapsible panel.\n */\n readonly heading = input<TranslatableString>();\n /**\n * Additional CSS classes for the top element.\n *\n * @defaultValue ''\n */\n readonly headerCssClasses = input('');\n /**\n * Additional CSS classes for the collapsible content region.\n *\n * @defaultValue ''\n */\n readonly contentBgClasses = input('');\n /**\n * Additional CSS classes for the wrapping content element.\n *\n * @defaultValue ''\n */\n readonly contentCssClasses = input('');\n /**\n * Expand/collapse the panel.\n *\n * @defaultValue false\n */\n readonly opened = model(false);\n /**\n * The icon to be displayed besides the heading.\n */\n readonly icon = input<string>();\n /**\n * Whether the si-collapsible-panel is disabled.\n *\n * @defaultValue false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n /**\n * Color variant for component background.\n *\n * @deprecated This input has no effect on the component styling.\n */\n readonly colorVariant = input<BackgroundColorVariant>();\n /**\n * Defines the content of the optional badge. Should be a number or something like \"100+\".\n * if undefined or empty string, no badge is displayed\n */\n readonly badge = input<string | number>();\n /**\n * Defines the background color of the badge. Default is specific to Element flavour.\n */\n readonly badgeColor = input<string>();\n\n /**\n * An event emitted when the user triggered expand/collapse and emit with the new open state.\n * The event is emitted before the animation happens.\n */\n readonly panelToggle = output<boolean>();\n\n protected readonly hcollapsed = computed(\n () => this.accordionHCollapseService?.hcollapsed() ?? false\n );\n protected readonly fullHeight = computed(() => this.accordionService?.fullHeight() ?? false);\n protected controlId = '__si-collapsible-' + controlIdCounter++;\n protected headerId = this.controlId + '-header';\n protected isHCollapsible = false;\n protected readonly icons = addIcons({ elementDown2 });\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly accordionService = inject(SiAccordionService, { optional: true });\n private readonly accordionHCollapseService = inject(SiAccordionHCollapseService, {\n optional: true\n });\n private enableAnimation = true;\n private readonly animationsGloballyDisabled = areAnimationsDisabled();\n private lastScrollPos = 0;\n private readonly contentRef = viewChild.required<ElementRef<HTMLElement>>('content');\n\n constructor() {\n this.isHCollapsible = !!this.accordionHCollapseService;\n this.accordionService?.toggle$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(item => item !== this)\n )\n .subscribe(() => this.openClose(false));\n }\n\n protected get showHide(): string {\n if (this.enableAnimation && !this.animationsGloballyDisabled) {\n return this.opened() ? 'show' : 'hide';\n }\n return 'disabled';\n }\n\n /**\n * Expand/collapse panel.\n * @param open - indicate the panel shall open or close\n * @param enableAnimation - with animation\n */\n openClose(open: boolean, enableAnimation = true): void {\n this.opened.set(open);\n this.enableAnimation = enableAnimation;\n\n if (open) {\n setTimeout(() => {\n this.contentRef().nativeElement.scrollTop = this.lastScrollPos;\n });\n } else {\n this.lastScrollPos = this.contentRef().nativeElement.scrollTop;\n }\n }\n\n protected doToggle(event?: Event): void {\n if (this.disabled()) {\n return;\n }\n\n event?.preventDefault();\n const opened = this.opened();\n this.panelToggle.emit(!opened);\n this.openClose(this.hcollapsed() || !opened);\n this.accordionService?.toggle$.next(this);\n if (this.hcollapsed()) {\n this.accordionHCollapseService?.open$.next(this);\n }\n }\n\n protected keydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === 'Space' || event.key === ' ') {\n this.doToggle(undefined);\n }\n }\n}\n","<div\n class=\"collapsible-header focus-inside px-6\"\n role=\"button\"\n [ngClass]=\"headerCssClasses()\"\n [attr.tabindex]=\"disabled() ? '' : '0'\"\n [id]=\"headerId\"\n [class.open]=\"opened()\"\n [class.disabled]=\"disabled()\"\n [title]=\"hcollapsed() ? (heading() | translate) : ''\"\n [attr.aria-expanded]=\"opened() && !hcollapsed()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-controls]=\"controlId\"\n [attr.aria-label]=\"hcollapsed() ? (heading() | translate) : ''\"\n (keydown)=\"keydown($event)\"\n (click)=\"doToggle($event)\"\n>\n @let headerIcon = icon();\n @if (headerIcon) {\n <si-icon class=\"icon ms-n2 me-2\" [icon]=\"headerIcon\" [class.collapsed-icon]=\"isHCollapsible\" />\n }\n @if (icon() && badge() !== undefined && badge() !== '') {\n <span class=\"badge-text\">\n {{ badge() }}\n </span>\n }\n <div class=\"si-h5 autohide\">\n {{ heading() | translate }}\n <ng-content select=\"[si-panel-heading]\" />\n </div>\n\n @if (badge() !== undefined && badge() !== '') {\n <span class=\"badge autohide\" [ngClass]=\"'bg-' + badgeColor()\">\n {{ badge() }}\n </span>\n }\n <span class=\"ms-auto overflow-hidden\">\n <si-icon class=\"icon dropdown-caret\" [icon]=\"icons.elementDown2\" />\n </span>\n</div>\n<div\n #content\n class=\"collapsible-content\"\n role=\"region\"\n [id]=\"controlId\"\n [ngClass]=\"contentBgClasses()\"\n [@showHide]=\"showHide\"\n [attr.aria-labelledby]=\"headerId\"\n [class.full-height]=\"fullHeight()\"\n>\n @if (opened()) {\n <div>\n <div [ngClass]=\"contentCssClasses()\">\n <ng-content />\n </div>\n </div>\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n ElementRef,\n inject,\n input,\n OnChanges\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ResizeObserverService } from '@siemens/element-ng/resize-observer';\n\nimport { SiAccordionHCollapseService } from './si-accordion-hcollapse.service';\nimport { SiAccordionService } from './si-accordion.service';\nimport { SiCollapsiblePanelComponent } from './si-collapsible-panel.component';\n\nconst PANEL_MIN_HEIGHT = 100;\n\n@Component({\n selector: 'si-accordion',\n template: '<div><ng-content /></div>',\n styleUrl: './si-accordion.component.scss',\n providers: [SiAccordionService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.full-height]': 'fullHeight()',\n '[class.hcollapsed]': 'collapsed()'\n }\n})\nexport class SiAccordionComponent implements AfterContentInit, OnChanges {\n /** @defaultValue true */\n readonly expandFirstPanel = input(true, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly fullHeight = input(false, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly hcollapsed = input(false);\n /**\n * Indicate whether the accordion is collapsed.\n * @internal\n */\n readonly collapsed = computed(\n () => this.accordionHCollapseService?.hcollapsed() ?? this.hcollapsed()\n );\n\n private readonly panels = contentChildren(SiCollapsiblePanelComponent);\n private responsive = false;\n private destroyer = inject(DestroyRef);\n private service = inject(SiAccordionService);\n private resizeObserver = inject(ResizeObserverService);\n private element = inject(ElementRef);\n private accordionHCollapseService = inject(SiAccordionHCollapseService, { optional: true });\n\n ngOnChanges(): void {\n this.service.fullHeight.set(this.fullHeight() && !this.responsive);\n }\n\n ngAfterContentInit(): void {\n this.resizeObserver\n .observe(this.element.nativeElement, 100, true, true)\n .pipe(takeUntilDestroyed(this.destroyer))\n .subscribe(() => this.calcFullHeight());\n\n this.panels().at(0)?.openClose(this.expandFirstPanel(), false);\n }\n\n private calcFullHeight(): void {\n if (this.panels?.length) {\n const height = (this.element.nativeElement as HTMLElement).offsetHeight;\n this.responsive = !this.hcollapsed() && height < this.panels.length * PANEL_MIN_HEIGHT;\n this.service.fullHeight.set(this.fullHeight() && !this.responsive);\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiAccordionComponent } from './si-accordion.component';\nimport { SiCollapsiblePanelComponent } from './si-collapsible-panel.component';\n\n@NgModule({\n imports: [SiAccordionComponent, SiCollapsiblePanelComponent],\n exports: [SiAccordionComponent, SiCollapsiblePanelComponent]\n})\nexport class SiAccordionModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-collapsible-panel.component';\nexport * from './si-accordion.component';\nexport * from './si-accordion.service';\nexport * from './si-accordion-hcollapse.service';\nexport * from './si-accordion.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-accordion.mjs","sources":["../../../../projects/element-ng/accordion/si-accordion-hcollapse.service.ts","../../../../projects/element-ng/accordion/si-accordion.service.ts","../../../../projects/element-ng/accordion/si-collapsible-panel.component.ts","../../../../projects/element-ng/accordion/si-collapsible-panel.component.html","../../../../projects/element-ng/accordion/si-accordion.component.ts","../../../../projects/element-ng/accordion/si-accordion.module.ts","../../../../projects/element-ng/accordion/index.ts","../../../../projects/element-ng/accordion/siemens-element-ng-accordion.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable, signal } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/** @internal */\n@Injectable({\n providedIn: null\n})\nexport class SiAccordionHCollapseService {\n /**\n * Emitting the current horizontal collapsed state.\n *\n * @defaultValue undefined\n */\n readonly hcollapsed = signal<boolean | undefined>(undefined);\n /**\n * Subject to emit to open the accordion.\n */\n readonly open$ = new Subject();\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable, signal } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/** @internal */\n@Injectable({\n providedIn: null\n})\nexport class SiAccordionService {\n /**\n * Emit an item in the accordion which should be toggled.\n */\n readonly toggle$ = new Subject<any>();\n /**\n * Subject to emit when the items should be expanded to their full height or restored to normal height.\n *\n * @defaultValue null\n */\n readonly fullHeight = signal<boolean | null>(null);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { animate, query, style, transition, trigger } from '@angular/animations';\nimport { NgClass } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { areAnimationsDisabled, BackgroundColorVariant } from '@siemens/element-ng/common';\nimport { addIcons, elementDown2, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { filter } from 'rxjs';\n\nimport { SiAccordionHCollapseService } from './si-accordion-hcollapse.service';\nimport { SiAccordionService } from './si-accordion.service';\n\nlet controlIdCounter = 1;\n\n@Component({\n selector: 'si-collapsible-panel',\n imports: [NgClass, SiIconComponent, SiTranslatePipe],\n templateUrl: './si-collapsible-panel.component.html',\n styleUrl: './si-collapsible-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'colorVariant()',\n '[class.opened]': 'opened()',\n '[class.hcollapsed]': 'hcollapsed()',\n '[class.full-height]': 'fullHeight()'\n },\n animations: [\n trigger('showHide', [\n transition('*=>hide', [\n style({ overflow: 'hidden' }),\n query(\n ':leave',\n [style({ blockSize: '*' }), animate('0.5s ease', style({ blockSize: '0' }))],\n { optional: true }\n )\n ]),\n transition('*=>show', [\n style({ overflow: 'hidden' }),\n query(\n ':enter',\n [style({ blockSize: '0' }), animate('0.5s ease', style({ blockSize: '*' }))],\n { optional: true }\n )\n ])\n ])\n ]\n})\nexport class SiCollapsiblePanelComponent {\n /**\n * Heading for the collapsible panel.\n */\n readonly heading = input<TranslatableString>();\n /**\n * Additional CSS classes for the top element.\n *\n * @defaultValue ''\n */\n readonly headerCssClasses = input('');\n /**\n * Additional CSS classes for the collapsible content region.\n *\n * @defaultValue ''\n */\n readonly contentBgClasses = input('');\n /**\n * Additional CSS classes for the wrapping content element.\n *\n * @defaultValue ''\n */\n readonly contentCssClasses = input('');\n /**\n * Expand/collapse the panel.\n *\n * @defaultValue false\n */\n readonly opened = model(false);\n /**\n * The icon to be displayed besides the heading.\n */\n readonly icon = input<string>();\n /**\n * Whether the si-collapsible-panel is disabled.\n *\n * @defaultValue false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n /**\n * Color variant for component background.\n *\n * @deprecated This input has no effect on the component styling.\n */\n readonly colorVariant = input<BackgroundColorVariant>();\n /**\n * Defines the content of the optional badge. Should be a number or something like \"100+\".\n * if undefined or empty string, no badge is displayed\n */\n readonly badge = input<string | number>();\n /**\n * Defines the background color of the badge. Default is specific to Element flavour.\n */\n readonly badgeColor = input<string>();\n\n /**\n * An event emitted when the user triggered expand/collapse and emit with the new open state.\n * The event is emitted before the animation happens.\n */\n readonly panelToggle = output<boolean>();\n\n protected readonly hcollapsed = computed(\n () => this.accordionHCollapseService?.hcollapsed() ?? false\n );\n protected readonly fullHeight = computed(() => this.accordionService?.fullHeight() ?? false);\n protected controlId = '__si-collapsible-' + controlIdCounter++;\n protected headerId = this.controlId + '-header';\n protected isHCollapsible = false;\n protected readonly icons = addIcons({ elementDown2 });\n\n private readonly accordionService = inject(SiAccordionService, { optional: true });\n private readonly accordionHCollapseService = inject(SiAccordionHCollapseService, {\n optional: true\n });\n private enableAnimation = true;\n private readonly animationsGloballyDisabled = areAnimationsDisabled();\n private lastScrollPos = 0;\n private readonly contentRef = viewChild.required<ElementRef<HTMLElement>>('content');\n\n constructor() {\n this.isHCollapsible = !!this.accordionHCollapseService;\n this.accordionService?.toggle$\n .pipe(\n takeUntilDestroyed(),\n filter(item => item !== this)\n )\n .subscribe(() => this.openClose(false));\n }\n\n protected get showHide(): string {\n if (this.enableAnimation && !this.animationsGloballyDisabled) {\n return this.opened() ? 'show' : 'hide';\n }\n return 'disabled';\n }\n\n /**\n * Expand/collapse panel.\n * @param open - indicate the panel shall open or close\n * @param enableAnimation - with animation\n */\n openClose(open: boolean, enableAnimation = true): void {\n this.opened.set(open);\n this.enableAnimation = enableAnimation;\n\n if (open) {\n setTimeout(() => {\n this.contentRef().nativeElement.scrollTop = this.lastScrollPos;\n });\n } else {\n this.lastScrollPos = this.contentRef().nativeElement.scrollTop;\n }\n }\n\n protected doToggle(event?: Event): void {\n if (this.disabled()) {\n return;\n }\n\n event?.preventDefault();\n const opened = this.opened();\n this.panelToggle.emit(!opened);\n this.openClose(this.hcollapsed() || !opened);\n this.accordionService?.toggle$.next(this);\n if (this.hcollapsed()) {\n this.accordionHCollapseService?.open$.next(this);\n }\n }\n\n protected keydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === 'Space' || event.key === ' ') {\n this.doToggle(undefined);\n }\n }\n}\n","<div\n class=\"collapsible-header focus-inside px-6\"\n role=\"button\"\n [ngClass]=\"headerCssClasses()\"\n [attr.tabindex]=\"disabled() ? '' : '0'\"\n [id]=\"headerId\"\n [class.open]=\"opened()\"\n [class.disabled]=\"disabled()\"\n [title]=\"hcollapsed() ? (heading() | translate) : ''\"\n [attr.aria-expanded]=\"opened() && !hcollapsed()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-controls]=\"controlId\"\n [attr.aria-label]=\"hcollapsed() ? (heading() | translate) : ''\"\n (keydown)=\"keydown($event)\"\n (click)=\"doToggle($event)\"\n>\n @let headerIcon = icon();\n @if (headerIcon) {\n <si-icon class=\"icon ms-n2 me-2\" [icon]=\"headerIcon\" [class.collapsed-icon]=\"isHCollapsible\" />\n }\n @if (icon() && badge() !== undefined && badge() !== '') {\n <span class=\"badge-text\">\n {{ badge() }}\n </span>\n }\n <div class=\"si-h5 autohide\">\n {{ heading() | translate }}\n <ng-content select=\"[si-panel-heading]\" />\n </div>\n\n @if (badge() !== undefined && badge() !== '') {\n <span class=\"badge autohide\" [ngClass]=\"'bg-' + badgeColor()\">\n {{ badge() }}\n </span>\n }\n <span class=\"ms-auto overflow-hidden\">\n <si-icon class=\"icon dropdown-caret\" [icon]=\"icons.elementDown2\" />\n </span>\n</div>\n<div\n #content\n class=\"collapsible-content\"\n role=\"region\"\n [id]=\"controlId\"\n [ngClass]=\"contentBgClasses()\"\n [@showHide]=\"showHide\"\n [attr.aria-labelledby]=\"headerId\"\n [class.full-height]=\"fullHeight()\"\n>\n @if (opened()) {\n <div>\n <div [ngClass]=\"contentCssClasses()\">\n <ng-content />\n </div>\n </div>\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n ElementRef,\n inject,\n input,\n OnChanges\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ResizeObserverService } from '@siemens/element-ng/resize-observer';\n\nimport { SiAccordionHCollapseService } from './si-accordion-hcollapse.service';\nimport { SiAccordionService } from './si-accordion.service';\nimport { SiCollapsiblePanelComponent } from './si-collapsible-panel.component';\n\nconst PANEL_MIN_HEIGHT = 100;\n\n@Component({\n selector: 'si-accordion',\n template: '<div><ng-content /></div>',\n styleUrl: './si-accordion.component.scss',\n providers: [SiAccordionService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.full-height]': 'fullHeight()',\n '[class.hcollapsed]': 'collapsed()'\n }\n})\nexport class SiAccordionComponent implements AfterContentInit, OnChanges {\n /** @defaultValue true */\n readonly expandFirstPanel = input(true, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly fullHeight = input(false, { transform: booleanAttribute });\n /** @defaultValue false */\n readonly hcollapsed = input(false);\n /**\n * Indicate whether the accordion is collapsed.\n * @internal\n */\n readonly collapsed = computed(\n () => this.accordionHCollapseService?.hcollapsed() ?? this.hcollapsed()\n );\n\n private readonly panels = contentChildren(SiCollapsiblePanelComponent);\n private responsive = false;\n private destroyer = inject(DestroyRef);\n private service = inject(SiAccordionService);\n private resizeObserver = inject(ResizeObserverService);\n private element = inject(ElementRef);\n private accordionHCollapseService = inject(SiAccordionHCollapseService, { optional: true });\n\n ngOnChanges(): void {\n this.service.fullHeight.set(this.fullHeight() && !this.responsive);\n }\n\n ngAfterContentInit(): void {\n this.resizeObserver\n .observe(this.element.nativeElement, 100, true, true)\n .pipe(takeUntilDestroyed(this.destroyer))\n .subscribe(() => this.calcFullHeight());\n\n this.panels().at(0)?.openClose(this.expandFirstPanel(), false);\n }\n\n private calcFullHeight(): void {\n if (this.panels?.length) {\n const height = (this.element.nativeElement as HTMLElement).offsetHeight;\n this.responsive = !this.hcollapsed() && height < this.panels.length * PANEL_MIN_HEIGHT;\n this.service.fullHeight.set(this.fullHeight() && !this.responsive);\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiAccordionComponent } from './si-accordion.component';\nimport { SiCollapsiblePanelComponent } from './si-collapsible-panel.component';\n\n@NgModule({\n imports: [SiAccordionComponent, SiCollapsiblePanelComponent],\n exports: [SiAccordionComponent, SiCollapsiblePanelComponent]\n})\nexport class SiAccordionModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2025\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-collapsible-panel.component';\nexport * from './si-accordion.component';\nexport * from './si-accordion.service';\nexport * from './si-accordion-hcollapse.service';\nexport * from './si-accordion.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|