barsa-tiles 3.0.13 → 3.0.14
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/barsa-tiles.mjs +206 -27
- package/fesm2022/barsa-tiles.mjs.map +1 -1
- package/package.json +1 -1
- package/types/barsa-tiles.d.ts +60 -3
package/fesm2022/barsa-tiles.mjs
CHANGED
|
@@ -1040,6 +1040,10 @@ class TilePropPipe {
|
|
|
1040
1040
|
}
|
|
1041
1041
|
return val;
|
|
1042
1042
|
}
|
|
1043
|
+
if (prop === 'Badge') {
|
|
1044
|
+
// تایلی که TileSetting ندارد نباید کرش کند؛ مسیر عمومی پایین TileSetting را بیمحافظ میخواند.
|
|
1045
|
+
return BarsaApi.Common.Util.TryGetValue(data, 'Component.Settings.TileSetting.Badge', '');
|
|
1046
|
+
}
|
|
1043
1047
|
if (prop === 'DynamicCommand') {
|
|
1044
1048
|
return data['DynamicCommand'];
|
|
1045
1049
|
}
|
|
@@ -1085,11 +1089,11 @@ class TileComponent extends TilePropsComponent {
|
|
|
1085
1089
|
this._footer?.markUpdated();
|
|
1086
1090
|
}
|
|
1087
1091
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1088
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: TileComponent, isStandalone: false, selector: "bt-tile", inputs: { type: "type", footerTemplate: "footerTemplate", footer: "footer", title: "title", icon: "icon", subtitle: "subtitle", isDouble: "isDouble", canReload: "canReload", showUpdateTime: "showUpdateTime", darkMode: "darkMode", disableClick: "disableClick", edit: "edit", dynamicCommand: "dynamicCommand", backColor: "backColor", hideHeader: "hideHeader", setToStorage: "setToStorage", listMode: "listMode", navigateBackOnClick: "navigateBackOnClick", contentOnly: "contentOnly" }, outputs: { changeGroupClick: "changeGroupClick", reloadClick: "reloadClick" }, viewQueries: [{ propertyName: "_footer", first: true, predicate: FooterTileComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "@if(!listMode) {\r\n<fd-tile\r\n [type]=\"type\"\r\n [double]=\"isDouble === true\"\r\n [action]=\"edit\"\r\n tileStyle\r\n [backColor]=\"darkMode ? '' : backColor\"\r\n [size]=\"'s'\"\r\n tileDynCommand\r\n [disableClick]=\"disableClick || (data | tileProp: 'DisableDynamicCommand')\"\r\n [edit]=\"edit\"\r\n [navigateBackOnClick]=\"navigateBackOnClick\"\r\n [title]=\"title\"\r\n [setToStorage]=\"setToStorage\"\r\n [dynamicCommand]=\"dynamicCommand\"\r\n [class.bt-tile--content-only]=\"contentOnly\"\r\n [class.bt-tile--content-only-edit]=\"contentOnly && edit\"\r\n>\r\n @if (edit && !data.Locked) {\r\n <button fd-button fd-tile-action-close fdType=\"transparent\" (click)=\"hideClick.emit()\"></button>\r\n } @if (edit && !data.Locked) {\r\n <button fd-button fd-tile-action-indicator fdType=\"transparent\" [fdMenuTrigger]=\"menu\"></button>\r\n } @if(!hideHeader && !contentOnly){\r\n <div fd-tile-header>\r\n <h1 fd-tile-title [overflowText]=\"title | bbbTranslate\">\r\n {{ title | bbbTranslate }}\r\n </h1>\r\n <h2 fd-tile-subtitle>\r\n {{ subtitle | bbbTranslate }}\r\n </h2>\r\n </div>\r\n }\r\n <ng-content></ng-content>\r\n @if (!contentOnly) {\r\n <ng-container [ngTemplateOutlet]=\"footerTemplate ? footerTemplate : defaultFooter\"></ng-container>\r\n }\r\n</fd-tile>\r\n}@else{\r\n<span fd-list-title> {{ title | bbbTranslate }} </span>\r\n<span fd-list-secondary> {{ subtitle | bbbTranslate }} </span>\r\n@if(icon){ <i fd-list-icon [glyph]=\"icon\"></i>} }\r\n<ng-template #defaultFooter>\r\n @if (footer) {\r\n <div\r\n fd-tile-footer\r\n bt-footer-tile\r\n [canReload]=\"canReload\"\r\n [showUpdateTime]=\"showUpdateTime\"\r\n [secondSection]=\"footer.SecondSection\"\r\n [twoColumn]=\"footer.twoColumn\"\r\n [firstSection]=\"footer.FirstSection\"\r\n (reloadClick)=\"reloadClick.emit()\"\r\n ></div>\r\n\r\n }\r\n</ng-template>\r\n<fd-menu #menu>\r\n <li fd-menu-item>\r\n <a (click)=\"menu.close(); renameClick.emit()\" fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Rename' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item>\r\n <a (click)=\"menu.close(); changeGroupClick.emit()\" fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Groups' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n</fd-menu>\r\n", styles: [":host,fd-tile{display:block}fd-tile.bt-tile--content-only{--fdTile_Background: transparent;--fdTile_Border: transparent;--fdTile_Box_Shadow: none;background:transparent!important;border:0!important;border-radius:0!important;box-shadow:none!important;max-height:none!important;min-height:0!important;min-width:0!important;overflow:visible;padding:0!important}fd-tile.bt-tile--content-only:hover,fd-tile.bt-tile--content-only:active,fd-tile.bt-tile--content-only.is-hover,fd-tile.bt-tile--content-only.is-active{--fdTile_Background: transparent;--fdTile_Border: transparent;--fdTile_Box_Shadow: none;background:transparent!important;border:0!important;box-shadow:none!important}fd-tile.bt-tile--content-only ::ng-deep .fd-tile__content{margin:0!important;max-height:none!important;min-height:0!important;padding:0!important}fd-tile.bt-tile--content-only-edit{outline:var(--sapContent_FocusWidth, .0625rem) dashed var(--sapContent_FocusColor, #0070f2);outline-offset:calc(-1 * var(--sapContent_FocusWidth, .0625rem))}\n"], dependencies: [{ kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["id"], exportAs: ["fd-button"] }, { kind: "directive", type: i7.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap", "truncate", "scope"] }, { kind: "directive", type: i7.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i7.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "glyphFont", "class", "role", "ariaHidden"] }, { kind: "component", type: i4.MenuComponent, selector: "fd-menu", inputs: ["openOnHoverTime", "ariaLabel", "ariaLabelledby", "id", "config", "mobile", "mobileConfig", "placement", "closeOnEscapeKey", "focusAutoCapture", "disabled", "disableScrollbar", "triggers", "fillControlMode", "closeOnOutsideClick", "noArrow", "focusTrapped", "additionalBodyClass", "closeOnNavigation", "restoreFocusOnClose", "appendTo", "fixedPosition", "scrollStrategy", "isOpen"], outputs: ["isOpenChange", "activePath", "beforeOpen"] }, { kind: "component", type: i4.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: i4.MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i4.MenuTitleDirective, selector: "[fd-menu-title]", inputs: ["truncate"] }, { kind: "directive", type: i4.MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "component", type: i1$1.TileComponent, selector: "fd-tile, [fd-tile]", inputs: ["size", "double", "type", "action", "clickable", "role", "ariaLabel", "ariaLabelledby", "id"], outputs: ["tileClick"] }, { kind: "directive", type: i1$1.TileHeaderDirective, selector: "[fdTileHeader], [fd-tile-header]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$1.TileFooterDirective, selector: "[fdTileFooter], [fd-tile-footer]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$1.TileTitleDirective, selector: "[fdTileTitle], [fd-tile-title]" }, { kind: "directive", type: i1$1.TileSubtitleDirective, selector: "[fdTileTitle], [fd-tile-subtitle]" }, { kind: "directive", type: i1$1.TileActionCloseDirective, selector: "[fdTileActionClose], [fd-tile-action-close]" }, { kind: "directive", type: i1$1.TileActionIndicatorDirective, selector: "[fdTileActionIndicator], [fd-tile-action-indicator]" }, { kind: "directive", type: i5.OverflowTextDirective, selector: "[overflowText]", exportAs: ["overflowText"] }, { kind: "component", type: FooterTileComponent, selector: "bt-footer-tile,div[bt-footer-tile]", inputs: ["firstSection", "secondSection", "twoColumn", "canReload", "showUpdateTime"], outputs: ["reloadClick"] }, { kind: "directive", type: TileStyleDirective, selector: "[tileStyle]", inputs: ["backColor"] }, { kind: "directive", type: TileDynamicCommandDirective, selector: "[tileDynCommand]", inputs: ["disableClick", "edit", "dynamicCommand", "title", "setToStorage", "navigateBackOnClick"] }, { kind: "pipe", type: i5.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1092
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: TileComponent, isStandalone: false, selector: "bt-tile", inputs: { type: "type", footerTemplate: "footerTemplate", footer: "footer", title: "title", icon: "icon", subtitle: "subtitle", isDouble: "isDouble", canReload: "canReload", showUpdateTime: "showUpdateTime", darkMode: "darkMode", disableClick: "disableClick", edit: "edit", dynamicCommand: "dynamicCommand", backColor: "backColor", hideHeader: "hideHeader", setToStorage: "setToStorage", listMode: "listMode", navigateBackOnClick: "navigateBackOnClick", contentOnly: "contentOnly" }, outputs: { changeGroupClick: "changeGroupClick", reloadClick: "reloadClick" }, viewQueries: [{ propertyName: "_footer", first: true, predicate: FooterTileComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "@if(!listMode) {\r\n<fd-tile\r\n [type]=\"type\"\r\n [double]=\"isDouble === true\"\r\n [action]=\"edit\"\r\n tileStyle\r\n [backColor]=\"darkMode ? '' : backColor\"\r\n [size]=\"'s'\"\r\n tileDynCommand\r\n [disableClick]=\"disableClick || (data | tileProp: 'DisableDynamicCommand')\"\r\n [edit]=\"edit\"\r\n [navigateBackOnClick]=\"navigateBackOnClick\"\r\n [title]=\"title\"\r\n [setToStorage]=\"setToStorage\"\r\n [dynamicCommand]=\"dynamicCommand\"\r\n [class.bt-tile--content-only]=\"contentOnly\"\r\n [class.bt-tile--content-only-edit]=\"contentOnly && edit\"\r\n>\r\n @let badge = contentOnly ? '' : (data | tileProp: 'Badge' | bbbTranslate);\r\n @if (badge) {\r\n <div fd-badge class=\"fd-badge\" [attr.title]=\"badge\">{{ badge }}</div>\r\n }\r\n @if (edit && !data.Locked) {\r\n <button fd-button fd-tile-action-close fdType=\"transparent\" (click)=\"hideClick.emit()\"></button>\r\n } @if (edit && !data.Locked) {\r\n <button fd-button fd-tile-action-indicator fdType=\"transparent\" [fdMenuTrigger]=\"menu\"></button>\r\n } @if(!hideHeader && !contentOnly){\r\n <div fd-tile-header>\r\n <h1 fd-tile-title [overflowText]=\"title | bbbTranslate\">\r\n {{ title | bbbTranslate }}\r\n </h1>\r\n <h2 fd-tile-subtitle>\r\n {{ subtitle | bbbTranslate }}\r\n </h2>\r\n </div>\r\n }\r\n <ng-content></ng-content>\r\n @if (!contentOnly) {\r\n <ng-container [ngTemplateOutlet]=\"footerTemplate ? footerTemplate : defaultFooter\"></ng-container>\r\n }\r\n</fd-tile>\r\n}@else{\r\n<span fd-list-title> {{ title | bbbTranslate }} </span>\r\n<span fd-list-secondary> {{ subtitle | bbbTranslate }} </span>\r\n@if(icon){ <i fd-list-icon [glyph]=\"icon\"></i>} }\r\n<ng-template #defaultFooter>\r\n @if (footer) {\r\n <div\r\n fd-tile-footer\r\n bt-footer-tile\r\n [canReload]=\"canReload\"\r\n [showUpdateTime]=\"showUpdateTime\"\r\n [secondSection]=\"footer.SecondSection\"\r\n [twoColumn]=\"footer.twoColumn\"\r\n [firstSection]=\"footer.FirstSection\"\r\n (reloadClick)=\"reloadClick.emit()\"\r\n ></div>\r\n\r\n }\r\n</ng-template>\r\n<fd-menu #menu>\r\n <li fd-menu-item>\r\n <a (click)=\"menu.close(); renameClick.emit()\" fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Rename' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item>\r\n <a (click)=\"menu.close(); changeGroupClick.emit()\" fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Groups' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n</fd-menu>\r\n", styles: [":host,fd-tile{display:block}fd-tile.bt-tile--content-only{--fdTile_Background: transparent;--fdTile_Border: transparent;--fdTile_Box_Shadow: none;background:transparent!important;border:0!important;border-radius:0!important;box-shadow:none!important;max-height:none!important;min-height:0!important;min-width:0!important;overflow:visible;padding:0!important}fd-tile.bt-tile--content-only:hover,fd-tile.bt-tile--content-only:active,fd-tile.bt-tile--content-only.is-hover,fd-tile.bt-tile--content-only.is-active{--fdTile_Background: transparent;--fdTile_Border: transparent;--fdTile_Box_Shadow: none;background:transparent!important;border:0!important;box-shadow:none!important}fd-tile.bt-tile--content-only ::ng-deep .fd-tile__content{margin:0!important;max-height:none!important;min-height:0!important;padding:0!important}fd-tile.bt-tile--content-only-edit{outline:var(--sapContent_FocusWidth, .0625rem) dashed var(--sapContent_FocusColor, #0070f2);outline-offset:calc(-1 * var(--sapContent_FocusWidth, .0625rem))}\n"], dependencies: [{ kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["id"], exportAs: ["fd-button"] }, { kind: "directive", type: i7.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap", "truncate", "scope"] }, { kind: "directive", type: i7.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i7.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "glyphFont", "class", "role", "ariaHidden"] }, { kind: "component", type: i4.MenuComponent, selector: "fd-menu", inputs: ["openOnHoverTime", "ariaLabel", "ariaLabelledby", "id", "config", "mobile", "mobileConfig", "placement", "closeOnEscapeKey", "focusAutoCapture", "disabled", "disableScrollbar", "triggers", "fillControlMode", "closeOnOutsideClick", "noArrow", "focusTrapped", "additionalBodyClass", "closeOnNavigation", "restoreFocusOnClose", "appendTo", "fixedPosition", "scrollStrategy", "isOpen"], outputs: ["isOpenChange", "activePath", "beforeOpen"] }, { kind: "component", type: i4.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: i4.MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i4.MenuTitleDirective, selector: "[fd-menu-title]", inputs: ["truncate"] }, { kind: "directive", type: i4.MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "component", type: i1$1.TileComponent, selector: "fd-tile, [fd-tile]", inputs: ["size", "double", "type", "action", "clickable", "role", "ariaLabel", "ariaLabelledby", "id"], outputs: ["tileClick"] }, { kind: "directive", type: i1$1.TileHeaderDirective, selector: "[fdTileHeader], [fd-tile-header]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$1.TileFooterDirective, selector: "[fdTileFooter], [fd-tile-footer]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$1.TileTitleDirective, selector: "[fdTileTitle], [fd-tile-title]" }, { kind: "directive", type: i1$1.TileSubtitleDirective, selector: "[fdTileTitle], [fd-tile-subtitle]" }, { kind: "directive", type: i1$1.TileActionCloseDirective, selector: "[fdTileActionClose], [fd-tile-action-close]" }, { kind: "directive", type: i1$1.TileActionIndicatorDirective, selector: "[fdTileActionIndicator], [fd-tile-action-indicator]" }, { kind: "directive", type: i5.OverflowTextDirective, selector: "[overflowText]", exportAs: ["overflowText"] }, { kind: "component", type: FooterTileComponent, selector: "bt-footer-tile,div[bt-footer-tile]", inputs: ["firstSection", "secondSection", "twoColumn", "canReload", "showUpdateTime"], outputs: ["reloadClick"] }, { kind: "directive", type: TileStyleDirective, selector: "[tileStyle]", inputs: ["backColor"] }, { kind: "directive", type: TileDynamicCommandDirective, selector: "[tileDynCommand]", inputs: ["disableClick", "edit", "dynamicCommand", "title", "setToStorage", "navigateBackOnClick"] }, { kind: "pipe", type: i5.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1089
1093
|
}
|
|
1090
1094
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TileComponent, decorators: [{
|
|
1091
1095
|
type: Component,
|
|
1092
|
-
args: [{ selector: 'bt-tile', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if(!listMode) {\r\n<fd-tile\r\n [type]=\"type\"\r\n [double]=\"isDouble === true\"\r\n [action]=\"edit\"\r\n tileStyle\r\n [backColor]=\"darkMode ? '' : backColor\"\r\n [size]=\"'s'\"\r\n tileDynCommand\r\n [disableClick]=\"disableClick || (data | tileProp: 'DisableDynamicCommand')\"\r\n [edit]=\"edit\"\r\n [navigateBackOnClick]=\"navigateBackOnClick\"\r\n [title]=\"title\"\r\n [setToStorage]=\"setToStorage\"\r\n [dynamicCommand]=\"dynamicCommand\"\r\n [class.bt-tile--content-only]=\"contentOnly\"\r\n [class.bt-tile--content-only-edit]=\"contentOnly && edit\"\r\n>\r\n @if (edit && !data.Locked) {\r\n <button fd-button fd-tile-action-close fdType=\"transparent\" (click)=\"hideClick.emit()\"></button>\r\n } @if (edit && !data.Locked) {\r\n <button fd-button fd-tile-action-indicator fdType=\"transparent\" [fdMenuTrigger]=\"menu\"></button>\r\n } @if(!hideHeader && !contentOnly){\r\n <div fd-tile-header>\r\n <h1 fd-tile-title [overflowText]=\"title | bbbTranslate\">\r\n {{ title | bbbTranslate }}\r\n </h1>\r\n <h2 fd-tile-subtitle>\r\n {{ subtitle | bbbTranslate }}\r\n </h2>\r\n </div>\r\n }\r\n <ng-content></ng-content>\r\n @if (!contentOnly) {\r\n <ng-container [ngTemplateOutlet]=\"footerTemplate ? footerTemplate : defaultFooter\"></ng-container>\r\n }\r\n</fd-tile>\r\n}@else{\r\n<span fd-list-title> {{ title | bbbTranslate }} </span>\r\n<span fd-list-secondary> {{ subtitle | bbbTranslate }} </span>\r\n@if(icon){ <i fd-list-icon [glyph]=\"icon\"></i>} }\r\n<ng-template #defaultFooter>\r\n @if (footer) {\r\n <div\r\n fd-tile-footer\r\n bt-footer-tile\r\n [canReload]=\"canReload\"\r\n [showUpdateTime]=\"showUpdateTime\"\r\n [secondSection]=\"footer.SecondSection\"\r\n [twoColumn]=\"footer.twoColumn\"\r\n [firstSection]=\"footer.FirstSection\"\r\n (reloadClick)=\"reloadClick.emit()\"\r\n ></div>\r\n\r\n }\r\n</ng-template>\r\n<fd-menu #menu>\r\n <li fd-menu-item>\r\n <a (click)=\"menu.close(); renameClick.emit()\" fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Rename' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item>\r\n <a (click)=\"menu.close(); changeGroupClick.emit()\" fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Groups' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n</fd-menu>\r\n", styles: [":host,fd-tile{display:block}fd-tile.bt-tile--content-only{--fdTile_Background: transparent;--fdTile_Border: transparent;--fdTile_Box_Shadow: none;background:transparent!important;border:0!important;border-radius:0!important;box-shadow:none!important;max-height:none!important;min-height:0!important;min-width:0!important;overflow:visible;padding:0!important}fd-tile.bt-tile--content-only:hover,fd-tile.bt-tile--content-only:active,fd-tile.bt-tile--content-only.is-hover,fd-tile.bt-tile--content-only.is-active{--fdTile_Background: transparent;--fdTile_Border: transparent;--fdTile_Box_Shadow: none;background:transparent!important;border:0!important;box-shadow:none!important}fd-tile.bt-tile--content-only ::ng-deep .fd-tile__content{margin:0!important;max-height:none!important;min-height:0!important;padding:0!important}fd-tile.bt-tile--content-only-edit{outline:var(--sapContent_FocusWidth, .0625rem) dashed var(--sapContent_FocusColor, #0070f2);outline-offset:calc(-1 * var(--sapContent_FocusWidth, .0625rem))}\n"] }]
|
|
1096
|
+
args: [{ selector: 'bt-tile', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if(!listMode) {\r\n<fd-tile\r\n [type]=\"type\"\r\n [double]=\"isDouble === true\"\r\n [action]=\"edit\"\r\n tileStyle\r\n [backColor]=\"darkMode ? '' : backColor\"\r\n [size]=\"'s'\"\r\n tileDynCommand\r\n [disableClick]=\"disableClick || (data | tileProp: 'DisableDynamicCommand')\"\r\n [edit]=\"edit\"\r\n [navigateBackOnClick]=\"navigateBackOnClick\"\r\n [title]=\"title\"\r\n [setToStorage]=\"setToStorage\"\r\n [dynamicCommand]=\"dynamicCommand\"\r\n [class.bt-tile--content-only]=\"contentOnly\"\r\n [class.bt-tile--content-only-edit]=\"contentOnly && edit\"\r\n>\r\n @let badge = contentOnly ? '' : (data | tileProp: 'Badge' | bbbTranslate);\r\n @if (badge) {\r\n <div fd-badge class=\"fd-badge\" [attr.title]=\"badge\">{{ badge }}</div>\r\n }\r\n @if (edit && !data.Locked) {\r\n <button fd-button fd-tile-action-close fdType=\"transparent\" (click)=\"hideClick.emit()\"></button>\r\n } @if (edit && !data.Locked) {\r\n <button fd-button fd-tile-action-indicator fdType=\"transparent\" [fdMenuTrigger]=\"menu\"></button>\r\n } @if(!hideHeader && !contentOnly){\r\n <div fd-tile-header>\r\n <h1 fd-tile-title [overflowText]=\"title | bbbTranslate\">\r\n {{ title | bbbTranslate }}\r\n </h1>\r\n <h2 fd-tile-subtitle>\r\n {{ subtitle | bbbTranslate }}\r\n </h2>\r\n </div>\r\n }\r\n <ng-content></ng-content>\r\n @if (!contentOnly) {\r\n <ng-container [ngTemplateOutlet]=\"footerTemplate ? footerTemplate : defaultFooter\"></ng-container>\r\n }\r\n</fd-tile>\r\n}@else{\r\n<span fd-list-title> {{ title | bbbTranslate }} </span>\r\n<span fd-list-secondary> {{ subtitle | bbbTranslate }} </span>\r\n@if(icon){ <i fd-list-icon [glyph]=\"icon\"></i>} }\r\n<ng-template #defaultFooter>\r\n @if (footer) {\r\n <div\r\n fd-tile-footer\r\n bt-footer-tile\r\n [canReload]=\"canReload\"\r\n [showUpdateTime]=\"showUpdateTime\"\r\n [secondSection]=\"footer.SecondSection\"\r\n [twoColumn]=\"footer.twoColumn\"\r\n [firstSection]=\"footer.FirstSection\"\r\n (reloadClick)=\"reloadClick.emit()\"\r\n ></div>\r\n\r\n }\r\n</ng-template>\r\n<fd-menu #menu>\r\n <li fd-menu-item>\r\n <a (click)=\"menu.close(); renameClick.emit()\" fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Rename' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item>\r\n <a (click)=\"menu.close(); changeGroupClick.emit()\" fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Groups' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n</fd-menu>\r\n", styles: [":host,fd-tile{display:block}fd-tile.bt-tile--content-only{--fdTile_Background: transparent;--fdTile_Border: transparent;--fdTile_Box_Shadow: none;background:transparent!important;border:0!important;border-radius:0!important;box-shadow:none!important;max-height:none!important;min-height:0!important;min-width:0!important;overflow:visible;padding:0!important}fd-tile.bt-tile--content-only:hover,fd-tile.bt-tile--content-only:active,fd-tile.bt-tile--content-only.is-hover,fd-tile.bt-tile--content-only.is-active{--fdTile_Background: transparent;--fdTile_Border: transparent;--fdTile_Box_Shadow: none;background:transparent!important;border:0!important;box-shadow:none!important}fd-tile.bt-tile--content-only ::ng-deep .fd-tile__content{margin:0!important;max-height:none!important;min-height:0!important;padding:0!important}fd-tile.bt-tile--content-only-edit{outline:var(--sapContent_FocusWidth, .0625rem) dashed var(--sapContent_FocusColor, #0070f2);outline-offset:calc(-1 * var(--sapContent_FocusWidth, .0625rem))}\n"] }]
|
|
1093
1097
|
}], propDecorators: { type: [{
|
|
1094
1098
|
type: Input
|
|
1095
1099
|
}], footerTemplate: [{
|
|
@@ -3427,6 +3431,58 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3427
3431
|
args: [{ selector: 'bt-profile-tile', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [backColor]=\"backColor\"\r\n [darkMode]=\"(isDark$ | async) === true\"\r\n [setToStorage]=\"setToStorage\"\r\n [listMode]=\"listMode\"\r\n [deviceSize]=\"deviceSize\"\r\n [navigateBackOnClick]=\"navigateBackOnClick\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (changeGroupClick)=\"changeGroupClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n (reloadClick)=\"reload()\"\r\n>\r\n <div fd-tile-content>\r\n @if (fileId2 || calcImage) {\r\n <span\r\n class=\"profile\"\r\n fd-tile-profile-img\r\n [backgroundImage]=\"calcImage || (fileId2 | picFieldSrc: 'GetPictureFromFileInfo':null)\"\r\n ></span>\r\n } @else if(icon){\r\n <fd-icon [font]=\"icon | sapFont\" fd-tile-profile-img style=\"font-size: 2rem\" [glyph]=\"icon\"></fd-icon>\r\n } @else {\r\n <fd-icon font=\"SAP-icons-TNT\" fd-tile-profile-img style=\"font-size: 2rem\" glyph=\"user\"></fd-icon>\r\n }\r\n </div>\r\n</bt-tile>\r\n", styles: [".profile{background-size:contain;background-repeat:no-repeat}\n"] }]
|
|
3428
3432
|
}] });
|
|
3429
3433
|
|
|
3434
|
+
/**
|
|
3435
|
+
* محاسبهی سرریز «priority+» دستورات شلبار (BTILES-006).
|
|
3436
|
+
* عمداً در `public-api.ts` export نمیشود؛ فقط `BarsaShellbarComponent` از آن استفاده میکند.
|
|
3437
|
+
*/
|
|
3438
|
+
/** فاصلهی مجاز زیرپیکسلی به نفع «جا میشود» (گرد شدن عرضها در مرورگر). */
|
|
3439
|
+
const SHELLBAR_OVERFLOW_TOLERANCE = 1;
|
|
3440
|
+
/** عدد نامعتبر (منفی، NaN، Infinity، undefined) مثل صفر رفتار میکند تا هیچ استثنایی پرتاب نشود. */
|
|
3441
|
+
function toSafeSize(value) {
|
|
3442
|
+
return Number.isFinite(value) && value > 0 ? value : 0;
|
|
3443
|
+
}
|
|
3444
|
+
/**
|
|
3445
|
+
* تعداد ورودیهایی که (از ابتدای فهرست) در نوار جا میشوند؛ بقیه به منوی ⋯ میروند.
|
|
3446
|
+
*
|
|
3447
|
+
* - اگر همه با فاصلههایشان جا شوند ⇒ `widths.length` (منوی ⋯ لازم نیست).
|
|
3448
|
+
* - وگرنه بزرگترین `k` در `[0, n-1]` که `sum(widths[0..k)) + gap*k + overflowButtonWidth` جا شود؛ اگر هیچکدام ⇒ `0`.
|
|
3449
|
+
*
|
|
3450
|
+
* تابع خالص است (بدون DOM/state/hysteresis): خروجی فقط به ورودیهای فعلی وابسته است، نه به مسیر تغییر عرض.
|
|
3451
|
+
*
|
|
3452
|
+
* @param widths عرض هر ورودی به ترتیب نمایش
|
|
3453
|
+
* @param available عرض در اختیار دستورات
|
|
3454
|
+
* @param overflowButtonWidth عرض دکمهی ⋯
|
|
3455
|
+
* @param gap فاصلهی بین دو قلم مجاور در نوار
|
|
3456
|
+
*/
|
|
3457
|
+
function computeVisibleCommandCount(widths, available, overflowButtonWidth, gap) {
|
|
3458
|
+
const count = widths?.length ?? 0;
|
|
3459
|
+
if (count === 0) {
|
|
3460
|
+
return 0;
|
|
3461
|
+
}
|
|
3462
|
+
const space = toSafeSize(available) + SHELLBAR_OVERFLOW_TOLERANCE;
|
|
3463
|
+
const safeGap = toSafeSize(gap);
|
|
3464
|
+
const buttonWidth = toSafeSize(overflowButtonWidth);
|
|
3465
|
+
let total = 0;
|
|
3466
|
+
for (let i = 0; i < count; i++) {
|
|
3467
|
+
total += toSafeSize(widths[i]) + (i > 0 ? safeGap : 0);
|
|
3468
|
+
}
|
|
3469
|
+
if (total <= space) {
|
|
3470
|
+
return count;
|
|
3471
|
+
}
|
|
3472
|
+
// k ورودی + دکمهی ⋯ یعنی k+1 قلم و k فاصله.
|
|
3473
|
+
let used = 0;
|
|
3474
|
+
let visible = 0;
|
|
3475
|
+
for (let k = 0; k < count - 1; k++) {
|
|
3476
|
+
const next = used + toSafeSize(widths[k]) + safeGap;
|
|
3477
|
+
if (next + buttonWidth > space) {
|
|
3478
|
+
break;
|
|
3479
|
+
}
|
|
3480
|
+
used = next;
|
|
3481
|
+
visible = k + 1;
|
|
3482
|
+
}
|
|
3483
|
+
return visible;
|
|
3484
|
+
}
|
|
3485
|
+
|
|
3430
3486
|
class NotificationGroupComponent extends BaseComponent {
|
|
3431
3487
|
constructor() {
|
|
3432
3488
|
super();
|
|
@@ -3606,34 +3662,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3606
3662
|
}] });
|
|
3607
3663
|
|
|
3608
3664
|
class BarsaShellbarComponent extends BaseComponent {
|
|
3609
|
-
/**
|
|
3665
|
+
/**
|
|
3666
|
+
* فقط روی موبایل (`'s'`) همهی دستورات بهجای نمایش مستقیم داخل منوی overflow (⋯) قرار میگیرند.
|
|
3667
|
+
* در بقیهی اندازهها سرریز priority+ است: فقط دستوراتی که جا نمیشوند به ⋯ میروند (BTILES-006).
|
|
3668
|
+
*/
|
|
3610
3669
|
get isCompactShellbar() {
|
|
3670
|
+
return this.deviceSize === 's';
|
|
3671
|
+
}
|
|
3672
|
+
/** ظاهر منوی ⋯ در جایی که قبلاً هم ⋯ داشت (`'s'` و `'m'`) عوض نمیشود؛ در `'l'`/`'xl'` popover عادی است. */
|
|
3673
|
+
get isOverflowMenuMobile() {
|
|
3611
3674
|
return this.deviceSize === 's' || this.deviceSize === 'm';
|
|
3612
3675
|
}
|
|
3613
3676
|
/**
|
|
3614
|
-
*
|
|
3615
|
-
*
|
|
3677
|
+
* همهی دستورات (global + workflow + grouped) به شکل یک درختِ واحد، به همان ترتیب نوار.
|
|
3678
|
+
* منوی ⋯ زیرمجموعهی انتهایی همین فهرست را نشان میدهد (`hiddenCommandNodes`).
|
|
3616
3679
|
*/
|
|
3617
3680
|
get mobileCommandNodes() {
|
|
3618
|
-
|
|
3619
|
-
if (this.workflowMenuItems?.length) {
|
|
3620
|
-
nodes.push({
|
|
3621
|
-
key: '__workflow__',
|
|
3622
|
-
label: 'Workflow',
|
|
3623
|
-
children: this.workflowMenuItems.map((w) => ({
|
|
3624
|
-
key: w.key,
|
|
3625
|
-
label: w.label,
|
|
3626
|
-
callback: w.callback,
|
|
3627
|
-
children: []
|
|
3628
|
-
}))
|
|
3629
|
-
});
|
|
3630
|
-
}
|
|
3631
|
-
for (const group of this.groupedCommandMenus ?? []) {
|
|
3632
|
-
if (group.Commands?.length) {
|
|
3633
|
-
nodes.push({ key: group.Caption, label: group.Caption, children: group.Commands });
|
|
3634
|
-
}
|
|
3635
|
-
}
|
|
3636
|
-
return nodes;
|
|
3681
|
+
return this.commandEntries().map((entry) => entry.action);
|
|
3637
3682
|
}
|
|
3638
3683
|
constructor() {
|
|
3639
3684
|
super();
|
|
@@ -3663,6 +3708,24 @@ class BarsaShellbarComponent extends BaseComponent {
|
|
|
3663
3708
|
this.appVersion = inject(APP_VERSION);
|
|
3664
3709
|
/** روی موبایل اگه شلبار جا کم بیاره، تایتلِ برندینگ حذف میشه تا لوگو/آواتار از صفحه نزنن بیرون. */
|
|
3665
3710
|
this.brandingTitleHidden = false;
|
|
3711
|
+
/** فهرست واحد دستورات نوار (سراسری، workflow، گروهی)؛ در `ngOnChanges` از روی inputها ساخته میشود. */
|
|
3712
|
+
this.commandEntries = signal([], /* @ts-ignore */
|
|
3713
|
+
...(ngDevMode ? [{ debugName: "commandEntries" }] : /* istanbul ignore next */ []));
|
|
3714
|
+
/**
|
|
3715
|
+
* تعداد ورودیهایی که در نوار میمانند (priority+، BTILES-006). روی موبایل همه به ⋯ میروند؛
|
|
3716
|
+
* در بقیهی اندازهها از اندازهگیری عرض میآید (تا قبل از اولین اندازهگیری، همه نمایاناند).
|
|
3717
|
+
*/
|
|
3718
|
+
this.visibleCommandCount = computed(() => this._allCommandsInOverflow() ? 0 : Math.min(this._measuredVisibleCount(), this.commandEntries().length), /* @ts-ignore */
|
|
3719
|
+
...(ngDevMode ? [{ debugName: "visibleCommandCount" }] : /* istanbul ignore next */ []));
|
|
3720
|
+
/** ورودیهای نمایان در نوار: `slice(0, visibleCount)`. */
|
|
3721
|
+
this.visibleCommandEntries = computed(() => this.commandEntries().slice(0, this.visibleCommandCount()), /* @ts-ignore */
|
|
3722
|
+
...(ngDevMode ? [{ debugName: "visibleCommandEntries" }] : /* istanbul ignore next */ []));
|
|
3723
|
+
/** ورودیهای داخل منوی ⋯: `slice(visibleCount)`؛ هر ورودی یا اینجاست یا در نوار (AC-3). */
|
|
3724
|
+
this.hiddenCommandEntries = computed(() => this.commandEntries().slice(this.visibleCommandCount()), /* @ts-ignore */
|
|
3725
|
+
...(ngDevMode ? [{ debugName: "hiddenCommandEntries" }] : /* istanbul ignore next */ []));
|
|
3726
|
+
/** گرههای منوی ⋯ (همان نگاشت `mobileCommandNodes`، فقط برای ورودیهای پنهان). */
|
|
3727
|
+
this.hiddenCommandNodes = computed(() => this.hiddenCommandEntries().map((entry) => entry.action), /* @ts-ignore */
|
|
3728
|
+
...(ngDevMode ? [{ debugName: "hiddenCommandNodes" }] : /* istanbul ignore next */ []));
|
|
3666
3729
|
this._bbbTranslate = inject(BbbTranslatePipe);
|
|
3667
3730
|
this._portalService = inject(PortalService);
|
|
3668
3731
|
this._favoriteItems = inject(FavoriteItemsService);
|
|
@@ -3671,6 +3734,12 @@ class BarsaShellbarComponent extends BaseComponent {
|
|
|
3671
3734
|
this._cdr = inject(ChangeDetectorRef);
|
|
3672
3735
|
this._router = inject(Router);
|
|
3673
3736
|
this._titleWidth = 0;
|
|
3737
|
+
this._commandMeasureFrame = null;
|
|
3738
|
+
/** نتیجهی آخرین اندازهگیری؛ مقدار اولیه یعنی «همه نمایان» (fallback وقتی ResizeObserver نیست). */
|
|
3739
|
+
this._measuredVisibleCount = signal(Number.MAX_SAFE_INTEGER, /* @ts-ignore */
|
|
3740
|
+
...(ngDevMode ? [{ debugName: "_measuredVisibleCount" }] : /* istanbul ignore next */ []));
|
|
3741
|
+
this._allCommandsInOverflow = signal(false, /* @ts-ignore */
|
|
3742
|
+
...(ngDevMode ? [{ debugName: "_allCommandsInOverflow" }] : /* istanbul ignore next */ []));
|
|
3674
3743
|
this.onBellNotification = () => {
|
|
3675
3744
|
this._document?.body && this._document.body.click();
|
|
3676
3745
|
this._dialogService
|
|
@@ -3722,13 +3791,32 @@ class BarsaShellbarComponent extends BaseComponent {
|
|
|
3722
3791
|
}
|
|
3723
3792
|
ngOnChanges(changes) {
|
|
3724
3793
|
super.ngOnChanges(changes);
|
|
3725
|
-
const { enableSearch } = changes;
|
|
3794
|
+
const { enableSearch, dastoratSarasari, workflowMenuItems, groupedCommandMenus, deviceSize } = changes;
|
|
3726
3795
|
if (enableSearch) {
|
|
3727
3796
|
this.inputEnableSearch.set(enableSearch.currentValue);
|
|
3728
3797
|
}
|
|
3798
|
+
if (dastoratSarasari || workflowMenuItems || groupedCommandMenus) {
|
|
3799
|
+
this.commandEntries.set(this._buildCommandEntries());
|
|
3800
|
+
}
|
|
3801
|
+
if (deviceSize) {
|
|
3802
|
+
this._allCommandsInOverflow.set(this.isCompactShellbar);
|
|
3803
|
+
}
|
|
3804
|
+
if (dastoratSarasari || workflowMenuItems || groupedCommandMenus || deviceSize) {
|
|
3805
|
+
// بعد از رندر ورودیهای تازه دوباره اندازه بگیر.
|
|
3806
|
+
this._scheduleCommandMeasure();
|
|
3807
|
+
}
|
|
3808
|
+
}
|
|
3809
|
+
ngAfterViewInit() {
|
|
3810
|
+
super.ngAfterViewInit();
|
|
3811
|
+
this._initCommandOverflowWatch();
|
|
3729
3812
|
}
|
|
3730
3813
|
ngOnDestroy() {
|
|
3731
3814
|
this._brandingResizeObserver?.disconnect();
|
|
3815
|
+
this._commandsResizeObserver?.disconnect();
|
|
3816
|
+
if (this._commandMeasureFrame !== null) {
|
|
3817
|
+
cancelAnimationFrame(this._commandMeasureFrame);
|
|
3818
|
+
this._commandMeasureFrame = null;
|
|
3819
|
+
}
|
|
3732
3820
|
super.ngOnDestroy();
|
|
3733
3821
|
}
|
|
3734
3822
|
onSearchSubmit(e) {
|
|
@@ -3856,6 +3944,91 @@ class BarsaShellbarComponent extends BaseComponent {
|
|
|
3856
3944
|
this._brandingResizeObserver.observe(host);
|
|
3857
3945
|
requestAnimationFrame(measure);
|
|
3858
3946
|
}
|
|
3947
|
+
/**
|
|
3948
|
+
* سرریز priority+ دستورات (BTILES-006): عرض ظرف دستورات و عرض لایهی اندازهگیری را با ResizeObserver
|
|
3949
|
+
* میپاید. لایهی اندازهگیری هم پاییده میشود تا تغییر برچسبها (زبان، فونت) هم بازمحاسبه شود.
|
|
3950
|
+
* اگر ResizeObserver نبود، همهی دستورات نمایان میمانند (رفتار قبلی عرض کامل).
|
|
3951
|
+
*/
|
|
3952
|
+
_initCommandOverflowWatch() {
|
|
3953
|
+
if (typeof ResizeObserver === 'undefined') {
|
|
3954
|
+
return;
|
|
3955
|
+
}
|
|
3956
|
+
const host = this.commandsHost?.nativeElement;
|
|
3957
|
+
const layer = this.commandsMeasure?.nativeElement;
|
|
3958
|
+
if (!host || !layer) {
|
|
3959
|
+
return;
|
|
3960
|
+
}
|
|
3961
|
+
this._commandsResizeObserver = new ResizeObserver(() => this._scheduleCommandMeasure());
|
|
3962
|
+
this._commandsResizeObserver.observe(host);
|
|
3963
|
+
this._commandsResizeObserver.observe(layer);
|
|
3964
|
+
this._scheduleCommandMeasure();
|
|
3965
|
+
}
|
|
3966
|
+
/** اندازهگیری را به فریم بعد (بعد از رندر) میبرد و چند درخواست همفریم را یکی میکند. */
|
|
3967
|
+
_scheduleCommandMeasure() {
|
|
3968
|
+
if (typeof requestAnimationFrame === 'undefined' || this._commandMeasureFrame !== null) {
|
|
3969
|
+
return;
|
|
3970
|
+
}
|
|
3971
|
+
this._commandMeasureFrame = requestAnimationFrame(() => {
|
|
3972
|
+
this._commandMeasureFrame = null;
|
|
3973
|
+
this._measureCommands();
|
|
3974
|
+
});
|
|
3975
|
+
}
|
|
3976
|
+
/**
|
|
3977
|
+
* عرض هر ورودی و دکمهی ⋯ را از لایهی اندازهگیری میخواند و `visibleCount` را با تابع خالص حساب میکند.
|
|
3978
|
+
* عرض ظرف (`flex: 1 1 0`، `min-width: 0`) به تعداد دستورات نمایان وابسته نیست، پس حلقهی بازخورد نداریم —
|
|
3979
|
+
* به شرط override ِ کانتکستاریا در scss (10061): fundamental-ngx آن را `flex: none` میکند و بدون override،
|
|
3980
|
+
* `host.clientWidth` همان عرض دستورات نمایان میشد و شمارش فقط کم میشد، هیچوقت زیاد.
|
|
3981
|
+
*/
|
|
3982
|
+
_measureCommands() {
|
|
3983
|
+
const host = this.commandsHost?.nativeElement;
|
|
3984
|
+
const layer = this.commandsMeasure?.nativeElement;
|
|
3985
|
+
if (!this._commandsResizeObserver || !host || !layer) {
|
|
3986
|
+
return;
|
|
3987
|
+
}
|
|
3988
|
+
const entryEls = Array.from(layer.querySelectorAll(':scope > .bt-shellbar-command-entry:not(.bt-shellbar-command-entry--overflow)'));
|
|
3989
|
+
const overflowEl = layer.querySelector(':scope > .bt-shellbar-command-entry--overflow');
|
|
3990
|
+
const view = this._document.defaultView;
|
|
3991
|
+
const gap = view ? parseFloat(view.getComputedStyle(host).columnGap) || 0 : 0;
|
|
3992
|
+
const count = computeVisibleCommandCount(entryEls.map((el) => el.getBoundingClientRect().width), host.clientWidth, overflowEl?.getBoundingClientRect().width ?? 0, gap);
|
|
3993
|
+
// signal فقط با مقدار متفاوت view ِ OnPush را تازه میکند.
|
|
3994
|
+
this._measuredVisibleCount.set(count);
|
|
3995
|
+
}
|
|
3996
|
+
/** فهرست واحد دستورات به ترتیب نوار؛ نگاشت هر ورودی به گرهی منوی ⋯ فقط همینجاست. */
|
|
3997
|
+
_buildCommandEntries() {
|
|
3998
|
+
const entries = (this.dastoratSarasari ?? []).map((command) => ({
|
|
3999
|
+
id: `global:${command.key ?? command.label}`,
|
|
4000
|
+
kind: 'global',
|
|
4001
|
+
command,
|
|
4002
|
+
action: command
|
|
4003
|
+
}));
|
|
4004
|
+
if (this.workflowMenuItems?.length) {
|
|
4005
|
+
entries.push({
|
|
4006
|
+
id: 'workflow',
|
|
4007
|
+
kind: 'workflow',
|
|
4008
|
+
action: {
|
|
4009
|
+
key: '__workflow__',
|
|
4010
|
+
label: 'Workflow',
|
|
4011
|
+
children: this.workflowMenuItems.map((w) => ({
|
|
4012
|
+
key: w.key,
|
|
4013
|
+
label: w.label,
|
|
4014
|
+
callback: w.callback,
|
|
4015
|
+
children: []
|
|
4016
|
+
}))
|
|
4017
|
+
}
|
|
4018
|
+
});
|
|
4019
|
+
}
|
|
4020
|
+
for (const group of this.groupedCommandMenus ?? []) {
|
|
4021
|
+
if (group.Commands?.length) {
|
|
4022
|
+
entries.push({
|
|
4023
|
+
id: `group:${group.Caption}`,
|
|
4024
|
+
kind: 'group',
|
|
4025
|
+
group,
|
|
4026
|
+
action: { key: group.Caption, label: group.Caption, children: group.Commands }
|
|
4027
|
+
});
|
|
4028
|
+
}
|
|
4029
|
+
}
|
|
4030
|
+
return entries;
|
|
4031
|
+
}
|
|
3859
4032
|
_closeSideMenu() {
|
|
3860
4033
|
if (!this.isOpenQuickAccess) {
|
|
3861
4034
|
return;
|
|
@@ -3867,11 +4040,11 @@ class BarsaShellbarComponent extends BaseComponent {
|
|
|
3867
4040
|
this.cultureChanged.emit(culture);
|
|
3868
4041
|
}
|
|
3869
4042
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: BarsaShellbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3870
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: BarsaShellbarComponent, isStandalone: false, selector: "bt-barsa-shellbar", inputs: { showSidebar: "showSidebar", multiLanguages: "multiLanguages", userLoggedIn: "userLoggedIn", settings: "settings", productMenuControl: "productMenuControl", dastoratSarasari: "dastoratSarasari", workflowMenuItems: "workflowMenuItems", groupedCommandMenus: "groupedCommandMenus", deviceSize: "deviceSize", cultures: "cultures", shellbarData: "shellbarData", notificationsUnreadCount: "notificationsUnreadCount", productMenuItems1: "productMenuItems1", bodyClick: "bodyClick", logo: "logo", actions: "actions", userMenu: "userMenu", footerButtons: "footerButtons", productSwitcher: "productSwitcher", subtitle: "subtitle", isMobile: "isMobile", hideShellbarActions: "hideShellbarActions", flatButtons: "flatButtons", isTablet: "isTablet", userInfo: "userInfo", isDesktop: "isDesktop", informativeText: "informativeText", informativeStatus: "informativeStatus", hideProductMenu: "hideProductMenu", enableSearch: "enableSearch", hideNotifications: "hideNotifications", isServiceDesk: "isServiceDesk", isOpenQuickAccess: "isOpenQuickAccess", sideMenuTemplate: "sideMenuTemplate", notificationReport: "notificationReport", profileDynamicCommand: "profileDynamicCommand", profileDynamicCommandText: "profileDynamicCommandText", profileDynamicCommandIcon: "profileDynamicCommandIcon", displayName: "displayName", hideBranding: "hideBranding", showSearchInSystem: "showSearchInSystem", rtl: "rtl", suggestions: "suggestions", date: "date" }, outputs: { appTileGroupChange: "appTileGroupChange", searchItemClick: "searchItemClick", searchInput: "searchInput", isOpenQuickAccessChanged: "isOpenQuickAccessChanged", openNotificationPanel: "openNotificationPanel", openQuickAccessPanel: "openQuickAccessPanel", cultureChanged: "cultureChanged", notifiationActionClick: "notifiationActionClick" }, viewQueries: [{ propertyName: "searchDialogContent", first: true, predicate: ["searchContent"], descendants: true, read: TemplateRef }, { propertyName: "searchDialogSubHeader", first: true, predicate: ["searchSubHeader"], descendants: true, read: TemplateRef }, { propertyName: "shellbar", first: true, predicate: ShellbarComponent$1, descendants: true, static: true }, { propertyName: "comboboxComponent", first: true, predicate: ComboboxComponent, descendants: true }, { propertyName: "popoverComponent", first: true, predicate: ["popoverComponent"], descendants: true }, { propertyName: "_notificationsDialog", first: true, predicate: ["notificationsDialog"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<fd-shellbar\r\n [ngClass]=\"deviceSize\"\r\n routeFormChange\r\n (stateChanged)=\"onRouteFormStateChange()\"\r\n [showNavigationButton]=\"sideMenuTemplate || showSidebar ? true : false\"\r\n (navigationButtonClicked)=\"$event.stopPropagation(); isOpenQuickAccessChanged.emit(!isOpenQuickAccess)\"\r\n [handleBodyClick]=\"true\"\r\n [size]=\"deviceSize === 's' && userLoggedIn ? 'm' : deviceSize\"\r\n>\r\n @if(!hideBranding){\r\n <fd-shellbar-branding [interactiveBranding]=\"true\">\r\n <fd-shellbar-logo>\r\n <a\r\n [style.backgroundImage]=\"\r\n 'url(' + (logo?.FileId | picFieldSrc: 'GetPictureFromFileInfo':null) + ')'\r\n \"\r\n href=\"/\"\r\n class=\"fd-shellbar__logo fd-shellbar__logo--image-replaced tw-bg-center !tw-bg-auto\"\r\n [attr.aria-label]=\"subtitle | bbbTranslate\"\r\n ></a>\r\n </fd-shellbar-logo>\r\n @if(!brandingTitleHidden){\r\n <fd-shellbar-title> {{ subtitle | bbbTranslate }} {{ showVersion ? appVersion : '' }}</fd-shellbar-title>\r\n }\r\n </fd-shellbar-branding>\r\n }\r\n <fd-shellbar-context-area>\r\n <span\r\n [class.hide]=\"!informativeText\"\r\n fdShellbarHidePriority=\"1\"\r\n fd-object-status\r\n [status]=\"informativeStatus || 'informative'\"\r\n [inverted]=\"true\"\r\n [label]=\"informativeText\"\r\n ></span>\r\n <fd-product-switch\r\n fdShellbarHidePriority=\"3\"\r\n [class.hide]=\"!productSwitcher?.length || deviceSize === 's'\"\r\n [restoreFocusOnClose]=\"false\"\r\n >\r\n <fd-product-switch-body [products]=\"productSwitcher\" [forceListMode]=\"deviceSize === 's'\">\r\n </fd-product-switch-body>\r\n </fd-product-switch>\r\n <span\r\n [class.hide]=\"!showSearchInSystem\"\r\n fdShellbarHidePriority=\"4\"\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"search\"\r\n fdType=\"transparent\"\r\n (click)=\"onOpenSearchDialog()\"\r\n >\r\n </span>\r\n <fd-product-menu\r\n fdShellbarHidePriority=\"2\"\r\n [control]=\"productMenuControl\"\r\n [closePopoverOnSelect]=\"true\"\r\n [items]=\"productMenuItems1\"\r\n [class.hide]=\"!productMenuItems1?.length\"\r\n >\r\n </fd-product-menu>\r\n <fd-shellbar-separator fdshellbarhidepriority=\"5\" style=\"flex-shrink: 0\"></fd-shellbar-separator>\r\n @if(!isCompactShellbar){ @for(dastor of dastoratSarasari; track dastor.label){ @if(dastor.children?.length){\r\n <button\r\n type=\"button\"\r\n class=\"fd-shellbar__button\"\r\n [fdShellbarHidePriority]=\"dastor.priority\"\r\n fd-button\r\n fdType=\"transparent\"\r\n [glyph]=\"dastor.glyph\"\r\n [label]=\"dastor.label | bbbTranslate\"\r\n [fdMenuTrigger]=\"globalCommandMenu\"\r\n ></button>\r\n <fd-menu #globalCommandMenu>\r\n @for(item of dastor.children; track item.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n globalSubmenuTemplate;\r\n context: { item: item, parentSubmenu: undefined, rootMenu: globalCommandMenu }\r\n \"\r\n ></ng-container>\r\n }\r\n <ng-template\r\n #globalSubmenuTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n globalSubmenuTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n } @else {\r\n <span\r\n [fdShellbarHidePriority]=\"dastor.priority\"\r\n fd-button\r\n [glyph]=\"dastor.glyph\"\r\n class=\"fd-shellbar__button\"\r\n [label]=\"dastor.useImageGlyph ? undefined : (dastor.label | bbbTranslate)\"\r\n [class.shellbar-command-action--image-glyph]=\"dastor.useImageGlyph\"\r\n (click)=\"dastor.callback?.()\"\r\n >\r\n @if(dastor.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"dastor.glyph\"\r\n [alt]=\"dastor.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n <span class=\"shellbar-command-action__label\">{{ dastor.label | bbbTranslate }}</span>\r\n }\r\n </span>\r\n } } @if(workflowMenuItems.length){\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n [label]=\"'Workflow' | bbbTranslate\"\r\n [fdMenu]=\"true\"\r\n [fdMenuTrigger]=\"workflowMenu\"\r\n ></button>\r\n <fd-menu #workflowMenu>\r\n @for(item of workflowMenuItems; track item.key) {\r\n <li fd-menu-item>\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n (click)=\"$event.preventDefault(); workflowMenu.close(); item.callback?.()\"\r\n >\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n }\r\n </fd-menu>\r\n } @for(group of groupedCommandMenus; track group.Caption){\r\n <button fd-button [label]=\"group.Caption | bbbTranslate\" [fdMenu]=\"true\" [fdMenuTrigger]=\"groupMenu\"></button>\r\n <fd-menu #groupMenu>\r\n @for(item of group.Commands; track item.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n groupSubmenuTemplate;\r\n context: { item: item, parentSubmenu: undefined, rootMenu: groupMenu }\r\n \"\r\n ></ng-container>\r\n }\r\n <ng-template\r\n #groupSubmenuTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n class=\"tw-gap-2\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n groupSubmenuTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n } } @if(isCompactShellbar && mobileCommandNodes.length){\r\n <button\r\n type=\"button\"\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"overflow\"\r\n [attr.aria-label]=\"'Commands' | bbbTranslate\"\r\n [title]=\"'Commands' | bbbTranslate\"\r\n [fdMenuTrigger]=\"mobileCommandsMenu\"\r\n ></button>\r\n <fd-menu #mobileCommandsMenu [mobile]=\"true\">\r\n @for(node of mobileCommandNodes; track node.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n mobileCommandTemplate;\r\n context: { item: node, parentSubmenu: undefined, rootMenu: mobileCommandsMenu }\r\n \"\r\n ></ng-container>\r\n }\r\n <ng-template\r\n #mobileCommandTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n mobileCommandTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n }\r\n </fd-shellbar-context-area>\r\n\r\n @if(inputEnableSearch()){\r\n <fdp-search-field\r\n [placeholder]=\"'Search' | bbbTranslate\"\r\n (inputChange)=\"onSearchInputChange($event)\"\r\n [suggestions]=\"suggestions\"\r\n (searchSubmit)=\"onSearchSubmit($event)\"\r\n ></fdp-search-field>\r\n }\r\n <fd-shellbar-actions\r\n #shellbarActions\r\n (searchOpen)=\"onSearchOpen($event)\"\r\n [class.flat-buttons]=\"flatButtons?.length && !showSearch()\"\r\n >\r\n @if(deviceSize !== 's' && userLoggedIn && date){\r\n <span class=\"bt-shellbar-date\" [title]=\"date.full\">\r\n <fd-icon class=\"bt-shellbar-date__icon\" glyph=\"calendar\" [attr.aria-hidden]=\"true\"></fd-icon>\r\n <span class=\"bt-shellbar-date__text\">{{ date.compact }}</span>\r\n </span>\r\n }\r\n <fd-user-menu>\r\n <fd-user-menu-control>\r\n <fd-avatar\r\n size=\"xs\"\r\n [circle]=\"true\"\r\n [attr.ariaLabel]=\"displayName\"\r\n [image]=\"userInfo?.Url\"\r\n ></fd-avatar>\r\n </fd-user-menu-control>\r\n <fd-user-menu-body>\r\n <div fd-user-menu-header>\r\n <fd-avatar\r\n [circle]=\"true\"\r\n [size]=\"deviceSize\"\r\n [label]=\"userInfo?.Url ? '' : displayName\"\r\n zoomGlyph=\"\"\r\n title=\"Edit avatar\"\r\n [image]=\"userInfo?.Url\"\r\n ></fd-avatar>\r\n <div fd-user-menu-header-container>\r\n <div fd-user-menu-user-name>{{ displayName }}</div>\r\n @for(item of userInfo?.Sublines;track item){\r\n <div fd-user-menu-subline>{{ item }}</div>\r\n }\r\n </div>\r\n @if(profileDynamicCommandText){\r\n <button\r\n fd-button\r\n [label]=\"profileDynamicCommandText || 'Edit' | bbbTranslate\"\r\n [glyph]=\"profileDynamicCommandIcon || 'edit'\"\r\n [attr.ariaLabel]=\"'\u0648\u06CC\u0631\u0627\u06CC\u0634 \u067E\u0631\u0648\u0641\u0627\u06CC\u0644'\"\r\n [dynCommand]=\"profileDynamicCommand\"\r\n bodyClick\r\n ></button>\r\n }\r\n </div>\r\n <div fd-user-menu-content-container>\r\n @if(userMenu?.length){\r\n <fd-panel transparent noRadius [fixed]=\"true\" class=\"hide-panel-header\"> </fd-panel>}\r\n\r\n <fd-user-menu-list>\r\n @for(item of userMenu;track item.text){\r\n <li fd-user-menu-list-item [icon]=\"item.icon\" [text]=\"item.text\" (click)=\"item.callback()\"></li>\r\n }\r\n </fd-user-menu-list>\r\n </div>\r\n </fd-user-menu-body>\r\n\r\n <fd-user-menu-footer>\r\n <div fd-bar barDesign=\"footer\">\r\n <div fd-bar-right>\r\n @for(item of footerButtons;track item.text){\r\n <button\r\n fd-button\r\n [label]=\"item.text\"\r\n fdType=\"transparent\"\r\n [glyph]=\"item.icon\"\r\n [attr.ariaLabel]=\"item.text\"\r\n (click)=\"item.callback()\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n </fd-user-menu-footer>\r\n </fd-user-menu>\r\n @for (action of actions; track action.label) {\r\n <fd-shellbar-action\r\n [glyph]=\"action.glyph\"\r\n [callback]=\"action.callback\"\r\n [label]=\"action.label\"\r\n [notificationLabel]=\"action.notificationLabel\"\r\n [notificationCount]=\"action.notificationCount\"\r\n >\r\n </fd-shellbar-action>\r\n\r\n } @if (!settings?.HideLanguage && multiLanguages && userLoggedIn) {\r\n <button\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"world\"\r\n fdType=\"transparent\"\r\n [fdMenuTrigger]=\"menu\"\r\n ></button>\r\n } @if (deviceSize !== 's' && userLoggedIn && !hideNotifications) {\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notification'\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notification Label'\"\r\n [callback]=\"onOpenNotification\"\r\n >\r\n </fd-shellbar-action>\r\n } @if (deviceSize === 's' && userLoggedIn && !hideNotifications) {\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notifications' | bbbTranslate\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notifications' | bbbTranslate\"\r\n [callback]=\"onBellNotification\"\r\n >\r\n </fd-shellbar-action>\r\n } @if(flatButtons?.length){\r\n <div class=\"tw-flex tw-gap-1\">\r\n @if (!settings?.HideLanguage && multiLanguages){\r\n <button\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"world\"\r\n fdType=\"transparent\"\r\n [fdMenuTrigger]=\"menu\"\r\n ></button>\r\n } @for(btn of flatButtons;track btn.label){\r\n <button\r\n fd-button\r\n [label]=\"btn.text\"\r\n [glyph]=\"btn.text === ('Login' | bbbTranslate) ? 'person-placeholder' : null\"\r\n fdType=\"emphasized\"\r\n (click)=\"btn.callback()\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n </fd-shellbar-actions>\r\n <fd-popover\r\n [(isOpen)]=\"isOpenNotificatoin\"\r\n [noArrow]=\"true\"\r\n placement=\"top-end\"\r\n title=\"Notification Popover\"\r\n [appendTo]=\"el\"\r\n [mobile]=\"false\"\r\n #popoverComponent\r\n >\r\n <fd-popover-control>\r\n <!-- <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notification'\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notification Label'\"\r\n [callback]=\"onOpenNotification\"\r\n >\r\n </fd-shellbar-action> -->\r\n </fd-popover-control>\r\n <fd-popover-body style=\"min-width: 320px; overflow-x: auto; box-shadow: var(--sapContent_Shadow0)\">\r\n @if(isOpenNotificatoin){\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationsUnreadCount }\"\r\n ></ng-container>\r\n }\r\n </fd-popover-body>\r\n </fd-popover>\r\n</fd-shellbar>\r\n\r\n<ng-template #loading>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n\r\n<div\r\n *ngIf=\"sideMenuTemplate\"\r\n class=\"sidemenu-h tw-fixed tw-transition-all tw-z-[100] tw-shadow-2xl tw-overflow-auto\"\r\n [class.tw-w-screen]=\"isMobile\"\r\n [class.-tw-right-full]=\"isMobile\"\r\n [class.tw-w-96]=\"!isMobile\"\r\n [class.-tw-right-96]=\"!isMobile && rtl\"\r\n [class.!tw-right-0]=\"rtl && isOpenQuickAccess\"\r\n [class.-tw-left-96]=\"!isMobile && !rtl\"\r\n [class.!tw-left-0]=\"!rtl && isOpenQuickAccess\"\r\n (click)=\"$event.stopPropagation()\"\r\n>\r\n <ng-container *ngTemplateOutlet=\"sideMenuTemplate\"></ng-container>\r\n</div>\r\n\r\n<fd-menu #menu>\r\n <ul fd-list>\r\n @for (culture of cultures | keyvalue; track culture) {\r\n <li fd-list-item>\r\n <a fd-list-link (click)=\"onCultureChange(culture.value)\">\r\n <span fd-list-title class=\"tw-flex tw-items-center tw-gap-1\">\r\n <img width=\"14px\" height=\"12px\" [src]=\"'/assets/flags/' + culture.key + '.png'\" loading=\"lazy\" />\r\n <span class=\"culture-abbrivation\" [ngClass]=\"culture.key\"> {{ culture.key }}</span>\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n</fd-menu>\r\n<ng-template #notificationGroupTpl let-notificationCount=\"notificationCount\">\r\n <bt-notification-group\r\n [notificationReport]=\"notificationReport\"\r\n [notificationCount]=\"notificationCount\"\r\n [dateGroupOnly]=\"shellbarData?.NotificationGroupByDateOnly === true\"\r\n (actionClick)=\"popoverComponent.close()\"\r\n [deviceSize]=\"deviceSize\"\r\n ></bt-notification-group>\r\n</ng-template>\r\n\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #notificationsDialog>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-header>\r\n <h1 id=\"fd-dialog-header-10\" fd-title>{{ 'Notification' | bbbTranslate }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialog.dismiss()\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body class=\"mobile\">\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationsUnreadCount }\"\r\n ></ng-container>\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n<ng-template #searchContent>\r\n <ul fd-list [byline]=\"true\">\r\n @for (item of (suggestions | suggestionsFilter:(selectedSuggestionFilter() ?? 'all')) ; track item.data.path) {\r\n <li\r\n fd-list-item\r\n [interactive]=\"true\"\r\n (click)=\"onSearchItemClick(item)\"\r\n class=\"!tw-ps-1\"\r\n [class.!tw-bg-blue-600]=\"item.data.source === 'Report'\"\r\n [class.!tw-bg-green-600]=\"item.data.source === 'Command'\"\r\n [class.!tw-bg-gray-600]=\"item.data.source !== 'Command' && item.data.source !== 'Report'\"\r\n >\r\n <a fd-list-link [attr.href]=\"!item.data.url ? null : item.data.url\" (click)=\"onSearchLink(item, $event)\">\r\n <div fd-list-content>\r\n <div fd-list-title>{{ item.value }}</div>\r\n <div fd-list-byline>{{ item.data.path }}</div>\r\n </div>\r\n <span fd-list-secondary>\r\n @if(item.data.canPin){ @let favorite = isFavorite(item);\r\n <button\r\n class=\"!tw-m-[0.1rem]\"\r\n [ariaLabel]=\"(favorite ? '\u062D\u0630\u0641 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627' : '\u0627\u0641\u0632\u0648\u062F\u0646 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627') | bbbTranslate\"\r\n [title]=\"(favorite ? '\u062D\u0630\u0641 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627' : '\u0627\u0641\u0632\u0648\u062F\u0646 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627') | bbbTranslate\"\r\n [attr.aria-pressed]=\"favorite\"\r\n fd-button\r\n [glyph]=\"favorite ? 'favorite' : 'unfavorite'\"\r\n (click)=\"oFavoriteLink(item, $event)\"\r\n ></button>\r\n }\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n</ng-template>\r\n<ng-template #searchSubHeader>\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <fd-input-group\r\n glyph=\"search\"\r\n fdkInitialFocus\r\n glyphAriaLabel=\"Submit\"\r\n [button]=\"true\"\r\n (input)=\"onSearchInputChange($event)\"\r\n >\r\n </fd-input-group>\r\n @if(suggestions?.length || selectedSuggestionFilter()){\r\n <div class=\"tw-flex tw-gap-4 tw-overflow-x-auto suggestion-filters-cat tw-pb-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u0647\u0645\u0647',\r\n filter: 'all',\r\n active: selectedSuggestionFilter() === null,\r\n count: (suggestions | suggestionsCountFilter: 'all'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u0632\u06CC\u0631\u0633\u06CC\u0633\u062A\u0645',\r\n filter: 'subsystem',\r\n active: selectedSuggestionFilter() === 'subsystem',\r\n count: (suggestions | suggestionsCountFilter: 'subsystem'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u06AF\u0631\u0648\u0647 \u0646\u0648\u06CC\u06AF\u06CC\u062A\u0648\u0631',\r\n filter: 'navgroup',\r\n active: selectedSuggestionFilter() === 'navgroup',\r\n count: (suggestions | suggestionsCountFilter: 'navgroup'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u06AF\u0632\u0627\u0631\u0634\u0627\u062A',\r\n filter: 'report',\r\n active: selectedSuggestionFilter() === 'report',\r\n count: (suggestions | suggestionsCountFilter: 'report'),\r\n type: 'information'\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u062F\u0633\u062A\u0648\u0631\u0627\u062A',\r\n filter: 'command',\r\n active: selectedSuggestionFilter() === 'command',\r\n count: (suggestions | suggestionsCountFilter: 'command'),\r\n type: 'success'\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #catTag let-name=\"name\" let-filter=\"filter\" let-active=\"active\" let-count=\"count\" let-type=\"type\">\r\n <!-- \u00AB\u0647\u0645\u0647\u00BB \u0648 \u06AF\u0631\u0648\u0647 \u0641\u0639\u0627\u0644 \u0647\u0645\u06CC\u0634\u0647 \u062F\u06CC\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u0646\u062F (\u0641\u0639\u0627\u0644 \u0628\u0627 \u0635\u0641\u0631 \u0646\u062A\u06CC\u062C\u0647 \u00AB\u06F0\u00BB \u0646\u0634\u0627\u0646 \u0645\u06CC\u200C\u062F\u0647\u062F)\u061B \u06AF\u0631\u0648\u0647 \u063A\u06CC\u0631\u0641\u0639\u0627\u0644 \u0641\u0642\u0637 \u0628\u0627 \u0646\u062A\u06CC\u062C\u0647 -->\r\n @if(filter === 'all' || active || (count && count!==' ')){\r\n <div\r\n fd-generic-tag\r\n class=\"bt-suggestion-filter\"\r\n [class.bt-suggestion-filter--active]=\"active\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-pressed]=\"active\"\r\n [name]=\"name\"\r\n [value]=\"count || '0'\"\r\n [type]=\"type\"\r\n (click)=\"onSuggestionFilterClick(filter)\"\r\n (keydown.enter)=\"onSuggestionFilterClick(filter); $event.preventDefault()\"\r\n (keydown.space)=\"onSuggestionFilterClick(filter); $event.preventDefault()\"\r\n ></div>\r\n }\r\n</ng-template>\r\n", styles: [":host{display:block;position:relative}:host fd-user-menu{background-color:transparent}:host fd-shellbar-actions.flat-buttons{flex-direction:row-reverse}:host.hide-user-menu fd-shellbar-actions ::ng-deep .fd-user-menu{display:none}:host ::ng-deep fd-shellbar-actions fd-avatar{background-color:transparent!important;color:var(--sapShell_InteractiveTextColor, #d1e8ff)}:host ::ng-deep .fd-shellbar--s .fd-shellbar__title{display:block;max-width:10rem;text-wrap:auto;font-size:.8rem}:host ::ng-deep fd-combobox .fd-input-group input{min-width:2rem;height:1.625rem;margin-top:.1875rem;margin-bottom:.1875rem;padding:0 .5rem;box-sizing:border-box}:host ::ng-deep fd-combobox .fd-input-group span{min-width:2rem;min-height:1.625rem}:host ::ng-deep .fd-shellbar__subtitle{font-size:1rem}:host ::ng-deep .fd-shellbar--s ::ng-deep .fd-shellbar__subtitle{display:block;overflow:hidden;text-wrap:wrap;width:100%;word-break:break-all}.fd-shellbar__logo{min-height:3rem;height:3rem;width:3rem;margin:0!important}.extra-button-wrapper{display:flex;height:100%;align-items:center;position:absolute;left:10px;top:0;gap:.285rem}.bt-shellbar-date{display:inline-flex;align-items:center;gap:.285rem;flex-shrink:0;white-space:nowrap;padding:0 .5rem;font-size:.875rem;line-height:1;color:var(--sapShell_InteractiveTextColor, #d1e8ff);cursor:default;-webkit-user-select:none;user-select:none}.bt-shellbar-date__icon{font-size:1rem;opacity:.85}.bt-shellbar-date__text{font-variant-numeric:tabular-nums}.hide-panel-header ::ng-deep .fd-panel__header{min-height:auto;height:auto}:host ::ng-deep .shellbar-command-action--image-glyph{gap:.375rem}:host ::ng-deep .shellbar-command-action--image-glyph ::ng-deep fd-icon{display:none}.shellbar-command-action__image{width:1rem;height:1rem;object-fit:contain;flex-shrink:0}[fd-menu-title],.shellbar-command-action__label{white-space:nowrap!important}.bt-suggestion-filter{cursor:pointer;flex-shrink:0}.bt-suggestion-filter--active{outline:.125rem solid var(--sapSelectedColor, var(--sapContent_FocusColor, currentColor));outline-offset:.0625rem;font-weight:700}.bt-suggestion-filter:focus-visible{box-shadow:0 0 0 .25rem var(--sapContent_FocusColor, currentColor)}:host ::ng-deep .fd-shellbar{height:var(--shellbar-height)}:host ::ng-deep fd-shellbar.s .fd-shellbar__product{max-width:120px}:host ::ng-deep fd-shellbar.s .fd-shellbar--has-context-area{justify-content:center!important}:host ::ng-deep fd-shellbar.s .fd-shellbar--has-context-area .fd-shellbar__action--shrink button{color:var(--fdButtonIconColor, var(--sapShell_InteractiveTextColor))}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1$3.AvatarComponent, selector: "fd-avatar", inputs: ["id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "interactive", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "colorIndication", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i2$3.BarComponent, selector: "[fd-bar]", inputs: ["barDesign", "inPage", "inHomePage", "clear", "size", "initialSuggestionTitle", "initialSuggestionSubline", "role"] }, { kind: "directive", type: i2$3.BarRightDirective, selector: "[fd-bar-right]", inputs: ["stackContentsVertically"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["id"], exportAs: ["fd-button"] }, { kind: "component", type: i1.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "size", "class", "ariaLabel", "ariaHidden"], outputs: ["ariaHiddenChange"] }, { kind: "component", type: i4$1.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy", "ariaLabel"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: i7.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "subline", "theme", "unreadIndicator", "role", "settingsList", "settingsListFooter", "notification", "searchResultsList"], outputs: ["focusEscapeList"] }, { kind: "component", type: i7.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "counterRole", "counterAriaLabel", "active", "unread", "byline", "ariaRole", "id", "preventClick", "settingsListTpl", "suggestion"], outputs: ["keyDown"], exportAs: ["fdListItem"] }, { kind: "directive", type: i7.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap", "truncate", "scope"] }, { kind: "directive", type: i7.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i7.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "directive", type: i7.ListBylineDirective, selector: "[fdListByline], [fd-list-byline]", inputs: ["twoCol", "wrap"] }, { kind: "directive", type: i7.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { kind: "component", type: i4.MenuComponent, selector: "fd-menu", inputs: ["openOnHoverTime", "ariaLabel", "ariaLabelledby", "id", "config", "mobile", "mobileConfig", "placement", "closeOnEscapeKey", "focusAutoCapture", "disabled", "disableScrollbar", "triggers", "fillControlMode", "closeOnOutsideClick", "noArrow", "focusTrapped", "additionalBodyClass", "closeOnNavigation", "restoreFocusOnClose", "appendTo", "fixedPosition", "scrollStrategy", "isOpen"], outputs: ["isOpenChange", "activePath", "beforeOpen"] }, { kind: "component", type: i4.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: i4.SubmenuComponent, selector: "fd-submenu", inputs: ["ariaLabel", "ariaLabelledby"], exportAs: ["fdSubmenu"] }, { kind: "component", type: i4.MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i4.MenuTitleDirective, selector: "[fd-menu-title]", inputs: ["truncate"] }, { kind: "component", type: i4.MenuAddonDirective, selector: "fd-menu-addon", inputs: ["position", "submenuIndicator", "ariaHidden"] }, { kind: "directive", type: i4.MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "component", type: i5$2.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig", "role", "ariaDescription"] }, { kind: "component", type: i5$2.DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: i5$2.DialogHeaderComponent, selector: "fd-dialog-header", inputs: ["inShellbar"] }, { kind: "component", type: i5$2.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title", "ariaLabel"] }, { kind: "component", type: i6.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["twoLineClamp", "headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i7$2.InitialFocusDirective, selector: "[fdkInitialFocus]", inputs: ["fdkInitialFocus", "enabled", "focusLastElement"] }, { kind: "component", type: i12.ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["status", "statusMessage", "glyph", "glyphFont", "label", "ariaLabel", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate", "ariaRoleDescription"] }, { kind: "component", type: i6$2.PanelComponent, selector: "fd-panel", inputs: ["class", "fixed", "id", "expandId", "expandAriaLabel", "expandAriaLabelledBy", "expanded", "transparent", "noRadius"], outputs: ["expandedChange"] }, { kind: "component", type: i14.ProductSwitchComponent, selector: "fd-product-switch", inputs: ["placement", "disabled", "closeOnEscapeKey", "closeOnOutsideClick", "noArrow", "disableScrollbar", "triggers", "focusTrapped", "focusAutoCapture", "isOpen"], outputs: ["isOpenChange", "beforeOpen"] }, { kind: "component", type: i14.ProductSwitchBodyComponent, selector: "fd-product-switch-body", inputs: ["dragAndDropEnabled", "products", "forceListMode", "busy", "isOpen"], outputs: ["productsChange", "itemClicked", "isOpenChange"] }, { kind: "component", type: i15.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i15.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight", "ariaModal"], outputs: ["onClose"] }, { kind: "component", type: i15.PopoverComponent, selector: "fd-popover", inputs: ["config", "title", "trigger", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll", "placement", "maxWidth", "fillControlMode", "closeOnOutsideClick", "closeOnEscapeKey", "disabled", "triggers", "focusTrapped", "focusAutoCapture", "restoreFocusOnClose", "noArrow", "disableScrollbar", "appendTo", "placementContainer", "scrollStrategy", "cdkPositions", "applyOverlay", "additionalBodyClass", "additionalTriggerClass", "closeOnNavigation", "fixedPosition", "resizable", "bodyAriaLabel", "bodyRole", "bodyAriaLabelledBy", "isOpen"], outputs: ["triggerChange", "isOpenChange", "beforeOpen"] }, { kind: "component", type: i16.ShellbarComponent, selector: "fd-shellbar", inputs: ["size", "breakpoints", "sideNav", "groupFlex", "showNavigationButton", "navigationButtonTemplate", "showBackButton", "navigationButtonLabel", "backButtonLabel", "showSearchFieldOnSizeSmall"], outputs: ["navigationButtonClicked", "backButtonClicked"] }, { kind: "component", type: i16.ProductMenuComponent, selector: "fd-product-menu", inputs: ["closeOnEscapeKey", "closeOnOutsideClick", "triggers", "placement", "disabled", "fillControlMode", "control", "items", "closePopoverOnSelect"] }, { kind: "component", type: i16.ShellbarActionsComponent, selector: "fd-shellbar-actions", inputs: ["user", "userMenu", "closePopoverOnSelect", "assistiveTools", "assistiveToolsCallback"], outputs: ["searchOpen"] }, { kind: "component", type: i16.ShellbarActionComponent, selector: "fd-shellbar-action", inputs: ["glyph", "glyphFont", "callback", "label", "ariaLabel", "title", "notificationLabel", "notificationCount", "fdType", "toggled"] }, { kind: "component", type: i16.ShellbarLogoComponent, selector: "fd-shellbar-logo" }, { kind: "component", type: i16.ShellbarTitleComponent, selector: "fd-shellbar-title" }, { kind: "component", type: i16.ShellbarBrandingComponent, selector: "fd-shellbar-branding", inputs: ["interactiveBranding"] }, { kind: "component", type: i16.ShellbarContextAreaComponent, selector: "fd-shellbar-context-area", outputs: ["contentItemVisibilityChange"] }, { kind: "component", type: i16.ShellbarSeparatorComponent, selector: "fd-shellbar-separator" }, { kind: "directive", type: i16.ShellbarHidePriorityDirective, selector: "[fdShellbarHidePriority]", inputs: ["fdShellbarHidePriority"] }, { kind: "component", type: i17.GenericTagComponent, selector: "[fd-generic-tag]", inputs: ["type", "name", "value", "ariaRoleDescription"] }, { kind: "component", type: i8$1.SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "forceSearchButton", "disableSuggestionsFoundAnnouncer", "showCategoryAllOption", "initialSuggestionTitle", "initialSuggestionSubline", "initialSuggestionEmptyTitle", "initialSuggestionEmptySubline", "suggestionFooter", "searchResultsEmptyTemplate", "searchResultsEmptyDefaultSuggestions", "showAdvancedFilter", "allowEmptySearch", "enableSelection", "suggestionsLoading", "busyIndicatorTitle", "busyIndicatorAriaValueText"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange", "advancedFilterButtonClick", "categoryModeChange", "appearanceChange", "disableRefreshChange", "inputTextChange", "forceSearchButtonChange"] }, { kind: "component", type: i19.UserMenuComponent, selector: "fd-user-menu", inputs: ["mobile"], outputs: ["isOpenChange"] }, { kind: "component", type: i19.UserMenuControlComponent, selector: "fd-user-menu-control", outputs: ["clicked"] }, { kind: "component", type: i19.UserMenuBodyComponent, selector: "fd-user-menu-body" }, { kind: "component", type: i19.UserMenuListComponent, selector: "fd-user-menu-list" }, { kind: "component", type: i19.UserMenuFooterComponent, selector: "fd-user-menu-footer" }, { kind: "directive", type: i19.UserMenuHeaderDirective, selector: "[fd-user-menu-header]" }, { kind: "directive", type: i19.UserMenuSublineDirective, selector: "[fd-user-menu-subline]", inputs: ["truncate"] }, { kind: "directive", type: i19.UserMenuUserNameDirective, selector: "[fd-user-menu-user-name]", inputs: ["truncate"] }, { kind: "directive", type: i19.UserMenuHeaderContainerDirective, selector: "[fd-user-menu-header-container]" }, { kind: "component", type: i19.UserMenuListItemComponent, selector: "[fd-user-menu-list-item]", inputs: ["uniqueId", "icon", "iconAfter", "iconAfterActive", "text", "textId", "truncateText", "subtitle", "subtitleId", "truncateSubtitle", "hasSubmenu", "submenu", "selected"], outputs: ["isOpenChange", "showSubmenu", "updateTitle", "keyDown"] }, { kind: "directive", type: i5.DynamicCommandDirective, selector: "[dynCommand]", inputs: ["dynCommand", "mo", "enableCommand"], outputs: ["commandClick"] }, { kind: "directive", type: i5.MobileDirective, selector: "[mobile]" }, { kind: "directive", type: i5.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "directive", type: i5.RouteFormChangeDirective, selector: "[routeFormChange]", inputs: ["handleBodyClick"], outputs: ["stateChanged"] }, { kind: "component", type: i3.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: NotificationGroupComponent, selector: "bt-notification-group", inputs: ["notifications", "loading", "deviceSize", "notificationCount", "notificationReport", "dateGroupOnly"], outputs: ["viewed", "remove", "actionClick", "showEvent", "loadMore"] }, { kind: "pipe", type: i1$2.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i5.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i5.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: SuggestionsFilterPipe, name: "suggestionsFilter" }, { kind: "pipe", type: SuggestionsCountFilterPipe, name: "suggestionsCountFilter" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4043
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: BarsaShellbarComponent, isStandalone: false, selector: "bt-barsa-shellbar", inputs: { showSidebar: "showSidebar", multiLanguages: "multiLanguages", userLoggedIn: "userLoggedIn", settings: "settings", productMenuControl: "productMenuControl", dastoratSarasari: "dastoratSarasari", workflowMenuItems: "workflowMenuItems", groupedCommandMenus: "groupedCommandMenus", deviceSize: "deviceSize", cultures: "cultures", shellbarData: "shellbarData", notificationsUnreadCount: "notificationsUnreadCount", productMenuItems1: "productMenuItems1", bodyClick: "bodyClick", logo: "logo", actions: "actions", userMenu: "userMenu", footerButtons: "footerButtons", productSwitcher: "productSwitcher", subtitle: "subtitle", isMobile: "isMobile", hideShellbarActions: "hideShellbarActions", flatButtons: "flatButtons", isTablet: "isTablet", userInfo: "userInfo", isDesktop: "isDesktop", informativeText: "informativeText", informativeStatus: "informativeStatus", hideProductMenu: "hideProductMenu", enableSearch: "enableSearch", hideNotifications: "hideNotifications", isServiceDesk: "isServiceDesk", isOpenQuickAccess: "isOpenQuickAccess", sideMenuTemplate: "sideMenuTemplate", notificationReport: "notificationReport", profileDynamicCommand: "profileDynamicCommand", profileDynamicCommandText: "profileDynamicCommandText", profileDynamicCommandIcon: "profileDynamicCommandIcon", displayName: "displayName", hideBranding: "hideBranding", showSearchInSystem: "showSearchInSystem", rtl: "rtl", suggestions: "suggestions", date: "date" }, outputs: { appTileGroupChange: "appTileGroupChange", searchItemClick: "searchItemClick", searchInput: "searchInput", isOpenQuickAccessChanged: "isOpenQuickAccessChanged", openNotificationPanel: "openNotificationPanel", openQuickAccessPanel: "openQuickAccessPanel", cultureChanged: "cultureChanged", notifiationActionClick: "notifiationActionClick" }, viewQueries: [{ propertyName: "searchDialogContent", first: true, predicate: ["searchContent"], descendants: true, read: TemplateRef }, { propertyName: "searchDialogSubHeader", first: true, predicate: ["searchSubHeader"], descendants: true, read: TemplateRef }, { propertyName: "shellbar", first: true, predicate: ShellbarComponent$1, descendants: true, static: true }, { propertyName: "comboboxComponent", first: true, predicate: ComboboxComponent, descendants: true }, { propertyName: "popoverComponent", first: true, predicate: ["popoverComponent"], descendants: true }, { propertyName: "_notificationsDialog", first: true, predicate: ["notificationsDialog"], descendants: true, read: TemplateRef, static: true }, { propertyName: "commandsHost", first: true, predicate: ["commandsHost"], descendants: true, static: true }, { propertyName: "commandsMeasure", first: true, predicate: ["commandsMeasure"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<fd-shellbar\r\n [ngClass]=\"deviceSize\"\r\n routeFormChange\r\n (stateChanged)=\"onRouteFormStateChange()\"\r\n [showNavigationButton]=\"sideMenuTemplate || showSidebar ? true : false\"\r\n (navigationButtonClicked)=\"$event.stopPropagation(); isOpenQuickAccessChanged.emit(!isOpenQuickAccess)\"\r\n [handleBodyClick]=\"true\"\r\n [size]=\"deviceSize === 's' && userLoggedIn ? 'm' : deviceSize\"\r\n>\r\n @if(!hideBranding){\r\n <fd-shellbar-branding [interactiveBranding]=\"true\">\r\n <fd-shellbar-logo>\r\n <a\r\n [style.backgroundImage]=\"\r\n 'url(' + (logo?.FileId | picFieldSrc: 'GetPictureFromFileInfo':null) + ')'\r\n \"\r\n href=\"/\"\r\n class=\"fd-shellbar__logo fd-shellbar__logo--image-replaced tw-bg-center !tw-bg-auto\"\r\n [attr.aria-label]=\"subtitle | bbbTranslate\"\r\n ></a>\r\n </fd-shellbar-logo>\r\n @if(!brandingTitleHidden){\r\n <fd-shellbar-title> {{ subtitle | bbbTranslate }} {{ showVersion ? appVersion : '' }}</fd-shellbar-title>\r\n }\r\n </fd-shellbar-branding>\r\n }\r\n <fd-shellbar-context-area>\r\n <span\r\n [class.hide]=\"!informativeText\"\r\n fdShellbarHidePriority=\"1\"\r\n fd-object-status\r\n [status]=\"informativeStatus || 'informative'\"\r\n [inverted]=\"true\"\r\n [label]=\"informativeText\"\r\n ></span>\r\n <fd-product-switch\r\n fdShellbarHidePriority=\"3\"\r\n [class.hide]=\"!productSwitcher?.length || deviceSize === 's'\"\r\n [restoreFocusOnClose]=\"false\"\r\n >\r\n <fd-product-switch-body [products]=\"productSwitcher\" [forceListMode]=\"deviceSize === 's'\">\r\n </fd-product-switch-body>\r\n </fd-product-switch>\r\n <span\r\n [class.hide]=\"!showSearchInSystem\"\r\n fdShellbarHidePriority=\"4\"\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"search\"\r\n fdType=\"transparent\"\r\n (click)=\"onOpenSearchDialog()\"\r\n >\r\n </span>\r\n <fd-product-menu\r\n fdShellbarHidePriority=\"2\"\r\n [control]=\"productMenuControl\"\r\n [closePopoverOnSelect]=\"true\"\r\n [items]=\"productMenuItems1\"\r\n [class.hide]=\"!productMenuItems1?.length\"\r\n >\r\n </fd-product-menu>\r\n <fd-shellbar-separator fdshellbarhidepriority=\"5\" style=\"flex-shrink: 0\"></fd-shellbar-separator>\r\n <!--\r\n BTILES-006: \u0633\u0631\u0631\u06CC\u0632 priority+ \u062F\u0633\u062A\u0648\u0631\u0627\u062A. \u0641\u0647\u0631\u0633\u062A \u0648\u0627\u062D\u062F (\u0633\u0631\u0627\u0633\u0631\u06CC\u060C workflow\u060C \u06AF\u0631\u0648\u0647\u06CC) \u062A\u0627 \u062C\u0627\u06CC\u06CC \u06A9\u0647 \u062C\u0627 \u0645\u06CC\u200C\u0634\u0648\u062F \u062F\u0631 \u0646\u0648\u0627\u0631 \u0627\u0633\u062A\r\n \u0648 \u0628\u0642\u06CC\u0647 \u0627\u0632 \u0627\u0646\u062A\u0647\u0627 \u062F\u0631 \u0645\u0646\u0648\u06CC \u22EF. fdShellbarHidePriority \u0639\u0645\u062F\u0627\u064B attribute \u0627\u06CC\u0633\u062A\u0627\u0633\u062A (binding \u062F\u0631 DOM attribute \u0646\u0645\u06CC\u200C\u0633\u0627\u0632\u062F)\r\n \u062A\u0627 \u067E\u0646\u0647\u0627\u0646\u200C\u0633\u0627\u0632\u06CC fundamental \u0627\u06CC\u0646 \u0638\u0631\u0641 \u0631\u0627 \u0622\u062E\u0631 \u0627\u0632 \u0647\u0645\u0647 \u067E\u0646\u0647\u0627\u0646 \u06A9\u0646\u062F.\r\n -->\r\n <div class=\"bt-shellbar-commands\" fdShellbarHidePriority=\"0\" #commandsHost>\r\n @for(entry of visibleCommandEntries(); track entry.id){\r\n <ng-container *ngTemplateOutlet=\"commandEntryTpl; context: { entry: entry, measure: false }\"></ng-container>\r\n } @if(hiddenCommandNodes().length){\r\n <ng-container *ngTemplateOutlet=\"overflowEntryTpl; context: { measure: false }\"></ng-container>\r\n }\r\n <!-- \u0644\u0627\u06CC\u0647\u200C\u06CC \u0627\u0646\u062F\u0627\u0632\u0647\u200C\u06AF\u06CC\u0631\u06CC \u067E\u0646\u0647\u0627\u0646: \u0647\u0645\u0647\u200C\u06CC \u0648\u0631\u0648\u062F\u06CC\u200C\u0647\u0627 \u0648 \u062F\u06A9\u0645\u0647\u200C\u06CC \u22EF \u0628\u0627 \u0647\u0645\u0627\u0646 markup \u0646\u0648\u0627\u0631\u060C \u0628\u062F\u0648\u0646 \u0645\u0646\u0648/\u06A9\u0644\u06CC\u06A9 -->\r\n <div class=\"bt-shellbar-commands__measure\" #commandsMeasure aria-hidden=\"true\" inert>\r\n @for(entry of commandEntries(); track entry.id){\r\n <ng-container *ngTemplateOutlet=\"commandEntryTpl; context: { entry: entry, measure: true }\"></ng-container>\r\n }\r\n <ng-container *ngTemplateOutlet=\"overflowEntryTpl; context: { measure: true }\"></ng-container>\r\n </div>\r\n </div>\r\n </fd-shellbar-context-area>\r\n\r\n @if(inputEnableSearch()){\r\n <fdp-search-field\r\n [placeholder]=\"'Search' | bbbTranslate\"\r\n (inputChange)=\"onSearchInputChange($event)\"\r\n [suggestions]=\"suggestions\"\r\n (searchSubmit)=\"onSearchSubmit($event)\"\r\n ></fdp-search-field>\r\n }\r\n <fd-shellbar-actions\r\n #shellbarActions\r\n (searchOpen)=\"onSearchOpen($event)\"\r\n [class.flat-buttons]=\"flatButtons?.length && !showSearch()\"\r\n >\r\n @if(deviceSize !== 's' && userLoggedIn && date){\r\n <span class=\"bt-shellbar-date\" [title]=\"date.full\">\r\n <fd-icon class=\"bt-shellbar-date__icon\" glyph=\"calendar\" [attr.aria-hidden]=\"true\"></fd-icon>\r\n <span class=\"bt-shellbar-date__text\">{{ date.compact }}</span>\r\n </span>\r\n }\r\n <fd-user-menu>\r\n <fd-user-menu-control>\r\n <fd-avatar\r\n size=\"xs\"\r\n [circle]=\"true\"\r\n [attr.ariaLabel]=\"displayName\"\r\n [image]=\"userInfo?.Url\"\r\n ></fd-avatar>\r\n </fd-user-menu-control>\r\n <fd-user-menu-body>\r\n <div fd-user-menu-header>\r\n <fd-avatar\r\n [circle]=\"true\"\r\n [size]=\"deviceSize\"\r\n [label]=\"userInfo?.Url ? '' : displayName\"\r\n zoomGlyph=\"\"\r\n title=\"Edit avatar\"\r\n [image]=\"userInfo?.Url\"\r\n ></fd-avatar>\r\n <div fd-user-menu-header-container>\r\n <div fd-user-menu-user-name>{{ displayName }}</div>\r\n @for(item of userInfo?.Sublines;track item){\r\n <div fd-user-menu-subline>{{ item }}</div>\r\n }\r\n </div>\r\n @if(profileDynamicCommandText){\r\n <button\r\n fd-button\r\n [label]=\"profileDynamicCommandText || 'Edit' | bbbTranslate\"\r\n [glyph]=\"profileDynamicCommandIcon || 'edit'\"\r\n [attr.ariaLabel]=\"'\u0648\u06CC\u0631\u0627\u06CC\u0634 \u067E\u0631\u0648\u0641\u0627\u06CC\u0644'\"\r\n [dynCommand]=\"profileDynamicCommand\"\r\n bodyClick\r\n ></button>\r\n }\r\n </div>\r\n <div fd-user-menu-content-container>\r\n @if(userMenu?.length){\r\n <fd-panel transparent noRadius [fixed]=\"true\" class=\"hide-panel-header\"> </fd-panel>}\r\n\r\n <fd-user-menu-list>\r\n @for(item of userMenu;track item.text){\r\n <li fd-user-menu-list-item [icon]=\"item.icon\" [text]=\"item.text\" (click)=\"item.callback()\"></li>\r\n }\r\n </fd-user-menu-list>\r\n </div>\r\n </fd-user-menu-body>\r\n\r\n <fd-user-menu-footer>\r\n <div fd-bar barDesign=\"footer\">\r\n <div fd-bar-right>\r\n @for(item of footerButtons;track item.text){\r\n <button\r\n fd-button\r\n [label]=\"item.text\"\r\n fdType=\"transparent\"\r\n [glyph]=\"item.icon\"\r\n [attr.ariaLabel]=\"item.text\"\r\n (click)=\"item.callback()\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n </fd-user-menu-footer>\r\n </fd-user-menu>\r\n @for (action of actions; track action.label) {\r\n <fd-shellbar-action\r\n [glyph]=\"action.glyph\"\r\n [callback]=\"action.callback\"\r\n [label]=\"action.label\"\r\n [notificationLabel]=\"action.notificationLabel\"\r\n [notificationCount]=\"action.notificationCount\"\r\n >\r\n </fd-shellbar-action>\r\n\r\n } @if (!settings?.HideLanguage && multiLanguages && userLoggedIn) {\r\n <button\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"world\"\r\n fdType=\"transparent\"\r\n [fdMenuTrigger]=\"menu\"\r\n ></button>\r\n } @if (deviceSize !== 's' && userLoggedIn && !hideNotifications) {\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notification'\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notification Label'\"\r\n [callback]=\"onOpenNotification\"\r\n >\r\n </fd-shellbar-action>\r\n } @if (deviceSize === 's' && userLoggedIn && !hideNotifications) {\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notifications' | bbbTranslate\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notifications' | bbbTranslate\"\r\n [callback]=\"onBellNotification\"\r\n >\r\n </fd-shellbar-action>\r\n } @if(flatButtons?.length){\r\n <div class=\"tw-flex tw-gap-1\">\r\n @if (!settings?.HideLanguage && multiLanguages){\r\n <button\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"world\"\r\n fdType=\"transparent\"\r\n [fdMenuTrigger]=\"menu\"\r\n ></button>\r\n } @for(btn of flatButtons;track btn.label){\r\n <button\r\n fd-button\r\n [label]=\"btn.text\"\r\n [glyph]=\"btn.text === ('Login' | bbbTranslate) ? 'person-placeholder' : null\"\r\n fdType=\"emphasized\"\r\n (click)=\"btn.callback()\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n </fd-shellbar-actions>\r\n <fd-popover\r\n [(isOpen)]=\"isOpenNotificatoin\"\r\n [noArrow]=\"true\"\r\n placement=\"top-end\"\r\n title=\"Notification Popover\"\r\n [appendTo]=\"el\"\r\n [mobile]=\"false\"\r\n #popoverComponent\r\n >\r\n <fd-popover-control>\r\n <!-- <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notification'\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notification Label'\"\r\n [callback]=\"onOpenNotification\"\r\n >\r\n </fd-shellbar-action> -->\r\n </fd-popover-control>\r\n <fd-popover-body style=\"min-width: 320px; overflow-x: auto; box-shadow: var(--sapContent_Shadow0)\">\r\n @if(isOpenNotificatoin){\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationsUnreadCount }\"\r\n ></ng-container>\r\n }\r\n </fd-popover-body>\r\n </fd-popover>\r\n</fd-shellbar>\r\n\r\n<ng-template #loading>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n\r\n<div\r\n *ngIf=\"sideMenuTemplate\"\r\n class=\"sidemenu-h tw-fixed tw-transition-all tw-z-[100] tw-shadow-2xl tw-overflow-auto\"\r\n [class.tw-w-screen]=\"isMobile\"\r\n [class.-tw-right-full]=\"isMobile\"\r\n [class.tw-w-96]=\"!isMobile\"\r\n [class.-tw-right-96]=\"!isMobile && rtl\"\r\n [class.!tw-right-0]=\"rtl && isOpenQuickAccess\"\r\n [class.-tw-left-96]=\"!isMobile && !rtl\"\r\n [class.!tw-left-0]=\"!rtl && isOpenQuickAccess\"\r\n (click)=\"$event.stopPropagation()\"\r\n>\r\n <ng-container *ngTemplateOutlet=\"sideMenuTemplate\"></ng-container>\r\n</div>\r\n\r\n<fd-menu #menu>\r\n <ul fd-list>\r\n @for (culture of cultures | keyvalue; track culture) {\r\n <li fd-list-item>\r\n <a fd-list-link (click)=\"onCultureChange(culture.value)\">\r\n <span fd-list-title class=\"tw-flex tw-items-center tw-gap-1\">\r\n <img width=\"14px\" height=\"12px\" [src]=\"'/assets/flags/' + culture.key + '.png'\" loading=\"lazy\" />\r\n <span class=\"culture-abbrivation\" [ngClass]=\"culture.key\"> {{ culture.key }}</span>\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n</fd-menu>\r\n<ng-template #notificationGroupTpl let-notificationCount=\"notificationCount\">\r\n <bt-notification-group\r\n [notificationReport]=\"notificationReport\"\r\n [notificationCount]=\"notificationCount\"\r\n [dateGroupOnly]=\"shellbarData?.NotificationGroupByDateOnly === true\"\r\n (actionClick)=\"popoverComponent.close()\"\r\n [deviceSize]=\"deviceSize\"\r\n ></bt-notification-group>\r\n</ng-template>\r\n\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #notificationsDialog>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-header>\r\n <h1 id=\"fd-dialog-header-10\" fd-title>{{ 'Notification' | bbbTranslate }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialog.dismiss()\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body class=\"mobile\">\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationsUnreadCount }\"\r\n ></ng-container>\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n<ng-template #searchContent>\r\n <ul fd-list [byline]=\"true\">\r\n @for (item of (suggestions | suggestionsFilter:(selectedSuggestionFilter() ?? 'all')) ; track item.data.path) {\r\n <li\r\n fd-list-item\r\n [interactive]=\"true\"\r\n (click)=\"onSearchItemClick(item)\"\r\n class=\"!tw-ps-1\"\r\n [class.!tw-bg-blue-600]=\"item.data.source === 'Report'\"\r\n [class.!tw-bg-green-600]=\"item.data.source === 'Command'\"\r\n [class.!tw-bg-gray-600]=\"item.data.source !== 'Command' && item.data.source !== 'Report'\"\r\n >\r\n <a fd-list-link [attr.href]=\"!item.data.url ? null : item.data.url\" (click)=\"onSearchLink(item, $event)\">\r\n <div fd-list-content>\r\n <div fd-list-title>{{ item.value }}</div>\r\n <div fd-list-byline>{{ item.data.path }}</div>\r\n </div>\r\n <span fd-list-secondary>\r\n @if(item.data.canPin){ @let favorite = isFavorite(item);\r\n <button\r\n class=\"!tw-m-[0.1rem]\"\r\n [ariaLabel]=\"(favorite ? '\u062D\u0630\u0641 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627' : '\u0627\u0641\u0632\u0648\u062F\u0646 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627') | bbbTranslate\"\r\n [title]=\"(favorite ? '\u062D\u0630\u0641 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627' : '\u0627\u0641\u0632\u0648\u062F\u0646 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627') | bbbTranslate\"\r\n [attr.aria-pressed]=\"favorite\"\r\n fd-button\r\n [glyph]=\"favorite ? 'favorite' : 'unfavorite'\"\r\n (click)=\"oFavoriteLink(item, $event)\"\r\n ></button>\r\n }\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n</ng-template>\r\n<ng-template #searchSubHeader>\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <fd-input-group\r\n glyph=\"search\"\r\n fdkInitialFocus\r\n glyphAriaLabel=\"Submit\"\r\n [button]=\"true\"\r\n (input)=\"onSearchInputChange($event)\"\r\n >\r\n </fd-input-group>\r\n @if(suggestions?.length || selectedSuggestionFilter()){\r\n <div class=\"tw-flex tw-gap-4 tw-overflow-x-auto suggestion-filters-cat tw-pb-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u0647\u0645\u0647',\r\n filter: 'all',\r\n active: selectedSuggestionFilter() === null,\r\n count: (suggestions | suggestionsCountFilter: 'all'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u0632\u06CC\u0631\u0633\u06CC\u0633\u062A\u0645',\r\n filter: 'subsystem',\r\n active: selectedSuggestionFilter() === 'subsystem',\r\n count: (suggestions | suggestionsCountFilter: 'subsystem'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u06AF\u0631\u0648\u0647 \u0646\u0648\u06CC\u06AF\u06CC\u062A\u0648\u0631',\r\n filter: 'navgroup',\r\n active: selectedSuggestionFilter() === 'navgroup',\r\n count: (suggestions | suggestionsCountFilter: 'navgroup'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u06AF\u0632\u0627\u0631\u0634\u0627\u062A',\r\n filter: 'report',\r\n active: selectedSuggestionFilter() === 'report',\r\n count: (suggestions | suggestionsCountFilter: 'report'),\r\n type: 'information'\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u062F\u0633\u062A\u0648\u0631\u0627\u062A',\r\n filter: 'command',\r\n active: selectedSuggestionFilter() === 'command',\r\n count: (suggestions | suggestionsCountFilter: 'command'),\r\n type: 'success'\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #catTag let-name=\"name\" let-filter=\"filter\" let-active=\"active\" let-count=\"count\" let-type=\"type\">\r\n <!-- \u00AB\u0647\u0645\u0647\u00BB \u0648 \u06AF\u0631\u0648\u0647 \u0641\u0639\u0627\u0644 \u0647\u0645\u06CC\u0634\u0647 \u062F\u06CC\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u0646\u062F (\u0641\u0639\u0627\u0644 \u0628\u0627 \u0635\u0641\u0631 \u0646\u062A\u06CC\u062C\u0647 \u00AB\u06F0\u00BB \u0646\u0634\u0627\u0646 \u0645\u06CC\u200C\u062F\u0647\u062F)\u061B \u06AF\u0631\u0648\u0647 \u063A\u06CC\u0631\u0641\u0639\u0627\u0644 \u0641\u0642\u0637 \u0628\u0627 \u0646\u062A\u06CC\u062C\u0647 -->\r\n @if(filter === 'all' || active || (count && count!==' ')){\r\n <div\r\n fd-generic-tag\r\n class=\"bt-suggestion-filter\"\r\n [class.bt-suggestion-filter--active]=\"active\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-pressed]=\"active\"\r\n [name]=\"name\"\r\n [value]=\"count || '0'\"\r\n [type]=\"type\"\r\n (click)=\"onSuggestionFilterClick(filter)\"\r\n (keydown.enter)=\"onSuggestionFilterClick(filter); $event.preventDefault()\"\r\n (keydown.space)=\"onSuggestionFilterClick(filter); $event.preventDefault()\"\r\n ></div>\r\n }\r\n</ng-template>\r\n\r\n<!--\r\n BTILES-006: markup \u06CC\u06A9 \u0648\u0631\u0648\u062F\u06CC \u062F\u0633\u062A\u0648\u0631\u060C \u0645\u0634\u062A\u0631\u06A9 \u0628\u06CC\u0646 \u0646\u0648\u0627\u0631 \u0648 \u0644\u0627\u06CC\u0647\u200C\u06CC \u0627\u0646\u062F\u0627\u0632\u0647\u200C\u06AF\u06CC\u0631\u06CC \u062A\u0627 \u0639\u0631\u0636 \u0627\u0646\u062F\u0627\u0632\u0647\u200C\u06AF\u06CC\u0631\u06CC\u200C\u0634\u062F\u0647 \u0647\u0645\u0627\u0646 \u0639\u0631\u0636 \u0648\u0627\u0642\u0639\u06CC \u0628\u0627\u0634\u062F.\r\n \u062F\u0631 \u062D\u0627\u0644\u062A measure \u0645\u0646\u0648 trigger \u0646\u062F\u0627\u0631\u062F \u0648 \u0622\u06CC\u062A\u0645\u06CC \u0631\u0646\u062F\u0631 \u0646\u0645\u06CC\u200C\u06A9\u0646\u062F (\u0641\u0642\u0637 \u062C\u0627\u06CC \u062E\u0648\u062F\u0634 \u0631\u0627 \u0645\u06CC\u200C\u06AF\u06CC\u0631\u062F).\r\n-->\r\n<ng-template #commandEntryTpl let-entry=\"entry\" let-measure=\"measure\">\r\n <span class=\"bt-shellbar-command-entry\">\r\n @switch(entry.kind){ @case('global'){ @let dastor = entry.command; @if(dastor.children?.length){\r\n <button\r\n type=\"button\"\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n fdType=\"transparent\"\r\n [glyph]=\"dastor.glyph\"\r\n [label]=\"dastor.label | bbbTranslate\"\r\n [fdMenuTrigger]=\"measure ? null : globalCommandMenu\"\r\n ></button>\r\n <fd-menu #globalCommandMenu>\r\n @if(!measure){ @for(item of dastor.children; track item.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n globalSubmenuTemplate;\r\n context: { item: item, parentSubmenu: undefined, rootMenu: globalCommandMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n <ng-template\r\n #globalSubmenuTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n globalSubmenuTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n } @else {\r\n <span\r\n fd-button\r\n [glyph]=\"dastor.glyph\"\r\n class=\"fd-shellbar__button\"\r\n [label]=\"dastor.useImageGlyph ? undefined : (dastor.label | bbbTranslate)\"\r\n [class.shellbar-command-action--image-glyph]=\"dastor.useImageGlyph\"\r\n (click)=\"dastor.callback?.()\"\r\n >\r\n @if(dastor.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"dastor.glyph\"\r\n [alt]=\"dastor.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n <span class=\"shellbar-command-action__label\">{{ dastor.label | bbbTranslate }}</span>\r\n }\r\n </span>\r\n } } @case('workflow'){\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n [label]=\"'Workflow' | bbbTranslate\"\r\n [fdMenu]=\"true\"\r\n [fdMenuTrigger]=\"measure ? null : workflowMenu\"\r\n ></button>\r\n <fd-menu #workflowMenu>\r\n @if(!measure){ @for(item of workflowMenuItems; track item.key) {\r\n <li fd-menu-item>\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n (click)=\"$event.preventDefault(); workflowMenu.close(); item.callback?.()\"\r\n >\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n } }\r\n </fd-menu>\r\n } @case('group'){ @let group = entry.group;\r\n <button\r\n fd-button\r\n [label]=\"group.Caption | bbbTranslate\"\r\n [fdMenu]=\"true\"\r\n [fdMenuTrigger]=\"measure ? null : groupMenu\"\r\n ></button>\r\n <fd-menu #groupMenu>\r\n @if(!measure){ @for(item of group.Commands; track item.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n groupSubmenuTemplate;\r\n context: { item: item, parentSubmenu: undefined, rootMenu: groupMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n <ng-template\r\n #groupSubmenuTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n class=\"tw-gap-2\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n groupSubmenuTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n } }\r\n </span>\r\n</ng-template>\r\n\r\n<!-- BTILES-006: \u062F\u06A9\u0645\u0647\u200C\u06CC \u22EF \u0648 \u0645\u0646\u0648\u06CC \u062F\u0633\u062A\u0648\u0631\u0627\u062A \u067E\u0646\u0647\u0627\u0646 (`hiddenCommandNodes`)\u061B \u062F\u0631 \u062D\u0627\u0644\u062A measure \u0641\u0642\u0637 \u062C\u0627\u06CC \u062E\u0648\u062F\u0634 \u0631\u0627 \u0645\u06CC\u200C\u06AF\u06CC\u0631\u062F. -->\r\n<ng-template #overflowEntryTpl let-measure=\"measure\">\r\n <span class=\"bt-shellbar-command-entry bt-shellbar-command-entry--overflow\">\r\n <button\r\n type=\"button\"\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"overflow\"\r\n [attr.aria-label]=\"'Commands' | bbbTranslate\"\r\n [title]=\"'Commands' | bbbTranslate\"\r\n [fdMenuTrigger]=\"measure ? null : mobileCommandsMenu\"\r\n ></button>\r\n <fd-menu #mobileCommandsMenu [mobile]=\"isOverflowMenuMobile\">\r\n @if(!measure){ @for(node of hiddenCommandNodes(); track node.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n mobileCommandTemplate;\r\n context: { item: node, parentSubmenu: undefined, rootMenu: mobileCommandsMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n <ng-template\r\n #mobileCommandTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n mobileCommandTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n </span>\r\n</ng-template>\r\n", styles: [":host{display:block;position:relative}:host fd-user-menu{background-color:transparent}:host fd-shellbar-actions.flat-buttons{flex-direction:row-reverse}:host.hide-user-menu fd-shellbar-actions ::ng-deep .fd-user-menu{display:none}:host ::ng-deep fd-shellbar-actions fd-avatar{background-color:transparent!important;color:var(--sapShell_InteractiveTextColor, #d1e8ff)}:host ::ng-deep .fd-shellbar--s .fd-shellbar__title{display:block;max-width:10rem;text-wrap:auto;font-size:.8rem}:host ::ng-deep fd-combobox .fd-input-group input{min-width:2rem;height:1.625rem;margin-top:.1875rem;margin-bottom:.1875rem;padding:0 .5rem;box-sizing:border-box}:host ::ng-deep fd-combobox .fd-input-group span{min-width:2rem;min-height:1.625rem}:host ::ng-deep .fd-shellbar__subtitle{font-size:1rem}:host ::ng-deep .fd-shellbar--s ::ng-deep .fd-shellbar__subtitle{display:block;overflow:hidden;text-wrap:wrap;width:100%;word-break:break-all}.fd-shellbar__logo{min-height:3rem;height:3rem;width:3rem;margin:0!important}.extra-button-wrapper{display:flex;height:100%;align-items:center;position:absolute;left:10px;top:0;gap:.285rem}.bt-shellbar-date{display:inline-flex;align-items:center;gap:.285rem;flex-shrink:0;white-space:nowrap;padding:0 .5rem;font-size:.875rem;line-height:1;color:var(--sapShell_InteractiveTextColor, #d1e8ff);cursor:default;-webkit-user-select:none;user-select:none}.bt-shellbar-date__icon{font-size:1rem;opacity:.85}.bt-shellbar-date__text{font-variant-numeric:tabular-nums}.hide-panel-header ::ng-deep .fd-panel__header{min-height:auto;height:auto}.bt-shellbar-commands{display:flex;align-items:center;align-self:stretch;gap:.5rem;flex:1 1 0;min-width:0;overflow:hidden;position:relative}:host ::ng-deep fd-shellbar:not(.s) .fd-shellbar .fd-shellbar__group--context-area{flex:1 1 0;min-width:0}.bt-shellbar-command-entry{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.bt-shellbar-commands__measure{position:absolute;top:0;inset-inline-start:0;display:flex;align-items:center;width:max-content;visibility:hidden;pointer-events:none}:host ::ng-deep .shellbar-command-action--image-glyph{gap:.375rem}:host ::ng-deep .shellbar-command-action--image-glyph ::ng-deep fd-icon{display:none}.shellbar-command-action__image{width:1rem;height:1rem;object-fit:contain;flex-shrink:0}[fd-menu-title],.shellbar-command-action__label{white-space:nowrap!important}.bt-suggestion-filter{cursor:pointer;flex-shrink:0}.bt-suggestion-filter--active{outline:.125rem solid var(--sapSelectedColor, var(--sapContent_FocusColor, currentColor));outline-offset:.0625rem;font-weight:700}.bt-suggestion-filter:focus-visible{box-shadow:0 0 0 .25rem var(--sapContent_FocusColor, currentColor)}:host ::ng-deep .fd-shellbar{height:var(--shellbar-height)}:host ::ng-deep fd-shellbar.s .fd-shellbar__product{max-width:120px}:host ::ng-deep fd-shellbar.s .fd-shellbar--has-context-area{justify-content:center!important}:host ::ng-deep fd-shellbar.s .fd-shellbar--has-context-area .fd-shellbar__action--shrink button{color:var(--fdButtonIconColor, var(--sapShell_InteractiveTextColor))}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1$3.AvatarComponent, selector: "fd-avatar", inputs: ["id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "interactive", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "colorIndication", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i2$3.BarComponent, selector: "[fd-bar]", inputs: ["barDesign", "inPage", "inHomePage", "clear", "size", "initialSuggestionTitle", "initialSuggestionSubline", "role"] }, { kind: "directive", type: i2$3.BarRightDirective, selector: "[fd-bar-right]", inputs: ["stackContentsVertically"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["id"], exportAs: ["fd-button"] }, { kind: "component", type: i1.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "size", "class", "ariaLabel", "ariaHidden"], outputs: ["ariaHiddenChange"] }, { kind: "component", type: i4$1.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy", "ariaLabel"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: i7.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "subline", "theme", "unreadIndicator", "role", "settingsList", "settingsListFooter", "notification", "searchResultsList"], outputs: ["focusEscapeList"] }, { kind: "component", type: i7.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "counterRole", "counterAriaLabel", "active", "unread", "byline", "ariaRole", "id", "preventClick", "settingsListTpl", "suggestion"], outputs: ["keyDown"], exportAs: ["fdListItem"] }, { kind: "directive", type: i7.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap", "truncate", "scope"] }, { kind: "directive", type: i7.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i7.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "directive", type: i7.ListBylineDirective, selector: "[fdListByline], [fd-list-byline]", inputs: ["twoCol", "wrap"] }, { kind: "directive", type: i7.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { kind: "component", type: i4.MenuComponent, selector: "fd-menu", inputs: ["openOnHoverTime", "ariaLabel", "ariaLabelledby", "id", "config", "mobile", "mobileConfig", "placement", "closeOnEscapeKey", "focusAutoCapture", "disabled", "disableScrollbar", "triggers", "fillControlMode", "closeOnOutsideClick", "noArrow", "focusTrapped", "additionalBodyClass", "closeOnNavigation", "restoreFocusOnClose", "appendTo", "fixedPosition", "scrollStrategy", "isOpen"], outputs: ["isOpenChange", "activePath", "beforeOpen"] }, { kind: "component", type: i4.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: i4.SubmenuComponent, selector: "fd-submenu", inputs: ["ariaLabel", "ariaLabelledby"], exportAs: ["fdSubmenu"] }, { kind: "component", type: i4.MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i4.MenuTitleDirective, selector: "[fd-menu-title]", inputs: ["truncate"] }, { kind: "component", type: i4.MenuAddonDirective, selector: "fd-menu-addon", inputs: ["position", "submenuIndicator", "ariaHidden"] }, { kind: "directive", type: i4.MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "component", type: i5$2.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig", "role", "ariaDescription"] }, { kind: "component", type: i5$2.DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: i5$2.DialogHeaderComponent, selector: "fd-dialog-header", inputs: ["inShellbar"] }, { kind: "component", type: i5$2.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title", "ariaLabel"] }, { kind: "component", type: i6.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["twoLineClamp", "headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i7$2.InitialFocusDirective, selector: "[fdkInitialFocus]", inputs: ["fdkInitialFocus", "enabled", "focusLastElement"] }, { kind: "component", type: i12.ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["status", "statusMessage", "glyph", "glyphFont", "label", "ariaLabel", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate", "ariaRoleDescription"] }, { kind: "component", type: i6$2.PanelComponent, selector: "fd-panel", inputs: ["class", "fixed", "id", "expandId", "expandAriaLabel", "expandAriaLabelledBy", "expanded", "transparent", "noRadius"], outputs: ["expandedChange"] }, { kind: "component", type: i14.ProductSwitchComponent, selector: "fd-product-switch", inputs: ["placement", "disabled", "closeOnEscapeKey", "closeOnOutsideClick", "noArrow", "disableScrollbar", "triggers", "focusTrapped", "focusAutoCapture", "isOpen"], outputs: ["isOpenChange", "beforeOpen"] }, { kind: "component", type: i14.ProductSwitchBodyComponent, selector: "fd-product-switch-body", inputs: ["dragAndDropEnabled", "products", "forceListMode", "busy", "isOpen"], outputs: ["productsChange", "itemClicked", "isOpenChange"] }, { kind: "component", type: i15.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i15.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight", "ariaModal"], outputs: ["onClose"] }, { kind: "component", type: i15.PopoverComponent, selector: "fd-popover", inputs: ["config", "title", "trigger", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll", "placement", "maxWidth", "fillControlMode", "closeOnOutsideClick", "closeOnEscapeKey", "disabled", "triggers", "focusTrapped", "focusAutoCapture", "restoreFocusOnClose", "noArrow", "disableScrollbar", "appendTo", "placementContainer", "scrollStrategy", "cdkPositions", "applyOverlay", "additionalBodyClass", "additionalTriggerClass", "closeOnNavigation", "fixedPosition", "resizable", "bodyAriaLabel", "bodyRole", "bodyAriaLabelledBy", "isOpen"], outputs: ["triggerChange", "isOpenChange", "beforeOpen"] }, { kind: "component", type: i16.ShellbarComponent, selector: "fd-shellbar", inputs: ["size", "breakpoints", "sideNav", "groupFlex", "showNavigationButton", "navigationButtonTemplate", "showBackButton", "navigationButtonLabel", "backButtonLabel", "showSearchFieldOnSizeSmall"], outputs: ["navigationButtonClicked", "backButtonClicked"] }, { kind: "component", type: i16.ProductMenuComponent, selector: "fd-product-menu", inputs: ["closeOnEscapeKey", "closeOnOutsideClick", "triggers", "placement", "disabled", "fillControlMode", "control", "items", "closePopoverOnSelect"] }, { kind: "component", type: i16.ShellbarActionsComponent, selector: "fd-shellbar-actions", inputs: ["user", "userMenu", "closePopoverOnSelect", "assistiveTools", "assistiveToolsCallback"], outputs: ["searchOpen"] }, { kind: "component", type: i16.ShellbarActionComponent, selector: "fd-shellbar-action", inputs: ["glyph", "glyphFont", "callback", "label", "ariaLabel", "title", "notificationLabel", "notificationCount", "fdType", "toggled"] }, { kind: "component", type: i16.ShellbarLogoComponent, selector: "fd-shellbar-logo" }, { kind: "component", type: i16.ShellbarTitleComponent, selector: "fd-shellbar-title" }, { kind: "component", type: i16.ShellbarBrandingComponent, selector: "fd-shellbar-branding", inputs: ["interactiveBranding"] }, { kind: "component", type: i16.ShellbarContextAreaComponent, selector: "fd-shellbar-context-area", outputs: ["contentItemVisibilityChange"] }, { kind: "component", type: i16.ShellbarSeparatorComponent, selector: "fd-shellbar-separator" }, { kind: "directive", type: i16.ShellbarHidePriorityDirective, selector: "[fdShellbarHidePriority]", inputs: ["fdShellbarHidePriority"] }, { kind: "component", type: i17.GenericTagComponent, selector: "[fd-generic-tag]", inputs: ["type", "name", "value", "ariaRoleDescription"] }, { kind: "component", type: i8$1.SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "forceSearchButton", "disableSuggestionsFoundAnnouncer", "showCategoryAllOption", "initialSuggestionTitle", "initialSuggestionSubline", "initialSuggestionEmptyTitle", "initialSuggestionEmptySubline", "suggestionFooter", "searchResultsEmptyTemplate", "searchResultsEmptyDefaultSuggestions", "showAdvancedFilter", "allowEmptySearch", "enableSelection", "suggestionsLoading", "busyIndicatorTitle", "busyIndicatorAriaValueText"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange", "advancedFilterButtonClick", "categoryModeChange", "appearanceChange", "disableRefreshChange", "inputTextChange", "forceSearchButtonChange"] }, { kind: "component", type: i19.UserMenuComponent, selector: "fd-user-menu", inputs: ["mobile"], outputs: ["isOpenChange"] }, { kind: "component", type: i19.UserMenuControlComponent, selector: "fd-user-menu-control", outputs: ["clicked"] }, { kind: "component", type: i19.UserMenuBodyComponent, selector: "fd-user-menu-body" }, { kind: "component", type: i19.UserMenuListComponent, selector: "fd-user-menu-list" }, { kind: "component", type: i19.UserMenuFooterComponent, selector: "fd-user-menu-footer" }, { kind: "directive", type: i19.UserMenuHeaderDirective, selector: "[fd-user-menu-header]" }, { kind: "directive", type: i19.UserMenuSublineDirective, selector: "[fd-user-menu-subline]", inputs: ["truncate"] }, { kind: "directive", type: i19.UserMenuUserNameDirective, selector: "[fd-user-menu-user-name]", inputs: ["truncate"] }, { kind: "directive", type: i19.UserMenuHeaderContainerDirective, selector: "[fd-user-menu-header-container]" }, { kind: "component", type: i19.UserMenuListItemComponent, selector: "[fd-user-menu-list-item]", inputs: ["uniqueId", "icon", "iconAfter", "iconAfterActive", "text", "textId", "truncateText", "subtitle", "subtitleId", "truncateSubtitle", "hasSubmenu", "submenu", "selected"], outputs: ["isOpenChange", "showSubmenu", "updateTitle", "keyDown"] }, { kind: "directive", type: i5.DynamicCommandDirective, selector: "[dynCommand]", inputs: ["dynCommand", "mo", "enableCommand"], outputs: ["commandClick"] }, { kind: "directive", type: i5.MobileDirective, selector: "[mobile]" }, { kind: "directive", type: i5.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "directive", type: i5.RouteFormChangeDirective, selector: "[routeFormChange]", inputs: ["handleBodyClick"], outputs: ["stateChanged"] }, { kind: "component", type: i3.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: NotificationGroupComponent, selector: "bt-notification-group", inputs: ["notifications", "loading", "deviceSize", "notificationCount", "notificationReport", "dateGroupOnly"], outputs: ["viewed", "remove", "actionClick", "showEvent", "loadMore"] }, { kind: "pipe", type: i1$2.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i5.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i5.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: SuggestionsFilterPipe, name: "suggestionsFilter" }, { kind: "pipe", type: SuggestionsCountFilterPipe, name: "suggestionsCountFilter" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3871
4044
|
}
|
|
3872
4045
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: BarsaShellbarComponent, decorators: [{
|
|
3873
4046
|
type: Component,
|
|
3874
|
-
args: [{ selector: 'bt-barsa-shellbar', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<fd-shellbar\r\n [ngClass]=\"deviceSize\"\r\n routeFormChange\r\n (stateChanged)=\"onRouteFormStateChange()\"\r\n [showNavigationButton]=\"sideMenuTemplate || showSidebar ? true : false\"\r\n (navigationButtonClicked)=\"$event.stopPropagation(); isOpenQuickAccessChanged.emit(!isOpenQuickAccess)\"\r\n [handleBodyClick]=\"true\"\r\n [size]=\"deviceSize === 's' && userLoggedIn ? 'm' : deviceSize\"\r\n>\r\n @if(!hideBranding){\r\n <fd-shellbar-branding [interactiveBranding]=\"true\">\r\n <fd-shellbar-logo>\r\n <a\r\n [style.backgroundImage]=\"\r\n 'url(' + (logo?.FileId | picFieldSrc: 'GetPictureFromFileInfo':null) + ')'\r\n \"\r\n href=\"/\"\r\n class=\"fd-shellbar__logo fd-shellbar__logo--image-replaced tw-bg-center !tw-bg-auto\"\r\n [attr.aria-label]=\"subtitle | bbbTranslate\"\r\n ></a>\r\n </fd-shellbar-logo>\r\n @if(!brandingTitleHidden){\r\n <fd-shellbar-title> {{ subtitle | bbbTranslate }} {{ showVersion ? appVersion : '' }}</fd-shellbar-title>\r\n }\r\n </fd-shellbar-branding>\r\n }\r\n <fd-shellbar-context-area>\r\n <span\r\n [class.hide]=\"!informativeText\"\r\n fdShellbarHidePriority=\"1\"\r\n fd-object-status\r\n [status]=\"informativeStatus || 'informative'\"\r\n [inverted]=\"true\"\r\n [label]=\"informativeText\"\r\n ></span>\r\n <fd-product-switch\r\n fdShellbarHidePriority=\"3\"\r\n [class.hide]=\"!productSwitcher?.length || deviceSize === 's'\"\r\n [restoreFocusOnClose]=\"false\"\r\n >\r\n <fd-product-switch-body [products]=\"productSwitcher\" [forceListMode]=\"deviceSize === 's'\">\r\n </fd-product-switch-body>\r\n </fd-product-switch>\r\n <span\r\n [class.hide]=\"!showSearchInSystem\"\r\n fdShellbarHidePriority=\"4\"\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"search\"\r\n fdType=\"transparent\"\r\n (click)=\"onOpenSearchDialog()\"\r\n >\r\n </span>\r\n <fd-product-menu\r\n fdShellbarHidePriority=\"2\"\r\n [control]=\"productMenuControl\"\r\n [closePopoverOnSelect]=\"true\"\r\n [items]=\"productMenuItems1\"\r\n [class.hide]=\"!productMenuItems1?.length\"\r\n >\r\n </fd-product-menu>\r\n <fd-shellbar-separator fdshellbarhidepriority=\"5\" style=\"flex-shrink: 0\"></fd-shellbar-separator>\r\n @if(!isCompactShellbar){ @for(dastor of dastoratSarasari; track dastor.label){ @if(dastor.children?.length){\r\n <button\r\n type=\"button\"\r\n class=\"fd-shellbar__button\"\r\n [fdShellbarHidePriority]=\"dastor.priority\"\r\n fd-button\r\n fdType=\"transparent\"\r\n [glyph]=\"dastor.glyph\"\r\n [label]=\"dastor.label | bbbTranslate\"\r\n [fdMenuTrigger]=\"globalCommandMenu\"\r\n ></button>\r\n <fd-menu #globalCommandMenu>\r\n @for(item of dastor.children; track item.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n globalSubmenuTemplate;\r\n context: { item: item, parentSubmenu: undefined, rootMenu: globalCommandMenu }\r\n \"\r\n ></ng-container>\r\n }\r\n <ng-template\r\n #globalSubmenuTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n globalSubmenuTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n } @else {\r\n <span\r\n [fdShellbarHidePriority]=\"dastor.priority\"\r\n fd-button\r\n [glyph]=\"dastor.glyph\"\r\n class=\"fd-shellbar__button\"\r\n [label]=\"dastor.useImageGlyph ? undefined : (dastor.label | bbbTranslate)\"\r\n [class.shellbar-command-action--image-glyph]=\"dastor.useImageGlyph\"\r\n (click)=\"dastor.callback?.()\"\r\n >\r\n @if(dastor.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"dastor.glyph\"\r\n [alt]=\"dastor.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n <span class=\"shellbar-command-action__label\">{{ dastor.label | bbbTranslate }}</span>\r\n }\r\n </span>\r\n } } @if(workflowMenuItems.length){\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n [label]=\"'Workflow' | bbbTranslate\"\r\n [fdMenu]=\"true\"\r\n [fdMenuTrigger]=\"workflowMenu\"\r\n ></button>\r\n <fd-menu #workflowMenu>\r\n @for(item of workflowMenuItems; track item.key) {\r\n <li fd-menu-item>\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n (click)=\"$event.preventDefault(); workflowMenu.close(); item.callback?.()\"\r\n >\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n }\r\n </fd-menu>\r\n } @for(group of groupedCommandMenus; track group.Caption){\r\n <button fd-button [label]=\"group.Caption | bbbTranslate\" [fdMenu]=\"true\" [fdMenuTrigger]=\"groupMenu\"></button>\r\n <fd-menu #groupMenu>\r\n @for(item of group.Commands; track item.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n groupSubmenuTemplate;\r\n context: { item: item, parentSubmenu: undefined, rootMenu: groupMenu }\r\n \"\r\n ></ng-container>\r\n }\r\n <ng-template\r\n #groupSubmenuTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n class=\"tw-gap-2\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n groupSubmenuTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n } } @if(isCompactShellbar && mobileCommandNodes.length){\r\n <button\r\n type=\"button\"\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"overflow\"\r\n [attr.aria-label]=\"'Commands' | bbbTranslate\"\r\n [title]=\"'Commands' | bbbTranslate\"\r\n [fdMenuTrigger]=\"mobileCommandsMenu\"\r\n ></button>\r\n <fd-menu #mobileCommandsMenu [mobile]=\"true\">\r\n @for(node of mobileCommandNodes; track node.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n mobileCommandTemplate;\r\n context: { item: node, parentSubmenu: undefined, rootMenu: mobileCommandsMenu }\r\n \"\r\n ></ng-container>\r\n }\r\n <ng-template\r\n #mobileCommandTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n mobileCommandTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n }\r\n </fd-shellbar-context-area>\r\n\r\n @if(inputEnableSearch()){\r\n <fdp-search-field\r\n [placeholder]=\"'Search' | bbbTranslate\"\r\n (inputChange)=\"onSearchInputChange($event)\"\r\n [suggestions]=\"suggestions\"\r\n (searchSubmit)=\"onSearchSubmit($event)\"\r\n ></fdp-search-field>\r\n }\r\n <fd-shellbar-actions\r\n #shellbarActions\r\n (searchOpen)=\"onSearchOpen($event)\"\r\n [class.flat-buttons]=\"flatButtons?.length && !showSearch()\"\r\n >\r\n @if(deviceSize !== 's' && userLoggedIn && date){\r\n <span class=\"bt-shellbar-date\" [title]=\"date.full\">\r\n <fd-icon class=\"bt-shellbar-date__icon\" glyph=\"calendar\" [attr.aria-hidden]=\"true\"></fd-icon>\r\n <span class=\"bt-shellbar-date__text\">{{ date.compact }}</span>\r\n </span>\r\n }\r\n <fd-user-menu>\r\n <fd-user-menu-control>\r\n <fd-avatar\r\n size=\"xs\"\r\n [circle]=\"true\"\r\n [attr.ariaLabel]=\"displayName\"\r\n [image]=\"userInfo?.Url\"\r\n ></fd-avatar>\r\n </fd-user-menu-control>\r\n <fd-user-menu-body>\r\n <div fd-user-menu-header>\r\n <fd-avatar\r\n [circle]=\"true\"\r\n [size]=\"deviceSize\"\r\n [label]=\"userInfo?.Url ? '' : displayName\"\r\n zoomGlyph=\"\"\r\n title=\"Edit avatar\"\r\n [image]=\"userInfo?.Url\"\r\n ></fd-avatar>\r\n <div fd-user-menu-header-container>\r\n <div fd-user-menu-user-name>{{ displayName }}</div>\r\n @for(item of userInfo?.Sublines;track item){\r\n <div fd-user-menu-subline>{{ item }}</div>\r\n }\r\n </div>\r\n @if(profileDynamicCommandText){\r\n <button\r\n fd-button\r\n [label]=\"profileDynamicCommandText || 'Edit' | bbbTranslate\"\r\n [glyph]=\"profileDynamicCommandIcon || 'edit'\"\r\n [attr.ariaLabel]=\"'\u0648\u06CC\u0631\u0627\u06CC\u0634 \u067E\u0631\u0648\u0641\u0627\u06CC\u0644'\"\r\n [dynCommand]=\"profileDynamicCommand\"\r\n bodyClick\r\n ></button>\r\n }\r\n </div>\r\n <div fd-user-menu-content-container>\r\n @if(userMenu?.length){\r\n <fd-panel transparent noRadius [fixed]=\"true\" class=\"hide-panel-header\"> </fd-panel>}\r\n\r\n <fd-user-menu-list>\r\n @for(item of userMenu;track item.text){\r\n <li fd-user-menu-list-item [icon]=\"item.icon\" [text]=\"item.text\" (click)=\"item.callback()\"></li>\r\n }\r\n </fd-user-menu-list>\r\n </div>\r\n </fd-user-menu-body>\r\n\r\n <fd-user-menu-footer>\r\n <div fd-bar barDesign=\"footer\">\r\n <div fd-bar-right>\r\n @for(item of footerButtons;track item.text){\r\n <button\r\n fd-button\r\n [label]=\"item.text\"\r\n fdType=\"transparent\"\r\n [glyph]=\"item.icon\"\r\n [attr.ariaLabel]=\"item.text\"\r\n (click)=\"item.callback()\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n </fd-user-menu-footer>\r\n </fd-user-menu>\r\n @for (action of actions; track action.label) {\r\n <fd-shellbar-action\r\n [glyph]=\"action.glyph\"\r\n [callback]=\"action.callback\"\r\n [label]=\"action.label\"\r\n [notificationLabel]=\"action.notificationLabel\"\r\n [notificationCount]=\"action.notificationCount\"\r\n >\r\n </fd-shellbar-action>\r\n\r\n } @if (!settings?.HideLanguage && multiLanguages && userLoggedIn) {\r\n <button\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"world\"\r\n fdType=\"transparent\"\r\n [fdMenuTrigger]=\"menu\"\r\n ></button>\r\n } @if (deviceSize !== 's' && userLoggedIn && !hideNotifications) {\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notification'\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notification Label'\"\r\n [callback]=\"onOpenNotification\"\r\n >\r\n </fd-shellbar-action>\r\n } @if (deviceSize === 's' && userLoggedIn && !hideNotifications) {\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notifications' | bbbTranslate\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notifications' | bbbTranslate\"\r\n [callback]=\"onBellNotification\"\r\n >\r\n </fd-shellbar-action>\r\n } @if(flatButtons?.length){\r\n <div class=\"tw-flex tw-gap-1\">\r\n @if (!settings?.HideLanguage && multiLanguages){\r\n <button\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"world\"\r\n fdType=\"transparent\"\r\n [fdMenuTrigger]=\"menu\"\r\n ></button>\r\n } @for(btn of flatButtons;track btn.label){\r\n <button\r\n fd-button\r\n [label]=\"btn.text\"\r\n [glyph]=\"btn.text === ('Login' | bbbTranslate) ? 'person-placeholder' : null\"\r\n fdType=\"emphasized\"\r\n (click)=\"btn.callback()\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n </fd-shellbar-actions>\r\n <fd-popover\r\n [(isOpen)]=\"isOpenNotificatoin\"\r\n [noArrow]=\"true\"\r\n placement=\"top-end\"\r\n title=\"Notification Popover\"\r\n [appendTo]=\"el\"\r\n [mobile]=\"false\"\r\n #popoverComponent\r\n >\r\n <fd-popover-control>\r\n <!-- <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notification'\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notification Label'\"\r\n [callback]=\"onOpenNotification\"\r\n >\r\n </fd-shellbar-action> -->\r\n </fd-popover-control>\r\n <fd-popover-body style=\"min-width: 320px; overflow-x: auto; box-shadow: var(--sapContent_Shadow0)\">\r\n @if(isOpenNotificatoin){\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationsUnreadCount }\"\r\n ></ng-container>\r\n }\r\n </fd-popover-body>\r\n </fd-popover>\r\n</fd-shellbar>\r\n\r\n<ng-template #loading>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n\r\n<div\r\n *ngIf=\"sideMenuTemplate\"\r\n class=\"sidemenu-h tw-fixed tw-transition-all tw-z-[100] tw-shadow-2xl tw-overflow-auto\"\r\n [class.tw-w-screen]=\"isMobile\"\r\n [class.-tw-right-full]=\"isMobile\"\r\n [class.tw-w-96]=\"!isMobile\"\r\n [class.-tw-right-96]=\"!isMobile && rtl\"\r\n [class.!tw-right-0]=\"rtl && isOpenQuickAccess\"\r\n [class.-tw-left-96]=\"!isMobile && !rtl\"\r\n [class.!tw-left-0]=\"!rtl && isOpenQuickAccess\"\r\n (click)=\"$event.stopPropagation()\"\r\n>\r\n <ng-container *ngTemplateOutlet=\"sideMenuTemplate\"></ng-container>\r\n</div>\r\n\r\n<fd-menu #menu>\r\n <ul fd-list>\r\n @for (culture of cultures | keyvalue; track culture) {\r\n <li fd-list-item>\r\n <a fd-list-link (click)=\"onCultureChange(culture.value)\">\r\n <span fd-list-title class=\"tw-flex tw-items-center tw-gap-1\">\r\n <img width=\"14px\" height=\"12px\" [src]=\"'/assets/flags/' + culture.key + '.png'\" loading=\"lazy\" />\r\n <span class=\"culture-abbrivation\" [ngClass]=\"culture.key\"> {{ culture.key }}</span>\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n</fd-menu>\r\n<ng-template #notificationGroupTpl let-notificationCount=\"notificationCount\">\r\n <bt-notification-group\r\n [notificationReport]=\"notificationReport\"\r\n [notificationCount]=\"notificationCount\"\r\n [dateGroupOnly]=\"shellbarData?.NotificationGroupByDateOnly === true\"\r\n (actionClick)=\"popoverComponent.close()\"\r\n [deviceSize]=\"deviceSize\"\r\n ></bt-notification-group>\r\n</ng-template>\r\n\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #notificationsDialog>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-header>\r\n <h1 id=\"fd-dialog-header-10\" fd-title>{{ 'Notification' | bbbTranslate }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialog.dismiss()\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body class=\"mobile\">\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationsUnreadCount }\"\r\n ></ng-container>\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n<ng-template #searchContent>\r\n <ul fd-list [byline]=\"true\">\r\n @for (item of (suggestions | suggestionsFilter:(selectedSuggestionFilter() ?? 'all')) ; track item.data.path) {\r\n <li\r\n fd-list-item\r\n [interactive]=\"true\"\r\n (click)=\"onSearchItemClick(item)\"\r\n class=\"!tw-ps-1\"\r\n [class.!tw-bg-blue-600]=\"item.data.source === 'Report'\"\r\n [class.!tw-bg-green-600]=\"item.data.source === 'Command'\"\r\n [class.!tw-bg-gray-600]=\"item.data.source !== 'Command' && item.data.source !== 'Report'\"\r\n >\r\n <a fd-list-link [attr.href]=\"!item.data.url ? null : item.data.url\" (click)=\"onSearchLink(item, $event)\">\r\n <div fd-list-content>\r\n <div fd-list-title>{{ item.value }}</div>\r\n <div fd-list-byline>{{ item.data.path }}</div>\r\n </div>\r\n <span fd-list-secondary>\r\n @if(item.data.canPin){ @let favorite = isFavorite(item);\r\n <button\r\n class=\"!tw-m-[0.1rem]\"\r\n [ariaLabel]=\"(favorite ? '\u062D\u0630\u0641 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627' : '\u0627\u0641\u0632\u0648\u062F\u0646 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627') | bbbTranslate\"\r\n [title]=\"(favorite ? '\u062D\u0630\u0641 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627' : '\u0627\u0641\u0632\u0648\u062F\u0646 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627') | bbbTranslate\"\r\n [attr.aria-pressed]=\"favorite\"\r\n fd-button\r\n [glyph]=\"favorite ? 'favorite' : 'unfavorite'\"\r\n (click)=\"oFavoriteLink(item, $event)\"\r\n ></button>\r\n }\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n</ng-template>\r\n<ng-template #searchSubHeader>\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <fd-input-group\r\n glyph=\"search\"\r\n fdkInitialFocus\r\n glyphAriaLabel=\"Submit\"\r\n [button]=\"true\"\r\n (input)=\"onSearchInputChange($event)\"\r\n >\r\n </fd-input-group>\r\n @if(suggestions?.length || selectedSuggestionFilter()){\r\n <div class=\"tw-flex tw-gap-4 tw-overflow-x-auto suggestion-filters-cat tw-pb-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u0647\u0645\u0647',\r\n filter: 'all',\r\n active: selectedSuggestionFilter() === null,\r\n count: (suggestions | suggestionsCountFilter: 'all'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u0632\u06CC\u0631\u0633\u06CC\u0633\u062A\u0645',\r\n filter: 'subsystem',\r\n active: selectedSuggestionFilter() === 'subsystem',\r\n count: (suggestions | suggestionsCountFilter: 'subsystem'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u06AF\u0631\u0648\u0647 \u0646\u0648\u06CC\u06AF\u06CC\u062A\u0648\u0631',\r\n filter: 'navgroup',\r\n active: selectedSuggestionFilter() === 'navgroup',\r\n count: (suggestions | suggestionsCountFilter: 'navgroup'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u06AF\u0632\u0627\u0631\u0634\u0627\u062A',\r\n filter: 'report',\r\n active: selectedSuggestionFilter() === 'report',\r\n count: (suggestions | suggestionsCountFilter: 'report'),\r\n type: 'information'\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u062F\u0633\u062A\u0648\u0631\u0627\u062A',\r\n filter: 'command',\r\n active: selectedSuggestionFilter() === 'command',\r\n count: (suggestions | suggestionsCountFilter: 'command'),\r\n type: 'success'\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #catTag let-name=\"name\" let-filter=\"filter\" let-active=\"active\" let-count=\"count\" let-type=\"type\">\r\n <!-- \u00AB\u0647\u0645\u0647\u00BB \u0648 \u06AF\u0631\u0648\u0647 \u0641\u0639\u0627\u0644 \u0647\u0645\u06CC\u0634\u0647 \u062F\u06CC\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u0646\u062F (\u0641\u0639\u0627\u0644 \u0628\u0627 \u0635\u0641\u0631 \u0646\u062A\u06CC\u062C\u0647 \u00AB\u06F0\u00BB \u0646\u0634\u0627\u0646 \u0645\u06CC\u200C\u062F\u0647\u062F)\u061B \u06AF\u0631\u0648\u0647 \u063A\u06CC\u0631\u0641\u0639\u0627\u0644 \u0641\u0642\u0637 \u0628\u0627 \u0646\u062A\u06CC\u062C\u0647 -->\r\n @if(filter === 'all' || active || (count && count!==' ')){\r\n <div\r\n fd-generic-tag\r\n class=\"bt-suggestion-filter\"\r\n [class.bt-suggestion-filter--active]=\"active\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-pressed]=\"active\"\r\n [name]=\"name\"\r\n [value]=\"count || '0'\"\r\n [type]=\"type\"\r\n (click)=\"onSuggestionFilterClick(filter)\"\r\n (keydown.enter)=\"onSuggestionFilterClick(filter); $event.preventDefault()\"\r\n (keydown.space)=\"onSuggestionFilterClick(filter); $event.preventDefault()\"\r\n ></div>\r\n }\r\n</ng-template>\r\n", styles: [":host{display:block;position:relative}:host fd-user-menu{background-color:transparent}:host fd-shellbar-actions.flat-buttons{flex-direction:row-reverse}:host.hide-user-menu fd-shellbar-actions ::ng-deep .fd-user-menu{display:none}:host ::ng-deep fd-shellbar-actions fd-avatar{background-color:transparent!important;color:var(--sapShell_InteractiveTextColor, #d1e8ff)}:host ::ng-deep .fd-shellbar--s .fd-shellbar__title{display:block;max-width:10rem;text-wrap:auto;font-size:.8rem}:host ::ng-deep fd-combobox .fd-input-group input{min-width:2rem;height:1.625rem;margin-top:.1875rem;margin-bottom:.1875rem;padding:0 .5rem;box-sizing:border-box}:host ::ng-deep fd-combobox .fd-input-group span{min-width:2rem;min-height:1.625rem}:host ::ng-deep .fd-shellbar__subtitle{font-size:1rem}:host ::ng-deep .fd-shellbar--s ::ng-deep .fd-shellbar__subtitle{display:block;overflow:hidden;text-wrap:wrap;width:100%;word-break:break-all}.fd-shellbar__logo{min-height:3rem;height:3rem;width:3rem;margin:0!important}.extra-button-wrapper{display:flex;height:100%;align-items:center;position:absolute;left:10px;top:0;gap:.285rem}.bt-shellbar-date{display:inline-flex;align-items:center;gap:.285rem;flex-shrink:0;white-space:nowrap;padding:0 .5rem;font-size:.875rem;line-height:1;color:var(--sapShell_InteractiveTextColor, #d1e8ff);cursor:default;-webkit-user-select:none;user-select:none}.bt-shellbar-date__icon{font-size:1rem;opacity:.85}.bt-shellbar-date__text{font-variant-numeric:tabular-nums}.hide-panel-header ::ng-deep .fd-panel__header{min-height:auto;height:auto}:host ::ng-deep .shellbar-command-action--image-glyph{gap:.375rem}:host ::ng-deep .shellbar-command-action--image-glyph ::ng-deep fd-icon{display:none}.shellbar-command-action__image{width:1rem;height:1rem;object-fit:contain;flex-shrink:0}[fd-menu-title],.shellbar-command-action__label{white-space:nowrap!important}.bt-suggestion-filter{cursor:pointer;flex-shrink:0}.bt-suggestion-filter--active{outline:.125rem solid var(--sapSelectedColor, var(--sapContent_FocusColor, currentColor));outline-offset:.0625rem;font-weight:700}.bt-suggestion-filter:focus-visible{box-shadow:0 0 0 .25rem var(--sapContent_FocusColor, currentColor)}:host ::ng-deep .fd-shellbar{height:var(--shellbar-height)}:host ::ng-deep fd-shellbar.s .fd-shellbar__product{max-width:120px}:host ::ng-deep fd-shellbar.s .fd-shellbar--has-context-area{justify-content:center!important}:host ::ng-deep fd-shellbar.s .fd-shellbar--has-context-area .fd-shellbar__action--shrink button{color:var(--fdButtonIconColor, var(--sapShell_InteractiveTextColor))}\n"] }]
|
|
4047
|
+
args: [{ selector: 'bt-barsa-shellbar', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<fd-shellbar\r\n [ngClass]=\"deviceSize\"\r\n routeFormChange\r\n (stateChanged)=\"onRouteFormStateChange()\"\r\n [showNavigationButton]=\"sideMenuTemplate || showSidebar ? true : false\"\r\n (navigationButtonClicked)=\"$event.stopPropagation(); isOpenQuickAccessChanged.emit(!isOpenQuickAccess)\"\r\n [handleBodyClick]=\"true\"\r\n [size]=\"deviceSize === 's' && userLoggedIn ? 'm' : deviceSize\"\r\n>\r\n @if(!hideBranding){\r\n <fd-shellbar-branding [interactiveBranding]=\"true\">\r\n <fd-shellbar-logo>\r\n <a\r\n [style.backgroundImage]=\"\r\n 'url(' + (logo?.FileId | picFieldSrc: 'GetPictureFromFileInfo':null) + ')'\r\n \"\r\n href=\"/\"\r\n class=\"fd-shellbar__logo fd-shellbar__logo--image-replaced tw-bg-center !tw-bg-auto\"\r\n [attr.aria-label]=\"subtitle | bbbTranslate\"\r\n ></a>\r\n </fd-shellbar-logo>\r\n @if(!brandingTitleHidden){\r\n <fd-shellbar-title> {{ subtitle | bbbTranslate }} {{ showVersion ? appVersion : '' }}</fd-shellbar-title>\r\n }\r\n </fd-shellbar-branding>\r\n }\r\n <fd-shellbar-context-area>\r\n <span\r\n [class.hide]=\"!informativeText\"\r\n fdShellbarHidePriority=\"1\"\r\n fd-object-status\r\n [status]=\"informativeStatus || 'informative'\"\r\n [inverted]=\"true\"\r\n [label]=\"informativeText\"\r\n ></span>\r\n <fd-product-switch\r\n fdShellbarHidePriority=\"3\"\r\n [class.hide]=\"!productSwitcher?.length || deviceSize === 's'\"\r\n [restoreFocusOnClose]=\"false\"\r\n >\r\n <fd-product-switch-body [products]=\"productSwitcher\" [forceListMode]=\"deviceSize === 's'\">\r\n </fd-product-switch-body>\r\n </fd-product-switch>\r\n <span\r\n [class.hide]=\"!showSearchInSystem\"\r\n fdShellbarHidePriority=\"4\"\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"search\"\r\n fdType=\"transparent\"\r\n (click)=\"onOpenSearchDialog()\"\r\n >\r\n </span>\r\n <fd-product-menu\r\n fdShellbarHidePriority=\"2\"\r\n [control]=\"productMenuControl\"\r\n [closePopoverOnSelect]=\"true\"\r\n [items]=\"productMenuItems1\"\r\n [class.hide]=\"!productMenuItems1?.length\"\r\n >\r\n </fd-product-menu>\r\n <fd-shellbar-separator fdshellbarhidepriority=\"5\" style=\"flex-shrink: 0\"></fd-shellbar-separator>\r\n <!--\r\n BTILES-006: \u0633\u0631\u0631\u06CC\u0632 priority+ \u062F\u0633\u062A\u0648\u0631\u0627\u062A. \u0641\u0647\u0631\u0633\u062A \u0648\u0627\u062D\u062F (\u0633\u0631\u0627\u0633\u0631\u06CC\u060C workflow\u060C \u06AF\u0631\u0648\u0647\u06CC) \u062A\u0627 \u062C\u0627\u06CC\u06CC \u06A9\u0647 \u062C\u0627 \u0645\u06CC\u200C\u0634\u0648\u062F \u062F\u0631 \u0646\u0648\u0627\u0631 \u0627\u0633\u062A\r\n \u0648 \u0628\u0642\u06CC\u0647 \u0627\u0632 \u0627\u0646\u062A\u0647\u0627 \u062F\u0631 \u0645\u0646\u0648\u06CC \u22EF. fdShellbarHidePriority \u0639\u0645\u062F\u0627\u064B attribute \u0627\u06CC\u0633\u062A\u0627\u0633\u062A (binding \u062F\u0631 DOM attribute \u0646\u0645\u06CC\u200C\u0633\u0627\u0632\u062F)\r\n \u062A\u0627 \u067E\u0646\u0647\u0627\u0646\u200C\u0633\u0627\u0632\u06CC fundamental \u0627\u06CC\u0646 \u0638\u0631\u0641 \u0631\u0627 \u0622\u062E\u0631 \u0627\u0632 \u0647\u0645\u0647 \u067E\u0646\u0647\u0627\u0646 \u06A9\u0646\u062F.\r\n -->\r\n <div class=\"bt-shellbar-commands\" fdShellbarHidePriority=\"0\" #commandsHost>\r\n @for(entry of visibleCommandEntries(); track entry.id){\r\n <ng-container *ngTemplateOutlet=\"commandEntryTpl; context: { entry: entry, measure: false }\"></ng-container>\r\n } @if(hiddenCommandNodes().length){\r\n <ng-container *ngTemplateOutlet=\"overflowEntryTpl; context: { measure: false }\"></ng-container>\r\n }\r\n <!-- \u0644\u0627\u06CC\u0647\u200C\u06CC \u0627\u0646\u062F\u0627\u0632\u0647\u200C\u06AF\u06CC\u0631\u06CC \u067E\u0646\u0647\u0627\u0646: \u0647\u0645\u0647\u200C\u06CC \u0648\u0631\u0648\u062F\u06CC\u200C\u0647\u0627 \u0648 \u062F\u06A9\u0645\u0647\u200C\u06CC \u22EF \u0628\u0627 \u0647\u0645\u0627\u0646 markup \u0646\u0648\u0627\u0631\u060C \u0628\u062F\u0648\u0646 \u0645\u0646\u0648/\u06A9\u0644\u06CC\u06A9 -->\r\n <div class=\"bt-shellbar-commands__measure\" #commandsMeasure aria-hidden=\"true\" inert>\r\n @for(entry of commandEntries(); track entry.id){\r\n <ng-container *ngTemplateOutlet=\"commandEntryTpl; context: { entry: entry, measure: true }\"></ng-container>\r\n }\r\n <ng-container *ngTemplateOutlet=\"overflowEntryTpl; context: { measure: true }\"></ng-container>\r\n </div>\r\n </div>\r\n </fd-shellbar-context-area>\r\n\r\n @if(inputEnableSearch()){\r\n <fdp-search-field\r\n [placeholder]=\"'Search' | bbbTranslate\"\r\n (inputChange)=\"onSearchInputChange($event)\"\r\n [suggestions]=\"suggestions\"\r\n (searchSubmit)=\"onSearchSubmit($event)\"\r\n ></fdp-search-field>\r\n }\r\n <fd-shellbar-actions\r\n #shellbarActions\r\n (searchOpen)=\"onSearchOpen($event)\"\r\n [class.flat-buttons]=\"flatButtons?.length && !showSearch()\"\r\n >\r\n @if(deviceSize !== 's' && userLoggedIn && date){\r\n <span class=\"bt-shellbar-date\" [title]=\"date.full\">\r\n <fd-icon class=\"bt-shellbar-date__icon\" glyph=\"calendar\" [attr.aria-hidden]=\"true\"></fd-icon>\r\n <span class=\"bt-shellbar-date__text\">{{ date.compact }}</span>\r\n </span>\r\n }\r\n <fd-user-menu>\r\n <fd-user-menu-control>\r\n <fd-avatar\r\n size=\"xs\"\r\n [circle]=\"true\"\r\n [attr.ariaLabel]=\"displayName\"\r\n [image]=\"userInfo?.Url\"\r\n ></fd-avatar>\r\n </fd-user-menu-control>\r\n <fd-user-menu-body>\r\n <div fd-user-menu-header>\r\n <fd-avatar\r\n [circle]=\"true\"\r\n [size]=\"deviceSize\"\r\n [label]=\"userInfo?.Url ? '' : displayName\"\r\n zoomGlyph=\"\"\r\n title=\"Edit avatar\"\r\n [image]=\"userInfo?.Url\"\r\n ></fd-avatar>\r\n <div fd-user-menu-header-container>\r\n <div fd-user-menu-user-name>{{ displayName }}</div>\r\n @for(item of userInfo?.Sublines;track item){\r\n <div fd-user-menu-subline>{{ item }}</div>\r\n }\r\n </div>\r\n @if(profileDynamicCommandText){\r\n <button\r\n fd-button\r\n [label]=\"profileDynamicCommandText || 'Edit' | bbbTranslate\"\r\n [glyph]=\"profileDynamicCommandIcon || 'edit'\"\r\n [attr.ariaLabel]=\"'\u0648\u06CC\u0631\u0627\u06CC\u0634 \u067E\u0631\u0648\u0641\u0627\u06CC\u0644'\"\r\n [dynCommand]=\"profileDynamicCommand\"\r\n bodyClick\r\n ></button>\r\n }\r\n </div>\r\n <div fd-user-menu-content-container>\r\n @if(userMenu?.length){\r\n <fd-panel transparent noRadius [fixed]=\"true\" class=\"hide-panel-header\"> </fd-panel>}\r\n\r\n <fd-user-menu-list>\r\n @for(item of userMenu;track item.text){\r\n <li fd-user-menu-list-item [icon]=\"item.icon\" [text]=\"item.text\" (click)=\"item.callback()\"></li>\r\n }\r\n </fd-user-menu-list>\r\n </div>\r\n </fd-user-menu-body>\r\n\r\n <fd-user-menu-footer>\r\n <div fd-bar barDesign=\"footer\">\r\n <div fd-bar-right>\r\n @for(item of footerButtons;track item.text){\r\n <button\r\n fd-button\r\n [label]=\"item.text\"\r\n fdType=\"transparent\"\r\n [glyph]=\"item.icon\"\r\n [attr.ariaLabel]=\"item.text\"\r\n (click)=\"item.callback()\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n </fd-user-menu-footer>\r\n </fd-user-menu>\r\n @for (action of actions; track action.label) {\r\n <fd-shellbar-action\r\n [glyph]=\"action.glyph\"\r\n [callback]=\"action.callback\"\r\n [label]=\"action.label\"\r\n [notificationLabel]=\"action.notificationLabel\"\r\n [notificationCount]=\"action.notificationCount\"\r\n >\r\n </fd-shellbar-action>\r\n\r\n } @if (!settings?.HideLanguage && multiLanguages && userLoggedIn) {\r\n <button\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"world\"\r\n fdType=\"transparent\"\r\n [fdMenuTrigger]=\"menu\"\r\n ></button>\r\n } @if (deviceSize !== 's' && userLoggedIn && !hideNotifications) {\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notification'\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notification Label'\"\r\n [callback]=\"onOpenNotification\"\r\n >\r\n </fd-shellbar-action>\r\n } @if (deviceSize === 's' && userLoggedIn && !hideNotifications) {\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notifications' | bbbTranslate\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notifications' | bbbTranslate\"\r\n [callback]=\"onBellNotification\"\r\n >\r\n </fd-shellbar-action>\r\n } @if(flatButtons?.length){\r\n <div class=\"tw-flex tw-gap-1\">\r\n @if (!settings?.HideLanguage && multiLanguages){\r\n <button\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n glyph=\"world\"\r\n fdType=\"transparent\"\r\n [fdMenuTrigger]=\"menu\"\r\n ></button>\r\n } @for(btn of flatButtons;track btn.label){\r\n <button\r\n fd-button\r\n [label]=\"btn.text\"\r\n [glyph]=\"btn.text === ('Login' | bbbTranslate) ? 'person-placeholder' : null\"\r\n fdType=\"emphasized\"\r\n (click)=\"btn.callback()\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n </fd-shellbar-actions>\r\n <fd-popover\r\n [(isOpen)]=\"isOpenNotificatoin\"\r\n [noArrow]=\"true\"\r\n placement=\"top-end\"\r\n title=\"Notification Popover\"\r\n [appendTo]=\"el\"\r\n [mobile]=\"false\"\r\n #popoverComponent\r\n >\r\n <fd-popover-control>\r\n <!-- <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notification'\"\r\n [notificationCount]=\"notificationsUnreadCount\"\r\n [notificationLabel]=\"'Notification Label'\"\r\n [callback]=\"onOpenNotification\"\r\n >\r\n </fd-shellbar-action> -->\r\n </fd-popover-control>\r\n <fd-popover-body style=\"min-width: 320px; overflow-x: auto; box-shadow: var(--sapContent_Shadow0)\">\r\n @if(isOpenNotificatoin){\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationsUnreadCount }\"\r\n ></ng-container>\r\n }\r\n </fd-popover-body>\r\n </fd-popover>\r\n</fd-shellbar>\r\n\r\n<ng-template #loading>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n\r\n<div\r\n *ngIf=\"sideMenuTemplate\"\r\n class=\"sidemenu-h tw-fixed tw-transition-all tw-z-[100] tw-shadow-2xl tw-overflow-auto\"\r\n [class.tw-w-screen]=\"isMobile\"\r\n [class.-tw-right-full]=\"isMobile\"\r\n [class.tw-w-96]=\"!isMobile\"\r\n [class.-tw-right-96]=\"!isMobile && rtl\"\r\n [class.!tw-right-0]=\"rtl && isOpenQuickAccess\"\r\n [class.-tw-left-96]=\"!isMobile && !rtl\"\r\n [class.!tw-left-0]=\"!rtl && isOpenQuickAccess\"\r\n (click)=\"$event.stopPropagation()\"\r\n>\r\n <ng-container *ngTemplateOutlet=\"sideMenuTemplate\"></ng-container>\r\n</div>\r\n\r\n<fd-menu #menu>\r\n <ul fd-list>\r\n @for (culture of cultures | keyvalue; track culture) {\r\n <li fd-list-item>\r\n <a fd-list-link (click)=\"onCultureChange(culture.value)\">\r\n <span fd-list-title class=\"tw-flex tw-items-center tw-gap-1\">\r\n <img width=\"14px\" height=\"12px\" [src]=\"'/assets/flags/' + culture.key + '.png'\" loading=\"lazy\" />\r\n <span class=\"culture-abbrivation\" [ngClass]=\"culture.key\"> {{ culture.key }}</span>\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n</fd-menu>\r\n<ng-template #notificationGroupTpl let-notificationCount=\"notificationCount\">\r\n <bt-notification-group\r\n [notificationReport]=\"notificationReport\"\r\n [notificationCount]=\"notificationCount\"\r\n [dateGroupOnly]=\"shellbarData?.NotificationGroupByDateOnly === true\"\r\n (actionClick)=\"popoverComponent.close()\"\r\n [deviceSize]=\"deviceSize\"\r\n ></bt-notification-group>\r\n</ng-template>\r\n\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #notificationsDialog>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-header>\r\n <h1 id=\"fd-dialog-header-10\" fd-title>{{ 'Notification' | bbbTranslate }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialog.dismiss()\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body class=\"mobile\">\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationsUnreadCount }\"\r\n ></ng-container>\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n<ng-template #searchContent>\r\n <ul fd-list [byline]=\"true\">\r\n @for (item of (suggestions | suggestionsFilter:(selectedSuggestionFilter() ?? 'all')) ; track item.data.path) {\r\n <li\r\n fd-list-item\r\n [interactive]=\"true\"\r\n (click)=\"onSearchItemClick(item)\"\r\n class=\"!tw-ps-1\"\r\n [class.!tw-bg-blue-600]=\"item.data.source === 'Report'\"\r\n [class.!tw-bg-green-600]=\"item.data.source === 'Command'\"\r\n [class.!tw-bg-gray-600]=\"item.data.source !== 'Command' && item.data.source !== 'Report'\"\r\n >\r\n <a fd-list-link [attr.href]=\"!item.data.url ? null : item.data.url\" (click)=\"onSearchLink(item, $event)\">\r\n <div fd-list-content>\r\n <div fd-list-title>{{ item.value }}</div>\r\n <div fd-list-byline>{{ item.data.path }}</div>\r\n </div>\r\n <span fd-list-secondary>\r\n @if(item.data.canPin){ @let favorite = isFavorite(item);\r\n <button\r\n class=\"!tw-m-[0.1rem]\"\r\n [ariaLabel]=\"(favorite ? '\u062D\u0630\u0641 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627' : '\u0627\u0641\u0632\u0648\u062F\u0646 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627') | bbbTranslate\"\r\n [title]=\"(favorite ? '\u062D\u0630\u0641 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627' : '\u0627\u0641\u0632\u0648\u062F\u0646 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627') | bbbTranslate\"\r\n [attr.aria-pressed]=\"favorite\"\r\n fd-button\r\n [glyph]=\"favorite ? 'favorite' : 'unfavorite'\"\r\n (click)=\"oFavoriteLink(item, $event)\"\r\n ></button>\r\n }\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n</ng-template>\r\n<ng-template #searchSubHeader>\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <fd-input-group\r\n glyph=\"search\"\r\n fdkInitialFocus\r\n glyphAriaLabel=\"Submit\"\r\n [button]=\"true\"\r\n (input)=\"onSearchInputChange($event)\"\r\n >\r\n </fd-input-group>\r\n @if(suggestions?.length || selectedSuggestionFilter()){\r\n <div class=\"tw-flex tw-gap-4 tw-overflow-x-auto suggestion-filters-cat tw-pb-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u0647\u0645\u0647',\r\n filter: 'all',\r\n active: selectedSuggestionFilter() === null,\r\n count: (suggestions | suggestionsCountFilter: 'all'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u0632\u06CC\u0631\u0633\u06CC\u0633\u062A\u0645',\r\n filter: 'subsystem',\r\n active: selectedSuggestionFilter() === 'subsystem',\r\n count: (suggestions | suggestionsCountFilter: 'subsystem'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u06AF\u0631\u0648\u0647 \u0646\u0648\u06CC\u06AF\u06CC\u062A\u0648\u0631',\r\n filter: 'navgroup',\r\n active: selectedSuggestionFilter() === 'navgroup',\r\n count: (suggestions | suggestionsCountFilter: 'navgroup'),\r\n type: ''\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u06AF\u0632\u0627\u0631\u0634\u0627\u062A',\r\n filter: 'report',\r\n active: selectedSuggestionFilter() === 'report',\r\n count: (suggestions | suggestionsCountFilter: 'report'),\r\n type: 'information'\r\n }\r\n \"\r\n ></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n catTag;\r\n context: {\r\n name: '\u062F\u0633\u062A\u0648\u0631\u0627\u062A',\r\n filter: 'command',\r\n active: selectedSuggestionFilter() === 'command',\r\n count: (suggestions | suggestionsCountFilter: 'command'),\r\n type: 'success'\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #catTag let-name=\"name\" let-filter=\"filter\" let-active=\"active\" let-count=\"count\" let-type=\"type\">\r\n <!-- \u00AB\u0647\u0645\u0647\u00BB \u0648 \u06AF\u0631\u0648\u0647 \u0641\u0639\u0627\u0644 \u0647\u0645\u06CC\u0634\u0647 \u062F\u06CC\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u0646\u062F (\u0641\u0639\u0627\u0644 \u0628\u0627 \u0635\u0641\u0631 \u0646\u062A\u06CC\u062C\u0647 \u00AB\u06F0\u00BB \u0646\u0634\u0627\u0646 \u0645\u06CC\u200C\u062F\u0647\u062F)\u061B \u06AF\u0631\u0648\u0647 \u063A\u06CC\u0631\u0641\u0639\u0627\u0644 \u0641\u0642\u0637 \u0628\u0627 \u0646\u062A\u06CC\u062C\u0647 -->\r\n @if(filter === 'all' || active || (count && count!==' ')){\r\n <div\r\n fd-generic-tag\r\n class=\"bt-suggestion-filter\"\r\n [class.bt-suggestion-filter--active]=\"active\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-pressed]=\"active\"\r\n [name]=\"name\"\r\n [value]=\"count || '0'\"\r\n [type]=\"type\"\r\n (click)=\"onSuggestionFilterClick(filter)\"\r\n (keydown.enter)=\"onSuggestionFilterClick(filter); $event.preventDefault()\"\r\n (keydown.space)=\"onSuggestionFilterClick(filter); $event.preventDefault()\"\r\n ></div>\r\n }\r\n</ng-template>\r\n\r\n<!--\r\n BTILES-006: markup \u06CC\u06A9 \u0648\u0631\u0648\u062F\u06CC \u062F\u0633\u062A\u0648\u0631\u060C \u0645\u0634\u062A\u0631\u06A9 \u0628\u06CC\u0646 \u0646\u0648\u0627\u0631 \u0648 \u0644\u0627\u06CC\u0647\u200C\u06CC \u0627\u0646\u062F\u0627\u0632\u0647\u200C\u06AF\u06CC\u0631\u06CC \u062A\u0627 \u0639\u0631\u0636 \u0627\u0646\u062F\u0627\u0632\u0647\u200C\u06AF\u06CC\u0631\u06CC\u200C\u0634\u062F\u0647 \u0647\u0645\u0627\u0646 \u0639\u0631\u0636 \u0648\u0627\u0642\u0639\u06CC \u0628\u0627\u0634\u062F.\r\n \u062F\u0631 \u062D\u0627\u0644\u062A measure \u0645\u0646\u0648 trigger \u0646\u062F\u0627\u0631\u062F \u0648 \u0622\u06CC\u062A\u0645\u06CC \u0631\u0646\u062F\u0631 \u0646\u0645\u06CC\u200C\u06A9\u0646\u062F (\u0641\u0642\u0637 \u062C\u0627\u06CC \u062E\u0648\u062F\u0634 \u0631\u0627 \u0645\u06CC\u200C\u06AF\u06CC\u0631\u062F).\r\n-->\r\n<ng-template #commandEntryTpl let-entry=\"entry\" let-measure=\"measure\">\r\n <span class=\"bt-shellbar-command-entry\">\r\n @switch(entry.kind){ @case('global'){ @let dastor = entry.command; @if(dastor.children?.length){\r\n <button\r\n type=\"button\"\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n fdType=\"transparent\"\r\n [glyph]=\"dastor.glyph\"\r\n [label]=\"dastor.label | bbbTranslate\"\r\n [fdMenuTrigger]=\"measure ? null : globalCommandMenu\"\r\n ></button>\r\n <fd-menu #globalCommandMenu>\r\n @if(!measure){ @for(item of dastor.children; track item.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n globalSubmenuTemplate;\r\n context: { item: item, parentSubmenu: undefined, rootMenu: globalCommandMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n <ng-template\r\n #globalSubmenuTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n globalSubmenuTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n } @else {\r\n <span\r\n fd-button\r\n [glyph]=\"dastor.glyph\"\r\n class=\"fd-shellbar__button\"\r\n [label]=\"dastor.useImageGlyph ? undefined : (dastor.label | bbbTranslate)\"\r\n [class.shellbar-command-action--image-glyph]=\"dastor.useImageGlyph\"\r\n (click)=\"dastor.callback?.()\"\r\n >\r\n @if(dastor.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"dastor.glyph\"\r\n [alt]=\"dastor.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n <span class=\"shellbar-command-action__label\">{{ dastor.label | bbbTranslate }}</span>\r\n }\r\n </span>\r\n } } @case('workflow'){\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n [label]=\"'Workflow' | bbbTranslate\"\r\n [fdMenu]=\"true\"\r\n [fdMenuTrigger]=\"measure ? null : workflowMenu\"\r\n ></button>\r\n <fd-menu #workflowMenu>\r\n @if(!measure){ @for(item of workflowMenuItems; track item.key) {\r\n <li fd-menu-item>\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n (click)=\"$event.preventDefault(); workflowMenu.close(); item.callback?.()\"\r\n >\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n } }\r\n </fd-menu>\r\n } @case('group'){ @let group = entry.group;\r\n <button\r\n fd-button\r\n [label]=\"group.Caption | bbbTranslate\"\r\n [fdMenu]=\"true\"\r\n [fdMenuTrigger]=\"measure ? null : groupMenu\"\r\n ></button>\r\n <fd-menu #groupMenu>\r\n @if(!measure){ @for(item of group.Commands; track item.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n groupSubmenuTemplate;\r\n context: { item: item, parentSubmenu: undefined, rootMenu: groupMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n <ng-template\r\n #groupSubmenuTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n class=\"tw-gap-2\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n groupSubmenuTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n } }\r\n </span>\r\n</ng-template>\r\n\r\n<!-- BTILES-006: \u062F\u06A9\u0645\u0647\u200C\u06CC \u22EF \u0648 \u0645\u0646\u0648\u06CC \u062F\u0633\u062A\u0648\u0631\u0627\u062A \u067E\u0646\u0647\u0627\u0646 (`hiddenCommandNodes`)\u061B \u062F\u0631 \u062D\u0627\u0644\u062A measure \u0641\u0642\u0637 \u062C\u0627\u06CC \u062E\u0648\u062F\u0634 \u0631\u0627 \u0645\u06CC\u200C\u06AF\u06CC\u0631\u062F. -->\r\n<ng-template #overflowEntryTpl let-measure=\"measure\">\r\n <span class=\"bt-shellbar-command-entry bt-shellbar-command-entry--overflow\">\r\n <button\r\n type=\"button\"\r\n class=\"fd-shellbar__button\"\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"overflow\"\r\n [attr.aria-label]=\"'Commands' | bbbTranslate\"\r\n [title]=\"'Commands' | bbbTranslate\"\r\n [fdMenuTrigger]=\"measure ? null : mobileCommandsMenu\"\r\n ></button>\r\n <fd-menu #mobileCommandsMenu [mobile]=\"isOverflowMenuMobile\">\r\n @if(!measure){ @for(node of hiddenCommandNodes(); track node.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n mobileCommandTemplate;\r\n context: { item: node, parentSubmenu: undefined, rootMenu: mobileCommandsMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n <ng-template\r\n #mobileCommandTemplate\r\n let-item=\"item\"\r\n let-parentSubmenu=\"parentSubmenu\"\r\n let-rootMenu=\"rootMenu\"\r\n >\r\n <li\r\n fd-menu-item\r\n [submenu]=\"item.children?.length ? submenu : undefined\"\r\n [parentSubmenu]=\"parentSubmenu\"\r\n >\r\n @if(item.children?.length){\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ item.label | bbbTranslate }}</span>\r\n <fd-menu-addon [submenuIndicator]=\"true\"></fd-menu-addon>\r\n </div>\r\n } @else {\r\n <a\r\n fd-menu-interactive\r\n href=\"\"\r\n [class.shellbar-command-action--image-glyph]=\"item.useImageGlyph\"\r\n (click)=\"$event.preventDefault(); rootMenu.close(); item.callback?.()\"\r\n >\r\n @if(item.useImageGlyph){\r\n <img\r\n class=\"shellbar-command-action__image\"\r\n [src]=\"item.glyph\"\r\n [alt]=\"item.label | bbbTranslate\"\r\n loading=\"lazy\"\r\n />\r\n }\r\n <span fd-menu-title class=\"shellbar-command-action__label\">{{\r\n item.label | bbbTranslate\r\n }}</span>\r\n </a>\r\n }\r\n </li>\r\n <fd-submenu #submenu>\r\n @if(item.children?.length){ @for(subItem of item.children; track subItem.key) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n mobileCommandTemplate;\r\n context: { item: subItem, parentSubmenu: submenu, rootMenu: rootMenu }\r\n \"\r\n ></ng-container>\r\n } }\r\n </fd-submenu>\r\n </ng-template>\r\n </fd-menu>\r\n </span>\r\n</ng-template>\r\n", styles: [":host{display:block;position:relative}:host fd-user-menu{background-color:transparent}:host fd-shellbar-actions.flat-buttons{flex-direction:row-reverse}:host.hide-user-menu fd-shellbar-actions ::ng-deep .fd-user-menu{display:none}:host ::ng-deep fd-shellbar-actions fd-avatar{background-color:transparent!important;color:var(--sapShell_InteractiveTextColor, #d1e8ff)}:host ::ng-deep .fd-shellbar--s .fd-shellbar__title{display:block;max-width:10rem;text-wrap:auto;font-size:.8rem}:host ::ng-deep fd-combobox .fd-input-group input{min-width:2rem;height:1.625rem;margin-top:.1875rem;margin-bottom:.1875rem;padding:0 .5rem;box-sizing:border-box}:host ::ng-deep fd-combobox .fd-input-group span{min-width:2rem;min-height:1.625rem}:host ::ng-deep .fd-shellbar__subtitle{font-size:1rem}:host ::ng-deep .fd-shellbar--s ::ng-deep .fd-shellbar__subtitle{display:block;overflow:hidden;text-wrap:wrap;width:100%;word-break:break-all}.fd-shellbar__logo{min-height:3rem;height:3rem;width:3rem;margin:0!important}.extra-button-wrapper{display:flex;height:100%;align-items:center;position:absolute;left:10px;top:0;gap:.285rem}.bt-shellbar-date{display:inline-flex;align-items:center;gap:.285rem;flex-shrink:0;white-space:nowrap;padding:0 .5rem;font-size:.875rem;line-height:1;color:var(--sapShell_InteractiveTextColor, #d1e8ff);cursor:default;-webkit-user-select:none;user-select:none}.bt-shellbar-date__icon{font-size:1rem;opacity:.85}.bt-shellbar-date__text{font-variant-numeric:tabular-nums}.hide-panel-header ::ng-deep .fd-panel__header{min-height:auto;height:auto}.bt-shellbar-commands{display:flex;align-items:center;align-self:stretch;gap:.5rem;flex:1 1 0;min-width:0;overflow:hidden;position:relative}:host ::ng-deep fd-shellbar:not(.s) .fd-shellbar .fd-shellbar__group--context-area{flex:1 1 0;min-width:0}.bt-shellbar-command-entry{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.bt-shellbar-commands__measure{position:absolute;top:0;inset-inline-start:0;display:flex;align-items:center;width:max-content;visibility:hidden;pointer-events:none}:host ::ng-deep .shellbar-command-action--image-glyph{gap:.375rem}:host ::ng-deep .shellbar-command-action--image-glyph ::ng-deep fd-icon{display:none}.shellbar-command-action__image{width:1rem;height:1rem;object-fit:contain;flex-shrink:0}[fd-menu-title],.shellbar-command-action__label{white-space:nowrap!important}.bt-suggestion-filter{cursor:pointer;flex-shrink:0}.bt-suggestion-filter--active{outline:.125rem solid var(--sapSelectedColor, var(--sapContent_FocusColor, currentColor));outline-offset:.0625rem;font-weight:700}.bt-suggestion-filter:focus-visible{box-shadow:0 0 0 .25rem var(--sapContent_FocusColor, currentColor)}:host ::ng-deep .fd-shellbar{height:var(--shellbar-height)}:host ::ng-deep fd-shellbar.s .fd-shellbar__product{max-width:120px}:host ::ng-deep fd-shellbar.s .fd-shellbar--has-context-area{justify-content:center!important}:host ::ng-deep fd-shellbar.s .fd-shellbar--has-context-area .fd-shellbar__action--shrink button{color:var(--fdButtonIconColor, var(--sapShell_InteractiveTextColor))}\n"] }]
|
|
3875
4048
|
}], ctorParameters: () => [], propDecorators: { searchDialogContent: [{
|
|
3876
4049
|
type: ViewChild,
|
|
3877
4050
|
args: ['searchContent', { read: TemplateRef }]
|
|
@@ -3994,6 +4167,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3994
4167
|
}], _notificationsDialog: [{
|
|
3995
4168
|
type: ViewChild,
|
|
3996
4169
|
args: ['notificationsDialog', { static: true, read: TemplateRef }]
|
|
4170
|
+
}], commandsHost: [{
|
|
4171
|
+
type: ViewChild,
|
|
4172
|
+
args: ['commandsHost', { static: true }]
|
|
4173
|
+
}], commandsMeasure: [{
|
|
4174
|
+
type: ViewChild,
|
|
4175
|
+
args: ['commandsMeasure', { static: true }]
|
|
3997
4176
|
}] } });
|
|
3998
4177
|
|
|
3999
4178
|
class ShellbarComponent extends BaseComponent {
|