@fundamental-ngx/platform 0.43.53 → 0.43.55

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.
@@ -117,10 +117,10 @@ export class TableToolbarComponent {
117
117
  }
118
118
  }
119
119
  TableToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TableToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Table }, { token: i1.TableService }], target: i0.ɵɵFactoryTarget.Component });
120
- TableToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TableToolbarComponent, selector: "fdp-table-toolbar", inputs: { shouldOverflow: "shouldOverflow", title: "title", searchFieldAriaLabel: "searchFieldAriaLabel", hideItemCount: "hideItemCount", hideSearchInput: "hideSearchInput", showExpandCollapseButtons: "showExpandCollapseButtons", searchSuggestions: "searchSuggestions", editMode: "editMode" }, providers: [{ provide: TABLE_TOOLBAR, useExisting: TableToolbarComponent }], queries: [{ propertyName: "tableToolbarActionsComponent", first: true, predicate: TableToolbarActionsComponent, descendants: true }, { propertyName: "_tableToolbarLeftActionsComponent", first: true, predicate: TableToolbarLeftActionsComponent, descendants: true }], viewQueries: [{ propertyName: "contentTemplateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<ng-template\n let-counter=\"counter\"\n let-sortable=\"sortable\"\n let-filterable=\"filterable\"\n let-groupable=\"groupable\"\n let-columns=\"columns\"\n>\n <fd-toolbar\n fdType=\"transparent\"\n [clearBorder]=\"true\"\n [titleId]=\"tableToolbarTitleId\"\n [title]=\"title && !hideItemCount ? title + ' (' + (counter | async) + ')' : title\"\n [shouldOverflow]=\"shouldOverflow\"\n >\n <ng-container *ngIf=\"_tableToolbarLeftActionsComponent\">\n <span fd-toolbar-item fdOverflowPriority=\"never\">\n <fd-toolbar-separator *ngIf=\"!!title || !hideItemCount\"></fd-toolbar-separator>\n <ng-container *ngTemplateOutlet=\"_tableToolbarLeftActionsComponent._contentTemplateRef\"></ng-container>\n </span>\n </ng-container>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n\n <fdp-search-field\n fd-toolbar-item\n *ngIf=\"!hideSearchInput\"\n style=\"min-width: 15.5rem\"\n [placeholder]=\"'platformTable.toolbarSearchPlaceholder' | fdTranslate\"\n [inputText]=\"_searchInputText\"\n [disabled]=\"!!(tableLoading$ | async)\"\n [suggestions]=\"searchSuggestions\"\n [ariaLabel]=\"searchFieldAriaLabel\"\n [ariaLabelledBy]=\"searchFieldAriaLabel ? null : tableToolbarTitleId\"\n (searchSubmit)=\"submitSearch($event)\"\n (cancelSearch)=\"submitSearch($event)\"\n [disableSuggestionsFoundAnnouncer]=\"true\"\n ></fdp-search-field>\n\n <ng-container *ngIf=\"editMode !== 'none'\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCreateButtonLabel' | fdTranslate\"\n (click)=\"_addRow()\"\n ></fdp-button>\n <ng-container *ngIf=\"_showSaveButton\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionSaveButtonLabel' | fdTranslate\"\n *ngIf=\"_showSaveButton\"\n (click)=\"_saveRows()\"\n ></fdp-button>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCancelButtonLabel' | fdTranslate\"\n (click)=\"_cancelEditing()\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"\n tableToolbarActionsComponent ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n ></fd-toolbar-separator>\n </ng-container>\n\n <span fd-toolbar-item *ngIf=\"tableToolbarActionsComponent\" class=\"fdp-table-toolbar-actions\">\n <ng-container *ngTemplateOutlet=\"tableToolbarActionsComponent.contentTemplateRef\"></ng-container>\n </span>\n\n <ng-container\n *ngIf=\"\n showExpandCollapseButtons ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n >\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"tableToolbarActionsComponent\"\n ></fd-toolbar-separator>\n\n <ng-container *ngIf=\"showExpandCollapseButtons\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"expand-all\"\n (click)=\"_expandAll()\"\n [title]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"collapse-all\"\n (click)=\"_collapseAll()\"\n [title]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"sortable | async\"\n glyph=\"sort\"\n [title]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openSorting()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"filterable | async\"\n glyph=\"filter\"\n [title]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openFiltering()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"groupable | async\"\n glyph=\"group-2\"\n [title]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openGrouping()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"columns | async\"\n glyph=\"action-settings\"\n [title]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openColumns()\"\n ></fdp-button>\n </ng-container>\n </fd-toolbar>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i3.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i3.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i3.ToolbarSeparatorComponent, selector: "fd-toolbar-separator" }, { kind: "component", type: i4.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "toggled", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: i5.SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "ariaLabel", "ariaLabelledby", "searchSuggestionMessage", "searchSuggestionNavigateMessage", "forceSearchButton", "disableSuggestionsFoundAnnouncer"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
120
+ TableToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TableToolbarComponent, selector: "fdp-table-toolbar", inputs: { shouldOverflow: "shouldOverflow", title: "title", searchFieldAriaLabel: "searchFieldAriaLabel", hideItemCount: "hideItemCount", hideSearchInput: "hideSearchInput", showExpandCollapseButtons: "showExpandCollapseButtons", searchSuggestions: "searchSuggestions", editMode: "editMode" }, providers: [{ provide: TABLE_TOOLBAR, useExisting: TableToolbarComponent }], queries: [{ propertyName: "tableToolbarActionsComponent", first: true, predicate: TableToolbarActionsComponent, descendants: true }, { propertyName: "_tableToolbarLeftActionsComponent", first: true, predicate: TableToolbarLeftActionsComponent, descendants: true }], viewQueries: [{ propertyName: "contentTemplateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<ng-template\n let-counter=\"counter\"\n let-sortable=\"sortable\"\n let-filterable=\"filterable\"\n let-groupable=\"groupable\"\n let-columns=\"columns\"\n>\n <fd-toolbar\n fdType=\"transparent\"\n [clearBorder]=\"true\"\n [titleId]=\"tableToolbarTitleId\"\n [title]=\"title && !hideItemCount ? title + ' (' + (counter | async) + ')' : title\"\n [shouldOverflow]=\"shouldOverflow\"\n >\n <ng-container *ngIf=\"_tableToolbarLeftActionsComponent\">\n <span fd-toolbar-item fdOverflowPriority=\"never\">\n <fd-toolbar-separator *ngIf=\"!!title || !hideItemCount\"></fd-toolbar-separator>\n <ng-container *ngTemplateOutlet=\"_tableToolbarLeftActionsComponent._contentTemplateRef\"></ng-container>\n </span>\n </ng-container>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n\n <fdp-search-field\n fd-toolbar-item\n *ngIf=\"!hideSearchInput\"\n style=\"min-width: 15.5rem\"\n [placeholder]=\"'platformTable.toolbarSearchPlaceholder' | fdTranslate\"\n [inputText]=\"_searchInputText\"\n [disabled]=\"!!(tableLoading$ | async)\"\n [suggestions]=\"searchSuggestions\"\n [ariaLabel]=\"searchFieldAriaLabel\"\n [ariaLabelledBy]=\"searchFieldAriaLabel ? null : tableToolbarTitleId\"\n (searchSubmit)=\"submitSearch($event)\"\n (cancelSearch)=\"submitSearch($event)\"\n [disableSuggestionsFoundAnnouncer]=\"true\"\n ></fdp-search-field>\n\n <ng-container *ngIf=\"editMode !== 'none'\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCreateButtonLabel' | fdTranslate\"\n (click)=\"_addRow()\"\n ></fdp-button>\n <ng-container *ngIf=\"_showSaveButton\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionSaveButtonLabel' | fdTranslate\"\n *ngIf=\"_showSaveButton\"\n (click)=\"_saveRows()\"\n ></fdp-button>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCancelButtonLabel' | fdTranslate\"\n (click)=\"_cancelEditing()\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"\n tableToolbarActionsComponent ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n ></fd-toolbar-separator>\n </ng-container>\n\n <span fd-toolbar-item *ngIf=\"tableToolbarActionsComponent\" class=\"fdp-table-toolbar-actions\">\n <ng-container *ngTemplateOutlet=\"tableToolbarActionsComponent.contentTemplateRef\"></ng-container>\n </span>\n\n <ng-container\n *ngIf=\"\n showExpandCollapseButtons ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n >\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"tableToolbarActionsComponent\"\n ></fd-toolbar-separator>\n\n <ng-container *ngIf=\"showExpandCollapseButtons\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"expand-all\"\n (click)=\"_expandAll()\"\n [title]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"collapse-all\"\n (click)=\"_collapseAll()\"\n [title]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"sortable | async\"\n glyph=\"sort\"\n [title]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openSorting()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"filterable | async\"\n glyph=\"filter\"\n [title]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openFiltering()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"groupable | async\"\n glyph=\"group-2\"\n [title]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openGrouping()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"columns | async\"\n glyph=\"action-settings\"\n [title]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openColumns()\"\n ></fdp-button>\n </ng-container>\n </fd-toolbar>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i3.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i3.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i3.ToolbarSeparatorComponent, selector: "fd-toolbar-separator" }, { kind: "component", type: i4.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "toggled", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: i5.SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "ariaLabel", "ariaLabelledby", "searchSuggestionMessage", "searchSuggestionNavigateMessage", "forceSearchButton", "disableSuggestionsFoundAnnouncer"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
121
121
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TableToolbarComponent, decorators: [{
122
122
  type: Component,
123
- args: [{ selector: 'fdp-table-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [{ provide: TABLE_TOOLBAR, useExisting: TableToolbarComponent }], template: "<ng-template\n let-counter=\"counter\"\n let-sortable=\"sortable\"\n let-filterable=\"filterable\"\n let-groupable=\"groupable\"\n let-columns=\"columns\"\n>\n <fd-toolbar\n fdType=\"transparent\"\n [clearBorder]=\"true\"\n [titleId]=\"tableToolbarTitleId\"\n [title]=\"title && !hideItemCount ? title + ' (' + (counter | async) + ')' : title\"\n [shouldOverflow]=\"shouldOverflow\"\n >\n <ng-container *ngIf=\"_tableToolbarLeftActionsComponent\">\n <span fd-toolbar-item fdOverflowPriority=\"never\">\n <fd-toolbar-separator *ngIf=\"!!title || !hideItemCount\"></fd-toolbar-separator>\n <ng-container *ngTemplateOutlet=\"_tableToolbarLeftActionsComponent._contentTemplateRef\"></ng-container>\n </span>\n </ng-container>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n\n <fdp-search-field\n fd-toolbar-item\n *ngIf=\"!hideSearchInput\"\n style=\"min-width: 15.5rem\"\n [placeholder]=\"'platformTable.toolbarSearchPlaceholder' | fdTranslate\"\n [inputText]=\"_searchInputText\"\n [disabled]=\"!!(tableLoading$ | async)\"\n [suggestions]=\"searchSuggestions\"\n [ariaLabel]=\"searchFieldAriaLabel\"\n [ariaLabelledBy]=\"searchFieldAriaLabel ? null : tableToolbarTitleId\"\n (searchSubmit)=\"submitSearch($event)\"\n (cancelSearch)=\"submitSearch($event)\"\n [disableSuggestionsFoundAnnouncer]=\"true\"\n ></fdp-search-field>\n\n <ng-container *ngIf=\"editMode !== 'none'\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCreateButtonLabel' | fdTranslate\"\n (click)=\"_addRow()\"\n ></fdp-button>\n <ng-container *ngIf=\"_showSaveButton\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionSaveButtonLabel' | fdTranslate\"\n *ngIf=\"_showSaveButton\"\n (click)=\"_saveRows()\"\n ></fdp-button>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCancelButtonLabel' | fdTranslate\"\n (click)=\"_cancelEditing()\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"\n tableToolbarActionsComponent ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n ></fd-toolbar-separator>\n </ng-container>\n\n <span fd-toolbar-item *ngIf=\"tableToolbarActionsComponent\" class=\"fdp-table-toolbar-actions\">\n <ng-container *ngTemplateOutlet=\"tableToolbarActionsComponent.contentTemplateRef\"></ng-container>\n </span>\n\n <ng-container\n *ngIf=\"\n showExpandCollapseButtons ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n >\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"tableToolbarActionsComponent\"\n ></fd-toolbar-separator>\n\n <ng-container *ngIf=\"showExpandCollapseButtons\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"expand-all\"\n (click)=\"_expandAll()\"\n [title]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"collapse-all\"\n (click)=\"_collapseAll()\"\n [title]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"sortable | async\"\n glyph=\"sort\"\n [title]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openSorting()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"filterable | async\"\n glyph=\"filter\"\n [title]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openFiltering()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"groupable | async\"\n glyph=\"group-2\"\n [title]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openGrouping()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"columns | async\"\n glyph=\"action-settings\"\n [title]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openColumns()\"\n ></fdp-button>\n </ng-container>\n </fd-toolbar>\n</ng-template>\n" }]
123
+ args: [{ selector: 'fdp-table-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [{ provide: TABLE_TOOLBAR, useExisting: TableToolbarComponent }], template: "<ng-template\n let-counter=\"counter\"\n let-sortable=\"sortable\"\n let-filterable=\"filterable\"\n let-groupable=\"groupable\"\n let-columns=\"columns\"\n>\n <fd-toolbar\n fdType=\"transparent\"\n [clearBorder]=\"true\"\n [titleId]=\"tableToolbarTitleId\"\n [title]=\"title && !hideItemCount ? title + ' (' + (counter | async) + ')' : title\"\n [shouldOverflow]=\"shouldOverflow\"\n >\n <ng-container *ngIf=\"_tableToolbarLeftActionsComponent\">\n <span fd-toolbar-item fdOverflowPriority=\"never\">\n <fd-toolbar-separator *ngIf=\"!!title || !hideItemCount\"></fd-toolbar-separator>\n <ng-container *ngTemplateOutlet=\"_tableToolbarLeftActionsComponent._contentTemplateRef\"></ng-container>\n </span>\n </ng-container>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n\n <fdp-search-field\n fd-toolbar-item\n *ngIf=\"!hideSearchInput\"\n style=\"min-width: 15.5rem\"\n [placeholder]=\"'platformTable.toolbarSearchPlaceholder' | fdTranslate\"\n [inputText]=\"_searchInputText\"\n [disabled]=\"!!(tableLoading$ | async)\"\n [suggestions]=\"searchSuggestions\"\n [ariaLabel]=\"searchFieldAriaLabel\"\n [ariaLabelledBy]=\"searchFieldAriaLabel ? null : tableToolbarTitleId\"\n (searchSubmit)=\"submitSearch($event)\"\n (cancelSearch)=\"submitSearch($event)\"\n [disableSuggestionsFoundAnnouncer]=\"true\"\n ></fdp-search-field>\n\n <ng-container *ngIf=\"editMode !== 'none'\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCreateButtonLabel' | fdTranslate\"\n (click)=\"_addRow()\"\n ></fdp-button>\n <ng-container *ngIf=\"_showSaveButton\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionSaveButtonLabel' | fdTranslate\"\n *ngIf=\"_showSaveButton\"\n (click)=\"_saveRows()\"\n ></fdp-button>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCancelButtonLabel' | fdTranslate\"\n (click)=\"_cancelEditing()\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"\n tableToolbarActionsComponent ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n ></fd-toolbar-separator>\n </ng-container>\n\n <span fd-toolbar-item *ngIf=\"tableToolbarActionsComponent\" class=\"fdp-table-toolbar-actions\">\n <ng-container *ngTemplateOutlet=\"tableToolbarActionsComponent.contentTemplateRef\"></ng-container>\n </span>\n\n <ng-container\n *ngIf=\"\n showExpandCollapseButtons ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n >\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"tableToolbarActionsComponent\"\n ></fd-toolbar-separator>\n\n <ng-container *ngIf=\"showExpandCollapseButtons\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"expand-all\"\n (click)=\"_expandAll()\"\n [title]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"collapse-all\"\n (click)=\"_collapseAll()\"\n [title]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"sortable | async\"\n glyph=\"sort\"\n [title]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openSorting()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"filterable | async\"\n glyph=\"filter\"\n [title]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openFiltering()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"groupable | async\"\n glyph=\"group-2\"\n [title]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openGrouping()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"columns | async\"\n glyph=\"action-settings\"\n [title]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"dialog\"\n (click)=\"openColumns()\"\n ></fdp-button>\n </ng-container>\n </fd-toolbar>\n</ng-template>\n" }]
124
124
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Table }, { type: i1.TableService }]; }, propDecorators: { shouldOverflow: [{
125
125
  type: Input
126
126
  }], title: [{
@@ -147,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
147
147
  type: ViewChild,
148
148
  args: [TemplateRef]
149
149
  }] } });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvdGFibGUvY29tcG9uZW50cy90YWJsZS10b29sYmFyL3RhYmxlLXRvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtdG9vbGJhci90YWJsZS10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7QUFJMUYsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFFbEM7Ozs7Ozs7OztLQVNLO0FBU0wsTUFBTSxPQUFPLHFCQUFxQjtJQTZEOUIsY0FBYztJQUNkLFlBQ3FCLEdBQXNCLEVBQ3RCLE1BQWEsRUFDYixhQUEyQjtRQUYzQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2Isa0JBQWEsR0FBYixh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QWdDO2dCQUs5QyxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFNlYXJjaElucHV0LCBTdWdnZXN0aW9uSXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IFRhYmxlLCBUYWJsZVNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVEFCTEVfVE9PTEJBUiwgVGFibGVUb29sYmFySW50ZXJmYWNlIH0gZnJvbSAnLi90YWJsZS10b29sYmFyJztcbmltcG9ydCB7IFRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXRvb2xiYXItYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVUb29sYmFyTGVmdEFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXRvb2xiYXItbGVmdC1hY3Rpb25zLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIEVkaXRNb2RlID0gJ25vbmUnIHwgJ2lubGluZSc7XG5cbmxldCB0YWJsZVRvb2xiYXJUaXRsZVVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKiBUaGUgY29tcG9uZW50IHRoYXQgcmVwcmVzZW50cyBhIHRhYmxlIHRvb2xiYXIuXG4gKlxuICogYGBgaHRtbFxuICogPGZkcC10YWJsZS10b29sYmFyXG4gKiAgIHRpdGxlPVwiT3JkZXIgTGluZSBJdGVtc1wiXG4gKiAgIFtoaWRlSXRlbUNvdW50XT1cImZhbHNlXCI+XG4gKiA8L2ZkcC10YWJsZS10b29sYmFyPlxuICogYGBgXG4gKiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZS10b29sYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRBQkxFX1RPT0xCQVIsIHVzZUV4aXN0aW5nOiBUYWJsZVRvb2xiYXJDb21wb25lbnQgfV1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgVGFibGVUb29sYmFySW50ZXJmYWNlLCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRvb2xiYXIgc2hvdWxkIGhpZGUgZWxlbWVudHMgaW4gcG9wb3ZlciB3aGVuIHRoZXkgb3ZlcmZsb3cuXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3VsZE92ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAvKiogVGFibGUgdGl0bGUuICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBzZWFyY2ggZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hGaWVsZEFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBUb2dnbGUgdG8gc2hvdyB0YWJsZSBpdGVtIGNvdW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZUl0ZW1Db3VudCA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZSB0byBzaG93IHNlYXJjaCBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVTZWFyY2hJbnB1dCA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZSB0byBleHBhbmQgYW5kIGNvbGxhcHNlIGFsbCBmZWF0dXJlICovXG4gICAgQElucHV0KClcbiAgICBzaG93RXhwYW5kQ29sbGFwc2VCdXR0b25zID0gZmFsc2U7XG4gICAgLyoqIFN1Z2dlc3Rpb25zIGZvciBzZWFyY2ggZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hTdWdnZXN0aW9uczogU3VnZ2VzdGlvbkl0ZW1bXSA9IFtdO1xuXG4gICAgLyoqIFRhYmxlIHJvd3MgZWRpdC9hZGQgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVkaXRNb2RlOiBFZGl0TW9kZSA9ICdub25lJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChUYWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50KVxuICAgIHRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQ6IFRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoVGFibGVUb29sYmFyTGVmdEFjdGlvbnNDb21wb25lbnQpXG4gICAgX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50OiBUYWJsZVRvb2xiYXJMZWZ0QWN0aW9uc0NvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZilcbiAgICBjb250ZW50VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRhYmxlVG9vbGJhclRpdGxlSWQ6IHN0cmluZyA9ICdmZC10YWJsZS10b29sYmFyLXRpdGxlLScgKyB0YWJsZVRvb2xiYXJUaXRsZVVuaXF1ZUlkKys7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93U2F2ZUJ1dHRvbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VhcmNoSW5wdXRUZXh0ID0gJyc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlOiBUYWJsZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVTZXJ2aWNlOiBUYWJsZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZUV2ZW50cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzdWJtaXRTZWFyY2goc2VhcmNoOiBTZWFyY2hJbnB1dCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5zZWFyY2goc2VhcmNoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9wZW5Tb3J0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVTb3J0U2V0dGluZ3MuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3BlbkZpbHRlcmluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUub3BlblRhYmxlRmlsdGVyU2V0dGluZ3MuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3Blbkdyb3VwaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVHcm91cFNldHRpbmdzLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9wZW5Db2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVDb2x1bW5TZXR0aW5ncy5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYWRkUm93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5hZGRSb3coKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zYXZlUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUuc2F2ZVJvd3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYW5jZWxFZGl0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5jYW5jZWxFZGl0aW5nKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5lbXB0eVJvd0FkZGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl90YWJsZS5zYXZlLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUuY2FuY2VsLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUucHJlc2V0Q2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VhcmNoSW5wdXRUZXh0ID0gc3RhdGUuc2VhcmNoSW5wdXQ/LnRleHQgPz8gJyc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2V4cGFuZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUuZXhwYW5kQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29sbGFwc2VBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlLmNvbGxhcHNlQWxsKCk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlXG4gICAgbGV0LWNvdW50ZXI9XCJjb3VudGVyXCJcbiAgICBsZXQtc29ydGFibGU9XCJzb3J0YWJsZVwiXG4gICAgbGV0LWZpbHRlcmFibGU9XCJmaWx0ZXJhYmxlXCJcbiAgICBsZXQtZ3JvdXBhYmxlPVwiZ3JvdXBhYmxlXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuPlxuICAgIDxmZC10b29sYmFyXG4gICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgW2NsZWFyQm9yZGVyXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVJZF09XCJ0YWJsZVRvb2xiYXJUaXRsZUlkXCJcbiAgICAgICAgW3RpdGxlXT1cInRpdGxlICYmICFoaWRlSXRlbUNvdW50ID8gdGl0bGUgKyAnICgnICsgKGNvdW50ZXIgfCBhc3luYykgKyAnKScgOiB0aXRsZVwiXG4gICAgICAgIFtzaG91bGRPdmVyZmxvd109XCJzaG91bGRPdmVyZmxvd1wiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50XCI+XG4gICAgICAgICAgICA8c3BhbiBmZC10b29sYmFyLWl0ZW0gZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3IgKm5nSWY9XCIhIXRpdGxlIHx8ICFoaWRlSXRlbUNvdW50XCI+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50Ll9jb250ZW50VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxmZC10b29sYmFyLXNwYWNlcj48L2ZkLXRvb2xiYXItc3BhY2VyPlxuXG4gICAgICAgIDxmZHAtc2VhcmNoLWZpZWxkXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVTZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMTUuNXJlbVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhclNlYXJjaFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiX3NlYXJjaElucHV0VGV4dFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiISEodGFibGVMb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwic2VhcmNoU3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJzZWFyY2hGaWVsZEFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsbGVkQnldPVwic2VhcmNoRmllbGRBcmlhTGFiZWwgPyBudWxsIDogdGFibGVUb29sYmFyVGl0bGVJZFwiXG4gICAgICAgICAgICAoc2VhcmNoU3VibWl0KT1cInN1Ym1pdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjYW5jZWxTZWFyY2gpPVwic3VibWl0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgW2Rpc2FibGVTdWdnZXN0aW9uc0ZvdW5kQW5ub3VuY2VyXT1cInRydWVcIlxuICAgICAgICA+PC9mZHAtc2VhcmNoLWZpZWxkPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0TW9kZSAhPT0gJ25vbmUnXCI+XG4gICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkNyZWF0ZUJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2FkZFJvdygpXCJcbiAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dTYXZlQnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25TYXZlQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9zaG93U2F2ZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfc2F2ZVJvd3MoKVwiXG4gICAgICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3I+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cbiAgICAgICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkNhbmNlbEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9jYW5jZWxFZGl0aW5nKClcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxmZC10b29sYmFyLXNlcGFyYXRvclxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICB0YWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50IHx8XG4gICAgICAgICAgICAgICAgICAgIChzb3J0YWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZmlsdGVyYWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZ3JvdXBhYmxlIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgICAgIChjb2x1bW5zIHwgYXN5bmMpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8c3BhbiBmZC10b29sYmFyLWl0ZW0gKm5nSWY9XCJ0YWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50XCIgY2xhc3M9XCJmZHAtdGFibGUtdG9vbGJhci1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVUb29sYmFyQWN0aW9uc0NvbXBvbmVudC5jb250ZW50VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgc2hvd0V4cGFuZENvbGxhcHNlQnV0dG9ucyB8fFxuICAgICAgICAgICAgICAgIChzb3J0YWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgIChmaWx0ZXJhYmxlIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgKGdyb3VwYWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgIChjb2x1bW5zIHwgYXN5bmMpXG4gICAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3JcbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50XCJcbiAgICAgICAgICAgID48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0V4cGFuZENvbGxhcHNlQnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIGdseXBoPVwiZXhwYW5kLWFsbFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfZXhwYW5kQWxsKClcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkV4cGFuZEFsbEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uRXhwYW5kQWxsQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICAgICBnbHlwaD1cImNvbGxhcHNlLWFsbFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfY29sbGFwc2VBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uQ29sbGFwc2VBbGxCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkNvbGxhcHNlQWxsQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0YWJsZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBnbHlwaD1cInNvcnRcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uU29ydEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Tb3J0QnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cIm1vZGFsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNvcnRpbmcoKVwiXG4gICAgICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJhYmxlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkZpbHRlckJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25GaWx0ZXJCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgYnV0dG9uVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyaW5nKClcIlxuICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBhYmxlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwiZ3JvdXAtMlwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Hcm91cEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Hcm91cEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJtb2RhbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Hcm91cGluZygpXCJcbiAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbnMgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJhY3Rpb24tc2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uQ29sdW1uc0J1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Db2x1bW5zQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cIm1vZGFsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbHVtbnMoKVwiXG4gICAgICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2ZkLXRvb2xiYXI+XG48L25nLXRlbXBsYXRlPlxuIl19
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvdGFibGUvY29tcG9uZW50cy90YWJsZS10b29sYmFyL3RhYmxlLXRvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtdG9vbGJhci90YWJsZS10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7QUFJMUYsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFFbEM7Ozs7Ozs7OztLQVNLO0FBU0wsTUFBTSxPQUFPLHFCQUFxQjtJQTZEOUIsY0FBYztJQUNkLFlBQ3FCLEdBQXNCLEVBQ3RCLE1BQWEsRUFDYixhQUEyQjtRQUYzQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2Isa0JBQWEsR0FBYixh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QWdDO2dCQUs5QyxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFNlYXJjaElucHV0LCBTdWdnZXN0aW9uSXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IFRhYmxlLCBUYWJsZVNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVEFCTEVfVE9PTEJBUiwgVGFibGVUb29sYmFySW50ZXJmYWNlIH0gZnJvbSAnLi90YWJsZS10b29sYmFyJztcbmltcG9ydCB7IFRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXRvb2xiYXItYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVUb29sYmFyTGVmdEFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXRvb2xiYXItbGVmdC1hY3Rpb25zLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIEVkaXRNb2RlID0gJ25vbmUnIHwgJ2lubGluZSc7XG5cbmxldCB0YWJsZVRvb2xiYXJUaXRsZVVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKiBUaGUgY29tcG9uZW50IHRoYXQgcmVwcmVzZW50cyBhIHRhYmxlIHRvb2xiYXIuXG4gKlxuICogYGBgaHRtbFxuICogPGZkcC10YWJsZS10b29sYmFyXG4gKiAgIHRpdGxlPVwiT3JkZXIgTGluZSBJdGVtc1wiXG4gKiAgIFtoaWRlSXRlbUNvdW50XT1cImZhbHNlXCI+XG4gKiA8L2ZkcC10YWJsZS10b29sYmFyPlxuICogYGBgXG4gKiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZS10b29sYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRBQkxFX1RPT0xCQVIsIHVzZUV4aXN0aW5nOiBUYWJsZVRvb2xiYXJDb21wb25lbnQgfV1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgVGFibGVUb29sYmFySW50ZXJmYWNlLCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRvb2xiYXIgc2hvdWxkIGhpZGUgZWxlbWVudHMgaW4gcG9wb3ZlciB3aGVuIHRoZXkgb3ZlcmZsb3cuXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3VsZE92ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAvKiogVGFibGUgdGl0bGUuICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBzZWFyY2ggZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hGaWVsZEFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBUb2dnbGUgdG8gc2hvdyB0YWJsZSBpdGVtIGNvdW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZUl0ZW1Db3VudCA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZSB0byBzaG93IHNlYXJjaCBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVTZWFyY2hJbnB1dCA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZSB0byBleHBhbmQgYW5kIGNvbGxhcHNlIGFsbCBmZWF0dXJlICovXG4gICAgQElucHV0KClcbiAgICBzaG93RXhwYW5kQ29sbGFwc2VCdXR0b25zID0gZmFsc2U7XG4gICAgLyoqIFN1Z2dlc3Rpb25zIGZvciBzZWFyY2ggZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hTdWdnZXN0aW9uczogU3VnZ2VzdGlvbkl0ZW1bXSA9IFtdO1xuXG4gICAgLyoqIFRhYmxlIHJvd3MgZWRpdC9hZGQgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVkaXRNb2RlOiBFZGl0TW9kZSA9ICdub25lJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChUYWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50KVxuICAgIHRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQ6IFRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoVGFibGVUb29sYmFyTGVmdEFjdGlvbnNDb21wb25lbnQpXG4gICAgX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50OiBUYWJsZVRvb2xiYXJMZWZ0QWN0aW9uc0NvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZilcbiAgICBjb250ZW50VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRhYmxlVG9vbGJhclRpdGxlSWQ6IHN0cmluZyA9ICdmZC10YWJsZS10b29sYmFyLXRpdGxlLScgKyB0YWJsZVRvb2xiYXJUaXRsZVVuaXF1ZUlkKys7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93U2F2ZUJ1dHRvbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VhcmNoSW5wdXRUZXh0ID0gJyc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlOiBUYWJsZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVTZXJ2aWNlOiBUYWJsZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZUV2ZW50cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzdWJtaXRTZWFyY2goc2VhcmNoOiBTZWFyY2hJbnB1dCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5zZWFyY2goc2VhcmNoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9wZW5Tb3J0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVTb3J0U2V0dGluZ3MuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3BlbkZpbHRlcmluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUub3BlblRhYmxlRmlsdGVyU2V0dGluZ3MuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3Blbkdyb3VwaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVHcm91cFNldHRpbmdzLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9wZW5Db2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVDb2x1bW5TZXR0aW5ncy5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYWRkUm93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5hZGRSb3coKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zYXZlUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUuc2F2ZVJvd3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYW5jZWxFZGl0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5jYW5jZWxFZGl0aW5nKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5lbXB0eVJvd0FkZGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl90YWJsZS5zYXZlLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUuY2FuY2VsLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUucHJlc2V0Q2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VhcmNoSW5wdXRUZXh0ID0gc3RhdGUuc2VhcmNoSW5wdXQ/LnRleHQgPz8gJyc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2V4cGFuZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUuZXhwYW5kQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29sbGFwc2VBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlLmNvbGxhcHNlQWxsKCk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlXG4gICAgbGV0LWNvdW50ZXI9XCJjb3VudGVyXCJcbiAgICBsZXQtc29ydGFibGU9XCJzb3J0YWJsZVwiXG4gICAgbGV0LWZpbHRlcmFibGU9XCJmaWx0ZXJhYmxlXCJcbiAgICBsZXQtZ3JvdXBhYmxlPVwiZ3JvdXBhYmxlXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuPlxuICAgIDxmZC10b29sYmFyXG4gICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgW2NsZWFyQm9yZGVyXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVJZF09XCJ0YWJsZVRvb2xiYXJUaXRsZUlkXCJcbiAgICAgICAgW3RpdGxlXT1cInRpdGxlICYmICFoaWRlSXRlbUNvdW50ID8gdGl0bGUgKyAnICgnICsgKGNvdW50ZXIgfCBhc3luYykgKyAnKScgOiB0aXRsZVwiXG4gICAgICAgIFtzaG91bGRPdmVyZmxvd109XCJzaG91bGRPdmVyZmxvd1wiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50XCI+XG4gICAgICAgICAgICA8c3BhbiBmZC10b29sYmFyLWl0ZW0gZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3IgKm5nSWY9XCIhIXRpdGxlIHx8ICFoaWRlSXRlbUNvdW50XCI+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50Ll9jb250ZW50VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxmZC10b29sYmFyLXNwYWNlcj48L2ZkLXRvb2xiYXItc3BhY2VyPlxuXG4gICAgICAgIDxmZHAtc2VhcmNoLWZpZWxkXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVTZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMTUuNXJlbVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhclNlYXJjaFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiX3NlYXJjaElucHV0VGV4dFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiISEodGFibGVMb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwic2VhcmNoU3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJzZWFyY2hGaWVsZEFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsbGVkQnldPVwic2VhcmNoRmllbGRBcmlhTGFiZWwgPyBudWxsIDogdGFibGVUb29sYmFyVGl0bGVJZFwiXG4gICAgICAgICAgICAoc2VhcmNoU3VibWl0KT1cInN1Ym1pdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjYW5jZWxTZWFyY2gpPVwic3VibWl0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgW2Rpc2FibGVTdWdnZXN0aW9uc0ZvdW5kQW5ub3VuY2VyXT1cInRydWVcIlxuICAgICAgICA+PC9mZHAtc2VhcmNoLWZpZWxkPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0TW9kZSAhPT0gJ25vbmUnXCI+XG4gICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkNyZWF0ZUJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2FkZFJvdygpXCJcbiAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dTYXZlQnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25TYXZlQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9zaG93U2F2ZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfc2F2ZVJvd3MoKVwiXG4gICAgICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3I+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cbiAgICAgICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkNhbmNlbEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9jYW5jZWxFZGl0aW5nKClcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxmZC10b29sYmFyLXNlcGFyYXRvclxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICB0YWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50IHx8XG4gICAgICAgICAgICAgICAgICAgIChzb3J0YWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZmlsdGVyYWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZ3JvdXBhYmxlIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgICAgIChjb2x1bW5zIHwgYXN5bmMpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8c3BhbiBmZC10b29sYmFyLWl0ZW0gKm5nSWY9XCJ0YWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50XCIgY2xhc3M9XCJmZHAtdGFibGUtdG9vbGJhci1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVUb29sYmFyQWN0aW9uc0NvbXBvbmVudC5jb250ZW50VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgc2hvd0V4cGFuZENvbGxhcHNlQnV0dG9ucyB8fFxuICAgICAgICAgICAgICAgIChzb3J0YWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgIChmaWx0ZXJhYmxlIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgKGdyb3VwYWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgIChjb2x1bW5zIHwgYXN5bmMpXG4gICAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3JcbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50XCJcbiAgICAgICAgICAgID48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0V4cGFuZENvbGxhcHNlQnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIGdseXBoPVwiZXhwYW5kLWFsbFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfZXhwYW5kQWxsKClcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkV4cGFuZEFsbEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uRXhwYW5kQWxsQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICAgICBnbHlwaD1cImNvbGxhcHNlLWFsbFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfY29sbGFwc2VBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uQ29sbGFwc2VBbGxCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkNvbGxhcHNlQWxsQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0YWJsZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBnbHlwaD1cInNvcnRcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uU29ydEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Tb3J0QnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImRpYWxvZ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3J0aW5nKClcIlxuICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyYWJsZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25GaWx0ZXJCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uRmlsdGVyQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImRpYWxvZ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWx0ZXJpbmcoKVwiXG4gICAgICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJncm91cGFibGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJncm91cC0yXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkdyb3VwQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkdyb3VwQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImRpYWxvZ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Hcm91cGluZygpXCJcbiAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbnMgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJhY3Rpb24tc2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uQ29sdW1uc0J1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Db2x1bW5zQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImRpYWxvZ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Db2x1bW5zKClcIlxuICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9mZC10b29sYmFyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -806,6 +806,17 @@ class FormFieldComponent {
806
806
  return typeof hintOptions === 'string';
807
807
  }
808
808
  /** @hidden */
809
+ _getLabelledBy() {
810
+ let retVal = 'fdp-form-label-' + this.id;
811
+ if (this.hasErrors() && this.groupedErrors.length > 0) {
812
+ retVal = retVal + ' fdp-form-message-grouped-errors-' + this.id;
813
+ }
814
+ if (this.groupedErrors.length === 0 && this.hasErrors() && this.i18Strings) {
815
+ retVal = retVal + ' fdp-form-message-error-' + this.id;
816
+ }
817
+ return retVal;
818
+ }
819
+ /** @hidden */
809
820
  _validateErrorHandler() {
810
821
  if (this._editable &&
811
822
  this.control &&
@@ -938,10 +949,10 @@ class FormFieldComponent {
938
949
  }
939
950
  }
940
951
  FormFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormGroupContainer, optional: true }, { token: i1.FormFieldGroup, optional: true }, { token: RESPONSIVE_BREAKPOINTS_CONFIG, optional: true }, { token: i1.ResponsiveBreakpointsService }, { token: FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT }, { token: FDP_FORM_FIELD_HINT_LAYOUT_CONFIG }, { token: FormFieldLayoutService, self: true }, { token: FormFieldLayoutService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
941
- FormFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FormFieldComponent, selector: "fdp-form-field", inputs: { label: "label", id: "id", hintPlacement: "hintPlacement", hint: "hint", labelLayout: "labelLayout", noLabelLayout: "noLabelLayout", validators: "validators", rank: "rank", placeholder: "placeholder", column: "column", columnLayout: "columnLayout", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", i18Strings: "i18Strings", required: "required", editable: "editable", columns: "columns", disabled: "disabled", colon: "colon", formGroupContainer: "formGroupContainer" }, outputs: { onChange: "onChange", onColumnChange: "onColumnChange" }, providers: [formFieldProvider$1, formGroupChildProvider$2, FormFieldLayoutService], queries: [{ propertyName: "formFieldExtras", first: true, predicate: FormFieldControlExtrasComponent, descendants: true, read: ElementRef }, { propertyName: "_errorDirectiveQuery", predicate: FormFieldErrorDirective }], viewQueries: [{ propertyName: "renderer", first: true, predicate: ["renderer"], descendants: true, static: true }, { propertyName: "labelCol", first: true, predicate: ["labelCol"], descendants: true }, { propertyName: "inputMessageGroup", first: true, predicate: InputMessageGroupWithTemplate, descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n *ngIf=\"!noLabelLayout\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n <ng-container *ngTemplateOutlet=\"withFormMessage\"></ng-container>\n <ng-container *ngTemplateOutlet=\"gapTemplate\"></ng-container>\n </div>\n <span aria-hidden=\"true\" style=\"display: none\" [id]=\"'fdp-form-hint-' + id\">\n <ng-container *ngIf=\"isStringHint(hintOptions.content); else hintTemplate\">\n {{ hintOptions.content }}\n </ng-container>\n <ng-template #hintTemplate>\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n </ng-template>\n </span>\n</ng-template>\n\n<ng-template #withFormMessage>\n <fdp-input-message-group\n class=\"fd-col\"\n [class]=\"_fieldColumnLayoutClass\"\n [attr.aria-labelledby]=\"'fdp-form-label-' + id\"\n >\n <!--\n Todo: we should extend this on FormGroup Level and have error trigger strategy that will be applied to\n all the field e.g.: [triggers]=\"['mouseenter', 'mouseleave']\"\n -->\n\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n <ng-container *ngIf=\"hasErrors() && groupedErrors.length > 0\">\n <fd-form-message *ngFor=\"let error of groupedErrors\" [type]=\"error.directive.type\">\n <ng-template\n [ngIf]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n <ng-container *ngIf=\"error.directive._headingTemplateRef && error.directive._descriptionTemplateRef\">\n <br />\n </ng-container>\n <ng-template\n [ngIf]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n </fd-form-message>\n </ng-container>\n\n <fd-form-message *ngIf=\"groupedErrors.length === 0 && hasErrors() && i18Strings\" type=\"error\">\n <ng-container *ngTemplateOutlet=\"i18Strings; context: { $implicit: control?.ngControl?.errors }\">\n </ng-container>\n </fd-form-message>\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #labelTemplate>\n <ng-container *ngIf=\"hintTarget === 'label'; else withoutHint\">\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-container>\n <ng-template #withoutHint>\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-template>\n</ng-template>\n\n<ng-template #gapTemplate>\n <ng-container *ngIf=\"hintTarget === 'input' && hintOptions.content; else withoutHint\">\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n </ng-container>\n <ng-template #withoutHint>\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n </ng-template>\n</ng-template>\n", styles: [".fd-form-label__wrapper{display:flex;width:100%;white-space:nowrap}.fd-form-field-inline-help-container{overflow:visible!important}.fd-form-field-inline-help-container [class*=sap-icon]{margin:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i4.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "checkbox", "radio", "alignLabelEnd", "inlineHelpTitle", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: i4.FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "directive", type: i5.InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["triggers", "noArrow", "closeOnEscapeKey", "closeOnOutsideClick", "fd-inline-help", "fd-inline-help-template"] }, { kind: "component", type: i6.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i7.LinkComponent, selector: "[fdLink], [fd-link], [fd-breadcrumb-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "component", type: InputMessageGroupWithTemplate, selector: "fdp-input-message-group" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
952
+ FormFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FormFieldComponent, selector: "fdp-form-field", inputs: { label: "label", id: "id", hintPlacement: "hintPlacement", hint: "hint", labelLayout: "labelLayout", noLabelLayout: "noLabelLayout", validators: "validators", rank: "rank", placeholder: "placeholder", column: "column", columnLayout: "columnLayout", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", i18Strings: "i18Strings", required: "required", editable: "editable", columns: "columns", disabled: "disabled", colon: "colon", formGroupContainer: "formGroupContainer" }, outputs: { onChange: "onChange", onColumnChange: "onColumnChange" }, providers: [formFieldProvider$1, formGroupChildProvider$2, FormFieldLayoutService], queries: [{ propertyName: "formFieldExtras", first: true, predicate: FormFieldControlExtrasComponent, descendants: true, read: ElementRef }, { propertyName: "_errorDirectiveQuery", predicate: FormFieldErrorDirective }], viewQueries: [{ propertyName: "renderer", first: true, predicate: ["renderer"], descendants: true, static: true }, { propertyName: "labelCol", first: true, predicate: ["labelCol"], descendants: true }, { propertyName: "inputMessageGroup", first: true, predicate: InputMessageGroupWithTemplate, descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n *ngIf=\"!noLabelLayout\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n <ng-container *ngTemplateOutlet=\"withFormMessage\"></ng-container>\n <ng-container *ngTemplateOutlet=\"gapTemplate\"></ng-container>\n </div>\n <span aria-hidden=\"true\" style=\"display: none\" [id]=\"'fdp-form-hint-' + id\">\n <ng-container *ngIf=\"isStringHint(hintOptions.content); else hintTemplate\">\n {{ hintOptions.content }}\n </ng-container>\n <ng-template #hintTemplate>\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n </ng-template>\n </span>\n</ng-template>\n\n<ng-template #withFormMessage>\n <fdp-input-message-group class=\"fd-col\" [class]=\"_fieldColumnLayoutClass\" [attr.aria-labelledby]=\"_getLabelledBy()\">\n <!--\n Todo: we should extend this on FormGroup Level and have error trigger strategy that will be applied to\n all the field e.g.: [triggers]=\"['mouseenter', 'mouseleave']\"\n -->\n\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n <ng-container *ngIf=\"hasErrors() && groupedErrors.length > 0\">\n <fd-form-message\n *ngFor=\"let error of groupedErrors\"\n [type]=\"error.directive.type\"\n [attr.id]=\"'fdp-form-message-grouped-errors-' + id\"\n >\n <ng-template\n [ngIf]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n <ng-container *ngIf=\"error.directive._headingTemplateRef && error.directive._descriptionTemplateRef\">\n <br />\n </ng-container>\n <ng-template\n [ngIf]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n </fd-form-message>\n </ng-container>\n\n <fd-form-message\n *ngIf=\"groupedErrors.length === 0 && hasErrors() && i18Strings\"\n type=\"error\"\n [attr.id]=\"'fdp-form-message-error-' + id\"\n >\n <ng-container *ngTemplateOutlet=\"i18Strings; context: { $implicit: control?.ngControl?.errors }\">\n </ng-container>\n </fd-form-message>\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #labelTemplate>\n <ng-container *ngIf=\"hintTarget === 'label'; else withoutHint\">\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-container>\n <ng-template #withoutHint>\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-template>\n</ng-template>\n\n<ng-template #gapTemplate>\n <ng-container *ngIf=\"hintTarget === 'input' && hintOptions.content; else withoutHint\">\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n </ng-container>\n <ng-template #withoutHint>\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n </ng-template>\n</ng-template>\n", styles: [".fd-form-label__wrapper{display:flex;width:100%;white-space:nowrap}.fd-form-field-inline-help-container{overflow:visible!important}.fd-form-field-inline-help-container [class*=sap-icon]{margin:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i4.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "checkbox", "radio", "alignLabelEnd", "inlineHelpTitle", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: i4.FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "directive", type: i5.InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["triggers", "noArrow", "closeOnEscapeKey", "closeOnOutsideClick", "fd-inline-help", "fd-inline-help-template"] }, { kind: "component", type: i6.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i7.LinkComponent, selector: "[fdLink], [fd-link], [fd-breadcrumb-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "component", type: InputMessageGroupWithTemplate, selector: "fdp-input-message-group" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
942
953
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FormFieldComponent, decorators: [{
943
954
  type: Component,
944
- args: [{ selector: 'fdp-form-field', changeDetection: ChangeDetectionStrategy.OnPush, providers: [formFieldProvider$1, formGroupChildProvider$2, FormFieldLayoutService], template: "<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n *ngIf=\"!noLabelLayout\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n <ng-container *ngTemplateOutlet=\"withFormMessage\"></ng-container>\n <ng-container *ngTemplateOutlet=\"gapTemplate\"></ng-container>\n </div>\n <span aria-hidden=\"true\" style=\"display: none\" [id]=\"'fdp-form-hint-' + id\">\n <ng-container *ngIf=\"isStringHint(hintOptions.content); else hintTemplate\">\n {{ hintOptions.content }}\n </ng-container>\n <ng-template #hintTemplate>\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n </ng-template>\n </span>\n</ng-template>\n\n<ng-template #withFormMessage>\n <fdp-input-message-group\n class=\"fd-col\"\n [class]=\"_fieldColumnLayoutClass\"\n [attr.aria-labelledby]=\"'fdp-form-label-' + id\"\n >\n <!--\n Todo: we should extend this on FormGroup Level and have error trigger strategy that will be applied to\n all the field e.g.: [triggers]=\"['mouseenter', 'mouseleave']\"\n -->\n\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n <ng-container *ngIf=\"hasErrors() && groupedErrors.length > 0\">\n <fd-form-message *ngFor=\"let error of groupedErrors\" [type]=\"error.directive.type\">\n <ng-template\n [ngIf]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n <ng-container *ngIf=\"error.directive._headingTemplateRef && error.directive._descriptionTemplateRef\">\n <br />\n </ng-container>\n <ng-template\n [ngIf]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n </fd-form-message>\n </ng-container>\n\n <fd-form-message *ngIf=\"groupedErrors.length === 0 && hasErrors() && i18Strings\" type=\"error\">\n <ng-container *ngTemplateOutlet=\"i18Strings; context: { $implicit: control?.ngControl?.errors }\">\n </ng-container>\n </fd-form-message>\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #labelTemplate>\n <ng-container *ngIf=\"hintTarget === 'label'; else withoutHint\">\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-container>\n <ng-template #withoutHint>\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-template>\n</ng-template>\n\n<ng-template #gapTemplate>\n <ng-container *ngIf=\"hintTarget === 'input' && hintOptions.content; else withoutHint\">\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n </ng-container>\n <ng-template #withoutHint>\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n </ng-template>\n</ng-template>\n", styles: [".fd-form-label__wrapper{display:flex;width:100%;white-space:nowrap}.fd-form-field-inline-help-container{overflow:visible!important}.fd-form-field-inline-help-container [class*=sap-icon]{margin:0}\n"] }]
955
+ args: [{ selector: 'fdp-form-field', changeDetection: ChangeDetectionStrategy.OnPush, providers: [formFieldProvider$1, formGroupChildProvider$2, FormFieldLayoutService], template: "<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n *ngIf=\"!noLabelLayout\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n <ng-container *ngTemplateOutlet=\"withFormMessage\"></ng-container>\n <ng-container *ngTemplateOutlet=\"gapTemplate\"></ng-container>\n </div>\n <span aria-hidden=\"true\" style=\"display: none\" [id]=\"'fdp-form-hint-' + id\">\n <ng-container *ngIf=\"isStringHint(hintOptions.content); else hintTemplate\">\n {{ hintOptions.content }}\n </ng-container>\n <ng-template #hintTemplate>\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n </ng-template>\n </span>\n</ng-template>\n\n<ng-template #withFormMessage>\n <fdp-input-message-group class=\"fd-col\" [class]=\"_fieldColumnLayoutClass\" [attr.aria-labelledby]=\"_getLabelledBy()\">\n <!--\n Todo: we should extend this on FormGroup Level and have error trigger strategy that will be applied to\n all the field e.g.: [triggers]=\"['mouseenter', 'mouseleave']\"\n -->\n\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n <ng-container *ngIf=\"hasErrors() && groupedErrors.length > 0\">\n <fd-form-message\n *ngFor=\"let error of groupedErrors\"\n [type]=\"error.directive.type\"\n [attr.id]=\"'fdp-form-message-grouped-errors-' + id\"\n >\n <ng-template\n [ngIf]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n <ng-container *ngIf=\"error.directive._headingTemplateRef && error.directive._descriptionTemplateRef\">\n <br />\n </ng-container>\n <ng-template\n [ngIf]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n </fd-form-message>\n </ng-container>\n\n <fd-form-message\n *ngIf=\"groupedErrors.length === 0 && hasErrors() && i18Strings\"\n type=\"error\"\n [attr.id]=\"'fdp-form-message-error-' + id\"\n >\n <ng-container *ngTemplateOutlet=\"i18Strings; context: { $implicit: control?.ngControl?.errors }\">\n </ng-container>\n </fd-form-message>\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #labelTemplate>\n <ng-container *ngIf=\"hintTarget === 'label'; else withoutHint\">\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-container>\n <ng-template #withoutHint>\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!(isHorizontal$ | async)\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n </ng-template>\n</ng-template>\n\n<ng-template #gapTemplate>\n <ng-container *ngIf=\"hintTarget === 'input' && hintOptions.content; else withoutHint\">\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n </ng-container>\n <ng-template #withoutHint>\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n </ng-template>\n</ng-template>\n", styles: [".fd-form-label__wrapper{display:flex;width:100%;white-space:nowrap}.fd-form-field-inline-help-container{overflow:visible!important}.fd-form-field-inline-help-container [class*=sap-icon]{margin:0}\n"] }]
945
956
  }], ctorParameters: function () {
946
957
  return [{ type: i0.ChangeDetectorRef }, { type: i1.FormGroupContainer, decorators: [{
947
958
  type: Optional
@@ -6710,6 +6721,14 @@ class ComboboxComponent extends BaseCombobox {
6710
6721
  }
6711
6722
  this.isOpenChangeHandle(false);
6712
6723
  }
6724
+ /** @hidden */
6725
+ _getLabelledBy() {
6726
+ let retVal = this.ariaLabelledBy;
6727
+ if (this.stateMessage) {
6728
+ retVal = retVal + ' fdp-list-message-combobox-state-message-' + this.id;
6729
+ }
6730
+ return retVal;
6731
+ }
6713
6732
  /** @hidden if not selected update model */
6714
6733
  _checkAndUpdate(modelValue) {
6715
6734
  if (this.isSelectedOptionItem(modelValue)) {
@@ -6751,13 +6770,13 @@ ComboboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", versio
6751
6770
  ComboboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ComboboxComponent, selector: "fdp-combobox", outputs: { selectionChange: "selectionChange" }, providers: [
6752
6771
  { provide: FD_FORM_FIELD_CONTROL, useExisting: ComboboxComponent, multi: true },
6753
6772
  contentDensityObserverProviders()
6754
- ], viewQueries: [{ propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["controlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"mobile ? mobileTemplate : desktopTemplate\"></ng-container>\n\n<ng-template #desktopTemplate>\n <fd-popover\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"autoResize ? null : minWidth\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n additionalBodyClass=\"fdp-combobox__popover\"\n >\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"_suggestions.length === 0\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #mobileTemplate>\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [state]=\"mobile && isOpen ? null : state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [isControl]=\"true\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled\"\n [glyphAriaLabel]=\"ariaLabel\"\n (click)=\"openInMobileMode()\"\n >\n <input\n #searchInputElement\n fdp-auto-complete\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n (onComplete)=\"_onCompleteTerm($event)\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-required]=\"required\"\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [ngModel]=\"inputText\"\n (ngModelChange)=\"searchTermChanged($event)\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"_onBlur($event)\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n <div class=\"fdp-combobox__count-list-results\" role=\"status\" *ngIf=\"isOpen\">\n <ng-container *ngIf=\"_flatSuggestions?.length || '0' as count\">\n {{\n (count === 1\n ? 'platformCombobox.countListResultsSingular'\n : 'platformCombobox.countListResultsPlural'\n ) | fdTranslate : { count: count }\n }}\n </ng-container>\n </div>\n <fd-form-message\n *ngIf=\"mobile || isOpen ? null : !!stateMessage\"\n [type]=\"state\"\n [innerHtml]=\"stateMessage\"\n ></fd-form-message>\n </fd-form-input-message-group>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n [hasMessage]=\"!!stateMessage\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-combobox__list {{ !!stateMessage && 'fdp-combobox__list--message' }}\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [byline]=\"byline\"\n [attr.aria-labelledby]=\"id + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [style.maxWidth]=\"autoResize && maxWidth + 'px'\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n (keydown.escape)=\"_close()\"\n >\n <li\n *ngIf=\"stateMessage\"\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n ></li>\n\n <ng-content></ng-content>\n <ng-container *ngIf=\"isGroup\">\n <ng-container *ngFor=\"let group of _suggestions\">\n <ng-container *ngIf=\"!groupItemTemplate\">\n <li fd-list-group-header role=\"option\">\n <span fd-list-title [attr.title]=\"group.label\">{{ group.label }}</span>\n </li>\n </ng-container>\n\n <ng-container *ngIf=\"groupItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-container>\n </ng-container>\n\n <li\n *ngFor=\"let optionItem of group.children; let i = index\"\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!isGroup\">\n <li\n *ngFor=\"let optionItem of _suggestions; let i = index\"\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n <ng-container\n *ngIf=\"isSelectedOptionItem(optionItem) && !!selectedItemTemplate\"\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n\n <ng-container *ngIf=\"!(isSelectedOptionItem(optionItem) && selectedItemTemplate)\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-container>\n\n <ng-container\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n <ng-container *ngIf=\"!optionItemTemplate\">\n <span [attr.title]=\"optionItem.label\" [innerHTML]=\"optionItem.label | highlight : inputText\"></span>\n </ng-container>\n\n <ng-container *ngIf=\"optionItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n <ng-container *ngIf=\"showSecondaryText\">\n <ng-container *ngIf=\"!secondaryItemTemplate\">\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"secondaryItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [".fdp-combobox__count-list-results{position:absolute;opacity:0;z-index:-1}.fdp-combobox__list .fd-list__item{justify-content:space-between}.fdp-combobox__list .fd-list__item span{overflow:hidden;text-overflow:ellipsis;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.InputGroupComponent, selector: "fd-input-group", inputs: ["inputTemplate", "placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledby", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i10.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: i7$1.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i7$1.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText", "ariaRole", "preventClick"], outputs: ["keyDown"] }, { kind: "directive", type: i7$1.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i7$1.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "directive", type: i7$1.ListSecondaryDirective, selector: "[fd-list-secondary] ,[fdListSecondary]" }, { kind: "directive", type: i7$1.ListMessageDirective, selector: "[fd-list-message], [fdListMessage]", inputs: ["type", "class"] }, { kind: "component", type: i2.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i2.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i2.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "directive", type: AutoCompleteDirective, selector: "[fdp-auto-complete]", inputs: ["options", "inputText", "mobile"], outputs: ["onComplete"] }, { kind: "component", type: i4.FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: i4.FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen", "preventSpaceKeyScroll"], outputs: ["isOpenChange"] }, { kind: "pipe", type: i3$2.SearchHighlightPipe, name: "highlight" }, { kind: "pipe", type: i5$1.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6773
+ ], viewQueries: [{ propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["controlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"mobile ? mobileTemplate : desktopTemplate\"></ng-container>\n\n<ng-template #desktopTemplate>\n <fd-popover\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"autoResize ? null : minWidth\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n additionalBodyClass=\"fdp-combobox__popover\"\n >\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"_suggestions.length === 0\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #mobileTemplate>\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [state]=\"mobile && isOpen ? null : state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [isControl]=\"true\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled\"\n [glyphAriaLabel]=\"ariaLabel\"\n (click)=\"openInMobileMode()\"\n >\n <input\n #searchInputElement\n fdp-auto-complete\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n (onComplete)=\"_onCompleteTerm($event)\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"_getLabelledBy()\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-required]=\"required\"\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [ngModel]=\"inputText\"\n (ngModelChange)=\"searchTermChanged($event)\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"_onBlur($event)\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n <div class=\"fdp-combobox__count-list-results\" role=\"status\" *ngIf=\"isOpen\">\n <ng-container *ngIf=\"_flatSuggestions?.length || '0' as count\">\n {{\n (count === 1\n ? 'platformCombobox.countListResultsSingular'\n : 'platformCombobox.countListResultsPlural'\n ) | fdTranslate : { count: count }\n }}\n </ng-container>\n </div>\n <fd-form-message\n *ngIf=\"mobile || isOpen ? null : !!stateMessage\"\n [type]=\"state\"\n [innerHtml]=\"stateMessage\"\n [attr.id]=\"'fdp-list-message-combobox-state-message-' + id\"\n ></fd-form-message>\n </fd-form-input-message-group>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n [hasMessage]=\"!!stateMessage\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-combobox__list {{ !!stateMessage && 'fdp-combobox__list--message' }}\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [byline]=\"byline\"\n [attr.aria-labelledby]=\"id + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [style.maxWidth]=\"autoResize && maxWidth + 'px'\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n (keydown.escape)=\"_close()\"\n >\n <li\n *ngIf=\"stateMessage\"\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n ></li>\n\n <ng-content></ng-content>\n <ng-container *ngIf=\"isGroup\">\n <ng-container *ngFor=\"let group of _suggestions\">\n <ng-container *ngIf=\"!groupItemTemplate\">\n <li fd-list-group-header role=\"option\">\n <span fd-list-title [attr.title]=\"group.label\">{{ group.label }}</span>\n </li>\n </ng-container>\n\n <ng-container *ngIf=\"groupItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-container>\n </ng-container>\n\n <li\n *ngFor=\"let optionItem of group.children; let i = index\"\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!isGroup\">\n <li\n *ngFor=\"let optionItem of _suggestions; let i = index\"\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n <ng-container\n *ngIf=\"isSelectedOptionItem(optionItem) && !!selectedItemTemplate\"\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n\n <ng-container *ngIf=\"!(isSelectedOptionItem(optionItem) && selectedItemTemplate)\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-container>\n\n <ng-container\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n <ng-container *ngIf=\"!optionItemTemplate\">\n <span [attr.title]=\"optionItem.label\" [innerHTML]=\"optionItem.label | highlight : inputText\"></span>\n </ng-container>\n\n <ng-container *ngIf=\"optionItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n <ng-container *ngIf=\"showSecondaryText\">\n <ng-container *ngIf=\"!secondaryItemTemplate\">\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"secondaryItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [".fdp-combobox__count-list-results{position:absolute;opacity:0;z-index:-1}.fdp-combobox__list .fd-list__item{justify-content:space-between}.fdp-combobox__list .fd-list__item span{overflow:hidden;text-overflow:ellipsis;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.InputGroupComponent, selector: "fd-input-group", inputs: ["inputTemplate", "placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledby", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i10.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: i7$1.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i7$1.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText", "ariaRole", "preventClick"], outputs: ["keyDown"] }, { kind: "directive", type: i7$1.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i7$1.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "directive", type: i7$1.ListSecondaryDirective, selector: "[fd-list-secondary] ,[fdListSecondary]" }, { kind: "directive", type: i7$1.ListMessageDirective, selector: "[fd-list-message], [fdListMessage]", inputs: ["type", "class"] }, { kind: "component", type: i2.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i2.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i2.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "directive", type: AutoCompleteDirective, selector: "[fdp-auto-complete]", inputs: ["options", "inputText", "mobile"], outputs: ["onComplete"] }, { kind: "component", type: i4.FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: i4.FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen", "preventSpaceKeyScroll"], outputs: ["isOpenChange"] }, { kind: "pipe", type: i3$2.SearchHighlightPipe, name: "highlight" }, { kind: "pipe", type: i5$1.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6755
6774
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ComboboxComponent, decorators: [{
6756
6775
  type: Component,
6757
6776
  args: [{ selector: 'fdp-combobox', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
6758
6777
  { provide: FD_FORM_FIELD_CONTROL, useExisting: ComboboxComponent, multi: true },
6759
6778
  contentDensityObserverProviders()
6760
- ], template: "<ng-container *ngTemplateOutlet=\"mobile ? mobileTemplate : desktopTemplate\"></ng-container>\n\n<ng-template #desktopTemplate>\n <fd-popover\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"autoResize ? null : minWidth\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n additionalBodyClass=\"fdp-combobox__popover\"\n >\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"_suggestions.length === 0\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #mobileTemplate>\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [state]=\"mobile && isOpen ? null : state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [isControl]=\"true\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled\"\n [glyphAriaLabel]=\"ariaLabel\"\n (click)=\"openInMobileMode()\"\n >\n <input\n #searchInputElement\n fdp-auto-complete\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n (onComplete)=\"_onCompleteTerm($event)\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-required]=\"required\"\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [ngModel]=\"inputText\"\n (ngModelChange)=\"searchTermChanged($event)\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"_onBlur($event)\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n <div class=\"fdp-combobox__count-list-results\" role=\"status\" *ngIf=\"isOpen\">\n <ng-container *ngIf=\"_flatSuggestions?.length || '0' as count\">\n {{\n (count === 1\n ? 'platformCombobox.countListResultsSingular'\n : 'platformCombobox.countListResultsPlural'\n ) | fdTranslate : { count: count }\n }}\n </ng-container>\n </div>\n <fd-form-message\n *ngIf=\"mobile || isOpen ? null : !!stateMessage\"\n [type]=\"state\"\n [innerHtml]=\"stateMessage\"\n ></fd-form-message>\n </fd-form-input-message-group>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n [hasMessage]=\"!!stateMessage\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-combobox__list {{ !!stateMessage && 'fdp-combobox__list--message' }}\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [byline]=\"byline\"\n [attr.aria-labelledby]=\"id + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [style.maxWidth]=\"autoResize && maxWidth + 'px'\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n (keydown.escape)=\"_close()\"\n >\n <li\n *ngIf=\"stateMessage\"\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n ></li>\n\n <ng-content></ng-content>\n <ng-container *ngIf=\"isGroup\">\n <ng-container *ngFor=\"let group of _suggestions\">\n <ng-container *ngIf=\"!groupItemTemplate\">\n <li fd-list-group-header role=\"option\">\n <span fd-list-title [attr.title]=\"group.label\">{{ group.label }}</span>\n </li>\n </ng-container>\n\n <ng-container *ngIf=\"groupItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-container>\n </ng-container>\n\n <li\n *ngFor=\"let optionItem of group.children; let i = index\"\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!isGroup\">\n <li\n *ngFor=\"let optionItem of _suggestions; let i = index\"\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n <ng-container\n *ngIf=\"isSelectedOptionItem(optionItem) && !!selectedItemTemplate\"\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n\n <ng-container *ngIf=\"!(isSelectedOptionItem(optionItem) && selectedItemTemplate)\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-container>\n\n <ng-container\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n <ng-container *ngIf=\"!optionItemTemplate\">\n <span [attr.title]=\"optionItem.label\" [innerHTML]=\"optionItem.label | highlight : inputText\"></span>\n </ng-container>\n\n <ng-container *ngIf=\"optionItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n <ng-container *ngIf=\"showSecondaryText\">\n <ng-container *ngIf=\"!secondaryItemTemplate\">\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"secondaryItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [".fdp-combobox__count-list-results{position:absolute;opacity:0;z-index:-1}.fdp-combobox__list .fd-list__item{justify-content:space-between}.fdp-combobox__list .fd-list__item span{overflow:hidden;text-overflow:ellipsis;width:100%}\n"] }]
6779
+ ], template: "<ng-container *ngTemplateOutlet=\"mobile ? mobileTemplate : desktopTemplate\"></ng-container>\n\n<ng-template #desktopTemplate>\n <fd-popover\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"autoResize ? null : minWidth\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n additionalBodyClass=\"fdp-combobox__popover\"\n >\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"_suggestions.length === 0\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #mobileTemplate>\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [state]=\"mobile && isOpen ? null : state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [isControl]=\"true\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled\"\n [glyphAriaLabel]=\"ariaLabel\"\n (click)=\"openInMobileMode()\"\n >\n <input\n #searchInputElement\n fdp-auto-complete\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n (onComplete)=\"_onCompleteTerm($event)\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"_getLabelledBy()\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-required]=\"required\"\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [ngModel]=\"inputText\"\n (ngModelChange)=\"searchTermChanged($event)\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"_onBlur($event)\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n <div class=\"fdp-combobox__count-list-results\" role=\"status\" *ngIf=\"isOpen\">\n <ng-container *ngIf=\"_flatSuggestions?.length || '0' as count\">\n {{\n (count === 1\n ? 'platformCombobox.countListResultsSingular'\n : 'platformCombobox.countListResultsPlural'\n ) | fdTranslate : { count: count }\n }}\n </ng-container>\n </div>\n <fd-form-message\n *ngIf=\"mobile || isOpen ? null : !!stateMessage\"\n [type]=\"state\"\n [innerHtml]=\"stateMessage\"\n [attr.id]=\"'fdp-list-message-combobox-state-message-' + id\"\n ></fd-form-message>\n </fd-form-input-message-group>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n [hasMessage]=\"!!stateMessage\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-combobox__list {{ !!stateMessage && 'fdp-combobox__list--message' }}\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [byline]=\"byline\"\n [attr.aria-labelledby]=\"id + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [style.maxWidth]=\"autoResize && maxWidth + 'px'\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n (keydown.escape)=\"_close()\"\n >\n <li\n *ngIf=\"stateMessage\"\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n ></li>\n\n <ng-content></ng-content>\n <ng-container *ngIf=\"isGroup\">\n <ng-container *ngFor=\"let group of _suggestions\">\n <ng-container *ngIf=\"!groupItemTemplate\">\n <li fd-list-group-header role=\"option\">\n <span fd-list-title [attr.title]=\"group.label\">{{ group.label }}</span>\n </li>\n </ng-container>\n\n <ng-container *ngIf=\"groupItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-container>\n </ng-container>\n\n <li\n *ngFor=\"let optionItem of group.children; let i = index\"\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!isGroup\">\n <li\n *ngFor=\"let optionItem of _suggestions; let i = index\"\n (click)=\"handleOptionItem(optionItem)\"\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-container\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n <ng-container\n *ngIf=\"isSelectedOptionItem(optionItem) && !!selectedItemTemplate\"\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n\n <ng-container *ngIf=\"!(isSelectedOptionItem(optionItem) && selectedItemTemplate)\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-container>\n\n <ng-container\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n <ng-container *ngIf=\"!optionItemTemplate\">\n <span [attr.title]=\"optionItem.label\" [innerHTML]=\"optionItem.label | highlight : inputText\"></span>\n </ng-container>\n\n <ng-container *ngIf=\"optionItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n <ng-container *ngIf=\"showSecondaryText\">\n <ng-container *ngIf=\"!secondaryItemTemplate\">\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight : inputText\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"secondaryItemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [".fdp-combobox__count-list-results{position:absolute;opacity:0;z-index:-1}.fdp-combobox__list .fd-list__item{justify-content:space-between}.fdp-combobox__list .fd-list__item span{overflow:hidden;text-overflow:ellipsis;width:100%}\n"] }]
6761
6780
  }], ctorParameters: function () {
6762
6781
  return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$1.NgControl, decorators: [{
6763
6782
  type: Optional