@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.
- package/README.md +3 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-fiori-types.mjs +26 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-fiori-types.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-fiori-utils.mjs +108 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-fiori-utils.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-fiori.mjs +4620 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-fiori.mjs.map +1 -0
- package/index.d.ts +2081 -0
- package/package.json +57 -0
- package/types/index.d.ts +21 -0
- package/utils/index.d.ts +23 -0
|
@@ -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
|