@fundamental-ngx/platform 0.65.1-rc.8 → 0.65.1

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 (63) hide show
  1. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +40 -40
  2. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  3. package/fesm2022/fundamental-ngx-platform-button.mjs +7 -7
  4. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +50 -51
  5. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  6. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +8 -8
  7. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  8. package/fesm2022/fundamental-ngx-platform-form.mjs +321 -321
  9. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  10. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +64 -64
  11. package/fesm2022/fundamental-ngx-platform-link.mjs +7 -7
  12. package/fesm2022/fundamental-ngx-platform-list.mjs +59 -59
  13. package/fesm2022/fundamental-ngx-platform-menu-button.mjs +7 -7
  14. package/fesm2022/fundamental-ngx-platform-menu.mjs +13 -13
  15. package/fesm2022/fundamental-ngx-platform-message-popover.mjs +688 -34
  16. package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
  17. package/fesm2022/fundamental-ngx-platform-object-marker.mjs +7 -7
  18. package/fesm2022/fundamental-ngx-platform-object-status.mjs +10 -10
  19. package/fesm2022/fundamental-ngx-platform-page-footer.mjs +7 -7
  20. package/fesm2022/fundamental-ngx-platform-panel.mjs +16 -16
  21. package/fesm2022/fundamental-ngx-platform-search-field.mjs +19 -20
  22. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  23. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +34 -34
  24. package/fesm2022/fundamental-ngx-platform-shared.mjs +28 -28
  25. package/fesm2022/fundamental-ngx-platform-slider.mjs +8 -8
  26. package/fesm2022/fundamental-ngx-platform-slider.mjs.map +1 -1
  27. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +34 -34
  28. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  29. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +7 -7
  30. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +82 -82
  31. package/fesm2022/fundamental-ngx-platform-table.mjs +136 -136
  32. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +29 -29
  34. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +19 -19
  36. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +43 -43
  38. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-platform.mjs +4 -5
  40. package/fesm2022/fundamental-ngx-platform.mjs.map +1 -1
  41. package/package.json +5 -13
  42. package/schematics/ng-add/index.js +1 -1
  43. package/schematics/package.json +1 -1
  44. package/types/fundamental-ngx-platform-approval-flow.d.ts +1 -1
  45. package/types/fundamental-ngx-platform-dynamic-page.d.ts +1 -1
  46. package/types/fundamental-ngx-platform-form.d.ts +11 -11
  47. package/types/fundamental-ngx-platform-icon-tab-bar.d.ts +1 -1
  48. package/types/fundamental-ngx-platform-list.d.ts +1 -1
  49. package/types/fundamental-ngx-platform-message-popover.d.ts +253 -9
  50. package/types/fundamental-ngx-platform-panel.d.ts +1 -1
  51. package/types/fundamental-ngx-platform-settings-generator.d.ts +2 -2
  52. package/types/fundamental-ngx-platform-shared.d.ts +3 -3
  53. package/types/fundamental-ngx-platform-smart-filter-bar.d.ts +1 -1
  54. package/types/fundamental-ngx-platform-table-helpers.d.ts +5 -5
  55. package/types/fundamental-ngx-platform-wizard-generator.d.ts +2 -2
  56. package/types/fundamental-ngx-platform.d.ts +0 -1
  57. package/fesm2022/fundamental-ngx-platform-message-view.mjs +0 -170
  58. package/fesm2022/fundamental-ngx-platform-message-view.mjs.map +0 -1
  59. package/fesm2022/fundamental-ngx-platform-messages-shared.mjs +0 -803
  60. package/fesm2022/fundamental-ngx-platform-messages-shared.mjs.map +0 -1
  61. package/message-view/README.md +0 -88
  62. package/types/fundamental-ngx-platform-message-view.d.ts +0 -70
  63. package/types/fundamental-ngx-platform-messages-shared.d.ts +0 -306
@@ -1,42 +1,697 @@
1
- import { MessageListShared, MessagesListComponent, FDP_MESSAGE_POPOVER_DEFAULT_CONFIG, FDP_MESSAGE_POPOVER_CONFIG, MessagePopoverFormWrapperComponent, MessagePopoverFormItemDirective } from '@fundamental-ngx/platform/messages-shared';
2
- export * from '@fundamental-ngx/platform/messages-shared';
3
- import { NgClass } from '@angular/common';
4
1
  import * as i0 from '@angular/core';
5
- import { EventEmitter, Input, ViewChild, Output, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
6
- import * as i3 from '@angular/forms';
7
- import { FormsModule } from '@angular/forms';
8
- import { InitialFocusDirective, mergeWith } from '@fundamental-ngx/cdk/utils';
9
- import * as i2 from '@fundamental-ngx/core/bar';
2
+ import { InjectionToken, Input, Optional, Directive, signal, ContentChildren, Inject, ViewEncapsulation, ChangeDetectionStrategy, Component, EventEmitter, DOCUMENT, ElementRef, ViewChild, Output, computed, NgModule } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import * as i1 from '@angular/forms';
5
+ import { FormGroup, ControlContainer, FormsModule } from '@angular/forms';
6
+ import { FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';
7
+ import { Subject, Subscription, startWith, switchMap, filter, zip, debounceTime } from 'rxjs';
8
+ import { CdkScrollable } from '@angular/cdk/overlay';
9
+ import { NgTemplateOutlet, NgClass } from '@angular/common';
10
+ import * as i1$1 from '@fundamental-ngx/cdk/utils';
11
+ import { resizeObservable, TabbableElementService, countBy, flatten, InitialFocusDirective, mergeWith } from '@fundamental-ngx/cdk/utils';
12
+ import { LinkComponent } from '@fundamental-ngx/core/link';
13
+ import * as i2 from '@fundamental-ngx/core/list';
14
+ import { ListModule } from '@fundamental-ngx/core/list';
15
+ import { ObjectStatusComponent } from '@fundamental-ngx/core/object-status';
16
+ import { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';
17
+ import { FdTranslatePipe } from '@fundamental-ngx/i18n';
18
+ import * as i2$1 from '@fundamental-ngx/core/bar';
10
19
  import { BarModule } from '@fundamental-ngx/core/bar';
11
20
  import { ButtonComponent } from '@fundamental-ngx/core/button';
12
- import { ObjectStatusComponent } from '@fundamental-ngx/core/object-status';
13
- import * as i1 from '@fundamental-ngx/core/popover';
21
+ import * as i1$2 from '@fundamental-ngx/core/popover';
14
22
  import { PopoverModule } from '@fundamental-ngx/core/popover';
15
23
  import { SegmentedButtonComponent } from '@fundamental-ngx/core/segmented-button';
16
- import { FdTranslatePipe } from '@fundamental-ngx/i18n';
24
+ import { getFormState } from '@fundamental-ngx/platform/form';
25
+
26
+ const FDP_MESSAGE_POPOVER_DEFAULT_CONFIG = {
27
+ errors: {
28
+ email: 'platformMessagePopover.defaultErrors.email',
29
+ max: 'platformMessagePopover.defaultErrors.max',
30
+ maxlength: 'platformMessagePopover.defaultErrors.maxLength',
31
+ min: 'platformMessagePopover.defaultErrors.min',
32
+ minlength: 'platformMessagePopover.defaultErrors.minLength',
33
+ pattern: 'platformMessagePopover.defaultErrors.pattern',
34
+ required: 'platformMessagePopover.defaultErrors.required',
35
+ requiredTrue: 'platformMessagePopover.defaultErrors.requiredTrue'
36
+ }
37
+ };
38
+ const FDP_MESSAGE_POPOVER_CONFIG = new InjectionToken('FdpMessagePopoverConfig');
39
+
40
+ class MessagePopoverFormItemDirective {
41
+ /** @hidden */
42
+ constructor(elementRef, control) {
43
+ this.elementRef = elementRef;
44
+ this.control = control;
45
+ }
46
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MessagePopoverFormItemDirective, deps: [{ token: i0.ElementRef }, { token: i1.NgControl, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
47
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: MessagePopoverFormItemDirective, isStandalone: true, selector: "[fdpMessagePopoverFormItem]", inputs: { label: ["fdpMessagePopoverFormItem", "label"], errorTypes: "errorTypes" }, ngImport: i0 }); }
48
+ }
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MessagePopoverFormItemDirective, decorators: [{
50
+ type: Directive,
51
+ args: [{
52
+ selector: '[fdpMessagePopoverFormItem]',
53
+ standalone: true
54
+ }]
55
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
56
+ type: Optional
57
+ }] }], propDecorators: { label: [{
58
+ type: Input,
59
+ args: ['fdpMessagePopoverFormItem']
60
+ }], errorTypes: [{
61
+ type: Input
62
+ }] } });
63
+
64
+ /**
65
+ * Converts Object Status into Message Popover State
66
+ * @param status Object status
67
+ * @returns Message Popover State.
68
+ */
69
+ function convertFormStateToMessagePopoverState(state) {
70
+ switch (state) {
71
+ case 'error':
72
+ return 'negative';
73
+ case 'warning':
74
+ return 'critical';
75
+ case 'default':
76
+ return 'neutral';
77
+ default:
78
+ return state;
79
+ }
80
+ }
81
+ /**
82
+ * Converts Form State into Object status type.
83
+ * @param type Form state.
84
+ * @returns `ObjectStatus` type.
85
+ */
86
+ function convertFormState(type) {
87
+ switch (type) {
88
+ case 'success':
89
+ return 'positive';
90
+ case 'error':
91
+ return 'negative';
92
+ case 'warning':
93
+ return 'critical';
94
+ case 'information':
95
+ return 'informative';
96
+ default:
97
+ return 'neutral';
98
+ }
99
+ }
17
100
 
