@openmfp/ngx 0.11.0 → 0.11.2
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/fesm2022/openmfp-ngx.mjs
CHANGED
|
@@ -1066,7 +1066,13 @@ class Dashboard {
|
|
|
1066
1066
|
sections: this.sections(),
|
|
1067
1067
|
cards: this.cards().map((c) => {
|
|
1068
1068
|
const pos = this.cardsPosition.get(c.id);
|
|
1069
|
-
return {
|
|
1069
|
+
return {
|
|
1070
|
+
...c,
|
|
1071
|
+
x: pos?.x,
|
|
1072
|
+
y: pos?.y,
|
|
1073
|
+
w: pos?.w ?? c.w,
|
|
1074
|
+
h: pos?.h ?? c.h,
|
|
1075
|
+
};
|
|
1070
1076
|
}),
|
|
1071
1077
|
});
|
|
1072
1078
|
this.editMode.set(false);
|
|
@@ -1101,18 +1107,23 @@ class Dashboard {
|
|
|
1101
1107
|
});
|
|
1102
1108
|
this.closeCardPanel();
|
|
1103
1109
|
}
|
|
1104
|
-
|
|
1110
|
+
onGridChange(event) {
|
|
1105
1111
|
this.newGridStackNodes = event.nodes;
|
|
1106
1112
|
}
|
|
1107
1113
|
saveCardsPosition(items) {
|
|
1108
1114
|
items.forEach((node) => {
|
|
1109
1115
|
if (node.id) {
|
|
1110
|
-
this.cardsPosition.set(node.id, {
|
|
1116
|
+
this.cardsPosition.set(node.id, {
|
|
1117
|
+
x: node.x,
|
|
1118
|
+
y: node.y,
|
|
1119
|
+
w: node.w,
|
|
1120
|
+
h: node.h,
|
|
1121
|
+
});
|
|
1111
1122
|
}
|
|
1112
1123
|
});
|
|
1113
1124
|
}
|
|
1114
1125
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: Dashboard, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1115
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: Dashboard, isStandalone: true, selector: "mfp-dashboard", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null }, cards: { classPropertyName: "cards", publicName: "cards", isSignal: true, isRequired: false, transformFunction: null }, availableCards: { classPropertyName: "availableCards", publicName: "availableCards", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sections: "sectionsChange", cards: "cardsChange", saved: "saved", actionButtonClick: "actionButtonClick" }, host: { properties: { "style.background-image": "config().backgroundImageUrl ? \"url(\" + config().backgroundImageUrl + \")\" : null" } }, viewQueries: [{ propertyName: "gridStackItems", first: true, predicate: ["grid"], descendants: true, isSignal: true }, { propertyName: "addCardBtn", first: true, predicate: ["addCardBtn"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"mfp-dashboard\">\n <div class=\"mfp-dashboard__topbar\">\n <div class=\"mfp-dashboard__topbar-row\">\n <div class=\"mfp-dashboard__header\">\n @if (config().title) {\n <ui5-title level=\"H2\" size=\"H2\" wrapping-type=\"Normal\">{{\n config().title\n }}</ui5-title>\n }\n @if (config().description) {\n <ui5-text>{{ config().description }}</ui5-text>\n }\n </div>\n\n <div class=\"mfp-dashboard__toolbar\">\n @if (editMode()) {\n <ui5-button\n #addCardBtn\n id=\"add-card-btn\"\n [accessibleName]=\"addCardButton().text || addCardButton().tooltip || 'Edit Cards'\"\n [design]=\"addCardButton().design\"\n [icon]=\"addCardButton().icon\"\n [tooltip]=\"addCardButton().tooltip\"\n (click)=\"openCardPanel()\"\n >{{ addCardButton().text }}</ui5-button\n >\n } @else if (compactToolbar()) {\n <ui5-button\n #menuBtn\n accessibleName=\"Actions\"\n design=\"Transparent\"\n icon=\"menu2\"\n tooltip=\"Actions\"\n (click)=\"toolbarMenuOpen.update((v) => !v)\"\n />\n <ui5-menu\n [open]=\"toolbarMenuOpen()\"\n [opener]=\"menuBtn.element\"\n (ui5Close)=\"toolbarMenuOpen.set(false)\"\n (ui5ItemClick)=\"\n onMenuItemClick(\n $any($event).detail.item.dataset['action'],\n $event\n )\n \"\n (ui5Open)=\"toolbarMenuOpen.set(true)\"\n >\n @for (action of customActions(); track action.action) {\n <ui5-menu-item\n [attr.data-action]=\"action.action\"\n [icon]=\"action.icon ?? ''\"\n [text]=\"action.text ?? ''\"\n />\n }\n @if (config().editable) {\n <ui5-menu-separator />\n <ui5-menu-item\n data-action=\"edit-view\"\n [icon]=\"editViewButton().icon\"\n [text]=\"editViewButton().text || 'Edit View'\"\n />\n }\n </ui5-menu>\n } @else {\n @for (action of customActions(); track action.action) {\n <ui5-button\n [accessibleName]=\"action.text || action.tooltip || action.action\"\n [design]=\"action.design ?? 'Default'\"\n [endIcon]=\"action?.endIcon\"\n [icon]=\"action.icon ?? ''\"\n [tooltip]=\"action.tooltip ?? ''\"\n (click)=\"\n actionButtonClick.emit({ event: $event, action: action })\n \"\n >{{ action.text }}</ui5-button\n >\n }\n @if (config().editable) {\n <ui5-button\n [accessibleName]=\"editViewButton().text || editViewButton().tooltip || 'Edit View'\"\n [design]=\"editViewButton().design\"\n [icon]=\"editViewButton().icon\"\n [tooltip]=\"editViewButton().tooltip\"\n (click)=\"enterEditMode()\"\n >{{ editViewButton().text }}</ui5-button\n >\n }\n }\n </div>\n </div>\n\n <div class=\"mfp-dashboard__subheader\">\n <ng-content select=\"[slot=dashboard-subheader]\" />\n </div>\n </div>\n <div class=\"mfp-sections-container\">\n @for (section of sections(); track section.id) {\n <mfp-dashboard-section\n [cards]=\"sectionCards()(section.id)\"\n [columns]=\"12\"\n [editMode]=\"editMode()\"\n [section]=\"section\"\n (removeCard)=\"removeCard($event)\"\n (removeSection)=\"removeSection(section.id)\"\n />\n }\n </div>\n <gridstack #grid [options]=\"gridOptions()\" (changeCB)=\"onOrderChange($event)\">\n @for (card of looseCards(); track card.id) {\n <gridstack-item\n [options]=\"card\"\n [style.cursor]=\"editMode() ? 'pointer' : 'auto'\"\n >\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode()\"\n (removeCard)=\"removeCard($any(card.id))\"\n />\n </gridstack-item>\n }\n </gridstack>\n\n @if (editMode()) {\n <div class=\"mfp-dashboard__edit-bar\">\n <ui5-button design=\"Emphasized\" (click)=\"saveEdit()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelEdit()\"\n >Cancel</ui5-button\n >\n </div>\n }\n</div>\n\n<mfp-edit-cards-dialog\n [addedCardsIds]=\"addedCardsIds()\"\n [availableCards]=\"availableCards()\"\n [open]=\"cardDialogOpen()\"\n (cancelled)=\"closeCardPanel()\"\n (confirm)=\"onCardsEdited($event)\"\n/>\n", styles: [".grid-stack{position:relative}.grid-stack-rtl{direction:ltr}.grid-stack-rtl>.grid-stack-item{direction:rtl}.grid-stack-placeholder>.placeholder-content{background-color:#0000001a;margin:0;position:absolute;width:auto;z-index:0!important}.grid-stack>.grid-stack-item{position:absolute;padding:0;top:0;width:var(--gs-column-width);height:var(--gs-cell-height)}.grid-stack>.grid-stack-item>.grid-stack-item-content{margin:0;position:absolute;width:auto;overflow-x:hidden;overflow-y:auto}.grid-stack>.grid-stack-item.size-to-content:not(.size-to-content-max)>.grid-stack-item-content{overflow-y:hidden}.grid-stack:not(.grid-stack-rtl)>.grid-stack-item{left:0}.grid-stack.grid-stack-rtl>.grid-stack-item{right:0}.grid-stack>.grid-stack-item>.grid-stack-item-content,.grid-stack>.grid-stack-placeholder>.placeholder-content{top:var(--gs-item-margin-top);right:var(--gs-item-margin-right);bottom:var(--gs-item-margin-bottom);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.grid-stack-item.ui-resizable-autohide>.ui-resizable-handle,.grid-stack-item.ui-resizable-disabled>.ui-resizable-handle{display:none}.grid-stack-item>.ui-resizable-ne,.grid-stack-item>.ui-resizable-nw,.grid-stack-item>.ui-resizable-se,.grid-stack-item>.ui-resizable-sw{background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"%23666\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 20 20\"><path d=\"m10 3 2 2H8l2-2v14l-2-2h4l-2 2\"/></svg>');background-repeat:no-repeat;background-position:center}.grid-stack-item>.ui-resizable-ne{transform:rotate(45deg)}.grid-stack-item>.ui-resizable-sw{transform:rotate(45deg)}.grid-stack-item>.ui-resizable-nw{transform:rotate(-45deg)}.grid-stack-item>.ui-resizable-se{transform:rotate(-45deg)}.grid-stack-item>.ui-resizable-nw{cursor:nw-resize;width:20px;height:20px;top:var(--gs-item-margin-top);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-n{cursor:n-resize;height:10px;top:var(--gs-item-margin-top);left:25px;right:25px}.grid-stack-item>.ui-resizable-ne{cursor:ne-resize;width:20px;height:20px;top:var(--gs-item-margin-top);right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-e{cursor:e-resize;width:10px;top:15px;bottom:15px;right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-se{cursor:se-resize;width:20px;height:20px;bottom:var(--gs-item-margin-bottom);right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-s{cursor:s-resize;height:10px;left:25px;bottom:var(--gs-item-margin-bottom);right:25px}.grid-stack-item>.ui-resizable-sw{cursor:sw-resize;width:20px;height:20px;bottom:var(--gs-item-margin-bottom);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-w{cursor:w-resize;width:10px;top:15px;bottom:15px;left:var(--gs-item-margin-left)}.grid-stack-item.ui-draggable-dragging>.ui-resizable-handle{display:none!important}.grid-stack-item.ui-draggable-dragging{will-change:left,right,top}.grid-stack-item.ui-resizable-resizing{will-change:width,height}.ui-draggable-dragging,.ui-resizable-resizing{z-index:10000}.ui-draggable-dragging>.grid-stack-item-content,.ui-resizable-resizing>.grid-stack-item-content{box-shadow:1px 4px 6px #0003;opacity:.8}.grid-stack-animate,.grid-stack-animate .grid-stack-item{transition:left .3s,right .3s,top .3s,height .3s,width .3s}.grid-stack-animate .grid-stack-item.grid-stack-placeholder,.grid-stack-animate .grid-stack-item.ui-draggable-dragging,.grid-stack-animate .grid-stack-item.ui-resizable-resizing{transition:left 0s,right 0s,top 0s,height 0s,width 0s}.grid-stack>.grid-stack-item[gs-y=\"0\"]{top:0}.grid-stack:not(.grid-stack-rtl)>.grid-stack-item[gs-x=\"0\"]{left:0}.grid-stack.grid-stack-rtl>.grid-stack-item[gs-x=\"0\"]{right:0}mfp-dashboard,mfp-wc-dashboard{display:block;margin:0;padding:0;min-height:100%;background:var(--sapShellColor, #354a5e);background-size:cover;background-position:center;background-repeat:no-repeat;background-attachment:local}.mfp-dashboard{padding:2rem}.mfp-sections-container{display:grid;grid-template-columns:repeat(12,1fr);grid-auto-rows:auto;align-content:start;gap:1rem}@media(max-width:726px){.mfp-sections-container{grid-template-columns:1fr}}@media(min-width:727px)and (max-width:1200px){.mfp-sections-container{grid-template-columns:repeat(8,1fr)}}.mfp-dashboard__topbar{grid-column:1/-1;align-self:start;display:flex;flex-direction:column;gap:1rem;padding-bottom:3rem;width:100%;min-width:0}.mfp-dashboard__topbar-row{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.mfp-dashboard__header{display:flex;flex-direction:column;gap:.25rem}.mfp-dashboard__toolbar{flex-shrink:0;display:flex;gap:.5rem}.mfp-dashboard__subheader{display:flex;align-items:center;gap:1rem}.mfp-dashboard__edit-bar{position:fixed;bottom:20px;left:16px;right:16px;z-index:1000;display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:7px 16px;background:var(--sapPageFooter_Background, white);border-radius:var(--sapElement_BorderCornerRadius, 12px);box-shadow:0 0 0 1px #2235487a,0 2px 8px #2235484d;box-sizing:border-box;overflow:hidden}\n"], dependencies: [{ kind: "component", type: GridstackComponent, selector: "gridstack", inputs: ["options", "isEmpty"], outputs: ["addedCB", "changeCB", "disableCB", "dragCB", "dragStartCB", "dragStopCB", "droppedCB", "enableCB", "removedCB", "resizeCB", "resizeStartCB", "resizeStopCB"] }, { kind: "component", type: GridstackItemComponent, selector: "gridstack-item", inputs: ["options"] }, { kind: "component", type: EditCardsDialog, selector: "mfp-edit-cards-dialog", inputs: ["availableCards", "addedCardsIds", "open"], outputs: ["confirm", "cancelled"] }, { kind: "component", type: DashboardSection, selector: "mfp-dashboard-section", inputs: ["section", "cards", "columns", "editMode"], outputs: ["removeSection", "removeCard"] }, { kind: "component", type: DashboardCard, selector: "mfp-dashboard-card", inputs: ["card", "editMode"], outputs: ["removeCard"] }, { kind: "component", type: Button, selector: "ui5-button, [ui5-button]", inputs: ["design", "disabled", "icon", "endIcon", "submits", "tooltip", "accessibleName", "accessibleNameRef", "accessibilityAttributes", "accessibleDescription", "type", "accessibleRole", "loading", "loadingDelay"], outputs: ["ui5Click"], exportAs: ["ui5Button"] }, { kind: "component", type: Menu, selector: "ui5-menu, [ui5-menu]", inputs: ["headerText", "open", "placement", "horizontalAlign", "loading", "loadingDelay", "opener"], outputs: ["ui5ItemClick", "ui5BeforeOpen", "ui5Open", "ui5BeforeClose", "ui5Close"], exportAs: ["ui5Menu"] }, { kind: "component", type: MenuItem, selector: "ui5-menu-item, [ui5-menu-item]", inputs: ["text", "additionalText", "icon", "disabled", "loading", "loadingDelay", "accessibleName", "tooltip", "checked", "accessibilityAttributes", "type", "navigated", "highlight", "selected"], outputs: ["ui5BeforeOpen", "ui5Open", "ui5BeforeClose", "ui5Close", "ui5Check", "ui5DetailClick"], exportAs: ["ui5MenuItem"] }, { kind: "component", type: MenuSeparator, selector: "ui5-menu-separator, [ui5-menu-separator]", exportAs: ["ui5MenuSeparator"] }, { kind: "component", type: Title, selector: "ui5-title, [ui5-title]", inputs: ["wrappingType", "level", "size"], exportAs: ["ui5Title"] }, { kind: "component", type: Text, selector: "ui5-text, [ui5-text]", inputs: ["maxLines", "emptyIndicatorMode"], exportAs: ["ui5Text"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
1126
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: Dashboard, isStandalone: true, selector: "mfp-dashboard", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null }, cards: { classPropertyName: "cards", publicName: "cards", isSignal: true, isRequired: false, transformFunction: null }, availableCards: { classPropertyName: "availableCards", publicName: "availableCards", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sections: "sectionsChange", cards: "cardsChange", saved: "saved", actionButtonClick: "actionButtonClick" }, host: { properties: { "style.background-image": "config().backgroundImageUrl ? \"url(\" + config().backgroundImageUrl + \")\" : null" } }, viewQueries: [{ propertyName: "gridStackItems", first: true, predicate: ["grid"], descendants: true, isSignal: true }, { propertyName: "addCardBtn", first: true, predicate: ["addCardBtn"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"mfp-dashboard\">\n <div class=\"mfp-dashboard__topbar\">\n <div class=\"mfp-dashboard__topbar-row\">\n <div class=\"mfp-dashboard__header\">\n @if (config().title) {\n <ui5-title level=\"H2\" size=\"H2\" wrapping-type=\"Normal\">{{\n config().title\n }}</ui5-title>\n }\n @if (config().description) {\n <ui5-text>{{ config().description }}</ui5-text>\n }\n </div>\n\n <div class=\"mfp-dashboard__toolbar\">\n @if (editMode()) {\n <ui5-button\n #addCardBtn\n id=\"add-card-btn\"\n [accessibleName]=\"addCardButton().text || addCardButton().tooltip || 'Edit Cards'\"\n [design]=\"addCardButton().design\"\n [icon]=\"addCardButton().icon\"\n [tooltip]=\"addCardButton().tooltip\"\n (click)=\"openCardPanel()\"\n >{{ addCardButton().text }}</ui5-button\n >\n } @else if (compactToolbar()) {\n <ui5-button\n #menuBtn\n accessibleName=\"Actions\"\n design=\"Transparent\"\n icon=\"menu2\"\n tooltip=\"Actions\"\n (click)=\"toolbarMenuOpen.update((v) => !v)\"\n />\n <ui5-menu\n [open]=\"toolbarMenuOpen()\"\n [opener]=\"menuBtn.element\"\n (ui5Close)=\"toolbarMenuOpen.set(false)\"\n (ui5ItemClick)=\"\n onMenuItemClick(\n $any($event).detail.item.dataset['action'],\n $event\n )\n \"\n (ui5Open)=\"toolbarMenuOpen.set(true)\"\n >\n @for (action of customActions(); track action.action) {\n <ui5-menu-item\n [attr.data-action]=\"action.action\"\n [icon]=\"action.icon ?? ''\"\n [text]=\"action.text ?? ''\"\n />\n }\n @if (config().editable) {\n <ui5-menu-separator />\n <ui5-menu-item\n data-action=\"edit-view\"\n [icon]=\"editViewButton().icon\"\n [text]=\"editViewButton().text || 'Edit View'\"\n />\n }\n </ui5-menu>\n } @else {\n @for (action of customActions(); track action.action) {\n <ui5-button\n [accessibleName]=\"action.text || action.tooltip || action.action\"\n [design]=\"action.design ?? 'Default'\"\n [endIcon]=\"action?.endIcon\"\n [icon]=\"action.icon ?? ''\"\n [tooltip]=\"action.tooltip ?? ''\"\n (click)=\"\n actionButtonClick.emit({ event: $event, action: action })\n \"\n >{{ action.text }}</ui5-button\n >\n }\n @if (config().editable) {\n <ui5-button\n [accessibleName]=\"editViewButton().text || editViewButton().tooltip || 'Edit View'\"\n [design]=\"editViewButton().design\"\n [icon]=\"editViewButton().icon\"\n [tooltip]=\"editViewButton().tooltip\"\n (click)=\"enterEditMode()\"\n >{{ editViewButton().text }}</ui5-button\n >\n }\n }\n </div>\n </div>\n\n <div class=\"mfp-dashboard__subheader\">\n <ng-content select=\"[slot=dashboard-subheader]\" />\n </div>\n </div>\n <div class=\"mfp-sections-container\">\n @for (section of sections(); track section.id) {\n <mfp-dashboard-section\n [cards]=\"sectionCards()(section.id)\"\n [columns]=\"12\"\n [editMode]=\"editMode()\"\n [section]=\"section\"\n (removeCard)=\"removeCard($event)\"\n (removeSection)=\"removeSection(section.id)\"\n />\n }\n </div>\n <gridstack #grid [options]=\"gridOptions()\" (removedCB)=\"onGridChange($event)\" (addedCB)=\"onGridChange($event)\" (changeCB)=\"onGridChange($event)\">\n @for (card of looseCards(); track card.id) {\n <gridstack-item\n [options]=\"card\"\n [style.cursor]=\"editMode() ? 'pointer' : 'auto'\"\n >\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode()\"\n (removeCard)=\"removeCard($any(card.id))\"\n />\n </gridstack-item>\n }\n </gridstack>\n\n @if (editMode()) {\n <div class=\"mfp-dashboard__edit-bar\">\n <ui5-button design=\"Emphasized\" (click)=\"saveEdit()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelEdit()\"\n >Cancel</ui5-button\n >\n </div>\n }\n</div>\n\n<mfp-edit-cards-dialog\n [addedCardsIds]=\"addedCardsIds()\"\n [availableCards]=\"availableCards()\"\n [open]=\"cardDialogOpen()\"\n (cancelled)=\"closeCardPanel()\"\n (confirm)=\"onCardsEdited($event)\"\n/>\n", styles: [".grid-stack{position:relative}.grid-stack-rtl{direction:ltr}.grid-stack-rtl>.grid-stack-item{direction:rtl}.grid-stack-placeholder>.placeholder-content{background-color:#0000001a;margin:0;position:absolute;width:auto;z-index:0!important}.grid-stack>.grid-stack-item{position:absolute;padding:0;top:0;width:var(--gs-column-width);height:var(--gs-cell-height)}.grid-stack>.grid-stack-item>.grid-stack-item-content{margin:0;position:absolute;width:auto;overflow-x:hidden;overflow-y:auto}.grid-stack>.grid-stack-item.size-to-content:not(.size-to-content-max)>.grid-stack-item-content{overflow-y:hidden}.grid-stack:not(.grid-stack-rtl)>.grid-stack-item{left:0}.grid-stack.grid-stack-rtl>.grid-stack-item{right:0}.grid-stack>.grid-stack-item>.grid-stack-item-content,.grid-stack>.grid-stack-placeholder>.placeholder-content{top:var(--gs-item-margin-top);right:var(--gs-item-margin-right);bottom:var(--gs-item-margin-bottom);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.grid-stack-item.ui-resizable-autohide>.ui-resizable-handle,.grid-stack-item.ui-resizable-disabled>.ui-resizable-handle{display:none}.grid-stack-item>.ui-resizable-ne,.grid-stack-item>.ui-resizable-nw,.grid-stack-item>.ui-resizable-se,.grid-stack-item>.ui-resizable-sw{background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"%23666\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 20 20\"><path d=\"m10 3 2 2H8l2-2v14l-2-2h4l-2 2\"/></svg>');background-repeat:no-repeat;background-position:center}.grid-stack-item>.ui-resizable-ne{transform:rotate(45deg)}.grid-stack-item>.ui-resizable-sw{transform:rotate(45deg)}.grid-stack-item>.ui-resizable-nw{transform:rotate(-45deg)}.grid-stack-item>.ui-resizable-se{transform:rotate(-45deg)}.grid-stack-item>.ui-resizable-nw{cursor:nw-resize;width:20px;height:20px;top:var(--gs-item-margin-top);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-n{cursor:n-resize;height:10px;top:var(--gs-item-margin-top);left:25px;right:25px}.grid-stack-item>.ui-resizable-ne{cursor:ne-resize;width:20px;height:20px;top:var(--gs-item-margin-top);right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-e{cursor:e-resize;width:10px;top:15px;bottom:15px;right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-se{cursor:se-resize;width:20px;height:20px;bottom:var(--gs-item-margin-bottom);right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-s{cursor:s-resize;height:10px;left:25px;bottom:var(--gs-item-margin-bottom);right:25px}.grid-stack-item>.ui-resizable-sw{cursor:sw-resize;width:20px;height:20px;bottom:var(--gs-item-margin-bottom);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-w{cursor:w-resize;width:10px;top:15px;bottom:15px;left:var(--gs-item-margin-left)}.grid-stack-item.ui-draggable-dragging>.ui-resizable-handle{display:none!important}.grid-stack-item.ui-draggable-dragging{will-change:left,right,top}.grid-stack-item.ui-resizable-resizing{will-change:width,height}.ui-draggable-dragging,.ui-resizable-resizing{z-index:10000}.ui-draggable-dragging>.grid-stack-item-content,.ui-resizable-resizing>.grid-stack-item-content{box-shadow:1px 4px 6px #0003;opacity:.8}.grid-stack-animate,.grid-stack-animate .grid-stack-item{transition:left .3s,right .3s,top .3s,height .3s,width .3s}.grid-stack-animate .grid-stack-item.grid-stack-placeholder,.grid-stack-animate .grid-stack-item.ui-draggable-dragging,.grid-stack-animate .grid-stack-item.ui-resizable-resizing{transition:left 0s,right 0s,top 0s,height 0s,width 0s}.grid-stack>.grid-stack-item[gs-y=\"0\"]{top:0}.grid-stack:not(.grid-stack-rtl)>.grid-stack-item[gs-x=\"0\"]{left:0}.grid-stack.grid-stack-rtl>.grid-stack-item[gs-x=\"0\"]{right:0}mfp-dashboard,mfp-wc-dashboard{display:block;margin:0;padding:0;min-height:100%;background:var(--sapShellColor, #354a5e);background-size:cover;background-position:center;background-repeat:no-repeat;background-attachment:local}.mfp-dashboard{padding:2rem}.mfp-sections-container{display:grid;grid-template-columns:repeat(12,1fr);grid-auto-rows:auto;align-content:start;gap:1rem}@media(max-width:726px){.mfp-sections-container{grid-template-columns:1fr}}@media(min-width:727px)and (max-width:1200px){.mfp-sections-container{grid-template-columns:repeat(8,1fr)}}.mfp-dashboard__topbar{grid-column:1/-1;align-self:start;display:flex;flex-direction:column;gap:1rem;padding-bottom:3rem;width:100%;min-width:0}.mfp-dashboard__topbar-row{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.mfp-dashboard__header{display:flex;flex-direction:column;gap:.25rem}.mfp-dashboard__toolbar{flex-shrink:0;display:flex;gap:.5rem}.mfp-dashboard__subheader{display:flex;align-items:center;gap:1rem}.mfp-dashboard__edit-bar{position:fixed;bottom:20px;left:16px;right:16px;z-index:1000;display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:7px 16px;background:var(--sapPageFooter_Background, white);border-radius:var(--sapElement_BorderCornerRadius, 12px);box-shadow:0 0 0 1px #2235487a,0 2px 8px #2235484d;box-sizing:border-box;overflow:hidden}\n"], dependencies: [{ kind: "component", type: GridstackComponent, selector: "gridstack", inputs: ["options", "isEmpty"], outputs: ["addedCB", "changeCB", "disableCB", "dragCB", "dragStartCB", "dragStopCB", "droppedCB", "enableCB", "removedCB", "resizeCB", "resizeStartCB", "resizeStopCB"] }, { kind: "component", type: GridstackItemComponent, selector: "gridstack-item", inputs: ["options"] }, { kind: "component", type: EditCardsDialog, selector: "mfp-edit-cards-dialog", inputs: ["availableCards", "addedCardsIds", "open"], outputs: ["confirm", "cancelled"] }, { kind: "component", type: DashboardSection, selector: "mfp-dashboard-section", inputs: ["section", "cards", "columns", "editMode"], outputs: ["removeSection", "removeCard"] }, { kind: "component", type: DashboardCard, selector: "mfp-dashboard-card", inputs: ["card", "editMode"], outputs: ["removeCard"] }, { kind: "component", type: Button, selector: "ui5-button, [ui5-button]", inputs: ["design", "disabled", "icon", "endIcon", "submits", "tooltip", "accessibleName", "accessibleNameRef", "accessibilityAttributes", "accessibleDescription", "type", "accessibleRole", "loading", "loadingDelay"], outputs: ["ui5Click"], exportAs: ["ui5Button"] }, { kind: "component", type: Menu, selector: "ui5-menu, [ui5-menu]", inputs: ["headerText", "open", "placement", "horizontalAlign", "loading", "loadingDelay", "opener"], outputs: ["ui5ItemClick", "ui5BeforeOpen", "ui5Open", "ui5BeforeClose", "ui5Close"], exportAs: ["ui5Menu"] }, { kind: "component", type: MenuItem, selector: "ui5-menu-item, [ui5-menu-item]", inputs: ["text", "additionalText", "icon", "disabled", "loading", "loadingDelay", "accessibleName", "tooltip", "checked", "accessibilityAttributes", "type", "navigated", "highlight", "selected"], outputs: ["ui5BeforeOpen", "ui5Open", "ui5BeforeClose", "ui5Close", "ui5Check", "ui5DetailClick"], exportAs: ["ui5MenuItem"] }, { kind: "component", type: MenuSeparator, selector: "ui5-menu-separator, [ui5-menu-separator]", exportAs: ["ui5MenuSeparator"] }, { kind: "component", type: Title, selector: "ui5-title, [ui5-title]", inputs: ["wrappingType", "level", "size"], exportAs: ["ui5Title"] }, { kind: "component", type: Text, selector: "ui5-text, [ui5-text]", inputs: ["maxLines", "emptyIndicatorMode"], exportAs: ["ui5Text"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
1116
1127
|
}
|
|
1117
1128
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: Dashboard, decorators: [{
|
|
1118
1129
|
type: Component,
|
|
@@ -1130,7 +1141,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
|
|
|
1130
1141
|
Text,
|
|
1131
1142
|
], encapsulation: ViewEncapsulation.None, host: {
|
|
1132
1143
|
'[style.background-image]': 'config().backgroundImageUrl ? "url(" + config().backgroundImageUrl + ")" : null',
|
|
1133
|
-
}, template: "<div class=\"mfp-dashboard\">\n <div class=\"mfp-dashboard__topbar\">\n <div class=\"mfp-dashboard__topbar-row\">\n <div class=\"mfp-dashboard__header\">\n @if (config().title) {\n <ui5-title level=\"H2\" size=\"H2\" wrapping-type=\"Normal\">{{\n config().title\n }}</ui5-title>\n }\n @if (config().description) {\n <ui5-text>{{ config().description }}</ui5-text>\n }\n </div>\n\n <div class=\"mfp-dashboard__toolbar\">\n @if (editMode()) {\n <ui5-button\n #addCardBtn\n id=\"add-card-btn\"\n [accessibleName]=\"addCardButton().text || addCardButton().tooltip || 'Edit Cards'\"\n [design]=\"addCardButton().design\"\n [icon]=\"addCardButton().icon\"\n [tooltip]=\"addCardButton().tooltip\"\n (click)=\"openCardPanel()\"\n >{{ addCardButton().text }}</ui5-button\n >\n } @else if (compactToolbar()) {\n <ui5-button\n #menuBtn\n accessibleName=\"Actions\"\n design=\"Transparent\"\n icon=\"menu2\"\n tooltip=\"Actions\"\n (click)=\"toolbarMenuOpen.update((v) => !v)\"\n />\n <ui5-menu\n [open]=\"toolbarMenuOpen()\"\n [opener]=\"menuBtn.element\"\n (ui5Close)=\"toolbarMenuOpen.set(false)\"\n (ui5ItemClick)=\"\n onMenuItemClick(\n $any($event).detail.item.dataset['action'],\n $event\n )\n \"\n (ui5Open)=\"toolbarMenuOpen.set(true)\"\n >\n @for (action of customActions(); track action.action) {\n <ui5-menu-item\n [attr.data-action]=\"action.action\"\n [icon]=\"action.icon ?? ''\"\n [text]=\"action.text ?? ''\"\n />\n }\n @if (config().editable) {\n <ui5-menu-separator />\n <ui5-menu-item\n data-action=\"edit-view\"\n [icon]=\"editViewButton().icon\"\n [text]=\"editViewButton().text || 'Edit View'\"\n />\n }\n </ui5-menu>\n } @else {\n @for (action of customActions(); track action.action) {\n <ui5-button\n [accessibleName]=\"action.text || action.tooltip || action.action\"\n [design]=\"action.design ?? 'Default'\"\n [endIcon]=\"action?.endIcon\"\n [icon]=\"action.icon ?? ''\"\n [tooltip]=\"action.tooltip ?? ''\"\n (click)=\"\n actionButtonClick.emit({ event: $event, action: action })\n \"\n >{{ action.text }}</ui5-button\n >\n }\n @if (config().editable) {\n <ui5-button\n [accessibleName]=\"editViewButton().text || editViewButton().tooltip || 'Edit View'\"\n [design]=\"editViewButton().design\"\n [icon]=\"editViewButton().icon\"\n [tooltip]=\"editViewButton().tooltip\"\n (click)=\"enterEditMode()\"\n >{{ editViewButton().text }}</ui5-button\n >\n }\n }\n </div>\n </div>\n\n <div class=\"mfp-dashboard__subheader\">\n <ng-content select=\"[slot=dashboard-subheader]\" />\n </div>\n </div>\n <div class=\"mfp-sections-container\">\n @for (section of sections(); track section.id) {\n <mfp-dashboard-section\n [cards]=\"sectionCards()(section.id)\"\n [columns]=\"12\"\n [editMode]=\"editMode()\"\n [section]=\"section\"\n (removeCard)=\"removeCard($event)\"\n (removeSection)=\"removeSection(section.id)\"\n />\n }\n </div>\n <gridstack #grid [options]=\"gridOptions()\" (changeCB)=\"onOrderChange($event)\">\n @for (card of looseCards(); track card.id) {\n <gridstack-item\n [options]=\"card\"\n [style.cursor]=\"editMode() ? 'pointer' : 'auto'\"\n >\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode()\"\n (removeCard)=\"removeCard($any(card.id))\"\n />\n </gridstack-item>\n }\n </gridstack>\n\n @if (editMode()) {\n <div class=\"mfp-dashboard__edit-bar\">\n <ui5-button design=\"Emphasized\" (click)=\"saveEdit()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelEdit()\"\n >Cancel</ui5-button\n >\n </div>\n }\n</div>\n\n<mfp-edit-cards-dialog\n [addedCardsIds]=\"addedCardsIds()\"\n [availableCards]=\"availableCards()\"\n [open]=\"cardDialogOpen()\"\n (cancelled)=\"closeCardPanel()\"\n (confirm)=\"onCardsEdited($event)\"\n/>\n", styles: [".grid-stack{position:relative}.grid-stack-rtl{direction:ltr}.grid-stack-rtl>.grid-stack-item{direction:rtl}.grid-stack-placeholder>.placeholder-content{background-color:#0000001a;margin:0;position:absolute;width:auto;z-index:0!important}.grid-stack>.grid-stack-item{position:absolute;padding:0;top:0;width:var(--gs-column-width);height:var(--gs-cell-height)}.grid-stack>.grid-stack-item>.grid-stack-item-content{margin:0;position:absolute;width:auto;overflow-x:hidden;overflow-y:auto}.grid-stack>.grid-stack-item.size-to-content:not(.size-to-content-max)>.grid-stack-item-content{overflow-y:hidden}.grid-stack:not(.grid-stack-rtl)>.grid-stack-item{left:0}.grid-stack.grid-stack-rtl>.grid-stack-item{right:0}.grid-stack>.grid-stack-item>.grid-stack-item-content,.grid-stack>.grid-stack-placeholder>.placeholder-content{top:var(--gs-item-margin-top);right:var(--gs-item-margin-right);bottom:var(--gs-item-margin-bottom);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.grid-stack-item.ui-resizable-autohide>.ui-resizable-handle,.grid-stack-item.ui-resizable-disabled>.ui-resizable-handle{display:none}.grid-stack-item>.ui-resizable-ne,.grid-stack-item>.ui-resizable-nw,.grid-stack-item>.ui-resizable-se,.grid-stack-item>.ui-resizable-sw{background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"%23666\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 20 20\"><path d=\"m10 3 2 2H8l2-2v14l-2-2h4l-2 2\"/></svg>');background-repeat:no-repeat;background-position:center}.grid-stack-item>.ui-resizable-ne{transform:rotate(45deg)}.grid-stack-item>.ui-resizable-sw{transform:rotate(45deg)}.grid-stack-item>.ui-resizable-nw{transform:rotate(-45deg)}.grid-stack-item>.ui-resizable-se{transform:rotate(-45deg)}.grid-stack-item>.ui-resizable-nw{cursor:nw-resize;width:20px;height:20px;top:var(--gs-item-margin-top);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-n{cursor:n-resize;height:10px;top:var(--gs-item-margin-top);left:25px;right:25px}.grid-stack-item>.ui-resizable-ne{cursor:ne-resize;width:20px;height:20px;top:var(--gs-item-margin-top);right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-e{cursor:e-resize;width:10px;top:15px;bottom:15px;right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-se{cursor:se-resize;width:20px;height:20px;bottom:var(--gs-item-margin-bottom);right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-s{cursor:s-resize;height:10px;left:25px;bottom:var(--gs-item-margin-bottom);right:25px}.grid-stack-item>.ui-resizable-sw{cursor:sw-resize;width:20px;height:20px;bottom:var(--gs-item-margin-bottom);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-w{cursor:w-resize;width:10px;top:15px;bottom:15px;left:var(--gs-item-margin-left)}.grid-stack-item.ui-draggable-dragging>.ui-resizable-handle{display:none!important}.grid-stack-item.ui-draggable-dragging{will-change:left,right,top}.grid-stack-item.ui-resizable-resizing{will-change:width,height}.ui-draggable-dragging,.ui-resizable-resizing{z-index:10000}.ui-draggable-dragging>.grid-stack-item-content,.ui-resizable-resizing>.grid-stack-item-content{box-shadow:1px 4px 6px #0003;opacity:.8}.grid-stack-animate,.grid-stack-animate .grid-stack-item{transition:left .3s,right .3s,top .3s,height .3s,width .3s}.grid-stack-animate .grid-stack-item.grid-stack-placeholder,.grid-stack-animate .grid-stack-item.ui-draggable-dragging,.grid-stack-animate .grid-stack-item.ui-resizable-resizing{transition:left 0s,right 0s,top 0s,height 0s,width 0s}.grid-stack>.grid-stack-item[gs-y=\"0\"]{top:0}.grid-stack:not(.grid-stack-rtl)>.grid-stack-item[gs-x=\"0\"]{left:0}.grid-stack.grid-stack-rtl>.grid-stack-item[gs-x=\"0\"]{right:0}mfp-dashboard,mfp-wc-dashboard{display:block;margin:0;padding:0;min-height:100%;background:var(--sapShellColor, #354a5e);background-size:cover;background-position:center;background-repeat:no-repeat;background-attachment:local}.mfp-dashboard{padding:2rem}.mfp-sections-container{display:grid;grid-template-columns:repeat(12,1fr);grid-auto-rows:auto;align-content:start;gap:1rem}@media(max-width:726px){.mfp-sections-container{grid-template-columns:1fr}}@media(min-width:727px)and (max-width:1200px){.mfp-sections-container{grid-template-columns:repeat(8,1fr)}}.mfp-dashboard__topbar{grid-column:1/-1;align-self:start;display:flex;flex-direction:column;gap:1rem;padding-bottom:3rem;width:100%;min-width:0}.mfp-dashboard__topbar-row{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.mfp-dashboard__header{display:flex;flex-direction:column;gap:.25rem}.mfp-dashboard__toolbar{flex-shrink:0;display:flex;gap:.5rem}.mfp-dashboard__subheader{display:flex;align-items:center;gap:1rem}.mfp-dashboard__edit-bar{position:fixed;bottom:20px;left:16px;right:16px;z-index:1000;display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:7px 16px;background:var(--sapPageFooter_Background, white);border-radius:var(--sapElement_BorderCornerRadius, 12px);box-shadow:0 0 0 1px #2235487a,0 2px 8px #2235484d;box-sizing:border-box;overflow:hidden}\n"] }]
|
|
1144
|
+
}, template: "<div class=\"mfp-dashboard\">\n <div class=\"mfp-dashboard__topbar\">\n <div class=\"mfp-dashboard__topbar-row\">\n <div class=\"mfp-dashboard__header\">\n @if (config().title) {\n <ui5-title level=\"H2\" size=\"H2\" wrapping-type=\"Normal\">{{\n config().title\n }}</ui5-title>\n }\n @if (config().description) {\n <ui5-text>{{ config().description }}</ui5-text>\n }\n </div>\n\n <div class=\"mfp-dashboard__toolbar\">\n @if (editMode()) {\n <ui5-button\n #addCardBtn\n id=\"add-card-btn\"\n [accessibleName]=\"addCardButton().text || addCardButton().tooltip || 'Edit Cards'\"\n [design]=\"addCardButton().design\"\n [icon]=\"addCardButton().icon\"\n [tooltip]=\"addCardButton().tooltip\"\n (click)=\"openCardPanel()\"\n >{{ addCardButton().text }}</ui5-button\n >\n } @else if (compactToolbar()) {\n <ui5-button\n #menuBtn\n accessibleName=\"Actions\"\n design=\"Transparent\"\n icon=\"menu2\"\n tooltip=\"Actions\"\n (click)=\"toolbarMenuOpen.update((v) => !v)\"\n />\n <ui5-menu\n [open]=\"toolbarMenuOpen()\"\n [opener]=\"menuBtn.element\"\n (ui5Close)=\"toolbarMenuOpen.set(false)\"\n (ui5ItemClick)=\"\n onMenuItemClick(\n $any($event).detail.item.dataset['action'],\n $event\n )\n \"\n (ui5Open)=\"toolbarMenuOpen.set(true)\"\n >\n @for (action of customActions(); track action.action) {\n <ui5-menu-item\n [attr.data-action]=\"action.action\"\n [icon]=\"action.icon ?? ''\"\n [text]=\"action.text ?? ''\"\n />\n }\n @if (config().editable) {\n <ui5-menu-separator />\n <ui5-menu-item\n data-action=\"edit-view\"\n [icon]=\"editViewButton().icon\"\n [text]=\"editViewButton().text || 'Edit View'\"\n />\n }\n </ui5-menu>\n } @else {\n @for (action of customActions(); track action.action) {\n <ui5-button\n [accessibleName]=\"action.text || action.tooltip || action.action\"\n [design]=\"action.design ?? 'Default'\"\n [endIcon]=\"action?.endIcon\"\n [icon]=\"action.icon ?? ''\"\n [tooltip]=\"action.tooltip ?? ''\"\n (click)=\"\n actionButtonClick.emit({ event: $event, action: action })\n \"\n >{{ action.text }}</ui5-button\n >\n }\n @if (config().editable) {\n <ui5-button\n [accessibleName]=\"editViewButton().text || editViewButton().tooltip || 'Edit View'\"\n [design]=\"editViewButton().design\"\n [icon]=\"editViewButton().icon\"\n [tooltip]=\"editViewButton().tooltip\"\n (click)=\"enterEditMode()\"\n >{{ editViewButton().text }}</ui5-button\n >\n }\n }\n </div>\n </div>\n\n <div class=\"mfp-dashboard__subheader\">\n <ng-content select=\"[slot=dashboard-subheader]\" />\n </div>\n </div>\n <div class=\"mfp-sections-container\">\n @for (section of sections(); track section.id) {\n <mfp-dashboard-section\n [cards]=\"sectionCards()(section.id)\"\n [columns]=\"12\"\n [editMode]=\"editMode()\"\n [section]=\"section\"\n (removeCard)=\"removeCard($event)\"\n (removeSection)=\"removeSection(section.id)\"\n />\n }\n </div>\n <gridstack #grid [options]=\"gridOptions()\" (removedCB)=\"onGridChange($event)\" (addedCB)=\"onGridChange($event)\" (changeCB)=\"onGridChange($event)\">\n @for (card of looseCards(); track card.id) {\n <gridstack-item\n [options]=\"card\"\n [style.cursor]=\"editMode() ? 'pointer' : 'auto'\"\n >\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode()\"\n (removeCard)=\"removeCard($any(card.id))\"\n />\n </gridstack-item>\n }\n </gridstack>\n\n @if (editMode()) {\n <div class=\"mfp-dashboard__edit-bar\">\n <ui5-button design=\"Emphasized\" (click)=\"saveEdit()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelEdit()\"\n >Cancel</ui5-button\n >\n </div>\n }\n</div>\n\n<mfp-edit-cards-dialog\n [addedCardsIds]=\"addedCardsIds()\"\n [availableCards]=\"availableCards()\"\n [open]=\"cardDialogOpen()\"\n (cancelled)=\"closeCardPanel()\"\n (confirm)=\"onCardsEdited($event)\"\n/>\n", styles: [".grid-stack{position:relative}.grid-stack-rtl{direction:ltr}.grid-stack-rtl>.grid-stack-item{direction:rtl}.grid-stack-placeholder>.placeholder-content{background-color:#0000001a;margin:0;position:absolute;width:auto;z-index:0!important}.grid-stack>.grid-stack-item{position:absolute;padding:0;top:0;width:var(--gs-column-width);height:var(--gs-cell-height)}.grid-stack>.grid-stack-item>.grid-stack-item-content{margin:0;position:absolute;width:auto;overflow-x:hidden;overflow-y:auto}.grid-stack>.grid-stack-item.size-to-content:not(.size-to-content-max)>.grid-stack-item-content{overflow-y:hidden}.grid-stack:not(.grid-stack-rtl)>.grid-stack-item{left:0}.grid-stack.grid-stack-rtl>.grid-stack-item{right:0}.grid-stack>.grid-stack-item>.grid-stack-item-content,.grid-stack>.grid-stack-placeholder>.placeholder-content{top:var(--gs-item-margin-top);right:var(--gs-item-margin-right);bottom:var(--gs-item-margin-bottom);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.grid-stack-item.ui-resizable-autohide>.ui-resizable-handle,.grid-stack-item.ui-resizable-disabled>.ui-resizable-handle{display:none}.grid-stack-item>.ui-resizable-ne,.grid-stack-item>.ui-resizable-nw,.grid-stack-item>.ui-resizable-se,.grid-stack-item>.ui-resizable-sw{background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"%23666\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 20 20\"><path d=\"m10 3 2 2H8l2-2v14l-2-2h4l-2 2\"/></svg>');background-repeat:no-repeat;background-position:center}.grid-stack-item>.ui-resizable-ne{transform:rotate(45deg)}.grid-stack-item>.ui-resizable-sw{transform:rotate(45deg)}.grid-stack-item>.ui-resizable-nw{transform:rotate(-45deg)}.grid-stack-item>.ui-resizable-se{transform:rotate(-45deg)}.grid-stack-item>.ui-resizable-nw{cursor:nw-resize;width:20px;height:20px;top:var(--gs-item-margin-top);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-n{cursor:n-resize;height:10px;top:var(--gs-item-margin-top);left:25px;right:25px}.grid-stack-item>.ui-resizable-ne{cursor:ne-resize;width:20px;height:20px;top:var(--gs-item-margin-top);right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-e{cursor:e-resize;width:10px;top:15px;bottom:15px;right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-se{cursor:se-resize;width:20px;height:20px;bottom:var(--gs-item-margin-bottom);right:var(--gs-item-margin-right)}.grid-stack-item>.ui-resizable-s{cursor:s-resize;height:10px;left:25px;bottom:var(--gs-item-margin-bottom);right:25px}.grid-stack-item>.ui-resizable-sw{cursor:sw-resize;width:20px;height:20px;bottom:var(--gs-item-margin-bottom);left:var(--gs-item-margin-left)}.grid-stack-item>.ui-resizable-w{cursor:w-resize;width:10px;top:15px;bottom:15px;left:var(--gs-item-margin-left)}.grid-stack-item.ui-draggable-dragging>.ui-resizable-handle{display:none!important}.grid-stack-item.ui-draggable-dragging{will-change:left,right,top}.grid-stack-item.ui-resizable-resizing{will-change:width,height}.ui-draggable-dragging,.ui-resizable-resizing{z-index:10000}.ui-draggable-dragging>.grid-stack-item-content,.ui-resizable-resizing>.grid-stack-item-content{box-shadow:1px 4px 6px #0003;opacity:.8}.grid-stack-animate,.grid-stack-animate .grid-stack-item{transition:left .3s,right .3s,top .3s,height .3s,width .3s}.grid-stack-animate .grid-stack-item.grid-stack-placeholder,.grid-stack-animate .grid-stack-item.ui-draggable-dragging,.grid-stack-animate .grid-stack-item.ui-resizable-resizing{transition:left 0s,right 0s,top 0s,height 0s,width 0s}.grid-stack>.grid-stack-item[gs-y=\"0\"]{top:0}.grid-stack:not(.grid-stack-rtl)>.grid-stack-item[gs-x=\"0\"]{left:0}.grid-stack.grid-stack-rtl>.grid-stack-item[gs-x=\"0\"]{right:0}mfp-dashboard,mfp-wc-dashboard{display:block;margin:0;padding:0;min-height:100%;background:var(--sapShellColor, #354a5e);background-size:cover;background-position:center;background-repeat:no-repeat;background-attachment:local}.mfp-dashboard{padding:2rem}.mfp-sections-container{display:grid;grid-template-columns:repeat(12,1fr);grid-auto-rows:auto;align-content:start;gap:1rem}@media(max-width:726px){.mfp-sections-container{grid-template-columns:1fr}}@media(min-width:727px)and (max-width:1200px){.mfp-sections-container{grid-template-columns:repeat(8,1fr)}}.mfp-dashboard__topbar{grid-column:1/-1;align-self:start;display:flex;flex-direction:column;gap:1rem;padding-bottom:3rem;width:100%;min-width:0}.mfp-dashboard__topbar-row{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.mfp-dashboard__header{display:flex;flex-direction:column;gap:.25rem}.mfp-dashboard__toolbar{flex-shrink:0;display:flex;gap:.5rem}.mfp-dashboard__subheader{display:flex;align-items:center;gap:1rem}.mfp-dashboard__edit-bar{position:fixed;bottom:20px;left:16px;right:16px;z-index:1000;display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:7px 16px;background:var(--sapPageFooter_Background, white);border-radius:var(--sapElement_BorderCornerRadius, 12px);box-shadow:0 0 0 1px #2235487a,0 2px 8px #2235484d;box-sizing:border-box;overflow:hidden}\n"] }]
|
|
1134
1145
|
}], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], sections: [{ type: i0.Input, args: [{ isSignal: true, alias: "sections", required: false }] }, { type: i0.Output, args: ["sectionsChange"] }], cards: [{ type: i0.Input, args: [{ isSignal: true, alias: "cards", required: false }] }, { type: i0.Output, args: ["cardsChange"] }], availableCards: [{ type: i0.Input, args: [{ isSignal: true, alias: "availableCards", required: false }] }], saved: [{ type: i0.Output, args: ["saved"] }], actionButtonClick: [{ type: i0.Output, args: ["actionButtonClick"] }], gridStackItems: [{ type: i0.ViewChild, args: ['grid', { isSignal: true }] }], addCardBtn: [{ type: i0.ViewChild, args: ['addCardBtn', { isSignal: true }] }] } });
|
|
1135
1146
|
|
|
1136
1147
|
class VisitedServiceCard {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openmfp-ngx.mjs","sources":["../../../projects/ngx/declarative-ui/table/utils/proccess-fields.ts","../../../projects/ngx/declarative-ui/table/utils/resource-field-by-path.ts","../../../projects/ngx/declarative-ui/table/utils/cssRules.engine.ts","../../../projects/ngx/declarative-ui/table/utils/field-definition.utils.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-cell.constants.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-value.component.html","../../../projects/ngx/declarative-ui/resource-field/link-value/link-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/link-value/link-value.component.html","../../../projects/ngx/declarative-ui/resource-field/secret-value/secret-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/secret-value/secret-value.component.html","../../../projects/ngx/declarative-ui/resource-field/tag-list-value/tag-list-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/tag-list-value/tag-list-value.component.html","../../../projects/ngx/declarative-ui/resource-field/resource-field.component.ts","../../../projects/ngx/declarative-ui/resource-field/resource-field.component.html","../../../projects/ngx/declarative-ui/table/declarative-table/declarative-table.component.ts","../../../projects/ngx/declarative-ui/table/declarative-table/declarative-table.component.html","../../../projects/ngx/declarative-ui/form/utils/set-property-by-path.ts","../../../projects/ngx/declarative-ui/form/declarative-form/declarative-form.component.ts","../../../projects/ngx/declarative-ui/form/declarative-form/declarative-form.component.html","../../../projects/ngx/declarative-ui/table-card/declarative-table-card.component.ts","../../../projects/ngx/declarative-ui/table-card/declarative-table-card.component.html","../../../projects/ngx/declarative-ui/dashboard/models/dashboard.model.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/dashboard-card-registry.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-angular-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-sap-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-wc-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/dashboard-card.component.ts","../../../projects/ngx/declarative-ui/dashboard/card/dashboard-card.component.html","../../../projects/ngx/declarative-ui/dashboard/edit-cards-dialog/edit-cards-dialog.component.ts","../../../projects/ngx/declarative-ui/dashboard/edit-cards-dialog/edit-cards-dialog.component.html","../../../projects/ngx/declarative-ui/dashboard/models/constants.ts","../../../projects/ngx/declarative-ui/dashboard/section/dashboard-section.component.ts","../../../projects/ngx/declarative-ui/dashboard/section/dashboard-section.component.html","../../../projects/ngx/declarative-ui/dashboard/dashboard/dashboard.component.ts","../../../projects/ngx/declarative-ui/dashboard/dashboard/dashboard.component.html","../../../projects/ngx/cards/visited-service-card/visited-service-card.component.ts","../../../projects/ngx/cards/visited-service-card/visited-service-card.component.html","../../../projects/ngx/cards/favorites/favorites.component.ts","../../../projects/ngx/cards/favorites/favorites.component.html","../../../projects/ngx/cards/service-status/service-status-card.component.ts","../../../projects/ngx/cards/service-status/service-status-card.component.html","../../../projects/ngx/cards/whats-new/whats-new.component.ts","../../../projects/ngx/cards/whats-new/whats-new.component.html","../../../projects/ngx/openmfp-ngx.ts"],"sourcesContent":["import { TableFieldDefinition } from '../models';\n\ntype GroupBase = NonNullable<TableFieldDefinition['group']>;\ntype ProcessedGroup = GroupBase & {\n fields?: TableFieldDefinition[];\n};\n\nexport type ProcessedTableFieldDefinition = Omit<TableFieldDefinition, 'group'> & {\n group?: ProcessedGroup;\n};\n\nexport const processGroupFields = (\n fields: TableFieldDefinition[],\n): ProcessedTableFieldDefinition[] => {\n return combineGroupFields(fields);\n};\n\nconst collectGroupFields = (\n fields: TableFieldDefinition[],\n): Record<string, TableFieldDefinition[]> => {\n return fields.reduce(\n (acc, f): Record<string, TableFieldDefinition[]> => {\n if (!f.group?.name) {\n return acc;\n }\n\n const key = f.group.name;\n if (!acc[key]) {\n acc[key] = [];\n }\n\n // Strip group information from the field when adding to the fields array\n const { group, ...fieldWithoutGroup } = f;\n acc[key].push(fieldWithoutGroup);\n return acc;\n },\n {} as Record<string, TableFieldDefinition[]>,\n );\n};\n\nconst combineGroupFields = (fields: TableFieldDefinition[]): ProcessedTableFieldDefinition[] => {\n const seenGroup = new Set<string>();\n const groupFields = collectGroupFields(fields);\n const result: ProcessedTableFieldDefinition[] = [];\n\n fields.forEach((f) => {\n if (!f.group?.name) {\n result.push(f);\n return;\n }\n\n const key = f.group.name;\n if (seenGroup.has(key)) {\n return;\n }\n\n seenGroup.add(key);\n\n const grouped: ProcessedTableFieldDefinition = {\n ...f,\n group: {\n ...f.group,\n fields: groupFields[key],\n },\n };\n\n result.push(grouped);\n });\n\n return result;\n};\n","import { PropertyField, TransformType } from '../../models';\nimport jsonpath from 'jsonpath';\n\nexport const getResourceValueByJsonPath = <T>(\n resource: T,\n field: {\n jsonPathExpression?: string;\n property?: string | string[];\n propertyField?: PropertyField;\n },\n) => {\n const property = field.jsonPathExpression || field.property;\n if (!property) {\n return undefined;\n }\n\n if (property instanceof Array) {\n console.error(\n `Property defined as an array: ${JSON.stringify(property)}, provide \"jsonPathExpression\" field to properly ready resource value`,\n );\n return undefined;\n }\n\n const prefix = property.startsWith('$.') ? '' : '$.';\n const queryResult = jsonpath.query(resource, `${prefix}${property}`);\n const value = queryResult.length ? queryResult[0] : undefined;\n\n if (value && field.propertyField) {\n return executeTransform(\n value[field.propertyField.key],\n field.propertyField.transform,\n );\n }\n\n return value;\n};\n\nconst executeTransform = (\n value: string | undefined,\n transform: TransformType[] | undefined,\n): string | undefined => {\n if (value == null || transform == null || !transform.length) return value;\n\n return transform.reduce((acc, t) => {\n if (acc == null) return acc;\n\n switch (t) {\n case 'uppercase':\n return acc.toUpperCase();\n case 'lowercase':\n return acc.toLowerCase();\n case 'capitalize': {\n const str = String(acc);\n return str.length ? str.charAt(0).toUpperCase() + str.slice(1) : str;\n }\n case 'decode': {\n try {\n return decodeBase64(acc);\n } catch {\n return acc;\n }\n }\n case 'encode': {\n try {\n return encodeBase64(acc);\n } catch {\n return acc;\n }\n }\n default:\n return acc;\n }\n }, value);\n};\n\nexport const encodeBase64 = (str: string): string => {\n try {\n const utf8Bytes = new TextEncoder().encode(str);\n const binaryString = Array.from(utf8Bytes, (byte) =>\n String.fromCharCode(byte),\n ).join('');\n return btoa(binaryString);\n } catch (error) {\n console.error('Base64 encoding failed:', error);\n throw new Error('Failed to encode string to Base64');\n }\n};\n\nexport const decodeBase64 = (base64: string): string => {\n try {\n const binaryString = atob(base64);\n const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n } catch (error) {\n console.error('Base64 decoding failed:', error);\n throw new Error('Failed to decode Base64 string');\n }\n};\n","import { CssRule } from '../../models';\n\nexport const parseStringValue = (value: string) => {\n if (value === 'true') {\n return true;\n }\n\n if (value === 'false') {\n return false;\n }\n\n if (!isNaN(Number(value))) {\n return Number(value);\n }\n\n return value;\n};\n\nexport const cssRuleResolver = (\n rule: CssRule,\n resourceValue: string,\n): boolean => {\n const parsedResouceValue = parseStringValue(resourceValue);\n const parsedConditionValue = parseStringValue(rule.if.value);\n\n switch (rule.if.condition) {\n case 'equals':\n return parsedResouceValue === parsedConditionValue;\n case 'notEquals':\n return parsedResouceValue !== parsedConditionValue;\n case 'greaterThan':\n return parsedResouceValue > parsedConditionValue;\n case 'greaterThanOrEqual':\n return parsedResouceValue >= parsedConditionValue;\n case 'lessThan':\n return parsedResouceValue < parsedConditionValue;\n case 'lessThanOrEqual':\n return parsedResouceValue <= parsedConditionValue;\n case 'contains':\n if (Array.isArray(parsedResouceValue)) {\n return parsedResouceValue.includes(parsedConditionValue);\n } else if (\n typeof parsedResouceValue === 'string' &&\n typeof parsedConditionValue === 'string'\n ) {\n return parsedResouceValue.includes(parsedConditionValue);\n }\n\n return false;\n }\n return false;\n};\n\nexport const evaluateCssRules = (\n value: string,\n rules?: CssRule[],\n): Partial<CSSStyleDeclaration> => {\n if (!rules) {\n return {};\n }\n\n return rules.reduce((acc, rule) => {\n const result = cssRuleResolver(rule, value);\n if (result) {\n return { ...acc, ...rule.styles };\n }\n return acc;\n }, {});\n};\n","import { FieldDefinition } from '../../models';\nimport { getResourceValueByJsonPath } from './resource-field-by-path';\n\nexport function getFieldValue<T>(\n field: FieldDefinition,\n resource: T | undefined,\n) {\n if (resource) {\n return getResourceValueByJsonPath<T>(resource, field) ?? field.value;\n }\n\n return field.value;\n}\n","export const ICON_DESIGN_POSITIVE = 'Positive';\nexport const ICON_DESIGN_NEGATIVE = 'Negative';\n\nexport const ICON_NAME_POSITIVE = 'accept';\nexport const ICON_NAME_NEGATIVE = 'decline';\n","import {\n ICON_DESIGN_NEGATIVE,\n ICON_DESIGN_POSITIVE,\n ICON_NAME_NEGATIVE,\n ICON_NAME_POSITIVE,\n} from './boolean-cell.constants';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\n\nexport type IconDesignType = typeof ICON_DESIGN_POSITIVE | typeof ICON_DESIGN_NEGATIVE;\n\n@Component({\n selector: 'mfp-boolean-value',\n imports: [Icon],\n templateUrl: './boolean-value.component.html',\n styleUrl: './boolean-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class BooleanValue {\n boolValue = input.required<boolean>();\n testId = input<string>('boolean-value-icon');\n iconDesign = computed<IconDesignType>(() => {\n return this.boolValue() ? ICON_DESIGN_POSITIVE : ICON_DESIGN_NEGATIVE;\n });\n iconName = computed<string>(() => {\n return this.boolValue() ? ICON_NAME_POSITIVE : ICON_NAME_NEGATIVE;\n });\n}\n","<ui5-icon [attr.test-id]=\"testId()\" [design]=\"iconDesign()\" [name]=\"iconName()\" />\n","import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Link } from '@fundamental-ngx/ui5-webcomponents/link';\n\n@Component({\n selector: 'mfp-link-value',\n imports: [Link],\n templateUrl: './link-value.component.html',\n styleUrl: './link-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class LinkValue {\n urlValue = input.required<string>();\n testId = input<string>('link-value-link');\n\n public stopPropagation(event: Event) {\n event.stopPropagation();\n }\n}\n","<ui5-link\n target=\"_blank\"\n [attr.test-id]=\"testId()\"\n [href]=\"urlValue()\"\n [tooltip]=\"urlValue()\"\n (click)=\"stopPropagation($event)\"\n>Link</ui5-link>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n@Component({\n selector: 'mfp-secret-value',\n imports: [],\n templateUrl: './secret-value.component.html',\n styleUrl: './secret-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: []\n})\nexport class SecretValue {\n value = input.required<string>();\n isVisible = input<boolean>(false);\n testId = input<string>('secret-value');\n maskedValue = computed(() => '*'.repeat(this.value().length || 8));\n}\n","<span class=\"secret-value\" [attr.test-id]=\"testId()\" [class.masked]=\"!isVisible()\">\n @if (isVisible()) {\n {{ value() }}\n } @else {\n {{ maskedValue() }}\n }\n</span>\n","import { TagSettings } from '../../models';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Tag } from '@fundamental-ngx/ui5-webcomponents/tag';\n\n@Component({\n selector: 'mfp-tag-list-value',\n imports: [Tag],\n templateUrl: './tag-list-value.component.html',\n styleUrl: './tag-list-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TagListValue {\n tags = input.required<string[]>();\n tagSettings = input<TagSettings>();\n testId = input<string>('tag-list-value');\n}\n","<span class=\"tag-list\" [attr.test-id]=\"testId()\">\n @for (tag of tags(); track $index) {\n <ui5-tag\n [colorScheme]=\"tagSettings()?.colorScheme\"\n [design]=\"tagSettings()?.design ?? 'Neutral'\"\n [hideStateIcon]=\"true\"\n >{{ tag }}</ui5-tag>\n }\n</span>\n","import {\n FieldDefinition,\n GenericResource,\n ResourceFieldButtonClickEvent,\n} from '../models';\nimport { evaluateCssRules } from '../table/utils/cssRules.engine';\nimport { getFieldValue } from '../table/utils/field-definition.utils';\nimport { BooleanValue } from './boolean-value/boolean-value.component';\nimport { LinkValue } from './link-value/link-value.component';\nimport { SecretValue } from './secret-value/secret-value.component';\nimport { TagListValue } from './tag-list-value/tag-list-value.component';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/AllIcons.js';\n\n@Component({\n selector: 'mfp-resource-field',\n imports: [Icon, BooleanValue, LinkValue, SecretValue, Button, TagListValue],\n templateUrl: './resource-field.component.html',\n styleUrl: './resource-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class ResourceField<T extends GenericResource, F extends FieldDefinition> {\n fieldDefinition = input.required<F>();\n resource = input<T>();\n readonly buttonClick = output<ResourceFieldButtonClickEvent<T>>();\n\n value = computed(() =>\n getFieldValue(this.fieldDefinition(), this.resource()),\n );\n\n uiSettings = computed(() => this.fieldDefinition().uiSettings);\n displayAs = computed(() => this.uiSettings()?.displayAs);\n withCopyButton = computed(() => this.uiSettings()?.withCopyButton);\n cssCustomization = computed(() => this.uiSettings()?.cssCustomization);\n tooltipIcon = computed(() => this.uiSettings()?.tooltipIcon);\n cssRules = computed(() =>\n evaluateCssRules(this.value(), this.uiSettings()?.cssRules),\n );\n cssStyles = computed(() => ({\n ...this.cssCustomization(),\n ...this.cssRules(),\n }));\n\n isBoolLike = computed(() => this.boolValue() !== undefined);\n isUrlValue = computed(() => this.checkValidUrl(this.stringValue()));\n testId = computed(() => `resource-field-${this.fieldDefinition().property}`);\n\n boolValue = computed(() => this.normalizeBoolean(this.value()));\n stringValue = computed(() => this.normalizeString(this.value()));\n tags = computed(() => this.normalizeTagsArray(this.value()));\n isVisible = signal(false);\n copySuccess = signal(false);\n\n toggleVisibility(e: Event): void {\n e.stopPropagation();\n this.isVisible.set(!this.isVisible());\n }\n\n private normalizeBoolean(value: unknown): boolean | undefined {\n const normalizedValue = value?.toString()?.toLowerCase();\n if (normalizedValue === 'true') {\n return true;\n }\n if (normalizedValue === 'false') {\n return false;\n }\n return undefined;\n }\n\n private normalizeString(value: unknown): string | undefined {\n if (typeof value !== 'string' || !value.trim()) {\n return undefined;\n }\n\n return value;\n }\n\n private normalizeTagsArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map(v => String(v).trim()).filter(v => v.length > 0);\n }\n if (typeof value === 'string') {\n const separator = this.uiSettings()?.tagSettings?.valueSeparator ?? ',';\n return value.split(separator).map(v => v.trim()).filter(v => v.length > 0);\n }\n return [];\n }\n\n private checkValidUrl(value: string | undefined): boolean {\n if (!value) {\n return false;\n }\n\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n }\n\n public copyValue(event: Event) {\n event.stopPropagation();\n navigator.clipboard.writeText(this.value() || '').then(() => {\n this.copySuccess.set(true);\n setTimeout(() => {\n this.copySuccess.set(false);\n }, 2000);\n });\n }\n\n protected buttonClicked(event: MouseEvent) {\n event.stopPropagation();\n this.buttonClick.emit({\n event,\n field: this.fieldDefinition(),\n resource: this.resource(),\n });\n }\n}\n","@let displayType = displayAs();\n<span [attr.test-id]=\"testId()\" [style]=\"cssStyles()\">\n @if (displayType === 'secret') {\n <span class=\"secret-value-container\">\n <mfp-secret-value [isVisible]=\"isVisible()\" [testId]=\"testId() + '-secret'\" [value]=\"value()\" />\n <ui5-icon\n class=\"toggle-icon\"\n mode=\"Interactive\"\n [accessibleName]=\"isVisible() ? 'Hide value' : 'Show value'\"\n [attr.test-id]=\"testId() + '-secret-toggle'\"\n [name]=\"isVisible() ? 'hide' : 'show'\"\n (click)=\"toggleVisibility($event)\"\n />\n </span>\n } @else if (displayType === 'boolIcon' && isBoolLike()) {\n <mfp-boolean-value [boolValue]=\"boolValue()!\" [testId]=\"testId() + '-boolean'\" />\n } @else if (displayType === 'link' && isUrlValue()) {\n <mfp-link-value [testId]=\"testId() + '-link'\" [urlValue]=\"stringValue()!\" />\n } @else if (displayType === 'tooltip') {\n <ui5-icon\n [accessibleName]=\"stringValue()!\"\n [attr.test-id]=\"testId() + '-tooltip'\"\n [name]=\"tooltipIcon() ?? 'hint'\"\n [showTooltip]=\"true\"\n />\n } @else if (displayType === 'alert') {\n @if (!value()) {\n <ui5-icon\n design=\"Critical\"\n name=\"alert\"\n [accessibleName]=\"resource()?.accessibleName ?? ''\"\n [attr.test-id]=\"testId() + '-icon'\"\n [showTooltip]=\"true\"\n (click)=\"$event.stopPropagation()\"\n />\n }\n } @else if (displayType === 'img' && value()) {\n <img alt=\"Resource image\" class=\"image-cell\" [src]=\"value()\" />\n } @else if (displayType === 'button') {\n @let buttonSettings = uiSettings()?.buttonSettings;\n <ui5-button\n [accessibleName]=\"buttonSettings?.text || buttonSettings?.tooltip || buttonSettings?.icon || ''\"\n [design]=\"buttonSettings?.design\"\n [endIcon]=\"buttonSettings?.endIcon\"\n [icon]=\"buttonSettings?.icon\"\n [tooltip]=\"buttonSettings?.tooltip\"\n (click)=\"buttonClicked($event)\"\n >{{ buttonSettings?.text }}</ui5-button\n > \n } @else if (displayType === 'tag') {\n <mfp-tag-list-value\n [tagSettings]=\"uiSettings()?.tagSettings\"\n [tags]=\"tags()\"\n [testId]=\"testId() + '-tags'\"\n />\n } @else {\n {{ value() }}\n }\n</span>\n\n@if (withCopyButton()) {\n <ui5-icon\n class=\"toggle-icon\"\n mode=\"Interactive\"\n [accessibleName]=\"copySuccess() ? 'Copied' : 'Copy value'\"\n [attr.test-id]=\"testId() + '-copy'\"\n [design]=\"copySuccess() ? 'Positive' : 'Default'\"\n [name]=\"copySuccess() ? 'accept' : 'copy'\"\n (click)=\"copyValue($event)\"\n />\n}\n","import { GenericResource } from '../../models';\nimport { TableFieldDefinition, ResourceFieldButtonClickEvent } from '../models';\nimport { processGroupFields } from '../utils/proccess-fields';\nimport { getResourceValueByJsonPath } from '../utils/resource-field-by-path';\nimport { ResourceField } from '../../resource-field/resource-field.component';\nimport {\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { IllustratedMessage } from '@fundamental-ngx/ui5-webcomponents-fiori';\nimport { Option } from '@fundamental-ngx/ui5-webcomponents/option';\nimport { Select } from '@fundamental-ngx/ui5-webcomponents/select';\nimport { Table } from '@fundamental-ngx/ui5-webcomponents/table';\nimport { TableCell } from '@fundamental-ngx/ui5-webcomponents/table-cell';\nimport { TableGrowing } from '@fundamental-ngx/ui5-webcomponents/table-growing';\nimport { TableHeaderCell } from '@fundamental-ngx/ui5-webcomponents/table-header-cell';\nimport { TableHeaderRow } from '@fundamental-ngx/ui5-webcomponents/table-header-row';\nimport { TableRow } from '@fundamental-ngx/ui5-webcomponents/table-row';\nimport '@ui5/webcomponents-fiori/dist/illustrations/NoData.js';\n\n@Component({\n selector: 'mfp-declarative-table',\n imports: [\n IllustratedMessage,\n Table,\n TableCell,\n TableHeaderCell,\n TableHeaderRow,\n TableRow,\n ResourceField,\n Select,\n Option,\n TableGrowing,\n ],\n templateUrl: './declarative-table.component.html',\n styleUrl: './declarative-table.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DeclarativeTable<T extends GenericResource> {\n columns = input.required<TableFieldDefinition[]>();\n resources = input.required<T[]>();\n trackByPath = input<string>('id');\n\n totalItemsCount = input<number>();\n paginationLimit = input<number>(5);\n hasMore = input<boolean>(false);\n growMode = input<'Scroll' | 'Button' | undefined>('Button');\n loadMoreButtonText = input<string | undefined>('Load More');\n height = input<number>();\n\n readonly buttonClick = output<ResourceFieldButtonClickEvent<T>>();\n readonly tableRowClicked = output<T>();\n readonly loadMoreResources = output<void>();\n readonly paginationLimitChanged = output<number>();\n\n columnTrackBy = (column: TableFieldDefinition, index: number) =>\n column.property ?? column.value ?? index;\n rowTrackBy = (_index: number, item: T): unknown =>\n getResourceValueByJsonPath(item, { property: this.trackByPath() }) ??\n _index;\n viewColumns = computed(() => processGroupFields(this.columns()));\n}\n","<ui5-table\n test-id=\"generic-table\"\n [style.height]=\"height() ? height() + 'px' : null\"\n [style.overflow-y]=\"'auto'\">\n <ui5-table-header-row slot=\"headerRow\" [sticky]=\"growMode() === 'Scroll' && !!height()\">\n @for (column of viewColumns(); track columnTrackBy(column, $index)) {\n @if (column.group) {\n <ui5-table-header-cell\n [attr.test-id]=\"'generic-table-header-' + column.group.name\"\n [width]=\"column.uiSettings?.columnWidth ?? 'auto'\"\n >{{ column.group.label ?? column.group.name }}</ui5-table-header-cell\n >\n } @else {\n <ui5-table-header-cell\n [attr.test-id]=\"'generic-table-header-' + column.property\"\n [width]=\"column.uiSettings?.columnWidth ?? 'auto'\"\n >{{ column.label }}</ui5-table-header-cell\n >\n }\n }\n </ui5-table-header-row>\n\n @for (item of resources(); let i = $index; track rowTrackBy($index, item)) {\n <ui5-table-row\n [attr.test-id]=\"'generic-table-row-' + i\"\n [class.disabled]=\"item.isAvailable === false\"\n [interactive]=\"item.isAvailable !== false\"\n (click)=\"tableRowClicked.emit(item)\"\n >\n @for (column of viewColumns(); track columnTrackBy(column, $index)) {\n @if (column.group) {\n <ui5-table-cell\n [attr.test-id]=\"'generic-table-cell-' + i + '-' + column.group.name\"\n >\n @let isMultiline = column.group.multiline ?? true;\n <div\n class=\"flex\"\n [style.alignItems]=\"isMultiline ? column.uiSettings?.align : null\"\n [style.flexDirection]=\"isMultiline ? 'column' : 'row'\"\n [style.justifyContent]=\"isMultiline ? null : column.uiSettings?.align\">\n @for (\n field of column.group.fields;\n let last = $last;\n track columnTrackBy(field, $index)\n ) {\n <span\n class=\"group-value\"\n [attr.test-id]=\"\n 'generic-table-cell-' +\n i +\n '-' +\n column.group.name +\n '-' +\n field.property\n \"\n >\n @if (field.label) {\n <span>{{ field.label }}: </span>\n }\n <mfp-resource-field\n [fieldDefinition]=\"field\"\n [resource]=\"item\"\n (buttonClick)=\"buttonClick.emit($event)\"\n />\n </span>\n @if (!last && column.group.delimiter) {\n <span class=\"delimiter\">{{ column.group.delimiter }}</span>\n }\n }\n </div>\n </ui5-table-cell>\n } @else {\n <ui5-table-cell\n [attr.test-id]=\"'generic-table-cell-' + i + '-' + column.property\"\n >\n <div class=\"flex\" [style.justifyContent]=\"column.uiSettings?.align\">\n <mfp-resource-field\n [fieldDefinition]=\"column\"\n [resource]=\"item\"\n (buttonClick)=\"buttonClick.emit($event)\"\n />\n </div>\n </ui5-table-cell>\n }\n }\n </ui5-table-row>\n } @empty {\n <ui5-illustrated-message\n name=\"NoData\"\n slot=\"noData\"\n test-id=\"generic-table-view-nodata\"\n >\n <span slot=\"title\">No Resources</span>\n <span slot=\"subtitle\">There are currently no items to show.</span>\n </ui5-illustrated-message>\n }\n\n @if (hasMore()) {\n <ui5-table-growing\n id=\"growing\"\n slot=\"features\"\n [mode]=\"growMode()\"\n [text]=\"loadMoreButtonText()\"\n (ui5LoadMore)=\"loadMoreResources.emit()\"\n />\n }\n</ui5-table>\n\n<!-- Pagination Control -->\n<div\n class=\"pagination-footer\"\n style=\"\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0rem 1rem;\n min-height: 3rem;\n border-top: 1px solid var(--sapList_BorderColor);\n \"\n>\n <div style=\"display: flex; align-items: center; gap: 1.5rem\">\n <div style=\"display: flex; align-items: center; gap: 0.5rem\">\n <span\n style=\"color: var(--sapTextColor); font-size: var(--sapFontSmallSize)\"\n >Items per load:</span\n >\n <ui5-select\n style=\"width: 5rem\"\n [value]=\"paginationLimit().toString()\"\n (change)=\"paginationLimitChanged.emit(+$any($event)?.target?.value)\"\n >\n <ui5-option value=\"5\">5</ui5-option>\n <ui5-option value=\"10\">10</ui5-option>\n <ui5-option value=\"50\">50</ui5-option>\n <ui5-option value=\"100\">100</ui5-option>\n </ui5-select>\n </div>\n\n <span\n style=\"color: var(--sapTextColor); font-size: var(--sapFontSmallSize)\"\n >\n Items loaded:\n <b>{{\n totalItemsCount() !== undefined\n ? resources().length + ' / ' + totalItemsCount()\n : resources().length\n }}</b>\n </span>\n </div>\n</div>\n","export function setPropertyByPath<T extends Record<string, unknown>>(\n object: T,\n path: string,\n value: unknown,\n): T {\n const segments = path.split('.').filter(Boolean);\n if (segments.length === 0) {\n return object;\n }\n\n let current: Record<string, unknown> = object;\n\n for (let i = 0; i < segments.length; i += 1) {\n const key = segments[i];\n if (i === segments.length - 1) {\n current[key] = value;\n break;\n }\n\n const existing = current[key];\n\n if (existing === undefined || existing === null || typeof existing !== 'object') {\n current[key] = {};\n }\n\n current = current[key] as Record<string, unknown>;\n }\n\n return object;\n}\n","import { GenericResource } from '../../models';\nimport {\n FormFieldChangeEvent,\n FormFieldDefinition,\n FormFieldErrors,\n} from '../models';\nimport { setPropertyByPath } from '../utils/set-property-by-path';\nimport {\n Component,\n ViewEncapsulation,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { Input } from '@fundamental-ngx/ui5-webcomponents/input';\nimport { Label } from '@fundamental-ngx/ui5-webcomponents/label';\nimport { Option } from '@fundamental-ngx/ui5-webcomponents/option';\nimport { Select } from '@fundamental-ngx/ui5-webcomponents/select';\n\n@Component({\n selector: 'mfp-declarative-form',\n imports: [ReactiveFormsModule, Input, Label, Select, Option],\n templateUrl: './declarative-form.component.html',\n styleUrl: './declarative-form.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DeclarativeForm<T extends GenericResource> {\n readonly fields = input.required<FormFieldDefinition[]>();\n readonly initialValues = input<T>({} as T);\n readonly fieldErrors = input<FormFieldErrors>({});\n\n readonly fieldChange = output<FormFieldChangeEvent>();\n readonly formSubmit = output<T>();\n\n readonly form: FormGroup;\n\n private readonly fb = inject(FormBuilder);\n\n constructor() {\n this.form = this.fb.group({});\n\n effect(() => {\n this.rebuildControls(this.fields());\n });\n\n effect(() => {\n this.setInitialValues(this.initialValues());\n });\n\n effect(() => {\n const fields = this.fields();\n this.initialValues();\n\n for (const field of fields) {\n if (field.validation) {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: this.form.controls[field.name]?.value ?? '',\n });\n }\n }\n });\n }\n\n setFormControlValue($event: Event, field: FormFieldDefinition): void {\n const target = $event.target as\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement;\n\n const control = this.form.controls[field.name];\n control.setValue(target.value);\n control.markAsTouched();\n control.markAsDirty();\n\n if (field.validation === 'onChange') {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: control.value,\n });\n }\n }\n\n getError(name: string): string | null {\n const control = this.form.controls[name];\n const error = this.fieldErrors()[name];\n\n return error && (control.dirty || control.touched) ? error : null;\n }\n\n getValueState(name: string): 'None' | 'Negative' {\n return this.getError(name) ? 'Negative' : 'None';\n }\n\n onFieldBlur(field: FormFieldDefinition): void {\n this.form.controls[field.name]?.markAsTouched();\n\n if (field.validation === 'onBlur') {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: this.form.controls[field.name]?.value,\n });\n }\n }\n\n submit(): void {\n this.formSubmit.emit(this.buildOutputValue());\n }\n\n clear(): void {\n this.form.reset();\n }\n\n private rebuildControls(fields: FormFieldDefinition[]): void {\n const existingControls = this.form.controls;\n const nextFieldNames = new Set(fields.map((field) => field.name));\n\n for (const field of fields) {\n const existingControl = existingControls[field.name];\n\n if (existingControl) {\n existingControl.clearValidators();\n existingControl.updateValueAndValidity({ emitEvent: false });\n continue;\n }\n\n this.form.addControl(field.name, new FormControl(''));\n }\n\n for (const controlName of Object.keys(existingControls)) {\n if (!nextFieldNames.has(controlName)) {\n this.form.removeControl(controlName);\n }\n }\n\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n\n private setInitialValues(\n initialValues: Record<string, unknown> | null | undefined,\n ): void {\n if (!initialValues) {\n return;\n }\n\n this.form.patchValue(initialValues, { emitEvent: false });\n this.form.markAsPristine({ emitEvent: false });\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n\n private buildOutputValue(): T {\n const result = {} as T;\n\n for (const key of Object.keys(this.form.controls)) {\n setPropertyByPath(result, key, this.form.controls[key].value);\n }\n\n return result;\n }\n}\n","<section class=\"form\" test-id=\"generic-form\" [formGroup]=\"form\">\n @for (field of fields(); track field.name) {\n @let control = form.controls[field.name];\n <div\n class=\"inputs\"\n [attr.test-id]=\"'generic-form-field-container-' + field.name\"\n >\n <ui5-label\n show-colon\n [attr.test-id]=\"'generic-form-field-label-' + field.name\"\n [required]=\"field.required\"\n >{{ field.label }}</ui5-label\n >\n @if (field.values?.length) {\n <ui5-select\n class=\"input\"\n [attr.test-id]=\"'generic-form-field-' + field.name\"\n [disabled]=\"field.disabled\"\n [required]=\"field.required\"\n [value]=\"control.value\"\n [valueState]=\"getValueState(field.name)\"\n (blur)=\"onFieldBlur(field)\"\n (change)=\"setFormControlValue($event, field)\"\n (input)=\"setFormControlValue($event, field)\"\n >\n @if (getError(field.name); as error) {\n <div slot=\"valueStateMessage\">{{ error }}</div>\n }\n @for (value of [''].concat(field.values ?? []); track value) {\n <ui5-option\n [attr.test-id]=\"\n 'generic-form-field-' +\n field.name +\n '-option-' +\n (value || 'empty')\n \"\n [selected]=\"value === control.value\"\n [value]=\"value\"\n >{{ value }}</ui5-option\n >\n }\n </ui5-select>\n } @else {\n <ui5-input\n class=\"input\"\n [attr.test-id]=\"'generic-form-field-' + field.name\"\n [disabled]=\"field.disabled\"\n [required]=\"field.required\"\n [value]=\"control.value\"\n [valueState]=\"getValueState(field.name)\"\n (blur)=\"onFieldBlur(field)\"\n (change)=\"setFormControlValue($event, field)\"\n (input)=\"setFormControlValue($event, field)\"\n >\n @if (getError(field.name); as error) {\n <div slot=\"valueStateMessage\">{{ error }}</div>\n }\n </ui5-input>\n }\n </div>\n }\n</section>\n","import { FormFieldChangeEvent, FormFieldDefinition } from '../form';\nimport { DeclarativeForm } from '../form/declarative-form/declarative-form.component';\nimport { GenericResource } from '../models';\nimport { DeclarativeTable } from '../table/declarative-table/declarative-table.component';\nimport {\n TableFieldDefinition,\n ResourceFieldButtonClickEvent,\n} from '../table/models';\nimport { getResourceValueByJsonPath } from '../table/utils/resource-field-by-path';\nimport { TableCardConfig, TableCardFormState } from './models/configs';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n Injector,\n ViewEncapsulation,\n afterNextRender,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Input } from '@fundamental-ngx/ui5-webcomponents/input';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/add.js';\nimport '@ui5/webcomponents-icons/dist/search.js';\nimport { debounceTime } from 'rxjs';\n\ntype SearchState = 'collapsed' | 'expanded' | 'collapsing';\n\n@Component({\n selector: 'mfp-declarative-table-card',\n imports: [\n DeclarativeTable,\n DeclarativeForm,\n ReactiveFormsModule,\n Dialog,\n Title,\n Button,\n Icon,\n Input,\n ],\n templateUrl: './declarative-table-card.component.html',\n styleUrl: './declarative-table-card.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class DeclarativeTableCard<T extends GenericResource> {\n resources = input.required<T[]>();\n\n config = input.required<TableCardConfig>();\n createFormState = input<TableCardFormState>({});\n editFormState = input<TableCardFormState>({});\n\n readonly actionButtonClick = output<ResourceFieldButtonClickEvent<T>>();\n readonly tableRowClicked = output<T>();\n readonly loadMoreResources = output<void>();\n readonly paginationLimitChanged = output<number>();\n\n readonly searchChanged = output<string>();\n readonly createFieldChange = output<FormFieldChangeEvent>();\n readonly editFieldChange = output<{\n resource: T;\n formChangeEvent: FormFieldChangeEvent;\n }>();\n readonly createSubmit = output<T>();\n readonly editSubmit = output<{\n resource: T;\n value: Record<string, unknown>;\n }>();\n readonly deleteSubmit = output<T>();\n\n protected searchState = signal<SearchState>('collapsed');\n protected searchExpanded = computed(() => this.searchState() !== 'collapsed');\n protected searchCollapsing = computed(\n () => this.searchState() === 'collapsing',\n );\n protected searchControl = new FormControl('');\n protected searchInputRef = viewChild<Input>('searchInput');\n\n protected createDialogOpen = signal(false);\n protected editDialogOpen = signal(false);\n protected deleteDialogOpen = signal(false);\n\n protected pendingResource = signal<T | null>(null);\n\n protected tableConfig = computed(() => this.config().tableConfig);\n protected header = computed(() => this.config().header);\n protected headerTooltip = computed(() => this.config().headerTooltip);\n protected createFormConfig = computed(\n () => this.config().createResourceFormConfig,\n );\n protected editFormConfig = computed(\n () => this.config().editResourceFormConfig,\n );\n protected deleteConfirmationConfig = computed(\n () => this.config().deleteResourceConfirmationConfig,\n );\n protected createButtonConfig = computed(\n () => this.config().buttonSettings?.createButton,\n );\n protected searchButtonConfig = computed(\n () => this.config().buttonSettings?.searchButton,\n );\n protected effectiveColumns = computed(() => this.addActionsColumn());\n protected editInitialValue = computed(() => {\n const pendingResource = this.pendingResource();\n const editConfig = this.editFormConfig();\n if (!pendingResource || !editConfig) {\n return {};\n }\n\n return this.buildInitialValues(editConfig.fields, pendingResource);\n });\n\n private readonly injector = inject(Injector);\n\n constructor() {\n this.searchControl.valueChanges\n .pipe(debounceTime(300), takeUntilDestroyed())\n .subscribe((value) => {\n this.searchChanged.emit(value ?? '');\n });\n }\n\n toggleSearch(): void {\n if (this.searchState() === 'expanded') {\n this.collapseSearch();\n } else if (this.searchState() === 'collapsed') {\n this.searchState.set('expanded');\n afterNextRender(\n () => {\n this.searchInputRef()?.elementRef.nativeElement.focus();\n },\n { injector: this.injector },\n );\n }\n }\n\n onSearchBlur(): void {\n if (!this.searchControl.value) {\n this.collapseSearch();\n }\n }\n\n onSearchAnimationEnd(): void {\n if (this.searchCollapsing()) {\n this.searchState.set('collapsed');\n this.searchControl.setValue('', { emitEvent: false });\n }\n }\n\n private collapseSearch(): void {\n this.searchState.set('collapsing');\n }\n\n onButtonClick(event: ResourceFieldButtonClickEvent<T>): void {\n const action = event.field.uiSettings?.buttonSettings?.action;\n if (action === 'edit' && event.resource) {\n this.pendingResource.set(event.resource);\n this.editDialogOpen.set(true);\n return;\n }\n if (action === 'delete' && event.resource) {\n this.pendingResource.set(event.resource);\n this.deleteDialogOpen.set(true);\n return;\n }\n\n this.actionButtonClick.emit(event);\n }\n\n closeCreateDialog(): void {\n this.createDialogOpen.set(false);\n }\n\n closeEditDialog(): void {\n this.editDialogOpen.set(false);\n }\n\n closeDeleteDialog(): void {\n this.deleteDialogOpen.set(false);\n }\n\n onCreateFieldChange(event: FormFieldChangeEvent): void {\n this.createFieldChange.emit(event);\n }\n\n onEditFieldChange(event: FormFieldChangeEvent): void {\n const resource = this.pendingResource();\n\n if (resource) {\n this.editFieldChange.emit({ resource, formChangeEvent: event });\n }\n }\n\n onCreateSubmit(value: T): void {\n this.createSubmit.emit(value);\n }\n\n onEditSubmit(value: Record<string, unknown>): void {\n const resource = this.pendingResource();\n\n if (resource) {\n this.editSubmit.emit({ resource, value });\n }\n }\n\n onDeleteSubmit(): void {\n const resource = this.pendingResource();\n if (resource) this.deleteSubmit.emit(resource);\n }\n\n protected hasErrors(state: TableCardFormState): boolean {\n const errors = state.fieldErrors;\n return !!errors && Object.values(errors).some((val) => !!val);\n }\n\n private addActionsColumn(): TableFieldDefinition[] {\n const cols = this.tableConfig().fields;\n const buttonSettings = this.config().buttonSettings;\n const editButton = this.editFormConfig();\n const deleteButton = this.deleteConfirmationConfig();\n const actions: TableFieldDefinition[] = [];\n\n if (editButton) {\n actions.push({\n property: 'mfp_edit_action',\n uiSettings: {\n displayAs: 'button',\n align: 'end',\n buttonSettings: {\n icon: 'edit',\n design: 'Transparent',\n action: 'edit',\n tooltip: 'Edit',\n ...buttonSettings?.editButton,\n },\n },\n group: { name: 'actions', label: '', multiline: false },\n });\n }\n\n if (deleteButton) {\n actions.push({\n property: 'mfp_delete_action',\n uiSettings: {\n align: 'end',\n displayAs: 'button',\n buttonSettings: {\n icon: 'decline',\n design: 'Transparent',\n action: 'delete',\n tooltip: 'Delete',\n ...buttonSettings?.deleteButton,\n },\n },\n group: { name: 'actions', label: '', multiline: false },\n });\n }\n\n return cols.concat(actions);\n }\n\n private buildInitialValues(\n fields: FormFieldDefinition[],\n resource?: T,\n ): Record<string, unknown> {\n if (!resource) return {};\n\n return fields.reduce(\n (acc, field) => {\n if (typeof field.name === 'string') {\n acc[field.name] =\n getResourceValueByJsonPath(resource, { property: field.name }) ??\n '';\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n }\n}\n","<div class=\"card\">\n <div class=\"card__header\">\n <div class=\"card__title\">\n @if (header(); as header) {\n {{ header }}\n @if (headerTooltip(); as tooltip) {\n <ui5-icon\n class=\"card__info-icon\"\n name=\"hint\"\n [accessibleName]=\"tooltip\"\n [showTooltip]=\"true\"\n />\n }\n }\n </div>\n <div class=\"card__actions\">\n @if (config().resourcesSearchable) {\n @if (searchExpanded()) {\n <ui5-input\n #searchInput\n [class]=\"\n 'card__search-input card__search-input--' +\n (searchCollapsing() ? 'leave' : 'enter')\n \"\n [formControl]=\"searchControl\"\n (animationend)=\"onSearchAnimationEnd()\"\n (blur)=\"onSearchBlur()\"\n />\n }\n <ui5-button\n class=\"card__search-btn\"\n design=\"Transparent\"\n [accessibleName]=\"searchButtonConfig()?.tooltip ?? 'Search'\"\n [icon]=\"searchButtonConfig()?.icon ?? 'search'\"\n [tooltip]=\"searchButtonConfig()?.tooltip ?? 'Search'\"\n (click)=\"toggleSearch()\"\n />\n }\n @if (createFormConfig()) {\n <ui5-button\n class=\"card__create-btn\"\n [accessibleName]=\"createButtonConfig()?.text || createButtonConfig()?.tooltip || 'Create'\"\n [design]=\"createButtonConfig()?.design ?? 'Transparent'\"\n [icon]=\"createButtonConfig()?.icon ?? 'add'\"\n [tooltip]=\"createButtonConfig()?.tooltip\"\n (click)=\"createDialogOpen.set(true)\"\n >\n {{ createButtonConfig()?.text ?? '' }}\n </ui5-button>\n }\n </div>\n </div>\n\n <div class=\"card__body\">\n @if (tableConfig(); as config) {\n <mfp-declarative-table\n [columns]=\"effectiveColumns()\"\n [growMode]=\"config.growMode\"\n [hasMore]=\"config.hasMore ?? false\"\n [height]=\"config.height\"\n [loadMoreButtonText]=\"config.loadMoreButtonText\"\n [paginationLimit]=\"config.paginationLimit ?? 5\"\n [resources]=\"resources()\"\n [totalItemsCount]=\"config.totalItemsCount\"\n (buttonClick)=\"onButtonClick($event)\"\n (loadMoreResources)=\"loadMoreResources.emit()\"\n (paginationLimitChanged)=\"paginationLimitChanged.emit($event)\"\n (tableRowClicked)=\"tableRowClicked.emit($event)\"\n />\n }\n </div>\n</div>\n\n@if (createFormConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Create'\"\n [open]=\"createDialogOpen()\"\n (ui5BeforeClose)=\"createDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Create' }}</ui5-title>\n </div>\n <div class=\"dialog__body\">\n <mfp-declarative-form\n #createForm\n [fieldErrors]=\"createFormState().fieldErrors ?? {}\"\n [fields]=\"config.fields\"\n (fieldChange)=\"onCreateFieldChange($event)\"\n (formSubmit)=\"onCreateSubmit($event)\"\n />\n </div>\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button\n design=\"Emphasized\"\n [disabled]=\"hasErrors(createFormState())\"\n (click)=\"createForm.submit()\"\n >\n {{ config.confirmLabel ?? 'Save' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeCreateDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n\n@if (editFormConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Edit'\"\n [open]=\"editDialogOpen()\"\n (ui5BeforeClose)=\"editDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Edit' }}</ui5-title>\n </div>\n <div class=\"dialog__body\">\n <mfp-declarative-form\n #editForm\n [fieldErrors]=\"editFormState().fieldErrors ?? {}\"\n [fields]=\"config.fields\"\n [initialValues]=\"editInitialValue()\"\n (fieldChange)=\"onEditFieldChange($event)\"\n (formSubmit)=\"onEditSubmit($event)\"\n />\n </div>\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button\n design=\"Emphasized\"\n [disabled]=\"hasErrors(editFormState())\"\n (click)=\"editForm.submit()\"\n >\n {{ config.confirmLabel ?? 'Edit' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeEditDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n\n@if (deleteConfirmationConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Confirm Delete'\"\n [open]=\"deleteDialogOpen()\"\n (ui5BeforeClose)=\"deleteDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Confirm Delete' }}</ui5-title>\n </div>\n @if (config.message) {\n <div class=\"dialog__body\">\n <p class=\"dialog__message\">{{ config.message }}</p>\n </div>\n }\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Negative\" (click)=\"onDeleteSubmit()\">\n {{ config.confirmLabel ?? 'Delete' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeDeleteDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n","import { ButtonSettings } from '../../models/ui-definition';\n\nexport const CARD_TYPES = {\n WC: 'wc',\n ANGULAR: 'angular',\n SAP_UI: 'sap-ui',\n} as const;\n\nexport type CardsType = (typeof CARD_TYPES)[keyof typeof CARD_TYPES];\n\n/** Configuration for a single card placed in the dashboard grid or a section. */\nexport interface CardConfig {\n /** Unique identifier for this card. Used as a stable key for position persistence. */\n id: string;\n /** Column span (1–12). Defaults to 12 when omitted. */\n w?: number;\n /** Row span — number of CSS grid rows occupied (1 row = 10 px by default). Defaults to 100 when omitted. */\n h?: number;\n /** Starting column index (0-based). Omit to let the grid auto-place the card. */\n x?: number;\n /** Starting row index (0-based). Omit to let the grid auto-place the card. */\n y?: number;\n /** Maximum row span in edit mode. */\n maxH?: number;\n /** Maximum column span in edit mode. */\n maxW?: number;\n /** Minimum row span in edit mode. */\n minH?: number;\n /** Minimum column span in edit mode. */\n minW?: number;\n /** ID of the parent section. Omit to place the card in the loose-card grid. */\n sectionId?: string;\n /**\n * Custom-element tag name (for `'wc'`/omitted), Angular component selector (for `'angular'`),\n * or SAP UI5 component name (for `'sap-ui'`).\n */\n component: string;\n /**\n * Render strategy for the card.\n * - `'wc'` (default) — creates a custom element and sets `componentInputs` as DOM properties.\n * - `'angular'` — looks up the Angular registry; warns and renders nothing if not found.\n * - `'sap-ui'` — mounts via `window.sap.ui.require` + `ComponentContainer`.\n */\n type?: CardsType;\n /** Key/value pairs passed to the rendered card. Behaviour depends on `type`. */\n componentInputs?: Record<string, unknown>;\n /** Human-readable label shown in the \"Add Card\" dialog. */\n label?: string;\n}\n\n/** Configuration for a named horizontal section that groups cards. */\nexport interface SectionConfig {\n /** Unique identifier for this section. */\n id: string;\n /** Column span (1–12). Defaults to 12 when omitted. */\n w?: number;\n /** Section heading displayed in the UI. */\n title?: string;\n /** When `false`, the section and its cards are excluded from edit mode. Defaults to `true` when omitted. */\n editable?: boolean;\n}\n\n/** Overrides for the two built-in dashboard toolbar buttons. */\nexport interface DashboardButtonsSettings {\n /** Partial override merged on top of the Edit View button defaults. */\n editViewButton?: Partial<ButtonSettings>;\n /** Partial override merged on top of the Add Card button defaults. */\n addCardButton?: Partial<ButtonSettings>;\n}\n\n/** Top-level configuration for the `<mfp-dashboard>` component. */\nexport interface DashboardConfig {\n /** Dashboard title rendered in the toolbar. */\n title: string;\n /** Optional subtitle shown below the title. */\n description?: string;\n /** URL of the background image applied to the dashboard host element. */\n backgroundImageUrl?: string;\n /** Overrides for the built-in Edit View and Add Card toolbar buttons. */\n buttonsSettings?: DashboardButtonsSettings;\n /** Extra action buttons rendered in the toolbar alongside the built-in ones. */\n customActions?: ButtonSettings[];\n /** When `true`, shows the Edit View button in the toolbar, allowing the user to enter edit mode. */\n editable?: boolean;\n}\n","import {\n Type,\n isDevMode,\n isStandalone,\n reflectComponentType,\n} from '@angular/core';\n\n\nexport interface RegisteredDashboardCardComponent {\n componentType: Type<unknown>;\n selector: string;\n inputs: ReadonlyMap<string, string>;\n}\n\nconst ELEMENT_SELECTOR_PATTERN = /^[a-z](?:[a-z0-9-]*)$/;\n\nconst dashboardCardRegistry = new Map<\n string,\n RegisteredDashboardCardComponent\n>();\n\nexport function addComponentToRegistry(componentTypes: Type<unknown>[]): void {\n for (const componentType of componentTypes) {\n const mirror = reflectComponentType(componentType);\n\n if (!mirror) {\n throw new Error(\n `Dashboard card registration failed: \"${getTypeName(componentType)}\" is not an Angular component.`,\n );\n }\n\n if (!isStandalone(componentType)) {\n throw new Error(\n `Dashboard card registration failed: \"${mirror.selector}\" must be a standalone Angular component.`,\n );\n }\n\n const selector = toElementSelector(mirror.selector, componentType);\n const existing = dashboardCardRegistry.get(selector);\n\n if (existing && existing.componentType !== componentType) {\n throw new Error(\n `Dashboard card registration failed: selector \"${selector}\" is already registered.`,\n );\n }\n\n dashboardCardRegistry.set(selector, {\n componentType,\n selector,\n inputs: createInputMap(mirror.inputs),\n });\n }\n}\n\nexport function getRegisteredDashboardCardComponent(\n selector: string,\n): RegisteredDashboardCardComponent | undefined {\n return dashboardCardRegistry.get(selector);\n}\n\nexport function resetDashboardCardRegistry(): void {\n dashboardCardRegistry.clear();\n}\n\nexport function warnForUnknownDashboardCardInput(\n selector: string,\n inputName: string,\n): void {\n if (!isDevMode()) return;\n\n console.warn(\n `Dashboard card \"${selector}\" ignores unknown Angular input \"${inputName}\".`,\n );\n}\n\nfunction createInputMap(\n inputs: readonly {\n readonly propName: string;\n readonly templateName: string;\n }[],\n): ReadonlyMap<string, string> {\n const bindings = new Map<string, string>();\n\n for (const input of inputs) {\n bindings.set(input.templateName, input.templateName);\n bindings.set(input.propName, input.templateName);\n }\n\n return bindings;\n}\n\nfunction toElementSelector(\n selector: string,\n componentType: Type<unknown>,\n): string {\n const normalized = selector.trim();\n\n if (!ELEMENT_SELECTOR_PATTERN.test(normalized)) {\n throw new Error(\n `Dashboard card registration failed: \"${getTypeName(componentType)}\" must use a single element selector. Received \"${selector}\".`,\n );\n }\n\n return normalized;\n}\n\nfunction getTypeName(componentType: Type<unknown>): string {\n return componentType.name.replace(/^_+/, '') || 'AnonymousComponent';\n}\n","import { CardConfig } from '../../models';\nimport {\n getRegisteredDashboardCardComponent,\n warnForUnknownDashboardCardInput,\n} from './dashboard-card-registry';\nimport { EffectCleanupRegisterFn, ViewContainerRef } from '@angular/core';\n\nexport function mountAngularCard(\n cfg: CardConfig,\n angularHost: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n): void {\n const registeredComponent = getRegisteredDashboardCardComponent(\n cfg.component,\n );\n\n if (!registeredComponent) {\n console.warn(\n `[DashboardCard] Angular component \"${cfg.component}\" is not registered`,\n );\n return;\n }\n\n const componentRef = angularHost.createComponent(\n registeredComponent.componentType,\n );\n\n for (const [inputName, value] of Object.entries(cfg.componentInputs ?? {})) {\n const templateName = registeredComponent.inputs.get(inputName);\n\n if (!templateName) {\n warnForUnknownDashboardCardInput(cfg.component, inputName);\n continue;\n }\n\n componentRef.setInput(templateName, value);\n }\n\n componentRef.changeDetectorRef.detectChanges();\n\n onCleanup(() => {\n angularHost.clear();\n });\n}\n","import { CardConfig } from '../../models';\nimport { EffectCleanupRegisterFn, ViewContainerRef } from '@angular/core';\n\nexport type SapUiRequire = (\n deps: string[],\n cb: (\n ComponentContainer: new (cfg: {\n name: string;\n manifest: boolean;\n async: boolean;\n settings: Record<string, unknown>;\n }) => { placeAt(el: HTMLElement): void; destroy(): void },\n ) => void,\n) => void;\n\nexport function mountSapCard(\n cfg: CardConfig,\n container: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n): void {\n const host = container.element.nativeElement;\n\n let sapContainer: { destroy(): void } | null = null;\n let isDestroyed = false;\n const sapRequire = (\n window as unknown as { sap?: { ui: { require: SapUiRequire } } }\n ).sap?.ui?.require;\n\n if (sapRequire) {\n sapRequire(['sap/ui/core/ComponentContainer'], (ComponentContainer) => {\n if (isDestroyed) return;\n\n const container = new ComponentContainer({\n name: cfg.component,\n manifest: true,\n async: true,\n settings: cfg.componentInputs ?? {},\n });\n\n container.placeAt(host);\n sapContainer = container;\n });\n } else {\n console.error('[DashboardCard] SAP UI5 is not available on window.sap');\n }\n\n onCleanup(() => {\n isDestroyed = true;\n sapContainer?.destroy();\n host.innerHTML = '';\n });\n}\n","import { EffectCleanupRegisterFn, Renderer2, ViewContainerRef } from '@angular/core';\nimport { CardConfig } from '../../models';\n\nexport function mountWcCard(\n cfg: CardConfig,\n container: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n renderer: Renderer2,\n): void {\n const host = container.element.nativeElement;\n const element = renderer.createElement(cfg.component);\n\n for (const [key, value] of Object.entries(cfg.componentInputs ?? {})) {\n renderer.setProperty(element, key, value);\n }\n\n renderer.appendChild(host, element);\n\n onCleanup(() => {\n host.innerHTML = '';\n });\n}\n","import { CARD_TYPES, CardConfig } from '../models';\nimport {\n Component,\n Renderer2,\n ViewContainerRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { mountSapCard, mountAngularCard, mountWcCard } from './utils';\n\n@Component({\n selector: 'mfp-dashboard-card',\n imports: [Button],\n templateUrl: './dashboard-card.component.html',\n styleUrl: './dashboard-card.component.scss',\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n '[style.grid-column]': 'gridColumn()',\n '[style.grid-row]': 'gridRow()',\n },\n})\nexport class DashboardCard {\n card = input.required<CardConfig>();\n editMode = input<boolean>(false);\n readonly removeCard = output<void>();\n protected readonly gridColumn = computed(() => {\n const width = this.card().w ?? 12;\n return this.createGridTrack(this.card().x, width);\n });\n protected readonly gridRow = computed(() => {\n const height = this.card().h ?? 100;\n return this.createGridTrack(this.card().y, height);\n });\n\n private host = viewChild('elementHost', { read: ViewContainerRef });\n private renderer = inject(Renderer2);\n\n constructor() {\n effect((onCleanup) => {\n const host = this.host();\n const cfg = this.card();\n if (!host || !cfg.component) return;\n\n host.clear();\n host.element.nativeElement.innerHTML = '';\n\n switch (cfg.type) {\n case CARD_TYPES.SAP_UI:\n mountSapCard(cfg, host, onCleanup);\n break;\n case CARD_TYPES.ANGULAR:\n mountAngularCard(cfg, host, onCleanup);\n break;\n case CARD_TYPES.WC:\n default:\n mountWcCard(cfg, host, onCleanup, this.renderer);\n break;\n }\n });\n }\n\n private createGridTrack(start: number | undefined, span: number): string {\n if (start === undefined) {\n return `span ${span}`;\n }\n\n return `${start + 1} / span ${span}`;\n }\n}\n","@if (card().component) {\n <div class=\"component-card\">\n @if (editMode()) {\n <div class=\"remove-wrapper\">\n <ui5-button\n class=\"card__remove\"\n design=\"Default\"\n icon=\"decline\"\n [accessibleName]=\"'Remove card: ' + (card().label || card().component)\"\n (click)=\"removeCard.emit()\"\n />\n </div>\n }\n <div\n class=\"component-host\"\n [style.pointer-events]=\"editMode() ? 'none' : 'auto'\"\n >\n <div #elementHost></div>\n </div>\n </div>\n} @else {\n <div class=\"card\">\n <div\n class=\"card__body\"\n [style.pointer-events]=\"editMode() ? 'none' : 'auto'\"\n >\n <ng-content />\n </div>\n </div>\n}","import { CardConfig } from '../models';\nimport {\n Component,\n ViewEncapsulation,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { List } from '@fundamental-ngx/ui5-webcomponents/list';\nimport { ListItemCustom } from '@fundamental-ngx/ui5-webcomponents/list-item-custom';\nimport { Switch } from '@fundamental-ngx/ui5-webcomponents/switch';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-edit-cards-dialog',\n imports: [Button, Dialog, List, ListItemCustom, Switch, Title],\n templateUrl: './edit-cards-dialog.component.html',\n styleUrl: './edit-cards-dialog.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class EditCardsDialog {\n availableCards = input<CardConfig[]>([]);\n addedCardsIds = input<Set<string>>(new Set());\n open = input<boolean>(false);\n\n readonly confirm = output<{ added: CardConfig[]; removed: string[] }>();\n readonly cancelled = output<void>();\n\n selectedIds = signal<Set<string>>(new Set());\n\n constructor() {\n effect(() => {\n if (this.open()) {\n const initial = new Set(\n this.availableCards()\n .filter((ac) => this.addedCardsIds().has(ac.id))\n .map((ac) => ac.id),\n );\n this.selectedIds.set(initial);\n }\n });\n }\n\n toggle(id: string): void {\n this.selectedIds.update((set) => {\n const next = new Set(set);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }\n\n confirmSave(): void {\n const availableIds = new Set(this.availableCards().map((ac) => ac.id));\n const added = this.availableCards().filter(\n (ac) => this.selectedIds().has(ac.id) && !this.addedCardsIds().has(ac.id),\n );\n const removed = [...this.addedCardsIds()].filter(\n (id) => availableIds.has(id) && !this.selectedIds().has(id),\n );\n this.confirm.emit({ added, removed });\n }\n}\n","<ui5-dialog [open]=\"open()\" (ui5BeforeClose)=\"cancelled.emit()\">\n <div class=\"edit-cards-dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">Edit Cards</ui5-title>\n </div>\n <div class=\"edit-cards-dialog\">\n <ui5-list noDataText=\"No cards available.\" selectionMode=\"None\" separators=\"Inner\">\n @for (ac of availableCards(); track ac.id) {\n <ui5-li-custom [accessibleName]=\"ac.label || ac.component\">\n <div class=\"edit-cards-dialog__list-item\">\n <span>{{ ac.label || ac.component }}</span>\n <ui5-switch\n [accessibleName]=\"ac.label || ac.component\"\n [checked]=\"selectedIds().has(ac.id)\"\n (ui5Change)=\"toggle(ac.id)\"\n />\n </div>\n </ui5-li-custom>\n }\n </ui5-list>\n </div>\n <div class=\"edit-cards-dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Emphasized\" (click)=\"confirmSave()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelled.emit()\">Cancel</ui5-button>\n </div>\n</ui5-dialog>\n","export const COMPACT_BREAKPOINT = 726;\nexport const CELL_HEIGHT = 10;\n","import { DashboardCard } from '../card/dashboard-card.component';\nimport { CardConfig, SectionConfig } from '../models';\nimport { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\n\n@Component({\n selector: 'mfp-dashboard-section',\n imports: [DashboardCard, Button],\n templateUrl: './dashboard-section.component.html',\n styleUrl: './dashboard-section.component.scss',\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n '[style.grid-column]': '\"span \" + (section().w ?? 12)',\n },\n})\nexport class DashboardSection {\n section = input.required<SectionConfig>();\n cards = input<CardConfig[]>([]);\n columns = input<number>(12);\n editMode = input<boolean>(false);\n readonly removeSection = output<void>();\n readonly removeCard = output<string>();\n}\n","<div\n class=\"section\"\n [class.section--edit]=\"editMode() && section().editable !== false\"\n>\n @if (editMode() && section().editable !== false) {\n <ui5-button\n class=\"section__remove\"\n design=\"Default\"\n icon=\"decline\"\n [accessibleName]=\"'Remove section: ' + (section().title || section().id)\"\n (click)=\"removeSection.emit()\"\n />\n }\n @if (section().title) {\n <div class=\"section__header\">\n <span class=\"section__title\">{{ section().title }}</span>\n </div>\n }\n <div class=\"section__grid\" [style.--cols]=\"columns()\">\n @for (card of cards(); track card.id) {\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode() && section().editable !== false\"\n (removeCard)=\"removeCard.emit($any(card.id))\"\n />\n }\n </div>\n</div>\n","import { ButtonSettings } from '../../models/ui-definition';\nimport { DashboardCard } from '../card/dashboard-card.component';\nimport { addComponentToRegistry } from '../card/utils/dashboard-card-registry';\nimport { EditCardsDialog } from '../edit-cards-dialog/edit-cards-dialog.component';\nimport { CardConfig, DashboardConfig, SectionConfig } from '../models';\nimport { CELL_HEIGHT, COMPACT_BREAKPOINT } from '../models/constants';\nimport { DashboardSection } from '../section/dashboard-section.component';\nimport {\n Component,\n ElementRef,\n Injector,\n OnDestroy,\n OnInit,\n Type,\n ViewEncapsulation,\n afterNextRender,\n computed,\n inject,\n input,\n linkedSignal,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Menu } from '@fundamental-ngx/ui5-webcomponents/menu';\nimport { MenuItem } from '@fundamental-ngx/ui5-webcomponents/menu-item';\nimport { MenuSeparator } from '@fundamental-ngx/ui5-webcomponents/menu-separator';\nimport { Text } from '@fundamental-ngx/ui5-webcomponents/text';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/action-settings.js';\nimport '@ui5/webcomponents-icons/dist/menu2.js';\nimport { GridStackNode, GridStackOptions } from 'gridstack';\nimport {\n GridstackComponent,\n GridstackItemComponent,\n nodesCB,\n} from 'gridstack/dist/angular';\n\ndocument.body.classList.add('ui5-content-density-compact');\n\n@Component({\n selector: 'mfp-dashboard',\n imports: [\n GridstackComponent,\n GridstackItemComponent,\n EditCardsDialog,\n DashboardSection,\n DashboardCard,\n Button,\n Menu,\n MenuItem,\n MenuSeparator,\n Title,\n Text,\n ],\n templateUrl: './dashboard.component.html',\n styleUrl: './dashboard.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[style.background-image]':\n 'config().backgroundImageUrl ? \"url(\" + config().backgroundImageUrl + \")\" : null',\n },\n})\nexport class Dashboard implements OnInit, OnDestroy {\n static registerAngularComponents(componentTypes: Type<unknown>[]): void {\n addComponentToRegistry(componentTypes);\n }\n\n config = input.required<DashboardConfig>();\n sections = model<SectionConfig[]>([]);\n cards = model<CardConfig[]>([]);\n availableCards = input<CardConfig[]>([]);\n\n readonly saved = output<{ sections: SectionConfig[]; cards: CardConfig[] }>();\n readonly actionButtonClick = output<{\n event: MouseEvent;\n action: ButtonSettings;\n }>();\n\n editMode = signal(false);\n compactToolbar = signal(false);\n toolbarMenuOpen = signal(false);\n\n private sectionsSnapshot: SectionConfig[] = [];\n private cardsSnapshot: CardConfig[] = [];\n private gridStackItems = viewChild.required<GridstackComponent>('grid');\n private addCardBtn = viewChild<Button>('addCardBtn');\n private resizeObserver?: ResizeObserver;\n private readonly hostEl = inject(ElementRef<HTMLElement>);\n private readonly injector = inject(Injector);\n\n protected gridOptions = computed(\n (): GridStackOptions => ({\n cellHeight: CELL_HEIGHT,\n disableResize: !this.editMode(),\n disableDrag: !this.editMode(),\n columnOpts: {\n breakpointForWindow: true,\n breakpoints: [\n { w: 1440, c: 12, layout: 'none' },\n { w: 1024, c: 8, layout: 'compact' },\n { w: 600, c: 1, layout: 'list' },\n ],\n },\n }),\n );\n\n cardDialogOpen = signal(false);\n customActions = computed(() => this.config().customActions ?? []);\n addedCardsIds = computed(() => new Set(this.cards().map((c) => c.id)));\n\n editViewButton = computed(() => ({\n icon: 'action-settings',\n design: 'Transparent' as const,\n tooltip: 'Edit View',\n text: '',\n ...this.config().buttonsSettings?.editViewButton,\n }));\n\n addCardButton = computed(() => ({\n icon: '',\n design: 'Default' as const,\n tooltip: '',\n text: 'Edit Cards',\n ...this.config().buttonsSettings?.addCardButton,\n }));\n\n sectionCards = computed(() => {\n const all = this.cards();\n return (sectionId: string) => all.filter((c) => c.sectionId === sectionId);\n });\n\n cardsPosition = new Map<string, { x?: number; y?: number }>();\n looseCards = linkedSignal(() => this.cards().filter((c) => !c.sectionId));\n\n private newGridStackNodes: GridStackNode[] = [];\n\n ngOnInit(): void {\n this.resizeObserver = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n this.compactToolbar.set(width < COMPACT_BREAKPOINT);\n });\n this.resizeObserver.observe(this.hostEl.nativeElement);\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n onMenuItemClick(actionId: string, event: Event): void {\n if (actionId === 'edit-view') {\n this.enterEditMode();\n return;\n }\n const action = this.customActions().find((a) => a.action === actionId);\n if (action) {\n this.actionButtonClick.emit({ event: event as MouseEvent, action });\n }\n }\n\n enterEditMode(): void {\n const gridStackNodes = this.gridStackItems()\n .gridstackItems?.toArray()\n .map((node) => node.options);\n\n if (gridStackNodes) {\n this.saveCardsPosition(gridStackNodes);\n }\n\n this.sectionsSnapshot = [...this.sections()];\n this.cardsSnapshot = [...this.cards()];\n this.editMode.set(true);\n afterNextRender(\n () => {\n this.addCardBtn()?.element.focus();\n },\n { injector: this.injector },\n );\n }\n\n saveEdit(): void {\n this.saveCardsPosition(this.newGridStackNodes);\n this.saved.emit({\n sections: this.sections(),\n cards: this.cards().map((c) => {\n const pos = this.cardsPosition.get(c.id);\n return { ...c, x: pos?.x, y: pos?.y };\n }),\n });\n this.editMode.set(false);\n }\n\n cancelEdit(): void {\n this.sections.set(this.sectionsSnapshot);\n this.cards.set(\n this.cardsSnapshot.map((c) => {\n const pos = this.cardsPosition.get(c.id);\n return { ...c, x: pos?.x, y: pos?.y };\n }),\n );\n this.cardDialogOpen.set(false);\n this.editMode.set(false);\n }\n\n removeSection(id: string): void {\n this.sections.update((list) => list.filter((s) => s.id !== id));\n this.cards.update((list) => list.filter((c) => c.sectionId !== id));\n }\n\n removeCard(id: string): void {\n this.cardsPosition.delete(id);\n this.cards.update((list) => list.filter((c) => c.id !== id));\n }\n\n openCardPanel(): void {\n this.cardDialogOpen.set(true);\n }\n\n closeCardPanel(): void {\n this.cardDialogOpen.set(false);\n }\n\n onCardsEdited(event: { added: CardConfig[]; removed: string[] }): void {\n this.cards.update((list) => {\n const withoutRemoved = list.filter((c) => !event.removed.includes(c.id));\n return [...withoutRemoved, ...event.added.map((ac) => ({ ...ac }))];\n });\n this.closeCardPanel();\n }\n\n onOrderChange(event: nodesCB): void {\n this.newGridStackNodes = event.nodes;\n }\n\n private saveCardsPosition(items: GridStackNode[]): void {\n items.forEach((node) => {\n if (node.id) {\n this.cardsPosition.set(node.id, { x: node.x, y: node.y });\n }\n });\n }\n}\n","<div class=\"mfp-dashboard\">\n <div class=\"mfp-dashboard__topbar\">\n <div class=\"mfp-dashboard__topbar-row\">\n <div class=\"mfp-dashboard__header\">\n @if (config().title) {\n <ui5-title level=\"H2\" size=\"H2\" wrapping-type=\"Normal\">{{\n config().title\n }}</ui5-title>\n }\n @if (config().description) {\n <ui5-text>{{ config().description }}</ui5-text>\n }\n </div>\n\n <div class=\"mfp-dashboard__toolbar\">\n @if (editMode()) {\n <ui5-button\n #addCardBtn\n id=\"add-card-btn\"\n [accessibleName]=\"addCardButton().text || addCardButton().tooltip || 'Edit Cards'\"\n [design]=\"addCardButton().design\"\n [icon]=\"addCardButton().icon\"\n [tooltip]=\"addCardButton().tooltip\"\n (click)=\"openCardPanel()\"\n >{{ addCardButton().text }}</ui5-button\n >\n } @else if (compactToolbar()) {\n <ui5-button\n #menuBtn\n accessibleName=\"Actions\"\n design=\"Transparent\"\n icon=\"menu2\"\n tooltip=\"Actions\"\n (click)=\"toolbarMenuOpen.update((v) => !v)\"\n />\n <ui5-menu\n [open]=\"toolbarMenuOpen()\"\n [opener]=\"menuBtn.element\"\n (ui5Close)=\"toolbarMenuOpen.set(false)\"\n (ui5ItemClick)=\"\n onMenuItemClick(\n $any($event).detail.item.dataset['action'],\n $event\n )\n \"\n (ui5Open)=\"toolbarMenuOpen.set(true)\"\n >\n @for (action of customActions(); track action.action) {\n <ui5-menu-item\n [attr.data-action]=\"action.action\"\n [icon]=\"action.icon ?? ''\"\n [text]=\"action.text ?? ''\"\n />\n }\n @if (config().editable) {\n <ui5-menu-separator />\n <ui5-menu-item\n data-action=\"edit-view\"\n [icon]=\"editViewButton().icon\"\n [text]=\"editViewButton().text || 'Edit View'\"\n />\n }\n </ui5-menu>\n } @else {\n @for (action of customActions(); track action.action) {\n <ui5-button\n [accessibleName]=\"action.text || action.tooltip || action.action\"\n [design]=\"action.design ?? 'Default'\"\n [endIcon]=\"action?.endIcon\"\n [icon]=\"action.icon ?? ''\"\n [tooltip]=\"action.tooltip ?? ''\"\n (click)=\"\n actionButtonClick.emit({ event: $event, action: action })\n \"\n >{{ action.text }}</ui5-button\n >\n }\n @if (config().editable) {\n <ui5-button\n [accessibleName]=\"editViewButton().text || editViewButton().tooltip || 'Edit View'\"\n [design]=\"editViewButton().design\"\n [icon]=\"editViewButton().icon\"\n [tooltip]=\"editViewButton().tooltip\"\n (click)=\"enterEditMode()\"\n >{{ editViewButton().text }}</ui5-button\n >\n }\n }\n </div>\n </div>\n\n <div class=\"mfp-dashboard__subheader\">\n <ng-content select=\"[slot=dashboard-subheader]\" />\n </div>\n </div>\n <div class=\"mfp-sections-container\">\n @for (section of sections(); track section.id) {\n <mfp-dashboard-section\n [cards]=\"sectionCards()(section.id)\"\n [columns]=\"12\"\n [editMode]=\"editMode()\"\n [section]=\"section\"\n (removeCard)=\"removeCard($event)\"\n (removeSection)=\"removeSection(section.id)\"\n />\n }\n </div>\n <gridstack #grid [options]=\"gridOptions()\" (changeCB)=\"onOrderChange($event)\">\n @for (card of looseCards(); track card.id) {\n <gridstack-item\n [options]=\"card\"\n [style.cursor]=\"editMode() ? 'pointer' : 'auto'\"\n >\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode()\"\n (removeCard)=\"removeCard($any(card.id))\"\n />\n </gridstack-item>\n }\n </gridstack>\n\n @if (editMode()) {\n <div class=\"mfp-dashboard__edit-bar\">\n <ui5-button design=\"Emphasized\" (click)=\"saveEdit()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelEdit()\"\n >Cancel</ui5-button\n >\n </div>\n }\n</div>\n\n<mfp-edit-cards-dialog\n [addedCardsIds]=\"addedCardsIds()\"\n [availableCards]=\"availableCards()\"\n [open]=\"cardDialogOpen()\"\n (cancelled)=\"closeCardPanel()\"\n (confirm)=\"onCardsEdited($event)\"\n/>\n","import { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Card } from '@fundamental-ngx/ui5-webcomponents/card';\nimport { CardHeader } from '@fundamental-ngx/ui5-webcomponents/card-header';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/AllIcons.js';\n\n@Component({\n selector: 'mfp-visited-service-card',\n imports: [Card, CardHeader, Icon],\n templateUrl: './visited-service-card.component.html',\n styleUrl: './visited-service-card.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class VisitedServiceCard {\n serviceType = input.required<string>();\n serviceName = input.required<string>();\n serviceDescription = input.required<string>();\n serviceIcon = input.required<string>();\n path = input.required<string>();\n\n readonly cardClick = output<string>();\n}\n","<div\n class=\"visited-card-wrapper\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"cardClick.emit(path())\"\n (keydown.enter)=\"cardClick.emit(path())\"\n>\n <span class=\"visited-card__type-badge\">{{ serviceType() }}</span>\n <ui5-card class=\"visited-card\">\n <ui5-card-header\n slot=\"header\"\n [interactive]=\"true\"\n [subtitleText]=\"serviceDescription()\"\n [titleText]=\"serviceName()\"\n >\n <ui5-icon\n class=\"visited-card__icon\"\n slot=\"avatar\"\n [name]=\"serviceIcon()\"\n />\n </ui5-card-header>\n </ui5-card>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-favorites',\n imports: [Button, Icon, Title],\n templateUrl: './favorites.component.html',\n styleUrl: './favorites.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class Favorites {\n readonly items = [\n { label: 'Create Account', icon: 'add', action: 'create-account' },\n { label: 'Start Approval', icon: 'workflow-tasks', action: 'start-approval' },\n { label: 'Add User to Account', icon: 'person-placeholder', action: 'add-user' },\n ];\n}\n","<div class=\"favorites\">\n <ui5-title class=\"favorites__title\" level=\"H5\">Favorites</ui5-title>\n <div class=\"favorites__list\">\n @for (item of items; track item.action) {\n <div class=\"favorites__item\">\n <ui5-icon class=\"favorites__icon\" [name]=\"item.icon\" />\n <span class=\"favorites__label\">{{ item.label }}</span>\n <ui5-button design=\"Transparent\" [icon]=\"item.icon\">{{ item.label }}</ui5-button>\n </div>\n }\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n/** Possible health states for a service. */\nexport type ServiceStatusValue = 'operational' | 'degraded' | 'outage' | 'maintenance';\n\n/** A single service entry displayed in the service-status card. */\nexport interface ServiceStatusItem {\n /** Display name of the service. */\n name: string;\n /** SAP UI5 icon name used as the service icon. */\n icon: string;\n /** Current health status of the service. */\n status: ServiceStatusValue;\n}\n\n@Component({\n selector: 'mfp-service-status-card',\n imports: [Icon, Title],\n templateUrl: './service-status-card.component.html',\n styleUrl: './service-status-card.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class ServiceStatusCard {\n readonly services: ServiceStatusItem[] = [\n { name: 'API Gateway', icon: 'connected', status: 'operational' },\n { name: 'Identity Service', icon: 'customer', status: 'operational' },\n { name: 'Database Cluster', icon: 'database', status: 'degraded' },\n { name: 'Message Queue', icon: 'email', status: 'operational' },\n { name: 'Object Storage', icon: 'storage', status: 'maintenance' },\n { name: 'Audit Log', icon: 'log', status: 'outage' },\n ];\n\n readonly statusConfig: Record<ServiceStatusValue, { label: string; icon: string; colorClass: string }> = {\n operational: { label: 'Operational', icon: 'status-positive', colorClass: 'status--operational' },\n degraded: { label: 'Degraded', icon: 'status-critical', colorClass: 'status--degraded' },\n outage: { label: 'Outage', icon: 'status-negative', colorClass: 'status--outage' },\n maintenance: { label: 'Maintenance', icon: 'status-inactive', colorClass: 'status--maintenance' },\n };\n}\n","<div class=\"service-status\">\n <ui5-title class=\"service-status__title\" level=\"H5\">Service Availability</ui5-title>\n <div class=\"service-status__list\">\n @for (service of services; track service.name) {\n <div class=\"service-status__item\">\n <ui5-icon class=\"service-status__icon\" [name]=\"service.icon\" />\n <span class=\"service-status__name\">{{ service.name }}</span>\n <div [class]=\"'service-status__status ' + statusConfig[service.status].colorClass\">\n <ui5-icon class=\"service-status__status-icon\" [name]=\"statusConfig[service.status].icon\" />\n <span class=\"service-status__status-label\">{{ statusConfig[service.status].label }}</span>\n </div>\n </div>\n }\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { List } from '@fundamental-ngx/ui5-webcomponents/list';\nimport { ListItemStandard } from '@fundamental-ngx/ui5-webcomponents/list-item-standard';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-whats-new',\n imports: [List, ListItemStandard, Title],\n templateUrl: './whats-new.component.html',\n styleUrl: './whats-new.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class WhatsNew {\n readonly headlines = [\n {\n title: 'Kubernetes 1.32 Released',\n description: 'Improved scheduling, new APIs and graduated features.',\n icon: 'cloud',\n },\n {\n title: 'Angular 20 Signals Stable',\n description: 'Signal-based reactivity is now production-ready.',\n icon: 'developer-settings',\n },\n {\n title: 'WebAssembly WASI 2.0 Preview',\n description: 'System interface advances bring server-side WASM closer.',\n icon: 'technical-object',\n },\n {\n title: 'OpenTelemetry Hits 1.0',\n description: 'Unified observability standard lands in enterprise stacks.',\n icon: 'monitor-payments',\n },\n {\n title: 'Rust Enters Linux Kernel Mainstream',\n description: 'More subsystems accept Rust driver contributions.',\n icon: 'settings',\n },\n {\n title: 'TypeScript 5.8 Performance Boost',\n description: 'Declaration emit is up to 10x faster in large projects.',\n icon: 'accelerated',\n },\n ];\n}\n","<div class=\"whats-new\">\n <ui5-title class=\"whats-new__title\" level=\"H5\">What's New</ui5-title>\n <ui5-list class=\"whats-new__list\" separators=\"Inner\">\n @for (item of headlines; track item.title) {\n <ui5-li [description]=\"item.description\" [icon]=\"item.icon\">\n {{ item.title }}\n </ui5-li>\n }\n </ui5-list>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openmfp-ngx.mjs","sources":["../../../projects/ngx/declarative-ui/table/utils/proccess-fields.ts","../../../projects/ngx/declarative-ui/table/utils/resource-field-by-path.ts","../../../projects/ngx/declarative-ui/table/utils/cssRules.engine.ts","../../../projects/ngx/declarative-ui/table/utils/field-definition.utils.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-cell.constants.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-value.component.html","../../../projects/ngx/declarative-ui/resource-field/link-value/link-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/link-value/link-value.component.html","../../../projects/ngx/declarative-ui/resource-field/secret-value/secret-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/secret-value/secret-value.component.html","../../../projects/ngx/declarative-ui/resource-field/tag-list-value/tag-list-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/tag-list-value/tag-list-value.component.html","../../../projects/ngx/declarative-ui/resource-field/resource-field.component.ts","../../../projects/ngx/declarative-ui/resource-field/resource-field.component.html","../../../projects/ngx/declarative-ui/table/declarative-table/declarative-table.component.ts","../../../projects/ngx/declarative-ui/table/declarative-table/declarative-table.component.html","../../../projects/ngx/declarative-ui/form/utils/set-property-by-path.ts","../../../projects/ngx/declarative-ui/form/declarative-form/declarative-form.component.ts","../../../projects/ngx/declarative-ui/form/declarative-form/declarative-form.component.html","../../../projects/ngx/declarative-ui/table-card/declarative-table-card.component.ts","../../../projects/ngx/declarative-ui/table-card/declarative-table-card.component.html","../../../projects/ngx/declarative-ui/dashboard/models/dashboard.model.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/dashboard-card-registry.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-angular-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-sap-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-wc-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/dashboard-card.component.ts","../../../projects/ngx/declarative-ui/dashboard/card/dashboard-card.component.html","../../../projects/ngx/declarative-ui/dashboard/edit-cards-dialog/edit-cards-dialog.component.ts","../../../projects/ngx/declarative-ui/dashboard/edit-cards-dialog/edit-cards-dialog.component.html","../../../projects/ngx/declarative-ui/dashboard/models/constants.ts","../../../projects/ngx/declarative-ui/dashboard/section/dashboard-section.component.ts","../../../projects/ngx/declarative-ui/dashboard/section/dashboard-section.component.html","../../../projects/ngx/declarative-ui/dashboard/dashboard/dashboard.component.ts","../../../projects/ngx/declarative-ui/dashboard/dashboard/dashboard.component.html","../../../projects/ngx/cards/visited-service-card/visited-service-card.component.ts","../../../projects/ngx/cards/visited-service-card/visited-service-card.component.html","../../../projects/ngx/cards/favorites/favorites.component.ts","../../../projects/ngx/cards/favorites/favorites.component.html","../../../projects/ngx/cards/service-status/service-status-card.component.ts","../../../projects/ngx/cards/service-status/service-status-card.component.html","../../../projects/ngx/cards/whats-new/whats-new.component.ts","../../../projects/ngx/cards/whats-new/whats-new.component.html","../../../projects/ngx/openmfp-ngx.ts"],"sourcesContent":["import { TableFieldDefinition } from '../models';\n\ntype GroupBase = NonNullable<TableFieldDefinition['group']>;\ntype ProcessedGroup = GroupBase & {\n fields?: TableFieldDefinition[];\n};\n\nexport type ProcessedTableFieldDefinition = Omit<TableFieldDefinition, 'group'> & {\n group?: ProcessedGroup;\n};\n\nexport const processGroupFields = (\n fields: TableFieldDefinition[],\n): ProcessedTableFieldDefinition[] => {\n return combineGroupFields(fields);\n};\n\nconst collectGroupFields = (\n fields: TableFieldDefinition[],\n): Record<string, TableFieldDefinition[]> => {\n return fields.reduce(\n (acc, f): Record<string, TableFieldDefinition[]> => {\n if (!f.group?.name) {\n return acc;\n }\n\n const key = f.group.name;\n if (!acc[key]) {\n acc[key] = [];\n }\n\n // Strip group information from the field when adding to the fields array\n const { group, ...fieldWithoutGroup } = f;\n acc[key].push(fieldWithoutGroup);\n return acc;\n },\n {} as Record<string, TableFieldDefinition[]>,\n );\n};\n\nconst combineGroupFields = (fields: TableFieldDefinition[]): ProcessedTableFieldDefinition[] => {\n const seenGroup = new Set<string>();\n const groupFields = collectGroupFields(fields);\n const result: ProcessedTableFieldDefinition[] = [];\n\n fields.forEach((f) => {\n if (!f.group?.name) {\n result.push(f);\n return;\n }\n\n const key = f.group.name;\n if (seenGroup.has(key)) {\n return;\n }\n\n seenGroup.add(key);\n\n const grouped: ProcessedTableFieldDefinition = {\n ...f,\n group: {\n ...f.group,\n fields: groupFields[key],\n },\n };\n\n result.push(grouped);\n });\n\n return result;\n};\n","import { PropertyField, TransformType } from '../../models';\nimport jsonpath from 'jsonpath';\n\nexport const getResourceValueByJsonPath = <T>(\n resource: T,\n field: {\n jsonPathExpression?: string;\n property?: string | string[];\n propertyField?: PropertyField;\n },\n) => {\n const property = field.jsonPathExpression || field.property;\n if (!property) {\n return undefined;\n }\n\n if (property instanceof Array) {\n console.error(\n `Property defined as an array: ${JSON.stringify(property)}, provide \"jsonPathExpression\" field to properly ready resource value`,\n );\n return undefined;\n }\n\n const prefix = property.startsWith('$.') ? '' : '$.';\n const queryResult = jsonpath.query(resource, `${prefix}${property}`);\n const value = queryResult.length ? queryResult[0] : undefined;\n\n if (value && field.propertyField) {\n return executeTransform(\n value[field.propertyField.key],\n field.propertyField.transform,\n );\n }\n\n return value;\n};\n\nconst executeTransform = (\n value: string | undefined,\n transform: TransformType[] | undefined,\n): string | undefined => {\n if (value == null || transform == null || !transform.length) return value;\n\n return transform.reduce((acc, t) => {\n if (acc == null) return acc;\n\n switch (t) {\n case 'uppercase':\n return acc.toUpperCase();\n case 'lowercase':\n return acc.toLowerCase();\n case 'capitalize': {\n const str = String(acc);\n return str.length ? str.charAt(0).toUpperCase() + str.slice(1) : str;\n }\n case 'decode': {\n try {\n return decodeBase64(acc);\n } catch {\n return acc;\n }\n }\n case 'encode': {\n try {\n return encodeBase64(acc);\n } catch {\n return acc;\n }\n }\n default:\n return acc;\n }\n }, value);\n};\n\nexport const encodeBase64 = (str: string): string => {\n try {\n const utf8Bytes = new TextEncoder().encode(str);\n const binaryString = Array.from(utf8Bytes, (byte) =>\n String.fromCharCode(byte),\n ).join('');\n return btoa(binaryString);\n } catch (error) {\n console.error('Base64 encoding failed:', error);\n throw new Error('Failed to encode string to Base64');\n }\n};\n\nexport const decodeBase64 = (base64: string): string => {\n try {\n const binaryString = atob(base64);\n const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n } catch (error) {\n console.error('Base64 decoding failed:', error);\n throw new Error('Failed to decode Base64 string');\n }\n};\n","import { CssRule } from '../../models';\n\nexport const parseStringValue = (value: string) => {\n if (value === 'true') {\n return true;\n }\n\n if (value === 'false') {\n return false;\n }\n\n if (!isNaN(Number(value))) {\n return Number(value);\n }\n\n return value;\n};\n\nexport const cssRuleResolver = (\n rule: CssRule,\n resourceValue: string,\n): boolean => {\n const parsedResouceValue = parseStringValue(resourceValue);\n const parsedConditionValue = parseStringValue(rule.if.value);\n\n switch (rule.if.condition) {\n case 'equals':\n return parsedResouceValue === parsedConditionValue;\n case 'notEquals':\n return parsedResouceValue !== parsedConditionValue;\n case 'greaterThan':\n return parsedResouceValue > parsedConditionValue;\n case 'greaterThanOrEqual':\n return parsedResouceValue >= parsedConditionValue;\n case 'lessThan':\n return parsedResouceValue < parsedConditionValue;\n case 'lessThanOrEqual':\n return parsedResouceValue <= parsedConditionValue;\n case 'contains':\n if (Array.isArray(parsedResouceValue)) {\n return parsedResouceValue.includes(parsedConditionValue);\n } else if (\n typeof parsedResouceValue === 'string' &&\n typeof parsedConditionValue === 'string'\n ) {\n return parsedResouceValue.includes(parsedConditionValue);\n }\n\n return false;\n }\n return false;\n};\n\nexport const evaluateCssRules = (\n value: string,\n rules?: CssRule[],\n): Partial<CSSStyleDeclaration> => {\n if (!rules) {\n return {};\n }\n\n return rules.reduce((acc, rule) => {\n const result = cssRuleResolver(rule, value);\n if (result) {\n return { ...acc, ...rule.styles };\n }\n return acc;\n }, {});\n};\n","import { FieldDefinition } from '../../models';\nimport { getResourceValueByJsonPath } from './resource-field-by-path';\n\nexport function getFieldValue<T>(\n field: FieldDefinition,\n resource: T | undefined,\n) {\n if (resource) {\n return getResourceValueByJsonPath<T>(resource, field) ?? field.value;\n }\n\n return field.value;\n}\n","export const ICON_DESIGN_POSITIVE = 'Positive';\nexport const ICON_DESIGN_NEGATIVE = 'Negative';\n\nexport const ICON_NAME_POSITIVE = 'accept';\nexport const ICON_NAME_NEGATIVE = 'decline';\n","import {\n ICON_DESIGN_NEGATIVE,\n ICON_DESIGN_POSITIVE,\n ICON_NAME_NEGATIVE,\n ICON_NAME_POSITIVE,\n} from './boolean-cell.constants';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\n\nexport type IconDesignType = typeof ICON_DESIGN_POSITIVE | typeof ICON_DESIGN_NEGATIVE;\n\n@Component({\n selector: 'mfp-boolean-value',\n imports: [Icon],\n templateUrl: './boolean-value.component.html',\n styleUrl: './boolean-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class BooleanValue {\n boolValue = input.required<boolean>();\n testId = input<string>('boolean-value-icon');\n iconDesign = computed<IconDesignType>(() => {\n return this.boolValue() ? ICON_DESIGN_POSITIVE : ICON_DESIGN_NEGATIVE;\n });\n iconName = computed<string>(() => {\n return this.boolValue() ? ICON_NAME_POSITIVE : ICON_NAME_NEGATIVE;\n });\n}\n","<ui5-icon [attr.test-id]=\"testId()\" [design]=\"iconDesign()\" [name]=\"iconName()\" />\n","import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Link } from '@fundamental-ngx/ui5-webcomponents/link';\n\n@Component({\n selector: 'mfp-link-value',\n imports: [Link],\n templateUrl: './link-value.component.html',\n styleUrl: './link-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class LinkValue {\n urlValue = input.required<string>();\n testId = input<string>('link-value-link');\n\n public stopPropagation(event: Event) {\n event.stopPropagation();\n }\n}\n","<ui5-link\n target=\"_blank\"\n [attr.test-id]=\"testId()\"\n [href]=\"urlValue()\"\n [tooltip]=\"urlValue()\"\n (click)=\"stopPropagation($event)\"\n>Link</ui5-link>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n@Component({\n selector: 'mfp-secret-value',\n imports: [],\n templateUrl: './secret-value.component.html',\n styleUrl: './secret-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: []\n})\nexport class SecretValue {\n value = input.required<string>();\n isVisible = input<boolean>(false);\n testId = input<string>('secret-value');\n maskedValue = computed(() => '*'.repeat(this.value().length || 8));\n}\n","<span class=\"secret-value\" [attr.test-id]=\"testId()\" [class.masked]=\"!isVisible()\">\n @if (isVisible()) {\n {{ value() }}\n } @else {\n {{ maskedValue() }}\n }\n</span>\n","import { TagSettings } from '../../models';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Tag } from '@fundamental-ngx/ui5-webcomponents/tag';\n\n@Component({\n selector: 'mfp-tag-list-value',\n imports: [Tag],\n templateUrl: './tag-list-value.component.html',\n styleUrl: './tag-list-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TagListValue {\n tags = input.required<string[]>();\n tagSettings = input<TagSettings>();\n testId = input<string>('tag-list-value');\n}\n","<span class=\"tag-list\" [attr.test-id]=\"testId()\">\n @for (tag of tags(); track $index) {\n <ui5-tag\n [colorScheme]=\"tagSettings()?.colorScheme\"\n [design]=\"tagSettings()?.design ?? 'Neutral'\"\n [hideStateIcon]=\"true\"\n >{{ tag }}</ui5-tag>\n }\n</span>\n","import {\n FieldDefinition,\n GenericResource,\n ResourceFieldButtonClickEvent,\n} from '../models';\nimport { evaluateCssRules } from '../table/utils/cssRules.engine';\nimport { getFieldValue } from '../table/utils/field-definition.utils';\nimport { BooleanValue } from './boolean-value/boolean-value.component';\nimport { LinkValue } from './link-value/link-value.component';\nimport { SecretValue } from './secret-value/secret-value.component';\nimport { TagListValue } from './tag-list-value/tag-list-value.component';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/AllIcons.js';\n\n@Component({\n selector: 'mfp-resource-field',\n imports: [Icon, BooleanValue, LinkValue, SecretValue, Button, TagListValue],\n templateUrl: './resource-field.component.html',\n styleUrl: './resource-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class ResourceField<T extends GenericResource, F extends FieldDefinition> {\n fieldDefinition = input.required<F>();\n resource = input<T>();\n readonly buttonClick = output<ResourceFieldButtonClickEvent<T>>();\n\n value = computed(() =>\n getFieldValue(this.fieldDefinition(), this.resource()),\n );\n\n uiSettings = computed(() => this.fieldDefinition().uiSettings);\n displayAs = computed(() => this.uiSettings()?.displayAs);\n withCopyButton = computed(() => this.uiSettings()?.withCopyButton);\n cssCustomization = computed(() => this.uiSettings()?.cssCustomization);\n tooltipIcon = computed(() => this.uiSettings()?.tooltipIcon);\n cssRules = computed(() =>\n evaluateCssRules(this.value(), this.uiSettings()?.cssRules),\n );\n cssStyles = computed(() => ({\n ...this.cssCustomization(),\n ...this.cssRules(),\n }));\n\n isBoolLike = computed(() => this.boolValue() !== undefined);\n isUrlValue = computed(() => this.checkValidUrl(this.stringValue()));\n testId = computed(() => `resource-field-${this.fieldDefinition().property}`);\n\n boolValue = computed(() => this.normalizeBoolean(this.value()));\n stringValue = computed(() => this.normalizeString(this.value()));\n tags = computed(() => this.normalizeTagsArray(this.value()));\n isVisible = signal(false);\n copySuccess = signal(false);\n\n toggleVisibility(e: Event): void {\n e.stopPropagation();\n this.isVisible.set(!this.isVisible());\n }\n\n private normalizeBoolean(value: unknown): boolean | undefined {\n const normalizedValue = value?.toString()?.toLowerCase();\n if (normalizedValue === 'true') {\n return true;\n }\n if (normalizedValue === 'false') {\n return false;\n }\n return undefined;\n }\n\n private normalizeString(value: unknown): string | undefined {\n if (typeof value !== 'string' || !value.trim()) {\n return undefined;\n }\n\n return value;\n }\n\n private normalizeTagsArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map(v => String(v).trim()).filter(v => v.length > 0);\n }\n if (typeof value === 'string') {\n const separator = this.uiSettings()?.tagSettings?.valueSeparator ?? ',';\n return value.split(separator).map(v => v.trim()).filter(v => v.length > 0);\n }\n return [];\n }\n\n private checkValidUrl(value: string | undefined): boolean {\n if (!value) {\n return false;\n }\n\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n }\n\n public copyValue(event: Event) {\n event.stopPropagation();\n navigator.clipboard.writeText(this.value() || '').then(() => {\n this.copySuccess.set(true);\n setTimeout(() => {\n this.copySuccess.set(false);\n }, 2000);\n });\n }\n\n protected buttonClicked(event: MouseEvent) {\n event.stopPropagation();\n this.buttonClick.emit({\n event,\n field: this.fieldDefinition(),\n resource: this.resource(),\n });\n }\n}\n","@let displayType = displayAs();\n<span [attr.test-id]=\"testId()\" [style]=\"cssStyles()\">\n @if (displayType === 'secret') {\n <span class=\"secret-value-container\">\n <mfp-secret-value [isVisible]=\"isVisible()\" [testId]=\"testId() + '-secret'\" [value]=\"value()\" />\n <ui5-icon\n class=\"toggle-icon\"\n mode=\"Interactive\"\n [accessibleName]=\"isVisible() ? 'Hide value' : 'Show value'\"\n [attr.test-id]=\"testId() + '-secret-toggle'\"\n [name]=\"isVisible() ? 'hide' : 'show'\"\n (click)=\"toggleVisibility($event)\"\n />\n </span>\n } @else if (displayType === 'boolIcon' && isBoolLike()) {\n <mfp-boolean-value [boolValue]=\"boolValue()!\" [testId]=\"testId() + '-boolean'\" />\n } @else if (displayType === 'link' && isUrlValue()) {\n <mfp-link-value [testId]=\"testId() + '-link'\" [urlValue]=\"stringValue()!\" />\n } @else if (displayType === 'tooltip') {\n <ui5-icon\n [accessibleName]=\"stringValue()!\"\n [attr.test-id]=\"testId() + '-tooltip'\"\n [name]=\"tooltipIcon() ?? 'hint'\"\n [showTooltip]=\"true\"\n />\n } @else if (displayType === 'alert') {\n @if (!value()) {\n <ui5-icon\n design=\"Critical\"\n name=\"alert\"\n [accessibleName]=\"resource()?.accessibleName ?? ''\"\n [attr.test-id]=\"testId() + '-icon'\"\n [showTooltip]=\"true\"\n (click)=\"$event.stopPropagation()\"\n />\n }\n } @else if (displayType === 'img' && value()) {\n <img alt=\"Resource image\" class=\"image-cell\" [src]=\"value()\" />\n } @else if (displayType === 'button') {\n @let buttonSettings = uiSettings()?.buttonSettings;\n <ui5-button\n [accessibleName]=\"buttonSettings?.text || buttonSettings?.tooltip || buttonSettings?.icon || ''\"\n [design]=\"buttonSettings?.design\"\n [endIcon]=\"buttonSettings?.endIcon\"\n [icon]=\"buttonSettings?.icon\"\n [tooltip]=\"buttonSettings?.tooltip\"\n (click)=\"buttonClicked($event)\"\n >{{ buttonSettings?.text }}</ui5-button\n > \n } @else if (displayType === 'tag') {\n <mfp-tag-list-value\n [tagSettings]=\"uiSettings()?.tagSettings\"\n [tags]=\"tags()\"\n [testId]=\"testId() + '-tags'\"\n />\n } @else {\n {{ value() }}\n }\n</span>\n\n@if (withCopyButton()) {\n <ui5-icon\n class=\"toggle-icon\"\n mode=\"Interactive\"\n [accessibleName]=\"copySuccess() ? 'Copied' : 'Copy value'\"\n [attr.test-id]=\"testId() + '-copy'\"\n [design]=\"copySuccess() ? 'Positive' : 'Default'\"\n [name]=\"copySuccess() ? 'accept' : 'copy'\"\n (click)=\"copyValue($event)\"\n />\n}\n","import { GenericResource } from '../../models';\nimport { TableFieldDefinition, ResourceFieldButtonClickEvent } from '../models';\nimport { processGroupFields } from '../utils/proccess-fields';\nimport { getResourceValueByJsonPath } from '../utils/resource-field-by-path';\nimport { ResourceField } from '../../resource-field/resource-field.component';\nimport {\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { IllustratedMessage } from '@fundamental-ngx/ui5-webcomponents-fiori';\nimport { Option } from '@fundamental-ngx/ui5-webcomponents/option';\nimport { Select } from '@fundamental-ngx/ui5-webcomponents/select';\nimport { Table } from '@fundamental-ngx/ui5-webcomponents/table';\nimport { TableCell } from '@fundamental-ngx/ui5-webcomponents/table-cell';\nimport { TableGrowing } from '@fundamental-ngx/ui5-webcomponents/table-growing';\nimport { TableHeaderCell } from '@fundamental-ngx/ui5-webcomponents/table-header-cell';\nimport { TableHeaderRow } from '@fundamental-ngx/ui5-webcomponents/table-header-row';\nimport { TableRow } from '@fundamental-ngx/ui5-webcomponents/table-row';\nimport '@ui5/webcomponents-fiori/dist/illustrations/NoData.js';\n\n@Component({\n selector: 'mfp-declarative-table',\n imports: [\n IllustratedMessage,\n Table,\n TableCell,\n TableHeaderCell,\n TableHeaderRow,\n TableRow,\n ResourceField,\n Select,\n Option,\n TableGrowing,\n ],\n templateUrl: './declarative-table.component.html',\n styleUrl: './declarative-table.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DeclarativeTable<T extends GenericResource> {\n columns = input.required<TableFieldDefinition[]>();\n resources = input.required<T[]>();\n trackByPath = input<string>('id');\n\n totalItemsCount = input<number>();\n paginationLimit = input<number>(5);\n hasMore = input<boolean>(false);\n growMode = input<'Scroll' | 'Button' | undefined>('Button');\n loadMoreButtonText = input<string | undefined>('Load More');\n height = input<number>();\n\n readonly buttonClick = output<ResourceFieldButtonClickEvent<T>>();\n readonly tableRowClicked = output<T>();\n readonly loadMoreResources = output<void>();\n readonly paginationLimitChanged = output<number>();\n\n columnTrackBy = (column: TableFieldDefinition, index: number) =>\n column.property ?? column.value ?? index;\n rowTrackBy = (_index: number, item: T): unknown =>\n getResourceValueByJsonPath(item, { property: this.trackByPath() }) ??\n _index;\n viewColumns = computed(() => processGroupFields(this.columns()));\n}\n","<ui5-table\n test-id=\"generic-table\"\n [style.height]=\"height() ? height() + 'px' : null\"\n [style.overflow-y]=\"'auto'\">\n <ui5-table-header-row slot=\"headerRow\" [sticky]=\"growMode() === 'Scroll' && !!height()\">\n @for (column of viewColumns(); track columnTrackBy(column, $index)) {\n @if (column.group) {\n <ui5-table-header-cell\n [attr.test-id]=\"'generic-table-header-' + column.group.name\"\n [width]=\"column.uiSettings?.columnWidth ?? 'auto'\"\n >{{ column.group.label ?? column.group.name }}</ui5-table-header-cell\n >\n } @else {\n <ui5-table-header-cell\n [attr.test-id]=\"'generic-table-header-' + column.property\"\n [width]=\"column.uiSettings?.columnWidth ?? 'auto'\"\n >{{ column.label }}</ui5-table-header-cell\n >\n }\n }\n </ui5-table-header-row>\n\n @for (item of resources(); let i = $index; track rowTrackBy($index, item)) {\n <ui5-table-row\n [attr.test-id]=\"'generic-table-row-' + i\"\n [class.disabled]=\"item.isAvailable === false\"\n [interactive]=\"item.isAvailable !== false\"\n (click)=\"tableRowClicked.emit(item)\"\n >\n @for (column of viewColumns(); track columnTrackBy(column, $index)) {\n @if (column.group) {\n <ui5-table-cell\n [attr.test-id]=\"'generic-table-cell-' + i + '-' + column.group.name\"\n >\n @let isMultiline = column.group.multiline ?? true;\n <div\n class=\"flex\"\n [style.alignItems]=\"isMultiline ? column.uiSettings?.align : null\"\n [style.flexDirection]=\"isMultiline ? 'column' : 'row'\"\n [style.justifyContent]=\"isMultiline ? null : column.uiSettings?.align\">\n @for (\n field of column.group.fields;\n let last = $last;\n track columnTrackBy(field, $index)\n ) {\n <span\n class=\"group-value\"\n [attr.test-id]=\"\n 'generic-table-cell-' +\n i +\n '-' +\n column.group.name +\n '-' +\n field.property\n \"\n >\n @if (field.label) {\n <span>{{ field.label }}: </span>\n }\n <mfp-resource-field\n [fieldDefinition]=\"field\"\n [resource]=\"item\"\n (buttonClick)=\"buttonClick.emit($event)\"\n />\n </span>\n @if (!last && column.group.delimiter) {\n <span class=\"delimiter\">{{ column.group.delimiter }}</span>\n }\n }\n </div>\n </ui5-table-cell>\n } @else {\n <ui5-table-cell\n [attr.test-id]=\"'generic-table-cell-' + i + '-' + column.property\"\n >\n <div class=\"flex\" [style.justifyContent]=\"column.uiSettings?.align\">\n <mfp-resource-field\n [fieldDefinition]=\"column\"\n [resource]=\"item\"\n (buttonClick)=\"buttonClick.emit($event)\"\n />\n </div>\n </ui5-table-cell>\n }\n }\n </ui5-table-row>\n } @empty {\n <ui5-illustrated-message\n name=\"NoData\"\n slot=\"noData\"\n test-id=\"generic-table-view-nodata\"\n >\n <span slot=\"title\">No Resources</span>\n <span slot=\"subtitle\">There are currently no items to show.</span>\n </ui5-illustrated-message>\n }\n\n @if (hasMore()) {\n <ui5-table-growing\n id=\"growing\"\n slot=\"features\"\n [mode]=\"growMode()\"\n [text]=\"loadMoreButtonText()\"\n (ui5LoadMore)=\"loadMoreResources.emit()\"\n />\n }\n</ui5-table>\n\n<!-- Pagination Control -->\n<div\n class=\"pagination-footer\"\n style=\"\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0rem 1rem;\n min-height: 3rem;\n border-top: 1px solid var(--sapList_BorderColor);\n \"\n>\n <div style=\"display: flex; align-items: center; gap: 1.5rem\">\n <div style=\"display: flex; align-items: center; gap: 0.5rem\">\n <span\n style=\"color: var(--sapTextColor); font-size: var(--sapFontSmallSize)\"\n >Items per load:</span\n >\n <ui5-select\n style=\"width: 5rem\"\n [value]=\"paginationLimit().toString()\"\n (change)=\"paginationLimitChanged.emit(+$any($event)?.target?.value)\"\n >\n <ui5-option value=\"5\">5</ui5-option>\n <ui5-option value=\"10\">10</ui5-option>\n <ui5-option value=\"50\">50</ui5-option>\n <ui5-option value=\"100\">100</ui5-option>\n </ui5-select>\n </div>\n\n <span\n style=\"color: var(--sapTextColor); font-size: var(--sapFontSmallSize)\"\n >\n Items loaded:\n <b>{{\n totalItemsCount() !== undefined\n ? resources().length + ' / ' + totalItemsCount()\n : resources().length\n }}</b>\n </span>\n </div>\n</div>\n","export function setPropertyByPath<T extends Record<string, unknown>>(\n object: T,\n path: string,\n value: unknown,\n): T {\n const segments = path.split('.').filter(Boolean);\n if (segments.length === 0) {\n return object;\n }\n\n let current: Record<string, unknown> = object;\n\n for (let i = 0; i < segments.length; i += 1) {\n const key = segments[i];\n if (i === segments.length - 1) {\n current[key] = value;\n break;\n }\n\n const existing = current[key];\n\n if (existing === undefined || existing === null || typeof existing !== 'object') {\n current[key] = {};\n }\n\n current = current[key] as Record<string, unknown>;\n }\n\n return object;\n}\n","import { GenericResource } from '../../models';\nimport {\n FormFieldChangeEvent,\n FormFieldDefinition,\n FormFieldErrors,\n} from '../models';\nimport { setPropertyByPath } from '../utils/set-property-by-path';\nimport {\n Component,\n ViewEncapsulation,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { Input } from '@fundamental-ngx/ui5-webcomponents/input';\nimport { Label } from '@fundamental-ngx/ui5-webcomponents/label';\nimport { Option } from '@fundamental-ngx/ui5-webcomponents/option';\nimport { Select } from '@fundamental-ngx/ui5-webcomponents/select';\n\n@Component({\n selector: 'mfp-declarative-form',\n imports: [ReactiveFormsModule, Input, Label, Select, Option],\n templateUrl: './declarative-form.component.html',\n styleUrl: './declarative-form.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DeclarativeForm<T extends GenericResource> {\n readonly fields = input.required<FormFieldDefinition[]>();\n readonly initialValues = input<T>({} as T);\n readonly fieldErrors = input<FormFieldErrors>({});\n\n readonly fieldChange = output<FormFieldChangeEvent>();\n readonly formSubmit = output<T>();\n\n readonly form: FormGroup;\n\n private readonly fb = inject(FormBuilder);\n\n constructor() {\n this.form = this.fb.group({});\n\n effect(() => {\n this.rebuildControls(this.fields());\n });\n\n effect(() => {\n this.setInitialValues(this.initialValues());\n });\n\n effect(() => {\n const fields = this.fields();\n this.initialValues();\n\n for (const field of fields) {\n if (field.validation) {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: this.form.controls[field.name]?.value ?? '',\n });\n }\n }\n });\n }\n\n setFormControlValue($event: Event, field: FormFieldDefinition): void {\n const target = $event.target as\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement;\n\n const control = this.form.controls[field.name];\n control.setValue(target.value);\n control.markAsTouched();\n control.markAsDirty();\n\n if (field.validation === 'onChange') {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: control.value,\n });\n }\n }\n\n getError(name: string): string | null {\n const control = this.form.controls[name];\n const error = this.fieldErrors()[name];\n\n return error && (control.dirty || control.touched) ? error : null;\n }\n\n getValueState(name: string): 'None' | 'Negative' {\n return this.getError(name) ? 'Negative' : 'None';\n }\n\n onFieldBlur(field: FormFieldDefinition): void {\n this.form.controls[field.name]?.markAsTouched();\n\n if (field.validation === 'onBlur') {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: this.form.controls[field.name]?.value,\n });\n }\n }\n\n submit(): void {\n this.formSubmit.emit(this.buildOutputValue());\n }\n\n clear(): void {\n this.form.reset();\n }\n\n private rebuildControls(fields: FormFieldDefinition[]): void {\n const existingControls = this.form.controls;\n const nextFieldNames = new Set(fields.map((field) => field.name));\n\n for (const field of fields) {\n const existingControl = existingControls[field.name];\n\n if (existingControl) {\n existingControl.clearValidators();\n existingControl.updateValueAndValidity({ emitEvent: false });\n continue;\n }\n\n this.form.addControl(field.name, new FormControl(''));\n }\n\n for (const controlName of Object.keys(existingControls)) {\n if (!nextFieldNames.has(controlName)) {\n this.form.removeControl(controlName);\n }\n }\n\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n\n private setInitialValues(\n initialValues: Record<string, unknown> | null | undefined,\n ): void {\n if (!initialValues) {\n return;\n }\n\n this.form.patchValue(initialValues, { emitEvent: false });\n this.form.markAsPristine({ emitEvent: false });\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n\n private buildOutputValue(): T {\n const result = {} as T;\n\n for (const key of Object.keys(this.form.controls)) {\n setPropertyByPath(result, key, this.form.controls[key].value);\n }\n\n return result;\n }\n}\n","<section class=\"form\" test-id=\"generic-form\" [formGroup]=\"form\">\n @for (field of fields(); track field.name) {\n @let control = form.controls[field.name];\n <div\n class=\"inputs\"\n [attr.test-id]=\"'generic-form-field-container-' + field.name\"\n >\n <ui5-label\n show-colon\n [attr.test-id]=\"'generic-form-field-label-' + field.name\"\n [required]=\"field.required\"\n >{{ field.label }}</ui5-label\n >\n @if (field.values?.length) {\n <ui5-select\n class=\"input\"\n [attr.test-id]=\"'generic-form-field-' + field.name\"\n [disabled]=\"field.disabled\"\n [required]=\"field.required\"\n [value]=\"control.value\"\n [valueState]=\"getValueState(field.name)\"\n (blur)=\"onFieldBlur(field)\"\n (change)=\"setFormControlValue($event, field)\"\n (input)=\"setFormControlValue($event, field)\"\n >\n @if (getError(field.name); as error) {\n <div slot=\"valueStateMessage\">{{ error }}</div>\n }\n @for (value of [''].concat(field.values ?? []); track value) {\n <ui5-option\n [attr.test-id]=\"\n 'generic-form-field-' +\n field.name +\n '-option-' +\n (value || 'empty')\n \"\n [selected]=\"value === control.value\"\n [value]=\"value\"\n >{{ value }}</ui5-option\n >\n }\n </ui5-select>\n } @else {\n <ui5-input\n class=\"input\"\n [attr.test-id]=\"'generic-form-field-' + field.name\"\n [disabled]=\"field.disabled\"\n [required]=\"field.required\"\n [value]=\"control.value\"\n [valueState]=\"getValueState(field.name)\"\n (blur)=\"onFieldBlur(field)\"\n (change)=\"setFormControlValue($event, field)\"\n (input)=\"setFormControlValue($event, field)\"\n >\n @if (getError(field.name); as error) {\n <div slot=\"valueStateMessage\">{{ error }}</div>\n }\n </ui5-input>\n }\n </div>\n }\n</section>\n","import { FormFieldChangeEvent, FormFieldDefinition } from '../form';\nimport { DeclarativeForm } from '../form/declarative-form/declarative-form.component';\nimport { GenericResource } from '../models';\nimport { DeclarativeTable } from '../table/declarative-table/declarative-table.component';\nimport {\n TableFieldDefinition,\n ResourceFieldButtonClickEvent,\n} from '../table/models';\nimport { getResourceValueByJsonPath } from '../table/utils/resource-field-by-path';\nimport { TableCardConfig, TableCardFormState } from './models/configs';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n Injector,\n ViewEncapsulation,\n afterNextRender,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Input } from '@fundamental-ngx/ui5-webcomponents/input';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/add.js';\nimport '@ui5/webcomponents-icons/dist/search.js';\nimport { debounceTime } from 'rxjs';\n\ntype SearchState = 'collapsed' | 'expanded' | 'collapsing';\n\n@Component({\n selector: 'mfp-declarative-table-card',\n imports: [\n DeclarativeTable,\n DeclarativeForm,\n ReactiveFormsModule,\n Dialog,\n Title,\n Button,\n Icon,\n Input,\n ],\n templateUrl: './declarative-table-card.component.html',\n styleUrl: './declarative-table-card.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class DeclarativeTableCard<T extends GenericResource> {\n resources = input.required<T[]>();\n\n config = input.required<TableCardConfig>();\n createFormState = input<TableCardFormState>({});\n editFormState = input<TableCardFormState>({});\n\n readonly actionButtonClick = output<ResourceFieldButtonClickEvent<T>>();\n readonly tableRowClicked = output<T>();\n readonly loadMoreResources = output<void>();\n readonly paginationLimitChanged = output<number>();\n\n readonly searchChanged = output<string>();\n readonly createFieldChange = output<FormFieldChangeEvent>();\n readonly editFieldChange = output<{\n resource: T;\n formChangeEvent: FormFieldChangeEvent;\n }>();\n readonly createSubmit = output<T>();\n readonly editSubmit = output<{\n resource: T;\n value: Record<string, unknown>;\n }>();\n readonly deleteSubmit = output<T>();\n\n protected searchState = signal<SearchState>('collapsed');\n protected searchExpanded = computed(() => this.searchState() !== 'collapsed');\n protected searchCollapsing = computed(\n () => this.searchState() === 'collapsing',\n );\n protected searchControl = new FormControl('');\n protected searchInputRef = viewChild<Input>('searchInput');\n\n protected createDialogOpen = signal(false);\n protected editDialogOpen = signal(false);\n protected deleteDialogOpen = signal(false);\n\n protected pendingResource = signal<T | null>(null);\n\n protected tableConfig = computed(() => this.config().tableConfig);\n protected header = computed(() => this.config().header);\n protected headerTooltip = computed(() => this.config().headerTooltip);\n protected createFormConfig = computed(\n () => this.config().createResourceFormConfig,\n );\n protected editFormConfig = computed(\n () => this.config().editResourceFormConfig,\n );\n protected deleteConfirmationConfig = computed(\n () => this.config().deleteResourceConfirmationConfig,\n );\n protected createButtonConfig = computed(\n () => this.config().buttonSettings?.createButton,\n );\n protected searchButtonConfig = computed(\n () => this.config().buttonSettings?.searchButton,\n );\n protected effectiveColumns = computed(() => this.addActionsColumn());\n protected editInitialValue = computed(() => {\n const pendingResource = this.pendingResource();\n const editConfig = this.editFormConfig();\n if (!pendingResource || !editConfig) {\n return {};\n }\n\n return this.buildInitialValues(editConfig.fields, pendingResource);\n });\n\n private readonly injector = inject(Injector);\n\n constructor() {\n this.searchControl.valueChanges\n .pipe(debounceTime(300), takeUntilDestroyed())\n .subscribe((value) => {\n this.searchChanged.emit(value ?? '');\n });\n }\n\n toggleSearch(): void {\n if (this.searchState() === 'expanded') {\n this.collapseSearch();\n } else if (this.searchState() === 'collapsed') {\n this.searchState.set('expanded');\n afterNextRender(\n () => {\n this.searchInputRef()?.elementRef.nativeElement.focus();\n },\n { injector: this.injector },\n );\n }\n }\n\n onSearchBlur(): void {\n if (!this.searchControl.value) {\n this.collapseSearch();\n }\n }\n\n onSearchAnimationEnd(): void {\n if (this.searchCollapsing()) {\n this.searchState.set('collapsed');\n this.searchControl.setValue('', { emitEvent: false });\n }\n }\n\n private collapseSearch(): void {\n this.searchState.set('collapsing');\n }\n\n onButtonClick(event: ResourceFieldButtonClickEvent<T>): void {\n const action = event.field.uiSettings?.buttonSettings?.action;\n if (action === 'edit' && event.resource) {\n this.pendingResource.set(event.resource);\n this.editDialogOpen.set(true);\n return;\n }\n if (action === 'delete' && event.resource) {\n this.pendingResource.set(event.resource);\n this.deleteDialogOpen.set(true);\n return;\n }\n\n this.actionButtonClick.emit(event);\n }\n\n closeCreateDialog(): void {\n this.createDialogOpen.set(false);\n }\n\n closeEditDialog(): void {\n this.editDialogOpen.set(false);\n }\n\n closeDeleteDialog(): void {\n this.deleteDialogOpen.set(false);\n }\n\n onCreateFieldChange(event: FormFieldChangeEvent): void {\n this.createFieldChange.emit(event);\n }\n\n onEditFieldChange(event: FormFieldChangeEvent): void {\n const resource = this.pendingResource();\n\n if (resource) {\n this.editFieldChange.emit({ resource, formChangeEvent: event });\n }\n }\n\n onCreateSubmit(value: T): void {\n this.createSubmit.emit(value);\n }\n\n onEditSubmit(value: Record<string, unknown>): void {\n const resource = this.pendingResource();\n\n if (resource) {\n this.editSubmit.emit({ resource, value });\n }\n }\n\n onDeleteSubmit(): void {\n const resource = this.pendingResource();\n if (resource) this.deleteSubmit.emit(resource);\n }\n\n protected hasErrors(state: TableCardFormState): boolean {\n const errors = state.fieldErrors;\n return !!errors && Object.values(errors).some((val) => !!val);\n }\n\n private addActionsColumn(): TableFieldDefinition[] {\n const cols = this.tableConfig().fields;\n const buttonSettings = this.config().buttonSettings;\n const editButton = this.editFormConfig();\n const deleteButton = this.deleteConfirmationConfig();\n const actions: TableFieldDefinition[] = [];\n\n if (editButton) {\n actions.push({\n property: 'mfp_edit_action',\n uiSettings: {\n displayAs: 'button',\n align: 'end',\n buttonSettings: {\n icon: 'edit',\n design: 'Transparent',\n action: 'edit',\n tooltip: 'Edit',\n ...buttonSettings?.editButton,\n },\n },\n group: { name: 'actions', label: '', multiline: false },\n });\n }\n\n if (deleteButton) {\n actions.push({\n property: 'mfp_delete_action',\n uiSettings: {\n align: 'end',\n displayAs: 'button',\n buttonSettings: {\n icon: 'decline',\n design: 'Transparent',\n action: 'delete',\n tooltip: 'Delete',\n ...buttonSettings?.deleteButton,\n },\n },\n group: { name: 'actions', label: '', multiline: false },\n });\n }\n\n return cols.concat(actions);\n }\n\n private buildInitialValues(\n fields: FormFieldDefinition[],\n resource?: T,\n ): Record<string, unknown> {\n if (!resource) return {};\n\n return fields.reduce(\n (acc, field) => {\n if (typeof field.name === 'string') {\n acc[field.name] =\n getResourceValueByJsonPath(resource, { property: field.name }) ??\n '';\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n }\n}\n","<div class=\"card\">\n <div class=\"card__header\">\n <div class=\"card__title\">\n @if (header(); as header) {\n {{ header }}\n @if (headerTooltip(); as tooltip) {\n <ui5-icon\n class=\"card__info-icon\"\n name=\"hint\"\n [accessibleName]=\"tooltip\"\n [showTooltip]=\"true\"\n />\n }\n }\n </div>\n <div class=\"card__actions\">\n @if (config().resourcesSearchable) {\n @if (searchExpanded()) {\n <ui5-input\n #searchInput\n [class]=\"\n 'card__search-input card__search-input--' +\n (searchCollapsing() ? 'leave' : 'enter')\n \"\n [formControl]=\"searchControl\"\n (animationend)=\"onSearchAnimationEnd()\"\n (blur)=\"onSearchBlur()\"\n />\n }\n <ui5-button\n class=\"card__search-btn\"\n design=\"Transparent\"\n [accessibleName]=\"searchButtonConfig()?.tooltip ?? 'Search'\"\n [icon]=\"searchButtonConfig()?.icon ?? 'search'\"\n [tooltip]=\"searchButtonConfig()?.tooltip ?? 'Search'\"\n (click)=\"toggleSearch()\"\n />\n }\n @if (createFormConfig()) {\n <ui5-button\n class=\"card__create-btn\"\n [accessibleName]=\"createButtonConfig()?.text || createButtonConfig()?.tooltip || 'Create'\"\n [design]=\"createButtonConfig()?.design ?? 'Transparent'\"\n [icon]=\"createButtonConfig()?.icon ?? 'add'\"\n [tooltip]=\"createButtonConfig()?.tooltip\"\n (click)=\"createDialogOpen.set(true)\"\n >\n {{ createButtonConfig()?.text ?? '' }}\n </ui5-button>\n }\n </div>\n </div>\n\n <div class=\"card__body\">\n @if (tableConfig(); as config) {\n <mfp-declarative-table\n [columns]=\"effectiveColumns()\"\n [growMode]=\"config.growMode\"\n [hasMore]=\"config.hasMore ?? false\"\n [height]=\"config.height\"\n [loadMoreButtonText]=\"config.loadMoreButtonText\"\n [paginationLimit]=\"config.paginationLimit ?? 5\"\n [resources]=\"resources()\"\n [totalItemsCount]=\"config.totalItemsCount\"\n (buttonClick)=\"onButtonClick($event)\"\n (loadMoreResources)=\"loadMoreResources.emit()\"\n (paginationLimitChanged)=\"paginationLimitChanged.emit($event)\"\n (tableRowClicked)=\"tableRowClicked.emit($event)\"\n />\n }\n </div>\n</div>\n\n@if (createFormConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Create'\"\n [open]=\"createDialogOpen()\"\n (ui5BeforeClose)=\"createDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Create' }}</ui5-title>\n </div>\n <div class=\"dialog__body\">\n <mfp-declarative-form\n #createForm\n [fieldErrors]=\"createFormState().fieldErrors ?? {}\"\n [fields]=\"config.fields\"\n (fieldChange)=\"onCreateFieldChange($event)\"\n (formSubmit)=\"onCreateSubmit($event)\"\n />\n </div>\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button\n design=\"Emphasized\"\n [disabled]=\"hasErrors(createFormState())\"\n (click)=\"createForm.submit()\"\n >\n {{ config.confirmLabel ?? 'Save' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeCreateDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n\n@if (editFormConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Edit'\"\n [open]=\"editDialogOpen()\"\n (ui5BeforeClose)=\"editDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Edit' }}</ui5-title>\n </div>\n <div class=\"dialog__body\">\n <mfp-declarative-form\n #editForm\n [fieldErrors]=\"editFormState().fieldErrors ?? {}\"\n [fields]=\"config.fields\"\n [initialValues]=\"editInitialValue()\"\n (fieldChange)=\"onEditFieldChange($event)\"\n (formSubmit)=\"onEditSubmit($event)\"\n />\n </div>\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button\n design=\"Emphasized\"\n [disabled]=\"hasErrors(editFormState())\"\n (click)=\"editForm.submit()\"\n >\n {{ config.confirmLabel ?? 'Edit' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeEditDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n\n@if (deleteConfirmationConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Confirm Delete'\"\n [open]=\"deleteDialogOpen()\"\n (ui5BeforeClose)=\"deleteDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Confirm Delete' }}</ui5-title>\n </div>\n @if (config.message) {\n <div class=\"dialog__body\">\n <p class=\"dialog__message\">{{ config.message }}</p>\n </div>\n }\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Negative\" (click)=\"onDeleteSubmit()\">\n {{ config.confirmLabel ?? 'Delete' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeDeleteDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n","import { ButtonSettings } from '../../models/ui-definition';\n\nexport const CARD_TYPES = {\n WC: 'wc',\n ANGULAR: 'angular',\n SAP_UI: 'sap-ui',\n} as const;\n\nexport type CardsType = (typeof CARD_TYPES)[keyof typeof CARD_TYPES];\n\n/** Configuration for a single card placed in the dashboard grid or a section. */\nexport interface CardConfig {\n /** Unique identifier for this card. Used as a stable key for position persistence. */\n id: string;\n /** Column span (1–12). Defaults to 12 when omitted. */\n w?: number;\n /** Row span — number of CSS grid rows occupied (1 row = 10 px by default). Defaults to 100 when omitted. */\n h?: number;\n /** Starting column index (0-based). Omit to let the grid auto-place the card. */\n x?: number;\n /** Starting row index (0-based). Omit to let the grid auto-place the card. */\n y?: number;\n /** Maximum row span in edit mode. */\n maxH?: number;\n /** Maximum column span in edit mode. */\n maxW?: number;\n /** Minimum row span in edit mode. */\n minH?: number;\n /** Minimum column span in edit mode. */\n minW?: number;\n /** ID of the parent section. Omit to place the card in the loose-card grid. */\n sectionId?: string;\n /**\n * Custom-element tag name (for `'wc'`/omitted), Angular component selector (for `'angular'`),\n * or SAP UI5 component name (for `'sap-ui'`).\n */\n component: string;\n /**\n * Render strategy for the card.\n * - `'wc'` (default) — creates a custom element and sets `componentInputs` as DOM properties.\n * - `'angular'` — looks up the Angular registry; warns and renders nothing if not found.\n * - `'sap-ui'` — mounts via `window.sap.ui.require` + `ComponentContainer`.\n */\n type?: CardsType;\n /** Key/value pairs passed to the rendered card. Behaviour depends on `type`. */\n componentInputs?: Record<string, unknown>;\n /** Human-readable label shown in the \"Add Card\" dialog. */\n label?: string;\n}\n\n/** Configuration for a named horizontal section that groups cards. */\nexport interface SectionConfig {\n /** Unique identifier for this section. */\n id: string;\n /** Column span (1–12). Defaults to 12 when omitted. */\n w?: number;\n /** Section heading displayed in the UI. */\n title?: string;\n /** When `false`, the section and its cards are excluded from edit mode. Defaults to `true` when omitted. */\n editable?: boolean;\n}\n\n/** Overrides for the two built-in dashboard toolbar buttons. */\nexport interface DashboardButtonsSettings {\n /** Partial override merged on top of the Edit View button defaults. */\n editViewButton?: Partial<ButtonSettings>;\n /** Partial override merged on top of the Add Card button defaults. */\n addCardButton?: Partial<ButtonSettings>;\n}\n\n/** Top-level configuration for the `<mfp-dashboard>` component. */\nexport interface DashboardConfig {\n /** Dashboard title rendered in the toolbar. */\n title: string;\n /** Optional subtitle shown below the title. */\n description?: string;\n /** URL of the background image applied to the dashboard host element. */\n backgroundImageUrl?: string;\n /** Overrides for the built-in Edit View and Add Card toolbar buttons. */\n buttonsSettings?: DashboardButtonsSettings;\n /** Extra action buttons rendered in the toolbar alongside the built-in ones. */\n customActions?: ButtonSettings[];\n /** When `true`, shows the Edit View button in the toolbar, allowing the user to enter edit mode. */\n editable?: boolean;\n}\n","import {\n Type,\n isDevMode,\n isStandalone,\n reflectComponentType,\n} from '@angular/core';\n\n\nexport interface RegisteredDashboardCardComponent {\n componentType: Type<unknown>;\n selector: string;\n inputs: ReadonlyMap<string, string>;\n}\n\nconst ELEMENT_SELECTOR_PATTERN = /^[a-z](?:[a-z0-9-]*)$/;\n\nconst dashboardCardRegistry = new Map<\n string,\n RegisteredDashboardCardComponent\n>();\n\nexport function addComponentToRegistry(componentTypes: Type<unknown>[]): void {\n for (const componentType of componentTypes) {\n const mirror = reflectComponentType(componentType);\n\n if (!mirror) {\n throw new Error(\n `Dashboard card registration failed: \"${getTypeName(componentType)}\" is not an Angular component.`,\n );\n }\n\n if (!isStandalone(componentType)) {\n throw new Error(\n `Dashboard card registration failed: \"${mirror.selector}\" must be a standalone Angular component.`,\n );\n }\n\n const selector = toElementSelector(mirror.selector, componentType);\n const existing = dashboardCardRegistry.get(selector);\n\n if (existing && existing.componentType !== componentType) {\n throw new Error(\n `Dashboard card registration failed: selector \"${selector}\" is already registered.`,\n );\n }\n\n dashboardCardRegistry.set(selector, {\n componentType,\n selector,\n inputs: createInputMap(mirror.inputs),\n });\n }\n}\n\nexport function getRegisteredDashboardCardComponent(\n selector: string,\n): RegisteredDashboardCardComponent | undefined {\n return dashboardCardRegistry.get(selector);\n}\n\nexport function resetDashboardCardRegistry(): void {\n dashboardCardRegistry.clear();\n}\n\nexport function warnForUnknownDashboardCardInput(\n selector: string,\n inputName: string,\n): void {\n if (!isDevMode()) return;\n\n console.warn(\n `Dashboard card \"${selector}\" ignores unknown Angular input \"${inputName}\".`,\n );\n}\n\nfunction createInputMap(\n inputs: readonly {\n readonly propName: string;\n readonly templateName: string;\n }[],\n): ReadonlyMap<string, string> {\n const bindings = new Map<string, string>();\n\n for (const input of inputs) {\n bindings.set(input.templateName, input.templateName);\n bindings.set(input.propName, input.templateName);\n }\n\n return bindings;\n}\n\nfunction toElementSelector(\n selector: string,\n componentType: Type<unknown>,\n): string {\n const normalized = selector.trim();\n\n if (!ELEMENT_SELECTOR_PATTERN.test(normalized)) {\n throw new Error(\n `Dashboard card registration failed: \"${getTypeName(componentType)}\" must use a single element selector. Received \"${selector}\".`,\n );\n }\n\n return normalized;\n}\n\nfunction getTypeName(componentType: Type<unknown>): string {\n return componentType.name.replace(/^_+/, '') || 'AnonymousComponent';\n}\n","import { CardConfig } from '../../models';\nimport {\n getRegisteredDashboardCardComponent,\n warnForUnknownDashboardCardInput,\n} from './dashboard-card-registry';\nimport { EffectCleanupRegisterFn, ViewContainerRef } from '@angular/core';\n\nexport function mountAngularCard(\n cfg: CardConfig,\n angularHost: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n): void {\n const registeredComponent = getRegisteredDashboardCardComponent(\n cfg.component,\n );\n\n if (!registeredComponent) {\n console.warn(\n `[DashboardCard] Angular component \"${cfg.component}\" is not registered`,\n );\n return;\n }\n\n const componentRef = angularHost.createComponent(\n registeredComponent.componentType,\n );\n\n for (const [inputName, value] of Object.entries(cfg.componentInputs ?? {})) {\n const templateName = registeredComponent.inputs.get(inputName);\n\n if (!templateName) {\n warnForUnknownDashboardCardInput(cfg.component, inputName);\n continue;\n }\n\n componentRef.setInput(templateName, value);\n }\n\n componentRef.changeDetectorRef.detectChanges();\n\n onCleanup(() => {\n angularHost.clear();\n });\n}\n","import { CardConfig } from '../../models';\nimport { EffectCleanupRegisterFn, ViewContainerRef } from '@angular/core';\n\nexport type SapUiRequire = (\n deps: string[],\n cb: (\n ComponentContainer: new (cfg: {\n name: string;\n manifest: boolean;\n async: boolean;\n settings: Record<string, unknown>;\n }) => { placeAt(el: HTMLElement): void; destroy(): void },\n ) => void,\n) => void;\n\nexport function mountSapCard(\n cfg: CardConfig,\n container: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n): void {\n const host = container.element.nativeElement;\n\n let sapContainer: { destroy(): void } | null = null;\n let isDestroyed = false;\n const sapRequire = (\n window as unknown as { sap?: { ui: { require: SapUiRequire } } }\n ).sap?.ui?.require;\n\n if (sapRequire) {\n sapRequire(['sap/ui/core/ComponentContainer'], (ComponentContainer) => {\n if (isDestroyed) return;\n\n const container = new ComponentContainer({\n name: cfg.component,\n manifest: true,\n async: true,\n settings: cfg.componentInputs ?? {},\n });\n\n container.placeAt(host);\n sapContainer = container;\n });\n } else {\n console.error('[DashboardCard] SAP UI5 is not available on window.sap');\n }\n\n onCleanup(() => {\n isDestroyed = true;\n sapContainer?.destroy();\n host.innerHTML = '';\n });\n}\n","import { EffectCleanupRegisterFn, Renderer2, ViewContainerRef } from '@angular/core';\nimport { CardConfig } from '../../models';\n\nexport function mountWcCard(\n cfg: CardConfig,\n container: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n renderer: Renderer2,\n): void {\n const host = container.element.nativeElement;\n const element = renderer.createElement(cfg.component);\n\n for (const [key, value] of Object.entries(cfg.componentInputs ?? {})) {\n renderer.setProperty(element, key, value);\n }\n\n renderer.appendChild(host, element);\n\n onCleanup(() => {\n host.innerHTML = '';\n });\n}\n","import { CARD_TYPES, CardConfig } from '../models';\nimport {\n Component,\n Renderer2,\n ViewContainerRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { mountSapCard, mountAngularCard, mountWcCard } from './utils';\n\n@Component({\n selector: 'mfp-dashboard-card',\n imports: [Button],\n templateUrl: './dashboard-card.component.html',\n styleUrl: './dashboard-card.component.scss',\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n '[style.grid-column]': 'gridColumn()',\n '[style.grid-row]': 'gridRow()',\n },\n})\nexport class DashboardCard {\n card = input.required<CardConfig>();\n editMode = input<boolean>(false);\n readonly removeCard = output<void>();\n protected readonly gridColumn = computed(() => {\n const width = this.card().w ?? 12;\n return this.createGridTrack(this.card().x, width);\n });\n protected readonly gridRow = computed(() => {\n const height = this.card().h ?? 100;\n return this.createGridTrack(this.card().y, height);\n });\n\n private host = viewChild('elementHost', { read: ViewContainerRef });\n private renderer = inject(Renderer2);\n\n constructor() {\n effect((onCleanup) => {\n const host = this.host();\n const cfg = this.card();\n if (!host || !cfg.component) return;\n\n host.clear();\n host.element.nativeElement.innerHTML = '';\n\n switch (cfg.type) {\n case CARD_TYPES.SAP_UI:\n mountSapCard(cfg, host, onCleanup);\n break;\n case CARD_TYPES.ANGULAR:\n mountAngularCard(cfg, host, onCleanup);\n break;\n case CARD_TYPES.WC:\n default:\n mountWcCard(cfg, host, onCleanup, this.renderer);\n break;\n }\n });\n }\n\n private createGridTrack(start: number | undefined, span: number): string {\n if (start === undefined) {\n return `span ${span}`;\n }\n\n return `${start + 1} / span ${span}`;\n }\n}\n","@if (card().component) {\n <div class=\"component-card\">\n @if (editMode()) {\n <div class=\"remove-wrapper\">\n <ui5-button\n class=\"card__remove\"\n design=\"Default\"\n icon=\"decline\"\n [accessibleName]=\"'Remove card: ' + (card().label || card().component)\"\n (click)=\"removeCard.emit()\"\n />\n </div>\n }\n <div\n class=\"component-host\"\n [style.pointer-events]=\"editMode() ? 'none' : 'auto'\"\n >\n <div #elementHost></div>\n </div>\n </div>\n} @else {\n <div class=\"card\">\n <div\n class=\"card__body\"\n [style.pointer-events]=\"editMode() ? 'none' : 'auto'\"\n >\n <ng-content />\n </div>\n </div>\n}","import { CardConfig } from '../models';\nimport {\n Component,\n ViewEncapsulation,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { List } from '@fundamental-ngx/ui5-webcomponents/list';\nimport { ListItemCustom } from '@fundamental-ngx/ui5-webcomponents/list-item-custom';\nimport { Switch } from '@fundamental-ngx/ui5-webcomponents/switch';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-edit-cards-dialog',\n imports: [Button, Dialog, List, ListItemCustom, Switch, Title],\n templateUrl: './edit-cards-dialog.component.html',\n styleUrl: './edit-cards-dialog.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class EditCardsDialog {\n availableCards = input<CardConfig[]>([]);\n addedCardsIds = input<Set<string>>(new Set());\n open = input<boolean>(false);\n\n readonly confirm = output<{ added: CardConfig[]; removed: string[] }>();\n readonly cancelled = output<void>();\n\n selectedIds = signal<Set<string>>(new Set());\n\n constructor() {\n effect(() => {\n if (this.open()) {\n const initial = new Set(\n this.availableCards()\n .filter((ac) => this.addedCardsIds().has(ac.id))\n .map((ac) => ac.id),\n );\n this.selectedIds.set(initial);\n }\n });\n }\n\n toggle(id: string): void {\n this.selectedIds.update((set) => {\n const next = new Set(set);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }\n\n confirmSave(): void {\n const availableIds = new Set(this.availableCards().map((ac) => ac.id));\n const added = this.availableCards().filter(\n (ac) => this.selectedIds().has(ac.id) && !this.addedCardsIds().has(ac.id),\n );\n const removed = [...this.addedCardsIds()].filter(\n (id) => availableIds.has(id) && !this.selectedIds().has(id),\n );\n this.confirm.emit({ added, removed });\n }\n}\n","<ui5-dialog [open]=\"open()\" (ui5BeforeClose)=\"cancelled.emit()\">\n <div class=\"edit-cards-dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">Edit Cards</ui5-title>\n </div>\n <div class=\"edit-cards-dialog\">\n <ui5-list noDataText=\"No cards available.\" selectionMode=\"None\" separators=\"Inner\">\n @for (ac of availableCards(); track ac.id) {\n <ui5-li-custom [accessibleName]=\"ac.label || ac.component\">\n <div class=\"edit-cards-dialog__list-item\">\n <span>{{ ac.label || ac.component }}</span>\n <ui5-switch\n [accessibleName]=\"ac.label || ac.component\"\n [checked]=\"selectedIds().has(ac.id)\"\n (ui5Change)=\"toggle(ac.id)\"\n />\n </div>\n </ui5-li-custom>\n }\n </ui5-list>\n </div>\n <div class=\"edit-cards-dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Emphasized\" (click)=\"confirmSave()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelled.emit()\">Cancel</ui5-button>\n </div>\n</ui5-dialog>\n","export const COMPACT_BREAKPOINT = 726;\nexport const CELL_HEIGHT = 10;\n","import { DashboardCard } from '../card/dashboard-card.component';\nimport { CardConfig, SectionConfig } from '../models';\nimport { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\n\n@Component({\n selector: 'mfp-dashboard-section',\n imports: [DashboardCard, Button],\n templateUrl: './dashboard-section.component.html',\n styleUrl: './dashboard-section.component.scss',\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n '[style.grid-column]': '\"span \" + (section().w ?? 12)',\n },\n})\nexport class DashboardSection {\n section = input.required<SectionConfig>();\n cards = input<CardConfig[]>([]);\n columns = input<number>(12);\n editMode = input<boolean>(false);\n readonly removeSection = output<void>();\n readonly removeCard = output<string>();\n}\n","<div\n class=\"section\"\n [class.section--edit]=\"editMode() && section().editable !== false\"\n>\n @if (editMode() && section().editable !== false) {\n <ui5-button\n class=\"section__remove\"\n design=\"Default\"\n icon=\"decline\"\n [accessibleName]=\"'Remove section: ' + (section().title || section().id)\"\n (click)=\"removeSection.emit()\"\n />\n }\n @if (section().title) {\n <div class=\"section__header\">\n <span class=\"section__title\">{{ section().title }}</span>\n </div>\n }\n <div class=\"section__grid\" [style.--cols]=\"columns()\">\n @for (card of cards(); track card.id) {\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode() && section().editable !== false\"\n (removeCard)=\"removeCard.emit($any(card.id))\"\n />\n }\n </div>\n</div>\n","import { ButtonSettings } from '../../models/ui-definition';\nimport { DashboardCard } from '../card/dashboard-card.component';\nimport { addComponentToRegistry } from '../card/utils/dashboard-card-registry';\nimport { EditCardsDialog } from '../edit-cards-dialog/edit-cards-dialog.component';\nimport { CardConfig, DashboardConfig, SectionConfig } from '../models';\nimport { CELL_HEIGHT, COMPACT_BREAKPOINT } from '../models/constants';\nimport { DashboardSection } from '../section/dashboard-section.component';\nimport {\n Component,\n ElementRef,\n Injector,\n OnDestroy,\n OnInit,\n Type,\n ViewEncapsulation,\n afterNextRender,\n computed,\n inject,\n input,\n linkedSignal,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Menu } from '@fundamental-ngx/ui5-webcomponents/menu';\nimport { MenuItem } from '@fundamental-ngx/ui5-webcomponents/menu-item';\nimport { MenuSeparator } from '@fundamental-ngx/ui5-webcomponents/menu-separator';\nimport { Text } from '@fundamental-ngx/ui5-webcomponents/text';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/action-settings.js';\nimport '@ui5/webcomponents-icons/dist/menu2.js';\nimport { GridStackNode, GridStackOptions } from 'gridstack';\nimport {\n GridstackComponent,\n GridstackItemComponent,\n nodesCB,\n} from 'gridstack/dist/angular';\n\ndocument.body.classList.add('ui5-content-density-compact');\n\n@Component({\n selector: 'mfp-dashboard',\n imports: [\n GridstackComponent,\n GridstackItemComponent,\n EditCardsDialog,\n DashboardSection,\n DashboardCard,\n Button,\n Menu,\n MenuItem,\n MenuSeparator,\n Title,\n Text,\n ],\n templateUrl: './dashboard.component.html',\n styleUrl: './dashboard.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[style.background-image]':\n 'config().backgroundImageUrl ? \"url(\" + config().backgroundImageUrl + \")\" : null',\n },\n})\nexport class Dashboard implements OnInit, OnDestroy {\n static registerAngularComponents(componentTypes: Type<unknown>[]): void {\n addComponentToRegistry(componentTypes);\n }\n\n config = input.required<DashboardConfig>();\n sections = model<SectionConfig[]>([]);\n cards = model<CardConfig[]>([]);\n availableCards = input<CardConfig[]>([]);\n\n readonly saved = output<{ sections: SectionConfig[]; cards: CardConfig[] }>();\n readonly actionButtonClick = output<{\n event: MouseEvent;\n action: ButtonSettings;\n }>();\n\n editMode = signal(false);\n compactToolbar = signal(false);\n toolbarMenuOpen = signal(false);\n\n private sectionsSnapshot: SectionConfig[] = [];\n private cardsSnapshot: CardConfig[] = [];\n private gridStackItems = viewChild.required<GridstackComponent>('grid');\n private addCardBtn = viewChild<Button>('addCardBtn');\n private resizeObserver?: ResizeObserver;\n private readonly hostEl = inject(ElementRef<HTMLElement>);\n private readonly injector = inject(Injector);\n\n protected gridOptions = computed(\n (): GridStackOptions => ({\n cellHeight: CELL_HEIGHT,\n disableResize: !this.editMode(),\n disableDrag: !this.editMode(),\n columnOpts: {\n breakpointForWindow: true,\n breakpoints: [\n { w: 1440, c: 12, layout: 'none' },\n { w: 1024, c: 8, layout: 'compact' },\n { w: 600, c: 1, layout: 'list' },\n ],\n },\n }),\n );\n\n cardDialogOpen = signal(false);\n customActions = computed(() => this.config().customActions ?? []);\n addedCardsIds = computed(() => new Set(this.cards().map((c) => c.id)));\n\n editViewButton = computed(() => ({\n icon: 'action-settings',\n design: 'Transparent' as const,\n tooltip: 'Edit View',\n text: '',\n ...this.config().buttonsSettings?.editViewButton,\n }));\n\n addCardButton = computed(() => ({\n icon: '',\n design: 'Default' as const,\n tooltip: '',\n text: 'Edit Cards',\n ...this.config().buttonsSettings?.addCardButton,\n }));\n\n sectionCards = computed(() => {\n const all = this.cards();\n return (sectionId: string) => all.filter((c) => c.sectionId === sectionId);\n });\n\n cardsPosition = new Map<\n string,\n { x?: number; y?: number; w?: number; h?: number }\n >();\n looseCards = linkedSignal(() => this.cards().filter((c) => !c.sectionId));\n\n private newGridStackNodes: GridStackNode[] = [];\n\n ngOnInit(): void {\n this.resizeObserver = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n this.compactToolbar.set(width < COMPACT_BREAKPOINT);\n });\n this.resizeObserver.observe(this.hostEl.nativeElement);\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n onMenuItemClick(actionId: string, event: Event): void {\n if (actionId === 'edit-view') {\n this.enterEditMode();\n return;\n }\n const action = this.customActions().find((a) => a.action === actionId);\n if (action) {\n this.actionButtonClick.emit({ event: event as MouseEvent, action });\n }\n }\n\n enterEditMode(): void {\n const gridStackNodes = this.gridStackItems()\n .gridstackItems?.toArray()\n .map((node) => node.options);\n\n if (gridStackNodes) {\n this.saveCardsPosition(gridStackNodes);\n }\n\n this.sectionsSnapshot = [...this.sections()];\n this.cardsSnapshot = [...this.cards()];\n this.editMode.set(true);\n afterNextRender(\n () => {\n this.addCardBtn()?.element.focus();\n },\n { injector: this.injector },\n );\n }\n\n saveEdit(): void {\n this.saveCardsPosition(this.newGridStackNodes);\n this.saved.emit({\n sections: this.sections(),\n cards: this.cards().map((c) => {\n const pos = this.cardsPosition.get(c.id);\n return {\n ...c,\n x: pos?.x,\n y: pos?.y,\n w: pos?.w ?? c.w,\n h: pos?.h ?? c.h,\n };\n }),\n });\n this.editMode.set(false);\n }\n\n cancelEdit(): void {\n this.sections.set(this.sectionsSnapshot);\n this.cards.set(\n this.cardsSnapshot.map((c) => {\n const pos = this.cardsPosition.get(c.id);\n return { ...c, x: pos?.x, y: pos?.y };\n }),\n );\n this.cardDialogOpen.set(false);\n this.editMode.set(false);\n }\n\n removeSection(id: string): void {\n this.sections.update((list) => list.filter((s) => s.id !== id));\n this.cards.update((list) => list.filter((c) => c.sectionId !== id));\n }\n\n removeCard(id: string): void {\n this.cardsPosition.delete(id);\n this.cards.update((list) => list.filter((c) => c.id !== id));\n }\n\n openCardPanel(): void {\n this.cardDialogOpen.set(true);\n }\n\n closeCardPanel(): void {\n this.cardDialogOpen.set(false);\n }\n\n onCardsEdited(event: { added: CardConfig[]; removed: string[] }): void {\n this.cards.update((list) => {\n const withoutRemoved = list.filter((c) => !event.removed.includes(c.id));\n return [...withoutRemoved, ...event.added.map((ac) => ({ ...ac }))];\n });\n this.closeCardPanel();\n }\n\n onGridChange(event: nodesCB): void {\n this.newGridStackNodes = event.nodes;\n }\n\n private saveCardsPosition(items: GridStackNode[]): void {\n items.forEach((node) => {\n if (node.id) {\n this.cardsPosition.set(node.id, {\n x: node.x,\n y: node.y,\n w: node.w,\n h: node.h,\n });\n }\n });\n }\n}\n","<div class=\"mfp-dashboard\">\n <div class=\"mfp-dashboard__topbar\">\n <div class=\"mfp-dashboard__topbar-row\">\n <div class=\"mfp-dashboard__header\">\n @if (config().title) {\n <ui5-title level=\"H2\" size=\"H2\" wrapping-type=\"Normal\">{{\n config().title\n }}</ui5-title>\n }\n @if (config().description) {\n <ui5-text>{{ config().description }}</ui5-text>\n }\n </div>\n\n <div class=\"mfp-dashboard__toolbar\">\n @if (editMode()) {\n <ui5-button\n #addCardBtn\n id=\"add-card-btn\"\n [accessibleName]=\"addCardButton().text || addCardButton().tooltip || 'Edit Cards'\"\n [design]=\"addCardButton().design\"\n [icon]=\"addCardButton().icon\"\n [tooltip]=\"addCardButton().tooltip\"\n (click)=\"openCardPanel()\"\n >{{ addCardButton().text }}</ui5-button\n >\n } @else if (compactToolbar()) {\n <ui5-button\n #menuBtn\n accessibleName=\"Actions\"\n design=\"Transparent\"\n icon=\"menu2\"\n tooltip=\"Actions\"\n (click)=\"toolbarMenuOpen.update((v) => !v)\"\n />\n <ui5-menu\n [open]=\"toolbarMenuOpen()\"\n [opener]=\"menuBtn.element\"\n (ui5Close)=\"toolbarMenuOpen.set(false)\"\n (ui5ItemClick)=\"\n onMenuItemClick(\n $any($event).detail.item.dataset['action'],\n $event\n )\n \"\n (ui5Open)=\"toolbarMenuOpen.set(true)\"\n >\n @for (action of customActions(); track action.action) {\n <ui5-menu-item\n [attr.data-action]=\"action.action\"\n [icon]=\"action.icon ?? ''\"\n [text]=\"action.text ?? ''\"\n />\n }\n @if (config().editable) {\n <ui5-menu-separator />\n <ui5-menu-item\n data-action=\"edit-view\"\n [icon]=\"editViewButton().icon\"\n [text]=\"editViewButton().text || 'Edit View'\"\n />\n }\n </ui5-menu>\n } @else {\n @for (action of customActions(); track action.action) {\n <ui5-button\n [accessibleName]=\"action.text || action.tooltip || action.action\"\n [design]=\"action.design ?? 'Default'\"\n [endIcon]=\"action?.endIcon\"\n [icon]=\"action.icon ?? ''\"\n [tooltip]=\"action.tooltip ?? ''\"\n (click)=\"\n actionButtonClick.emit({ event: $event, action: action })\n \"\n >{{ action.text }}</ui5-button\n >\n }\n @if (config().editable) {\n <ui5-button\n [accessibleName]=\"editViewButton().text || editViewButton().tooltip || 'Edit View'\"\n [design]=\"editViewButton().design\"\n [icon]=\"editViewButton().icon\"\n [tooltip]=\"editViewButton().tooltip\"\n (click)=\"enterEditMode()\"\n >{{ editViewButton().text }}</ui5-button\n >\n }\n }\n </div>\n </div>\n\n <div class=\"mfp-dashboard__subheader\">\n <ng-content select=\"[slot=dashboard-subheader]\" />\n </div>\n </div>\n <div class=\"mfp-sections-container\">\n @for (section of sections(); track section.id) {\n <mfp-dashboard-section\n [cards]=\"sectionCards()(section.id)\"\n [columns]=\"12\"\n [editMode]=\"editMode()\"\n [section]=\"section\"\n (removeCard)=\"removeCard($event)\"\n (removeSection)=\"removeSection(section.id)\"\n />\n }\n </div>\n <gridstack #grid [options]=\"gridOptions()\" (removedCB)=\"onGridChange($event)\" (addedCB)=\"onGridChange($event)\" (changeCB)=\"onGridChange($event)\">\n @for (card of looseCards(); track card.id) {\n <gridstack-item\n [options]=\"card\"\n [style.cursor]=\"editMode() ? 'pointer' : 'auto'\"\n >\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode()\"\n (removeCard)=\"removeCard($any(card.id))\"\n />\n </gridstack-item>\n }\n </gridstack>\n\n @if (editMode()) {\n <div class=\"mfp-dashboard__edit-bar\">\n <ui5-button design=\"Emphasized\" (click)=\"saveEdit()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelEdit()\"\n >Cancel</ui5-button\n >\n </div>\n }\n</div>\n\n<mfp-edit-cards-dialog\n [addedCardsIds]=\"addedCardsIds()\"\n [availableCards]=\"availableCards()\"\n [open]=\"cardDialogOpen()\"\n (cancelled)=\"closeCardPanel()\"\n (confirm)=\"onCardsEdited($event)\"\n/>\n","import { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Card } from '@fundamental-ngx/ui5-webcomponents/card';\nimport { CardHeader } from '@fundamental-ngx/ui5-webcomponents/card-header';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/AllIcons.js';\n\n@Component({\n selector: 'mfp-visited-service-card',\n imports: [Card, CardHeader, Icon],\n templateUrl: './visited-service-card.component.html',\n styleUrl: './visited-service-card.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class VisitedServiceCard {\n serviceType = input.required<string>();\n serviceName = input.required<string>();\n serviceDescription = input.required<string>();\n serviceIcon = input.required<string>();\n path = input.required<string>();\n\n readonly cardClick = output<string>();\n}\n","<div\n class=\"visited-card-wrapper\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"cardClick.emit(path())\"\n (keydown.enter)=\"cardClick.emit(path())\"\n>\n <span class=\"visited-card__type-badge\">{{ serviceType() }}</span>\n <ui5-card class=\"visited-card\">\n <ui5-card-header\n slot=\"header\"\n [interactive]=\"true\"\n [subtitleText]=\"serviceDescription()\"\n [titleText]=\"serviceName()\"\n >\n <ui5-icon\n class=\"visited-card__icon\"\n slot=\"avatar\"\n [name]=\"serviceIcon()\"\n />\n </ui5-card-header>\n </ui5-card>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-favorites',\n imports: [Button, Icon, Title],\n templateUrl: './favorites.component.html',\n styleUrl: './favorites.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class Favorites {\n readonly items = [\n { label: 'Create Account', icon: 'add', action: 'create-account' },\n { label: 'Start Approval', icon: 'workflow-tasks', action: 'start-approval' },\n { label: 'Add User to Account', icon: 'person-placeholder', action: 'add-user' },\n ];\n}\n","<div class=\"favorites\">\n <ui5-title class=\"favorites__title\" level=\"H5\">Favorites</ui5-title>\n <div class=\"favorites__list\">\n @for (item of items; track item.action) {\n <div class=\"favorites__item\">\n <ui5-icon class=\"favorites__icon\" [name]=\"item.icon\" />\n <span class=\"favorites__label\">{{ item.label }}</span>\n <ui5-button design=\"Transparent\" [icon]=\"item.icon\">{{ item.label }}</ui5-button>\n </div>\n }\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n/** Possible health states for a service. */\nexport type ServiceStatusValue = 'operational' | 'degraded' | 'outage' | 'maintenance';\n\n/** A single service entry displayed in the service-status card. */\nexport interface ServiceStatusItem {\n /** Display name of the service. */\n name: string;\n /** SAP UI5 icon name used as the service icon. */\n icon: string;\n /** Current health status of the service. */\n status: ServiceStatusValue;\n}\n\n@Component({\n selector: 'mfp-service-status-card',\n imports: [Icon, Title],\n templateUrl: './service-status-card.component.html',\n styleUrl: './service-status-card.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class ServiceStatusCard {\n readonly services: ServiceStatusItem[] = [\n { name: 'API Gateway', icon: 'connected', status: 'operational' },\n { name: 'Identity Service', icon: 'customer', status: 'operational' },\n { name: 'Database Cluster', icon: 'database', status: 'degraded' },\n { name: 'Message Queue', icon: 'email', status: 'operational' },\n { name: 'Object Storage', icon: 'storage', status: 'maintenance' },\n { name: 'Audit Log', icon: 'log', status: 'outage' },\n ];\n\n readonly statusConfig: Record<ServiceStatusValue, { label: string; icon: string; colorClass: string }> = {\n operational: { label: 'Operational', icon: 'status-positive', colorClass: 'status--operational' },\n degraded: { label: 'Degraded', icon: 'status-critical', colorClass: 'status--degraded' },\n outage: { label: 'Outage', icon: 'status-negative', colorClass: 'status--outage' },\n maintenance: { label: 'Maintenance', icon: 'status-inactive', colorClass: 'status--maintenance' },\n };\n}\n","<div class=\"service-status\">\n <ui5-title class=\"service-status__title\" level=\"H5\">Service Availability</ui5-title>\n <div class=\"service-status__list\">\n @for (service of services; track service.name) {\n <div class=\"service-status__item\">\n <ui5-icon class=\"service-status__icon\" [name]=\"service.icon\" />\n <span class=\"service-status__name\">{{ service.name }}</span>\n <div [class]=\"'service-status__status ' + statusConfig[service.status].colorClass\">\n <ui5-icon class=\"service-status__status-icon\" [name]=\"statusConfig[service.status].icon\" />\n <span class=\"service-status__status-label\">{{ statusConfig[service.status].label }}</span>\n </div>\n </div>\n }\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { List } from '@fundamental-ngx/ui5-webcomponents/list';\nimport { ListItemStandard } from '@fundamental-ngx/ui5-webcomponents/list-item-standard';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-whats-new',\n imports: [List, ListItemStandard, Title],\n templateUrl: './whats-new.component.html',\n styleUrl: './whats-new.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class WhatsNew {\n readonly headlines = [\n {\n title: 'Kubernetes 1.32 Released',\n description: 'Improved scheduling, new APIs and graduated features.',\n icon: 'cloud',\n },\n {\n title: 'Angular 20 Signals Stable',\n description: 'Signal-based reactivity is now production-ready.',\n icon: 'developer-settings',\n },\n {\n title: 'WebAssembly WASI 2.0 Preview',\n description: 'System interface advances bring server-side WASM closer.',\n icon: 'technical-object',\n },\n {\n title: 'OpenTelemetry Hits 1.0',\n description: 'Unified observability standard lands in enterprise stacks.',\n icon: 'monitor-payments',\n },\n {\n title: 'Rust Enters Linux Kernel Mainstream',\n description: 'More subsystems accept Rust driver contributions.',\n icon: 'settings',\n },\n {\n title: 'TypeScript 5.8 Performance Boost',\n description: 'Declaration emit is up to 10x faster in large projects.',\n icon: 'accelerated',\n },\n ];\n}\n","<div class=\"whats-new\">\n <ui5-title class=\"whats-new__title\" level=\"H5\">What's New</ui5-title>\n <ui5-list class=\"whats-new__list\" separators=\"Inner\">\n @for (item of headlines; track item.title) {\n <ui5-li [description]=\"item.description\" [icon]=\"item.icon\">\n {{ item.title }}\n </ui5-li>\n }\n </ui5-list>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/types/openmfp-ngx.d.ts
CHANGED
|
@@ -473,6 +473,8 @@ declare class Dashboard implements OnInit, OnDestroy {
|
|
|
473
473
|
cardsPosition: Map<string, {
|
|
474
474
|
x?: number;
|
|
475
475
|
y?: number;
|
|
476
|
+
w?: number;
|
|
477
|
+
h?: number;
|
|
476
478
|
}>;
|
|
477
479
|
looseCards: _angular_core.WritableSignal<CardConfig[]>;
|
|
478
480
|
private newGridStackNodes;
|
|
@@ -490,7 +492,7 @@ declare class Dashboard implements OnInit, OnDestroy {
|
|
|
490
492
|
added: CardConfig[];
|
|
491
493
|
removed: string[];
|
|
492
494
|
}): void;
|
|
493
|
-
|
|
495
|
+
onGridChange(event: nodesCB): void;
|
|
494
496
|
private saveCardsPosition;
|
|
495
497
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Dashboard, never>;
|
|
496
498
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Dashboard, "mfp-dashboard", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "cards": { "alias": "cards"; "required": false; "isSignal": true; }; "availableCards": { "alias": "availableCards"; "required": false; "isSignal": true; }; }, { "sections": "sectionsChange"; "cards": "cardsChange"; "saved": "saved"; "actionButtonClick": "actionButtonClick"; }, never, ["[slot=dashboard-subheader]"], true, never>;
|