@fundamental-ngx/ui5-webcomponents-fiori 0.58.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4620 @@
1
+ export { default as FCLLayout } from '@ui5/webcomponents-fiori/dist/types/FCLLayout.js';
2
+ export { default as IllustrationMessageDesign } from '@ui5/webcomponents-fiori/dist/types/IllustrationMessageDesign.js';
3
+ export { default as IllustrationMessageType } from '@ui5/webcomponents-fiori/dist/types/IllustrationMessageType.js';
4
+ export { default as MediaGalleryItemLayout } from '@ui5/webcomponents-fiori/dist/types/MediaGalleryItemLayout.js';
5
+ export { default as MediaGalleryLayout } from '@ui5/webcomponents-fiori/dist/types/MediaGalleryLayout.js';
6
+ export { default as MediaGalleryMenuHorizontalAlign } from '@ui5/webcomponents-fiori/dist/types/MediaGalleryMenuHorizontalAlign.js';
7
+ export { default as MediaGalleryMenuVerticalAlign } from '@ui5/webcomponents-fiori/dist/types/MediaGalleryMenuVerticalAlign.js';
8
+ export { default as NavigationLayoutMode } from '@ui5/webcomponents-fiori/dist/types/NavigationLayoutMode.js';
9
+ export { default as NotificationListItemImportance } from '@ui5/webcomponents-fiori/dist/types/NotificationListItemImportance.js';
10
+ export { default as PageBackgroundDesign } from '@ui5/webcomponents-fiori/dist/types/PageBackgroundDesign.js';
11
+ export { default as SearchMode } from '@ui5/webcomponents-fiori/dist/types/SearchMode.js';
12
+ export { default as SideContentFallDown } from '@ui5/webcomponents-fiori/dist/types/SideContentFallDown.js';
13
+ export { default as SideContentPosition } from '@ui5/webcomponents-fiori/dist/types/SideContentPosition.js';
14
+ export { default as SideContentVisibility } from '@ui5/webcomponents-fiori/dist/types/SideContentVisibility.js';
15
+ export { default as SideNavigationItemDesign } from '@ui5/webcomponents-fiori/dist/types/SideNavigationItemDesign.js';
16
+ export { default as TimelineGrowingMode } from '@ui5/webcomponents-fiori/dist/types/TimelineGrowingMode.js';
17
+ export { default as TimelineLayout } from '@ui5/webcomponents-fiori/dist/types/TimelineLayout.js';
18
+ export { default as UploadCollectionSelectionMode } from '@ui5/webcomponents-fiori/dist/types/UploadCollectionSelectionMode.js';
19
+ export { default as UploadState } from '@ui5/webcomponents-fiori/dist/types/UploadState.js';
20
+ export { default as ViewSettingsDialogMode } from '@ui5/webcomponents-fiori/dist/types/ViewSettingsDialogMode.js';
21
+ export { default as WizardContentLayout } from '@ui5/webcomponents-fiori/dist/types/WizardContentLayout.js';
22
+ import * as i0 from '@angular/core';
23
+ import { inject, ElementRef, ChangeDetectorRef, forwardRef, Directive, input, booleanAttribute, output, Injector, runInInjectionContext, effect, ChangeDetectionStrategy, Component, computed, signal, Injectable } from '@angular/core';
24
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
25
+ import '@ui5/webcomponents-fiori/dist/BarcodeScannerDialog.js';
26
+ import '@ui5/webcomponents-fiori/dist/DynamicPage.js';
27
+ import '@ui5/webcomponents-fiori/dist/DynamicPageHeader.js';
28
+ import '@ui5/webcomponents-fiori/dist/DynamicPageTitle.js';
29
+ import '@ui5/webcomponents-fiori/dist/DynamicSideContent.js';
30
+ import '@ui5/webcomponents-fiori/dist/FilterItem.js';
31
+ import '@ui5/webcomponents-fiori/dist/FilterItemOption.js';
32
+ import '@ui5/webcomponents-fiori/dist/FlexibleColumnLayout.js';
33
+ import '@ui5/webcomponents-fiori/dist/GroupItem.js';
34
+ import '@ui5/webcomponents-fiori/dist/IllustratedMessage.js';
35
+ import '@ui5/webcomponents-fiori/dist/MediaGallery.js';
36
+ import '@ui5/webcomponents-fiori/dist/MediaGalleryItem.js';
37
+ import '@ui5/webcomponents-fiori/dist/NavigationLayout.js';
38
+ import '@ui5/webcomponents-fiori/dist/NotificationList.js';
39
+ import '@ui5/webcomponents-fiori/dist/NotificationListGroupItem.js';
40
+ import '@ui5/webcomponents-fiori/dist/NotificationListItem.js';
41
+ import '@ui5/webcomponents-fiori/dist/Page.js';
42
+ import '@ui5/webcomponents-fiori/dist/ProductSwitch.js';
43
+ import '@ui5/webcomponents-fiori/dist/ProductSwitchItem.js';
44
+ import '@ui5/webcomponents-fiori/dist/Search.js';
45
+ import '@ui5/webcomponents-fiori/dist/SearchItem.js';
46
+ import '@ui5/webcomponents-fiori/dist/SearchItemGroup.js';
47
+ import '@ui5/webcomponents-fiori/dist/SearchItemShowMore.js';
48
+ import '@ui5/webcomponents-fiori/dist/SearchMessageArea.js';
49
+ import '@ui5/webcomponents-fiori/dist/SearchScope.js';
50
+ import '@ui5/webcomponents-fiori/dist/ShellBar.js';
51
+ import '@ui5/webcomponents-fiori/dist/ShellBarBranding.js';
52
+ import '@ui5/webcomponents-fiori/dist/ShellBarItem.js';
53
+ import '@ui5/webcomponents-fiori/dist/ShellBarSearch.js';
54
+ import '@ui5/webcomponents-fiori/dist/ShellBarSpacer.js';
55
+ import '@ui5/webcomponents-fiori/dist/SideNavigation.js';
56
+ import '@ui5/webcomponents-fiori/dist/SideNavigationGroup.js';
57
+ import '@ui5/webcomponents-fiori/dist/SideNavigationItem.js';
58
+ import '@ui5/webcomponents-fiori/dist/SideNavigationSubItem.js';
59
+ import '@ui5/webcomponents-fiori/dist/SortItem.js';
60
+ import '@ui5/webcomponents-fiori/dist/Timeline.js';
61
+ import '@ui5/webcomponents-fiori/dist/TimelineGroupItem.js';
62
+ import '@ui5/webcomponents-fiori/dist/TimelineItem.js';
63
+ import '@ui5/webcomponents-fiori/dist/UploadCollection.js';
64
+ import '@ui5/webcomponents-fiori/dist/UploadCollectionItem.js';
65
+ import '@ui5/webcomponents-fiori/dist/UserMenu.js';
66
+ import '@ui5/webcomponents-fiori/dist/UserMenuAccount.js';
67
+ import '@ui5/webcomponents-fiori/dist/UserMenuItem.js';
68
+ import '@ui5/webcomponents-fiori/dist/UserMenuItemGroup.js';
69
+ import '@ui5/webcomponents-fiori/dist/UserSettingsDialog.js';
70
+ import '@ui5/webcomponents-fiori/dist/UserSettingsItem.js';
71
+ import '@ui5/webcomponents-fiori/dist/UserSettingsView.js';
72
+ import '@ui5/webcomponents-fiori/dist/ViewSettingsDialog.js';
73
+ import '@ui5/webcomponents-fiori/dist/Wizard.js';
74
+ import '@ui5/webcomponents-fiori/dist/WizardStep.js';
75
+ import { WebcomponentsThemingProvider } from '@fundamental-ngx/ui5-webcomponents-base/theming';
76
+
77
+ class GenericControlValueAccessor {
78
+ constructor() {
79
+ this.elementRef = inject(ElementRef);
80
+ this.cdr = inject(ChangeDetectorRef);
81
+ this._value = null;
82
+ this._initialized = false;
83
+ this.setDisabledState = (isDisabled) => {
84
+ const element = this.elementRef.nativeElement;
85
+ if (element && this._initialized) {
86
+ element.disabled = isDisabled;
87
+ // Manually trigger change detection for zoneless compatibility
88
+ this.cdr.markForCheck();
89
+ }
90
+ };
91
+ }
92
+ ngAfterViewInit() {
93
+ // Initialize after the UI5 web component is ready
94
+ // Use requestAnimationFrame for zoneless compatibility instead of setTimeout
95
+ requestAnimationFrame(() => {
96
+ this.initializeComponent();
97
+ });
98
+ }
99
+ registerOnChange(fn) {
100
+ this.onChange = fn;
101
+ }
102
+ registerOnTouched(fn) {
103
+ this.onTouched = fn;
104
+ }
105
+ writeValue(val) {
106
+ this._value = val;
107
+ if (this._initialized) {
108
+ this.updateElementValue(val);
109
+ }
110
+ }
111
+ initializeComponent() {
112
+ const element = this.elementRef.nativeElement;
113
+ this._initialized = true;
114
+ // Set up event listeners on the UI5 web component
115
+ if (element && element.addEventListener) {
116
+ element.addEventListener('input', (e) => {
117
+ if (this.onChange) {
118
+ this.onChange(e.target.value);
119
+ // Manually trigger change detection for zoneless compatibility
120
+ this.cdr.markForCheck();
121
+ }
122
+ });
123
+ element.addEventListener('change', (e) => {
124
+ if (this.onChange) {
125
+ this.onChange(e.target.value);
126
+ // Manually trigger change detection for zoneless compatibility
127
+ this.cdr.markForCheck();
128
+ }
129
+ });
130
+ element.addEventListener('focusout', () => {
131
+ if (this.onTouched) {
132
+ this.onTouched();
133
+ // Manually trigger change detection for zoneless compatibility
134
+ this.cdr.markForCheck();
135
+ }
136
+ });
137
+ }
138
+ // Set initial value if we have one pending
139
+ if (this._value !== null) {
140
+ this.updateElementValue(this._value);
141
+ }
142
+ }
143
+ updateElementValue(value) {
144
+ const element = this.elementRef.nativeElement;
145
+ if (element && this._initialized) {
146
+ element.value = value || '';
147
+ // Manually trigger change detection for zoneless compatibility
148
+ this.cdr.markForCheck();
149
+ }
150
+ }
151
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GenericControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
152
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.4", type: GenericControlValueAccessor, isStandalone: true, selector: "[noop]", providers: [
153
+ {
154
+ provide: NG_VALUE_ACCESSOR,
155
+ useExisting: forwardRef(() => GenericControlValueAccessor),
156
+ multi: true
157
+ }
158
+ ], ngImport: i0 }); }
159
+ }
160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GenericControlValueAccessor, decorators: [{
161
+ type: Directive,
162
+ args: [{
163
+ selector: '[noop]',
164
+ standalone: true,
165
+ providers: [
166
+ {
167
+ provide: NG_VALUE_ACCESSOR,
168
+ useExisting: forwardRef(() => GenericControlValueAccessor),
169
+ multi: true
170
+ }
171
+ ]
172
+ }]
173
+ }] });
174
+
175
+ class BarcodeScannerDialog {
176
+ constructor() {
177
+ /**
178
+ * Indicates whether the dialog is open.
179
+ */
180
+ this.open = input(false, ...(ngDevMode ? [{ debugName: "open", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
181
+ /**
182
+ * Fired when the user closes the component.
183
+ */
184
+ this.ui5Close = output();
185
+ /**
186
+ * Fires when the scan is completed successfuuly.
187
+ */
188
+ this.ui5ScanSuccess = output();
189
+ /**
190
+ * Fires when the scan fails with error.
191
+ */
192
+ this.ui5ScanError = output();
193
+ this.elementRef = inject(ElementRef);
194
+ this.injector = inject(Injector);
195
+ }
196
+ get element() {
197
+ return this.elementRef.nativeElement;
198
+ }
199
+ ngAfterViewInit() {
200
+ const wcElement = this.element;
201
+ const inputsToSync = [
202
+ 'open',
203
+ ];
204
+ // Synchronize inputs (properties)
205
+ for (const inputName of inputsToSync) {
206
+ // Find the corresponding camelCase signal property on the Angular component
207
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
208
+ // Use the Injector to run the effect in the correct context
209
+ if (this[signalName] && typeof this[signalName] === 'function') {
210
+ runInInjectionContext(this.injector, () => {
211
+ effect(() => {
212
+ // Read the signal value
213
+ const value = this[signalName]();
214
+ if (wcElement) {
215
+ // Write the value to the Web Component's property
216
+ wcElement[inputName] = value;
217
+ }
218
+ });
219
+ });
220
+ }
221
+ }
222
+ const outputsToSync = [
223
+ 'ui5Close',
224
+ 'ui5ScanSuccess',
225
+ 'ui5ScanError',
226
+ ];
227
+ // Synchronize outputs (events)
228
+ for (const outputName of outputsToSync) {
229
+ // Map Angular output name to UI5 web component event name
230
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
231
+ // Ensure the output property exists and has an emit function before adding listener
232
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
233
+ // Cast the listener to the correct type to satisfy TypeScript
234
+ wcElement.addEventListener(eventName, (e) => {
235
+ this[outputName].emit(e);
236
+ });
237
+ }
238
+ }
239
+ }
240
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: BarcodeScannerDialog, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
241
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: BarcodeScannerDialog, isStandalone: true, selector: "ui5-barcode-scanner-dialog, [ui5-barcode-scanner-dialog]", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Close: "ui5Close", ui5ScanSuccess: "ui5ScanSuccess", ui5ScanError: "ui5ScanError" }, exportAs: ["ui5BarcodeScannerDialog"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
242
+ }
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: BarcodeScannerDialog, decorators: [{
244
+ type: Component,
245
+ args: [{
246
+ standalone: true,
247
+ selector: 'ui5-barcode-scanner-dialog, [ui5-barcode-scanner-dialog]',
248
+ template: '<ng-content></ng-content>',
249
+ exportAs: 'ui5BarcodeScannerDialog',
250
+ changeDetection: ChangeDetectionStrategy.OnPush,
251
+ }]
252
+ }] });
253
+
254
+ class DynamicPage {
255
+ constructor() {
256
+ /**
257
+ * Defines if the pin button is hidden.
258
+ */
259
+ this.hidePinButton = input(false, ...(ngDevMode ? [{ debugName: "hidePinButton", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
260
+ /**
261
+ * Defines if the header is pinned.
262
+ */
263
+ this.headerPinned = input(false, ...(ngDevMode ? [{ debugName: "headerPinned", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
264
+ /**
265
+ * Defines if the footer is shown.
266
+ */
267
+ this.showFooter = input(false, ...(ngDevMode ? [{ debugName: "showFooter", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
268
+ /**
269
+ * Defines if the header is snapped.
270
+ */
271
+ this.headerSnapped = input(false, ...(ngDevMode ? [{ debugName: "headerSnapped", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
272
+ /**
273
+ * Fired when the pin header button is toggled.
274
+ */
275
+ this.ui5PinButtonToggle = output();
276
+ /**
277
+ * Fired when the expand/collapse area of the title is toggled.
278
+ */
279
+ this.ui5TitleToggle = output();
280
+ this.elementRef = inject(ElementRef);
281
+ this.injector = inject(Injector);
282
+ }
283
+ get element() {
284
+ return this.elementRef.nativeElement;
285
+ }
286
+ ngAfterViewInit() {
287
+ const wcElement = this.element;
288
+ const inputsToSync = [
289
+ 'hidePinButton',
290
+ 'headerPinned',
291
+ 'showFooter',
292
+ 'headerSnapped',
293
+ ];
294
+ // Synchronize inputs (properties)
295
+ for (const inputName of inputsToSync) {
296
+ // Find the corresponding camelCase signal property on the Angular component
297
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
298
+ // Use the Injector to run the effect in the correct context
299
+ if (this[signalName] && typeof this[signalName] === 'function') {
300
+ runInInjectionContext(this.injector, () => {
301
+ effect(() => {
302
+ // Read the signal value
303
+ const value = this[signalName]();
304
+ if (wcElement) {
305
+ // Write the value to the Web Component's property
306
+ wcElement[inputName] = value;
307
+ }
308
+ });
309
+ });
310
+ }
311
+ }
312
+ const outputsToSync = [
313
+ 'ui5PinButtonToggle',
314
+ 'ui5TitleToggle',
315
+ ];
316
+ // Synchronize outputs (events)
317
+ for (const outputName of outputsToSync) {
318
+ // Map Angular output name to UI5 web component event name
319
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
320
+ // Ensure the output property exists and has an emit function before adding listener
321
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
322
+ // Cast the listener to the correct type to satisfy TypeScript
323
+ wcElement.addEventListener(eventName, (e) => {
324
+ this[outputName].emit(e);
325
+ });
326
+ }
327
+ }
328
+ }
329
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: DynamicPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
330
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: DynamicPage, isStandalone: true, selector: "ui5-dynamic-page, [ui5-dynamic-page]", inputs: { hidePinButton: { classPropertyName: "hidePinButton", publicName: "hidePinButton", isSignal: true, isRequired: false, transformFunction: null }, headerPinned: { classPropertyName: "headerPinned", publicName: "headerPinned", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, headerSnapped: { classPropertyName: "headerSnapped", publicName: "headerSnapped", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5PinButtonToggle: "ui5PinButtonToggle", ui5TitleToggle: "ui5TitleToggle" }, exportAs: ["ui5DynamicPage"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
331
+ }
332
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: DynamicPage, decorators: [{
333
+ type: Component,
334
+ args: [{
335
+ standalone: true,
336
+ selector: 'ui5-dynamic-page, [ui5-dynamic-page]',
337
+ template: '<ng-content></ng-content>',
338
+ exportAs: 'ui5DynamicPage',
339
+ changeDetection: ChangeDetectionStrategy.OnPush,
340
+ }]
341
+ }] });
342
+
343
+ class DynamicPageHeader {
344
+ constructor() {
345
+ // className is now passed
346
+ this.elementRef = inject(ElementRef);
347
+ this.injector = inject(Injector);
348
+ }
349
+ get element() {
350
+ return this.elementRef.nativeElement;
351
+ }
352
+ ngAfterViewInit() {
353
+ const wcElement = this.element;
354
+ }
355
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: DynamicPageHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
356
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: DynamicPageHeader, isStandalone: true, selector: "ui5-dynamic-page-header, [ui5-dynamic-page-header]", exportAs: ["ui5DynamicPageHeader"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
357
+ }
358
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: DynamicPageHeader, decorators: [{
359
+ type: Component,
360
+ args: [{
361
+ standalone: true,
362
+ selector: 'ui5-dynamic-page-header, [ui5-dynamic-page-header]',
363
+ template: '<ng-content></ng-content>',
364
+ exportAs: 'ui5DynamicPageHeader',
365
+ changeDetection: ChangeDetectionStrategy.OnPush,
366
+ }]
367
+ }] });
368
+
369
+ class DynamicPageTitle {
370
+ constructor() {
371
+ // className is now passed
372
+ this.elementRef = inject(ElementRef);
373
+ this.injector = inject(Injector);
374
+ }
375
+ get element() {
376
+ return this.elementRef.nativeElement;
377
+ }
378
+ ngAfterViewInit() {
379
+ const wcElement = this.element;
380
+ }
381
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: DynamicPageTitle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
382
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: DynamicPageTitle, isStandalone: true, selector: "ui5-dynamic-page-title, [ui5-dynamic-page-title]", exportAs: ["ui5DynamicPageTitle"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
383
+ }
384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: DynamicPageTitle, decorators: [{
385
+ type: Component,
386
+ args: [{
387
+ standalone: true,
388
+ selector: 'ui5-dynamic-page-title, [ui5-dynamic-page-title]',
389
+ template: '<ng-content></ng-content>',
390
+ exportAs: 'ui5DynamicPageTitle',
391
+ changeDetection: ChangeDetectionStrategy.OnPush,
392
+ }]
393
+ }] });
394
+
395
+ class DynamicSideContent {
396
+ constructor() {
397
+ /**
398
+ * Defines the visibility of the main content.
399
+ */
400
+ this.hideMainContent = input(false, ...(ngDevMode ? [{ debugName: "hideMainContent", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
401
+ /**
402
+ * Defines the visibility of the side content.
403
+ */
404
+ this.hideSideContent = input(false, ...(ngDevMode ? [{ debugName: "hideSideContent", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
405
+ /**
406
+ * Defines whether the side content is positioned before the main content (left side
407
+ in LTR mode), or after the the main content (right side in LTR mode).
408
+ */
409
+ this.sideContentPosition = input("End", ...(ngDevMode ? [{ debugName: "sideContentPosition" }] : []));
410
+ /**
411
+ * Defines on which breakpoints the side content is visible.
412
+ */
413
+ this.sideContentVisibility = input("ShowAboveS", ...(ngDevMode ? [{ debugName: "sideContentVisibility" }] : []));
414
+ /**
415
+ * Defines on which breakpoints the side content falls down below the main content.
416
+ */
417
+ this.sideContentFallDown = input("OnMinimumWidth", ...(ngDevMode ? [{ debugName: "sideContentFallDown" }] : []));
418
+ /**
419
+ * Defines whether the component is in equal split mode. In this mode, the side and
420
+ the main content take 50:50 percent of the container on all screen sizes
421
+ except for phone, where the main and side contents are switching visibility
422
+ using the toggle method.
423
+ */
424
+ this.equalSplit = input(false, ...(ngDevMode ? [{ debugName: "equalSplit", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
425
+ /**
426
+ * Defines additional accessibility attributes on different areas of the component.
427
+
428
+ The accessibilityAttributes object has the following fields:
429
+
430
+ - **mainContent**: `mainContent.ariaLabel` defines the aria-label of the main content area. Accepts any string.
431
+ - **sideContent**: `sideContent.ariaLabel` defines the aria-label of the side content area. Accepts any string.
432
+ */
433
+ this.accessibilityAttributes = input({}, ...(ngDevMode ? [{ debugName: "accessibilityAttributes" }] : [])); // className is now passed
434
+ /**
435
+ * Fires when the current breakpoint has been changed.
436
+ */
437
+ this.ui5LayoutChange = output();
438
+ this.elementRef = inject(ElementRef);
439
+ this.injector = inject(Injector);
440
+ }
441
+ get element() {
442
+ return this.elementRef.nativeElement;
443
+ }
444
+ ngAfterViewInit() {
445
+ const wcElement = this.element;
446
+ const inputsToSync = [
447
+ 'hideMainContent',
448
+ 'hideSideContent',
449
+ 'sideContentPosition',
450
+ 'sideContentVisibility',
451
+ 'sideContentFallDown',
452
+ 'equalSplit',
453
+ 'accessibilityAttributes',
454
+ ];
455
+ // Synchronize inputs (properties)
456
+ for (const inputName of inputsToSync) {
457
+ // Find the corresponding camelCase signal property on the Angular component
458
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
459
+ // Use the Injector to run the effect in the correct context
460
+ if (this[signalName] && typeof this[signalName] === 'function') {
461
+ runInInjectionContext(this.injector, () => {
462
+ effect(() => {
463
+ // Read the signal value
464
+ const value = this[signalName]();
465
+ if (wcElement) {
466
+ // Write the value to the Web Component's property
467
+ wcElement[inputName] = value;
468
+ }
469
+ });
470
+ });
471
+ }
472
+ }
473
+ const outputsToSync = [
474
+ 'ui5LayoutChange',
475
+ ];
476
+ // Synchronize outputs (events)
477
+ for (const outputName of outputsToSync) {
478
+ // Map Angular output name to UI5 web component event name
479
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
480
+ // Ensure the output property exists and has an emit function before adding listener
481
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
482
+ // Cast the listener to the correct type to satisfy TypeScript
483
+ wcElement.addEventListener(eventName, (e) => {
484
+ this[outputName].emit(e);
485
+ });
486
+ }
487
+ }
488
+ }
489
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: DynamicSideContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
490
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: DynamicSideContent, isStandalone: true, selector: "ui5-dynamic-side-content, [ui5-dynamic-side-content]", inputs: { hideMainContent: { classPropertyName: "hideMainContent", publicName: "hideMainContent", isSignal: true, isRequired: false, transformFunction: null }, hideSideContent: { classPropertyName: "hideSideContent", publicName: "hideSideContent", isSignal: true, isRequired: false, transformFunction: null }, sideContentPosition: { classPropertyName: "sideContentPosition", publicName: "sideContentPosition", isSignal: true, isRequired: false, transformFunction: null }, sideContentVisibility: { classPropertyName: "sideContentVisibility", publicName: "sideContentVisibility", isSignal: true, isRequired: false, transformFunction: null }, sideContentFallDown: { classPropertyName: "sideContentFallDown", publicName: "sideContentFallDown", isSignal: true, isRequired: false, transformFunction: null }, equalSplit: { classPropertyName: "equalSplit", publicName: "equalSplit", isSignal: true, isRequired: false, transformFunction: null }, accessibilityAttributes: { classPropertyName: "accessibilityAttributes", publicName: "accessibilityAttributes", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5LayoutChange: "ui5LayoutChange" }, exportAs: ["ui5DynamicSideContent"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
491
+ }
492
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: DynamicSideContent, decorators: [{
493
+ type: Component,
494
+ args: [{
495
+ standalone: true,
496
+ selector: 'ui5-dynamic-side-content, [ui5-dynamic-side-content]',
497
+ template: '<ng-content></ng-content>',
498
+ exportAs: 'ui5DynamicSideContent',
499
+ changeDetection: ChangeDetectionStrategy.OnPush,
500
+ }]
501
+ }] });
502
+
503
+ class FilterItem {
504
+ constructor() {
505
+ /**
506
+ * Defines the text of the filter item.
507
+ */
508
+ this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
509
+ /**
510
+ * Defines the additional text of the filter item.
511
+ This text is typically used to show the number of selected filter options within this category.
512
+ */
513
+ this.additionalText = input(...(ngDevMode ? [undefined, { debugName: "additionalText" }] : [])); // className is now passed
514
+ this.elementRef = inject(ElementRef);
515
+ this.injector = inject(Injector);
516
+ }
517
+ get element() {
518
+ return this.elementRef.nativeElement;
519
+ }
520
+ ngAfterViewInit() {
521
+ const wcElement = this.element;
522
+ const inputsToSync = [
523
+ 'text',
524
+ 'additionalText',
525
+ ];
526
+ // Synchronize inputs (properties)
527
+ for (const inputName of inputsToSync) {
528
+ // Find the corresponding camelCase signal property on the Angular component
529
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
530
+ // Use the Injector to run the effect in the correct context
531
+ if (this[signalName] && typeof this[signalName] === 'function') {
532
+ runInInjectionContext(this.injector, () => {
533
+ effect(() => {
534
+ // Read the signal value
535
+ const value = this[signalName]();
536
+ if (wcElement) {
537
+ // Write the value to the Web Component's property
538
+ wcElement[inputName] = value;
539
+ }
540
+ });
541
+ });
542
+ }
543
+ }
544
+ }
545
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FilterItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
546
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: FilterItem, isStandalone: true, selector: "ui5-filter-item, [ui5-filter-item]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, additionalText: { classPropertyName: "additionalText", publicName: "additionalText", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5FilterItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
547
+ }
548
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FilterItem, decorators: [{
549
+ type: Component,
550
+ args: [{
551
+ standalone: true,
552
+ selector: 'ui5-filter-item, [ui5-filter-item]',
553
+ template: '<ng-content></ng-content>',
554
+ exportAs: 'ui5FilterItem',
555
+ changeDetection: ChangeDetectionStrategy.OnPush,
556
+ }]
557
+ }] });
558
+
559
+ class FilterItemOption {
560
+ constructor() {
561
+ /**
562
+ * Defines the text of the filter option.
563
+ */
564
+ this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
565
+ /**
566
+ * Defines if the filter option is selected.
567
+ */
568
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
569
+ this.elementRef = inject(ElementRef);
570
+ this.injector = inject(Injector);
571
+ }
572
+ get element() {
573
+ return this.elementRef.nativeElement;
574
+ }
575
+ ngAfterViewInit() {
576
+ const wcElement = this.element;
577
+ const inputsToSync = [
578
+ 'text',
579
+ 'selected',
580
+ ];
581
+ // Synchronize inputs (properties)
582
+ for (const inputName of inputsToSync) {
583
+ // Find the corresponding camelCase signal property on the Angular component
584
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
585
+ // Use the Injector to run the effect in the correct context
586
+ if (this[signalName] && typeof this[signalName] === 'function') {
587
+ runInInjectionContext(this.injector, () => {
588
+ effect(() => {
589
+ // Read the signal value
590
+ const value = this[signalName]();
591
+ if (wcElement) {
592
+ // Write the value to the Web Component's property
593
+ wcElement[inputName] = value;
594
+ }
595
+ });
596
+ });
597
+ }
598
+ }
599
+ }
600
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FilterItemOption, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
601
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: FilterItemOption, isStandalone: true, selector: "ui5-filter-item-option, [ui5-filter-item-option]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5FilterItemOption"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
602
+ }
603
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FilterItemOption, decorators: [{
604
+ type: Component,
605
+ args: [{
606
+ standalone: true,
607
+ selector: 'ui5-filter-item-option, [ui5-filter-item-option]',
608
+ template: '<ng-content></ng-content>',
609
+ exportAs: 'ui5FilterItemOption',
610
+ changeDetection: ChangeDetectionStrategy.OnPush,
611
+ }]
612
+ }] });
613
+
614
+ class FlexibleColumnLayout {
615
+ constructor() {
616
+ /**
617
+ * Defines the columns layout and their proportion.
618
+
619
+ **Note:** The layout also depends on the screen size - one column for screens smaller than 599px,
620
+ two columns between 599px and 1023px and three columns for sizes bigger than 1023px.
621
+
622
+ **For example:** layout=`TwoColumnsStartExpanded` means the layout will display up to two columns
623
+ in 67%/33% proportion.
624
+ */
625
+ this.layout = input("OneColumn", ...(ngDevMode ? [{ debugName: "layout" }] : []));
626
+ /**
627
+ * Specifies if the user is allowed to change the columns layout by dragging the separator between the columns.
628
+ */
629
+ this.disableResizing = input(false, ...(ngDevMode ? [{ debugName: "disableResizing", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
630
+ /**
631
+ * Defines additional accessibility attributes on different areas of the component.
632
+
633
+ The accessibilityAttributes object has the following fields,
634
+ where each field is an object supporting one or more accessibility attributes:
635
+
636
+ - **startColumn**: `startColumn.role` and `startColumn.name`.
637
+ - **midColumn**: `midColumn.role` and `midColumn.name`.
638
+ - **endColumn**: `endColumn.role` and `endColumn.name`.
639
+ - **startSeparator**: `startSeparator.role` and `startSeparator.name`.
640
+ - **endSeparator**: `endSeparator.role` and `endSeparator.name`.
641
+
642
+ The accessibility attributes support the following values:
643
+
644
+ - **role**: Defines the accessible ARIA landmark role of the area.
645
+ Accepts the following values: `none`, `complementary`, `contentinfo`, `main` or `region`.
646
+
647
+ - **name**: Defines the accessible ARIA name of the area.
648
+ Accepts any string.
649
+ */
650
+ this.accessibilityAttributes = input({}, ...(ngDevMode ? [{ debugName: "accessibilityAttributes" }] : []));
651
+ /**
652
+ * Allows to customize the column proportions per screen size and layout.
653
+ If no custom proportion provided for a specific layout, the default will be used.
654
+
655
+ **Notes:**
656
+
657
+ - The proportions should be given in percentages. For example ["30%", "40%", "30%"], ["70%", "30%", 0], etc.
658
+ - The proportions should add up to 100%.
659
+ - Hidden columns are marked as "0px", e.g. ["0px", "70%", "30%"]. Specifying 0 or "0%" for hidden columns is also valid.
660
+ - If the proportions do not match the layout (e.g. if provided proportions ["70%", "30%", "0px"] for "OneColumn" layout), then the default proportions will be used instead.
661
+ - Whenever the user drags the columns separator to resize the columns, the `layoutsConfiguration` object will be updated with the user-specified proportions for the given layout (and the `layout-configuration-change` event will be fired).
662
+ - No custom configuration available for the phone screen size, as the default of 100% column width is always used there.
663
+ */
664
+ this.layoutsConfiguration = input({}, ...(ngDevMode ? [{ debugName: "layoutsConfiguration" }] : [])); // className is now passed
665
+ /**
666
+ * Returns the current column layout, based on both the `layout` property and the screen size.
667
+
668
+ **For example:** ["67%", "33%", 0], ["100%", 0, 0], ["25%", "50%", "25%"], etc,
669
+ where the numbers represents the width of the start, middle and end columns.
670
+ * @readonly This property is managed by the web component and updates reactively.
671
+ * Based on schema: readonly field that updates via layout-change event parameters.
672
+ */
673
+ this.columnLayout = computed(() => this._columnLayoutSignal(), ...(ngDevMode ? [{ debugName: "columnLayout" }] : []));
674
+ /**
675
+ * Returns if the `start` column is visible.
676
+ * @readonly This property is managed by the web component and updates reactively.
677
+ * Based on schema: readonly field that updates via layout-change event parameters.
678
+ */
679
+ this.startColumnVisible = computed(() => this._startColumnVisibleSignal(), ...(ngDevMode ? [{ debugName: "startColumnVisible" }] : []));
680
+ /**
681
+ * Returns if the `middle` column is visible.
682
+ * @readonly This property is managed by the web component and updates reactively.
683
+ * Based on schema: readonly field that updates via layout-change event parameters.
684
+ */
685
+ this.midColumnVisible = computed(() => this._midColumnVisibleSignal(), ...(ngDevMode ? [{ debugName: "midColumnVisible" }] : []));
686
+ /**
687
+ * Returns if the `end` column is visible.
688
+ * @readonly This property is managed by the web component and updates reactively.
689
+ * Based on schema: readonly field that updates via layout-change event parameters.
690
+ */
691
+ this.endColumnVisible = computed(() => this._endColumnVisibleSignal(), ...(ngDevMode ? [{ debugName: "endColumnVisible" }] : []));
692
+ /**
693
+ * Fired when the layout changes via user interaction by dragging the separators
694
+ or by changing the component size due to resizing.
695
+ */
696
+ this.ui5LayoutChange = output();
697
+ /**
698
+ * Fired when the `layoutsConfiguration` changes via user interaction by dragging the separators.
699
+ */
700
+ this.ui5LayoutConfigurationChange = output();
701
+ this.elementRef = inject(ElementRef);
702
+ this.injector = inject(Injector);
703
+ // Internal signal to track columnLayout from layout-change events
704
+ this._columnLayoutSignal = signal(undefined, ...(ngDevMode ? [{ debugName: "_columnLayoutSignal" }] : []));
705
+ // Internal signal to track startColumnVisible from layout-change events
706
+ this._startColumnVisibleSignal = signal(true, ...(ngDevMode ? [{ debugName: "_startColumnVisibleSignal" }] : []));
707
+ // Internal signal to track midColumnVisible from layout-change events
708
+ this._midColumnVisibleSignal = signal(false, ...(ngDevMode ? [{ debugName: "_midColumnVisibleSignal" }] : []));
709
+ // Internal signal to track endColumnVisible from layout-change events
710
+ this._endColumnVisibleSignal = signal(false, ...(ngDevMode ? [{ debugName: "_endColumnVisibleSignal" }] : []));
711
+ }
712
+ /**
713
+ * Returns the number of currently visible columns.
714
+ * @readonly This property is managed by the web component.
715
+ */
716
+ get visibleColumns() {
717
+ return this.element?.visibleColumns ?? 1;
718
+ }
719
+ get element() {
720
+ return this.elementRef.nativeElement;
721
+ }
722
+ ngAfterViewInit() {
723
+ const wcElement = this.element;
724
+ const inputsToSync = [
725
+ 'layout',
726
+ 'disableResizing',
727
+ 'accessibilityAttributes',
728
+ 'layoutsConfiguration',
729
+ ];
730
+ // Synchronize inputs (properties)
731
+ for (const inputName of inputsToSync) {
732
+ // Find the corresponding camelCase signal property on the Angular component
733
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
734
+ // Use the Injector to run the effect in the correct context
735
+ if (this[signalName] && typeof this[signalName] === 'function') {
736
+ runInInjectionContext(this.injector, () => {
737
+ effect(() => {
738
+ // Read the signal value
739
+ const value = this[signalName]();
740
+ if (wcElement) {
741
+ // Write the value to the Web Component's property
742
+ wcElement[inputName] = value;
743
+ }
744
+ });
745
+ });
746
+ }
747
+ }
748
+ const outputsToSync = [
749
+ 'ui5LayoutChange',
750
+ 'ui5LayoutConfigurationChange',
751
+ ];
752
+ // Synchronize outputs (events)
753
+ for (const outputName of outputsToSync) {
754
+ // Map Angular output name to UI5 web component event name
755
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
756
+ // Ensure the output property exists and has an emit function before adding listener
757
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
758
+ // Cast the listener to the correct type to satisfy TypeScript
759
+ wcElement.addEventListener(eventName, (e) => {
760
+ // Update columnLayout signal when layout-change event fires
761
+ if (eventName === 'layout-change') {
762
+ const customEvent = e;
763
+ // Use columnLayout from event detail, fallback to web component property
764
+ const columnLayoutValue = customEvent.detail?.columnLayout || wcElement.columnLayout || undefined;
765
+ this._columnLayoutSignal.set(columnLayoutValue);
766
+ }
767
+ // Update columnLayout signal when layout-configuration-change event fires
768
+ if (eventName === 'layout-configuration-change') {
769
+ const customEvent = e;
770
+ // Use columnLayout from event detail, fallback to web component property
771
+ const columnLayoutValue = customEvent.detail?.columnLayout || wcElement.columnLayout || undefined;
772
+ this._columnLayoutSignal.set(columnLayoutValue);
773
+ }
774
+ // Update startColumnVisible signal when layout-change event fires
775
+ if (eventName === 'layout-change') {
776
+ const customEvent = e;
777
+ // Use startColumnVisible from event detail, fallback to web component property
778
+ const startColumnVisibleValue = customEvent.detail?.startColumnVisible || wcElement.startColumnVisible || true;
779
+ this._startColumnVisibleSignal.set(startColumnVisibleValue);
780
+ }
781
+ // Update midColumnVisible signal when layout-change event fires
782
+ if (eventName === 'layout-change') {
783
+ const customEvent = e;
784
+ // Use midColumnVisible from event detail, fallback to web component property
785
+ const midColumnVisibleValue = customEvent.detail?.midColumnVisible || wcElement.midColumnVisible || false;
786
+ this._midColumnVisibleSignal.set(midColumnVisibleValue);
787
+ }
788
+ // Update endColumnVisible signal when layout-change event fires
789
+ if (eventName === 'layout-change') {
790
+ const customEvent = e;
791
+ // Use endColumnVisible from event detail, fallback to web component property
792
+ const endColumnVisibleValue = customEvent.detail?.endColumnVisible || wcElement.endColumnVisible || false;
793
+ this._endColumnVisibleSignal.set(endColumnVisibleValue);
794
+ }
795
+ this[outputName].emit(e);
796
+ });
797
+ }
798
+ }
799
+ // Initialize columnLayout signal with current state using delayed initialization
800
+ // to handle web component timing properly
801
+ const initializeColumnLayout = () => {
802
+ const currentValue = wcElement.columnLayout || undefined;
803
+ if (JSON.stringify(currentValue) !== JSON.stringify(this._columnLayoutSignal())) {
804
+ this._columnLayoutSignal.set(currentValue);
805
+ }
806
+ };
807
+ // Try immediate initialization
808
+ initializeColumnLayout();
809
+ // Fallback delayed initialization if web component needs more time
810
+ // Use requestAnimationFrame for zoneless compatibility
811
+ requestAnimationFrame(() => initializeColumnLayout());
812
+ // Initialize startColumnVisible signal with current state using delayed initialization
813
+ // to handle web component timing properly
814
+ const initializeStartColumnVisible = () => {
815
+ const currentValue = wcElement.startColumnVisible || true;
816
+ if (JSON.stringify(currentValue) !== JSON.stringify(this._startColumnVisibleSignal())) {
817
+ this._startColumnVisibleSignal.set(currentValue);
818
+ }
819
+ };
820
+ // Try immediate initialization
821
+ initializeStartColumnVisible();
822
+ // Fallback delayed initialization if web component needs more time
823
+ // Use requestAnimationFrame for zoneless compatibility
824
+ requestAnimationFrame(() => initializeStartColumnVisible());
825
+ // Initialize midColumnVisible signal with current state using delayed initialization
826
+ // to handle web component timing properly
827
+ const initializeMidColumnVisible = () => {
828
+ const currentValue = wcElement.midColumnVisible || false;
829
+ if (JSON.stringify(currentValue) !== JSON.stringify(this._midColumnVisibleSignal())) {
830
+ this._midColumnVisibleSignal.set(currentValue);
831
+ }
832
+ };
833
+ // Try immediate initialization
834
+ initializeMidColumnVisible();
835
+ // Fallback delayed initialization if web component needs more time
836
+ // Use requestAnimationFrame for zoneless compatibility
837
+ requestAnimationFrame(() => initializeMidColumnVisible());
838
+ // Initialize endColumnVisible signal with current state using delayed initialization
839
+ // to handle web component timing properly
840
+ const initializeEndColumnVisible = () => {
841
+ const currentValue = wcElement.endColumnVisible || false;
842
+ if (JSON.stringify(currentValue) !== JSON.stringify(this._endColumnVisibleSignal())) {
843
+ this._endColumnVisibleSignal.set(currentValue);
844
+ }
845
+ };
846
+ // Try immediate initialization
847
+ initializeEndColumnVisible();
848
+ // Fallback delayed initialization if web component needs more time
849
+ // Use requestAnimationFrame for zoneless compatibility
850
+ requestAnimationFrame(() => initializeEndColumnVisible());
851
+ }
852
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FlexibleColumnLayout, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
853
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: FlexibleColumnLayout, isStandalone: true, selector: "ui5-flexible-column-layout, [ui5-flexible-column-layout]", inputs: { layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, disableResizing: { classPropertyName: "disableResizing", publicName: "disableResizing", isSignal: true, isRequired: false, transformFunction: null }, accessibilityAttributes: { classPropertyName: "accessibilityAttributes", publicName: "accessibilityAttributes", isSignal: true, isRequired: false, transformFunction: null }, layoutsConfiguration: { classPropertyName: "layoutsConfiguration", publicName: "layoutsConfiguration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5LayoutChange: "ui5LayoutChange", ui5LayoutConfigurationChange: "ui5LayoutConfigurationChange" }, exportAs: ["ui5FlexibleColumnLayout"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
854
+ }
855
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: FlexibleColumnLayout, decorators: [{
856
+ type: Component,
857
+ args: [{
858
+ standalone: true,
859
+ selector: 'ui5-flexible-column-layout, [ui5-flexible-column-layout]',
860
+ template: '<ng-content></ng-content>',
861
+ exportAs: 'ui5FlexibleColumnLayout',
862
+ changeDetection: ChangeDetectionStrategy.OnPush,
863
+ }]
864
+ }] });
865
+
866
+ class GroupItem {
867
+ constructor() {
868
+ /**
869
+ * Defines the text of the group item.
870
+ */
871
+ this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
872
+ /**
873
+ * Defines if the group item is selected.
874
+ */
875
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
876
+ this.elementRef = inject(ElementRef);
877
+ this.injector = inject(Injector);
878
+ }
879
+ get element() {
880
+ return this.elementRef.nativeElement;
881
+ }
882
+ ngAfterViewInit() {
883
+ const wcElement = this.element;
884
+ const inputsToSync = [
885
+ 'text',
886
+ 'selected',
887
+ ];
888
+ // Synchronize inputs (properties)
889
+ for (const inputName of inputsToSync) {
890
+ // Find the corresponding camelCase signal property on the Angular component
891
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
892
+ // Use the Injector to run the effect in the correct context
893
+ if (this[signalName] && typeof this[signalName] === 'function') {
894
+ runInInjectionContext(this.injector, () => {
895
+ effect(() => {
896
+ // Read the signal value
897
+ const value = this[signalName]();
898
+ if (wcElement) {
899
+ // Write the value to the Web Component's property
900
+ wcElement[inputName] = value;
901
+ }
902
+ });
903
+ });
904
+ }
905
+ }
906
+ }
907
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GroupItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
908
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: GroupItem, isStandalone: true, selector: "ui5-group-item, [ui5-group-item]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5GroupItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
909
+ }
910
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GroupItem, decorators: [{
911
+ type: Component,
912
+ args: [{
913
+ standalone: true,
914
+ selector: 'ui5-group-item, [ui5-group-item]',
915
+ template: '<ng-content></ng-content>',
916
+ exportAs: 'ui5GroupItem',
917
+ changeDetection: ChangeDetectionStrategy.OnPush,
918
+ }]
919
+ }] });
920
+
921
+ class IllustratedMessage {
922
+ constructor() {
923
+ /**
924
+ * Defines the illustration name that will be displayed in the component.
925
+
926
+ Example:
927
+
928
+ `name='BeforeSearch'`, `name='UnableToUpload'`, etc..
929
+
930
+ **Note:** To use the TNT illustrations,
931
+ you need to set the `tnt` or `Tnt` prefix in front of the icon's name.
932
+
933
+ Example:
934
+
935
+ `name='tnt/Avatar'` or `name='TntAvatar'`.
936
+
937
+ **Note:** By default the `BeforeSearch` illustration is loaded.
938
+ When using an illustration type, other than the default, it should be loaded in addition:
939
+
940
+ `import "@ui5/webcomponents-fiori/dist/illustrations/NoData.js";`
941
+
942
+ For TNT illustrations:
943
+
944
+ `import "@ui5/webcomponents-fiori/dist/illustrations/tnt/SessionExpired.js";`
945
+ */
946
+ this.name = input("BeforeSearch", ...(ngDevMode ? [{ debugName: "name" }] : []));
947
+ /**
948
+ * Determines which illustration breakpoint variant is used.
949
+
950
+ As `IllustratedMessage` adapts itself around the `Illustration`, the other
951
+ elements of the component are displayed differently on the different breakpoints/illustration designs.
952
+ */
953
+ this.design = input("Auto", ...(ngDevMode ? [{ debugName: "design" }] : []));
954
+ /**
955
+ * Defines the subtitle of the component.
956
+
957
+ **Note:** Using this property, the default subtitle text of illustration will be overwritten.
958
+
959
+ **Note:** Using `subtitle` slot, the default of this property will be overwritten.
960
+ */
961
+ this.subtitleText = input(...(ngDevMode ? [undefined, { debugName: "subtitleText" }] : []));
962
+ /**
963
+ * Defines the title of the component.
964
+
965
+ **Note:** Using this property, the default title text of illustration will be overwritten.
966
+ */
967
+ this.titleText = input(...(ngDevMode ? [undefined, { debugName: "titleText" }] : []));
968
+ /**
969
+ * Receives id(or many ids) of the elements that label the component.
970
+ */
971
+ this.accessibleNameRef = input(...(ngDevMode ? [undefined, { debugName: "accessibleNameRef" }] : []));
972
+ /**
973
+ * Defines whether the illustration is decorative.
974
+
975
+ When set to `true`, the attributes `role="presentation"` and `aria-hidden="true"` are applied to the SVG element.
976
+ */
977
+ this.decorative = input(false, ...(ngDevMode ? [{ debugName: "decorative", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
978
+ this.elementRef = inject(ElementRef);
979
+ this.injector = inject(Injector);
980
+ }
981
+ get element() {
982
+ return this.elementRef.nativeElement;
983
+ }
984
+ ngAfterViewInit() {
985
+ const wcElement = this.element;
986
+ const inputsToSync = [
987
+ 'name',
988
+ 'design',
989
+ 'subtitleText',
990
+ 'titleText',
991
+ 'accessibleNameRef',
992
+ 'decorative',
993
+ ];
994
+ // Synchronize inputs (properties)
995
+ for (const inputName of inputsToSync) {
996
+ // Find the corresponding camelCase signal property on the Angular component
997
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
998
+ // Use the Injector to run the effect in the correct context
999
+ if (this[signalName] && typeof this[signalName] === 'function') {
1000
+ runInInjectionContext(this.injector, () => {
1001
+ effect(() => {
1002
+ // Read the signal value
1003
+ const value = this[signalName]();
1004
+ if (wcElement) {
1005
+ // Write the value to the Web Component's property
1006
+ wcElement[inputName] = value;
1007
+ }
1008
+ });
1009
+ });
1010
+ }
1011
+ }
1012
+ }
1013
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: IllustratedMessage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1014
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: IllustratedMessage, isStandalone: true, selector: "ui5-illustrated-message, [ui5-illustrated-message]", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, design: { classPropertyName: "design", publicName: "design", isSignal: true, isRequired: false, transformFunction: null }, subtitleText: { classPropertyName: "subtitleText", publicName: "subtitleText", isSignal: true, isRequired: false, transformFunction: null }, titleText: { classPropertyName: "titleText", publicName: "titleText", isSignal: true, isRequired: false, transformFunction: null }, accessibleNameRef: { classPropertyName: "accessibleNameRef", publicName: "accessibleNameRef", isSignal: true, isRequired: false, transformFunction: null }, decorative: { classPropertyName: "decorative", publicName: "decorative", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5IllustratedMessage"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1015
+ }
1016
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: IllustratedMessage, decorators: [{
1017
+ type: Component,
1018
+ args: [{
1019
+ standalone: true,
1020
+ selector: 'ui5-illustrated-message, [ui5-illustrated-message]',
1021
+ template: '<ng-content></ng-content>',
1022
+ exportAs: 'ui5IllustratedMessage',
1023
+ changeDetection: ChangeDetectionStrategy.OnPush,
1024
+ }]
1025
+ }] });
1026
+
1027
+ class MediaGallery {
1028
+ constructor() {
1029
+ /**
1030
+ * If set to `true`, all thumbnails are rendered in a scrollable container.
1031
+ If `false`, only up to five thumbnails are rendered, followed by
1032
+ an overflow button that shows the count of the remaining thumbnails.
1033
+ */
1034
+ this.showAllThumbnails = input(false, ...(ngDevMode ? [{ debugName: "showAllThumbnails", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1035
+ /**
1036
+ * If enabled, a `display-area-click` event is fired
1037
+ when the user clicks or taps on the display area.
1038
+
1039
+ The display area is the central area that contains
1040
+ the enlarged content of the currently selected item.
1041
+ */
1042
+ this.interactiveDisplayArea = input(false, ...(ngDevMode ? [{ debugName: "interactiveDisplayArea", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1043
+ /**
1044
+ * Determines the layout of the component.
1045
+ */
1046
+ this.layout = input("Auto", ...(ngDevMode ? [{ debugName: "layout" }] : []));
1047
+ /**
1048
+ * Determines the horizontal alignment of the thumbnails menu
1049
+ vs. the central display area.
1050
+ */
1051
+ this.menuHorizontalAlign = input("Left", ...(ngDevMode ? [{ debugName: "menuHorizontalAlign" }] : []));
1052
+ /**
1053
+ * Determines the vertical alignment of the thumbnails menu
1054
+ vs. the central display area.
1055
+ */
1056
+ this.menuVerticalAlign = input("Bottom", ...(ngDevMode ? [{ debugName: "menuVerticalAlign" }] : [])); // className is now passed
1057
+ /**
1058
+ * Fired when selection is changed by user interaction.
1059
+ */
1060
+ this.ui5SelectionChange = output();
1061
+ /**
1062
+ * Fired when the thumbnails overflow button is clicked.
1063
+ */
1064
+ this.ui5OverflowClick = output();
1065
+ /**
1066
+ * Fired when the display area is clicked.
1067
+ The display area is the central area that contains
1068
+ the enlarged content of the currently selected item.
1069
+ */
1070
+ this.ui5DisplayAreaClick = output();
1071
+ this.elementRef = inject(ElementRef);
1072
+ this.injector = inject(Injector);
1073
+ }
1074
+ get element() {
1075
+ return this.elementRef.nativeElement;
1076
+ }
1077
+ ngAfterViewInit() {
1078
+ const wcElement = this.element;
1079
+ const inputsToSync = [
1080
+ 'showAllThumbnails',
1081
+ 'interactiveDisplayArea',
1082
+ 'layout',
1083
+ 'menuHorizontalAlign',
1084
+ 'menuVerticalAlign',
1085
+ ];
1086
+ // Synchronize inputs (properties)
1087
+ for (const inputName of inputsToSync) {
1088
+ // Find the corresponding camelCase signal property on the Angular component
1089
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
1090
+ // Use the Injector to run the effect in the correct context
1091
+ if (this[signalName] && typeof this[signalName] === 'function') {
1092
+ runInInjectionContext(this.injector, () => {
1093
+ effect(() => {
1094
+ // Read the signal value
1095
+ const value = this[signalName]();
1096
+ if (wcElement) {
1097
+ // Write the value to the Web Component's property
1098
+ wcElement[inputName] = value;
1099
+ }
1100
+ });
1101
+ });
1102
+ }
1103
+ }
1104
+ const outputsToSync = [
1105
+ 'ui5SelectionChange',
1106
+ 'ui5OverflowClick',
1107
+ 'ui5DisplayAreaClick',
1108
+ ];
1109
+ // Synchronize outputs (events)
1110
+ for (const outputName of outputsToSync) {
1111
+ // Map Angular output name to UI5 web component event name
1112
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
1113
+ // Ensure the output property exists and has an emit function before adding listener
1114
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
1115
+ // Cast the listener to the correct type to satisfy TypeScript
1116
+ wcElement.addEventListener(eventName, (e) => {
1117
+ this[outputName].emit(e);
1118
+ });
1119
+ }
1120
+ }
1121
+ }
1122
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: MediaGallery, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1123
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: MediaGallery, isStandalone: true, selector: "ui5-media-gallery, [ui5-media-gallery]", inputs: { showAllThumbnails: { classPropertyName: "showAllThumbnails", publicName: "showAllThumbnails", isSignal: true, isRequired: false, transformFunction: null }, interactiveDisplayArea: { classPropertyName: "interactiveDisplayArea", publicName: "interactiveDisplayArea", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, menuHorizontalAlign: { classPropertyName: "menuHorizontalAlign", publicName: "menuHorizontalAlign", isSignal: true, isRequired: false, transformFunction: null }, menuVerticalAlign: { classPropertyName: "menuVerticalAlign", publicName: "menuVerticalAlign", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5SelectionChange: "ui5SelectionChange", ui5OverflowClick: "ui5OverflowClick", ui5DisplayAreaClick: "ui5DisplayAreaClick" }, exportAs: ["ui5MediaGallery"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1124
+ }
1125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: MediaGallery, decorators: [{
1126
+ type: Component,
1127
+ args: [{
1128
+ standalone: true,
1129
+ selector: 'ui5-media-gallery, [ui5-media-gallery]',
1130
+ template: '<ng-content></ng-content>',
1131
+ exportAs: 'ui5MediaGallery',
1132
+ changeDetection: ChangeDetectionStrategy.OnPush,
1133
+ }]
1134
+ }] });
1135
+
1136
+ class MediaGalleryItem {
1137
+ constructor() {
1138
+ /**
1139
+ * Defines the selected state of the component.
1140
+ */
1141
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1142
+ /**
1143
+ * Defines whether the component is in disabled state.
1144
+ */
1145
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1146
+ /**
1147
+ * Determines the layout of the item container.
1148
+ */
1149
+ this.layout = input("Square", ...(ngDevMode ? [{ debugName: "layout" }] : [])); // className is now passed
1150
+ this.elementRef = inject(ElementRef);
1151
+ this.injector = inject(Injector);
1152
+ }
1153
+ get element() {
1154
+ return this.elementRef.nativeElement;
1155
+ }
1156
+ ngAfterViewInit() {
1157
+ const wcElement = this.element;
1158
+ const inputsToSync = [
1159
+ 'selected',
1160
+ 'disabled',
1161
+ 'layout',
1162
+ ];
1163
+ // Synchronize inputs (properties)
1164
+ for (const inputName of inputsToSync) {
1165
+ // Find the corresponding camelCase signal property on the Angular component
1166
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
1167
+ // Use the Injector to run the effect in the correct context
1168
+ if (this[signalName] && typeof this[signalName] === 'function') {
1169
+ runInInjectionContext(this.injector, () => {
1170
+ effect(() => {
1171
+ // Read the signal value
1172
+ const value = this[signalName]();
1173
+ if (wcElement) {
1174
+ // Write the value to the Web Component's property
1175
+ wcElement[inputName] = value;
1176
+ }
1177
+ });
1178
+ });
1179
+ }
1180
+ }
1181
+ }
1182
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: MediaGalleryItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1183
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: MediaGalleryItem, isStandalone: true, selector: "ui5-media-gallery-item, [ui5-media-gallery-item]", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5MediaGalleryItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1184
+ }
1185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: MediaGalleryItem, decorators: [{
1186
+ type: Component,
1187
+ args: [{
1188
+ standalone: true,
1189
+ selector: 'ui5-media-gallery-item, [ui5-media-gallery-item]',
1190
+ template: '<ng-content></ng-content>',
1191
+ exportAs: 'ui5MediaGalleryItem',
1192
+ changeDetection: ChangeDetectionStrategy.OnPush,
1193
+ }]
1194
+ }] });
1195
+
1196
+ class NavigationLayout {
1197
+ constructor() {
1198
+ /**
1199
+ * Specifies the navigation layout mode.
1200
+ */
1201
+ this.mode = input("Auto", ...(ngDevMode ? [{ debugName: "mode" }] : [])); // className is now passed
1202
+ this.elementRef = inject(ElementRef);
1203
+ this.injector = inject(Injector);
1204
+ }
1205
+ get element() {
1206
+ return this.elementRef.nativeElement;
1207
+ }
1208
+ ngAfterViewInit() {
1209
+ const wcElement = this.element;
1210
+ const inputsToSync = [
1211
+ 'mode',
1212
+ ];
1213
+ // Synchronize inputs (properties)
1214
+ for (const inputName of inputsToSync) {
1215
+ // Find the corresponding camelCase signal property on the Angular component
1216
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
1217
+ // Use the Injector to run the effect in the correct context
1218
+ if (this[signalName] && typeof this[signalName] === 'function') {
1219
+ runInInjectionContext(this.injector, () => {
1220
+ effect(() => {
1221
+ // Read the signal value
1222
+ const value = this[signalName]();
1223
+ if (wcElement) {
1224
+ // Write the value to the Web Component's property
1225
+ wcElement[inputName] = value;
1226
+ }
1227
+ });
1228
+ });
1229
+ }
1230
+ }
1231
+ }
1232
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NavigationLayout, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1233
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: NavigationLayout, isStandalone: true, selector: "ui5-navigation-layout, [ui5-navigation-layout]", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5NavigationLayout"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1234
+ }
1235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NavigationLayout, decorators: [{
1236
+ type: Component,
1237
+ args: [{
1238
+ standalone: true,
1239
+ selector: 'ui5-navigation-layout, [ui5-navigation-layout]',
1240
+ template: '<ng-content></ng-content>',
1241
+ exportAs: 'ui5NavigationLayout',
1242
+ changeDetection: ChangeDetectionStrategy.OnPush,
1243
+ }]
1244
+ }] });
1245
+
1246
+ class NotificationList {
1247
+ constructor() {
1248
+ /**
1249
+ * Defines the text that is displayed when the component contains no items.
1250
+ */
1251
+ this.noDataText = input(...(ngDevMode ? [undefined, { debugName: "noDataText" }] : [])); // className is now passed
1252
+ /**
1253
+ * Fired when an item is clicked.
1254
+ */
1255
+ this.ui5ItemClick = output();
1256
+ /**
1257
+ * Fired when the `Close` button of any item is clicked.
1258
+ */
1259
+ this.ui5ItemClose = output();
1260
+ /**
1261
+ * Fired when an item is toggled.
1262
+ */
1263
+ this.ui5ItemToggle = output();
1264
+ this.elementRef = inject(ElementRef);
1265
+ this.injector = inject(Injector);
1266
+ }
1267
+ get element() {
1268
+ return this.elementRef.nativeElement;
1269
+ }
1270
+ ngAfterViewInit() {
1271
+ const wcElement = this.element;
1272
+ const inputsToSync = [
1273
+ 'noDataText',
1274
+ ];
1275
+ // Synchronize inputs (properties)
1276
+ for (const inputName of inputsToSync) {
1277
+ // Find the corresponding camelCase signal property on the Angular component
1278
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
1279
+ // Use the Injector to run the effect in the correct context
1280
+ if (this[signalName] && typeof this[signalName] === 'function') {
1281
+ runInInjectionContext(this.injector, () => {
1282
+ effect(() => {
1283
+ // Read the signal value
1284
+ const value = this[signalName]();
1285
+ if (wcElement) {
1286
+ // Write the value to the Web Component's property
1287
+ wcElement[inputName] = value;
1288
+ }
1289
+ });
1290
+ });
1291
+ }
1292
+ }
1293
+ const outputsToSync = [
1294
+ 'ui5ItemClick',
1295
+ 'ui5ItemClose',
1296
+ 'ui5ItemToggle',
1297
+ ];
1298
+ // Synchronize outputs (events)
1299
+ for (const outputName of outputsToSync) {
1300
+ // Map Angular output name to UI5 web component event name
1301
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
1302
+ // Ensure the output property exists and has an emit function before adding listener
1303
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
1304
+ // Cast the listener to the correct type to satisfy TypeScript
1305
+ wcElement.addEventListener(eventName, (e) => {
1306
+ this[outputName].emit(e);
1307
+ });
1308
+ }
1309
+ }
1310
+ }
1311
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NotificationList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1312
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: NotificationList, isStandalone: true, selector: "ui5-notification-list, [ui5-notification-list]", inputs: { noDataText: { classPropertyName: "noDataText", publicName: "noDataText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5ItemClick: "ui5ItemClick", ui5ItemClose: "ui5ItemClose", ui5ItemToggle: "ui5ItemToggle" }, exportAs: ["ui5NotificationList"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1313
+ }
1314
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NotificationList, decorators: [{
1315
+ type: Component,
1316
+ args: [{
1317
+ standalone: true,
1318
+ selector: 'ui5-notification-list, [ui5-notification-list]',
1319
+ template: '<ng-content></ng-content>',
1320
+ exportAs: 'ui5NotificationList',
1321
+ changeDetection: ChangeDetectionStrategy.OnPush,
1322
+ }]
1323
+ }] });
1324
+
1325
+ class NotificationListGroupItem {
1326
+ constructor() {
1327
+ /**
1328
+ * Defines if the group is collapsed or expanded.
1329
+ */
1330
+ this.collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1331
+ /**
1332
+ * Defines whether the component will have growing capability by pressing a `More` button.
1333
+ When button is pressed `load-more` event will be fired.
1334
+ */
1335
+ this.growing = input("None", ...(ngDevMode ? [{ debugName: "growing" }] : []));
1336
+ /**
1337
+ * Defines the `titleText` of the item.
1338
+ */
1339
+ this.titleText = input(...(ngDevMode ? [undefined, { debugName: "titleText" }] : []));
1340
+ /**
1341
+ * Defines if the `notification` is new or has been already read.
1342
+
1343
+ **Note:** if set to `false` the `titleText` has bold font,
1344
+ if set to true - it has a normal font.
1345
+ */
1346
+ this.read = input(false, ...(ngDevMode ? [{ debugName: "read", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1347
+ /**
1348
+ * Defines if a busy indicator would be displayed over the item.
1349
+ */
1350
+ this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1351
+ /**
1352
+ * Defines the delay in milliseconds, after which the busy indicator will show up for this component.
1353
+ */
1354
+ this.loadingDelay = input(1000, ...(ngDevMode ? [{ debugName: "loadingDelay" }] : [])); // className is now passed
1355
+ /**
1356
+ * Fired when the `ui5-li-notification-group` is expanded/collapsed by user interaction.
1357
+ */
1358
+ this.ui5Toggle = output();
1359
+ /**
1360
+ * Fired when additional items are requested.
1361
+ */
1362
+ this.ui5LoadMore = output();
1363
+ this.elementRef = inject(ElementRef);
1364
+ this.injector = inject(Injector);
1365
+ }
1366
+ get element() {
1367
+ return this.elementRef.nativeElement;
1368
+ }
1369
+ ngAfterViewInit() {
1370
+ const wcElement = this.element;
1371
+ const inputsToSync = [
1372
+ 'collapsed',
1373
+ 'growing',
1374
+ 'titleText',
1375
+ 'read',
1376
+ 'loading',
1377
+ 'loadingDelay',
1378
+ ];
1379
+ // Synchronize inputs (properties)
1380
+ for (const inputName of inputsToSync) {
1381
+ // Find the corresponding camelCase signal property on the Angular component
1382
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
1383
+ // Use the Injector to run the effect in the correct context
1384
+ if (this[signalName] && typeof this[signalName] === 'function') {
1385
+ runInInjectionContext(this.injector, () => {
1386
+ effect(() => {
1387
+ // Read the signal value
1388
+ const value = this[signalName]();
1389
+ if (wcElement) {
1390
+ // Write the value to the Web Component's property
1391
+ wcElement[inputName] = value;
1392
+ }
1393
+ });
1394
+ });
1395
+ }
1396
+ }
1397
+ const outputsToSync = [
1398
+ 'ui5Toggle',
1399
+ 'ui5LoadMore',
1400
+ ];
1401
+ // Synchronize outputs (events)
1402
+ for (const outputName of outputsToSync) {
1403
+ // Map Angular output name to UI5 web component event name
1404
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
1405
+ // Ensure the output property exists and has an emit function before adding listener
1406
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
1407
+ // Cast the listener to the correct type to satisfy TypeScript
1408
+ wcElement.addEventListener(eventName, (e) => {
1409
+ this[outputName].emit(e);
1410
+ });
1411
+ }
1412
+ }
1413
+ }
1414
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NotificationListGroupItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1415
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: NotificationListGroupItem, isStandalone: true, selector: "ui5-li-notification-group, [ui5-li-notification-group]", inputs: { collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, growing: { classPropertyName: "growing", publicName: "growing", isSignal: true, isRequired: false, transformFunction: null }, titleText: { classPropertyName: "titleText", publicName: "titleText", isSignal: true, isRequired: false, transformFunction: null }, read: { classPropertyName: "read", publicName: "read", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingDelay: { classPropertyName: "loadingDelay", publicName: "loadingDelay", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Toggle: "ui5Toggle", ui5LoadMore: "ui5LoadMore" }, exportAs: ["ui5NotificationListGroupItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1416
+ }
1417
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NotificationListGroupItem, decorators: [{
1418
+ type: Component,
1419
+ args: [{
1420
+ standalone: true,
1421
+ selector: 'ui5-li-notification-group, [ui5-li-notification-group]',
1422
+ template: '<ng-content></ng-content>',
1423
+ exportAs: 'ui5NotificationListGroupItem',
1424
+ changeDetection: ChangeDetectionStrategy.OnPush,
1425
+ }]
1426
+ }] });
1427
+
1428
+ class NotificationListItem {
1429
+ constructor() {
1430
+ /**
1431
+ * Defines if the `titleText` and `description` should wrap,
1432
+ they truncate by default.
1433
+
1434
+ **Note:** by default the `titleText` and `description`,
1435
+ and a `ShowMore/Less` button would be displayed.
1436
+ */
1437
+ this.wrappingType = input("None", ...(ngDevMode ? [{ debugName: "wrappingType" }] : []));
1438
+ /**
1439
+ * Defines the status indicator of the item.
1440
+ */
1441
+ this.state = input("None", ...(ngDevMode ? [{ debugName: "state" }] : []));
1442
+ /**
1443
+ * Defines if the `Close` button would be displayed.
1444
+ */
1445
+ this.showClose = input(false, ...(ngDevMode ? [{ debugName: "showClose", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1446
+ /**
1447
+ * Defines the `Important` label of the item.
1448
+ */
1449
+ this.importance = input("Standard", ...(ngDevMode ? [{ debugName: "importance" }] : []));
1450
+ /**
1451
+ * Defines the `titleText` of the item.
1452
+ */
1453
+ this.titleText = input(...(ngDevMode ? [undefined, { debugName: "titleText" }] : []));
1454
+ /**
1455
+ * Defines if the `notification` is new or has been already read.
1456
+
1457
+ **Note:** if set to `false` the `titleText` has bold font,
1458
+ if set to true - it has a normal font.
1459
+ */
1460
+ this.read = input(false, ...(ngDevMode ? [{ debugName: "read", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1461
+ /**
1462
+ * Defines if a busy indicator would be displayed over the item.
1463
+ */
1464
+ this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1465
+ /**
1466
+ * Defines the delay in milliseconds, after which the busy indicator will show up for this component.
1467
+ */
1468
+ this.loadingDelay = input(1000, ...(ngDevMode ? [{ debugName: "loadingDelay" }] : [])); // className is now passed
1469
+ /**
1470
+ * Fired when the `Close` button is pressed.
1471
+ */
1472
+ this.ui5Close = output();
1473
+ this.elementRef = inject(ElementRef);
1474
+ this.injector = inject(Injector);
1475
+ }
1476
+ get element() {
1477
+ return this.elementRef.nativeElement;
1478
+ }
1479
+ ngAfterViewInit() {
1480
+ const wcElement = this.element;
1481
+ const inputsToSync = [
1482
+ 'wrappingType',
1483
+ 'state',
1484
+ 'showClose',
1485
+ 'importance',
1486
+ 'titleText',
1487
+ 'read',
1488
+ 'loading',
1489
+ 'loadingDelay',
1490
+ ];
1491
+ // Synchronize inputs (properties)
1492
+ for (const inputName of inputsToSync) {
1493
+ // Find the corresponding camelCase signal property on the Angular component
1494
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
1495
+ // Use the Injector to run the effect in the correct context
1496
+ if (this[signalName] && typeof this[signalName] === 'function') {
1497
+ runInInjectionContext(this.injector, () => {
1498
+ effect(() => {
1499
+ // Read the signal value
1500
+ const value = this[signalName]();
1501
+ if (wcElement) {
1502
+ // Write the value to the Web Component's property
1503
+ wcElement[inputName] = value;
1504
+ }
1505
+ });
1506
+ });
1507
+ }
1508
+ }
1509
+ const outputsToSync = [
1510
+ 'ui5Close',
1511
+ ];
1512
+ // Synchronize outputs (events)
1513
+ for (const outputName of outputsToSync) {
1514
+ // Map Angular output name to UI5 web component event name
1515
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
1516
+ // Ensure the output property exists and has an emit function before adding listener
1517
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
1518
+ // Cast the listener to the correct type to satisfy TypeScript
1519
+ wcElement.addEventListener(eventName, (e) => {
1520
+ this[outputName].emit(e);
1521
+ });
1522
+ }
1523
+ }
1524
+ }
1525
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NotificationListItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1526
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: NotificationListItem, isStandalone: true, selector: "ui5-li-notification, [ui5-li-notification]", inputs: { wrappingType: { classPropertyName: "wrappingType", publicName: "wrappingType", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, showClose: { classPropertyName: "showClose", publicName: "showClose", isSignal: true, isRequired: false, transformFunction: null }, importance: { classPropertyName: "importance", publicName: "importance", isSignal: true, isRequired: false, transformFunction: null }, titleText: { classPropertyName: "titleText", publicName: "titleText", isSignal: true, isRequired: false, transformFunction: null }, read: { classPropertyName: "read", publicName: "read", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingDelay: { classPropertyName: "loadingDelay", publicName: "loadingDelay", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Close: "ui5Close" }, exportAs: ["ui5NotificationListItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1527
+ }
1528
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: NotificationListItem, decorators: [{
1529
+ type: Component,
1530
+ args: [{
1531
+ standalone: true,
1532
+ selector: 'ui5-li-notification, [ui5-li-notification]',
1533
+ template: '<ng-content></ng-content>',
1534
+ exportAs: 'ui5NotificationListItem',
1535
+ changeDetection: ChangeDetectionStrategy.OnPush,
1536
+ }]
1537
+ }] });
1538
+
1539
+ class Page {
1540
+ constructor() {
1541
+ /**
1542
+ * Defines the background color of the `ui5-page`.
1543
+
1544
+ **Note:** When a ui5-list is placed inside the page, we recommend using “List” to ensure better color contrast.
1545
+ */
1546
+ this.backgroundDesign = input("Solid", ...(ngDevMode ? [{ debugName: "backgroundDesign" }] : []));
1547
+ /**
1548
+ * Disables vertical scrolling of page content.
1549
+ If set to true, there will be no vertical scrolling at all.
1550
+ */
1551
+ this.noScrolling = input(false, ...(ngDevMode ? [{ debugName: "noScrolling", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1552
+ /**
1553
+ * Defines if the footer is fixed at the very bottom of the page.
1554
+
1555
+ **Note:** When set to true the footer is fixed at the very bottom of the page, otherwise it floats over the content with a slight offset from the bottom.
1556
+ */
1557
+ this.fixedFooter = input(false, ...(ngDevMode ? [{ debugName: "fixedFooter", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1558
+ /**
1559
+ * Defines the footer visibility.
1560
+ */
1561
+ this.hideFooter = input(false, ...(ngDevMode ? [{ debugName: "hideFooter", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
1562
+ this.elementRef = inject(ElementRef);
1563
+ this.injector = inject(Injector);
1564
+ }
1565
+ get element() {
1566
+ return this.elementRef.nativeElement;
1567
+ }
1568
+ ngAfterViewInit() {
1569
+ const wcElement = this.element;
1570
+ const inputsToSync = [
1571
+ 'backgroundDesign',
1572
+ 'noScrolling',
1573
+ 'fixedFooter',
1574
+ 'hideFooter',
1575
+ ];
1576
+ // Synchronize inputs (properties)
1577
+ for (const inputName of inputsToSync) {
1578
+ // Find the corresponding camelCase signal property on the Angular component
1579
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
1580
+ // Use the Injector to run the effect in the correct context
1581
+ if (this[signalName] && typeof this[signalName] === 'function') {
1582
+ runInInjectionContext(this.injector, () => {
1583
+ effect(() => {
1584
+ // Read the signal value
1585
+ const value = this[signalName]();
1586
+ if (wcElement) {
1587
+ // Write the value to the Web Component's property
1588
+ wcElement[inputName] = value;
1589
+ }
1590
+ });
1591
+ });
1592
+ }
1593
+ }
1594
+ }
1595
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: Page, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1596
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: Page, isStandalone: true, selector: "ui5-page, [ui5-page]", inputs: { backgroundDesign: { classPropertyName: "backgroundDesign", publicName: "backgroundDesign", isSignal: true, isRequired: false, transformFunction: null }, noScrolling: { classPropertyName: "noScrolling", publicName: "noScrolling", isSignal: true, isRequired: false, transformFunction: null }, fixedFooter: { classPropertyName: "fixedFooter", publicName: "fixedFooter", isSignal: true, isRequired: false, transformFunction: null }, hideFooter: { classPropertyName: "hideFooter", publicName: "hideFooter", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5Page"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1597
+ }
1598
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: Page, decorators: [{
1599
+ type: Component,
1600
+ args: [{
1601
+ standalone: true,
1602
+ selector: 'ui5-page, [ui5-page]',
1603
+ template: '<ng-content></ng-content>',
1604
+ exportAs: 'ui5Page',
1605
+ changeDetection: ChangeDetectionStrategy.OnPush,
1606
+ }]
1607
+ }] });
1608
+
1609
+ class ProductSwitch {
1610
+ constructor() {
1611
+ // className is now passed
1612
+ this.elementRef = inject(ElementRef);
1613
+ this.injector = inject(Injector);
1614
+ }
1615
+ get element() {
1616
+ return this.elementRef.nativeElement;
1617
+ }
1618
+ ngAfterViewInit() {
1619
+ const wcElement = this.element;
1620
+ }
1621
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ProductSwitch, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1622
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: ProductSwitch, isStandalone: true, selector: "ui5-product-switch, [ui5-product-switch]", exportAs: ["ui5ProductSwitch"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1623
+ }
1624
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ProductSwitch, decorators: [{
1625
+ type: Component,
1626
+ args: [{
1627
+ standalone: true,
1628
+ selector: 'ui5-product-switch, [ui5-product-switch]',
1629
+ template: '<ng-content></ng-content>',
1630
+ exportAs: 'ui5ProductSwitch',
1631
+ changeDetection: ChangeDetectionStrategy.OnPush,
1632
+ }]
1633
+ }] });
1634
+
1635
+ class ProductSwitchItem {
1636
+ constructor() {
1637
+ /**
1638
+ * Defines the title of the component.
1639
+ */
1640
+ this.titleText = input(...(ngDevMode ? [undefined, { debugName: "titleText" }] : []));
1641
+ /**
1642
+ * Defines the subtitle of the component.
1643
+ */
1644
+ this.subtitleText = input(...(ngDevMode ? [undefined, { debugName: "subtitleText" }] : []));
1645
+ /**
1646
+ * Defines the icon to be displayed as a graphical element within the component.
1647
+
1648
+ Example:
1649
+
1650
+ `<ui5-product-switch-item icon="palette">`
1651
+
1652
+ See all the available icons in the [Icon Explorer](https://sdk.openui5.org/test-resources/sap/m/demokit/iconExplorer/webapp/index.html).
1653
+ */
1654
+ this.icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
1655
+ /**
1656
+ * Defines a target where the `targetSrc` content must be open.
1657
+
1658
+ Available options are:
1659
+
1660
+ - `_self`
1661
+ - `_top`
1662
+ - `_blank`
1663
+ - `_parent`
1664
+ - `_search`
1665
+
1666
+ **Note:** By default target will be open in the same frame as it was clicked.
1667
+ */
1668
+ this.target = input(...(ngDevMode ? [undefined, { debugName: "target" }] : []));
1669
+ /**
1670
+ * Defines the component target URI. Supports standard hyperlink behavior.
1671
+ */
1672
+ this.targetSrc = input(...(ngDevMode ? [undefined, { debugName: "targetSrc" }] : [])); // className is now passed
1673
+ /**
1674
+ * Fired when the `ui5-product-switch-item` is activated either with a
1675
+ click/tap or by using the Enter or Space key.
1676
+ */
1677
+ this.ui5Click = output();
1678
+ this.elementRef = inject(ElementRef);
1679
+ this.injector = inject(Injector);
1680
+ }
1681
+ get element() {
1682
+ return this.elementRef.nativeElement;
1683
+ }
1684
+ ngAfterViewInit() {
1685
+ const wcElement = this.element;
1686
+ const inputsToSync = [
1687
+ 'titleText',
1688
+ 'subtitleText',
1689
+ 'icon',
1690
+ 'target',
1691
+ 'targetSrc',
1692
+ ];
1693
+ // Synchronize inputs (properties)
1694
+ for (const inputName of inputsToSync) {
1695
+ // Find the corresponding camelCase signal property on the Angular component
1696
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
1697
+ // Use the Injector to run the effect in the correct context
1698
+ if (this[signalName] && typeof this[signalName] === 'function') {
1699
+ runInInjectionContext(this.injector, () => {
1700
+ effect(() => {
1701
+ // Read the signal value
1702
+ const value = this[signalName]();
1703
+ if (wcElement) {
1704
+ // Write the value to the Web Component's property
1705
+ wcElement[inputName] = value;
1706
+ }
1707
+ });
1708
+ });
1709
+ }
1710
+ }
1711
+ const outputsToSync = [
1712
+ 'ui5Click',
1713
+ ];
1714
+ // Synchronize outputs (events)
1715
+ for (const outputName of outputsToSync) {
1716
+ // Map Angular output name to UI5 web component event name
1717
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
1718
+ // Ensure the output property exists and has an emit function before adding listener
1719
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
1720
+ // Cast the listener to the correct type to satisfy TypeScript
1721
+ wcElement.addEventListener(eventName, (e) => {
1722
+ this[outputName].emit(e);
1723
+ });
1724
+ }
1725
+ }
1726
+ }
1727
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ProductSwitchItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1728
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: ProductSwitchItem, isStandalone: true, selector: "ui5-product-switch-item, [ui5-product-switch-item]", inputs: { titleText: { classPropertyName: "titleText", publicName: "titleText", isSignal: true, isRequired: false, transformFunction: null }, subtitleText: { classPropertyName: "subtitleText", publicName: "subtitleText", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null }, targetSrc: { classPropertyName: "targetSrc", publicName: "targetSrc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Click: "ui5Click" }, exportAs: ["ui5ProductSwitchItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1729
+ }
1730
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ProductSwitchItem, decorators: [{
1731
+ type: Component,
1732
+ args: [{
1733
+ standalone: true,
1734
+ selector: 'ui5-product-switch-item, [ui5-product-switch-item]',
1735
+ template: '<ng-content></ng-content>',
1736
+ exportAs: 'ui5ProductSwitchItem',
1737
+ changeDetection: ChangeDetectionStrategy.OnPush,
1738
+ }]
1739
+ }] });
1740
+
1741
+ class Search {
1742
+ constructor() {
1743
+ /**
1744
+ * Indicates whether a loading indicator should be shown in the popup.
1745
+ */
1746
+ this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1747
+ /**
1748
+ * Defines whether the value will be autcompleted to match an item.
1749
+ */
1750
+ this.noTypeahead = input(false, ...(ngDevMode ? [{ debugName: "noTypeahead", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1751
+ /**
1752
+ * Indicates whether the items picker is open.
1753
+ */
1754
+ this.open = input(false, ...(ngDevMode ? [{ debugName: "open", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1755
+ /**
1756
+ * Defines whether the clear icon of the search will be shown.
1757
+ */
1758
+ this.showClearIcon = input(false, ...(ngDevMode ? [{ debugName: "showClearIcon", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1759
+ /**
1760
+ * Defines the value of the component.
1761
+
1762
+ **Note:** The property is updated upon typing.
1763
+ */
1764
+ this.value = input("", ...(ngDevMode ? [{ debugName: "value" }] : []));
1765
+ /**
1766
+ * Defines a short hint intended to aid the user with data entry when the
1767
+ component has no value.
1768
+ */
1769
+ this.placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
1770
+ /**
1771
+ * Defines the accessible ARIA name of the component.
1772
+ */
1773
+ this.accessibleName = input(...(ngDevMode ? [undefined, { debugName: "accessibleName" }] : []));
1774
+ /**
1775
+ * Defines the accessible ARIA description of the field.
1776
+ */
1777
+ this.accessibleDescription = input(...(ngDevMode ? [undefined, { debugName: "accessibleDescription" }] : [])); // className is now passed
1778
+ /**
1779
+ * Fired when the popup is opened.
1780
+ */
1781
+ this.ui5Open = output();
1782
+ /**
1783
+ * Fired when the popup is closed.
1784
+ */
1785
+ this.ui5Close = output();
1786
+ /**
1787
+ * Fired when typing in input or clear icon is pressed.
1788
+ */
1789
+ this.ui5Input = output();
1790
+ /**
1791
+ * Fired when the scope has changed.
1792
+ */
1793
+ this.ui5ScopeChange = output();
1794
+ /**
1795
+ * Fired when the user has triggered search with Enter key or Search Button press.
1796
+ */
1797
+ this.ui5Search = output();
1798
+ this.elementRef = inject(ElementRef);
1799
+ this.injector = inject(Injector);
1800
+ }
1801
+ get element() {
1802
+ return this.elementRef.nativeElement;
1803
+ }
1804
+ ngAfterViewInit() {
1805
+ const wcElement = this.element;
1806
+ const inputsToSync = [
1807
+ 'loading',
1808
+ 'noTypeahead',
1809
+ 'open',
1810
+ 'showClearIcon',
1811
+ 'value',
1812
+ 'placeholder',
1813
+ 'accessibleName',
1814
+ 'accessibleDescription',
1815
+ ];
1816
+ // Synchronize inputs (properties)
1817
+ for (const inputName of inputsToSync) {
1818
+ // Find the corresponding camelCase signal property on the Angular component
1819
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
1820
+ // Use the Injector to run the effect in the correct context
1821
+ if (this[signalName] && typeof this[signalName] === 'function') {
1822
+ runInInjectionContext(this.injector, () => {
1823
+ effect(() => {
1824
+ // Read the signal value
1825
+ const value = this[signalName]();
1826
+ if (wcElement) {
1827
+ // Write the value to the Web Component's property
1828
+ wcElement[inputName] = value;
1829
+ }
1830
+ });
1831
+ });
1832
+ }
1833
+ }
1834
+ const outputsToSync = [
1835
+ 'ui5Open',
1836
+ 'ui5Close',
1837
+ 'ui5Input',
1838
+ 'ui5ScopeChange',
1839
+ 'ui5Search',
1840
+ ];
1841
+ // Synchronize outputs (events)
1842
+ for (const outputName of outputsToSync) {
1843
+ // Map Angular output name to UI5 web component event name
1844
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
1845
+ // Ensure the output property exists and has an emit function before adding listener
1846
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
1847
+ // Cast the listener to the correct type to satisfy TypeScript
1848
+ wcElement.addEventListener(eventName, (e) => {
1849
+ this[outputName].emit(e);
1850
+ });
1851
+ }
1852
+ }
1853
+ }
1854
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: Search, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1855
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: Search, isStandalone: true, selector: "ui5-search, [ui5-search]", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, noTypeahead: { classPropertyName: "noTypeahead", publicName: "noTypeahead", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, showClearIcon: { classPropertyName: "showClearIcon", publicName: "showClearIcon", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, accessibleName: { classPropertyName: "accessibleName", publicName: "accessibleName", isSignal: true, isRequired: false, transformFunction: null }, accessibleDescription: { classPropertyName: "accessibleDescription", publicName: "accessibleDescription", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Open: "ui5Open", ui5Close: "ui5Close", ui5Input: "ui5Input", ui5ScopeChange: "ui5ScopeChange", ui5Search: "ui5Search" }, exportAs: ["ui5Search"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1856
+ }
1857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: Search, decorators: [{
1858
+ type: Component,
1859
+ args: [{
1860
+ standalone: true,
1861
+ selector: 'ui5-search, [ui5-search]',
1862
+ template: '<ng-content></ng-content>',
1863
+ exportAs: 'ui5Search',
1864
+ changeDetection: ChangeDetectionStrategy.OnPush,
1865
+ }]
1866
+ }] });
1867
+
1868
+ class SearchItem {
1869
+ constructor() {
1870
+ /**
1871
+ * Defines the heading text of the search item.
1872
+ */
1873
+ this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
1874
+ /**
1875
+ * Defines the description that appears right under the item text, if available.
1876
+ */
1877
+ this.description = input(...(ngDevMode ? [undefined, { debugName: "description" }] : []));
1878
+ /**
1879
+ * Defines the icon name of the search item.
1880
+ **Note:** If provided, the image slot will be ignored.
1881
+ */
1882
+ this.icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
1883
+ /**
1884
+ * Defines whether the search item is selected.
1885
+ */
1886
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1887
+ /**
1888
+ * Defines whether the search item is deletable.
1889
+ */
1890
+ this.deletable = input(false, ...(ngDevMode ? [{ debugName: "deletable", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
1891
+ /**
1892
+ * Defines the scope of the search item
1893
+ */
1894
+ this.scopeName = input(...(ngDevMode ? [undefined, { debugName: "scopeName" }] : [])); // className is now passed
1895
+ /**
1896
+ * Fired when delete button is pressed.
1897
+ */
1898
+ this.ui5Delete = output();
1899
+ this.elementRef = inject(ElementRef);
1900
+ this.injector = inject(Injector);
1901
+ }
1902
+ get element() {
1903
+ return this.elementRef.nativeElement;
1904
+ }
1905
+ ngAfterViewInit() {
1906
+ const wcElement = this.element;
1907
+ const inputsToSync = [
1908
+ 'text',
1909
+ 'description',
1910
+ 'icon',
1911
+ 'selected',
1912
+ 'deletable',
1913
+ 'scopeName',
1914
+ ];
1915
+ // Synchronize inputs (properties)
1916
+ for (const inputName of inputsToSync) {
1917
+ // Find the corresponding camelCase signal property on the Angular component
1918
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
1919
+ // Use the Injector to run the effect in the correct context
1920
+ if (this[signalName] && typeof this[signalName] === 'function') {
1921
+ runInInjectionContext(this.injector, () => {
1922
+ effect(() => {
1923
+ // Read the signal value
1924
+ const value = this[signalName]();
1925
+ if (wcElement) {
1926
+ // Write the value to the Web Component's property
1927
+ wcElement[inputName] = value;
1928
+ }
1929
+ });
1930
+ });
1931
+ }
1932
+ }
1933
+ const outputsToSync = [
1934
+ 'ui5Delete',
1935
+ ];
1936
+ // Synchronize outputs (events)
1937
+ for (const outputName of outputsToSync) {
1938
+ // Map Angular output name to UI5 web component event name
1939
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
1940
+ // Ensure the output property exists and has an emit function before adding listener
1941
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
1942
+ // Cast the listener to the correct type to satisfy TypeScript
1943
+ wcElement.addEventListener(eventName, (e) => {
1944
+ this[outputName].emit(e);
1945
+ });
1946
+ }
1947
+ }
1948
+ }
1949
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SearchItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1950
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: SearchItem, isStandalone: true, selector: "ui5-search-item, [ui5-search-item]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, deletable: { classPropertyName: "deletable", publicName: "deletable", isSignal: true, isRequired: false, transformFunction: null }, scopeName: { classPropertyName: "scopeName", publicName: "scopeName", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Delete: "ui5Delete" }, exportAs: ["ui5SearchItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1951
+ }
1952
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SearchItem, decorators: [{
1953
+ type: Component,
1954
+ args: [{
1955
+ standalone: true,
1956
+ selector: 'ui5-search-item, [ui5-search-item]',
1957
+ template: '<ng-content></ng-content>',
1958
+ exportAs: 'ui5SearchItem',
1959
+ changeDetection: ChangeDetectionStrategy.OnPush,
1960
+ }]
1961
+ }] });
1962
+
1963
+ class SearchItemGroup {
1964
+ constructor() {
1965
+ // className is now passed
1966
+ this.elementRef = inject(ElementRef);
1967
+ this.injector = inject(Injector);
1968
+ }
1969
+ get element() {
1970
+ return this.elementRef.nativeElement;
1971
+ }
1972
+ ngAfterViewInit() {
1973
+ const wcElement = this.element;
1974
+ }
1975
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SearchItemGroup, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1976
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: SearchItemGroup, isStandalone: true, selector: "ui5-search-item-group, [ui5-search-item-group]", exportAs: ["ui5SearchItemGroup"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1977
+ }
1978
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SearchItemGroup, decorators: [{
1979
+ type: Component,
1980
+ args: [{
1981
+ standalone: true,
1982
+ selector: 'ui5-search-item-group, [ui5-search-item-group]',
1983
+ template: '<ng-content></ng-content>',
1984
+ exportAs: 'ui5SearchItemGroup',
1985
+ changeDetection: ChangeDetectionStrategy.OnPush,
1986
+ }]
1987
+ }] });
1988
+
1989
+ class SearchItemShowMore {
1990
+ constructor() {
1991
+ /**
1992
+ * Specifies the number of additional items available to show.
1993
+ This value replaces the placeholder (N) in the "Show more (N)" text.
1994
+ If not set, the placeholder will remain as (N).
1995
+ */
1996
+ this.itemsToShowCount = input(...(ngDevMode ? [undefined, { debugName: "itemsToShowCount" }] : []));
1997
+ /**
1998
+ * Defines whether the show more item is selected.
1999
+ */
2000
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
2001
+ /**
2002
+ * Fired when the component is activated, either with a mouse/tap
2003
+ or by pressing the Enter or Space keys.
2004
+ */
2005
+ this.ui5Click = output();
2006
+ this.elementRef = inject(ElementRef);
2007
+ this.injector = inject(Injector);
2008
+ }
2009
+ get element() {
2010
+ return this.elementRef.nativeElement;
2011
+ }
2012
+ ngAfterViewInit() {
2013
+ const wcElement = this.element;
2014
+ const inputsToSync = [
2015
+ 'itemsToShowCount',
2016
+ 'selected',
2017
+ ];
2018
+ // Synchronize inputs (properties)
2019
+ for (const inputName of inputsToSync) {
2020
+ // Find the corresponding camelCase signal property on the Angular component
2021
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
2022
+ // Use the Injector to run the effect in the correct context
2023
+ if (this[signalName] && typeof this[signalName] === 'function') {
2024
+ runInInjectionContext(this.injector, () => {
2025
+ effect(() => {
2026
+ // Read the signal value
2027
+ const value = this[signalName]();
2028
+ if (wcElement) {
2029
+ // Write the value to the Web Component's property
2030
+ wcElement[inputName] = value;
2031
+ }
2032
+ });
2033
+ });
2034
+ }
2035
+ }
2036
+ const outputsToSync = [
2037
+ 'ui5Click',
2038
+ ];
2039
+ // Synchronize outputs (events)
2040
+ for (const outputName of outputsToSync) {
2041
+ // Map Angular output name to UI5 web component event name
2042
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
2043
+ // Ensure the output property exists and has an emit function before adding listener
2044
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
2045
+ // Cast the listener to the correct type to satisfy TypeScript
2046
+ wcElement.addEventListener(eventName, (e) => {
2047
+ this[outputName].emit(e);
2048
+ });
2049
+ }
2050
+ }
2051
+ }
2052
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SearchItemShowMore, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2053
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: SearchItemShowMore, isStandalone: true, selector: "ui5-search-item-show-more, [ui5-search-item-show-more]", inputs: { itemsToShowCount: { classPropertyName: "itemsToShowCount", publicName: "itemsToShowCount", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Click: "ui5Click" }, exportAs: ["ui5SearchItemShowMore"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2054
+ }
2055
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SearchItemShowMore, decorators: [{
2056
+ type: Component,
2057
+ args: [{
2058
+ standalone: true,
2059
+ selector: 'ui5-search-item-show-more, [ui5-search-item-show-more]',
2060
+ template: '<ng-content></ng-content>',
2061
+ exportAs: 'ui5SearchItemShowMore',
2062
+ changeDetection: ChangeDetectionStrategy.OnPush,
2063
+ }]
2064
+ }] });
2065
+
2066
+ class SearchMessageArea {
2067
+ constructor() {
2068
+ /**
2069
+ * Defines the text to be displayed.
2070
+ */
2071
+ this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
2072
+ /**
2073
+ * Defines the description text to be displayed.
2074
+ */
2075
+ this.description = input(...(ngDevMode ? [undefined, { debugName: "description" }] : [])); // className is now passed
2076
+ this.elementRef = inject(ElementRef);
2077
+ this.injector = inject(Injector);
2078
+ }
2079
+ get element() {
2080
+ return this.elementRef.nativeElement;
2081
+ }
2082
+ ngAfterViewInit() {
2083
+ const wcElement = this.element;
2084
+ const inputsToSync = [
2085
+ 'text',
2086
+ 'description',
2087
+ ];
2088
+ // Synchronize inputs (properties)
2089
+ for (const inputName of inputsToSync) {
2090
+ // Find the corresponding camelCase signal property on the Angular component
2091
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
2092
+ // Use the Injector to run the effect in the correct context
2093
+ if (this[signalName] && typeof this[signalName] === 'function') {
2094
+ runInInjectionContext(this.injector, () => {
2095
+ effect(() => {
2096
+ // Read the signal value
2097
+ const value = this[signalName]();
2098
+ if (wcElement) {
2099
+ // Write the value to the Web Component's property
2100
+ wcElement[inputName] = value;
2101
+ }
2102
+ });
2103
+ });
2104
+ }
2105
+ }
2106
+ }
2107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SearchMessageArea, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: SearchMessageArea, isStandalone: true, selector: "ui5-search-message-area, [ui5-search-message-area]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5SearchMessageArea"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2109
+ }
2110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SearchMessageArea, decorators: [{
2111
+ type: Component,
2112
+ args: [{
2113
+ standalone: true,
2114
+ selector: 'ui5-search-message-area, [ui5-search-message-area]',
2115
+ template: '<ng-content></ng-content>',
2116
+ exportAs: 'ui5SearchMessageArea',
2117
+ changeDetection: ChangeDetectionStrategy.OnPush,
2118
+ }]
2119
+ }] });
2120
+
2121
+ class SearchScope {
2122
+ constructor() {
2123
+ /**
2124
+ * Defines the text of the component.
2125
+ */
2126
+ this.text = input("", ...(ngDevMode ? [{ debugName: "text" }] : []));
2127
+ /**
2128
+ * Indicates whether the item is selected
2129
+ */
2130
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
2131
+ this.elementRef = inject(ElementRef);
2132
+ this.injector = inject(Injector);
2133
+ }
2134
+ get element() {
2135
+ return this.elementRef.nativeElement;
2136
+ }
2137
+ ngAfterViewInit() {
2138
+ const wcElement = this.element;
2139
+ const inputsToSync = [
2140
+ 'text',
2141
+ 'selected',
2142
+ ];
2143
+ // Synchronize inputs (properties)
2144
+ for (const inputName of inputsToSync) {
2145
+ // Find the corresponding camelCase signal property on the Angular component
2146
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
2147
+ // Use the Injector to run the effect in the correct context
2148
+ if (this[signalName] && typeof this[signalName] === 'function') {
2149
+ runInInjectionContext(this.injector, () => {
2150
+ effect(() => {
2151
+ // Read the signal value
2152
+ const value = this[signalName]();
2153
+ if (wcElement) {
2154
+ // Write the value to the Web Component's property
2155
+ wcElement[inputName] = value;
2156
+ }
2157
+ });
2158
+ });
2159
+ }
2160
+ }
2161
+ }
2162
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SearchScope, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2163
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: SearchScope, isStandalone: true, selector: "ui5-search-scope, [ui5-search-scope]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5SearchScope"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2164
+ }
2165
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SearchScope, decorators: [{
2166
+ type: Component,
2167
+ args: [{
2168
+ standalone: true,
2169
+ selector: 'ui5-search-scope, [ui5-search-scope]',
2170
+ template: '<ng-content></ng-content>',
2171
+ exportAs: 'ui5SearchScope',
2172
+ changeDetection: ChangeDetectionStrategy.OnPush,
2173
+ }]
2174
+ }] });
2175
+
2176
+ class ShellBar {
2177
+ constructor() {
2178
+ /**
2179
+ * Defines the visibility state of the search button.
2180
+
2181
+ **Note:** The `hideSearchButton` property is in an experimental state and is a subject to change.
2182
+ */
2183
+ this.hideSearchButton = input(false, ...(ngDevMode ? [{ debugName: "hideSearchButton", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2184
+ /**
2185
+ * Disables the automatic search field expansion/collapse when the available space is not enough.
2186
+
2187
+ **Note:** The `disableSearchCollapse` property is in an experimental state and is a subject to change.
2188
+ */
2189
+ this.disableSearchCollapse = input(false, ...(ngDevMode ? [{ debugName: "disableSearchCollapse", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2190
+ /**
2191
+ * Defines the `primaryTitle`.
2192
+
2193
+ **Note:** The `primaryTitle` would be hidden on S screen size (less than approx. 700px).
2194
+ */
2195
+ this.primaryTitle = input(...(ngDevMode ? [undefined, { debugName: "primaryTitle" }] : []));
2196
+ /**
2197
+ * Defines the `secondaryTitle`.
2198
+
2199
+ **Note:** The `secondaryTitle` would be hidden on S and M screen sizes (less than approx. 1300px).
2200
+ */
2201
+ this.secondaryTitle = input(...(ngDevMode ? [undefined, { debugName: "secondaryTitle" }] : []));
2202
+ /**
2203
+ * Defines the `notificationsCount`,
2204
+ displayed in the notification icon top-right corner.
2205
+ */
2206
+ this.notificationsCount = input(...(ngDevMode ? [undefined, { debugName: "notificationsCount" }] : []));
2207
+ /**
2208
+ * Defines, if the notification icon would be displayed.
2209
+ */
2210
+ this.showNotifications = input(false, ...(ngDevMode ? [{ debugName: "showNotifications", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2211
+ /**
2212
+ * Defines, if the product switch icon would be displayed.
2213
+ */
2214
+ this.showProductSwitch = input(false, ...(ngDevMode ? [{ debugName: "showProductSwitch", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2215
+ /**
2216
+ * Defines, if the Search Field would be displayed when there is a valid `searchField` slot.
2217
+
2218
+ **Note:** By default the Search Field is not displayed.
2219
+ */
2220
+ this.showSearchField = input(false, ...(ngDevMode ? [{ debugName: "showSearchField", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2221
+ /**
2222
+ * Defines additional accessibility attributes on different areas of the component.
2223
+
2224
+ The accessibilityAttributes object has the following fields,
2225
+ where each field is an object supporting one or more accessibility attributes:
2226
+
2227
+ - **logo** - `logo.role` and `logo.name`.
2228
+ - **notifications** - `notifications.expanded` and `notifications.hasPopup`.
2229
+ - **profile** - `profile.expanded`, `profile.hasPopup` and `profile.name`.
2230
+ - **product** - `product.expanded` and `product.hasPopup`.
2231
+ - **search** - `search.hasPopup`.
2232
+ - **overflow** - `overflow.expanded` and `overflow.hasPopup`.
2233
+ - **branding** - `branding.name`.
2234
+
2235
+ The accessibility attributes support the following values:
2236
+
2237
+ - **role**: Defines the accessible ARIA role of the logo area.
2238
+ Accepts the following string values: `button` or `link`.
2239
+
2240
+ - **expanded**: Indicates whether the button, or another grouping element it controls,
2241
+ is currently expanded or collapsed.
2242
+ Accepts the following string values: `true` or `false`.
2243
+
2244
+ - **hasPopup**: Indicates the availability and type of interactive popup element,
2245
+ such as menu or dialog, that can be triggered by the button.
2246
+
2247
+ Accepts the following string values: `dialog`, `grid`, `listbox`, `menu` or `tree`.
2248
+ - **name**: Defines the accessible ARIA name of the area.
2249
+ Accepts any string.
2250
+ */
2251
+ this.accessibilityAttributes = input({}, ...(ngDevMode ? [{ debugName: "accessibilityAttributes" }] : [])); // className is now passed
2252
+ /**
2253
+ * Fired, when the notification icon is activated.
2254
+ */
2255
+ this.ui5NotificationsClick = output();
2256
+ /**
2257
+ * Fired, when the profile slot is present.
2258
+ */
2259
+ this.ui5ProfileClick = output();
2260
+ /**
2261
+ * Fired, when the product switch icon is activated.
2262
+
2263
+ **Note:** You can prevent closing of overflow popover by calling `event.preventDefault()`.
2264
+ */
2265
+ this.ui5ProductSwitchClick = output();
2266
+ /**
2267
+ * Fired, when the logo is activated.
2268
+ */
2269
+ this.ui5LogoClick = output();
2270
+ /**
2271
+ * Fired, when a menu item is activated
2272
+
2273
+ **Note:** You can prevent closing of overflow popover by calling `event.preventDefault()`.
2274
+ */
2275
+ this.ui5MenuItemClick = output();
2276
+ /**
2277
+ * Fired, when the search button is activated.
2278
+
2279
+ **Note:** You can prevent expanding/collapsing of the search field by calling `event.preventDefault()`.
2280
+ */
2281
+ this.ui5SearchButtonClick = output();
2282
+ /**
2283
+ * Fired, when the search field is expanded or collapsed.
2284
+ */
2285
+ this.ui5SearchFieldToggle = output();
2286
+ /**
2287
+ * Fired, when the search cancel button is activated.
2288
+
2289
+ **Note:** You can prevent the default behavior (clearing the search field value) by calling `event.preventDefault()`. The search will still be closed.
2290
+ **Note:** The `search-field-clear` event is in an experimental state and is a subject to change.
2291
+ */
2292
+ this.ui5SearchFieldClear = output();
2293
+ /**
2294
+ * Fired, when an item from the content slot is hidden or shown.
2295
+ **Note:** The `content-item-visibility-change` event is in an experimental state and is a subject to change.
2296
+ */
2297
+ this.ui5ContentItemVisibilityChange = output();
2298
+ this.elementRef = inject(ElementRef);
2299
+ this.injector = inject(Injector);
2300
+ }
2301
+ /**
2302
+ * Returns the `logo` DOM ref.
2303
+ * @readonly This property is managed by the web component.
2304
+ */
2305
+ get logoDomRef() {
2306
+ return this.element?.logoDomRef ?? null;
2307
+ }
2308
+ /**
2309
+ * Returns the `notifications` icon DOM ref.
2310
+ * @readonly This property is managed by the web component.
2311
+ */
2312
+ get notificationsDomRef() {
2313
+ return this.element?.notificationsDomRef ?? null;
2314
+ }
2315
+ /**
2316
+ * Returns the `overflow` icon DOM ref.
2317
+ * @readonly This property is managed by the web component.
2318
+ */
2319
+ get overflowDomRef() {
2320
+ return this.element?.overflowDomRef ?? null;
2321
+ }
2322
+ /**
2323
+ * Returns the `profile` icon DOM ref.
2324
+ * @readonly This property is managed by the web component.
2325
+ */
2326
+ get profileDomRef() {
2327
+ return this.element?.profileDomRef ?? null;
2328
+ }
2329
+ /**
2330
+ * Returns the `product-switch` icon DOM ref.
2331
+ * @readonly This property is managed by the web component.
2332
+ */
2333
+ get productSwitchDomRef() {
2334
+ return this.element?.productSwitchDomRef ?? null;
2335
+ }
2336
+ get element() {
2337
+ return this.elementRef.nativeElement;
2338
+ }
2339
+ ngAfterViewInit() {
2340
+ const wcElement = this.element;
2341
+ const inputsToSync = [
2342
+ 'hideSearchButton',
2343
+ 'disableSearchCollapse',
2344
+ 'primaryTitle',
2345
+ 'secondaryTitle',
2346
+ 'notificationsCount',
2347
+ 'showNotifications',
2348
+ 'showProductSwitch',
2349
+ 'showSearchField',
2350
+ 'accessibilityAttributes',
2351
+ ];
2352
+ // Synchronize inputs (properties)
2353
+ for (const inputName of inputsToSync) {
2354
+ // Find the corresponding camelCase signal property on the Angular component
2355
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
2356
+ // Use the Injector to run the effect in the correct context
2357
+ if (this[signalName] && typeof this[signalName] === 'function') {
2358
+ runInInjectionContext(this.injector, () => {
2359
+ effect(() => {
2360
+ // Read the signal value
2361
+ const value = this[signalName]();
2362
+ if (wcElement) {
2363
+ // Write the value to the Web Component's property
2364
+ wcElement[inputName] = value;
2365
+ }
2366
+ });
2367
+ });
2368
+ }
2369
+ }
2370
+ const outputsToSync = [
2371
+ 'ui5NotificationsClick',
2372
+ 'ui5ProfileClick',
2373
+ 'ui5ProductSwitchClick',
2374
+ 'ui5LogoClick',
2375
+ 'ui5MenuItemClick',
2376
+ 'ui5SearchButtonClick',
2377
+ 'ui5SearchFieldToggle',
2378
+ 'ui5SearchFieldClear',
2379
+ 'ui5ContentItemVisibilityChange',
2380
+ ];
2381
+ // Synchronize outputs (events)
2382
+ for (const outputName of outputsToSync) {
2383
+ // Map Angular output name to UI5 web component event name
2384
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
2385
+ // Ensure the output property exists and has an emit function before adding listener
2386
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
2387
+ // Cast the listener to the correct type to satisfy TypeScript
2388
+ wcElement.addEventListener(eventName, (e) => {
2389
+ this[outputName].emit(e);
2390
+ });
2391
+ }
2392
+ }
2393
+ }
2394
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ShellBar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2395
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: ShellBar, isStandalone: true, selector: "ui5-shellbar, [ui5-shellbar]", inputs: { hideSearchButton: { classPropertyName: "hideSearchButton", publicName: "hideSearchButton", isSignal: true, isRequired: false, transformFunction: null }, disableSearchCollapse: { classPropertyName: "disableSearchCollapse", publicName: "disableSearchCollapse", isSignal: true, isRequired: false, transformFunction: null }, primaryTitle: { classPropertyName: "primaryTitle", publicName: "primaryTitle", isSignal: true, isRequired: false, transformFunction: null }, secondaryTitle: { classPropertyName: "secondaryTitle", publicName: "secondaryTitle", isSignal: true, isRequired: false, transformFunction: null }, notificationsCount: { classPropertyName: "notificationsCount", publicName: "notificationsCount", isSignal: true, isRequired: false, transformFunction: null }, showNotifications: { classPropertyName: "showNotifications", publicName: "showNotifications", isSignal: true, isRequired: false, transformFunction: null }, showProductSwitch: { classPropertyName: "showProductSwitch", publicName: "showProductSwitch", isSignal: true, isRequired: false, transformFunction: null }, showSearchField: { classPropertyName: "showSearchField", publicName: "showSearchField", isSignal: true, isRequired: false, transformFunction: null }, accessibilityAttributes: { classPropertyName: "accessibilityAttributes", publicName: "accessibilityAttributes", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5NotificationsClick: "ui5NotificationsClick", ui5ProfileClick: "ui5ProfileClick", ui5ProductSwitchClick: "ui5ProductSwitchClick", ui5LogoClick: "ui5LogoClick", ui5MenuItemClick: "ui5MenuItemClick", ui5SearchButtonClick: "ui5SearchButtonClick", ui5SearchFieldToggle: "ui5SearchFieldToggle", ui5SearchFieldClear: "ui5SearchFieldClear", ui5ContentItemVisibilityChange: "ui5ContentItemVisibilityChange" }, exportAs: ["ui5ShellBar"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2396
+ }
2397
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ShellBar, decorators: [{
2398
+ type: Component,
2399
+ args: [{
2400
+ standalone: true,
2401
+ selector: 'ui5-shellbar, [ui5-shellbar]',
2402
+ template: '<ng-content></ng-content>',
2403
+ exportAs: 'ui5ShellBar',
2404
+ changeDetection: ChangeDetectionStrategy.OnPush,
2405
+ }]
2406
+ }] });
2407
+
2408
+ class ShellBarBranding {
2409
+ constructor() {
2410
+ /**
2411
+ * Defines the component href.
2412
+
2413
+ **Note:** Standard hyperlink behavior is supported.
2414
+ */
2415
+ this.href = input(...(ngDevMode ? [undefined, { debugName: "href" }] : []));
2416
+ /**
2417
+ * Defines the component target.
2418
+
2419
+ **Notes:**
2420
+
2421
+ - `_self`
2422
+ - `_top`
2423
+ - `_blank`
2424
+ - `_parent`
2425
+ - `_search`
2426
+
2427
+ **This property must only be used when the `href` property is set.**
2428
+ */
2429
+ this.target = input(...(ngDevMode ? [undefined, { debugName: "target" }] : []));
2430
+ /**
2431
+ * Defines the text alternative of the component.
2432
+ If not provided a default text alternative will be set, if present.
2433
+ */
2434
+ this.accessibleName = input(...(ngDevMode ? [undefined, { debugName: "accessibleName" }] : [])); // className is now passed
2435
+ /**
2436
+ * Fired, when the logo is activated.
2437
+ */
2438
+ this.ui5Click = output();
2439
+ this.elementRef = inject(ElementRef);
2440
+ this.injector = inject(Injector);
2441
+ }
2442
+ get element() {
2443
+ return this.elementRef.nativeElement;
2444
+ }
2445
+ ngAfterViewInit() {
2446
+ const wcElement = this.element;
2447
+ const inputsToSync = [
2448
+ 'href',
2449
+ 'target',
2450
+ 'accessibleName',
2451
+ ];
2452
+ // Synchronize inputs (properties)
2453
+ for (const inputName of inputsToSync) {
2454
+ // Find the corresponding camelCase signal property on the Angular component
2455
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
2456
+ // Use the Injector to run the effect in the correct context
2457
+ if (this[signalName] && typeof this[signalName] === 'function') {
2458
+ runInInjectionContext(this.injector, () => {
2459
+ effect(() => {
2460
+ // Read the signal value
2461
+ const value = this[signalName]();
2462
+ if (wcElement) {
2463
+ // Write the value to the Web Component's property
2464
+ wcElement[inputName] = value;
2465
+ }
2466
+ });
2467
+ });
2468
+ }
2469
+ }
2470
+ const outputsToSync = [
2471
+ 'ui5Click',
2472
+ ];
2473
+ // Synchronize outputs (events)
2474
+ for (const outputName of outputsToSync) {
2475
+ // Map Angular output name to UI5 web component event name
2476
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
2477
+ // Ensure the output property exists and has an emit function before adding listener
2478
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
2479
+ // Cast the listener to the correct type to satisfy TypeScript
2480
+ wcElement.addEventListener(eventName, (e) => {
2481
+ this[outputName].emit(e);
2482
+ });
2483
+ }
2484
+ }
2485
+ }
2486
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ShellBarBranding, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2487
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: ShellBarBranding, isStandalone: true, selector: "ui5-shellbar-branding, [ui5-shellbar-branding]", inputs: { href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null }, accessibleName: { classPropertyName: "accessibleName", publicName: "accessibleName", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Click: "ui5Click" }, exportAs: ["ui5ShellBarBranding"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2488
+ }
2489
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ShellBarBranding, decorators: [{
2490
+ type: Component,
2491
+ args: [{
2492
+ standalone: true,
2493
+ selector: 'ui5-shellbar-branding, [ui5-shellbar-branding]',
2494
+ template: '<ng-content></ng-content>',
2495
+ exportAs: 'ui5ShellBarBranding',
2496
+ changeDetection: ChangeDetectionStrategy.OnPush,
2497
+ }]
2498
+ }] });
2499
+
2500
+ class ShellBarItem {
2501
+ constructor() {
2502
+ /**
2503
+ * Defines the name of the item's icon.
2504
+ */
2505
+ this.icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
2506
+ /**
2507
+ * Defines the item text.
2508
+
2509
+ **Note:** The text is only displayed inside the overflow popover list view.
2510
+ */
2511
+ this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
2512
+ /**
2513
+ * Defines the count displayed in the top-right corner.
2514
+ */
2515
+ this.count = input(...(ngDevMode ? [undefined, { debugName: "count" }] : []));
2516
+ /**
2517
+ * Defines additional accessibility attributes on Shellbar Items.
2518
+
2519
+ The accessibility attributes support the following values:
2520
+
2521
+ - **expanded**: Indicates whether the button, or another grouping element it controls,
2522
+ is currently expanded or collapsed.
2523
+ Accepts the following string values: `true` or `false`.
2524
+
2525
+ - **hasPopup**: Indicates the availability and type of interactive popup element,
2526
+ such as menu or dialog, that can be triggered by the button.
2527
+
2528
+ - **controls**: Identifies the element (or elements) whose contents
2529
+ or presence are controlled by the component.
2530
+ Accepts a lowercase string value, referencing the ID of the element it controls.
2531
+ */
2532
+ this.accessibilityAttributes = input({}, ...(ngDevMode ? [{ debugName: "accessibilityAttributes" }] : [])); // className is now passed
2533
+ /**
2534
+ * Fired, when the item is pressed.
2535
+ */
2536
+ this.ui5Click = output();
2537
+ this.elementRef = inject(ElementRef);
2538
+ this.injector = inject(Injector);
2539
+ }
2540
+ get element() {
2541
+ return this.elementRef.nativeElement;
2542
+ }
2543
+ ngAfterViewInit() {
2544
+ const wcElement = this.element;
2545
+ const inputsToSync = [
2546
+ 'icon',
2547
+ 'text',
2548
+ 'count',
2549
+ 'accessibilityAttributes',
2550
+ ];
2551
+ // Synchronize inputs (properties)
2552
+ for (const inputName of inputsToSync) {
2553
+ // Find the corresponding camelCase signal property on the Angular component
2554
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
2555
+ // Use the Injector to run the effect in the correct context
2556
+ if (this[signalName] && typeof this[signalName] === 'function') {
2557
+ runInInjectionContext(this.injector, () => {
2558
+ effect(() => {
2559
+ // Read the signal value
2560
+ const value = this[signalName]();
2561
+ if (wcElement) {
2562
+ // Write the value to the Web Component's property
2563
+ wcElement[inputName] = value;
2564
+ }
2565
+ });
2566
+ });
2567
+ }
2568
+ }
2569
+ const outputsToSync = [
2570
+ 'ui5Click',
2571
+ ];
2572
+ // Synchronize outputs (events)
2573
+ for (const outputName of outputsToSync) {
2574
+ // Map Angular output name to UI5 web component event name
2575
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
2576
+ // Ensure the output property exists and has an emit function before adding listener
2577
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
2578
+ // Cast the listener to the correct type to satisfy TypeScript
2579
+ wcElement.addEventListener(eventName, (e) => {
2580
+ this[outputName].emit(e);
2581
+ });
2582
+ }
2583
+ }
2584
+ }
2585
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ShellBarItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2586
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: ShellBarItem, isStandalone: true, selector: "ui5-shellbar-item, [ui5-shellbar-item]", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, count: { classPropertyName: "count", publicName: "count", isSignal: true, isRequired: false, transformFunction: null }, accessibilityAttributes: { classPropertyName: "accessibilityAttributes", publicName: "accessibilityAttributes", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Click: "ui5Click" }, exportAs: ["ui5ShellBarItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2587
+ }
2588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ShellBarItem, decorators: [{
2589
+ type: Component,
2590
+ args: [{
2591
+ standalone: true,
2592
+ selector: 'ui5-shellbar-item, [ui5-shellbar-item]',
2593
+ template: '<ng-content></ng-content>',
2594
+ exportAs: 'ui5ShellBarItem',
2595
+ changeDetection: ChangeDetectionStrategy.OnPush,
2596
+ }]
2597
+ }] });
2598
+
2599
+ class ShellBarSearch {
2600
+ constructor() {
2601
+ /**
2602
+ * Indicates whether the suggestions popover should be opened on focus.
2603
+ */
2604
+ this.autoOpen = input(false, ...(ngDevMode ? [{ debugName: "autoOpen", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2605
+ /**
2606
+ * Indicates whether a loading indicator should be shown in the popup.
2607
+ */
2608
+ this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2609
+ /**
2610
+ * Defines whether the value will be autcompleted to match an item.
2611
+ */
2612
+ this.noTypeahead = input(false, ...(ngDevMode ? [{ debugName: "noTypeahead", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2613
+ /**
2614
+ * Indicates whether the items picker is open.
2615
+ */
2616
+ this.open = input(false, ...(ngDevMode ? [{ debugName: "open", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2617
+ /**
2618
+ * Defines whether the clear icon of the search will be shown.
2619
+ */
2620
+ this.showClearIcon = input(false, ...(ngDevMode ? [{ debugName: "showClearIcon", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2621
+ /**
2622
+ * Defines the value of the component.
2623
+
2624
+ **Note:** The property is updated upon typing.
2625
+ */
2626
+ this.value = input("", ...(ngDevMode ? [{ debugName: "value" }] : []));
2627
+ /**
2628
+ * Defines a short hint intended to aid the user with data entry when the
2629
+ component has no value.
2630
+ */
2631
+ this.placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
2632
+ /**
2633
+ * Defines the accessible ARIA name of the component.
2634
+ */
2635
+ this.accessibleName = input(...(ngDevMode ? [undefined, { debugName: "accessibleName" }] : []));
2636
+ /**
2637
+ * Defines the accessible ARIA description of the field.
2638
+ */
2639
+ this.accessibleDescription = input(...(ngDevMode ? [undefined, { debugName: "accessibleDescription" }] : [])); // className is now passed
2640
+ /**
2641
+ * Fired when the popup is opened.
2642
+ */
2643
+ this.ui5Open = output();
2644
+ /**
2645
+ * Fired when the popup is closed.
2646
+ */
2647
+ this.ui5Close = output();
2648
+ /**
2649
+ * Fired when typing in input or clear icon is pressed.
2650
+ */
2651
+ this.ui5Input = output();
2652
+ /**
2653
+ * Fired when the scope has changed.
2654
+ */
2655
+ this.ui5ScopeChange = output();
2656
+ /**
2657
+ * Fired when the user has triggered search with Enter key or Search Button press.
2658
+ */
2659
+ this.ui5Search = output();
2660
+ this.elementRef = inject(ElementRef);
2661
+ this.injector = inject(Injector);
2662
+ }
2663
+ get element() {
2664
+ return this.elementRef.nativeElement;
2665
+ }
2666
+ ngAfterViewInit() {
2667
+ const wcElement = this.element;
2668
+ const inputsToSync = [
2669
+ 'autoOpen',
2670
+ 'loading',
2671
+ 'noTypeahead',
2672
+ 'open',
2673
+ 'showClearIcon',
2674
+ 'value',
2675
+ 'placeholder',
2676
+ 'accessibleName',
2677
+ 'accessibleDescription',
2678
+ ];
2679
+ // Synchronize inputs (properties)
2680
+ for (const inputName of inputsToSync) {
2681
+ // Find the corresponding camelCase signal property on the Angular component
2682
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
2683
+ // Use the Injector to run the effect in the correct context
2684
+ if (this[signalName] && typeof this[signalName] === 'function') {
2685
+ runInInjectionContext(this.injector, () => {
2686
+ effect(() => {
2687
+ // Read the signal value
2688
+ const value = this[signalName]();
2689
+ if (wcElement) {
2690
+ // Write the value to the Web Component's property
2691
+ wcElement[inputName] = value;
2692
+ }
2693
+ });
2694
+ });
2695
+ }
2696
+ }
2697
+ const outputsToSync = [
2698
+ 'ui5Open',
2699
+ 'ui5Close',
2700
+ 'ui5Input',
2701
+ 'ui5ScopeChange',
2702
+ 'ui5Search',
2703
+ ];
2704
+ // Synchronize outputs (events)
2705
+ for (const outputName of outputsToSync) {
2706
+ // Map Angular output name to UI5 web component event name
2707
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
2708
+ // Ensure the output property exists and has an emit function before adding listener
2709
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
2710
+ // Cast the listener to the correct type to satisfy TypeScript
2711
+ wcElement.addEventListener(eventName, (e) => {
2712
+ this[outputName].emit(e);
2713
+ });
2714
+ }
2715
+ }
2716
+ }
2717
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ShellBarSearch, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2718
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: ShellBarSearch, isStandalone: true, selector: "ui5-shellbar-search, [ui5-shellbar-search]", inputs: { autoOpen: { classPropertyName: "autoOpen", publicName: "autoOpen", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, noTypeahead: { classPropertyName: "noTypeahead", publicName: "noTypeahead", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, showClearIcon: { classPropertyName: "showClearIcon", publicName: "showClearIcon", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, accessibleName: { classPropertyName: "accessibleName", publicName: "accessibleName", isSignal: true, isRequired: false, transformFunction: null }, accessibleDescription: { classPropertyName: "accessibleDescription", publicName: "accessibleDescription", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Open: "ui5Open", ui5Close: "ui5Close", ui5Input: "ui5Input", ui5ScopeChange: "ui5ScopeChange", ui5Search: "ui5Search" }, exportAs: ["ui5ShellBarSearch"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2719
+ }
2720
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ShellBarSearch, decorators: [{
2721
+ type: Component,
2722
+ args: [{
2723
+ standalone: true,
2724
+ selector: 'ui5-shellbar-search, [ui5-shellbar-search]',
2725
+ template: '<ng-content></ng-content>',
2726
+ exportAs: 'ui5ShellBarSearch',
2727
+ changeDetection: ChangeDetectionStrategy.OnPush,
2728
+ }]
2729
+ }] });
2730
+
2731
+ class ShellBarSpacer {
2732
+ constructor() {
2733
+ // className is now passed
2734
+ this.elementRef = inject(ElementRef);
2735
+ this.injector = inject(Injector);
2736
+ }
2737
+ get element() {
2738
+ return this.elementRef.nativeElement;
2739
+ }
2740
+ ngAfterViewInit() {
2741
+ const wcElement = this.element;
2742
+ }
2743
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ShellBarSpacer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2744
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: ShellBarSpacer, isStandalone: true, selector: "ui5-shellbar-spacer, [ui5-shellbar-spacer]", exportAs: ["ui5ShellBarSpacer"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2745
+ }
2746
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ShellBarSpacer, decorators: [{
2747
+ type: Component,
2748
+ args: [{
2749
+ standalone: true,
2750
+ selector: 'ui5-shellbar-spacer, [ui5-shellbar-spacer]',
2751
+ template: '<ng-content></ng-content>',
2752
+ exportAs: 'ui5ShellBarSpacer',
2753
+ changeDetection: ChangeDetectionStrategy.OnPush,
2754
+ }]
2755
+ }] });
2756
+
2757
+ class SideNavigation {
2758
+ constructor() {
2759
+ /**
2760
+ * Defines whether the `ui5-side-navigation` is expanded or collapsed.
2761
+
2762
+ **Note:** The collapsed mode is not supported on phones.
2763
+ The `ui5-side-navigation` component is intended to be used within a `ui5-navigation-layout`
2764
+ component to ensure proper responsive behavior. If you choose not to use the
2765
+ `ui5-navigation-layout`, you will need to implement the appropriate responsive patterns yourself,
2766
+ particularly for phones where the collapsed mode should not be used.
2767
+ */
2768
+ this.collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2769
+ /**
2770
+ * Defines the accessible ARIA name of the component.
2771
+ */
2772
+ this.accessibleName = input(...(ngDevMode ? [undefined, { debugName: "accessibleName" }] : [])); // className is now passed
2773
+ /**
2774
+ * Fired when the selection has changed via user interaction
2775
+ */
2776
+ this.ui5SelectionChange = output();
2777
+ this.elementRef = inject(ElementRef);
2778
+ this.injector = inject(Injector);
2779
+ }
2780
+ get element() {
2781
+ return this.elementRef.nativeElement;
2782
+ }
2783
+ ngAfterViewInit() {
2784
+ const wcElement = this.element;
2785
+ const inputsToSync = [
2786
+ 'collapsed',
2787
+ 'accessibleName',
2788
+ ];
2789
+ // Synchronize inputs (properties)
2790
+ for (const inputName of inputsToSync) {
2791
+ // Find the corresponding camelCase signal property on the Angular component
2792
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
2793
+ // Use the Injector to run the effect in the correct context
2794
+ if (this[signalName] && typeof this[signalName] === 'function') {
2795
+ runInInjectionContext(this.injector, () => {
2796
+ effect(() => {
2797
+ // Read the signal value
2798
+ const value = this[signalName]();
2799
+ if (wcElement) {
2800
+ // Write the value to the Web Component's property
2801
+ wcElement[inputName] = value;
2802
+ }
2803
+ });
2804
+ });
2805
+ }
2806
+ }
2807
+ const outputsToSync = [
2808
+ 'ui5SelectionChange',
2809
+ ];
2810
+ // Synchronize outputs (events)
2811
+ for (const outputName of outputsToSync) {
2812
+ // Map Angular output name to UI5 web component event name
2813
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
2814
+ // Ensure the output property exists and has an emit function before adding listener
2815
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
2816
+ // Cast the listener to the correct type to satisfy TypeScript
2817
+ wcElement.addEventListener(eventName, (e) => {
2818
+ this[outputName].emit(e);
2819
+ });
2820
+ }
2821
+ }
2822
+ }
2823
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SideNavigation, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2824
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: SideNavigation, isStandalone: true, selector: "ui5-side-navigation, [ui5-side-navigation]", inputs: { collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, accessibleName: { classPropertyName: "accessibleName", publicName: "accessibleName", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5SelectionChange: "ui5SelectionChange" }, exportAs: ["ui5SideNavigation"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2825
+ }
2826
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SideNavigation, decorators: [{
2827
+ type: Component,
2828
+ args: [{
2829
+ standalone: true,
2830
+ selector: 'ui5-side-navigation, [ui5-side-navigation]',
2831
+ template: '<ng-content></ng-content>',
2832
+ exportAs: 'ui5SideNavigation',
2833
+ changeDetection: ChangeDetectionStrategy.OnPush,
2834
+ }]
2835
+ }] });
2836
+
2837
+ class SideNavigationGroup {
2838
+ constructor() {
2839
+ /**
2840
+ * Defines if the item is expanded
2841
+ */
2842
+ this.expanded = input(false, ...(ngDevMode ? [{ debugName: "expanded", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2843
+ /**
2844
+ * Defines the text of the item.
2845
+ */
2846
+ this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
2847
+ /**
2848
+ * Defines whether the component is disabled.
2849
+ A disabled component can't be pressed or
2850
+ focused, and it is not in the tab chain.
2851
+ */
2852
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2853
+ /**
2854
+ * Defines the tooltip of the component.
2855
+
2856
+ A tooltip attribute should be provided, in order to represent meaning/function,
2857
+ when the component is collapsed ("icon only" design is visualized) or the item text is truncated.
2858
+ */
2859
+ this.tooltip = input(...(ngDevMode ? [undefined, { debugName: "tooltip" }] : [])); // className is now passed
2860
+ this.elementRef = inject(ElementRef);
2861
+ this.injector = inject(Injector);
2862
+ }
2863
+ get element() {
2864
+ return this.elementRef.nativeElement;
2865
+ }
2866
+ ngAfterViewInit() {
2867
+ const wcElement = this.element;
2868
+ const inputsToSync = [
2869
+ 'expanded',
2870
+ 'text',
2871
+ 'disabled',
2872
+ 'tooltip',
2873
+ ];
2874
+ // Synchronize inputs (properties)
2875
+ for (const inputName of inputsToSync) {
2876
+ // Find the corresponding camelCase signal property on the Angular component
2877
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
2878
+ // Use the Injector to run the effect in the correct context
2879
+ if (this[signalName] && typeof this[signalName] === 'function') {
2880
+ runInInjectionContext(this.injector, () => {
2881
+ effect(() => {
2882
+ // Read the signal value
2883
+ const value = this[signalName]();
2884
+ if (wcElement) {
2885
+ // Write the value to the Web Component's property
2886
+ wcElement[inputName] = value;
2887
+ }
2888
+ });
2889
+ });
2890
+ }
2891
+ }
2892
+ }
2893
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SideNavigationGroup, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2894
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: SideNavigationGroup, isStandalone: true, selector: "ui5-side-navigation-group, [ui5-side-navigation-group]", inputs: { expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5SideNavigationGroup"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2895
+ }
2896
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SideNavigationGroup, decorators: [{
2897
+ type: Component,
2898
+ args: [{
2899
+ standalone: true,
2900
+ selector: 'ui5-side-navigation-group, [ui5-side-navigation-group]',
2901
+ template: '<ng-content></ng-content>',
2902
+ exportAs: 'ui5SideNavigationGroup',
2903
+ changeDetection: ChangeDetectionStrategy.OnPush,
2904
+ }]
2905
+ }] });
2906
+
2907
+ class SideNavigationItem {
2908
+ constructor() {
2909
+ /**
2910
+ * Defines if the item is expanded
2911
+ */
2912
+ this.expanded = input(false, ...(ngDevMode ? [{ debugName: "expanded", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2913
+ /**
2914
+ * Defines the icon of the item.
2915
+
2916
+ The SAP-icons font provides numerous options.
2917
+
2918
+ See all the available icons in the [Icon Explorer](https://sdk.openui5.org/test-resources/sap/m/demokit/iconExplorer/webapp/index.html).
2919
+ */
2920
+ this.icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
2921
+ /**
2922
+ * Defines whether the item is selected.
2923
+
2924
+ **Note:** Items that have a set `href` and `target` set to `_blank` should not be selectable.
2925
+ */
2926
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2927
+ /**
2928
+ * Defines the link target URI. Supports standard hyperlink behavior.
2929
+ If a JavaScript action should be triggered,
2930
+ this should not be set, but instead an event handler
2931
+ for the `click` event should be registered.
2932
+ */
2933
+ this.href = input(...(ngDevMode ? [undefined, { debugName: "href" }] : []));
2934
+ /**
2935
+ * Defines the component target.
2936
+
2937
+ Possible values:
2938
+
2939
+ - `_self`
2940
+ - `_top`
2941
+ - `_blank`
2942
+ - `_parent`
2943
+ - `framename`
2944
+
2945
+ **Note:** Items that have a defined `href` and `target`
2946
+ attribute set to `_blank` should not be selectable.
2947
+ */
2948
+ this.target = input(...(ngDevMode ? [undefined, { debugName: "target" }] : []));
2949
+ /**
2950
+ * Item design.
2951
+
2952
+ **Note:** Items with "Action" design must not have sub-items.
2953
+ */
2954
+ this.design = input("Default", ...(ngDevMode ? [{ debugName: "design" }] : []));
2955
+ /**
2956
+ * Indicates whether the navigation item is selectable. By default, all items are selectable unless specifically marked as unselectable.
2957
+
2958
+ When a parent item is marked as unselectable, selecting it will only expand or collapse its sub-items.
2959
+ To improve user experience do not mix unselectable parent items with selectable parent items in a single side navigation.
2960
+
2961
+
2962
+ **Guidelines**:
2963
+ - Items with an assigned `href` and a target of `_blank` should be marked as unselectable.
2964
+ - Items that trigger actions (with design "Action") should be marked as unselectable.
2965
+ */
2966
+ this.unselectable = input(false, ...(ngDevMode ? [{ debugName: "unselectable", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2967
+ /**
2968
+ * Defines the additional accessibility attributes that will be applied to the component.
2969
+ The following fields are supported:
2970
+
2971
+ - **hasPopup**: Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by the button.
2972
+ Accepts the following string values: `dialog`, `grid`, `listbox`, `menu` or `tree`.
2973
+
2974
+ **Note:** Do not use it on parent items, as it will be overridden if the item is in the overflow menu.
2975
+ */
2976
+ this.accessibilityAttributes = input({}, ...(ngDevMode ? [{ debugName: "accessibilityAttributes" }] : []));
2977
+ /**
2978
+ * Defines the text of the item.
2979
+ */
2980
+ this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
2981
+ /**
2982
+ * Defines whether the component is disabled.
2983
+ A disabled component can't be pressed or
2984
+ focused, and it is not in the tab chain.
2985
+ */
2986
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
2987
+ /**
2988
+ * Defines the tooltip of the component.
2989
+
2990
+ A tooltip attribute should be provided, in order to represent meaning/function,
2991
+ when the component is collapsed ("icon only" design is visualized) or the item text is truncated.
2992
+ */
2993
+ this.tooltip = input(...(ngDevMode ? [undefined, { debugName: "tooltip" }] : [])); // className is now passed
2994
+ /**
2995
+ * Fired when the component is activated either with a click/tap or by using the [Enter] or [Space] keys.
2996
+ */
2997
+ this.ui5Click = output();
2998
+ this.elementRef = inject(ElementRef);
2999
+ this.injector = inject(Injector);
3000
+ }
3001
+ get element() {
3002
+ return this.elementRef.nativeElement;
3003
+ }
3004
+ ngAfterViewInit() {
3005
+ const wcElement = this.element;
3006
+ const inputsToSync = [
3007
+ 'expanded',
3008
+ 'icon',
3009
+ 'selected',
3010
+ 'href',
3011
+ 'target',
3012
+ 'design',
3013
+ 'unselectable',
3014
+ 'accessibilityAttributes',
3015
+ 'text',
3016
+ 'disabled',
3017
+ 'tooltip',
3018
+ ];
3019
+ // Synchronize inputs (properties)
3020
+ for (const inputName of inputsToSync) {
3021
+ // Find the corresponding camelCase signal property on the Angular component
3022
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
3023
+ // Use the Injector to run the effect in the correct context
3024
+ if (this[signalName] && typeof this[signalName] === 'function') {
3025
+ runInInjectionContext(this.injector, () => {
3026
+ effect(() => {
3027
+ // Read the signal value
3028
+ const value = this[signalName]();
3029
+ if (wcElement) {
3030
+ // Write the value to the Web Component's property
3031
+ wcElement[inputName] = value;
3032
+ }
3033
+ });
3034
+ });
3035
+ }
3036
+ }
3037
+ const outputsToSync = [
3038
+ 'ui5Click',
3039
+ ];
3040
+ // Synchronize outputs (events)
3041
+ for (const outputName of outputsToSync) {
3042
+ // Map Angular output name to UI5 web component event name
3043
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
3044
+ // Ensure the output property exists and has an emit function before adding listener
3045
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
3046
+ // Cast the listener to the correct type to satisfy TypeScript
3047
+ wcElement.addEventListener(eventName, (e) => {
3048
+ this[outputName].emit(e);
3049
+ });
3050
+ }
3051
+ }
3052
+ }
3053
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SideNavigationItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3054
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: SideNavigationItem, isStandalone: true, selector: "ui5-side-navigation-item, [ui5-side-navigation-item]", inputs: { expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null }, design: { classPropertyName: "design", publicName: "design", isSignal: true, isRequired: false, transformFunction: null }, unselectable: { classPropertyName: "unselectable", publicName: "unselectable", isSignal: true, isRequired: false, transformFunction: null }, accessibilityAttributes: { classPropertyName: "accessibilityAttributes", publicName: "accessibilityAttributes", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Click: "ui5Click" }, exportAs: ["ui5SideNavigationItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3055
+ }
3056
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SideNavigationItem, decorators: [{
3057
+ type: Component,
3058
+ args: [{
3059
+ standalone: true,
3060
+ selector: 'ui5-side-navigation-item, [ui5-side-navigation-item]',
3061
+ template: '<ng-content></ng-content>',
3062
+ exportAs: 'ui5SideNavigationItem',
3063
+ changeDetection: ChangeDetectionStrategy.OnPush,
3064
+ }]
3065
+ }] });
3066
+
3067
+ class SideNavigationSubItem {
3068
+ constructor() {
3069
+ /**
3070
+ * Defines the icon of the item.
3071
+
3072
+ The SAP-icons font provides numerous options.
3073
+
3074
+ See all the available icons in the [Icon Explorer](https://sdk.openui5.org/test-resources/sap/m/demokit/iconExplorer/webapp/index.html).
3075
+ */
3076
+ this.icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
3077
+ /**
3078
+ * Defines whether the item is selected.
3079
+
3080
+ **Note:** Items that have a set `href` and `target` set to `_blank` should not be selectable.
3081
+ */
3082
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3083
+ /**
3084
+ * Defines the link target URI. Supports standard hyperlink behavior.
3085
+ If a JavaScript action should be triggered,
3086
+ this should not be set, but instead an event handler
3087
+ for the `click` event should be registered.
3088
+ */
3089
+ this.href = input(...(ngDevMode ? [undefined, { debugName: "href" }] : []));
3090
+ /**
3091
+ * Defines the component target.
3092
+
3093
+ Possible values:
3094
+
3095
+ - `_self`
3096
+ - `_top`
3097
+ - `_blank`
3098
+ - `_parent`
3099
+ - `framename`
3100
+
3101
+ **Note:** Items that have a defined `href` and `target`
3102
+ attribute set to `_blank` should not be selectable.
3103
+ */
3104
+ this.target = input(...(ngDevMode ? [undefined, { debugName: "target" }] : []));
3105
+ /**
3106
+ * Item design.
3107
+
3108
+ **Note:** Items with "Action" design must not have sub-items.
3109
+ */
3110
+ this.design = input("Default", ...(ngDevMode ? [{ debugName: "design" }] : []));
3111
+ /**
3112
+ * Indicates whether the navigation item is selectable. By default, all items are selectable unless specifically marked as unselectable.
3113
+
3114
+ When a parent item is marked as unselectable, selecting it will only expand or collapse its sub-items.
3115
+ To improve user experience do not mix unselectable parent items with selectable parent items in a single side navigation.
3116
+
3117
+
3118
+ **Guidelines**:
3119
+ - Items with an assigned `href` and a target of `_blank` should be marked as unselectable.
3120
+ - Items that trigger actions (with design "Action") should be marked as unselectable.
3121
+ */
3122
+ this.unselectable = input(false, ...(ngDevMode ? [{ debugName: "unselectable", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3123
+ /**
3124
+ * Defines the additional accessibility attributes that will be applied to the component.
3125
+ The following fields are supported:
3126
+
3127
+ - **hasPopup**: Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by the button.
3128
+ Accepts the following string values: `dialog`, `grid`, `listbox`, `menu` or `tree`.
3129
+
3130
+ **Note:** Do not use it on parent items, as it will be overridden if the item is in the overflow menu.
3131
+ */
3132
+ this.accessibilityAttributes = input({}, ...(ngDevMode ? [{ debugName: "accessibilityAttributes" }] : []));
3133
+ /**
3134
+ * Defines the text of the item.
3135
+ */
3136
+ this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
3137
+ /**
3138
+ * Defines whether the component is disabled.
3139
+ A disabled component can't be pressed or
3140
+ focused, and it is not in the tab chain.
3141
+ */
3142
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3143
+ /**
3144
+ * Defines the tooltip of the component.
3145
+
3146
+ A tooltip attribute should be provided, in order to represent meaning/function,
3147
+ when the component is collapsed ("icon only" design is visualized) or the item text is truncated.
3148
+ */
3149
+ this.tooltip = input(...(ngDevMode ? [undefined, { debugName: "tooltip" }] : [])); // className is now passed
3150
+ /**
3151
+ * Fired when the component is activated either with a click/tap or by using the [Enter] or [Space] keys.
3152
+ */
3153
+ this.ui5Click = output();
3154
+ this.elementRef = inject(ElementRef);
3155
+ this.injector = inject(Injector);
3156
+ }
3157
+ get element() {
3158
+ return this.elementRef.nativeElement;
3159
+ }
3160
+ ngAfterViewInit() {
3161
+ const wcElement = this.element;
3162
+ const inputsToSync = [
3163
+ 'icon',
3164
+ 'selected',
3165
+ 'href',
3166
+ 'target',
3167
+ 'design',
3168
+ 'unselectable',
3169
+ 'accessibilityAttributes',
3170
+ 'text',
3171
+ 'disabled',
3172
+ 'tooltip',
3173
+ ];
3174
+ // Synchronize inputs (properties)
3175
+ for (const inputName of inputsToSync) {
3176
+ // Find the corresponding camelCase signal property on the Angular component
3177
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
3178
+ // Use the Injector to run the effect in the correct context
3179
+ if (this[signalName] && typeof this[signalName] === 'function') {
3180
+ runInInjectionContext(this.injector, () => {
3181
+ effect(() => {
3182
+ // Read the signal value
3183
+ const value = this[signalName]();
3184
+ if (wcElement) {
3185
+ // Write the value to the Web Component's property
3186
+ wcElement[inputName] = value;
3187
+ }
3188
+ });
3189
+ });
3190
+ }
3191
+ }
3192
+ const outputsToSync = [
3193
+ 'ui5Click',
3194
+ ];
3195
+ // Synchronize outputs (events)
3196
+ for (const outputName of outputsToSync) {
3197
+ // Map Angular output name to UI5 web component event name
3198
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
3199
+ // Ensure the output property exists and has an emit function before adding listener
3200
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
3201
+ // Cast the listener to the correct type to satisfy TypeScript
3202
+ wcElement.addEventListener(eventName, (e) => {
3203
+ this[outputName].emit(e);
3204
+ });
3205
+ }
3206
+ }
3207
+ }
3208
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SideNavigationSubItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3209
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: SideNavigationSubItem, isStandalone: true, selector: "ui5-side-navigation-sub-item, [ui5-side-navigation-sub-item]", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null }, design: { classPropertyName: "design", publicName: "design", isSignal: true, isRequired: false, transformFunction: null }, unselectable: { classPropertyName: "unselectable", publicName: "unselectable", isSignal: true, isRequired: false, transformFunction: null }, accessibilityAttributes: { classPropertyName: "accessibilityAttributes", publicName: "accessibilityAttributes", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Click: "ui5Click" }, exportAs: ["ui5SideNavigationSubItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3210
+ }
3211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SideNavigationSubItem, decorators: [{
3212
+ type: Component,
3213
+ args: [{
3214
+ standalone: true,
3215
+ selector: 'ui5-side-navigation-sub-item, [ui5-side-navigation-sub-item]',
3216
+ template: '<ng-content></ng-content>',
3217
+ exportAs: 'ui5SideNavigationSubItem',
3218
+ changeDetection: ChangeDetectionStrategy.OnPush,
3219
+ }]
3220
+ }] });
3221
+
3222
+ class SortItem {
3223
+ constructor() {
3224
+ /**
3225
+ * Defines the text of the sort item.
3226
+ */
3227
+ this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
3228
+ /**
3229
+ * Defines if the sort item is selected.
3230
+ */
3231
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
3232
+ this.elementRef = inject(ElementRef);
3233
+ this.injector = inject(Injector);
3234
+ }
3235
+ get element() {
3236
+ return this.elementRef.nativeElement;
3237
+ }
3238
+ ngAfterViewInit() {
3239
+ const wcElement = this.element;
3240
+ const inputsToSync = [
3241
+ 'text',
3242
+ 'selected',
3243
+ ];
3244
+ // Synchronize inputs (properties)
3245
+ for (const inputName of inputsToSync) {
3246
+ // Find the corresponding camelCase signal property on the Angular component
3247
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
3248
+ // Use the Injector to run the effect in the correct context
3249
+ if (this[signalName] && typeof this[signalName] === 'function') {
3250
+ runInInjectionContext(this.injector, () => {
3251
+ effect(() => {
3252
+ // Read the signal value
3253
+ const value = this[signalName]();
3254
+ if (wcElement) {
3255
+ // Write the value to the Web Component's property
3256
+ wcElement[inputName] = value;
3257
+ }
3258
+ });
3259
+ });
3260
+ }
3261
+ }
3262
+ }
3263
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SortItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3264
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: SortItem, isStandalone: true, selector: "ui5-sort-item, [ui5-sort-item]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5SortItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3265
+ }
3266
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: SortItem, decorators: [{
3267
+ type: Component,
3268
+ args: [{
3269
+ standalone: true,
3270
+ selector: 'ui5-sort-item, [ui5-sort-item]',
3271
+ template: '<ng-content></ng-content>',
3272
+ exportAs: 'ui5SortItem',
3273
+ changeDetection: ChangeDetectionStrategy.OnPush,
3274
+ }]
3275
+ }] });
3276
+
3277
+ class Timeline {
3278
+ constructor() {
3279
+ /**
3280
+ * Defines the items orientation.
3281
+ */
3282
+ this.layout = input("Vertical", ...(ngDevMode ? [{ debugName: "layout" }] : []));
3283
+ /**
3284
+ * Defines the accessible ARIA name of the component.
3285
+ */
3286
+ this.accessibleName = input(...(ngDevMode ? [undefined, { debugName: "accessibleName" }] : []));
3287
+ /**
3288
+ * Defines if the component should display a loading indicator over the Timeline.
3289
+ */
3290
+ this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3291
+ /**
3292
+ * Defines the delay in milliseconds, after which the loading indicator will show up for this component.
3293
+ */
3294
+ this.loadingDelay = input(1000, ...(ngDevMode ? [{ debugName: "loadingDelay" }] : []));
3295
+ /**
3296
+ * Defines whether the Timeline will have growing capability either by pressing a "More" button,
3297
+ or via user scroll. In both cases a `load-more` event is fired.
3298
+
3299
+ Available options:
3300
+
3301
+ `Button` - Displays a button at the end of the Timeline, which when pressed triggers the `load-more` event.
3302
+
3303
+ `Scroll` -Triggers the `load-more` event when the user scrolls to the end of the Timeline.
3304
+
3305
+ `None` (default) - The growing functionality is off.
3306
+ */
3307
+ this.growing = input("None", ...(ngDevMode ? [{ debugName: "growing" }] : [])); // className is now passed
3308
+ /**
3309
+ * Fired when the user presses the `More` button or scrolls to the Timeline's end.
3310
+
3311
+ **Note:** The event will be fired if `growing` is set to `Button` or `Scroll`.
3312
+ */
3313
+ this.ui5LoadMore = output();
3314
+ this.elementRef = inject(ElementRef);
3315
+ this.injector = inject(Injector);
3316
+ }
3317
+ get element() {
3318
+ return this.elementRef.nativeElement;
3319
+ }
3320
+ ngAfterViewInit() {
3321
+ const wcElement = this.element;
3322
+ const inputsToSync = [
3323
+ 'layout',
3324
+ 'accessibleName',
3325
+ 'loading',
3326
+ 'loadingDelay',
3327
+ 'growing',
3328
+ ];
3329
+ // Synchronize inputs (properties)
3330
+ for (const inputName of inputsToSync) {
3331
+ // Find the corresponding camelCase signal property on the Angular component
3332
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
3333
+ // Use the Injector to run the effect in the correct context
3334
+ if (this[signalName] && typeof this[signalName] === 'function') {
3335
+ runInInjectionContext(this.injector, () => {
3336
+ effect(() => {
3337
+ // Read the signal value
3338
+ const value = this[signalName]();
3339
+ if (wcElement) {
3340
+ // Write the value to the Web Component's property
3341
+ wcElement[inputName] = value;
3342
+ }
3343
+ });
3344
+ });
3345
+ }
3346
+ }
3347
+ const outputsToSync = [
3348
+ 'ui5LoadMore',
3349
+ ];
3350
+ // Synchronize outputs (events)
3351
+ for (const outputName of outputsToSync) {
3352
+ // Map Angular output name to UI5 web component event name
3353
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
3354
+ // Ensure the output property exists and has an emit function before adding listener
3355
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
3356
+ // Cast the listener to the correct type to satisfy TypeScript
3357
+ wcElement.addEventListener(eventName, (e) => {
3358
+ this[outputName].emit(e);
3359
+ });
3360
+ }
3361
+ }
3362
+ }
3363
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: Timeline, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3364
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: Timeline, isStandalone: true, selector: "ui5-timeline, [ui5-timeline]", inputs: { layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, accessibleName: { classPropertyName: "accessibleName", publicName: "accessibleName", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingDelay: { classPropertyName: "loadingDelay", publicName: "loadingDelay", isSignal: true, isRequired: false, transformFunction: null }, growing: { classPropertyName: "growing", publicName: "growing", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5LoadMore: "ui5LoadMore" }, exportAs: ["ui5Timeline"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3365
+ }
3366
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: Timeline, decorators: [{
3367
+ type: Component,
3368
+ args: [{
3369
+ standalone: true,
3370
+ selector: 'ui5-timeline, [ui5-timeline]',
3371
+ template: '<ng-content></ng-content>',
3372
+ exportAs: 'ui5Timeline',
3373
+ changeDetection: ChangeDetectionStrategy.OnPush,
3374
+ }]
3375
+ }] });
3376
+
3377
+ class TimelineGroupItem {
3378
+ constructor() {
3379
+ /**
3380
+ * Defines the text of the button that expands and collapses the group.
3381
+ */
3382
+ this.groupName = input(...(ngDevMode ? [undefined, { debugName: "groupName" }] : []));
3383
+ /**
3384
+ * Determines if the group is collapsed or expanded.
3385
+ */
3386
+ this.collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
3387
+ /**
3388
+ * Fired when the group item is expanded or collapsed.
3389
+ */
3390
+ this.ui5Toggle = output();
3391
+ this.elementRef = inject(ElementRef);
3392
+ this.injector = inject(Injector);
3393
+ }
3394
+ get element() {
3395
+ return this.elementRef.nativeElement;
3396
+ }
3397
+ ngAfterViewInit() {
3398
+ const wcElement = this.element;
3399
+ const inputsToSync = [
3400
+ 'groupName',
3401
+ 'collapsed',
3402
+ ];
3403
+ // Synchronize inputs (properties)
3404
+ for (const inputName of inputsToSync) {
3405
+ // Find the corresponding camelCase signal property on the Angular component
3406
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
3407
+ // Use the Injector to run the effect in the correct context
3408
+ if (this[signalName] && typeof this[signalName] === 'function') {
3409
+ runInInjectionContext(this.injector, () => {
3410
+ effect(() => {
3411
+ // Read the signal value
3412
+ const value = this[signalName]();
3413
+ if (wcElement) {
3414
+ // Write the value to the Web Component's property
3415
+ wcElement[inputName] = value;
3416
+ }
3417
+ });
3418
+ });
3419
+ }
3420
+ }
3421
+ const outputsToSync = [
3422
+ 'ui5Toggle',
3423
+ ];
3424
+ // Synchronize outputs (events)
3425
+ for (const outputName of outputsToSync) {
3426
+ // Map Angular output name to UI5 web component event name
3427
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
3428
+ // Ensure the output property exists and has an emit function before adding listener
3429
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
3430
+ // Cast the listener to the correct type to satisfy TypeScript
3431
+ wcElement.addEventListener(eventName, (e) => {
3432
+ this[outputName].emit(e);
3433
+ });
3434
+ }
3435
+ }
3436
+ }
3437
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TimelineGroupItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3438
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: TimelineGroupItem, isStandalone: true, selector: "ui5-timeline-group-item, [ui5-timeline-group-item]", inputs: { groupName: { classPropertyName: "groupName", publicName: "groupName", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Toggle: "ui5Toggle" }, exportAs: ["ui5TimelineGroupItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3439
+ }
3440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TimelineGroupItem, decorators: [{
3441
+ type: Component,
3442
+ args: [{
3443
+ standalone: true,
3444
+ selector: 'ui5-timeline-group-item, [ui5-timeline-group-item]',
3445
+ template: '<ng-content></ng-content>',
3446
+ exportAs: 'ui5TimelineGroupItem',
3447
+ changeDetection: ChangeDetectionStrategy.OnPush,
3448
+ }]
3449
+ }] });
3450
+
3451
+ class TimelineItem {
3452
+ constructor() {
3453
+ /**
3454
+ * Defines the icon to be displayed as graphical element within the `ui5-timeline-item`.
3455
+ SAP-icons font provides numerous options.
3456
+
3457
+ See all the available icons in the [Icon Explorer](https://sdk.openui5.org/test-resources/sap/m/demokit/iconExplorer/webapp/index.html).
3458
+ */
3459
+ this.icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
3460
+ /**
3461
+ * Defines the name of the item, displayed before the `title-text`.
3462
+ */
3463
+ this.name = input(...(ngDevMode ? [undefined, { debugName: "name" }] : []));
3464
+ /**
3465
+ * Defines if the `name` is clickable.
3466
+ */
3467
+ this.nameClickable = input(false, ...(ngDevMode ? [{ debugName: "nameClickable", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3468
+ /**
3469
+ * Defines the title text of the component.
3470
+ */
3471
+ this.titleText = input(...(ngDevMode ? [undefined, { debugName: "titleText" }] : []));
3472
+ /**
3473
+ * Defines the subtitle text of the component.
3474
+ */
3475
+ this.subtitleText = input(...(ngDevMode ? [undefined, { debugName: "subtitleText" }] : []));
3476
+ /**
3477
+ * Defines the state of the icon displayed in the `ui5-timeline-item`.
3478
+ */
3479
+ this.state = input("None", ...(ngDevMode ? [{ debugName: "state" }] : [])); // className is now passed
3480
+ /**
3481
+ * Fired when the item name is pressed either with a
3482
+ click/tap or by using the Enter or Space key.
3483
+
3484
+ **Note:** The event will not be fired if the `name-clickable`
3485
+ attribute is not set.
3486
+ */
3487
+ this.ui5NameClick = output();
3488
+ this.elementRef = inject(ElementRef);
3489
+ this.injector = inject(Injector);
3490
+ }
3491
+ get element() {
3492
+ return this.elementRef.nativeElement;
3493
+ }
3494
+ ngAfterViewInit() {
3495
+ const wcElement = this.element;
3496
+ const inputsToSync = [
3497
+ 'icon',
3498
+ 'name',
3499
+ 'nameClickable',
3500
+ 'titleText',
3501
+ 'subtitleText',
3502
+ 'state',
3503
+ ];
3504
+ // Synchronize inputs (properties)
3505
+ for (const inputName of inputsToSync) {
3506
+ // Find the corresponding camelCase signal property on the Angular component
3507
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
3508
+ // Use the Injector to run the effect in the correct context
3509
+ if (this[signalName] && typeof this[signalName] === 'function') {
3510
+ runInInjectionContext(this.injector, () => {
3511
+ effect(() => {
3512
+ // Read the signal value
3513
+ const value = this[signalName]();
3514
+ if (wcElement) {
3515
+ // Write the value to the Web Component's property
3516
+ wcElement[inputName] = value;
3517
+ }
3518
+ });
3519
+ });
3520
+ }
3521
+ }
3522
+ const outputsToSync = [
3523
+ 'ui5NameClick',
3524
+ ];
3525
+ // Synchronize outputs (events)
3526
+ for (const outputName of outputsToSync) {
3527
+ // Map Angular output name to UI5 web component event name
3528
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
3529
+ // Ensure the output property exists and has an emit function before adding listener
3530
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
3531
+ // Cast the listener to the correct type to satisfy TypeScript
3532
+ wcElement.addEventListener(eventName, (e) => {
3533
+ this[outputName].emit(e);
3534
+ });
3535
+ }
3536
+ }
3537
+ }
3538
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TimelineItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3539
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: TimelineItem, isStandalone: true, selector: "ui5-timeline-item, [ui5-timeline-item]", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, nameClickable: { classPropertyName: "nameClickable", publicName: "nameClickable", isSignal: true, isRequired: false, transformFunction: null }, titleText: { classPropertyName: "titleText", publicName: "titleText", isSignal: true, isRequired: false, transformFunction: null }, subtitleText: { classPropertyName: "subtitleText", publicName: "subtitleText", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5NameClick: "ui5NameClick" }, exportAs: ["ui5TimelineItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3540
+ }
3541
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: TimelineItem, decorators: [{
3542
+ type: Component,
3543
+ args: [{
3544
+ standalone: true,
3545
+ selector: 'ui5-timeline-item, [ui5-timeline-item]',
3546
+ template: '<ng-content></ng-content>',
3547
+ exportAs: 'ui5TimelineItem',
3548
+ changeDetection: ChangeDetectionStrategy.OnPush,
3549
+ }]
3550
+ }] });
3551
+
3552
+ class UploadCollection {
3553
+ constructor() {
3554
+ /**
3555
+ * Defines the selection mode of the `ui5-upload-collection`.
3556
+ */
3557
+ this.selectionMode = input("None", ...(ngDevMode ? [{ debugName: "selectionMode" }] : []));
3558
+ /**
3559
+ * Allows you to set your own text for the 'No data' description.
3560
+ */
3561
+ this.noDataDescription = input(...(ngDevMode ? [undefined, { debugName: "noDataDescription" }] : []));
3562
+ /**
3563
+ * Allows you to set your own text for the 'No data' text.
3564
+ */
3565
+ this.noDataText = input(...(ngDevMode ? [undefined, { debugName: "noDataText" }] : []));
3566
+ /**
3567
+ * Defines the header level of the 'No data' text.
3568
+ */
3569
+ this.noDataHeaderLevel = input("H2", ...(ngDevMode ? [{ debugName: "noDataHeaderLevel" }] : []));
3570
+ /**
3571
+ * By default there will be drag and drop overlay shown over the `ui5-upload-collection` when files
3572
+ are dragged. If you don't intend to use drag and drop, set this property.
3573
+
3574
+ **Note:** It is up to the application developer to add handler for `drop` event and handle it.
3575
+ `ui5-upload-collection` only displays an overlay.
3576
+ */
3577
+ this.hideDragOverlay = input(false, ...(ngDevMode ? [{ debugName: "hideDragOverlay", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3578
+ /**
3579
+ * Defines the accessible ARIA name of the component.
3580
+ */
3581
+ this.accessibleName = input(...(ngDevMode ? [undefined, { debugName: "accessibleName" }] : [])); // className is now passed
3582
+ /**
3583
+ * Fired when an element is dropped inside the drag and drop overlay.
3584
+
3585
+ **Note:** The `drop` event is fired only when elements are dropped within the drag and drop overlay and ignored for the other parts of the `ui5-upload-collection`.
3586
+ */
3587
+ this.ui5ItemDelete = output();
3588
+ /**
3589
+ * Fired when selection is changed by user interaction
3590
+ in `Single` and `Multiple` modes.
3591
+ */
3592
+ this.ui5SelectionChange = output();
3593
+ this.elementRef = inject(ElementRef);
3594
+ this.injector = inject(Injector);
3595
+ }
3596
+ get element() {
3597
+ return this.elementRef.nativeElement;
3598
+ }
3599
+ ngAfterViewInit() {
3600
+ const wcElement = this.element;
3601
+ const inputsToSync = [
3602
+ 'selectionMode',
3603
+ 'noDataDescription',
3604
+ 'noDataText',
3605
+ 'noDataHeaderLevel',
3606
+ 'hideDragOverlay',
3607
+ 'accessibleName',
3608
+ ];
3609
+ // Synchronize inputs (properties)
3610
+ for (const inputName of inputsToSync) {
3611
+ // Find the corresponding camelCase signal property on the Angular component
3612
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
3613
+ // Use the Injector to run the effect in the correct context
3614
+ if (this[signalName] && typeof this[signalName] === 'function') {
3615
+ runInInjectionContext(this.injector, () => {
3616
+ effect(() => {
3617
+ // Read the signal value
3618
+ const value = this[signalName]();
3619
+ if (wcElement) {
3620
+ // Write the value to the Web Component's property
3621
+ wcElement[inputName] = value;
3622
+ }
3623
+ });
3624
+ });
3625
+ }
3626
+ }
3627
+ const outputsToSync = [
3628
+ 'ui5ItemDelete',
3629
+ 'ui5SelectionChange',
3630
+ ];
3631
+ // Synchronize outputs (events)
3632
+ for (const outputName of outputsToSync) {
3633
+ // Map Angular output name to UI5 web component event name
3634
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
3635
+ // Ensure the output property exists and has an emit function before adding listener
3636
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
3637
+ // Cast the listener to the correct type to satisfy TypeScript
3638
+ wcElement.addEventListener(eventName, (e) => {
3639
+ this[outputName].emit(e);
3640
+ });
3641
+ }
3642
+ }
3643
+ }
3644
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UploadCollection, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3645
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: UploadCollection, isStandalone: true, selector: "ui5-upload-collection, [ui5-upload-collection]", inputs: { selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, noDataDescription: { classPropertyName: "noDataDescription", publicName: "noDataDescription", isSignal: true, isRequired: false, transformFunction: null }, noDataText: { classPropertyName: "noDataText", publicName: "noDataText", isSignal: true, isRequired: false, transformFunction: null }, noDataHeaderLevel: { classPropertyName: "noDataHeaderLevel", publicName: "noDataHeaderLevel", isSignal: true, isRequired: false, transformFunction: null }, hideDragOverlay: { classPropertyName: "hideDragOverlay", publicName: "hideDragOverlay", isSignal: true, isRequired: false, transformFunction: null }, accessibleName: { classPropertyName: "accessibleName", publicName: "accessibleName", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5ItemDelete: "ui5ItemDelete", ui5SelectionChange: "ui5SelectionChange" }, exportAs: ["ui5UploadCollection"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3646
+ }
3647
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UploadCollection, decorators: [{
3648
+ type: Component,
3649
+ args: [{
3650
+ standalone: true,
3651
+ selector: 'ui5-upload-collection, [ui5-upload-collection]',
3652
+ template: '<ng-content></ng-content>',
3653
+ exportAs: 'ui5UploadCollection',
3654
+ changeDetection: ChangeDetectionStrategy.OnPush,
3655
+ }]
3656
+ }] });
3657
+
3658
+ class UploadCollectionItem {
3659
+ constructor() {
3660
+ /**
3661
+ * Holds an instance of `File` associated with this item.
3662
+ */
3663
+ this.file = input(null, ...(ngDevMode ? [{ debugName: "file" }] : []));
3664
+ /**
3665
+ * The name of the file.
3666
+ */
3667
+ this.fileName = input("", ...(ngDevMode ? [{ debugName: "fileName" }] : []));
3668
+ /**
3669
+ * If set to `true` the file name will be clickable and it will fire `file-name-click` event upon click.
3670
+ */
3671
+ this.fileNameClickable = input(false, ...(ngDevMode ? [{ debugName: "fileNameClickable", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3672
+ /**
3673
+ * Disables the delete button.
3674
+ */
3675
+ this.disableDeleteButton = input(false, ...(ngDevMode ? [{ debugName: "disableDeleteButton", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3676
+ /**
3677
+ * Hides the delete button.
3678
+ */
3679
+ this.hideDeleteButton = input(false, ...(ngDevMode ? [{ debugName: "hideDeleteButton", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3680
+ /**
3681
+ * Hides the retry button when `uploadState` property is `Error`.
3682
+ */
3683
+ this.hideRetryButton = input(false, ...(ngDevMode ? [{ debugName: "hideRetryButton", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3684
+ /**
3685
+ * Hides the terminate button when `uploadState` property is `Uploading`.
3686
+ */
3687
+ this.hideTerminateButton = input(false, ...(ngDevMode ? [{ debugName: "hideTerminateButton", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3688
+ /**
3689
+ * The upload progress in percentage.
3690
+
3691
+ **Note:** Expected values are in the interval [0, 100].
3692
+ */
3693
+ this.progress = input(0, ...(ngDevMode ? [{ debugName: "progress" }] : []));
3694
+ /**
3695
+ * Upload state.
3696
+
3697
+ Depending on this property, the item displays the following:
3698
+
3699
+ - `Ready` - progress indicator is displayed.
3700
+ - `Uploading` - progress indicator and terminate button are displayed. When the terminate button is pressed, `terminate` event is fired.
3701
+ - `Error` - progress indicator and retry button are displayed. When the retry button is pressed, `retry` event is fired.
3702
+ - `Complete` - progress indicator is not displayed.
3703
+ */
3704
+ this.uploadState = input("Ready", ...(ngDevMode ? [{ debugName: "uploadState" }] : [])); // className is now passed
3705
+ /**
3706
+ * Fired when the file name is clicked.
3707
+
3708
+ **Note:** This event is only available when `fileNameClickable` property is `true`.
3709
+ */
3710
+ this.ui5FileNameClick = output();
3711
+ /**
3712
+ * Fired when the `fileName` property gets changed.
3713
+
3714
+ **Note:** An edit button is displayed on each item,
3715
+ when the `ui5-upload-collection-item` `type` property is set to `Detail`.
3716
+ */
3717
+ this.ui5Rename = output();
3718
+ /**
3719
+ * Fired when the terminate button is pressed.
3720
+
3721
+ **Note:** Terminate button is displayed when `uploadState` property is set to `Uploading`.
3722
+ */
3723
+ this.ui5Terminate = output();
3724
+ /**
3725
+ * Fired when the retry button is pressed.
3726
+
3727
+ **Note:** Retry button is displayed when `uploadState` property is set to `Error`.
3728
+ */
3729
+ this.ui5Retry = output();
3730
+ this.elementRef = inject(ElementRef);
3731
+ this.injector = inject(Injector);
3732
+ }
3733
+ get element() {
3734
+ return this.elementRef.nativeElement;
3735
+ }
3736
+ ngAfterViewInit() {
3737
+ const wcElement = this.element;
3738
+ const inputsToSync = [
3739
+ 'file',
3740
+ 'fileName',
3741
+ 'fileNameClickable',
3742
+ 'disableDeleteButton',
3743
+ 'hideDeleteButton',
3744
+ 'hideRetryButton',
3745
+ 'hideTerminateButton',
3746
+ 'progress',
3747
+ 'uploadState',
3748
+ ];
3749
+ // Synchronize inputs (properties)
3750
+ for (const inputName of inputsToSync) {
3751
+ // Find the corresponding camelCase signal property on the Angular component
3752
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
3753
+ // Use the Injector to run the effect in the correct context
3754
+ if (this[signalName] && typeof this[signalName] === 'function') {
3755
+ runInInjectionContext(this.injector, () => {
3756
+ effect(() => {
3757
+ // Read the signal value
3758
+ const value = this[signalName]();
3759
+ if (wcElement) {
3760
+ // Write the value to the Web Component's property
3761
+ wcElement[inputName] = value;
3762
+ }
3763
+ });
3764
+ });
3765
+ }
3766
+ }
3767
+ const outputsToSync = [
3768
+ 'ui5FileNameClick',
3769
+ 'ui5Rename',
3770
+ 'ui5Terminate',
3771
+ 'ui5Retry',
3772
+ ];
3773
+ // Synchronize outputs (events)
3774
+ for (const outputName of outputsToSync) {
3775
+ // Map Angular output name to UI5 web component event name
3776
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
3777
+ // Ensure the output property exists and has an emit function before adding listener
3778
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
3779
+ // Cast the listener to the correct type to satisfy TypeScript
3780
+ wcElement.addEventListener(eventName, (e) => {
3781
+ this[outputName].emit(e);
3782
+ });
3783
+ }
3784
+ }
3785
+ }
3786
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UploadCollectionItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3787
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: UploadCollectionItem, isStandalone: true, selector: "ui5-upload-collection-item, [ui5-upload-collection-item]", inputs: { file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, fileNameClickable: { classPropertyName: "fileNameClickable", publicName: "fileNameClickable", isSignal: true, isRequired: false, transformFunction: null }, disableDeleteButton: { classPropertyName: "disableDeleteButton", publicName: "disableDeleteButton", isSignal: true, isRequired: false, transformFunction: null }, hideDeleteButton: { classPropertyName: "hideDeleteButton", publicName: "hideDeleteButton", isSignal: true, isRequired: false, transformFunction: null }, hideRetryButton: { classPropertyName: "hideRetryButton", publicName: "hideRetryButton", isSignal: true, isRequired: false, transformFunction: null }, hideTerminateButton: { classPropertyName: "hideTerminateButton", publicName: "hideTerminateButton", isSignal: true, isRequired: false, transformFunction: null }, progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null }, uploadState: { classPropertyName: "uploadState", publicName: "uploadState", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5FileNameClick: "ui5FileNameClick", ui5Rename: "ui5Rename", ui5Terminate: "ui5Terminate", ui5Retry: "ui5Retry" }, exportAs: ["ui5UploadCollectionItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3788
+ }
3789
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UploadCollectionItem, decorators: [{
3790
+ type: Component,
3791
+ args: [{
3792
+ standalone: true,
3793
+ selector: 'ui5-upload-collection-item, [ui5-upload-collection-item]',
3794
+ template: '<ng-content></ng-content>',
3795
+ exportAs: 'ui5UploadCollectionItem',
3796
+ changeDetection: ChangeDetectionStrategy.OnPush,
3797
+ }]
3798
+ }] });
3799
+
3800
+ class UserMenu {
3801
+ constructor() {
3802
+ /**
3803
+ * Defines if the User Menu is opened.
3804
+ */
3805
+ this.open = input(false, ...(ngDevMode ? [{ debugName: "open", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3806
+ /**
3807
+ * Defines the ID or DOM Reference of the element at which the user menu is shown.
3808
+ When using this attribute in a declarative way, you must only use the `id` (as a string) of the element at which you want to show the popover.
3809
+ You can only set the `opener` attribute to a DOM Reference when using JavaScript.
3810
+ */
3811
+ this.opener = input(...(ngDevMode ? [undefined, { debugName: "opener" }] : []));
3812
+ /**
3813
+ * Defines if the User Menu shows the Manage Account option.
3814
+ */
3815
+ this.showManageAccount = input(false, ...(ngDevMode ? [{ debugName: "showManageAccount", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3816
+ /**
3817
+ * Defines if the User Menu shows the Other Accounts option.
3818
+ */
3819
+ this.showOtherAccounts = input(false, ...(ngDevMode ? [{ debugName: "showOtherAccounts", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3820
+ /**
3821
+ * Defines if the User Menu shows the Edit Accounts option.
3822
+ */
3823
+ this.showEditAccounts = input(false, ...(ngDevMode ? [{ debugName: "showEditAccounts", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3824
+ /**
3825
+ * Defines if the User menu shows edit button.
3826
+ */
3827
+ this.showEditButton = input(false, ...(ngDevMode ? [{ debugName: "showEditButton", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
3828
+ /**
3829
+ * Fired when the account avatar is selected.
3830
+ */
3831
+ this.ui5AvatarClick = output();
3832
+ /**
3833
+ * Fired when the "Manage Account" button is selected.
3834
+ */
3835
+ this.ui5ManageAccountClick = output();
3836
+ /**
3837
+ * Fired when the "Edit Accounts" button is selected.
3838
+ */
3839
+ this.ui5EditAccountsClick = output();
3840
+ /**
3841
+ * Fired when the account is switched to a different one.
3842
+ */
3843
+ this.ui5ChangeAccount = output();
3844
+ /**
3845
+ * Fired when a menu item is selected.
3846
+ */
3847
+ this.ui5ItemClick = output();
3848
+ /**
3849
+ * Fired when a user menu is open.
3850
+ */
3851
+ this.ui5Open = output();
3852
+ /**
3853
+ * Fired when a user menu is close.
3854
+ */
3855
+ this.ui5Close = output();
3856
+ /**
3857
+ * Fired when the "Sign Out" button is selected.
3858
+ */
3859
+ this.ui5SignOutClick = output();
3860
+ this.elementRef = inject(ElementRef);
3861
+ this.injector = inject(Injector);
3862
+ }
3863
+ get element() {
3864
+ return this.elementRef.nativeElement;
3865
+ }
3866
+ ngAfterViewInit() {
3867
+ const wcElement = this.element;
3868
+ const inputsToSync = [
3869
+ 'open',
3870
+ 'opener',
3871
+ 'showManageAccount',
3872
+ 'showOtherAccounts',
3873
+ 'showEditAccounts',
3874
+ 'showEditButton',
3875
+ ];
3876
+ // Synchronize inputs (properties)
3877
+ for (const inputName of inputsToSync) {
3878
+ // Find the corresponding camelCase signal property on the Angular component
3879
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
3880
+ // Use the Injector to run the effect in the correct context
3881
+ if (this[signalName] && typeof this[signalName] === 'function') {
3882
+ runInInjectionContext(this.injector, () => {
3883
+ effect(() => {
3884
+ // Read the signal value
3885
+ const value = this[signalName]();
3886
+ if (wcElement) {
3887
+ // Write the value to the Web Component's property
3888
+ wcElement[inputName] = value;
3889
+ }
3890
+ });
3891
+ });
3892
+ }
3893
+ }
3894
+ const outputsToSync = [
3895
+ 'ui5AvatarClick',
3896
+ 'ui5ManageAccountClick',
3897
+ 'ui5EditAccountsClick',
3898
+ 'ui5ChangeAccount',
3899
+ 'ui5ItemClick',
3900
+ 'ui5Open',
3901
+ 'ui5Close',
3902
+ 'ui5SignOutClick',
3903
+ ];
3904
+ // Synchronize outputs (events)
3905
+ for (const outputName of outputsToSync) {
3906
+ // Map Angular output name to UI5 web component event name
3907
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
3908
+ // Ensure the output property exists and has an emit function before adding listener
3909
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
3910
+ // Cast the listener to the correct type to satisfy TypeScript
3911
+ wcElement.addEventListener(eventName, (e) => {
3912
+ this[outputName].emit(e);
3913
+ });
3914
+ }
3915
+ }
3916
+ }
3917
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserMenu, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3918
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: UserMenu, isStandalone: true, selector: "ui5-user-menu, [ui5-user-menu]", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, opener: { classPropertyName: "opener", publicName: "opener", isSignal: true, isRequired: false, transformFunction: null }, showManageAccount: { classPropertyName: "showManageAccount", publicName: "showManageAccount", isSignal: true, isRequired: false, transformFunction: null }, showOtherAccounts: { classPropertyName: "showOtherAccounts", publicName: "showOtherAccounts", isSignal: true, isRequired: false, transformFunction: null }, showEditAccounts: { classPropertyName: "showEditAccounts", publicName: "showEditAccounts", isSignal: true, isRequired: false, transformFunction: null }, showEditButton: { classPropertyName: "showEditButton", publicName: "showEditButton", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5AvatarClick: "ui5AvatarClick", ui5ManageAccountClick: "ui5ManageAccountClick", ui5EditAccountsClick: "ui5EditAccountsClick", ui5ChangeAccount: "ui5ChangeAccount", ui5ItemClick: "ui5ItemClick", ui5Open: "ui5Open", ui5Close: "ui5Close", ui5SignOutClick: "ui5SignOutClick" }, exportAs: ["ui5UserMenu"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3919
+ }
3920
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserMenu, decorators: [{
3921
+ type: Component,
3922
+ args: [{
3923
+ standalone: true,
3924
+ selector: 'ui5-user-menu, [ui5-user-menu]',
3925
+ template: '<ng-content></ng-content>',
3926
+ exportAs: 'ui5UserMenu',
3927
+ changeDetection: ChangeDetectionStrategy.OnPush,
3928
+ }]
3929
+ }] });
3930
+
3931
+ class UserMenuAccount {
3932
+ constructor() {
3933
+ /**
3934
+ * Defines the avatar image url of the user.
3935
+ */
3936
+ this.avatarSrc = input("", ...(ngDevMode ? [{ debugName: "avatarSrc" }] : []));
3937
+ /**
3938
+ * Defines the avatar initials of the user.
3939
+ */
3940
+ this.avatarInitials = input(...(ngDevMode ? [undefined, { debugName: "avatarInitials" }] : []));
3941
+ /**
3942
+ * Defines the title text of the user.
3943
+ */
3944
+ this.titleText = input("", ...(ngDevMode ? [{ debugName: "titleText" }] : []));
3945
+ /**
3946
+ * Defines additional text of the user.
3947
+ */
3948
+ this.subtitleText = input("", ...(ngDevMode ? [{ debugName: "subtitleText" }] : []));
3949
+ /**
3950
+ * Defines description of the user.
3951
+ */
3952
+ this.description = input("", ...(ngDevMode ? [{ debugName: "description" }] : []));
3953
+ /**
3954
+ * Defines additional information for the user.
3955
+ */
3956
+ this.additionalInfo = input("", ...(ngDevMode ? [{ debugName: "additionalInfo" }] : []));
3957
+ /**
3958
+ * Defines if the user is selected.
3959
+ */
3960
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
3961
+ /**
3962
+ * Indicates whether a loading indicator should be shown.
3963
+ */
3964
+ this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
3965
+ this.elementRef = inject(ElementRef);
3966
+ this.injector = inject(Injector);
3967
+ }
3968
+ get element() {
3969
+ return this.elementRef.nativeElement;
3970
+ }
3971
+ ngAfterViewInit() {
3972
+ const wcElement = this.element;
3973
+ const inputsToSync = [
3974
+ 'avatarSrc',
3975
+ 'avatarInitials',
3976
+ 'titleText',
3977
+ 'subtitleText',
3978
+ 'description',
3979
+ 'additionalInfo',
3980
+ 'selected',
3981
+ 'loading',
3982
+ ];
3983
+ // Synchronize inputs (properties)
3984
+ for (const inputName of inputsToSync) {
3985
+ // Find the corresponding camelCase signal property on the Angular component
3986
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
3987
+ // Use the Injector to run the effect in the correct context
3988
+ if (this[signalName] && typeof this[signalName] === 'function') {
3989
+ runInInjectionContext(this.injector, () => {
3990
+ effect(() => {
3991
+ // Read the signal value
3992
+ const value = this[signalName]();
3993
+ if (wcElement) {
3994
+ // Write the value to the Web Component's property
3995
+ wcElement[inputName] = value;
3996
+ }
3997
+ });
3998
+ });
3999
+ }
4000
+ }
4001
+ }
4002
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserMenuAccount, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4003
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: UserMenuAccount, isStandalone: true, selector: "ui5-user-menu-account, [ui5-user-menu-account]", inputs: { avatarSrc: { classPropertyName: "avatarSrc", publicName: "avatarSrc", isSignal: true, isRequired: false, transformFunction: null }, avatarInitials: { classPropertyName: "avatarInitials", publicName: "avatarInitials", isSignal: true, isRequired: false, transformFunction: null }, titleText: { classPropertyName: "titleText", publicName: "titleText", isSignal: true, isRequired: false, transformFunction: null }, subtitleText: { classPropertyName: "subtitleText", publicName: "subtitleText", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, additionalInfo: { classPropertyName: "additionalInfo", publicName: "additionalInfo", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5UserMenuAccount"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4004
+ }
4005
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserMenuAccount, decorators: [{
4006
+ type: Component,
4007
+ args: [{
4008
+ standalone: true,
4009
+ selector: 'ui5-user-menu-account, [ui5-user-menu-account]',
4010
+ template: '<ng-content></ng-content>',
4011
+ exportAs: 'ui5UserMenuAccount',
4012
+ changeDetection: ChangeDetectionStrategy.OnPush,
4013
+ }]
4014
+ }] });
4015
+
4016
+ class UserMenuItem {
4017
+ constructor() {
4018
+ // className is now passed
4019
+ this.elementRef = inject(ElementRef);
4020
+ this.injector = inject(Injector);
4021
+ }
4022
+ get element() {
4023
+ return this.elementRef.nativeElement;
4024
+ }
4025
+ ngAfterViewInit() {
4026
+ const wcElement = this.element;
4027
+ }
4028
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4029
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: UserMenuItem, isStandalone: true, selector: "ui5-user-menu-item, [ui5-user-menu-item]", exportAs: ["ui5UserMenuItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4030
+ }
4031
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserMenuItem, decorators: [{
4032
+ type: Component,
4033
+ args: [{
4034
+ standalone: true,
4035
+ selector: 'ui5-user-menu-item, [ui5-user-menu-item]',
4036
+ template: '<ng-content></ng-content>',
4037
+ exportAs: 'ui5UserMenuItem',
4038
+ changeDetection: ChangeDetectionStrategy.OnPush,
4039
+ }]
4040
+ }] });
4041
+
4042
+ class UserMenuItemGroup {
4043
+ constructor() {
4044
+ // className is now passed
4045
+ this.elementRef = inject(ElementRef);
4046
+ this.injector = inject(Injector);
4047
+ }
4048
+ get element() {
4049
+ return this.elementRef.nativeElement;
4050
+ }
4051
+ ngAfterViewInit() {
4052
+ const wcElement = this.element;
4053
+ }
4054
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserMenuItemGroup, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4055
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: UserMenuItemGroup, isStandalone: true, selector: "ui5-user-menu-item-group, [ui5-user-menu-item-group]", exportAs: ["ui5UserMenuItemGroup"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4056
+ }
4057
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserMenuItemGroup, decorators: [{
4058
+ type: Component,
4059
+ args: [{
4060
+ standalone: true,
4061
+ selector: 'ui5-user-menu-item-group, [ui5-user-menu-item-group]',
4062
+ template: '<ng-content></ng-content>',
4063
+ exportAs: 'ui5UserMenuItemGroup',
4064
+ changeDetection: ChangeDetectionStrategy.OnPush,
4065
+ }]
4066
+ }] });
4067
+
4068
+ class UserSettingsDialog {
4069
+ constructor() {
4070
+ /**
4071
+ * Defines, if the User Settings Dialog is opened.
4072
+ */
4073
+ this.open = input(false, ...(ngDevMode ? [{ debugName: "open", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
4074
+ /**
4075
+ * Defines the headerText of the item.
4076
+ */
4077
+ this.headerText = input(...(ngDevMode ? [undefined, { debugName: "headerText" }] : []));
4078
+ /**
4079
+ * Defines if the Search Field would be displayed.
4080
+
4081
+ **Note:** By default the Search Field is not displayed.
4082
+ */
4083
+ this.showSearchField = input(false, ...(ngDevMode ? [{ debugName: "showSearchField", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
4084
+ /**
4085
+ * Fired when an item is selected.
4086
+ */
4087
+ this.ui5SelectionChange = output();
4088
+ /**
4089
+ * Fired when a settings dialog is open.
4090
+ */
4091
+ this.ui5Open = output();
4092
+ /**
4093
+ * Fired before the settings dialog is closed.
4094
+ */
4095
+ this.ui5BeforeClose = output();
4096
+ /**
4097
+ * Fired when a settings dialog is closed.
4098
+ */
4099
+ this.ui5Close = output();
4100
+ this.elementRef = inject(ElementRef);
4101
+ this.injector = inject(Injector);
4102
+ }
4103
+ get element() {
4104
+ return this.elementRef.nativeElement;
4105
+ }
4106
+ ngAfterViewInit() {
4107
+ const wcElement = this.element;
4108
+ const inputsToSync = [
4109
+ 'open',
4110
+ 'headerText',
4111
+ 'showSearchField',
4112
+ ];
4113
+ // Synchronize inputs (properties)
4114
+ for (const inputName of inputsToSync) {
4115
+ // Find the corresponding camelCase signal property on the Angular component
4116
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
4117
+ // Use the Injector to run the effect in the correct context
4118
+ if (this[signalName] && typeof this[signalName] === 'function') {
4119
+ runInInjectionContext(this.injector, () => {
4120
+ effect(() => {
4121
+ // Read the signal value
4122
+ const value = this[signalName]();
4123
+ if (wcElement) {
4124
+ // Write the value to the Web Component's property
4125
+ wcElement[inputName] = value;
4126
+ }
4127
+ });
4128
+ });
4129
+ }
4130
+ }
4131
+ const outputsToSync = [
4132
+ 'ui5SelectionChange',
4133
+ 'ui5Open',
4134
+ 'ui5BeforeClose',
4135
+ 'ui5Close',
4136
+ ];
4137
+ // Synchronize outputs (events)
4138
+ for (const outputName of outputsToSync) {
4139
+ // Map Angular output name to UI5 web component event name
4140
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
4141
+ // Ensure the output property exists and has an emit function before adding listener
4142
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
4143
+ // Cast the listener to the correct type to satisfy TypeScript
4144
+ wcElement.addEventListener(eventName, (e) => {
4145
+ this[outputName].emit(e);
4146
+ });
4147
+ }
4148
+ }
4149
+ }
4150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserSettingsDialog, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4151
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: UserSettingsDialog, isStandalone: true, selector: "ui5-user-settings-dialog, [ui5-user-settings-dialog]", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, headerText: { classPropertyName: "headerText", publicName: "headerText", isSignal: true, isRequired: false, transformFunction: null }, showSearchField: { classPropertyName: "showSearchField", publicName: "showSearchField", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5SelectionChange: "ui5SelectionChange", ui5Open: "ui5Open", ui5BeforeClose: "ui5BeforeClose", ui5Close: "ui5Close" }, exportAs: ["ui5UserSettingsDialog"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4152
+ }
4153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserSettingsDialog, decorators: [{
4154
+ type: Component,
4155
+ args: [{
4156
+ standalone: true,
4157
+ selector: 'ui5-user-settings-dialog, [ui5-user-settings-dialog]',
4158
+ template: '<ng-content></ng-content>',
4159
+ exportAs: 'ui5UserSettingsDialog',
4160
+ changeDetection: ChangeDetectionStrategy.OnPush,
4161
+ }]
4162
+ }] });
4163
+
4164
+ class UserSettingsItem {
4165
+ constructor() {
4166
+ /**
4167
+ * Defines the text of the user settings item.
4168
+ */
4169
+ this.text = input("", ...(ngDevMode ? [{ debugName: "text" }] : []));
4170
+ /**
4171
+ * Defines the tooltip of the component.
4172
+
4173
+ A tooltip attribute should be provided to represent the meaning or function when the component is collapsed and only the icon is visible.
4174
+ */
4175
+ this.tooltip = input("", ...(ngDevMode ? [{ debugName: "tooltip" }] : []));
4176
+ /**
4177
+ * Defines the headerText of the item.
4178
+ */
4179
+ this.headerText = input("", ...(ngDevMode ? [{ debugName: "headerText" }] : []));
4180
+ /**
4181
+ * Shows item tab.
4182
+ */
4183
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
4184
+ /**
4185
+ * Defines whether the component is in disabled state.
4186
+
4187
+ **Note:** A disabled component is completely noninteractive.
4188
+ */
4189
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
4190
+ /**
4191
+ * Indicates whether a loading indicator should be shown.
4192
+ */
4193
+ this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
4194
+ /**
4195
+ * Indicates why the control is in loading state.
4196
+ */
4197
+ this.loadingReason = input(...(ngDevMode ? [undefined, { debugName: "loadingReason" }] : []));
4198
+ /**
4199
+ * Defines the icon of the component.
4200
+ */
4201
+ this.icon = input("globe", ...(ngDevMode ? [{ debugName: "icon" }] : []));
4202
+ /**
4203
+ * Defines the accessible ARIA name of the component.
4204
+ */
4205
+ this.accessibleName = input(...(ngDevMode ? [undefined, { debugName: "accessibleName" }] : [])); // className is now passed
4206
+ /**
4207
+ * Fired when a selected view changed.
4208
+ */
4209
+ this.ui5SelectionChange = output();
4210
+ this.elementRef = inject(ElementRef);
4211
+ this.injector = inject(Injector);
4212
+ }
4213
+ get element() {
4214
+ return this.elementRef.nativeElement;
4215
+ }
4216
+ ngAfterViewInit() {
4217
+ const wcElement = this.element;
4218
+ const inputsToSync = [
4219
+ 'text',
4220
+ 'tooltip',
4221
+ 'headerText',
4222
+ 'selected',
4223
+ 'disabled',
4224
+ 'loading',
4225
+ 'loadingReason',
4226
+ 'icon',
4227
+ 'accessibleName',
4228
+ ];
4229
+ // Synchronize inputs (properties)
4230
+ for (const inputName of inputsToSync) {
4231
+ // Find the corresponding camelCase signal property on the Angular component
4232
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
4233
+ // Use the Injector to run the effect in the correct context
4234
+ if (this[signalName] && typeof this[signalName] === 'function') {
4235
+ runInInjectionContext(this.injector, () => {
4236
+ effect(() => {
4237
+ // Read the signal value
4238
+ const value = this[signalName]();
4239
+ if (wcElement) {
4240
+ // Write the value to the Web Component's property
4241
+ wcElement[inputName] = value;
4242
+ }
4243
+ });
4244
+ });
4245
+ }
4246
+ }
4247
+ const outputsToSync = [
4248
+ 'ui5SelectionChange',
4249
+ ];
4250
+ // Synchronize outputs (events)
4251
+ for (const outputName of outputsToSync) {
4252
+ // Map Angular output name to UI5 web component event name
4253
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
4254
+ // Ensure the output property exists and has an emit function before adding listener
4255
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
4256
+ // Cast the listener to the correct type to satisfy TypeScript
4257
+ wcElement.addEventListener(eventName, (e) => {
4258
+ this[outputName].emit(e);
4259
+ });
4260
+ }
4261
+ }
4262
+ }
4263
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserSettingsItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4264
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: UserSettingsItem, isStandalone: true, selector: "ui5-user-settings-item, [ui5-user-settings-item]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, headerText: { classPropertyName: "headerText", publicName: "headerText", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingReason: { classPropertyName: "loadingReason", publicName: "loadingReason", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, accessibleName: { classPropertyName: "accessibleName", publicName: "accessibleName", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5SelectionChange: "ui5SelectionChange" }, exportAs: ["ui5UserSettingsItem"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4265
+ }
4266
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserSettingsItem, decorators: [{
4267
+ type: Component,
4268
+ args: [{
4269
+ standalone: true,
4270
+ selector: 'ui5-user-settings-item, [ui5-user-settings-item]',
4271
+ template: '<ng-content></ng-content>',
4272
+ exportAs: 'ui5UserSettingsItem',
4273
+ changeDetection: ChangeDetectionStrategy.OnPush,
4274
+ }]
4275
+ }] });
4276
+
4277
+ class UserSettingsView {
4278
+ constructor() {
4279
+ /**
4280
+ * Defines the title text of the user settings view.
4281
+ */
4282
+ this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
4283
+ /**
4284
+ * Defines whether the view is selected. There can be just one selected view at a time.
4285
+ */
4286
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
4287
+ /**
4288
+ * Indicates whether the view is secondary. It is relevant only if the view is used in `pages` slot of `ui5-user-settings-item`
4289
+ and controls the visibility of the back button.
4290
+ */
4291
+ this.secondary = input(false, ...(ngDevMode ? [{ debugName: "secondary", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
4292
+ this.elementRef = inject(ElementRef);
4293
+ this.injector = inject(Injector);
4294
+ }
4295
+ get element() {
4296
+ return this.elementRef.nativeElement;
4297
+ }
4298
+ ngAfterViewInit() {
4299
+ const wcElement = this.element;
4300
+ const inputsToSync = [
4301
+ 'text',
4302
+ 'selected',
4303
+ 'secondary',
4304
+ ];
4305
+ // Synchronize inputs (properties)
4306
+ for (const inputName of inputsToSync) {
4307
+ // Find the corresponding camelCase signal property on the Angular component
4308
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
4309
+ // Use the Injector to run the effect in the correct context
4310
+ if (this[signalName] && typeof this[signalName] === 'function') {
4311
+ runInInjectionContext(this.injector, () => {
4312
+ effect(() => {
4313
+ // Read the signal value
4314
+ const value = this[signalName]();
4315
+ if (wcElement) {
4316
+ // Write the value to the Web Component's property
4317
+ wcElement[inputName] = value;
4318
+ }
4319
+ });
4320
+ });
4321
+ }
4322
+ }
4323
+ }
4324
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserSettingsView, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4325
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: UserSettingsView, isStandalone: true, selector: "ui5-user-settings-view, [ui5-user-settings-view]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, secondary: { classPropertyName: "secondary", publicName: "secondary", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5UserSettingsView"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4326
+ }
4327
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UserSettingsView, decorators: [{
4328
+ type: Component,
4329
+ args: [{
4330
+ standalone: true,
4331
+ selector: 'ui5-user-settings-view, [ui5-user-settings-view]',
4332
+ template: '<ng-content></ng-content>',
4333
+ exportAs: 'ui5UserSettingsView',
4334
+ changeDetection: ChangeDetectionStrategy.OnPush,
4335
+ }]
4336
+ }] });
4337
+
4338
+ class ViewSettingsDialog {
4339
+ constructor() {
4340
+ /**
4341
+ * Defines the initial sort order.
4342
+ */
4343
+ this.sortDescending = input(false, ...(ngDevMode ? [{ debugName: "sortDescending", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
4344
+ /**
4345
+ * Defines the initial group order.
4346
+ */
4347
+ this.groupDescending = input(false, ...(ngDevMode ? [{ debugName: "groupDescending", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
4348
+ /**
4349
+ * Indicates if the dialog is open.
4350
+ */
4351
+ this.open = input(false, ...(ngDevMode ? [{ debugName: "open", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
4352
+ /**
4353
+ * Fired when confirmation button is activated.
4354
+ */
4355
+ this.ui5Confirm = output();
4356
+ /**
4357
+ * Fired when cancel button is activated.
4358
+ */
4359
+ this.ui5Cancel = output();
4360
+ /**
4361
+ * Fired before the component is opened.
4362
+ */
4363
+ this.ui5BeforeOpen = output();
4364
+ /**
4365
+ * Fired after the dialog is opened.
4366
+ */
4367
+ this.ui5Open = output();
4368
+ /**
4369
+ * Fired after the dialog is closed.
4370
+ */
4371
+ this.ui5Close = output();
4372
+ this.elementRef = inject(ElementRef);
4373
+ this.injector = inject(Injector);
4374
+ }
4375
+ get element() {
4376
+ return this.elementRef.nativeElement;
4377
+ }
4378
+ ngAfterViewInit() {
4379
+ const wcElement = this.element;
4380
+ const inputsToSync = [
4381
+ 'sortDescending',
4382
+ 'groupDescending',
4383
+ 'open',
4384
+ ];
4385
+ // Synchronize inputs (properties)
4386
+ for (const inputName of inputsToSync) {
4387
+ // Find the corresponding camelCase signal property on the Angular component
4388
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
4389
+ // Use the Injector to run the effect in the correct context
4390
+ if (this[signalName] && typeof this[signalName] === 'function') {
4391
+ runInInjectionContext(this.injector, () => {
4392
+ effect(() => {
4393
+ // Read the signal value
4394
+ const value = this[signalName]();
4395
+ if (wcElement) {
4396
+ // Write the value to the Web Component's property
4397
+ wcElement[inputName] = value;
4398
+ }
4399
+ });
4400
+ });
4401
+ }
4402
+ }
4403
+ const outputsToSync = [
4404
+ 'ui5Confirm',
4405
+ 'ui5Cancel',
4406
+ 'ui5BeforeOpen',
4407
+ 'ui5Open',
4408
+ 'ui5Close',
4409
+ ];
4410
+ // Synchronize outputs (events)
4411
+ for (const outputName of outputsToSync) {
4412
+ // Map Angular output name to UI5 web component event name
4413
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
4414
+ // Ensure the output property exists and has an emit function before adding listener
4415
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
4416
+ // Cast the listener to the correct type to satisfy TypeScript
4417
+ wcElement.addEventListener(eventName, (e) => {
4418
+ this[outputName].emit(e);
4419
+ });
4420
+ }
4421
+ }
4422
+ }
4423
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ViewSettingsDialog, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4424
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: ViewSettingsDialog, isStandalone: true, selector: "ui5-view-settings-dialog, [ui5-view-settings-dialog]", inputs: { sortDescending: { classPropertyName: "sortDescending", publicName: "sortDescending", isSignal: true, isRequired: false, transformFunction: null }, groupDescending: { classPropertyName: "groupDescending", publicName: "groupDescending", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5Confirm: "ui5Confirm", ui5Cancel: "ui5Cancel", ui5BeforeOpen: "ui5BeforeOpen", ui5Open: "ui5Open", ui5Close: "ui5Close" }, exportAs: ["ui5ViewSettingsDialog"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4425
+ }
4426
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ViewSettingsDialog, decorators: [{
4427
+ type: Component,
4428
+ args: [{
4429
+ standalone: true,
4430
+ selector: 'ui5-view-settings-dialog, [ui5-view-settings-dialog]',
4431
+ template: '<ng-content></ng-content>',
4432
+ exportAs: 'ui5ViewSettingsDialog',
4433
+ changeDetection: ChangeDetectionStrategy.OnPush,
4434
+ }]
4435
+ }] });
4436
+
4437
+ class Wizard {
4438
+ constructor() {
4439
+ /**
4440
+ * Defines how the content of the `ui5-wizard` would be visualized.
4441
+ */
4442
+ this.contentLayout = input("MultipleSteps", ...(ngDevMode ? [{ debugName: "contentLayout" }] : [])); // className is now passed
4443
+ /**
4444
+ * Fired when the step is changed by user interaction - either with scrolling,
4445
+ or by clicking on the steps within the component header.
4446
+ */
4447
+ this.ui5StepChange = output();
4448
+ this.elementRef = inject(ElementRef);
4449
+ this.injector = inject(Injector);
4450
+ }
4451
+ get element() {
4452
+ return this.elementRef.nativeElement;
4453
+ }
4454
+ ngAfterViewInit() {
4455
+ const wcElement = this.element;
4456
+ const inputsToSync = [
4457
+ 'contentLayout',
4458
+ ];
4459
+ // Synchronize inputs (properties)
4460
+ for (const inputName of inputsToSync) {
4461
+ // Find the corresponding camelCase signal property on the Angular component
4462
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
4463
+ // Use the Injector to run the effect in the correct context
4464
+ if (this[signalName] && typeof this[signalName] === 'function') {
4465
+ runInInjectionContext(this.injector, () => {
4466
+ effect(() => {
4467
+ // Read the signal value
4468
+ const value = this[signalName]();
4469
+ if (wcElement) {
4470
+ // Write the value to the Web Component's property
4471
+ wcElement[inputName] = value;
4472
+ }
4473
+ });
4474
+ });
4475
+ }
4476
+ }
4477
+ const outputsToSync = [
4478
+ 'ui5StepChange',
4479
+ ];
4480
+ // Synchronize outputs (events)
4481
+ for (const outputName of outputsToSync) {
4482
+ // Map Angular output name to UI5 web component event name
4483
+ const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
4484
+ // Ensure the output property exists and has an emit function before adding listener
4485
+ if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
4486
+ // Cast the listener to the correct type to satisfy TypeScript
4487
+ wcElement.addEventListener(eventName, (e) => {
4488
+ this[outputName].emit(e);
4489
+ });
4490
+ }
4491
+ }
4492
+ }
4493
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: Wizard, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4494
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: Wizard, isStandalone: true, selector: "ui5-wizard, [ui5-wizard]", inputs: { contentLayout: { classPropertyName: "contentLayout", publicName: "contentLayout", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5StepChange: "ui5StepChange" }, exportAs: ["ui5Wizard"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4495
+ }
4496
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: Wizard, decorators: [{
4497
+ type: Component,
4498
+ args: [{
4499
+ standalone: true,
4500
+ selector: 'ui5-wizard, [ui5-wizard]',
4501
+ template: '<ng-content></ng-content>',
4502
+ exportAs: 'ui5Wizard',
4503
+ changeDetection: ChangeDetectionStrategy.OnPush,
4504
+ }]
4505
+ }] });
4506
+
4507
+ class WizardStep {
4508
+ constructor() {
4509
+ /**
4510
+ * Defines the `titleText` of the step.
4511
+
4512
+ **Note:** The text is displayed in the `ui5-wizard` navigation header.
4513
+ */
4514
+ this.titleText = input(...(ngDevMode ? [undefined, { debugName: "titleText" }] : []));
4515
+ /**
4516
+ * Defines the `subtitleText` of the step.
4517
+
4518
+ **Note:** the text is displayed in the `ui5-wizard` navigation header.
4519
+ */
4520
+ this.subtitleText = input(...(ngDevMode ? [undefined, { debugName: "subtitleText" }] : []));
4521
+ /**
4522
+ * Defines the `icon` of the step.
4523
+
4524
+ **Note:** The icon is displayed in the `ui5-wizard` navigation header.
4525
+
4526
+ The SAP-icons font provides numerous options.
4527
+ See all the available icons in the [Icon Explorer](https://sdk.openui5.org/test-resources/sap/m/demokit/iconExplorer/webapp/index.html).
4528
+ */
4529
+ this.icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
4530
+ /**
4531
+ * Defines if the step is `disabled`. When disabled the step is displayed,
4532
+ but the user can't select the step by clicking or navigate to it with scrolling.
4533
+
4534
+ **Note:** Step can't be `selected` and `disabled` at the same time.
4535
+ In this case the `selected` property would take precedence.
4536
+ */
4537
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
4538
+ /**
4539
+ * Defines the step's `selected` state - the step that is currently active.
4540
+
4541
+ **Note:** Step can't be `selected` and `disabled` at the same time.
4542
+ In this case the `selected` property would take precedence.
4543
+ */
4544
+ this.selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
4545
+ /**
4546
+ * When `branching` is enabled a dashed line would be displayed after the step,
4547
+ meant to indicate that the next step is not yet known and depends on user choice in the current step.
4548
+
4549
+ **Note:** It is recommended to use `branching` on the last known step
4550
+ and later add new steps when it becomes clear how the wizard flow should continue.
4551
+ */
4552
+ this.branching = input(false, ...(ngDevMode ? [{ debugName: "branching", transform: booleanAttribute }] : [{ transform: booleanAttribute }])); // className is now passed
4553
+ this.elementRef = inject(ElementRef);
4554
+ this.injector = inject(Injector);
4555
+ }
4556
+ get element() {
4557
+ return this.elementRef.nativeElement;
4558
+ }
4559
+ ngAfterViewInit() {
4560
+ const wcElement = this.element;
4561
+ const inputsToSync = [
4562
+ 'titleText',
4563
+ 'subtitleText',
4564
+ 'icon',
4565
+ 'disabled',
4566
+ 'selected',
4567
+ 'branching',
4568
+ ];
4569
+ // Synchronize inputs (properties)
4570
+ for (const inputName of inputsToSync) {
4571
+ // Find the corresponding camelCase signal property on the Angular component
4572
+ const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
4573
+ // Use the Injector to run the effect in the correct context
4574
+ if (this[signalName] && typeof this[signalName] === 'function') {
4575
+ runInInjectionContext(this.injector, () => {
4576
+ effect(() => {
4577
+ // Read the signal value
4578
+ const value = this[signalName]();
4579
+ if (wcElement) {
4580
+ // Write the value to the Web Component's property
4581
+ wcElement[inputName] = value;
4582
+ }
4583
+ });
4584
+ });
4585
+ }
4586
+ }
4587
+ }
4588
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: WizardStep, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4589
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.4", type: WizardStep, isStandalone: true, selector: "ui5-wizard-step, [ui5-wizard-step]", inputs: { titleText: { classPropertyName: "titleText", publicName: "titleText", isSignal: true, isRequired: false, transformFunction: null }, subtitleText: { classPropertyName: "subtitleText", publicName: "subtitleText", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, branching: { classPropertyName: "branching", publicName: "branching", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ui5WizardStep"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4590
+ }
4591
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: WizardStep, decorators: [{
4592
+ type: Component,
4593
+ args: [{
4594
+ standalone: true,
4595
+ selector: 'ui5-wizard-step, [ui5-wizard-step]',
4596
+ template: '<ng-content></ng-content>',
4597
+ exportAs: 'ui5WizardStep',
4598
+ changeDetection: ChangeDetectionStrategy.OnPush,
4599
+ }]
4600
+ }] });
4601
+
4602
+ class Ui5WebcomponentsFioriThemingService extends WebcomponentsThemingProvider {
4603
+ constructor() {
4604
+ super(() => import('@ui5/webcomponents-fiori/dist/generated/json-imports/Themes.js'));
4605
+ this.name = 'ui-5-webcomponents--fiori-theming-service';
4606
+ }
4607
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: Ui5WebcomponentsFioriThemingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4608
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: Ui5WebcomponentsFioriThemingService, providedIn: 'root' }); }
4609
+ }
4610
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: Ui5WebcomponentsFioriThemingService, decorators: [{
4611
+ type: Injectable,
4612
+ args: [{ providedIn: 'root' }]
4613
+ }], ctorParameters: () => [] });
4614
+
4615
+ /**
4616
+ * Generated bundle index. Do not edit.
4617
+ */
4618
+
4619
+ export { BarcodeScannerDialog, DynamicPage, DynamicPageHeader, DynamicPageTitle, DynamicSideContent, FilterItem, FilterItemOption, FlexibleColumnLayout, GenericControlValueAccessor, GroupItem, IllustratedMessage, MediaGallery, MediaGalleryItem, NavigationLayout, NotificationList, NotificationListGroupItem, NotificationListItem, Page, ProductSwitch, ProductSwitchItem, Search, SearchItem, SearchItemGroup, SearchItemShowMore, SearchMessageArea, SearchScope, ShellBar, ShellBarBranding, ShellBarItem, ShellBarSearch, ShellBarSpacer, SideNavigation, SideNavigationGroup, SideNavigationItem, SideNavigationSubItem, SortItem, Timeline, TimelineGroupItem, TimelineItem, Ui5WebcomponentsFioriThemingService, UploadCollection, UploadCollectionItem, UserMenu, UserMenuAccount, UserMenuItem, UserMenuItemGroup, UserSettingsDialog, UserSettingsItem, UserSettingsView, ViewSettingsDialog, Wizard, WizardStep };
4620
+ //# sourceMappingURL=fundamental-ngx-ui5-webcomponents-fiori.mjs.map