18
- class MessagePopoverComponent extends MessageListShared {
101
+ class MessagePopoverFormWrapperComponent {
102
+ /**
103
+ * User-passed forms.
104
+ */
105
+ set forms(forms) {
106
+ if (!forms) {
107
+ return;
108
+ }
109
+ if (!Array.isArray(forms)) {
110
+ forms = [forms];
111
+ }
112
+ this._ngForms = forms;
113
+ this._startListeningForErrors();
114
+ }
115
+ /** User-passed form fields. */
116
+ set formFields(value) {
117
+ this._formFields = value;
118
+ this._listenToFormFieldErrors(value);
119
+ }
120
+ get formFields() {
121
+ return this._formFields;
122
+ }
123
+ /** @hidden */
124
+ constructor(_destroyRef, _config) {
125
+ this._destroyRef = _destroyRef;
126
+ this._config = _config;
127
+ /** Message Popover instance. */
128
+ this.messagePopover$ = new Subject();
129
+ /**
130
+ * Error models Signal. Emitted when form submitted and contains invalid fields.
131
+ */
132
+ this.errors$ = signal([], /* @ts-ignore */
133
+ ...(ngDevMode ? [{ debugName: "errors$" }] : /* istanbul ignore next */ []));
134
+ /** @hidden */
135
+ this._formFields = [];
136
+ /** @hidden */
137
+ this._ngForms = [];
138
+ /** @hidden */
139
+ this._formItemErrorsSubscription = new Subscription();
140
+ /** @hidden */
141
+ this._formSubmitted = false;
142
+ }
143
+ /** @hidden */
144
+ ngAfterViewInit() {
145
+ // Forms are passed via input property.
146
+ if (this._ngForms.length > 0) {
147
+ return;
148
+ }
149
+ this._projectedForm?.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {
150
+ this._ngForms = this._projectedForm.toArray();
151
+ this._startListeningForErrors();
152
+ });
153
+ }
154
+ /**
155
+ * Sets Message Popover component instance.
156
+ */
157
+ setMessagePopover(messagePopover) {
158
+ this.messagePopover$.next(messagePopover);
159
+ // this.messagePopover = messagePopover;
160
+ }
161
+ /**
162
+ * Programmatically add new form to array of forms.
163
+ * @param forms
164
+ */
165
+ addForms(forms) {
166
+ const formsArray = Array.isArray(forms) ? forms : [forms];
167
+ this._ngForms.push(...formsArray);
168
+ this._startListeningForErrors();
169
+ }
170
+ /**
171
+ * Programmatically add new form fields to array of listened form fields.
172
+ * @param formFields
173
+ */
174
+ addFormFields(formFields) {
175
+ this._formFields.push(...formFields);
176
+ this._listenToFormFieldErrors(this._formFields);
177
+ }
178
+ /** @hidden */
179
+ ngOnDestroy() {
180
+ this._formItemErrorsSubscription.unsubscribe();
181
+ }
182
+ /**
183
+ * @hidden
184
+ * Listens to the form submission and collects form control errors.
185
+ */
186
+ _startListeningForErrors() {
187
+ if (!this._ngForms) {
188
+ return;
189
+ }
190
+ this._formErrorsSubscription?.unsubscribe();
191
+ this.errors$.set([]);
192
+ const formSubmitEvents = this._ngForms.map((form) => form.ngSubmit.pipe(switchMap(() => form.statusChanges.pipe(startWith(form.status), filter((status) => status.toLowerCase() !== 'pending')))));
193
+ this._formErrorsSubscription = zip(...formSubmitEvents)
194
+ .pipe(takeUntilDestroyed(this._destroyRef))
195
+ .subscribe(() => {
196
+ this._formSubmitted = true;
197
+ const errors = this._directiveItems.length > 0 ? this._collectPlainFormData() : this._collectAdvancedFormData();
198
+ this.errors$.set(errors);
199
+ });
200
+ this._listenToFormFieldErrors(this._projectedFormFieldControls.toArray());
201
+ this._projectedFormFieldControls?.changes.subscribe(() => {
202
+ this._listenToFormFieldErrors(this._projectedFormFieldControls.toArray());
203
+ });
204
+ }
205
+ /** @hidden */
206
+ _listenToFormFieldErrors(fields) {
207
+ this._formItemErrorsSubscription.unsubscribe();
208
+ this._formItemErrorsSubscription = new Subscription();
209
+ fields?.forEach((field) => {
210
+ this._formItemErrorsSubscription.add(field.formField?.errorsChange$.subscribe(() => {
211
+ if (!this._formSubmitted) {
212
+ return;
213
+ }
214
+ const errors = this._directiveItems.length > 0
215
+ ? this._collectPlainFormData()
216
+ : this._collectAdvancedFormData();
217
+ this.errors$.set(errors);
218
+ }));
219
+ });
220
+ }
221
+ /** @hidden */
222
+ _collectPlainFormData() {
223
+ const errors = [
224
+ {
225
+ errors: []
226
+ }
227
+ ];
228
+ const fields = this._directiveItems.toArray();
229
+ this._ngForms.forEach((form) => {
230
+ Object.keys(form.form.controls).forEach((controlName) => {
231
+ const control = form.form.get(controlName);
232
+ const field = fields.find((formField) => formField.control?.name === controlName);
233
+ if (!control?.errors || !field) {
234
+ return;
235
+ }
236
+ const configErrors = Object.keys(this._config.errors);
237
+ Object.keys(control.errors)
238
+ .filter((error) => configErrors.includes(error))
239
+ .forEach((errorKey) => {
240
+ const errorObj = control.errors[errorKey];
241
+ const errorTextModel = this._getConfigErrorModel(errorKey, field.errorTypes);
242
+ const errorConfig = field?.errorTypes ? field?.errorTypes[errorKey] : null;
243
+ const errorState = errorConfig && this._isAdvancedError(errorConfig) && errorConfig.type
244
+ ? errorConfig.type
245
+ : 'error';
246
+ const error = {
247
+ name: controlName,
248
+ type: errorTextModel.type,
249
+ state: convertFormState(errorState),
250
+ fieldName: field?.label ?? '',
251
+ element: field?.elementRef,
252
+ heading: {
253
+ type: 'string',
254
+ error: errorObj,
255
+ message: errorTextModel.heading
256
+ },
257
+ description: {
258
+ type: 'string',
259
+ error: errorObj,
260
+ message: errorTextModel.description
261
+ },
262
+ errors: control.errors
263
+ };
264
+ errors[0].errors.push(error);
265
+ });
266
+ });
267
+ });
268
+ return errors;
269
+ }
270
+ /** @hidden */
271
+ _collectAdvancedFormData() {
272
+ let errors = [];
273
+ const fields = this.formFields.length > 0 ? this.formFields : this._projectedFormFieldControls.toArray();
274
+ /**
275
+ * Iterates over form controls to collect their errors.
276
+ * @param form Form Group or a collection of Form Groups.
277
+ */
278
+ const iterateOverForm = (form) => {
279
+ if (Array.isArray(form)) {
280
+ form.forEach((formGroup) => {
281
+ errors = iterateOverForm(formGroup);
282
+ });
283
+ return errors;
284
+ }
285
+ Object.keys(form.controls).forEach((controlName) => {
286
+ const control = form.get(controlName);
287
+ const field = fields.find((formField) => formField.id === controlName);
288
+ if (control instanceof FormGroup) {
289
+ errors = iterateOverForm(control);
290
+ }
291
+ if (!control?.errors || !field) {
292
+ return;
293
+ }
294
+ Object.keys(control.errors).forEach((errorKey) => {
295
+ const errorDirective = field.formField?.groupedErrors.find((groupedError) => groupedError.directive.error === errorKey);
296
+ const groupName = this._getGroupName(field?.formField);
297
+ const error = this._getErrorModel(controlName, groupName, control, field, errorKey, errorDirective, control.errors[errorKey]);
298
+ let errorGroupIndex = errors.findIndex((errorGroup) => errorGroup.group === groupName);
299
+ if (errorGroupIndex === -1) {
300
+ errorGroupIndex =
301
+ errors.push({
302
+ group: groupName,
303
+ errors: []
304
+ }) - 1;
305
+ }
306
+ const group = errors[errorGroupIndex];
307
+ group.errors.push(error);
308
+ });
309
+ });
310
+ return errors;
311
+ };
312
+ return iterateOverForm(this._ngForms.map((form) => form.form));
313
+ }
314
+ /**
315
+ * @hidden
316
+ * Creates error model
317
+ */
318
+ _getErrorModel(controlName, groupName, control, field, errorKey, errorDirective, error) {
319
+ let state = 'error';
320
+ const configError = this._config.errors[errorKey];
321
+ if (errorDirective?.directive.type) {
322
+ state = errorDirective.directive.type;
323
+ }
324
+ else if (this._isAdvancedError(configError)) {
325
+ state = configError.type;
326
+ }
327
+ return {
328
+ name: controlName,
329
+ type: state,
330
+ state: convertFormState(state),
331
+ group: groupName,
332
+ fieldName: field?.formField?.label ?? '',
333
+ heading: this._getErrorText(field, errorDirective, 'heading', errorKey, error),
334
+ description: this._getErrorText(field, errorDirective, 'description', errorKey, error),
335
+ errors: control.errors,
336
+ formField: field,
337
+ element: field?.elementRef
338
+ };
339
+ }
340
+ /**
341
+ * @hidden
342
+ * Creates error text based on the type of the error.
343
+ * @param field Form Field Control.
344
+ * @param errorDirective Optional Error directive
345
+ * @param section Section where text should be rendered.
346
+ * @param errorKey
347
+ * @param error
348
+ */
349
+ _getErrorText(field, errorDirective, section = 'heading', errorKey, error) {
350
+ const errorTextObj = {
351
+ error: errorDirective?.error,
352
+ type: errorDirective?.directive ? 'directive' : field?.formField?.i18Strings ? 'templateRef' : 'string'
353
+ };
354
+ if (errorTextObj.type === 'string') {
355
+ const errorTextModel = this._getConfigErrorModel(errorKey);
356
+ errorTextObj.error = error;
357
+ errorTextObj.message = errorTextModel[section];
358
+ return errorTextObj;
359
+ }
360
+ if (errorDirective?.directive) {
361
+ errorTextObj.message =
362
+ section === 'heading'
363
+ ? (errorDirective.directive._headingTemplateRef ?? errorDirective.directive._descriptionTemplateRef)
364
+ : errorDirective.directive._descriptionTemplateRef;
365
+ return errorTextObj;
366
+ }
367
+ errorTextObj.message = field?.formField?.i18Strings ?? null;
368
+ return errorTextObj;
369
+ }
370
+ /** @hidden */
371
+ _getGroupName(formField) {
372
+ const parts = [];
373
+ if (formField?.formGroupContainer?.mainTitle) {
374
+ parts.push(formField.formGroupContainer.mainTitle);
375
+ }
376
+ if (formField?.formFieldGroup?.label) {
377
+ parts.push(formField.formFieldGroup.label);
378
+ }
379
+ return parts.join(', ');
380
+ }
381
+ /** @hidden */
382
+ _getConfigErrorModel(errorKey, customErrorTypes) {
383
+ const configError = customErrorTypes && customErrorTypes[errorKey] ? customErrorTypes[errorKey] : this._config.errors[errorKey];
384
+ const isPlainError = !this._isAdvancedError(configError);
385
+ const errorType = isPlainError ? 'error' : configError.type;
386
+ const headingMessage = isPlainError ? configError : configError.heading;
387
+ const descriptionMessage = isPlainError ? undefined : configError.description;
388
+ return {
389
+ type: errorType,
390
+ heading: headingMessage,
391
+ description: descriptionMessage
392
+ };
393
+ }
394
+ /** @hidden */
395
+ _isAdvancedError(error) {
396
+ return !!error && typeof error !== 'string';
397
+ }
398
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MessagePopoverFormWrapperComponent, deps: [{ token: i0.DestroyRef }, { token: FDP_MESSAGE_POPOVER_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
399
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: MessagePopoverFormWrapperComponent, isStandalone: true, selector: "fdp-message-popover-form-wrapper", inputs: { forms: "forms", formFields: "formFields" }, queries: [{ propertyName: "_projectedForm", predicate: ControlContainer, descendants: true }, { propertyName: "_projectedFormFieldControls", predicate: FD_FORM_FIELD_CONTROL, descendants: true }, { propertyName: "_directiveItems", predicate: MessagePopoverFormItemDirective, descendants: true }], exportAs: ["messagePopoverWrapper"], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
400
+ }
401
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MessagePopoverFormWrapperComponent, decorators: [{
402
+ type: Component,
403
+ args: [{
404
+ selector: 'fdp-message-popover-form-wrapper',
405
+ template: `<ng-content></ng-content>`,
406
+ exportAs: 'messagePopoverWrapper',
407
+ changeDetection: ChangeDetectionStrategy.OnPush,
408
+ encapsulation: ViewEncapsulation.None,
409
+ standalone: true
410
+ }]
411
+ }], ctorParameters: () => [{ type: i0.DestroyRef }, { type: undefined, decorators: [{
412
+ type: Inject,
413
+ args: [FDP_MESSAGE_POPOVER_CONFIG]
414
+ }] }], propDecorators: { _projectedForm: [{
415
+ type: ContentChildren,
416
+ args: [ControlContainer, { descendants: true }]
417
+ }], _projectedFormFieldControls: [{
418
+ type: ContentChildren,
419
+ args: [FD_FORM_FIELD_CONTROL, { descendants: true }]
420
+ }], _directiveItems: [{
421
+ type: ContentChildren,
422
+ args: [MessagePopoverFormItemDirective, { descendants: true }]
423
+ }], forms: [{
424
+ type: Input
425
+ }], formFields: [{
426
+ type: Input
427
+ }] } });
428
+
429
+ const ANIMATION_EASING = 'cubic-bezier(0, 0, 0.2, 1)';
430
+ const ANIMATION_DURATION = 100;
431
+ class MessageViewComponent {
432
+ /** Current Message Popover screen. Can be either `list` or `details`. */
433
+ set currentScreen(value) {
434
+ const prev = this._currentScreen;
435
+ this._currentScreen = value;
436
+ if (prev && prev !== value) {
437
+ this._animateScreenTransition(value);
438
+ }
439
+ }
440
+ get currentScreen() {
441
+ return this._currentScreen;
442
+ }
443
+ /** @hidden */
444
+ constructor(_destroyRef, _tabbableService, _document) {
445
+ this._destroyRef = _destroyRef;
446
+ this._tabbableService = _tabbableService;
447
+ this._document = _document;
448
+ /** Event emitted when user clicks on error entry containing additional description. */
449
+ this.openDetails = new EventEmitter();
450
+ /** Event emitted when user clicks on error entry and item's element should be focused. */
451
+ this.focusItem = new EventEmitter();
452
+ /** Event emitted when user clicks on the field link to focus on the field itself. */
453
+ this.closePopover = new EventEmitter();
454
+ /** @hidden */
455
+ this._currentScreen = 'list';
456
+ /** @hidden */
457
+ this._activeListElement = null;
458
+ /** @hidden */
459
+ this._listAnimation = null;
460
+ /** @hidden */
461
+ this._detailsAnimation = null;
462
+ this._destroyRef.onDestroy(() => {
463
+ this._listAnimation?.cancel();
464
+ this._listAnimation = null;
465
+ this._detailsAnimation?.cancel();
466
+ this._detailsAnimation = null;
467
+ });
468
+ }
469
+ /** @hidden */
470
+ ngAfterViewInit() {
471
+ resizeObservable(this._detailsView.nativeElement)
472
+ .pipe(debounceTime(20), takeUntilDestroyed(this._destroyRef))
473
+ .subscribe(() => {
474
+ const { height } = this._detailsView.nativeElement.getBoundingClientRect();
475
+ this._listSection.nativeElement.style.minHeight = `${height}px`;
476
+ });
477
+ }
478
+ /** @hidden */
479
+ _showDetails(entry) {
480
+ this._activeListElement = this._document.activeElement;
481
+ if (!entry.description.message) {
482
+ this._focusElement(undefined, entry);
483
+ return;
484
+ }
485
+ this.currentScreen = 'details';
486
+ this.openDetails.emit(entry);
487
+ }
488
+ /** @hidden */
489
+ _focusElement(event, item) {
490
+ if (!item?.element?.nativeElement) {
491
+ return;
492
+ }
493
+ event?.stopImmediatePropagation();
494
+ this.closePopover.emit(false);
495
+ this.focusItem.emit(item);
496
+ setTimeout(() => {
497
+ const tabbableElement = this._tabbableService.getTabbableElement(item.element?.nativeElement);
498
+ tabbableElement?.focus();
499
+ });
500
+ }
501
+ /** @hidden Animate the transition between list and details screens. */
502
+ _animateScreenTransition(screen) {
503
+ const listEl = this._listSection?.nativeElement;
504
+ const detailsEl = this._detailsSection?.nativeElement;
505
+ if (!listEl || !detailsEl) {
506
+ return;
507
+ }
508
+ this._listAnimation?.cancel();
509
+ this._detailsAnimation?.cancel();
510
+ if (screen === 'details') {
511
+ this._animateListToDetails(listEl, detailsEl);
512
+ }
513
+ else {
514
+ this._animateDetailsToList(listEl, detailsEl);
515
+ }
516
+ }
517
+ /** @hidden Slide list out left, details in from right. */
518
+ _animateListToDetails(listEl, detailsEl) {
519
+ if (typeof listEl.animate !== 'function') {
520
+ return;
521
+ }
522
+ this._listAnimation = listEl.animate([
523
+ { transform: 'translateX(0)', opacity: 1 },
524
+ { transform: 'translateX(-50px)', opacity: 0 }
525
+ ], { duration: ANIMATION_DURATION, easing: ANIMATION_EASING, fill: 'forwards' });
526
+ this._detailsAnimation = detailsEl.animate([
527
+ { transform: 'translateX(50px)', opacity: 0 },
528
+ { transform: 'translateX(0)', opacity: 1 }
529
+ ], { duration: ANIMATION_DURATION, easing: ANIMATION_EASING, fill: 'forwards', delay: ANIMATION_DURATION });
530
+ this._detailsAnimation.finished
531
+ .then(() => {
532
+ this._detailsAnimation = null;
533
+ })
534
+ .catch(() => {
535
+ this._detailsAnimation = null;
536
+ });
537
+ }
538
+ /** @hidden Slide details out right, list in from left. */
539
+ _animateDetailsToList(listEl, detailsEl) {
540
+ if (typeof listEl.animate !== 'function') {
541
+ return;
542
+ }
543
+ this._detailsAnimation = detailsEl.animate([
544
+ { transform: 'translateX(0)', opacity: 1 },
545
+ { transform: 'translateX(50px)', opacity: 0 }
546
+ ], { duration: ANIMATION_DURATION, easing: ANIMATION_EASING, fill: 'forwards' });
547
+ this._listAnimation = listEl.animate([
548
+ { transform: 'translateX(-50px)', opacity: 0 },
549
+ { transform: 'translateX(0)', opacity: 1 }
550
+ ], { duration: ANIMATION_DURATION, easing: ANIMATION_EASING, fill: 'forwards', delay: ANIMATION_DURATION });
551
+ this._listAnimation.finished
552
+ .then(() => {
553
+ this._listAnimation = null;
554
+ if (this._activeListElement) {
555
+ this._activeListElement.focus();
556
+ this._activeListElement = null;
557
+ }
558
+ })
559
+ .catch(() => {
560
+ this._listAnimation = null;
561
+ });
562
+ }
563
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MessageViewComponent, deps: [{ token: i0.DestroyRef }, { token: i1$1.TabbableElementService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
564
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: MessageViewComponent, isStandalone: true, selector: "fdp-message-view", inputs: { currentScreen: "currentScreen", filteredErrors: "filteredErrors", currentEntry: "currentEntry" }, outputs: { openDetails: "openDetails", focusItem: "focusItem", closePopover: "closePopover" }, host: { classAttribute: "fd-message-popover__view-container" }, providers: [TabbableElementService], viewQueries: [{ propertyName: "_listView", first: true, predicate: ["listView"], descendants: true, read: ElementRef }, { propertyName: "_detailsView", first: true, predicate: ["detailsView"], descendants: true, read: ElementRef }, { propertyName: "_listSection", first: true, predicate: ["listSection"], descendants: true, read: ElementRef }, { propertyName: "_detailsSection", first: true, predicate: ["detailsSection"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ng-template #headingTemplate let-item>\n <ng-template #directiveHeading>\n <ng-template\n [ngTemplateOutlet]=\"item.heading.message || item.description.message\"\n [ngTemplateOutletContext]=\"{ $implicit: item.heading.error }\"\n ></ng-template>\n </ng-template>\n <ng-template #i18nHeading>\n <ng-template\n [ngTemplateOutlet]=\"item.heading.message\"\n [ngTemplateOutletContext]=\"{ $implicit: item.errors }\"\n ></ng-template>\n </ng-template>\n <ng-template #stringHeading>\n {{ (item.heading.message | fdTranslate: { error: item.heading.error } : item.heading.message)() }}\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"\n item.heading.type === 'directive'\n ? directiveHeading\n : item.heading.type === 'string'\n ? stringHeading\n : i18nHeading\n \"\n ></ng-template>\n</ng-template>\n<ng-template #descriptionTemplate let-item>\n <ng-template #directiveDescription>\n <ng-template\n [ngTemplateOutlet]=\"item.description.message!\"\n [ngTemplateOutletContext]=\"{ $implicit: item.description.error }\"\n ></ng-template>\n </ng-template>\n <ng-template #i18nDescription>\n <ng-template\n [ngTemplateOutlet]=\"item.description.message!\"\n [ngTemplateOutletContext]=\"{ $implicit: item.errors }\"\n ></ng-template>\n </ng-template>\n <ng-template #stringDescription>\n {{ (item.description.message | fdTranslate: { error: item.description.error } : item.description.message)() }}\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"\n item.heading.type === 'directive'\n ? directiveDescription\n : item.heading.type === 'string'\n ? stringDescription\n : i18nDescription\n \"\n ></ng-template>\n</ng-template>\n<div class=\"fd-message-view\">\n <section #listSection class=\"fd-message-view__list\" tabindex=\"-1\" fd-scrollbar>\n <ul #listView fd-list class=\"message-popover__list fd-list--message-view\" [navigationIndicator]=\"true\">\n @for (group of filteredErrors; track group) {\n @if (group.group) {\n <li fd-list-group-header>\n <span fd-list-title>{{ group.group }}</span>\n </li>\n }\n @for (item of group.errors; track item; let i = $index) {\n <li fd-list-item [tabindex]=\"i === 0 ? 0 : -1\" [byline]=\"true\" (click)=\"_showDetails(item)\">\n <ng-template #itemIcon>\n <span\n fd-object-status\n class=\"fd-list__icon\"\n [status]=\"item.state\"\n [glyph]=\"'message-' + item.type\"\n ></span>\n </ng-template>\n <ng-template #listSubtitle>\n <span class=\"fd-list__subtitle\">\n <ng-template\n [ngTemplateOutlet]=\"headingTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-template>\n </span>\n </ng-template>\n @if (item.element && !!item.description.message) {\n <span fd-list-link [navigationIndicator]=\"!!item.description.message\">\n <ng-template [ngTemplateOutlet]=\"itemIcon\"></ng-template>\n <span fd-list-content>\n <span fd-list-title>\n <a tabindex=\"0\" fd-link (click)=\"_focusElement($event, item)\">\n {{ item.fieldName }}\n </a>\n </span>\n <ng-template [ngTemplateOutlet]=\"listSubtitle\"></ng-template>\n </span>\n </span>\n } @else {\n <a fd-list-link [navigationIndicator]=\"!!item.description.message\">\n <ng-template [ngTemplateOutlet]=\"itemIcon\"></ng-template>\n <span fd-list-content>\n <span fd-list-title>{{ item.fieldName }}</span>\n <ng-template [ngTemplateOutlet]=\"listSubtitle\"></ng-template>\n </span>\n </a>\n }\n </li>\n }\n }\n </ul>\n </section>\n <section #detailsSection class=\"fd-message-view__details\">\n <div #detailsView>\n @if (currentEntry) {\n <span class=\"fd-message-view__details-title\">\n <span\n fd-object-status\n class=\"fd-message-view__icon\"\n [status]=\"currentEntry.state\"\n [glyph]=\"'message-' + currentEntry.type\"\n ></span>\n <ng-template\n [ngTemplateOutlet]=\"headingTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: currentEntry }\"\n ></ng-template>\n </span>\n @if (currentEntry.description.message) {\n <span class=\"fd-message-view__details-description\">\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: currentEntry }\"\n ></ng-template>\n </span>\n }\n }\n </div>\n </section>\n</div>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ScrollbarDirective, selector: "[fdScrollbar], [fd-scrollbar]", inputs: ["noHorizontalScroll", "noVerticalScroll", "alwaysVisible"] }, { kind: "ngmodule", type: ListModule }, { kind: "component", type: i2.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "subline", "theme", "unreadIndicator", "role", "settingsList", "settingsListFooter", "notification", "searchResultsList"], outputs: ["focusEscapeList"] }, { kind: "component", type: i2.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "counterRole", "counterAriaLabel", "active", "unread", "byline", "ariaRole", "id", "preventClick", "settingsListTpl", "suggestion"], outputs: ["keyDown"], exportAs: ["fdListItem"] }, { kind: "directive", type: i2.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap", "truncate", "scope"] }, { kind: "directive", type: i2.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "directive", type: i2.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "directive", type: i2.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { kind: "component", type: ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["status", "statusMessage", "glyph", "glyphFont", "label", "ariaLabel", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate", "ariaRoleDescription"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["emphasized", "disabled", "inverted", "subtle", "undecorated", "touchTarget"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
565
+ }
566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MessageViewComponent, decorators: [{
567
+ type: Component,
568
+ args: [{ selector: 'fdp-message-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [TabbableElementService], host: {
569
+ class: 'fd-message-popover__view-container'
570
+ }, imports: [
571
+ NgTemplateOutlet,
572
+ CdkScrollable,
573
+ ScrollbarDirective,
574
+ ListModule,
575
+ ObjectStatusComponent,
576
+ LinkComponent,
577
+ FdTranslatePipe
578
+ ], template: "<ng-template #headingTemplate let-item>\n <ng-template #directiveHeading>\n <ng-template\n [ngTemplateOutlet]=\"item.heading.message || item.description.message\"\n [ngTemplateOutletContext]=\"{ $implicit: item.heading.error }\"\n ></ng-template>\n </ng-template>\n <ng-template #i18nHeading>\n <ng-template\n [ngTemplateOutlet]=\"item.heading.message\"\n [ngTemplateOutletContext]=\"{ $implicit: item.errors }\"\n ></ng-template>\n </ng-template>\n <ng-template #stringHeading>\n {{ (item.heading.message | fdTranslate: { error: item.heading.error } : item.heading.message)() }}\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"\n item.heading.type === 'directive'\n ? directiveHeading\n : item.heading.type === 'string'\n ? stringHeading\n : i18nHeading\n \"\n ></ng-template>\n</ng-template>\n<ng-template #descriptionTemplate let-item>\n <ng-template #directiveDescription>\n <ng-template\n [ngTemplateOutlet]=\"item.description.message!\"\n [ngTemplateOutletContext]=\"{ $implicit: item.description.error }\"\n ></ng-template>\n </ng-template>\n <ng-template #i18nDescription>\n <ng-template\n [ngTemplateOutlet]=\"item.description.message!\"\n [ngTemplateOutletContext]=\"{ $implicit: item.errors }\"\n ></ng-template>\n </ng-template>\n <ng-template #stringDescription>\n {{ (item.description.message | fdTranslate: { error: item.description.error } : item.description.message)() }}\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"\n item.heading.type === 'directive'\n ? directiveDescription\n : item.heading.type === 'string'\n ? stringDescription\n : i18nDescription\n \"\n ></ng-template>\n</ng-template>\n<div class=\"fd-message-view\">\n <section #listSection class=\"fd-message-view__list\" tabindex=\"-1\" fd-scrollbar>\n <ul #listView fd-list class=\"message-popover__list fd-list--message-view\" [navigationIndicator]=\"true\">\n @for (group of filteredErrors; track group) {\n @if (group.group) {\n <li fd-list-group-header>\n <span fd-list-title>{{ group.group }}</span>\n </li>\n }\n @for (item of group.errors; track item; let i = $index) {\n <li fd-list-item [tabindex]=\"i === 0 ? 0 : -1\" [byline]=\"true\" (click)=\"_showDetails(item)\">\n <ng-template #itemIcon>\n <span\n fd-object-status\n class=\"fd-list__icon\"\n [status]=\"item.state\"\n [glyph]=\"'message-' + item.type\"\n ></span>\n </ng-template>\n <ng-template #listSubtitle>\n <span class=\"fd-list__subtitle\">\n <ng-template\n [ngTemplateOutlet]=\"headingTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-template>\n </span>\n </ng-template>\n @if (item.element && !!item.description.message) {\n <span fd-list-link [navigationIndicator]=\"!!item.description.message\">\n <ng-template [ngTemplateOutlet]=\"itemIcon\"></ng-template>\n <span fd-list-content>\n <span fd-list-title>\n <a tabindex=\"0\" fd-link (click)=\"_focusElement($event, item)\">\n {{ item.fieldName }}\n </a>\n </span>\n <ng-template [ngTemplateOutlet]=\"listSubtitle\"></ng-template>\n </span>\n </span>\n } @else {\n <a fd-list-link [navigationIndicator]=\"!!item.description.message\">\n <ng-template [ngTemplateOutlet]=\"itemIcon\"></ng-template>\n <span fd-list-content>\n <span fd-list-title>{{ item.fieldName }}</span>\n <ng-template [ngTemplateOutlet]=\"listSubtitle\"></ng-template>\n </span>\n </a>\n }\n </li>\n }\n }\n </ul>\n </section>\n <section #detailsSection class=\"fd-message-view__details\">\n <div #detailsView>\n @if (currentEntry) {\n <span class=\"fd-message-view__details-title\">\n <span\n fd-object-status\n class=\"fd-message-view__icon\"\n [status]=\"currentEntry.state\"\n [glyph]=\"'message-' + currentEntry.type\"\n ></span>\n <ng-template\n [ngTemplateOutlet]=\"headingTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: currentEntry }\"\n ></ng-template>\n </span>\n @if (currentEntry.description.message) {\n <span class=\"fd-message-view__details-description\">\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: currentEntry }\"\n ></ng-template>\n </span>\n }\n }\n </div>\n </section>\n</div>\n" }]
579
+ }], ctorParameters: () => [{ type: i0.DestroyRef }, { type: i1$1.TabbableElementService }, { type: Document, decorators: [{
580
+ type: Inject,
581
+ args: [DOCUMENT]
582
+ }] }], propDecorators: { currentScreen: [{
583
+ type: Input
584
+ }], filteredErrors: [{
585
+ type: Input
586
+ }], currentEntry: [{
587
+ type: Input
588
+ }], openDetails: [{
589
+ type: Output
590
+ }], focusItem: [{
591
+ type: Output
592
+ }], closePopover: [{
593
+ type: Output
594
+ }], _listView: [{
595
+ type: ViewChild,
596
+ args: ['listView', { read: ElementRef }]
597
+ }], _detailsView: [{
598
+ type: ViewChild,
599
+ args: ['detailsView', { read: ElementRef }]
600
+ }], _listSection: [{
601
+ type: ViewChild,
602
+ args: ['listSection', { read: ElementRef }]
603
+ }], _detailsSection: [{
604
+ type: ViewChild,
605
+ args: ['detailsSection', { read: ElementRef }]
606
+ }] } });
607
+
608
+ class MessagePopoverComponent {
19
609
  constructor() {
20
- super(...arguments);
21
610
  /** Event emits when user clicks on error entry and item's element needs to be focused. */
22
611
  this.focusItem = new EventEmitter();
612
+ /** Current message popover screen. Can be `list` or `details`. */
613
+ this.currentScreen = 'list';
614
+ /** @hidden */
615
+ this._currentErrorType$ = signal('all', /* @ts-ignore */
616
+ ...(ngDevMode ? [{ debugName: "_currentErrorType$" }] : /* istanbul ignore next */ []));
617
+ /** @hidden */
618
+ this._errorTypes$ = computed(() => {
619
+ const countedErrors = this._countedErrors$();
620
+ const errorTypes = Object.keys(countedErrors);
621
+ return errorTypes.map((errorType) => ({
622
+ group: errorType,
623
+ count: countedErrors[errorType],
624
+ state: convertFormState(errorType)
625
+ }));
626
+ }, /* @ts-ignore */
627
+ ...(ngDevMode ? [{ debugName: "_errorTypes$" }] : /* istanbul ignore next */ []));
628
+ /** @hidden */
629
+ this._priorityStateItemsCount$ = computed(() => this._countedErrors$()[this._priorityFormState$()] || 0, /* @ts-ignore */
630
+ ...(ngDevMode ? [{ debugName: "_priorityStateItemsCount$" }] : /* istanbul ignore next */ []));
631
+ /** @hidden */
632
+ this._priorityFormState$ = computed(() => {
633
+ const countedErrors = this._countedErrors$();
634
+ const errorTypes = Object.keys(countedErrors);
635
+ return getFormState(errorTypes);
636
+ }, /* @ts-ignore */
637
+ ...(ngDevMode ? [{ debugName: "_priorityFormState$" }] : /* istanbul ignore next */ []));
638
+ /** @hidden */
639
+ this._priorityState$ = computed(() => convertFormStateToMessagePopoverState(this._priorityFormState$()), /* @ts-ignore */
640
+ ...(ngDevMode ? [{ debugName: "_priorityState$" }] : /* istanbul ignore next */ []));
641
+ /** @hidden */
642
+ this._filteredErrors$ = computed(() => {
643
+ const groupedErrors = this._groupedErrors$();
644
+ const errorType = this._currentErrorType$();
645
+ if (errorType === 'all') {
646
+ return groupedErrors;
647
+ }
648
+ const filteredErrors = [];
649
+ groupedErrors.forEach((group) => {
650
+ const errors = group.errors.filter((error) => error.type === errorType);
651
+ if (errors.length === 0) {
652
+ return;
653
+ }
654
+ filteredErrors.push({
655
+ group: group.group,
656
+ errors
657
+ });
658
+ });
659
+ return filteredErrors;
660
+ }, /* @ts-ignore */
661
+ ...(ngDevMode ? [{ debugName: "_filteredErrors$" }] : /* istanbul ignore next */ []));
662
+ this._groupedErrors$ = computed(() => this._wrapper$()?.errors$() || [], /* @ts-ignore */
663
+ ...(ngDevMode ? [{ debugName: "_groupedErrors$" }] : /* istanbul ignore next */ []));
664
+ this._wrapper$ = signal(null, /* @ts-ignore */
665
+ ...(ngDevMode ? [{ debugName: "_wrapper$" }] : /* istanbul ignore next */ []));
666
+ this._countedErrors$ = computed(() => countBy(flatten(Object.values(this._groupedErrors$().map((group) => group.errors))), 'type'), /* @ts-ignore */
667
+ ...(ngDevMode ? [{ debugName: "_countedErrors$" }] : /* istanbul ignore next */ []));
23
668
  }
24
669
  /** Message Popover Wrapper component. */
25
670
  set wrapper(value) {
26
671
  value?.setMessagePopover(this);
27
- this.wrapper$.set(value);
672
+ this._wrapper$.set(value);
28
673
  }
29
674
  get wrapper() {
30
- return this.wrapper$();
675
+ return this._wrapper$();
676
+ }
677
+ /** @hidden */
678
+ _showList() {
679
+ this.currentScreen = 'list';
680
+ this.currentEntry = null;
681
+ }
682
+ /** @hidden */
683
+ _showDetails(entry) {
684
+ this.currentScreen = 'details';
685
+ this.currentEntry = entry;
31
686
  }
32
687
  /** @hidden */
33
688
  _closePopover(focusLast = true) {
34
689
  this._popover.close(focusLast);
35
690
  }
36
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: MessagePopoverComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
37
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.1", type: MessagePopoverComponent, isStandalone: true, selector: "fdp-message-popover", inputs: { wrapper: "wrapper" }, outputs: { focusItem: "focusItem" }, viewQueries: [{ propertyName: "_popover", first: true, predicate: ["popover"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (_errorTypes$().length > 0) {\n <fd-popover\n #popover\n placement=\"top-start\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [disableScrollbar]=\"true\"\n >\n <fd-popover-control>\n <button\n fd-button\n type=\"button\"\n class=\"fd-message-popover__trigger fd-message-popover__trigger\"\n [ngClass]=\"'fd-message-popover__trigger--' + _priorityState$()\"\n [glyph]=\"'message-' + _priorityFormState$()\"\n [label]=\"_priorityStateItemsCount$().toString()\"\n ></button>\n </fd-popover-control>\n <div>\n <div fd-popover-body-header>\n <div fd-bar barDesign=\"header\" class=\"fd-bar--growing\">\n <div fd-bar-left>\n @if (currentScreen === 'list') {\n <fd-segmented-button\n [ngModelOptions]=\"{ standalone: true }\"\n [ngModel]=\"_currentErrorType()\"\n (ngModelChange)=\"_currentErrorType.set($event)\"\n >\n <button\n fd-button\n [label]=\"('platformMessagePopover.allErrors' | fdTranslate)()\"\n value=\"all\"\n ></button>\n @for (type of _errorTypes$(); track type) {\n <button fd-button [value]=\"type.group\">\n <span\n fd-object-status\n [status]=\"type.state\"\n [glyph]=\"'message-' + type.group\"\n ></span>\n <span class=\"fd-button__text\">{{ type.count }}</span>\n </button>\n }\n </fd-segmented-button>\n }\n @if (currentScreen === 'details') {\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [title]=\"('platformMessagePopover.backButton' | fdTranslate)()\"\n (click)=\"showList()\"\n ></button>\n }\n </div>\n <div fd-bar-right>\n <button fd-button fdType=\"transparent\" (click)=\"popover.close()\" glyph=\"decline\"></button>\n </div>\n </div>\n </div>\n <fdp-messages-list\n [currentScreen]=\"currentScreen\"\n [filteredErrors]=\"_filteredErrors$()\"\n [currentEntry]=\"currentEntry\"\n (openDetails)=\"showDetails($event)\"\n (closePopover)=\"_closePopover($event)\"\n (focusItem)=\"focusItem.emit($event)\"\n ></fdp-messages-list>\n </div>\n </fd-popover>\n}\n", styles: [".fd-message-view{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;position:relative}.fd-message-view:after,.fd-message-view:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__list{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;max-height:50vh;max-width:26rem;padding-block:0;padding-inline:0}.fd-message-view__list:after,.fd-message-view__list:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__list--hidden{opacity:0}.fd-message-view__details{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;inset:0;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:1rem;padding-inline:0;padding-inline:3.5rem 1rem;position:absolute}.fd-message-view__details:after,.fd-message-view__details:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details-title{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader5Size);font-weight:400;font-weight:var(--sapFontHeaderWeight);forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-after:1rem;display:block;margin-block-end:1rem;white-space:normal;-webkit-margin-start:0;margin-inline-start:0}.fd-message-view__details-title:after,.fd-message-view__details-title:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details-title .fd-message-view__icon{font-size:1rem;margin-block:0;margin-inline:-2rem .5rem}.fd-message-view__details-description{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:1.4;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-after:1rem;display:block;margin-block-end:1rem;white-space:normal}.fd-message-view__details-description:after,.fd-message-view__details-description:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details--visible{display:block}.fd-message-popover__trigger{--fdButtonFocusColor:var(--sapContent_ContrastFocusColor);border-width:var(--fdMessagePopover_Trigger_Border_Width);text-shadow:var(--fdButtonTextShadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical{--fdButtonColor:var(--sapButton_Critical_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Background);--fdButtonBorderColor:var(--sapButton_Critical_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--critical:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--critical:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--critical:hover{--fdButtonColor:var(--sapButton_Critical_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Hover_Background);--fdButtonBorderColor:var(--sapButton_Critical_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--critical:active{--fdButtonColor:var(--sapButton_Critical_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Active_Background);--fdButtonBorderColor:var(--sapButton_Critical_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--critical:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--critical[aria-disabled=true]{--fdButtonColor:var(--sapButton_Critical_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Background);--fdButtonBorderColor:var(--sapButton_Critical_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--negative{--fdButtonColor:var(--sapButton_Negative_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Background);--fdButtonBorderColor:var(--sapButton_Negative_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--negative:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--negative:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--negative:hover{--fdButtonColor:var(--sapButton_Negative_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Hover_Background);--fdButtonBorderColor:var(--sapButton_Negative_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--negative:active{--fdButtonColor:var(--sapButton_Negative_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Active_Background);--fdButtonBorderColor:var(--sapButton_Negative_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--negative:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--negative[aria-disabled=true]{--fdButtonColor:var(--sapButton_Negative_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Background);--fdButtonBorderColor:var(--sapButton_Negative_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--success{--fdButtonColor:var(--sapButton_Success_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Background);--fdButtonBorderColor:var(--sapButton_Success_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--success:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--success:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--success:hover{--fdButtonColor:var(--sapButton_Success_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Hover_Background);--fdButtonBorderColor:var(--sapButton_Success_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--success:active{--fdButtonColor:var(--sapButton_Success_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Active_Background);--fdButtonBorderColor:var(--sapButton_Success_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--success:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--success[aria-disabled=true]{--fdButtonColor:var(--sapButton_Success_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Background);--fdButtonBorderColor:var(--sapButton_Success_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--information{--fdButtonColor:var(--fdMessagePopover_Information_Regular_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Regular_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Regular_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Regular_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Information_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--information:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--information:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--information:hover{--fdButtonColor:var(--fdMessagePopover_Information_Hover_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Hover_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Hover_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--information:active{--fdButtonColor:var(--fdMessagePopover_Information_Active_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Active_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Active_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--information:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--information[aria-disabled=true]{--fdButtonColor:var(--fdMessagePopover_Information_Regular_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Regular_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Regular_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__view-container{border-bottom-left-radius:var(--fdPopover_Border_Radius);border-bottom-right-radius:var(--fdPopover_Border_Radius);overflow:hidden;display:block;max-height:40vh}.fd-message-popover__view-container .fd-message-view .fd-list__item:first-child{border-top-left-radius:0;border-top-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:first-child:before{border-top-left-radius:0;border-top-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:last-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:last-child:before{border-bottom-left-radius:0;border-bottom-right-radius:0}.fd-message-view__list{min-width:20rem;min-height:10rem;max-height:40vh}.fd-message-view__list .fd-link{font-size:inherit}.fd-message-view__list .fd-list__link:active,.fd-message-view__list .fd-list__link.is-active{--sapLinkColor: var(--sapList_Active_TextColor);--sapLink_Active_Color: var(--sapList_Active_TextColor)}\n/*! Bundled license information:\n\nfundamental-styles/dist/message-popover.css:\n (*!\n * Fundamental Library Styles v0.41.9\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], dependencies: [{ kind: "ngmodule", type: PopoverModule }, { kind: "component", type: i1.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "directive", type: i1.PopoverBodyHeaderDirective, selector: "[fdPopoverBodyHeader], [fd-popover-body-header]" }, { kind: "component", type: i1.PopoverComponent, selector: "fd-popover", inputs: ["config", "title", "trigger", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll", "placement", "maxWidth", "fillControlMode", "closeOnOutsideClick", "closeOnEscapeKey", "disabled", "triggers", "focusTrapped", "focusAutoCapture", "restoreFocusOnClose", "noArrow", "disableScrollbar", "appendTo", "placementContainer", "scrollStrategy", "cdkPositions", "applyOverlay", "additionalBodyClass", "additionalTriggerClass", "closeOnNavigation", "fixedPosition", "resizable", "bodyAriaLabel", "bodyRole", "bodyAriaLabelledBy", "isOpen"], outputs: ["triggerChange", "isOpenChange", "beforeOpen"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["id"], exportAs: ["fd-button"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: BarModule }, { kind: "component", type: i2.BarComponent, selector: "[fd-bar]", inputs: ["barDesign", "inPage", "inHomePage", "clear", "size", "initialSuggestionTitle", "initialSuggestionSubline", "role"] }, { kind: "directive", type: i2.BarLeftDirective, selector: "[fd-bar-left]", inputs: ["stackContentsVertically"] }, { kind: "directive", type: i2.BarRightDirective, selector: "[fd-bar-right]", inputs: ["stackContentsVertically"] }, { kind: "component", type: SegmentedButtonComponent, selector: "fd-segmented-button", inputs: ["toggle", "vertical"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["status", "statusMessage", "glyph", "glyphFont", "label", "ariaLabel", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate", "ariaRoleDescription"] }, { kind: "directive", type: InitialFocusDirective, selector: "[fdkInitialFocus]", inputs: ["fdkInitialFocus", "enabled", "focusLastElement"] }, { kind: "component", type: MessagesListComponent, selector: "fdp-messages-list", inputs: ["currentScreen", "filteredErrors", "currentEntry"], outputs: ["openDetails", "focusItem", "closePopover"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
691
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MessagePopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
692
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: MessagePopoverComponent, isStandalone: true, selector: "fdp-message-popover", inputs: { wrapper: "wrapper" }, outputs: { focusItem: "focusItem" }, viewQueries: [{ propertyName: "_popover", first: true, predicate: ["popover"], descendants: true }], ngImport: i0, template: "@if (_errorTypes$().length > 0) {\n <fd-popover\n #popover\n placement=\"top-start\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [disableScrollbar]=\"true\"\n >\n <fd-popover-control>\n <button\n fd-button\n type=\"button\"\n class=\"fd-message-popover__trigger fd-message-popover__trigger\"\n [ngClass]=\"'fd-message-popover__trigger--' + _priorityState$()\"\n [glyph]=\"'message-' + _priorityFormState$()\"\n [label]=\"_priorityStateItemsCount$().toString()\"\n ></button>\n </fd-popover-control>\n <div>\n <div fd-popover-body-header>\n <div fd-bar barDesign=\"header\" class=\"fd-bar--growing\">\n <div fd-bar-left>\n @if (currentScreen === 'list') {\n <fd-segmented-button\n [ngModel]=\"_currentErrorType$()\"\n (ngModelChange)=\"_currentErrorType$.set($event)\"\n >\n <button\n fd-button\n [label]=\"('platformMessagePopover.allErrors' | fdTranslate)()\"\n value=\"all\"\n ></button>\n @for (type of _errorTypes$(); track type) {\n <button fd-button [value]=\"type.group\">\n <span\n fd-object-status\n [status]=\"type.state\"\n [glyph]=\"'message-' + type.group\"\n ></span>\n <span class=\"fd-button__text\">{{ type.count }}</span>\n </button>\n }\n </fd-segmented-button>\n }\n @if (currentScreen === 'details') {\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [title]=\"('platformMessagePopover.backButton' | fdTranslate)()\"\n (click)=\"_showList()\"\n ></button>\n }\n </div>\n <div fd-bar-right>\n <button fd-button fdType=\"transparent\" (click)=\"popover.close()\" glyph=\"decline\"></button>\n </div>\n </div>\n </div>\n <fdp-message-view\n [currentScreen]=\"currentScreen\"\n [filteredErrors]=\"_filteredErrors$()\"\n [currentEntry]=\"currentEntry\"\n (openDetails)=\"_showDetails($event)\"\n (closePopover)=\"_closePopover($event)\"\n (focusItem)=\"focusItem.emit($event)\"\n ></fdp-message-view>\n </div>\n </fd-popover>\n}\n", styles: [".fd-message-view{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;position:relative}.fd-message-view:after,.fd-message-view:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__list{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;max-height:50vh;max-width:26rem;padding-block:0;padding-inline:0}.fd-message-view__list:after,.fd-message-view__list:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__list--hidden{opacity:0}.fd-message-view__details{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;inset:0;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:1rem;padding-inline:0;padding-inline:3.5rem 1rem;position:absolute}.fd-message-view__details:after,.fd-message-view__details:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details-title{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader5Size);font-weight:400;font-weight:var(--sapFontHeaderWeight);forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-after:1rem;display:block;margin-block-end:1rem;white-space:normal;-webkit-margin-start:0;margin-inline-start:0}.fd-message-view__details-title:after,.fd-message-view__details-title:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details-title .fd-message-view__icon{font-size:1rem;margin-block:0;margin-inline:-2rem .5rem}.fd-message-view__details-description{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:1.4;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-after:1rem;display:block;margin-block-end:1rem;white-space:normal}.fd-message-view__details-description:after,.fd-message-view__details-description:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details--visible{display:block}.fd-message-popover__trigger{--fdButtonFocusColor:var(--sapContent_ContrastFocusColor);border-width:var(--fdMessagePopover_Trigger_Border_Width);text-shadow:var(--fdButtonTextShadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical{--fdButtonColor:var(--sapButton_Critical_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Background);--fdButtonBorderColor:var(--sapButton_Critical_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--critical:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--critical:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--critical:hover{--fdButtonColor:var(--sapButton_Critical_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Hover_Background);--fdButtonBorderColor:var(--sapButton_Critical_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--critical:active{--fdButtonColor:var(--sapButton_Critical_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Active_Background);--fdButtonBorderColor:var(--sapButton_Critical_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--critical:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--critical[aria-disabled=true]{--fdButtonColor:var(--sapButton_Critical_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Background);--fdButtonBorderColor:var(--sapButton_Critical_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--negative{--fdButtonColor:var(--sapButton_Negative_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Background);--fdButtonBorderColor:var(--sapButton_Negative_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--negative:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--negative:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--negative:hover{--fdButtonColor:var(--sapButton_Negative_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Hover_Background);--fdButtonBorderColor:var(--sapButton_Negative_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--negative:active{--fdButtonColor:var(--sapButton_Negative_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Active_Background);--fdButtonBorderColor:var(--sapButton_Negative_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--negative:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--negative[aria-disabled=true]{--fdButtonColor:var(--sapButton_Negative_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Background);--fdButtonBorderColor:var(--sapButton_Negative_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--success{--fdButtonColor:var(--sapButton_Success_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Background);--fdButtonBorderColor:var(--sapButton_Success_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--success:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--success:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--success:hover{--fdButtonColor:var(--sapButton_Success_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Hover_Background);--fdButtonBorderColor:var(--sapButton_Success_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--success:active{--fdButtonColor:var(--sapButton_Success_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Active_Background);--fdButtonBorderColor:var(--sapButton_Success_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--success:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--success[aria-disabled=true]{--fdButtonColor:var(--sapButton_Success_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Background);--fdButtonBorderColor:var(--sapButton_Success_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--information{--fdButtonColor:var(--fdMessagePopover_Information_Regular_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Regular_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Regular_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Regular_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Information_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--information:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--information:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--information:hover{--fdButtonColor:var(--fdMessagePopover_Information_Hover_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Hover_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Hover_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--information:active{--fdButtonColor:var(--fdMessagePopover_Information_Active_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Active_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Active_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--information:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--information[aria-disabled=true]{--fdButtonColor:var(--fdMessagePopover_Information_Regular_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Regular_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Regular_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__view-container{border-bottom-left-radius:var(--fdPopover_Border_Radius);border-bottom-right-radius:var(--fdPopover_Border_Radius);overflow:hidden;display:block;max-height:40vh}.fd-message-popover__view-container .fd-message-view .fd-list__item:first-child{border-top-left-radius:0;border-top-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:first-child:before{border-top-left-radius:0;border-top-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:last-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:last-child:before{border-bottom-left-radius:0;border-bottom-right-radius:0}.fd-message-view__list{min-width:20rem;min-height:10rem;max-height:40vh}.fd-message-view__list .fd-link{font-size:inherit}.fd-message-view__list .fd-list__link:active,.fd-message-view__list .fd-list__link.is-active{--sapLinkColor: var(--sapList_Active_TextColor);--sapLink_Active_Color: var(--sapList_Active_TextColor)}\n/*! Bundled license information:\n\nfundamental-styles/dist/message-popover.css:\n (*!\n * Fundamental Library Styles v0.41.9\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], dependencies: [{ kind: "ngmodule", type: PopoverModule }, { kind: "component", type: i1$2.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "directive", type: i1$2.PopoverBodyHeaderDirective, selector: "[fdPopoverBodyHeader], [fd-popover-body-header]" }, { kind: "component", type: i1$2.PopoverComponent, selector: "fd-popover", inputs: ["config", "title", "trigger", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll", "placement", "maxWidth", "fillControlMode", "closeOnOutsideClick", "closeOnEscapeKey", "disabled", "triggers", "focusTrapped", "focusAutoCapture", "restoreFocusOnClose", "noArrow", "disableScrollbar", "appendTo", "placementContainer", "scrollStrategy", "cdkPositions", "applyOverlay", "additionalBodyClass", "additionalTriggerClass", "closeOnNavigation", "fixedPosition", "resizable", "bodyAriaLabel", "bodyRole", "bodyAriaLabelledBy", "isOpen"], outputs: ["triggerChange", "isOpenChange", "beforeOpen"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["id"], exportAs: ["fd-button"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: BarModule }, { kind: "component", type: i2$1.BarComponent, selector: "[fd-bar]", inputs: ["barDesign", "inPage", "inHomePage", "clear", "size", "initialSuggestionTitle", "initialSuggestionSubline", "role"] }, { kind: "directive", type: i2$1.BarLeftDirective, selector: "[fd-bar-left]", inputs: ["stackContentsVertically"] }, { kind: "directive", type: i2$1.BarRightDirective, selector: "[fd-bar-right]", inputs: ["stackContentsVertically"] }, { kind: "component", type: SegmentedButtonComponent, selector: "fd-segmented-button", inputs: ["toggle", "vertical"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["status", "statusMessage", "glyph", "glyphFont", "label", "ariaLabel", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate", "ariaRoleDescription"] }, { kind: "directive", type: InitialFocusDirective, selector: "[fdkInitialFocus]", inputs: ["fdkInitialFocus", "enabled", "focusLastElement"] }, { kind: "component", type: MessageViewComponent, selector: "fdp-message-view", inputs: ["currentScreen", "filteredErrors", "currentEntry"], outputs: ["openDetails", "focusItem", "closePopover"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
38
693
  }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: MessagePopoverComponent, decorators: [{
694
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MessagePopoverComponent, decorators: [{
40
695
  type: Component,
41
696
  args: [{ selector: 'fdp-message-popover', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
42
697
  PopoverModule,
@@ -47,16 +702,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImpor
47
702
  FormsModule,
48
703
  ObjectStatusComponent,
49
704
  InitialFocusDirective,
50
- MessagesListComponent,
705
+ MessageViewComponent,
51
706
  FdTranslatePipe
52
- ], template: "@if (_errorTypes$().length > 0) {\n <fd-popover\n #popover\n placement=\"top-start\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [disableScrollbar]=\"true\"\n >\n <fd-popover-control>\n <button\n fd-button\n type=\"button\"\n class=\"fd-message-popover__trigger fd-message-popover__trigger\"\n [ngClass]=\"'fd-message-popover__trigger--' + _priorityState$()\"\n [glyph]=\"'message-' + _priorityFormState$()\"\n [label]=\"_priorityStateItemsCount$().toString()\"\n ></button>\n </fd-popover-control>\n <div>\n <div fd-popover-body-header>\n <div fd-bar barDesign=\"header\" class=\"fd-bar--growing\">\n <div fd-bar-left>\n @if (currentScreen === 'list') {\n <fd-segmented-button\n [ngModelOptions]=\"{ standalone: true }\"\n [ngModel]=\"_currentErrorType()\"\n (ngModelChange)=\"_currentErrorType.set($event)\"\n >\n <button\n fd-button\n [label]=\"('platformMessagePopover.allErrors' | fdTranslate)()\"\n value=\"all\"\n ></button>\n @for (type of _errorTypes$(); track type) {\n <button fd-button [value]=\"type.group\">\n <span\n fd-object-status\n [status]=\"type.state\"\n [glyph]=\"'message-' + type.group\"\n ></span>\n <span class=\"fd-button__text\">{{ type.count }}</span>\n </button>\n }\n </fd-segmented-button>\n }\n @if (currentScreen === 'details') {\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [title]=\"('platformMessagePopover.backButton' | fdTranslate)()\"\n (click)=\"showList()\"\n ></button>\n }\n </div>\n <div fd-bar-right>\n <button fd-button fdType=\"transparent\" (click)=\"popover.close()\" glyph=\"decline\"></button>\n </div>\n </div>\n </div>\n <fdp-messages-list\n [currentScreen]=\"currentScreen\"\n [filteredErrors]=\"_filteredErrors$()\"\n [currentEntry]=\"currentEntry\"\n (openDetails)=\"showDetails($event)\"\n (closePopover)=\"_closePopover($event)\"\n (focusItem)=\"focusItem.emit($event)\"\n ></fdp-messages-list>\n </div>\n </fd-popover>\n}\n", styles: [".fd-message-view{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;position:relative}.fd-message-view:after,.fd-message-view:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__list{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;max-height:50vh;max-width:26rem;padding-block:0;padding-inline:0}.fd-message-view__list:after,.fd-message-view__list:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__list--hidden{opacity:0}.fd-message-view__details{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;inset:0;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:1rem;padding-inline:0;padding-inline:3.5rem 1rem;position:absolute}.fd-message-view__details:after,.fd-message-view__details:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details-title{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader5Size);font-weight:400;font-weight:var(--sapFontHeaderWeight);forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-after:1rem;display:block;margin-block-end:1rem;white-space:normal;-webkit-margin-start:0;margin-inline-start:0}.fd-message-view__details-title:after,.fd-message-view__details-title:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details-title .fd-message-view__icon{font-size:1rem;margin-block:0;margin-inline:-2rem .5rem}.fd-message-view__details-description{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:1.4;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-after:1rem;display:block;margin-block-end:1rem;white-space:normal}.fd-message-view__details-description:after,.fd-message-view__details-description:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details--visible{display:block}.fd-message-popover__trigger{--fdButtonFocusColor:var(--sapContent_ContrastFocusColor);border-width:var(--fdMessagePopover_Trigger_Border_Width);text-shadow:var(--fdButtonTextShadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical{--fdButtonColor:var(--sapButton_Critical_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Background);--fdButtonBorderColor:var(--sapButton_Critical_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--critical:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--critical:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--critical:hover{--fdButtonColor:var(--sapButton_Critical_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Hover_Background);--fdButtonBorderColor:var(--sapButton_Critical_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--critical:active{--fdButtonColor:var(--sapButton_Critical_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Active_Background);--fdButtonBorderColor:var(--sapButton_Critical_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--critical:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--critical[aria-disabled=true]{--fdButtonColor:var(--sapButton_Critical_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Background);--fdButtonBorderColor:var(--sapButton_Critical_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--negative{--fdButtonColor:var(--sapButton_Negative_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Background);--fdButtonBorderColor:var(--sapButton_Negative_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--negative:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--negative:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--negative:hover{--fdButtonColor:var(--sapButton_Negative_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Hover_Background);--fdButtonBorderColor:var(--sapButton_Negative_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--negative:active{--fdButtonColor:var(--sapButton_Negative_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Active_Background);--fdButtonBorderColor:var(--sapButton_Negative_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--negative:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--negative[aria-disabled=true]{--fdButtonColor:var(--sapButton_Negative_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Background);--fdButtonBorderColor:var(--sapButton_Negative_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--success{--fdButtonColor:var(--sapButton_Success_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Background);--fdButtonBorderColor:var(--sapButton_Success_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--success:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--success:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--success:hover{--fdButtonColor:var(--sapButton_Success_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Hover_Background);--fdButtonBorderColor:var(--sapButton_Success_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--success:active{--fdButtonColor:var(--sapButton_Success_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Active_Background);--fdButtonBorderColor:var(--sapButton_Success_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--success:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--success[aria-disabled=true]{--fdButtonColor:var(--sapButton_Success_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Background);--fdButtonBorderColor:var(--sapButton_Success_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--information{--fdButtonColor:var(--fdMessagePopover_Information_Regular_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Regular_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Regular_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Regular_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Information_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--information:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--information:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--information:hover{--fdButtonColor:var(--fdMessagePopover_Information_Hover_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Hover_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Hover_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--information:active{--fdButtonColor:var(--fdMessagePopover_Information_Active_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Active_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Active_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--information:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--information[aria-disabled=true]{--fdButtonColor:var(--fdMessagePopover_Information_Regular_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Regular_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Regular_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__view-container{border-bottom-left-radius:var(--fdPopover_Border_Radius);border-bottom-right-radius:var(--fdPopover_Border_Radius);overflow:hidden;display:block;max-height:40vh}.fd-message-popover__view-container .fd-message-view .fd-list__item:first-child{border-top-left-radius:0;border-top-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:first-child:before{border-top-left-radius:0;border-top-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:last-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:last-child:before{border-bottom-left-radius:0;border-bottom-right-radius:0}.fd-message-view__list{min-width:20rem;min-height:10rem;max-height:40vh}.fd-message-view__list .fd-link{font-size:inherit}.fd-message-view__list .fd-list__link:active,.fd-message-view__list .fd-list__link.is-active{--sapLinkColor: var(--sapList_Active_TextColor);--sapLink_Active_Color: var(--sapList_Active_TextColor)}\n/*! Bundled license information:\n\nfundamental-styles/dist/message-popover.css:\n (*!\n * Fundamental Library Styles v0.41.9\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
53
- }], propDecorators: { focusItem: [{
54
- type: Output
55
- }], _popover: [{
707
+ ], template: "@if (_errorTypes$().length > 0) {\n <fd-popover\n #popover\n placement=\"top-start\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [disableScrollbar]=\"true\"\n >\n <fd-popover-control>\n <button\n fd-button\n type=\"button\"\n class=\"fd-message-popover__trigger fd-message-popover__trigger\"\n [ngClass]=\"'fd-message-popover__trigger--' + _priorityState$()\"\n [glyph]=\"'message-' + _priorityFormState$()\"\n [label]=\"_priorityStateItemsCount$().toString()\"\n ></button>\n </fd-popover-control>\n <div>\n <div fd-popover-body-header>\n <div fd-bar barDesign=\"header\" class=\"fd-bar--growing\">\n <div fd-bar-left>\n @if (currentScreen === 'list') {\n <fd-segmented-button\n [ngModel]=\"_currentErrorType$()\"\n (ngModelChange)=\"_currentErrorType$.set($event)\"\n >\n <button\n fd-button\n [label]=\"('platformMessagePopover.allErrors' | fdTranslate)()\"\n value=\"all\"\n ></button>\n @for (type of _errorTypes$(); track type) {\n <button fd-button [value]=\"type.group\">\n <span\n fd-object-status\n [status]=\"type.state\"\n [glyph]=\"'message-' + type.group\"\n ></span>\n <span class=\"fd-button__text\">{{ type.count }}</span>\n </button>\n }\n </fd-segmented-button>\n }\n @if (currentScreen === 'details') {\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [title]=\"('platformMessagePopover.backButton' | fdTranslate)()\"\n (click)=\"_showList()\"\n ></button>\n }\n </div>\n <div fd-bar-right>\n <button fd-button fdType=\"transparent\" (click)=\"popover.close()\" glyph=\"decline\"></button>\n </div>\n </div>\n </div>\n <fdp-message-view\n [currentScreen]=\"currentScreen\"\n [filteredErrors]=\"_filteredErrors$()\"\n [currentEntry]=\"currentEntry\"\n (openDetails)=\"_showDetails($event)\"\n (closePopover)=\"_closePopover($event)\"\n (focusItem)=\"focusItem.emit($event)\"\n ></fdp-message-view>\n </div>\n </fd-popover>\n}\n", styles: [".fd-message-view{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;position:relative}.fd-message-view:after,.fd-message-view:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__list{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;max-height:50vh;max-width:26rem;padding-block:0;padding-inline:0}.fd-message-view__list:after,.fd-message-view__list:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__list--hidden{opacity:0}.fd-message-view__details{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;inset:0;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:1rem;padding-inline:0;padding-inline:3.5rem 1rem;position:absolute}.fd-message-view__details:after,.fd-message-view__details:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details-title{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader5Size);font-weight:400;font-weight:var(--sapFontHeaderWeight);forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-after:1rem;display:block;margin-block-end:1rem;white-space:normal;-webkit-margin-start:0;margin-inline-start:0}.fd-message-view__details-title:after,.fd-message-view__details-title:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details-title .fd-message-view__icon{font-size:1rem;margin-block:0;margin-inline:-2rem .5rem}.fd-message-view__details-description{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:1.4;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-after:1rem;display:block;margin-block-end:1rem;white-space:normal}.fd-message-view__details-description:after,.fd-message-view__details-description:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-message-view__details--visible{display:block}.fd-message-popover__trigger{--fdButtonFocusColor:var(--sapContent_ContrastFocusColor);border-width:var(--fdMessagePopover_Trigger_Border_Width);text-shadow:var(--fdButtonTextShadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical{--fdButtonColor:var(--sapButton_Critical_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Background);--fdButtonBorderColor:var(--sapButton_Critical_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--critical:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--critical:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--critical:hover{--fdButtonColor:var(--sapButton_Critical_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Hover_Background);--fdButtonBorderColor:var(--sapButton_Critical_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--critical:active{--fdButtonColor:var(--sapButton_Critical_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Active_Background);--fdButtonBorderColor:var(--sapButton_Critical_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--critical.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--critical:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--critical[aria-disabled=true]{--fdButtonColor:var(--sapButton_Critical_TextColor);--fdButtonBackgroundColor:var(--sapButton_Critical_Background);--fdButtonBorderColor:var(--sapButton_Critical_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Critical_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--negative{--fdButtonColor:var(--sapButton_Negative_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Background);--fdButtonBorderColor:var(--sapButton_Negative_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--negative:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--negative:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--negative:hover{--fdButtonColor:var(--sapButton_Negative_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Hover_Background);--fdButtonBorderColor:var(--sapButton_Negative_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--negative:active{--fdButtonColor:var(--sapButton_Negative_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Active_Background);--fdButtonBorderColor:var(--sapButton_Negative_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--negative.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--negative:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--negative[aria-disabled=true]{--fdButtonColor:var(--sapButton_Negative_TextColor);--fdButtonBackgroundColor:var(--sapButton_Negative_Background);--fdButtonBorderColor:var(--sapButton_Negative_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Negative_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--success{--fdButtonColor:var(--sapButton_Success_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Background);--fdButtonBorderColor:var(--sapButton_Success_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Regular_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--success:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--success:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--success:hover{--fdButtonColor:var(--sapButton_Success_Hover_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Hover_Background);--fdButtonBorderColor:var(--sapButton_Success_Hover_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--success:active{--fdButtonColor:var(--sapButton_Success_Active_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Active_Background);--fdButtonBorderColor:var(--sapButton_Success_Active_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--success.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--success:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--success[aria-disabled=true]{--fdButtonColor:var(--sapButton_Success_TextColor);--fdButtonBackgroundColor:var(--sapButton_Success_Background);--fdButtonBorderColor:var(--sapButton_Success_BorderColor);--fdButtonTextShadow:var(--fdMessagePopover_Success_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__trigger.fd-message-popover__trigger--information{--fdButtonColor:var(--fdMessagePopover_Information_Regular_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Regular_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Regular_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Regular_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Information_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-focus,.fd-message-popover__trigger.fd-message-popover__trigger--information:focus{z-index:5}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-focus:after,.fd-message-popover__trigger.fd-message-popover__trigger--information:focus:after{border-color:var(--fdButtonFocusColor)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-hover,.fd-message-popover__trigger.fd-message-popover__trigger--information:hover{--fdButtonColor:var(--fdMessagePopover_Information_Hover_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Hover_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Hover_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Hover_Text_Shadow)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-active,.fd-message-popover__trigger.fd-message-popover__trigger--information:active{--fdButtonColor:var(--fdMessagePopover_Information_Active_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Active_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Active_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Active_Text_Shadow);--fdButtonFocusColor:var(--fdMessagePopover_Active_Focus_Outline_Color)}.fd-message-popover__trigger.fd-message-popover__trigger--information.is-disabled,.fd-message-popover__trigger.fd-message-popover__trigger--information:disabled,.fd-message-popover__trigger.fd-message-popover__trigger--information[aria-disabled=true]{--fdButtonColor:var(--fdMessagePopover_Information_Regular_Color);--fdButtonBackgroundColor:var(--fdMessagePopover_Information_Regular_Background_Color);--fdButtonBorderColor:var(--fdMessagePopover_Information_Regular_Border_Color);--fdButtonTextShadow:var(--fdMessagePopover_Information_Regular_Text_Shadow);opacity:var(--sapContent_DisabledOpacity);pointer-events:none}.fd-message-popover__view-container{border-bottom-left-radius:var(--fdPopover_Border_Radius);border-bottom-right-radius:var(--fdPopover_Border_Radius);overflow:hidden;display:block;max-height:40vh}.fd-message-popover__view-container .fd-message-view .fd-list__item:first-child{border-top-left-radius:0;border-top-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:first-child:before{border-top-left-radius:0;border-top-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:last-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.fd-message-popover__view-container .fd-message-view .fd-list__item:last-child:before{border-bottom-left-radius:0;border-bottom-right-radius:0}.fd-message-view__list{min-width:20rem;min-height:10rem;max-height:40vh}.fd-message-view__list .fd-link{font-size:inherit}.fd-message-view__list .fd-list__link:active,.fd-message-view__list .fd-list__link.is-active{--sapLinkColor: var(--sapList_Active_TextColor);--sapLink_Active_Color: var(--sapList_Active_TextColor)}\n/*! Bundled license information:\n\nfundamental-styles/dist/message-popover.css:\n (*!\n * Fundamental Library Styles v0.41.9\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
708
+ }], propDecorators: { _popover: [{
56
709
  type: ViewChild,
57
710
  args: ['popover']
58
711
  }], wrapper: [{
59
712
  type: Input
713
+ }], focusItem: [{
714
+ type: Output
60
715
  }] } });
61
716
 
62
717
  /**
@@ -90,36 +745,35 @@ class PlatformMessagePopoverModule {
90
745
  ]
91
746
  };
92
747
  }
93
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: PlatformMessagePopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
94
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.2.1", ngImport: i0, type: PlatformMessagePopoverModule, imports: [MessagePopoverComponent,
748
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformMessagePopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
749
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformMessagePopoverModule, imports: [MessagePopoverComponent,
95
750
  MessagePopoverFormWrapperComponent,
96
- MessagesListComponent,
751
+ MessageViewComponent,
97
752
  MessagePopoverFormItemDirective], exports: [MessagePopoverComponent,
98
753
  MessagePopoverFormWrapperComponent,
99
- MessagesListComponent,
754
+ MessageViewComponent,
100
755
  MessagePopoverFormItemDirective] }); }
101
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: PlatformMessagePopoverModule, providers: [
756
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformMessagePopoverModule, providers: [
102
757
  {
103
758
  provide: FDP_MESSAGE_POPOVER_CONFIG,
104
759
  useValue: FDP_MESSAGE_POPOVER_DEFAULT_CONFIG
105
760
  }
106
761
  ], imports: [MessagePopoverComponent,
107
- MessagePopoverFormWrapperComponent,
108
- MessagesListComponent] }); }
762
+ MessageViewComponent] }); }
109
763
  }
110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: PlatformMessagePopoverModule, decorators: [{
764
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformMessagePopoverModule, decorators: [{
111
765
  type: NgModule,
112
766
  args: [{
113
767
  imports: [
114
768
  MessagePopoverComponent,
115
769
  MessagePopoverFormWrapperComponent,
116
- MessagesListComponent,
770
+ MessageViewComponent,
117
771
  MessagePopoverFormItemDirective
118
772
  ],
119
773
  exports: [
120
774
  MessagePopoverComponent,
121
775
  MessagePopoverFormWrapperComponent,
122
- MessagesListComponent,
776
+ MessageViewComponent,
123
777
  MessagePopoverFormItemDirective
124
778
  ],
125
779
  providers: [
@@ -135,5 +789,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImpor
135
789
  * Generated bundle index. Do not edit.
136
790
  */
137
791
 
138
- export { MessagePopoverComponent, PlatformMessagePopoverModule };
792
+ export { FDP_MESSAGE_POPOVER_CONFIG, FDP_MESSAGE_POPOVER_DEFAULT_CONFIG, MessagePopoverComponent, MessagePopoverFormItemDirective, MessagePopoverFormWrapperComponent, MessageViewComponent, PlatformMessagePopoverModule, convertFormState, convertFormStateToMessagePopoverState };
139
793
  //# sourceMappingURL=fundamental-ngx-platform-message-popover.mjs.map